<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://nbittrpgwiki.pynappo.xyz/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Pynappo</id>
	<title>NBITTRPG Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://nbittrpgwiki.pynappo.xyz/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Pynappo"/>
	<link rel="alternate" type="text/html" href="https://nbittrpgwiki.pynappo.xyz/Special:Contributions/Pynappo"/>
	<updated>2026-11-08T20:11:04Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.46.0</generator>
	<entry>
		<id>https://nbittrpgwiki.pynappo.xyz/index.php?title=MediaWiki:Timeless.css&amp;diff=3330</id>
		<title>MediaWiki:Timeless.css</title>
		<link rel="alternate" type="text/html" href="https://nbittrpgwiki.pynappo.xyz/index.php?title=MediaWiki:Timeless.css&amp;diff=3330"/>
		<updated>2026-10-06T03:13:12Z</updated>

		<summary type="html">&lt;p&gt;Pynappo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* All CSS here will be loaded for users of the Timeless skin */&lt;br /&gt;
/* Fonts */&lt;br /&gt;
@import url(&#039;https://fonts.googleapis.com/css2?family=Rosario:ital,wght@0,300..700;1,300..700&amp;amp;display=swap&#039;);&lt;br /&gt;
@import url(&#039;https://fonts.googleapis.com/css2?family=Rubik:ital,wght@0,300..900;1,300..900&amp;amp;display=swap&#039;);&lt;br /&gt;
@import url(&#039;https://fonts.googleapis.com/css2?family=Lora:ital,wght@0,400..700;1,400..700&amp;amp;display=swap&#039;);&lt;br /&gt;
 &lt;br /&gt;
:root {&lt;br /&gt;
    --main-font: &#039;Rubik&#039;;&lt;br /&gt;
    --header-font: &#039;Rubik&#039;;&lt;br /&gt;
    --title-font: &#039;Lora&#039;;&lt;br /&gt;
    &lt;br /&gt;
    /* COLORS */&lt;br /&gt;
	--background-color: rgb(227, 227, 227);&lt;br /&gt;
	--content-color: rgba(255, 250, 242);&lt;br /&gt;
	--text-color: rgb(61, 44, 35, 1);&lt;br /&gt;
	--link-color: #8346a0;&lt;br /&gt;
    --link-hover-color: #5e188a;&lt;br /&gt;
    --link-new-color: #ff3874;&lt;br /&gt;
    --text-stroke-color: #fff;&lt;br /&gt;
    &lt;br /&gt;
    --search-bg-color: rgba(255, 250, 242);;&lt;br /&gt;
    --border-color: #be7e32;&lt;br /&gt;
    &lt;br /&gt;
	--header-color: rgb(104 71 53);&lt;br /&gt;
	--header-text-color: rgb(255, 255, 255);&lt;br /&gt;
    &lt;br /&gt;
    --sidebar-header-color: #6f4229;&lt;br /&gt;
    --sidebar-header-text: #fff;&lt;br /&gt;
    &lt;br /&gt;
    --gradient-start: rgb(225, 225, 225);&lt;br /&gt;
    --gradient-end: rgb(111, 111, 111);&lt;br /&gt;
    --banner-color: #743f95;&lt;br /&gt;
    &lt;br /&gt;
	--footer-color: #201a16;&lt;br /&gt;
    --footer-text-color:#977b50;&lt;br /&gt;
    --footer-link-color:#a88e67;&lt;br /&gt;
    --footer-link-hover-color:#d9b299;&lt;br /&gt;
    &lt;br /&gt;
    --cdx-button-color: #bea48b;&lt;br /&gt;
    --cdx-button-hover: #f5dfca;&lt;br /&gt;
    &lt;br /&gt;
    --button-color: rgba(104, 83, 68, 1);&lt;br /&gt;
	--button-text-color: rgb(255, 255, 255);&lt;br /&gt;
}&lt;br /&gt;
/* BACKGROUNDS */&lt;br /&gt;
.ddd-quote-bg {&lt;br /&gt;
	background-image: url(&amp;quot;https://nbittrpgwiki.pynappo.xyz/images/9/98/DDDTextbox2.png&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* || GENERAL */&lt;br /&gt;
body {&lt;br /&gt;
    font-family: var(--main-font);&lt;br /&gt;
    color: var(--text-color);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
pre, code {&lt;br /&gt;
	font-family:monospace;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
a:not(.new),&lt;br /&gt;
#mw-content a:not(.new),&lt;br /&gt;
a:visited,&lt;br /&gt;
a:visited:hover {&lt;br /&gt;
	color: var(--link-color);&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
.mw-wiki-title:hover {&lt;br /&gt;
    color: var(--header-text-color) !important;&lt;br /&gt;
    text-decoration:none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.new a {&lt;br /&gt;
    color: var(--link-new-color);&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
/* || HEADINGS */    &lt;br /&gt;
.mw-heading  {&lt;br /&gt;
    h1, h2, h3, h4, h5 {&lt;br /&gt;
    font-family: var(--header-font);&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
.mw-body  {&lt;br /&gt;
    h1, h2, h3, h4, h5 {&lt;br /&gt;
    font-family: var(--header-font);&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    }&lt;br /&gt;
    h1.firstHeading {&lt;br /&gt;
        border-bottom: none;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* || HEADER */&lt;br /&gt;
#mw-header-container {&lt;br /&gt;
    background-color: var(--header-color);&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
#p-banner.mw-wiki-title {&lt;br /&gt;
    color: var(--header-text-color);&lt;br /&gt;
    font-family: var(--title-font);&lt;br /&gt;
    font-weight:bold;&lt;br /&gt;
    font-size: 18px;&lt;br /&gt;
    margin-top: -0.2em;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
#simpleSearch {&lt;br /&gt;
    background: var(--search-bg-color);&lt;br /&gt;
    border: 1px solid var(--border-color);&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
.color-bar {&lt;br /&gt;
    width:0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* || SIDEBAR */&lt;br /&gt;
#ca-delete { display: none !important; }&lt;br /&gt;
#page-tools { display: none !important;}&lt;br /&gt;
#t-cargopagevalueslink { display:none }&lt;br /&gt;
#t-smwbrowselink { display:none }  &lt;br /&gt;
    &lt;br /&gt;
@keyframes highlight {&lt;br /&gt;
	from {&lt;br /&gt;
		background-position: 0;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	to {&lt;br /&gt;
		background-position: -100%;&lt;br /&gt;
	}&lt;br /&gt;
}    &lt;br /&gt;
/* Removes logo for now */&lt;br /&gt;
.mw-wiki-logo {&lt;br /&gt;
    display: none;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
#site-navigation .sidebar-chunk  {&lt;br /&gt;
    margin-top: 4.5em;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
#mw-site-navigation {&lt;br /&gt;
    padding-top: 0.2em;&lt;br /&gt;
    .sidebar-chunk h3 {&lt;br /&gt;
        border-bottom:none;&lt;br /&gt;
        background-color: var(--sidebar-header-color);&lt;br /&gt;
        color: var(--sidebar-header-text);&lt;br /&gt;
        padding: 0.4em 0.4em 0.4em 1.5em;&lt;br /&gt;
        clip-path: polygon(90% 50%, 100% 100%, 0% 100%, 0% 0%, 100% 0%);&lt;br /&gt;
    }&lt;br /&gt;
    .sidebar-chunk {&lt;br /&gt;
        padding-top: 1em;&lt;br /&gt;
        padding-bottom: 1em;&lt;br /&gt;
        background-color: var(--content-color);&lt;br /&gt;
        box-shadow: 0 0 8px rgba(0,0,0,0.2);&lt;br /&gt;
        h3 &amp;gt; a {&lt;br /&gt;
            color: var(--font-color);&lt;br /&gt;
        }&lt;br /&gt;
        ul &amp;gt; a:hover {&lt;br /&gt;
            animation-name: highlight;&lt;br /&gt;
            animation-duration: 0.25s;&lt;br /&gt;
            animation-fill-mode: forwards;&lt;br /&gt;
            background-size: 200%;&lt;br /&gt;
            background-image: linear-gradient(to left, #eacf1b70 50%, transparent 50%);&lt;br /&gt;
        }&lt;br /&gt;
        clip-path: polygon(100% 0, 100% 100%, 99% 98%, 95% 99%, 92% 99%, 89% 100%, 86% 99%, 83% 100%, 77% 99%, 72% 100%, 66% 98%, 62% 100%, 59% 99%, 54% 99%, 49% 100%, 46% 98%, 43% 100%, 40% 98%, 38% 100%, 35% 99%, 31% 100%, 28% 99%, 25% 99%, 22% 100%, 19% 99%, 16% 100%, 13% 99%, 10% 99%, 7% 100%, 4% 99%, 0% 100%, 0% 0%);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-related-navigation {&lt;br /&gt;
    position: sticky;&lt;br /&gt;
    top: 70px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-related-navigation .sidebar-chunk {&lt;br /&gt;
    background: var(--content-color);&lt;br /&gt;
    box-shadow: 0 0 8px rgba(0,0,0,0.2);&lt;br /&gt;
    border-radius: 20px;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
/* Edit button changes */&lt;br /&gt;
#ca-ve-edit a::before {&lt;br /&gt;
    content: &amp;quot;Visual edit&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#ca-ve-edit span {&lt;br /&gt;
    display:none;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
/* || WIKI CONTENT */&lt;br /&gt;
#mw-content-block,&lt;br /&gt;
#mw-content-container {&lt;br /&gt;
    background: linear-gradient(180deg, var(--gradient-start) 0%, rgba(0, 0, 0, 0) 100%), var(--gradient-end);&lt;br /&gt;
    background-color: var(--background-color);&lt;br /&gt;
    border-bottom: none;  &lt;br /&gt;
}    &lt;br /&gt;
    &lt;br /&gt;
#mw-content {&lt;br /&gt;
    padding-left: 1.5em;&lt;br /&gt;
    padding-right: 1.5em;&lt;br /&gt;
    box-shadow: 0 0 8px rgba(0,0,0,0.2);&lt;br /&gt;
    background-color: var(--content-color);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* || CATEGORY LINKS */&lt;br /&gt;
#catlinks {&lt;br /&gt;
    padding: 0.5em;&lt;br /&gt;
    padding-bottom: 0.1em;&lt;br /&gt;
    border: 2px solid color-mix(in srgb, var(--link-color) 30%, transparent);&lt;br /&gt;
    margin-top: 1em;&lt;br /&gt;
    margin-bottom: 1em;&lt;br /&gt;
    color: #000;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
/* || RELATED PAGES */&lt;br /&gt;
.client-js .read-more-container {&lt;br /&gt;
    padding: 0;&lt;br /&gt;
    margin: 1em;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
.read-more-container-heading {&lt;br /&gt;
    color: var(--text-color);&lt;br /&gt;
    border-bottom: 0;&lt;br /&gt;
    padding-bottom: 0.5em;&lt;br /&gt;
    font-size: 0.8em;&lt;br /&gt;
    font-weight: normal;&lt;br /&gt;
    letter-spacing: 1px;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
.cdx-card {&lt;br /&gt;
    background: var(--content-color);&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
/* || FOOTER */&lt;br /&gt;
.mw-footer-container {&lt;br /&gt;
    background-color: var(--footer-color);&lt;br /&gt;
    color: var(--footer-text-color);&lt;br /&gt;
    a {&lt;br /&gt;
        color: var(--footer-link-color);&lt;br /&gt;
        text-decoration:underline;&lt;br /&gt;
        &amp;amp;:hover {&lt;br /&gt;
            color: var(--footer-link-hover-color);&lt;br /&gt;
        }&lt;br /&gt;
        &amp;amp;.external {&lt;br /&gt;
            color: var(--footer-link-color);&lt;br /&gt;
            &amp;amp;:hover {&lt;br /&gt;
                color: var(--footer-link-hover-color);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
.cdx-button:enabled, .cdx-button.cdx-button--fake-button--enabled {&lt;br /&gt;
        background: var(--cdx-button-color);&lt;br /&gt;
        &amp;amp;:hover {&lt;br /&gt;
            background-color: var(--cdx-button-hover);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
/* || PORTABLE INFOBOXES */&lt;br /&gt;
.portable-infobox {&lt;br /&gt;
	margin-right:3px;&lt;br /&gt;
	border-radius:5px;&lt;br /&gt;
}  &lt;br /&gt;
&lt;br /&gt;
.portable-infobox .pi-navigation {&lt;br /&gt;
    paint-order: stroke fill;&lt;br /&gt;
    -webkit-text-stroke: 3px var(--text-stroke-color);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.portable-infobox .pi-item-spacing {&lt;br /&gt;
    border-radius:2px;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
.pi-section-navigation .pi-section-tab.pi-section-active, .pi-section-navigation .pi-section-tab.current, .pi-media-collection .pi-tab-link.current {&lt;br /&gt;
    color: var(--banner-text-color);&lt;br /&gt;
    border-radius:2px;&lt;br /&gt;
    border-bottom: 1px solid var(--button-text-color);&lt;br /&gt;
}&lt;br /&gt;
.portable-infobox .pi-header, .portable-infobox .pi-title {&lt;br /&gt;
    text-align: center;&lt;br /&gt;
	color: var(--button-text-color);&lt;br /&gt;
	background-color:var(--button-color);&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
.lua-infobox { &lt;br /&gt;
    .infobox-label {&lt;br /&gt;
        width: 5.5em;&lt;br /&gt;
    }&lt;br /&gt;
    .infobox-label, .infobox-data {&lt;br /&gt;
    padding: 0.1em 0.5em;&lt;br /&gt;
        text-align:left;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
/* DDD Infoboxes */&lt;br /&gt;
.mw-parser-output table.wikitable.lua-infobox.ddd-theme {&lt;br /&gt;
    border: 3px double #000;&lt;br /&gt;
    border-style: double solid;&lt;br /&gt;
    background-position-x: 700px;&lt;br /&gt;
    background-position-y: 80px;&lt;br /&gt;
    background-image: var(--ddd-bg);&lt;br /&gt;
    background-blend-mode: screen;&lt;br /&gt;
    background-size: 700%;&lt;br /&gt;
    background-color: #dadada;&lt;br /&gt;
    .infobox-title {&lt;br /&gt;
        paint-order: stroke fill;&lt;br /&gt;
        -webkit-text-stroke: 4px #000;&lt;br /&gt;
        border-top: 2px solid #000;&lt;br /&gt;
        border-bottom: 3px solid #000;&lt;br /&gt;
        box-shadow:inset 0 3px 5px 0 #ffffffa6,inset 0 -3px 5px 0 #ffffffa6;&lt;br /&gt;
        background-position-x: 900px;&lt;br /&gt;
        background-position-y: 330px;&lt;br /&gt;
        background-image: var(--ddd-bg);&lt;br /&gt;
        background-blend-mode: darken;&lt;br /&gt;
        color: #fff;&lt;br /&gt;
        padding: 0.5em;&lt;br /&gt;
        background-color: #434343;&lt;br /&gt;
        }&lt;br /&gt;
    .infobox-header {&lt;br /&gt;
        color: #fff;&lt;br /&gt;
        background-position-x: 900px;&lt;br /&gt;
        background-position-y: 430px;&lt;br /&gt;
        background-image: var(--ddd-bg);&lt;br /&gt;
        paint-order: stroke fill;&lt;br /&gt;
        -webkit-text-stroke: 4px #000;&lt;br /&gt;
        border-top: 2px solid #000;&lt;br /&gt;
        border-bottom: 3px solid #000;&lt;br /&gt;
        box-shadow:inset 0 3px 5px 0 #ffffffa6,inset 0 -3px 5px 0 #ffffffa6;&lt;br /&gt;
        background-blend-mode: darken;&lt;br /&gt;
        font-variant:small-caps;&lt;br /&gt;
        font-size:larger;&lt;br /&gt;
        background-color: #434343;&lt;br /&gt;
        }&lt;br /&gt;
    .infobox-data:not(.infobox-header) {&lt;br /&gt;
        border:none;&lt;br /&gt;
    }&lt;br /&gt;
    .infobox-label {&lt;br /&gt;
        color: #000;&lt;br /&gt;
        font-style: italic;&lt;br /&gt;
        font-variant:small-caps;&lt;br /&gt;
        font-weight:bold;&lt;br /&gt;
        }&lt;br /&gt;
    .infobox-data {&lt;br /&gt;
        border-bottom: 0;&lt;br /&gt;
        box-shadow: inset 0 -1px 5px -5px #000;&lt;br /&gt;
        font-size:smaller;&lt;br /&gt;
        }&lt;br /&gt;
    .infobox-nav {&lt;br /&gt;
        background-position-x: 540px;&lt;br /&gt;
        background-position-y: 400px;&lt;br /&gt;
        color: grey;&lt;br /&gt;
        paint-order: stroke fill;&lt;br /&gt;
        -webkit-text-stroke: 3px #fff;&lt;br /&gt;
        text-align:center;&lt;br /&gt;
        font-size:small;&lt;br /&gt;
        padding: 0.2em;&lt;br /&gt;
        }&lt;br /&gt;
    .infobox-img {&lt;br /&gt;
        text-align:center;&lt;br /&gt;
        background: var(--ddd-bg);&lt;br /&gt;
        background-position-y: 300px;&lt;br /&gt;
        background-size: 700%;&lt;br /&gt;
        background-color: #c4c4c4;  &lt;br /&gt;
        background-blend-mode: overlay;&lt;br /&gt;
        box-shadow:inset 0 3px 5px 0 #ffffffa6,inset 0 -3px 5px 0 #ffffffa6;&lt;br /&gt;
        padding: 0.25em;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* For [[Weathia: Resurrection]] */ &lt;br /&gt;
.fluidimg100 img, .fluidimg img {&lt;br /&gt;
	max-width:100%;&lt;br /&gt;
	height:auto;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
/* || PRINT COMPATIBILITY */&lt;br /&gt;
&lt;br /&gt;
@media print {&lt;br /&gt;
    :root {&lt;br /&gt;
        --background-color: rgb(0, 0, 0);&lt;br /&gt;
        --content-color: rgba(255, 255, 255);&lt;br /&gt;
        --text-color: rgb(0, 0, 0);&lt;br /&gt;
        --link-color: #7d7d7d;&lt;br /&gt;
        --link-hover-color: #bfbfbf;&lt;br /&gt;
        --link-new-color: #ff3838;&lt;br /&gt;
        --text-stroke-color: #000;&lt;br /&gt;
&lt;br /&gt;
        --search-bg-color: rgba(255, 250, 242);;&lt;br /&gt;
        --border-color: #b0b0b0;&lt;br /&gt;
&lt;br /&gt;
        --header-color: rgb(0 0 0);&lt;br /&gt;
        --header-text-color: rgb(255, 255, 255);&lt;br /&gt;
&lt;br /&gt;
        --sidebar-header-color: #fff;&lt;br /&gt;
        --sidebar-header-text: #fff;&lt;br /&gt;
&lt;br /&gt;
        --gradient-start: rgb(255, 255, 255);&lt;br /&gt;
        --gradient-end: rgb(255, 255, 255);&lt;br /&gt;
        --banner-color: #fff;&lt;br /&gt;
&lt;br /&gt;
        --footer-color: #fff;&lt;br /&gt;
        --footer-text-color:#000;&lt;br /&gt;
        --footer-link-color:#aaa;&lt;br /&gt;
        --footer-link-hover-color:#aaa;&lt;br /&gt;
&lt;br /&gt;
        --cdx-button-color: #c9c9c9;&lt;br /&gt;
        --cdx-button-hover: #fff;&lt;br /&gt;
&lt;br /&gt;
        --button-color: rgba(170, 170, 170);&lt;br /&gt;
        --button-text-color: rgb(255, 255, 255);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    #tabs,&lt;br /&gt;
    .toc,&lt;br /&gt;
    .navbox {&lt;br /&gt;
        display:none;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    #mw-content {&lt;br /&gt;
        box-shadow: none;&lt;br /&gt;
        margin:0;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .portable-infobox {&lt;br /&gt;
        border: 2px solid #000 ;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .portable-infobox .pi-navigation {&lt;br /&gt;
        -webkit-text-stroke: 0;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .portable-infobox .pi-header,&lt;br /&gt;
    #mw-content-text .pi-title {&lt;br /&gt;
        color: var(--text-color);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
/* One-sided navigation menu - MEDIAWIKI SNIPPET */&lt;br /&gt;
@media (min-width: 1340px) {&lt;br /&gt;
  #mw-content-block {&lt;br /&gt;
    display: block;&lt;br /&gt;
  }&lt;br /&gt;
  #mw-content,&lt;br /&gt;
  #content-bottom-stuff {&lt;br /&gt;
    margin-left: 14em;&lt;br /&gt;
    margin-right:1em;&lt;br /&gt;
  }&lt;br /&gt;
  #mw-content-wrapper {&lt;br /&gt;
    float: right;&lt;br /&gt;
    margin-left: -14em;&lt;br /&gt;
    width: 100%;&lt;br /&gt;
  }&lt;br /&gt;
  #mw-related-navigation {&lt;br /&gt;
    width: 14em;&lt;br /&gt;
    padding: 0 1em 0 0;&lt;br /&gt;
  }&lt;br /&gt;
  div.color-middle {&lt;br /&gt;
    margin-right: 0;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (min-width: 1100px) and (max-width: 1339px) {&lt;br /&gt;
    #mw-content,&lt;br /&gt;
    #content-bottom-stuff {&lt;br /&gt;
    margin-right:1em;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (min-width: 851px) and (max-width: 1099px) {&lt;br /&gt;
    #mw-content,&lt;br /&gt;
    #content-bottom-stuff {&lt;br /&gt;
     margin-left: 1em;&lt;br /&gt;
    margin-right:1em;&lt;br /&gt;
    }&lt;br /&gt;
    #mw-content:before {&lt;br /&gt;
        display:none;&lt;br /&gt;
    }&lt;br /&gt;
    #mw-content:after {&lt;br /&gt;
        display:none;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (max-width: 850px) {&lt;br /&gt;
    #mw-content,&lt;br /&gt;
    #content-bottom-stuff {&lt;br /&gt;
    margin-right:1em;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
@media screen and (max-width: 600px) {&lt;br /&gt;
    #mw-content,&lt;br /&gt;
    #content-bottom-stuff {&lt;br /&gt;
    margin-right:0;&lt;br /&gt;
    margin-left:-1em;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Align top colour bar with page columns */&lt;br /&gt;
.ts-inner {&lt;br /&gt;
  padding: 0 0 0 1em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Re-aligning bottom logos */&lt;br /&gt;
#mw-footer {&lt;br /&gt;
    padding-right: 1em; &lt;br /&gt;
}    &lt;br /&gt;
&lt;br /&gt;
/* Avoid cutting off letters with descenders: g,j,p,q,y */&lt;br /&gt;
#personal h2 span {&lt;br /&gt;
    height: 1.5em;&lt;br /&gt;
    position:relative;&lt;br /&gt;
    bottom:0.1em;&lt;br /&gt;
    font-family: var(--header-font);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
    #personal {&lt;br /&gt;
        color: var(--header-text-color);&lt;br /&gt;
        .dropdown {&lt;br /&gt;
            color: var(--text-color);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
/* Triangle position patch */&lt;br /&gt;
#personal h2::after {&lt;br /&gt;
   position: relative;&lt;br /&gt;
   bottom: 0.5em;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
	:root.skin-theme-clientpref-day:has(&amp;gt; body.ns-3000),&lt;br /&gt;
    :root.skin-theme-clientpref-day:has(&amp;gt; body.ns-3001),&lt;br /&gt;
    :root.skin-theme-clientpref-day:has(.ddd-theme) {&lt;br /&gt;
&lt;br /&gt;
     --header-font: &#039;Instrument Serif&#039;;&lt;br /&gt;
        &lt;br /&gt;
    /* COLORS */&lt;br /&gt;
	--background-color: rgb(55, 55, 55);&lt;br /&gt;
	--content-color: rgba(246, 246, 246);&lt;br /&gt;
	--text-color: rgb(0, 0, 0);&lt;br /&gt;
	--link-color: #7b7970;&lt;br /&gt;
    --link-hover-color: #7b7970;&lt;br /&gt;
    --link-new-color: #ff3838;&lt;br /&gt;
    --text-stroke-color: #000;&lt;br /&gt;
    &lt;br /&gt;
    --search-bg-color: rgba(237, 237, 237);;&lt;br /&gt;
    --border-color: #b0b0b0;&lt;br /&gt;
    &lt;br /&gt;
	--header-color: rgb(0 0 0);&lt;br /&gt;
	--header-text-color: rgb(255, 255, 255);&lt;br /&gt;
    &lt;br /&gt;
    --sidebar-header-color: #4c4c4c;&lt;br /&gt;
    --sidebar-header-text: #fff;&lt;br /&gt;
    &lt;br /&gt;
    --gradient-start: rgb(34, 33, 33);&lt;br /&gt;
    --gradient-end: rgb(36, 36, 36);&lt;br /&gt;
    --banner-color: #4c4c4c;&lt;br /&gt;
    &lt;br /&gt;
	--footer-color: #000;&lt;br /&gt;
    --footer-text-color:#d6d6d6;&lt;br /&gt;
    --footer-link-color:#969696;&lt;br /&gt;
    --footer-link-hover-color:#969696;&lt;br /&gt;
    &lt;br /&gt;
    --cdx-button-color: #c9c9c9;&lt;br /&gt;
    --cdx-button-hover: #fff;&lt;br /&gt;
    &lt;br /&gt;
    --button-color: rgba(76, 76, 76);&lt;br /&gt;
	--button-text-color: rgb(255, 255, 255);&lt;br /&gt;
        &lt;br /&gt;
        .mw-body .mw-heading h1, .mw-body .mw-heading h2, .mw-body .mw-heading h3, .mw-body .mw-heading h4, .mw-body .mw-heading h5, .mw-body .mw-heading h6 {&lt;br /&gt;
            letter-spacing: 0.1rem;&lt;br /&gt;
            font-variant: small-caps;&lt;br /&gt;
            font-size: 30px;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        #pt-notifications-alert .mw-echo-notifications-badge.mw-echo-notifications-badge-all-read, body:not(.skin-vector-2022) #pt-notifications-notice .mw-echo-notifications-badge.mw-echo-notifications-badge-all-read {&lt;br /&gt;
            filter:invert(1);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        #mw-content {&lt;br /&gt;
        border:1px solid #e3e3e3;&lt;br /&gt;
        background-position-y: 1600px;&lt;br /&gt;
        background-size: 1000%;&lt;br /&gt;
        background-image: var(--ddd-bg);&lt;br /&gt;
        background-blend-mode: screen;&lt;br /&gt;
        background-color: #e3e3e3;&lt;br /&gt;
        box-shadow: inset 0 0 20px #a5a5a5;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
    .mw-wiki-title {&lt;br /&gt;
        font-family: &#039;Instrument Serif&#039; !important;&lt;br /&gt;
        letter-spacing: 0.1rem;&lt;br /&gt;
        font-style:italic;&lt;br /&gt;
    }&lt;br /&gt;
        &lt;br /&gt;
        #personal h2 span {&lt;br /&gt;
            letter-spacing: 0.2rem;&lt;br /&gt;
            font-weight:bold;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        #mw-header-container {&lt;br /&gt;
        background-position-x: 70px;&lt;br /&gt;
    background-position-y: 210px;&lt;br /&gt;
        background-image: url(&#039;https://nbittrpgwiki.pynappo.xyz/images/8/8c/DDDTextbox.png&#039;);&lt;br /&gt;
        background-blend-mode: overlay;&lt;br /&gt;
        background-color: #3b3b3b;&lt;br /&gt;
        box-shadow: inset 0 0 10px #7b7b7b;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        #catlinks-sidebar {&lt;br /&gt;
                    background-image: url(https://nbittrpgwiki.pynappo.xyz/images/2/27/DDDTextureVertical.png);&lt;br /&gt;
            background-size: 300%;&lt;br /&gt;
        background-blend-mode: overlay;&lt;br /&gt;
        background-color: #222;&lt;br /&gt;
            border: 1px solid #ffffff2e;&lt;br /&gt;
            box-shadow:inset 0 3px 5px -5px #ffffffa6,inset 0 0px 5px 0 #ffffffa6;&lt;br /&gt;
            h3 {&lt;br /&gt;
                color: #fff;&lt;br /&gt;
                font-variant: small-caps;&lt;br /&gt;
                font-style: italic;&lt;br /&gt;
                text-align:center;&lt;br /&gt;
                border: 1px solid #ffffff2e;&lt;br /&gt;
                padding: 0.5em;&lt;br /&gt;
                border-radius: 12px;&lt;br /&gt;
                background-image: url(https://nbittrpgwiki.pynappo.xyz/images/2/27/DDDTextureVertical.png);&lt;br /&gt;
            background-size: 200%;&lt;br /&gt;
        background-blend-mode: overlay;&lt;br /&gt;
        background-color: #0c0c0c;&lt;br /&gt;
            }&lt;br /&gt;
            a {&lt;br /&gt;
                color: #fff;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        #mw-footer-container {&lt;br /&gt;
        background-position-x: 70px;&lt;br /&gt;
    background-position-y: 210px;&lt;br /&gt;
        background-image: url(&#039;https://nbittrpgwiki.pynappo.xyz/images/8/8c/DDDTextbox.png&#039;);&lt;br /&gt;
        background-blend-mode: overlay;&lt;br /&gt;
        background-color: #191919;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
    .read-more-container-card-list &amp;gt; li .cdx-card {&lt;br /&gt;
    background-position-x: 70px;&lt;br /&gt;
    background-position-y: 210px;&lt;br /&gt;
        background-image: url(&#039;https://nbittrpgwiki.pynappo.xyz/images/8/8c/DDDTextbox.png&#039;);&lt;br /&gt;
        background-blend-mode: overlay;&lt;br /&gt;
        background-color: #383837;&lt;br /&gt;
            border:none;&lt;br /&gt;
            box-shadow:inset 0 1px 5px -5px #ffffffa6,inset 0 0px 10px 1px #ffffffa6;&lt;br /&gt;
        transition: 0.2s;&lt;br /&gt;
        &amp;amp;:hover {&lt;br /&gt;
            filter: brightness(1.2);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
     .read-more-container-card-list &amp;gt; li:nth-child(2n+1) .cdx-card {&lt;br /&gt;
        background-position-x: 70px;&lt;br /&gt;
        background-position-y: 110px;&lt;br /&gt;
    }&lt;br /&gt;
    .read-more-container-card-list &amp;gt; li:nth-child(3n) .cdx-card {&lt;br /&gt;
        background-position-x: 400px;&lt;br /&gt;
        background-position-y: 80px;&lt;br /&gt;
    }&lt;br /&gt;
        &lt;br /&gt;
        .cdx-card__text__title,&lt;br /&gt;
        .read-more-container-heading {&lt;br /&gt;
            color: #fff;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
 .mw-first-heading {&lt;br /&gt;
        font-family: &#039;Instrument Serif&#039; !important;&lt;br /&gt;
        font-style:italic;&lt;br /&gt;
        text-transform: uppercase;&lt;br /&gt;
        color: #fff;&lt;br /&gt;
     paint-order: stroke fill;&lt;br /&gt;
     -webkit-text-stroke: 8px #000;&lt;br /&gt;
     letter-spacing: 0.2rem;&lt;br /&gt;
     text-align: center;&lt;br /&gt;
     background: linear-gradient(90deg, #000 0%, rgba(0, 0, 0, .45) 100%);&lt;br /&gt;
    mask-image:linear-gradient(to right,transparent,black 15% 85%, transparent);&lt;br /&gt;
     padding: 0.3em;&lt;br /&gt;
     box-shadow:inset 0 3px 15px -5px #ffffffa6,inset 0 0px 15px 0 #ffffffa6;&lt;br /&gt;
     border-top: 3px solid #000;&lt;br /&gt;
         border-bottom: 3px solid #000;&lt;br /&gt;
    }&lt;br /&gt;
        &lt;br /&gt;
        .toc {&lt;br /&gt;
             background-position-x: 0px;&lt;br /&gt;
    background-position-y: 270px;&lt;br /&gt;
            background-size: 650%;&lt;br /&gt;
        background-image: url(&#039;https://nbittrpgwiki.pynappo.xyz/images/8/8c/DDDTextbox.png&#039;);&lt;br /&gt;
        background-blend-mode: overlay;&lt;br /&gt;
        background-color: #6c6c6c;&lt;br /&gt;
        box-shadow:inset 0 1px 5px -5px #ffffffa6,inset 0 0px 10px 1px #ffffffa6;&lt;br /&gt;
            border-radius: 12px;&lt;br /&gt;
            color: #fff;&lt;br /&gt;
            .toctogglelabel::after {&lt;br /&gt;
                color: #fff;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        #mw-content-container {&lt;br /&gt;
            background-image: url(&#039;https://nbittrpgwiki.pynappo.xyz/images/2/21/MonochromeForest.png&#039;);&lt;br /&gt;
            background-color: #6a6866;&lt;br /&gt;
            background-blend-mode: multiply;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
    #mw-content-block {&lt;br /&gt;
        background: #000000;&lt;br /&gt;
        background: linear-gradient(90deg,rgba(0, 0, 0, 1) 5%, rgba(110, 110, 110, 0) 20%);&lt;br /&gt;
    }&lt;br /&gt;
     &lt;br /&gt;
#mw-site-navigation .sidebar-chunk .mw-portlet &amp;gt; div,&lt;br /&gt;
#mw-site-navigation .sidebar-chunk .mw-portlet-body {&lt;br /&gt;
        margin-bottom: 1em;&lt;br /&gt;
        margin-left: -0.3em;&lt;br /&gt;
    }&lt;br /&gt;
        &lt;br /&gt;
#mw-site-navigation {&lt;br /&gt;
    &amp;amp; .sidebar-chunk {&lt;br /&gt;
        clip-path:none;&lt;br /&gt;
        background-image: url(https://nbittrpgwiki.pynappo.xyz/images/2/27/DDDTextureVertical.png);&lt;br /&gt;
            background-size: 700%;&lt;br /&gt;
        background-blend-mode: overlay;&lt;br /&gt;
        background-color: #222;&lt;br /&gt;
            border:none;&lt;br /&gt;
            box-shadow:inset 0 3px 5px -5px #ffffffa6,inset 0 0px 5px 0 #ffffffa6;&lt;br /&gt;
     h3 { &lt;br /&gt;
         font-family: var(--header-font);&lt;br /&gt;
         font-variant: small-caps;&lt;br /&gt;
         font-size: 24px;&lt;br /&gt;
         letter-spacing: 0.05rem;&lt;br /&gt;
         line-height: 0.3;&lt;br /&gt;
         font-weight: bold;&lt;br /&gt;
        border-bottom: 3px solid white;&lt;br /&gt;
         margin: 0.2em 0;&lt;br /&gt;
    }&lt;br /&gt;
        li {&lt;br /&gt;
            padding: 0.5em;&lt;br /&gt;
            transition: 0.2s;&lt;br /&gt;
            &amp;amp;:hover {&lt;br /&gt;
                transform: translateX(8px);&lt;br /&gt;
                background: linear-gradient(90deg,#ffeb6736 40%, rgba(110, 110, 110, 0) 95%);&lt;br /&gt;
                box-shadow: inset 8px 0 10px -5px #ffeb6570&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        li &amp;gt; a {&lt;br /&gt;
            color: #fff;&lt;br /&gt;
            transition: 0.2s;&lt;br /&gt;
        }&lt;br /&gt;
        li &amp;gt; a:hover {&lt;br /&gt;
            text-decoration:none;&lt;br /&gt;
            filter: drop-shadow(0 0 0.2rem #dcb114);&lt;br /&gt;
        }&lt;br /&gt;
        li &amp;gt; a:hover::before {&lt;br /&gt;
            text-decoration:none;&lt;br /&gt;
            filter: drop-shadow(0 0 0.2rem #dcb114);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Pynappo</name></author>
	</entry>
	<entry>
		<id>https://nbittrpgwiki.pynappo.xyz/index.php?title=MediaWiki:Timeless.css&amp;diff=3327</id>
		<title>MediaWiki:Timeless.css</title>
		<link rel="alternate" type="text/html" href="https://nbittrpgwiki.pynappo.xyz/index.php?title=MediaWiki:Timeless.css&amp;diff=3327"/>
		<updated>2026-10-06T03:11:24Z</updated>

		<summary type="html">&lt;p&gt;Pynappo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* All CSS here will be loaded for users of the Timeless skin */&lt;br /&gt;
/* Fonts */&lt;br /&gt;
@import url(&#039;https://fonts.googleapis.com/css2?family=Rosario:ital,wght@0,300..700;1,300..700&amp;amp;display=swap&#039;);&lt;br /&gt;
@import url(&#039;https://fonts.googleapis.com/css2?family=Rubik:ital,wght@0,300..900;1,300..900&amp;amp;display=swap&#039;);&lt;br /&gt;
@import url(&#039;https://fonts.googleapis.com/css2?family=Lora:ital,wght@0,400..700;1,400..700&amp;amp;display=swap&#039;);&lt;br /&gt;
 &lt;br /&gt;
:root {&lt;br /&gt;
    --main-font: &#039;Rubik&#039;;&lt;br /&gt;
    --header-font: &#039;Rubik&#039;;&lt;br /&gt;
    --title-font: &#039;Lora&#039;;&lt;br /&gt;
    &lt;br /&gt;
    /* COLORS */&lt;br /&gt;
	--background-color: rgb(227, 227, 227);&lt;br /&gt;
	--content-color: rgba(255, 250, 242);&lt;br /&gt;
	--text-color: rgb(61, 44, 35, 1);&lt;br /&gt;
	--link-color: #8346a0;&lt;br /&gt;
    --link-hover-color: #5e188a;&lt;br /&gt;
    --link-new-color: #ff3874;&lt;br /&gt;
    --text-stroke-color: #fff;&lt;br /&gt;
    &lt;br /&gt;
    --search-bg-color: rgba(255, 250, 242);;&lt;br /&gt;
    --border-color: #be7e32;&lt;br /&gt;
    &lt;br /&gt;
	--header-color: rgb(104 71 53);&lt;br /&gt;
	--header-text-color: rgb(255, 255, 255);&lt;br /&gt;
    &lt;br /&gt;
    --sidebar-header-color: #6f4229;&lt;br /&gt;
    --sidebar-header-text: #fff;&lt;br /&gt;
    &lt;br /&gt;
    --gradient-start: rgb(225, 225, 225);&lt;br /&gt;
    --gradient-end: rgb(111, 111, 111);&lt;br /&gt;
    --banner-color: #743f95;&lt;br /&gt;
    &lt;br /&gt;
	--footer-color: #201a16;&lt;br /&gt;
    --footer-text-color:#977b50;&lt;br /&gt;
    --footer-link-color:#a88e67;&lt;br /&gt;
    --footer-link-hover-color:#d9b299;&lt;br /&gt;
    &lt;br /&gt;
    --cdx-button-color: #bea48b;&lt;br /&gt;
    --cdx-button-hover: #f5dfca;&lt;br /&gt;
    &lt;br /&gt;
    --button-color: rgba(104, 83, 68, 1);&lt;br /&gt;
	--button-text-color: rgb(255, 255, 255);&lt;br /&gt;
}&lt;br /&gt;
/* BACKGROUNDS */&lt;br /&gt;
.ddd-quote-bg {&lt;br /&gt;
	background-image: url(&amp;quot;https://nbittrpgwiki.pynappo.xyz/images/9/98/DDDTextbox2.png&amp;quot;);&lt;br /&gt;
   background-size: contain;&lt;br /&gt;
background-repeat: no-repeat;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* || GENERAL */&lt;br /&gt;
body {&lt;br /&gt;
    font-family: var(--main-font);&lt;br /&gt;
    color: var(--text-color);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
pre, code {&lt;br /&gt;
	font-family:monospace;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
a:not(.new),&lt;br /&gt;
#mw-content a:not(.new),&lt;br /&gt;
a:visited,&lt;br /&gt;
a:visited:hover {&lt;br /&gt;
	color: var(--link-color);&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
.mw-wiki-title:hover {&lt;br /&gt;
    color: var(--header-text-color) !important;&lt;br /&gt;
    text-decoration:none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.new a {&lt;br /&gt;
    color: var(--link-new-color);&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
/* || HEADINGS */    &lt;br /&gt;
.mw-heading  {&lt;br /&gt;
    h1, h2, h3, h4, h5 {&lt;br /&gt;
    font-family: var(--header-font);&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
.mw-body  {&lt;br /&gt;
    h1, h2, h3, h4, h5 {&lt;br /&gt;
    font-family: var(--header-font);&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    }&lt;br /&gt;
    h1.firstHeading {&lt;br /&gt;
        border-bottom: none;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* || HEADER */&lt;br /&gt;
#mw-header-container {&lt;br /&gt;
    background-color: var(--header-color);&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
#p-banner.mw-wiki-title {&lt;br /&gt;
    color: var(--header-text-color);&lt;br /&gt;
    font-family: var(--title-font);&lt;br /&gt;
    font-weight:bold;&lt;br /&gt;
    font-size: 18px;&lt;br /&gt;
    margin-top: -0.2em;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
#simpleSearch {&lt;br /&gt;
    background: var(--search-bg-color);&lt;br /&gt;
    border: 1px solid var(--border-color);&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
.color-bar {&lt;br /&gt;
    width:0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* || SIDEBAR */&lt;br /&gt;
#ca-delete { display: none !important; }&lt;br /&gt;
#page-tools { display: none !important;}&lt;br /&gt;
#t-cargopagevalueslink { display:none }&lt;br /&gt;
#t-smwbrowselink { display:none }  &lt;br /&gt;
    &lt;br /&gt;
@keyframes highlight {&lt;br /&gt;
	from {&lt;br /&gt;
		background-position: 0;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	to {&lt;br /&gt;
		background-position: -100%;&lt;br /&gt;
	}&lt;br /&gt;
}    &lt;br /&gt;
/* Removes logo for now */&lt;br /&gt;
.mw-wiki-logo {&lt;br /&gt;
    display: none;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
#site-navigation .sidebar-chunk  {&lt;br /&gt;
    margin-top: 4.5em;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
#mw-site-navigation {&lt;br /&gt;
    padding-top: 0.2em;&lt;br /&gt;
    .sidebar-chunk h3 {&lt;br /&gt;
        border-bottom:none;&lt;br /&gt;
        background-color: var(--sidebar-header-color);&lt;br /&gt;
        color: var(--sidebar-header-text);&lt;br /&gt;
        padding: 0.4em 0.4em 0.4em 1.5em;&lt;br /&gt;
        clip-path: polygon(90% 50%, 100% 100%, 0% 100%, 0% 0%, 100% 0%);&lt;br /&gt;
    }&lt;br /&gt;
    .sidebar-chunk {&lt;br /&gt;
        padding-top: 1em;&lt;br /&gt;
        padding-bottom: 1em;&lt;br /&gt;
        background-color: var(--content-color);&lt;br /&gt;
        box-shadow: 0 0 8px rgba(0,0,0,0.2);&lt;br /&gt;
        h3 &amp;gt; a {&lt;br /&gt;
            color: var(--font-color);&lt;br /&gt;
        }&lt;br /&gt;
        ul &amp;gt; a:hover {&lt;br /&gt;
            animation-name: highlight;&lt;br /&gt;
            animation-duration: 0.25s;&lt;br /&gt;
            animation-fill-mode: forwards;&lt;br /&gt;
            background-size: 200%;&lt;br /&gt;
            background-image: linear-gradient(to left, #eacf1b70 50%, transparent 50%);&lt;br /&gt;
        }&lt;br /&gt;
        clip-path: polygon(100% 0, 100% 100%, 99% 98%, 95% 99%, 92% 99%, 89% 100%, 86% 99%, 83% 100%, 77% 99%, 72% 100%, 66% 98%, 62% 100%, 59% 99%, 54% 99%, 49% 100%, 46% 98%, 43% 100%, 40% 98%, 38% 100%, 35% 99%, 31% 100%, 28% 99%, 25% 99%, 22% 100%, 19% 99%, 16% 100%, 13% 99%, 10% 99%, 7% 100%, 4% 99%, 0% 100%, 0% 0%);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-related-navigation {&lt;br /&gt;
    position: sticky;&lt;br /&gt;
    top: 70px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-related-navigation .sidebar-chunk {&lt;br /&gt;
    background: var(--content-color);&lt;br /&gt;
    box-shadow: 0 0 8px rgba(0,0,0,0.2);&lt;br /&gt;
    border-radius: 20px;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
/* Edit button changes */&lt;br /&gt;
#ca-ve-edit a::before {&lt;br /&gt;
    content: &amp;quot;Visual edit&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#ca-ve-edit span {&lt;br /&gt;
    display:none;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
/* || WIKI CONTENT */&lt;br /&gt;
#mw-content-block,&lt;br /&gt;
#mw-content-container {&lt;br /&gt;
    background: linear-gradient(180deg, var(--gradient-start) 0%, rgba(0, 0, 0, 0) 100%), var(--gradient-end);&lt;br /&gt;
    background-color: var(--background-color);&lt;br /&gt;
    border-bottom: none;  &lt;br /&gt;
}    &lt;br /&gt;
    &lt;br /&gt;
#mw-content {&lt;br /&gt;
    padding-left: 1.5em;&lt;br /&gt;
    padding-right: 1.5em;&lt;br /&gt;
    box-shadow: 0 0 8px rgba(0,0,0,0.2);&lt;br /&gt;
    background-color: var(--content-color);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* || CATEGORY LINKS */&lt;br /&gt;
#catlinks {&lt;br /&gt;
    padding: 0.5em;&lt;br /&gt;
    padding-bottom: 0.1em;&lt;br /&gt;
    border: 2px solid color-mix(in srgb, var(--link-color) 30%, transparent);&lt;br /&gt;
    margin-top: 1em;&lt;br /&gt;
    margin-bottom: 1em;&lt;br /&gt;
    color: #000;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
/* || RELATED PAGES */&lt;br /&gt;
.client-js .read-more-container {&lt;br /&gt;
    padding: 0;&lt;br /&gt;
    margin: 1em;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
.read-more-container-heading {&lt;br /&gt;
    color: var(--text-color);&lt;br /&gt;
    border-bottom: 0;&lt;br /&gt;
    padding-bottom: 0.5em;&lt;br /&gt;
    font-size: 0.8em;&lt;br /&gt;
    font-weight: normal;&lt;br /&gt;
    letter-spacing: 1px;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
.cdx-card {&lt;br /&gt;
    background: var(--content-color);&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
/* || FOOTER */&lt;br /&gt;
.mw-footer-container {&lt;br /&gt;
    background-color: var(--footer-color);&lt;br /&gt;
    color: var(--footer-text-color);&lt;br /&gt;
    a {&lt;br /&gt;
        color: var(--footer-link-color);&lt;br /&gt;
        text-decoration:underline;&lt;br /&gt;
        &amp;amp;:hover {&lt;br /&gt;
            color: var(--footer-link-hover-color);&lt;br /&gt;
        }&lt;br /&gt;
        &amp;amp;.external {&lt;br /&gt;
            color: var(--footer-link-color);&lt;br /&gt;
            &amp;amp;:hover {&lt;br /&gt;
                color: var(--footer-link-hover-color);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
.cdx-button:enabled, .cdx-button.cdx-button--fake-button--enabled {&lt;br /&gt;
        background: var(--cdx-button-color);&lt;br /&gt;
        &amp;amp;:hover {&lt;br /&gt;
            background-color: var(--cdx-button-hover);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
/* || PORTABLE INFOBOXES */&lt;br /&gt;
.portable-infobox {&lt;br /&gt;
	margin-right:3px;&lt;br /&gt;
	border-radius:5px;&lt;br /&gt;
}  &lt;br /&gt;
&lt;br /&gt;
.portable-infobox .pi-navigation {&lt;br /&gt;
    paint-order: stroke fill;&lt;br /&gt;
    -webkit-text-stroke: 3px var(--text-stroke-color);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.portable-infobox .pi-item-spacing {&lt;br /&gt;
    border-radius:2px;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
.pi-section-navigation .pi-section-tab.pi-section-active, .pi-section-navigation .pi-section-tab.current, .pi-media-collection .pi-tab-link.current {&lt;br /&gt;
    color: var(--banner-text-color);&lt;br /&gt;
    border-radius:2px;&lt;br /&gt;
    border-bottom: 1px solid var(--button-text-color);&lt;br /&gt;
}&lt;br /&gt;
.portable-infobox .pi-header, .portable-infobox .pi-title {&lt;br /&gt;
    text-align: center;&lt;br /&gt;
	color: var(--button-text-color);&lt;br /&gt;
	background-color:var(--button-color);&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
.lua-infobox { &lt;br /&gt;
    .infobox-label {&lt;br /&gt;
        width: 5.5em;&lt;br /&gt;
    }&lt;br /&gt;
    .infobox-label, .infobox-data {&lt;br /&gt;
    padding: 0.1em 0.5em;&lt;br /&gt;
        text-align:left;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
/* DDD Infoboxes */&lt;br /&gt;
.mw-parser-output table.wikitable.lua-infobox.ddd-theme {&lt;br /&gt;
    border: 3px double #000;&lt;br /&gt;
    border-style: double solid;&lt;br /&gt;
    background-position-x: 700px;&lt;br /&gt;
    background-position-y: 80px;&lt;br /&gt;
    background-image: var(--ddd-bg);&lt;br /&gt;
    background-blend-mode: screen;&lt;br /&gt;
    background-size: 700%;&lt;br /&gt;
    background-color: #dadada;&lt;br /&gt;
    .infobox-title {&lt;br /&gt;
        paint-order: stroke fill;&lt;br /&gt;
        -webkit-text-stroke: 4px #000;&lt;br /&gt;
        border-top: 2px solid #000;&lt;br /&gt;
        border-bottom: 3px solid #000;&lt;br /&gt;
        box-shadow:inset 0 3px 5px 0 #ffffffa6,inset 0 -3px 5px 0 #ffffffa6;&lt;br /&gt;
        background-position-x: 900px;&lt;br /&gt;
        background-position-y: 330px;&lt;br /&gt;
        background-image: var(--ddd-bg);&lt;br /&gt;
        background-blend-mode: darken;&lt;br /&gt;
        color: #fff;&lt;br /&gt;
        padding: 0.5em;&lt;br /&gt;
        background-color: #434343;&lt;br /&gt;
        }&lt;br /&gt;
    .infobox-header {&lt;br /&gt;
        color: #fff;&lt;br /&gt;
        background-position-x: 900px;&lt;br /&gt;
        background-position-y: 430px;&lt;br /&gt;
        background-image: var(--ddd-bg);&lt;br /&gt;
        paint-order: stroke fill;&lt;br /&gt;
        -webkit-text-stroke: 4px #000;&lt;br /&gt;
        border-top: 2px solid #000;&lt;br /&gt;
        border-bottom: 3px solid #000;&lt;br /&gt;
        box-shadow:inset 0 3px 5px 0 #ffffffa6,inset 0 -3px 5px 0 #ffffffa6;&lt;br /&gt;
        background-blend-mode: darken;&lt;br /&gt;
        font-variant:small-caps;&lt;br /&gt;
        font-size:larger;&lt;br /&gt;
        background-color: #434343;&lt;br /&gt;
        }&lt;br /&gt;
    .infobox-data:not(.infobox-header) {&lt;br /&gt;
        border:none;&lt;br /&gt;
    }&lt;br /&gt;
    .infobox-label {&lt;br /&gt;
        color: #000;&lt;br /&gt;
        font-style: italic;&lt;br /&gt;
        font-variant:small-caps;&lt;br /&gt;
        font-weight:bold;&lt;br /&gt;
        }&lt;br /&gt;
    .infobox-data {&lt;br /&gt;
        border-bottom: 0;&lt;br /&gt;
        box-shadow: inset 0 -1px 5px -5px #000;&lt;br /&gt;
        font-size:smaller;&lt;br /&gt;
        }&lt;br /&gt;
    .infobox-nav {&lt;br /&gt;
        background-position-x: 540px;&lt;br /&gt;
        background-position-y: 400px;&lt;br /&gt;
        color: grey;&lt;br /&gt;
        paint-order: stroke fill;&lt;br /&gt;
        -webkit-text-stroke: 3px #fff;&lt;br /&gt;
        text-align:center;&lt;br /&gt;
        font-size:small;&lt;br /&gt;
        padding: 0.2em;&lt;br /&gt;
        }&lt;br /&gt;
    .infobox-img {&lt;br /&gt;
        text-align:center;&lt;br /&gt;
        background: var(--ddd-bg);&lt;br /&gt;
        background-position-y: 300px;&lt;br /&gt;
        background-size: 700%;&lt;br /&gt;
        background-color: #c4c4c4;  &lt;br /&gt;
        background-blend-mode: overlay;&lt;br /&gt;
        box-shadow:inset 0 3px 5px 0 #ffffffa6,inset 0 -3px 5px 0 #ffffffa6;&lt;br /&gt;
        padding: 0.25em;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* For [[Weathia: Resurrection]] */ &lt;br /&gt;
.fluidimg100 img, .fluidimg img {&lt;br /&gt;
	max-width:100%;&lt;br /&gt;
	height:auto;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
/* || PRINT COMPATIBILITY */&lt;br /&gt;
&lt;br /&gt;
@media print {&lt;br /&gt;
    :root {&lt;br /&gt;
        --background-color: rgb(0, 0, 0);&lt;br /&gt;
        --content-color: rgba(255, 255, 255);&lt;br /&gt;
        --text-color: rgb(0, 0, 0);&lt;br /&gt;
        --link-color: #7d7d7d;&lt;br /&gt;
        --link-hover-color: #bfbfbf;&lt;br /&gt;
        --link-new-color: #ff3838;&lt;br /&gt;
        --text-stroke-color: #000;&lt;br /&gt;
&lt;br /&gt;
        --search-bg-color: rgba(255, 250, 242);;&lt;br /&gt;
        --border-color: #b0b0b0;&lt;br /&gt;
&lt;br /&gt;
        --header-color: rgb(0 0 0);&lt;br /&gt;
        --header-text-color: rgb(255, 255, 255);&lt;br /&gt;
&lt;br /&gt;
        --sidebar-header-color: #fff;&lt;br /&gt;
        --sidebar-header-text: #fff;&lt;br /&gt;
&lt;br /&gt;
        --gradient-start: rgb(255, 255, 255);&lt;br /&gt;
        --gradient-end: rgb(255, 255, 255);&lt;br /&gt;
        --banner-color: #fff;&lt;br /&gt;
&lt;br /&gt;
        --footer-color: #fff;&lt;br /&gt;
        --footer-text-color:#000;&lt;br /&gt;
        --footer-link-color:#aaa;&lt;br /&gt;
        --footer-link-hover-color:#aaa;&lt;br /&gt;
&lt;br /&gt;
        --cdx-button-color: #c9c9c9;&lt;br /&gt;
        --cdx-button-hover: #fff;&lt;br /&gt;
&lt;br /&gt;
        --button-color: rgba(170, 170, 170);&lt;br /&gt;
        --button-text-color: rgb(255, 255, 255);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    #tabs,&lt;br /&gt;
    .toc,&lt;br /&gt;
    .navbox {&lt;br /&gt;
        display:none;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    #mw-content {&lt;br /&gt;
        box-shadow: none;&lt;br /&gt;
        margin:0;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .portable-infobox {&lt;br /&gt;
        border: 2px solid #000 ;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .portable-infobox .pi-navigation {&lt;br /&gt;
        -webkit-text-stroke: 0;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .portable-infobox .pi-header,&lt;br /&gt;
    #mw-content-text .pi-title {&lt;br /&gt;
        color: var(--text-color);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
/* One-sided navigation menu - MEDIAWIKI SNIPPET */&lt;br /&gt;
@media (min-width: 1340px) {&lt;br /&gt;
  #mw-content-block {&lt;br /&gt;
    display: block;&lt;br /&gt;
  }&lt;br /&gt;
  #mw-content,&lt;br /&gt;
  #content-bottom-stuff {&lt;br /&gt;
    margin-left: 14em;&lt;br /&gt;
    margin-right:1em;&lt;br /&gt;
  }&lt;br /&gt;
  #mw-content-wrapper {&lt;br /&gt;
    float: right;&lt;br /&gt;
    margin-left: -14em;&lt;br /&gt;
    width: 100%;&lt;br /&gt;
  }&lt;br /&gt;
  #mw-related-navigation {&lt;br /&gt;
    width: 14em;&lt;br /&gt;
    padding: 0 1em 0 0;&lt;br /&gt;
  }&lt;br /&gt;
  div.color-middle {&lt;br /&gt;
    margin-right: 0;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (min-width: 1100px) and (max-width: 1339px) {&lt;br /&gt;
    #mw-content,&lt;br /&gt;
    #content-bottom-stuff {&lt;br /&gt;
    margin-right:1em;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (min-width: 851px) and (max-width: 1099px) {&lt;br /&gt;
    #mw-content,&lt;br /&gt;
    #content-bottom-stuff {&lt;br /&gt;
     margin-left: 1em;&lt;br /&gt;
    margin-right:1em;&lt;br /&gt;
    }&lt;br /&gt;
    #mw-content:before {&lt;br /&gt;
        display:none;&lt;br /&gt;
    }&lt;br /&gt;
    #mw-content:after {&lt;br /&gt;
        display:none;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (max-width: 850px) {&lt;br /&gt;
    #mw-content,&lt;br /&gt;
    #content-bottom-stuff {&lt;br /&gt;
    margin-right:1em;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
@media screen and (max-width: 600px) {&lt;br /&gt;
    #mw-content,&lt;br /&gt;
    #content-bottom-stuff {&lt;br /&gt;
    margin-right:0;&lt;br /&gt;
    margin-left:-1em;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Align top colour bar with page columns */&lt;br /&gt;
.ts-inner {&lt;br /&gt;
  padding: 0 0 0 1em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Re-aligning bottom logos */&lt;br /&gt;
#mw-footer {&lt;br /&gt;
    padding-right: 1em; &lt;br /&gt;
}    &lt;br /&gt;
&lt;br /&gt;
/* Avoid cutting off letters with descenders: g,j,p,q,y */&lt;br /&gt;
#personal h2 span {&lt;br /&gt;
    height: 1.5em;&lt;br /&gt;
    position:relative;&lt;br /&gt;
    bottom:0.1em;&lt;br /&gt;
    font-family: var(--header-font);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
    #personal {&lt;br /&gt;
        color: var(--header-text-color);&lt;br /&gt;
        .dropdown {&lt;br /&gt;
            color: var(--text-color);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
/* Triangle position patch */&lt;br /&gt;
#personal h2::after {&lt;br /&gt;
   position: relative;&lt;br /&gt;
   bottom: 0.5em;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
	:root.skin-theme-clientpref-day:has(&amp;gt; body.ns-3000),&lt;br /&gt;
    :root.skin-theme-clientpref-day:has(&amp;gt; body.ns-3001),&lt;br /&gt;
    :root.skin-theme-clientpref-day:has(.ddd-theme) {&lt;br /&gt;
&lt;br /&gt;
     --header-font: &#039;Instrument Serif&#039;;&lt;br /&gt;
        &lt;br /&gt;
    /* COLORS */&lt;br /&gt;
	--background-color: rgb(55, 55, 55);&lt;br /&gt;
	--content-color: rgba(246, 246, 246);&lt;br /&gt;
	--text-color: rgb(0, 0, 0);&lt;br /&gt;
	--link-color: #7b7970;&lt;br /&gt;
    --link-hover-color: #7b7970;&lt;br /&gt;
    --link-new-color: #ff3838;&lt;br /&gt;
    --text-stroke-color: #000;&lt;br /&gt;
    &lt;br /&gt;
    --search-bg-color: rgba(237, 237, 237);;&lt;br /&gt;
    --border-color: #b0b0b0;&lt;br /&gt;
    &lt;br /&gt;
	--header-color: rgb(0 0 0);&lt;br /&gt;
	--header-text-color: rgb(255, 255, 255);&lt;br /&gt;
    &lt;br /&gt;
    --sidebar-header-color: #4c4c4c;&lt;br /&gt;
    --sidebar-header-text: #fff;&lt;br /&gt;
    &lt;br /&gt;
    --gradient-start: rgb(34, 33, 33);&lt;br /&gt;
    --gradient-end: rgb(36, 36, 36);&lt;br /&gt;
    --banner-color: #4c4c4c;&lt;br /&gt;
    &lt;br /&gt;
	--footer-color: #000;&lt;br /&gt;
    --footer-text-color:#d6d6d6;&lt;br /&gt;
    --footer-link-color:#969696;&lt;br /&gt;
    --footer-link-hover-color:#969696;&lt;br /&gt;
    &lt;br /&gt;
    --cdx-button-color: #c9c9c9;&lt;br /&gt;
    --cdx-button-hover: #fff;&lt;br /&gt;
    &lt;br /&gt;
    --button-color: rgba(76, 76, 76);&lt;br /&gt;
	--button-text-color: rgb(255, 255, 255);&lt;br /&gt;
        &lt;br /&gt;
        .mw-body .mw-heading h1, .mw-body .mw-heading h2, .mw-body .mw-heading h3, .mw-body .mw-heading h4, .mw-body .mw-heading h5, .mw-body .mw-heading h6 {&lt;br /&gt;
            letter-spacing: 0.1rem;&lt;br /&gt;
            font-variant: small-caps;&lt;br /&gt;
            font-size: 30px;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        #pt-notifications-alert .mw-echo-notifications-badge.mw-echo-notifications-badge-all-read, body:not(.skin-vector-2022) #pt-notifications-notice .mw-echo-notifications-badge.mw-echo-notifications-badge-all-read {&lt;br /&gt;
            filter:invert(1);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        #mw-content {&lt;br /&gt;
        border:1px solid #e3e3e3;&lt;br /&gt;
        background-position-y: 1600px;&lt;br /&gt;
        background-size: 1000%;&lt;br /&gt;
        background-image: var(--ddd-bg);&lt;br /&gt;
        background-blend-mode: screen;&lt;br /&gt;
        background-color: #e3e3e3;&lt;br /&gt;
        box-shadow: inset 0 0 20px #a5a5a5;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
    .mw-wiki-title {&lt;br /&gt;
        font-family: &#039;Instrument Serif&#039; !important;&lt;br /&gt;
        letter-spacing: 0.1rem;&lt;br /&gt;
        font-style:italic;&lt;br /&gt;
    }&lt;br /&gt;
        &lt;br /&gt;
        #personal h2 span {&lt;br /&gt;
            letter-spacing: 0.2rem;&lt;br /&gt;
            font-weight:bold;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        #mw-header-container {&lt;br /&gt;
        background-position-x: 70px;&lt;br /&gt;
    background-position-y: 210px;&lt;br /&gt;
        background-image: url(&#039;https://nbittrpgwiki.pynappo.xyz/images/8/8c/DDDTextbox.png&#039;);&lt;br /&gt;
        background-blend-mode: overlay;&lt;br /&gt;
        background-color: #3b3b3b;&lt;br /&gt;
        box-shadow: inset 0 0 10px #7b7b7b;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        #catlinks-sidebar {&lt;br /&gt;
                    background-image: url(https://nbittrpgwiki.pynappo.xyz/images/2/27/DDDTextureVertical.png);&lt;br /&gt;
            background-size: 300%;&lt;br /&gt;
        background-blend-mode: overlay;&lt;br /&gt;
        background-color: #222;&lt;br /&gt;
            border: 1px solid #ffffff2e;&lt;br /&gt;
            box-shadow:inset 0 3px 5px -5px #ffffffa6,inset 0 0px 5px 0 #ffffffa6;&lt;br /&gt;
            h3 {&lt;br /&gt;
                color: #fff;&lt;br /&gt;
                font-variant: small-caps;&lt;br /&gt;
                font-style: italic;&lt;br /&gt;
                text-align:center;&lt;br /&gt;
                border: 1px solid #ffffff2e;&lt;br /&gt;
                padding: 0.5em;&lt;br /&gt;
                border-radius: 12px;&lt;br /&gt;
                background-image: url(https://nbittrpgwiki.pynappo.xyz/images/2/27/DDDTextureVertical.png);&lt;br /&gt;
            background-size: 200%;&lt;br /&gt;
        background-blend-mode: overlay;&lt;br /&gt;
        background-color: #0c0c0c;&lt;br /&gt;
            }&lt;br /&gt;
            a {&lt;br /&gt;
                color: #fff;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        #mw-footer-container {&lt;br /&gt;
        background-position-x: 70px;&lt;br /&gt;
    background-position-y: 210px;&lt;br /&gt;
        background-image: url(&#039;https://nbittrpgwiki.pynappo.xyz/images/8/8c/DDDTextbox.png&#039;);&lt;br /&gt;
        background-blend-mode: overlay;&lt;br /&gt;
        background-color: #191919;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
    .read-more-container-card-list &amp;gt; li .cdx-card {&lt;br /&gt;
    background-position-x: 70px;&lt;br /&gt;
    background-position-y: 210px;&lt;br /&gt;
        background-image: url(&#039;https://nbittrpgwiki.pynappo.xyz/images/8/8c/DDDTextbox.png&#039;);&lt;br /&gt;
        background-blend-mode: overlay;&lt;br /&gt;
        background-color: #383837;&lt;br /&gt;
            border:none;&lt;br /&gt;
            box-shadow:inset 0 1px 5px -5px #ffffffa6,inset 0 0px 10px 1px #ffffffa6;&lt;br /&gt;
        transition: 0.2s;&lt;br /&gt;
        &amp;amp;:hover {&lt;br /&gt;
            filter: brightness(1.2);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
     .read-more-container-card-list &amp;gt; li:nth-child(2n+1) .cdx-card {&lt;br /&gt;
        background-position-x: 70px;&lt;br /&gt;
        background-position-y: 110px;&lt;br /&gt;
    }&lt;br /&gt;
    .read-more-container-card-list &amp;gt; li:nth-child(3n) .cdx-card {&lt;br /&gt;
        background-position-x: 400px;&lt;br /&gt;
        background-position-y: 80px;&lt;br /&gt;
    }&lt;br /&gt;
        &lt;br /&gt;
        .cdx-card__text__title,&lt;br /&gt;
        .read-more-container-heading {&lt;br /&gt;
            color: #fff;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
 .mw-first-heading {&lt;br /&gt;
        font-family: &#039;Instrument Serif&#039; !important;&lt;br /&gt;
        font-style:italic;&lt;br /&gt;
        text-transform: uppercase;&lt;br /&gt;
        color: #fff;&lt;br /&gt;
     paint-order: stroke fill;&lt;br /&gt;
     -webkit-text-stroke: 8px #000;&lt;br /&gt;
     letter-spacing: 0.2rem;&lt;br /&gt;
     text-align: center;&lt;br /&gt;
     background: linear-gradient(90deg, #000 0%, rgba(0, 0, 0, .45) 100%);&lt;br /&gt;
    mask-image:linear-gradient(to right,transparent,black 15% 85%, transparent);&lt;br /&gt;
     padding: 0.3em;&lt;br /&gt;
     box-shadow:inset 0 3px 15px -5px #ffffffa6,inset 0 0px 15px 0 #ffffffa6;&lt;br /&gt;
     border-top: 3px solid #000;&lt;br /&gt;
         border-bottom: 3px solid #000;&lt;br /&gt;
    }&lt;br /&gt;
        &lt;br /&gt;
        .toc {&lt;br /&gt;
             background-position-x: 0px;&lt;br /&gt;
    background-position-y: 270px;&lt;br /&gt;
            background-size: 650%;&lt;br /&gt;
        background-image: url(&#039;https://nbittrpgwiki.pynappo.xyz/images/8/8c/DDDTextbox.png&#039;);&lt;br /&gt;
        background-blend-mode: overlay;&lt;br /&gt;
        background-color: #6c6c6c;&lt;br /&gt;
        box-shadow:inset 0 1px 5px -5px #ffffffa6,inset 0 0px 10px 1px #ffffffa6;&lt;br /&gt;
            border-radius: 12px;&lt;br /&gt;
            color: #fff;&lt;br /&gt;
            .toctogglelabel::after {&lt;br /&gt;
                color: #fff;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        #mw-content-container {&lt;br /&gt;
            background-image: url(&#039;https://nbittrpgwiki.pynappo.xyz/images/2/21/MonochromeForest.png&#039;);&lt;br /&gt;
            background-color: #6a6866;&lt;br /&gt;
            background-blend-mode: multiply;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
    #mw-content-block {&lt;br /&gt;
        background: #000000;&lt;br /&gt;
        background: linear-gradient(90deg,rgba(0, 0, 0, 1) 5%, rgba(110, 110, 110, 0) 20%);&lt;br /&gt;
    }&lt;br /&gt;
     &lt;br /&gt;
#mw-site-navigation .sidebar-chunk .mw-portlet &amp;gt; div,&lt;br /&gt;
#mw-site-navigation .sidebar-chunk .mw-portlet-body {&lt;br /&gt;
        margin-bottom: 1em;&lt;br /&gt;
        margin-left: -0.3em;&lt;br /&gt;
    }&lt;br /&gt;
        &lt;br /&gt;
#mw-site-navigation {&lt;br /&gt;
    &amp;amp; .sidebar-chunk {&lt;br /&gt;
        clip-path:none;&lt;br /&gt;
        background-image: url(https://nbittrpgwiki.pynappo.xyz/images/2/27/DDDTextureVertical.png);&lt;br /&gt;
            background-size: 700%;&lt;br /&gt;
        background-blend-mode: overlay;&lt;br /&gt;
        background-color: #222;&lt;br /&gt;
            border:none;&lt;br /&gt;
            box-shadow:inset 0 3px 5px -5px #ffffffa6,inset 0 0px 5px 0 #ffffffa6;&lt;br /&gt;
     h3 { &lt;br /&gt;
         font-family: var(--header-font);&lt;br /&gt;
         font-variant: small-caps;&lt;br /&gt;
         font-size: 24px;&lt;br /&gt;
         letter-spacing: 0.05rem;&lt;br /&gt;
         line-height: 0.3;&lt;br /&gt;
         font-weight: bold;&lt;br /&gt;
        border-bottom: 3px solid white;&lt;br /&gt;
         margin: 0.2em 0;&lt;br /&gt;
    }&lt;br /&gt;
        li {&lt;br /&gt;
            padding: 0.5em;&lt;br /&gt;
            transition: 0.2s;&lt;br /&gt;
            &amp;amp;:hover {&lt;br /&gt;
                transform: translateX(8px);&lt;br /&gt;
                background: linear-gradient(90deg,#ffeb6736 40%, rgba(110, 110, 110, 0) 95%);&lt;br /&gt;
                box-shadow: inset 8px 0 10px -5px #ffeb6570&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        li &amp;gt; a {&lt;br /&gt;
            color: #fff;&lt;br /&gt;
            transition: 0.2s;&lt;br /&gt;
        }&lt;br /&gt;
        li &amp;gt; a:hover {&lt;br /&gt;
            text-decoration:none;&lt;br /&gt;
            filter: drop-shadow(0 0 0.2rem #dcb114);&lt;br /&gt;
        }&lt;br /&gt;
        li &amp;gt; a:hover::before {&lt;br /&gt;
            text-decoration:none;&lt;br /&gt;
            filter: drop-shadow(0 0 0.2rem #dcb114);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Pynappo</name></author>
	</entry>
	<entry>
		<id>https://nbittrpgwiki.pynappo.xyz/index.php?title=MediaWiki:Timeless.css&amp;diff=3326</id>
		<title>MediaWiki:Timeless.css</title>
		<link rel="alternate" type="text/html" href="https://nbittrpgwiki.pynappo.xyz/index.php?title=MediaWiki:Timeless.css&amp;diff=3326"/>
		<updated>2026-10-06T03:09:40Z</updated>

		<summary type="html">&lt;p&gt;Pynappo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* All CSS here will be loaded for users of the Timeless skin */&lt;br /&gt;
/* Fonts */&lt;br /&gt;
@import url(&#039;https://fonts.googleapis.com/css2?family=Rosario:ital,wght@0,300..700;1,300..700&amp;amp;display=swap&#039;);&lt;br /&gt;
@import url(&#039;https://fonts.googleapis.com/css2?family=Rubik:ital,wght@0,300..900;1,300..900&amp;amp;display=swap&#039;);&lt;br /&gt;
@import url(&#039;https://fonts.googleapis.com/css2?family=Lora:ital,wght@0,400..700;1,400..700&amp;amp;display=swap&#039;);&lt;br /&gt;
 &lt;br /&gt;
:root {&lt;br /&gt;
    --main-font: &#039;Rubik&#039;;&lt;br /&gt;
    --header-font: &#039;Rubik&#039;;&lt;br /&gt;
    --title-font: &#039;Lora&#039;;&lt;br /&gt;
    &lt;br /&gt;
    /* COLORS */&lt;br /&gt;
	--background-color: rgb(227, 227, 227);&lt;br /&gt;
	--content-color: rgba(255, 250, 242);&lt;br /&gt;
	--text-color: rgb(61, 44, 35, 1);&lt;br /&gt;
	--link-color: #8346a0;&lt;br /&gt;
    --link-hover-color: #5e188a;&lt;br /&gt;
    --link-new-color: #ff3874;&lt;br /&gt;
    --text-stroke-color: #fff;&lt;br /&gt;
    &lt;br /&gt;
    --search-bg-color: rgba(255, 250, 242);;&lt;br /&gt;
    --border-color: #be7e32;&lt;br /&gt;
    &lt;br /&gt;
	--header-color: rgb(104 71 53);&lt;br /&gt;
	--header-text-color: rgb(255, 255, 255);&lt;br /&gt;
    &lt;br /&gt;
    --sidebar-header-color: #6f4229;&lt;br /&gt;
    --sidebar-header-text: #fff;&lt;br /&gt;
    &lt;br /&gt;
    --gradient-start: rgb(225, 225, 225);&lt;br /&gt;
    --gradient-end: rgb(111, 111, 111);&lt;br /&gt;
    --banner-color: #743f95;&lt;br /&gt;
    &lt;br /&gt;
	--footer-color: #201a16;&lt;br /&gt;
    --footer-text-color:#977b50;&lt;br /&gt;
    --footer-link-color:#a88e67;&lt;br /&gt;
    --footer-link-hover-color:#d9b299;&lt;br /&gt;
    &lt;br /&gt;
    --cdx-button-color: #bea48b;&lt;br /&gt;
    --cdx-button-hover: #f5dfca;&lt;br /&gt;
    &lt;br /&gt;
    --button-color: rgba(104, 83, 68, 1);&lt;br /&gt;
	--button-text-color: rgb(255, 255, 255);&lt;br /&gt;
}&lt;br /&gt;
/* BACKGROUNDS */&lt;br /&gt;
.ddd-quote-bg {&lt;br /&gt;
	background-image: url(&amp;quot;https://nbittrpgwiki.pynappo.xyz/images/9/98/DDDTextbox2.png&amp;quot;);&lt;br /&gt;
   &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* || GENERAL */&lt;br /&gt;
body {&lt;br /&gt;
    font-family: var(--main-font);&lt;br /&gt;
    color: var(--text-color);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
pre, code {&lt;br /&gt;
	font-family:monospace;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
a:not(.new),&lt;br /&gt;
#mw-content a:not(.new),&lt;br /&gt;
a:visited,&lt;br /&gt;
a:visited:hover {&lt;br /&gt;
	color: var(--link-color);&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
.mw-wiki-title:hover {&lt;br /&gt;
    color: var(--header-text-color) !important;&lt;br /&gt;
    text-decoration:none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.new a {&lt;br /&gt;
    color: var(--link-new-color);&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
/* || HEADINGS */    &lt;br /&gt;
.mw-heading  {&lt;br /&gt;
    h1, h2, h3, h4, h5 {&lt;br /&gt;
    font-family: var(--header-font);&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
.mw-body  {&lt;br /&gt;
    h1, h2, h3, h4, h5 {&lt;br /&gt;
    font-family: var(--header-font);&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    }&lt;br /&gt;
    h1.firstHeading {&lt;br /&gt;
        border-bottom: none;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* || HEADER */&lt;br /&gt;
#mw-header-container {&lt;br /&gt;
    background-color: var(--header-color);&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
#p-banner.mw-wiki-title {&lt;br /&gt;
    color: var(--header-text-color);&lt;br /&gt;
    font-family: var(--title-font);&lt;br /&gt;
    font-weight:bold;&lt;br /&gt;
    font-size: 18px;&lt;br /&gt;
    margin-top: -0.2em;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
#simpleSearch {&lt;br /&gt;
    background: var(--search-bg-color);&lt;br /&gt;
    border: 1px solid var(--border-color);&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
.color-bar {&lt;br /&gt;
    width:0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* || SIDEBAR */&lt;br /&gt;
#ca-delete { display: none !important; }&lt;br /&gt;
#page-tools { display: none !important;}&lt;br /&gt;
#t-cargopagevalueslink { display:none }&lt;br /&gt;
#t-smwbrowselink { display:none }  &lt;br /&gt;
    &lt;br /&gt;
@keyframes highlight {&lt;br /&gt;
	from {&lt;br /&gt;
		background-position: 0;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	to {&lt;br /&gt;
		background-position: -100%;&lt;br /&gt;
	}&lt;br /&gt;
}    &lt;br /&gt;
/* Removes logo for now */&lt;br /&gt;
.mw-wiki-logo {&lt;br /&gt;
    display: none;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
#site-navigation .sidebar-chunk  {&lt;br /&gt;
    margin-top: 4.5em;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
#mw-site-navigation {&lt;br /&gt;
    padding-top: 0.2em;&lt;br /&gt;
    .sidebar-chunk h3 {&lt;br /&gt;
        border-bottom:none;&lt;br /&gt;
        background-color: var(--sidebar-header-color);&lt;br /&gt;
        color: var(--sidebar-header-text);&lt;br /&gt;
        padding: 0.4em 0.4em 0.4em 1.5em;&lt;br /&gt;
        clip-path: polygon(90% 50%, 100% 100%, 0% 100%, 0% 0%, 100% 0%);&lt;br /&gt;
    }&lt;br /&gt;
    .sidebar-chunk {&lt;br /&gt;
        padding-top: 1em;&lt;br /&gt;
        padding-bottom: 1em;&lt;br /&gt;
        background-color: var(--content-color);&lt;br /&gt;
        box-shadow: 0 0 8px rgba(0,0,0,0.2);&lt;br /&gt;
        h3 &amp;gt; a {&lt;br /&gt;
            color: var(--font-color);&lt;br /&gt;
        }&lt;br /&gt;
        ul &amp;gt; a:hover {&lt;br /&gt;
            animation-name: highlight;&lt;br /&gt;
            animation-duration: 0.25s;&lt;br /&gt;
            animation-fill-mode: forwards;&lt;br /&gt;
            background-size: 200%;&lt;br /&gt;
            background-image: linear-gradient(to left, #eacf1b70 50%, transparent 50%);&lt;br /&gt;
        }&lt;br /&gt;
        clip-path: polygon(100% 0, 100% 100%, 99% 98%, 95% 99%, 92% 99%, 89% 100%, 86% 99%, 83% 100%, 77% 99%, 72% 100%, 66% 98%, 62% 100%, 59% 99%, 54% 99%, 49% 100%, 46% 98%, 43% 100%, 40% 98%, 38% 100%, 35% 99%, 31% 100%, 28% 99%, 25% 99%, 22% 100%, 19% 99%, 16% 100%, 13% 99%, 10% 99%, 7% 100%, 4% 99%, 0% 100%, 0% 0%);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-related-navigation {&lt;br /&gt;
    position: sticky;&lt;br /&gt;
    top: 70px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-related-navigation .sidebar-chunk {&lt;br /&gt;
    background: var(--content-color);&lt;br /&gt;
    box-shadow: 0 0 8px rgba(0,0,0,0.2);&lt;br /&gt;
    border-radius: 20px;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
/* Edit button changes */&lt;br /&gt;
#ca-ve-edit a::before {&lt;br /&gt;
    content: &amp;quot;Visual edit&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#ca-ve-edit span {&lt;br /&gt;
    display:none;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
/* || WIKI CONTENT */&lt;br /&gt;
#mw-content-block,&lt;br /&gt;
#mw-content-container {&lt;br /&gt;
    background: linear-gradient(180deg, var(--gradient-start) 0%, rgba(0, 0, 0, 0) 100%), var(--gradient-end);&lt;br /&gt;
    background-color: var(--background-color);&lt;br /&gt;
    border-bottom: none;  &lt;br /&gt;
}    &lt;br /&gt;
    &lt;br /&gt;
#mw-content {&lt;br /&gt;
    padding-left: 1.5em;&lt;br /&gt;
    padding-right: 1.5em;&lt;br /&gt;
    box-shadow: 0 0 8px rgba(0,0,0,0.2);&lt;br /&gt;
    background-color: var(--content-color);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* || CATEGORY LINKS */&lt;br /&gt;
#catlinks {&lt;br /&gt;
    padding: 0.5em;&lt;br /&gt;
    padding-bottom: 0.1em;&lt;br /&gt;
    border: 2px solid color-mix(in srgb, var(--link-color) 30%, transparent);&lt;br /&gt;
    margin-top: 1em;&lt;br /&gt;
    margin-bottom: 1em;&lt;br /&gt;
    color: #000;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
/* || RELATED PAGES */&lt;br /&gt;
.client-js .read-more-container {&lt;br /&gt;
    padding: 0;&lt;br /&gt;
    margin: 1em;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
.read-more-container-heading {&lt;br /&gt;
    color: var(--text-color);&lt;br /&gt;
    border-bottom: 0;&lt;br /&gt;
    padding-bottom: 0.5em;&lt;br /&gt;
    font-size: 0.8em;&lt;br /&gt;
    font-weight: normal;&lt;br /&gt;
    letter-spacing: 1px;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
.cdx-card {&lt;br /&gt;
    background: var(--content-color);&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
/* || FOOTER */&lt;br /&gt;
.mw-footer-container {&lt;br /&gt;
    background-color: var(--footer-color);&lt;br /&gt;
    color: var(--footer-text-color);&lt;br /&gt;
    a {&lt;br /&gt;
        color: var(--footer-link-color);&lt;br /&gt;
        text-decoration:underline;&lt;br /&gt;
        &amp;amp;:hover {&lt;br /&gt;
            color: var(--footer-link-hover-color);&lt;br /&gt;
        }&lt;br /&gt;
        &amp;amp;.external {&lt;br /&gt;
            color: var(--footer-link-color);&lt;br /&gt;
            &amp;amp;:hover {&lt;br /&gt;
                color: var(--footer-link-hover-color);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
.cdx-button:enabled, .cdx-button.cdx-button--fake-button--enabled {&lt;br /&gt;
        background: var(--cdx-button-color);&lt;br /&gt;
        &amp;amp;:hover {&lt;br /&gt;
            background-color: var(--cdx-button-hover);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
/* || PORTABLE INFOBOXES */&lt;br /&gt;
.portable-infobox {&lt;br /&gt;
	margin-right:3px;&lt;br /&gt;
	border-radius:5px;&lt;br /&gt;
}  &lt;br /&gt;
&lt;br /&gt;
.portable-infobox .pi-navigation {&lt;br /&gt;
    paint-order: stroke fill;&lt;br /&gt;
    -webkit-text-stroke: 3px var(--text-stroke-color);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.portable-infobox .pi-item-spacing {&lt;br /&gt;
    border-radius:2px;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
.pi-section-navigation .pi-section-tab.pi-section-active, .pi-section-navigation .pi-section-tab.current, .pi-media-collection .pi-tab-link.current {&lt;br /&gt;
    color: var(--banner-text-color);&lt;br /&gt;
    border-radius:2px;&lt;br /&gt;
    border-bottom: 1px solid var(--button-text-color);&lt;br /&gt;
}&lt;br /&gt;
.portable-infobox .pi-header, .portable-infobox .pi-title {&lt;br /&gt;
    text-align: center;&lt;br /&gt;
	color: var(--button-text-color);&lt;br /&gt;
	background-color:var(--button-color);&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
.lua-infobox { &lt;br /&gt;
    .infobox-label {&lt;br /&gt;
        width: 5.5em;&lt;br /&gt;
    }&lt;br /&gt;
    .infobox-label, .infobox-data {&lt;br /&gt;
    padding: 0.1em 0.5em;&lt;br /&gt;
        text-align:left;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
/* DDD Infoboxes */&lt;br /&gt;
.mw-parser-output table.wikitable.lua-infobox.ddd-theme {&lt;br /&gt;
    border: 3px double #000;&lt;br /&gt;
    border-style: double solid;&lt;br /&gt;
    background-position-x: 700px;&lt;br /&gt;
    background-position-y: 80px;&lt;br /&gt;
    background-image: var(--ddd-bg);&lt;br /&gt;
    background-blend-mode: screen;&lt;br /&gt;
    background-size: 700%;&lt;br /&gt;
    background-color: #dadada;&lt;br /&gt;
    .infobox-title {&lt;br /&gt;
        paint-order: stroke fill;&lt;br /&gt;
        -webkit-text-stroke: 4px #000;&lt;br /&gt;
        border-top: 2px solid #000;&lt;br /&gt;
        border-bottom: 3px solid #000;&lt;br /&gt;
        box-shadow:inset 0 3px 5px 0 #ffffffa6,inset 0 -3px 5px 0 #ffffffa6;&lt;br /&gt;
        background-position-x: 900px;&lt;br /&gt;
        background-position-y: 330px;&lt;br /&gt;
        background-image: var(--ddd-bg);&lt;br /&gt;
        background-blend-mode: darken;&lt;br /&gt;
        color: #fff;&lt;br /&gt;
        padding: 0.5em;&lt;br /&gt;
        background-color: #434343;&lt;br /&gt;
        }&lt;br /&gt;
    .infobox-header {&lt;br /&gt;
        color: #fff;&lt;br /&gt;
        background-position-x: 900px;&lt;br /&gt;
        background-position-y: 430px;&lt;br /&gt;
        background-image: var(--ddd-bg);&lt;br /&gt;
        paint-order: stroke fill;&lt;br /&gt;
        -webkit-text-stroke: 4px #000;&lt;br /&gt;
        border-top: 2px solid #000;&lt;br /&gt;
        border-bottom: 3px solid #000;&lt;br /&gt;
        box-shadow:inset 0 3px 5px 0 #ffffffa6,inset 0 -3px 5px 0 #ffffffa6;&lt;br /&gt;
        background-blend-mode: darken;&lt;br /&gt;
        font-variant:small-caps;&lt;br /&gt;
        font-size:larger;&lt;br /&gt;
        background-color: #434343;&lt;br /&gt;
        }&lt;br /&gt;
    .infobox-data:not(.infobox-header) {&lt;br /&gt;
        border:none;&lt;br /&gt;
    }&lt;br /&gt;
    .infobox-label {&lt;br /&gt;
        color: #000;&lt;br /&gt;
        font-style: italic;&lt;br /&gt;
        font-variant:small-caps;&lt;br /&gt;
        font-weight:bold;&lt;br /&gt;
        }&lt;br /&gt;
    .infobox-data {&lt;br /&gt;
        border-bottom: 0;&lt;br /&gt;
        box-shadow: inset 0 -1px 5px -5px #000;&lt;br /&gt;
        font-size:smaller;&lt;br /&gt;
        }&lt;br /&gt;
    .infobox-nav {&lt;br /&gt;
        background-position-x: 540px;&lt;br /&gt;
        background-position-y: 400px;&lt;br /&gt;
        color: grey;&lt;br /&gt;
        paint-order: stroke fill;&lt;br /&gt;
        -webkit-text-stroke: 3px #fff;&lt;br /&gt;
        text-align:center;&lt;br /&gt;
        font-size:small;&lt;br /&gt;
        padding: 0.2em;&lt;br /&gt;
        }&lt;br /&gt;
    .infobox-img {&lt;br /&gt;
        text-align:center;&lt;br /&gt;
        background: var(--ddd-bg);&lt;br /&gt;
        background-position-y: 300px;&lt;br /&gt;
        background-size: 700%;&lt;br /&gt;
        background-color: #c4c4c4;  &lt;br /&gt;
        background-blend-mode: overlay;&lt;br /&gt;
        box-shadow:inset 0 3px 5px 0 #ffffffa6,inset 0 -3px 5px 0 #ffffffa6;&lt;br /&gt;
        padding: 0.25em;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* For [[Weathia: Resurrection]] */ &lt;br /&gt;
.fluidimg100 img, .fluidimg img {&lt;br /&gt;
	max-width:100%;&lt;br /&gt;
	height:auto;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
/* || PRINT COMPATIBILITY */&lt;br /&gt;
&lt;br /&gt;
@media print {&lt;br /&gt;
    :root {&lt;br /&gt;
        --background-color: rgb(0, 0, 0);&lt;br /&gt;
        --content-color: rgba(255, 255, 255);&lt;br /&gt;
        --text-color: rgb(0, 0, 0);&lt;br /&gt;
        --link-color: #7d7d7d;&lt;br /&gt;
        --link-hover-color: #bfbfbf;&lt;br /&gt;
        --link-new-color: #ff3838;&lt;br /&gt;
        --text-stroke-color: #000;&lt;br /&gt;
&lt;br /&gt;
        --search-bg-color: rgba(255, 250, 242);;&lt;br /&gt;
        --border-color: #b0b0b0;&lt;br /&gt;
&lt;br /&gt;
        --header-color: rgb(0 0 0);&lt;br /&gt;
        --header-text-color: rgb(255, 255, 255);&lt;br /&gt;
&lt;br /&gt;
        --sidebar-header-color: #fff;&lt;br /&gt;
        --sidebar-header-text: #fff;&lt;br /&gt;
&lt;br /&gt;
        --gradient-start: rgb(255, 255, 255);&lt;br /&gt;
        --gradient-end: rgb(255, 255, 255);&lt;br /&gt;
        --banner-color: #fff;&lt;br /&gt;
&lt;br /&gt;
        --footer-color: #fff;&lt;br /&gt;
        --footer-text-color:#000;&lt;br /&gt;
        --footer-link-color:#aaa;&lt;br /&gt;
        --footer-link-hover-color:#aaa;&lt;br /&gt;
&lt;br /&gt;
        --cdx-button-color: #c9c9c9;&lt;br /&gt;
        --cdx-button-hover: #fff;&lt;br /&gt;
&lt;br /&gt;
        --button-color: rgba(170, 170, 170);&lt;br /&gt;
        --button-text-color: rgb(255, 255, 255);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    #tabs,&lt;br /&gt;
    .toc,&lt;br /&gt;
    .navbox {&lt;br /&gt;
        display:none;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    #mw-content {&lt;br /&gt;
        box-shadow: none;&lt;br /&gt;
        margin:0;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .portable-infobox {&lt;br /&gt;
        border: 2px solid #000 ;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .portable-infobox .pi-navigation {&lt;br /&gt;
        -webkit-text-stroke: 0;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .portable-infobox .pi-header,&lt;br /&gt;
    #mw-content-text .pi-title {&lt;br /&gt;
        color: var(--text-color);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
/* One-sided navigation menu - MEDIAWIKI SNIPPET */&lt;br /&gt;
@media (min-width: 1340px) {&lt;br /&gt;
  #mw-content-block {&lt;br /&gt;
    display: block;&lt;br /&gt;
  }&lt;br /&gt;
  #mw-content,&lt;br /&gt;
  #content-bottom-stuff {&lt;br /&gt;
    margin-left: 14em;&lt;br /&gt;
    margin-right:1em;&lt;br /&gt;
  }&lt;br /&gt;
  #mw-content-wrapper {&lt;br /&gt;
    float: right;&lt;br /&gt;
    margin-left: -14em;&lt;br /&gt;
    width: 100%;&lt;br /&gt;
  }&lt;br /&gt;
  #mw-related-navigation {&lt;br /&gt;
    width: 14em;&lt;br /&gt;
    padding: 0 1em 0 0;&lt;br /&gt;
  }&lt;br /&gt;
  div.color-middle {&lt;br /&gt;
    margin-right: 0;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (min-width: 1100px) and (max-width: 1339px) {&lt;br /&gt;
    #mw-content,&lt;br /&gt;
    #content-bottom-stuff {&lt;br /&gt;
    margin-right:1em;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (min-width: 851px) and (max-width: 1099px) {&lt;br /&gt;
    #mw-content,&lt;br /&gt;
    #content-bottom-stuff {&lt;br /&gt;
     margin-left: 1em;&lt;br /&gt;
    margin-right:1em;&lt;br /&gt;
    }&lt;br /&gt;
    #mw-content:before {&lt;br /&gt;
        display:none;&lt;br /&gt;
    }&lt;br /&gt;
    #mw-content:after {&lt;br /&gt;
        display:none;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (max-width: 850px) {&lt;br /&gt;
    #mw-content,&lt;br /&gt;
    #content-bottom-stuff {&lt;br /&gt;
    margin-right:1em;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
@media screen and (max-width: 600px) {&lt;br /&gt;
    #mw-content,&lt;br /&gt;
    #content-bottom-stuff {&lt;br /&gt;
    margin-right:0;&lt;br /&gt;
    margin-left:-1em;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Align top colour bar with page columns */&lt;br /&gt;
.ts-inner {&lt;br /&gt;
  padding: 0 0 0 1em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Re-aligning bottom logos */&lt;br /&gt;
#mw-footer {&lt;br /&gt;
    padding-right: 1em; &lt;br /&gt;
}    &lt;br /&gt;
&lt;br /&gt;
/* Avoid cutting off letters with descenders: g,j,p,q,y */&lt;br /&gt;
#personal h2 span {&lt;br /&gt;
    height: 1.5em;&lt;br /&gt;
    position:relative;&lt;br /&gt;
    bottom:0.1em;&lt;br /&gt;
    font-family: var(--header-font);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
    #personal {&lt;br /&gt;
        color: var(--header-text-color);&lt;br /&gt;
        .dropdown {&lt;br /&gt;
            color: var(--text-color);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
/* Triangle position patch */&lt;br /&gt;
#personal h2::after {&lt;br /&gt;
   position: relative;&lt;br /&gt;
   bottom: 0.5em;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
	:root.skin-theme-clientpref-day:has(&amp;gt; body.ns-3000),&lt;br /&gt;
    :root.skin-theme-clientpref-day:has(&amp;gt; body.ns-3001),&lt;br /&gt;
    :root.skin-theme-clientpref-day:has(.ddd-theme) {&lt;br /&gt;
&lt;br /&gt;
     --header-font: &#039;Instrument Serif&#039;;&lt;br /&gt;
        &lt;br /&gt;
    /* COLORS */&lt;br /&gt;
	--background-color: rgb(55, 55, 55);&lt;br /&gt;
	--content-color: rgba(246, 246, 246);&lt;br /&gt;
	--text-color: rgb(0, 0, 0);&lt;br /&gt;
	--link-color: #7b7970;&lt;br /&gt;
    --link-hover-color: #7b7970;&lt;br /&gt;
    --link-new-color: #ff3838;&lt;br /&gt;
    --text-stroke-color: #000;&lt;br /&gt;
    &lt;br /&gt;
    --search-bg-color: rgba(237, 237, 237);;&lt;br /&gt;
    --border-color: #b0b0b0;&lt;br /&gt;
    &lt;br /&gt;
	--header-color: rgb(0 0 0);&lt;br /&gt;
	--header-text-color: rgb(255, 255, 255);&lt;br /&gt;
    &lt;br /&gt;
    --sidebar-header-color: #4c4c4c;&lt;br /&gt;
    --sidebar-header-text: #fff;&lt;br /&gt;
    &lt;br /&gt;
    --gradient-start: rgb(34, 33, 33);&lt;br /&gt;
    --gradient-end: rgb(36, 36, 36);&lt;br /&gt;
    --banner-color: #4c4c4c;&lt;br /&gt;
    &lt;br /&gt;
	--footer-color: #000;&lt;br /&gt;
    --footer-text-color:#d6d6d6;&lt;br /&gt;
    --footer-link-color:#969696;&lt;br /&gt;
    --footer-link-hover-color:#969696;&lt;br /&gt;
    &lt;br /&gt;
    --cdx-button-color: #c9c9c9;&lt;br /&gt;
    --cdx-button-hover: #fff;&lt;br /&gt;
    &lt;br /&gt;
    --button-color: rgba(76, 76, 76);&lt;br /&gt;
	--button-text-color: rgb(255, 255, 255);&lt;br /&gt;
        &lt;br /&gt;
        .mw-body .mw-heading h1, .mw-body .mw-heading h2, .mw-body .mw-heading h3, .mw-body .mw-heading h4, .mw-body .mw-heading h5, .mw-body .mw-heading h6 {&lt;br /&gt;
            letter-spacing: 0.1rem;&lt;br /&gt;
            font-variant: small-caps;&lt;br /&gt;
            font-size: 30px;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        #pt-notifications-alert .mw-echo-notifications-badge.mw-echo-notifications-badge-all-read, body:not(.skin-vector-2022) #pt-notifications-notice .mw-echo-notifications-badge.mw-echo-notifications-badge-all-read {&lt;br /&gt;
            filter:invert(1);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        #mw-content {&lt;br /&gt;
        border:1px solid #e3e3e3;&lt;br /&gt;
        background-position-y: 1600px;&lt;br /&gt;
        background-size: 1000%;&lt;br /&gt;
        background-image: var(--ddd-bg);&lt;br /&gt;
        background-blend-mode: screen;&lt;br /&gt;
        background-color: #e3e3e3;&lt;br /&gt;
        box-shadow: inset 0 0 20px #a5a5a5;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
    .mw-wiki-title {&lt;br /&gt;
        font-family: &#039;Instrument Serif&#039; !important;&lt;br /&gt;
        letter-spacing: 0.1rem;&lt;br /&gt;
        font-style:italic;&lt;br /&gt;
    }&lt;br /&gt;
        &lt;br /&gt;
        #personal h2 span {&lt;br /&gt;
            letter-spacing: 0.2rem;&lt;br /&gt;
            font-weight:bold;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        #mw-header-container {&lt;br /&gt;
        background-position-x: 70px;&lt;br /&gt;
    background-position-y: 210px;&lt;br /&gt;
        background-image: url(&#039;https://nbittrpgwiki.pynappo.xyz/images/8/8c/DDDTextbox.png&#039;);&lt;br /&gt;
        background-blend-mode: overlay;&lt;br /&gt;
        background-color: #3b3b3b;&lt;br /&gt;
        box-shadow: inset 0 0 10px #7b7b7b;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        #catlinks-sidebar {&lt;br /&gt;
                    background-image: url(https://nbittrpgwiki.pynappo.xyz/images/2/27/DDDTextureVertical.png);&lt;br /&gt;
            background-size: 300%;&lt;br /&gt;
        background-blend-mode: overlay;&lt;br /&gt;
        background-color: #222;&lt;br /&gt;
            border: 1px solid #ffffff2e;&lt;br /&gt;
            box-shadow:inset 0 3px 5px -5px #ffffffa6,inset 0 0px 5px 0 #ffffffa6;&lt;br /&gt;
            h3 {&lt;br /&gt;
                color: #fff;&lt;br /&gt;
                font-variant: small-caps;&lt;br /&gt;
                font-style: italic;&lt;br /&gt;
                text-align:center;&lt;br /&gt;
                border: 1px solid #ffffff2e;&lt;br /&gt;
                padding: 0.5em;&lt;br /&gt;
                border-radius: 12px;&lt;br /&gt;
                background-image: url(https://nbittrpgwiki.pynappo.xyz/images/2/27/DDDTextureVertical.png);&lt;br /&gt;
            background-size: 200%;&lt;br /&gt;
        background-blend-mode: overlay;&lt;br /&gt;
        background-color: #0c0c0c;&lt;br /&gt;
            }&lt;br /&gt;
            a {&lt;br /&gt;
                color: #fff;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        #mw-footer-container {&lt;br /&gt;
        background-position-x: 70px;&lt;br /&gt;
    background-position-y: 210px;&lt;br /&gt;
        background-image: url(&#039;https://nbittrpgwiki.pynappo.xyz/images/8/8c/DDDTextbox.png&#039;);&lt;br /&gt;
        background-blend-mode: overlay;&lt;br /&gt;
        background-color: #191919;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
    .read-more-container-card-list &amp;gt; li .cdx-card {&lt;br /&gt;
    background-position-x: 70px;&lt;br /&gt;
    background-position-y: 210px;&lt;br /&gt;
        background-image: url(&#039;https://nbittrpgwiki.pynappo.xyz/images/8/8c/DDDTextbox.png&#039;);&lt;br /&gt;
        background-blend-mode: overlay;&lt;br /&gt;
        background-color: #383837;&lt;br /&gt;
            border:none;&lt;br /&gt;
            box-shadow:inset 0 1px 5px -5px #ffffffa6,inset 0 0px 10px 1px #ffffffa6;&lt;br /&gt;
        transition: 0.2s;&lt;br /&gt;
        &amp;amp;:hover {&lt;br /&gt;
            filter: brightness(1.2);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
     .read-more-container-card-list &amp;gt; li:nth-child(2n+1) .cdx-card {&lt;br /&gt;
        background-position-x: 70px;&lt;br /&gt;
        background-position-y: 110px;&lt;br /&gt;
    }&lt;br /&gt;
    .read-more-container-card-list &amp;gt; li:nth-child(3n) .cdx-card {&lt;br /&gt;
        background-position-x: 400px;&lt;br /&gt;
        background-position-y: 80px;&lt;br /&gt;
    }&lt;br /&gt;
        &lt;br /&gt;
        .cdx-card__text__title,&lt;br /&gt;
        .read-more-container-heading {&lt;br /&gt;
            color: #fff;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
 .mw-first-heading {&lt;br /&gt;
        font-family: &#039;Instrument Serif&#039; !important;&lt;br /&gt;
        font-style:italic;&lt;br /&gt;
        text-transform: uppercase;&lt;br /&gt;
        color: #fff;&lt;br /&gt;
     paint-order: stroke fill;&lt;br /&gt;
     -webkit-text-stroke: 8px #000;&lt;br /&gt;
     letter-spacing: 0.2rem;&lt;br /&gt;
     text-align: center;&lt;br /&gt;
     background: linear-gradient(90deg, #000 0%, rgba(0, 0, 0, .45) 100%);&lt;br /&gt;
    mask-image:linear-gradient(to right,transparent,black 15% 85%, transparent);&lt;br /&gt;
     padding: 0.3em;&lt;br /&gt;
     box-shadow:inset 0 3px 15px -5px #ffffffa6,inset 0 0px 15px 0 #ffffffa6;&lt;br /&gt;
     border-top: 3px solid #000;&lt;br /&gt;
         border-bottom: 3px solid #000;&lt;br /&gt;
    }&lt;br /&gt;
        &lt;br /&gt;
        .toc {&lt;br /&gt;
             background-position-x: 0px;&lt;br /&gt;
    background-position-y: 270px;&lt;br /&gt;
            background-size: 650%;&lt;br /&gt;
        background-image: url(&#039;https://nbittrpgwiki.pynappo.xyz/images/8/8c/DDDTextbox.png&#039;);&lt;br /&gt;
        background-blend-mode: overlay;&lt;br /&gt;
        background-color: #6c6c6c;&lt;br /&gt;
        box-shadow:inset 0 1px 5px -5px #ffffffa6,inset 0 0px 10px 1px #ffffffa6;&lt;br /&gt;
            border-radius: 12px;&lt;br /&gt;
            color: #fff;&lt;br /&gt;
            .toctogglelabel::after {&lt;br /&gt;
                color: #fff;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        #mw-content-container {&lt;br /&gt;
            background-image: url(&#039;https://nbittrpgwiki.pynappo.xyz/images/2/21/MonochromeForest.png&#039;);&lt;br /&gt;
            background-color: #6a6866;&lt;br /&gt;
            background-blend-mode: multiply;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
    #mw-content-block {&lt;br /&gt;
        background: #000000;&lt;br /&gt;
        background: linear-gradient(90deg,rgba(0, 0, 0, 1) 5%, rgba(110, 110, 110, 0) 20%);&lt;br /&gt;
    }&lt;br /&gt;
     &lt;br /&gt;
#mw-site-navigation .sidebar-chunk .mw-portlet &amp;gt; div,&lt;br /&gt;
#mw-site-navigation .sidebar-chunk .mw-portlet-body {&lt;br /&gt;
        margin-bottom: 1em;&lt;br /&gt;
        margin-left: -0.3em;&lt;br /&gt;
    }&lt;br /&gt;
        &lt;br /&gt;
#mw-site-navigation {&lt;br /&gt;
    &amp;amp; .sidebar-chunk {&lt;br /&gt;
        clip-path:none;&lt;br /&gt;
        background-image: url(https://nbittrpgwiki.pynappo.xyz/images/2/27/DDDTextureVertical.png);&lt;br /&gt;
            background-size: 700%;&lt;br /&gt;
        background-blend-mode: overlay;&lt;br /&gt;
        background-color: #222;&lt;br /&gt;
            border:none;&lt;br /&gt;
            box-shadow:inset 0 3px 5px -5px #ffffffa6,inset 0 0px 5px 0 #ffffffa6;&lt;br /&gt;
     h3 { &lt;br /&gt;
         font-family: var(--header-font);&lt;br /&gt;
         font-variant: small-caps;&lt;br /&gt;
         font-size: 24px;&lt;br /&gt;
         letter-spacing: 0.05rem;&lt;br /&gt;
         line-height: 0.3;&lt;br /&gt;
         font-weight: bold;&lt;br /&gt;
        border-bottom: 3px solid white;&lt;br /&gt;
         margin: 0.2em 0;&lt;br /&gt;
    }&lt;br /&gt;
        li {&lt;br /&gt;
            padding: 0.5em;&lt;br /&gt;
            transition: 0.2s;&lt;br /&gt;
            &amp;amp;:hover {&lt;br /&gt;
                transform: translateX(8px);&lt;br /&gt;
                background: linear-gradient(90deg,#ffeb6736 40%, rgba(110, 110, 110, 0) 95%);&lt;br /&gt;
                box-shadow: inset 8px 0 10px -5px #ffeb6570&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        li &amp;gt; a {&lt;br /&gt;
            color: #fff;&lt;br /&gt;
            transition: 0.2s;&lt;br /&gt;
        }&lt;br /&gt;
        li &amp;gt; a:hover {&lt;br /&gt;
            text-decoration:none;&lt;br /&gt;
            filter: drop-shadow(0 0 0.2rem #dcb114);&lt;br /&gt;
        }&lt;br /&gt;
        li &amp;gt; a:hover::before {&lt;br /&gt;
            text-decoration:none;&lt;br /&gt;
            filter: drop-shadow(0 0 0.2rem #dcb114);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Pynappo</name></author>
	</entry>
	<entry>
		<id>https://nbittrpgwiki.pynappo.xyz/index.php?title=MediaWiki:Timeless.css&amp;diff=3325</id>
		<title>MediaWiki:Timeless.css</title>
		<link rel="alternate" type="text/html" href="https://nbittrpgwiki.pynappo.xyz/index.php?title=MediaWiki:Timeless.css&amp;diff=3325"/>
		<updated>2026-10-06T03:07:57Z</updated>

		<summary type="html">&lt;p&gt;Pynappo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* All CSS here will be loaded for users of the Timeless skin */&lt;br /&gt;
/* Fonts */&lt;br /&gt;
@import url(&#039;https://fonts.googleapis.com/css2?family=Rosario:ital,wght@0,300..700;1,300..700&amp;amp;display=swap&#039;);&lt;br /&gt;
@import url(&#039;https://fonts.googleapis.com/css2?family=Rubik:ital,wght@0,300..900;1,300..900&amp;amp;display=swap&#039;);&lt;br /&gt;
@import url(&#039;https://fonts.googleapis.com/css2?family=Lora:ital,wght@0,400..700;1,400..700&amp;amp;display=swap&#039;);&lt;br /&gt;
 &lt;br /&gt;
:root {&lt;br /&gt;
	&lt;br /&gt;
	--ddd-bg:  url(&amp;quot;https://nbittrpgwiki.pynappo.xyz/images/9/98/DDDTextbox2.png&amp;quot;);&lt;br /&gt;
    &lt;br /&gt;
    --main-font: &#039;Rubik&#039;;&lt;br /&gt;
    --header-font: &#039;Rubik&#039;;&lt;br /&gt;
    --title-font: &#039;Lora&#039;;&lt;br /&gt;
    &lt;br /&gt;
    /* COLORS */&lt;br /&gt;
	--background-color: rgb(227, 227, 227);&lt;br /&gt;
	--content-color: rgba(255, 250, 242);&lt;br /&gt;
	--text-color: rgb(61, 44, 35, 1);&lt;br /&gt;
	--link-color: #8346a0;&lt;br /&gt;
    --link-hover-color: #5e188a;&lt;br /&gt;
    --link-new-color: #ff3874;&lt;br /&gt;
    --text-stroke-color: #fff;&lt;br /&gt;
    &lt;br /&gt;
    --search-bg-color: rgba(255, 250, 242);;&lt;br /&gt;
    --border-color: #be7e32;&lt;br /&gt;
    &lt;br /&gt;
	--header-color: rgb(104 71 53);&lt;br /&gt;
	--header-text-color: rgb(255, 255, 255);&lt;br /&gt;
    &lt;br /&gt;
    --sidebar-header-color: #6f4229;&lt;br /&gt;
    --sidebar-header-text: #fff;&lt;br /&gt;
    &lt;br /&gt;
    --gradient-start: rgb(225, 225, 225);&lt;br /&gt;
    --gradient-end: rgb(111, 111, 111);&lt;br /&gt;
    --banner-color: #743f95;&lt;br /&gt;
    &lt;br /&gt;
	--footer-color: #201a16;&lt;br /&gt;
    --footer-text-color:#977b50;&lt;br /&gt;
    --footer-link-color:#a88e67;&lt;br /&gt;
    --footer-link-hover-color:#d9b299;&lt;br /&gt;
    &lt;br /&gt;
    --cdx-button-color: #bea48b;&lt;br /&gt;
    --cdx-button-hover: #f5dfca;&lt;br /&gt;
    &lt;br /&gt;
    --button-color: rgba(104, 83, 68, 1);&lt;br /&gt;
	--button-text-color: rgb(255, 255, 255);&lt;br /&gt;
}&lt;br /&gt;
/* BACKGROUNDS */&lt;br /&gt;
.ddd-quote-bg {&lt;br /&gt;
	background-image: url(&amp;quot;https://nbittrpgwiki.pynappo.xyz/images/9/98/DDDTextbox2.png&amp;quot;);&lt;br /&gt;
   &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* || GENERAL */&lt;br /&gt;
body {&lt;br /&gt;
    font-family: var(--main-font);&lt;br /&gt;
    color: var(--text-color);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
pre, code {&lt;br /&gt;
	font-family:monospace;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
a:not(.new),&lt;br /&gt;
#mw-content a:not(.new),&lt;br /&gt;
a:visited,&lt;br /&gt;
a:visited:hover {&lt;br /&gt;
	color: var(--link-color);&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
.mw-wiki-title:hover {&lt;br /&gt;
    color: var(--header-text-color) !important;&lt;br /&gt;
    text-decoration:none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.new a {&lt;br /&gt;
    color: var(--link-new-color);&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
/* || HEADINGS */    &lt;br /&gt;
.mw-heading  {&lt;br /&gt;
    h1, h2, h3, h4, h5 {&lt;br /&gt;
    font-family: var(--header-font);&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
.mw-body  {&lt;br /&gt;
    h1, h2, h3, h4, h5 {&lt;br /&gt;
    font-family: var(--header-font);&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    }&lt;br /&gt;
    h1.firstHeading {&lt;br /&gt;
        border-bottom: none;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* || HEADER */&lt;br /&gt;
#mw-header-container {&lt;br /&gt;
    background-color: var(--header-color);&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
#p-banner.mw-wiki-title {&lt;br /&gt;
    color: var(--header-text-color);&lt;br /&gt;
    font-family: var(--title-font);&lt;br /&gt;
    font-weight:bold;&lt;br /&gt;
    font-size: 18px;&lt;br /&gt;
    margin-top: -0.2em;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
#simpleSearch {&lt;br /&gt;
    background: var(--search-bg-color);&lt;br /&gt;
    border: 1px solid var(--border-color);&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
.color-bar {&lt;br /&gt;
    width:0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* || SIDEBAR */&lt;br /&gt;
#ca-delete { display: none !important; }&lt;br /&gt;
#page-tools { display: none !important;}&lt;br /&gt;
#t-cargopagevalueslink { display:none }&lt;br /&gt;
#t-smwbrowselink { display:none }  &lt;br /&gt;
    &lt;br /&gt;
@keyframes highlight {&lt;br /&gt;
	from {&lt;br /&gt;
		background-position: 0;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	to {&lt;br /&gt;
		background-position: -100%;&lt;br /&gt;
	}&lt;br /&gt;
}    &lt;br /&gt;
/* Removes logo for now */&lt;br /&gt;
.mw-wiki-logo {&lt;br /&gt;
    display: none;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
#site-navigation .sidebar-chunk  {&lt;br /&gt;
    margin-top: 4.5em;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
#mw-site-navigation {&lt;br /&gt;
    padding-top: 0.2em;&lt;br /&gt;
    .sidebar-chunk h3 {&lt;br /&gt;
        border-bottom:none;&lt;br /&gt;
        background-color: var(--sidebar-header-color);&lt;br /&gt;
        color: var(--sidebar-header-text);&lt;br /&gt;
        padding: 0.4em 0.4em 0.4em 1.5em;&lt;br /&gt;
        clip-path: polygon(90% 50%, 100% 100%, 0% 100%, 0% 0%, 100% 0%);&lt;br /&gt;
    }&lt;br /&gt;
    .sidebar-chunk {&lt;br /&gt;
        padding-top: 1em;&lt;br /&gt;
        padding-bottom: 1em;&lt;br /&gt;
        background-color: var(--content-color);&lt;br /&gt;
        box-shadow: 0 0 8px rgba(0,0,0,0.2);&lt;br /&gt;
        h3 &amp;gt; a {&lt;br /&gt;
            color: var(--font-color);&lt;br /&gt;
        }&lt;br /&gt;
        ul &amp;gt; a:hover {&lt;br /&gt;
            animation-name: highlight;&lt;br /&gt;
            animation-duration: 0.25s;&lt;br /&gt;
            animation-fill-mode: forwards;&lt;br /&gt;
            background-size: 200%;&lt;br /&gt;
            background-image: linear-gradient(to left, #eacf1b70 50%, transparent 50%);&lt;br /&gt;
        }&lt;br /&gt;
        clip-path: polygon(100% 0, 100% 100%, 99% 98%, 95% 99%, 92% 99%, 89% 100%, 86% 99%, 83% 100%, 77% 99%, 72% 100%, 66% 98%, 62% 100%, 59% 99%, 54% 99%, 49% 100%, 46% 98%, 43% 100%, 40% 98%, 38% 100%, 35% 99%, 31% 100%, 28% 99%, 25% 99%, 22% 100%, 19% 99%, 16% 100%, 13% 99%, 10% 99%, 7% 100%, 4% 99%, 0% 100%, 0% 0%);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-related-navigation {&lt;br /&gt;
    position: sticky;&lt;br /&gt;
    top: 70px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-related-navigation .sidebar-chunk {&lt;br /&gt;
    background: var(--content-color);&lt;br /&gt;
    box-shadow: 0 0 8px rgba(0,0,0,0.2);&lt;br /&gt;
    border-radius: 20px;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
/* Edit button changes */&lt;br /&gt;
#ca-ve-edit a::before {&lt;br /&gt;
    content: &amp;quot;Visual edit&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#ca-ve-edit span {&lt;br /&gt;
    display:none;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
/* || WIKI CONTENT */&lt;br /&gt;
#mw-content-block,&lt;br /&gt;
#mw-content-container {&lt;br /&gt;
    background: linear-gradient(180deg, var(--gradient-start) 0%, rgba(0, 0, 0, 0) 100%), var(--gradient-end);&lt;br /&gt;
    background-color: var(--background-color);&lt;br /&gt;
    border-bottom: none;  &lt;br /&gt;
}    &lt;br /&gt;
    &lt;br /&gt;
#mw-content {&lt;br /&gt;
    padding-left: 1.5em;&lt;br /&gt;
    padding-right: 1.5em;&lt;br /&gt;
    box-shadow: 0 0 8px rgba(0,0,0,0.2);&lt;br /&gt;
    background-color: var(--content-color);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* || CATEGORY LINKS */&lt;br /&gt;
#catlinks {&lt;br /&gt;
    padding: 0.5em;&lt;br /&gt;
    padding-bottom: 0.1em;&lt;br /&gt;
    border: 2px solid color-mix(in srgb, var(--link-color) 30%, transparent);&lt;br /&gt;
    margin-top: 1em;&lt;br /&gt;
    margin-bottom: 1em;&lt;br /&gt;
    color: #000;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
/* || RELATED PAGES */&lt;br /&gt;
.client-js .read-more-container {&lt;br /&gt;
    padding: 0;&lt;br /&gt;
    margin: 1em;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
.read-more-container-heading {&lt;br /&gt;
    color: var(--text-color);&lt;br /&gt;
    border-bottom: 0;&lt;br /&gt;
    padding-bottom: 0.5em;&lt;br /&gt;
    font-size: 0.8em;&lt;br /&gt;
    font-weight: normal;&lt;br /&gt;
    letter-spacing: 1px;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
.cdx-card {&lt;br /&gt;
    background: var(--content-color);&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
/* || FOOTER */&lt;br /&gt;
.mw-footer-container {&lt;br /&gt;
    background-color: var(--footer-color);&lt;br /&gt;
    color: var(--footer-text-color);&lt;br /&gt;
    a {&lt;br /&gt;
        color: var(--footer-link-color);&lt;br /&gt;
        text-decoration:underline;&lt;br /&gt;
        &amp;amp;:hover {&lt;br /&gt;
            color: var(--footer-link-hover-color);&lt;br /&gt;
        }&lt;br /&gt;
        &amp;amp;.external {&lt;br /&gt;
            color: var(--footer-link-color);&lt;br /&gt;
            &amp;amp;:hover {&lt;br /&gt;
                color: var(--footer-link-hover-color);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
.cdx-button:enabled, .cdx-button.cdx-button--fake-button--enabled {&lt;br /&gt;
        background: var(--cdx-button-color);&lt;br /&gt;
        &amp;amp;:hover {&lt;br /&gt;
            background-color: var(--cdx-button-hover);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
/* || PORTABLE INFOBOXES */&lt;br /&gt;
.portable-infobox {&lt;br /&gt;
	margin-right:3px;&lt;br /&gt;
	border-radius:5px;&lt;br /&gt;
}  &lt;br /&gt;
&lt;br /&gt;
.portable-infobox .pi-navigation {&lt;br /&gt;
    paint-order: stroke fill;&lt;br /&gt;
    -webkit-text-stroke: 3px var(--text-stroke-color);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.portable-infobox .pi-item-spacing {&lt;br /&gt;
    border-radius:2px;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
.pi-section-navigation .pi-section-tab.pi-section-active, .pi-section-navigation .pi-section-tab.current, .pi-media-collection .pi-tab-link.current {&lt;br /&gt;
    color: var(--banner-text-color);&lt;br /&gt;
    border-radius:2px;&lt;br /&gt;
    border-bottom: 1px solid var(--button-text-color);&lt;br /&gt;
}&lt;br /&gt;
.portable-infobox .pi-header, .portable-infobox .pi-title {&lt;br /&gt;
    text-align: center;&lt;br /&gt;
	color: var(--button-text-color);&lt;br /&gt;
	background-color:var(--button-color);&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
.lua-infobox { &lt;br /&gt;
    .infobox-label {&lt;br /&gt;
        width: 5.5em;&lt;br /&gt;
    }&lt;br /&gt;
    .infobox-label, .infobox-data {&lt;br /&gt;
    padding: 0.1em 0.5em;&lt;br /&gt;
        text-align:left;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
/* DDD Infoboxes */&lt;br /&gt;
.mw-parser-output table.wikitable.lua-infobox.ddd-theme {&lt;br /&gt;
    border: 3px double #000;&lt;br /&gt;
    border-style: double solid;&lt;br /&gt;
    background-position-x: 700px;&lt;br /&gt;
    background-position-y: 80px;&lt;br /&gt;
    background-image: var(--ddd-bg);&lt;br /&gt;
    background-blend-mode: screen;&lt;br /&gt;
    background-size: 700%;&lt;br /&gt;
    background-color: #dadada;&lt;br /&gt;
    .infobox-title {&lt;br /&gt;
        paint-order: stroke fill;&lt;br /&gt;
        -webkit-text-stroke: 4px #000;&lt;br /&gt;
        border-top: 2px solid #000;&lt;br /&gt;
        border-bottom: 3px solid #000;&lt;br /&gt;
        box-shadow:inset 0 3px 5px 0 #ffffffa6,inset 0 -3px 5px 0 #ffffffa6;&lt;br /&gt;
        background-position-x: 900px;&lt;br /&gt;
        background-position-y: 330px;&lt;br /&gt;
        background-image: var(--ddd-bg);&lt;br /&gt;
        background-blend-mode: darken;&lt;br /&gt;
        color: #fff;&lt;br /&gt;
        padding: 0.5em;&lt;br /&gt;
        background-color: #434343;&lt;br /&gt;
        }&lt;br /&gt;
    .infobox-header {&lt;br /&gt;
        color: #fff;&lt;br /&gt;
        background-position-x: 900px;&lt;br /&gt;
        background-position-y: 430px;&lt;br /&gt;
        background-image: var(--ddd-bg);&lt;br /&gt;
        paint-order: stroke fill;&lt;br /&gt;
        -webkit-text-stroke: 4px #000;&lt;br /&gt;
        border-top: 2px solid #000;&lt;br /&gt;
        border-bottom: 3px solid #000;&lt;br /&gt;
        box-shadow:inset 0 3px 5px 0 #ffffffa6,inset 0 -3px 5px 0 #ffffffa6;&lt;br /&gt;
        background-blend-mode: darken;&lt;br /&gt;
        font-variant:small-caps;&lt;br /&gt;
        font-size:larger;&lt;br /&gt;
        background-color: #434343;&lt;br /&gt;
        }&lt;br /&gt;
    .infobox-data:not(.infobox-header) {&lt;br /&gt;
        border:none;&lt;br /&gt;
    }&lt;br /&gt;
    .infobox-label {&lt;br /&gt;
        color: #000;&lt;br /&gt;
        font-style: italic;&lt;br /&gt;
        font-variant:small-caps;&lt;br /&gt;
        font-weight:bold;&lt;br /&gt;
        }&lt;br /&gt;
    .infobox-data {&lt;br /&gt;
        border-bottom: 0;&lt;br /&gt;
        box-shadow: inset 0 -1px 5px -5px #000;&lt;br /&gt;
        font-size:smaller;&lt;br /&gt;
        }&lt;br /&gt;
    .infobox-nav {&lt;br /&gt;
        background-position-x: 540px;&lt;br /&gt;
        background-position-y: 400px;&lt;br /&gt;
        color: grey;&lt;br /&gt;
        paint-order: stroke fill;&lt;br /&gt;
        -webkit-text-stroke: 3px #fff;&lt;br /&gt;
        text-align:center;&lt;br /&gt;
        font-size:small;&lt;br /&gt;
        padding: 0.2em;&lt;br /&gt;
        }&lt;br /&gt;
    .infobox-img {&lt;br /&gt;
        text-align:center;&lt;br /&gt;
        background: var(--ddd-bg);&lt;br /&gt;
        background-position-y: 300px;&lt;br /&gt;
        background-size: 700%;&lt;br /&gt;
        background-color: #c4c4c4;  &lt;br /&gt;
        background-blend-mode: overlay;&lt;br /&gt;
        box-shadow:inset 0 3px 5px 0 #ffffffa6,inset 0 -3px 5px 0 #ffffffa6;&lt;br /&gt;
        padding: 0.25em;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* For [[Weathia: Resurrection]] */ &lt;br /&gt;
.fluidimg100 img, .fluidimg img {&lt;br /&gt;
	max-width:100%;&lt;br /&gt;
	height:auto;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
/* || PRINT COMPATIBILITY */&lt;br /&gt;
&lt;br /&gt;
@media print {&lt;br /&gt;
    :root {&lt;br /&gt;
        --background-color: rgb(0, 0, 0);&lt;br /&gt;
        --content-color: rgba(255, 255, 255);&lt;br /&gt;
        --text-color: rgb(0, 0, 0);&lt;br /&gt;
        --link-color: #7d7d7d;&lt;br /&gt;
        --link-hover-color: #bfbfbf;&lt;br /&gt;
        --link-new-color: #ff3838;&lt;br /&gt;
        --text-stroke-color: #000;&lt;br /&gt;
&lt;br /&gt;
        --search-bg-color: rgba(255, 250, 242);;&lt;br /&gt;
        --border-color: #b0b0b0;&lt;br /&gt;
&lt;br /&gt;
        --header-color: rgb(0 0 0);&lt;br /&gt;
        --header-text-color: rgb(255, 255, 255);&lt;br /&gt;
&lt;br /&gt;
        --sidebar-header-color: #fff;&lt;br /&gt;
        --sidebar-header-text: #fff;&lt;br /&gt;
&lt;br /&gt;
        --gradient-start: rgb(255, 255, 255);&lt;br /&gt;
        --gradient-end: rgb(255, 255, 255);&lt;br /&gt;
        --banner-color: #fff;&lt;br /&gt;
&lt;br /&gt;
        --footer-color: #fff;&lt;br /&gt;
        --footer-text-color:#000;&lt;br /&gt;
        --footer-link-color:#aaa;&lt;br /&gt;
        --footer-link-hover-color:#aaa;&lt;br /&gt;
&lt;br /&gt;
        --cdx-button-color: #c9c9c9;&lt;br /&gt;
        --cdx-button-hover: #fff;&lt;br /&gt;
&lt;br /&gt;
        --button-color: rgba(170, 170, 170);&lt;br /&gt;
        --button-text-color: rgb(255, 255, 255);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    #tabs,&lt;br /&gt;
    .toc,&lt;br /&gt;
    .navbox {&lt;br /&gt;
        display:none;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    #mw-content {&lt;br /&gt;
        box-shadow: none;&lt;br /&gt;
        margin:0;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .portable-infobox {&lt;br /&gt;
        border: 2px solid #000 ;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .portable-infobox .pi-navigation {&lt;br /&gt;
        -webkit-text-stroke: 0;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .portable-infobox .pi-header,&lt;br /&gt;
    #mw-content-text .pi-title {&lt;br /&gt;
        color: var(--text-color);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
/* One-sided navigation menu - MEDIAWIKI SNIPPET */&lt;br /&gt;
@media (min-width: 1340px) {&lt;br /&gt;
  #mw-content-block {&lt;br /&gt;
    display: block;&lt;br /&gt;
  }&lt;br /&gt;
  #mw-content,&lt;br /&gt;
  #content-bottom-stuff {&lt;br /&gt;
    margin-left: 14em;&lt;br /&gt;
    margin-right:1em;&lt;br /&gt;
  }&lt;br /&gt;
  #mw-content-wrapper {&lt;br /&gt;
    float: right;&lt;br /&gt;
    margin-left: -14em;&lt;br /&gt;
    width: 100%;&lt;br /&gt;
  }&lt;br /&gt;
  #mw-related-navigation {&lt;br /&gt;
    width: 14em;&lt;br /&gt;
    padding: 0 1em 0 0;&lt;br /&gt;
  }&lt;br /&gt;
  div.color-middle {&lt;br /&gt;
    margin-right: 0;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (min-width: 1100px) and (max-width: 1339px) {&lt;br /&gt;
    #mw-content,&lt;br /&gt;
    #content-bottom-stuff {&lt;br /&gt;
    margin-right:1em;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (min-width: 851px) and (max-width: 1099px) {&lt;br /&gt;
    #mw-content,&lt;br /&gt;
    #content-bottom-stuff {&lt;br /&gt;
     margin-left: 1em;&lt;br /&gt;
    margin-right:1em;&lt;br /&gt;
    }&lt;br /&gt;
    #mw-content:before {&lt;br /&gt;
        display:none;&lt;br /&gt;
    }&lt;br /&gt;
    #mw-content:after {&lt;br /&gt;
        display:none;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (max-width: 850px) {&lt;br /&gt;
    #mw-content,&lt;br /&gt;
    #content-bottom-stuff {&lt;br /&gt;
    margin-right:1em;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
@media screen and (max-width: 600px) {&lt;br /&gt;
    #mw-content,&lt;br /&gt;
    #content-bottom-stuff {&lt;br /&gt;
    margin-right:0;&lt;br /&gt;
    margin-left:-1em;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Align top colour bar with page columns */&lt;br /&gt;
.ts-inner {&lt;br /&gt;
  padding: 0 0 0 1em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Re-aligning bottom logos */&lt;br /&gt;
#mw-footer {&lt;br /&gt;
    padding-right: 1em; &lt;br /&gt;
}    &lt;br /&gt;
&lt;br /&gt;
/* Avoid cutting off letters with descenders: g,j,p,q,y */&lt;br /&gt;
#personal h2 span {&lt;br /&gt;
    height: 1.5em;&lt;br /&gt;
    position:relative;&lt;br /&gt;
    bottom:0.1em;&lt;br /&gt;
    font-family: var(--header-font);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
    #personal {&lt;br /&gt;
        color: var(--header-text-color);&lt;br /&gt;
        .dropdown {&lt;br /&gt;
            color: var(--text-color);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
/* Triangle position patch */&lt;br /&gt;
#personal h2::after {&lt;br /&gt;
   position: relative;&lt;br /&gt;
   bottom: 0.5em;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
	:root.skin-theme-clientpref-day:has(&amp;gt; body.ns-3000),&lt;br /&gt;
    :root.skin-theme-clientpref-day:has(&amp;gt; body.ns-3001),&lt;br /&gt;
    :root.skin-theme-clientpref-day:has(.ddd-theme) {&lt;br /&gt;
&lt;br /&gt;
     --header-font: &#039;Instrument Serif&#039;;&lt;br /&gt;
        &lt;br /&gt;
    /* COLORS */&lt;br /&gt;
	--background-color: rgb(55, 55, 55);&lt;br /&gt;
	--content-color: rgba(246, 246, 246);&lt;br /&gt;
	--text-color: rgb(0, 0, 0);&lt;br /&gt;
	--link-color: #7b7970;&lt;br /&gt;
    --link-hover-color: #7b7970;&lt;br /&gt;
    --link-new-color: #ff3838;&lt;br /&gt;
    --text-stroke-color: #000;&lt;br /&gt;
    &lt;br /&gt;
    --search-bg-color: rgba(237, 237, 237);;&lt;br /&gt;
    --border-color: #b0b0b0;&lt;br /&gt;
    &lt;br /&gt;
	--header-color: rgb(0 0 0);&lt;br /&gt;
	--header-text-color: rgb(255, 255, 255);&lt;br /&gt;
    &lt;br /&gt;
    --sidebar-header-color: #4c4c4c;&lt;br /&gt;
    --sidebar-header-text: #fff;&lt;br /&gt;
    &lt;br /&gt;
    --gradient-start: rgb(34, 33, 33);&lt;br /&gt;
    --gradient-end: rgb(36, 36, 36);&lt;br /&gt;
    --banner-color: #4c4c4c;&lt;br /&gt;
    &lt;br /&gt;
	--footer-color: #000;&lt;br /&gt;
    --footer-text-color:#d6d6d6;&lt;br /&gt;
    --footer-link-color:#969696;&lt;br /&gt;
    --footer-link-hover-color:#969696;&lt;br /&gt;
    &lt;br /&gt;
    --cdx-button-color: #c9c9c9;&lt;br /&gt;
    --cdx-button-hover: #fff;&lt;br /&gt;
    &lt;br /&gt;
    --button-color: rgba(76, 76, 76);&lt;br /&gt;
	--button-text-color: rgb(255, 255, 255);&lt;br /&gt;
        &lt;br /&gt;
        .mw-body .mw-heading h1, .mw-body .mw-heading h2, .mw-body .mw-heading h3, .mw-body .mw-heading h4, .mw-body .mw-heading h5, .mw-body .mw-heading h6 {&lt;br /&gt;
            letter-spacing: 0.1rem;&lt;br /&gt;
            font-variant: small-caps;&lt;br /&gt;
            font-size: 30px;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        #pt-notifications-alert .mw-echo-notifications-badge.mw-echo-notifications-badge-all-read, body:not(.skin-vector-2022) #pt-notifications-notice .mw-echo-notifications-badge.mw-echo-notifications-badge-all-read {&lt;br /&gt;
            filter:invert(1);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        #mw-content {&lt;br /&gt;
        border:1px solid #e3e3e3;&lt;br /&gt;
        background-position-y: 1600px;&lt;br /&gt;
        background-size: 1000%;&lt;br /&gt;
        background-image: var(--ddd-bg);&lt;br /&gt;
        background-blend-mode: screen;&lt;br /&gt;
        background-color: #e3e3e3;&lt;br /&gt;
        box-shadow: inset 0 0 20px #a5a5a5;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
    .mw-wiki-title {&lt;br /&gt;
        font-family: &#039;Instrument Serif&#039; !important;&lt;br /&gt;
        letter-spacing: 0.1rem;&lt;br /&gt;
        font-style:italic;&lt;br /&gt;
    }&lt;br /&gt;
        &lt;br /&gt;
        #personal h2 span {&lt;br /&gt;
            letter-spacing: 0.2rem;&lt;br /&gt;
            font-weight:bold;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        #mw-header-container {&lt;br /&gt;
        background-position-x: 70px;&lt;br /&gt;
    background-position-y: 210px;&lt;br /&gt;
        background-image: url(&#039;https://nbittrpgwiki.pynappo.xyz/images/8/8c/DDDTextbox.png&#039;);&lt;br /&gt;
        background-blend-mode: overlay;&lt;br /&gt;
        background-color: #3b3b3b;&lt;br /&gt;
        box-shadow: inset 0 0 10px #7b7b7b;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        #catlinks-sidebar {&lt;br /&gt;
                    background-image: url(https://nbittrpgwiki.pynappo.xyz/images/2/27/DDDTextureVertical.png);&lt;br /&gt;
            background-size: 300%;&lt;br /&gt;
        background-blend-mode: overlay;&lt;br /&gt;
        background-color: #222;&lt;br /&gt;
            border: 1px solid #ffffff2e;&lt;br /&gt;
            box-shadow:inset 0 3px 5px -5px #ffffffa6,inset 0 0px 5px 0 #ffffffa6;&lt;br /&gt;
            h3 {&lt;br /&gt;
                color: #fff;&lt;br /&gt;
                font-variant: small-caps;&lt;br /&gt;
                font-style: italic;&lt;br /&gt;
                text-align:center;&lt;br /&gt;
                border: 1px solid #ffffff2e;&lt;br /&gt;
                padding: 0.5em;&lt;br /&gt;
                border-radius: 12px;&lt;br /&gt;
                background-image: url(https://nbittrpgwiki.pynappo.xyz/images/2/27/DDDTextureVertical.png);&lt;br /&gt;
            background-size: 200%;&lt;br /&gt;
        background-blend-mode: overlay;&lt;br /&gt;
        background-color: #0c0c0c;&lt;br /&gt;
            }&lt;br /&gt;
            a {&lt;br /&gt;
                color: #fff;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        #mw-footer-container {&lt;br /&gt;
        background-position-x: 70px;&lt;br /&gt;
    background-position-y: 210px;&lt;br /&gt;
        background-image: url(&#039;https://nbittrpgwiki.pynappo.xyz/images/8/8c/DDDTextbox.png&#039;);&lt;br /&gt;
        background-blend-mode: overlay;&lt;br /&gt;
        background-color: #191919;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
    .read-more-container-card-list &amp;gt; li .cdx-card {&lt;br /&gt;
    background-position-x: 70px;&lt;br /&gt;
    background-position-y: 210px;&lt;br /&gt;
        background-image: url(&#039;https://nbittrpgwiki.pynappo.xyz/images/8/8c/DDDTextbox.png&#039;);&lt;br /&gt;
        background-blend-mode: overlay;&lt;br /&gt;
        background-color: #383837;&lt;br /&gt;
            border:none;&lt;br /&gt;
            box-shadow:inset 0 1px 5px -5px #ffffffa6,inset 0 0px 10px 1px #ffffffa6;&lt;br /&gt;
        transition: 0.2s;&lt;br /&gt;
        &amp;amp;:hover {&lt;br /&gt;
            filter: brightness(1.2);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
     .read-more-container-card-list &amp;gt; li:nth-child(2n+1) .cdx-card {&lt;br /&gt;
        background-position-x: 70px;&lt;br /&gt;
        background-position-y: 110px;&lt;br /&gt;
    }&lt;br /&gt;
    .read-more-container-card-list &amp;gt; li:nth-child(3n) .cdx-card {&lt;br /&gt;
        background-position-x: 400px;&lt;br /&gt;
        background-position-y: 80px;&lt;br /&gt;
    }&lt;br /&gt;
        &lt;br /&gt;
        .cdx-card__text__title,&lt;br /&gt;
        .read-more-container-heading {&lt;br /&gt;
            color: #fff;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
 .mw-first-heading {&lt;br /&gt;
        font-family: &#039;Instrument Serif&#039; !important;&lt;br /&gt;
        font-style:italic;&lt;br /&gt;
        text-transform: uppercase;&lt;br /&gt;
        color: #fff;&lt;br /&gt;
     paint-order: stroke fill;&lt;br /&gt;
     -webkit-text-stroke: 8px #000;&lt;br /&gt;
     letter-spacing: 0.2rem;&lt;br /&gt;
     text-align: center;&lt;br /&gt;
     background: linear-gradient(90deg, #000 0%, rgba(0, 0, 0, .45) 100%);&lt;br /&gt;
    mask-image:linear-gradient(to right,transparent,black 15% 85%, transparent);&lt;br /&gt;
     padding: 0.3em;&lt;br /&gt;
     box-shadow:inset 0 3px 15px -5px #ffffffa6,inset 0 0px 15px 0 #ffffffa6;&lt;br /&gt;
     border-top: 3px solid #000;&lt;br /&gt;
         border-bottom: 3px solid #000;&lt;br /&gt;
    }&lt;br /&gt;
        &lt;br /&gt;
        .toc {&lt;br /&gt;
             background-position-x: 0px;&lt;br /&gt;
    background-position-y: 270px;&lt;br /&gt;
            background-size: 650%;&lt;br /&gt;
        background-image: url(&#039;https://nbittrpgwiki.pynappo.xyz/images/8/8c/DDDTextbox.png&#039;);&lt;br /&gt;
        background-blend-mode: overlay;&lt;br /&gt;
        background-color: #6c6c6c;&lt;br /&gt;
        box-shadow:inset 0 1px 5px -5px #ffffffa6,inset 0 0px 10px 1px #ffffffa6;&lt;br /&gt;
            border-radius: 12px;&lt;br /&gt;
            color: #fff;&lt;br /&gt;
            .toctogglelabel::after {&lt;br /&gt;
                color: #fff;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        #mw-content-container {&lt;br /&gt;
            background-image: url(&#039;https://nbittrpgwiki.pynappo.xyz/images/2/21/MonochromeForest.png&#039;);&lt;br /&gt;
            background-color: #6a6866;&lt;br /&gt;
            background-blend-mode: multiply;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
    #mw-content-block {&lt;br /&gt;
        background: #000000;&lt;br /&gt;
        background: linear-gradient(90deg,rgba(0, 0, 0, 1) 5%, rgba(110, 110, 110, 0) 20%);&lt;br /&gt;
    }&lt;br /&gt;
     &lt;br /&gt;
#mw-site-navigation .sidebar-chunk .mw-portlet &amp;gt; div,&lt;br /&gt;
#mw-site-navigation .sidebar-chunk .mw-portlet-body {&lt;br /&gt;
        margin-bottom: 1em;&lt;br /&gt;
        margin-left: -0.3em;&lt;br /&gt;
    }&lt;br /&gt;
        &lt;br /&gt;
#mw-site-navigation {&lt;br /&gt;
    &amp;amp; .sidebar-chunk {&lt;br /&gt;
        clip-path:none;&lt;br /&gt;
        background-image: url(https://nbittrpgwiki.pynappo.xyz/images/2/27/DDDTextureVertical.png);&lt;br /&gt;
            background-size: 700%;&lt;br /&gt;
        background-blend-mode: overlay;&lt;br /&gt;
        background-color: #222;&lt;br /&gt;
            border:none;&lt;br /&gt;
            box-shadow:inset 0 3px 5px -5px #ffffffa6,inset 0 0px 5px 0 #ffffffa6;&lt;br /&gt;
     h3 { &lt;br /&gt;
         font-family: var(--header-font);&lt;br /&gt;
         font-variant: small-caps;&lt;br /&gt;
         font-size: 24px;&lt;br /&gt;
         letter-spacing: 0.05rem;&lt;br /&gt;
         line-height: 0.3;&lt;br /&gt;
         font-weight: bold;&lt;br /&gt;
        border-bottom: 3px solid white;&lt;br /&gt;
         margin: 0.2em 0;&lt;br /&gt;
    }&lt;br /&gt;
        li {&lt;br /&gt;
            padding: 0.5em;&lt;br /&gt;
            transition: 0.2s;&lt;br /&gt;
            &amp;amp;:hover {&lt;br /&gt;
                transform: translateX(8px);&lt;br /&gt;
                background: linear-gradient(90deg,#ffeb6736 40%, rgba(110, 110, 110, 0) 95%);&lt;br /&gt;
                box-shadow: inset 8px 0 10px -5px #ffeb6570&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        li &amp;gt; a {&lt;br /&gt;
            color: #fff;&lt;br /&gt;
            transition: 0.2s;&lt;br /&gt;
        }&lt;br /&gt;
        li &amp;gt; a:hover {&lt;br /&gt;
            text-decoration:none;&lt;br /&gt;
            filter: drop-shadow(0 0 0.2rem #dcb114);&lt;br /&gt;
        }&lt;br /&gt;
        li &amp;gt; a:hover::before {&lt;br /&gt;
            text-decoration:none;&lt;br /&gt;
            filter: drop-shadow(0 0 0.2rem #dcb114);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Pynappo</name></author>
	</entry>
	<entry>
		<id>https://nbittrpgwiki.pynappo.xyz/index.php?title=MediaWiki:Timeless.css&amp;diff=3324</id>
		<title>MediaWiki:Timeless.css</title>
		<link rel="alternate" type="text/html" href="https://nbittrpgwiki.pynappo.xyz/index.php?title=MediaWiki:Timeless.css&amp;diff=3324"/>
		<updated>2026-10-06T03:07:47Z</updated>

		<summary type="html">&lt;p&gt;Pynappo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* All CSS here will be loaded for users of the Timeless skin */&lt;br /&gt;
/* Fonts */&lt;br /&gt;
@import url(&#039;https://fonts.googleapis.com/css2?family=Rosario:ital,wght@0,300..700;1,300..700&amp;amp;display=swap&#039;);&lt;br /&gt;
@import url(&#039;https://fonts.googleapis.com/css2?family=Rubik:ital,wght@0,300..900;1,300..900&amp;amp;display=swap&#039;);&lt;br /&gt;
@import url(&#039;https://fonts.googleapis.com/css2?family=Lora:ital,wght@0,400..700;1,400..700&amp;amp;display=swap&#039;);&lt;br /&gt;
 &lt;br /&gt;
:root {&lt;br /&gt;
	&lt;br /&gt;
	--ddd-bg:  url(&amp;quot;https://nbittrpgwiki.pynappo.xyz/images/9/98/DDDTextbox2.png&amp;quot;);&lt;br /&gt;
    &lt;br /&gt;
    --main-font: &#039;Rubik&#039;;&lt;br /&gt;
    --header-font: &#039;Rubik&#039;;&lt;br /&gt;
    --title-font: &#039;Lora&#039;;&lt;br /&gt;
    &lt;br /&gt;
    /* COLORS */&lt;br /&gt;
	--background-color: rgb(227, 227, 227);&lt;br /&gt;
	--content-color: rgba(255, 250, 242);&lt;br /&gt;
	--text-color: rgb(61, 44, 35, 1);&lt;br /&gt;
	--link-color: #8346a0;&lt;br /&gt;
    --link-hover-color: #5e188a;&lt;br /&gt;
    --link-new-color: #ff3874;&lt;br /&gt;
    --text-stroke-color: #fff;&lt;br /&gt;
    &lt;br /&gt;
    --search-bg-color: rgba(255, 250, 242);;&lt;br /&gt;
    --border-color: #be7e32;&lt;br /&gt;
    &lt;br /&gt;
	--header-color: rgb(104 71 53);&lt;br /&gt;
	--header-text-color: rgb(255, 255, 255);&lt;br /&gt;
    &lt;br /&gt;
    --sidebar-header-color: #6f4229;&lt;br /&gt;
    --sidebar-header-text: #fff;&lt;br /&gt;
    &lt;br /&gt;
    --gradient-start: rgb(225, 225, 225);&lt;br /&gt;
    --gradient-end: rgb(111, 111, 111);&lt;br /&gt;
    --banner-color: #743f95;&lt;br /&gt;
    &lt;br /&gt;
	--footer-color: #201a16;&lt;br /&gt;
    --footer-text-color:#977b50;&lt;br /&gt;
    --footer-link-color:#a88e67;&lt;br /&gt;
    --footer-link-hover-color:#d9b299;&lt;br /&gt;
    &lt;br /&gt;
    --cdx-button-color: #bea48b;&lt;br /&gt;
    --cdx-button-hover: #f5dfca;&lt;br /&gt;
    &lt;br /&gt;
    --button-color: rgba(104, 83, 68, 1);&lt;br /&gt;
	--button-text-color: rgb(255, 255, 255);&lt;br /&gt;
}&lt;br /&gt;
/* BACKGROUNDS */&lt;br /&gt;
.ddd-quote-bg {&lt;br /&gt;
	background-image: url(&amp;quot;https://nbittrpgwiki.pynappo.xyz/images/9/98/DDDTextbox2.png&amp;quot;)&lt;br /&gt;
   &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* || GENERAL */&lt;br /&gt;
body {&lt;br /&gt;
    font-family: var(--main-font);&lt;br /&gt;
    color: var(--text-color);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
pre, code {&lt;br /&gt;
	font-family:monospace;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
a:not(.new),&lt;br /&gt;
#mw-content a:not(.new),&lt;br /&gt;
a:visited,&lt;br /&gt;
a:visited:hover {&lt;br /&gt;
	color: var(--link-color);&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
.mw-wiki-title:hover {&lt;br /&gt;
    color: var(--header-text-color) !important;&lt;br /&gt;
    text-decoration:none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.new a {&lt;br /&gt;
    color: var(--link-new-color);&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
/* || HEADINGS */    &lt;br /&gt;
.mw-heading  {&lt;br /&gt;
    h1, h2, h3, h4, h5 {&lt;br /&gt;
    font-family: var(--header-font);&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
.mw-body  {&lt;br /&gt;
    h1, h2, h3, h4, h5 {&lt;br /&gt;
    font-family: var(--header-font);&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    }&lt;br /&gt;
    h1.firstHeading {&lt;br /&gt;
        border-bottom: none;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* || HEADER */&lt;br /&gt;
#mw-header-container {&lt;br /&gt;
    background-color: var(--header-color);&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
#p-banner.mw-wiki-title {&lt;br /&gt;
    color: var(--header-text-color);&lt;br /&gt;
    font-family: var(--title-font);&lt;br /&gt;
    font-weight:bold;&lt;br /&gt;
    font-size: 18px;&lt;br /&gt;
    margin-top: -0.2em;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
#simpleSearch {&lt;br /&gt;
    background: var(--search-bg-color);&lt;br /&gt;
    border: 1px solid var(--border-color);&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
.color-bar {&lt;br /&gt;
    width:0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* || SIDEBAR */&lt;br /&gt;
#ca-delete { display: none !important; }&lt;br /&gt;
#page-tools { display: none !important;}&lt;br /&gt;
#t-cargopagevalueslink { display:none }&lt;br /&gt;
#t-smwbrowselink { display:none }  &lt;br /&gt;
    &lt;br /&gt;
@keyframes highlight {&lt;br /&gt;
	from {&lt;br /&gt;
		background-position: 0;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	to {&lt;br /&gt;
		background-position: -100%;&lt;br /&gt;
	}&lt;br /&gt;
}    &lt;br /&gt;
/* Removes logo for now */&lt;br /&gt;
.mw-wiki-logo {&lt;br /&gt;
    display: none;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
#site-navigation .sidebar-chunk  {&lt;br /&gt;
    margin-top: 4.5em;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
#mw-site-navigation {&lt;br /&gt;
    padding-top: 0.2em;&lt;br /&gt;
    .sidebar-chunk h3 {&lt;br /&gt;
        border-bottom:none;&lt;br /&gt;
        background-color: var(--sidebar-header-color);&lt;br /&gt;
        color: var(--sidebar-header-text);&lt;br /&gt;
        padding: 0.4em 0.4em 0.4em 1.5em;&lt;br /&gt;
        clip-path: polygon(90% 50%, 100% 100%, 0% 100%, 0% 0%, 100% 0%);&lt;br /&gt;
    }&lt;br /&gt;
    .sidebar-chunk {&lt;br /&gt;
        padding-top: 1em;&lt;br /&gt;
        padding-bottom: 1em;&lt;br /&gt;
        background-color: var(--content-color);&lt;br /&gt;
        box-shadow: 0 0 8px rgba(0,0,0,0.2);&lt;br /&gt;
        h3 &amp;gt; a {&lt;br /&gt;
            color: var(--font-color);&lt;br /&gt;
        }&lt;br /&gt;
        ul &amp;gt; a:hover {&lt;br /&gt;
            animation-name: highlight;&lt;br /&gt;
            animation-duration: 0.25s;&lt;br /&gt;
            animation-fill-mode: forwards;&lt;br /&gt;
            background-size: 200%;&lt;br /&gt;
            background-image: linear-gradient(to left, #eacf1b70 50%, transparent 50%);&lt;br /&gt;
        }&lt;br /&gt;
        clip-path: polygon(100% 0, 100% 100%, 99% 98%, 95% 99%, 92% 99%, 89% 100%, 86% 99%, 83% 100%, 77% 99%, 72% 100%, 66% 98%, 62% 100%, 59% 99%, 54% 99%, 49% 100%, 46% 98%, 43% 100%, 40% 98%, 38% 100%, 35% 99%, 31% 100%, 28% 99%, 25% 99%, 22% 100%, 19% 99%, 16% 100%, 13% 99%, 10% 99%, 7% 100%, 4% 99%, 0% 100%, 0% 0%);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-related-navigation {&lt;br /&gt;
    position: sticky;&lt;br /&gt;
    top: 70px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-related-navigation .sidebar-chunk {&lt;br /&gt;
    background: var(--content-color);&lt;br /&gt;
    box-shadow: 0 0 8px rgba(0,0,0,0.2);&lt;br /&gt;
    border-radius: 20px;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
/* Edit button changes */&lt;br /&gt;
#ca-ve-edit a::before {&lt;br /&gt;
    content: &amp;quot;Visual edit&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#ca-ve-edit span {&lt;br /&gt;
    display:none;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
/* || WIKI CONTENT */&lt;br /&gt;
#mw-content-block,&lt;br /&gt;
#mw-content-container {&lt;br /&gt;
    background: linear-gradient(180deg, var(--gradient-start) 0%, rgba(0, 0, 0, 0) 100%), var(--gradient-end);&lt;br /&gt;
    background-color: var(--background-color);&lt;br /&gt;
    border-bottom: none;  &lt;br /&gt;
}    &lt;br /&gt;
    &lt;br /&gt;
#mw-content {&lt;br /&gt;
    padding-left: 1.5em;&lt;br /&gt;
    padding-right: 1.5em;&lt;br /&gt;
    box-shadow: 0 0 8px rgba(0,0,0,0.2);&lt;br /&gt;
    background-color: var(--content-color);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* || CATEGORY LINKS */&lt;br /&gt;
#catlinks {&lt;br /&gt;
    padding: 0.5em;&lt;br /&gt;
    padding-bottom: 0.1em;&lt;br /&gt;
    border: 2px solid color-mix(in srgb, var(--link-color) 30%, transparent);&lt;br /&gt;
    margin-top: 1em;&lt;br /&gt;
    margin-bottom: 1em;&lt;br /&gt;
    color: #000;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
/* || RELATED PAGES */&lt;br /&gt;
.client-js .read-more-container {&lt;br /&gt;
    padding: 0;&lt;br /&gt;
    margin: 1em;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
.read-more-container-heading {&lt;br /&gt;
    color: var(--text-color);&lt;br /&gt;
    border-bottom: 0;&lt;br /&gt;
    padding-bottom: 0.5em;&lt;br /&gt;
    font-size: 0.8em;&lt;br /&gt;
    font-weight: normal;&lt;br /&gt;
    letter-spacing: 1px;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
.cdx-card {&lt;br /&gt;
    background: var(--content-color);&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
/* || FOOTER */&lt;br /&gt;
.mw-footer-container {&lt;br /&gt;
    background-color: var(--footer-color);&lt;br /&gt;
    color: var(--footer-text-color);&lt;br /&gt;
    a {&lt;br /&gt;
        color: var(--footer-link-color);&lt;br /&gt;
        text-decoration:underline;&lt;br /&gt;
        &amp;amp;:hover {&lt;br /&gt;
            color: var(--footer-link-hover-color);&lt;br /&gt;
        }&lt;br /&gt;
        &amp;amp;.external {&lt;br /&gt;
            color: var(--footer-link-color);&lt;br /&gt;
            &amp;amp;:hover {&lt;br /&gt;
                color: var(--footer-link-hover-color);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
.cdx-button:enabled, .cdx-button.cdx-button--fake-button--enabled {&lt;br /&gt;
        background: var(--cdx-button-color);&lt;br /&gt;
        &amp;amp;:hover {&lt;br /&gt;
            background-color: var(--cdx-button-hover);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
/* || PORTABLE INFOBOXES */&lt;br /&gt;
.portable-infobox {&lt;br /&gt;
	margin-right:3px;&lt;br /&gt;
	border-radius:5px;&lt;br /&gt;
}  &lt;br /&gt;
&lt;br /&gt;
.portable-infobox .pi-navigation {&lt;br /&gt;
    paint-order: stroke fill;&lt;br /&gt;
    -webkit-text-stroke: 3px var(--text-stroke-color);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.portable-infobox .pi-item-spacing {&lt;br /&gt;
    border-radius:2px;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
.pi-section-navigation .pi-section-tab.pi-section-active, .pi-section-navigation .pi-section-tab.current, .pi-media-collection .pi-tab-link.current {&lt;br /&gt;
    color: var(--banner-text-color);&lt;br /&gt;
    border-radius:2px;&lt;br /&gt;
    border-bottom: 1px solid var(--button-text-color);&lt;br /&gt;
}&lt;br /&gt;
.portable-infobox .pi-header, .portable-infobox .pi-title {&lt;br /&gt;
    text-align: center;&lt;br /&gt;
	color: var(--button-text-color);&lt;br /&gt;
	background-color:var(--button-color);&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
.lua-infobox { &lt;br /&gt;
    .infobox-label {&lt;br /&gt;
        width: 5.5em;&lt;br /&gt;
    }&lt;br /&gt;
    .infobox-label, .infobox-data {&lt;br /&gt;
    padding: 0.1em 0.5em;&lt;br /&gt;
        text-align:left;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
/* DDD Infoboxes */&lt;br /&gt;
.mw-parser-output table.wikitable.lua-infobox.ddd-theme {&lt;br /&gt;
    border: 3px double #000;&lt;br /&gt;
    border-style: double solid;&lt;br /&gt;
    background-position-x: 700px;&lt;br /&gt;
    background-position-y: 80px;&lt;br /&gt;
    background-image: var(--ddd-bg);&lt;br /&gt;
    background-blend-mode: screen;&lt;br /&gt;
    background-size: 700%;&lt;br /&gt;
    background-color: #dadada;&lt;br /&gt;
    .infobox-title {&lt;br /&gt;
        paint-order: stroke fill;&lt;br /&gt;
        -webkit-text-stroke: 4px #000;&lt;br /&gt;
        border-top: 2px solid #000;&lt;br /&gt;
        border-bottom: 3px solid #000;&lt;br /&gt;
        box-shadow:inset 0 3px 5px 0 #ffffffa6,inset 0 -3px 5px 0 #ffffffa6;&lt;br /&gt;
        background-position-x: 900px;&lt;br /&gt;
        background-position-y: 330px;&lt;br /&gt;
        background-image: var(--ddd-bg);&lt;br /&gt;
        background-blend-mode: darken;&lt;br /&gt;
        color: #fff;&lt;br /&gt;
        padding: 0.5em;&lt;br /&gt;
        background-color: #434343;&lt;br /&gt;
        }&lt;br /&gt;
    .infobox-header {&lt;br /&gt;
        color: #fff;&lt;br /&gt;
        background-position-x: 900px;&lt;br /&gt;
        background-position-y: 430px;&lt;br /&gt;
        background-image: var(--ddd-bg);&lt;br /&gt;
        paint-order: stroke fill;&lt;br /&gt;
        -webkit-text-stroke: 4px #000;&lt;br /&gt;
        border-top: 2px solid #000;&lt;br /&gt;
        border-bottom: 3px solid #000;&lt;br /&gt;
        box-shadow:inset 0 3px 5px 0 #ffffffa6,inset 0 -3px 5px 0 #ffffffa6;&lt;br /&gt;
        background-blend-mode: darken;&lt;br /&gt;
        font-variant:small-caps;&lt;br /&gt;
        font-size:larger;&lt;br /&gt;
        background-color: #434343;&lt;br /&gt;
        }&lt;br /&gt;
    .infobox-data:not(.infobox-header) {&lt;br /&gt;
        border:none;&lt;br /&gt;
    }&lt;br /&gt;
    .infobox-label {&lt;br /&gt;
        color: #000;&lt;br /&gt;
        font-style: italic;&lt;br /&gt;
        font-variant:small-caps;&lt;br /&gt;
        font-weight:bold;&lt;br /&gt;
        }&lt;br /&gt;
    .infobox-data {&lt;br /&gt;
        border-bottom: 0;&lt;br /&gt;
        box-shadow: inset 0 -1px 5px -5px #000;&lt;br /&gt;
        font-size:smaller;&lt;br /&gt;
        }&lt;br /&gt;
    .infobox-nav {&lt;br /&gt;
        background-position-x: 540px;&lt;br /&gt;
        background-position-y: 400px;&lt;br /&gt;
        color: grey;&lt;br /&gt;
        paint-order: stroke fill;&lt;br /&gt;
        -webkit-text-stroke: 3px #fff;&lt;br /&gt;
        text-align:center;&lt;br /&gt;
        font-size:small;&lt;br /&gt;
        padding: 0.2em;&lt;br /&gt;
        }&lt;br /&gt;
    .infobox-img {&lt;br /&gt;
        text-align:center;&lt;br /&gt;
        background: var(--ddd-bg);&lt;br /&gt;
        background-position-y: 300px;&lt;br /&gt;
        background-size: 700%;&lt;br /&gt;
        background-color: #c4c4c4;  &lt;br /&gt;
        background-blend-mode: overlay;&lt;br /&gt;
        box-shadow:inset 0 3px 5px 0 #ffffffa6,inset 0 -3px 5px 0 #ffffffa6;&lt;br /&gt;
        padding: 0.25em;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* For [[Weathia: Resurrection]] */ &lt;br /&gt;
.fluidimg100 img, .fluidimg img {&lt;br /&gt;
	max-width:100%;&lt;br /&gt;
	height:auto;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
/* || PRINT COMPATIBILITY */&lt;br /&gt;
&lt;br /&gt;
@media print {&lt;br /&gt;
    :root {&lt;br /&gt;
        --background-color: rgb(0, 0, 0);&lt;br /&gt;
        --content-color: rgba(255, 255, 255);&lt;br /&gt;
        --text-color: rgb(0, 0, 0);&lt;br /&gt;
        --link-color: #7d7d7d;&lt;br /&gt;
        --link-hover-color: #bfbfbf;&lt;br /&gt;
        --link-new-color: #ff3838;&lt;br /&gt;
        --text-stroke-color: #000;&lt;br /&gt;
&lt;br /&gt;
        --search-bg-color: rgba(255, 250, 242);;&lt;br /&gt;
        --border-color: #b0b0b0;&lt;br /&gt;
&lt;br /&gt;
        --header-color: rgb(0 0 0);&lt;br /&gt;
        --header-text-color: rgb(255, 255, 255);&lt;br /&gt;
&lt;br /&gt;
        --sidebar-header-color: #fff;&lt;br /&gt;
        --sidebar-header-text: #fff;&lt;br /&gt;
&lt;br /&gt;
        --gradient-start: rgb(255, 255, 255);&lt;br /&gt;
        --gradient-end: rgb(255, 255, 255);&lt;br /&gt;
        --banner-color: #fff;&lt;br /&gt;
&lt;br /&gt;
        --footer-color: #fff;&lt;br /&gt;
        --footer-text-color:#000;&lt;br /&gt;
        --footer-link-color:#aaa;&lt;br /&gt;
        --footer-link-hover-color:#aaa;&lt;br /&gt;
&lt;br /&gt;
        --cdx-button-color: #c9c9c9;&lt;br /&gt;
        --cdx-button-hover: #fff;&lt;br /&gt;
&lt;br /&gt;
        --button-color: rgba(170, 170, 170);&lt;br /&gt;
        --button-text-color: rgb(255, 255, 255);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    #tabs,&lt;br /&gt;
    .toc,&lt;br /&gt;
    .navbox {&lt;br /&gt;
        display:none;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    #mw-content {&lt;br /&gt;
        box-shadow: none;&lt;br /&gt;
        margin:0;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .portable-infobox {&lt;br /&gt;
        border: 2px solid #000 ;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .portable-infobox .pi-navigation {&lt;br /&gt;
        -webkit-text-stroke: 0;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .portable-infobox .pi-header,&lt;br /&gt;
    #mw-content-text .pi-title {&lt;br /&gt;
        color: var(--text-color);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
/* One-sided navigation menu - MEDIAWIKI SNIPPET */&lt;br /&gt;
@media (min-width: 1340px) {&lt;br /&gt;
  #mw-content-block {&lt;br /&gt;
    display: block;&lt;br /&gt;
  }&lt;br /&gt;
  #mw-content,&lt;br /&gt;
  #content-bottom-stuff {&lt;br /&gt;
    margin-left: 14em;&lt;br /&gt;
    margin-right:1em;&lt;br /&gt;
  }&lt;br /&gt;
  #mw-content-wrapper {&lt;br /&gt;
    float: right;&lt;br /&gt;
    margin-left: -14em;&lt;br /&gt;
    width: 100%;&lt;br /&gt;
  }&lt;br /&gt;
  #mw-related-navigation {&lt;br /&gt;
    width: 14em;&lt;br /&gt;
    padding: 0 1em 0 0;&lt;br /&gt;
  }&lt;br /&gt;
  div.color-middle {&lt;br /&gt;
    margin-right: 0;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (min-width: 1100px) and (max-width: 1339px) {&lt;br /&gt;
    #mw-content,&lt;br /&gt;
    #content-bottom-stuff {&lt;br /&gt;
    margin-right:1em;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (min-width: 851px) and (max-width: 1099px) {&lt;br /&gt;
    #mw-content,&lt;br /&gt;
    #content-bottom-stuff {&lt;br /&gt;
     margin-left: 1em;&lt;br /&gt;
    margin-right:1em;&lt;br /&gt;
    }&lt;br /&gt;
    #mw-content:before {&lt;br /&gt;
        display:none;&lt;br /&gt;
    }&lt;br /&gt;
    #mw-content:after {&lt;br /&gt;
        display:none;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (max-width: 850px) {&lt;br /&gt;
    #mw-content,&lt;br /&gt;
    #content-bottom-stuff {&lt;br /&gt;
    margin-right:1em;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
@media screen and (max-width: 600px) {&lt;br /&gt;
    #mw-content,&lt;br /&gt;
    #content-bottom-stuff {&lt;br /&gt;
    margin-right:0;&lt;br /&gt;
    margin-left:-1em;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Align top colour bar with page columns */&lt;br /&gt;
.ts-inner {&lt;br /&gt;
  padding: 0 0 0 1em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Re-aligning bottom logos */&lt;br /&gt;
#mw-footer {&lt;br /&gt;
    padding-right: 1em; &lt;br /&gt;
}    &lt;br /&gt;
&lt;br /&gt;
/* Avoid cutting off letters with descenders: g,j,p,q,y */&lt;br /&gt;
#personal h2 span {&lt;br /&gt;
    height: 1.5em;&lt;br /&gt;
    position:relative;&lt;br /&gt;
    bottom:0.1em;&lt;br /&gt;
    font-family: var(--header-font);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
    #personal {&lt;br /&gt;
        color: var(--header-text-color);&lt;br /&gt;
        .dropdown {&lt;br /&gt;
            color: var(--text-color);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
/* Triangle position patch */&lt;br /&gt;
#personal h2::after {&lt;br /&gt;
   position: relative;&lt;br /&gt;
   bottom: 0.5em;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
	:root.skin-theme-clientpref-day:has(&amp;gt; body.ns-3000),&lt;br /&gt;
    :root.skin-theme-clientpref-day:has(&amp;gt; body.ns-3001),&lt;br /&gt;
    :root.skin-theme-clientpref-day:has(.ddd-theme) {&lt;br /&gt;
&lt;br /&gt;
     --header-font: &#039;Instrument Serif&#039;;&lt;br /&gt;
        &lt;br /&gt;
    /* COLORS */&lt;br /&gt;
	--background-color: rgb(55, 55, 55);&lt;br /&gt;
	--content-color: rgba(246, 246, 246);&lt;br /&gt;
	--text-color: rgb(0, 0, 0);&lt;br /&gt;
	--link-color: #7b7970;&lt;br /&gt;
    --link-hover-color: #7b7970;&lt;br /&gt;
    --link-new-color: #ff3838;&lt;br /&gt;
    --text-stroke-color: #000;&lt;br /&gt;
    &lt;br /&gt;
    --search-bg-color: rgba(237, 237, 237);;&lt;br /&gt;
    --border-color: #b0b0b0;&lt;br /&gt;
    &lt;br /&gt;
	--header-color: rgb(0 0 0);&lt;br /&gt;
	--header-text-color: rgb(255, 255, 255);&lt;br /&gt;
    &lt;br /&gt;
    --sidebar-header-color: #4c4c4c;&lt;br /&gt;
    --sidebar-header-text: #fff;&lt;br /&gt;
    &lt;br /&gt;
    --gradient-start: rgb(34, 33, 33);&lt;br /&gt;
    --gradient-end: rgb(36, 36, 36);&lt;br /&gt;
    --banner-color: #4c4c4c;&lt;br /&gt;
    &lt;br /&gt;
	--footer-color: #000;&lt;br /&gt;
    --footer-text-color:#d6d6d6;&lt;br /&gt;
    --footer-link-color:#969696;&lt;br /&gt;
    --footer-link-hover-color:#969696;&lt;br /&gt;
    &lt;br /&gt;
    --cdx-button-color: #c9c9c9;&lt;br /&gt;
    --cdx-button-hover: #fff;&lt;br /&gt;
    &lt;br /&gt;
    --button-color: rgba(76, 76, 76);&lt;br /&gt;
	--button-text-color: rgb(255, 255, 255);&lt;br /&gt;
        &lt;br /&gt;
        .mw-body .mw-heading h1, .mw-body .mw-heading h2, .mw-body .mw-heading h3, .mw-body .mw-heading h4, .mw-body .mw-heading h5, .mw-body .mw-heading h6 {&lt;br /&gt;
            letter-spacing: 0.1rem;&lt;br /&gt;
            font-variant: small-caps;&lt;br /&gt;
            font-size: 30px;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        #pt-notifications-alert .mw-echo-notifications-badge.mw-echo-notifications-badge-all-read, body:not(.skin-vector-2022) #pt-notifications-notice .mw-echo-notifications-badge.mw-echo-notifications-badge-all-read {&lt;br /&gt;
            filter:invert(1);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        #mw-content {&lt;br /&gt;
        border:1px solid #e3e3e3;&lt;br /&gt;
        background-position-y: 1600px;&lt;br /&gt;
        background-size: 1000%;&lt;br /&gt;
        background-image: var(--ddd-bg);&lt;br /&gt;
        background-blend-mode: screen;&lt;br /&gt;
        background-color: #e3e3e3;&lt;br /&gt;
        box-shadow: inset 0 0 20px #a5a5a5;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
    .mw-wiki-title {&lt;br /&gt;
        font-family: &#039;Instrument Serif&#039; !important;&lt;br /&gt;
        letter-spacing: 0.1rem;&lt;br /&gt;
        font-style:italic;&lt;br /&gt;
    }&lt;br /&gt;
        &lt;br /&gt;
        #personal h2 span {&lt;br /&gt;
            letter-spacing: 0.2rem;&lt;br /&gt;
            font-weight:bold;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        #mw-header-container {&lt;br /&gt;
        background-position-x: 70px;&lt;br /&gt;
    background-position-y: 210px;&lt;br /&gt;
        background-image: url(&#039;https://nbittrpgwiki.pynappo.xyz/images/8/8c/DDDTextbox.png&#039;);&lt;br /&gt;
        background-blend-mode: overlay;&lt;br /&gt;
        background-color: #3b3b3b;&lt;br /&gt;
        box-shadow: inset 0 0 10px #7b7b7b;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        #catlinks-sidebar {&lt;br /&gt;
                    background-image: url(https://nbittrpgwiki.pynappo.xyz/images/2/27/DDDTextureVertical.png);&lt;br /&gt;
            background-size: 300%;&lt;br /&gt;
        background-blend-mode: overlay;&lt;br /&gt;
        background-color: #222;&lt;br /&gt;
            border: 1px solid #ffffff2e;&lt;br /&gt;
            box-shadow:inset 0 3px 5px -5px #ffffffa6,inset 0 0px 5px 0 #ffffffa6;&lt;br /&gt;
            h3 {&lt;br /&gt;
                color: #fff;&lt;br /&gt;
                font-variant: small-caps;&lt;br /&gt;
                font-style: italic;&lt;br /&gt;
                text-align:center;&lt;br /&gt;
                border: 1px solid #ffffff2e;&lt;br /&gt;
                padding: 0.5em;&lt;br /&gt;
                border-radius: 12px;&lt;br /&gt;
                background-image: url(https://nbittrpgwiki.pynappo.xyz/images/2/27/DDDTextureVertical.png);&lt;br /&gt;
            background-size: 200%;&lt;br /&gt;
        background-blend-mode: overlay;&lt;br /&gt;
        background-color: #0c0c0c;&lt;br /&gt;
            }&lt;br /&gt;
            a {&lt;br /&gt;
                color: #fff;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        #mw-footer-container {&lt;br /&gt;
        background-position-x: 70px;&lt;br /&gt;
    background-position-y: 210px;&lt;br /&gt;
        background-image: url(&#039;https://nbittrpgwiki.pynappo.xyz/images/8/8c/DDDTextbox.png&#039;);&lt;br /&gt;
        background-blend-mode: overlay;&lt;br /&gt;
        background-color: #191919;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
    .read-more-container-card-list &amp;gt; li .cdx-card {&lt;br /&gt;
    background-position-x: 70px;&lt;br /&gt;
    background-position-y: 210px;&lt;br /&gt;
        background-image: url(&#039;https://nbittrpgwiki.pynappo.xyz/images/8/8c/DDDTextbox.png&#039;);&lt;br /&gt;
        background-blend-mode: overlay;&lt;br /&gt;
        background-color: #383837;&lt;br /&gt;
            border:none;&lt;br /&gt;
            box-shadow:inset 0 1px 5px -5px #ffffffa6,inset 0 0px 10px 1px #ffffffa6;&lt;br /&gt;
        transition: 0.2s;&lt;br /&gt;
        &amp;amp;:hover {&lt;br /&gt;
            filter: brightness(1.2);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
     .read-more-container-card-list &amp;gt; li:nth-child(2n+1) .cdx-card {&lt;br /&gt;
        background-position-x: 70px;&lt;br /&gt;
        background-position-y: 110px;&lt;br /&gt;
    }&lt;br /&gt;
    .read-more-container-card-list &amp;gt; li:nth-child(3n) .cdx-card {&lt;br /&gt;
        background-position-x: 400px;&lt;br /&gt;
        background-position-y: 80px;&lt;br /&gt;
    }&lt;br /&gt;
        &lt;br /&gt;
        .cdx-card__text__title,&lt;br /&gt;
        .read-more-container-heading {&lt;br /&gt;
            color: #fff;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
 .mw-first-heading {&lt;br /&gt;
        font-family: &#039;Instrument Serif&#039; !important;&lt;br /&gt;
        font-style:italic;&lt;br /&gt;
        text-transform: uppercase;&lt;br /&gt;
        color: #fff;&lt;br /&gt;
     paint-order: stroke fill;&lt;br /&gt;
     -webkit-text-stroke: 8px #000;&lt;br /&gt;
     letter-spacing: 0.2rem;&lt;br /&gt;
     text-align: center;&lt;br /&gt;
     background: linear-gradient(90deg, #000 0%, rgba(0, 0, 0, .45) 100%);&lt;br /&gt;
    mask-image:linear-gradient(to right,transparent,black 15% 85%, transparent);&lt;br /&gt;
     padding: 0.3em;&lt;br /&gt;
     box-shadow:inset 0 3px 15px -5px #ffffffa6,inset 0 0px 15px 0 #ffffffa6;&lt;br /&gt;
     border-top: 3px solid #000;&lt;br /&gt;
         border-bottom: 3px solid #000;&lt;br /&gt;
    }&lt;br /&gt;
        &lt;br /&gt;
        .toc {&lt;br /&gt;
             background-position-x: 0px;&lt;br /&gt;
    background-position-y: 270px;&lt;br /&gt;
            background-size: 650%;&lt;br /&gt;
        background-image: url(&#039;https://nbittrpgwiki.pynappo.xyz/images/8/8c/DDDTextbox.png&#039;);&lt;br /&gt;
        background-blend-mode: overlay;&lt;br /&gt;
        background-color: #6c6c6c;&lt;br /&gt;
        box-shadow:inset 0 1px 5px -5px #ffffffa6,inset 0 0px 10px 1px #ffffffa6;&lt;br /&gt;
            border-radius: 12px;&lt;br /&gt;
            color: #fff;&lt;br /&gt;
            .toctogglelabel::after {&lt;br /&gt;
                color: #fff;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        #mw-content-container {&lt;br /&gt;
            background-image: url(&#039;https://nbittrpgwiki.pynappo.xyz/images/2/21/MonochromeForest.png&#039;);&lt;br /&gt;
            background-color: #6a6866;&lt;br /&gt;
            background-blend-mode: multiply;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
    #mw-content-block {&lt;br /&gt;
        background: #000000;&lt;br /&gt;
        background: linear-gradient(90deg,rgba(0, 0, 0, 1) 5%, rgba(110, 110, 110, 0) 20%);&lt;br /&gt;
    }&lt;br /&gt;
     &lt;br /&gt;
#mw-site-navigation .sidebar-chunk .mw-portlet &amp;gt; div,&lt;br /&gt;
#mw-site-navigation .sidebar-chunk .mw-portlet-body {&lt;br /&gt;
        margin-bottom: 1em;&lt;br /&gt;
        margin-left: -0.3em;&lt;br /&gt;
    }&lt;br /&gt;
        &lt;br /&gt;
#mw-site-navigation {&lt;br /&gt;
    &amp;amp; .sidebar-chunk {&lt;br /&gt;
        clip-path:none;&lt;br /&gt;
        background-image: url(https://nbittrpgwiki.pynappo.xyz/images/2/27/DDDTextureVertical.png);&lt;br /&gt;
            background-size: 700%;&lt;br /&gt;
        background-blend-mode: overlay;&lt;br /&gt;
        background-color: #222;&lt;br /&gt;
            border:none;&lt;br /&gt;
            box-shadow:inset 0 3px 5px -5px #ffffffa6,inset 0 0px 5px 0 #ffffffa6;&lt;br /&gt;
     h3 { &lt;br /&gt;
         font-family: var(--header-font);&lt;br /&gt;
         font-variant: small-caps;&lt;br /&gt;
         font-size: 24px;&lt;br /&gt;
         letter-spacing: 0.05rem;&lt;br /&gt;
         line-height: 0.3;&lt;br /&gt;
         font-weight: bold;&lt;br /&gt;
        border-bottom: 3px solid white;&lt;br /&gt;
         margin: 0.2em 0;&lt;br /&gt;
    }&lt;br /&gt;
        li {&lt;br /&gt;
            padding: 0.5em;&lt;br /&gt;
            transition: 0.2s;&lt;br /&gt;
            &amp;amp;:hover {&lt;br /&gt;
                transform: translateX(8px);&lt;br /&gt;
                background: linear-gradient(90deg,#ffeb6736 40%, rgba(110, 110, 110, 0) 95%);&lt;br /&gt;
                box-shadow: inset 8px 0 10px -5px #ffeb6570&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        li &amp;gt; a {&lt;br /&gt;
            color: #fff;&lt;br /&gt;
            transition: 0.2s;&lt;br /&gt;
        }&lt;br /&gt;
        li &amp;gt; a:hover {&lt;br /&gt;
            text-decoration:none;&lt;br /&gt;
            filter: drop-shadow(0 0 0.2rem #dcb114);&lt;br /&gt;
        }&lt;br /&gt;
        li &amp;gt; a:hover::before {&lt;br /&gt;
            text-decoration:none;&lt;br /&gt;
            filter: drop-shadow(0 0 0.2rem #dcb114);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Pynappo</name></author>
	</entry>
	<entry>
		<id>https://nbittrpgwiki.pynappo.xyz/index.php?title=MediaWiki:Timeless.css&amp;diff=3323</id>
		<title>MediaWiki:Timeless.css</title>
		<link rel="alternate" type="text/html" href="https://nbittrpgwiki.pynappo.xyz/index.php?title=MediaWiki:Timeless.css&amp;diff=3323"/>
		<updated>2026-10-06T03:05:19Z</updated>

		<summary type="html">&lt;p&gt;Pynappo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* All CSS here will be loaded for users of the Timeless skin */&lt;br /&gt;
/* Fonts */&lt;br /&gt;
@import url(&#039;https://fonts.googleapis.com/css2?family=Rosario:ital,wght@0,300..700;1,300..700&amp;amp;display=swap&#039;);&lt;br /&gt;
@import url(&#039;https://fonts.googleapis.com/css2?family=Rubik:ital,wght@0,300..900;1,300..900&amp;amp;display=swap&#039;);&lt;br /&gt;
@import url(&#039;https://fonts.googleapis.com/css2?family=Lora:ital,wght@0,400..700;1,400..700&amp;amp;display=swap&#039;);&lt;br /&gt;
 &lt;br /&gt;
:root {&lt;br /&gt;
	&lt;br /&gt;
	--ddd-bg:  url(&amp;quot;https://nbittrpgwiki.pynappo.xyz/images/9/98/DDDTextbox2.png&amp;quot;);&lt;br /&gt;
    &lt;br /&gt;
    --main-font: &#039;Rubik&#039;;&lt;br /&gt;
    --header-font: &#039;Rubik&#039;;&lt;br /&gt;
    --title-font: &#039;Lora&#039;;&lt;br /&gt;
    &lt;br /&gt;
    /* COLORS */&lt;br /&gt;
	--background-color: rgb(227, 227, 227);&lt;br /&gt;
	--content-color: rgba(255, 250, 242);&lt;br /&gt;
	--text-color: rgb(61, 44, 35, 1);&lt;br /&gt;
	--link-color: #8346a0;&lt;br /&gt;
    --link-hover-color: #5e188a;&lt;br /&gt;
    --link-new-color: #ff3874;&lt;br /&gt;
    --text-stroke-color: #fff;&lt;br /&gt;
    &lt;br /&gt;
    --search-bg-color: rgba(255, 250, 242);;&lt;br /&gt;
    --border-color: #be7e32;&lt;br /&gt;
    &lt;br /&gt;
	--header-color: rgb(104 71 53);&lt;br /&gt;
	--header-text-color: rgb(255, 255, 255);&lt;br /&gt;
    &lt;br /&gt;
    --sidebar-header-color: #6f4229;&lt;br /&gt;
    --sidebar-header-text: #fff;&lt;br /&gt;
    &lt;br /&gt;
    --gradient-start: rgb(225, 225, 225);&lt;br /&gt;
    --gradient-end: rgb(111, 111, 111);&lt;br /&gt;
    --banner-color: #743f95;&lt;br /&gt;
    &lt;br /&gt;
	--footer-color: #201a16;&lt;br /&gt;
    --footer-text-color:#977b50;&lt;br /&gt;
    --footer-link-color:#a88e67;&lt;br /&gt;
    --footer-link-hover-color:#d9b299;&lt;br /&gt;
    &lt;br /&gt;
    --cdx-button-color: #bea48b;&lt;br /&gt;
    --cdx-button-hover: #f5dfca;&lt;br /&gt;
    &lt;br /&gt;
    --button-color: rgba(104, 83, 68, 1);&lt;br /&gt;
	--button-text-color: rgb(255, 255, 255);&lt;br /&gt;
}&lt;br /&gt;
/* BACKGROUNDS */&lt;br /&gt;
.ddd-quote-img {&lt;br /&gt;
	outline: 2px solid red;&lt;br /&gt;
   &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* || GENERAL */&lt;br /&gt;
body {&lt;br /&gt;
    font-family: var(--main-font);&lt;br /&gt;
    color: var(--text-color);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
pre, code {&lt;br /&gt;
	font-family:monospace;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
a:not(.new),&lt;br /&gt;
#mw-content a:not(.new),&lt;br /&gt;
a:visited,&lt;br /&gt;
a:visited:hover {&lt;br /&gt;
	color: var(--link-color);&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
.mw-wiki-title:hover {&lt;br /&gt;
    color: var(--header-text-color) !important;&lt;br /&gt;
    text-decoration:none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.new a {&lt;br /&gt;
    color: var(--link-new-color);&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
/* || HEADINGS */    &lt;br /&gt;
.mw-heading  {&lt;br /&gt;
    h1, h2, h3, h4, h5 {&lt;br /&gt;
    font-family: var(--header-font);&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
.mw-body  {&lt;br /&gt;
    h1, h2, h3, h4, h5 {&lt;br /&gt;
    font-family: var(--header-font);&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    }&lt;br /&gt;
    h1.firstHeading {&lt;br /&gt;
        border-bottom: none;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* || HEADER */&lt;br /&gt;
#mw-header-container {&lt;br /&gt;
    background-color: var(--header-color);&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
#p-banner.mw-wiki-title {&lt;br /&gt;
    color: var(--header-text-color);&lt;br /&gt;
    font-family: var(--title-font);&lt;br /&gt;
    font-weight:bold;&lt;br /&gt;
    font-size: 18px;&lt;br /&gt;
    margin-top: -0.2em;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
#simpleSearch {&lt;br /&gt;
    background: var(--search-bg-color);&lt;br /&gt;
    border: 1px solid var(--border-color);&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
.color-bar {&lt;br /&gt;
    width:0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* || SIDEBAR */&lt;br /&gt;
#ca-delete { display: none !important; }&lt;br /&gt;
#page-tools { display: none !important;}&lt;br /&gt;
#t-cargopagevalueslink { display:none }&lt;br /&gt;
#t-smwbrowselink { display:none }  &lt;br /&gt;
    &lt;br /&gt;
@keyframes highlight {&lt;br /&gt;
	from {&lt;br /&gt;
		background-position: 0;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	to {&lt;br /&gt;
		background-position: -100%;&lt;br /&gt;
	}&lt;br /&gt;
}    &lt;br /&gt;
/* Removes logo for now */&lt;br /&gt;
.mw-wiki-logo {&lt;br /&gt;
    display: none;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
#site-navigation .sidebar-chunk  {&lt;br /&gt;
    margin-top: 4.5em;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
#mw-site-navigation {&lt;br /&gt;
    padding-top: 0.2em;&lt;br /&gt;
    .sidebar-chunk h3 {&lt;br /&gt;
        border-bottom:none;&lt;br /&gt;
        background-color: var(--sidebar-header-color);&lt;br /&gt;
        color: var(--sidebar-header-text);&lt;br /&gt;
        padding: 0.4em 0.4em 0.4em 1.5em;&lt;br /&gt;
        clip-path: polygon(90% 50%, 100% 100%, 0% 100%, 0% 0%, 100% 0%);&lt;br /&gt;
    }&lt;br /&gt;
    .sidebar-chunk {&lt;br /&gt;
        padding-top: 1em;&lt;br /&gt;
        padding-bottom: 1em;&lt;br /&gt;
        background-color: var(--content-color);&lt;br /&gt;
        box-shadow: 0 0 8px rgba(0,0,0,0.2);&lt;br /&gt;
        h3 &amp;gt; a {&lt;br /&gt;
            color: var(--font-color);&lt;br /&gt;
        }&lt;br /&gt;
        ul &amp;gt; a:hover {&lt;br /&gt;
            animation-name: highlight;&lt;br /&gt;
            animation-duration: 0.25s;&lt;br /&gt;
            animation-fill-mode: forwards;&lt;br /&gt;
            background-size: 200%;&lt;br /&gt;
            background-image: linear-gradient(to left, #eacf1b70 50%, transparent 50%);&lt;br /&gt;
        }&lt;br /&gt;
        clip-path: polygon(100% 0, 100% 100%, 99% 98%, 95% 99%, 92% 99%, 89% 100%, 86% 99%, 83% 100%, 77% 99%, 72% 100%, 66% 98%, 62% 100%, 59% 99%, 54% 99%, 49% 100%, 46% 98%, 43% 100%, 40% 98%, 38% 100%, 35% 99%, 31% 100%, 28% 99%, 25% 99%, 22% 100%, 19% 99%, 16% 100%, 13% 99%, 10% 99%, 7% 100%, 4% 99%, 0% 100%, 0% 0%);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-related-navigation {&lt;br /&gt;
    position: sticky;&lt;br /&gt;
    top: 70px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-related-navigation .sidebar-chunk {&lt;br /&gt;
    background: var(--content-color);&lt;br /&gt;
    box-shadow: 0 0 8px rgba(0,0,0,0.2);&lt;br /&gt;
    border-radius: 20px;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
/* Edit button changes */&lt;br /&gt;
#ca-ve-edit a::before {&lt;br /&gt;
    content: &amp;quot;Visual edit&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#ca-ve-edit span {&lt;br /&gt;
    display:none;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
/* || WIKI CONTENT */&lt;br /&gt;
#mw-content-block,&lt;br /&gt;
#mw-content-container {&lt;br /&gt;
    background: linear-gradient(180deg, var(--gradient-start) 0%, rgba(0, 0, 0, 0) 100%), var(--gradient-end);&lt;br /&gt;
    background-color: var(--background-color);&lt;br /&gt;
    border-bottom: none;  &lt;br /&gt;
}    &lt;br /&gt;
    &lt;br /&gt;
#mw-content {&lt;br /&gt;
    padding-left: 1.5em;&lt;br /&gt;
    padding-right: 1.5em;&lt;br /&gt;
    box-shadow: 0 0 8px rgba(0,0,0,0.2);&lt;br /&gt;
    background-color: var(--content-color);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* || CATEGORY LINKS */&lt;br /&gt;
#catlinks {&lt;br /&gt;
    padding: 0.5em;&lt;br /&gt;
    padding-bottom: 0.1em;&lt;br /&gt;
    border: 2px solid color-mix(in srgb, var(--link-color) 30%, transparent);&lt;br /&gt;
    margin-top: 1em;&lt;br /&gt;
    margin-bottom: 1em;&lt;br /&gt;
    color: #000;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
/* || RELATED PAGES */&lt;br /&gt;
.client-js .read-more-container {&lt;br /&gt;
    padding: 0;&lt;br /&gt;
    margin: 1em;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
.read-more-container-heading {&lt;br /&gt;
    color: var(--text-color);&lt;br /&gt;
    border-bottom: 0;&lt;br /&gt;
    padding-bottom: 0.5em;&lt;br /&gt;
    font-size: 0.8em;&lt;br /&gt;
    font-weight: normal;&lt;br /&gt;
    letter-spacing: 1px;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
.cdx-card {&lt;br /&gt;
    background: var(--content-color);&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
/* || FOOTER */&lt;br /&gt;
.mw-footer-container {&lt;br /&gt;
    background-color: var(--footer-color);&lt;br /&gt;
    color: var(--footer-text-color);&lt;br /&gt;
    a {&lt;br /&gt;
        color: var(--footer-link-color);&lt;br /&gt;
        text-decoration:underline;&lt;br /&gt;
        &amp;amp;:hover {&lt;br /&gt;
            color: var(--footer-link-hover-color);&lt;br /&gt;
        }&lt;br /&gt;
        &amp;amp;.external {&lt;br /&gt;
            color: var(--footer-link-color);&lt;br /&gt;
            &amp;amp;:hover {&lt;br /&gt;
                color: var(--footer-link-hover-color);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
.cdx-button:enabled, .cdx-button.cdx-button--fake-button--enabled {&lt;br /&gt;
        background: var(--cdx-button-color);&lt;br /&gt;
        &amp;amp;:hover {&lt;br /&gt;
            background-color: var(--cdx-button-hover);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
/* || PORTABLE INFOBOXES */&lt;br /&gt;
.portable-infobox {&lt;br /&gt;
	margin-right:3px;&lt;br /&gt;
	border-radius:5px;&lt;br /&gt;
}  &lt;br /&gt;
&lt;br /&gt;
.portable-infobox .pi-navigation {&lt;br /&gt;
    paint-order: stroke fill;&lt;br /&gt;
    -webkit-text-stroke: 3px var(--text-stroke-color);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.portable-infobox .pi-item-spacing {&lt;br /&gt;
    border-radius:2px;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
.pi-section-navigation .pi-section-tab.pi-section-active, .pi-section-navigation .pi-section-tab.current, .pi-media-collection .pi-tab-link.current {&lt;br /&gt;
    color: var(--banner-text-color);&lt;br /&gt;
    border-radius:2px;&lt;br /&gt;
    border-bottom: 1px solid var(--button-text-color);&lt;br /&gt;
}&lt;br /&gt;
.portable-infobox .pi-header, .portable-infobox .pi-title {&lt;br /&gt;
    text-align: center;&lt;br /&gt;
	color: var(--button-text-color);&lt;br /&gt;
	background-color:var(--button-color);&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
.lua-infobox { &lt;br /&gt;
    .infobox-label {&lt;br /&gt;
        width: 5.5em;&lt;br /&gt;
    }&lt;br /&gt;
    .infobox-label, .infobox-data {&lt;br /&gt;
    padding: 0.1em 0.5em;&lt;br /&gt;
        text-align:left;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
/* DDD Infoboxes */&lt;br /&gt;
.mw-parser-output table.wikitable.lua-infobox.ddd-theme {&lt;br /&gt;
    border: 3px double #000;&lt;br /&gt;
    border-style: double solid;&lt;br /&gt;
    background-position-x: 700px;&lt;br /&gt;
    background-position-y: 80px;&lt;br /&gt;
    background-image: var(--ddd-bg);&lt;br /&gt;
    background-blend-mode: screen;&lt;br /&gt;
    background-size: 700%;&lt;br /&gt;
    background-color: #dadada;&lt;br /&gt;
    .infobox-title {&lt;br /&gt;
        paint-order: stroke fill;&lt;br /&gt;
        -webkit-text-stroke: 4px #000;&lt;br /&gt;
        border-top: 2px solid #000;&lt;br /&gt;
        border-bottom: 3px solid #000;&lt;br /&gt;
        box-shadow:inset 0 3px 5px 0 #ffffffa6,inset 0 -3px 5px 0 #ffffffa6;&lt;br /&gt;
        background-position-x: 900px;&lt;br /&gt;
        background-position-y: 330px;&lt;br /&gt;
        background-image: var(--ddd-bg);&lt;br /&gt;
        background-blend-mode: darken;&lt;br /&gt;
        color: #fff;&lt;br /&gt;
        padding: 0.5em;&lt;br /&gt;
        background-color: #434343;&lt;br /&gt;
        }&lt;br /&gt;
    .infobox-header {&lt;br /&gt;
        color: #fff;&lt;br /&gt;
        background-position-x: 900px;&lt;br /&gt;
        background-position-y: 430px;&lt;br /&gt;
        background-image: var(--ddd-bg);&lt;br /&gt;
        paint-order: stroke fill;&lt;br /&gt;
        -webkit-text-stroke: 4px #000;&lt;br /&gt;
        border-top: 2px solid #000;&lt;br /&gt;
        border-bottom: 3px solid #000;&lt;br /&gt;
        box-shadow:inset 0 3px 5px 0 #ffffffa6,inset 0 -3px 5px 0 #ffffffa6;&lt;br /&gt;
        background-blend-mode: darken;&lt;br /&gt;
        font-variant:small-caps;&lt;br /&gt;
        font-size:larger;&lt;br /&gt;
        background-color: #434343;&lt;br /&gt;
        }&lt;br /&gt;
    .infobox-data:not(.infobox-header) {&lt;br /&gt;
        border:none;&lt;br /&gt;
    }&lt;br /&gt;
    .infobox-label {&lt;br /&gt;
        color: #000;&lt;br /&gt;
        font-style: italic;&lt;br /&gt;
        font-variant:small-caps;&lt;br /&gt;
        font-weight:bold;&lt;br /&gt;
        }&lt;br /&gt;
    .infobox-data {&lt;br /&gt;
        border-bottom: 0;&lt;br /&gt;
        box-shadow: inset 0 -1px 5px -5px #000;&lt;br /&gt;
        font-size:smaller;&lt;br /&gt;
        }&lt;br /&gt;
    .infobox-nav {&lt;br /&gt;
        background-position-x: 540px;&lt;br /&gt;
        background-position-y: 400px;&lt;br /&gt;
        color: grey;&lt;br /&gt;
        paint-order: stroke fill;&lt;br /&gt;
        -webkit-text-stroke: 3px #fff;&lt;br /&gt;
        text-align:center;&lt;br /&gt;
        font-size:small;&lt;br /&gt;
        padding: 0.2em;&lt;br /&gt;
        }&lt;br /&gt;
    .infobox-img {&lt;br /&gt;
        text-align:center;&lt;br /&gt;
        background: var(--ddd-bg);&lt;br /&gt;
        background-position-y: 300px;&lt;br /&gt;
        background-size: 700%;&lt;br /&gt;
        background-color: #c4c4c4;  &lt;br /&gt;
        background-blend-mode: overlay;&lt;br /&gt;
        box-shadow:inset 0 3px 5px 0 #ffffffa6,inset 0 -3px 5px 0 #ffffffa6;&lt;br /&gt;
        padding: 0.25em;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* For [[Weathia: Resurrection]] */ &lt;br /&gt;
.fluidimg100 img, .fluidimg img {&lt;br /&gt;
	max-width:100%;&lt;br /&gt;
	height:auto;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
/* || PRINT COMPATIBILITY */&lt;br /&gt;
&lt;br /&gt;
@media print {&lt;br /&gt;
    :root {&lt;br /&gt;
        --background-color: rgb(0, 0, 0);&lt;br /&gt;
        --content-color: rgba(255, 255, 255);&lt;br /&gt;
        --text-color: rgb(0, 0, 0);&lt;br /&gt;
        --link-color: #7d7d7d;&lt;br /&gt;
        --link-hover-color: #bfbfbf;&lt;br /&gt;
        --link-new-color: #ff3838;&lt;br /&gt;
        --text-stroke-color: #000;&lt;br /&gt;
&lt;br /&gt;
        --search-bg-color: rgba(255, 250, 242);;&lt;br /&gt;
        --border-color: #b0b0b0;&lt;br /&gt;
&lt;br /&gt;
        --header-color: rgb(0 0 0);&lt;br /&gt;
        --header-text-color: rgb(255, 255, 255);&lt;br /&gt;
&lt;br /&gt;
        --sidebar-header-color: #fff;&lt;br /&gt;
        --sidebar-header-text: #fff;&lt;br /&gt;
&lt;br /&gt;
        --gradient-start: rgb(255, 255, 255);&lt;br /&gt;
        --gradient-end: rgb(255, 255, 255);&lt;br /&gt;
        --banner-color: #fff;&lt;br /&gt;
&lt;br /&gt;
        --footer-color: #fff;&lt;br /&gt;
        --footer-text-color:#000;&lt;br /&gt;
        --footer-link-color:#aaa;&lt;br /&gt;
        --footer-link-hover-color:#aaa;&lt;br /&gt;
&lt;br /&gt;
        --cdx-button-color: #c9c9c9;&lt;br /&gt;
        --cdx-button-hover: #fff;&lt;br /&gt;
&lt;br /&gt;
        --button-color: rgba(170, 170, 170);&lt;br /&gt;
        --button-text-color: rgb(255, 255, 255);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    #tabs,&lt;br /&gt;
    .toc,&lt;br /&gt;
    .navbox {&lt;br /&gt;
        display:none;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    #mw-content {&lt;br /&gt;
        box-shadow: none;&lt;br /&gt;
        margin:0;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .portable-infobox {&lt;br /&gt;
        border: 2px solid #000 ;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .portable-infobox .pi-navigation {&lt;br /&gt;
        -webkit-text-stroke: 0;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .portable-infobox .pi-header,&lt;br /&gt;
    #mw-content-text .pi-title {&lt;br /&gt;
        color: var(--text-color);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
/* One-sided navigation menu - MEDIAWIKI SNIPPET */&lt;br /&gt;
@media (min-width: 1340px) {&lt;br /&gt;
  #mw-content-block {&lt;br /&gt;
    display: block;&lt;br /&gt;
  }&lt;br /&gt;
  #mw-content,&lt;br /&gt;
  #content-bottom-stuff {&lt;br /&gt;
    margin-left: 14em;&lt;br /&gt;
    margin-right:1em;&lt;br /&gt;
  }&lt;br /&gt;
  #mw-content-wrapper {&lt;br /&gt;
    float: right;&lt;br /&gt;
    margin-left: -14em;&lt;br /&gt;
    width: 100%;&lt;br /&gt;
  }&lt;br /&gt;
  #mw-related-navigation {&lt;br /&gt;
    width: 14em;&lt;br /&gt;
    padding: 0 1em 0 0;&lt;br /&gt;
  }&lt;br /&gt;
  div.color-middle {&lt;br /&gt;
    margin-right: 0;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (min-width: 1100px) and (max-width: 1339px) {&lt;br /&gt;
    #mw-content,&lt;br /&gt;
    #content-bottom-stuff {&lt;br /&gt;
    margin-right:1em;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (min-width: 851px) and (max-width: 1099px) {&lt;br /&gt;
    #mw-content,&lt;br /&gt;
    #content-bottom-stuff {&lt;br /&gt;
     margin-left: 1em;&lt;br /&gt;
    margin-right:1em;&lt;br /&gt;
    }&lt;br /&gt;
    #mw-content:before {&lt;br /&gt;
        display:none;&lt;br /&gt;
    }&lt;br /&gt;
    #mw-content:after {&lt;br /&gt;
        display:none;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (max-width: 850px) {&lt;br /&gt;
    #mw-content,&lt;br /&gt;
    #content-bottom-stuff {&lt;br /&gt;
    margin-right:1em;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
@media screen and (max-width: 600px) {&lt;br /&gt;
    #mw-content,&lt;br /&gt;
    #content-bottom-stuff {&lt;br /&gt;
    margin-right:0;&lt;br /&gt;
    margin-left:-1em;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Align top colour bar with page columns */&lt;br /&gt;
.ts-inner {&lt;br /&gt;
  padding: 0 0 0 1em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Re-aligning bottom logos */&lt;br /&gt;
#mw-footer {&lt;br /&gt;
    padding-right: 1em; &lt;br /&gt;
}    &lt;br /&gt;
&lt;br /&gt;
/* Avoid cutting off letters with descenders: g,j,p,q,y */&lt;br /&gt;
#personal h2 span {&lt;br /&gt;
    height: 1.5em;&lt;br /&gt;
    position:relative;&lt;br /&gt;
    bottom:0.1em;&lt;br /&gt;
    font-family: var(--header-font);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
    #personal {&lt;br /&gt;
        color: var(--header-text-color);&lt;br /&gt;
        .dropdown {&lt;br /&gt;
            color: var(--text-color);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
/* Triangle position patch */&lt;br /&gt;
#personal h2::after {&lt;br /&gt;
   position: relative;&lt;br /&gt;
   bottom: 0.5em;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
	:root.skin-theme-clientpref-day:has(&amp;gt; body.ns-3000),&lt;br /&gt;
    :root.skin-theme-clientpref-day:has(&amp;gt; body.ns-3001),&lt;br /&gt;
    :root.skin-theme-clientpref-day:has(.ddd-theme) {&lt;br /&gt;
&lt;br /&gt;
     --header-font: &#039;Instrument Serif&#039;;&lt;br /&gt;
        &lt;br /&gt;
    /* COLORS */&lt;br /&gt;
	--background-color: rgb(55, 55, 55);&lt;br /&gt;
	--content-color: rgba(246, 246, 246);&lt;br /&gt;
	--text-color: rgb(0, 0, 0);&lt;br /&gt;
	--link-color: #7b7970;&lt;br /&gt;
    --link-hover-color: #7b7970;&lt;br /&gt;
    --link-new-color: #ff3838;&lt;br /&gt;
    --text-stroke-color: #000;&lt;br /&gt;
    &lt;br /&gt;
    --search-bg-color: rgba(237, 237, 237);;&lt;br /&gt;
    --border-color: #b0b0b0;&lt;br /&gt;
    &lt;br /&gt;
	--header-color: rgb(0 0 0);&lt;br /&gt;
	--header-text-color: rgb(255, 255, 255);&lt;br /&gt;
    &lt;br /&gt;
    --sidebar-header-color: #4c4c4c;&lt;br /&gt;
    --sidebar-header-text: #fff;&lt;br /&gt;
    &lt;br /&gt;
    --gradient-start: rgb(34, 33, 33);&lt;br /&gt;
    --gradient-end: rgb(36, 36, 36);&lt;br /&gt;
    --banner-color: #4c4c4c;&lt;br /&gt;
    &lt;br /&gt;
	--footer-color: #000;&lt;br /&gt;
    --footer-text-color:#d6d6d6;&lt;br /&gt;
    --footer-link-color:#969696;&lt;br /&gt;
    --footer-link-hover-color:#969696;&lt;br /&gt;
    &lt;br /&gt;
    --cdx-button-color: #c9c9c9;&lt;br /&gt;
    --cdx-button-hover: #fff;&lt;br /&gt;
    &lt;br /&gt;
    --button-color: rgba(76, 76, 76);&lt;br /&gt;
	--button-text-color: rgb(255, 255, 255);&lt;br /&gt;
        &lt;br /&gt;
        .mw-body .mw-heading h1, .mw-body .mw-heading h2, .mw-body .mw-heading h3, .mw-body .mw-heading h4, .mw-body .mw-heading h5, .mw-body .mw-heading h6 {&lt;br /&gt;
            letter-spacing: 0.1rem;&lt;br /&gt;
            font-variant: small-caps;&lt;br /&gt;
            font-size: 30px;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        #pt-notifications-alert .mw-echo-notifications-badge.mw-echo-notifications-badge-all-read, body:not(.skin-vector-2022) #pt-notifications-notice .mw-echo-notifications-badge.mw-echo-notifications-badge-all-read {&lt;br /&gt;
            filter:invert(1);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        #mw-content {&lt;br /&gt;
        border:1px solid #e3e3e3;&lt;br /&gt;
        background-position-y: 1600px;&lt;br /&gt;
        background-size: 1000%;&lt;br /&gt;
        background-image: var(--ddd-bg);&lt;br /&gt;
        background-blend-mode: screen;&lt;br /&gt;
        background-color: #e3e3e3;&lt;br /&gt;
        box-shadow: inset 0 0 20px #a5a5a5;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
    .mw-wiki-title {&lt;br /&gt;
        font-family: &#039;Instrument Serif&#039; !important;&lt;br /&gt;
        letter-spacing: 0.1rem;&lt;br /&gt;
        font-style:italic;&lt;br /&gt;
    }&lt;br /&gt;
        &lt;br /&gt;
        #personal h2 span {&lt;br /&gt;
            letter-spacing: 0.2rem;&lt;br /&gt;
            font-weight:bold;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        #mw-header-container {&lt;br /&gt;
        background-position-x: 70px;&lt;br /&gt;
    background-position-y: 210px;&lt;br /&gt;
        background-image: url(&#039;https://nbittrpgwiki.pynappo.xyz/images/8/8c/DDDTextbox.png&#039;);&lt;br /&gt;
        background-blend-mode: overlay;&lt;br /&gt;
        background-color: #3b3b3b;&lt;br /&gt;
        box-shadow: inset 0 0 10px #7b7b7b;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        #catlinks-sidebar {&lt;br /&gt;
                    background-image: url(https://nbittrpgwiki.pynappo.xyz/images/2/27/DDDTextureVertical.png);&lt;br /&gt;
            background-size: 300%;&lt;br /&gt;
        background-blend-mode: overlay;&lt;br /&gt;
        background-color: #222;&lt;br /&gt;
            border: 1px solid #ffffff2e;&lt;br /&gt;
            box-shadow:inset 0 3px 5px -5px #ffffffa6,inset 0 0px 5px 0 #ffffffa6;&lt;br /&gt;
            h3 {&lt;br /&gt;
                color: #fff;&lt;br /&gt;
                font-variant: small-caps;&lt;br /&gt;
                font-style: italic;&lt;br /&gt;
                text-align:center;&lt;br /&gt;
                border: 1px solid #ffffff2e;&lt;br /&gt;
                padding: 0.5em;&lt;br /&gt;
                border-radius: 12px;&lt;br /&gt;
                background-image: url(https://nbittrpgwiki.pynappo.xyz/images/2/27/DDDTextureVertical.png);&lt;br /&gt;
            background-size: 200%;&lt;br /&gt;
        background-blend-mode: overlay;&lt;br /&gt;
        background-color: #0c0c0c;&lt;br /&gt;
            }&lt;br /&gt;
            a {&lt;br /&gt;
                color: #fff;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        #mw-footer-container {&lt;br /&gt;
        background-position-x: 70px;&lt;br /&gt;
    background-position-y: 210px;&lt;br /&gt;
        background-image: url(&#039;https://nbittrpgwiki.pynappo.xyz/images/8/8c/DDDTextbox.png&#039;);&lt;br /&gt;
        background-blend-mode: overlay;&lt;br /&gt;
        background-color: #191919;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
    .read-more-container-card-list &amp;gt; li .cdx-card {&lt;br /&gt;
    background-position-x: 70px;&lt;br /&gt;
    background-position-y: 210px;&lt;br /&gt;
        background-image: url(&#039;https://nbittrpgwiki.pynappo.xyz/images/8/8c/DDDTextbox.png&#039;);&lt;br /&gt;
        background-blend-mode: overlay;&lt;br /&gt;
        background-color: #383837;&lt;br /&gt;
            border:none;&lt;br /&gt;
            box-shadow:inset 0 1px 5px -5px #ffffffa6,inset 0 0px 10px 1px #ffffffa6;&lt;br /&gt;
        transition: 0.2s;&lt;br /&gt;
        &amp;amp;:hover {&lt;br /&gt;
            filter: brightness(1.2);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
     .read-more-container-card-list &amp;gt; li:nth-child(2n+1) .cdx-card {&lt;br /&gt;
        background-position-x: 70px;&lt;br /&gt;
        background-position-y: 110px;&lt;br /&gt;
    }&lt;br /&gt;
    .read-more-container-card-list &amp;gt; li:nth-child(3n) .cdx-card {&lt;br /&gt;
        background-position-x: 400px;&lt;br /&gt;
        background-position-y: 80px;&lt;br /&gt;
    }&lt;br /&gt;
        &lt;br /&gt;
        .cdx-card__text__title,&lt;br /&gt;
        .read-more-container-heading {&lt;br /&gt;
            color: #fff;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
 .mw-first-heading {&lt;br /&gt;
        font-family: &#039;Instrument Serif&#039; !important;&lt;br /&gt;
        font-style:italic;&lt;br /&gt;
        text-transform: uppercase;&lt;br /&gt;
        color: #fff;&lt;br /&gt;
     paint-order: stroke fill;&lt;br /&gt;
     -webkit-text-stroke: 8px #000;&lt;br /&gt;
     letter-spacing: 0.2rem;&lt;br /&gt;
     text-align: center;&lt;br /&gt;
     background: linear-gradient(90deg, #000 0%, rgba(0, 0, 0, .45) 100%);&lt;br /&gt;
    mask-image:linear-gradient(to right,transparent,black 15% 85%, transparent);&lt;br /&gt;
     padding: 0.3em;&lt;br /&gt;
     box-shadow:inset 0 3px 15px -5px #ffffffa6,inset 0 0px 15px 0 #ffffffa6;&lt;br /&gt;
     border-top: 3px solid #000;&lt;br /&gt;
         border-bottom: 3px solid #000;&lt;br /&gt;
    }&lt;br /&gt;
        &lt;br /&gt;
        .toc {&lt;br /&gt;
             background-position-x: 0px;&lt;br /&gt;
    background-position-y: 270px;&lt;br /&gt;
            background-size: 650%;&lt;br /&gt;
        background-image: url(&#039;https://nbittrpgwiki.pynappo.xyz/images/8/8c/DDDTextbox.png&#039;);&lt;br /&gt;
        background-blend-mode: overlay;&lt;br /&gt;
        background-color: #6c6c6c;&lt;br /&gt;
        box-shadow:inset 0 1px 5px -5px #ffffffa6,inset 0 0px 10px 1px #ffffffa6;&lt;br /&gt;
            border-radius: 12px;&lt;br /&gt;
            color: #fff;&lt;br /&gt;
            .toctogglelabel::after {&lt;br /&gt;
                color: #fff;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        #mw-content-container {&lt;br /&gt;
            background-image: url(&#039;https://nbittrpgwiki.pynappo.xyz/images/2/21/MonochromeForest.png&#039;);&lt;br /&gt;
            background-color: #6a6866;&lt;br /&gt;
            background-blend-mode: multiply;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
    #mw-content-block {&lt;br /&gt;
        background: #000000;&lt;br /&gt;
        background: linear-gradient(90deg,rgba(0, 0, 0, 1) 5%, rgba(110, 110, 110, 0) 20%);&lt;br /&gt;
    }&lt;br /&gt;
     &lt;br /&gt;
#mw-site-navigation .sidebar-chunk .mw-portlet &amp;gt; div,&lt;br /&gt;
#mw-site-navigation .sidebar-chunk .mw-portlet-body {&lt;br /&gt;
        margin-bottom: 1em;&lt;br /&gt;
        margin-left: -0.3em;&lt;br /&gt;
    }&lt;br /&gt;
        &lt;br /&gt;
#mw-site-navigation {&lt;br /&gt;
    &amp;amp; .sidebar-chunk {&lt;br /&gt;
        clip-path:none;&lt;br /&gt;
        background-image: url(https://nbittrpgwiki.pynappo.xyz/images/2/27/DDDTextureVertical.png);&lt;br /&gt;
            background-size: 700%;&lt;br /&gt;
        background-blend-mode: overlay;&lt;br /&gt;
        background-color: #222;&lt;br /&gt;
            border:none;&lt;br /&gt;
            box-shadow:inset 0 3px 5px -5px #ffffffa6,inset 0 0px 5px 0 #ffffffa6;&lt;br /&gt;
     h3 { &lt;br /&gt;
         font-family: var(--header-font);&lt;br /&gt;
         font-variant: small-caps;&lt;br /&gt;
         font-size: 24px;&lt;br /&gt;
         letter-spacing: 0.05rem;&lt;br /&gt;
         line-height: 0.3;&lt;br /&gt;
         font-weight: bold;&lt;br /&gt;
        border-bottom: 3px solid white;&lt;br /&gt;
         margin: 0.2em 0;&lt;br /&gt;
    }&lt;br /&gt;
        li {&lt;br /&gt;
            padding: 0.5em;&lt;br /&gt;
            transition: 0.2s;&lt;br /&gt;
            &amp;amp;:hover {&lt;br /&gt;
                transform: translateX(8px);&lt;br /&gt;
                background: linear-gradient(90deg,#ffeb6736 40%, rgba(110, 110, 110, 0) 95%);&lt;br /&gt;
                box-shadow: inset 8px 0 10px -5px #ffeb6570&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        li &amp;gt; a {&lt;br /&gt;
            color: #fff;&lt;br /&gt;
            transition: 0.2s;&lt;br /&gt;
        }&lt;br /&gt;
        li &amp;gt; a:hover {&lt;br /&gt;
            text-decoration:none;&lt;br /&gt;
            filter: drop-shadow(0 0 0.2rem #dcb114);&lt;br /&gt;
        }&lt;br /&gt;
        li &amp;gt; a:hover::before {&lt;br /&gt;
            text-decoration:none;&lt;br /&gt;
            filter: drop-shadow(0 0 0.2rem #dcb114);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Pynappo</name></author>
	</entry>
	<entry>
		<id>https://nbittrpgwiki.pynappo.xyz/index.php?title=MediaWiki:Timeless.css&amp;diff=3322</id>
		<title>MediaWiki:Timeless.css</title>
		<link rel="alternate" type="text/html" href="https://nbittrpgwiki.pynappo.xyz/index.php?title=MediaWiki:Timeless.css&amp;diff=3322"/>
		<updated>2026-10-06T03:04:36Z</updated>

		<summary type="html">&lt;p&gt;Pynappo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* All CSS here will be loaded for users of the Timeless skin */&lt;br /&gt;
/* Fonts */&lt;br /&gt;
@import url(&#039;https://fonts.googleapis.com/css2?family=Rosario:ital,wght@0,300..700;1,300..700&amp;amp;display=swap&#039;);&lt;br /&gt;
@import url(&#039;https://fonts.googleapis.com/css2?family=Rubik:ital,wght@0,300..900;1,300..900&amp;amp;display=swap&#039;);&lt;br /&gt;
@import url(&#039;https://fonts.googleapis.com/css2?family=Lora:ital,wght@0,400..700;1,400..700&amp;amp;display=swap&#039;);&lt;br /&gt;
 &lt;br /&gt;
:root {&lt;br /&gt;
	&lt;br /&gt;
	--ddd-bg:  url(&amp;quot;https://nbittrpgwiki.pynappo.xyz/images/9/98/DDDTextbox2.png&amp;quot;);&lt;br /&gt;
    &lt;br /&gt;
    --main-font: &#039;Rubik&#039;;&lt;br /&gt;
    --header-font: &#039;Rubik&#039;;&lt;br /&gt;
    --title-font: &#039;Lora&#039;;&lt;br /&gt;
    &lt;br /&gt;
    /* COLORS */&lt;br /&gt;
	--background-color: rgb(227, 227, 227);&lt;br /&gt;
	--content-color: rgba(255, 250, 242);&lt;br /&gt;
	--text-color: rgb(61, 44, 35, 1);&lt;br /&gt;
	--link-color: #8346a0;&lt;br /&gt;
    --link-hover-color: #5e188a;&lt;br /&gt;
    --link-new-color: #ff3874;&lt;br /&gt;
    --text-stroke-color: #fff;&lt;br /&gt;
    &lt;br /&gt;
    --search-bg-color: rgba(255, 250, 242);;&lt;br /&gt;
    --border-color: #be7e32;&lt;br /&gt;
    &lt;br /&gt;
	--header-color: rgb(104 71 53);&lt;br /&gt;
	--header-text-color: rgb(255, 255, 255);&lt;br /&gt;
    &lt;br /&gt;
    --sidebar-header-color: #6f4229;&lt;br /&gt;
    --sidebar-header-text: #fff;&lt;br /&gt;
    &lt;br /&gt;
    --gradient-start: rgb(225, 225, 225);&lt;br /&gt;
    --gradient-end: rgb(111, 111, 111);&lt;br /&gt;
    --banner-color: #743f95;&lt;br /&gt;
    &lt;br /&gt;
	--footer-color: #201a16;&lt;br /&gt;
    --footer-text-color:#977b50;&lt;br /&gt;
    --footer-link-color:#a88e67;&lt;br /&gt;
    --footer-link-hover-color:#d9b299;&lt;br /&gt;
    &lt;br /&gt;
    --cdx-button-color: #bea48b;&lt;br /&gt;
    --cdx-button-hover: #f5dfca;&lt;br /&gt;
    &lt;br /&gt;
    --button-color: rgba(104, 83, 68, 1);&lt;br /&gt;
	--button-text-color: rgb(255, 255, 255);&lt;br /&gt;
}&lt;br /&gt;
/* BACKGROUNDS */&lt;br /&gt;
.ddd-quote-img {&lt;br /&gt;
	outline: 2px red;&lt;br /&gt;
   &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* || GENERAL */&lt;br /&gt;
body {&lt;br /&gt;
    font-family: var(--main-font);&lt;br /&gt;
    color: var(--text-color);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
pre, code {&lt;br /&gt;
	font-family:monospace;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
a:not(.new),&lt;br /&gt;
#mw-content a:not(.new),&lt;br /&gt;
a:visited,&lt;br /&gt;
a:visited:hover {&lt;br /&gt;
	color: var(--link-color);&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
.mw-wiki-title:hover {&lt;br /&gt;
    color: var(--header-text-color) !important;&lt;br /&gt;
    text-decoration:none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.new a {&lt;br /&gt;
    color: var(--link-new-color);&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
/* || HEADINGS */    &lt;br /&gt;
.mw-heading  {&lt;br /&gt;
    h1, h2, h3, h4, h5 {&lt;br /&gt;
    font-family: var(--header-font);&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
.mw-body  {&lt;br /&gt;
    h1, h2, h3, h4, h5 {&lt;br /&gt;
    font-family: var(--header-font);&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    }&lt;br /&gt;
    h1.firstHeading {&lt;br /&gt;
        border-bottom: none;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* || HEADER */&lt;br /&gt;
#mw-header-container {&lt;br /&gt;
    background-color: var(--header-color);&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
#p-banner.mw-wiki-title {&lt;br /&gt;
    color: var(--header-text-color);&lt;br /&gt;
    font-family: var(--title-font);&lt;br /&gt;
    font-weight:bold;&lt;br /&gt;
    font-size: 18px;&lt;br /&gt;
    margin-top: -0.2em;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
#simpleSearch {&lt;br /&gt;
    background: var(--search-bg-color);&lt;br /&gt;
    border: 1px solid var(--border-color);&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
.color-bar {&lt;br /&gt;
    width:0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* || SIDEBAR */&lt;br /&gt;
#ca-delete { display: none !important; }&lt;br /&gt;
#page-tools { display: none !important;}&lt;br /&gt;
#t-cargopagevalueslink { display:none }&lt;br /&gt;
#t-smwbrowselink { display:none }  &lt;br /&gt;
    &lt;br /&gt;
@keyframes highlight {&lt;br /&gt;
	from {&lt;br /&gt;
		background-position: 0;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	to {&lt;br /&gt;
		background-position: -100%;&lt;br /&gt;
	}&lt;br /&gt;
}    &lt;br /&gt;
/* Removes logo for now */&lt;br /&gt;
.mw-wiki-logo {&lt;br /&gt;
    display: none;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
#site-navigation .sidebar-chunk  {&lt;br /&gt;
    margin-top: 4.5em;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
#mw-site-navigation {&lt;br /&gt;
    padding-top: 0.2em;&lt;br /&gt;
    .sidebar-chunk h3 {&lt;br /&gt;
        border-bottom:none;&lt;br /&gt;
        background-color: var(--sidebar-header-color);&lt;br /&gt;
        color: var(--sidebar-header-text);&lt;br /&gt;
        padding: 0.4em 0.4em 0.4em 1.5em;&lt;br /&gt;
        clip-path: polygon(90% 50%, 100% 100%, 0% 100%, 0% 0%, 100% 0%);&lt;br /&gt;
    }&lt;br /&gt;
    .sidebar-chunk {&lt;br /&gt;
        padding-top: 1em;&lt;br /&gt;
        padding-bottom: 1em;&lt;br /&gt;
        background-color: var(--content-color);&lt;br /&gt;
        box-shadow: 0 0 8px rgba(0,0,0,0.2);&lt;br /&gt;
        h3 &amp;gt; a {&lt;br /&gt;
            color: var(--font-color);&lt;br /&gt;
        }&lt;br /&gt;
        ul &amp;gt; a:hover {&lt;br /&gt;
            animation-name: highlight;&lt;br /&gt;
            animation-duration: 0.25s;&lt;br /&gt;
            animation-fill-mode: forwards;&lt;br /&gt;
            background-size: 200%;&lt;br /&gt;
            background-image: linear-gradient(to left, #eacf1b70 50%, transparent 50%);&lt;br /&gt;
        }&lt;br /&gt;
        clip-path: polygon(100% 0, 100% 100%, 99% 98%, 95% 99%, 92% 99%, 89% 100%, 86% 99%, 83% 100%, 77% 99%, 72% 100%, 66% 98%, 62% 100%, 59% 99%, 54% 99%, 49% 100%, 46% 98%, 43% 100%, 40% 98%, 38% 100%, 35% 99%, 31% 100%, 28% 99%, 25% 99%, 22% 100%, 19% 99%, 16% 100%, 13% 99%, 10% 99%, 7% 100%, 4% 99%, 0% 100%, 0% 0%);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-related-navigation {&lt;br /&gt;
    position: sticky;&lt;br /&gt;
    top: 70px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-related-navigation .sidebar-chunk {&lt;br /&gt;
    background: var(--content-color);&lt;br /&gt;
    box-shadow: 0 0 8px rgba(0,0,0,0.2);&lt;br /&gt;
    border-radius: 20px;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
/* Edit button changes */&lt;br /&gt;
#ca-ve-edit a::before {&lt;br /&gt;
    content: &amp;quot;Visual edit&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#ca-ve-edit span {&lt;br /&gt;
    display:none;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
/* || WIKI CONTENT */&lt;br /&gt;
#mw-content-block,&lt;br /&gt;
#mw-content-container {&lt;br /&gt;
    background: linear-gradient(180deg, var(--gradient-start) 0%, rgba(0, 0, 0, 0) 100%), var(--gradient-end);&lt;br /&gt;
    background-color: var(--background-color);&lt;br /&gt;
    border-bottom: none;  &lt;br /&gt;
}    &lt;br /&gt;
    &lt;br /&gt;
#mw-content {&lt;br /&gt;
    padding-left: 1.5em;&lt;br /&gt;
    padding-right: 1.5em;&lt;br /&gt;
    box-shadow: 0 0 8px rgba(0,0,0,0.2);&lt;br /&gt;
    background-color: var(--content-color);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* || CATEGORY LINKS */&lt;br /&gt;
#catlinks {&lt;br /&gt;
    padding: 0.5em;&lt;br /&gt;
    padding-bottom: 0.1em;&lt;br /&gt;
    border: 2px solid color-mix(in srgb, var(--link-color) 30%, transparent);&lt;br /&gt;
    margin-top: 1em;&lt;br /&gt;
    margin-bottom: 1em;&lt;br /&gt;
    color: #000;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
/* || RELATED PAGES */&lt;br /&gt;
.client-js .read-more-container {&lt;br /&gt;
    padding: 0;&lt;br /&gt;
    margin: 1em;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
.read-more-container-heading {&lt;br /&gt;
    color: var(--text-color);&lt;br /&gt;
    border-bottom: 0;&lt;br /&gt;
    padding-bottom: 0.5em;&lt;br /&gt;
    font-size: 0.8em;&lt;br /&gt;
    font-weight: normal;&lt;br /&gt;
    letter-spacing: 1px;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
.cdx-card {&lt;br /&gt;
    background: var(--content-color);&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
/* || FOOTER */&lt;br /&gt;
.mw-footer-container {&lt;br /&gt;
    background-color: var(--footer-color);&lt;br /&gt;
    color: var(--footer-text-color);&lt;br /&gt;
    a {&lt;br /&gt;
        color: var(--footer-link-color);&lt;br /&gt;
        text-decoration:underline;&lt;br /&gt;
        &amp;amp;:hover {&lt;br /&gt;
            color: var(--footer-link-hover-color);&lt;br /&gt;
        }&lt;br /&gt;
        &amp;amp;.external {&lt;br /&gt;
            color: var(--footer-link-color);&lt;br /&gt;
            &amp;amp;:hover {&lt;br /&gt;
                color: var(--footer-link-hover-color);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
.cdx-button:enabled, .cdx-button.cdx-button--fake-button--enabled {&lt;br /&gt;
        background: var(--cdx-button-color);&lt;br /&gt;
        &amp;amp;:hover {&lt;br /&gt;
            background-color: var(--cdx-button-hover);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
/* || PORTABLE INFOBOXES */&lt;br /&gt;
.portable-infobox {&lt;br /&gt;
	margin-right:3px;&lt;br /&gt;
	border-radius:5px;&lt;br /&gt;
}  &lt;br /&gt;
&lt;br /&gt;
.portable-infobox .pi-navigation {&lt;br /&gt;
    paint-order: stroke fill;&lt;br /&gt;
    -webkit-text-stroke: 3px var(--text-stroke-color);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.portable-infobox .pi-item-spacing {&lt;br /&gt;
    border-radius:2px;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
.pi-section-navigation .pi-section-tab.pi-section-active, .pi-section-navigation .pi-section-tab.current, .pi-media-collection .pi-tab-link.current {&lt;br /&gt;
    color: var(--banner-text-color);&lt;br /&gt;
    border-radius:2px;&lt;br /&gt;
    border-bottom: 1px solid var(--button-text-color);&lt;br /&gt;
}&lt;br /&gt;
.portable-infobox .pi-header, .portable-infobox .pi-title {&lt;br /&gt;
    text-align: center;&lt;br /&gt;
	color: var(--button-text-color);&lt;br /&gt;
	background-color:var(--button-color);&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
.lua-infobox { &lt;br /&gt;
    .infobox-label {&lt;br /&gt;
        width: 5.5em;&lt;br /&gt;
    }&lt;br /&gt;
    .infobox-label, .infobox-data {&lt;br /&gt;
    padding: 0.1em 0.5em;&lt;br /&gt;
        text-align:left;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
/* DDD Infoboxes */&lt;br /&gt;
.mw-parser-output table.wikitable.lua-infobox.ddd-theme {&lt;br /&gt;
    border: 3px double #000;&lt;br /&gt;
    border-style: double solid;&lt;br /&gt;
    background-position-x: 700px;&lt;br /&gt;
    background-position-y: 80px;&lt;br /&gt;
    background-image: var(--ddd-bg);&lt;br /&gt;
    background-blend-mode: screen;&lt;br /&gt;
    background-size: 700%;&lt;br /&gt;
    background-color: #dadada;&lt;br /&gt;
    .infobox-title {&lt;br /&gt;
        paint-order: stroke fill;&lt;br /&gt;
        -webkit-text-stroke: 4px #000;&lt;br /&gt;
        border-top: 2px solid #000;&lt;br /&gt;
        border-bottom: 3px solid #000;&lt;br /&gt;
        box-shadow:inset 0 3px 5px 0 #ffffffa6,inset 0 -3px 5px 0 #ffffffa6;&lt;br /&gt;
        background-position-x: 900px;&lt;br /&gt;
        background-position-y: 330px;&lt;br /&gt;
        background-image: var(--ddd-bg);&lt;br /&gt;
        background-blend-mode: darken;&lt;br /&gt;
        color: #fff;&lt;br /&gt;
        padding: 0.5em;&lt;br /&gt;
        background-color: #434343;&lt;br /&gt;
        }&lt;br /&gt;
    .infobox-header {&lt;br /&gt;
        color: #fff;&lt;br /&gt;
        background-position-x: 900px;&lt;br /&gt;
        background-position-y: 430px;&lt;br /&gt;
        background-image: var(--ddd-bg);&lt;br /&gt;
        paint-order: stroke fill;&lt;br /&gt;
        -webkit-text-stroke: 4px #000;&lt;br /&gt;
        border-top: 2px solid #000;&lt;br /&gt;
        border-bottom: 3px solid #000;&lt;br /&gt;
        box-shadow:inset 0 3px 5px 0 #ffffffa6,inset 0 -3px 5px 0 #ffffffa6;&lt;br /&gt;
        background-blend-mode: darken;&lt;br /&gt;
        font-variant:small-caps;&lt;br /&gt;
        font-size:larger;&lt;br /&gt;
        background-color: #434343;&lt;br /&gt;
        }&lt;br /&gt;
    .infobox-data:not(.infobox-header) {&lt;br /&gt;
        border:none;&lt;br /&gt;
    }&lt;br /&gt;
    .infobox-label {&lt;br /&gt;
        color: #000;&lt;br /&gt;
        font-style: italic;&lt;br /&gt;
        font-variant:small-caps;&lt;br /&gt;
        font-weight:bold;&lt;br /&gt;
        }&lt;br /&gt;
    .infobox-data {&lt;br /&gt;
        border-bottom: 0;&lt;br /&gt;
        box-shadow: inset 0 -1px 5px -5px #000;&lt;br /&gt;
        font-size:smaller;&lt;br /&gt;
        }&lt;br /&gt;
    .infobox-nav {&lt;br /&gt;
        background-position-x: 540px;&lt;br /&gt;
        background-position-y: 400px;&lt;br /&gt;
        color: grey;&lt;br /&gt;
        paint-order: stroke fill;&lt;br /&gt;
        -webkit-text-stroke: 3px #fff;&lt;br /&gt;
        text-align:center;&lt;br /&gt;
        font-size:small;&lt;br /&gt;
        padding: 0.2em;&lt;br /&gt;
        }&lt;br /&gt;
    .infobox-img {&lt;br /&gt;
        text-align:center;&lt;br /&gt;
        background: var(--ddd-bg);&lt;br /&gt;
        background-position-y: 300px;&lt;br /&gt;
        background-size: 700%;&lt;br /&gt;
        background-color: #c4c4c4;  &lt;br /&gt;
        background-blend-mode: overlay;&lt;br /&gt;
        box-shadow:inset 0 3px 5px 0 #ffffffa6,inset 0 -3px 5px 0 #ffffffa6;&lt;br /&gt;
        padding: 0.25em;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* For [[Weathia: Resurrection]] */ &lt;br /&gt;
.fluidimg100 img, .fluidimg img {&lt;br /&gt;
	max-width:100%;&lt;br /&gt;
	height:auto;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
/* || PRINT COMPATIBILITY */&lt;br /&gt;
&lt;br /&gt;
@media print {&lt;br /&gt;
    :root {&lt;br /&gt;
        --background-color: rgb(0, 0, 0);&lt;br /&gt;
        --content-color: rgba(255, 255, 255);&lt;br /&gt;
        --text-color: rgb(0, 0, 0);&lt;br /&gt;
        --link-color: #7d7d7d;&lt;br /&gt;
        --link-hover-color: #bfbfbf;&lt;br /&gt;
        --link-new-color: #ff3838;&lt;br /&gt;
        --text-stroke-color: #000;&lt;br /&gt;
&lt;br /&gt;
        --search-bg-color: rgba(255, 250, 242);;&lt;br /&gt;
        --border-color: #b0b0b0;&lt;br /&gt;
&lt;br /&gt;
        --header-color: rgb(0 0 0);&lt;br /&gt;
        --header-text-color: rgb(255, 255, 255);&lt;br /&gt;
&lt;br /&gt;
        --sidebar-header-color: #fff;&lt;br /&gt;
        --sidebar-header-text: #fff;&lt;br /&gt;
&lt;br /&gt;
        --gradient-start: rgb(255, 255, 255);&lt;br /&gt;
        --gradient-end: rgb(255, 255, 255);&lt;br /&gt;
        --banner-color: #fff;&lt;br /&gt;
&lt;br /&gt;
        --footer-color: #fff;&lt;br /&gt;
        --footer-text-color:#000;&lt;br /&gt;
        --footer-link-color:#aaa;&lt;br /&gt;
        --footer-link-hover-color:#aaa;&lt;br /&gt;
&lt;br /&gt;
        --cdx-button-color: #c9c9c9;&lt;br /&gt;
        --cdx-button-hover: #fff;&lt;br /&gt;
&lt;br /&gt;
        --button-color: rgba(170, 170, 170);&lt;br /&gt;
        --button-text-color: rgb(255, 255, 255);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    #tabs,&lt;br /&gt;
    .toc,&lt;br /&gt;
    .navbox {&lt;br /&gt;
        display:none;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    #mw-content {&lt;br /&gt;
        box-shadow: none;&lt;br /&gt;
        margin:0;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .portable-infobox {&lt;br /&gt;
        border: 2px solid #000 ;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .portable-infobox .pi-navigation {&lt;br /&gt;
        -webkit-text-stroke: 0;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .portable-infobox .pi-header,&lt;br /&gt;
    #mw-content-text .pi-title {&lt;br /&gt;
        color: var(--text-color);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
/* One-sided navigation menu - MEDIAWIKI SNIPPET */&lt;br /&gt;
@media (min-width: 1340px) {&lt;br /&gt;
  #mw-content-block {&lt;br /&gt;
    display: block;&lt;br /&gt;
  }&lt;br /&gt;
  #mw-content,&lt;br /&gt;
  #content-bottom-stuff {&lt;br /&gt;
    margin-left: 14em;&lt;br /&gt;
    margin-right:1em;&lt;br /&gt;
  }&lt;br /&gt;
  #mw-content-wrapper {&lt;br /&gt;
    float: right;&lt;br /&gt;
    margin-left: -14em;&lt;br /&gt;
    width: 100%;&lt;br /&gt;
  }&lt;br /&gt;
  #mw-related-navigation {&lt;br /&gt;
    width: 14em;&lt;br /&gt;
    padding: 0 1em 0 0;&lt;br /&gt;
  }&lt;br /&gt;
  div.color-middle {&lt;br /&gt;
    margin-right: 0;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (min-width: 1100px) and (max-width: 1339px) {&lt;br /&gt;
    #mw-content,&lt;br /&gt;
    #content-bottom-stuff {&lt;br /&gt;
    margin-right:1em;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (min-width: 851px) and (max-width: 1099px) {&lt;br /&gt;
    #mw-content,&lt;br /&gt;
    #content-bottom-stuff {&lt;br /&gt;
     margin-left: 1em;&lt;br /&gt;
    margin-right:1em;&lt;br /&gt;
    }&lt;br /&gt;
    #mw-content:before {&lt;br /&gt;
        display:none;&lt;br /&gt;
    }&lt;br /&gt;
    #mw-content:after {&lt;br /&gt;
        display:none;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (max-width: 850px) {&lt;br /&gt;
    #mw-content,&lt;br /&gt;
    #content-bottom-stuff {&lt;br /&gt;
    margin-right:1em;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
@media screen and (max-width: 600px) {&lt;br /&gt;
    #mw-content,&lt;br /&gt;
    #content-bottom-stuff {&lt;br /&gt;
    margin-right:0;&lt;br /&gt;
    margin-left:-1em;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Align top colour bar with page columns */&lt;br /&gt;
.ts-inner {&lt;br /&gt;
  padding: 0 0 0 1em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Re-aligning bottom logos */&lt;br /&gt;
#mw-footer {&lt;br /&gt;
    padding-right: 1em; &lt;br /&gt;
}    &lt;br /&gt;
&lt;br /&gt;
/* Avoid cutting off letters with descenders: g,j,p,q,y */&lt;br /&gt;
#personal h2 span {&lt;br /&gt;
    height: 1.5em;&lt;br /&gt;
    position:relative;&lt;br /&gt;
    bottom:0.1em;&lt;br /&gt;
    font-family: var(--header-font);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
    #personal {&lt;br /&gt;
        color: var(--header-text-color);&lt;br /&gt;
        .dropdown {&lt;br /&gt;
            color: var(--text-color);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
/* Triangle position patch */&lt;br /&gt;
#personal h2::after {&lt;br /&gt;
   position: relative;&lt;br /&gt;
   bottom: 0.5em;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
	:root.skin-theme-clientpref-day:has(&amp;gt; body.ns-3000),&lt;br /&gt;
    :root.skin-theme-clientpref-day:has(&amp;gt; body.ns-3001),&lt;br /&gt;
    :root.skin-theme-clientpref-day:has(.ddd-theme) {&lt;br /&gt;
&lt;br /&gt;
     --header-font: &#039;Instrument Serif&#039;;&lt;br /&gt;
        &lt;br /&gt;
    /* COLORS */&lt;br /&gt;
	--background-color: rgb(55, 55, 55);&lt;br /&gt;
	--content-color: rgba(246, 246, 246);&lt;br /&gt;
	--text-color: rgb(0, 0, 0);&lt;br /&gt;
	--link-color: #7b7970;&lt;br /&gt;
    --link-hover-color: #7b7970;&lt;br /&gt;
    --link-new-color: #ff3838;&lt;br /&gt;
    --text-stroke-color: #000;&lt;br /&gt;
    &lt;br /&gt;
    --search-bg-color: rgba(237, 237, 237);;&lt;br /&gt;
    --border-color: #b0b0b0;&lt;br /&gt;
    &lt;br /&gt;
	--header-color: rgb(0 0 0);&lt;br /&gt;
	--header-text-color: rgb(255, 255, 255);&lt;br /&gt;
    &lt;br /&gt;
    --sidebar-header-color: #4c4c4c;&lt;br /&gt;
    --sidebar-header-text: #fff;&lt;br /&gt;
    &lt;br /&gt;
    --gradient-start: rgb(34, 33, 33);&lt;br /&gt;
    --gradient-end: rgb(36, 36, 36);&lt;br /&gt;
    --banner-color: #4c4c4c;&lt;br /&gt;
    &lt;br /&gt;
	--footer-color: #000;&lt;br /&gt;
    --footer-text-color:#d6d6d6;&lt;br /&gt;
    --footer-link-color:#969696;&lt;br /&gt;
    --footer-link-hover-color:#969696;&lt;br /&gt;
    &lt;br /&gt;
    --cdx-button-color: #c9c9c9;&lt;br /&gt;
    --cdx-button-hover: #fff;&lt;br /&gt;
    &lt;br /&gt;
    --button-color: rgba(76, 76, 76);&lt;br /&gt;
	--button-text-color: rgb(255, 255, 255);&lt;br /&gt;
        &lt;br /&gt;
        .mw-body .mw-heading h1, .mw-body .mw-heading h2, .mw-body .mw-heading h3, .mw-body .mw-heading h4, .mw-body .mw-heading h5, .mw-body .mw-heading h6 {&lt;br /&gt;
            letter-spacing: 0.1rem;&lt;br /&gt;
            font-variant: small-caps;&lt;br /&gt;
            font-size: 30px;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        #pt-notifications-alert .mw-echo-notifications-badge.mw-echo-notifications-badge-all-read, body:not(.skin-vector-2022) #pt-notifications-notice .mw-echo-notifications-badge.mw-echo-notifications-badge-all-read {&lt;br /&gt;
            filter:invert(1);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        #mw-content {&lt;br /&gt;
        border:1px solid #e3e3e3;&lt;br /&gt;
        background-position-y: 1600px;&lt;br /&gt;
        background-size: 1000%;&lt;br /&gt;
        background-image: var(--ddd-bg);&lt;br /&gt;
        background-blend-mode: screen;&lt;br /&gt;
        background-color: #e3e3e3;&lt;br /&gt;
        box-shadow: inset 0 0 20px #a5a5a5;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
    .mw-wiki-title {&lt;br /&gt;
        font-family: &#039;Instrument Serif&#039; !important;&lt;br /&gt;
        letter-spacing: 0.1rem;&lt;br /&gt;
        font-style:italic;&lt;br /&gt;
    }&lt;br /&gt;
        &lt;br /&gt;
        #personal h2 span {&lt;br /&gt;
            letter-spacing: 0.2rem;&lt;br /&gt;
            font-weight:bold;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        #mw-header-container {&lt;br /&gt;
        background-position-x: 70px;&lt;br /&gt;
    background-position-y: 210px;&lt;br /&gt;
        background-image: url(&#039;https://nbittrpgwiki.pynappo.xyz/images/8/8c/DDDTextbox.png&#039;);&lt;br /&gt;
        background-blend-mode: overlay;&lt;br /&gt;
        background-color: #3b3b3b;&lt;br /&gt;
        box-shadow: inset 0 0 10px #7b7b7b;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        #catlinks-sidebar {&lt;br /&gt;
                    background-image: url(https://nbittrpgwiki.pynappo.xyz/images/2/27/DDDTextureVertical.png);&lt;br /&gt;
            background-size: 300%;&lt;br /&gt;
        background-blend-mode: overlay;&lt;br /&gt;
        background-color: #222;&lt;br /&gt;
            border: 1px solid #ffffff2e;&lt;br /&gt;
            box-shadow:inset 0 3px 5px -5px #ffffffa6,inset 0 0px 5px 0 #ffffffa6;&lt;br /&gt;
            h3 {&lt;br /&gt;
                color: #fff;&lt;br /&gt;
                font-variant: small-caps;&lt;br /&gt;
                font-style: italic;&lt;br /&gt;
                text-align:center;&lt;br /&gt;
                border: 1px solid #ffffff2e;&lt;br /&gt;
                padding: 0.5em;&lt;br /&gt;
                border-radius: 12px;&lt;br /&gt;
                background-image: url(https://nbittrpgwiki.pynappo.xyz/images/2/27/DDDTextureVertical.png);&lt;br /&gt;
            background-size: 200%;&lt;br /&gt;
        background-blend-mode: overlay;&lt;br /&gt;
        background-color: #0c0c0c;&lt;br /&gt;
            }&lt;br /&gt;
            a {&lt;br /&gt;
                color: #fff;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        #mw-footer-container {&lt;br /&gt;
        background-position-x: 70px;&lt;br /&gt;
    background-position-y: 210px;&lt;br /&gt;
        background-image: url(&#039;https://nbittrpgwiki.pynappo.xyz/images/8/8c/DDDTextbox.png&#039;);&lt;br /&gt;
        background-blend-mode: overlay;&lt;br /&gt;
        background-color: #191919;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
    .read-more-container-card-list &amp;gt; li .cdx-card {&lt;br /&gt;
    background-position-x: 70px;&lt;br /&gt;
    background-position-y: 210px;&lt;br /&gt;
        background-image: url(&#039;https://nbittrpgwiki.pynappo.xyz/images/8/8c/DDDTextbox.png&#039;);&lt;br /&gt;
        background-blend-mode: overlay;&lt;br /&gt;
        background-color: #383837;&lt;br /&gt;
            border:none;&lt;br /&gt;
            box-shadow:inset 0 1px 5px -5px #ffffffa6,inset 0 0px 10px 1px #ffffffa6;&lt;br /&gt;
        transition: 0.2s;&lt;br /&gt;
        &amp;amp;:hover {&lt;br /&gt;
            filter: brightness(1.2);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
     .read-more-container-card-list &amp;gt; li:nth-child(2n+1) .cdx-card {&lt;br /&gt;
        background-position-x: 70px;&lt;br /&gt;
        background-position-y: 110px;&lt;br /&gt;
    }&lt;br /&gt;
    .read-more-container-card-list &amp;gt; li:nth-child(3n) .cdx-card {&lt;br /&gt;
        background-position-x: 400px;&lt;br /&gt;
        background-position-y: 80px;&lt;br /&gt;
    }&lt;br /&gt;
        &lt;br /&gt;
        .cdx-card__text__title,&lt;br /&gt;
        .read-more-container-heading {&lt;br /&gt;
            color: #fff;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
 .mw-first-heading {&lt;br /&gt;
        font-family: &#039;Instrument Serif&#039; !important;&lt;br /&gt;
        font-style:italic;&lt;br /&gt;
        text-transform: uppercase;&lt;br /&gt;
        color: #fff;&lt;br /&gt;
     paint-order: stroke fill;&lt;br /&gt;
     -webkit-text-stroke: 8px #000;&lt;br /&gt;
     letter-spacing: 0.2rem;&lt;br /&gt;
     text-align: center;&lt;br /&gt;
     background: linear-gradient(90deg, #000 0%, rgba(0, 0, 0, .45) 100%);&lt;br /&gt;
    mask-image:linear-gradient(to right,transparent,black 15% 85%, transparent);&lt;br /&gt;
     padding: 0.3em;&lt;br /&gt;
     box-shadow:inset 0 3px 15px -5px #ffffffa6,inset 0 0px 15px 0 #ffffffa6;&lt;br /&gt;
     border-top: 3px solid #000;&lt;br /&gt;
         border-bottom: 3px solid #000;&lt;br /&gt;
    }&lt;br /&gt;
        &lt;br /&gt;
        .toc {&lt;br /&gt;
             background-position-x: 0px;&lt;br /&gt;
    background-position-y: 270px;&lt;br /&gt;
            background-size: 650%;&lt;br /&gt;
        background-image: url(&#039;https://nbittrpgwiki.pynappo.xyz/images/8/8c/DDDTextbox.png&#039;);&lt;br /&gt;
        background-blend-mode: overlay;&lt;br /&gt;
        background-color: #6c6c6c;&lt;br /&gt;
        box-shadow:inset 0 1px 5px -5px #ffffffa6,inset 0 0px 10px 1px #ffffffa6;&lt;br /&gt;
            border-radius: 12px;&lt;br /&gt;
            color: #fff;&lt;br /&gt;
            .toctogglelabel::after {&lt;br /&gt;
                color: #fff;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        #mw-content-container {&lt;br /&gt;
            background-image: url(&#039;https://nbittrpgwiki.pynappo.xyz/images/2/21/MonochromeForest.png&#039;);&lt;br /&gt;
            background-color: #6a6866;&lt;br /&gt;
            background-blend-mode: multiply;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
    #mw-content-block {&lt;br /&gt;
        background: #000000;&lt;br /&gt;
        background: linear-gradient(90deg,rgba(0, 0, 0, 1) 5%, rgba(110, 110, 110, 0) 20%);&lt;br /&gt;
    }&lt;br /&gt;
     &lt;br /&gt;
#mw-site-navigation .sidebar-chunk .mw-portlet &amp;gt; div,&lt;br /&gt;
#mw-site-navigation .sidebar-chunk .mw-portlet-body {&lt;br /&gt;
        margin-bottom: 1em;&lt;br /&gt;
        margin-left: -0.3em;&lt;br /&gt;
    }&lt;br /&gt;
        &lt;br /&gt;
#mw-site-navigation {&lt;br /&gt;
    &amp;amp; .sidebar-chunk {&lt;br /&gt;
        clip-path:none;&lt;br /&gt;
        background-image: url(https://nbittrpgwiki.pynappo.xyz/images/2/27/DDDTextureVertical.png);&lt;br /&gt;
            background-size: 700%;&lt;br /&gt;
        background-blend-mode: overlay;&lt;br /&gt;
        background-color: #222;&lt;br /&gt;
            border:none;&lt;br /&gt;
            box-shadow:inset 0 3px 5px -5px #ffffffa6,inset 0 0px 5px 0 #ffffffa6;&lt;br /&gt;
     h3 { &lt;br /&gt;
         font-family: var(--header-font);&lt;br /&gt;
         font-variant: small-caps;&lt;br /&gt;
         font-size: 24px;&lt;br /&gt;
         letter-spacing: 0.05rem;&lt;br /&gt;
         line-height: 0.3;&lt;br /&gt;
         font-weight: bold;&lt;br /&gt;
        border-bottom: 3px solid white;&lt;br /&gt;
         margin: 0.2em 0;&lt;br /&gt;
    }&lt;br /&gt;
        li {&lt;br /&gt;
            padding: 0.5em;&lt;br /&gt;
            transition: 0.2s;&lt;br /&gt;
            &amp;amp;:hover {&lt;br /&gt;
                transform: translateX(8px);&lt;br /&gt;
                background: linear-gradient(90deg,#ffeb6736 40%, rgba(110, 110, 110, 0) 95%);&lt;br /&gt;
                box-shadow: inset 8px 0 10px -5px #ffeb6570&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        li &amp;gt; a {&lt;br /&gt;
            color: #fff;&lt;br /&gt;
            transition: 0.2s;&lt;br /&gt;
        }&lt;br /&gt;
        li &amp;gt; a:hover {&lt;br /&gt;
            text-decoration:none;&lt;br /&gt;
            filter: drop-shadow(0 0 0.2rem #dcb114);&lt;br /&gt;
        }&lt;br /&gt;
        li &amp;gt; a:hover::before {&lt;br /&gt;
            text-decoration:none;&lt;br /&gt;
            filter: drop-shadow(0 0 0.2rem #dcb114);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Pynappo</name></author>
	</entry>
	<entry>
		<id>https://nbittrpgwiki.pynappo.xyz/index.php?title=MediaWiki:Timeless.css&amp;diff=3321</id>
		<title>MediaWiki:Timeless.css</title>
		<link rel="alternate" type="text/html" href="https://nbittrpgwiki.pynappo.xyz/index.php?title=MediaWiki:Timeless.css&amp;diff=3321"/>
		<updated>2026-10-06T03:03:58Z</updated>

		<summary type="html">&lt;p&gt;Pynappo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* All CSS here will be loaded for users of the Timeless skin */&lt;br /&gt;
/* Fonts */&lt;br /&gt;
@import url(&#039;https://fonts.googleapis.com/css2?family=Rosario:ital,wght@0,300..700;1,300..700&amp;amp;display=swap&#039;);&lt;br /&gt;
@import url(&#039;https://fonts.googleapis.com/css2?family=Rubik:ital,wght@0,300..900;1,300..900&amp;amp;display=swap&#039;);&lt;br /&gt;
@import url(&#039;https://fonts.googleapis.com/css2?family=Lora:ital,wght@0,400..700;1,400..700&amp;amp;display=swap&#039;);&lt;br /&gt;
 &lt;br /&gt;
:root {&lt;br /&gt;
	&lt;br /&gt;
	--ddd-bg:  url(&amp;quot;https://nbittrpgwiki.pynappo.xyz/images/9/98/DDDTextbox2.png&amp;quot;);&lt;br /&gt;
    &lt;br /&gt;
    --main-font: &#039;Rubik&#039;;&lt;br /&gt;
    --header-font: &#039;Rubik&#039;;&lt;br /&gt;
    --title-font: &#039;Lora&#039;;&lt;br /&gt;
    &lt;br /&gt;
    /* COLORS */&lt;br /&gt;
	--background-color: rgb(227, 227, 227);&lt;br /&gt;
	--content-color: rgba(255, 250, 242);&lt;br /&gt;
	--text-color: rgb(61, 44, 35, 1);&lt;br /&gt;
	--link-color: #8346a0;&lt;br /&gt;
    --link-hover-color: #5e188a;&lt;br /&gt;
    --link-new-color: #ff3874;&lt;br /&gt;
    --text-stroke-color: #fff;&lt;br /&gt;
    &lt;br /&gt;
    --search-bg-color: rgba(255, 250, 242);;&lt;br /&gt;
    --border-color: #be7e32;&lt;br /&gt;
    &lt;br /&gt;
	--header-color: rgb(104 71 53);&lt;br /&gt;
	--header-text-color: rgb(255, 255, 255);&lt;br /&gt;
    &lt;br /&gt;
    --sidebar-header-color: #6f4229;&lt;br /&gt;
    --sidebar-header-text: #fff;&lt;br /&gt;
    &lt;br /&gt;
    --gradient-start: rgb(225, 225, 225);&lt;br /&gt;
    --gradient-end: rgb(111, 111, 111);&lt;br /&gt;
    --banner-color: #743f95;&lt;br /&gt;
    &lt;br /&gt;
	--footer-color: #201a16;&lt;br /&gt;
    --footer-text-color:#977b50;&lt;br /&gt;
    --footer-link-color:#a88e67;&lt;br /&gt;
    --footer-link-hover-color:#d9b299;&lt;br /&gt;
    &lt;br /&gt;
    --cdx-button-color: #bea48b;&lt;br /&gt;
    --cdx-button-hover: #f5dfca;&lt;br /&gt;
    &lt;br /&gt;
    --button-color: rgba(104, 83, 68, 1);&lt;br /&gt;
	--button-text-color: rgb(255, 255, 255);&lt;br /&gt;
}&lt;br /&gt;
/* BACKGROUNDS */&lt;br /&gt;
.ddd-quote-img {&lt;br /&gt;
    background-image: var(--ddd-bg); &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* || GENERAL */&lt;br /&gt;
body {&lt;br /&gt;
    font-family: var(--main-font);&lt;br /&gt;
    color: var(--text-color);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
pre, code {&lt;br /&gt;
	font-family:monospace;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
a:not(.new),&lt;br /&gt;
#mw-content a:not(.new),&lt;br /&gt;
a:visited,&lt;br /&gt;
a:visited:hover {&lt;br /&gt;
	color: var(--link-color);&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
.mw-wiki-title:hover {&lt;br /&gt;
    color: var(--header-text-color) !important;&lt;br /&gt;
    text-decoration:none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.new a {&lt;br /&gt;
    color: var(--link-new-color);&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
/* || HEADINGS */    &lt;br /&gt;
.mw-heading  {&lt;br /&gt;
    h1, h2, h3, h4, h5 {&lt;br /&gt;
    font-family: var(--header-font);&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
.mw-body  {&lt;br /&gt;
    h1, h2, h3, h4, h5 {&lt;br /&gt;
    font-family: var(--header-font);&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    }&lt;br /&gt;
    h1.firstHeading {&lt;br /&gt;
        border-bottom: none;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* || HEADER */&lt;br /&gt;
#mw-header-container {&lt;br /&gt;
    background-color: var(--header-color);&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
#p-banner.mw-wiki-title {&lt;br /&gt;
    color: var(--header-text-color);&lt;br /&gt;
    font-family: var(--title-font);&lt;br /&gt;
    font-weight:bold;&lt;br /&gt;
    font-size: 18px;&lt;br /&gt;
    margin-top: -0.2em;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
#simpleSearch {&lt;br /&gt;
    background: var(--search-bg-color);&lt;br /&gt;
    border: 1px solid var(--border-color);&lt;br /&gt;
    border-radius: 8px;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
.color-bar {&lt;br /&gt;
    width:0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* || SIDEBAR */&lt;br /&gt;
#ca-delete { display: none !important; }&lt;br /&gt;
#page-tools { display: none !important;}&lt;br /&gt;
#t-cargopagevalueslink { display:none }&lt;br /&gt;
#t-smwbrowselink { display:none }  &lt;br /&gt;
    &lt;br /&gt;
@keyframes highlight {&lt;br /&gt;
	from {&lt;br /&gt;
		background-position: 0;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	to {&lt;br /&gt;
		background-position: -100%;&lt;br /&gt;
	}&lt;br /&gt;
}    &lt;br /&gt;
/* Removes logo for now */&lt;br /&gt;
.mw-wiki-logo {&lt;br /&gt;
    display: none;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
#site-navigation .sidebar-chunk  {&lt;br /&gt;
    margin-top: 4.5em;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
#mw-site-navigation {&lt;br /&gt;
    padding-top: 0.2em;&lt;br /&gt;
    .sidebar-chunk h3 {&lt;br /&gt;
        border-bottom:none;&lt;br /&gt;
        background-color: var(--sidebar-header-color);&lt;br /&gt;
        color: var(--sidebar-header-text);&lt;br /&gt;
        padding: 0.4em 0.4em 0.4em 1.5em;&lt;br /&gt;
        clip-path: polygon(90% 50%, 100% 100%, 0% 100%, 0% 0%, 100% 0%);&lt;br /&gt;
    }&lt;br /&gt;
    .sidebar-chunk {&lt;br /&gt;
        padding-top: 1em;&lt;br /&gt;
        padding-bottom: 1em;&lt;br /&gt;
        background-color: var(--content-color);&lt;br /&gt;
        box-shadow: 0 0 8px rgba(0,0,0,0.2);&lt;br /&gt;
        h3 &amp;gt; a {&lt;br /&gt;
            color: var(--font-color);&lt;br /&gt;
        }&lt;br /&gt;
        ul &amp;gt; a:hover {&lt;br /&gt;
            animation-name: highlight;&lt;br /&gt;
            animation-duration: 0.25s;&lt;br /&gt;
            animation-fill-mode: forwards;&lt;br /&gt;
            background-size: 200%;&lt;br /&gt;
            background-image: linear-gradient(to left, #eacf1b70 50%, transparent 50%);&lt;br /&gt;
        }&lt;br /&gt;
        clip-path: polygon(100% 0, 100% 100%, 99% 98%, 95% 99%, 92% 99%, 89% 100%, 86% 99%, 83% 100%, 77% 99%, 72% 100%, 66% 98%, 62% 100%, 59% 99%, 54% 99%, 49% 100%, 46% 98%, 43% 100%, 40% 98%, 38% 100%, 35% 99%, 31% 100%, 28% 99%, 25% 99%, 22% 100%, 19% 99%, 16% 100%, 13% 99%, 10% 99%, 7% 100%, 4% 99%, 0% 100%, 0% 0%);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-related-navigation {&lt;br /&gt;
    position: sticky;&lt;br /&gt;
    top: 70px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-related-navigation .sidebar-chunk {&lt;br /&gt;
    background: var(--content-color);&lt;br /&gt;
    box-shadow: 0 0 8px rgba(0,0,0,0.2);&lt;br /&gt;
    border-radius: 20px;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
/* Edit button changes */&lt;br /&gt;
#ca-ve-edit a::before {&lt;br /&gt;
    content: &amp;quot;Visual edit&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#ca-ve-edit span {&lt;br /&gt;
    display:none;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
/* || WIKI CONTENT */&lt;br /&gt;
#mw-content-block,&lt;br /&gt;
#mw-content-container {&lt;br /&gt;
    background: linear-gradient(180deg, var(--gradient-start) 0%, rgba(0, 0, 0, 0) 100%), var(--gradient-end);&lt;br /&gt;
    background-color: var(--background-color);&lt;br /&gt;
    border-bottom: none;  &lt;br /&gt;
}    &lt;br /&gt;
    &lt;br /&gt;
#mw-content {&lt;br /&gt;
    padding-left: 1.5em;&lt;br /&gt;
    padding-right: 1.5em;&lt;br /&gt;
    box-shadow: 0 0 8px rgba(0,0,0,0.2);&lt;br /&gt;
    background-color: var(--content-color);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* || CATEGORY LINKS */&lt;br /&gt;
#catlinks {&lt;br /&gt;
    padding: 0.5em;&lt;br /&gt;
    padding-bottom: 0.1em;&lt;br /&gt;
    border: 2px solid color-mix(in srgb, var(--link-color) 30%, transparent);&lt;br /&gt;
    margin-top: 1em;&lt;br /&gt;
    margin-bottom: 1em;&lt;br /&gt;
    color: #000;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
/* || RELATED PAGES */&lt;br /&gt;
.client-js .read-more-container {&lt;br /&gt;
    padding: 0;&lt;br /&gt;
    margin: 1em;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
.read-more-container-heading {&lt;br /&gt;
    color: var(--text-color);&lt;br /&gt;
    border-bottom: 0;&lt;br /&gt;
    padding-bottom: 0.5em;&lt;br /&gt;
    font-size: 0.8em;&lt;br /&gt;
    font-weight: normal;&lt;br /&gt;
    letter-spacing: 1px;&lt;br /&gt;
    text-transform: uppercase;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
.cdx-card {&lt;br /&gt;
    background: var(--content-color);&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
/* || FOOTER */&lt;br /&gt;
.mw-footer-container {&lt;br /&gt;
    background-color: var(--footer-color);&lt;br /&gt;
    color: var(--footer-text-color);&lt;br /&gt;
    a {&lt;br /&gt;
        color: var(--footer-link-color);&lt;br /&gt;
        text-decoration:underline;&lt;br /&gt;
        &amp;amp;:hover {&lt;br /&gt;
            color: var(--footer-link-hover-color);&lt;br /&gt;
        }&lt;br /&gt;
        &amp;amp;.external {&lt;br /&gt;
            color: var(--footer-link-color);&lt;br /&gt;
            &amp;amp;:hover {&lt;br /&gt;
                color: var(--footer-link-hover-color);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
.cdx-button:enabled, .cdx-button.cdx-button--fake-button--enabled {&lt;br /&gt;
        background: var(--cdx-button-color);&lt;br /&gt;
        &amp;amp;:hover {&lt;br /&gt;
            background-color: var(--cdx-button-hover);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
/* || PORTABLE INFOBOXES */&lt;br /&gt;
.portable-infobox {&lt;br /&gt;
	margin-right:3px;&lt;br /&gt;
	border-radius:5px;&lt;br /&gt;
}  &lt;br /&gt;
&lt;br /&gt;
.portable-infobox .pi-navigation {&lt;br /&gt;
    paint-order: stroke fill;&lt;br /&gt;
    -webkit-text-stroke: 3px var(--text-stroke-color);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.portable-infobox .pi-item-spacing {&lt;br /&gt;
    border-radius:2px;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
.pi-section-navigation .pi-section-tab.pi-section-active, .pi-section-navigation .pi-section-tab.current, .pi-media-collection .pi-tab-link.current {&lt;br /&gt;
    color: var(--banner-text-color);&lt;br /&gt;
    border-radius:2px;&lt;br /&gt;
    border-bottom: 1px solid var(--button-text-color);&lt;br /&gt;
}&lt;br /&gt;
.portable-infobox .pi-header, .portable-infobox .pi-title {&lt;br /&gt;
    text-align: center;&lt;br /&gt;
	color: var(--button-text-color);&lt;br /&gt;
	background-color:var(--button-color);&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
.lua-infobox { &lt;br /&gt;
    .infobox-label {&lt;br /&gt;
        width: 5.5em;&lt;br /&gt;
    }&lt;br /&gt;
    .infobox-label, .infobox-data {&lt;br /&gt;
    padding: 0.1em 0.5em;&lt;br /&gt;
        text-align:left;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
/* DDD Infoboxes */&lt;br /&gt;
.mw-parser-output table.wikitable.lua-infobox.ddd-theme {&lt;br /&gt;
    border: 3px double #000;&lt;br /&gt;
    border-style: double solid;&lt;br /&gt;
    background-position-x: 700px;&lt;br /&gt;
    background-position-y: 80px;&lt;br /&gt;
    background-image: var(--ddd-bg);&lt;br /&gt;
    background-blend-mode: screen;&lt;br /&gt;
    background-size: 700%;&lt;br /&gt;
    background-color: #dadada;&lt;br /&gt;
    .infobox-title {&lt;br /&gt;
        paint-order: stroke fill;&lt;br /&gt;
        -webkit-text-stroke: 4px #000;&lt;br /&gt;
        border-top: 2px solid #000;&lt;br /&gt;
        border-bottom: 3px solid #000;&lt;br /&gt;
        box-shadow:inset 0 3px 5px 0 #ffffffa6,inset 0 -3px 5px 0 #ffffffa6;&lt;br /&gt;
        background-position-x: 900px;&lt;br /&gt;
        background-position-y: 330px;&lt;br /&gt;
        background-image: var(--ddd-bg);&lt;br /&gt;
        background-blend-mode: darken;&lt;br /&gt;
        color: #fff;&lt;br /&gt;
        padding: 0.5em;&lt;br /&gt;
        background-color: #434343;&lt;br /&gt;
        }&lt;br /&gt;
    .infobox-header {&lt;br /&gt;
        color: #fff;&lt;br /&gt;
        background-position-x: 900px;&lt;br /&gt;
        background-position-y: 430px;&lt;br /&gt;
        background-image: var(--ddd-bg);&lt;br /&gt;
        paint-order: stroke fill;&lt;br /&gt;
        -webkit-text-stroke: 4px #000;&lt;br /&gt;
        border-top: 2px solid #000;&lt;br /&gt;
        border-bottom: 3px solid #000;&lt;br /&gt;
        box-shadow:inset 0 3px 5px 0 #ffffffa6,inset 0 -3px 5px 0 #ffffffa6;&lt;br /&gt;
        background-blend-mode: darken;&lt;br /&gt;
        font-variant:small-caps;&lt;br /&gt;
        font-size:larger;&lt;br /&gt;
        background-color: #434343;&lt;br /&gt;
        }&lt;br /&gt;
    .infobox-data:not(.infobox-header) {&lt;br /&gt;
        border:none;&lt;br /&gt;
    }&lt;br /&gt;
    .infobox-label {&lt;br /&gt;
        color: #000;&lt;br /&gt;
        font-style: italic;&lt;br /&gt;
        font-variant:small-caps;&lt;br /&gt;
        font-weight:bold;&lt;br /&gt;
        }&lt;br /&gt;
    .infobox-data {&lt;br /&gt;
        border-bottom: 0;&lt;br /&gt;
        box-shadow: inset 0 -1px 5px -5px #000;&lt;br /&gt;
        font-size:smaller;&lt;br /&gt;
        }&lt;br /&gt;
    .infobox-nav {&lt;br /&gt;
        background-position-x: 540px;&lt;br /&gt;
        background-position-y: 400px;&lt;br /&gt;
        color: grey;&lt;br /&gt;
        paint-order: stroke fill;&lt;br /&gt;
        -webkit-text-stroke: 3px #fff;&lt;br /&gt;
        text-align:center;&lt;br /&gt;
        font-size:small;&lt;br /&gt;
        padding: 0.2em;&lt;br /&gt;
        }&lt;br /&gt;
    .infobox-img {&lt;br /&gt;
        text-align:center;&lt;br /&gt;
        background: var(--ddd-bg);&lt;br /&gt;
        background-position-y: 300px;&lt;br /&gt;
        background-size: 700%;&lt;br /&gt;
        background-color: #c4c4c4;  &lt;br /&gt;
        background-blend-mode: overlay;&lt;br /&gt;
        box-shadow:inset 0 3px 5px 0 #ffffffa6,inset 0 -3px 5px 0 #ffffffa6;&lt;br /&gt;
        padding: 0.25em;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* For [[Weathia: Resurrection]] */ &lt;br /&gt;
.fluidimg100 img, .fluidimg img {&lt;br /&gt;
	max-width:100%;&lt;br /&gt;
	height:auto;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
/* || PRINT COMPATIBILITY */&lt;br /&gt;
&lt;br /&gt;
@media print {&lt;br /&gt;
    :root {&lt;br /&gt;
        --background-color: rgb(0, 0, 0);&lt;br /&gt;
        --content-color: rgba(255, 255, 255);&lt;br /&gt;
        --text-color: rgb(0, 0, 0);&lt;br /&gt;
        --link-color: #7d7d7d;&lt;br /&gt;
        --link-hover-color: #bfbfbf;&lt;br /&gt;
        --link-new-color: #ff3838;&lt;br /&gt;
        --text-stroke-color: #000;&lt;br /&gt;
&lt;br /&gt;
        --search-bg-color: rgba(255, 250, 242);;&lt;br /&gt;
        --border-color: #b0b0b0;&lt;br /&gt;
&lt;br /&gt;
        --header-color: rgb(0 0 0);&lt;br /&gt;
        --header-text-color: rgb(255, 255, 255);&lt;br /&gt;
&lt;br /&gt;
        --sidebar-header-color: #fff;&lt;br /&gt;
        --sidebar-header-text: #fff;&lt;br /&gt;
&lt;br /&gt;
        --gradient-start: rgb(255, 255, 255);&lt;br /&gt;
        --gradient-end: rgb(255, 255, 255);&lt;br /&gt;
        --banner-color: #fff;&lt;br /&gt;
&lt;br /&gt;
        --footer-color: #fff;&lt;br /&gt;
        --footer-text-color:#000;&lt;br /&gt;
        --footer-link-color:#aaa;&lt;br /&gt;
        --footer-link-hover-color:#aaa;&lt;br /&gt;
&lt;br /&gt;
        --cdx-button-color: #c9c9c9;&lt;br /&gt;
        --cdx-button-hover: #fff;&lt;br /&gt;
&lt;br /&gt;
        --button-color: rgba(170, 170, 170);&lt;br /&gt;
        --button-text-color: rgb(255, 255, 255);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    #tabs,&lt;br /&gt;
    .toc,&lt;br /&gt;
    .navbox {&lt;br /&gt;
        display:none;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    #mw-content {&lt;br /&gt;
        box-shadow: none;&lt;br /&gt;
        margin:0;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .portable-infobox {&lt;br /&gt;
        border: 2px solid #000 ;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .portable-infobox .pi-navigation {&lt;br /&gt;
        -webkit-text-stroke: 0;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    .portable-infobox .pi-header,&lt;br /&gt;
    #mw-content-text .pi-title {&lt;br /&gt;
        color: var(--text-color);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
/* One-sided navigation menu - MEDIAWIKI SNIPPET */&lt;br /&gt;
@media (min-width: 1340px) {&lt;br /&gt;
  #mw-content-block {&lt;br /&gt;
    display: block;&lt;br /&gt;
  }&lt;br /&gt;
  #mw-content,&lt;br /&gt;
  #content-bottom-stuff {&lt;br /&gt;
    margin-left: 14em;&lt;br /&gt;
    margin-right:1em;&lt;br /&gt;
  }&lt;br /&gt;
  #mw-content-wrapper {&lt;br /&gt;
    float: right;&lt;br /&gt;
    margin-left: -14em;&lt;br /&gt;
    width: 100%;&lt;br /&gt;
  }&lt;br /&gt;
  #mw-related-navigation {&lt;br /&gt;
    width: 14em;&lt;br /&gt;
    padding: 0 1em 0 0;&lt;br /&gt;
  }&lt;br /&gt;
  div.color-middle {&lt;br /&gt;
    margin-right: 0;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (min-width: 1100px) and (max-width: 1339px) {&lt;br /&gt;
    #mw-content,&lt;br /&gt;
    #content-bottom-stuff {&lt;br /&gt;
    margin-right:1em;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (min-width: 851px) and (max-width: 1099px) {&lt;br /&gt;
    #mw-content,&lt;br /&gt;
    #content-bottom-stuff {&lt;br /&gt;
     margin-left: 1em;&lt;br /&gt;
    margin-right:1em;&lt;br /&gt;
    }&lt;br /&gt;
    #mw-content:before {&lt;br /&gt;
        display:none;&lt;br /&gt;
    }&lt;br /&gt;
    #mw-content:after {&lt;br /&gt;
        display:none;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (max-width: 850px) {&lt;br /&gt;
    #mw-content,&lt;br /&gt;
    #content-bottom-stuff {&lt;br /&gt;
    margin-right:1em;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
@media screen and (max-width: 600px) {&lt;br /&gt;
    #mw-content,&lt;br /&gt;
    #content-bottom-stuff {&lt;br /&gt;
    margin-right:0;&lt;br /&gt;
    margin-left:-1em;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Align top colour bar with page columns */&lt;br /&gt;
.ts-inner {&lt;br /&gt;
  padding: 0 0 0 1em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Re-aligning bottom logos */&lt;br /&gt;
#mw-footer {&lt;br /&gt;
    padding-right: 1em; &lt;br /&gt;
}    &lt;br /&gt;
&lt;br /&gt;
/* Avoid cutting off letters with descenders: g,j,p,q,y */&lt;br /&gt;
#personal h2 span {&lt;br /&gt;
    height: 1.5em;&lt;br /&gt;
    position:relative;&lt;br /&gt;
    bottom:0.1em;&lt;br /&gt;
    font-family: var(--header-font);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
    #personal {&lt;br /&gt;
        color: var(--header-text-color);&lt;br /&gt;
        .dropdown {&lt;br /&gt;
            color: var(--text-color);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
/* Triangle position patch */&lt;br /&gt;
#personal h2::after {&lt;br /&gt;
   position: relative;&lt;br /&gt;
   bottom: 0.5em;&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
	:root.skin-theme-clientpref-day:has(&amp;gt; body.ns-3000),&lt;br /&gt;
    :root.skin-theme-clientpref-day:has(&amp;gt; body.ns-3001),&lt;br /&gt;
    :root.skin-theme-clientpref-day:has(.ddd-theme) {&lt;br /&gt;
&lt;br /&gt;
     --header-font: &#039;Instrument Serif&#039;;&lt;br /&gt;
        &lt;br /&gt;
    /* COLORS */&lt;br /&gt;
	--background-color: rgb(55, 55, 55);&lt;br /&gt;
	--content-color: rgba(246, 246, 246);&lt;br /&gt;
	--text-color: rgb(0, 0, 0);&lt;br /&gt;
	--link-color: #7b7970;&lt;br /&gt;
    --link-hover-color: #7b7970;&lt;br /&gt;
    --link-new-color: #ff3838;&lt;br /&gt;
    --text-stroke-color: #000;&lt;br /&gt;
    &lt;br /&gt;
    --search-bg-color: rgba(237, 237, 237);;&lt;br /&gt;
    --border-color: #b0b0b0;&lt;br /&gt;
    &lt;br /&gt;
	--header-color: rgb(0 0 0);&lt;br /&gt;
	--header-text-color: rgb(255, 255, 255);&lt;br /&gt;
    &lt;br /&gt;
    --sidebar-header-color: #4c4c4c;&lt;br /&gt;
    --sidebar-header-text: #fff;&lt;br /&gt;
    &lt;br /&gt;
    --gradient-start: rgb(34, 33, 33);&lt;br /&gt;
    --gradient-end: rgb(36, 36, 36);&lt;br /&gt;
    --banner-color: #4c4c4c;&lt;br /&gt;
    &lt;br /&gt;
	--footer-color: #000;&lt;br /&gt;
    --footer-text-color:#d6d6d6;&lt;br /&gt;
    --footer-link-color:#969696;&lt;br /&gt;
    --footer-link-hover-color:#969696;&lt;br /&gt;
    &lt;br /&gt;
    --cdx-button-color: #c9c9c9;&lt;br /&gt;
    --cdx-button-hover: #fff;&lt;br /&gt;
    &lt;br /&gt;
    --button-color: rgba(76, 76, 76);&lt;br /&gt;
	--button-text-color: rgb(255, 255, 255);&lt;br /&gt;
        &lt;br /&gt;
        .mw-body .mw-heading h1, .mw-body .mw-heading h2, .mw-body .mw-heading h3, .mw-body .mw-heading h4, .mw-body .mw-heading h5, .mw-body .mw-heading h6 {&lt;br /&gt;
            letter-spacing: 0.1rem;&lt;br /&gt;
            font-variant: small-caps;&lt;br /&gt;
            font-size: 30px;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        #pt-notifications-alert .mw-echo-notifications-badge.mw-echo-notifications-badge-all-read, body:not(.skin-vector-2022) #pt-notifications-notice .mw-echo-notifications-badge.mw-echo-notifications-badge-all-read {&lt;br /&gt;
            filter:invert(1);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        #mw-content {&lt;br /&gt;
        border:1px solid #e3e3e3;&lt;br /&gt;
        background-position-y: 1600px;&lt;br /&gt;
        background-size: 1000%;&lt;br /&gt;
        background-image: var(--ddd-bg);&lt;br /&gt;
        background-blend-mode: screen;&lt;br /&gt;
        background-color: #e3e3e3;&lt;br /&gt;
        box-shadow: inset 0 0 20px #a5a5a5;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
    .mw-wiki-title {&lt;br /&gt;
        font-family: &#039;Instrument Serif&#039; !important;&lt;br /&gt;
        letter-spacing: 0.1rem;&lt;br /&gt;
        font-style:italic;&lt;br /&gt;
    }&lt;br /&gt;
        &lt;br /&gt;
        #personal h2 span {&lt;br /&gt;
            letter-spacing: 0.2rem;&lt;br /&gt;
            font-weight:bold;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        #mw-header-container {&lt;br /&gt;
        background-position-x: 70px;&lt;br /&gt;
    background-position-y: 210px;&lt;br /&gt;
        background-image: url(&#039;https://nbittrpgwiki.pynappo.xyz/images/8/8c/DDDTextbox.png&#039;);&lt;br /&gt;
        background-blend-mode: overlay;&lt;br /&gt;
        background-color: #3b3b3b;&lt;br /&gt;
        box-shadow: inset 0 0 10px #7b7b7b;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        #catlinks-sidebar {&lt;br /&gt;
                    background-image: url(https://nbittrpgwiki.pynappo.xyz/images/2/27/DDDTextureVertical.png);&lt;br /&gt;
            background-size: 300%;&lt;br /&gt;
        background-blend-mode: overlay;&lt;br /&gt;
        background-color: #222;&lt;br /&gt;
            border: 1px solid #ffffff2e;&lt;br /&gt;
            box-shadow:inset 0 3px 5px -5px #ffffffa6,inset 0 0px 5px 0 #ffffffa6;&lt;br /&gt;
            h3 {&lt;br /&gt;
                color: #fff;&lt;br /&gt;
                font-variant: small-caps;&lt;br /&gt;
                font-style: italic;&lt;br /&gt;
                text-align:center;&lt;br /&gt;
                border: 1px solid #ffffff2e;&lt;br /&gt;
                padding: 0.5em;&lt;br /&gt;
                border-radius: 12px;&lt;br /&gt;
                background-image: url(https://nbittrpgwiki.pynappo.xyz/images/2/27/DDDTextureVertical.png);&lt;br /&gt;
            background-size: 200%;&lt;br /&gt;
        background-blend-mode: overlay;&lt;br /&gt;
        background-color: #0c0c0c;&lt;br /&gt;
            }&lt;br /&gt;
            a {&lt;br /&gt;
                color: #fff;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        #mw-footer-container {&lt;br /&gt;
        background-position-x: 70px;&lt;br /&gt;
    background-position-y: 210px;&lt;br /&gt;
        background-image: url(&#039;https://nbittrpgwiki.pynappo.xyz/images/8/8c/DDDTextbox.png&#039;);&lt;br /&gt;
        background-blend-mode: overlay;&lt;br /&gt;
        background-color: #191919;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
    .read-more-container-card-list &amp;gt; li .cdx-card {&lt;br /&gt;
    background-position-x: 70px;&lt;br /&gt;
    background-position-y: 210px;&lt;br /&gt;
        background-image: url(&#039;https://nbittrpgwiki.pynappo.xyz/images/8/8c/DDDTextbox.png&#039;);&lt;br /&gt;
        background-blend-mode: overlay;&lt;br /&gt;
        background-color: #383837;&lt;br /&gt;
            border:none;&lt;br /&gt;
            box-shadow:inset 0 1px 5px -5px #ffffffa6,inset 0 0px 10px 1px #ffffffa6;&lt;br /&gt;
        transition: 0.2s;&lt;br /&gt;
        &amp;amp;:hover {&lt;br /&gt;
            filter: brightness(1.2);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
     .read-more-container-card-list &amp;gt; li:nth-child(2n+1) .cdx-card {&lt;br /&gt;
        background-position-x: 70px;&lt;br /&gt;
        background-position-y: 110px;&lt;br /&gt;
    }&lt;br /&gt;
    .read-more-container-card-list &amp;gt; li:nth-child(3n) .cdx-card {&lt;br /&gt;
        background-position-x: 400px;&lt;br /&gt;
        background-position-y: 80px;&lt;br /&gt;
    }&lt;br /&gt;
        &lt;br /&gt;
        .cdx-card__text__title,&lt;br /&gt;
        .read-more-container-heading {&lt;br /&gt;
            color: #fff;&lt;br /&gt;
        }&lt;br /&gt;
    &lt;br /&gt;
 .mw-first-heading {&lt;br /&gt;
        font-family: &#039;Instrument Serif&#039; !important;&lt;br /&gt;
        font-style:italic;&lt;br /&gt;
        text-transform: uppercase;&lt;br /&gt;
        color: #fff;&lt;br /&gt;
     paint-order: stroke fill;&lt;br /&gt;
     -webkit-text-stroke: 8px #000;&lt;br /&gt;
     letter-spacing: 0.2rem;&lt;br /&gt;
     text-align: center;&lt;br /&gt;
     background: linear-gradient(90deg, #000 0%, rgba(0, 0, 0, .45) 100%);&lt;br /&gt;
    mask-image:linear-gradient(to right,transparent,black 15% 85%, transparent);&lt;br /&gt;
     padding: 0.3em;&lt;br /&gt;
     box-shadow:inset 0 3px 15px -5px #ffffffa6,inset 0 0px 15px 0 #ffffffa6;&lt;br /&gt;
     border-top: 3px solid #000;&lt;br /&gt;
         border-bottom: 3px solid #000;&lt;br /&gt;
    }&lt;br /&gt;
        &lt;br /&gt;
        .toc {&lt;br /&gt;
             background-position-x: 0px;&lt;br /&gt;
    background-position-y: 270px;&lt;br /&gt;
            background-size: 650%;&lt;br /&gt;
        background-image: url(&#039;https://nbittrpgwiki.pynappo.xyz/images/8/8c/DDDTextbox.png&#039;);&lt;br /&gt;
        background-blend-mode: overlay;&lt;br /&gt;
        background-color: #6c6c6c;&lt;br /&gt;
        box-shadow:inset 0 1px 5px -5px #ffffffa6,inset 0 0px 10px 1px #ffffffa6;&lt;br /&gt;
            border-radius: 12px;&lt;br /&gt;
            color: #fff;&lt;br /&gt;
            .toctogglelabel::after {&lt;br /&gt;
                color: #fff;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        #mw-content-container {&lt;br /&gt;
            background-image: url(&#039;https://nbittrpgwiki.pynappo.xyz/images/2/21/MonochromeForest.png&#039;);&lt;br /&gt;
            background-color: #6a6866;&lt;br /&gt;
            background-blend-mode: multiply;&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
    #mw-content-block {&lt;br /&gt;
        background: #000000;&lt;br /&gt;
        background: linear-gradient(90deg,rgba(0, 0, 0, 1) 5%, rgba(110, 110, 110, 0) 20%);&lt;br /&gt;
    }&lt;br /&gt;
     &lt;br /&gt;
#mw-site-navigation .sidebar-chunk .mw-portlet &amp;gt; div,&lt;br /&gt;
#mw-site-navigation .sidebar-chunk .mw-portlet-body {&lt;br /&gt;
        margin-bottom: 1em;&lt;br /&gt;
        margin-left: -0.3em;&lt;br /&gt;
    }&lt;br /&gt;
        &lt;br /&gt;
#mw-site-navigation {&lt;br /&gt;
    &amp;amp; .sidebar-chunk {&lt;br /&gt;
        clip-path:none;&lt;br /&gt;
        background-image: url(https://nbittrpgwiki.pynappo.xyz/images/2/27/DDDTextureVertical.png);&lt;br /&gt;
            background-size: 700%;&lt;br /&gt;
        background-blend-mode: overlay;&lt;br /&gt;
        background-color: #222;&lt;br /&gt;
            border:none;&lt;br /&gt;
            box-shadow:inset 0 3px 5px -5px #ffffffa6,inset 0 0px 5px 0 #ffffffa6;&lt;br /&gt;
     h3 { &lt;br /&gt;
         font-family: var(--header-font);&lt;br /&gt;
         font-variant: small-caps;&lt;br /&gt;
         font-size: 24px;&lt;br /&gt;
         letter-spacing: 0.05rem;&lt;br /&gt;
         line-height: 0.3;&lt;br /&gt;
         font-weight: bold;&lt;br /&gt;
        border-bottom: 3px solid white;&lt;br /&gt;
         margin: 0.2em 0;&lt;br /&gt;
    }&lt;br /&gt;
        li {&lt;br /&gt;
            padding: 0.5em;&lt;br /&gt;
            transition: 0.2s;&lt;br /&gt;
            &amp;amp;:hover {&lt;br /&gt;
                transform: translateX(8px);&lt;br /&gt;
                background: linear-gradient(90deg,#ffeb6736 40%, rgba(110, 110, 110, 0) 95%);&lt;br /&gt;
                box-shadow: inset 8px 0 10px -5px #ffeb6570&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        li &amp;gt; a {&lt;br /&gt;
            color: #fff;&lt;br /&gt;
            transition: 0.2s;&lt;br /&gt;
        }&lt;br /&gt;
        li &amp;gt; a:hover {&lt;br /&gt;
            text-decoration:none;&lt;br /&gt;
            filter: drop-shadow(0 0 0.2rem #dcb114);&lt;br /&gt;
        }&lt;br /&gt;
        li &amp;gt; a:hover::before {&lt;br /&gt;
            text-decoration:none;&lt;br /&gt;
            filter: drop-shadow(0 0 0.2rem #dcb114);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Pynappo</name></author>
	</entry>
	<entry>
		<id>https://nbittrpgwiki.pynappo.xyz/index.php?title=Template:Countdown&amp;diff=3123</id>
		<title>Template:Countdown</title>
		<link rel="alternate" type="text/html" href="https://nbittrpgwiki.pynappo.xyz/index.php?title=Template:Countdown&amp;diff=3123"/>
		<updated>2026-09-27T09:48:03Z</updated>

		<summary type="html">&lt;p&gt;Pynappo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
Displays a daily or weekly recurring countdown to a specific time/day in UTC.&lt;br /&gt;
&lt;br /&gt;
=== Usage ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{Countdown&lt;br /&gt;
| day = Monday&lt;br /&gt;
| time = 15:00&lt;br /&gt;
| event = Weekly Reset&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Countdown&lt;br /&gt;
| day = Monday&lt;br /&gt;
| time = 15:00&lt;br /&gt;
| event = Weekly Reset&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{Countdown&lt;br /&gt;
| time = 15:00&lt;br /&gt;
| event = Daily Reset&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Countdown&lt;br /&gt;
| time = 15:00&lt;br /&gt;
| event = Daily Reset&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;&amp;lt;span class=&amp;quot;countdown&amp;quot; data-time=&amp;quot;{{{time|{{{1|00:00}}}}}}&amp;quot; data-day=&amp;quot;{{{day|}}}&amp;quot; data-event=&amp;quot;{{{event|}}}&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;countdown-text&amp;quot;&amp;gt;Loading countdown to {{#if:{{{event|}}}|{{{event}}} at |}}{{#if:{{{day|}}}|{{{day}}} |}}{{{time|{{{1|00:00}}}}}} UTC...&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pynappo</name></author>
	</entry>
	<entry>
		<id>https://nbittrpgwiki.pynappo.xyz/index.php?title=Template:Countdown&amp;diff=3122</id>
		<title>Template:Countdown</title>
		<link rel="alternate" type="text/html" href="https://nbittrpgwiki.pynappo.xyz/index.php?title=Template:Countdown&amp;diff=3122"/>
		<updated>2026-09-27T09:46:23Z</updated>

		<summary type="html">&lt;p&gt;Pynappo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
Displays a daily or weekly recurring countdown to a specific time/day in UTC.&lt;br /&gt;
&lt;br /&gt;
=== Usage ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
{{Countdown&lt;br /&gt;
| day = Monday&lt;br /&gt;
| time = 15:00&lt;br /&gt;
| event = Weekly Reset&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Countdown&lt;br /&gt;
| day = Monday&lt;br /&gt;
| time = 15:00&lt;br /&gt;
| event = Weekly Reset&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
{{Countdown&lt;br /&gt;
| time = 15:00&lt;br /&gt;
| event = Daily Reset&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Countdown&lt;br /&gt;
| time = 15:00&lt;br /&gt;
| event = Daily Reset&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;&amp;lt;span class=&amp;quot;countdown&amp;quot; data-time=&amp;quot;{{{time|{{{1|00:00}}}}}}&amp;quot; data-day=&amp;quot;{{{day|}}}&amp;quot; data-event=&amp;quot;{{{event|}}}&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;countdown-text&amp;quot;&amp;gt;Loading countdown to {{#if:{{{event|}}}|{{{event}}} at |}}{{#if:{{{day|}}}|{{{day}}} |}}{{{time|{{{1|00:00}}}}}} UTC...&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pynappo</name></author>
	</entry>
	<entry>
		<id>https://nbittrpgwiki.pynappo.xyz/index.php?title=Template:Countdown&amp;diff=3121</id>
		<title>Template:Countdown</title>
		<link rel="alternate" type="text/html" href="https://nbittrpgwiki.pynappo.xyz/index.php?title=Template:Countdown&amp;diff=3121"/>
		<updated>2026-09-27T09:45:56Z</updated>

		<summary type="html">&lt;p&gt;Pynappo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Displays a daily or weekly recurring countdown to a specific time/day in UTC.&lt;br /&gt;
&lt;br /&gt;
=== Usage ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
{{Countdown&lt;br /&gt;
| day = Monday&lt;br /&gt;
| time = 15:00&lt;br /&gt;
| event = Weekly Reset&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Countdown&lt;br /&gt;
| day = Monday&lt;br /&gt;
| time = 15:00&lt;br /&gt;
| event = Weekly Reset&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
{{Countdown&lt;br /&gt;
| time = 15:00&lt;br /&gt;
| event = Daily Reset&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Countdown&lt;br /&gt;
| time = 15:00&lt;br /&gt;
| event = Daily Reset&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;&amp;lt;span class=&amp;quot;countdown&amp;quot; data-time=&amp;quot;{{{time|{{{1|00:00}}}}}}&amp;quot; data-day=&amp;quot;{{{day|}}}&amp;quot; data-event=&amp;quot;{{{event|}}}&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;countdown-text&amp;quot;&amp;gt;Loading countdown to {{#if:{{{event|}}}|{{{event}}} at |}}{{#if:{{{day|}}}|{{{day}}} |}}{{{time|{{{1|00:00}}}}}} UTC...&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pynappo</name></author>
	</entry>
	<entry>
		<id>https://nbittrpgwiki.pynappo.xyz/index.php?title=MediaWiki:Common.js&amp;diff=3120</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://nbittrpgwiki.pynappo.xyz/index.php?title=MediaWiki:Common.js&amp;diff=3120"/>
		<updated>2026-09-27T09:45:02Z</updated>

		<summary type="html">&lt;p&gt;Pynappo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/*&lt;br /&gt;
    Template:Spoiler on dev.miraheze.org&lt;br /&gt;
*/&lt;br /&gt;
$(function(){&lt;br /&gt;
    //spoiler block behavior&lt;br /&gt;
	$(&#039;.spoiler&#039;).click(function(){&lt;br /&gt;
		$(this).toggleClass(&#039;off&#039;);&lt;br /&gt;
	});&lt;br /&gt;
	// spoiler button behavior&lt;br /&gt;
    $(&#039;#spoilerbtn&#039;).text(&#039;Show all spoilers&#039;);&lt;br /&gt;
	$(&#039;#spoilerbtn&#039;).click(function(){&lt;br /&gt;
		$(this).toggleClass(&#039;hide&#039;);&lt;br /&gt;
		$(&#039;.spoiler&#039;).toggleClass(&#039;showall&#039;);&lt;br /&gt;
		&lt;br /&gt;
		if ($(this).is(&#039;.hide&#039;)){ $(this).text(&#039;Hide all spoilers&#039;); } &lt;br /&gt;
        else { $(this).text(&#039;Show all spoilers&#039;); }&lt;br /&gt;
	});	&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * TabberEX&lt;br /&gt;
 *&lt;br /&gt;
 * @version 2.3&lt;br /&gt;
 *&lt;br /&gt;
 * @author Jono99 &amp;lt;https://phigros.fandom.com/wiki/User:Jono99&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * documentation and examples at:&lt;br /&gt;
 * &amp;lt;https://dev.fandom.com/wiki/TabberEX&amp;gt;&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
 (function (window, $, mw) {&lt;br /&gt;
	// Function called by tabs to switch tabs&lt;br /&gt;
	window.tabberex_switchTab = function(tabber_id, tab)&lt;br /&gt;
	{&lt;br /&gt;
		tabberex_hideAllTabs(tabber_id);&lt;br /&gt;
		tabberex_showTab(tabber_id, tab);&lt;br /&gt;
	};&lt;br /&gt;
 &lt;br /&gt;
	// Inject CSS&lt;br /&gt;
	(function() {&lt;br /&gt;
		var tabberex_css = document.createElement(&amp;quot;style&amp;quot;);&lt;br /&gt;
		tabberex_css.innerHTML = &amp;quot;/* CSS owned by FANDOM */\n.oo-ui-tabOptionWidget{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;vertical-align:bottom;align-items:center;color:color-mix(in srgb, var(--text-color) 75%, transparent);display:inline-flex;font-size:14px;font-weight:500;height:40px;letter-spacing:.5px;margin:0;padding:0 11px;-webkit-transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s;-moz-transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s;transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s}.oo-ui-tabSelectWidget:not(.oo-ui-tabSelectWidget-framed) .oo-ui-tabOptionWidget{-webkit-transition:color .3s,box-shadow .3s;-moz-transition:color .3s,box-shadow .3s;transition:color .3s,box-shadow .3s;border-bottom:1px solid var(--banner-color)}.oo-ui-tabSelectWidget:not(.oo-ui-tabSelectWidget-framed) .oo-ui-tabOptionWidget.oo-ui-optionWidget-selected{box-shadow:inset 0 -2px 0 0 var(--link-color);color:var(--link-color)}&amp;quot;;&lt;br /&gt;
		document.head.appendChild(tabberex_css);&lt;br /&gt;
	})();&lt;br /&gt;
		&lt;br /&gt;
	window.tabberex_showTab = function(tabber_id, i)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;)&lt;br /&gt;
		.addClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;default&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$($(&amp;quot;.tabberex-body&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;).get()).each(function () {&lt;br /&gt;
            var display_value = $(this).attr(&amp;quot;data-tab-display&amp;quot;);&lt;br /&gt;
            if (display_value === undefined) display_value = &amp;quot;block&amp;quot;;&lt;br /&gt;
            $(this).css(&amp;quot;display&amp;quot;, display_value);&lt;br /&gt;
        });&lt;br /&gt;
	};&lt;br /&gt;
	 &lt;br /&gt;
	window.tabberex_hideTab = function(tabber_id, i)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;)&lt;br /&gt;
		.removeClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$(&amp;quot;.tabberex-body&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;).css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
			&lt;br /&gt;
	window.tabberex_hideAllTabs = function(tabber_id)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children()&lt;br /&gt;
		.removeClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$(&amp;quot;.tabberex-body&amp;quot; + base_selector).children().css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var tabberex_buildTabHead = function(host_div, tabber_id, tab_headers, tab_ex_headers, tab_locations)&lt;br /&gt;
	{&lt;br /&gt;
		var tabber_head = host_div;&lt;br /&gt;
		tabber_head.innerHTML = &amp;quot;&amp;quot;;&lt;br /&gt;
		$(tabber_head).addClass(&amp;quot;tabberex-head oo-ui-widget oo-ui-widget-enabled oo-ui-selectWidget oo-ui-selectWidget-unpressed oo-ui-selectWidget-depressed oo-ui-tabSelectWidget&amp;quot;)&lt;br /&gt;
		.attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
		for (var i = 0; i &amp;lt; tab_headers.length; i++)&lt;br /&gt;
		{&lt;br /&gt;
			console.log(&amp;quot;Building tab &amp;quot; + tabber_id + &amp;quot; &amp;quot; + String(i));&lt;br /&gt;
			var tab = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
			$(tab).addClass(&amp;quot;oo-ui-widget oo-ui-widget-enabled oo-ui-labelElement oo-ui-optionWidget oo-ui-tabOptionWidget&amp;quot;)&lt;br /&gt;
			.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
			if (tab_locations[i] === undefined)&lt;br /&gt;
				$(tab).attr(&amp;quot;onclick&amp;quot;, &amp;quot;tabberex_switchTab(\&amp;quot;&amp;quot; + mw.html.escape(tabber_id) + &amp;quot;\&amp;quot;, &amp;quot; + (i + 1) + &amp;quot;)&amp;quot;);&lt;br /&gt;
			else&lt;br /&gt;
				$(tab).attr(&amp;quot;onclick&amp;quot;, &amp;quot;location = \&amp;quot;&amp;quot; + mw.html.escape(tab_locations[i]) + &amp;quot;\&amp;quot;&amp;quot;);&lt;br /&gt;
			var tab_span = document.createElement(&amp;quot;span&amp;quot;);&lt;br /&gt;
			$(tab_span).addClass(&amp;quot;oo-ui-labelElement-label&amp;quot;);&lt;br /&gt;
			if (tab_ex_headers[i] === undefined)&lt;br /&gt;
				$(tab_span).text(tab_headers[i]);&lt;br /&gt;
			else&lt;br /&gt;
			{&lt;br /&gt;
				console.log(&amp;quot;EX Header present&amp;quot;);&lt;br /&gt;
				for (var attr in tab_ex_headers[i][1])&lt;br /&gt;
					tab_span.setAttribute(attr, tab_ex_headers[i][1][attr]);&lt;br /&gt;
				$(tab_span).html(tab_ex_headers[i][0]);&lt;br /&gt;
			}&lt;br /&gt;
			tab.appendChild(tab_span);&lt;br /&gt;
			tabber_head.appendChild(tab);&lt;br /&gt;
			console.log(&amp;quot;Successfully built tab&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		return tabber_head.outerHTML;&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var process_tabber_head_tab = function(tab_element, i)&lt;br /&gt;
	{&lt;br /&gt;
		// Get header&lt;br /&gt;
		var header = $(tab_element).attr(&amp;quot;data-tab-header&amp;quot;);&lt;br /&gt;
		if (header === undefined) header = i + 1;&lt;br /&gt;
		&lt;br /&gt;
		// Get ex header&lt;br /&gt;
		var ex_header;&lt;br /&gt;
		function get_ex_header(_) {&lt;br /&gt;
			console.log(&#039;EX Header found&#039;);&lt;br /&gt;
			var attributes = {};&lt;br /&gt;
			var attrs = this.getAttributeNames();&lt;br /&gt;
			for (var i in attrs)&lt;br /&gt;
				attributes[attrs[i]] = this.getAttribute(attrs[i]);&lt;br /&gt;
			ex_header = [$(this).html(), attributes];&lt;br /&gt;
			$(this).remove();&lt;br /&gt;
		}&lt;br /&gt;
		$(tab_element).children(&amp;quot;p&amp;quot;).children(&amp;quot;span.tabberex-tab-header&amp;quot;).each(get_ex_header);&lt;br /&gt;
		$(tab_element).children(&amp;quot;span.tabberex-tab-header&amp;quot;).each(get_ex_header);&lt;br /&gt;
		&lt;br /&gt;
		// Get default&lt;br /&gt;
		var is_default = false;&lt;br /&gt;
		if ($(tab_element).hasClass(&amp;quot;tabberex-tab-default&amp;quot;))&lt;br /&gt;
			is_default = true;&lt;br /&gt;
		&lt;br /&gt;
		// Get tab location&lt;br /&gt;
		var tab_location = $(this).attr(&amp;quot;data-tab-location&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		return {&amp;quot;header&amp;quot;: header, &amp;quot;ex_header&amp;quot;: ex_header, &amp;quot;default&amp;quot;: is_default, &amp;quot;location&amp;quot;: tab_location};&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var process_tabbers = function()&lt;br /&gt;
	{&lt;br /&gt;
		console.log(&#039;TabberEX started&#039;);&lt;br /&gt;
		var tabber_i = 0;&lt;br /&gt;
		var default_tabs = {};&lt;br /&gt;
		var tabber_ids = [];&lt;br /&gt;
		// The tabs are iterated through backwards to properly handle tabbers that are nested within other tabbers&lt;br /&gt;
		$($(&amp;quot;.tabberex-head&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			var tab_headers = [];&lt;br /&gt;
			var tab_ex_headers = [];&lt;br /&gt;
			var tab_locations = [];&lt;br /&gt;
			var default_tab = 0;&lt;br /&gt;
				&lt;br /&gt;
			var tabber_id = $(this).attr(&amp;quot;data-tabber-id&amp;quot;);&lt;br /&gt;
			if (tabber_id === undefined) tabber_id = String(tabber_i);&lt;br /&gt;
				&lt;br /&gt;
			$(this).children(&amp;quot;.tabberex-tab&amp;quot;).each(function(i) {&lt;br /&gt;
				console.log(&#039;Processing head tab &#039; + tabber_id + &#039; &#039; + String(i));&lt;br /&gt;
				var tab_details = process_tabber_head_tab(this, i);&lt;br /&gt;
				console.log(&#039;Processing complete&#039;);&lt;br /&gt;
				tab_headers[i] = tab_details.header;&lt;br /&gt;
				tab_ex_headers[i] = tab_details.ex_header;&lt;br /&gt;
				if (tab_details.default)&lt;br /&gt;
					default_tab = i;&lt;br /&gt;
				tab_locations[i] = tab_details.location;&lt;br /&gt;
				$(this).detach();&lt;br /&gt;
			});&lt;br /&gt;
			&lt;br /&gt;
			// Insert tabs into DOM&lt;br /&gt;
			tabberex_buildTabHead(this, tabber_id, tab_headers, tab_ex_headers, tab_locations);&lt;br /&gt;
			if (default_tabs[tabber_id] === undefined)&lt;br /&gt;
				default_tabs[tabber_id] = default_tab;&lt;br /&gt;
			tabber_ids.push(tabber_id);&lt;br /&gt;
			tabber_i++;&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		$($(&amp;quot;.tabberex-body&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			$(this).children().css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		$($(&amp;quot;.tabberex&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			var tab_headers = [];&lt;br /&gt;
			var tab_ex_headers = [];&lt;br /&gt;
			var tab_locations = [];&lt;br /&gt;
			var default_tab = 0;&lt;br /&gt;
			var tab_contents = [];&lt;br /&gt;
			&lt;br /&gt;
			var tabber_id = $(this).attr(&amp;quot;data-tabber-id&amp;quot;);&lt;br /&gt;
			if (tabber_id === undefined) tabber_id = String(tabber_i);&lt;br /&gt;
            $(this).attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
&lt;br /&gt;
            var tabber_head = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
            $(tabber_head).addClass(&amp;quot;tabberex-head&amp;quot;).attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
            $(this).removeClass(&amp;quot;tabberex&amp;quot;).addClass(&amp;quot;tabberex-body&amp;quot;);&lt;br /&gt;
			&lt;br /&gt;
			$(this).children(&amp;quot;.tabberex-tab&amp;quot;).each(function(i) {&lt;br /&gt;
				console.log(&#039;Processing head tab &#039; + tabber_id + &#039; &#039; + String(i));&lt;br /&gt;
				var tab_details = process_tabber_head_tab(this, i);&lt;br /&gt;
				console.log(&#039;Processing complete&#039;);&lt;br /&gt;
				tab_headers[i] = tab_details.header;&lt;br /&gt;
				tab_ex_headers[i] = tab_details.ex_header;&lt;br /&gt;
				if (tab_details.default)&lt;br /&gt;
					default_tab = i;&lt;br /&gt;
				tab_locations[i] = tab_details.location;&lt;br /&gt;
				&lt;br /&gt;
				// Get tab content&lt;br /&gt;
				$(this).css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
				tab_contents[i] = $(this);&lt;br /&gt;
			});&lt;br /&gt;
&lt;br /&gt;
            tabberex_buildTabHead(tabber_head, tabber_id, tab_headers, tab_ex_headers, tab_locations);&lt;br /&gt;
			if (default_tabs[tabber_id] === undefined)&lt;br /&gt;
				default_tabs[tabber_id] = default_tab;&lt;br /&gt;
            $(tabber_head).insertBefore(this);&lt;br /&gt;
			tabber_ids.push(tabber_id);&lt;br /&gt;
			tabber_i++;&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		// Select default tabs&lt;br /&gt;
		for (var i in tabber_ids)&lt;br /&gt;
		{&lt;br /&gt;
			tabberex_showTab(tabber_ids[i], default_tabs[tabber_ids[i]] + 1);&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
 &lt;br /&gt;
	mw.hook(&amp;quot;wikipage.content&amp;quot;).add(process_tabbers);&lt;br /&gt;
}(this, jQuery, mediaWiki));&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * @title           SoundcloudPlayer.js&lt;br /&gt;
 * @version         1.1.2&lt;br /&gt;
 * @description     Add support for soundcloud players&lt;br /&gt;
 * @author          Himmalerin&lt;br /&gt;
 * @license         CC-BY-SA-3.0&lt;br /&gt;
 */&lt;br /&gt;
(function () {&lt;br /&gt;
	// Build the iframe&lt;br /&gt;
	const scPlayer = function (data) {&lt;br /&gt;
		const widget = document.createElement(&#039;iframe&#039;);&lt;br /&gt;
&lt;br /&gt;
		widget.classList.add(&#039;soundcloud-player&#039;);&lt;br /&gt;
&lt;br /&gt;
		widget.src =&lt;br /&gt;
			&#039;https://w.soundcloud.com/player/?show_artwork=false&amp;amp;url=&#039; +&lt;br /&gt;
			encodeURI(data.src);&lt;br /&gt;
&lt;br /&gt;
		// If data-color is set add the value to the iframe&lt;br /&gt;
		if (data.color) widget.src += &#039;&amp;amp;color=&#039; + encodeURIComponent(data.color);&lt;br /&gt;
		// If data-width/height are set add that value to the iframe&lt;br /&gt;
		if (data.width) widget.width = data.width;&lt;br /&gt;
		if (data.height) widget.height = data.height;&lt;br /&gt;
&lt;br /&gt;
		return widget;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	const scParseTags = function ($content) {&lt;br /&gt;
		// Get all instances of the soundcloud class&lt;br /&gt;
		const scTags = $content.find(&#039;.soundcloud&#039;);&lt;br /&gt;
&lt;br /&gt;
		// For each instance of the soundcloud class run scPlayer&lt;br /&gt;
		for (var i = 0; i &amp;lt; scTags.length; i++) {&lt;br /&gt;
			scTags[i].replaceWith(scPlayer(scTags[i].dataset));&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	mw.hook(&#039;wikipage.content&#039;).add(function ($content) {&lt;br /&gt;
		scParseTags($content);&lt;br /&gt;
	});&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
https://dev.fandom.com/wiki/MediaWiki:CopyText/code.js&lt;br /&gt;
 */&lt;br /&gt;
(function () {&lt;br /&gt;
    if (window.CopyTextLoaded) {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    window.CopyTextLoaded = true;&lt;br /&gt;
    mw.hook(&#039;dev.i18n&#039;).add(function (i18n) {&lt;br /&gt;
        i18n.loadMessages(&#039;CopyText&#039;).done(function (i18n) {&lt;br /&gt;
            function showSuccess() {&lt;br /&gt;
                if (window.BannerNotification) {&lt;br /&gt;
                    new BannerNotification(i18n.msg(&#039;success&#039;).escape(), &#039;confirm&#039;, null, 5000).show();&lt;br /&gt;
                } else {&lt;br /&gt;
                    mw.notify(i18n.msg(&#039;success&#039;).plain());&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $(&#039;body&#039;).on(&#039;click&#039;, &#039;.copy-to-clipboard-button&#039;, function(e){&lt;br /&gt;
                var text = $(this).data(&#039;text&#039;),&lt;br /&gt;
                $input = $(&#039;&amp;lt;textarea&amp;gt;&#039;, { type: &#039;text&#039; })&lt;br /&gt;
                    .val($(&#039;.copy-to-clipboard-text&#039;).filter(function() {&lt;br /&gt;
                        return $(this).data(&#039;text&#039;) == text;&lt;br /&gt;
                    }).first().text())&lt;br /&gt;
                    .appendTo(&#039;body&#039;)&lt;br /&gt;
                    .select();&lt;br /&gt;
                var success = document.execCommand(&#039;Copy&#039;);&lt;br /&gt;
                $input.remove();&lt;br /&gt;
                if (success) {&lt;br /&gt;
                    showSuccess();&lt;br /&gt;
                } else {&lt;br /&gt;
                    if (window.navigator &amp;amp;&amp;amp; navigator.clipboard &amp;amp;&amp;amp; navigator.clipboard.writeText) {&lt;br /&gt;
                        navigator.clipboard.writeText(text).then(function() {&lt;br /&gt;
                            showSuccess();&lt;br /&gt;
                        });&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
})();&lt;br /&gt;
$(function () {&lt;br /&gt;
    var daysMap = {&lt;br /&gt;
        &#039;sunday&#039;: 0, &#039;sun&#039;: 0,&lt;br /&gt;
        &#039;monday&#039;: 1, &#039;mon&#039;: 1,&lt;br /&gt;
        &#039;tuesday&#039;: 2, &#039;tue&#039;: 2,&lt;br /&gt;
        &#039;wednesday&#039;: 3, &#039;wed&#039;: 3,&lt;br /&gt;
        &#039;thursday&#039;: 4, &#039;thu&#039;: 4,&lt;br /&gt;
        &#039;friday&#039;: 5, &#039;fri&#039;: 5,&lt;br /&gt;
        &#039;saturday&#039;: 6, &#039;sat&#039;: 6&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    $(&#039;.countdown&#039;).each(function () {&lt;br /&gt;
        var $container = $(this);&lt;br /&gt;
        var timeStr = $container.attr(&#039;data-time&#039;).trim();&lt;br /&gt;
        var dayStr = ($container.attr(&#039;data-day&#039;) || &#039;&#039;).trim().toLowerCase();&lt;br /&gt;
        var $textSpan = $container.find(&#039;.countdown-text&#039;);&lt;br /&gt;
&lt;br /&gt;
        var parts = timeStr.split(&#039;:&#039;);&lt;br /&gt;
        var targetHour = parseInt(parts[0], 10) || 0;&lt;br /&gt;
        var targetMinute = parseInt(parts[1], 10) || 0;&lt;br /&gt;
        var targetSecond = parseInt(parts[2], 10) || 0;&lt;br /&gt;
&lt;br /&gt;
        var targetDay = daysMap.hasOwnProperty(dayStr) ? daysMap[dayStr] : null;&lt;br /&gt;
&lt;br /&gt;
        function updateCountdown() {&lt;br /&gt;
            var now = new Date();&lt;br /&gt;
            &lt;br /&gt;
            // Construct base target date for TODAY in UTC&lt;br /&gt;
            var target = new Date(Date.UTC(&lt;br /&gt;
                now.getUTCFullYear(),&lt;br /&gt;
                now.getUTCMonth(),&lt;br /&gt;
                now.getUTCDate(),&lt;br /&gt;
                targetHour,&lt;br /&gt;
                targetMinute,&lt;br /&gt;
                targetSecond&lt;br /&gt;
            ));&lt;br /&gt;
&lt;br /&gt;
            if (targetDay !== null) {&lt;br /&gt;
                // Weekly mode&lt;br /&gt;
                var currentUTCDay = now.getUTCDay();&lt;br /&gt;
                var daysUntil = (targetDay - currentUTCDay + 7) % 7;&lt;br /&gt;
&lt;br /&gt;
                // If target day is today but time has passed, jump to next week&lt;br /&gt;
                if (daysUntil === 0 &amp;amp;&amp;amp; now.getTime() &amp;gt;= target.getTime()) {&lt;br /&gt;
                    daysUntil = 7;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                target.setUTCDate(target.getUTCDate() + daysUntil);&lt;br /&gt;
            } else {&lt;br /&gt;
                // Daily mode: if target time today has passed, roll to tomorrow&lt;br /&gt;
                if (now.getTime() &amp;gt;= target.getTime()) {&lt;br /&gt;
                    target.setUTCDate(target.getUTCDate() + 1);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            var distance = target.getTime() - now.getTime();&lt;br /&gt;
&lt;br /&gt;
            var days = Math.floor(distance / (1000 * 60 * 60 * 24));&lt;br /&gt;
            var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));&lt;br /&gt;
            var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));&lt;br /&gt;
            var seconds = Math.floor((distance % (1000 * 60)) / 1000);&lt;br /&gt;
&lt;br /&gt;
            var hStr = hours &amp;lt; 10 ? &#039;0&#039; + hours : hours;&lt;br /&gt;
            var mStr = minutes &amp;lt; 10 ? &#039;0&#039; + minutes : minutes;&lt;br /&gt;
            var sStr = seconds &amp;lt; 10 ? &#039;0&#039; + seconds : seconds;&lt;br /&gt;
&lt;br /&gt;
            var timerDisplay = &#039;&#039;;&lt;br /&gt;
            if (days &amp;gt; 0) {&lt;br /&gt;
                timerDisplay += days + &#039;d &#039;;&lt;br /&gt;
            }&lt;br /&gt;
            timerDisplay += hStr + &#039;h &#039; + mStr + &#039;m &#039; + sStr + &#039;s&#039;;&lt;br /&gt;
&lt;br /&gt;
            $textSpan.text(timerDisplay);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        updateCountdown();&lt;br /&gt;
        setInterval(updateCountdown, 1000);&lt;br /&gt;
    });&lt;br /&gt;
});&lt;/div&gt;</summary>
		<author><name>Pynappo</name></author>
	</entry>
	<entry>
		<id>https://nbittrpgwiki.pynappo.xyz/index.php?title=Template:Countdown&amp;diff=3119</id>
		<title>Template:Countdown</title>
		<link rel="alternate" type="text/html" href="https://nbittrpgwiki.pynappo.xyz/index.php?title=Template:Countdown&amp;diff=3119"/>
		<updated>2026-09-27T09:37:22Z</updated>

		<summary type="html">&lt;p&gt;Pynappo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
Displays a daily recurring countdown to a specific time in UTC. Code is in [[MediaWiki:Common.js]].&lt;br /&gt;
&lt;br /&gt;
=== Usage ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{Countdown&lt;br /&gt;
| time = 15:00&lt;br /&gt;
| event = Daily Server Reset&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Countdown&lt;br /&gt;
| time = 15:00&lt;br /&gt;
| event = Daily Server Reset&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;&amp;lt;span class=&amp;quot;countdown&amp;quot; data-time=&amp;quot;{{{time|{{{1|00:00}}}}}}&amp;quot; data-event=&amp;quot;{{{event|}}}&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;countdown-text&amp;quot;&amp;gt;Loading countdown to {{#if:{{{event|}}}|{{{event}}} at |}}{{{time|{{{1|00:00}}}}}} UTC...&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pynappo</name></author>
	</entry>
	<entry>
		<id>https://nbittrpgwiki.pynappo.xyz/index.php?title=Template:Countdown&amp;diff=3118</id>
		<title>Template:Countdown</title>
		<link rel="alternate" type="text/html" href="https://nbittrpgwiki.pynappo.xyz/index.php?title=Template:Countdown&amp;diff=3118"/>
		<updated>2026-09-27T09:36:07Z</updated>

		<summary type="html">&lt;p&gt;Pynappo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
Displays a daily recurring countdown to a specific time in UTC.&lt;br /&gt;
&lt;br /&gt;
=== Usage ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{Countdown&lt;br /&gt;
| time = 15:00&lt;br /&gt;
| event = Daily Server Reset&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Countdown&lt;br /&gt;
| time = 15:00&lt;br /&gt;
| event = Daily Server Reset&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;&amp;lt;span class=&amp;quot;countdown&amp;quot; data-time=&amp;quot;{{{time|{{{1|00:00}}}}}}&amp;quot; data-event=&amp;quot;{{{event|}}}&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;countdown-text&amp;quot;&amp;gt;Loading countdown to {{#if:{{{event|}}}|{{{event}}} at |}}{{{time|{{{1|00:00}}}}}} UTC...&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pynappo</name></author>
	</entry>
	<entry>
		<id>https://nbittrpgwiki.pynappo.xyz/index.php?title=MediaWiki:Common.js&amp;diff=3117</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://nbittrpgwiki.pynappo.xyz/index.php?title=MediaWiki:Common.js&amp;diff=3117"/>
		<updated>2026-09-27T09:35:16Z</updated>

		<summary type="html">&lt;p&gt;Pynappo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/*&lt;br /&gt;
    Template:Spoiler on dev.miraheze.org&lt;br /&gt;
*/&lt;br /&gt;
$(function(){&lt;br /&gt;
    //spoiler block behavior&lt;br /&gt;
	$(&#039;.spoiler&#039;).click(function(){&lt;br /&gt;
		$(this).toggleClass(&#039;off&#039;);&lt;br /&gt;
	});&lt;br /&gt;
	// spoiler button behavior&lt;br /&gt;
    $(&#039;#spoilerbtn&#039;).text(&#039;Show all spoilers&#039;);&lt;br /&gt;
	$(&#039;#spoilerbtn&#039;).click(function(){&lt;br /&gt;
		$(this).toggleClass(&#039;hide&#039;);&lt;br /&gt;
		$(&#039;.spoiler&#039;).toggleClass(&#039;showall&#039;);&lt;br /&gt;
		&lt;br /&gt;
		if ($(this).is(&#039;.hide&#039;)){ $(this).text(&#039;Hide all spoilers&#039;); } &lt;br /&gt;
        else { $(this).text(&#039;Show all spoilers&#039;); }&lt;br /&gt;
	});	&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * TabberEX&lt;br /&gt;
 *&lt;br /&gt;
 * @version 2.3&lt;br /&gt;
 *&lt;br /&gt;
 * @author Jono99 &amp;lt;https://phigros.fandom.com/wiki/User:Jono99&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * documentation and examples at:&lt;br /&gt;
 * &amp;lt;https://dev.fandom.com/wiki/TabberEX&amp;gt;&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
 (function (window, $, mw) {&lt;br /&gt;
	// Function called by tabs to switch tabs&lt;br /&gt;
	window.tabberex_switchTab = function(tabber_id, tab)&lt;br /&gt;
	{&lt;br /&gt;
		tabberex_hideAllTabs(tabber_id);&lt;br /&gt;
		tabberex_showTab(tabber_id, tab);&lt;br /&gt;
	};&lt;br /&gt;
 &lt;br /&gt;
	// Inject CSS&lt;br /&gt;
	(function() {&lt;br /&gt;
		var tabberex_css = document.createElement(&amp;quot;style&amp;quot;);&lt;br /&gt;
		tabberex_css.innerHTML = &amp;quot;/* CSS owned by FANDOM */\n.oo-ui-tabOptionWidget{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;vertical-align:bottom;align-items:center;color:color-mix(in srgb, var(--text-color) 75%, transparent);display:inline-flex;font-size:14px;font-weight:500;height:40px;letter-spacing:.5px;margin:0;padding:0 11px;-webkit-transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s;-moz-transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s;transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s}.oo-ui-tabSelectWidget:not(.oo-ui-tabSelectWidget-framed) .oo-ui-tabOptionWidget{-webkit-transition:color .3s,box-shadow .3s;-moz-transition:color .3s,box-shadow .3s;transition:color .3s,box-shadow .3s;border-bottom:1px solid var(--banner-color)}.oo-ui-tabSelectWidget:not(.oo-ui-tabSelectWidget-framed) .oo-ui-tabOptionWidget.oo-ui-optionWidget-selected{box-shadow:inset 0 -2px 0 0 var(--link-color);color:var(--link-color)}&amp;quot;;&lt;br /&gt;
		document.head.appendChild(tabberex_css);&lt;br /&gt;
	})();&lt;br /&gt;
		&lt;br /&gt;
	window.tabberex_showTab = function(tabber_id, i)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;)&lt;br /&gt;
		.addClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;default&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$($(&amp;quot;.tabberex-body&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;).get()).each(function () {&lt;br /&gt;
            var display_value = $(this).attr(&amp;quot;data-tab-display&amp;quot;);&lt;br /&gt;
            if (display_value === undefined) display_value = &amp;quot;block&amp;quot;;&lt;br /&gt;
            $(this).css(&amp;quot;display&amp;quot;, display_value);&lt;br /&gt;
        });&lt;br /&gt;
	};&lt;br /&gt;
	 &lt;br /&gt;
	window.tabberex_hideTab = function(tabber_id, i)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;)&lt;br /&gt;
		.removeClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$(&amp;quot;.tabberex-body&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;).css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
			&lt;br /&gt;
	window.tabberex_hideAllTabs = function(tabber_id)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children()&lt;br /&gt;
		.removeClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$(&amp;quot;.tabberex-body&amp;quot; + base_selector).children().css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var tabberex_buildTabHead = function(host_div, tabber_id, tab_headers, tab_ex_headers, tab_locations)&lt;br /&gt;
	{&lt;br /&gt;
		var tabber_head = host_div;&lt;br /&gt;
		tabber_head.innerHTML = &amp;quot;&amp;quot;;&lt;br /&gt;
		$(tabber_head).addClass(&amp;quot;tabberex-head oo-ui-widget oo-ui-widget-enabled oo-ui-selectWidget oo-ui-selectWidget-unpressed oo-ui-selectWidget-depressed oo-ui-tabSelectWidget&amp;quot;)&lt;br /&gt;
		.attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
		for (var i = 0; i &amp;lt; tab_headers.length; i++)&lt;br /&gt;
		{&lt;br /&gt;
			console.log(&amp;quot;Building tab &amp;quot; + tabber_id + &amp;quot; &amp;quot; + String(i));&lt;br /&gt;
			var tab = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
			$(tab).addClass(&amp;quot;oo-ui-widget oo-ui-widget-enabled oo-ui-labelElement oo-ui-optionWidget oo-ui-tabOptionWidget&amp;quot;)&lt;br /&gt;
			.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
			if (tab_locations[i] === undefined)&lt;br /&gt;
				$(tab).attr(&amp;quot;onclick&amp;quot;, &amp;quot;tabberex_switchTab(\&amp;quot;&amp;quot; + mw.html.escape(tabber_id) + &amp;quot;\&amp;quot;, &amp;quot; + (i + 1) + &amp;quot;)&amp;quot;);&lt;br /&gt;
			else&lt;br /&gt;
				$(tab).attr(&amp;quot;onclick&amp;quot;, &amp;quot;location = \&amp;quot;&amp;quot; + mw.html.escape(tab_locations[i]) + &amp;quot;\&amp;quot;&amp;quot;);&lt;br /&gt;
			var tab_span = document.createElement(&amp;quot;span&amp;quot;);&lt;br /&gt;
			$(tab_span).addClass(&amp;quot;oo-ui-labelElement-label&amp;quot;);&lt;br /&gt;
			if (tab_ex_headers[i] === undefined)&lt;br /&gt;
				$(tab_span).text(tab_headers[i]);&lt;br /&gt;
			else&lt;br /&gt;
			{&lt;br /&gt;
				console.log(&amp;quot;EX Header present&amp;quot;);&lt;br /&gt;
				for (var attr in tab_ex_headers[i][1])&lt;br /&gt;
					tab_span.setAttribute(attr, tab_ex_headers[i][1][attr]);&lt;br /&gt;
				$(tab_span).html(tab_ex_headers[i][0]);&lt;br /&gt;
			}&lt;br /&gt;
			tab.appendChild(tab_span);&lt;br /&gt;
			tabber_head.appendChild(tab);&lt;br /&gt;
			console.log(&amp;quot;Successfully built tab&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		return tabber_head.outerHTML;&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var process_tabber_head_tab = function(tab_element, i)&lt;br /&gt;
	{&lt;br /&gt;
		// Get header&lt;br /&gt;
		var header = $(tab_element).attr(&amp;quot;data-tab-header&amp;quot;);&lt;br /&gt;
		if (header === undefined) header = i + 1;&lt;br /&gt;
		&lt;br /&gt;
		// Get ex header&lt;br /&gt;
		var ex_header;&lt;br /&gt;
		function get_ex_header(_) {&lt;br /&gt;
			console.log(&#039;EX Header found&#039;);&lt;br /&gt;
			var attributes = {};&lt;br /&gt;
			var attrs = this.getAttributeNames();&lt;br /&gt;
			for (var i in attrs)&lt;br /&gt;
				attributes[attrs[i]] = this.getAttribute(attrs[i]);&lt;br /&gt;
			ex_header = [$(this).html(), attributes];&lt;br /&gt;
			$(this).remove();&lt;br /&gt;
		}&lt;br /&gt;
		$(tab_element).children(&amp;quot;p&amp;quot;).children(&amp;quot;span.tabberex-tab-header&amp;quot;).each(get_ex_header);&lt;br /&gt;
		$(tab_element).children(&amp;quot;span.tabberex-tab-header&amp;quot;).each(get_ex_header);&lt;br /&gt;
		&lt;br /&gt;
		// Get default&lt;br /&gt;
		var is_default = false;&lt;br /&gt;
		if ($(tab_element).hasClass(&amp;quot;tabberex-tab-default&amp;quot;))&lt;br /&gt;
			is_default = true;&lt;br /&gt;
		&lt;br /&gt;
		// Get tab location&lt;br /&gt;
		var tab_location = $(this).attr(&amp;quot;data-tab-location&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		return {&amp;quot;header&amp;quot;: header, &amp;quot;ex_header&amp;quot;: ex_header, &amp;quot;default&amp;quot;: is_default, &amp;quot;location&amp;quot;: tab_location};&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var process_tabbers = function()&lt;br /&gt;
	{&lt;br /&gt;
		console.log(&#039;TabberEX started&#039;);&lt;br /&gt;
		var tabber_i = 0;&lt;br /&gt;
		var default_tabs = {};&lt;br /&gt;
		var tabber_ids = [];&lt;br /&gt;
		// The tabs are iterated through backwards to properly handle tabbers that are nested within other tabbers&lt;br /&gt;
		$($(&amp;quot;.tabberex-head&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			var tab_headers = [];&lt;br /&gt;
			var tab_ex_headers = [];&lt;br /&gt;
			var tab_locations = [];&lt;br /&gt;
			var default_tab = 0;&lt;br /&gt;
				&lt;br /&gt;
			var tabber_id = $(this).attr(&amp;quot;data-tabber-id&amp;quot;);&lt;br /&gt;
			if (tabber_id === undefined) tabber_id = String(tabber_i);&lt;br /&gt;
				&lt;br /&gt;
			$(this).children(&amp;quot;.tabberex-tab&amp;quot;).each(function(i) {&lt;br /&gt;
				console.log(&#039;Processing head tab &#039; + tabber_id + &#039; &#039; + String(i));&lt;br /&gt;
				var tab_details = process_tabber_head_tab(this, i);&lt;br /&gt;
				console.log(&#039;Processing complete&#039;);&lt;br /&gt;
				tab_headers[i] = tab_details.header;&lt;br /&gt;
				tab_ex_headers[i] = tab_details.ex_header;&lt;br /&gt;
				if (tab_details.default)&lt;br /&gt;
					default_tab = i;&lt;br /&gt;
				tab_locations[i] = tab_details.location;&lt;br /&gt;
				$(this).detach();&lt;br /&gt;
			});&lt;br /&gt;
			&lt;br /&gt;
			// Insert tabs into DOM&lt;br /&gt;
			tabberex_buildTabHead(this, tabber_id, tab_headers, tab_ex_headers, tab_locations);&lt;br /&gt;
			if (default_tabs[tabber_id] === undefined)&lt;br /&gt;
				default_tabs[tabber_id] = default_tab;&lt;br /&gt;
			tabber_ids.push(tabber_id);&lt;br /&gt;
			tabber_i++;&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		$($(&amp;quot;.tabberex-body&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			$(this).children().css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		$($(&amp;quot;.tabberex&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			var tab_headers = [];&lt;br /&gt;
			var tab_ex_headers = [];&lt;br /&gt;
			var tab_locations = [];&lt;br /&gt;
			var default_tab = 0;&lt;br /&gt;
			var tab_contents = [];&lt;br /&gt;
			&lt;br /&gt;
			var tabber_id = $(this).attr(&amp;quot;data-tabber-id&amp;quot;);&lt;br /&gt;
			if (tabber_id === undefined) tabber_id = String(tabber_i);&lt;br /&gt;
            $(this).attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
&lt;br /&gt;
            var tabber_head = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
            $(tabber_head).addClass(&amp;quot;tabberex-head&amp;quot;).attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
            $(this).removeClass(&amp;quot;tabberex&amp;quot;).addClass(&amp;quot;tabberex-body&amp;quot;);&lt;br /&gt;
			&lt;br /&gt;
			$(this).children(&amp;quot;.tabberex-tab&amp;quot;).each(function(i) {&lt;br /&gt;
				console.log(&#039;Processing head tab &#039; + tabber_id + &#039; &#039; + String(i));&lt;br /&gt;
				var tab_details = process_tabber_head_tab(this, i);&lt;br /&gt;
				console.log(&#039;Processing complete&#039;);&lt;br /&gt;
				tab_headers[i] = tab_details.header;&lt;br /&gt;
				tab_ex_headers[i] = tab_details.ex_header;&lt;br /&gt;
				if (tab_details.default)&lt;br /&gt;
					default_tab = i;&lt;br /&gt;
				tab_locations[i] = tab_details.location;&lt;br /&gt;
				&lt;br /&gt;
				// Get tab content&lt;br /&gt;
				$(this).css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
				tab_contents[i] = $(this);&lt;br /&gt;
			});&lt;br /&gt;
&lt;br /&gt;
            tabberex_buildTabHead(tabber_head, tabber_id, tab_headers, tab_ex_headers, tab_locations);&lt;br /&gt;
			if (default_tabs[tabber_id] === undefined)&lt;br /&gt;
				default_tabs[tabber_id] = default_tab;&lt;br /&gt;
            $(tabber_head).insertBefore(this);&lt;br /&gt;
			tabber_ids.push(tabber_id);&lt;br /&gt;
			tabber_i++;&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		// Select default tabs&lt;br /&gt;
		for (var i in tabber_ids)&lt;br /&gt;
		{&lt;br /&gt;
			tabberex_showTab(tabber_ids[i], default_tabs[tabber_ids[i]] + 1);&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
 &lt;br /&gt;
	mw.hook(&amp;quot;wikipage.content&amp;quot;).add(process_tabbers);&lt;br /&gt;
}(this, jQuery, mediaWiki));&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * @title           SoundcloudPlayer.js&lt;br /&gt;
 * @version         1.1.2&lt;br /&gt;
 * @description     Add support for soundcloud players&lt;br /&gt;
 * @author          Himmalerin&lt;br /&gt;
 * @license         CC-BY-SA-3.0&lt;br /&gt;
 */&lt;br /&gt;
(function () {&lt;br /&gt;
	// Build the iframe&lt;br /&gt;
	const scPlayer = function (data) {&lt;br /&gt;
		const widget = document.createElement(&#039;iframe&#039;);&lt;br /&gt;
&lt;br /&gt;
		widget.classList.add(&#039;soundcloud-player&#039;);&lt;br /&gt;
&lt;br /&gt;
		widget.src =&lt;br /&gt;
			&#039;https://w.soundcloud.com/player/?show_artwork=false&amp;amp;url=&#039; +&lt;br /&gt;
			encodeURI(data.src);&lt;br /&gt;
&lt;br /&gt;
		// If data-color is set add the value to the iframe&lt;br /&gt;
		if (data.color) widget.src += &#039;&amp;amp;color=&#039; + encodeURIComponent(data.color);&lt;br /&gt;
		// If data-width/height are set add that value to the iframe&lt;br /&gt;
		if (data.width) widget.width = data.width;&lt;br /&gt;
		if (data.height) widget.height = data.height;&lt;br /&gt;
&lt;br /&gt;
		return widget;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	const scParseTags = function ($content) {&lt;br /&gt;
		// Get all instances of the soundcloud class&lt;br /&gt;
		const scTags = $content.find(&#039;.soundcloud&#039;);&lt;br /&gt;
&lt;br /&gt;
		// For each instance of the soundcloud class run scPlayer&lt;br /&gt;
		for (var i = 0; i &amp;lt; scTags.length; i++) {&lt;br /&gt;
			scTags[i].replaceWith(scPlayer(scTags[i].dataset));&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	mw.hook(&#039;wikipage.content&#039;).add(function ($content) {&lt;br /&gt;
		scParseTags($content);&lt;br /&gt;
	});&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
https://dev.fandom.com/wiki/MediaWiki:CopyText/code.js&lt;br /&gt;
 */&lt;br /&gt;
(function () {&lt;br /&gt;
    if (window.CopyTextLoaded) {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    window.CopyTextLoaded = true;&lt;br /&gt;
    mw.hook(&#039;dev.i18n&#039;).add(function (i18n) {&lt;br /&gt;
        i18n.loadMessages(&#039;CopyText&#039;).done(function (i18n) {&lt;br /&gt;
            function showSuccess() {&lt;br /&gt;
                if (window.BannerNotification) {&lt;br /&gt;
                    new BannerNotification(i18n.msg(&#039;success&#039;).escape(), &#039;confirm&#039;, null, 5000).show();&lt;br /&gt;
                } else {&lt;br /&gt;
                    mw.notify(i18n.msg(&#039;success&#039;).plain());&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $(&#039;body&#039;).on(&#039;click&#039;, &#039;.copy-to-clipboard-button&#039;, function(e){&lt;br /&gt;
                var text = $(this).data(&#039;text&#039;),&lt;br /&gt;
                $input = $(&#039;&amp;lt;textarea&amp;gt;&#039;, { type: &#039;text&#039; })&lt;br /&gt;
                    .val($(&#039;.copy-to-clipboard-text&#039;).filter(function() {&lt;br /&gt;
                        return $(this).data(&#039;text&#039;) == text;&lt;br /&gt;
                    }).first().text())&lt;br /&gt;
                    .appendTo(&#039;body&#039;)&lt;br /&gt;
                    .select();&lt;br /&gt;
                var success = document.execCommand(&#039;Copy&#039;);&lt;br /&gt;
                $input.remove();&lt;br /&gt;
                if (success) {&lt;br /&gt;
                    showSuccess();&lt;br /&gt;
                } else {&lt;br /&gt;
                    if (window.navigator &amp;amp;&amp;amp; navigator.clipboard &amp;amp;&amp;amp; navigator.clipboard.writeText) {&lt;br /&gt;
                        navigator.clipboard.writeText(text).then(function() {&lt;br /&gt;
                            showSuccess();&lt;br /&gt;
                        });&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
})();&lt;br /&gt;
$(function () {&lt;br /&gt;
    $(&#039;.mediawiki-recurring-countdown&#039;).each(function () {&lt;br /&gt;
        var $container = $(this);&lt;br /&gt;
        var timeStr = $container.attr(&#039;data-time&#039;).trim(); // Format &amp;quot;HH:MM&amp;quot; or &amp;quot;HH:MM:SS&amp;quot;&lt;br /&gt;
        var $textSpan = $container.find(&#039;.countdown-text&#039;);&lt;br /&gt;
&lt;br /&gt;
        var parts = timeStr.split(&#039;:&#039;);&lt;br /&gt;
        var targetHour = parseInt(parts[0], 10) || 0;&lt;br /&gt;
        var targetMinute = parseInt(parts[1], 10) || 0;&lt;br /&gt;
        var targetSecond = parseInt(parts[2], 10) || 0;&lt;br /&gt;
&lt;br /&gt;
        function updateCountdown() {&lt;br /&gt;
            var now = new Date();&lt;br /&gt;
            &lt;br /&gt;
            // Construct target date for TODAY in UTC&lt;br /&gt;
            var target = new Date(Date.UTC(&lt;br /&gt;
                now.getUTCFullYear(),&lt;br /&gt;
                now.getUTCMonth(),&lt;br /&gt;
                now.getUTCDate(),&lt;br /&gt;
                targetHour,&lt;br /&gt;
                targetMinute,&lt;br /&gt;
                targetSecond&lt;br /&gt;
            ));&lt;br /&gt;
&lt;br /&gt;
            // If target time today has passed, roll to TOMORROW in UTC&lt;br /&gt;
            if (now.getTime() &amp;gt;= target.getTime()) {&lt;br /&gt;
                target.setUTCDate(target.getUTCDate() + 1);&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            var distance = target.getTime() - now.getTime();&lt;br /&gt;
&lt;br /&gt;
            var hours = Math.floor(distance / (1000 * 60 * 60));&lt;br /&gt;
            var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));&lt;br /&gt;
            var seconds = Math.floor((distance % (1000 * 60)) / 1000);&lt;br /&gt;
&lt;br /&gt;
            var hStr = hours &amp;lt; 10 ? &#039;0&#039; + hours : hours;&lt;br /&gt;
            var mStr = minutes &amp;lt; 10 ? &#039;0&#039; + minutes : minutes;&lt;br /&gt;
            var sStr = seconds &amp;lt; 10 ? &#039;0&#039; + seconds : seconds;&lt;br /&gt;
&lt;br /&gt;
            $textSpan.text(hStr + &#039;h &#039; + mStr + &#039;m &#039; + sStr + &#039;s&#039;);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        updateCountdown();&lt;br /&gt;
        setInterval(updateCountdown, 1000);&lt;br /&gt;
    });&lt;br /&gt;
});&lt;/div&gt;</summary>
		<author><name>Pynappo</name></author>
	</entry>
	<entry>
		<id>https://nbittrpgwiki.pynappo.xyz/index.php?title=Template:Countdown&amp;diff=3116</id>
		<title>Template:Countdown</title>
		<link rel="alternate" type="text/html" href="https://nbittrpgwiki.pynappo.xyz/index.php?title=Template:Countdown&amp;diff=3116"/>
		<updated>2026-09-27T09:34:31Z</updated>

		<summary type="html">&lt;p&gt;Pynappo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
Displays a daily recurring countdown to a specific time in UTC.&lt;br /&gt;
&lt;br /&gt;
=== Usage ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{Countdown&lt;br /&gt;
| time = 15:00&lt;br /&gt;
| event = Daily Server Reset&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Countdown&lt;br /&gt;
| time = 15:00&lt;br /&gt;
| event = Daily Server Reset&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;&amp;lt;span class=&amp;quot;mediawiki-recurring-countdown&amp;quot; data-time=&amp;quot;{{{time|{{{1|00:00}}}}}}&amp;quot; data-event=&amp;quot;{{{event|}}}&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;countdown-text&amp;quot;&amp;gt;Loading countdown to {{#if:{{{event|}}}|{{{event}}} at |}}{{{time|{{{1|00:00}}}}}} UTC...&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pynappo</name></author>
	</entry>
	<entry>
		<id>https://nbittrpgwiki.pynappo.xyz/index.php?title=MediaWiki:Common.js&amp;diff=3114</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://nbittrpgwiki.pynappo.xyz/index.php?title=MediaWiki:Common.js&amp;diff=3114"/>
		<updated>2026-09-27T09:32:13Z</updated>

		<summary type="html">&lt;p&gt;Pynappo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/*&lt;br /&gt;
    Template:Spoiler on dev.miraheze.org&lt;br /&gt;
*/&lt;br /&gt;
$(function(){&lt;br /&gt;
    //spoiler block behavior&lt;br /&gt;
	$(&#039;.spoiler&#039;).click(function(){&lt;br /&gt;
		$(this).toggleClass(&#039;off&#039;);&lt;br /&gt;
	});&lt;br /&gt;
	// spoiler button behavior&lt;br /&gt;
    $(&#039;#spoilerbtn&#039;).text(&#039;Show all spoilers&#039;);&lt;br /&gt;
	$(&#039;#spoilerbtn&#039;).click(function(){&lt;br /&gt;
		$(this).toggleClass(&#039;hide&#039;);&lt;br /&gt;
		$(&#039;.spoiler&#039;).toggleClass(&#039;showall&#039;);&lt;br /&gt;
		&lt;br /&gt;
		if ($(this).is(&#039;.hide&#039;)){ $(this).text(&#039;Hide all spoilers&#039;); } &lt;br /&gt;
        else { $(this).text(&#039;Show all spoilers&#039;); }&lt;br /&gt;
	});	&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * TabberEX&lt;br /&gt;
 *&lt;br /&gt;
 * @version 2.3&lt;br /&gt;
 *&lt;br /&gt;
 * @author Jono99 &amp;lt;https://phigros.fandom.com/wiki/User:Jono99&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * documentation and examples at:&lt;br /&gt;
 * &amp;lt;https://dev.fandom.com/wiki/TabberEX&amp;gt;&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
 (function (window, $, mw) {&lt;br /&gt;
	// Function called by tabs to switch tabs&lt;br /&gt;
	window.tabberex_switchTab = function(tabber_id, tab)&lt;br /&gt;
	{&lt;br /&gt;
		tabberex_hideAllTabs(tabber_id);&lt;br /&gt;
		tabberex_showTab(tabber_id, tab);&lt;br /&gt;
	};&lt;br /&gt;
 &lt;br /&gt;
	// Inject CSS&lt;br /&gt;
	(function() {&lt;br /&gt;
		var tabberex_css = document.createElement(&amp;quot;style&amp;quot;);&lt;br /&gt;
		tabberex_css.innerHTML = &amp;quot;/* CSS owned by FANDOM */\n.oo-ui-tabOptionWidget{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;vertical-align:bottom;align-items:center;color:color-mix(in srgb, var(--text-color) 75%, transparent);display:inline-flex;font-size:14px;font-weight:500;height:40px;letter-spacing:.5px;margin:0;padding:0 11px;-webkit-transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s;-moz-transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s;transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s}.oo-ui-tabSelectWidget:not(.oo-ui-tabSelectWidget-framed) .oo-ui-tabOptionWidget{-webkit-transition:color .3s,box-shadow .3s;-moz-transition:color .3s,box-shadow .3s;transition:color .3s,box-shadow .3s;border-bottom:1px solid var(--banner-color)}.oo-ui-tabSelectWidget:not(.oo-ui-tabSelectWidget-framed) .oo-ui-tabOptionWidget.oo-ui-optionWidget-selected{box-shadow:inset 0 -2px 0 0 var(--link-color);color:var(--link-color)}&amp;quot;;&lt;br /&gt;
		document.head.appendChild(tabberex_css);&lt;br /&gt;
	})();&lt;br /&gt;
		&lt;br /&gt;
	window.tabberex_showTab = function(tabber_id, i)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;)&lt;br /&gt;
		.addClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;default&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$($(&amp;quot;.tabberex-body&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;).get()).each(function () {&lt;br /&gt;
            var display_value = $(this).attr(&amp;quot;data-tab-display&amp;quot;);&lt;br /&gt;
            if (display_value === undefined) display_value = &amp;quot;block&amp;quot;;&lt;br /&gt;
            $(this).css(&amp;quot;display&amp;quot;, display_value);&lt;br /&gt;
        });&lt;br /&gt;
	};&lt;br /&gt;
	 &lt;br /&gt;
	window.tabberex_hideTab = function(tabber_id, i)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;)&lt;br /&gt;
		.removeClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$(&amp;quot;.tabberex-body&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;).css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
			&lt;br /&gt;
	window.tabberex_hideAllTabs = function(tabber_id)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children()&lt;br /&gt;
		.removeClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$(&amp;quot;.tabberex-body&amp;quot; + base_selector).children().css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var tabberex_buildTabHead = function(host_div, tabber_id, tab_headers, tab_ex_headers, tab_locations)&lt;br /&gt;
	{&lt;br /&gt;
		var tabber_head = host_div;&lt;br /&gt;
		tabber_head.innerHTML = &amp;quot;&amp;quot;;&lt;br /&gt;
		$(tabber_head).addClass(&amp;quot;tabberex-head oo-ui-widget oo-ui-widget-enabled oo-ui-selectWidget oo-ui-selectWidget-unpressed oo-ui-selectWidget-depressed oo-ui-tabSelectWidget&amp;quot;)&lt;br /&gt;
		.attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
		for (var i = 0; i &amp;lt; tab_headers.length; i++)&lt;br /&gt;
		{&lt;br /&gt;
			console.log(&amp;quot;Building tab &amp;quot; + tabber_id + &amp;quot; &amp;quot; + String(i));&lt;br /&gt;
			var tab = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
			$(tab).addClass(&amp;quot;oo-ui-widget oo-ui-widget-enabled oo-ui-labelElement oo-ui-optionWidget oo-ui-tabOptionWidget&amp;quot;)&lt;br /&gt;
			.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
			if (tab_locations[i] === undefined)&lt;br /&gt;
				$(tab).attr(&amp;quot;onclick&amp;quot;, &amp;quot;tabberex_switchTab(\&amp;quot;&amp;quot; + mw.html.escape(tabber_id) + &amp;quot;\&amp;quot;, &amp;quot; + (i + 1) + &amp;quot;)&amp;quot;);&lt;br /&gt;
			else&lt;br /&gt;
				$(tab).attr(&amp;quot;onclick&amp;quot;, &amp;quot;location = \&amp;quot;&amp;quot; + mw.html.escape(tab_locations[i]) + &amp;quot;\&amp;quot;&amp;quot;);&lt;br /&gt;
			var tab_span = document.createElement(&amp;quot;span&amp;quot;);&lt;br /&gt;
			$(tab_span).addClass(&amp;quot;oo-ui-labelElement-label&amp;quot;);&lt;br /&gt;
			if (tab_ex_headers[i] === undefined)&lt;br /&gt;
				$(tab_span).text(tab_headers[i]);&lt;br /&gt;
			else&lt;br /&gt;
			{&lt;br /&gt;
				console.log(&amp;quot;EX Header present&amp;quot;);&lt;br /&gt;
				for (var attr in tab_ex_headers[i][1])&lt;br /&gt;
					tab_span.setAttribute(attr, tab_ex_headers[i][1][attr]);&lt;br /&gt;
				$(tab_span).html(tab_ex_headers[i][0]);&lt;br /&gt;
			}&lt;br /&gt;
			tab.appendChild(tab_span);&lt;br /&gt;
			tabber_head.appendChild(tab);&lt;br /&gt;
			console.log(&amp;quot;Successfully built tab&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		return tabber_head.outerHTML;&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var process_tabber_head_tab = function(tab_element, i)&lt;br /&gt;
	{&lt;br /&gt;
		// Get header&lt;br /&gt;
		var header = $(tab_element).attr(&amp;quot;data-tab-header&amp;quot;);&lt;br /&gt;
		if (header === undefined) header = i + 1;&lt;br /&gt;
		&lt;br /&gt;
		// Get ex header&lt;br /&gt;
		var ex_header;&lt;br /&gt;
		function get_ex_header(_) {&lt;br /&gt;
			console.log(&#039;EX Header found&#039;);&lt;br /&gt;
			var attributes = {};&lt;br /&gt;
			var attrs = this.getAttributeNames();&lt;br /&gt;
			for (var i in attrs)&lt;br /&gt;
				attributes[attrs[i]] = this.getAttribute(attrs[i]);&lt;br /&gt;
			ex_header = [$(this).html(), attributes];&lt;br /&gt;
			$(this).remove();&lt;br /&gt;
		}&lt;br /&gt;
		$(tab_element).children(&amp;quot;p&amp;quot;).children(&amp;quot;span.tabberex-tab-header&amp;quot;).each(get_ex_header);&lt;br /&gt;
		$(tab_element).children(&amp;quot;span.tabberex-tab-header&amp;quot;).each(get_ex_header);&lt;br /&gt;
		&lt;br /&gt;
		// Get default&lt;br /&gt;
		var is_default = false;&lt;br /&gt;
		if ($(tab_element).hasClass(&amp;quot;tabberex-tab-default&amp;quot;))&lt;br /&gt;
			is_default = true;&lt;br /&gt;
		&lt;br /&gt;
		// Get tab location&lt;br /&gt;
		var tab_location = $(this).attr(&amp;quot;data-tab-location&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		return {&amp;quot;header&amp;quot;: header, &amp;quot;ex_header&amp;quot;: ex_header, &amp;quot;default&amp;quot;: is_default, &amp;quot;location&amp;quot;: tab_location};&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var process_tabbers = function()&lt;br /&gt;
	{&lt;br /&gt;
		console.log(&#039;TabberEX started&#039;);&lt;br /&gt;
		var tabber_i = 0;&lt;br /&gt;
		var default_tabs = {};&lt;br /&gt;
		var tabber_ids = [];&lt;br /&gt;
		// The tabs are iterated through backwards to properly handle tabbers that are nested within other tabbers&lt;br /&gt;
		$($(&amp;quot;.tabberex-head&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			var tab_headers = [];&lt;br /&gt;
			var tab_ex_headers = [];&lt;br /&gt;
			var tab_locations = [];&lt;br /&gt;
			var default_tab = 0;&lt;br /&gt;
				&lt;br /&gt;
			var tabber_id = $(this).attr(&amp;quot;data-tabber-id&amp;quot;);&lt;br /&gt;
			if (tabber_id === undefined) tabber_id = String(tabber_i);&lt;br /&gt;
				&lt;br /&gt;
			$(this).children(&amp;quot;.tabberex-tab&amp;quot;).each(function(i) {&lt;br /&gt;
				console.log(&#039;Processing head tab &#039; + tabber_id + &#039; &#039; + String(i));&lt;br /&gt;
				var tab_details = process_tabber_head_tab(this, i);&lt;br /&gt;
				console.log(&#039;Processing complete&#039;);&lt;br /&gt;
				tab_headers[i] = tab_details.header;&lt;br /&gt;
				tab_ex_headers[i] = tab_details.ex_header;&lt;br /&gt;
				if (tab_details.default)&lt;br /&gt;
					default_tab = i;&lt;br /&gt;
				tab_locations[i] = tab_details.location;&lt;br /&gt;
				$(this).detach();&lt;br /&gt;
			});&lt;br /&gt;
			&lt;br /&gt;
			// Insert tabs into DOM&lt;br /&gt;
			tabberex_buildTabHead(this, tabber_id, tab_headers, tab_ex_headers, tab_locations);&lt;br /&gt;
			if (default_tabs[tabber_id] === undefined)&lt;br /&gt;
				default_tabs[tabber_id] = default_tab;&lt;br /&gt;
			tabber_ids.push(tabber_id);&lt;br /&gt;
			tabber_i++;&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		$($(&amp;quot;.tabberex-body&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			$(this).children().css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		$($(&amp;quot;.tabberex&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			var tab_headers = [];&lt;br /&gt;
			var tab_ex_headers = [];&lt;br /&gt;
			var tab_locations = [];&lt;br /&gt;
			var default_tab = 0;&lt;br /&gt;
			var tab_contents = [];&lt;br /&gt;
			&lt;br /&gt;
			var tabber_id = $(this).attr(&amp;quot;data-tabber-id&amp;quot;);&lt;br /&gt;
			if (tabber_id === undefined) tabber_id = String(tabber_i);&lt;br /&gt;
            $(this).attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
&lt;br /&gt;
            var tabber_head = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
            $(tabber_head).addClass(&amp;quot;tabberex-head&amp;quot;).attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
            $(this).removeClass(&amp;quot;tabberex&amp;quot;).addClass(&amp;quot;tabberex-body&amp;quot;);&lt;br /&gt;
			&lt;br /&gt;
			$(this).children(&amp;quot;.tabberex-tab&amp;quot;).each(function(i) {&lt;br /&gt;
				console.log(&#039;Processing head tab &#039; + tabber_id + &#039; &#039; + String(i));&lt;br /&gt;
				var tab_details = process_tabber_head_tab(this, i);&lt;br /&gt;
				console.log(&#039;Processing complete&#039;);&lt;br /&gt;
				tab_headers[i] = tab_details.header;&lt;br /&gt;
				tab_ex_headers[i] = tab_details.ex_header;&lt;br /&gt;
				if (tab_details.default)&lt;br /&gt;
					default_tab = i;&lt;br /&gt;
				tab_locations[i] = tab_details.location;&lt;br /&gt;
				&lt;br /&gt;
				// Get tab content&lt;br /&gt;
				$(this).css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
				tab_contents[i] = $(this);&lt;br /&gt;
			});&lt;br /&gt;
&lt;br /&gt;
            tabberex_buildTabHead(tabber_head, tabber_id, tab_headers, tab_ex_headers, tab_locations);&lt;br /&gt;
			if (default_tabs[tabber_id] === undefined)&lt;br /&gt;
				default_tabs[tabber_id] = default_tab;&lt;br /&gt;
            $(tabber_head).insertBefore(this);&lt;br /&gt;
			tabber_ids.push(tabber_id);&lt;br /&gt;
			tabber_i++;&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		// Select default tabs&lt;br /&gt;
		for (var i in tabber_ids)&lt;br /&gt;
		{&lt;br /&gt;
			tabberex_showTab(tabber_ids[i], default_tabs[tabber_ids[i]] + 1);&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
 &lt;br /&gt;
	mw.hook(&amp;quot;wikipage.content&amp;quot;).add(process_tabbers);&lt;br /&gt;
}(this, jQuery, mediaWiki));&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * @title           SoundcloudPlayer.js&lt;br /&gt;
 * @version         1.1.2&lt;br /&gt;
 * @description     Add support for soundcloud players&lt;br /&gt;
 * @author          Himmalerin&lt;br /&gt;
 * @license         CC-BY-SA-3.0&lt;br /&gt;
 */&lt;br /&gt;
(function () {&lt;br /&gt;
	// Build the iframe&lt;br /&gt;
	const scPlayer = function (data) {&lt;br /&gt;
		const widget = document.createElement(&#039;iframe&#039;);&lt;br /&gt;
&lt;br /&gt;
		widget.classList.add(&#039;soundcloud-player&#039;);&lt;br /&gt;
&lt;br /&gt;
		widget.src =&lt;br /&gt;
			&#039;https://w.soundcloud.com/player/?show_artwork=false&amp;amp;url=&#039; +&lt;br /&gt;
			encodeURI(data.src);&lt;br /&gt;
&lt;br /&gt;
		// If data-color is set add the value to the iframe&lt;br /&gt;
		if (data.color) widget.src += &#039;&amp;amp;color=&#039; + encodeURIComponent(data.color);&lt;br /&gt;
		// If data-width/height are set add that value to the iframe&lt;br /&gt;
		if (data.width) widget.width = data.width;&lt;br /&gt;
		if (data.height) widget.height = data.height;&lt;br /&gt;
&lt;br /&gt;
		return widget;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	const scParseTags = function ($content) {&lt;br /&gt;
		// Get all instances of the soundcloud class&lt;br /&gt;
		const scTags = $content.find(&#039;.soundcloud&#039;);&lt;br /&gt;
&lt;br /&gt;
		// For each instance of the soundcloud class run scPlayer&lt;br /&gt;
		for (var i = 0; i &amp;lt; scTags.length; i++) {&lt;br /&gt;
			scTags[i].replaceWith(scPlayer(scTags[i].dataset));&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	mw.hook(&#039;wikipage.content&#039;).add(function ($content) {&lt;br /&gt;
		scParseTags($content);&lt;br /&gt;
	});&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
https://dev.fandom.com/wiki/MediaWiki:CopyText/code.js&lt;br /&gt;
 */&lt;br /&gt;
(function () {&lt;br /&gt;
    if (window.CopyTextLoaded) {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    window.CopyTextLoaded = true;&lt;br /&gt;
    mw.hook(&#039;dev.i18n&#039;).add(function (i18n) {&lt;br /&gt;
        i18n.loadMessages(&#039;CopyText&#039;).done(function (i18n) {&lt;br /&gt;
            function showSuccess() {&lt;br /&gt;
                if (window.BannerNotification) {&lt;br /&gt;
                    new BannerNotification(i18n.msg(&#039;success&#039;).escape(), &#039;confirm&#039;, null, 5000).show();&lt;br /&gt;
                } else {&lt;br /&gt;
                    mw.notify(i18n.msg(&#039;success&#039;).plain());&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $(&#039;body&#039;).on(&#039;click&#039;, &#039;.copy-to-clipboard-button&#039;, function(e){&lt;br /&gt;
                var text = $(this).data(&#039;text&#039;),&lt;br /&gt;
                $input = $(&#039;&amp;lt;textarea&amp;gt;&#039;, { type: &#039;text&#039; })&lt;br /&gt;
                    .val($(&#039;.copy-to-clipboard-text&#039;).filter(function() {&lt;br /&gt;
                        return $(this).data(&#039;text&#039;) == text;&lt;br /&gt;
                    }).first().text())&lt;br /&gt;
                    .appendTo(&#039;body&#039;)&lt;br /&gt;
                    .select();&lt;br /&gt;
                var success = document.execCommand(&#039;Copy&#039;);&lt;br /&gt;
                $input.remove();&lt;br /&gt;
                if (success) {&lt;br /&gt;
                    showSuccess();&lt;br /&gt;
                } else {&lt;br /&gt;
                    if (window.navigator &amp;amp;&amp;amp; navigator.clipboard &amp;amp;&amp;amp; navigator.clipboard.writeText) {&lt;br /&gt;
                        navigator.clipboard.writeText(text).then(function() {&lt;br /&gt;
                            showSuccess();&lt;br /&gt;
                        });&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
})();&lt;br /&gt;
$(function () {&lt;br /&gt;
    $(&#039;.countdown&#039;).each(function () {&lt;br /&gt;
        var $container = $(this);&lt;br /&gt;
        var timeStr = $container.attr(&#039;data-time&#039;).trim(); // Expected format &amp;quot;HH:MM&amp;quot; or &amp;quot;HH:MM:SS&amp;quot;&lt;br /&gt;
        var $textSpan = $container.find(&#039;.countdown-text&#039;);&lt;br /&gt;
&lt;br /&gt;
        var parts = timeStr.split(&#039;:&#039;);&lt;br /&gt;
        var targetHour = parseInt(parts[0], 10) || 0;&lt;br /&gt;
        var targetMinute = parseInt(parts[1], 10) || 0;&lt;br /&gt;
        var targetSecond = parseInt(parts[2], 10) || 0;&lt;br /&gt;
&lt;br /&gt;
        function updateCountdown() {&lt;br /&gt;
            var now = new Date();&lt;br /&gt;
            &lt;br /&gt;
            // Construct target date for TODAY in UTC&lt;br /&gt;
            var target = new Date(Date.UTC(&lt;br /&gt;
                now.getUTCFullYear(),&lt;br /&gt;
                now.getUTCMonth(),&lt;br /&gt;
                now.getUTCDate(),&lt;br /&gt;
                targetHour,&lt;br /&gt;
                targetMinute,&lt;br /&gt;
                targetSecond&lt;br /&gt;
            ));&lt;br /&gt;
&lt;br /&gt;
            // If target time today has already passed, set target to TOMORROW in UTC&lt;br /&gt;
            if (now.getTime() &amp;gt;= target.getTime()) {&lt;br /&gt;
                target.setUTCDate(target.getUTCDate() + 1);&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            var distance = target.getTime() - now.getTime();&lt;br /&gt;
&lt;br /&gt;
            var hours = Math.floor(distance / (1000 * 60 * 60));&lt;br /&gt;
            var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));&lt;br /&gt;
            var seconds = Math.floor((distance % (1000 * 60)) / 1000);&lt;br /&gt;
&lt;br /&gt;
            // Format double digits (e.g., 05h 02m 09s)&lt;br /&gt;
            var hStr = hours &amp;lt; 10 ? &#039;0&#039; + hours : hours;&lt;br /&gt;
            var mStr = minutes &amp;lt; 10 ? &#039;0&#039; + minutes : minutes;&lt;br /&gt;
            var sStr = seconds &amp;lt; 10 ? &#039;0&#039; + seconds : seconds;&lt;br /&gt;
&lt;br /&gt;
            $textSpan.text(hStr + &#039;h &#039; + mStr + &#039;m &#039; + sStr + &#039;s&#039;);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        updateCountdown();&lt;br /&gt;
        setInterval(updateCountdown, 1000);&lt;br /&gt;
    });&lt;br /&gt;
});&lt;/div&gt;</summary>
		<author><name>Pynappo</name></author>
	</entry>
	<entry>
		<id>https://nbittrpgwiki.pynappo.xyz/index.php?title=Template:Countdown&amp;diff=3113</id>
		<title>Template:Countdown</title>
		<link rel="alternate" type="text/html" href="https://nbittrpgwiki.pynappo.xyz/index.php?title=Template:Countdown&amp;diff=3113"/>
		<updated>2026-09-27T09:32:01Z</updated>

		<summary type="html">&lt;p&gt;Pynappo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
Displays a daily recurring countdown to a specific time in UTC.&lt;br /&gt;
&lt;br /&gt;
=== Usage ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{Countdown&lt;br /&gt;
| time = 15:00&lt;br /&gt;
| event = Daily Server Reset&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Countdown&lt;br /&gt;
| time = 15:00&lt;br /&gt;
| event = Daily Server Reset&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;&amp;lt;span class=&amp;quot;countdown&amp;quot; data-time=&amp;quot;{{{time|{{{1|00:00}}}}}}&amp;quot; data-event=&amp;quot;{{{event|}}}&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;countdown-text&amp;quot;&amp;gt;Loading countdown...&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pynappo</name></author>
	</entry>
	<entry>
		<id>https://nbittrpgwiki.pynappo.xyz/index.php?title=Template:Countdown&amp;diff=3112</id>
		<title>Template:Countdown</title>
		<link rel="alternate" type="text/html" href="https://nbittrpgwiki.pynappo.xyz/index.php?title=Template:Countdown&amp;diff=3112"/>
		<updated>2026-09-27T09:31:56Z</updated>

		<summary type="html">&lt;p&gt;Pynappo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
Displays a daily recurring countdown to a specific time in UTC.&lt;br /&gt;
&lt;br /&gt;
=== Usage ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{Countdown&lt;br /&gt;
| time = 15:00&lt;br /&gt;
| event = Daily Server Reset&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Countdown&lt;br /&gt;
| time = 15:00&lt;br /&gt;
| event = Daily Server Reset&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;&amp;lt;span class=&amp;quot;countdown recurring&amp;quot; data-time=&amp;quot;{{{time|{{{1|00:00}}}}}}&amp;quot; data-event=&amp;quot;{{{event|}}}&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;countdown-text&amp;quot;&amp;gt;Loading countdown...&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pynappo</name></author>
	</entry>
	<entry>
		<id>https://nbittrpgwiki.pynappo.xyz/index.php?title=Template:Countdown&amp;diff=3111</id>
		<title>Template:Countdown</title>
		<link rel="alternate" type="text/html" href="https://nbittrpgwiki.pynappo.xyz/index.php?title=Template:Countdown&amp;diff=3111"/>
		<updated>2026-09-27T09:31:41Z</updated>

		<summary type="html">&lt;p&gt;Pynappo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
Displays a daily recurring countdown to a specific time in UTC.&lt;br /&gt;
&lt;br /&gt;
=== Usage ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{Countdown&lt;br /&gt;
| time = 15:00&lt;br /&gt;
| event = Daily Server Reset&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Countdown&lt;br /&gt;
| time = 15:00&lt;br /&gt;
| event = Daily Server Reset&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;&amp;lt;span class=&amp;quot;mediawiki-recurring-countdown&amp;quot; data-time=&amp;quot;{{{time|{{{1|00:00}}}}}}&amp;quot; data-event=&amp;quot;{{{event|}}}&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;countdown-text&amp;quot;&amp;gt;Loading countdown...&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pynappo</name></author>
	</entry>
	<entry>
		<id>https://nbittrpgwiki.pynappo.xyz/index.php?title=MediaWiki:Common.js&amp;diff=3110</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://nbittrpgwiki.pynappo.xyz/index.php?title=MediaWiki:Common.js&amp;diff=3110"/>
		<updated>2026-09-27T09:28:51Z</updated>

		<summary type="html">&lt;p&gt;Pynappo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/*&lt;br /&gt;
    Template:Spoiler on dev.miraheze.org&lt;br /&gt;
*/&lt;br /&gt;
$(function(){&lt;br /&gt;
    //spoiler block behavior&lt;br /&gt;
	$(&#039;.spoiler&#039;).click(function(){&lt;br /&gt;
		$(this).toggleClass(&#039;off&#039;);&lt;br /&gt;
	});&lt;br /&gt;
	// spoiler button behavior&lt;br /&gt;
    $(&#039;#spoilerbtn&#039;).text(&#039;Show all spoilers&#039;);&lt;br /&gt;
	$(&#039;#spoilerbtn&#039;).click(function(){&lt;br /&gt;
		$(this).toggleClass(&#039;hide&#039;);&lt;br /&gt;
		$(&#039;.spoiler&#039;).toggleClass(&#039;showall&#039;);&lt;br /&gt;
		&lt;br /&gt;
		if ($(this).is(&#039;.hide&#039;)){ $(this).text(&#039;Hide all spoilers&#039;); } &lt;br /&gt;
        else { $(this).text(&#039;Show all spoilers&#039;); }&lt;br /&gt;
	});	&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * TabberEX&lt;br /&gt;
 *&lt;br /&gt;
 * @version 2.3&lt;br /&gt;
 *&lt;br /&gt;
 * @author Jono99 &amp;lt;https://phigros.fandom.com/wiki/User:Jono99&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * documentation and examples at:&lt;br /&gt;
 * &amp;lt;https://dev.fandom.com/wiki/TabberEX&amp;gt;&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
 (function (window, $, mw) {&lt;br /&gt;
	// Function called by tabs to switch tabs&lt;br /&gt;
	window.tabberex_switchTab = function(tabber_id, tab)&lt;br /&gt;
	{&lt;br /&gt;
		tabberex_hideAllTabs(tabber_id);&lt;br /&gt;
		tabberex_showTab(tabber_id, tab);&lt;br /&gt;
	};&lt;br /&gt;
 &lt;br /&gt;
	// Inject CSS&lt;br /&gt;
	(function() {&lt;br /&gt;
		var tabberex_css = document.createElement(&amp;quot;style&amp;quot;);&lt;br /&gt;
		tabberex_css.innerHTML = &amp;quot;/* CSS owned by FANDOM */\n.oo-ui-tabOptionWidget{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;vertical-align:bottom;align-items:center;color:color-mix(in srgb, var(--text-color) 75%, transparent);display:inline-flex;font-size:14px;font-weight:500;height:40px;letter-spacing:.5px;margin:0;padding:0 11px;-webkit-transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s;-moz-transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s;transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s}.oo-ui-tabSelectWidget:not(.oo-ui-tabSelectWidget-framed) .oo-ui-tabOptionWidget{-webkit-transition:color .3s,box-shadow .3s;-moz-transition:color .3s,box-shadow .3s;transition:color .3s,box-shadow .3s;border-bottom:1px solid var(--banner-color)}.oo-ui-tabSelectWidget:not(.oo-ui-tabSelectWidget-framed) .oo-ui-tabOptionWidget.oo-ui-optionWidget-selected{box-shadow:inset 0 -2px 0 0 var(--link-color);color:var(--link-color)}&amp;quot;;&lt;br /&gt;
		document.head.appendChild(tabberex_css);&lt;br /&gt;
	})();&lt;br /&gt;
		&lt;br /&gt;
	window.tabberex_showTab = function(tabber_id, i)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;)&lt;br /&gt;
		.addClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;default&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$($(&amp;quot;.tabberex-body&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;).get()).each(function () {&lt;br /&gt;
            var display_value = $(this).attr(&amp;quot;data-tab-display&amp;quot;);&lt;br /&gt;
            if (display_value === undefined) display_value = &amp;quot;block&amp;quot;;&lt;br /&gt;
            $(this).css(&amp;quot;display&amp;quot;, display_value);&lt;br /&gt;
        });&lt;br /&gt;
	};&lt;br /&gt;
	 &lt;br /&gt;
	window.tabberex_hideTab = function(tabber_id, i)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;)&lt;br /&gt;
		.removeClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$(&amp;quot;.tabberex-body&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;).css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
			&lt;br /&gt;
	window.tabberex_hideAllTabs = function(tabber_id)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children()&lt;br /&gt;
		.removeClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$(&amp;quot;.tabberex-body&amp;quot; + base_selector).children().css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var tabberex_buildTabHead = function(host_div, tabber_id, tab_headers, tab_ex_headers, tab_locations)&lt;br /&gt;
	{&lt;br /&gt;
		var tabber_head = host_div;&lt;br /&gt;
		tabber_head.innerHTML = &amp;quot;&amp;quot;;&lt;br /&gt;
		$(tabber_head).addClass(&amp;quot;tabberex-head oo-ui-widget oo-ui-widget-enabled oo-ui-selectWidget oo-ui-selectWidget-unpressed oo-ui-selectWidget-depressed oo-ui-tabSelectWidget&amp;quot;)&lt;br /&gt;
		.attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
		for (var i = 0; i &amp;lt; tab_headers.length; i++)&lt;br /&gt;
		{&lt;br /&gt;
			console.log(&amp;quot;Building tab &amp;quot; + tabber_id + &amp;quot; &amp;quot; + String(i));&lt;br /&gt;
			var tab = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
			$(tab).addClass(&amp;quot;oo-ui-widget oo-ui-widget-enabled oo-ui-labelElement oo-ui-optionWidget oo-ui-tabOptionWidget&amp;quot;)&lt;br /&gt;
			.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
			if (tab_locations[i] === undefined)&lt;br /&gt;
				$(tab).attr(&amp;quot;onclick&amp;quot;, &amp;quot;tabberex_switchTab(\&amp;quot;&amp;quot; + mw.html.escape(tabber_id) + &amp;quot;\&amp;quot;, &amp;quot; + (i + 1) + &amp;quot;)&amp;quot;);&lt;br /&gt;
			else&lt;br /&gt;
				$(tab).attr(&amp;quot;onclick&amp;quot;, &amp;quot;location = \&amp;quot;&amp;quot; + mw.html.escape(tab_locations[i]) + &amp;quot;\&amp;quot;&amp;quot;);&lt;br /&gt;
			var tab_span = document.createElement(&amp;quot;span&amp;quot;);&lt;br /&gt;
			$(tab_span).addClass(&amp;quot;oo-ui-labelElement-label&amp;quot;);&lt;br /&gt;
			if (tab_ex_headers[i] === undefined)&lt;br /&gt;
				$(tab_span).text(tab_headers[i]);&lt;br /&gt;
			else&lt;br /&gt;
			{&lt;br /&gt;
				console.log(&amp;quot;EX Header present&amp;quot;);&lt;br /&gt;
				for (var attr in tab_ex_headers[i][1])&lt;br /&gt;
					tab_span.setAttribute(attr, tab_ex_headers[i][1][attr]);&lt;br /&gt;
				$(tab_span).html(tab_ex_headers[i][0]);&lt;br /&gt;
			}&lt;br /&gt;
			tab.appendChild(tab_span);&lt;br /&gt;
			tabber_head.appendChild(tab);&lt;br /&gt;
			console.log(&amp;quot;Successfully built tab&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		return tabber_head.outerHTML;&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var process_tabber_head_tab = function(tab_element, i)&lt;br /&gt;
	{&lt;br /&gt;
		// Get header&lt;br /&gt;
		var header = $(tab_element).attr(&amp;quot;data-tab-header&amp;quot;);&lt;br /&gt;
		if (header === undefined) header = i + 1;&lt;br /&gt;
		&lt;br /&gt;
		// Get ex header&lt;br /&gt;
		var ex_header;&lt;br /&gt;
		function get_ex_header(_) {&lt;br /&gt;
			console.log(&#039;EX Header found&#039;);&lt;br /&gt;
			var attributes = {};&lt;br /&gt;
			var attrs = this.getAttributeNames();&lt;br /&gt;
			for (var i in attrs)&lt;br /&gt;
				attributes[attrs[i]] = this.getAttribute(attrs[i]);&lt;br /&gt;
			ex_header = [$(this).html(), attributes];&lt;br /&gt;
			$(this).remove();&lt;br /&gt;
		}&lt;br /&gt;
		$(tab_element).children(&amp;quot;p&amp;quot;).children(&amp;quot;span.tabberex-tab-header&amp;quot;).each(get_ex_header);&lt;br /&gt;
		$(tab_element).children(&amp;quot;span.tabberex-tab-header&amp;quot;).each(get_ex_header);&lt;br /&gt;
		&lt;br /&gt;
		// Get default&lt;br /&gt;
		var is_default = false;&lt;br /&gt;
		if ($(tab_element).hasClass(&amp;quot;tabberex-tab-default&amp;quot;))&lt;br /&gt;
			is_default = true;&lt;br /&gt;
		&lt;br /&gt;
		// Get tab location&lt;br /&gt;
		var tab_location = $(this).attr(&amp;quot;data-tab-location&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		return {&amp;quot;header&amp;quot;: header, &amp;quot;ex_header&amp;quot;: ex_header, &amp;quot;default&amp;quot;: is_default, &amp;quot;location&amp;quot;: tab_location};&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var process_tabbers = function()&lt;br /&gt;
	{&lt;br /&gt;
		console.log(&#039;TabberEX started&#039;);&lt;br /&gt;
		var tabber_i = 0;&lt;br /&gt;
		var default_tabs = {};&lt;br /&gt;
		var tabber_ids = [];&lt;br /&gt;
		// The tabs are iterated through backwards to properly handle tabbers that are nested within other tabbers&lt;br /&gt;
		$($(&amp;quot;.tabberex-head&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			var tab_headers = [];&lt;br /&gt;
			var tab_ex_headers = [];&lt;br /&gt;
			var tab_locations = [];&lt;br /&gt;
			var default_tab = 0;&lt;br /&gt;
				&lt;br /&gt;
			var tabber_id = $(this).attr(&amp;quot;data-tabber-id&amp;quot;);&lt;br /&gt;
			if (tabber_id === undefined) tabber_id = String(tabber_i);&lt;br /&gt;
				&lt;br /&gt;
			$(this).children(&amp;quot;.tabberex-tab&amp;quot;).each(function(i) {&lt;br /&gt;
				console.log(&#039;Processing head tab &#039; + tabber_id + &#039; &#039; + String(i));&lt;br /&gt;
				var tab_details = process_tabber_head_tab(this, i);&lt;br /&gt;
				console.log(&#039;Processing complete&#039;);&lt;br /&gt;
				tab_headers[i] = tab_details.header;&lt;br /&gt;
				tab_ex_headers[i] = tab_details.ex_header;&lt;br /&gt;
				if (tab_details.default)&lt;br /&gt;
					default_tab = i;&lt;br /&gt;
				tab_locations[i] = tab_details.location;&lt;br /&gt;
				$(this).detach();&lt;br /&gt;
			});&lt;br /&gt;
			&lt;br /&gt;
			// Insert tabs into DOM&lt;br /&gt;
			tabberex_buildTabHead(this, tabber_id, tab_headers, tab_ex_headers, tab_locations);&lt;br /&gt;
			if (default_tabs[tabber_id] === undefined)&lt;br /&gt;
				default_tabs[tabber_id] = default_tab;&lt;br /&gt;
			tabber_ids.push(tabber_id);&lt;br /&gt;
			tabber_i++;&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		$($(&amp;quot;.tabberex-body&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			$(this).children().css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		$($(&amp;quot;.tabberex&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			var tab_headers = [];&lt;br /&gt;
			var tab_ex_headers = [];&lt;br /&gt;
			var tab_locations = [];&lt;br /&gt;
			var default_tab = 0;&lt;br /&gt;
			var tab_contents = [];&lt;br /&gt;
			&lt;br /&gt;
			var tabber_id = $(this).attr(&amp;quot;data-tabber-id&amp;quot;);&lt;br /&gt;
			if (tabber_id === undefined) tabber_id = String(tabber_i);&lt;br /&gt;
            $(this).attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
&lt;br /&gt;
            var tabber_head = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
            $(tabber_head).addClass(&amp;quot;tabberex-head&amp;quot;).attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
            $(this).removeClass(&amp;quot;tabberex&amp;quot;).addClass(&amp;quot;tabberex-body&amp;quot;);&lt;br /&gt;
			&lt;br /&gt;
			$(this).children(&amp;quot;.tabberex-tab&amp;quot;).each(function(i) {&lt;br /&gt;
				console.log(&#039;Processing head tab &#039; + tabber_id + &#039; &#039; + String(i));&lt;br /&gt;
				var tab_details = process_tabber_head_tab(this, i);&lt;br /&gt;
				console.log(&#039;Processing complete&#039;);&lt;br /&gt;
				tab_headers[i] = tab_details.header;&lt;br /&gt;
				tab_ex_headers[i] = tab_details.ex_header;&lt;br /&gt;
				if (tab_details.default)&lt;br /&gt;
					default_tab = i;&lt;br /&gt;
				tab_locations[i] = tab_details.location;&lt;br /&gt;
				&lt;br /&gt;
				// Get tab content&lt;br /&gt;
				$(this).css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
				tab_contents[i] = $(this);&lt;br /&gt;
			});&lt;br /&gt;
&lt;br /&gt;
            tabberex_buildTabHead(tabber_head, tabber_id, tab_headers, tab_ex_headers, tab_locations);&lt;br /&gt;
			if (default_tabs[tabber_id] === undefined)&lt;br /&gt;
				default_tabs[tabber_id] = default_tab;&lt;br /&gt;
            $(tabber_head).insertBefore(this);&lt;br /&gt;
			tabber_ids.push(tabber_id);&lt;br /&gt;
			tabber_i++;&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		// Select default tabs&lt;br /&gt;
		for (var i in tabber_ids)&lt;br /&gt;
		{&lt;br /&gt;
			tabberex_showTab(tabber_ids[i], default_tabs[tabber_ids[i]] + 1);&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
 &lt;br /&gt;
	mw.hook(&amp;quot;wikipage.content&amp;quot;).add(process_tabbers);&lt;br /&gt;
}(this, jQuery, mediaWiki));&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * @title           SoundcloudPlayer.js&lt;br /&gt;
 * @version         1.1.2&lt;br /&gt;
 * @description     Add support for soundcloud players&lt;br /&gt;
 * @author          Himmalerin&lt;br /&gt;
 * @license         CC-BY-SA-3.0&lt;br /&gt;
 */&lt;br /&gt;
(function () {&lt;br /&gt;
	// Build the iframe&lt;br /&gt;
	const scPlayer = function (data) {&lt;br /&gt;
		const widget = document.createElement(&#039;iframe&#039;);&lt;br /&gt;
&lt;br /&gt;
		widget.classList.add(&#039;soundcloud-player&#039;);&lt;br /&gt;
&lt;br /&gt;
		widget.src =&lt;br /&gt;
			&#039;https://w.soundcloud.com/player/?show_artwork=false&amp;amp;url=&#039; +&lt;br /&gt;
			encodeURI(data.src);&lt;br /&gt;
&lt;br /&gt;
		// If data-color is set add the value to the iframe&lt;br /&gt;
		if (data.color) widget.src += &#039;&amp;amp;color=&#039; + encodeURIComponent(data.color);&lt;br /&gt;
		// If data-width/height are set add that value to the iframe&lt;br /&gt;
		if (data.width) widget.width = data.width;&lt;br /&gt;
		if (data.height) widget.height = data.height;&lt;br /&gt;
&lt;br /&gt;
		return widget;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	const scParseTags = function ($content) {&lt;br /&gt;
		// Get all instances of the soundcloud class&lt;br /&gt;
		const scTags = $content.find(&#039;.soundcloud&#039;);&lt;br /&gt;
&lt;br /&gt;
		// For each instance of the soundcloud class run scPlayer&lt;br /&gt;
		for (var i = 0; i &amp;lt; scTags.length; i++) {&lt;br /&gt;
			scTags[i].replaceWith(scPlayer(scTags[i].dataset));&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	mw.hook(&#039;wikipage.content&#039;).add(function ($content) {&lt;br /&gt;
		scParseTags($content);&lt;br /&gt;
	});&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
https://dev.fandom.com/wiki/MediaWiki:CopyText/code.js&lt;br /&gt;
 */&lt;br /&gt;
(function () {&lt;br /&gt;
    if (window.CopyTextLoaded) {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    window.CopyTextLoaded = true;&lt;br /&gt;
    mw.hook(&#039;dev.i18n&#039;).add(function (i18n) {&lt;br /&gt;
        i18n.loadMessages(&#039;CopyText&#039;).done(function (i18n) {&lt;br /&gt;
            function showSuccess() {&lt;br /&gt;
                if (window.BannerNotification) {&lt;br /&gt;
                    new BannerNotification(i18n.msg(&#039;success&#039;).escape(), &#039;confirm&#039;, null, 5000).show();&lt;br /&gt;
                } else {&lt;br /&gt;
                    mw.notify(i18n.msg(&#039;success&#039;).plain());&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $(&#039;body&#039;).on(&#039;click&#039;, &#039;.copy-to-clipboard-button&#039;, function(e){&lt;br /&gt;
                var text = $(this).data(&#039;text&#039;),&lt;br /&gt;
                $input = $(&#039;&amp;lt;textarea&amp;gt;&#039;, { type: &#039;text&#039; })&lt;br /&gt;
                    .val($(&#039;.copy-to-clipboard-text&#039;).filter(function() {&lt;br /&gt;
                        return $(this).data(&#039;text&#039;) == text;&lt;br /&gt;
                    }).first().text())&lt;br /&gt;
                    .appendTo(&#039;body&#039;)&lt;br /&gt;
                    .select();&lt;br /&gt;
                var success = document.execCommand(&#039;Copy&#039;);&lt;br /&gt;
                $input.remove();&lt;br /&gt;
                if (success) {&lt;br /&gt;
                    showSuccess();&lt;br /&gt;
                } else {&lt;br /&gt;
                    if (window.navigator &amp;amp;&amp;amp; navigator.clipboard &amp;amp;&amp;amp; navigator.clipboard.writeText) {&lt;br /&gt;
                        navigator.clipboard.writeText(text).then(function() {&lt;br /&gt;
                            showSuccess();&lt;br /&gt;
                        });&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
})();&lt;br /&gt;
$(function () {&lt;br /&gt;
    $(&#039;.countdown.recurring&#039;).each(function () {&lt;br /&gt;
        var $container = $(this);&lt;br /&gt;
        var timeStr = $container.attr(&#039;data-time&#039;).trim(); // Expected format &amp;quot;HH:MM&amp;quot; or &amp;quot;HH:MM:SS&amp;quot;&lt;br /&gt;
        var $textSpan = $container.find(&#039;.countdown-text&#039;);&lt;br /&gt;
&lt;br /&gt;
        var parts = timeStr.split(&#039;:&#039;);&lt;br /&gt;
        var targetHour = parseInt(parts[0], 10) || 0;&lt;br /&gt;
        var targetMinute = parseInt(parts[1], 10) || 0;&lt;br /&gt;
        var targetSecond = parseInt(parts[2], 10) || 0;&lt;br /&gt;
&lt;br /&gt;
        function updateCountdown() {&lt;br /&gt;
            var now = new Date();&lt;br /&gt;
            &lt;br /&gt;
            // Construct target date for TODAY in UTC&lt;br /&gt;
            var target = new Date(Date.UTC(&lt;br /&gt;
                now.getUTCFullYear(),&lt;br /&gt;
                now.getUTCMonth(),&lt;br /&gt;
                now.getUTCDate(),&lt;br /&gt;
                targetHour,&lt;br /&gt;
                targetMinute,&lt;br /&gt;
                targetSecond&lt;br /&gt;
            ));&lt;br /&gt;
&lt;br /&gt;
            // If target time today has already passed, set target to TOMORROW in UTC&lt;br /&gt;
            if (now.getTime() &amp;gt;= target.getTime()) {&lt;br /&gt;
                target.setUTCDate(target.getUTCDate() + 1);&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            var distance = target.getTime() - now.getTime();&lt;br /&gt;
&lt;br /&gt;
            var hours = Math.floor(distance / (1000 * 60 * 60));&lt;br /&gt;
            var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));&lt;br /&gt;
            var seconds = Math.floor((distance % (1000 * 60)) / 1000);&lt;br /&gt;
&lt;br /&gt;
            // Format double digits (e.g., 05h 02m 09s)&lt;br /&gt;
            var hStr = hours &amp;lt; 10 ? &#039;0&#039; + hours : hours;&lt;br /&gt;
            var mStr = minutes &amp;lt; 10 ? &#039;0&#039; + minutes : minutes;&lt;br /&gt;
            var sStr = seconds &amp;lt; 10 ? &#039;0&#039; + seconds : seconds;&lt;br /&gt;
&lt;br /&gt;
            $textSpan.text(hStr + &#039;h &#039; + mStr + &#039;m &#039; + sStr + &#039;s&#039;);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        updateCountdown();&lt;br /&gt;
        setInterval(updateCountdown, 1000);&lt;br /&gt;
    });&lt;br /&gt;
});&lt;/div&gt;</summary>
		<author><name>Pynappo</name></author>
	</entry>
	<entry>
		<id>https://nbittrpgwiki.pynappo.xyz/index.php?title=Template:Countdown&amp;diff=3103</id>
		<title>Template:Countdown</title>
		<link rel="alternate" type="text/html" href="https://nbittrpgwiki.pynappo.xyz/index.php?title=Template:Countdown&amp;diff=3103"/>
		<updated>2026-09-27T09:26:11Z</updated>

		<summary type="html">&lt;p&gt;Pynappo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
Displays a daily recurring countdown to a specific time in UTC.&lt;br /&gt;
&lt;br /&gt;
=== Usage ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{Countdown&lt;br /&gt;
| time = 15:00&lt;br /&gt;
| event = Daily Server Reset&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Countdown&lt;br /&gt;
| time = 15:00&lt;br /&gt;
| event = Daily Server Reset&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;&amp;lt;span class=&amp;quot;countdown recurring&amp;quot; data-time=&amp;quot;{{{time|{{{1|00:00}}}}}}&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;countdown-text&amp;quot;&amp;gt;Loading countdown to {{{event|{{{time|{{{1|00:00}}}}}} UTC}}}...&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pynappo</name></author>
	</entry>
	<entry>
		<id>https://nbittrpgwiki.pynappo.xyz/index.php?title=MediaWiki:Common.js&amp;diff=3102</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://nbittrpgwiki.pynappo.xyz/index.php?title=MediaWiki:Common.js&amp;diff=3102"/>
		<updated>2026-09-27T09:26:09Z</updated>

		<summary type="html">&lt;p&gt;Pynappo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/*&lt;br /&gt;
    Template:Spoiler on dev.miraheze.org&lt;br /&gt;
*/&lt;br /&gt;
$(function(){&lt;br /&gt;
    //spoiler block behavior&lt;br /&gt;
	$(&#039;.spoiler&#039;).click(function(){&lt;br /&gt;
		$(this).toggleClass(&#039;off&#039;);&lt;br /&gt;
	});&lt;br /&gt;
	// spoiler button behavior&lt;br /&gt;
    $(&#039;#spoilerbtn&#039;).text(&#039;Show all spoilers&#039;);&lt;br /&gt;
	$(&#039;#spoilerbtn&#039;).click(function(){&lt;br /&gt;
		$(this).toggleClass(&#039;hide&#039;);&lt;br /&gt;
		$(&#039;.spoiler&#039;).toggleClass(&#039;showall&#039;);&lt;br /&gt;
		&lt;br /&gt;
		if ($(this).is(&#039;.hide&#039;)){ $(this).text(&#039;Hide all spoilers&#039;); } &lt;br /&gt;
        else { $(this).text(&#039;Show all spoilers&#039;); }&lt;br /&gt;
	});	&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * TabberEX&lt;br /&gt;
 *&lt;br /&gt;
 * @version 2.3&lt;br /&gt;
 *&lt;br /&gt;
 * @author Jono99 &amp;lt;https://phigros.fandom.com/wiki/User:Jono99&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * documentation and examples at:&lt;br /&gt;
 * &amp;lt;https://dev.fandom.com/wiki/TabberEX&amp;gt;&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
 (function (window, $, mw) {&lt;br /&gt;
	// Function called by tabs to switch tabs&lt;br /&gt;
	window.tabberex_switchTab = function(tabber_id, tab)&lt;br /&gt;
	{&lt;br /&gt;
		tabberex_hideAllTabs(tabber_id);&lt;br /&gt;
		tabberex_showTab(tabber_id, tab);&lt;br /&gt;
	};&lt;br /&gt;
 &lt;br /&gt;
	// Inject CSS&lt;br /&gt;
	(function() {&lt;br /&gt;
		var tabberex_css = document.createElement(&amp;quot;style&amp;quot;);&lt;br /&gt;
		tabberex_css.innerHTML = &amp;quot;/* CSS owned by FANDOM */\n.oo-ui-tabOptionWidget{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;vertical-align:bottom;align-items:center;color:color-mix(in srgb, var(--text-color) 75%, transparent);display:inline-flex;font-size:14px;font-weight:500;height:40px;letter-spacing:.5px;margin:0;padding:0 11px;-webkit-transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s;-moz-transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s;transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s}.oo-ui-tabSelectWidget:not(.oo-ui-tabSelectWidget-framed) .oo-ui-tabOptionWidget{-webkit-transition:color .3s,box-shadow .3s;-moz-transition:color .3s,box-shadow .3s;transition:color .3s,box-shadow .3s;border-bottom:1px solid var(--banner-color)}.oo-ui-tabSelectWidget:not(.oo-ui-tabSelectWidget-framed) .oo-ui-tabOptionWidget.oo-ui-optionWidget-selected{box-shadow:inset 0 -2px 0 0 var(--link-color);color:var(--link-color)}&amp;quot;;&lt;br /&gt;
		document.head.appendChild(tabberex_css);&lt;br /&gt;
	})();&lt;br /&gt;
		&lt;br /&gt;
	window.tabberex_showTab = function(tabber_id, i)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;)&lt;br /&gt;
		.addClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;default&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$($(&amp;quot;.tabberex-body&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;).get()).each(function () {&lt;br /&gt;
            var display_value = $(this).attr(&amp;quot;data-tab-display&amp;quot;);&lt;br /&gt;
            if (display_value === undefined) display_value = &amp;quot;block&amp;quot;;&lt;br /&gt;
            $(this).css(&amp;quot;display&amp;quot;, display_value);&lt;br /&gt;
        });&lt;br /&gt;
	};&lt;br /&gt;
	 &lt;br /&gt;
	window.tabberex_hideTab = function(tabber_id, i)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;)&lt;br /&gt;
		.removeClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$(&amp;quot;.tabberex-body&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;).css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
			&lt;br /&gt;
	window.tabberex_hideAllTabs = function(tabber_id)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children()&lt;br /&gt;
		.removeClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$(&amp;quot;.tabberex-body&amp;quot; + base_selector).children().css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var tabberex_buildTabHead = function(host_div, tabber_id, tab_headers, tab_ex_headers, tab_locations)&lt;br /&gt;
	{&lt;br /&gt;
		var tabber_head = host_div;&lt;br /&gt;
		tabber_head.innerHTML = &amp;quot;&amp;quot;;&lt;br /&gt;
		$(tabber_head).addClass(&amp;quot;tabberex-head oo-ui-widget oo-ui-widget-enabled oo-ui-selectWidget oo-ui-selectWidget-unpressed oo-ui-selectWidget-depressed oo-ui-tabSelectWidget&amp;quot;)&lt;br /&gt;
		.attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
		for (var i = 0; i &amp;lt; tab_headers.length; i++)&lt;br /&gt;
		{&lt;br /&gt;
			console.log(&amp;quot;Building tab &amp;quot; + tabber_id + &amp;quot; &amp;quot; + String(i));&lt;br /&gt;
			var tab = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
			$(tab).addClass(&amp;quot;oo-ui-widget oo-ui-widget-enabled oo-ui-labelElement oo-ui-optionWidget oo-ui-tabOptionWidget&amp;quot;)&lt;br /&gt;
			.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
			if (tab_locations[i] === undefined)&lt;br /&gt;
				$(tab).attr(&amp;quot;onclick&amp;quot;, &amp;quot;tabberex_switchTab(\&amp;quot;&amp;quot; + mw.html.escape(tabber_id) + &amp;quot;\&amp;quot;, &amp;quot; + (i + 1) + &amp;quot;)&amp;quot;);&lt;br /&gt;
			else&lt;br /&gt;
				$(tab).attr(&amp;quot;onclick&amp;quot;, &amp;quot;location = \&amp;quot;&amp;quot; + mw.html.escape(tab_locations[i]) + &amp;quot;\&amp;quot;&amp;quot;);&lt;br /&gt;
			var tab_span = document.createElement(&amp;quot;span&amp;quot;);&lt;br /&gt;
			$(tab_span).addClass(&amp;quot;oo-ui-labelElement-label&amp;quot;);&lt;br /&gt;
			if (tab_ex_headers[i] === undefined)&lt;br /&gt;
				$(tab_span).text(tab_headers[i]);&lt;br /&gt;
			else&lt;br /&gt;
			{&lt;br /&gt;
				console.log(&amp;quot;EX Header present&amp;quot;);&lt;br /&gt;
				for (var attr in tab_ex_headers[i][1])&lt;br /&gt;
					tab_span.setAttribute(attr, tab_ex_headers[i][1][attr]);&lt;br /&gt;
				$(tab_span).html(tab_ex_headers[i][0]);&lt;br /&gt;
			}&lt;br /&gt;
			tab.appendChild(tab_span);&lt;br /&gt;
			tabber_head.appendChild(tab);&lt;br /&gt;
			console.log(&amp;quot;Successfully built tab&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		return tabber_head.outerHTML;&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var process_tabber_head_tab = function(tab_element, i)&lt;br /&gt;
	{&lt;br /&gt;
		// Get header&lt;br /&gt;
		var header = $(tab_element).attr(&amp;quot;data-tab-header&amp;quot;);&lt;br /&gt;
		if (header === undefined) header = i + 1;&lt;br /&gt;
		&lt;br /&gt;
		// Get ex header&lt;br /&gt;
		var ex_header;&lt;br /&gt;
		function get_ex_header(_) {&lt;br /&gt;
			console.log(&#039;EX Header found&#039;);&lt;br /&gt;
			var attributes = {};&lt;br /&gt;
			var attrs = this.getAttributeNames();&lt;br /&gt;
			for (var i in attrs)&lt;br /&gt;
				attributes[attrs[i]] = this.getAttribute(attrs[i]);&lt;br /&gt;
			ex_header = [$(this).html(), attributes];&lt;br /&gt;
			$(this).remove();&lt;br /&gt;
		}&lt;br /&gt;
		$(tab_element).children(&amp;quot;p&amp;quot;).children(&amp;quot;span.tabberex-tab-header&amp;quot;).each(get_ex_header);&lt;br /&gt;
		$(tab_element).children(&amp;quot;span.tabberex-tab-header&amp;quot;).each(get_ex_header);&lt;br /&gt;
		&lt;br /&gt;
		// Get default&lt;br /&gt;
		var is_default = false;&lt;br /&gt;
		if ($(tab_element).hasClass(&amp;quot;tabberex-tab-default&amp;quot;))&lt;br /&gt;
			is_default = true;&lt;br /&gt;
		&lt;br /&gt;
		// Get tab location&lt;br /&gt;
		var tab_location = $(this).attr(&amp;quot;data-tab-location&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		return {&amp;quot;header&amp;quot;: header, &amp;quot;ex_header&amp;quot;: ex_header, &amp;quot;default&amp;quot;: is_default, &amp;quot;location&amp;quot;: tab_location};&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var process_tabbers = function()&lt;br /&gt;
	{&lt;br /&gt;
		console.log(&#039;TabberEX started&#039;);&lt;br /&gt;
		var tabber_i = 0;&lt;br /&gt;
		var default_tabs = {};&lt;br /&gt;
		var tabber_ids = [];&lt;br /&gt;
		// The tabs are iterated through backwards to properly handle tabbers that are nested within other tabbers&lt;br /&gt;
		$($(&amp;quot;.tabberex-head&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			var tab_headers = [];&lt;br /&gt;
			var tab_ex_headers = [];&lt;br /&gt;
			var tab_locations = [];&lt;br /&gt;
			var default_tab = 0;&lt;br /&gt;
				&lt;br /&gt;
			var tabber_id = $(this).attr(&amp;quot;data-tabber-id&amp;quot;);&lt;br /&gt;
			if (tabber_id === undefined) tabber_id = String(tabber_i);&lt;br /&gt;
				&lt;br /&gt;
			$(this).children(&amp;quot;.tabberex-tab&amp;quot;).each(function(i) {&lt;br /&gt;
				console.log(&#039;Processing head tab &#039; + tabber_id + &#039; &#039; + String(i));&lt;br /&gt;
				var tab_details = process_tabber_head_tab(this, i);&lt;br /&gt;
				console.log(&#039;Processing complete&#039;);&lt;br /&gt;
				tab_headers[i] = tab_details.header;&lt;br /&gt;
				tab_ex_headers[i] = tab_details.ex_header;&lt;br /&gt;
				if (tab_details.default)&lt;br /&gt;
					default_tab = i;&lt;br /&gt;
				tab_locations[i] = tab_details.location;&lt;br /&gt;
				$(this).detach();&lt;br /&gt;
			});&lt;br /&gt;
			&lt;br /&gt;
			// Insert tabs into DOM&lt;br /&gt;
			tabberex_buildTabHead(this, tabber_id, tab_headers, tab_ex_headers, tab_locations);&lt;br /&gt;
			if (default_tabs[tabber_id] === undefined)&lt;br /&gt;
				default_tabs[tabber_id] = default_tab;&lt;br /&gt;
			tabber_ids.push(tabber_id);&lt;br /&gt;
			tabber_i++;&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		$($(&amp;quot;.tabberex-body&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			$(this).children().css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		$($(&amp;quot;.tabberex&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			var tab_headers = [];&lt;br /&gt;
			var tab_ex_headers = [];&lt;br /&gt;
			var tab_locations = [];&lt;br /&gt;
			var default_tab = 0;&lt;br /&gt;
			var tab_contents = [];&lt;br /&gt;
			&lt;br /&gt;
			var tabber_id = $(this).attr(&amp;quot;data-tabber-id&amp;quot;);&lt;br /&gt;
			if (tabber_id === undefined) tabber_id = String(tabber_i);&lt;br /&gt;
            $(this).attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
&lt;br /&gt;
            var tabber_head = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
            $(tabber_head).addClass(&amp;quot;tabberex-head&amp;quot;).attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
            $(this).removeClass(&amp;quot;tabberex&amp;quot;).addClass(&amp;quot;tabberex-body&amp;quot;);&lt;br /&gt;
			&lt;br /&gt;
			$(this).children(&amp;quot;.tabberex-tab&amp;quot;).each(function(i) {&lt;br /&gt;
				console.log(&#039;Processing head tab &#039; + tabber_id + &#039; &#039; + String(i));&lt;br /&gt;
				var tab_details = process_tabber_head_tab(this, i);&lt;br /&gt;
				console.log(&#039;Processing complete&#039;);&lt;br /&gt;
				tab_headers[i] = tab_details.header;&lt;br /&gt;
				tab_ex_headers[i] = tab_details.ex_header;&lt;br /&gt;
				if (tab_details.default)&lt;br /&gt;
					default_tab = i;&lt;br /&gt;
				tab_locations[i] = tab_details.location;&lt;br /&gt;
				&lt;br /&gt;
				// Get tab content&lt;br /&gt;
				$(this).css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
				tab_contents[i] = $(this);&lt;br /&gt;
			});&lt;br /&gt;
&lt;br /&gt;
            tabberex_buildTabHead(tabber_head, tabber_id, tab_headers, tab_ex_headers, tab_locations);&lt;br /&gt;
			if (default_tabs[tabber_id] === undefined)&lt;br /&gt;
				default_tabs[tabber_id] = default_tab;&lt;br /&gt;
            $(tabber_head).insertBefore(this);&lt;br /&gt;
			tabber_ids.push(tabber_id);&lt;br /&gt;
			tabber_i++;&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		// Select default tabs&lt;br /&gt;
		for (var i in tabber_ids)&lt;br /&gt;
		{&lt;br /&gt;
			tabberex_showTab(tabber_ids[i], default_tabs[tabber_ids[i]] + 1);&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
 &lt;br /&gt;
	mw.hook(&amp;quot;wikipage.content&amp;quot;).add(process_tabbers);&lt;br /&gt;
}(this, jQuery, mediaWiki));&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * @title           SoundcloudPlayer.js&lt;br /&gt;
 * @version         1.1.2&lt;br /&gt;
 * @description     Add support for soundcloud players&lt;br /&gt;
 * @author          Himmalerin&lt;br /&gt;
 * @license         CC-BY-SA-3.0&lt;br /&gt;
 */&lt;br /&gt;
(function () {&lt;br /&gt;
	// Build the iframe&lt;br /&gt;
	const scPlayer = function (data) {&lt;br /&gt;
		const widget = document.createElement(&#039;iframe&#039;);&lt;br /&gt;
&lt;br /&gt;
		widget.classList.add(&#039;soundcloud-player&#039;);&lt;br /&gt;
&lt;br /&gt;
		widget.src =&lt;br /&gt;
			&#039;https://w.soundcloud.com/player/?show_artwork=false&amp;amp;url=&#039; +&lt;br /&gt;
			encodeURI(data.src);&lt;br /&gt;
&lt;br /&gt;
		// If data-color is set add the value to the iframe&lt;br /&gt;
		if (data.color) widget.src += &#039;&amp;amp;color=&#039; + encodeURIComponent(data.color);&lt;br /&gt;
		// If data-width/height are set add that value to the iframe&lt;br /&gt;
		if (data.width) widget.width = data.width;&lt;br /&gt;
		if (data.height) widget.height = data.height;&lt;br /&gt;
&lt;br /&gt;
		return widget;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	const scParseTags = function ($content) {&lt;br /&gt;
		// Get all instances of the soundcloud class&lt;br /&gt;
		const scTags = $content.find(&#039;.soundcloud&#039;);&lt;br /&gt;
&lt;br /&gt;
		// For each instance of the soundcloud class run scPlayer&lt;br /&gt;
		for (var i = 0; i &amp;lt; scTags.length; i++) {&lt;br /&gt;
			scTags[i].replaceWith(scPlayer(scTags[i].dataset));&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	mw.hook(&#039;wikipage.content&#039;).add(function ($content) {&lt;br /&gt;
		scParseTags($content);&lt;br /&gt;
	});&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
https://dev.fandom.com/wiki/MediaWiki:CopyText/code.js&lt;br /&gt;
 */&lt;br /&gt;
(function () {&lt;br /&gt;
    if (window.CopyTextLoaded) {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    window.CopyTextLoaded = true;&lt;br /&gt;
    mw.hook(&#039;dev.i18n&#039;).add(function (i18n) {&lt;br /&gt;
        i18n.loadMessages(&#039;CopyText&#039;).done(function (i18n) {&lt;br /&gt;
            function showSuccess() {&lt;br /&gt;
                if (window.BannerNotification) {&lt;br /&gt;
                    new BannerNotification(i18n.msg(&#039;success&#039;).escape(), &#039;confirm&#039;, null, 5000).show();&lt;br /&gt;
                } else {&lt;br /&gt;
                    mw.notify(i18n.msg(&#039;success&#039;).plain());&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $(&#039;body&#039;).on(&#039;click&#039;, &#039;.copy-to-clipboard-button&#039;, function(e){&lt;br /&gt;
                var text = $(this).data(&#039;text&#039;),&lt;br /&gt;
                $input = $(&#039;&amp;lt;textarea&amp;gt;&#039;, { type: &#039;text&#039; })&lt;br /&gt;
                    .val($(&#039;.copy-to-clipboard-text&#039;).filter(function() {&lt;br /&gt;
                        return $(this).data(&#039;text&#039;) == text;&lt;br /&gt;
                    }).first().text())&lt;br /&gt;
                    .appendTo(&#039;body&#039;)&lt;br /&gt;
                    .select();&lt;br /&gt;
                var success = document.execCommand(&#039;Copy&#039;);&lt;br /&gt;
                $input.remove();&lt;br /&gt;
                if (success) {&lt;br /&gt;
                    showSuccess();&lt;br /&gt;
                } else {&lt;br /&gt;
                    if (window.navigator &amp;amp;&amp;amp; navigator.clipboard &amp;amp;&amp;amp; navigator.clipboard.writeText) {&lt;br /&gt;
                        navigator.clipboard.writeText(text).then(function() {&lt;br /&gt;
                            showSuccess();&lt;br /&gt;
                        });&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
    importArticle({&lt;br /&gt;
        type: &#039;script&#039;,&lt;br /&gt;
        article: &#039;u:dev:MediaWiki:I18n-js/code.js&#039;&lt;br /&gt;
    });&lt;br /&gt;
})();&lt;br /&gt;
$(function () {&lt;br /&gt;
    $(&#039;.countdown.recurring&#039;).each(function () {&lt;br /&gt;
        var $container = $(this);&lt;br /&gt;
        var timeStr = $container.attr(&#039;data-time&#039;).trim(); // Expected format &amp;quot;HH:MM&amp;quot; or &amp;quot;HH:MM:SS&amp;quot;&lt;br /&gt;
        var $textSpan = $container.find(&#039;.countdown-text&#039;);&lt;br /&gt;
&lt;br /&gt;
        var parts = timeStr.split(&#039;:&#039;);&lt;br /&gt;
        var targetHour = parseInt(parts[0], 10) || 0;&lt;br /&gt;
        var targetMinute = parseInt(parts[1], 10) || 0;&lt;br /&gt;
        var targetSecond = parseInt(parts[2], 10) || 0;&lt;br /&gt;
&lt;br /&gt;
        function updateCountdown() {&lt;br /&gt;
            var now = new Date();&lt;br /&gt;
            &lt;br /&gt;
            // Construct target date for TODAY in UTC&lt;br /&gt;
            var target = new Date(Date.UTC(&lt;br /&gt;
                now.getUTCFullYear(),&lt;br /&gt;
                now.getUTCMonth(),&lt;br /&gt;
                now.getUTCDate(),&lt;br /&gt;
                targetHour,&lt;br /&gt;
                targetMinute,&lt;br /&gt;
                targetSecond&lt;br /&gt;
            ));&lt;br /&gt;
&lt;br /&gt;
            // If target time today has already passed, set target to TOMORROW in UTC&lt;br /&gt;
            if (now.getTime() &amp;gt;= target.getTime()) {&lt;br /&gt;
                target.setUTCDate(target.getUTCDate() + 1);&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            var distance = target.getTime() - now.getTime();&lt;br /&gt;
&lt;br /&gt;
            var hours = Math.floor(distance / (1000 * 60 * 60));&lt;br /&gt;
            var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));&lt;br /&gt;
            var seconds = Math.floor((distance % (1000 * 60)) / 1000);&lt;br /&gt;
&lt;br /&gt;
            // Format double digits (e.g., 05h 02m 09s)&lt;br /&gt;
            var hStr = hours &amp;lt; 10 ? &#039;0&#039; + hours : hours;&lt;br /&gt;
            var mStr = minutes &amp;lt; 10 ? &#039;0&#039; + minutes : minutes;&lt;br /&gt;
            var sStr = seconds &amp;lt; 10 ? &#039;0&#039; + seconds : seconds;&lt;br /&gt;
&lt;br /&gt;
            $textSpan.text(hStr + &#039;h &#039; + mStr + &#039;m &#039; + sStr + &#039;s&#039;);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        updateCountdown();&lt;br /&gt;
        setInterval(updateCountdown, 1000);&lt;br /&gt;
    });&lt;br /&gt;
});&lt;/div&gt;</summary>
		<author><name>Pynappo</name></author>
	</entry>
	<entry>
		<id>https://nbittrpgwiki.pynappo.xyz/index.php?title=Template:Countdown&amp;diff=3101</id>
		<title>Template:Countdown</title>
		<link rel="alternate" type="text/html" href="https://nbittrpgwiki.pynappo.xyz/index.php?title=Template:Countdown&amp;diff=3101"/>
		<updated>2026-09-27T09:25:02Z</updated>

		<summary type="html">&lt;p&gt;Pynappo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
Displays a daily recurring countdown to a specific time in UTC.&lt;br /&gt;
&lt;br /&gt;
=== Usage ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{Countdown&lt;br /&gt;
| time = 15:00&lt;br /&gt;
| event = Daily Server Reset&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Countdown&lt;br /&gt;
| time = 15:00&lt;br /&gt;
| event = Daily Server Reset&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;&amp;lt;span class=&amp;quot;mediawiki-recurring-countdown&amp;quot; data-time=&amp;quot;{{{time|{{{1|00:00}}}}}}&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;countdown-text&amp;quot;&amp;gt;Loading countdown to {{{event|{{{time|{{{1|00:00}}}}}} UTC}}}...&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pynappo</name></author>
	</entry>
	<entry>
		<id>https://nbittrpgwiki.pynappo.xyz/index.php?title=Template:Countdown&amp;diff=3100</id>
		<title>Template:Countdown</title>
		<link rel="alternate" type="text/html" href="https://nbittrpgwiki.pynappo.xyz/index.php?title=Template:Countdown&amp;diff=3100"/>
		<updated>2026-09-27T09:24:55Z</updated>

		<summary type="html">&lt;p&gt;Pynappo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
Displays a daily recurring countdown to a specific time in UTC.&lt;br /&gt;
&lt;br /&gt;
=== Usage ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{Countdown&lt;br /&gt;
| time = 15:00&lt;br /&gt;
| event = Daily Server Reset&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Countdown&lt;br /&gt;
| time = 15:00&lt;br /&gt;
| event = Daily Server Reset&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;&amp;lt;span class=&amp;quot;mediawiki-recurring-countdown&amp;quot; data-time=&amp;quot;{{{time|{{{1|00:00}}}}}}&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;noscript&amp;gt;Daily reset time: {{{time|{{{1|00:00}}}}}} UTC&amp;lt;/noscript&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;countdown-text&amp;quot;&amp;gt;Loading countdown to {{{event|{{{time|{{{1|00:00}}}}}} UTC}}}...&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pynappo</name></author>
	</entry>
	<entry>
		<id>https://nbittrpgwiki.pynappo.xyz/index.php?title=MediaWiki:Common.js&amp;diff=3075</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://nbittrpgwiki.pynappo.xyz/index.php?title=MediaWiki:Common.js&amp;diff=3075"/>
		<updated>2026-09-27T02:04:12Z</updated>

		<summary type="html">&lt;p&gt;Pynappo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/*&lt;br /&gt;
    Template:Spoiler on dev.miraheze.org&lt;br /&gt;
*/&lt;br /&gt;
$(function(){&lt;br /&gt;
    //spoiler block behavior&lt;br /&gt;
	$(&#039;.spoiler&#039;).click(function(){&lt;br /&gt;
		$(this).toggleClass(&#039;off&#039;);&lt;br /&gt;
	});&lt;br /&gt;
	// spoiler button behavior&lt;br /&gt;
    $(&#039;#spoilerbtn&#039;).text(&#039;Show all spoilers&#039;);&lt;br /&gt;
	$(&#039;#spoilerbtn&#039;).click(function(){&lt;br /&gt;
		$(this).toggleClass(&#039;hide&#039;);&lt;br /&gt;
		$(&#039;.spoiler&#039;).toggleClass(&#039;showall&#039;);&lt;br /&gt;
		&lt;br /&gt;
		if ($(this).is(&#039;.hide&#039;)){ $(this).text(&#039;Hide all spoilers&#039;); } &lt;br /&gt;
        else { $(this).text(&#039;Show all spoilers&#039;); }&lt;br /&gt;
	});	&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * TabberEX&lt;br /&gt;
 *&lt;br /&gt;
 * @version 2.3&lt;br /&gt;
 *&lt;br /&gt;
 * @author Jono99 &amp;lt;https://phigros.fandom.com/wiki/User:Jono99&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * documentation and examples at:&lt;br /&gt;
 * &amp;lt;https://dev.fandom.com/wiki/TabberEX&amp;gt;&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
 (function (window, $, mw) {&lt;br /&gt;
	// Function called by tabs to switch tabs&lt;br /&gt;
	window.tabberex_switchTab = function(tabber_id, tab)&lt;br /&gt;
	{&lt;br /&gt;
		tabberex_hideAllTabs(tabber_id);&lt;br /&gt;
		tabberex_showTab(tabber_id, tab);&lt;br /&gt;
	};&lt;br /&gt;
 &lt;br /&gt;
	// Inject CSS&lt;br /&gt;
	(function() {&lt;br /&gt;
		var tabberex_css = document.createElement(&amp;quot;style&amp;quot;);&lt;br /&gt;
		tabberex_css.innerHTML = &amp;quot;/* CSS owned by FANDOM */\n.oo-ui-tabOptionWidget{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;vertical-align:bottom;align-items:center;color:color-mix(in srgb, var(--text-color) 75%, transparent);display:inline-flex;font-size:14px;font-weight:500;height:40px;letter-spacing:.5px;margin:0;padding:0 11px;-webkit-transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s;-moz-transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s;transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s}.oo-ui-tabSelectWidget:not(.oo-ui-tabSelectWidget-framed) .oo-ui-tabOptionWidget{-webkit-transition:color .3s,box-shadow .3s;-moz-transition:color .3s,box-shadow .3s;transition:color .3s,box-shadow .3s;border-bottom:1px solid var(--banner-color)}.oo-ui-tabSelectWidget:not(.oo-ui-tabSelectWidget-framed) .oo-ui-tabOptionWidget.oo-ui-optionWidget-selected{box-shadow:inset 0 -2px 0 0 var(--link-color);color:var(--link-color)}&amp;quot;;&lt;br /&gt;
		document.head.appendChild(tabberex_css);&lt;br /&gt;
	})();&lt;br /&gt;
		&lt;br /&gt;
	window.tabberex_showTab = function(tabber_id, i)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;)&lt;br /&gt;
		.addClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;default&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$($(&amp;quot;.tabberex-body&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;).get()).each(function () {&lt;br /&gt;
            var display_value = $(this).attr(&amp;quot;data-tab-display&amp;quot;);&lt;br /&gt;
            if (display_value === undefined) display_value = &amp;quot;block&amp;quot;;&lt;br /&gt;
            $(this).css(&amp;quot;display&amp;quot;, display_value);&lt;br /&gt;
        });&lt;br /&gt;
	};&lt;br /&gt;
	 &lt;br /&gt;
	window.tabberex_hideTab = function(tabber_id, i)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;)&lt;br /&gt;
		.removeClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$(&amp;quot;.tabberex-body&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;).css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
			&lt;br /&gt;
	window.tabberex_hideAllTabs = function(tabber_id)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children()&lt;br /&gt;
		.removeClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$(&amp;quot;.tabberex-body&amp;quot; + base_selector).children().css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var tabberex_buildTabHead = function(host_div, tabber_id, tab_headers, tab_ex_headers, tab_locations)&lt;br /&gt;
	{&lt;br /&gt;
		var tabber_head = host_div;&lt;br /&gt;
		tabber_head.innerHTML = &amp;quot;&amp;quot;;&lt;br /&gt;
		$(tabber_head).addClass(&amp;quot;tabberex-head oo-ui-widget oo-ui-widget-enabled oo-ui-selectWidget oo-ui-selectWidget-unpressed oo-ui-selectWidget-depressed oo-ui-tabSelectWidget&amp;quot;)&lt;br /&gt;
		.attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
		for (var i = 0; i &amp;lt; tab_headers.length; i++)&lt;br /&gt;
		{&lt;br /&gt;
			console.log(&amp;quot;Building tab &amp;quot; + tabber_id + &amp;quot; &amp;quot; + String(i));&lt;br /&gt;
			var tab = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
			$(tab).addClass(&amp;quot;oo-ui-widget oo-ui-widget-enabled oo-ui-labelElement oo-ui-optionWidget oo-ui-tabOptionWidget&amp;quot;)&lt;br /&gt;
			.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
			if (tab_locations[i] === undefined)&lt;br /&gt;
				$(tab).attr(&amp;quot;onclick&amp;quot;, &amp;quot;tabberex_switchTab(\&amp;quot;&amp;quot; + mw.html.escape(tabber_id) + &amp;quot;\&amp;quot;, &amp;quot; + (i + 1) + &amp;quot;)&amp;quot;);&lt;br /&gt;
			else&lt;br /&gt;
				$(tab).attr(&amp;quot;onclick&amp;quot;, &amp;quot;location = \&amp;quot;&amp;quot; + mw.html.escape(tab_locations[i]) + &amp;quot;\&amp;quot;&amp;quot;);&lt;br /&gt;
			var tab_span = document.createElement(&amp;quot;span&amp;quot;);&lt;br /&gt;
			$(tab_span).addClass(&amp;quot;oo-ui-labelElement-label&amp;quot;);&lt;br /&gt;
			if (tab_ex_headers[i] === undefined)&lt;br /&gt;
				$(tab_span).text(tab_headers[i]);&lt;br /&gt;
			else&lt;br /&gt;
			{&lt;br /&gt;
				console.log(&amp;quot;EX Header present&amp;quot;);&lt;br /&gt;
				for (var attr in tab_ex_headers[i][1])&lt;br /&gt;
					tab_span.setAttribute(attr, tab_ex_headers[i][1][attr]);&lt;br /&gt;
				$(tab_span).html(tab_ex_headers[i][0]);&lt;br /&gt;
			}&lt;br /&gt;
			tab.appendChild(tab_span);&lt;br /&gt;
			tabber_head.appendChild(tab);&lt;br /&gt;
			console.log(&amp;quot;Successfully built tab&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		return tabber_head.outerHTML;&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var process_tabber_head_tab = function(tab_element, i)&lt;br /&gt;
	{&lt;br /&gt;
		// Get header&lt;br /&gt;
		var header = $(tab_element).attr(&amp;quot;data-tab-header&amp;quot;);&lt;br /&gt;
		if (header === undefined) header = i + 1;&lt;br /&gt;
		&lt;br /&gt;
		// Get ex header&lt;br /&gt;
		var ex_header;&lt;br /&gt;
		function get_ex_header(_) {&lt;br /&gt;
			console.log(&#039;EX Header found&#039;);&lt;br /&gt;
			var attributes = {};&lt;br /&gt;
			var attrs = this.getAttributeNames();&lt;br /&gt;
			for (var i in attrs)&lt;br /&gt;
				attributes[attrs[i]] = this.getAttribute(attrs[i]);&lt;br /&gt;
			ex_header = [$(this).html(), attributes];&lt;br /&gt;
			$(this).remove();&lt;br /&gt;
		}&lt;br /&gt;
		$(tab_element).children(&amp;quot;p&amp;quot;).children(&amp;quot;span.tabberex-tab-header&amp;quot;).each(get_ex_header);&lt;br /&gt;
		$(tab_element).children(&amp;quot;span.tabberex-tab-header&amp;quot;).each(get_ex_header);&lt;br /&gt;
		&lt;br /&gt;
		// Get default&lt;br /&gt;
		var is_default = false;&lt;br /&gt;
		if ($(tab_element).hasClass(&amp;quot;tabberex-tab-default&amp;quot;))&lt;br /&gt;
			is_default = true;&lt;br /&gt;
		&lt;br /&gt;
		// Get tab location&lt;br /&gt;
		var tab_location = $(this).attr(&amp;quot;data-tab-location&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		return {&amp;quot;header&amp;quot;: header, &amp;quot;ex_header&amp;quot;: ex_header, &amp;quot;default&amp;quot;: is_default, &amp;quot;location&amp;quot;: tab_location};&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var process_tabbers = function()&lt;br /&gt;
	{&lt;br /&gt;
		console.log(&#039;TabberEX started&#039;);&lt;br /&gt;
		var tabber_i = 0;&lt;br /&gt;
		var default_tabs = {};&lt;br /&gt;
		var tabber_ids = [];&lt;br /&gt;
		// The tabs are iterated through backwards to properly handle tabbers that are nested within other tabbers&lt;br /&gt;
		$($(&amp;quot;.tabberex-head&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			var tab_headers = [];&lt;br /&gt;
			var tab_ex_headers = [];&lt;br /&gt;
			var tab_locations = [];&lt;br /&gt;
			var default_tab = 0;&lt;br /&gt;
				&lt;br /&gt;
			var tabber_id = $(this).attr(&amp;quot;data-tabber-id&amp;quot;);&lt;br /&gt;
			if (tabber_id === undefined) tabber_id = String(tabber_i);&lt;br /&gt;
				&lt;br /&gt;
			$(this).children(&amp;quot;.tabberex-tab&amp;quot;).each(function(i) {&lt;br /&gt;
				console.log(&#039;Processing head tab &#039; + tabber_id + &#039; &#039; + String(i));&lt;br /&gt;
				var tab_details = process_tabber_head_tab(this, i);&lt;br /&gt;
				console.log(&#039;Processing complete&#039;);&lt;br /&gt;
				tab_headers[i] = tab_details.header;&lt;br /&gt;
				tab_ex_headers[i] = tab_details.ex_header;&lt;br /&gt;
				if (tab_details.default)&lt;br /&gt;
					default_tab = i;&lt;br /&gt;
				tab_locations[i] = tab_details.location;&lt;br /&gt;
				$(this).detach();&lt;br /&gt;
			});&lt;br /&gt;
			&lt;br /&gt;
			// Insert tabs into DOM&lt;br /&gt;
			tabberex_buildTabHead(this, tabber_id, tab_headers, tab_ex_headers, tab_locations);&lt;br /&gt;
			if (default_tabs[tabber_id] === undefined)&lt;br /&gt;
				default_tabs[tabber_id] = default_tab;&lt;br /&gt;
			tabber_ids.push(tabber_id);&lt;br /&gt;
			tabber_i++;&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		$($(&amp;quot;.tabberex-body&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			$(this).children().css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		$($(&amp;quot;.tabberex&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			var tab_headers = [];&lt;br /&gt;
			var tab_ex_headers = [];&lt;br /&gt;
			var tab_locations = [];&lt;br /&gt;
			var default_tab = 0;&lt;br /&gt;
			var tab_contents = [];&lt;br /&gt;
			&lt;br /&gt;
			var tabber_id = $(this).attr(&amp;quot;data-tabber-id&amp;quot;);&lt;br /&gt;
			if (tabber_id === undefined) tabber_id = String(tabber_i);&lt;br /&gt;
            $(this).attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
&lt;br /&gt;
            var tabber_head = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
            $(tabber_head).addClass(&amp;quot;tabberex-head&amp;quot;).attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
            $(this).removeClass(&amp;quot;tabberex&amp;quot;).addClass(&amp;quot;tabberex-body&amp;quot;);&lt;br /&gt;
			&lt;br /&gt;
			$(this).children(&amp;quot;.tabberex-tab&amp;quot;).each(function(i) {&lt;br /&gt;
				console.log(&#039;Processing head tab &#039; + tabber_id + &#039; &#039; + String(i));&lt;br /&gt;
				var tab_details = process_tabber_head_tab(this, i);&lt;br /&gt;
				console.log(&#039;Processing complete&#039;);&lt;br /&gt;
				tab_headers[i] = tab_details.header;&lt;br /&gt;
				tab_ex_headers[i] = tab_details.ex_header;&lt;br /&gt;
				if (tab_details.default)&lt;br /&gt;
					default_tab = i;&lt;br /&gt;
				tab_locations[i] = tab_details.location;&lt;br /&gt;
				&lt;br /&gt;
				// Get tab content&lt;br /&gt;
				$(this).css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
				tab_contents[i] = $(this);&lt;br /&gt;
			});&lt;br /&gt;
&lt;br /&gt;
            tabberex_buildTabHead(tabber_head, tabber_id, tab_headers, tab_ex_headers, tab_locations);&lt;br /&gt;
			if (default_tabs[tabber_id] === undefined)&lt;br /&gt;
				default_tabs[tabber_id] = default_tab;&lt;br /&gt;
            $(tabber_head).insertBefore(this);&lt;br /&gt;
			tabber_ids.push(tabber_id);&lt;br /&gt;
			tabber_i++;&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		// Select default tabs&lt;br /&gt;
		for (var i in tabber_ids)&lt;br /&gt;
		{&lt;br /&gt;
			tabberex_showTab(tabber_ids[i], default_tabs[tabber_ids[i]] + 1);&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
 &lt;br /&gt;
	mw.hook(&amp;quot;wikipage.content&amp;quot;).add(process_tabbers);&lt;br /&gt;
}(this, jQuery, mediaWiki));&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * @title           SoundcloudPlayer.js&lt;br /&gt;
 * @version         1.1.2&lt;br /&gt;
 * @description     Add support for soundcloud players&lt;br /&gt;
 * @author          Himmalerin&lt;br /&gt;
 * @license         CC-BY-SA-3.0&lt;br /&gt;
 */&lt;br /&gt;
(function () {&lt;br /&gt;
	// Build the iframe&lt;br /&gt;
	const scPlayer = function (data) {&lt;br /&gt;
		const widget = document.createElement(&#039;iframe&#039;);&lt;br /&gt;
&lt;br /&gt;
		widget.classList.add(&#039;soundcloud-player&#039;);&lt;br /&gt;
&lt;br /&gt;
		widget.src =&lt;br /&gt;
			&#039;https://w.soundcloud.com/player/?show_artwork=false&amp;amp;url=&#039; +&lt;br /&gt;
			encodeURI(data.src);&lt;br /&gt;
&lt;br /&gt;
		// If data-color is set add the value to the iframe&lt;br /&gt;
		if (data.color) widget.src += &#039;&amp;amp;color=&#039; + encodeURIComponent(data.color);&lt;br /&gt;
		// If data-width/height are set add that value to the iframe&lt;br /&gt;
		if (data.width) widget.width = data.width;&lt;br /&gt;
		if (data.height) widget.height = data.height;&lt;br /&gt;
&lt;br /&gt;
		return widget;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	const scParseTags = function ($content) {&lt;br /&gt;
		// Get all instances of the soundcloud class&lt;br /&gt;
		const scTags = $content.find(&#039;.soundcloud&#039;);&lt;br /&gt;
&lt;br /&gt;
		// For each instance of the soundcloud class run scPlayer&lt;br /&gt;
		for (var i = 0; i &amp;lt; scTags.length; i++) {&lt;br /&gt;
			scTags[i].replaceWith(scPlayer(scTags[i].dataset));&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	mw.hook(&#039;wikipage.content&#039;).add(function ($content) {&lt;br /&gt;
		scParseTags($content);&lt;br /&gt;
	});&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
https://dev.fandom.com/wiki/MediaWiki:CopyText/code.js&lt;br /&gt;
 */&lt;br /&gt;
(function () {&lt;br /&gt;
    if (window.CopyTextLoaded) {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    window.CopyTextLoaded = true;&lt;br /&gt;
    mw.hook(&#039;dev.i18n&#039;).add(function (i18n) {&lt;br /&gt;
        i18n.loadMessages(&#039;CopyText&#039;).done(function (i18n) {&lt;br /&gt;
            function showSuccess() {&lt;br /&gt;
                if (window.BannerNotification) {&lt;br /&gt;
                    new BannerNotification(i18n.msg(&#039;success&#039;).escape(), &#039;confirm&#039;, null, 5000).show();&lt;br /&gt;
                } else {&lt;br /&gt;
                    mw.notify(i18n.msg(&#039;success&#039;).plain());&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $(&#039;body&#039;).on(&#039;click&#039;, &#039;.copy-to-clipboard-button&#039;, function(e){&lt;br /&gt;
                var text = $(this).data(&#039;text&#039;),&lt;br /&gt;
                $input = $(&#039;&amp;lt;textarea&amp;gt;&#039;, { type: &#039;text&#039; })&lt;br /&gt;
                    .val($(&#039;.copy-to-clipboard-text&#039;).filter(function() {&lt;br /&gt;
                        return $(this).data(&#039;text&#039;) == text;&lt;br /&gt;
                    }).first().text())&lt;br /&gt;
                    .appendTo(&#039;body&#039;)&lt;br /&gt;
                    .select();&lt;br /&gt;
                var success = document.execCommand(&#039;Copy&#039;);&lt;br /&gt;
                $input.remove();&lt;br /&gt;
                if (success) {&lt;br /&gt;
                    showSuccess();&lt;br /&gt;
                } else {&lt;br /&gt;
                    if (window.navigator &amp;amp;&amp;amp; navigator.clipboard &amp;amp;&amp;amp; navigator.clipboard.writeText) {&lt;br /&gt;
                        navigator.clipboard.writeText(text).then(function() {&lt;br /&gt;
                            showSuccess();&lt;br /&gt;
                        });&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
    importArticle({&lt;br /&gt;
        type: &#039;script&#039;,&lt;br /&gt;
        article: &#039;u:dev:MediaWiki:I18n-js/code.js&#039;&lt;br /&gt;
    });&lt;br /&gt;
})();&lt;br /&gt;
$(function () {&lt;br /&gt;
    $(&#039;.countdown&#039;).each(function () {&lt;br /&gt;
        var $container = $(this);&lt;br /&gt;
        var targetDateStr = $container.attr(&#039;data-date&#039;);&lt;br /&gt;
        var completeText = $container.attr(&#039;data-complete&#039;);&lt;br /&gt;
        var $textSpan = $container.find(&#039;.countdown-text&#039;);&lt;br /&gt;
&lt;br /&gt;
        var targetDate = new Date(targetDateStr).getTime();&lt;br /&gt;
&lt;br /&gt;
        if (isNaN(targetDate)) {&lt;br /&gt;
            $textSpan.text(&#039;Invalid date format&#039;);&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        var timer = setInterval(function () {&lt;br /&gt;
            var now = new Date().getTime();&lt;br /&gt;
            var distance = targetDate - now;&lt;br /&gt;
&lt;br /&gt;
            if (distance &amp;lt; 0) {&lt;br /&gt;
                clearInterval(timer);&lt;br /&gt;
                $textSpan.text(completeText);&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            var days = Math.floor(distance / (1000 * 60 * 60 * 24));&lt;br /&gt;
            var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));&lt;br /&gt;
            var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));&lt;br /&gt;
            var seconds = Math.floor((distance % (1000 * 60)) / 1000);&lt;br /&gt;
&lt;br /&gt;
            var output = &#039;&#039;;&lt;br /&gt;
            if (days &amp;gt; 0) output += days + &#039;d &#039;;&lt;br /&gt;
            output += hours + &#039;h &#039; + minutes + &#039;m &#039; + seconds + &#039;s&#039;;&lt;br /&gt;
&lt;br /&gt;
            $textSpan.text(output);&lt;br /&gt;
        }, 1000);&lt;br /&gt;
    });&lt;br /&gt;
});&lt;/div&gt;</summary>
		<author><name>Pynappo</name></author>
	</entry>
	<entry>
		<id>https://nbittrpgwiki.pynappo.xyz/index.php?title=Template:Countdown&amp;diff=3029</id>
		<title>Template:Countdown</title>
		<link rel="alternate" type="text/html" href="https://nbittrpgwiki.pynappo.xyz/index.php?title=Template:Countdown&amp;diff=3029"/>
		<updated>2026-09-25T23:34:36Z</updated>

		<summary type="html">&lt;p&gt;Pynappo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
This template displays a dynamic countdown timer to a specified date and time.&lt;br /&gt;
&lt;br /&gt;
=== Usage ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{Countdown&lt;br /&gt;
| date = December 31, 2026 23:59:59 UTC&lt;br /&gt;
| event = New Year&#039;s Eve&lt;br /&gt;
| complete = Happy New Year!&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Countdown&lt;br /&gt;
| date = December 31, 2026 23:59:59 UTC&lt;br /&gt;
| event = New Year&#039;s Eve&lt;br /&gt;
| complete = Happy New Year!&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;countdown&amp;quot; data-date=&amp;quot;{{#time:c|{{{date|{{{1|}}}}}}}}&amp;quot; data-complete=&amp;quot;{{{complete|Event has started!}}}&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;span class=&amp;quot;countdown-text&amp;quot;&amp;gt;Countdown to {{{event|{{{date|{{{1|}}}}}}}}}...&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pynappo</name></author>
	</entry>
	<entry>
		<id>https://nbittrpgwiki.pynappo.xyz/index.php?title=Template:Countdown&amp;diff=3028</id>
		<title>Template:Countdown</title>
		<link rel="alternate" type="text/html" href="https://nbittrpgwiki.pynappo.xyz/index.php?title=Template:Countdown&amp;diff=3028"/>
		<updated>2026-09-25T23:29:46Z</updated>

		<summary type="html">&lt;p&gt;Pynappo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
This template displays a dynamic countdown timer to a specified date and time.&lt;br /&gt;
&lt;br /&gt;
=== Usage ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{Countdown&lt;br /&gt;
| date = December 31, 2026 23:59:59 UTC&lt;br /&gt;
| event = New Year&#039;s Eve&lt;br /&gt;
| complete = Happy New Year!&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Countdown&lt;br /&gt;
| date = December 31, 2026 23:59:59 UTC&lt;br /&gt;
| event = New Year&#039;s Eve&lt;br /&gt;
| complete = Happy New Year!&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;countdown&amp;quot; data-date=&amp;quot;{{#time:c|{{{date|{{{1|}}}}}}}}&amp;quot; data-complete=&amp;quot;{{{complete|Event has started!}}}&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;noscript&amp;gt;Countdown target: {{{date|{{{1|}}}}}}&amp;lt;/noscript&amp;gt;&lt;br /&gt;
	&amp;lt;span class=&amp;quot;countdown-text&amp;quot;&amp;gt;Loading countdown to {{{event|{{{date|{{{1|}}}}}}}}}...&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pynappo</name></author>
	</entry>
	<entry>
		<id>https://nbittrpgwiki.pynappo.xyz/index.php?title=Template:Countdown&amp;diff=3027</id>
		<title>Template:Countdown</title>
		<link rel="alternate" type="text/html" href="https://nbittrpgwiki.pynappo.xyz/index.php?title=Template:Countdown&amp;diff=3027"/>
		<updated>2026-09-25T23:29:23Z</updated>

		<summary type="html">&lt;p&gt;Pynappo: Created page with &amp;quot;&amp;lt;noinclude&amp;gt; This template displays a dynamic countdown timer to a specified date and time.  === Usage === &amp;lt;pre&amp;gt; {{Countdown | date = December 31, 2026 23:59:59 UTC | event = New Year&amp;#039;s Eve | complete = Happy New Year! }} &amp;lt;/pre&amp;gt; &amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt; &amp;lt;div class=&amp;quot;countdown&amp;quot; data-date=&amp;quot;{{#time:c|{{{date|{{{1|}}}}}}}}&amp;quot; data-complete=&amp;quot;{{{complete|Event has started!}}}&amp;quot;&amp;gt; 	&amp;lt;noscript&amp;gt;Countdown target: {{{date|{{{1|}}}}}}&amp;lt;/noscript&amp;gt; 	&amp;lt;span class=&amp;quot;countdown-text&amp;quot;&amp;gt;Loading count...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
This template displays a dynamic countdown timer to a specified date and time.&lt;br /&gt;
&lt;br /&gt;
=== Usage ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{Countdown&lt;br /&gt;
| date = December 31, 2026 23:59:59 UTC&lt;br /&gt;
| event = New Year&#039;s Eve&lt;br /&gt;
| complete = Happy New Year!&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;countdown&amp;quot; data-date=&amp;quot;{{#time:c|{{{date|{{{1|}}}}}}}}&amp;quot; data-complete=&amp;quot;{{{complete|Event has started!}}}&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;noscript&amp;gt;Countdown target: {{{date|{{{1|}}}}}}&amp;lt;/noscript&amp;gt;&lt;br /&gt;
	&amp;lt;span class=&amp;quot;countdown-text&amp;quot;&amp;gt;Loading countdown to {{{event|{{{date|{{{1|}}}}}}}}}...&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pynappo</name></author>
	</entry>
	<entry>
		<id>https://nbittrpgwiki.pynappo.xyz/index.php?title=User:Pynappo&amp;diff=3026</id>
		<title>User:Pynappo</title>
		<link rel="alternate" type="text/html" href="https://nbittrpgwiki.pynappo.xyz/index.php?title=User:Pynappo&amp;diff=3026"/>
		<updated>2026-09-25T23:21:10Z</updated>

		<summary type="html">&lt;p&gt;Pynappo: Blanked the page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Pynappo</name></author>
	</entry>
	<entry>
		<id>https://nbittrpgwiki.pynappo.xyz/index.php?title=MediaWiki:Common.js&amp;diff=3025</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://nbittrpgwiki.pynappo.xyz/index.php?title=MediaWiki:Common.js&amp;diff=3025"/>
		<updated>2026-09-25T20:44:56Z</updated>

		<summary type="html">&lt;p&gt;Pynappo: Reverted edits by Pynappo (talk) to last revision by CStatic&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/*&lt;br /&gt;
    Template:Spoiler on dev.miraheze.org&lt;br /&gt;
*/&lt;br /&gt;
$(function(){&lt;br /&gt;
    //spoiler block behavior&lt;br /&gt;
	$(&#039;.spoiler&#039;).click(function(){&lt;br /&gt;
		$(this).toggleClass(&#039;off&#039;);&lt;br /&gt;
	});&lt;br /&gt;
	// spoiler button behavior&lt;br /&gt;
    $(&#039;#spoilerbtn&#039;).text(&#039;Show all spoilers&#039;);&lt;br /&gt;
	$(&#039;#spoilerbtn&#039;).click(function(){&lt;br /&gt;
		$(this).toggleClass(&#039;hide&#039;);&lt;br /&gt;
		$(&#039;.spoiler&#039;).toggleClass(&#039;showall&#039;);&lt;br /&gt;
		&lt;br /&gt;
		if ($(this).is(&#039;.hide&#039;)){ $(this).text(&#039;Hide all spoilers&#039;); } &lt;br /&gt;
        else { $(this).text(&#039;Show all spoilers&#039;); }&lt;br /&gt;
	});	&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * TabberEX&lt;br /&gt;
 *&lt;br /&gt;
 * @version 2.3&lt;br /&gt;
 *&lt;br /&gt;
 * @author Jono99 &amp;lt;https://phigros.fandom.com/wiki/User:Jono99&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * documentation and examples at:&lt;br /&gt;
 * &amp;lt;https://dev.fandom.com/wiki/TabberEX&amp;gt;&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
 (function (window, $, mw) {&lt;br /&gt;
	// Function called by tabs to switch tabs&lt;br /&gt;
	window.tabberex_switchTab = function(tabber_id, tab)&lt;br /&gt;
	{&lt;br /&gt;
		tabberex_hideAllTabs(tabber_id);&lt;br /&gt;
		tabberex_showTab(tabber_id, tab);&lt;br /&gt;
	};&lt;br /&gt;
 &lt;br /&gt;
	// Inject CSS&lt;br /&gt;
	(function() {&lt;br /&gt;
		var tabberex_css = document.createElement(&amp;quot;style&amp;quot;);&lt;br /&gt;
		tabberex_css.innerHTML = &amp;quot;/* CSS owned by FANDOM */\n.oo-ui-tabOptionWidget{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;vertical-align:bottom;align-items:center;color:color-mix(in srgb, var(--text-color) 75%, transparent);display:inline-flex;font-size:14px;font-weight:500;height:40px;letter-spacing:.5px;margin:0;padding:0 11px;-webkit-transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s;-moz-transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s;transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s}.oo-ui-tabSelectWidget:not(.oo-ui-tabSelectWidget-framed) .oo-ui-tabOptionWidget{-webkit-transition:color .3s,box-shadow .3s;-moz-transition:color .3s,box-shadow .3s;transition:color .3s,box-shadow .3s;border-bottom:1px solid var(--banner-color)}.oo-ui-tabSelectWidget:not(.oo-ui-tabSelectWidget-framed) .oo-ui-tabOptionWidget.oo-ui-optionWidget-selected{box-shadow:inset 0 -2px 0 0 var(--link-color);color:var(--link-color)}&amp;quot;;&lt;br /&gt;
		document.head.appendChild(tabberex_css);&lt;br /&gt;
	})();&lt;br /&gt;
		&lt;br /&gt;
	window.tabberex_showTab = function(tabber_id, i)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;)&lt;br /&gt;
		.addClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;default&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$($(&amp;quot;.tabberex-body&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;).get()).each(function () {&lt;br /&gt;
            var display_value = $(this).attr(&amp;quot;data-tab-display&amp;quot;);&lt;br /&gt;
            if (display_value === undefined) display_value = &amp;quot;block&amp;quot;;&lt;br /&gt;
            $(this).css(&amp;quot;display&amp;quot;, display_value);&lt;br /&gt;
        });&lt;br /&gt;
	};&lt;br /&gt;
	 &lt;br /&gt;
	window.tabberex_hideTab = function(tabber_id, i)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;)&lt;br /&gt;
		.removeClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$(&amp;quot;.tabberex-body&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;).css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
			&lt;br /&gt;
	window.tabberex_hideAllTabs = function(tabber_id)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children()&lt;br /&gt;
		.removeClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$(&amp;quot;.tabberex-body&amp;quot; + base_selector).children().css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var tabberex_buildTabHead = function(host_div, tabber_id, tab_headers, tab_ex_headers, tab_locations)&lt;br /&gt;
	{&lt;br /&gt;
		var tabber_head = host_div;&lt;br /&gt;
		tabber_head.innerHTML = &amp;quot;&amp;quot;;&lt;br /&gt;
		$(tabber_head).addClass(&amp;quot;tabberex-head oo-ui-widget oo-ui-widget-enabled oo-ui-selectWidget oo-ui-selectWidget-unpressed oo-ui-selectWidget-depressed oo-ui-tabSelectWidget&amp;quot;)&lt;br /&gt;
		.attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
		for (var i = 0; i &amp;lt; tab_headers.length; i++)&lt;br /&gt;
		{&lt;br /&gt;
			console.log(&amp;quot;Building tab &amp;quot; + tabber_id + &amp;quot; &amp;quot; + String(i));&lt;br /&gt;
			var tab = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
			$(tab).addClass(&amp;quot;oo-ui-widget oo-ui-widget-enabled oo-ui-labelElement oo-ui-optionWidget oo-ui-tabOptionWidget&amp;quot;)&lt;br /&gt;
			.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
			if (tab_locations[i] === undefined)&lt;br /&gt;
				$(tab).attr(&amp;quot;onclick&amp;quot;, &amp;quot;tabberex_switchTab(\&amp;quot;&amp;quot; + mw.html.escape(tabber_id) + &amp;quot;\&amp;quot;, &amp;quot; + (i + 1) + &amp;quot;)&amp;quot;);&lt;br /&gt;
			else&lt;br /&gt;
				$(tab).attr(&amp;quot;onclick&amp;quot;, &amp;quot;location = \&amp;quot;&amp;quot; + mw.html.escape(tab_locations[i]) + &amp;quot;\&amp;quot;&amp;quot;);&lt;br /&gt;
			var tab_span = document.createElement(&amp;quot;span&amp;quot;);&lt;br /&gt;
			$(tab_span).addClass(&amp;quot;oo-ui-labelElement-label&amp;quot;);&lt;br /&gt;
			if (tab_ex_headers[i] === undefined)&lt;br /&gt;
				$(tab_span).text(tab_headers[i]);&lt;br /&gt;
			else&lt;br /&gt;
			{&lt;br /&gt;
				console.log(&amp;quot;EX Header present&amp;quot;);&lt;br /&gt;
				for (var attr in tab_ex_headers[i][1])&lt;br /&gt;
					tab_span.setAttribute(attr, tab_ex_headers[i][1][attr]);&lt;br /&gt;
				$(tab_span).html(tab_ex_headers[i][0]);&lt;br /&gt;
			}&lt;br /&gt;
			tab.appendChild(tab_span);&lt;br /&gt;
			tabber_head.appendChild(tab);&lt;br /&gt;
			console.log(&amp;quot;Successfully built tab&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		return tabber_head.outerHTML;&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var process_tabber_head_tab = function(tab_element, i)&lt;br /&gt;
	{&lt;br /&gt;
		// Get header&lt;br /&gt;
		var header = $(tab_element).attr(&amp;quot;data-tab-header&amp;quot;);&lt;br /&gt;
		if (header === undefined) header = i + 1;&lt;br /&gt;
		&lt;br /&gt;
		// Get ex header&lt;br /&gt;
		var ex_header;&lt;br /&gt;
		function get_ex_header(_) {&lt;br /&gt;
			console.log(&#039;EX Header found&#039;);&lt;br /&gt;
			var attributes = {};&lt;br /&gt;
			var attrs = this.getAttributeNames();&lt;br /&gt;
			for (var i in attrs)&lt;br /&gt;
				attributes[attrs[i]] = this.getAttribute(attrs[i]);&lt;br /&gt;
			ex_header = [$(this).html(), attributes];&lt;br /&gt;
			$(this).remove();&lt;br /&gt;
		}&lt;br /&gt;
		$(tab_element).children(&amp;quot;p&amp;quot;).children(&amp;quot;span.tabberex-tab-header&amp;quot;).each(get_ex_header);&lt;br /&gt;
		$(tab_element).children(&amp;quot;span.tabberex-tab-header&amp;quot;).each(get_ex_header);&lt;br /&gt;
		&lt;br /&gt;
		// Get default&lt;br /&gt;
		var is_default = false;&lt;br /&gt;
		if ($(tab_element).hasClass(&amp;quot;tabberex-tab-default&amp;quot;))&lt;br /&gt;
			is_default = true;&lt;br /&gt;
		&lt;br /&gt;
		// Get tab location&lt;br /&gt;
		var tab_location = $(this).attr(&amp;quot;data-tab-location&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		return {&amp;quot;header&amp;quot;: header, &amp;quot;ex_header&amp;quot;: ex_header, &amp;quot;default&amp;quot;: is_default, &amp;quot;location&amp;quot;: tab_location};&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var process_tabbers = function()&lt;br /&gt;
	{&lt;br /&gt;
		console.log(&#039;TabberEX started&#039;);&lt;br /&gt;
		var tabber_i = 0;&lt;br /&gt;
		var default_tabs = {};&lt;br /&gt;
		var tabber_ids = [];&lt;br /&gt;
		// The tabs are iterated through backwards to properly handle tabbers that are nested within other tabbers&lt;br /&gt;
		$($(&amp;quot;.tabberex-head&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			var tab_headers = [];&lt;br /&gt;
			var tab_ex_headers = [];&lt;br /&gt;
			var tab_locations = [];&lt;br /&gt;
			var default_tab = 0;&lt;br /&gt;
				&lt;br /&gt;
			var tabber_id = $(this).attr(&amp;quot;data-tabber-id&amp;quot;);&lt;br /&gt;
			if (tabber_id === undefined) tabber_id = String(tabber_i);&lt;br /&gt;
				&lt;br /&gt;
			$(this).children(&amp;quot;.tabberex-tab&amp;quot;).each(function(i) {&lt;br /&gt;
				console.log(&#039;Processing head tab &#039; + tabber_id + &#039; &#039; + String(i));&lt;br /&gt;
				var tab_details = process_tabber_head_tab(this, i);&lt;br /&gt;
				console.log(&#039;Processing complete&#039;);&lt;br /&gt;
				tab_headers[i] = tab_details.header;&lt;br /&gt;
				tab_ex_headers[i] = tab_details.ex_header;&lt;br /&gt;
				if (tab_details.default)&lt;br /&gt;
					default_tab = i;&lt;br /&gt;
				tab_locations[i] = tab_details.location;&lt;br /&gt;
				$(this).detach();&lt;br /&gt;
			});&lt;br /&gt;
			&lt;br /&gt;
			// Insert tabs into DOM&lt;br /&gt;
			tabberex_buildTabHead(this, tabber_id, tab_headers, tab_ex_headers, tab_locations);&lt;br /&gt;
			if (default_tabs[tabber_id] === undefined)&lt;br /&gt;
				default_tabs[tabber_id] = default_tab;&lt;br /&gt;
			tabber_ids.push(tabber_id);&lt;br /&gt;
			tabber_i++;&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		$($(&amp;quot;.tabberex-body&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			$(this).children().css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		$($(&amp;quot;.tabberex&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			var tab_headers = [];&lt;br /&gt;
			var tab_ex_headers = [];&lt;br /&gt;
			var tab_locations = [];&lt;br /&gt;
			var default_tab = 0;&lt;br /&gt;
			var tab_contents = [];&lt;br /&gt;
			&lt;br /&gt;
			var tabber_id = $(this).attr(&amp;quot;data-tabber-id&amp;quot;);&lt;br /&gt;
			if (tabber_id === undefined) tabber_id = String(tabber_i);&lt;br /&gt;
            $(this).attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
&lt;br /&gt;
            var tabber_head = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
            $(tabber_head).addClass(&amp;quot;tabberex-head&amp;quot;).attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
            $(this).removeClass(&amp;quot;tabberex&amp;quot;).addClass(&amp;quot;tabberex-body&amp;quot;);&lt;br /&gt;
			&lt;br /&gt;
			$(this).children(&amp;quot;.tabberex-tab&amp;quot;).each(function(i) {&lt;br /&gt;
				console.log(&#039;Processing head tab &#039; + tabber_id + &#039; &#039; + String(i));&lt;br /&gt;
				var tab_details = process_tabber_head_tab(this, i);&lt;br /&gt;
				console.log(&#039;Processing complete&#039;);&lt;br /&gt;
				tab_headers[i] = tab_details.header;&lt;br /&gt;
				tab_ex_headers[i] = tab_details.ex_header;&lt;br /&gt;
				if (tab_details.default)&lt;br /&gt;
					default_tab = i;&lt;br /&gt;
				tab_locations[i] = tab_details.location;&lt;br /&gt;
				&lt;br /&gt;
				// Get tab content&lt;br /&gt;
				$(this).css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
				tab_contents[i] = $(this);&lt;br /&gt;
			});&lt;br /&gt;
&lt;br /&gt;
            tabberex_buildTabHead(tabber_head, tabber_id, tab_headers, tab_ex_headers, tab_locations);&lt;br /&gt;
			if (default_tabs[tabber_id] === undefined)&lt;br /&gt;
				default_tabs[tabber_id] = default_tab;&lt;br /&gt;
            $(tabber_head).insertBefore(this);&lt;br /&gt;
			tabber_ids.push(tabber_id);&lt;br /&gt;
			tabber_i++;&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		// Select default tabs&lt;br /&gt;
		for (var i in tabber_ids)&lt;br /&gt;
		{&lt;br /&gt;
			tabberex_showTab(tabber_ids[i], default_tabs[tabber_ids[i]] + 1);&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
 &lt;br /&gt;
	mw.hook(&amp;quot;wikipage.content&amp;quot;).add(process_tabbers);&lt;br /&gt;
}(this, jQuery, mediaWiki));&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * @title           SoundcloudPlayer.js&lt;br /&gt;
 * @version         1.1.2&lt;br /&gt;
 * @description     Add support for soundcloud players&lt;br /&gt;
 * @author          Himmalerin&lt;br /&gt;
 * @license         CC-BY-SA-3.0&lt;br /&gt;
 */&lt;br /&gt;
(function () {&lt;br /&gt;
	// Build the iframe&lt;br /&gt;
	const scPlayer = function (data) {&lt;br /&gt;
		const widget = document.createElement(&#039;iframe&#039;);&lt;br /&gt;
&lt;br /&gt;
		widget.classList.add(&#039;soundcloud-player&#039;);&lt;br /&gt;
&lt;br /&gt;
		widget.src =&lt;br /&gt;
			&#039;https://w.soundcloud.com/player/?show_artwork=false&amp;amp;url=&#039; +&lt;br /&gt;
			encodeURI(data.src);&lt;br /&gt;
&lt;br /&gt;
		// If data-color is set add the value to the iframe&lt;br /&gt;
		if (data.color) widget.src += &#039;&amp;amp;color=&#039; + encodeURIComponent(data.color);&lt;br /&gt;
		// If data-width/height are set add that value to the iframe&lt;br /&gt;
		if (data.width) widget.width = data.width;&lt;br /&gt;
		if (data.height) widget.height = data.height;&lt;br /&gt;
&lt;br /&gt;
		return widget;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	const scParseTags = function ($content) {&lt;br /&gt;
		// Get all instances of the soundcloud class&lt;br /&gt;
		const scTags = $content.find(&#039;.soundcloud&#039;);&lt;br /&gt;
&lt;br /&gt;
		// For each instance of the soundcloud class run scPlayer&lt;br /&gt;
		for (var i = 0; i &amp;lt; scTags.length; i++) {&lt;br /&gt;
			scTags[i].replaceWith(scPlayer(scTags[i].dataset));&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	mw.hook(&#039;wikipage.content&#039;).add(function ($content) {&lt;br /&gt;
		scParseTags($content);&lt;br /&gt;
	});&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
https://dev.fandom.com/wiki/MediaWiki:CopyText/code.js&lt;br /&gt;
 */&lt;br /&gt;
(function () {&lt;br /&gt;
    if (window.CopyTextLoaded) {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    window.CopyTextLoaded = true;&lt;br /&gt;
    mw.hook(&#039;dev.i18n&#039;).add(function (i18n) {&lt;br /&gt;
        i18n.loadMessages(&#039;CopyText&#039;).done(function (i18n) {&lt;br /&gt;
            function showSuccess() {&lt;br /&gt;
                if (window.BannerNotification) {&lt;br /&gt;
                    new BannerNotification(i18n.msg(&#039;success&#039;).escape(), &#039;confirm&#039;, null, 5000).show();&lt;br /&gt;
                } else {&lt;br /&gt;
                    mw.notify(i18n.msg(&#039;success&#039;).plain());&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $(&#039;body&#039;).on(&#039;click&#039;, &#039;.copy-to-clipboard-button&#039;, function(e){&lt;br /&gt;
                var text = $(this).data(&#039;text&#039;),&lt;br /&gt;
                $input = $(&#039;&amp;lt;textarea&amp;gt;&#039;, { type: &#039;text&#039; })&lt;br /&gt;
                    .val($(&#039;.copy-to-clipboard-text&#039;).filter(function() {&lt;br /&gt;
                        return $(this).data(&#039;text&#039;) == text;&lt;br /&gt;
                    }).first().text())&lt;br /&gt;
                    .appendTo(&#039;body&#039;)&lt;br /&gt;
                    .select();&lt;br /&gt;
                var success = document.execCommand(&#039;Copy&#039;);&lt;br /&gt;
                $input.remove();&lt;br /&gt;
                if (success) {&lt;br /&gt;
                    showSuccess();&lt;br /&gt;
                } else {&lt;br /&gt;
                    if (window.navigator &amp;amp;&amp;amp; navigator.clipboard &amp;amp;&amp;amp; navigator.clipboard.writeText) {&lt;br /&gt;
                        navigator.clipboard.writeText(text).then(function() {&lt;br /&gt;
                            showSuccess();&lt;br /&gt;
                        });&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
    importArticle({&lt;br /&gt;
        type: &#039;script&#039;,&lt;br /&gt;
        article: &#039;u:dev:MediaWiki:I18n-js/code.js&#039;&lt;br /&gt;
    });&lt;br /&gt;
})();&lt;/div&gt;</summary>
		<author><name>Pynappo</name></author>
	</entry>
	<entry>
		<id>https://nbittrpgwiki.pynappo.xyz/index.php?title=MediaWiki:Common.js&amp;diff=3023</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://nbittrpgwiki.pynappo.xyz/index.php?title=MediaWiki:Common.js&amp;diff=3023"/>
		<updated>2026-09-25T12:38:49Z</updated>

		<summary type="html">&lt;p&gt;Pynappo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/*&lt;br /&gt;
    Template:Spoiler on dev.miraheze.org&lt;br /&gt;
*/&lt;br /&gt;
$(function(){&lt;br /&gt;
    //spoiler block behavior&lt;br /&gt;
	$(&#039;.spoiler&#039;).click(function(){&lt;br /&gt;
		$(this).toggleClass(&#039;off&#039;);&lt;br /&gt;
	});&lt;br /&gt;
	// spoiler button behavior&lt;br /&gt;
    $(&#039;#spoilerbtn&#039;).text(&#039;Show all spoilers&#039;);&lt;br /&gt;
	$(&#039;#spoilerbtn&#039;).click(function(){&lt;br /&gt;
		$(this).toggleClass(&#039;hide&#039;);&lt;br /&gt;
		$(&#039;.spoiler&#039;).toggleClass(&#039;showall&#039;);&lt;br /&gt;
		&lt;br /&gt;
		if ($(this).is(&#039;.hide&#039;)){ $(this).text(&#039;Hide all spoilers&#039;); } &lt;br /&gt;
        else { $(this).text(&#039;Show all spoilers&#039;); }&lt;br /&gt;
	});	&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * TabberEX&lt;br /&gt;
 *&lt;br /&gt;
 * @version 2.3&lt;br /&gt;
 *&lt;br /&gt;
 * @author Jono99 &amp;lt;https://phigros.fandom.com/wiki/User:Jono99&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * documentation and examples at:&lt;br /&gt;
 * &amp;lt;https://dev.fandom.com/wiki/TabberEX&amp;gt;&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
 (function (window, $, mw) {&lt;br /&gt;
	// Function called by tabs to switch tabs&lt;br /&gt;
	window.tabberex_switchTab = function(tabber_id, tab)&lt;br /&gt;
	{&lt;br /&gt;
		tabberex_hideAllTabs(tabber_id);&lt;br /&gt;
		tabberex_showTab(tabber_id, tab);&lt;br /&gt;
	};&lt;br /&gt;
 &lt;br /&gt;
	// Inject CSS&lt;br /&gt;
	(function() {&lt;br /&gt;
		var tabberex_css = document.createElement(&amp;quot;style&amp;quot;);&lt;br /&gt;
		tabberex_css.innerHTML = &amp;quot;/* CSS owned by FANDOM */\n.oo-ui-tabOptionWidget{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;vertical-align:bottom;align-items:center;color:color-mix(in srgb, var(--text-color) 75%, transparent);display:inline-flex;font-size:14px;font-weight:500;height:40px;letter-spacing:.5px;margin:0;padding:0 11px;-webkit-transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s;-moz-transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s;transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s}.oo-ui-tabSelectWidget:not(.oo-ui-tabSelectWidget-framed) .oo-ui-tabOptionWidget{-webkit-transition:color .3s,box-shadow .3s;-moz-transition:color .3s,box-shadow .3s;transition:color .3s,box-shadow .3s;border-bottom:1px solid var(--banner-color)}.oo-ui-tabSelectWidget:not(.oo-ui-tabSelectWidget-framed) .oo-ui-tabOptionWidget.oo-ui-optionWidget-selected{box-shadow:inset 0 -2px 0 0 var(--link-color);color:var(--link-color)}&amp;quot;;&lt;br /&gt;
		document.head.appendChild(tabberex_css);&lt;br /&gt;
	})();&lt;br /&gt;
		&lt;br /&gt;
	window.tabberex_showTab = function(tabber_id, i)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;)&lt;br /&gt;
		.addClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;default&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$($(&amp;quot;.tabberex-body&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;).get()).each(function () {&lt;br /&gt;
            var display_value = $(this).attr(&amp;quot;data-tab-display&amp;quot;);&lt;br /&gt;
            if (display_value === undefined) display_value = &amp;quot;block&amp;quot;;&lt;br /&gt;
            $(this).css(&amp;quot;display&amp;quot;, display_value);&lt;br /&gt;
        });&lt;br /&gt;
	};&lt;br /&gt;
	 &lt;br /&gt;
	window.tabberex_hideTab = function(tabber_id, i)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;)&lt;br /&gt;
		.removeClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$(&amp;quot;.tabberex-body&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;).css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
			&lt;br /&gt;
	window.tabberex_hideAllTabs = function(tabber_id)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children()&lt;br /&gt;
		.removeClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$(&amp;quot;.tabberex-body&amp;quot; + base_selector).children().css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var tabberex_buildTabHead = function(host_div, tabber_id, tab_headers, tab_ex_headers, tab_locations)&lt;br /&gt;
	{&lt;br /&gt;
		var tabber_head = host_div;&lt;br /&gt;
		tabber_head.innerHTML = &amp;quot;&amp;quot;;&lt;br /&gt;
		$(tabber_head).addClass(&amp;quot;tabberex-head oo-ui-widget oo-ui-widget-enabled oo-ui-selectWidget oo-ui-selectWidget-unpressed oo-ui-selectWidget-depressed oo-ui-tabSelectWidget&amp;quot;)&lt;br /&gt;
		.attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
		for (var i = 0; i &amp;lt; tab_headers.length; i++)&lt;br /&gt;
		{&lt;br /&gt;
			console.log(&amp;quot;Building tab &amp;quot; + tabber_id + &amp;quot; &amp;quot; + String(i));&lt;br /&gt;
			var tab = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
			$(tab).addClass(&amp;quot;oo-ui-widget oo-ui-widget-enabled oo-ui-labelElement oo-ui-optionWidget oo-ui-tabOptionWidget&amp;quot;)&lt;br /&gt;
			.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
			if (tab_locations[i] === undefined)&lt;br /&gt;
				$(tab).attr(&amp;quot;onclick&amp;quot;, &amp;quot;tabberex_switchTab(\&amp;quot;&amp;quot; + mw.html.escape(tabber_id) + &amp;quot;\&amp;quot;, &amp;quot; + (i + 1) + &amp;quot;)&amp;quot;);&lt;br /&gt;
			else&lt;br /&gt;
				$(tab).attr(&amp;quot;onclick&amp;quot;, &amp;quot;location = \&amp;quot;&amp;quot; + mw.html.escape(tab_locations[i]) + &amp;quot;\&amp;quot;&amp;quot;);&lt;br /&gt;
			var tab_span = document.createElement(&amp;quot;span&amp;quot;);&lt;br /&gt;
			$(tab_span).addClass(&amp;quot;oo-ui-labelElement-label&amp;quot;);&lt;br /&gt;
			if (tab_ex_headers[i] === undefined)&lt;br /&gt;
				$(tab_span).text(tab_headers[i]);&lt;br /&gt;
			else&lt;br /&gt;
			{&lt;br /&gt;
				console.log(&amp;quot;EX Header present&amp;quot;);&lt;br /&gt;
				for (var attr in tab_ex_headers[i][1])&lt;br /&gt;
					tab_span.setAttribute(attr, tab_ex_headers[i][1][attr]);&lt;br /&gt;
				$(tab_span).html(tab_ex_headers[i][0]);&lt;br /&gt;
			}&lt;br /&gt;
			tab.appendChild(tab_span);&lt;br /&gt;
			tabber_head.appendChild(tab);&lt;br /&gt;
			console.log(&amp;quot;Successfully built tab&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		return tabber_head.outerHTML;&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var process_tabber_head_tab = function(tab_element, i)&lt;br /&gt;
	{&lt;br /&gt;
		// Get header&lt;br /&gt;
		var header = $(tab_element).attr(&amp;quot;data-tab-header&amp;quot;);&lt;br /&gt;
		if (header === undefined) header = i + 1;&lt;br /&gt;
		&lt;br /&gt;
		// Get ex header&lt;br /&gt;
		var ex_header;&lt;br /&gt;
		function get_ex_header(_) {&lt;br /&gt;
			console.log(&#039;EX Header found&#039;);&lt;br /&gt;
			var attributes = {};&lt;br /&gt;
			var attrs = this.getAttributeNames();&lt;br /&gt;
			for (var i in attrs)&lt;br /&gt;
				attributes[attrs[i]] = this.getAttribute(attrs[i]);&lt;br /&gt;
			ex_header = [$(this).html(), attributes];&lt;br /&gt;
			$(this).remove();&lt;br /&gt;
		}&lt;br /&gt;
		$(tab_element).children(&amp;quot;p&amp;quot;).children(&amp;quot;span.tabberex-tab-header&amp;quot;).each(get_ex_header);&lt;br /&gt;
		$(tab_element).children(&amp;quot;span.tabberex-tab-header&amp;quot;).each(get_ex_header);&lt;br /&gt;
		&lt;br /&gt;
		// Get default&lt;br /&gt;
		var is_default = false;&lt;br /&gt;
		if ($(tab_element).hasClass(&amp;quot;tabberex-tab-default&amp;quot;))&lt;br /&gt;
			is_default = true;&lt;br /&gt;
		&lt;br /&gt;
		// Get tab location&lt;br /&gt;
		var tab_location = $(this).attr(&amp;quot;data-tab-location&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		return {&amp;quot;header&amp;quot;: header, &amp;quot;ex_header&amp;quot;: ex_header, &amp;quot;default&amp;quot;: is_default, &amp;quot;location&amp;quot;: tab_location};&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var process_tabbers = function()&lt;br /&gt;
	{&lt;br /&gt;
		console.log(&#039;TabberEX started&#039;);&lt;br /&gt;
		var tabber_i = 0;&lt;br /&gt;
		var default_tabs = {};&lt;br /&gt;
		var tabber_ids = [];&lt;br /&gt;
		// The tabs are iterated through backwards to properly handle tabbers that are nested within other tabbers&lt;br /&gt;
		$($(&amp;quot;.tabberex-head&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			var tab_headers = [];&lt;br /&gt;
			var tab_ex_headers = [];&lt;br /&gt;
			var tab_locations = [];&lt;br /&gt;
			var default_tab = 0;&lt;br /&gt;
				&lt;br /&gt;
			var tabber_id = $(this).attr(&amp;quot;data-tabber-id&amp;quot;);&lt;br /&gt;
			if (tabber_id === undefined) tabber_id = String(tabber_i);&lt;br /&gt;
				&lt;br /&gt;
			$(this).children(&amp;quot;.tabberex-tab&amp;quot;).each(function(i) {&lt;br /&gt;
				console.log(&#039;Processing head tab &#039; + tabber_id + &#039; &#039; + String(i));&lt;br /&gt;
				var tab_details = process_tabber_head_tab(this, i);&lt;br /&gt;
				console.log(&#039;Processing complete&#039;);&lt;br /&gt;
				tab_headers[i] = tab_details.header;&lt;br /&gt;
				tab_ex_headers[i] = tab_details.ex_header;&lt;br /&gt;
				if (tab_details.default)&lt;br /&gt;
					default_tab = i;&lt;br /&gt;
				tab_locations[i] = tab_details.location;&lt;br /&gt;
				$(this).detach();&lt;br /&gt;
			});&lt;br /&gt;
			&lt;br /&gt;
			// Insert tabs into DOM&lt;br /&gt;
			tabberex_buildTabHead(this, tabber_id, tab_headers, tab_ex_headers, tab_locations);&lt;br /&gt;
			if (default_tabs[tabber_id] === undefined)&lt;br /&gt;
				default_tabs[tabber_id] = default_tab;&lt;br /&gt;
			tabber_ids.push(tabber_id);&lt;br /&gt;
			tabber_i++;&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		$($(&amp;quot;.tabberex-body&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			$(this).children().css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		$($(&amp;quot;.tabberex&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			var tab_headers = [];&lt;br /&gt;
			var tab_ex_headers = [];&lt;br /&gt;
			var tab_locations = [];&lt;br /&gt;
			var default_tab = 0;&lt;br /&gt;
			var tab_contents = [];&lt;br /&gt;
			&lt;br /&gt;
			var tabber_id = $(this).attr(&amp;quot;data-tabber-id&amp;quot;);&lt;br /&gt;
			if (tabber_id === undefined) tabber_id = String(tabber_i);&lt;br /&gt;
            $(this).attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
&lt;br /&gt;
            var tabber_head = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
            $(tabber_head).addClass(&amp;quot;tabberex-head&amp;quot;).attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
            $(this).removeClass(&amp;quot;tabberex&amp;quot;).addClass(&amp;quot;tabberex-body&amp;quot;);&lt;br /&gt;
			&lt;br /&gt;
			$(this).children(&amp;quot;.tabberex-tab&amp;quot;).each(function(i) {&lt;br /&gt;
				console.log(&#039;Processing head tab &#039; + tabber_id + &#039; &#039; + String(i));&lt;br /&gt;
				var tab_details = process_tabber_head_tab(this, i);&lt;br /&gt;
				console.log(&#039;Processing complete&#039;);&lt;br /&gt;
				tab_headers[i] = tab_details.header;&lt;br /&gt;
				tab_ex_headers[i] = tab_details.ex_header;&lt;br /&gt;
				if (tab_details.default)&lt;br /&gt;
					default_tab = i;&lt;br /&gt;
				tab_locations[i] = tab_details.location;&lt;br /&gt;
				&lt;br /&gt;
				// Get tab content&lt;br /&gt;
				$(this).css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
				tab_contents[i] = $(this);&lt;br /&gt;
			});&lt;br /&gt;
&lt;br /&gt;
            tabberex_buildTabHead(tabber_head, tabber_id, tab_headers, tab_ex_headers, tab_locations);&lt;br /&gt;
			if (default_tabs[tabber_id] === undefined)&lt;br /&gt;
				default_tabs[tabber_id] = default_tab;&lt;br /&gt;
            $(tabber_head).insertBefore(this);&lt;br /&gt;
			tabber_ids.push(tabber_id);&lt;br /&gt;
			tabber_i++;&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		// Select default tabs&lt;br /&gt;
		for (var i in tabber_ids)&lt;br /&gt;
		{&lt;br /&gt;
			tabberex_showTab(tabber_ids[i], default_tabs[tabber_ids[i]] + 1);&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
 &lt;br /&gt;
	mw.hook(&amp;quot;wikipage.content&amp;quot;).add(process_tabbers);&lt;br /&gt;
}(this, jQuery, mediaWiki));&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * @title           SoundcloudPlayer.js&lt;br /&gt;
 * @version         1.1.2&lt;br /&gt;
 * @description     Add support for soundcloud players&lt;br /&gt;
 * @author          Himmalerin&lt;br /&gt;
 * @license         CC-BY-SA-3.0&lt;br /&gt;
 */&lt;br /&gt;
(function () {&lt;br /&gt;
	// Build the iframe&lt;br /&gt;
	const scPlayer = function (data) {&lt;br /&gt;
		const widget = document.createElement(&#039;iframe&#039;);&lt;br /&gt;
&lt;br /&gt;
		widget.classList.add(&#039;soundcloud-player&#039;);&lt;br /&gt;
&lt;br /&gt;
		widget.src =&lt;br /&gt;
			&#039;https://w.soundcloud.com/player/?show_artwork=false&amp;amp;url=&#039; +&lt;br /&gt;
			encodeURI(data.src);&lt;br /&gt;
&lt;br /&gt;
		// If data-color is set add the value to the iframe&lt;br /&gt;
		if (data.color) widget.src += &#039;&amp;amp;color=&#039; + encodeURIComponent(data.color);&lt;br /&gt;
		// If data-width/height are set add that value to the iframe&lt;br /&gt;
		if (data.width) widget.width = data.width;&lt;br /&gt;
		if (data.height) widget.height = data.height;&lt;br /&gt;
&lt;br /&gt;
		return widget;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	const scParseTags = function ($content) {&lt;br /&gt;
		// Get all instances of the soundcloud class&lt;br /&gt;
		const scTags = $content.find(&#039;.soundcloud&#039;);&lt;br /&gt;
&lt;br /&gt;
		// For each instance of the soundcloud class run scPlayer&lt;br /&gt;
		for (var i = 0; i &amp;lt; scTags.length; i++) {&lt;br /&gt;
			scTags[i].replaceWith(scPlayer(scTags[i].dataset));&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	mw.hook(&#039;wikipage.content&#039;).add(function ($content) {&lt;br /&gt;
		scParseTags($content);&lt;br /&gt;
	});&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
https://dev.fandom.com/wiki/MediaWiki:CopyText/code.js&lt;br /&gt;
 */&lt;br /&gt;
(function () {&lt;br /&gt;
    if (window.CopyTextLoaded) {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    window.CopyTextLoaded = true;&lt;br /&gt;
    mw.hook(&#039;dev.i18n&#039;).add(function (i18n) {&lt;br /&gt;
        i18n.loadMessages(&#039;CopyText&#039;).done(function (i18n) {&lt;br /&gt;
            function showSuccess() {&lt;br /&gt;
                if (window.BannerNotification) {&lt;br /&gt;
                    new BannerNotification(i18n.msg(&#039;success&#039;).escape(), &#039;confirm&#039;, null, 5000).show();&lt;br /&gt;
                } else {&lt;br /&gt;
                    mw.notify(i18n.msg(&#039;success&#039;).plain());&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $(&#039;body&#039;).on(&#039;click&#039;, &#039;.copy-to-clipboard-button&#039;, function(e){&lt;br /&gt;
                var text = $(this).data(&#039;text&#039;),&lt;br /&gt;
                $input = $(&#039;&amp;lt;textarea&amp;gt;&#039;, { type: &#039;text&#039; })&lt;br /&gt;
                    .val($(&#039;.copy-to-clipboard-text&#039;).filter(function() {&lt;br /&gt;
                        return $(this).data(&#039;text&#039;) == text;&lt;br /&gt;
                    }).first().text())&lt;br /&gt;
                    .appendTo(&#039;body&#039;)&lt;br /&gt;
                    .select();&lt;br /&gt;
                var success = document.execCommand(&#039;Copy&#039;);&lt;br /&gt;
                $input.remove();&lt;br /&gt;
                if (success) {&lt;br /&gt;
                    showSuccess();&lt;br /&gt;
                } else {&lt;br /&gt;
                    if (window.navigator &amp;amp;&amp;amp; navigator.clipboard &amp;amp;&amp;amp; navigator.clipboard.writeText) {&lt;br /&gt;
                        navigator.clipboard.writeText(text).then(function() {&lt;br /&gt;
                            showSuccess();&lt;br /&gt;
                        });&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/* custom one-time animations */&lt;br /&gt;
(function() {&lt;br /&gt;
	function inhibitLoadAnimations(el) {&lt;br /&gt;
		el.classList.add(&amp;quot;inhibit-load-animations&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
	const supportsWebAnimationsAPI = &#039;getAnimations&#039; in Element.prototype;&lt;br /&gt;
	function ensureOnetimeAnimations(el) {&lt;br /&gt;
		if (!supportsWebAnimationsAPI) return false;&lt;br /&gt;
		&lt;br /&gt;
		const animations = el.getAnimations({ subtree: true });&lt;br /&gt;
		if (animations.length == 0) return false;&lt;br /&gt;
		&lt;br /&gt;
		Promise.all(&lt;br /&gt;
			animations.map(a =&amp;gt; a.finished.catch((error) =&amp;gt; {&lt;br /&gt;
				inhibitLoadAnimations(el)&lt;br /&gt;
			}))&lt;br /&gt;
		).then(() =&amp;gt; {&lt;br /&gt;
			inhibitLoadAnimations(el);&lt;br /&gt;
		});&lt;br /&gt;
		return true;&lt;br /&gt;
	}&lt;br /&gt;
	// ensure the timeout here is longer than any animation timeouts you may want to prevent from playing again&lt;br /&gt;
	function ensureOnetimeAnimationsByTimeout(el) {&lt;br /&gt;
		setTimeout(() =&amp;gt; { inhibitLoadAnimations(el); }, 1000);&lt;br /&gt;
	}&lt;br /&gt;
	mw.hook(&#039;wikipage.content&#039;).add(() =&amp;gt; {&lt;br /&gt;
		const selectors = [&amp;quot;#mw-content&amp;quot;, &amp;quot;#mw-site-navigation&amp;quot;, &amp;quot;#mw-related-navigation&amp;quot;];&lt;br /&gt;
		const elements = document.querySelectorAll(selectors.join(&amp;quot;,&amp;quot;));&lt;br /&gt;
		for (const el of elements) {&lt;br /&gt;
			ensureOnetimeAnimations(el) || ensureOnetimeAnimationsByTimeout(el);&lt;br /&gt;
		}&lt;br /&gt;
	})&lt;br /&gt;
})()&lt;/div&gt;</summary>
		<author><name>Pynappo</name></author>
	</entry>
	<entry>
		<id>https://nbittrpgwiki.pynappo.xyz/index.php?title=MediaWiki:Common.js&amp;diff=3022</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://nbittrpgwiki.pynappo.xyz/index.php?title=MediaWiki:Common.js&amp;diff=3022"/>
		<updated>2026-09-25T12:35:29Z</updated>

		<summary type="html">&lt;p&gt;Pynappo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/*&lt;br /&gt;
    Template:Spoiler on dev.miraheze.org&lt;br /&gt;
*/&lt;br /&gt;
$(function(){&lt;br /&gt;
    //spoiler block behavior&lt;br /&gt;
	$(&#039;.spoiler&#039;).click(function(){&lt;br /&gt;
		$(this).toggleClass(&#039;off&#039;);&lt;br /&gt;
	});&lt;br /&gt;
	// spoiler button behavior&lt;br /&gt;
    $(&#039;#spoilerbtn&#039;).text(&#039;Show all spoilers&#039;);&lt;br /&gt;
	$(&#039;#spoilerbtn&#039;).click(function(){&lt;br /&gt;
		$(this).toggleClass(&#039;hide&#039;);&lt;br /&gt;
		$(&#039;.spoiler&#039;).toggleClass(&#039;showall&#039;);&lt;br /&gt;
		&lt;br /&gt;
		if ($(this).is(&#039;.hide&#039;)){ $(this).text(&#039;Hide all spoilers&#039;); } &lt;br /&gt;
        else { $(this).text(&#039;Show all spoilers&#039;); }&lt;br /&gt;
	});	&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * TabberEX&lt;br /&gt;
 *&lt;br /&gt;
 * @version 2.3&lt;br /&gt;
 *&lt;br /&gt;
 * @author Jono99 &amp;lt;https://phigros.fandom.com/wiki/User:Jono99&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * documentation and examples at:&lt;br /&gt;
 * &amp;lt;https://dev.fandom.com/wiki/TabberEX&amp;gt;&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
 (function (window, $, mw) {&lt;br /&gt;
	// Function called by tabs to switch tabs&lt;br /&gt;
	window.tabberex_switchTab = function(tabber_id, tab)&lt;br /&gt;
	{&lt;br /&gt;
		tabberex_hideAllTabs(tabber_id);&lt;br /&gt;
		tabberex_showTab(tabber_id, tab);&lt;br /&gt;
	};&lt;br /&gt;
 &lt;br /&gt;
	// Inject CSS&lt;br /&gt;
	(function() {&lt;br /&gt;
		var tabberex_css = document.createElement(&amp;quot;style&amp;quot;);&lt;br /&gt;
		tabberex_css.innerHTML = &amp;quot;/* CSS owned by FANDOM */\n.oo-ui-tabOptionWidget{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;vertical-align:bottom;align-items:center;color:color-mix(in srgb, var(--text-color) 75%, transparent);display:inline-flex;font-size:14px;font-weight:500;height:40px;letter-spacing:.5px;margin:0;padding:0 11px;-webkit-transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s;-moz-transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s;transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s}.oo-ui-tabSelectWidget:not(.oo-ui-tabSelectWidget-framed) .oo-ui-tabOptionWidget{-webkit-transition:color .3s,box-shadow .3s;-moz-transition:color .3s,box-shadow .3s;transition:color .3s,box-shadow .3s;border-bottom:1px solid var(--banner-color)}.oo-ui-tabSelectWidget:not(.oo-ui-tabSelectWidget-framed) .oo-ui-tabOptionWidget.oo-ui-optionWidget-selected{box-shadow:inset 0 -2px 0 0 var(--link-color);color:var(--link-color)}&amp;quot;;&lt;br /&gt;
		document.head.appendChild(tabberex_css);&lt;br /&gt;
	})();&lt;br /&gt;
		&lt;br /&gt;
	window.tabberex_showTab = function(tabber_id, i)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;)&lt;br /&gt;
		.addClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;default&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$($(&amp;quot;.tabberex-body&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;).get()).each(function () {&lt;br /&gt;
            var display_value = $(this).attr(&amp;quot;data-tab-display&amp;quot;);&lt;br /&gt;
            if (display_value === undefined) display_value = &amp;quot;block&amp;quot;;&lt;br /&gt;
            $(this).css(&amp;quot;display&amp;quot;, display_value);&lt;br /&gt;
        });&lt;br /&gt;
	};&lt;br /&gt;
	 &lt;br /&gt;
	window.tabberex_hideTab = function(tabber_id, i)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;)&lt;br /&gt;
		.removeClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$(&amp;quot;.tabberex-body&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;).css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
			&lt;br /&gt;
	window.tabberex_hideAllTabs = function(tabber_id)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children()&lt;br /&gt;
		.removeClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$(&amp;quot;.tabberex-body&amp;quot; + base_selector).children().css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var tabberex_buildTabHead = function(host_div, tabber_id, tab_headers, tab_ex_headers, tab_locations)&lt;br /&gt;
	{&lt;br /&gt;
		var tabber_head = host_div;&lt;br /&gt;
		tabber_head.innerHTML = &amp;quot;&amp;quot;;&lt;br /&gt;
		$(tabber_head).addClass(&amp;quot;tabberex-head oo-ui-widget oo-ui-widget-enabled oo-ui-selectWidget oo-ui-selectWidget-unpressed oo-ui-selectWidget-depressed oo-ui-tabSelectWidget&amp;quot;)&lt;br /&gt;
		.attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
		for (var i = 0; i &amp;lt; tab_headers.length; i++)&lt;br /&gt;
		{&lt;br /&gt;
			console.log(&amp;quot;Building tab &amp;quot; + tabber_id + &amp;quot; &amp;quot; + String(i));&lt;br /&gt;
			var tab = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
			$(tab).addClass(&amp;quot;oo-ui-widget oo-ui-widget-enabled oo-ui-labelElement oo-ui-optionWidget oo-ui-tabOptionWidget&amp;quot;)&lt;br /&gt;
			.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
			if (tab_locations[i] === undefined)&lt;br /&gt;
				$(tab).attr(&amp;quot;onclick&amp;quot;, &amp;quot;tabberex_switchTab(\&amp;quot;&amp;quot; + mw.html.escape(tabber_id) + &amp;quot;\&amp;quot;, &amp;quot; + (i + 1) + &amp;quot;)&amp;quot;);&lt;br /&gt;
			else&lt;br /&gt;
				$(tab).attr(&amp;quot;onclick&amp;quot;, &amp;quot;location = \&amp;quot;&amp;quot; + mw.html.escape(tab_locations[i]) + &amp;quot;\&amp;quot;&amp;quot;);&lt;br /&gt;
			var tab_span = document.createElement(&amp;quot;span&amp;quot;);&lt;br /&gt;
			$(tab_span).addClass(&amp;quot;oo-ui-labelElement-label&amp;quot;);&lt;br /&gt;
			if (tab_ex_headers[i] === undefined)&lt;br /&gt;
				$(tab_span).text(tab_headers[i]);&lt;br /&gt;
			else&lt;br /&gt;
			{&lt;br /&gt;
				console.log(&amp;quot;EX Header present&amp;quot;);&lt;br /&gt;
				for (var attr in tab_ex_headers[i][1])&lt;br /&gt;
					tab_span.setAttribute(attr, tab_ex_headers[i][1][attr]);&lt;br /&gt;
				$(tab_span).html(tab_ex_headers[i][0]);&lt;br /&gt;
			}&lt;br /&gt;
			tab.appendChild(tab_span);&lt;br /&gt;
			tabber_head.appendChild(tab);&lt;br /&gt;
			console.log(&amp;quot;Successfully built tab&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		return tabber_head.outerHTML;&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var process_tabber_head_tab = function(tab_element, i)&lt;br /&gt;
	{&lt;br /&gt;
		// Get header&lt;br /&gt;
		var header = $(tab_element).attr(&amp;quot;data-tab-header&amp;quot;);&lt;br /&gt;
		if (header === undefined) header = i + 1;&lt;br /&gt;
		&lt;br /&gt;
		// Get ex header&lt;br /&gt;
		var ex_header;&lt;br /&gt;
		function get_ex_header(_) {&lt;br /&gt;
			console.log(&#039;EX Header found&#039;);&lt;br /&gt;
			var attributes = {};&lt;br /&gt;
			var attrs = this.getAttributeNames();&lt;br /&gt;
			for (var i in attrs)&lt;br /&gt;
				attributes[attrs[i]] = this.getAttribute(attrs[i]);&lt;br /&gt;
			ex_header = [$(this).html(), attributes];&lt;br /&gt;
			$(this).remove();&lt;br /&gt;
		}&lt;br /&gt;
		$(tab_element).children(&amp;quot;p&amp;quot;).children(&amp;quot;span.tabberex-tab-header&amp;quot;).each(get_ex_header);&lt;br /&gt;
		$(tab_element).children(&amp;quot;span.tabberex-tab-header&amp;quot;).each(get_ex_header);&lt;br /&gt;
		&lt;br /&gt;
		// Get default&lt;br /&gt;
		var is_default = false;&lt;br /&gt;
		if ($(tab_element).hasClass(&amp;quot;tabberex-tab-default&amp;quot;))&lt;br /&gt;
			is_default = true;&lt;br /&gt;
		&lt;br /&gt;
		// Get tab location&lt;br /&gt;
		var tab_location = $(this).attr(&amp;quot;data-tab-location&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		return {&amp;quot;header&amp;quot;: header, &amp;quot;ex_header&amp;quot;: ex_header, &amp;quot;default&amp;quot;: is_default, &amp;quot;location&amp;quot;: tab_location};&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var process_tabbers = function()&lt;br /&gt;
	{&lt;br /&gt;
		console.log(&#039;TabberEX started&#039;);&lt;br /&gt;
		var tabber_i = 0;&lt;br /&gt;
		var default_tabs = {};&lt;br /&gt;
		var tabber_ids = [];&lt;br /&gt;
		// The tabs are iterated through backwards to properly handle tabbers that are nested within other tabbers&lt;br /&gt;
		$($(&amp;quot;.tabberex-head&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			var tab_headers = [];&lt;br /&gt;
			var tab_ex_headers = [];&lt;br /&gt;
			var tab_locations = [];&lt;br /&gt;
			var default_tab = 0;&lt;br /&gt;
				&lt;br /&gt;
			var tabber_id = $(this).attr(&amp;quot;data-tabber-id&amp;quot;);&lt;br /&gt;
			if (tabber_id === undefined) tabber_id = String(tabber_i);&lt;br /&gt;
				&lt;br /&gt;
			$(this).children(&amp;quot;.tabberex-tab&amp;quot;).each(function(i) {&lt;br /&gt;
				console.log(&#039;Processing head tab &#039; + tabber_id + &#039; &#039; + String(i));&lt;br /&gt;
				var tab_details = process_tabber_head_tab(this, i);&lt;br /&gt;
				console.log(&#039;Processing complete&#039;);&lt;br /&gt;
				tab_headers[i] = tab_details.header;&lt;br /&gt;
				tab_ex_headers[i] = tab_details.ex_header;&lt;br /&gt;
				if (tab_details.default)&lt;br /&gt;
					default_tab = i;&lt;br /&gt;
				tab_locations[i] = tab_details.location;&lt;br /&gt;
				$(this).detach();&lt;br /&gt;
			});&lt;br /&gt;
			&lt;br /&gt;
			// Insert tabs into DOM&lt;br /&gt;
			tabberex_buildTabHead(this, tabber_id, tab_headers, tab_ex_headers, tab_locations);&lt;br /&gt;
			if (default_tabs[tabber_id] === undefined)&lt;br /&gt;
				default_tabs[tabber_id] = default_tab;&lt;br /&gt;
			tabber_ids.push(tabber_id);&lt;br /&gt;
			tabber_i++;&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		$($(&amp;quot;.tabberex-body&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			$(this).children().css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		$($(&amp;quot;.tabberex&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			var tab_headers = [];&lt;br /&gt;
			var tab_ex_headers = [];&lt;br /&gt;
			var tab_locations = [];&lt;br /&gt;
			var default_tab = 0;&lt;br /&gt;
			var tab_contents = [];&lt;br /&gt;
			&lt;br /&gt;
			var tabber_id = $(this).attr(&amp;quot;data-tabber-id&amp;quot;);&lt;br /&gt;
			if (tabber_id === undefined) tabber_id = String(tabber_i);&lt;br /&gt;
            $(this).attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
&lt;br /&gt;
            var tabber_head = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
            $(tabber_head).addClass(&amp;quot;tabberex-head&amp;quot;).attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
            $(this).removeClass(&amp;quot;tabberex&amp;quot;).addClass(&amp;quot;tabberex-body&amp;quot;);&lt;br /&gt;
			&lt;br /&gt;
			$(this).children(&amp;quot;.tabberex-tab&amp;quot;).each(function(i) {&lt;br /&gt;
				console.log(&#039;Processing head tab &#039; + tabber_id + &#039; &#039; + String(i));&lt;br /&gt;
				var tab_details = process_tabber_head_tab(this, i);&lt;br /&gt;
				console.log(&#039;Processing complete&#039;);&lt;br /&gt;
				tab_headers[i] = tab_details.header;&lt;br /&gt;
				tab_ex_headers[i] = tab_details.ex_header;&lt;br /&gt;
				if (tab_details.default)&lt;br /&gt;
					default_tab = i;&lt;br /&gt;
				tab_locations[i] = tab_details.location;&lt;br /&gt;
				&lt;br /&gt;
				// Get tab content&lt;br /&gt;
				$(this).css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
				tab_contents[i] = $(this);&lt;br /&gt;
			});&lt;br /&gt;
&lt;br /&gt;
            tabberex_buildTabHead(tabber_head, tabber_id, tab_headers, tab_ex_headers, tab_locations);&lt;br /&gt;
			if (default_tabs[tabber_id] === undefined)&lt;br /&gt;
				default_tabs[tabber_id] = default_tab;&lt;br /&gt;
            $(tabber_head).insertBefore(this);&lt;br /&gt;
			tabber_ids.push(tabber_id);&lt;br /&gt;
			tabber_i++;&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		// Select default tabs&lt;br /&gt;
		for (var i in tabber_ids)&lt;br /&gt;
		{&lt;br /&gt;
			tabberex_showTab(tabber_ids[i], default_tabs[tabber_ids[i]] + 1);&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
 &lt;br /&gt;
	mw.hook(&amp;quot;wikipage.content&amp;quot;).add(process_tabbers);&lt;br /&gt;
}(this, jQuery, mediaWiki));&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * @title           SoundcloudPlayer.js&lt;br /&gt;
 * @version         1.1.2&lt;br /&gt;
 * @description     Add support for soundcloud players&lt;br /&gt;
 * @author          Himmalerin&lt;br /&gt;
 * @license         CC-BY-SA-3.0&lt;br /&gt;
 */&lt;br /&gt;
(function () {&lt;br /&gt;
	// Build the iframe&lt;br /&gt;
	const scPlayer = function (data) {&lt;br /&gt;
		const widget = document.createElement(&#039;iframe&#039;);&lt;br /&gt;
&lt;br /&gt;
		widget.classList.add(&#039;soundcloud-player&#039;);&lt;br /&gt;
&lt;br /&gt;
		widget.src =&lt;br /&gt;
			&#039;https://w.soundcloud.com/player/?show_artwork=false&amp;amp;url=&#039; +&lt;br /&gt;
			encodeURI(data.src);&lt;br /&gt;
&lt;br /&gt;
		// If data-color is set add the value to the iframe&lt;br /&gt;
		if (data.color) widget.src += &#039;&amp;amp;color=&#039; + encodeURIComponent(data.color);&lt;br /&gt;
		// If data-width/height are set add that value to the iframe&lt;br /&gt;
		if (data.width) widget.width = data.width;&lt;br /&gt;
		if (data.height) widget.height = data.height;&lt;br /&gt;
&lt;br /&gt;
		return widget;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	const scParseTags = function ($content) {&lt;br /&gt;
		// Get all instances of the soundcloud class&lt;br /&gt;
		const scTags = $content.find(&#039;.soundcloud&#039;);&lt;br /&gt;
&lt;br /&gt;
		// For each instance of the soundcloud class run scPlayer&lt;br /&gt;
		for (var i = 0; i &amp;lt; scTags.length; i++) {&lt;br /&gt;
			scTags[i].replaceWith(scPlayer(scTags[i].dataset));&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	mw.hook(&#039;wikipage.content&#039;).add(function ($content) {&lt;br /&gt;
		scParseTags($content);&lt;br /&gt;
	});&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
https://dev.fandom.com/wiki/MediaWiki:CopyText/code.js&lt;br /&gt;
 */&lt;br /&gt;
(function () {&lt;br /&gt;
    if (window.CopyTextLoaded) {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    window.CopyTextLoaded = true;&lt;br /&gt;
    mw.hook(&#039;dev.i18n&#039;).add(function (i18n) {&lt;br /&gt;
        i18n.loadMessages(&#039;CopyText&#039;).done(function (i18n) {&lt;br /&gt;
            function showSuccess() {&lt;br /&gt;
                if (window.BannerNotification) {&lt;br /&gt;
                    new BannerNotification(i18n.msg(&#039;success&#039;).escape(), &#039;confirm&#039;, null, 5000).show();&lt;br /&gt;
                } else {&lt;br /&gt;
                    mw.notify(i18n.msg(&#039;success&#039;).plain());&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $(&#039;body&#039;).on(&#039;click&#039;, &#039;.copy-to-clipboard-button&#039;, function(e){&lt;br /&gt;
                var text = $(this).data(&#039;text&#039;),&lt;br /&gt;
                $input = $(&#039;&amp;lt;textarea&amp;gt;&#039;, { type: &#039;text&#039; })&lt;br /&gt;
                    .val($(&#039;.copy-to-clipboard-text&#039;).filter(function() {&lt;br /&gt;
                        return $(this).data(&#039;text&#039;) == text;&lt;br /&gt;
                    }).first().text())&lt;br /&gt;
                    .appendTo(&#039;body&#039;)&lt;br /&gt;
                    .select();&lt;br /&gt;
                var success = document.execCommand(&#039;Copy&#039;);&lt;br /&gt;
                $input.remove();&lt;br /&gt;
                if (success) {&lt;br /&gt;
                    showSuccess();&lt;br /&gt;
                } else {&lt;br /&gt;
                    if (window.navigator &amp;amp;&amp;amp; navigator.clipboard &amp;amp;&amp;amp; navigator.clipboard.writeText) {&lt;br /&gt;
                        navigator.clipboard.writeText(text).then(function() {&lt;br /&gt;
                            showSuccess();&lt;br /&gt;
                        });&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/* custom one-time animations */&lt;br /&gt;
(function() {&lt;br /&gt;
	function inhibitLoadAnimations(el) {&lt;br /&gt;
		el.classList.add(&amp;quot;inhibit-load-animations&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
	// ensure the timeout here is longer than any animation timeouts you may want to prevent from playing again&lt;br /&gt;
	function ensureOnetimeAnimationsByTimeout(el) {&lt;br /&gt;
		setTimeout(() =&amp;gt; { inhibitLoadAnimations(el); }, 1000);&lt;br /&gt;
	}&lt;br /&gt;
	const supportsWebAnimationsAPI = &#039;getAnimations&#039; in Element.prototype;&lt;br /&gt;
	function ensureOnetimeAnimations(el) {&lt;br /&gt;
		if (!supportsWebAnimationsAPI) return false;&lt;br /&gt;
		const animations = el.getAnimations({ subtree: true });&lt;br /&gt;
		if (animations.length &amp;gt; 0) {&lt;br /&gt;
			Promise.all(&lt;br /&gt;
				animations.map(a =&amp;gt; a.finished.catch((error) =&amp;gt; {&lt;br /&gt;
					inhibitLoadAnimations(el)&lt;br /&gt;
				}))&lt;br /&gt;
			).then(() =&amp;gt; {&lt;br /&gt;
				inhibitLoadAnimations(el);&lt;br /&gt;
			});&lt;br /&gt;
			return true;&lt;br /&gt;
		}&lt;br /&gt;
		return false;&lt;br /&gt;
	}&lt;br /&gt;
	mw.hook(&#039;wikipage.content&#039;).add(() =&amp;gt; {&lt;br /&gt;
		const selectors = [&amp;quot;#mw-content&amp;quot;, &amp;quot;#mw-site-navigation&amp;quot;, &amp;quot;#mw-related-navigation&amp;quot;];&lt;br /&gt;
		const elements = document.querySelectorAll(selectors.join(&amp;quot;,&amp;quot;));&lt;br /&gt;
		for (const el of elements) {&lt;br /&gt;
			ensureOnetimeAnimationsByTimeout(el);&lt;br /&gt;
		}&lt;br /&gt;
	})&lt;br /&gt;
})()&lt;/div&gt;</summary>
		<author><name>Pynappo</name></author>
	</entry>
	<entry>
		<id>https://nbittrpgwiki.pynappo.xyz/index.php?title=MediaWiki:Common.js&amp;diff=3021</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://nbittrpgwiki.pynappo.xyz/index.php?title=MediaWiki:Common.js&amp;diff=3021"/>
		<updated>2026-09-25T12:34:42Z</updated>

		<summary type="html">&lt;p&gt;Pynappo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/*&lt;br /&gt;
    Template:Spoiler on dev.miraheze.org&lt;br /&gt;
*/&lt;br /&gt;
$(function(){&lt;br /&gt;
    //spoiler block behavior&lt;br /&gt;
	$(&#039;.spoiler&#039;).click(function(){&lt;br /&gt;
		$(this).toggleClass(&#039;off&#039;);&lt;br /&gt;
	});&lt;br /&gt;
	// spoiler button behavior&lt;br /&gt;
    $(&#039;#spoilerbtn&#039;).text(&#039;Show all spoilers&#039;);&lt;br /&gt;
	$(&#039;#spoilerbtn&#039;).click(function(){&lt;br /&gt;
		$(this).toggleClass(&#039;hide&#039;);&lt;br /&gt;
		$(&#039;.spoiler&#039;).toggleClass(&#039;showall&#039;);&lt;br /&gt;
		&lt;br /&gt;
		if ($(this).is(&#039;.hide&#039;)){ $(this).text(&#039;Hide all spoilers&#039;); } &lt;br /&gt;
        else { $(this).text(&#039;Show all spoilers&#039;); }&lt;br /&gt;
	});	&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * TabberEX&lt;br /&gt;
 *&lt;br /&gt;
 * @version 2.3&lt;br /&gt;
 *&lt;br /&gt;
 * @author Jono99 &amp;lt;https://phigros.fandom.com/wiki/User:Jono99&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * documentation and examples at:&lt;br /&gt;
 * &amp;lt;https://dev.fandom.com/wiki/TabberEX&amp;gt;&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
 (function (window, $, mw) {&lt;br /&gt;
	// Function called by tabs to switch tabs&lt;br /&gt;
	window.tabberex_switchTab = function(tabber_id, tab)&lt;br /&gt;
	{&lt;br /&gt;
		tabberex_hideAllTabs(tabber_id);&lt;br /&gt;
		tabberex_showTab(tabber_id, tab);&lt;br /&gt;
	};&lt;br /&gt;
 &lt;br /&gt;
	// Inject CSS&lt;br /&gt;
	(function() {&lt;br /&gt;
		var tabberex_css = document.createElement(&amp;quot;style&amp;quot;);&lt;br /&gt;
		tabberex_css.innerHTML = &amp;quot;/* CSS owned by FANDOM */\n.oo-ui-tabOptionWidget{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;vertical-align:bottom;align-items:center;color:color-mix(in srgb, var(--text-color) 75%, transparent);display:inline-flex;font-size:14px;font-weight:500;height:40px;letter-spacing:.5px;margin:0;padding:0 11px;-webkit-transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s;-moz-transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s;transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s}.oo-ui-tabSelectWidget:not(.oo-ui-tabSelectWidget-framed) .oo-ui-tabOptionWidget{-webkit-transition:color .3s,box-shadow .3s;-moz-transition:color .3s,box-shadow .3s;transition:color .3s,box-shadow .3s;border-bottom:1px solid var(--banner-color)}.oo-ui-tabSelectWidget:not(.oo-ui-tabSelectWidget-framed) .oo-ui-tabOptionWidget.oo-ui-optionWidget-selected{box-shadow:inset 0 -2px 0 0 var(--link-color);color:var(--link-color)}&amp;quot;;&lt;br /&gt;
		document.head.appendChild(tabberex_css);&lt;br /&gt;
	})();&lt;br /&gt;
		&lt;br /&gt;
	window.tabberex_showTab = function(tabber_id, i)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;)&lt;br /&gt;
		.addClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;default&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$($(&amp;quot;.tabberex-body&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;).get()).each(function () {&lt;br /&gt;
            var display_value = $(this).attr(&amp;quot;data-tab-display&amp;quot;);&lt;br /&gt;
            if (display_value === undefined) display_value = &amp;quot;block&amp;quot;;&lt;br /&gt;
            $(this).css(&amp;quot;display&amp;quot;, display_value);&lt;br /&gt;
        });&lt;br /&gt;
	};&lt;br /&gt;
	 &lt;br /&gt;
	window.tabberex_hideTab = function(tabber_id, i)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;)&lt;br /&gt;
		.removeClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$(&amp;quot;.tabberex-body&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;).css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
			&lt;br /&gt;
	window.tabberex_hideAllTabs = function(tabber_id)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children()&lt;br /&gt;
		.removeClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$(&amp;quot;.tabberex-body&amp;quot; + base_selector).children().css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var tabberex_buildTabHead = function(host_div, tabber_id, tab_headers, tab_ex_headers, tab_locations)&lt;br /&gt;
	{&lt;br /&gt;
		var tabber_head = host_div;&lt;br /&gt;
		tabber_head.innerHTML = &amp;quot;&amp;quot;;&lt;br /&gt;
		$(tabber_head).addClass(&amp;quot;tabberex-head oo-ui-widget oo-ui-widget-enabled oo-ui-selectWidget oo-ui-selectWidget-unpressed oo-ui-selectWidget-depressed oo-ui-tabSelectWidget&amp;quot;)&lt;br /&gt;
		.attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
		for (var i = 0; i &amp;lt; tab_headers.length; i++)&lt;br /&gt;
		{&lt;br /&gt;
			console.log(&amp;quot;Building tab &amp;quot; + tabber_id + &amp;quot; &amp;quot; + String(i));&lt;br /&gt;
			var tab = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
			$(tab).addClass(&amp;quot;oo-ui-widget oo-ui-widget-enabled oo-ui-labelElement oo-ui-optionWidget oo-ui-tabOptionWidget&amp;quot;)&lt;br /&gt;
			.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
			if (tab_locations[i] === undefined)&lt;br /&gt;
				$(tab).attr(&amp;quot;onclick&amp;quot;, &amp;quot;tabberex_switchTab(\&amp;quot;&amp;quot; + mw.html.escape(tabber_id) + &amp;quot;\&amp;quot;, &amp;quot; + (i + 1) + &amp;quot;)&amp;quot;);&lt;br /&gt;
			else&lt;br /&gt;
				$(tab).attr(&amp;quot;onclick&amp;quot;, &amp;quot;location = \&amp;quot;&amp;quot; + mw.html.escape(tab_locations[i]) + &amp;quot;\&amp;quot;&amp;quot;);&lt;br /&gt;
			var tab_span = document.createElement(&amp;quot;span&amp;quot;);&lt;br /&gt;
			$(tab_span).addClass(&amp;quot;oo-ui-labelElement-label&amp;quot;);&lt;br /&gt;
			if (tab_ex_headers[i] === undefined)&lt;br /&gt;
				$(tab_span).text(tab_headers[i]);&lt;br /&gt;
			else&lt;br /&gt;
			{&lt;br /&gt;
				console.log(&amp;quot;EX Header present&amp;quot;);&lt;br /&gt;
				for (var attr in tab_ex_headers[i][1])&lt;br /&gt;
					tab_span.setAttribute(attr, tab_ex_headers[i][1][attr]);&lt;br /&gt;
				$(tab_span).html(tab_ex_headers[i][0]);&lt;br /&gt;
			}&lt;br /&gt;
			tab.appendChild(tab_span);&lt;br /&gt;
			tabber_head.appendChild(tab);&lt;br /&gt;
			console.log(&amp;quot;Successfully built tab&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		return tabber_head.outerHTML;&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var process_tabber_head_tab = function(tab_element, i)&lt;br /&gt;
	{&lt;br /&gt;
		// Get header&lt;br /&gt;
		var header = $(tab_element).attr(&amp;quot;data-tab-header&amp;quot;);&lt;br /&gt;
		if (header === undefined) header = i + 1;&lt;br /&gt;
		&lt;br /&gt;
		// Get ex header&lt;br /&gt;
		var ex_header;&lt;br /&gt;
		function get_ex_header(_) {&lt;br /&gt;
			console.log(&#039;EX Header found&#039;);&lt;br /&gt;
			var attributes = {};&lt;br /&gt;
			var attrs = this.getAttributeNames();&lt;br /&gt;
			for (var i in attrs)&lt;br /&gt;
				attributes[attrs[i]] = this.getAttribute(attrs[i]);&lt;br /&gt;
			ex_header = [$(this).html(), attributes];&lt;br /&gt;
			$(this).remove();&lt;br /&gt;
		}&lt;br /&gt;
		$(tab_element).children(&amp;quot;p&amp;quot;).children(&amp;quot;span.tabberex-tab-header&amp;quot;).each(get_ex_header);&lt;br /&gt;
		$(tab_element).children(&amp;quot;span.tabberex-tab-header&amp;quot;).each(get_ex_header);&lt;br /&gt;
		&lt;br /&gt;
		// Get default&lt;br /&gt;
		var is_default = false;&lt;br /&gt;
		if ($(tab_element).hasClass(&amp;quot;tabberex-tab-default&amp;quot;))&lt;br /&gt;
			is_default = true;&lt;br /&gt;
		&lt;br /&gt;
		// Get tab location&lt;br /&gt;
		var tab_location = $(this).attr(&amp;quot;data-tab-location&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		return {&amp;quot;header&amp;quot;: header, &amp;quot;ex_header&amp;quot;: ex_header, &amp;quot;default&amp;quot;: is_default, &amp;quot;location&amp;quot;: tab_location};&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var process_tabbers = function()&lt;br /&gt;
	{&lt;br /&gt;
		console.log(&#039;TabberEX started&#039;);&lt;br /&gt;
		var tabber_i = 0;&lt;br /&gt;
		var default_tabs = {};&lt;br /&gt;
		var tabber_ids = [];&lt;br /&gt;
		// The tabs are iterated through backwards to properly handle tabbers that are nested within other tabbers&lt;br /&gt;
		$($(&amp;quot;.tabberex-head&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			var tab_headers = [];&lt;br /&gt;
			var tab_ex_headers = [];&lt;br /&gt;
			var tab_locations = [];&lt;br /&gt;
			var default_tab = 0;&lt;br /&gt;
				&lt;br /&gt;
			var tabber_id = $(this).attr(&amp;quot;data-tabber-id&amp;quot;);&lt;br /&gt;
			if (tabber_id === undefined) tabber_id = String(tabber_i);&lt;br /&gt;
				&lt;br /&gt;
			$(this).children(&amp;quot;.tabberex-tab&amp;quot;).each(function(i) {&lt;br /&gt;
				console.log(&#039;Processing head tab &#039; + tabber_id + &#039; &#039; + String(i));&lt;br /&gt;
				var tab_details = process_tabber_head_tab(this, i);&lt;br /&gt;
				console.log(&#039;Processing complete&#039;);&lt;br /&gt;
				tab_headers[i] = tab_details.header;&lt;br /&gt;
				tab_ex_headers[i] = tab_details.ex_header;&lt;br /&gt;
				if (tab_details.default)&lt;br /&gt;
					default_tab = i;&lt;br /&gt;
				tab_locations[i] = tab_details.location;&lt;br /&gt;
				$(this).detach();&lt;br /&gt;
			});&lt;br /&gt;
			&lt;br /&gt;
			// Insert tabs into DOM&lt;br /&gt;
			tabberex_buildTabHead(this, tabber_id, tab_headers, tab_ex_headers, tab_locations);&lt;br /&gt;
			if (default_tabs[tabber_id] === undefined)&lt;br /&gt;
				default_tabs[tabber_id] = default_tab;&lt;br /&gt;
			tabber_ids.push(tabber_id);&lt;br /&gt;
			tabber_i++;&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		$($(&amp;quot;.tabberex-body&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			$(this).children().css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		$($(&amp;quot;.tabberex&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			var tab_headers = [];&lt;br /&gt;
			var tab_ex_headers = [];&lt;br /&gt;
			var tab_locations = [];&lt;br /&gt;
			var default_tab = 0;&lt;br /&gt;
			var tab_contents = [];&lt;br /&gt;
			&lt;br /&gt;
			var tabber_id = $(this).attr(&amp;quot;data-tabber-id&amp;quot;);&lt;br /&gt;
			if (tabber_id === undefined) tabber_id = String(tabber_i);&lt;br /&gt;
            $(this).attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
&lt;br /&gt;
            var tabber_head = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
            $(tabber_head).addClass(&amp;quot;tabberex-head&amp;quot;).attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
            $(this).removeClass(&amp;quot;tabberex&amp;quot;).addClass(&amp;quot;tabberex-body&amp;quot;);&lt;br /&gt;
			&lt;br /&gt;
			$(this).children(&amp;quot;.tabberex-tab&amp;quot;).each(function(i) {&lt;br /&gt;
				console.log(&#039;Processing head tab &#039; + tabber_id + &#039; &#039; + String(i));&lt;br /&gt;
				var tab_details = process_tabber_head_tab(this, i);&lt;br /&gt;
				console.log(&#039;Processing complete&#039;);&lt;br /&gt;
				tab_headers[i] = tab_details.header;&lt;br /&gt;
				tab_ex_headers[i] = tab_details.ex_header;&lt;br /&gt;
				if (tab_details.default)&lt;br /&gt;
					default_tab = i;&lt;br /&gt;
				tab_locations[i] = tab_details.location;&lt;br /&gt;
				&lt;br /&gt;
				// Get tab content&lt;br /&gt;
				$(this).css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
				tab_contents[i] = $(this);&lt;br /&gt;
			});&lt;br /&gt;
&lt;br /&gt;
            tabberex_buildTabHead(tabber_head, tabber_id, tab_headers, tab_ex_headers, tab_locations);&lt;br /&gt;
			if (default_tabs[tabber_id] === undefined)&lt;br /&gt;
				default_tabs[tabber_id] = default_tab;&lt;br /&gt;
            $(tabber_head).insertBefore(this);&lt;br /&gt;
			tabber_ids.push(tabber_id);&lt;br /&gt;
			tabber_i++;&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		// Select default tabs&lt;br /&gt;
		for (var i in tabber_ids)&lt;br /&gt;
		{&lt;br /&gt;
			tabberex_showTab(tabber_ids[i], default_tabs[tabber_ids[i]] + 1);&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
 &lt;br /&gt;
	mw.hook(&amp;quot;wikipage.content&amp;quot;).add(process_tabbers);&lt;br /&gt;
}(this, jQuery, mediaWiki));&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * @title           SoundcloudPlayer.js&lt;br /&gt;
 * @version         1.1.2&lt;br /&gt;
 * @description     Add support for soundcloud players&lt;br /&gt;
 * @author          Himmalerin&lt;br /&gt;
 * @license         CC-BY-SA-3.0&lt;br /&gt;
 */&lt;br /&gt;
(function () {&lt;br /&gt;
	// Build the iframe&lt;br /&gt;
	const scPlayer = function (data) {&lt;br /&gt;
		const widget = document.createElement(&#039;iframe&#039;);&lt;br /&gt;
&lt;br /&gt;
		widget.classList.add(&#039;soundcloud-player&#039;);&lt;br /&gt;
&lt;br /&gt;
		widget.src =&lt;br /&gt;
			&#039;https://w.soundcloud.com/player/?show_artwork=false&amp;amp;url=&#039; +&lt;br /&gt;
			encodeURI(data.src);&lt;br /&gt;
&lt;br /&gt;
		// If data-color is set add the value to the iframe&lt;br /&gt;
		if (data.color) widget.src += &#039;&amp;amp;color=&#039; + encodeURIComponent(data.color);&lt;br /&gt;
		// If data-width/height are set add that value to the iframe&lt;br /&gt;
		if (data.width) widget.width = data.width;&lt;br /&gt;
		if (data.height) widget.height = data.height;&lt;br /&gt;
&lt;br /&gt;
		return widget;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	const scParseTags = function ($content) {&lt;br /&gt;
		// Get all instances of the soundcloud class&lt;br /&gt;
		const scTags = $content.find(&#039;.soundcloud&#039;);&lt;br /&gt;
&lt;br /&gt;
		// For each instance of the soundcloud class run scPlayer&lt;br /&gt;
		for (var i = 0; i &amp;lt; scTags.length; i++) {&lt;br /&gt;
			scTags[i].replaceWith(scPlayer(scTags[i].dataset));&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	mw.hook(&#039;wikipage.content&#039;).add(function ($content) {&lt;br /&gt;
		scParseTags($content);&lt;br /&gt;
	});&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
https://dev.fandom.com/wiki/MediaWiki:CopyText/code.js&lt;br /&gt;
 */&lt;br /&gt;
(function () {&lt;br /&gt;
    if (window.CopyTextLoaded) {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    window.CopyTextLoaded = true;&lt;br /&gt;
    mw.hook(&#039;dev.i18n&#039;).add(function (i18n) {&lt;br /&gt;
        i18n.loadMessages(&#039;CopyText&#039;).done(function (i18n) {&lt;br /&gt;
            function showSuccess() {&lt;br /&gt;
                if (window.BannerNotification) {&lt;br /&gt;
                    new BannerNotification(i18n.msg(&#039;success&#039;).escape(), &#039;confirm&#039;, null, 5000).show();&lt;br /&gt;
                } else {&lt;br /&gt;
                    mw.notify(i18n.msg(&#039;success&#039;).plain());&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $(&#039;body&#039;).on(&#039;click&#039;, &#039;.copy-to-clipboard-button&#039;, function(e){&lt;br /&gt;
                var text = $(this).data(&#039;text&#039;),&lt;br /&gt;
                $input = $(&#039;&amp;lt;textarea&amp;gt;&#039;, { type: &#039;text&#039; })&lt;br /&gt;
                    .val($(&#039;.copy-to-clipboard-text&#039;).filter(function() {&lt;br /&gt;
                        return $(this).data(&#039;text&#039;) == text;&lt;br /&gt;
                    }).first().text())&lt;br /&gt;
                    .appendTo(&#039;body&#039;)&lt;br /&gt;
                    .select();&lt;br /&gt;
                var success = document.execCommand(&#039;Copy&#039;);&lt;br /&gt;
                $input.remove();&lt;br /&gt;
                if (success) {&lt;br /&gt;
                    showSuccess();&lt;br /&gt;
                } else {&lt;br /&gt;
                    if (window.navigator &amp;amp;&amp;amp; navigator.clipboard &amp;amp;&amp;amp; navigator.clipboard.writeText) {&lt;br /&gt;
                        navigator.clipboard.writeText(text).then(function() {&lt;br /&gt;
                            showSuccess();&lt;br /&gt;
                        });&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/* custom one-time animations */&lt;br /&gt;
(function() {&lt;br /&gt;
	function inhibitLoadAnimations(el) {&lt;br /&gt;
		el.classList.add(&amp;quot;inhibit-load-animations&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
	// ensure the timeout here is longer than any animation timeouts you may want to prevent from playing again&lt;br /&gt;
	function ensureOnetimeAnimationsByTimeout(el) {&lt;br /&gt;
		setTimeout(() =&amp;gt; { inhibitLoadAnimations(el); }, 1000);&lt;br /&gt;
	}&lt;br /&gt;
	const supportsWebAnimationsAPI = &#039;getAnimations&#039; in Element.prototype;&lt;br /&gt;
	function ensureOnetimeAnimations(el) {&lt;br /&gt;
		if (!supportsWebAnimationsAPI) return false;&lt;br /&gt;
		const animations = el.getAnimations({ subtree: true });&lt;br /&gt;
		if (animations.length &amp;gt; 0) {&lt;br /&gt;
			Promise.all(&lt;br /&gt;
				animations.map(a =&amp;gt; a.finished.catch((error) =&amp;gt; {&lt;br /&gt;
					inhibitLoadAnimations(el)&lt;br /&gt;
				}))&lt;br /&gt;
			).then(() =&amp;gt; {&lt;br /&gt;
				inhibitLoadAnimations(el);&lt;br /&gt;
			});&lt;br /&gt;
			return true;&lt;br /&gt;
		}&lt;br /&gt;
		return false;&lt;br /&gt;
	}&lt;br /&gt;
	mw.hook(&#039;wikipage.content&#039;).add(() =&amp;gt; {&lt;br /&gt;
		const selectors = [&amp;quot;#mw-content&amp;quot;, &amp;quot;#mw-site-navigation&amp;quot;, &amp;quot;#mw-related-navigation&amp;quot;];&lt;br /&gt;
		const elements = document.querySelectorAll(selectors.join(&amp;quot;,&amp;quot;));&lt;br /&gt;
		for (const el of elements) {&lt;br /&gt;
			ensureOnetimeAnimations(el) || ensureOnetimeAnimationsByTimeout(el);&lt;br /&gt;
		}&lt;br /&gt;
	})&lt;br /&gt;
})()&lt;/div&gt;</summary>
		<author><name>Pynappo</name></author>
	</entry>
	<entry>
		<id>https://nbittrpgwiki.pynappo.xyz/index.php?title=MediaWiki:Common.js&amp;diff=3020</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://nbittrpgwiki.pynappo.xyz/index.php?title=MediaWiki:Common.js&amp;diff=3020"/>
		<updated>2026-09-25T12:27:55Z</updated>

		<summary type="html">&lt;p&gt;Pynappo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/*&lt;br /&gt;
    Template:Spoiler on dev.miraheze.org&lt;br /&gt;
*/&lt;br /&gt;
$(function(){&lt;br /&gt;
    //spoiler block behavior&lt;br /&gt;
	$(&#039;.spoiler&#039;).click(function(){&lt;br /&gt;
		$(this).toggleClass(&#039;off&#039;);&lt;br /&gt;
	});&lt;br /&gt;
	// spoiler button behavior&lt;br /&gt;
    $(&#039;#spoilerbtn&#039;).text(&#039;Show all spoilers&#039;);&lt;br /&gt;
	$(&#039;#spoilerbtn&#039;).click(function(){&lt;br /&gt;
		$(this).toggleClass(&#039;hide&#039;);&lt;br /&gt;
		$(&#039;.spoiler&#039;).toggleClass(&#039;showall&#039;);&lt;br /&gt;
		&lt;br /&gt;
		if ($(this).is(&#039;.hide&#039;)){ $(this).text(&#039;Hide all spoilers&#039;); } &lt;br /&gt;
        else { $(this).text(&#039;Show all spoilers&#039;); }&lt;br /&gt;
	});	&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * TabberEX&lt;br /&gt;
 *&lt;br /&gt;
 * @version 2.3&lt;br /&gt;
 *&lt;br /&gt;
 * @author Jono99 &amp;lt;https://phigros.fandom.com/wiki/User:Jono99&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * documentation and examples at:&lt;br /&gt;
 * &amp;lt;https://dev.fandom.com/wiki/TabberEX&amp;gt;&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
 (function (window, $, mw) {&lt;br /&gt;
	// Function called by tabs to switch tabs&lt;br /&gt;
	window.tabberex_switchTab = function(tabber_id, tab)&lt;br /&gt;
	{&lt;br /&gt;
		tabberex_hideAllTabs(tabber_id);&lt;br /&gt;
		tabberex_showTab(tabber_id, tab);&lt;br /&gt;
	};&lt;br /&gt;
 &lt;br /&gt;
	// Inject CSS&lt;br /&gt;
	(function() {&lt;br /&gt;
		var tabberex_css = document.createElement(&amp;quot;style&amp;quot;);&lt;br /&gt;
		tabberex_css.innerHTML = &amp;quot;/* CSS owned by FANDOM */\n.oo-ui-tabOptionWidget{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;vertical-align:bottom;align-items:center;color:color-mix(in srgb, var(--text-color) 75%, transparent);display:inline-flex;font-size:14px;font-weight:500;height:40px;letter-spacing:.5px;margin:0;padding:0 11px;-webkit-transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s;-moz-transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s;transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s}.oo-ui-tabSelectWidget:not(.oo-ui-tabSelectWidget-framed) .oo-ui-tabOptionWidget{-webkit-transition:color .3s,box-shadow .3s;-moz-transition:color .3s,box-shadow .3s;transition:color .3s,box-shadow .3s;border-bottom:1px solid var(--banner-color)}.oo-ui-tabSelectWidget:not(.oo-ui-tabSelectWidget-framed) .oo-ui-tabOptionWidget.oo-ui-optionWidget-selected{box-shadow:inset 0 -2px 0 0 var(--link-color);color:var(--link-color)}&amp;quot;;&lt;br /&gt;
		document.head.appendChild(tabberex_css);&lt;br /&gt;
	})();&lt;br /&gt;
		&lt;br /&gt;
	window.tabberex_showTab = function(tabber_id, i)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;)&lt;br /&gt;
		.addClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;default&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$($(&amp;quot;.tabberex-body&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;).get()).each(function () {&lt;br /&gt;
            var display_value = $(this).attr(&amp;quot;data-tab-display&amp;quot;);&lt;br /&gt;
            if (display_value === undefined) display_value = &amp;quot;block&amp;quot;;&lt;br /&gt;
            $(this).css(&amp;quot;display&amp;quot;, display_value);&lt;br /&gt;
        });&lt;br /&gt;
	};&lt;br /&gt;
	 &lt;br /&gt;
	window.tabberex_hideTab = function(tabber_id, i)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;)&lt;br /&gt;
		.removeClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$(&amp;quot;.tabberex-body&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;).css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
			&lt;br /&gt;
	window.tabberex_hideAllTabs = function(tabber_id)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children()&lt;br /&gt;
		.removeClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$(&amp;quot;.tabberex-body&amp;quot; + base_selector).children().css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var tabberex_buildTabHead = function(host_div, tabber_id, tab_headers, tab_ex_headers, tab_locations)&lt;br /&gt;
	{&lt;br /&gt;
		var tabber_head = host_div;&lt;br /&gt;
		tabber_head.innerHTML = &amp;quot;&amp;quot;;&lt;br /&gt;
		$(tabber_head).addClass(&amp;quot;tabberex-head oo-ui-widget oo-ui-widget-enabled oo-ui-selectWidget oo-ui-selectWidget-unpressed oo-ui-selectWidget-depressed oo-ui-tabSelectWidget&amp;quot;)&lt;br /&gt;
		.attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
		for (var i = 0; i &amp;lt; tab_headers.length; i++)&lt;br /&gt;
		{&lt;br /&gt;
			console.log(&amp;quot;Building tab &amp;quot; + tabber_id + &amp;quot; &amp;quot; + String(i));&lt;br /&gt;
			var tab = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
			$(tab).addClass(&amp;quot;oo-ui-widget oo-ui-widget-enabled oo-ui-labelElement oo-ui-optionWidget oo-ui-tabOptionWidget&amp;quot;)&lt;br /&gt;
			.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
			if (tab_locations[i] === undefined)&lt;br /&gt;
				$(tab).attr(&amp;quot;onclick&amp;quot;, &amp;quot;tabberex_switchTab(\&amp;quot;&amp;quot; + mw.html.escape(tabber_id) + &amp;quot;\&amp;quot;, &amp;quot; + (i + 1) + &amp;quot;)&amp;quot;);&lt;br /&gt;
			else&lt;br /&gt;
				$(tab).attr(&amp;quot;onclick&amp;quot;, &amp;quot;location = \&amp;quot;&amp;quot; + mw.html.escape(tab_locations[i]) + &amp;quot;\&amp;quot;&amp;quot;);&lt;br /&gt;
			var tab_span = document.createElement(&amp;quot;span&amp;quot;);&lt;br /&gt;
			$(tab_span).addClass(&amp;quot;oo-ui-labelElement-label&amp;quot;);&lt;br /&gt;
			if (tab_ex_headers[i] === undefined)&lt;br /&gt;
				$(tab_span).text(tab_headers[i]);&lt;br /&gt;
			else&lt;br /&gt;
			{&lt;br /&gt;
				console.log(&amp;quot;EX Header present&amp;quot;);&lt;br /&gt;
				for (var attr in tab_ex_headers[i][1])&lt;br /&gt;
					tab_span.setAttribute(attr, tab_ex_headers[i][1][attr]);&lt;br /&gt;
				$(tab_span).html(tab_ex_headers[i][0]);&lt;br /&gt;
			}&lt;br /&gt;
			tab.appendChild(tab_span);&lt;br /&gt;
			tabber_head.appendChild(tab);&lt;br /&gt;
			console.log(&amp;quot;Successfully built tab&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		return tabber_head.outerHTML;&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var process_tabber_head_tab = function(tab_element, i)&lt;br /&gt;
	{&lt;br /&gt;
		// Get header&lt;br /&gt;
		var header = $(tab_element).attr(&amp;quot;data-tab-header&amp;quot;);&lt;br /&gt;
		if (header === undefined) header = i + 1;&lt;br /&gt;
		&lt;br /&gt;
		// Get ex header&lt;br /&gt;
		var ex_header;&lt;br /&gt;
		function get_ex_header(_) {&lt;br /&gt;
			console.log(&#039;EX Header found&#039;);&lt;br /&gt;
			var attributes = {};&lt;br /&gt;
			var attrs = this.getAttributeNames();&lt;br /&gt;
			for (var i in attrs)&lt;br /&gt;
				attributes[attrs[i]] = this.getAttribute(attrs[i]);&lt;br /&gt;
			ex_header = [$(this).html(), attributes];&lt;br /&gt;
			$(this).remove();&lt;br /&gt;
		}&lt;br /&gt;
		$(tab_element).children(&amp;quot;p&amp;quot;).children(&amp;quot;span.tabberex-tab-header&amp;quot;).each(get_ex_header);&lt;br /&gt;
		$(tab_element).children(&amp;quot;span.tabberex-tab-header&amp;quot;).each(get_ex_header);&lt;br /&gt;
		&lt;br /&gt;
		// Get default&lt;br /&gt;
		var is_default = false;&lt;br /&gt;
		if ($(tab_element).hasClass(&amp;quot;tabberex-tab-default&amp;quot;))&lt;br /&gt;
			is_default = true;&lt;br /&gt;
		&lt;br /&gt;
		// Get tab location&lt;br /&gt;
		var tab_location = $(this).attr(&amp;quot;data-tab-location&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		return {&amp;quot;header&amp;quot;: header, &amp;quot;ex_header&amp;quot;: ex_header, &amp;quot;default&amp;quot;: is_default, &amp;quot;location&amp;quot;: tab_location};&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var process_tabbers = function()&lt;br /&gt;
	{&lt;br /&gt;
		console.log(&#039;TabberEX started&#039;);&lt;br /&gt;
		var tabber_i = 0;&lt;br /&gt;
		var default_tabs = {};&lt;br /&gt;
		var tabber_ids = [];&lt;br /&gt;
		// The tabs are iterated through backwards to properly handle tabbers that are nested within other tabbers&lt;br /&gt;
		$($(&amp;quot;.tabberex-head&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			var tab_headers = [];&lt;br /&gt;
			var tab_ex_headers = [];&lt;br /&gt;
			var tab_locations = [];&lt;br /&gt;
			var default_tab = 0;&lt;br /&gt;
				&lt;br /&gt;
			var tabber_id = $(this).attr(&amp;quot;data-tabber-id&amp;quot;);&lt;br /&gt;
			if (tabber_id === undefined) tabber_id = String(tabber_i);&lt;br /&gt;
				&lt;br /&gt;
			$(this).children(&amp;quot;.tabberex-tab&amp;quot;).each(function(i) {&lt;br /&gt;
				console.log(&#039;Processing head tab &#039; + tabber_id + &#039; &#039; + String(i));&lt;br /&gt;
				var tab_details = process_tabber_head_tab(this, i);&lt;br /&gt;
				console.log(&#039;Processing complete&#039;);&lt;br /&gt;
				tab_headers[i] = tab_details.header;&lt;br /&gt;
				tab_ex_headers[i] = tab_details.ex_header;&lt;br /&gt;
				if (tab_details.default)&lt;br /&gt;
					default_tab = i;&lt;br /&gt;
				tab_locations[i] = tab_details.location;&lt;br /&gt;
				$(this).detach();&lt;br /&gt;
			});&lt;br /&gt;
			&lt;br /&gt;
			// Insert tabs into DOM&lt;br /&gt;
			tabberex_buildTabHead(this, tabber_id, tab_headers, tab_ex_headers, tab_locations);&lt;br /&gt;
			if (default_tabs[tabber_id] === undefined)&lt;br /&gt;
				default_tabs[tabber_id] = default_tab;&lt;br /&gt;
			tabber_ids.push(tabber_id);&lt;br /&gt;
			tabber_i++;&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		$($(&amp;quot;.tabberex-body&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			$(this).children().css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		$($(&amp;quot;.tabberex&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			var tab_headers = [];&lt;br /&gt;
			var tab_ex_headers = [];&lt;br /&gt;
			var tab_locations = [];&lt;br /&gt;
			var default_tab = 0;&lt;br /&gt;
			var tab_contents = [];&lt;br /&gt;
			&lt;br /&gt;
			var tabber_id = $(this).attr(&amp;quot;data-tabber-id&amp;quot;);&lt;br /&gt;
			if (tabber_id === undefined) tabber_id = String(tabber_i);&lt;br /&gt;
            $(this).attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
&lt;br /&gt;
            var tabber_head = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
            $(tabber_head).addClass(&amp;quot;tabberex-head&amp;quot;).attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
            $(this).removeClass(&amp;quot;tabberex&amp;quot;).addClass(&amp;quot;tabberex-body&amp;quot;);&lt;br /&gt;
			&lt;br /&gt;
			$(this).children(&amp;quot;.tabberex-tab&amp;quot;).each(function(i) {&lt;br /&gt;
				console.log(&#039;Processing head tab &#039; + tabber_id + &#039; &#039; + String(i));&lt;br /&gt;
				var tab_details = process_tabber_head_tab(this, i);&lt;br /&gt;
				console.log(&#039;Processing complete&#039;);&lt;br /&gt;
				tab_headers[i] = tab_details.header;&lt;br /&gt;
				tab_ex_headers[i] = tab_details.ex_header;&lt;br /&gt;
				if (tab_details.default)&lt;br /&gt;
					default_tab = i;&lt;br /&gt;
				tab_locations[i] = tab_details.location;&lt;br /&gt;
				&lt;br /&gt;
				// Get tab content&lt;br /&gt;
				$(this).css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
				tab_contents[i] = $(this);&lt;br /&gt;
			});&lt;br /&gt;
&lt;br /&gt;
            tabberex_buildTabHead(tabber_head, tabber_id, tab_headers, tab_ex_headers, tab_locations);&lt;br /&gt;
			if (default_tabs[tabber_id] === undefined)&lt;br /&gt;
				default_tabs[tabber_id] = default_tab;&lt;br /&gt;
            $(tabber_head).insertBefore(this);&lt;br /&gt;
			tabber_ids.push(tabber_id);&lt;br /&gt;
			tabber_i++;&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		// Select default tabs&lt;br /&gt;
		for (var i in tabber_ids)&lt;br /&gt;
		{&lt;br /&gt;
			tabberex_showTab(tabber_ids[i], default_tabs[tabber_ids[i]] + 1);&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
 &lt;br /&gt;
	mw.hook(&amp;quot;wikipage.content&amp;quot;).add(process_tabbers);&lt;br /&gt;
}(this, jQuery, mediaWiki));&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * @title           SoundcloudPlayer.js&lt;br /&gt;
 * @version         1.1.2&lt;br /&gt;
 * @description     Add support for soundcloud players&lt;br /&gt;
 * @author          Himmalerin&lt;br /&gt;
 * @license         CC-BY-SA-3.0&lt;br /&gt;
 */&lt;br /&gt;
(function () {&lt;br /&gt;
	// Build the iframe&lt;br /&gt;
	const scPlayer = function (data) {&lt;br /&gt;
		const widget = document.createElement(&#039;iframe&#039;);&lt;br /&gt;
&lt;br /&gt;
		widget.classList.add(&#039;soundcloud-player&#039;);&lt;br /&gt;
&lt;br /&gt;
		widget.src =&lt;br /&gt;
			&#039;https://w.soundcloud.com/player/?show_artwork=false&amp;amp;url=&#039; +&lt;br /&gt;
			encodeURI(data.src);&lt;br /&gt;
&lt;br /&gt;
		// If data-color is set add the value to the iframe&lt;br /&gt;
		if (data.color) widget.src += &#039;&amp;amp;color=&#039; + encodeURIComponent(data.color);&lt;br /&gt;
		// If data-width/height are set add that value to the iframe&lt;br /&gt;
		if (data.width) widget.width = data.width;&lt;br /&gt;
		if (data.height) widget.height = data.height;&lt;br /&gt;
&lt;br /&gt;
		return widget;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	const scParseTags = function ($content) {&lt;br /&gt;
		// Get all instances of the soundcloud class&lt;br /&gt;
		const scTags = $content.find(&#039;.soundcloud&#039;);&lt;br /&gt;
&lt;br /&gt;
		// For each instance of the soundcloud class run scPlayer&lt;br /&gt;
		for (var i = 0; i &amp;lt; scTags.length; i++) {&lt;br /&gt;
			scTags[i].replaceWith(scPlayer(scTags[i].dataset));&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	mw.hook(&#039;wikipage.content&#039;).add(function ($content) {&lt;br /&gt;
		scParseTags($content);&lt;br /&gt;
	});&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
https://dev.fandom.com/wiki/MediaWiki:CopyText/code.js&lt;br /&gt;
 */&lt;br /&gt;
(function () {&lt;br /&gt;
    if (window.CopyTextLoaded) {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    window.CopyTextLoaded = true;&lt;br /&gt;
    mw.hook(&#039;dev.i18n&#039;).add(function (i18n) {&lt;br /&gt;
        i18n.loadMessages(&#039;CopyText&#039;).done(function (i18n) {&lt;br /&gt;
            function showSuccess() {&lt;br /&gt;
                if (window.BannerNotification) {&lt;br /&gt;
                    new BannerNotification(i18n.msg(&#039;success&#039;).escape(), &#039;confirm&#039;, null, 5000).show();&lt;br /&gt;
                } else {&lt;br /&gt;
                    mw.notify(i18n.msg(&#039;success&#039;).plain());&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $(&#039;body&#039;).on(&#039;click&#039;, &#039;.copy-to-clipboard-button&#039;, function(e){&lt;br /&gt;
                var text = $(this).data(&#039;text&#039;),&lt;br /&gt;
                $input = $(&#039;&amp;lt;textarea&amp;gt;&#039;, { type: &#039;text&#039; })&lt;br /&gt;
                    .val($(&#039;.copy-to-clipboard-text&#039;).filter(function() {&lt;br /&gt;
                        return $(this).data(&#039;text&#039;) == text;&lt;br /&gt;
                    }).first().text())&lt;br /&gt;
                    .appendTo(&#039;body&#039;)&lt;br /&gt;
                    .select();&lt;br /&gt;
                var success = document.execCommand(&#039;Copy&#039;);&lt;br /&gt;
                $input.remove();&lt;br /&gt;
                if (success) {&lt;br /&gt;
                    showSuccess();&lt;br /&gt;
                } else {&lt;br /&gt;
                    if (window.navigator &amp;amp;&amp;amp; navigator.clipboard &amp;amp;&amp;amp; navigator.clipboard.writeText) {&lt;br /&gt;
                        navigator.clipboard.writeText(text).then(function() {&lt;br /&gt;
                            showSuccess();&lt;br /&gt;
                        });&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/* custom one-time animations */&lt;br /&gt;
(function() {&lt;br /&gt;
	// ensure the timeout here is longer than any animation timeouts you may want to prevent from playing again&lt;br /&gt;
	function ensureOnetimeAnimationsByTimeout(elem) {&lt;br /&gt;
		setTimeout(() =&amp;gt; { elem.classList.add(&amp;quot;inhibit-load-animations&amp;quot;); }, 1000);&lt;br /&gt;
	}&lt;br /&gt;
	// this should work&lt;br /&gt;
	function ensureOnetimeAnimations(elem) {&lt;br /&gt;
		// needs Web Animations API&lt;br /&gt;
		const animations = elem.getAnimations({ subtree: true });&lt;br /&gt;
		if (animations.length &amp;gt; 0) {&lt;br /&gt;
			Promise.all(&lt;br /&gt;
				animations.map(a =&amp;gt; a.finished.catch((error) =&amp;gt; {&lt;br /&gt;
					elem.classList.add(&amp;quot;inhibit-load-animations&amp;quot;);&lt;br /&gt;
				}))&lt;br /&gt;
			).then(function () {&lt;br /&gt;
				console.log(&amp;quot;inhibiting after all are done&amp;quot;);&lt;br /&gt;
				elem.classList.add(&amp;quot;inhibit-load-animations&amp;quot;);&lt;br /&gt;
			});&lt;br /&gt;
		} else {&lt;br /&gt;
			ensureOnetimeAnimationsByTimeout(elem);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	mw.hook(&#039;wikipage.content&#039;).add(() =&amp;gt; {&lt;br /&gt;
		const selectors = [&amp;quot;#mw-content&amp;quot;, &amp;quot;#mw-site-navigation&amp;quot;, &amp;quot;#mw-related-navigation&amp;quot;];&lt;br /&gt;
		const elems = document.querySelectorAll(selectors.join(&amp;quot;,&amp;quot;));&lt;br /&gt;
		if (&#039;getAnimations&#039; in Element.prototype) {&lt;br /&gt;
			for (const elem of elems) {&lt;br /&gt;
				ensureOnetimeAnimations(elem);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		else {&lt;br /&gt;
			for (const elem of elems) {&lt;br /&gt;
				ensureOnetimeAnimationsByTimeout(elem);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	})&lt;br /&gt;
})()&lt;/div&gt;</summary>
		<author><name>Pynappo</name></author>
	</entry>
	<entry>
		<id>https://nbittrpgwiki.pynappo.xyz/index.php?title=MediaWiki:Common.js&amp;diff=3019</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://nbittrpgwiki.pynappo.xyz/index.php?title=MediaWiki:Common.js&amp;diff=3019"/>
		<updated>2026-09-25T12:27:14Z</updated>

		<summary type="html">&lt;p&gt;Pynappo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/*&lt;br /&gt;
    Template:Spoiler on dev.miraheze.org&lt;br /&gt;
*/&lt;br /&gt;
$(function(){&lt;br /&gt;
    //spoiler block behavior&lt;br /&gt;
	$(&#039;.spoiler&#039;).click(function(){&lt;br /&gt;
		$(this).toggleClass(&#039;off&#039;);&lt;br /&gt;
	});&lt;br /&gt;
	// spoiler button behavior&lt;br /&gt;
    $(&#039;#spoilerbtn&#039;).text(&#039;Show all spoilers&#039;);&lt;br /&gt;
	$(&#039;#spoilerbtn&#039;).click(function(){&lt;br /&gt;
		$(this).toggleClass(&#039;hide&#039;);&lt;br /&gt;
		$(&#039;.spoiler&#039;).toggleClass(&#039;showall&#039;);&lt;br /&gt;
		&lt;br /&gt;
		if ($(this).is(&#039;.hide&#039;)){ $(this).text(&#039;Hide all spoilers&#039;); } &lt;br /&gt;
        else { $(this).text(&#039;Show all spoilers&#039;); }&lt;br /&gt;
	});	&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * TabberEX&lt;br /&gt;
 *&lt;br /&gt;
 * @version 2.3&lt;br /&gt;
 *&lt;br /&gt;
 * @author Jono99 &amp;lt;https://phigros.fandom.com/wiki/User:Jono99&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * documentation and examples at:&lt;br /&gt;
 * &amp;lt;https://dev.fandom.com/wiki/TabberEX&amp;gt;&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
 (function (window, $, mw) {&lt;br /&gt;
	// Function called by tabs to switch tabs&lt;br /&gt;
	window.tabberex_switchTab = function(tabber_id, tab)&lt;br /&gt;
	{&lt;br /&gt;
		tabberex_hideAllTabs(tabber_id);&lt;br /&gt;
		tabberex_showTab(tabber_id, tab);&lt;br /&gt;
	};&lt;br /&gt;
 &lt;br /&gt;
	// Inject CSS&lt;br /&gt;
	(function() {&lt;br /&gt;
		var tabberex_css = document.createElement(&amp;quot;style&amp;quot;);&lt;br /&gt;
		tabberex_css.innerHTML = &amp;quot;/* CSS owned by FANDOM */\n.oo-ui-tabOptionWidget{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;vertical-align:bottom;align-items:center;color:color-mix(in srgb, var(--text-color) 75%, transparent);display:inline-flex;font-size:14px;font-weight:500;height:40px;letter-spacing:.5px;margin:0;padding:0 11px;-webkit-transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s;-moz-transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s;transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s}.oo-ui-tabSelectWidget:not(.oo-ui-tabSelectWidget-framed) .oo-ui-tabOptionWidget{-webkit-transition:color .3s,box-shadow .3s;-moz-transition:color .3s,box-shadow .3s;transition:color .3s,box-shadow .3s;border-bottom:1px solid var(--banner-color)}.oo-ui-tabSelectWidget:not(.oo-ui-tabSelectWidget-framed) .oo-ui-tabOptionWidget.oo-ui-optionWidget-selected{box-shadow:inset 0 -2px 0 0 var(--link-color);color:var(--link-color)}&amp;quot;;&lt;br /&gt;
		document.head.appendChild(tabberex_css);&lt;br /&gt;
	})();&lt;br /&gt;
		&lt;br /&gt;
	window.tabberex_showTab = function(tabber_id, i)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;)&lt;br /&gt;
		.addClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;default&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$($(&amp;quot;.tabberex-body&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;).get()).each(function () {&lt;br /&gt;
            var display_value = $(this).attr(&amp;quot;data-tab-display&amp;quot;);&lt;br /&gt;
            if (display_value === undefined) display_value = &amp;quot;block&amp;quot;;&lt;br /&gt;
            $(this).css(&amp;quot;display&amp;quot;, display_value);&lt;br /&gt;
        });&lt;br /&gt;
	};&lt;br /&gt;
	 &lt;br /&gt;
	window.tabberex_hideTab = function(tabber_id, i)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;)&lt;br /&gt;
		.removeClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$(&amp;quot;.tabberex-body&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;).css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
			&lt;br /&gt;
	window.tabberex_hideAllTabs = function(tabber_id)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children()&lt;br /&gt;
		.removeClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$(&amp;quot;.tabberex-body&amp;quot; + base_selector).children().css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var tabberex_buildTabHead = function(host_div, tabber_id, tab_headers, tab_ex_headers, tab_locations)&lt;br /&gt;
	{&lt;br /&gt;
		var tabber_head = host_div;&lt;br /&gt;
		tabber_head.innerHTML = &amp;quot;&amp;quot;;&lt;br /&gt;
		$(tabber_head).addClass(&amp;quot;tabberex-head oo-ui-widget oo-ui-widget-enabled oo-ui-selectWidget oo-ui-selectWidget-unpressed oo-ui-selectWidget-depressed oo-ui-tabSelectWidget&amp;quot;)&lt;br /&gt;
		.attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
		for (var i = 0; i &amp;lt; tab_headers.length; i++)&lt;br /&gt;
		{&lt;br /&gt;
			console.log(&amp;quot;Building tab &amp;quot; + tabber_id + &amp;quot; &amp;quot; + String(i));&lt;br /&gt;
			var tab = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
			$(tab).addClass(&amp;quot;oo-ui-widget oo-ui-widget-enabled oo-ui-labelElement oo-ui-optionWidget oo-ui-tabOptionWidget&amp;quot;)&lt;br /&gt;
			.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
			if (tab_locations[i] === undefined)&lt;br /&gt;
				$(tab).attr(&amp;quot;onclick&amp;quot;, &amp;quot;tabberex_switchTab(\&amp;quot;&amp;quot; + mw.html.escape(tabber_id) + &amp;quot;\&amp;quot;, &amp;quot; + (i + 1) + &amp;quot;)&amp;quot;);&lt;br /&gt;
			else&lt;br /&gt;
				$(tab).attr(&amp;quot;onclick&amp;quot;, &amp;quot;location = \&amp;quot;&amp;quot; + mw.html.escape(tab_locations[i]) + &amp;quot;\&amp;quot;&amp;quot;);&lt;br /&gt;
			var tab_span = document.createElement(&amp;quot;span&amp;quot;);&lt;br /&gt;
			$(tab_span).addClass(&amp;quot;oo-ui-labelElement-label&amp;quot;);&lt;br /&gt;
			if (tab_ex_headers[i] === undefined)&lt;br /&gt;
				$(tab_span).text(tab_headers[i]);&lt;br /&gt;
			else&lt;br /&gt;
			{&lt;br /&gt;
				console.log(&amp;quot;EX Header present&amp;quot;);&lt;br /&gt;
				for (var attr in tab_ex_headers[i][1])&lt;br /&gt;
					tab_span.setAttribute(attr, tab_ex_headers[i][1][attr]);&lt;br /&gt;
				$(tab_span).html(tab_ex_headers[i][0]);&lt;br /&gt;
			}&lt;br /&gt;
			tab.appendChild(tab_span);&lt;br /&gt;
			tabber_head.appendChild(tab);&lt;br /&gt;
			console.log(&amp;quot;Successfully built tab&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		return tabber_head.outerHTML;&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var process_tabber_head_tab = function(tab_element, i)&lt;br /&gt;
	{&lt;br /&gt;
		// Get header&lt;br /&gt;
		var header = $(tab_element).attr(&amp;quot;data-tab-header&amp;quot;);&lt;br /&gt;
		if (header === undefined) header = i + 1;&lt;br /&gt;
		&lt;br /&gt;
		// Get ex header&lt;br /&gt;
		var ex_header;&lt;br /&gt;
		function get_ex_header(_) {&lt;br /&gt;
			console.log(&#039;EX Header found&#039;);&lt;br /&gt;
			var attributes = {};&lt;br /&gt;
			var attrs = this.getAttributeNames();&lt;br /&gt;
			for (var i in attrs)&lt;br /&gt;
				attributes[attrs[i]] = this.getAttribute(attrs[i]);&lt;br /&gt;
			ex_header = [$(this).html(), attributes];&lt;br /&gt;
			$(this).remove();&lt;br /&gt;
		}&lt;br /&gt;
		$(tab_element).children(&amp;quot;p&amp;quot;).children(&amp;quot;span.tabberex-tab-header&amp;quot;).each(get_ex_header);&lt;br /&gt;
		$(tab_element).children(&amp;quot;span.tabberex-tab-header&amp;quot;).each(get_ex_header);&lt;br /&gt;
		&lt;br /&gt;
		// Get default&lt;br /&gt;
		var is_default = false;&lt;br /&gt;
		if ($(tab_element).hasClass(&amp;quot;tabberex-tab-default&amp;quot;))&lt;br /&gt;
			is_default = true;&lt;br /&gt;
		&lt;br /&gt;
		// Get tab location&lt;br /&gt;
		var tab_location = $(this).attr(&amp;quot;data-tab-location&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		return {&amp;quot;header&amp;quot;: header, &amp;quot;ex_header&amp;quot;: ex_header, &amp;quot;default&amp;quot;: is_default, &amp;quot;location&amp;quot;: tab_location};&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var process_tabbers = function()&lt;br /&gt;
	{&lt;br /&gt;
		console.log(&#039;TabberEX started&#039;);&lt;br /&gt;
		var tabber_i = 0;&lt;br /&gt;
		var default_tabs = {};&lt;br /&gt;
		var tabber_ids = [];&lt;br /&gt;
		// The tabs are iterated through backwards to properly handle tabbers that are nested within other tabbers&lt;br /&gt;
		$($(&amp;quot;.tabberex-head&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			var tab_headers = [];&lt;br /&gt;
			var tab_ex_headers = [];&lt;br /&gt;
			var tab_locations = [];&lt;br /&gt;
			var default_tab = 0;&lt;br /&gt;
				&lt;br /&gt;
			var tabber_id = $(this).attr(&amp;quot;data-tabber-id&amp;quot;);&lt;br /&gt;
			if (tabber_id === undefined) tabber_id = String(tabber_i);&lt;br /&gt;
				&lt;br /&gt;
			$(this).children(&amp;quot;.tabberex-tab&amp;quot;).each(function(i) {&lt;br /&gt;
				console.log(&#039;Processing head tab &#039; + tabber_id + &#039; &#039; + String(i));&lt;br /&gt;
				var tab_details = process_tabber_head_tab(this, i);&lt;br /&gt;
				console.log(&#039;Processing complete&#039;);&lt;br /&gt;
				tab_headers[i] = tab_details.header;&lt;br /&gt;
				tab_ex_headers[i] = tab_details.ex_header;&lt;br /&gt;
				if (tab_details.default)&lt;br /&gt;
					default_tab = i;&lt;br /&gt;
				tab_locations[i] = tab_details.location;&lt;br /&gt;
				$(this).detach();&lt;br /&gt;
			});&lt;br /&gt;
			&lt;br /&gt;
			// Insert tabs into DOM&lt;br /&gt;
			tabberex_buildTabHead(this, tabber_id, tab_headers, tab_ex_headers, tab_locations);&lt;br /&gt;
			if (default_tabs[tabber_id] === undefined)&lt;br /&gt;
				default_tabs[tabber_id] = default_tab;&lt;br /&gt;
			tabber_ids.push(tabber_id);&lt;br /&gt;
			tabber_i++;&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		$($(&amp;quot;.tabberex-body&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			$(this).children().css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		$($(&amp;quot;.tabberex&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			var tab_headers = [];&lt;br /&gt;
			var tab_ex_headers = [];&lt;br /&gt;
			var tab_locations = [];&lt;br /&gt;
			var default_tab = 0;&lt;br /&gt;
			var tab_contents = [];&lt;br /&gt;
			&lt;br /&gt;
			var tabber_id = $(this).attr(&amp;quot;data-tabber-id&amp;quot;);&lt;br /&gt;
			if (tabber_id === undefined) tabber_id = String(tabber_i);&lt;br /&gt;
            $(this).attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
&lt;br /&gt;
            var tabber_head = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
            $(tabber_head).addClass(&amp;quot;tabberex-head&amp;quot;).attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
            $(this).removeClass(&amp;quot;tabberex&amp;quot;).addClass(&amp;quot;tabberex-body&amp;quot;);&lt;br /&gt;
			&lt;br /&gt;
			$(this).children(&amp;quot;.tabberex-tab&amp;quot;).each(function(i) {&lt;br /&gt;
				console.log(&#039;Processing head tab &#039; + tabber_id + &#039; &#039; + String(i));&lt;br /&gt;
				var tab_details = process_tabber_head_tab(this, i);&lt;br /&gt;
				console.log(&#039;Processing complete&#039;);&lt;br /&gt;
				tab_headers[i] = tab_details.header;&lt;br /&gt;
				tab_ex_headers[i] = tab_details.ex_header;&lt;br /&gt;
				if (tab_details.default)&lt;br /&gt;
					default_tab = i;&lt;br /&gt;
				tab_locations[i] = tab_details.location;&lt;br /&gt;
				&lt;br /&gt;
				// Get tab content&lt;br /&gt;
				$(this).css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
				tab_contents[i] = $(this);&lt;br /&gt;
			});&lt;br /&gt;
&lt;br /&gt;
            tabberex_buildTabHead(tabber_head, tabber_id, tab_headers, tab_ex_headers, tab_locations);&lt;br /&gt;
			if (default_tabs[tabber_id] === undefined)&lt;br /&gt;
				default_tabs[tabber_id] = default_tab;&lt;br /&gt;
            $(tabber_head).insertBefore(this);&lt;br /&gt;
			tabber_ids.push(tabber_id);&lt;br /&gt;
			tabber_i++;&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		// Select default tabs&lt;br /&gt;
		for (var i in tabber_ids)&lt;br /&gt;
		{&lt;br /&gt;
			tabberex_showTab(tabber_ids[i], default_tabs[tabber_ids[i]] + 1);&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
 &lt;br /&gt;
	mw.hook(&amp;quot;wikipage.content&amp;quot;).add(process_tabbers);&lt;br /&gt;
}(this, jQuery, mediaWiki));&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * @title           SoundcloudPlayer.js&lt;br /&gt;
 * @version         1.1.2&lt;br /&gt;
 * @description     Add support for soundcloud players&lt;br /&gt;
 * @author          Himmalerin&lt;br /&gt;
 * @license         CC-BY-SA-3.0&lt;br /&gt;
 */&lt;br /&gt;
(function () {&lt;br /&gt;
	// Build the iframe&lt;br /&gt;
	const scPlayer = function (data) {&lt;br /&gt;
		const widget = document.createElement(&#039;iframe&#039;);&lt;br /&gt;
&lt;br /&gt;
		widget.classList.add(&#039;soundcloud-player&#039;);&lt;br /&gt;
&lt;br /&gt;
		widget.src =&lt;br /&gt;
			&#039;https://w.soundcloud.com/player/?show_artwork=false&amp;amp;url=&#039; +&lt;br /&gt;
			encodeURI(data.src);&lt;br /&gt;
&lt;br /&gt;
		// If data-color is set add the value to the iframe&lt;br /&gt;
		if (data.color) widget.src += &#039;&amp;amp;color=&#039; + encodeURIComponent(data.color);&lt;br /&gt;
		// If data-width/height are set add that value to the iframe&lt;br /&gt;
		if (data.width) widget.width = data.width;&lt;br /&gt;
		if (data.height) widget.height = data.height;&lt;br /&gt;
&lt;br /&gt;
		return widget;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	const scParseTags = function ($content) {&lt;br /&gt;
		// Get all instances of the soundcloud class&lt;br /&gt;
		const scTags = $content.find(&#039;.soundcloud&#039;);&lt;br /&gt;
&lt;br /&gt;
		// For each instance of the soundcloud class run scPlayer&lt;br /&gt;
		for (var i = 0; i &amp;lt; scTags.length; i++) {&lt;br /&gt;
			scTags[i].replaceWith(scPlayer(scTags[i].dataset));&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	mw.hook(&#039;wikipage.content&#039;).add(function ($content) {&lt;br /&gt;
		scParseTags($content);&lt;br /&gt;
	});&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
https://dev.fandom.com/wiki/MediaWiki:CopyText/code.js&lt;br /&gt;
 */&lt;br /&gt;
(function () {&lt;br /&gt;
    if (window.CopyTextLoaded) {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    window.CopyTextLoaded = true;&lt;br /&gt;
    mw.hook(&#039;dev.i18n&#039;).add(function (i18n) {&lt;br /&gt;
        i18n.loadMessages(&#039;CopyText&#039;).done(function (i18n) {&lt;br /&gt;
            function showSuccess() {&lt;br /&gt;
                if (window.BannerNotification) {&lt;br /&gt;
                    new BannerNotification(i18n.msg(&#039;success&#039;).escape(), &#039;confirm&#039;, null, 5000).show();&lt;br /&gt;
                } else {&lt;br /&gt;
                    mw.notify(i18n.msg(&#039;success&#039;).plain());&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $(&#039;body&#039;).on(&#039;click&#039;, &#039;.copy-to-clipboard-button&#039;, function(e){&lt;br /&gt;
                var text = $(this).data(&#039;text&#039;),&lt;br /&gt;
                $input = $(&#039;&amp;lt;textarea&amp;gt;&#039;, { type: &#039;text&#039; })&lt;br /&gt;
                    .val($(&#039;.copy-to-clipboard-text&#039;).filter(function() {&lt;br /&gt;
                        return $(this).data(&#039;text&#039;) == text;&lt;br /&gt;
                    }).first().text())&lt;br /&gt;
                    .appendTo(&#039;body&#039;)&lt;br /&gt;
                    .select();&lt;br /&gt;
                var success = document.execCommand(&#039;Copy&#039;);&lt;br /&gt;
                $input.remove();&lt;br /&gt;
                if (success) {&lt;br /&gt;
                    showSuccess();&lt;br /&gt;
                } else {&lt;br /&gt;
                    if (window.navigator &amp;amp;&amp;amp; navigator.clipboard &amp;amp;&amp;amp; navigator.clipboard.writeText) {&lt;br /&gt;
                        navigator.clipboard.writeText(text).then(function() {&lt;br /&gt;
                            showSuccess();&lt;br /&gt;
                        });&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/* custom one-time animations */&lt;br /&gt;
(function() {&lt;br /&gt;
	// ensure the timeout here is longer than any animation timeouts you may want to prevent from playing again&lt;br /&gt;
	function ensureOnetimeAnimationsByTimeout(elem) {&lt;br /&gt;
		setTimeout(() =&amp;gt; { elem.classList.add(&amp;quot;inhibit-load-animations&amp;quot;); }, 1000);&lt;br /&gt;
	}&lt;br /&gt;
	// this should work&lt;br /&gt;
	function ensureOnetimeAnimations(elem) {&lt;br /&gt;
		// needs Web Animations API&lt;br /&gt;
		const animations = elem.getAnimations({ subtree: true });&lt;br /&gt;
		if (animations.length &amp;gt; 0) {&lt;br /&gt;
			Promise.all(&lt;br /&gt;
				animations.map(a =&amp;gt; a.finished.catch((error) =&amp;gt; {&lt;br /&gt;
					elem.classList.add(&amp;quot;inhibit-load-animations&amp;quot;);&lt;br /&gt;
					throw error;&lt;br /&gt;
				}))&lt;br /&gt;
			).then(function () {&lt;br /&gt;
				console.log(&amp;quot;inhibiting after all are done&amp;quot;);&lt;br /&gt;
				elem.classList.add(&amp;quot;inhibit-load-animations&amp;quot;);&lt;br /&gt;
			});&lt;br /&gt;
		} else {&lt;br /&gt;
			ensureOnetimeAnimationsByTimeout(elem);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	mw.hook(&#039;wikipage.content&#039;).add(() =&amp;gt; {&lt;br /&gt;
		const selectors = [&amp;quot;#mw-content&amp;quot;, &amp;quot;#mw-site-navigation&amp;quot;, &amp;quot;#mw-related-navigation&amp;quot;];&lt;br /&gt;
		const elems = document.querySelectorAll(selectors.join(&amp;quot;,&amp;quot;));&lt;br /&gt;
		if (&#039;getAnimations&#039; in Element.prototype) {&lt;br /&gt;
			for (const elem of elems) {&lt;br /&gt;
				ensureOnetimeAnimations(elem);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		else {&lt;br /&gt;
			for (const elem of elems) {&lt;br /&gt;
				ensureOnetimeAnimationsByTimeout(elem);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	})&lt;br /&gt;
})()&lt;/div&gt;</summary>
		<author><name>Pynappo</name></author>
	</entry>
	<entry>
		<id>https://nbittrpgwiki.pynappo.xyz/index.php?title=MediaWiki:Common.js&amp;diff=3018</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://nbittrpgwiki.pynappo.xyz/index.php?title=MediaWiki:Common.js&amp;diff=3018"/>
		<updated>2026-09-25T12:23:50Z</updated>

		<summary type="html">&lt;p&gt;Pynappo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/*&lt;br /&gt;
    Template:Spoiler on dev.miraheze.org&lt;br /&gt;
*/&lt;br /&gt;
$(function(){&lt;br /&gt;
    //spoiler block behavior&lt;br /&gt;
	$(&#039;.spoiler&#039;).click(function(){&lt;br /&gt;
		$(this).toggleClass(&#039;off&#039;);&lt;br /&gt;
	});&lt;br /&gt;
	// spoiler button behavior&lt;br /&gt;
    $(&#039;#spoilerbtn&#039;).text(&#039;Show all spoilers&#039;);&lt;br /&gt;
	$(&#039;#spoilerbtn&#039;).click(function(){&lt;br /&gt;
		$(this).toggleClass(&#039;hide&#039;);&lt;br /&gt;
		$(&#039;.spoiler&#039;).toggleClass(&#039;showall&#039;);&lt;br /&gt;
		&lt;br /&gt;
		if ($(this).is(&#039;.hide&#039;)){ $(this).text(&#039;Hide all spoilers&#039;); } &lt;br /&gt;
        else { $(this).text(&#039;Show all spoilers&#039;); }&lt;br /&gt;
	});	&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * TabberEX&lt;br /&gt;
 *&lt;br /&gt;
 * @version 2.3&lt;br /&gt;
 *&lt;br /&gt;
 * @author Jono99 &amp;lt;https://phigros.fandom.com/wiki/User:Jono99&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * documentation and examples at:&lt;br /&gt;
 * &amp;lt;https://dev.fandom.com/wiki/TabberEX&amp;gt;&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
 (function (window, $, mw) {&lt;br /&gt;
	// Function called by tabs to switch tabs&lt;br /&gt;
	window.tabberex_switchTab = function(tabber_id, tab)&lt;br /&gt;
	{&lt;br /&gt;
		tabberex_hideAllTabs(tabber_id);&lt;br /&gt;
		tabberex_showTab(tabber_id, tab);&lt;br /&gt;
	};&lt;br /&gt;
 &lt;br /&gt;
	// Inject CSS&lt;br /&gt;
	(function() {&lt;br /&gt;
		var tabberex_css = document.createElement(&amp;quot;style&amp;quot;);&lt;br /&gt;
		tabberex_css.innerHTML = &amp;quot;/* CSS owned by FANDOM */\n.oo-ui-tabOptionWidget{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;vertical-align:bottom;align-items:center;color:color-mix(in srgb, var(--text-color) 75%, transparent);display:inline-flex;font-size:14px;font-weight:500;height:40px;letter-spacing:.5px;margin:0;padding:0 11px;-webkit-transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s;-moz-transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s;transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s}.oo-ui-tabSelectWidget:not(.oo-ui-tabSelectWidget-framed) .oo-ui-tabOptionWidget{-webkit-transition:color .3s,box-shadow .3s;-moz-transition:color .3s,box-shadow .3s;transition:color .3s,box-shadow .3s;border-bottom:1px solid var(--banner-color)}.oo-ui-tabSelectWidget:not(.oo-ui-tabSelectWidget-framed) .oo-ui-tabOptionWidget.oo-ui-optionWidget-selected{box-shadow:inset 0 -2px 0 0 var(--link-color);color:var(--link-color)}&amp;quot;;&lt;br /&gt;
		document.head.appendChild(tabberex_css);&lt;br /&gt;
	})();&lt;br /&gt;
		&lt;br /&gt;
	window.tabberex_showTab = function(tabber_id, i)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;)&lt;br /&gt;
		.addClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;default&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$($(&amp;quot;.tabberex-body&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;).get()).each(function () {&lt;br /&gt;
            var display_value = $(this).attr(&amp;quot;data-tab-display&amp;quot;);&lt;br /&gt;
            if (display_value === undefined) display_value = &amp;quot;block&amp;quot;;&lt;br /&gt;
            $(this).css(&amp;quot;display&amp;quot;, display_value);&lt;br /&gt;
        });&lt;br /&gt;
	};&lt;br /&gt;
	 &lt;br /&gt;
	window.tabberex_hideTab = function(tabber_id, i)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;)&lt;br /&gt;
		.removeClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$(&amp;quot;.tabberex-body&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;).css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
			&lt;br /&gt;
	window.tabberex_hideAllTabs = function(tabber_id)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children()&lt;br /&gt;
		.removeClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$(&amp;quot;.tabberex-body&amp;quot; + base_selector).children().css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var tabberex_buildTabHead = function(host_div, tabber_id, tab_headers, tab_ex_headers, tab_locations)&lt;br /&gt;
	{&lt;br /&gt;
		var tabber_head = host_div;&lt;br /&gt;
		tabber_head.innerHTML = &amp;quot;&amp;quot;;&lt;br /&gt;
		$(tabber_head).addClass(&amp;quot;tabberex-head oo-ui-widget oo-ui-widget-enabled oo-ui-selectWidget oo-ui-selectWidget-unpressed oo-ui-selectWidget-depressed oo-ui-tabSelectWidget&amp;quot;)&lt;br /&gt;
		.attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
		for (var i = 0; i &amp;lt; tab_headers.length; i++)&lt;br /&gt;
		{&lt;br /&gt;
			console.log(&amp;quot;Building tab &amp;quot; + tabber_id + &amp;quot; &amp;quot; + String(i));&lt;br /&gt;
			var tab = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
			$(tab).addClass(&amp;quot;oo-ui-widget oo-ui-widget-enabled oo-ui-labelElement oo-ui-optionWidget oo-ui-tabOptionWidget&amp;quot;)&lt;br /&gt;
			.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
			if (tab_locations[i] === undefined)&lt;br /&gt;
				$(tab).attr(&amp;quot;onclick&amp;quot;, &amp;quot;tabberex_switchTab(\&amp;quot;&amp;quot; + mw.html.escape(tabber_id) + &amp;quot;\&amp;quot;, &amp;quot; + (i + 1) + &amp;quot;)&amp;quot;);&lt;br /&gt;
			else&lt;br /&gt;
				$(tab).attr(&amp;quot;onclick&amp;quot;, &amp;quot;location = \&amp;quot;&amp;quot; + mw.html.escape(tab_locations[i]) + &amp;quot;\&amp;quot;&amp;quot;);&lt;br /&gt;
			var tab_span = document.createElement(&amp;quot;span&amp;quot;);&lt;br /&gt;
			$(tab_span).addClass(&amp;quot;oo-ui-labelElement-label&amp;quot;);&lt;br /&gt;
			if (tab_ex_headers[i] === undefined)&lt;br /&gt;
				$(tab_span).text(tab_headers[i]);&lt;br /&gt;
			else&lt;br /&gt;
			{&lt;br /&gt;
				console.log(&amp;quot;EX Header present&amp;quot;);&lt;br /&gt;
				for (var attr in tab_ex_headers[i][1])&lt;br /&gt;
					tab_span.setAttribute(attr, tab_ex_headers[i][1][attr]);&lt;br /&gt;
				$(tab_span).html(tab_ex_headers[i][0]);&lt;br /&gt;
			}&lt;br /&gt;
			tab.appendChild(tab_span);&lt;br /&gt;
			tabber_head.appendChild(tab);&lt;br /&gt;
			console.log(&amp;quot;Successfully built tab&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		return tabber_head.outerHTML;&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var process_tabber_head_tab = function(tab_element, i)&lt;br /&gt;
	{&lt;br /&gt;
		// Get header&lt;br /&gt;
		var header = $(tab_element).attr(&amp;quot;data-tab-header&amp;quot;);&lt;br /&gt;
		if (header === undefined) header = i + 1;&lt;br /&gt;
		&lt;br /&gt;
		// Get ex header&lt;br /&gt;
		var ex_header;&lt;br /&gt;
		function get_ex_header(_) {&lt;br /&gt;
			console.log(&#039;EX Header found&#039;);&lt;br /&gt;
			var attributes = {};&lt;br /&gt;
			var attrs = this.getAttributeNames();&lt;br /&gt;
			for (var i in attrs)&lt;br /&gt;
				attributes[attrs[i]] = this.getAttribute(attrs[i]);&lt;br /&gt;
			ex_header = [$(this).html(), attributes];&lt;br /&gt;
			$(this).remove();&lt;br /&gt;
		}&lt;br /&gt;
		$(tab_element).children(&amp;quot;p&amp;quot;).children(&amp;quot;span.tabberex-tab-header&amp;quot;).each(get_ex_header);&lt;br /&gt;
		$(tab_element).children(&amp;quot;span.tabberex-tab-header&amp;quot;).each(get_ex_header);&lt;br /&gt;
		&lt;br /&gt;
		// Get default&lt;br /&gt;
		var is_default = false;&lt;br /&gt;
		if ($(tab_element).hasClass(&amp;quot;tabberex-tab-default&amp;quot;))&lt;br /&gt;
			is_default = true;&lt;br /&gt;
		&lt;br /&gt;
		// Get tab location&lt;br /&gt;
		var tab_location = $(this).attr(&amp;quot;data-tab-location&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		return {&amp;quot;header&amp;quot;: header, &amp;quot;ex_header&amp;quot;: ex_header, &amp;quot;default&amp;quot;: is_default, &amp;quot;location&amp;quot;: tab_location};&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var process_tabbers = function()&lt;br /&gt;
	{&lt;br /&gt;
		console.log(&#039;TabberEX started&#039;);&lt;br /&gt;
		var tabber_i = 0;&lt;br /&gt;
		var default_tabs = {};&lt;br /&gt;
		var tabber_ids = [];&lt;br /&gt;
		// The tabs are iterated through backwards to properly handle tabbers that are nested within other tabbers&lt;br /&gt;
		$($(&amp;quot;.tabberex-head&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			var tab_headers = [];&lt;br /&gt;
			var tab_ex_headers = [];&lt;br /&gt;
			var tab_locations = [];&lt;br /&gt;
			var default_tab = 0;&lt;br /&gt;
				&lt;br /&gt;
			var tabber_id = $(this).attr(&amp;quot;data-tabber-id&amp;quot;);&lt;br /&gt;
			if (tabber_id === undefined) tabber_id = String(tabber_i);&lt;br /&gt;
				&lt;br /&gt;
			$(this).children(&amp;quot;.tabberex-tab&amp;quot;).each(function(i) {&lt;br /&gt;
				console.log(&#039;Processing head tab &#039; + tabber_id + &#039; &#039; + String(i));&lt;br /&gt;
				var tab_details = process_tabber_head_tab(this, i);&lt;br /&gt;
				console.log(&#039;Processing complete&#039;);&lt;br /&gt;
				tab_headers[i] = tab_details.header;&lt;br /&gt;
				tab_ex_headers[i] = tab_details.ex_header;&lt;br /&gt;
				if (tab_details.default)&lt;br /&gt;
					default_tab = i;&lt;br /&gt;
				tab_locations[i] = tab_details.location;&lt;br /&gt;
				$(this).detach();&lt;br /&gt;
			});&lt;br /&gt;
			&lt;br /&gt;
			// Insert tabs into DOM&lt;br /&gt;
			tabberex_buildTabHead(this, tabber_id, tab_headers, tab_ex_headers, tab_locations);&lt;br /&gt;
			if (default_tabs[tabber_id] === undefined)&lt;br /&gt;
				default_tabs[tabber_id] = default_tab;&lt;br /&gt;
			tabber_ids.push(tabber_id);&lt;br /&gt;
			tabber_i++;&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		$($(&amp;quot;.tabberex-body&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			$(this).children().css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		$($(&amp;quot;.tabberex&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			var tab_headers = [];&lt;br /&gt;
			var tab_ex_headers = [];&lt;br /&gt;
			var tab_locations = [];&lt;br /&gt;
			var default_tab = 0;&lt;br /&gt;
			var tab_contents = [];&lt;br /&gt;
			&lt;br /&gt;
			var tabber_id = $(this).attr(&amp;quot;data-tabber-id&amp;quot;);&lt;br /&gt;
			if (tabber_id === undefined) tabber_id = String(tabber_i);&lt;br /&gt;
            $(this).attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
&lt;br /&gt;
            var tabber_head = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
            $(tabber_head).addClass(&amp;quot;tabberex-head&amp;quot;).attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
            $(this).removeClass(&amp;quot;tabberex&amp;quot;).addClass(&amp;quot;tabberex-body&amp;quot;);&lt;br /&gt;
			&lt;br /&gt;
			$(this).children(&amp;quot;.tabberex-tab&amp;quot;).each(function(i) {&lt;br /&gt;
				console.log(&#039;Processing head tab &#039; + tabber_id + &#039; &#039; + String(i));&lt;br /&gt;
				var tab_details = process_tabber_head_tab(this, i);&lt;br /&gt;
				console.log(&#039;Processing complete&#039;);&lt;br /&gt;
				tab_headers[i] = tab_details.header;&lt;br /&gt;
				tab_ex_headers[i] = tab_details.ex_header;&lt;br /&gt;
				if (tab_details.default)&lt;br /&gt;
					default_tab = i;&lt;br /&gt;
				tab_locations[i] = tab_details.location;&lt;br /&gt;
				&lt;br /&gt;
				// Get tab content&lt;br /&gt;
				$(this).css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
				tab_contents[i] = $(this);&lt;br /&gt;
			});&lt;br /&gt;
&lt;br /&gt;
            tabberex_buildTabHead(tabber_head, tabber_id, tab_headers, tab_ex_headers, tab_locations);&lt;br /&gt;
			if (default_tabs[tabber_id] === undefined)&lt;br /&gt;
				default_tabs[tabber_id] = default_tab;&lt;br /&gt;
            $(tabber_head).insertBefore(this);&lt;br /&gt;
			tabber_ids.push(tabber_id);&lt;br /&gt;
			tabber_i++;&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		// Select default tabs&lt;br /&gt;
		for (var i in tabber_ids)&lt;br /&gt;
		{&lt;br /&gt;
			tabberex_showTab(tabber_ids[i], default_tabs[tabber_ids[i]] + 1);&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
 &lt;br /&gt;
	mw.hook(&amp;quot;wikipage.content&amp;quot;).add(process_tabbers);&lt;br /&gt;
}(this, jQuery, mediaWiki));&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * @title           SoundcloudPlayer.js&lt;br /&gt;
 * @version         1.1.2&lt;br /&gt;
 * @description     Add support for soundcloud players&lt;br /&gt;
 * @author          Himmalerin&lt;br /&gt;
 * @license         CC-BY-SA-3.0&lt;br /&gt;
 */&lt;br /&gt;
(function () {&lt;br /&gt;
	// Build the iframe&lt;br /&gt;
	const scPlayer = function (data) {&lt;br /&gt;
		const widget = document.createElement(&#039;iframe&#039;);&lt;br /&gt;
&lt;br /&gt;
		widget.classList.add(&#039;soundcloud-player&#039;);&lt;br /&gt;
&lt;br /&gt;
		widget.src =&lt;br /&gt;
			&#039;https://w.soundcloud.com/player/?show_artwork=false&amp;amp;url=&#039; +&lt;br /&gt;
			encodeURI(data.src);&lt;br /&gt;
&lt;br /&gt;
		// If data-color is set add the value to the iframe&lt;br /&gt;
		if (data.color) widget.src += &#039;&amp;amp;color=&#039; + encodeURIComponent(data.color);&lt;br /&gt;
		// If data-width/height are set add that value to the iframe&lt;br /&gt;
		if (data.width) widget.width = data.width;&lt;br /&gt;
		if (data.height) widget.height = data.height;&lt;br /&gt;
&lt;br /&gt;
		return widget;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	const scParseTags = function ($content) {&lt;br /&gt;
		// Get all instances of the soundcloud class&lt;br /&gt;
		const scTags = $content.find(&#039;.soundcloud&#039;);&lt;br /&gt;
&lt;br /&gt;
		// For each instance of the soundcloud class run scPlayer&lt;br /&gt;
		for (var i = 0; i &amp;lt; scTags.length; i++) {&lt;br /&gt;
			scTags[i].replaceWith(scPlayer(scTags[i].dataset));&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	mw.hook(&#039;wikipage.content&#039;).add(function ($content) {&lt;br /&gt;
		scParseTags($content);&lt;br /&gt;
	});&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
https://dev.fandom.com/wiki/MediaWiki:CopyText/code.js&lt;br /&gt;
 */&lt;br /&gt;
(function () {&lt;br /&gt;
    if (window.CopyTextLoaded) {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    window.CopyTextLoaded = true;&lt;br /&gt;
    mw.hook(&#039;dev.i18n&#039;).add(function (i18n) {&lt;br /&gt;
        i18n.loadMessages(&#039;CopyText&#039;).done(function (i18n) {&lt;br /&gt;
            function showSuccess() {&lt;br /&gt;
                if (window.BannerNotification) {&lt;br /&gt;
                    new BannerNotification(i18n.msg(&#039;success&#039;).escape(), &#039;confirm&#039;, null, 5000).show();&lt;br /&gt;
                } else {&lt;br /&gt;
                    mw.notify(i18n.msg(&#039;success&#039;).plain());&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $(&#039;body&#039;).on(&#039;click&#039;, &#039;.copy-to-clipboard-button&#039;, function(e){&lt;br /&gt;
                var text = $(this).data(&#039;text&#039;),&lt;br /&gt;
                $input = $(&#039;&amp;lt;textarea&amp;gt;&#039;, { type: &#039;text&#039; })&lt;br /&gt;
                    .val($(&#039;.copy-to-clipboard-text&#039;).filter(function() {&lt;br /&gt;
                        return $(this).data(&#039;text&#039;) == text;&lt;br /&gt;
                    }).first().text())&lt;br /&gt;
                    .appendTo(&#039;body&#039;)&lt;br /&gt;
                    .select();&lt;br /&gt;
                var success = document.execCommand(&#039;Copy&#039;);&lt;br /&gt;
                $input.remove();&lt;br /&gt;
                if (success) {&lt;br /&gt;
                    showSuccess();&lt;br /&gt;
                } else {&lt;br /&gt;
                    if (window.navigator &amp;amp;&amp;amp; navigator.clipboard &amp;amp;&amp;amp; navigator.clipboard.writeText) {&lt;br /&gt;
                        navigator.clipboard.writeText(text).then(function() {&lt;br /&gt;
                            showSuccess();&lt;br /&gt;
                        });&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/* custom one-time animations */&lt;br /&gt;
(function() {&lt;br /&gt;
	// ensure the timeout here is longer than any animation timeouts you may want to prevent from playing again&lt;br /&gt;
	function ensureOnetimeAnimationsByTimeout(elem) {&lt;br /&gt;
		setTimeout(() =&amp;gt; { elem.classList.add(&amp;quot;inhibit-load-animations&amp;quot;); }, 1000);&lt;br /&gt;
	}&lt;br /&gt;
	// this should work&lt;br /&gt;
	function ensureOnetimeAnimations(elem) {&lt;br /&gt;
		// needs Web Animations API&lt;br /&gt;
		const animations = elem.getAnimations({ subtree: true });&lt;br /&gt;
		if (animations.length &amp;gt; 0) {&lt;br /&gt;
			Promise.all(&lt;br /&gt;
				animations.map(a =&amp;gt; a.finished)&lt;br /&gt;
			).then(function () {&lt;br /&gt;
				console.log(&amp;quot;inhibiting after all are done&amp;quot;);&lt;br /&gt;
				elem.classList.add(&amp;quot;inhibit-load-animations&amp;quot;);&lt;br /&gt;
			});&lt;br /&gt;
		} else {&lt;br /&gt;
			ensureOnetimeAnimationsByTimeout(elem);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	mw.hook(&#039;wikipage.content&#039;).add(() =&amp;gt; {&lt;br /&gt;
		const selectors = [&amp;quot;#mw-content&amp;quot;, &amp;quot;#mw-site-navigation&amp;quot;, &amp;quot;#mw-related-navigation&amp;quot;];&lt;br /&gt;
		const elems = document.querySelectorAll(selectors.join(&amp;quot;,&amp;quot;));&lt;br /&gt;
		if (&#039;getAnimations&#039; in Element.prototype) {&lt;br /&gt;
			for (const elem of elems) {&lt;br /&gt;
				ensureOnetimeAnimations(elem);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		else {&lt;br /&gt;
			for (const elem of elems) {&lt;br /&gt;
				ensureOnetimeAnimationsByTimeout(elem);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	})&lt;br /&gt;
})()&lt;/div&gt;</summary>
		<author><name>Pynappo</name></author>
	</entry>
	<entry>
		<id>https://nbittrpgwiki.pynappo.xyz/index.php?title=MediaWiki:Common.js&amp;diff=3017</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://nbittrpgwiki.pynappo.xyz/index.php?title=MediaWiki:Common.js&amp;diff=3017"/>
		<updated>2026-09-25T12:21:44Z</updated>

		<summary type="html">&lt;p&gt;Pynappo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/*&lt;br /&gt;
    Template:Spoiler on dev.miraheze.org&lt;br /&gt;
*/&lt;br /&gt;
$(function(){&lt;br /&gt;
    //spoiler block behavior&lt;br /&gt;
	$(&#039;.spoiler&#039;).click(function(){&lt;br /&gt;
		$(this).toggleClass(&#039;off&#039;);&lt;br /&gt;
	});&lt;br /&gt;
	// spoiler button behavior&lt;br /&gt;
    $(&#039;#spoilerbtn&#039;).text(&#039;Show all spoilers&#039;);&lt;br /&gt;
	$(&#039;#spoilerbtn&#039;).click(function(){&lt;br /&gt;
		$(this).toggleClass(&#039;hide&#039;);&lt;br /&gt;
		$(&#039;.spoiler&#039;).toggleClass(&#039;showall&#039;);&lt;br /&gt;
		&lt;br /&gt;
		if ($(this).is(&#039;.hide&#039;)){ $(this).text(&#039;Hide all spoilers&#039;); } &lt;br /&gt;
        else { $(this).text(&#039;Show all spoilers&#039;); }&lt;br /&gt;
	});	&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * TabberEX&lt;br /&gt;
 *&lt;br /&gt;
 * @version 2.3&lt;br /&gt;
 *&lt;br /&gt;
 * @author Jono99 &amp;lt;https://phigros.fandom.com/wiki/User:Jono99&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * documentation and examples at:&lt;br /&gt;
 * &amp;lt;https://dev.fandom.com/wiki/TabberEX&amp;gt;&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
 (function (window, $, mw) {&lt;br /&gt;
	// Function called by tabs to switch tabs&lt;br /&gt;
	window.tabberex_switchTab = function(tabber_id, tab)&lt;br /&gt;
	{&lt;br /&gt;
		tabberex_hideAllTabs(tabber_id);&lt;br /&gt;
		tabberex_showTab(tabber_id, tab);&lt;br /&gt;
	};&lt;br /&gt;
 &lt;br /&gt;
	// Inject CSS&lt;br /&gt;
	(function() {&lt;br /&gt;
		var tabberex_css = document.createElement(&amp;quot;style&amp;quot;);&lt;br /&gt;
		tabberex_css.innerHTML = &amp;quot;/* CSS owned by FANDOM */\n.oo-ui-tabOptionWidget{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;vertical-align:bottom;align-items:center;color:color-mix(in srgb, var(--text-color) 75%, transparent);display:inline-flex;font-size:14px;font-weight:500;height:40px;letter-spacing:.5px;margin:0;padding:0 11px;-webkit-transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s;-moz-transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s;transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s}.oo-ui-tabSelectWidget:not(.oo-ui-tabSelectWidget-framed) .oo-ui-tabOptionWidget{-webkit-transition:color .3s,box-shadow .3s;-moz-transition:color .3s,box-shadow .3s;transition:color .3s,box-shadow .3s;border-bottom:1px solid var(--banner-color)}.oo-ui-tabSelectWidget:not(.oo-ui-tabSelectWidget-framed) .oo-ui-tabOptionWidget.oo-ui-optionWidget-selected{box-shadow:inset 0 -2px 0 0 var(--link-color);color:var(--link-color)}&amp;quot;;&lt;br /&gt;
		document.head.appendChild(tabberex_css);&lt;br /&gt;
	})();&lt;br /&gt;
		&lt;br /&gt;
	window.tabberex_showTab = function(tabber_id, i)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;)&lt;br /&gt;
		.addClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;default&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$($(&amp;quot;.tabberex-body&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;).get()).each(function () {&lt;br /&gt;
            var display_value = $(this).attr(&amp;quot;data-tab-display&amp;quot;);&lt;br /&gt;
            if (display_value === undefined) display_value = &amp;quot;block&amp;quot;;&lt;br /&gt;
            $(this).css(&amp;quot;display&amp;quot;, display_value);&lt;br /&gt;
        });&lt;br /&gt;
	};&lt;br /&gt;
	 &lt;br /&gt;
	window.tabberex_hideTab = function(tabber_id, i)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;)&lt;br /&gt;
		.removeClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$(&amp;quot;.tabberex-body&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;).css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
			&lt;br /&gt;
	window.tabberex_hideAllTabs = function(tabber_id)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children()&lt;br /&gt;
		.removeClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$(&amp;quot;.tabberex-body&amp;quot; + base_selector).children().css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var tabberex_buildTabHead = function(host_div, tabber_id, tab_headers, tab_ex_headers, tab_locations)&lt;br /&gt;
	{&lt;br /&gt;
		var tabber_head = host_div;&lt;br /&gt;
		tabber_head.innerHTML = &amp;quot;&amp;quot;;&lt;br /&gt;
		$(tabber_head).addClass(&amp;quot;tabberex-head oo-ui-widget oo-ui-widget-enabled oo-ui-selectWidget oo-ui-selectWidget-unpressed oo-ui-selectWidget-depressed oo-ui-tabSelectWidget&amp;quot;)&lt;br /&gt;
		.attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
		for (var i = 0; i &amp;lt; tab_headers.length; i++)&lt;br /&gt;
		{&lt;br /&gt;
			console.log(&amp;quot;Building tab &amp;quot; + tabber_id + &amp;quot; &amp;quot; + String(i));&lt;br /&gt;
			var tab = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
			$(tab).addClass(&amp;quot;oo-ui-widget oo-ui-widget-enabled oo-ui-labelElement oo-ui-optionWidget oo-ui-tabOptionWidget&amp;quot;)&lt;br /&gt;
			.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
			if (tab_locations[i] === undefined)&lt;br /&gt;
				$(tab).attr(&amp;quot;onclick&amp;quot;, &amp;quot;tabberex_switchTab(\&amp;quot;&amp;quot; + mw.html.escape(tabber_id) + &amp;quot;\&amp;quot;, &amp;quot; + (i + 1) + &amp;quot;)&amp;quot;);&lt;br /&gt;
			else&lt;br /&gt;
				$(tab).attr(&amp;quot;onclick&amp;quot;, &amp;quot;location = \&amp;quot;&amp;quot; + mw.html.escape(tab_locations[i]) + &amp;quot;\&amp;quot;&amp;quot;);&lt;br /&gt;
			var tab_span = document.createElement(&amp;quot;span&amp;quot;);&lt;br /&gt;
			$(tab_span).addClass(&amp;quot;oo-ui-labelElement-label&amp;quot;);&lt;br /&gt;
			if (tab_ex_headers[i] === undefined)&lt;br /&gt;
				$(tab_span).text(tab_headers[i]);&lt;br /&gt;
			else&lt;br /&gt;
			{&lt;br /&gt;
				console.log(&amp;quot;EX Header present&amp;quot;);&lt;br /&gt;
				for (var attr in tab_ex_headers[i][1])&lt;br /&gt;
					tab_span.setAttribute(attr, tab_ex_headers[i][1][attr]);&lt;br /&gt;
				$(tab_span).html(tab_ex_headers[i][0]);&lt;br /&gt;
			}&lt;br /&gt;
			tab.appendChild(tab_span);&lt;br /&gt;
			tabber_head.appendChild(tab);&lt;br /&gt;
			console.log(&amp;quot;Successfully built tab&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		return tabber_head.outerHTML;&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var process_tabber_head_tab = function(tab_element, i)&lt;br /&gt;
	{&lt;br /&gt;
		// Get header&lt;br /&gt;
		var header = $(tab_element).attr(&amp;quot;data-tab-header&amp;quot;);&lt;br /&gt;
		if (header === undefined) header = i + 1;&lt;br /&gt;
		&lt;br /&gt;
		// Get ex header&lt;br /&gt;
		var ex_header;&lt;br /&gt;
		function get_ex_header(_) {&lt;br /&gt;
			console.log(&#039;EX Header found&#039;);&lt;br /&gt;
			var attributes = {};&lt;br /&gt;
			var attrs = this.getAttributeNames();&lt;br /&gt;
			for (var i in attrs)&lt;br /&gt;
				attributes[attrs[i]] = this.getAttribute(attrs[i]);&lt;br /&gt;
			ex_header = [$(this).html(), attributes];&lt;br /&gt;
			$(this).remove();&lt;br /&gt;
		}&lt;br /&gt;
		$(tab_element).children(&amp;quot;p&amp;quot;).children(&amp;quot;span.tabberex-tab-header&amp;quot;).each(get_ex_header);&lt;br /&gt;
		$(tab_element).children(&amp;quot;span.tabberex-tab-header&amp;quot;).each(get_ex_header);&lt;br /&gt;
		&lt;br /&gt;
		// Get default&lt;br /&gt;
		var is_default = false;&lt;br /&gt;
		if ($(tab_element).hasClass(&amp;quot;tabberex-tab-default&amp;quot;))&lt;br /&gt;
			is_default = true;&lt;br /&gt;
		&lt;br /&gt;
		// Get tab location&lt;br /&gt;
		var tab_location = $(this).attr(&amp;quot;data-tab-location&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		return {&amp;quot;header&amp;quot;: header, &amp;quot;ex_header&amp;quot;: ex_header, &amp;quot;default&amp;quot;: is_default, &amp;quot;location&amp;quot;: tab_location};&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var process_tabbers = function()&lt;br /&gt;
	{&lt;br /&gt;
		console.log(&#039;TabberEX started&#039;);&lt;br /&gt;
		var tabber_i = 0;&lt;br /&gt;
		var default_tabs = {};&lt;br /&gt;
		var tabber_ids = [];&lt;br /&gt;
		// The tabs are iterated through backwards to properly handle tabbers that are nested within other tabbers&lt;br /&gt;
		$($(&amp;quot;.tabberex-head&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			var tab_headers = [];&lt;br /&gt;
			var tab_ex_headers = [];&lt;br /&gt;
			var tab_locations = [];&lt;br /&gt;
			var default_tab = 0;&lt;br /&gt;
				&lt;br /&gt;
			var tabber_id = $(this).attr(&amp;quot;data-tabber-id&amp;quot;);&lt;br /&gt;
			if (tabber_id === undefined) tabber_id = String(tabber_i);&lt;br /&gt;
				&lt;br /&gt;
			$(this).children(&amp;quot;.tabberex-tab&amp;quot;).each(function(i) {&lt;br /&gt;
				console.log(&#039;Processing head tab &#039; + tabber_id + &#039; &#039; + String(i));&lt;br /&gt;
				var tab_details = process_tabber_head_tab(this, i);&lt;br /&gt;
				console.log(&#039;Processing complete&#039;);&lt;br /&gt;
				tab_headers[i] = tab_details.header;&lt;br /&gt;
				tab_ex_headers[i] = tab_details.ex_header;&lt;br /&gt;
				if (tab_details.default)&lt;br /&gt;
					default_tab = i;&lt;br /&gt;
				tab_locations[i] = tab_details.location;&lt;br /&gt;
				$(this).detach();&lt;br /&gt;
			});&lt;br /&gt;
			&lt;br /&gt;
			// Insert tabs into DOM&lt;br /&gt;
			tabberex_buildTabHead(this, tabber_id, tab_headers, tab_ex_headers, tab_locations);&lt;br /&gt;
			if (default_tabs[tabber_id] === undefined)&lt;br /&gt;
				default_tabs[tabber_id] = default_tab;&lt;br /&gt;
			tabber_ids.push(tabber_id);&lt;br /&gt;
			tabber_i++;&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		$($(&amp;quot;.tabberex-body&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			$(this).children().css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		$($(&amp;quot;.tabberex&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			var tab_headers = [];&lt;br /&gt;
			var tab_ex_headers = [];&lt;br /&gt;
			var tab_locations = [];&lt;br /&gt;
			var default_tab = 0;&lt;br /&gt;
			var tab_contents = [];&lt;br /&gt;
			&lt;br /&gt;
			var tabber_id = $(this).attr(&amp;quot;data-tabber-id&amp;quot;);&lt;br /&gt;
			if (tabber_id === undefined) tabber_id = String(tabber_i);&lt;br /&gt;
            $(this).attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
&lt;br /&gt;
            var tabber_head = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
            $(tabber_head).addClass(&amp;quot;tabberex-head&amp;quot;).attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
            $(this).removeClass(&amp;quot;tabberex&amp;quot;).addClass(&amp;quot;tabberex-body&amp;quot;);&lt;br /&gt;
			&lt;br /&gt;
			$(this).children(&amp;quot;.tabberex-tab&amp;quot;).each(function(i) {&lt;br /&gt;
				console.log(&#039;Processing head tab &#039; + tabber_id + &#039; &#039; + String(i));&lt;br /&gt;
				var tab_details = process_tabber_head_tab(this, i);&lt;br /&gt;
				console.log(&#039;Processing complete&#039;);&lt;br /&gt;
				tab_headers[i] = tab_details.header;&lt;br /&gt;
				tab_ex_headers[i] = tab_details.ex_header;&lt;br /&gt;
				if (tab_details.default)&lt;br /&gt;
					default_tab = i;&lt;br /&gt;
				tab_locations[i] = tab_details.location;&lt;br /&gt;
				&lt;br /&gt;
				// Get tab content&lt;br /&gt;
				$(this).css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
				tab_contents[i] = $(this);&lt;br /&gt;
			});&lt;br /&gt;
&lt;br /&gt;
            tabberex_buildTabHead(tabber_head, tabber_id, tab_headers, tab_ex_headers, tab_locations);&lt;br /&gt;
			if (default_tabs[tabber_id] === undefined)&lt;br /&gt;
				default_tabs[tabber_id] = default_tab;&lt;br /&gt;
            $(tabber_head).insertBefore(this);&lt;br /&gt;
			tabber_ids.push(tabber_id);&lt;br /&gt;
			tabber_i++;&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		// Select default tabs&lt;br /&gt;
		for (var i in tabber_ids)&lt;br /&gt;
		{&lt;br /&gt;
			tabberex_showTab(tabber_ids[i], default_tabs[tabber_ids[i]] + 1);&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
 &lt;br /&gt;
	mw.hook(&amp;quot;wikipage.content&amp;quot;).add(process_tabbers);&lt;br /&gt;
}(this, jQuery, mediaWiki));&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * @title           SoundcloudPlayer.js&lt;br /&gt;
 * @version         1.1.2&lt;br /&gt;
 * @description     Add support for soundcloud players&lt;br /&gt;
 * @author          Himmalerin&lt;br /&gt;
 * @license         CC-BY-SA-3.0&lt;br /&gt;
 */&lt;br /&gt;
(function () {&lt;br /&gt;
	// Build the iframe&lt;br /&gt;
	const scPlayer = function (data) {&lt;br /&gt;
		const widget = document.createElement(&#039;iframe&#039;);&lt;br /&gt;
&lt;br /&gt;
		widget.classList.add(&#039;soundcloud-player&#039;);&lt;br /&gt;
&lt;br /&gt;
		widget.src =&lt;br /&gt;
			&#039;https://w.soundcloud.com/player/?show_artwork=false&amp;amp;url=&#039; +&lt;br /&gt;
			encodeURI(data.src);&lt;br /&gt;
&lt;br /&gt;
		// If data-color is set add the value to the iframe&lt;br /&gt;
		if (data.color) widget.src += &#039;&amp;amp;color=&#039; + encodeURIComponent(data.color);&lt;br /&gt;
		// If data-width/height are set add that value to the iframe&lt;br /&gt;
		if (data.width) widget.width = data.width;&lt;br /&gt;
		if (data.height) widget.height = data.height;&lt;br /&gt;
&lt;br /&gt;
		return widget;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	const scParseTags = function ($content) {&lt;br /&gt;
		// Get all instances of the soundcloud class&lt;br /&gt;
		const scTags = $content.find(&#039;.soundcloud&#039;);&lt;br /&gt;
&lt;br /&gt;
		// For each instance of the soundcloud class run scPlayer&lt;br /&gt;
		for (var i = 0; i &amp;lt; scTags.length; i++) {&lt;br /&gt;
			scTags[i].replaceWith(scPlayer(scTags[i].dataset));&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	mw.hook(&#039;wikipage.content&#039;).add(function ($content) {&lt;br /&gt;
		scParseTags($content);&lt;br /&gt;
	});&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
https://dev.fandom.com/wiki/MediaWiki:CopyText/code.js&lt;br /&gt;
 */&lt;br /&gt;
(function () {&lt;br /&gt;
    if (window.CopyTextLoaded) {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    window.CopyTextLoaded = true;&lt;br /&gt;
    mw.hook(&#039;dev.i18n&#039;).add(function (i18n) {&lt;br /&gt;
        i18n.loadMessages(&#039;CopyText&#039;).done(function (i18n) {&lt;br /&gt;
            function showSuccess() {&lt;br /&gt;
                if (window.BannerNotification) {&lt;br /&gt;
                    new BannerNotification(i18n.msg(&#039;success&#039;).escape(), &#039;confirm&#039;, null, 5000).show();&lt;br /&gt;
                } else {&lt;br /&gt;
                    mw.notify(i18n.msg(&#039;success&#039;).plain());&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $(&#039;body&#039;).on(&#039;click&#039;, &#039;.copy-to-clipboard-button&#039;, function(e){&lt;br /&gt;
                var text = $(this).data(&#039;text&#039;),&lt;br /&gt;
                $input = $(&#039;&amp;lt;textarea&amp;gt;&#039;, { type: &#039;text&#039; })&lt;br /&gt;
                    .val($(&#039;.copy-to-clipboard-text&#039;).filter(function() {&lt;br /&gt;
                        return $(this).data(&#039;text&#039;) == text;&lt;br /&gt;
                    }).first().text())&lt;br /&gt;
                    .appendTo(&#039;body&#039;)&lt;br /&gt;
                    .select();&lt;br /&gt;
                var success = document.execCommand(&#039;Copy&#039;);&lt;br /&gt;
                $input.remove();&lt;br /&gt;
                if (success) {&lt;br /&gt;
                    showSuccess();&lt;br /&gt;
                } else {&lt;br /&gt;
                    if (window.navigator &amp;amp;&amp;amp; navigator.clipboard &amp;amp;&amp;amp; navigator.clipboard.writeText) {&lt;br /&gt;
                        navigator.clipboard.writeText(text).then(function() {&lt;br /&gt;
                            showSuccess();&lt;br /&gt;
                        });&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/* custom one-time animations */&lt;br /&gt;
(function() {&lt;br /&gt;
	// ensure the timeout here is longer than any animation timeouts you may want to prevent from playing again&lt;br /&gt;
	function ensureOnetimeAnimationsByTimeout(elem) {&lt;br /&gt;
		setTimeout(() =&amp;gt; { elem.classList.add(&amp;quot;inhibit-load-animations&amp;quot;); }, 1000);&lt;br /&gt;
	}&lt;br /&gt;
	// this should work&lt;br /&gt;
	function ensureOnetimeAnimations(elem) {&lt;br /&gt;
		// needs Web Animations API&lt;br /&gt;
		const animations = elem.getAnimations({ subtree: true });&lt;br /&gt;
		if (animations.length &amp;gt; 0) {&lt;br /&gt;
			Promise.all(&lt;br /&gt;
				animations.map(a =&amp;gt; a.finished)&lt;br /&gt;
			).then(function () {&lt;br /&gt;
				console.log(&amp;quot;inhibiting after all are done&amp;quot;)&lt;br /&gt;
				elem.classList.add(&amp;quot;inhibit-load-animations&amp;quot;);&lt;br /&gt;
			});&lt;br /&gt;
		} else {&lt;br /&gt;
			ensureOnetimeAnimationsByTimeout(elem);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	mw.hook(&#039;wikipage.content&#039;).add(() =&amp;gt; {&lt;br /&gt;
		const selectors = [&amp;quot;#mw-content&amp;quot;, &amp;quot;#mw-site-navigation&amp;quot;, &amp;quot;#mw-related-navigation&amp;quot;];&lt;br /&gt;
		const elems = document.querySelectorAll(selectors.join(&amp;quot;,&amp;quot;));&lt;br /&gt;
		if (&#039;getAnimations&#039; in Element.prototype) {&lt;br /&gt;
			for (const elem of elems) {&lt;br /&gt;
				ensureOnetimeAnimations(elem);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		else {&lt;br /&gt;
			for (const elem of elems) {&lt;br /&gt;
				ensureOnetimeAnimationsByTimeout(elem);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	})&lt;br /&gt;
})()&lt;/div&gt;</summary>
		<author><name>Pynappo</name></author>
	</entry>
	<entry>
		<id>https://nbittrpgwiki.pynappo.xyz/index.php?title=MediaWiki:Common.js&amp;diff=3016</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://nbittrpgwiki.pynappo.xyz/index.php?title=MediaWiki:Common.js&amp;diff=3016"/>
		<updated>2026-09-25T12:19:33Z</updated>

		<summary type="html">&lt;p&gt;Pynappo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/*&lt;br /&gt;
    Template:Spoiler on dev.miraheze.org&lt;br /&gt;
*/&lt;br /&gt;
$(function(){&lt;br /&gt;
    //spoiler block behavior&lt;br /&gt;
	$(&#039;.spoiler&#039;).click(function(){&lt;br /&gt;
		$(this).toggleClass(&#039;off&#039;);&lt;br /&gt;
	});&lt;br /&gt;
	// spoiler button behavior&lt;br /&gt;
    $(&#039;#spoilerbtn&#039;).text(&#039;Show all spoilers&#039;);&lt;br /&gt;
	$(&#039;#spoilerbtn&#039;).click(function(){&lt;br /&gt;
		$(this).toggleClass(&#039;hide&#039;);&lt;br /&gt;
		$(&#039;.spoiler&#039;).toggleClass(&#039;showall&#039;);&lt;br /&gt;
		&lt;br /&gt;
		if ($(this).is(&#039;.hide&#039;)){ $(this).text(&#039;Hide all spoilers&#039;); } &lt;br /&gt;
        else { $(this).text(&#039;Show all spoilers&#039;); }&lt;br /&gt;
	});	&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * TabberEX&lt;br /&gt;
 *&lt;br /&gt;
 * @version 2.3&lt;br /&gt;
 *&lt;br /&gt;
 * @author Jono99 &amp;lt;https://phigros.fandom.com/wiki/User:Jono99&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * documentation and examples at:&lt;br /&gt;
 * &amp;lt;https://dev.fandom.com/wiki/TabberEX&amp;gt;&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
 (function (window, $, mw) {&lt;br /&gt;
	// Function called by tabs to switch tabs&lt;br /&gt;
	window.tabberex_switchTab = function(tabber_id, tab)&lt;br /&gt;
	{&lt;br /&gt;
		tabberex_hideAllTabs(tabber_id);&lt;br /&gt;
		tabberex_showTab(tabber_id, tab);&lt;br /&gt;
	};&lt;br /&gt;
 &lt;br /&gt;
	// Inject CSS&lt;br /&gt;
	(function() {&lt;br /&gt;
		var tabberex_css = document.createElement(&amp;quot;style&amp;quot;);&lt;br /&gt;
		tabberex_css.innerHTML = &amp;quot;/* CSS owned by FANDOM */\n.oo-ui-tabOptionWidget{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;vertical-align:bottom;align-items:center;color:color-mix(in srgb, var(--text-color) 75%, transparent);display:inline-flex;font-size:14px;font-weight:500;height:40px;letter-spacing:.5px;margin:0;padding:0 11px;-webkit-transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s;-moz-transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s;transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s}.oo-ui-tabSelectWidget:not(.oo-ui-tabSelectWidget-framed) .oo-ui-tabOptionWidget{-webkit-transition:color .3s,box-shadow .3s;-moz-transition:color .3s,box-shadow .3s;transition:color .3s,box-shadow .3s;border-bottom:1px solid var(--banner-color)}.oo-ui-tabSelectWidget:not(.oo-ui-tabSelectWidget-framed) .oo-ui-tabOptionWidget.oo-ui-optionWidget-selected{box-shadow:inset 0 -2px 0 0 var(--link-color);color:var(--link-color)}&amp;quot;;&lt;br /&gt;
		document.head.appendChild(tabberex_css);&lt;br /&gt;
	})();&lt;br /&gt;
		&lt;br /&gt;
	window.tabberex_showTab = function(tabber_id, i)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;)&lt;br /&gt;
		.addClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;default&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$($(&amp;quot;.tabberex-body&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;).get()).each(function () {&lt;br /&gt;
            var display_value = $(this).attr(&amp;quot;data-tab-display&amp;quot;);&lt;br /&gt;
            if (display_value === undefined) display_value = &amp;quot;block&amp;quot;;&lt;br /&gt;
            $(this).css(&amp;quot;display&amp;quot;, display_value);&lt;br /&gt;
        });&lt;br /&gt;
	};&lt;br /&gt;
	 &lt;br /&gt;
	window.tabberex_hideTab = function(tabber_id, i)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;)&lt;br /&gt;
		.removeClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$(&amp;quot;.tabberex-body&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;).css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
			&lt;br /&gt;
	window.tabberex_hideAllTabs = function(tabber_id)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children()&lt;br /&gt;
		.removeClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$(&amp;quot;.tabberex-body&amp;quot; + base_selector).children().css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var tabberex_buildTabHead = function(host_div, tabber_id, tab_headers, tab_ex_headers, tab_locations)&lt;br /&gt;
	{&lt;br /&gt;
		var tabber_head = host_div;&lt;br /&gt;
		tabber_head.innerHTML = &amp;quot;&amp;quot;;&lt;br /&gt;
		$(tabber_head).addClass(&amp;quot;tabberex-head oo-ui-widget oo-ui-widget-enabled oo-ui-selectWidget oo-ui-selectWidget-unpressed oo-ui-selectWidget-depressed oo-ui-tabSelectWidget&amp;quot;)&lt;br /&gt;
		.attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
		for (var i = 0; i &amp;lt; tab_headers.length; i++)&lt;br /&gt;
		{&lt;br /&gt;
			console.log(&amp;quot;Building tab &amp;quot; + tabber_id + &amp;quot; &amp;quot; + String(i));&lt;br /&gt;
			var tab = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
			$(tab).addClass(&amp;quot;oo-ui-widget oo-ui-widget-enabled oo-ui-labelElement oo-ui-optionWidget oo-ui-tabOptionWidget&amp;quot;)&lt;br /&gt;
			.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
			if (tab_locations[i] === undefined)&lt;br /&gt;
				$(tab).attr(&amp;quot;onclick&amp;quot;, &amp;quot;tabberex_switchTab(\&amp;quot;&amp;quot; + mw.html.escape(tabber_id) + &amp;quot;\&amp;quot;, &amp;quot; + (i + 1) + &amp;quot;)&amp;quot;);&lt;br /&gt;
			else&lt;br /&gt;
				$(tab).attr(&amp;quot;onclick&amp;quot;, &amp;quot;location = \&amp;quot;&amp;quot; + mw.html.escape(tab_locations[i]) + &amp;quot;\&amp;quot;&amp;quot;);&lt;br /&gt;
			var tab_span = document.createElement(&amp;quot;span&amp;quot;);&lt;br /&gt;
			$(tab_span).addClass(&amp;quot;oo-ui-labelElement-label&amp;quot;);&lt;br /&gt;
			if (tab_ex_headers[i] === undefined)&lt;br /&gt;
				$(tab_span).text(tab_headers[i]);&lt;br /&gt;
			else&lt;br /&gt;
			{&lt;br /&gt;
				console.log(&amp;quot;EX Header present&amp;quot;);&lt;br /&gt;
				for (var attr in tab_ex_headers[i][1])&lt;br /&gt;
					tab_span.setAttribute(attr, tab_ex_headers[i][1][attr]);&lt;br /&gt;
				$(tab_span).html(tab_ex_headers[i][0]);&lt;br /&gt;
			}&lt;br /&gt;
			tab.appendChild(tab_span);&lt;br /&gt;
			tabber_head.appendChild(tab);&lt;br /&gt;
			console.log(&amp;quot;Successfully built tab&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		return tabber_head.outerHTML;&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var process_tabber_head_tab = function(tab_element, i)&lt;br /&gt;
	{&lt;br /&gt;
		// Get header&lt;br /&gt;
		var header = $(tab_element).attr(&amp;quot;data-tab-header&amp;quot;);&lt;br /&gt;
		if (header === undefined) header = i + 1;&lt;br /&gt;
		&lt;br /&gt;
		// Get ex header&lt;br /&gt;
		var ex_header;&lt;br /&gt;
		function get_ex_header(_) {&lt;br /&gt;
			console.log(&#039;EX Header found&#039;);&lt;br /&gt;
			var attributes = {};&lt;br /&gt;
			var attrs = this.getAttributeNames();&lt;br /&gt;
			for (var i in attrs)&lt;br /&gt;
				attributes[attrs[i]] = this.getAttribute(attrs[i]);&lt;br /&gt;
			ex_header = [$(this).html(), attributes];&lt;br /&gt;
			$(this).remove();&lt;br /&gt;
		}&lt;br /&gt;
		$(tab_element).children(&amp;quot;p&amp;quot;).children(&amp;quot;span.tabberex-tab-header&amp;quot;).each(get_ex_header);&lt;br /&gt;
		$(tab_element).children(&amp;quot;span.tabberex-tab-header&amp;quot;).each(get_ex_header);&lt;br /&gt;
		&lt;br /&gt;
		// Get default&lt;br /&gt;
		var is_default = false;&lt;br /&gt;
		if ($(tab_element).hasClass(&amp;quot;tabberex-tab-default&amp;quot;))&lt;br /&gt;
			is_default = true;&lt;br /&gt;
		&lt;br /&gt;
		// Get tab location&lt;br /&gt;
		var tab_location = $(this).attr(&amp;quot;data-tab-location&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		return {&amp;quot;header&amp;quot;: header, &amp;quot;ex_header&amp;quot;: ex_header, &amp;quot;default&amp;quot;: is_default, &amp;quot;location&amp;quot;: tab_location};&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var process_tabbers = function()&lt;br /&gt;
	{&lt;br /&gt;
		console.log(&#039;TabberEX started&#039;);&lt;br /&gt;
		var tabber_i = 0;&lt;br /&gt;
		var default_tabs = {};&lt;br /&gt;
		var tabber_ids = [];&lt;br /&gt;
		// The tabs are iterated through backwards to properly handle tabbers that are nested within other tabbers&lt;br /&gt;
		$($(&amp;quot;.tabberex-head&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			var tab_headers = [];&lt;br /&gt;
			var tab_ex_headers = [];&lt;br /&gt;
			var tab_locations = [];&lt;br /&gt;
			var default_tab = 0;&lt;br /&gt;
				&lt;br /&gt;
			var tabber_id = $(this).attr(&amp;quot;data-tabber-id&amp;quot;);&lt;br /&gt;
			if (tabber_id === undefined) tabber_id = String(tabber_i);&lt;br /&gt;
				&lt;br /&gt;
			$(this).children(&amp;quot;.tabberex-tab&amp;quot;).each(function(i) {&lt;br /&gt;
				console.log(&#039;Processing head tab &#039; + tabber_id + &#039; &#039; + String(i));&lt;br /&gt;
				var tab_details = process_tabber_head_tab(this, i);&lt;br /&gt;
				console.log(&#039;Processing complete&#039;);&lt;br /&gt;
				tab_headers[i] = tab_details.header;&lt;br /&gt;
				tab_ex_headers[i] = tab_details.ex_header;&lt;br /&gt;
				if (tab_details.default)&lt;br /&gt;
					default_tab = i;&lt;br /&gt;
				tab_locations[i] = tab_details.location;&lt;br /&gt;
				$(this).detach();&lt;br /&gt;
			});&lt;br /&gt;
			&lt;br /&gt;
			// Insert tabs into DOM&lt;br /&gt;
			tabberex_buildTabHead(this, tabber_id, tab_headers, tab_ex_headers, tab_locations);&lt;br /&gt;
			if (default_tabs[tabber_id] === undefined)&lt;br /&gt;
				default_tabs[tabber_id] = default_tab;&lt;br /&gt;
			tabber_ids.push(tabber_id);&lt;br /&gt;
			tabber_i++;&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		$($(&amp;quot;.tabberex-body&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			$(this).children().css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		$($(&amp;quot;.tabberex&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			var tab_headers = [];&lt;br /&gt;
			var tab_ex_headers = [];&lt;br /&gt;
			var tab_locations = [];&lt;br /&gt;
			var default_tab = 0;&lt;br /&gt;
			var tab_contents = [];&lt;br /&gt;
			&lt;br /&gt;
			var tabber_id = $(this).attr(&amp;quot;data-tabber-id&amp;quot;);&lt;br /&gt;
			if (tabber_id === undefined) tabber_id = String(tabber_i);&lt;br /&gt;
            $(this).attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
&lt;br /&gt;
            var tabber_head = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
            $(tabber_head).addClass(&amp;quot;tabberex-head&amp;quot;).attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
            $(this).removeClass(&amp;quot;tabberex&amp;quot;).addClass(&amp;quot;tabberex-body&amp;quot;);&lt;br /&gt;
			&lt;br /&gt;
			$(this).children(&amp;quot;.tabberex-tab&amp;quot;).each(function(i) {&lt;br /&gt;
				console.log(&#039;Processing head tab &#039; + tabber_id + &#039; &#039; + String(i));&lt;br /&gt;
				var tab_details = process_tabber_head_tab(this, i);&lt;br /&gt;
				console.log(&#039;Processing complete&#039;);&lt;br /&gt;
				tab_headers[i] = tab_details.header;&lt;br /&gt;
				tab_ex_headers[i] = tab_details.ex_header;&lt;br /&gt;
				if (tab_details.default)&lt;br /&gt;
					default_tab = i;&lt;br /&gt;
				tab_locations[i] = tab_details.location;&lt;br /&gt;
				&lt;br /&gt;
				// Get tab content&lt;br /&gt;
				$(this).css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
				tab_contents[i] = $(this);&lt;br /&gt;
			});&lt;br /&gt;
&lt;br /&gt;
            tabberex_buildTabHead(tabber_head, tabber_id, tab_headers, tab_ex_headers, tab_locations);&lt;br /&gt;
			if (default_tabs[tabber_id] === undefined)&lt;br /&gt;
				default_tabs[tabber_id] = default_tab;&lt;br /&gt;
            $(tabber_head).insertBefore(this);&lt;br /&gt;
			tabber_ids.push(tabber_id);&lt;br /&gt;
			tabber_i++;&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		// Select default tabs&lt;br /&gt;
		for (var i in tabber_ids)&lt;br /&gt;
		{&lt;br /&gt;
			tabberex_showTab(tabber_ids[i], default_tabs[tabber_ids[i]] + 1);&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
 &lt;br /&gt;
	mw.hook(&amp;quot;wikipage.content&amp;quot;).add(process_tabbers);&lt;br /&gt;
}(this, jQuery, mediaWiki));&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * @title           SoundcloudPlayer.js&lt;br /&gt;
 * @version         1.1.2&lt;br /&gt;
 * @description     Add support for soundcloud players&lt;br /&gt;
 * @author          Himmalerin&lt;br /&gt;
 * @license         CC-BY-SA-3.0&lt;br /&gt;
 */&lt;br /&gt;
(function () {&lt;br /&gt;
	// Build the iframe&lt;br /&gt;
	const scPlayer = function (data) {&lt;br /&gt;
		const widget = document.createElement(&#039;iframe&#039;);&lt;br /&gt;
&lt;br /&gt;
		widget.classList.add(&#039;soundcloud-player&#039;);&lt;br /&gt;
&lt;br /&gt;
		widget.src =&lt;br /&gt;
			&#039;https://w.soundcloud.com/player/?show_artwork=false&amp;amp;url=&#039; +&lt;br /&gt;
			encodeURI(data.src);&lt;br /&gt;
&lt;br /&gt;
		// If data-color is set add the value to the iframe&lt;br /&gt;
		if (data.color) widget.src += &#039;&amp;amp;color=&#039; + encodeURIComponent(data.color);&lt;br /&gt;
		// If data-width/height are set add that value to the iframe&lt;br /&gt;
		if (data.width) widget.width = data.width;&lt;br /&gt;
		if (data.height) widget.height = data.height;&lt;br /&gt;
&lt;br /&gt;
		return widget;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	const scParseTags = function ($content) {&lt;br /&gt;
		// Get all instances of the soundcloud class&lt;br /&gt;
		const scTags = $content.find(&#039;.soundcloud&#039;);&lt;br /&gt;
&lt;br /&gt;
		// For each instance of the soundcloud class run scPlayer&lt;br /&gt;
		for (var i = 0; i &amp;lt; scTags.length; i++) {&lt;br /&gt;
			scTags[i].replaceWith(scPlayer(scTags[i].dataset));&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	mw.hook(&#039;wikipage.content&#039;).add(function ($content) {&lt;br /&gt;
		scParseTags($content);&lt;br /&gt;
	});&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
https://dev.fandom.com/wiki/MediaWiki:CopyText/code.js&lt;br /&gt;
 */&lt;br /&gt;
(function () {&lt;br /&gt;
    if (window.CopyTextLoaded) {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    window.CopyTextLoaded = true;&lt;br /&gt;
    mw.hook(&#039;dev.i18n&#039;).add(function (i18n) {&lt;br /&gt;
        i18n.loadMessages(&#039;CopyText&#039;).done(function (i18n) {&lt;br /&gt;
            function showSuccess() {&lt;br /&gt;
                if (window.BannerNotification) {&lt;br /&gt;
                    new BannerNotification(i18n.msg(&#039;success&#039;).escape(), &#039;confirm&#039;, null, 5000).show();&lt;br /&gt;
                } else {&lt;br /&gt;
                    mw.notify(i18n.msg(&#039;success&#039;).plain());&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $(&#039;body&#039;).on(&#039;click&#039;, &#039;.copy-to-clipboard-button&#039;, function(e){&lt;br /&gt;
                var text = $(this).data(&#039;text&#039;),&lt;br /&gt;
                $input = $(&#039;&amp;lt;textarea&amp;gt;&#039;, { type: &#039;text&#039; })&lt;br /&gt;
                    .val($(&#039;.copy-to-clipboard-text&#039;).filter(function() {&lt;br /&gt;
                        return $(this).data(&#039;text&#039;) == text;&lt;br /&gt;
                    }).first().text())&lt;br /&gt;
                    .appendTo(&#039;body&#039;)&lt;br /&gt;
                    .select();&lt;br /&gt;
                var success = document.execCommand(&#039;Copy&#039;);&lt;br /&gt;
                $input.remove();&lt;br /&gt;
                if (success) {&lt;br /&gt;
                    showSuccess();&lt;br /&gt;
                } else {&lt;br /&gt;
                    if (window.navigator &amp;amp;&amp;amp; navigator.clipboard &amp;amp;&amp;amp; navigator.clipboard.writeText) {&lt;br /&gt;
                        navigator.clipboard.writeText(text).then(function() {&lt;br /&gt;
                            showSuccess();&lt;br /&gt;
                        });&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/* custom one-time animations */&lt;br /&gt;
(function() {&lt;br /&gt;
	// ensure the timeout here is longer than any animation timeouts you may want to prevent from playing again&lt;br /&gt;
	function ensureOnetimeAnimationsByTimeout(elem) {&lt;br /&gt;
		setTimeout(() =&amp;gt; { elem.classList.add(&amp;quot;inhibit-load-animations&amp;quot;); }, 1000);&lt;br /&gt;
	}&lt;br /&gt;
	// this should work&lt;br /&gt;
	function ensureOnetimeAnimations(elem) {&lt;br /&gt;
		// needs Web Animations API&lt;br /&gt;
		const animations = elem.getAnimations({ subtree: true });&lt;br /&gt;
		if (animations.length &amp;gt; 0) {&lt;br /&gt;
			Promise.all(&lt;br /&gt;
				animations.map(a =&amp;gt; a.finished)&lt;br /&gt;
			).then(function () {&lt;br /&gt;
				console.log(&amp;quot;inhibiting after all are done&amp;quot;, elem)&lt;br /&gt;
				elem.classList.add(&amp;quot;inhibit-load-animations&amp;quot;);&lt;br /&gt;
			});&lt;br /&gt;
		} else {&lt;br /&gt;
			ensureOnetimeAnimationsByTimeout(elem);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	mw.hook(&#039;wikipage.content&#039;).add(() =&amp;gt; {&lt;br /&gt;
		const selectors = [&amp;quot;#mw-content&amp;quot;, &amp;quot;#mw-site-navigation&amp;quot;, &amp;quot;#mw-related-navigation&amp;quot;];&lt;br /&gt;
		const elems = document.querySelectorAll(selectors.join(&amp;quot;,&amp;quot;));&lt;br /&gt;
		if (&#039;getAnimations&#039; in Element.prototype) {&lt;br /&gt;
			for (const elem of elems) {&lt;br /&gt;
				ensureOnetimeAnimations(elem);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		else {&lt;br /&gt;
			for (const elem of elems) {&lt;br /&gt;
				ensureOnetimeAnimationsByTimeout(elem);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	})&lt;br /&gt;
})()&lt;/div&gt;</summary>
		<author><name>Pynappo</name></author>
	</entry>
	<entry>
		<id>https://nbittrpgwiki.pynappo.xyz/index.php?title=MediaWiki:Common.js&amp;diff=3015</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://nbittrpgwiki.pynappo.xyz/index.php?title=MediaWiki:Common.js&amp;diff=3015"/>
		<updated>2026-09-25T12:17:28Z</updated>

		<summary type="html">&lt;p&gt;Pynappo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/*&lt;br /&gt;
    Template:Spoiler on dev.miraheze.org&lt;br /&gt;
*/&lt;br /&gt;
$(function(){&lt;br /&gt;
    //spoiler block behavior&lt;br /&gt;
	$(&#039;.spoiler&#039;).click(function(){&lt;br /&gt;
		$(this).toggleClass(&#039;off&#039;);&lt;br /&gt;
	});&lt;br /&gt;
	// spoiler button behavior&lt;br /&gt;
    $(&#039;#spoilerbtn&#039;).text(&#039;Show all spoilers&#039;);&lt;br /&gt;
	$(&#039;#spoilerbtn&#039;).click(function(){&lt;br /&gt;
		$(this).toggleClass(&#039;hide&#039;);&lt;br /&gt;
		$(&#039;.spoiler&#039;).toggleClass(&#039;showall&#039;);&lt;br /&gt;
		&lt;br /&gt;
		if ($(this).is(&#039;.hide&#039;)){ $(this).text(&#039;Hide all spoilers&#039;); } &lt;br /&gt;
        else { $(this).text(&#039;Show all spoilers&#039;); }&lt;br /&gt;
	});	&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * TabberEX&lt;br /&gt;
 *&lt;br /&gt;
 * @version 2.3&lt;br /&gt;
 *&lt;br /&gt;
 * @author Jono99 &amp;lt;https://phigros.fandom.com/wiki/User:Jono99&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * documentation and examples at:&lt;br /&gt;
 * &amp;lt;https://dev.fandom.com/wiki/TabberEX&amp;gt;&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
 (function (window, $, mw) {&lt;br /&gt;
	// Function called by tabs to switch tabs&lt;br /&gt;
	window.tabberex_switchTab = function(tabber_id, tab)&lt;br /&gt;
	{&lt;br /&gt;
		tabberex_hideAllTabs(tabber_id);&lt;br /&gt;
		tabberex_showTab(tabber_id, tab);&lt;br /&gt;
	};&lt;br /&gt;
 &lt;br /&gt;
	// Inject CSS&lt;br /&gt;
	(function() {&lt;br /&gt;
		var tabberex_css = document.createElement(&amp;quot;style&amp;quot;);&lt;br /&gt;
		tabberex_css.innerHTML = &amp;quot;/* CSS owned by FANDOM */\n.oo-ui-tabOptionWidget{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;vertical-align:bottom;align-items:center;color:color-mix(in srgb, var(--text-color) 75%, transparent);display:inline-flex;font-size:14px;font-weight:500;height:40px;letter-spacing:.5px;margin:0;padding:0 11px;-webkit-transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s;-moz-transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s;transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s}.oo-ui-tabSelectWidget:not(.oo-ui-tabSelectWidget-framed) .oo-ui-tabOptionWidget{-webkit-transition:color .3s,box-shadow .3s;-moz-transition:color .3s,box-shadow .3s;transition:color .3s,box-shadow .3s;border-bottom:1px solid var(--banner-color)}.oo-ui-tabSelectWidget:not(.oo-ui-tabSelectWidget-framed) .oo-ui-tabOptionWidget.oo-ui-optionWidget-selected{box-shadow:inset 0 -2px 0 0 var(--link-color);color:var(--link-color)}&amp;quot;;&lt;br /&gt;
		document.head.appendChild(tabberex_css);&lt;br /&gt;
	})();&lt;br /&gt;
		&lt;br /&gt;
	window.tabberex_showTab = function(tabber_id, i)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;)&lt;br /&gt;
		.addClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;default&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$($(&amp;quot;.tabberex-body&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;).get()).each(function () {&lt;br /&gt;
            var display_value = $(this).attr(&amp;quot;data-tab-display&amp;quot;);&lt;br /&gt;
            if (display_value === undefined) display_value = &amp;quot;block&amp;quot;;&lt;br /&gt;
            $(this).css(&amp;quot;display&amp;quot;, display_value);&lt;br /&gt;
        });&lt;br /&gt;
	};&lt;br /&gt;
	 &lt;br /&gt;
	window.tabberex_hideTab = function(tabber_id, i)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;)&lt;br /&gt;
		.removeClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$(&amp;quot;.tabberex-body&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;).css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
			&lt;br /&gt;
	window.tabberex_hideAllTabs = function(tabber_id)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children()&lt;br /&gt;
		.removeClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$(&amp;quot;.tabberex-body&amp;quot; + base_selector).children().css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var tabberex_buildTabHead = function(host_div, tabber_id, tab_headers, tab_ex_headers, tab_locations)&lt;br /&gt;
	{&lt;br /&gt;
		var tabber_head = host_div;&lt;br /&gt;
		tabber_head.innerHTML = &amp;quot;&amp;quot;;&lt;br /&gt;
		$(tabber_head).addClass(&amp;quot;tabberex-head oo-ui-widget oo-ui-widget-enabled oo-ui-selectWidget oo-ui-selectWidget-unpressed oo-ui-selectWidget-depressed oo-ui-tabSelectWidget&amp;quot;)&lt;br /&gt;
		.attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
		for (var i = 0; i &amp;lt; tab_headers.length; i++)&lt;br /&gt;
		{&lt;br /&gt;
			console.log(&amp;quot;Building tab &amp;quot; + tabber_id + &amp;quot; &amp;quot; + String(i));&lt;br /&gt;
			var tab = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
			$(tab).addClass(&amp;quot;oo-ui-widget oo-ui-widget-enabled oo-ui-labelElement oo-ui-optionWidget oo-ui-tabOptionWidget&amp;quot;)&lt;br /&gt;
			.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
			if (tab_locations[i] === undefined)&lt;br /&gt;
				$(tab).attr(&amp;quot;onclick&amp;quot;, &amp;quot;tabberex_switchTab(\&amp;quot;&amp;quot; + mw.html.escape(tabber_id) + &amp;quot;\&amp;quot;, &amp;quot; + (i + 1) + &amp;quot;)&amp;quot;);&lt;br /&gt;
			else&lt;br /&gt;
				$(tab).attr(&amp;quot;onclick&amp;quot;, &amp;quot;location = \&amp;quot;&amp;quot; + mw.html.escape(tab_locations[i]) + &amp;quot;\&amp;quot;&amp;quot;);&lt;br /&gt;
			var tab_span = document.createElement(&amp;quot;span&amp;quot;);&lt;br /&gt;
			$(tab_span).addClass(&amp;quot;oo-ui-labelElement-label&amp;quot;);&lt;br /&gt;
			if (tab_ex_headers[i] === undefined)&lt;br /&gt;
				$(tab_span).text(tab_headers[i]);&lt;br /&gt;
			else&lt;br /&gt;
			{&lt;br /&gt;
				console.log(&amp;quot;EX Header present&amp;quot;);&lt;br /&gt;
				for (var attr in tab_ex_headers[i][1])&lt;br /&gt;
					tab_span.setAttribute(attr, tab_ex_headers[i][1][attr]);&lt;br /&gt;
				$(tab_span).html(tab_ex_headers[i][0]);&lt;br /&gt;
			}&lt;br /&gt;
			tab.appendChild(tab_span);&lt;br /&gt;
			tabber_head.appendChild(tab);&lt;br /&gt;
			console.log(&amp;quot;Successfully built tab&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		return tabber_head.outerHTML;&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var process_tabber_head_tab = function(tab_element, i)&lt;br /&gt;
	{&lt;br /&gt;
		// Get header&lt;br /&gt;
		var header = $(tab_element).attr(&amp;quot;data-tab-header&amp;quot;);&lt;br /&gt;
		if (header === undefined) header = i + 1;&lt;br /&gt;
		&lt;br /&gt;
		// Get ex header&lt;br /&gt;
		var ex_header;&lt;br /&gt;
		function get_ex_header(_) {&lt;br /&gt;
			console.log(&#039;EX Header found&#039;);&lt;br /&gt;
			var attributes = {};&lt;br /&gt;
			var attrs = this.getAttributeNames();&lt;br /&gt;
			for (var i in attrs)&lt;br /&gt;
				attributes[attrs[i]] = this.getAttribute(attrs[i]);&lt;br /&gt;
			ex_header = [$(this).html(), attributes];&lt;br /&gt;
			$(this).remove();&lt;br /&gt;
		}&lt;br /&gt;
		$(tab_element).children(&amp;quot;p&amp;quot;).children(&amp;quot;span.tabberex-tab-header&amp;quot;).each(get_ex_header);&lt;br /&gt;
		$(tab_element).children(&amp;quot;span.tabberex-tab-header&amp;quot;).each(get_ex_header);&lt;br /&gt;
		&lt;br /&gt;
		// Get default&lt;br /&gt;
		var is_default = false;&lt;br /&gt;
		if ($(tab_element).hasClass(&amp;quot;tabberex-tab-default&amp;quot;))&lt;br /&gt;
			is_default = true;&lt;br /&gt;
		&lt;br /&gt;
		// Get tab location&lt;br /&gt;
		var tab_location = $(this).attr(&amp;quot;data-tab-location&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		return {&amp;quot;header&amp;quot;: header, &amp;quot;ex_header&amp;quot;: ex_header, &amp;quot;default&amp;quot;: is_default, &amp;quot;location&amp;quot;: tab_location};&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var process_tabbers = function()&lt;br /&gt;
	{&lt;br /&gt;
		console.log(&#039;TabberEX started&#039;);&lt;br /&gt;
		var tabber_i = 0;&lt;br /&gt;
		var default_tabs = {};&lt;br /&gt;
		var tabber_ids = [];&lt;br /&gt;
		// The tabs are iterated through backwards to properly handle tabbers that are nested within other tabbers&lt;br /&gt;
		$($(&amp;quot;.tabberex-head&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			var tab_headers = [];&lt;br /&gt;
			var tab_ex_headers = [];&lt;br /&gt;
			var tab_locations = [];&lt;br /&gt;
			var default_tab = 0;&lt;br /&gt;
				&lt;br /&gt;
			var tabber_id = $(this).attr(&amp;quot;data-tabber-id&amp;quot;);&lt;br /&gt;
			if (tabber_id === undefined) tabber_id = String(tabber_i);&lt;br /&gt;
				&lt;br /&gt;
			$(this).children(&amp;quot;.tabberex-tab&amp;quot;).each(function(i) {&lt;br /&gt;
				console.log(&#039;Processing head tab &#039; + tabber_id + &#039; &#039; + String(i));&lt;br /&gt;
				var tab_details = process_tabber_head_tab(this, i);&lt;br /&gt;
				console.log(&#039;Processing complete&#039;);&lt;br /&gt;
				tab_headers[i] = tab_details.header;&lt;br /&gt;
				tab_ex_headers[i] = tab_details.ex_header;&lt;br /&gt;
				if (tab_details.default)&lt;br /&gt;
					default_tab = i;&lt;br /&gt;
				tab_locations[i] = tab_details.location;&lt;br /&gt;
				$(this).detach();&lt;br /&gt;
			});&lt;br /&gt;
			&lt;br /&gt;
			// Insert tabs into DOM&lt;br /&gt;
			tabberex_buildTabHead(this, tabber_id, tab_headers, tab_ex_headers, tab_locations);&lt;br /&gt;
			if (default_tabs[tabber_id] === undefined)&lt;br /&gt;
				default_tabs[tabber_id] = default_tab;&lt;br /&gt;
			tabber_ids.push(tabber_id);&lt;br /&gt;
			tabber_i++;&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		$($(&amp;quot;.tabberex-body&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			$(this).children().css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		$($(&amp;quot;.tabberex&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			var tab_headers = [];&lt;br /&gt;
			var tab_ex_headers = [];&lt;br /&gt;
			var tab_locations = [];&lt;br /&gt;
			var default_tab = 0;&lt;br /&gt;
			var tab_contents = [];&lt;br /&gt;
			&lt;br /&gt;
			var tabber_id = $(this).attr(&amp;quot;data-tabber-id&amp;quot;);&lt;br /&gt;
			if (tabber_id === undefined) tabber_id = String(tabber_i);&lt;br /&gt;
            $(this).attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
&lt;br /&gt;
            var tabber_head = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
            $(tabber_head).addClass(&amp;quot;tabberex-head&amp;quot;).attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
            $(this).removeClass(&amp;quot;tabberex&amp;quot;).addClass(&amp;quot;tabberex-body&amp;quot;);&lt;br /&gt;
			&lt;br /&gt;
			$(this).children(&amp;quot;.tabberex-tab&amp;quot;).each(function(i) {&lt;br /&gt;
				console.log(&#039;Processing head tab &#039; + tabber_id + &#039; &#039; + String(i));&lt;br /&gt;
				var tab_details = process_tabber_head_tab(this, i);&lt;br /&gt;
				console.log(&#039;Processing complete&#039;);&lt;br /&gt;
				tab_headers[i] = tab_details.header;&lt;br /&gt;
				tab_ex_headers[i] = tab_details.ex_header;&lt;br /&gt;
				if (tab_details.default)&lt;br /&gt;
					default_tab = i;&lt;br /&gt;
				tab_locations[i] = tab_details.location;&lt;br /&gt;
				&lt;br /&gt;
				// Get tab content&lt;br /&gt;
				$(this).css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
				tab_contents[i] = $(this);&lt;br /&gt;
			});&lt;br /&gt;
&lt;br /&gt;
            tabberex_buildTabHead(tabber_head, tabber_id, tab_headers, tab_ex_headers, tab_locations);&lt;br /&gt;
			if (default_tabs[tabber_id] === undefined)&lt;br /&gt;
				default_tabs[tabber_id] = default_tab;&lt;br /&gt;
            $(tabber_head).insertBefore(this);&lt;br /&gt;
			tabber_ids.push(tabber_id);&lt;br /&gt;
			tabber_i++;&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		// Select default tabs&lt;br /&gt;
		for (var i in tabber_ids)&lt;br /&gt;
		{&lt;br /&gt;
			tabberex_showTab(tabber_ids[i], default_tabs[tabber_ids[i]] + 1);&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
 &lt;br /&gt;
	mw.hook(&amp;quot;wikipage.content&amp;quot;).add(process_tabbers);&lt;br /&gt;
}(this, jQuery, mediaWiki));&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * @title           SoundcloudPlayer.js&lt;br /&gt;
 * @version         1.1.2&lt;br /&gt;
 * @description     Add support for soundcloud players&lt;br /&gt;
 * @author          Himmalerin&lt;br /&gt;
 * @license         CC-BY-SA-3.0&lt;br /&gt;
 */&lt;br /&gt;
(function () {&lt;br /&gt;
	// Build the iframe&lt;br /&gt;
	const scPlayer = function (data) {&lt;br /&gt;
		const widget = document.createElement(&#039;iframe&#039;);&lt;br /&gt;
&lt;br /&gt;
		widget.classList.add(&#039;soundcloud-player&#039;);&lt;br /&gt;
&lt;br /&gt;
		widget.src =&lt;br /&gt;
			&#039;https://w.soundcloud.com/player/?show_artwork=false&amp;amp;url=&#039; +&lt;br /&gt;
			encodeURI(data.src);&lt;br /&gt;
&lt;br /&gt;
		// If data-color is set add the value to the iframe&lt;br /&gt;
		if (data.color) widget.src += &#039;&amp;amp;color=&#039; + encodeURIComponent(data.color);&lt;br /&gt;
		// If data-width/height are set add that value to the iframe&lt;br /&gt;
		if (data.width) widget.width = data.width;&lt;br /&gt;
		if (data.height) widget.height = data.height;&lt;br /&gt;
&lt;br /&gt;
		return widget;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	const scParseTags = function ($content) {&lt;br /&gt;
		// Get all instances of the soundcloud class&lt;br /&gt;
		const scTags = $content.find(&#039;.soundcloud&#039;);&lt;br /&gt;
&lt;br /&gt;
		// For each instance of the soundcloud class run scPlayer&lt;br /&gt;
		for (var i = 0; i &amp;lt; scTags.length; i++) {&lt;br /&gt;
			scTags[i].replaceWith(scPlayer(scTags[i].dataset));&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	mw.hook(&#039;wikipage.content&#039;).add(function ($content) {&lt;br /&gt;
		scParseTags($content);&lt;br /&gt;
	});&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
https://dev.fandom.com/wiki/MediaWiki:CopyText/code.js&lt;br /&gt;
 */&lt;br /&gt;
(function () {&lt;br /&gt;
    if (window.CopyTextLoaded) {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    window.CopyTextLoaded = true;&lt;br /&gt;
    mw.hook(&#039;dev.i18n&#039;).add(function (i18n) {&lt;br /&gt;
        i18n.loadMessages(&#039;CopyText&#039;).done(function (i18n) {&lt;br /&gt;
            function showSuccess() {&lt;br /&gt;
                if (window.BannerNotification) {&lt;br /&gt;
                    new BannerNotification(i18n.msg(&#039;success&#039;).escape(), &#039;confirm&#039;, null, 5000).show();&lt;br /&gt;
                } else {&lt;br /&gt;
                    mw.notify(i18n.msg(&#039;success&#039;).plain());&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $(&#039;body&#039;).on(&#039;click&#039;, &#039;.copy-to-clipboard-button&#039;, function(e){&lt;br /&gt;
                var text = $(this).data(&#039;text&#039;),&lt;br /&gt;
                $input = $(&#039;&amp;lt;textarea&amp;gt;&#039;, { type: &#039;text&#039; })&lt;br /&gt;
                    .val($(&#039;.copy-to-clipboard-text&#039;).filter(function() {&lt;br /&gt;
                        return $(this).data(&#039;text&#039;) == text;&lt;br /&gt;
                    }).first().text())&lt;br /&gt;
                    .appendTo(&#039;body&#039;)&lt;br /&gt;
                    .select();&lt;br /&gt;
                var success = document.execCommand(&#039;Copy&#039;);&lt;br /&gt;
                $input.remove();&lt;br /&gt;
                if (success) {&lt;br /&gt;
                    showSuccess();&lt;br /&gt;
                } else {&lt;br /&gt;
                    if (window.navigator &amp;amp;&amp;amp; navigator.clipboard &amp;amp;&amp;amp; navigator.clipboard.writeText) {&lt;br /&gt;
                        navigator.clipboard.writeText(text).then(function() {&lt;br /&gt;
                            showSuccess();&lt;br /&gt;
                        });&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/* custom one-time animations */&lt;br /&gt;
(function() {&lt;br /&gt;
	function ensureOnetimeAnimationsByTimeout(elem) {&lt;br /&gt;
		setTimeout(() =&amp;gt; { elem.classList.add(&amp;quot;inhibit-load-animations&amp;quot;); }, 500);&lt;br /&gt;
	}&lt;br /&gt;
	function ensureOnetimeAnimations(elem) {&lt;br /&gt;
		// needs Web Animations API&lt;br /&gt;
		const animations = elem.getAnimations({ subtree: true });&lt;br /&gt;
		if (animations.length &amp;gt; 0) {&lt;br /&gt;
			Promise.all(&lt;br /&gt;
				animations.map(a =&amp;gt; a.finished)&lt;br /&gt;
			).then(function () {&lt;br /&gt;
				elem.classList.add(&amp;quot;inhibit-load-animations&amp;quot;);&lt;br /&gt;
			});&lt;br /&gt;
		} else {&lt;br /&gt;
			ensureOnetimeAnimationsByTimeout(elem);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	mw.hook(&#039;wikipage.content&#039;).add(() =&amp;gt; {&lt;br /&gt;
		const selectors = [&amp;quot;#mw-content&amp;quot;, &amp;quot;#mw-site-navigation&amp;quot;, &amp;quot;#mw-related-navigation&amp;quot;];&lt;br /&gt;
		const elems = document.querySelectorAll(selectors.join(&amp;quot;,&amp;quot;));&lt;br /&gt;
		if (&#039;getAnimations&#039; in Element.prototype) {&lt;br /&gt;
			for (const elem of elems) {&lt;br /&gt;
				ensureOnetimeAnimations(elem);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		else {&lt;br /&gt;
			for (const elem of elems) {&lt;br /&gt;
				ensureOnetimeAnimationsByTimeout(elem);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	})&lt;br /&gt;
})()&lt;/div&gt;</summary>
		<author><name>Pynappo</name></author>
	</entry>
	<entry>
		<id>https://nbittrpgwiki.pynappo.xyz/index.php?title=MediaWiki:Common.js&amp;diff=3014</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://nbittrpgwiki.pynappo.xyz/index.php?title=MediaWiki:Common.js&amp;diff=3014"/>
		<updated>2026-09-25T12:05:14Z</updated>

		<summary type="html">&lt;p&gt;Pynappo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/*&lt;br /&gt;
    Template:Spoiler on dev.miraheze.org&lt;br /&gt;
*/&lt;br /&gt;
$(function(){&lt;br /&gt;
    //spoiler block behavior&lt;br /&gt;
	$(&#039;.spoiler&#039;).click(function(){&lt;br /&gt;
		$(this).toggleClass(&#039;off&#039;);&lt;br /&gt;
	});&lt;br /&gt;
	// spoiler button behavior&lt;br /&gt;
    $(&#039;#spoilerbtn&#039;).text(&#039;Show all spoilers&#039;);&lt;br /&gt;
	$(&#039;#spoilerbtn&#039;).click(function(){&lt;br /&gt;
		$(this).toggleClass(&#039;hide&#039;);&lt;br /&gt;
		$(&#039;.spoiler&#039;).toggleClass(&#039;showall&#039;);&lt;br /&gt;
		&lt;br /&gt;
		if ($(this).is(&#039;.hide&#039;)){ $(this).text(&#039;Hide all spoilers&#039;); } &lt;br /&gt;
        else { $(this).text(&#039;Show all spoilers&#039;); }&lt;br /&gt;
	});	&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * TabberEX&lt;br /&gt;
 *&lt;br /&gt;
 * @version 2.3&lt;br /&gt;
 *&lt;br /&gt;
 * @author Jono99 &amp;lt;https://phigros.fandom.com/wiki/User:Jono99&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * documentation and examples at:&lt;br /&gt;
 * &amp;lt;https://dev.fandom.com/wiki/TabberEX&amp;gt;&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
 (function (window, $, mw) {&lt;br /&gt;
	// Function called by tabs to switch tabs&lt;br /&gt;
	window.tabberex_switchTab = function(tabber_id, tab)&lt;br /&gt;
	{&lt;br /&gt;
		tabberex_hideAllTabs(tabber_id);&lt;br /&gt;
		tabberex_showTab(tabber_id, tab);&lt;br /&gt;
	};&lt;br /&gt;
 &lt;br /&gt;
	// Inject CSS&lt;br /&gt;
	(function() {&lt;br /&gt;
		var tabberex_css = document.createElement(&amp;quot;style&amp;quot;);&lt;br /&gt;
		tabberex_css.innerHTML = &amp;quot;/* CSS owned by FANDOM */\n.oo-ui-tabOptionWidget{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;vertical-align:bottom;align-items:center;color:color-mix(in srgb, var(--text-color) 75%, transparent);display:inline-flex;font-size:14px;font-weight:500;height:40px;letter-spacing:.5px;margin:0;padding:0 11px;-webkit-transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s;-moz-transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s;transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s}.oo-ui-tabSelectWidget:not(.oo-ui-tabSelectWidget-framed) .oo-ui-tabOptionWidget{-webkit-transition:color .3s,box-shadow .3s;-moz-transition:color .3s,box-shadow .3s;transition:color .3s,box-shadow .3s;border-bottom:1px solid var(--banner-color)}.oo-ui-tabSelectWidget:not(.oo-ui-tabSelectWidget-framed) .oo-ui-tabOptionWidget.oo-ui-optionWidget-selected{box-shadow:inset 0 -2px 0 0 var(--link-color);color:var(--link-color)}&amp;quot;;&lt;br /&gt;
		document.head.appendChild(tabberex_css);&lt;br /&gt;
	})();&lt;br /&gt;
		&lt;br /&gt;
	window.tabberex_showTab = function(tabber_id, i)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;)&lt;br /&gt;
		.addClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;default&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$($(&amp;quot;.tabberex-body&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;).get()).each(function () {&lt;br /&gt;
            var display_value = $(this).attr(&amp;quot;data-tab-display&amp;quot;);&lt;br /&gt;
            if (display_value === undefined) display_value = &amp;quot;block&amp;quot;;&lt;br /&gt;
            $(this).css(&amp;quot;display&amp;quot;, display_value);&lt;br /&gt;
        });&lt;br /&gt;
	};&lt;br /&gt;
	 &lt;br /&gt;
	window.tabberex_hideTab = function(tabber_id, i)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;)&lt;br /&gt;
		.removeClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$(&amp;quot;.tabberex-body&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;).css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
			&lt;br /&gt;
	window.tabberex_hideAllTabs = function(tabber_id)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children()&lt;br /&gt;
		.removeClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$(&amp;quot;.tabberex-body&amp;quot; + base_selector).children().css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var tabberex_buildTabHead = function(host_div, tabber_id, tab_headers, tab_ex_headers, tab_locations)&lt;br /&gt;
	{&lt;br /&gt;
		var tabber_head = host_div;&lt;br /&gt;
		tabber_head.innerHTML = &amp;quot;&amp;quot;;&lt;br /&gt;
		$(tabber_head).addClass(&amp;quot;tabberex-head oo-ui-widget oo-ui-widget-enabled oo-ui-selectWidget oo-ui-selectWidget-unpressed oo-ui-selectWidget-depressed oo-ui-tabSelectWidget&amp;quot;)&lt;br /&gt;
		.attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
		for (var i = 0; i &amp;lt; tab_headers.length; i++)&lt;br /&gt;
		{&lt;br /&gt;
			console.log(&amp;quot;Building tab &amp;quot; + tabber_id + &amp;quot; &amp;quot; + String(i));&lt;br /&gt;
			var tab = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
			$(tab).addClass(&amp;quot;oo-ui-widget oo-ui-widget-enabled oo-ui-labelElement oo-ui-optionWidget oo-ui-tabOptionWidget&amp;quot;)&lt;br /&gt;
			.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
			if (tab_locations[i] === undefined)&lt;br /&gt;
				$(tab).attr(&amp;quot;onclick&amp;quot;, &amp;quot;tabberex_switchTab(\&amp;quot;&amp;quot; + mw.html.escape(tabber_id) + &amp;quot;\&amp;quot;, &amp;quot; + (i + 1) + &amp;quot;)&amp;quot;);&lt;br /&gt;
			else&lt;br /&gt;
				$(tab).attr(&amp;quot;onclick&amp;quot;, &amp;quot;location = \&amp;quot;&amp;quot; + mw.html.escape(tab_locations[i]) + &amp;quot;\&amp;quot;&amp;quot;);&lt;br /&gt;
			var tab_span = document.createElement(&amp;quot;span&amp;quot;);&lt;br /&gt;
			$(tab_span).addClass(&amp;quot;oo-ui-labelElement-label&amp;quot;);&lt;br /&gt;
			if (tab_ex_headers[i] === undefined)&lt;br /&gt;
				$(tab_span).text(tab_headers[i]);&lt;br /&gt;
			else&lt;br /&gt;
			{&lt;br /&gt;
				console.log(&amp;quot;EX Header present&amp;quot;);&lt;br /&gt;
				for (var attr in tab_ex_headers[i][1])&lt;br /&gt;
					tab_span.setAttribute(attr, tab_ex_headers[i][1][attr]);&lt;br /&gt;
				$(tab_span).html(tab_ex_headers[i][0]);&lt;br /&gt;
			}&lt;br /&gt;
			tab.appendChild(tab_span);&lt;br /&gt;
			tabber_head.appendChild(tab);&lt;br /&gt;
			console.log(&amp;quot;Successfully built tab&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		return tabber_head.outerHTML;&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var process_tabber_head_tab = function(tab_element, i)&lt;br /&gt;
	{&lt;br /&gt;
		// Get header&lt;br /&gt;
		var header = $(tab_element).attr(&amp;quot;data-tab-header&amp;quot;);&lt;br /&gt;
		if (header === undefined) header = i + 1;&lt;br /&gt;
		&lt;br /&gt;
		// Get ex header&lt;br /&gt;
		var ex_header;&lt;br /&gt;
		function get_ex_header(_) {&lt;br /&gt;
			console.log(&#039;EX Header found&#039;);&lt;br /&gt;
			var attributes = {};&lt;br /&gt;
			var attrs = this.getAttributeNames();&lt;br /&gt;
			for (var i in attrs)&lt;br /&gt;
				attributes[attrs[i]] = this.getAttribute(attrs[i]);&lt;br /&gt;
			ex_header = [$(this).html(), attributes];&lt;br /&gt;
			$(this).remove();&lt;br /&gt;
		}&lt;br /&gt;
		$(tab_element).children(&amp;quot;p&amp;quot;).children(&amp;quot;span.tabberex-tab-header&amp;quot;).each(get_ex_header);&lt;br /&gt;
		$(tab_element).children(&amp;quot;span.tabberex-tab-header&amp;quot;).each(get_ex_header);&lt;br /&gt;
		&lt;br /&gt;
		// Get default&lt;br /&gt;
		var is_default = false;&lt;br /&gt;
		if ($(tab_element).hasClass(&amp;quot;tabberex-tab-default&amp;quot;))&lt;br /&gt;
			is_default = true;&lt;br /&gt;
		&lt;br /&gt;
		// Get tab location&lt;br /&gt;
		var tab_location = $(this).attr(&amp;quot;data-tab-location&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		return {&amp;quot;header&amp;quot;: header, &amp;quot;ex_header&amp;quot;: ex_header, &amp;quot;default&amp;quot;: is_default, &amp;quot;location&amp;quot;: tab_location};&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var process_tabbers = function()&lt;br /&gt;
	{&lt;br /&gt;
		console.log(&#039;TabberEX started&#039;);&lt;br /&gt;
		var tabber_i = 0;&lt;br /&gt;
		var default_tabs = {};&lt;br /&gt;
		var tabber_ids = [];&lt;br /&gt;
		// The tabs are iterated through backwards to properly handle tabbers that are nested within other tabbers&lt;br /&gt;
		$($(&amp;quot;.tabberex-head&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			var tab_headers = [];&lt;br /&gt;
			var tab_ex_headers = [];&lt;br /&gt;
			var tab_locations = [];&lt;br /&gt;
			var default_tab = 0;&lt;br /&gt;
				&lt;br /&gt;
			var tabber_id = $(this).attr(&amp;quot;data-tabber-id&amp;quot;);&lt;br /&gt;
			if (tabber_id === undefined) tabber_id = String(tabber_i);&lt;br /&gt;
				&lt;br /&gt;
			$(this).children(&amp;quot;.tabberex-tab&amp;quot;).each(function(i) {&lt;br /&gt;
				console.log(&#039;Processing head tab &#039; + tabber_id + &#039; &#039; + String(i));&lt;br /&gt;
				var tab_details = process_tabber_head_tab(this, i);&lt;br /&gt;
				console.log(&#039;Processing complete&#039;);&lt;br /&gt;
				tab_headers[i] = tab_details.header;&lt;br /&gt;
				tab_ex_headers[i] = tab_details.ex_header;&lt;br /&gt;
				if (tab_details.default)&lt;br /&gt;
					default_tab = i;&lt;br /&gt;
				tab_locations[i] = tab_details.location;&lt;br /&gt;
				$(this).detach();&lt;br /&gt;
			});&lt;br /&gt;
			&lt;br /&gt;
			// Insert tabs into DOM&lt;br /&gt;
			tabberex_buildTabHead(this, tabber_id, tab_headers, tab_ex_headers, tab_locations);&lt;br /&gt;
			if (default_tabs[tabber_id] === undefined)&lt;br /&gt;
				default_tabs[tabber_id] = default_tab;&lt;br /&gt;
			tabber_ids.push(tabber_id);&lt;br /&gt;
			tabber_i++;&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		$($(&amp;quot;.tabberex-body&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			$(this).children().css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		$($(&amp;quot;.tabberex&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			var tab_headers = [];&lt;br /&gt;
			var tab_ex_headers = [];&lt;br /&gt;
			var tab_locations = [];&lt;br /&gt;
			var default_tab = 0;&lt;br /&gt;
			var tab_contents = [];&lt;br /&gt;
			&lt;br /&gt;
			var tabber_id = $(this).attr(&amp;quot;data-tabber-id&amp;quot;);&lt;br /&gt;
			if (tabber_id === undefined) tabber_id = String(tabber_i);&lt;br /&gt;
            $(this).attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
&lt;br /&gt;
            var tabber_head = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
            $(tabber_head).addClass(&amp;quot;tabberex-head&amp;quot;).attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
            $(this).removeClass(&amp;quot;tabberex&amp;quot;).addClass(&amp;quot;tabberex-body&amp;quot;);&lt;br /&gt;
			&lt;br /&gt;
			$(this).children(&amp;quot;.tabberex-tab&amp;quot;).each(function(i) {&lt;br /&gt;
				console.log(&#039;Processing head tab &#039; + tabber_id + &#039; &#039; + String(i));&lt;br /&gt;
				var tab_details = process_tabber_head_tab(this, i);&lt;br /&gt;
				console.log(&#039;Processing complete&#039;);&lt;br /&gt;
				tab_headers[i] = tab_details.header;&lt;br /&gt;
				tab_ex_headers[i] = tab_details.ex_header;&lt;br /&gt;
				if (tab_details.default)&lt;br /&gt;
					default_tab = i;&lt;br /&gt;
				tab_locations[i] = tab_details.location;&lt;br /&gt;
				&lt;br /&gt;
				// Get tab content&lt;br /&gt;
				$(this).css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
				tab_contents[i] = $(this);&lt;br /&gt;
			});&lt;br /&gt;
&lt;br /&gt;
            tabberex_buildTabHead(tabber_head, tabber_id, tab_headers, tab_ex_headers, tab_locations);&lt;br /&gt;
			if (default_tabs[tabber_id] === undefined)&lt;br /&gt;
				default_tabs[tabber_id] = default_tab;&lt;br /&gt;
            $(tabber_head).insertBefore(this);&lt;br /&gt;
			tabber_ids.push(tabber_id);&lt;br /&gt;
			tabber_i++;&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		// Select default tabs&lt;br /&gt;
		for (var i in tabber_ids)&lt;br /&gt;
		{&lt;br /&gt;
			tabberex_showTab(tabber_ids[i], default_tabs[tabber_ids[i]] + 1);&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
 &lt;br /&gt;
	mw.hook(&amp;quot;wikipage.content&amp;quot;).add(process_tabbers);&lt;br /&gt;
}(this, jQuery, mediaWiki));&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * @title           SoundcloudPlayer.js&lt;br /&gt;
 * @version         1.1.2&lt;br /&gt;
 * @description     Add support for soundcloud players&lt;br /&gt;
 * @author          Himmalerin&lt;br /&gt;
 * @license         CC-BY-SA-3.0&lt;br /&gt;
 */&lt;br /&gt;
(function () {&lt;br /&gt;
	// Build the iframe&lt;br /&gt;
	const scPlayer = function (data) {&lt;br /&gt;
		const widget = document.createElement(&#039;iframe&#039;);&lt;br /&gt;
&lt;br /&gt;
		widget.classList.add(&#039;soundcloud-player&#039;);&lt;br /&gt;
&lt;br /&gt;
		widget.src =&lt;br /&gt;
			&#039;https://w.soundcloud.com/player/?show_artwork=false&amp;amp;url=&#039; +&lt;br /&gt;
			encodeURI(data.src);&lt;br /&gt;
&lt;br /&gt;
		// If data-color is set add the value to the iframe&lt;br /&gt;
		if (data.color) widget.src += &#039;&amp;amp;color=&#039; + encodeURIComponent(data.color);&lt;br /&gt;
		// If data-width/height are set add that value to the iframe&lt;br /&gt;
		if (data.width) widget.width = data.width;&lt;br /&gt;
		if (data.height) widget.height = data.height;&lt;br /&gt;
&lt;br /&gt;
		return widget;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	const scParseTags = function ($content) {&lt;br /&gt;
		// Get all instances of the soundcloud class&lt;br /&gt;
		const scTags = $content.find(&#039;.soundcloud&#039;);&lt;br /&gt;
&lt;br /&gt;
		// For each instance of the soundcloud class run scPlayer&lt;br /&gt;
		for (var i = 0; i &amp;lt; scTags.length; i++) {&lt;br /&gt;
			scTags[i].replaceWith(scPlayer(scTags[i].dataset));&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	mw.hook(&#039;wikipage.content&#039;).add(function ($content) {&lt;br /&gt;
		scParseTags($content);&lt;br /&gt;
	});&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
https://dev.fandom.com/wiki/MediaWiki:CopyText/code.js&lt;br /&gt;
 */&lt;br /&gt;
(function () {&lt;br /&gt;
    if (window.CopyTextLoaded) {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    window.CopyTextLoaded = true;&lt;br /&gt;
    mw.hook(&#039;dev.i18n&#039;).add(function (i18n) {&lt;br /&gt;
        i18n.loadMessages(&#039;CopyText&#039;).done(function (i18n) {&lt;br /&gt;
            function showSuccess() {&lt;br /&gt;
                if (window.BannerNotification) {&lt;br /&gt;
                    new BannerNotification(i18n.msg(&#039;success&#039;).escape(), &#039;confirm&#039;, null, 5000).show();&lt;br /&gt;
                } else {&lt;br /&gt;
                    mw.notify(i18n.msg(&#039;success&#039;).plain());&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $(&#039;body&#039;).on(&#039;click&#039;, &#039;.copy-to-clipboard-button&#039;, function(e){&lt;br /&gt;
                var text = $(this).data(&#039;text&#039;),&lt;br /&gt;
                $input = $(&#039;&amp;lt;textarea&amp;gt;&#039;, { type: &#039;text&#039; })&lt;br /&gt;
                    .val($(&#039;.copy-to-clipboard-text&#039;).filter(function() {&lt;br /&gt;
                        return $(this).data(&#039;text&#039;) == text;&lt;br /&gt;
                    }).first().text())&lt;br /&gt;
                    .appendTo(&#039;body&#039;)&lt;br /&gt;
                    .select();&lt;br /&gt;
                var success = document.execCommand(&#039;Copy&#039;);&lt;br /&gt;
                $input.remove();&lt;br /&gt;
                if (success) {&lt;br /&gt;
                    showSuccess();&lt;br /&gt;
                } else {&lt;br /&gt;
                    if (window.navigator &amp;amp;&amp;amp; navigator.clipboard &amp;amp;&amp;amp; navigator.clipboard.writeText) {&lt;br /&gt;
                        navigator.clipboard.writeText(text).then(function() {&lt;br /&gt;
                            showSuccess();&lt;br /&gt;
                        });&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/* custom one-time animations */&lt;br /&gt;
(function() {&lt;br /&gt;
	function ensureOnetimeAnimations(elem) {&lt;br /&gt;
		// Check for Web Animations API support&lt;br /&gt;
		if (&#039;getAnimations&#039; in Element.prototype) {&lt;br /&gt;
			const animations = elem.getAnimations({ subtree: true });&lt;br /&gt;
			&lt;br /&gt;
			console.log(`[Web Animations] Found ${animations.length} animation(s) on target:`, elem);&lt;br /&gt;
&lt;br /&gt;
			if (animations.length &amp;gt; 0) {&lt;br /&gt;
				// Log detailed info for each detected animation&lt;br /&gt;
				animations.forEach((anim, i) =&amp;gt; {&lt;br /&gt;
					const name = anim.animationName || anim.id || &#039;unnamed&#039;;&lt;br /&gt;
					const target = anim.effect ? anim.effect.target : &#039;unknown target&#039;;&lt;br /&gt;
					console.log(`  └─ Animation #${i + 1}: name=&amp;quot;${name}&amp;quot;, state=&amp;quot;${anim.playState}&amp;quot;, target:`, target, anim);&lt;br /&gt;
				});&lt;br /&gt;
&lt;br /&gt;
				Promise.all(&lt;br /&gt;
					animations.map(function (animation) {&lt;br /&gt;
						return animation.finished.catch((err) =&amp;gt; {&lt;br /&gt;
							// Catch cases where an animation is canceled mid-flight&lt;br /&gt;
							console.warn(&#039;[Web Animations] Animation was canceled or aborted:&#039;, animation, err);&lt;br /&gt;
						});&lt;br /&gt;
					})&lt;br /&gt;
				).then(function () {&lt;br /&gt;
					console.log(&#039;[Web Animations] All animations finished. Adding class &amp;quot;inhibit-load-animations&amp;quot;.&#039;);&lt;br /&gt;
					elem.classList.add(&amp;quot;inhibit-load-animations&amp;quot;);&lt;br /&gt;
				});&lt;br /&gt;
			} else {&lt;br /&gt;
				console.warn(&#039;[Web Animations] No animations detected at call time. Applying fallback timer.&#039;);&lt;br /&gt;
				// Fallback to timeout if getAnimations returned 0 active animations&lt;br /&gt;
				setTimeout(() =&amp;gt; { elem.classList.add(&amp;quot;inhibit-load-animations&amp;quot;); }, 500);&lt;br /&gt;
			}&lt;br /&gt;
		} else {&lt;br /&gt;
			console.log(&#039;[Web Animations] API not supported. Using fallback timeout.&#039;);&lt;br /&gt;
			setTimeout(() =&amp;gt; { elem.classList.add(&amp;quot;inhibit-load-animations&amp;quot;); }, 500);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	mw.hook(&#039;wikipage.content&#039;).add(() =&amp;gt; {&lt;br /&gt;
		console.log(&#039;hi&#039;);&lt;br /&gt;
		const onetimeAnimatedElems = document.querySelectorAll(&amp;quot;body&amp;quot;);&lt;br /&gt;
		for (const elem of onetimeAnimatedElems) {&lt;br /&gt;
			ensureOnetimeAnimations(elem);&lt;br /&gt;
		}&lt;br /&gt;
	})&lt;br /&gt;
})()&lt;/div&gt;</summary>
		<author><name>Pynappo</name></author>
	</entry>
	<entry>
		<id>https://nbittrpgwiki.pynappo.xyz/index.php?title=MediaWiki:Common.js&amp;diff=3013</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://nbittrpgwiki.pynappo.xyz/index.php?title=MediaWiki:Common.js&amp;diff=3013"/>
		<updated>2026-09-25T12:03:05Z</updated>

		<summary type="html">&lt;p&gt;Pynappo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/*&lt;br /&gt;
    Template:Spoiler on dev.miraheze.org&lt;br /&gt;
*/&lt;br /&gt;
$(function(){&lt;br /&gt;
    //spoiler block behavior&lt;br /&gt;
	$(&#039;.spoiler&#039;).click(function(){&lt;br /&gt;
		$(this).toggleClass(&#039;off&#039;);&lt;br /&gt;
	});&lt;br /&gt;
	// spoiler button behavior&lt;br /&gt;
    $(&#039;#spoilerbtn&#039;).text(&#039;Show all spoilers&#039;);&lt;br /&gt;
	$(&#039;#spoilerbtn&#039;).click(function(){&lt;br /&gt;
		$(this).toggleClass(&#039;hide&#039;);&lt;br /&gt;
		$(&#039;.spoiler&#039;).toggleClass(&#039;showall&#039;);&lt;br /&gt;
		&lt;br /&gt;
		if ($(this).is(&#039;.hide&#039;)){ $(this).text(&#039;Hide all spoilers&#039;); } &lt;br /&gt;
        else { $(this).text(&#039;Show all spoilers&#039;); }&lt;br /&gt;
	});	&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * TabberEX&lt;br /&gt;
 *&lt;br /&gt;
 * @version 2.3&lt;br /&gt;
 *&lt;br /&gt;
 * @author Jono99 &amp;lt;https://phigros.fandom.com/wiki/User:Jono99&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * documentation and examples at:&lt;br /&gt;
 * &amp;lt;https://dev.fandom.com/wiki/TabberEX&amp;gt;&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
 (function (window, $, mw) {&lt;br /&gt;
	// Function called by tabs to switch tabs&lt;br /&gt;
	window.tabberex_switchTab = function(tabber_id, tab)&lt;br /&gt;
	{&lt;br /&gt;
		tabberex_hideAllTabs(tabber_id);&lt;br /&gt;
		tabberex_showTab(tabber_id, tab);&lt;br /&gt;
	};&lt;br /&gt;
 &lt;br /&gt;
	// Inject CSS&lt;br /&gt;
	(function() {&lt;br /&gt;
		var tabberex_css = document.createElement(&amp;quot;style&amp;quot;);&lt;br /&gt;
		tabberex_css.innerHTML = &amp;quot;/* CSS owned by FANDOM */\n.oo-ui-tabOptionWidget{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;vertical-align:bottom;align-items:center;color:color-mix(in srgb, var(--text-color) 75%, transparent);display:inline-flex;font-size:14px;font-weight:500;height:40px;letter-spacing:.5px;margin:0;padding:0 11px;-webkit-transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s;-moz-transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s;transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s}.oo-ui-tabSelectWidget:not(.oo-ui-tabSelectWidget-framed) .oo-ui-tabOptionWidget{-webkit-transition:color .3s,box-shadow .3s;-moz-transition:color .3s,box-shadow .3s;transition:color .3s,box-shadow .3s;border-bottom:1px solid var(--banner-color)}.oo-ui-tabSelectWidget:not(.oo-ui-tabSelectWidget-framed) .oo-ui-tabOptionWidget.oo-ui-optionWidget-selected{box-shadow:inset 0 -2px 0 0 var(--link-color);color:var(--link-color)}&amp;quot;;&lt;br /&gt;
		document.head.appendChild(tabberex_css);&lt;br /&gt;
	})();&lt;br /&gt;
		&lt;br /&gt;
	window.tabberex_showTab = function(tabber_id, i)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;)&lt;br /&gt;
		.addClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;default&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$($(&amp;quot;.tabberex-body&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;).get()).each(function () {&lt;br /&gt;
            var display_value = $(this).attr(&amp;quot;data-tab-display&amp;quot;);&lt;br /&gt;
            if (display_value === undefined) display_value = &amp;quot;block&amp;quot;;&lt;br /&gt;
            $(this).css(&amp;quot;display&amp;quot;, display_value);&lt;br /&gt;
        });&lt;br /&gt;
	};&lt;br /&gt;
	 &lt;br /&gt;
	window.tabberex_hideTab = function(tabber_id, i)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;)&lt;br /&gt;
		.removeClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$(&amp;quot;.tabberex-body&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;).css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
			&lt;br /&gt;
	window.tabberex_hideAllTabs = function(tabber_id)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children()&lt;br /&gt;
		.removeClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$(&amp;quot;.tabberex-body&amp;quot; + base_selector).children().css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var tabberex_buildTabHead = function(host_div, tabber_id, tab_headers, tab_ex_headers, tab_locations)&lt;br /&gt;
	{&lt;br /&gt;
		var tabber_head = host_div;&lt;br /&gt;
		tabber_head.innerHTML = &amp;quot;&amp;quot;;&lt;br /&gt;
		$(tabber_head).addClass(&amp;quot;tabberex-head oo-ui-widget oo-ui-widget-enabled oo-ui-selectWidget oo-ui-selectWidget-unpressed oo-ui-selectWidget-depressed oo-ui-tabSelectWidget&amp;quot;)&lt;br /&gt;
		.attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
		for (var i = 0; i &amp;lt; tab_headers.length; i++)&lt;br /&gt;
		{&lt;br /&gt;
			console.log(&amp;quot;Building tab &amp;quot; + tabber_id + &amp;quot; &amp;quot; + String(i));&lt;br /&gt;
			var tab = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
			$(tab).addClass(&amp;quot;oo-ui-widget oo-ui-widget-enabled oo-ui-labelElement oo-ui-optionWidget oo-ui-tabOptionWidget&amp;quot;)&lt;br /&gt;
			.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
			if (tab_locations[i] === undefined)&lt;br /&gt;
				$(tab).attr(&amp;quot;onclick&amp;quot;, &amp;quot;tabberex_switchTab(\&amp;quot;&amp;quot; + mw.html.escape(tabber_id) + &amp;quot;\&amp;quot;, &amp;quot; + (i + 1) + &amp;quot;)&amp;quot;);&lt;br /&gt;
			else&lt;br /&gt;
				$(tab).attr(&amp;quot;onclick&amp;quot;, &amp;quot;location = \&amp;quot;&amp;quot; + mw.html.escape(tab_locations[i]) + &amp;quot;\&amp;quot;&amp;quot;);&lt;br /&gt;
			var tab_span = document.createElement(&amp;quot;span&amp;quot;);&lt;br /&gt;
			$(tab_span).addClass(&amp;quot;oo-ui-labelElement-label&amp;quot;);&lt;br /&gt;
			if (tab_ex_headers[i] === undefined)&lt;br /&gt;
				$(tab_span).text(tab_headers[i]);&lt;br /&gt;
			else&lt;br /&gt;
			{&lt;br /&gt;
				console.log(&amp;quot;EX Header present&amp;quot;);&lt;br /&gt;
				for (var attr in tab_ex_headers[i][1])&lt;br /&gt;
					tab_span.setAttribute(attr, tab_ex_headers[i][1][attr]);&lt;br /&gt;
				$(tab_span).html(tab_ex_headers[i][0]);&lt;br /&gt;
			}&lt;br /&gt;
			tab.appendChild(tab_span);&lt;br /&gt;
			tabber_head.appendChild(tab);&lt;br /&gt;
			console.log(&amp;quot;Successfully built tab&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		return tabber_head.outerHTML;&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var process_tabber_head_tab = function(tab_element, i)&lt;br /&gt;
	{&lt;br /&gt;
		// Get header&lt;br /&gt;
		var header = $(tab_element).attr(&amp;quot;data-tab-header&amp;quot;);&lt;br /&gt;
		if (header === undefined) header = i + 1;&lt;br /&gt;
		&lt;br /&gt;
		// Get ex header&lt;br /&gt;
		var ex_header;&lt;br /&gt;
		function get_ex_header(_) {&lt;br /&gt;
			console.log(&#039;EX Header found&#039;);&lt;br /&gt;
			var attributes = {};&lt;br /&gt;
			var attrs = this.getAttributeNames();&lt;br /&gt;
			for (var i in attrs)&lt;br /&gt;
				attributes[attrs[i]] = this.getAttribute(attrs[i]);&lt;br /&gt;
			ex_header = [$(this).html(), attributes];&lt;br /&gt;
			$(this).remove();&lt;br /&gt;
		}&lt;br /&gt;
		$(tab_element).children(&amp;quot;p&amp;quot;).children(&amp;quot;span.tabberex-tab-header&amp;quot;).each(get_ex_header);&lt;br /&gt;
		$(tab_element).children(&amp;quot;span.tabberex-tab-header&amp;quot;).each(get_ex_header);&lt;br /&gt;
		&lt;br /&gt;
		// Get default&lt;br /&gt;
		var is_default = false;&lt;br /&gt;
		if ($(tab_element).hasClass(&amp;quot;tabberex-tab-default&amp;quot;))&lt;br /&gt;
			is_default = true;&lt;br /&gt;
		&lt;br /&gt;
		// Get tab location&lt;br /&gt;
		var tab_location = $(this).attr(&amp;quot;data-tab-location&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		return {&amp;quot;header&amp;quot;: header, &amp;quot;ex_header&amp;quot;: ex_header, &amp;quot;default&amp;quot;: is_default, &amp;quot;location&amp;quot;: tab_location};&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var process_tabbers = function()&lt;br /&gt;
	{&lt;br /&gt;
		console.log(&#039;TabberEX started&#039;);&lt;br /&gt;
		var tabber_i = 0;&lt;br /&gt;
		var default_tabs = {};&lt;br /&gt;
		var tabber_ids = [];&lt;br /&gt;
		// The tabs are iterated through backwards to properly handle tabbers that are nested within other tabbers&lt;br /&gt;
		$($(&amp;quot;.tabberex-head&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			var tab_headers = [];&lt;br /&gt;
			var tab_ex_headers = [];&lt;br /&gt;
			var tab_locations = [];&lt;br /&gt;
			var default_tab = 0;&lt;br /&gt;
				&lt;br /&gt;
			var tabber_id = $(this).attr(&amp;quot;data-tabber-id&amp;quot;);&lt;br /&gt;
			if (tabber_id === undefined) tabber_id = String(tabber_i);&lt;br /&gt;
				&lt;br /&gt;
			$(this).children(&amp;quot;.tabberex-tab&amp;quot;).each(function(i) {&lt;br /&gt;
				console.log(&#039;Processing head tab &#039; + tabber_id + &#039; &#039; + String(i));&lt;br /&gt;
				var tab_details = process_tabber_head_tab(this, i);&lt;br /&gt;
				console.log(&#039;Processing complete&#039;);&lt;br /&gt;
				tab_headers[i] = tab_details.header;&lt;br /&gt;
				tab_ex_headers[i] = tab_details.ex_header;&lt;br /&gt;
				if (tab_details.default)&lt;br /&gt;
					default_tab = i;&lt;br /&gt;
				tab_locations[i] = tab_details.location;&lt;br /&gt;
				$(this).detach();&lt;br /&gt;
			});&lt;br /&gt;
			&lt;br /&gt;
			// Insert tabs into DOM&lt;br /&gt;
			tabberex_buildTabHead(this, tabber_id, tab_headers, tab_ex_headers, tab_locations);&lt;br /&gt;
			if (default_tabs[tabber_id] === undefined)&lt;br /&gt;
				default_tabs[tabber_id] = default_tab;&lt;br /&gt;
			tabber_ids.push(tabber_id);&lt;br /&gt;
			tabber_i++;&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		$($(&amp;quot;.tabberex-body&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			$(this).children().css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		$($(&amp;quot;.tabberex&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			var tab_headers = [];&lt;br /&gt;
			var tab_ex_headers = [];&lt;br /&gt;
			var tab_locations = [];&lt;br /&gt;
			var default_tab = 0;&lt;br /&gt;
			var tab_contents = [];&lt;br /&gt;
			&lt;br /&gt;
			var tabber_id = $(this).attr(&amp;quot;data-tabber-id&amp;quot;);&lt;br /&gt;
			if (tabber_id === undefined) tabber_id = String(tabber_i);&lt;br /&gt;
            $(this).attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
&lt;br /&gt;
            var tabber_head = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
            $(tabber_head).addClass(&amp;quot;tabberex-head&amp;quot;).attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
            $(this).removeClass(&amp;quot;tabberex&amp;quot;).addClass(&amp;quot;tabberex-body&amp;quot;);&lt;br /&gt;
			&lt;br /&gt;
			$(this).children(&amp;quot;.tabberex-tab&amp;quot;).each(function(i) {&lt;br /&gt;
				console.log(&#039;Processing head tab &#039; + tabber_id + &#039; &#039; + String(i));&lt;br /&gt;
				var tab_details = process_tabber_head_tab(this, i);&lt;br /&gt;
				console.log(&#039;Processing complete&#039;);&lt;br /&gt;
				tab_headers[i] = tab_details.header;&lt;br /&gt;
				tab_ex_headers[i] = tab_details.ex_header;&lt;br /&gt;
				if (tab_details.default)&lt;br /&gt;
					default_tab = i;&lt;br /&gt;
				tab_locations[i] = tab_details.location;&lt;br /&gt;
				&lt;br /&gt;
				// Get tab content&lt;br /&gt;
				$(this).css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
				tab_contents[i] = $(this);&lt;br /&gt;
			});&lt;br /&gt;
&lt;br /&gt;
            tabberex_buildTabHead(tabber_head, tabber_id, tab_headers, tab_ex_headers, tab_locations);&lt;br /&gt;
			if (default_tabs[tabber_id] === undefined)&lt;br /&gt;
				default_tabs[tabber_id] = default_tab;&lt;br /&gt;
            $(tabber_head).insertBefore(this);&lt;br /&gt;
			tabber_ids.push(tabber_id);&lt;br /&gt;
			tabber_i++;&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		// Select default tabs&lt;br /&gt;
		for (var i in tabber_ids)&lt;br /&gt;
		{&lt;br /&gt;
			tabberex_showTab(tabber_ids[i], default_tabs[tabber_ids[i]] + 1);&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
 &lt;br /&gt;
	mw.hook(&amp;quot;wikipage.content&amp;quot;).add(process_tabbers);&lt;br /&gt;
}(this, jQuery, mediaWiki));&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * @title           SoundcloudPlayer.js&lt;br /&gt;
 * @version         1.1.2&lt;br /&gt;
 * @description     Add support for soundcloud players&lt;br /&gt;
 * @author          Himmalerin&lt;br /&gt;
 * @license         CC-BY-SA-3.0&lt;br /&gt;
 */&lt;br /&gt;
(function () {&lt;br /&gt;
	// Build the iframe&lt;br /&gt;
	const scPlayer = function (data) {&lt;br /&gt;
		const widget = document.createElement(&#039;iframe&#039;);&lt;br /&gt;
&lt;br /&gt;
		widget.classList.add(&#039;soundcloud-player&#039;);&lt;br /&gt;
&lt;br /&gt;
		widget.src =&lt;br /&gt;
			&#039;https://w.soundcloud.com/player/?show_artwork=false&amp;amp;url=&#039; +&lt;br /&gt;
			encodeURI(data.src);&lt;br /&gt;
&lt;br /&gt;
		// If data-color is set add the value to the iframe&lt;br /&gt;
		if (data.color) widget.src += &#039;&amp;amp;color=&#039; + encodeURIComponent(data.color);&lt;br /&gt;
		// If data-width/height are set add that value to the iframe&lt;br /&gt;
		if (data.width) widget.width = data.width;&lt;br /&gt;
		if (data.height) widget.height = data.height;&lt;br /&gt;
&lt;br /&gt;
		return widget;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	const scParseTags = function ($content) {&lt;br /&gt;
		// Get all instances of the soundcloud class&lt;br /&gt;
		const scTags = $content.find(&#039;.soundcloud&#039;);&lt;br /&gt;
&lt;br /&gt;
		// For each instance of the soundcloud class run scPlayer&lt;br /&gt;
		for (var i = 0; i &amp;lt; scTags.length; i++) {&lt;br /&gt;
			scTags[i].replaceWith(scPlayer(scTags[i].dataset));&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	mw.hook(&#039;wikipage.content&#039;).add(function ($content) {&lt;br /&gt;
		scParseTags($content);&lt;br /&gt;
	});&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
https://dev.fandom.com/wiki/MediaWiki:CopyText/code.js&lt;br /&gt;
 */&lt;br /&gt;
(function () {&lt;br /&gt;
    if (window.CopyTextLoaded) {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    window.CopyTextLoaded = true;&lt;br /&gt;
    mw.hook(&#039;dev.i18n&#039;).add(function (i18n) {&lt;br /&gt;
        i18n.loadMessages(&#039;CopyText&#039;).done(function (i18n) {&lt;br /&gt;
            function showSuccess() {&lt;br /&gt;
                if (window.BannerNotification) {&lt;br /&gt;
                    new BannerNotification(i18n.msg(&#039;success&#039;).escape(), &#039;confirm&#039;, null, 5000).show();&lt;br /&gt;
                } else {&lt;br /&gt;
                    mw.notify(i18n.msg(&#039;success&#039;).plain());&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $(&#039;body&#039;).on(&#039;click&#039;, &#039;.copy-to-clipboard-button&#039;, function(e){&lt;br /&gt;
                var text = $(this).data(&#039;text&#039;),&lt;br /&gt;
                $input = $(&#039;&amp;lt;textarea&amp;gt;&#039;, { type: &#039;text&#039; })&lt;br /&gt;
                    .val($(&#039;.copy-to-clipboard-text&#039;).filter(function() {&lt;br /&gt;
                        return $(this).data(&#039;text&#039;) == text;&lt;br /&gt;
                    }).first().text())&lt;br /&gt;
                    .appendTo(&#039;body&#039;)&lt;br /&gt;
                    .select();&lt;br /&gt;
                var success = document.execCommand(&#039;Copy&#039;);&lt;br /&gt;
                $input.remove();&lt;br /&gt;
                if (success) {&lt;br /&gt;
                    showSuccess();&lt;br /&gt;
                } else {&lt;br /&gt;
                    if (window.navigator &amp;amp;&amp;amp; navigator.clipboard &amp;amp;&amp;amp; navigator.clipboard.writeText) {&lt;br /&gt;
                        navigator.clipboard.writeText(text).then(function() {&lt;br /&gt;
                            showSuccess();&lt;br /&gt;
                        });&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/* custom one-time animations */&lt;br /&gt;
(function() {&lt;br /&gt;
	function ensureOnetimeAnimations(elem) {&lt;br /&gt;
	   if (&#039;getAnimations&#039; in Element.prototype) {&lt;br /&gt;
			const animations = elem.getAnimations({ subtree: true });&lt;br /&gt;
			if (animations.length &amp;gt; 0) {&lt;br /&gt;
				Promise.all(&lt;br /&gt;
					animations.map(function (animation) {&lt;br /&gt;
						return animation.finished;&lt;br /&gt;
					})&lt;br /&gt;
				).then(() =&amp;gt; {&lt;br /&gt;
					console.log(&amp;quot;done wa1&amp;quot;);&lt;br /&gt;
					elem.classList.add(&amp;quot;inhibit-load-animations&amp;quot;);&lt;br /&gt;
				});&lt;br /&gt;
				console.log(&amp;quot;waiting wa1&amp;quot;);&lt;br /&gt;
			} else {&lt;br /&gt;
				// No active animations running right away, add immediately&lt;br /&gt;
				console.log(&amp;quot;done wa2&amp;quot;);&lt;br /&gt;
				elem.classList.add(&amp;quot;inhibit-load-animations&amp;quot;);&lt;br /&gt;
			}&lt;br /&gt;
		} else {&lt;br /&gt;
			// Fallback timeout approach for older browsers&lt;br /&gt;
							console.log(&amp;quot;else&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
			setTimeout(() =&amp;gt; { elem.classList.add(&amp;quot;inhibit-load-animations&amp;quot;); }, 500);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	mw.hook(&#039;wikipage.content&#039;).add(() =&amp;gt; {&lt;br /&gt;
		console.log(&#039;hi&#039;);&lt;br /&gt;
		const onetimeAnimatedElems = document.querySelectorAll(&amp;quot;body&amp;quot;);&lt;br /&gt;
		for (const elem of onetimeAnimatedElems) {&lt;br /&gt;
			ensureOnetimeAnimations(elem);&lt;br /&gt;
		}&lt;br /&gt;
	})&lt;br /&gt;
})()&lt;/div&gt;</summary>
		<author><name>Pynappo</name></author>
	</entry>
	<entry>
		<id>https://nbittrpgwiki.pynappo.xyz/index.php?title=MediaWiki:Common.js&amp;diff=3012</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://nbittrpgwiki.pynappo.xyz/index.php?title=MediaWiki:Common.js&amp;diff=3012"/>
		<updated>2026-09-25T12:00:52Z</updated>

		<summary type="html">&lt;p&gt;Pynappo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/*&lt;br /&gt;
    Template:Spoiler on dev.miraheze.org&lt;br /&gt;
*/&lt;br /&gt;
$(function(){&lt;br /&gt;
    //spoiler block behavior&lt;br /&gt;
	$(&#039;.spoiler&#039;).click(function(){&lt;br /&gt;
		$(this).toggleClass(&#039;off&#039;);&lt;br /&gt;
	});&lt;br /&gt;
	// spoiler button behavior&lt;br /&gt;
    $(&#039;#spoilerbtn&#039;).text(&#039;Show all spoilers&#039;);&lt;br /&gt;
	$(&#039;#spoilerbtn&#039;).click(function(){&lt;br /&gt;
		$(this).toggleClass(&#039;hide&#039;);&lt;br /&gt;
		$(&#039;.spoiler&#039;).toggleClass(&#039;showall&#039;);&lt;br /&gt;
		&lt;br /&gt;
		if ($(this).is(&#039;.hide&#039;)){ $(this).text(&#039;Hide all spoilers&#039;); } &lt;br /&gt;
        else { $(this).text(&#039;Show all spoilers&#039;); }&lt;br /&gt;
	});	&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * TabberEX&lt;br /&gt;
 *&lt;br /&gt;
 * @version 2.3&lt;br /&gt;
 *&lt;br /&gt;
 * @author Jono99 &amp;lt;https://phigros.fandom.com/wiki/User:Jono99&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * documentation and examples at:&lt;br /&gt;
 * &amp;lt;https://dev.fandom.com/wiki/TabberEX&amp;gt;&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
 (function (window, $, mw) {&lt;br /&gt;
	// Function called by tabs to switch tabs&lt;br /&gt;
	window.tabberex_switchTab = function(tabber_id, tab)&lt;br /&gt;
	{&lt;br /&gt;
		tabberex_hideAllTabs(tabber_id);&lt;br /&gt;
		tabberex_showTab(tabber_id, tab);&lt;br /&gt;
	};&lt;br /&gt;
 &lt;br /&gt;
	// Inject CSS&lt;br /&gt;
	(function() {&lt;br /&gt;
		var tabberex_css = document.createElement(&amp;quot;style&amp;quot;);&lt;br /&gt;
		tabberex_css.innerHTML = &amp;quot;/* CSS owned by FANDOM */\n.oo-ui-tabOptionWidget{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;vertical-align:bottom;align-items:center;color:color-mix(in srgb, var(--text-color) 75%, transparent);display:inline-flex;font-size:14px;font-weight:500;height:40px;letter-spacing:.5px;margin:0;padding:0 11px;-webkit-transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s;-moz-transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s;transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s}.oo-ui-tabSelectWidget:not(.oo-ui-tabSelectWidget-framed) .oo-ui-tabOptionWidget{-webkit-transition:color .3s,box-shadow .3s;-moz-transition:color .3s,box-shadow .3s;transition:color .3s,box-shadow .3s;border-bottom:1px solid var(--banner-color)}.oo-ui-tabSelectWidget:not(.oo-ui-tabSelectWidget-framed) .oo-ui-tabOptionWidget.oo-ui-optionWidget-selected{box-shadow:inset 0 -2px 0 0 var(--link-color);color:var(--link-color)}&amp;quot;;&lt;br /&gt;
		document.head.appendChild(tabberex_css);&lt;br /&gt;
	})();&lt;br /&gt;
		&lt;br /&gt;
	window.tabberex_showTab = function(tabber_id, i)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;)&lt;br /&gt;
		.addClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;default&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$($(&amp;quot;.tabberex-body&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;).get()).each(function () {&lt;br /&gt;
            var display_value = $(this).attr(&amp;quot;data-tab-display&amp;quot;);&lt;br /&gt;
            if (display_value === undefined) display_value = &amp;quot;block&amp;quot;;&lt;br /&gt;
            $(this).css(&amp;quot;display&amp;quot;, display_value);&lt;br /&gt;
        });&lt;br /&gt;
	};&lt;br /&gt;
	 &lt;br /&gt;
	window.tabberex_hideTab = function(tabber_id, i)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;)&lt;br /&gt;
		.removeClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$(&amp;quot;.tabberex-body&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;).css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
			&lt;br /&gt;
	window.tabberex_hideAllTabs = function(tabber_id)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children()&lt;br /&gt;
		.removeClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$(&amp;quot;.tabberex-body&amp;quot; + base_selector).children().css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var tabberex_buildTabHead = function(host_div, tabber_id, tab_headers, tab_ex_headers, tab_locations)&lt;br /&gt;
	{&lt;br /&gt;
		var tabber_head = host_div;&lt;br /&gt;
		tabber_head.innerHTML = &amp;quot;&amp;quot;;&lt;br /&gt;
		$(tabber_head).addClass(&amp;quot;tabberex-head oo-ui-widget oo-ui-widget-enabled oo-ui-selectWidget oo-ui-selectWidget-unpressed oo-ui-selectWidget-depressed oo-ui-tabSelectWidget&amp;quot;)&lt;br /&gt;
		.attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
		for (var i = 0; i &amp;lt; tab_headers.length; i++)&lt;br /&gt;
		{&lt;br /&gt;
			console.log(&amp;quot;Building tab &amp;quot; + tabber_id + &amp;quot; &amp;quot; + String(i));&lt;br /&gt;
			var tab = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
			$(tab).addClass(&amp;quot;oo-ui-widget oo-ui-widget-enabled oo-ui-labelElement oo-ui-optionWidget oo-ui-tabOptionWidget&amp;quot;)&lt;br /&gt;
			.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
			if (tab_locations[i] === undefined)&lt;br /&gt;
				$(tab).attr(&amp;quot;onclick&amp;quot;, &amp;quot;tabberex_switchTab(\&amp;quot;&amp;quot; + mw.html.escape(tabber_id) + &amp;quot;\&amp;quot;, &amp;quot; + (i + 1) + &amp;quot;)&amp;quot;);&lt;br /&gt;
			else&lt;br /&gt;
				$(tab).attr(&amp;quot;onclick&amp;quot;, &amp;quot;location = \&amp;quot;&amp;quot; + mw.html.escape(tab_locations[i]) + &amp;quot;\&amp;quot;&amp;quot;);&lt;br /&gt;
			var tab_span = document.createElement(&amp;quot;span&amp;quot;);&lt;br /&gt;
			$(tab_span).addClass(&amp;quot;oo-ui-labelElement-label&amp;quot;);&lt;br /&gt;
			if (tab_ex_headers[i] === undefined)&lt;br /&gt;
				$(tab_span).text(tab_headers[i]);&lt;br /&gt;
			else&lt;br /&gt;
			{&lt;br /&gt;
				console.log(&amp;quot;EX Header present&amp;quot;);&lt;br /&gt;
				for (var attr in tab_ex_headers[i][1])&lt;br /&gt;
					tab_span.setAttribute(attr, tab_ex_headers[i][1][attr]);&lt;br /&gt;
				$(tab_span).html(tab_ex_headers[i][0]);&lt;br /&gt;
			}&lt;br /&gt;
			tab.appendChild(tab_span);&lt;br /&gt;
			tabber_head.appendChild(tab);&lt;br /&gt;
			console.log(&amp;quot;Successfully built tab&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		return tabber_head.outerHTML;&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var process_tabber_head_tab = function(tab_element, i)&lt;br /&gt;
	{&lt;br /&gt;
		// Get header&lt;br /&gt;
		var header = $(tab_element).attr(&amp;quot;data-tab-header&amp;quot;);&lt;br /&gt;
		if (header === undefined) header = i + 1;&lt;br /&gt;
		&lt;br /&gt;
		// Get ex header&lt;br /&gt;
		var ex_header;&lt;br /&gt;
		function get_ex_header(_) {&lt;br /&gt;
			console.log(&#039;EX Header found&#039;);&lt;br /&gt;
			var attributes = {};&lt;br /&gt;
			var attrs = this.getAttributeNames();&lt;br /&gt;
			for (var i in attrs)&lt;br /&gt;
				attributes[attrs[i]] = this.getAttribute(attrs[i]);&lt;br /&gt;
			ex_header = [$(this).html(), attributes];&lt;br /&gt;
			$(this).remove();&lt;br /&gt;
		}&lt;br /&gt;
		$(tab_element).children(&amp;quot;p&amp;quot;).children(&amp;quot;span.tabberex-tab-header&amp;quot;).each(get_ex_header);&lt;br /&gt;
		$(tab_element).children(&amp;quot;span.tabberex-tab-header&amp;quot;).each(get_ex_header);&lt;br /&gt;
		&lt;br /&gt;
		// Get default&lt;br /&gt;
		var is_default = false;&lt;br /&gt;
		if ($(tab_element).hasClass(&amp;quot;tabberex-tab-default&amp;quot;))&lt;br /&gt;
			is_default = true;&lt;br /&gt;
		&lt;br /&gt;
		// Get tab location&lt;br /&gt;
		var tab_location = $(this).attr(&amp;quot;data-tab-location&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		return {&amp;quot;header&amp;quot;: header, &amp;quot;ex_header&amp;quot;: ex_header, &amp;quot;default&amp;quot;: is_default, &amp;quot;location&amp;quot;: tab_location};&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var process_tabbers = function()&lt;br /&gt;
	{&lt;br /&gt;
		console.log(&#039;TabberEX started&#039;);&lt;br /&gt;
		var tabber_i = 0;&lt;br /&gt;
		var default_tabs = {};&lt;br /&gt;
		var tabber_ids = [];&lt;br /&gt;
		// The tabs are iterated through backwards to properly handle tabbers that are nested within other tabbers&lt;br /&gt;
		$($(&amp;quot;.tabberex-head&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			var tab_headers = [];&lt;br /&gt;
			var tab_ex_headers = [];&lt;br /&gt;
			var tab_locations = [];&lt;br /&gt;
			var default_tab = 0;&lt;br /&gt;
				&lt;br /&gt;
			var tabber_id = $(this).attr(&amp;quot;data-tabber-id&amp;quot;);&lt;br /&gt;
			if (tabber_id === undefined) tabber_id = String(tabber_i);&lt;br /&gt;
				&lt;br /&gt;
			$(this).children(&amp;quot;.tabberex-tab&amp;quot;).each(function(i) {&lt;br /&gt;
				console.log(&#039;Processing head tab &#039; + tabber_id + &#039; &#039; + String(i));&lt;br /&gt;
				var tab_details = process_tabber_head_tab(this, i);&lt;br /&gt;
				console.log(&#039;Processing complete&#039;);&lt;br /&gt;
				tab_headers[i] = tab_details.header;&lt;br /&gt;
				tab_ex_headers[i] = tab_details.ex_header;&lt;br /&gt;
				if (tab_details.default)&lt;br /&gt;
					default_tab = i;&lt;br /&gt;
				tab_locations[i] = tab_details.location;&lt;br /&gt;
				$(this).detach();&lt;br /&gt;
			});&lt;br /&gt;
			&lt;br /&gt;
			// Insert tabs into DOM&lt;br /&gt;
			tabberex_buildTabHead(this, tabber_id, tab_headers, tab_ex_headers, tab_locations);&lt;br /&gt;
			if (default_tabs[tabber_id] === undefined)&lt;br /&gt;
				default_tabs[tabber_id] = default_tab;&lt;br /&gt;
			tabber_ids.push(tabber_id);&lt;br /&gt;
			tabber_i++;&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		$($(&amp;quot;.tabberex-body&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			$(this).children().css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		$($(&amp;quot;.tabberex&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			var tab_headers = [];&lt;br /&gt;
			var tab_ex_headers = [];&lt;br /&gt;
			var tab_locations = [];&lt;br /&gt;
			var default_tab = 0;&lt;br /&gt;
			var tab_contents = [];&lt;br /&gt;
			&lt;br /&gt;
			var tabber_id = $(this).attr(&amp;quot;data-tabber-id&amp;quot;);&lt;br /&gt;
			if (tabber_id === undefined) tabber_id = String(tabber_i);&lt;br /&gt;
            $(this).attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
&lt;br /&gt;
            var tabber_head = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
            $(tabber_head).addClass(&amp;quot;tabberex-head&amp;quot;).attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
            $(this).removeClass(&amp;quot;tabberex&amp;quot;).addClass(&amp;quot;tabberex-body&amp;quot;);&lt;br /&gt;
			&lt;br /&gt;
			$(this).children(&amp;quot;.tabberex-tab&amp;quot;).each(function(i) {&lt;br /&gt;
				console.log(&#039;Processing head tab &#039; + tabber_id + &#039; &#039; + String(i));&lt;br /&gt;
				var tab_details = process_tabber_head_tab(this, i);&lt;br /&gt;
				console.log(&#039;Processing complete&#039;);&lt;br /&gt;
				tab_headers[i] = tab_details.header;&lt;br /&gt;
				tab_ex_headers[i] = tab_details.ex_header;&lt;br /&gt;
				if (tab_details.default)&lt;br /&gt;
					default_tab = i;&lt;br /&gt;
				tab_locations[i] = tab_details.location;&lt;br /&gt;
				&lt;br /&gt;
				// Get tab content&lt;br /&gt;
				$(this).css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
				tab_contents[i] = $(this);&lt;br /&gt;
			});&lt;br /&gt;
&lt;br /&gt;
            tabberex_buildTabHead(tabber_head, tabber_id, tab_headers, tab_ex_headers, tab_locations);&lt;br /&gt;
			if (default_tabs[tabber_id] === undefined)&lt;br /&gt;
				default_tabs[tabber_id] = default_tab;&lt;br /&gt;
            $(tabber_head).insertBefore(this);&lt;br /&gt;
			tabber_ids.push(tabber_id);&lt;br /&gt;
			tabber_i++;&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		// Select default tabs&lt;br /&gt;
		for (var i in tabber_ids)&lt;br /&gt;
		{&lt;br /&gt;
			tabberex_showTab(tabber_ids[i], default_tabs[tabber_ids[i]] + 1);&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
 &lt;br /&gt;
	mw.hook(&amp;quot;wikipage.content&amp;quot;).add(process_tabbers);&lt;br /&gt;
}(this, jQuery, mediaWiki));&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * @title           SoundcloudPlayer.js&lt;br /&gt;
 * @version         1.1.2&lt;br /&gt;
 * @description     Add support for soundcloud players&lt;br /&gt;
 * @author          Himmalerin&lt;br /&gt;
 * @license         CC-BY-SA-3.0&lt;br /&gt;
 */&lt;br /&gt;
(function () {&lt;br /&gt;
	// Build the iframe&lt;br /&gt;
	const scPlayer = function (data) {&lt;br /&gt;
		const widget = document.createElement(&#039;iframe&#039;);&lt;br /&gt;
&lt;br /&gt;
		widget.classList.add(&#039;soundcloud-player&#039;);&lt;br /&gt;
&lt;br /&gt;
		widget.src =&lt;br /&gt;
			&#039;https://w.soundcloud.com/player/?show_artwork=false&amp;amp;url=&#039; +&lt;br /&gt;
			encodeURI(data.src);&lt;br /&gt;
&lt;br /&gt;
		// If data-color is set add the value to the iframe&lt;br /&gt;
		if (data.color) widget.src += &#039;&amp;amp;color=&#039; + encodeURIComponent(data.color);&lt;br /&gt;
		// If data-width/height are set add that value to the iframe&lt;br /&gt;
		if (data.width) widget.width = data.width;&lt;br /&gt;
		if (data.height) widget.height = data.height;&lt;br /&gt;
&lt;br /&gt;
		return widget;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	const scParseTags = function ($content) {&lt;br /&gt;
		// Get all instances of the soundcloud class&lt;br /&gt;
		const scTags = $content.find(&#039;.soundcloud&#039;);&lt;br /&gt;
&lt;br /&gt;
		// For each instance of the soundcloud class run scPlayer&lt;br /&gt;
		for (var i = 0; i &amp;lt; scTags.length; i++) {&lt;br /&gt;
			scTags[i].replaceWith(scPlayer(scTags[i].dataset));&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	mw.hook(&#039;wikipage.content&#039;).add(function ($content) {&lt;br /&gt;
		scParseTags($content);&lt;br /&gt;
	});&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
https://dev.fandom.com/wiki/MediaWiki:CopyText/code.js&lt;br /&gt;
 */&lt;br /&gt;
(function () {&lt;br /&gt;
    if (window.CopyTextLoaded) {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    window.CopyTextLoaded = true;&lt;br /&gt;
    mw.hook(&#039;dev.i18n&#039;).add(function (i18n) {&lt;br /&gt;
        i18n.loadMessages(&#039;CopyText&#039;).done(function (i18n) {&lt;br /&gt;
            function showSuccess() {&lt;br /&gt;
                if (window.BannerNotification) {&lt;br /&gt;
                    new BannerNotification(i18n.msg(&#039;success&#039;).escape(), &#039;confirm&#039;, null, 5000).show();&lt;br /&gt;
                } else {&lt;br /&gt;
                    mw.notify(i18n.msg(&#039;success&#039;).plain());&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $(&#039;body&#039;).on(&#039;click&#039;, &#039;.copy-to-clipboard-button&#039;, function(e){&lt;br /&gt;
                var text = $(this).data(&#039;text&#039;),&lt;br /&gt;
                $input = $(&#039;&amp;lt;textarea&amp;gt;&#039;, { type: &#039;text&#039; })&lt;br /&gt;
                    .val($(&#039;.copy-to-clipboard-text&#039;).filter(function() {&lt;br /&gt;
                        return $(this).data(&#039;text&#039;) == text;&lt;br /&gt;
                    }).first().text())&lt;br /&gt;
                    .appendTo(&#039;body&#039;)&lt;br /&gt;
                    .select();&lt;br /&gt;
                var success = document.execCommand(&#039;Copy&#039;);&lt;br /&gt;
                $input.remove();&lt;br /&gt;
                if (success) {&lt;br /&gt;
                    showSuccess();&lt;br /&gt;
                } else {&lt;br /&gt;
                    if (window.navigator &amp;amp;&amp;amp; navigator.clipboard &amp;amp;&amp;amp; navigator.clipboard.writeText) {&lt;br /&gt;
                        navigator.clipboard.writeText(text).then(function() {&lt;br /&gt;
                            showSuccess();&lt;br /&gt;
                        });&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/* custom one-time animations */&lt;br /&gt;
(function() {&lt;br /&gt;
	function ensureOnetimeAnimations(elem) {&lt;br /&gt;
	   if (&#039;getAnimations&#039; in Element.prototype) {&lt;br /&gt;
			const animations = elem.getAnimations({ subtree: true });&lt;br /&gt;
			if (animations.length &amp;gt; 0) {&lt;br /&gt;
				Promise.all(&lt;br /&gt;
					animations.map(function (animation) {&lt;br /&gt;
						return animation.finished;&lt;br /&gt;
					})&lt;br /&gt;
				).then(function () {&lt;br /&gt;
					elem.classList.add(&amp;quot;inhibit-load-animations&amp;quot;);&lt;br /&gt;
				});&lt;br /&gt;
			} else {&lt;br /&gt;
				// No active animations running right away, add immediately&lt;br /&gt;
				elem.classList.add(&amp;quot;inhibit-load-animations&amp;quot;);&lt;br /&gt;
			}&lt;br /&gt;
		} else {&lt;br /&gt;
			// Fallback timeout approach for older browsers&lt;br /&gt;
			setTimeout(() =&amp;gt; { elem.classList.add(&amp;quot;inhibit-load-animations&amp;quot;); }, 500);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	mw.hook(&#039;wikipage.content&#039;).add(() =&amp;gt; {&lt;br /&gt;
		console.log(&#039;hi&#039;);&lt;br /&gt;
		const onetimeAnimatedElems = document.querySelectorAll(&amp;quot;body&amp;quot;);&lt;br /&gt;
		for (const elem of onetimeAnimatedElems) {&lt;br /&gt;
			ensureOnetimeAnimations(elem);&lt;br /&gt;
		}&lt;br /&gt;
	})&lt;br /&gt;
})()&lt;/div&gt;</summary>
		<author><name>Pynappo</name></author>
	</entry>
	<entry>
		<id>https://nbittrpgwiki.pynappo.xyz/index.php?title=MediaWiki:Common.js&amp;diff=3011</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://nbittrpgwiki.pynappo.xyz/index.php?title=MediaWiki:Common.js&amp;diff=3011"/>
		<updated>2026-09-25T11:45:57Z</updated>

		<summary type="html">&lt;p&gt;Pynappo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/*&lt;br /&gt;
    Template:Spoiler on dev.miraheze.org&lt;br /&gt;
*/&lt;br /&gt;
$(function(){&lt;br /&gt;
    //spoiler block behavior&lt;br /&gt;
	$(&#039;.spoiler&#039;).click(function(){&lt;br /&gt;
		$(this).toggleClass(&#039;off&#039;);&lt;br /&gt;
	});&lt;br /&gt;
	// spoiler button behavior&lt;br /&gt;
    $(&#039;#spoilerbtn&#039;).text(&#039;Show all spoilers&#039;);&lt;br /&gt;
	$(&#039;#spoilerbtn&#039;).click(function(){&lt;br /&gt;
		$(this).toggleClass(&#039;hide&#039;);&lt;br /&gt;
		$(&#039;.spoiler&#039;).toggleClass(&#039;showall&#039;);&lt;br /&gt;
		&lt;br /&gt;
		if ($(this).is(&#039;.hide&#039;)){ $(this).text(&#039;Hide all spoilers&#039;); } &lt;br /&gt;
        else { $(this).text(&#039;Show all spoilers&#039;); }&lt;br /&gt;
	});	&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * TabberEX&lt;br /&gt;
 *&lt;br /&gt;
 * @version 2.3&lt;br /&gt;
 *&lt;br /&gt;
 * @author Jono99 &amp;lt;https://phigros.fandom.com/wiki/User:Jono99&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * documentation and examples at:&lt;br /&gt;
 * &amp;lt;https://dev.fandom.com/wiki/TabberEX&amp;gt;&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
 (function (window, $, mw) {&lt;br /&gt;
	// Function called by tabs to switch tabs&lt;br /&gt;
	window.tabberex_switchTab = function(tabber_id, tab)&lt;br /&gt;
	{&lt;br /&gt;
		tabberex_hideAllTabs(tabber_id);&lt;br /&gt;
		tabberex_showTab(tabber_id, tab);&lt;br /&gt;
	};&lt;br /&gt;
 &lt;br /&gt;
	// Inject CSS&lt;br /&gt;
	(function() {&lt;br /&gt;
		var tabberex_css = document.createElement(&amp;quot;style&amp;quot;);&lt;br /&gt;
		tabberex_css.innerHTML = &amp;quot;/* CSS owned by FANDOM */\n.oo-ui-tabOptionWidget{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;vertical-align:bottom;align-items:center;color:color-mix(in srgb, var(--text-color) 75%, transparent);display:inline-flex;font-size:14px;font-weight:500;height:40px;letter-spacing:.5px;margin:0;padding:0 11px;-webkit-transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s;-moz-transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s;transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s}.oo-ui-tabSelectWidget:not(.oo-ui-tabSelectWidget-framed) .oo-ui-tabOptionWidget{-webkit-transition:color .3s,box-shadow .3s;-moz-transition:color .3s,box-shadow .3s;transition:color .3s,box-shadow .3s;border-bottom:1px solid var(--banner-color)}.oo-ui-tabSelectWidget:not(.oo-ui-tabSelectWidget-framed) .oo-ui-tabOptionWidget.oo-ui-optionWidget-selected{box-shadow:inset 0 -2px 0 0 var(--link-color);color:var(--link-color)}&amp;quot;;&lt;br /&gt;
		document.head.appendChild(tabberex_css);&lt;br /&gt;
	})();&lt;br /&gt;
		&lt;br /&gt;
	window.tabberex_showTab = function(tabber_id, i)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;)&lt;br /&gt;
		.addClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;default&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$($(&amp;quot;.tabberex-body&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;).get()).each(function () {&lt;br /&gt;
            var display_value = $(this).attr(&amp;quot;data-tab-display&amp;quot;);&lt;br /&gt;
            if (display_value === undefined) display_value = &amp;quot;block&amp;quot;;&lt;br /&gt;
            $(this).css(&amp;quot;display&amp;quot;, display_value);&lt;br /&gt;
        });&lt;br /&gt;
	};&lt;br /&gt;
	 &lt;br /&gt;
	window.tabberex_hideTab = function(tabber_id, i)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;)&lt;br /&gt;
		.removeClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$(&amp;quot;.tabberex-body&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;).css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
			&lt;br /&gt;
	window.tabberex_hideAllTabs = function(tabber_id)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children()&lt;br /&gt;
		.removeClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$(&amp;quot;.tabberex-body&amp;quot; + base_selector).children().css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var tabberex_buildTabHead = function(host_div, tabber_id, tab_headers, tab_ex_headers, tab_locations)&lt;br /&gt;
	{&lt;br /&gt;
		var tabber_head = host_div;&lt;br /&gt;
		tabber_head.innerHTML = &amp;quot;&amp;quot;;&lt;br /&gt;
		$(tabber_head).addClass(&amp;quot;tabberex-head oo-ui-widget oo-ui-widget-enabled oo-ui-selectWidget oo-ui-selectWidget-unpressed oo-ui-selectWidget-depressed oo-ui-tabSelectWidget&amp;quot;)&lt;br /&gt;
		.attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
		for (var i = 0; i &amp;lt; tab_headers.length; i++)&lt;br /&gt;
		{&lt;br /&gt;
			console.log(&amp;quot;Building tab &amp;quot; + tabber_id + &amp;quot; &amp;quot; + String(i));&lt;br /&gt;
			var tab = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
			$(tab).addClass(&amp;quot;oo-ui-widget oo-ui-widget-enabled oo-ui-labelElement oo-ui-optionWidget oo-ui-tabOptionWidget&amp;quot;)&lt;br /&gt;
			.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
			if (tab_locations[i] === undefined)&lt;br /&gt;
				$(tab).attr(&amp;quot;onclick&amp;quot;, &amp;quot;tabberex_switchTab(\&amp;quot;&amp;quot; + mw.html.escape(tabber_id) + &amp;quot;\&amp;quot;, &amp;quot; + (i + 1) + &amp;quot;)&amp;quot;);&lt;br /&gt;
			else&lt;br /&gt;
				$(tab).attr(&amp;quot;onclick&amp;quot;, &amp;quot;location = \&amp;quot;&amp;quot; + mw.html.escape(tab_locations[i]) + &amp;quot;\&amp;quot;&amp;quot;);&lt;br /&gt;
			var tab_span = document.createElement(&amp;quot;span&amp;quot;);&lt;br /&gt;
			$(tab_span).addClass(&amp;quot;oo-ui-labelElement-label&amp;quot;);&lt;br /&gt;
			if (tab_ex_headers[i] === undefined)&lt;br /&gt;
				$(tab_span).text(tab_headers[i]);&lt;br /&gt;
			else&lt;br /&gt;
			{&lt;br /&gt;
				console.log(&amp;quot;EX Header present&amp;quot;);&lt;br /&gt;
				for (var attr in tab_ex_headers[i][1])&lt;br /&gt;
					tab_span.setAttribute(attr, tab_ex_headers[i][1][attr]);&lt;br /&gt;
				$(tab_span).html(tab_ex_headers[i][0]);&lt;br /&gt;
			}&lt;br /&gt;
			tab.appendChild(tab_span);&lt;br /&gt;
			tabber_head.appendChild(tab);&lt;br /&gt;
			console.log(&amp;quot;Successfully built tab&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		return tabber_head.outerHTML;&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var process_tabber_head_tab = function(tab_element, i)&lt;br /&gt;
	{&lt;br /&gt;
		// Get header&lt;br /&gt;
		var header = $(tab_element).attr(&amp;quot;data-tab-header&amp;quot;);&lt;br /&gt;
		if (header === undefined) header = i + 1;&lt;br /&gt;
		&lt;br /&gt;
		// Get ex header&lt;br /&gt;
		var ex_header;&lt;br /&gt;
		function get_ex_header(_) {&lt;br /&gt;
			console.log(&#039;EX Header found&#039;);&lt;br /&gt;
			var attributes = {};&lt;br /&gt;
			var attrs = this.getAttributeNames();&lt;br /&gt;
			for (var i in attrs)&lt;br /&gt;
				attributes[attrs[i]] = this.getAttribute(attrs[i]);&lt;br /&gt;
			ex_header = [$(this).html(), attributes];&lt;br /&gt;
			$(this).remove();&lt;br /&gt;
		}&lt;br /&gt;
		$(tab_element).children(&amp;quot;p&amp;quot;).children(&amp;quot;span.tabberex-tab-header&amp;quot;).each(get_ex_header);&lt;br /&gt;
		$(tab_element).children(&amp;quot;span.tabberex-tab-header&amp;quot;).each(get_ex_header);&lt;br /&gt;
		&lt;br /&gt;
		// Get default&lt;br /&gt;
		var is_default = false;&lt;br /&gt;
		if ($(tab_element).hasClass(&amp;quot;tabberex-tab-default&amp;quot;))&lt;br /&gt;
			is_default = true;&lt;br /&gt;
		&lt;br /&gt;
		// Get tab location&lt;br /&gt;
		var tab_location = $(this).attr(&amp;quot;data-tab-location&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		return {&amp;quot;header&amp;quot;: header, &amp;quot;ex_header&amp;quot;: ex_header, &amp;quot;default&amp;quot;: is_default, &amp;quot;location&amp;quot;: tab_location};&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var process_tabbers = function()&lt;br /&gt;
	{&lt;br /&gt;
		console.log(&#039;TabberEX started&#039;);&lt;br /&gt;
		var tabber_i = 0;&lt;br /&gt;
		var default_tabs = {};&lt;br /&gt;
		var tabber_ids = [];&lt;br /&gt;
		// The tabs are iterated through backwards to properly handle tabbers that are nested within other tabbers&lt;br /&gt;
		$($(&amp;quot;.tabberex-head&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			var tab_headers = [];&lt;br /&gt;
			var tab_ex_headers = [];&lt;br /&gt;
			var tab_locations = [];&lt;br /&gt;
			var default_tab = 0;&lt;br /&gt;
				&lt;br /&gt;
			var tabber_id = $(this).attr(&amp;quot;data-tabber-id&amp;quot;);&lt;br /&gt;
			if (tabber_id === undefined) tabber_id = String(tabber_i);&lt;br /&gt;
				&lt;br /&gt;
			$(this).children(&amp;quot;.tabberex-tab&amp;quot;).each(function(i) {&lt;br /&gt;
				console.log(&#039;Processing head tab &#039; + tabber_id + &#039; &#039; + String(i));&lt;br /&gt;
				var tab_details = process_tabber_head_tab(this, i);&lt;br /&gt;
				console.log(&#039;Processing complete&#039;);&lt;br /&gt;
				tab_headers[i] = tab_details.header;&lt;br /&gt;
				tab_ex_headers[i] = tab_details.ex_header;&lt;br /&gt;
				if (tab_details.default)&lt;br /&gt;
					default_tab = i;&lt;br /&gt;
				tab_locations[i] = tab_details.location;&lt;br /&gt;
				$(this).detach();&lt;br /&gt;
			});&lt;br /&gt;
			&lt;br /&gt;
			// Insert tabs into DOM&lt;br /&gt;
			tabberex_buildTabHead(this, tabber_id, tab_headers, tab_ex_headers, tab_locations);&lt;br /&gt;
			if (default_tabs[tabber_id] === undefined)&lt;br /&gt;
				default_tabs[tabber_id] = default_tab;&lt;br /&gt;
			tabber_ids.push(tabber_id);&lt;br /&gt;
			tabber_i++;&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		$($(&amp;quot;.tabberex-body&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			$(this).children().css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		$($(&amp;quot;.tabberex&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			var tab_headers = [];&lt;br /&gt;
			var tab_ex_headers = [];&lt;br /&gt;
			var tab_locations = [];&lt;br /&gt;
			var default_tab = 0;&lt;br /&gt;
			var tab_contents = [];&lt;br /&gt;
			&lt;br /&gt;
			var tabber_id = $(this).attr(&amp;quot;data-tabber-id&amp;quot;);&lt;br /&gt;
			if (tabber_id === undefined) tabber_id = String(tabber_i);&lt;br /&gt;
            $(this).attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
&lt;br /&gt;
            var tabber_head = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
            $(tabber_head).addClass(&amp;quot;tabberex-head&amp;quot;).attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
            $(this).removeClass(&amp;quot;tabberex&amp;quot;).addClass(&amp;quot;tabberex-body&amp;quot;);&lt;br /&gt;
			&lt;br /&gt;
			$(this).children(&amp;quot;.tabberex-tab&amp;quot;).each(function(i) {&lt;br /&gt;
				console.log(&#039;Processing head tab &#039; + tabber_id + &#039; &#039; + String(i));&lt;br /&gt;
				var tab_details = process_tabber_head_tab(this, i);&lt;br /&gt;
				console.log(&#039;Processing complete&#039;);&lt;br /&gt;
				tab_headers[i] = tab_details.header;&lt;br /&gt;
				tab_ex_headers[i] = tab_details.ex_header;&lt;br /&gt;
				if (tab_details.default)&lt;br /&gt;
					default_tab = i;&lt;br /&gt;
				tab_locations[i] = tab_details.location;&lt;br /&gt;
				&lt;br /&gt;
				// Get tab content&lt;br /&gt;
				$(this).css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
				tab_contents[i] = $(this);&lt;br /&gt;
			});&lt;br /&gt;
&lt;br /&gt;
            tabberex_buildTabHead(tabber_head, tabber_id, tab_headers, tab_ex_headers, tab_locations);&lt;br /&gt;
			if (default_tabs[tabber_id] === undefined)&lt;br /&gt;
				default_tabs[tabber_id] = default_tab;&lt;br /&gt;
            $(tabber_head).insertBefore(this);&lt;br /&gt;
			tabber_ids.push(tabber_id);&lt;br /&gt;
			tabber_i++;&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		// Select default tabs&lt;br /&gt;
		for (var i in tabber_ids)&lt;br /&gt;
		{&lt;br /&gt;
			tabberex_showTab(tabber_ids[i], default_tabs[tabber_ids[i]] + 1);&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
 &lt;br /&gt;
	mw.hook(&amp;quot;wikipage.content&amp;quot;).add(process_tabbers);&lt;br /&gt;
}(this, jQuery, mediaWiki));&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * @title           SoundcloudPlayer.js&lt;br /&gt;
 * @version         1.1.2&lt;br /&gt;
 * @description     Add support for soundcloud players&lt;br /&gt;
 * @author          Himmalerin&lt;br /&gt;
 * @license         CC-BY-SA-3.0&lt;br /&gt;
 */&lt;br /&gt;
(function () {&lt;br /&gt;
	// Build the iframe&lt;br /&gt;
	const scPlayer = function (data) {&lt;br /&gt;
		const widget = document.createElement(&#039;iframe&#039;);&lt;br /&gt;
&lt;br /&gt;
		widget.classList.add(&#039;soundcloud-player&#039;);&lt;br /&gt;
&lt;br /&gt;
		widget.src =&lt;br /&gt;
			&#039;https://w.soundcloud.com/player/?show_artwork=false&amp;amp;url=&#039; +&lt;br /&gt;
			encodeURI(data.src);&lt;br /&gt;
&lt;br /&gt;
		// If data-color is set add the value to the iframe&lt;br /&gt;
		if (data.color) widget.src += &#039;&amp;amp;color=&#039; + encodeURIComponent(data.color);&lt;br /&gt;
		// If data-width/height are set add that value to the iframe&lt;br /&gt;
		if (data.width) widget.width = data.width;&lt;br /&gt;
		if (data.height) widget.height = data.height;&lt;br /&gt;
&lt;br /&gt;
		return widget;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	const scParseTags = function ($content) {&lt;br /&gt;
		// Get all instances of the soundcloud class&lt;br /&gt;
		const scTags = $content.find(&#039;.soundcloud&#039;);&lt;br /&gt;
&lt;br /&gt;
		// For each instance of the soundcloud class run scPlayer&lt;br /&gt;
		for (var i = 0; i &amp;lt; scTags.length; i++) {&lt;br /&gt;
			scTags[i].replaceWith(scPlayer(scTags[i].dataset));&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	mw.hook(&#039;wikipage.content&#039;).add(function ($content) {&lt;br /&gt;
		scParseTags($content);&lt;br /&gt;
	});&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
https://dev.fandom.com/wiki/MediaWiki:CopyText/code.js&lt;br /&gt;
 */&lt;br /&gt;
(function () {&lt;br /&gt;
    if (window.CopyTextLoaded) {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    window.CopyTextLoaded = true;&lt;br /&gt;
    mw.hook(&#039;dev.i18n&#039;).add(function (i18n) {&lt;br /&gt;
        i18n.loadMessages(&#039;CopyText&#039;).done(function (i18n) {&lt;br /&gt;
            function showSuccess() {&lt;br /&gt;
                if (window.BannerNotification) {&lt;br /&gt;
                    new BannerNotification(i18n.msg(&#039;success&#039;).escape(), &#039;confirm&#039;, null, 5000).show();&lt;br /&gt;
                } else {&lt;br /&gt;
                    mw.notify(i18n.msg(&#039;success&#039;).plain());&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $(&#039;body&#039;).on(&#039;click&#039;, &#039;.copy-to-clipboard-button&#039;, function(e){&lt;br /&gt;
                var text = $(this).data(&#039;text&#039;),&lt;br /&gt;
                $input = $(&#039;&amp;lt;textarea&amp;gt;&#039;, { type: &#039;text&#039; })&lt;br /&gt;
                    .val($(&#039;.copy-to-clipboard-text&#039;).filter(function() {&lt;br /&gt;
                        return $(this).data(&#039;text&#039;) == text;&lt;br /&gt;
                    }).first().text())&lt;br /&gt;
                    .appendTo(&#039;body&#039;)&lt;br /&gt;
                    .select();&lt;br /&gt;
                var success = document.execCommand(&#039;Copy&#039;);&lt;br /&gt;
                $input.remove();&lt;br /&gt;
                if (success) {&lt;br /&gt;
                    showSuccess();&lt;br /&gt;
                } else {&lt;br /&gt;
                    if (window.navigator &amp;amp;&amp;amp; navigator.clipboard &amp;amp;&amp;amp; navigator.clipboard.writeText) {&lt;br /&gt;
                        navigator.clipboard.writeText(text).then(function() {&lt;br /&gt;
                            showSuccess();&lt;br /&gt;
                        });&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/* custom one-time animations */&lt;br /&gt;
(function() {&lt;br /&gt;
	function ensureOnetimeAnimations(elem) {&lt;br /&gt;
	   // the hacky way is to just set a timeout longer than the animation timeout then add a class&lt;br /&gt;
	   setTimeout(() =&amp;gt; { elem.classList.add(&amp;quot;inhibit-load-animations&amp;quot;) }, 500);&lt;br /&gt;
	}&lt;br /&gt;
	mw.hook(&#039;wikipage.content&#039;).add(() =&amp;gt; {&lt;br /&gt;
		console.log(&#039;hi&#039;);&lt;br /&gt;
		const onetimeAnimatedElems = document.querySelectorAll(&amp;quot;body&amp;quot;);&lt;br /&gt;
		for (const elem of onetimeAnimatedElems) {&lt;br /&gt;
			ensureOnetimeAnimations(elem);&lt;br /&gt;
		}&lt;br /&gt;
	})&lt;br /&gt;
})()&lt;/div&gt;</summary>
		<author><name>Pynappo</name></author>
	</entry>
	<entry>
		<id>https://nbittrpgwiki.pynappo.xyz/index.php?title=MediaWiki:Common.js&amp;diff=3010</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://nbittrpgwiki.pynappo.xyz/index.php?title=MediaWiki:Common.js&amp;diff=3010"/>
		<updated>2026-09-25T11:36:58Z</updated>

		<summary type="html">&lt;p&gt;Pynappo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/*&lt;br /&gt;
    Template:Spoiler on dev.miraheze.org&lt;br /&gt;
*/&lt;br /&gt;
$(function(){&lt;br /&gt;
    //spoiler block behavior&lt;br /&gt;
	$(&#039;.spoiler&#039;).click(function(){&lt;br /&gt;
		$(this).toggleClass(&#039;off&#039;);&lt;br /&gt;
	});&lt;br /&gt;
	// spoiler button behavior&lt;br /&gt;
    $(&#039;#spoilerbtn&#039;).text(&#039;Show all spoilers&#039;);&lt;br /&gt;
	$(&#039;#spoilerbtn&#039;).click(function(){&lt;br /&gt;
		$(this).toggleClass(&#039;hide&#039;);&lt;br /&gt;
		$(&#039;.spoiler&#039;).toggleClass(&#039;showall&#039;);&lt;br /&gt;
		&lt;br /&gt;
		if ($(this).is(&#039;.hide&#039;)){ $(this).text(&#039;Hide all spoilers&#039;); } &lt;br /&gt;
        else { $(this).text(&#039;Show all spoilers&#039;); }&lt;br /&gt;
	});	&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * TabberEX&lt;br /&gt;
 *&lt;br /&gt;
 * @version 2.3&lt;br /&gt;
 *&lt;br /&gt;
 * @author Jono99 &amp;lt;https://phigros.fandom.com/wiki/User:Jono99&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * documentation and examples at:&lt;br /&gt;
 * &amp;lt;https://dev.fandom.com/wiki/TabberEX&amp;gt;&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
 (function (window, $, mw) {&lt;br /&gt;
	// Function called by tabs to switch tabs&lt;br /&gt;
	window.tabberex_switchTab = function(tabber_id, tab)&lt;br /&gt;
	{&lt;br /&gt;
		tabberex_hideAllTabs(tabber_id);&lt;br /&gt;
		tabberex_showTab(tabber_id, tab);&lt;br /&gt;
	};&lt;br /&gt;
 &lt;br /&gt;
	// Inject CSS&lt;br /&gt;
	(function() {&lt;br /&gt;
		var tabberex_css = document.createElement(&amp;quot;style&amp;quot;);&lt;br /&gt;
		tabberex_css.innerHTML = &amp;quot;/* CSS owned by FANDOM */\n.oo-ui-tabOptionWidget{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;vertical-align:bottom;align-items:center;color:color-mix(in srgb, var(--text-color) 75%, transparent);display:inline-flex;font-size:14px;font-weight:500;height:40px;letter-spacing:.5px;margin:0;padding:0 11px;-webkit-transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s;-moz-transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s;transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s}.oo-ui-tabSelectWidget:not(.oo-ui-tabSelectWidget-framed) .oo-ui-tabOptionWidget{-webkit-transition:color .3s,box-shadow .3s;-moz-transition:color .3s,box-shadow .3s;transition:color .3s,box-shadow .3s;border-bottom:1px solid var(--banner-color)}.oo-ui-tabSelectWidget:not(.oo-ui-tabSelectWidget-framed) .oo-ui-tabOptionWidget.oo-ui-optionWidget-selected{box-shadow:inset 0 -2px 0 0 var(--link-color);color:var(--link-color)}&amp;quot;;&lt;br /&gt;
		document.head.appendChild(tabberex_css);&lt;br /&gt;
	})();&lt;br /&gt;
		&lt;br /&gt;
	window.tabberex_showTab = function(tabber_id, i)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;)&lt;br /&gt;
		.addClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;default&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$($(&amp;quot;.tabberex-body&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;).get()).each(function () {&lt;br /&gt;
            var display_value = $(this).attr(&amp;quot;data-tab-display&amp;quot;);&lt;br /&gt;
            if (display_value === undefined) display_value = &amp;quot;block&amp;quot;;&lt;br /&gt;
            $(this).css(&amp;quot;display&amp;quot;, display_value);&lt;br /&gt;
        });&lt;br /&gt;
	};&lt;br /&gt;
	 &lt;br /&gt;
	window.tabberex_hideTab = function(tabber_id, i)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;)&lt;br /&gt;
		.removeClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$(&amp;quot;.tabberex-body&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;).css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
			&lt;br /&gt;
	window.tabberex_hideAllTabs = function(tabber_id)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children()&lt;br /&gt;
		.removeClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$(&amp;quot;.tabberex-body&amp;quot; + base_selector).children().css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var tabberex_buildTabHead = function(host_div, tabber_id, tab_headers, tab_ex_headers, tab_locations)&lt;br /&gt;
	{&lt;br /&gt;
		var tabber_head = host_div;&lt;br /&gt;
		tabber_head.innerHTML = &amp;quot;&amp;quot;;&lt;br /&gt;
		$(tabber_head).addClass(&amp;quot;tabberex-head oo-ui-widget oo-ui-widget-enabled oo-ui-selectWidget oo-ui-selectWidget-unpressed oo-ui-selectWidget-depressed oo-ui-tabSelectWidget&amp;quot;)&lt;br /&gt;
		.attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
		for (var i = 0; i &amp;lt; tab_headers.length; i++)&lt;br /&gt;
		{&lt;br /&gt;
			console.log(&amp;quot;Building tab &amp;quot; + tabber_id + &amp;quot; &amp;quot; + String(i));&lt;br /&gt;
			var tab = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
			$(tab).addClass(&amp;quot;oo-ui-widget oo-ui-widget-enabled oo-ui-labelElement oo-ui-optionWidget oo-ui-tabOptionWidget&amp;quot;)&lt;br /&gt;
			.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
			if (tab_locations[i] === undefined)&lt;br /&gt;
				$(tab).attr(&amp;quot;onclick&amp;quot;, &amp;quot;tabberex_switchTab(\&amp;quot;&amp;quot; + mw.html.escape(tabber_id) + &amp;quot;\&amp;quot;, &amp;quot; + (i + 1) + &amp;quot;)&amp;quot;);&lt;br /&gt;
			else&lt;br /&gt;
				$(tab).attr(&amp;quot;onclick&amp;quot;, &amp;quot;location = \&amp;quot;&amp;quot; + mw.html.escape(tab_locations[i]) + &amp;quot;\&amp;quot;&amp;quot;);&lt;br /&gt;
			var tab_span = document.createElement(&amp;quot;span&amp;quot;);&lt;br /&gt;
			$(tab_span).addClass(&amp;quot;oo-ui-labelElement-label&amp;quot;);&lt;br /&gt;
			if (tab_ex_headers[i] === undefined)&lt;br /&gt;
				$(tab_span).text(tab_headers[i]);&lt;br /&gt;
			else&lt;br /&gt;
			{&lt;br /&gt;
				console.log(&amp;quot;EX Header present&amp;quot;);&lt;br /&gt;
				for (var attr in tab_ex_headers[i][1])&lt;br /&gt;
					tab_span.setAttribute(attr, tab_ex_headers[i][1][attr]);&lt;br /&gt;
				$(tab_span).html(tab_ex_headers[i][0]);&lt;br /&gt;
			}&lt;br /&gt;
			tab.appendChild(tab_span);&lt;br /&gt;
			tabber_head.appendChild(tab);&lt;br /&gt;
			console.log(&amp;quot;Successfully built tab&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		return tabber_head.outerHTML;&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var process_tabber_head_tab = function(tab_element, i)&lt;br /&gt;
	{&lt;br /&gt;
		// Get header&lt;br /&gt;
		var header = $(tab_element).attr(&amp;quot;data-tab-header&amp;quot;);&lt;br /&gt;
		if (header === undefined) header = i + 1;&lt;br /&gt;
		&lt;br /&gt;
		// Get ex header&lt;br /&gt;
		var ex_header;&lt;br /&gt;
		function get_ex_header(_) {&lt;br /&gt;
			console.log(&#039;EX Header found&#039;);&lt;br /&gt;
			var attributes = {};&lt;br /&gt;
			var attrs = this.getAttributeNames();&lt;br /&gt;
			for (var i in attrs)&lt;br /&gt;
				attributes[attrs[i]] = this.getAttribute(attrs[i]);&lt;br /&gt;
			ex_header = [$(this).html(), attributes];&lt;br /&gt;
			$(this).remove();&lt;br /&gt;
		}&lt;br /&gt;
		$(tab_element).children(&amp;quot;p&amp;quot;).children(&amp;quot;span.tabberex-tab-header&amp;quot;).each(get_ex_header);&lt;br /&gt;
		$(tab_element).children(&amp;quot;span.tabberex-tab-header&amp;quot;).each(get_ex_header);&lt;br /&gt;
		&lt;br /&gt;
		// Get default&lt;br /&gt;
		var is_default = false;&lt;br /&gt;
		if ($(tab_element).hasClass(&amp;quot;tabberex-tab-default&amp;quot;))&lt;br /&gt;
			is_default = true;&lt;br /&gt;
		&lt;br /&gt;
		// Get tab location&lt;br /&gt;
		var tab_location = $(this).attr(&amp;quot;data-tab-location&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		return {&amp;quot;header&amp;quot;: header, &amp;quot;ex_header&amp;quot;: ex_header, &amp;quot;default&amp;quot;: is_default, &amp;quot;location&amp;quot;: tab_location};&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var process_tabbers = function()&lt;br /&gt;
	{&lt;br /&gt;
		console.log(&#039;TabberEX started&#039;);&lt;br /&gt;
		var tabber_i = 0;&lt;br /&gt;
		var default_tabs = {};&lt;br /&gt;
		var tabber_ids = [];&lt;br /&gt;
		// The tabs are iterated through backwards to properly handle tabbers that are nested within other tabbers&lt;br /&gt;
		$($(&amp;quot;.tabberex-head&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			var tab_headers = [];&lt;br /&gt;
			var tab_ex_headers = [];&lt;br /&gt;
			var tab_locations = [];&lt;br /&gt;
			var default_tab = 0;&lt;br /&gt;
				&lt;br /&gt;
			var tabber_id = $(this).attr(&amp;quot;data-tabber-id&amp;quot;);&lt;br /&gt;
			if (tabber_id === undefined) tabber_id = String(tabber_i);&lt;br /&gt;
				&lt;br /&gt;
			$(this).children(&amp;quot;.tabberex-tab&amp;quot;).each(function(i) {&lt;br /&gt;
				console.log(&#039;Processing head tab &#039; + tabber_id + &#039; &#039; + String(i));&lt;br /&gt;
				var tab_details = process_tabber_head_tab(this, i);&lt;br /&gt;
				console.log(&#039;Processing complete&#039;);&lt;br /&gt;
				tab_headers[i] = tab_details.header;&lt;br /&gt;
				tab_ex_headers[i] = tab_details.ex_header;&lt;br /&gt;
				if (tab_details.default)&lt;br /&gt;
					default_tab = i;&lt;br /&gt;
				tab_locations[i] = tab_details.location;&lt;br /&gt;
				$(this).detach();&lt;br /&gt;
			});&lt;br /&gt;
			&lt;br /&gt;
			// Insert tabs into DOM&lt;br /&gt;
			tabberex_buildTabHead(this, tabber_id, tab_headers, tab_ex_headers, tab_locations);&lt;br /&gt;
			if (default_tabs[tabber_id] === undefined)&lt;br /&gt;
				default_tabs[tabber_id] = default_tab;&lt;br /&gt;
			tabber_ids.push(tabber_id);&lt;br /&gt;
			tabber_i++;&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		$($(&amp;quot;.tabberex-body&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			$(this).children().css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		$($(&amp;quot;.tabberex&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			var tab_headers = [];&lt;br /&gt;
			var tab_ex_headers = [];&lt;br /&gt;
			var tab_locations = [];&lt;br /&gt;
			var default_tab = 0;&lt;br /&gt;
			var tab_contents = [];&lt;br /&gt;
			&lt;br /&gt;
			var tabber_id = $(this).attr(&amp;quot;data-tabber-id&amp;quot;);&lt;br /&gt;
			if (tabber_id === undefined) tabber_id = String(tabber_i);&lt;br /&gt;
            $(this).attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
&lt;br /&gt;
            var tabber_head = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
            $(tabber_head).addClass(&amp;quot;tabberex-head&amp;quot;).attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
            $(this).removeClass(&amp;quot;tabberex&amp;quot;).addClass(&amp;quot;tabberex-body&amp;quot;);&lt;br /&gt;
			&lt;br /&gt;
			$(this).children(&amp;quot;.tabberex-tab&amp;quot;).each(function(i) {&lt;br /&gt;
				console.log(&#039;Processing head tab &#039; + tabber_id + &#039; &#039; + String(i));&lt;br /&gt;
				var tab_details = process_tabber_head_tab(this, i);&lt;br /&gt;
				console.log(&#039;Processing complete&#039;);&lt;br /&gt;
				tab_headers[i] = tab_details.header;&lt;br /&gt;
				tab_ex_headers[i] = tab_details.ex_header;&lt;br /&gt;
				if (tab_details.default)&lt;br /&gt;
					default_tab = i;&lt;br /&gt;
				tab_locations[i] = tab_details.location;&lt;br /&gt;
				&lt;br /&gt;
				// Get tab content&lt;br /&gt;
				$(this).css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
				tab_contents[i] = $(this);&lt;br /&gt;
			});&lt;br /&gt;
&lt;br /&gt;
            tabberex_buildTabHead(tabber_head, tabber_id, tab_headers, tab_ex_headers, tab_locations);&lt;br /&gt;
			if (default_tabs[tabber_id] === undefined)&lt;br /&gt;
				default_tabs[tabber_id] = default_tab;&lt;br /&gt;
            $(tabber_head).insertBefore(this);&lt;br /&gt;
			tabber_ids.push(tabber_id);&lt;br /&gt;
			tabber_i++;&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		// Select default tabs&lt;br /&gt;
		for (var i in tabber_ids)&lt;br /&gt;
		{&lt;br /&gt;
			tabberex_showTab(tabber_ids[i], default_tabs[tabber_ids[i]] + 1);&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
 &lt;br /&gt;
	mw.hook(&amp;quot;wikipage.content&amp;quot;).add(process_tabbers);&lt;br /&gt;
}(this, jQuery, mediaWiki));&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * @title           SoundcloudPlayer.js&lt;br /&gt;
 * @version         1.1.2&lt;br /&gt;
 * @description     Add support for soundcloud players&lt;br /&gt;
 * @author          Himmalerin&lt;br /&gt;
 * @license         CC-BY-SA-3.0&lt;br /&gt;
 */&lt;br /&gt;
(function () {&lt;br /&gt;
	// Build the iframe&lt;br /&gt;
	const scPlayer = function (data) {&lt;br /&gt;
		const widget = document.createElement(&#039;iframe&#039;);&lt;br /&gt;
&lt;br /&gt;
		widget.classList.add(&#039;soundcloud-player&#039;);&lt;br /&gt;
&lt;br /&gt;
		widget.src =&lt;br /&gt;
			&#039;https://w.soundcloud.com/player/?show_artwork=false&amp;amp;url=&#039; +&lt;br /&gt;
			encodeURI(data.src);&lt;br /&gt;
&lt;br /&gt;
		// If data-color is set add the value to the iframe&lt;br /&gt;
		if (data.color) widget.src += &#039;&amp;amp;color=&#039; + encodeURIComponent(data.color);&lt;br /&gt;
		// If data-width/height are set add that value to the iframe&lt;br /&gt;
		if (data.width) widget.width = data.width;&lt;br /&gt;
		if (data.height) widget.height = data.height;&lt;br /&gt;
&lt;br /&gt;
		return widget;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	const scParseTags = function ($content) {&lt;br /&gt;
		// Get all instances of the soundcloud class&lt;br /&gt;
		const scTags = $content.find(&#039;.soundcloud&#039;);&lt;br /&gt;
&lt;br /&gt;
		// For each instance of the soundcloud class run scPlayer&lt;br /&gt;
		for (var i = 0; i &amp;lt; scTags.length; i++) {&lt;br /&gt;
			scTags[i].replaceWith(scPlayer(scTags[i].dataset));&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	mw.hook(&#039;wikipage.content&#039;).add(function ($content) {&lt;br /&gt;
		scParseTags($content);&lt;br /&gt;
	});&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
https://dev.fandom.com/wiki/MediaWiki:CopyText/code.js&lt;br /&gt;
 */&lt;br /&gt;
(function () {&lt;br /&gt;
    if (window.CopyTextLoaded) {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    window.CopyTextLoaded = true;&lt;br /&gt;
    mw.hook(&#039;dev.i18n&#039;).add(function (i18n) {&lt;br /&gt;
        i18n.loadMessages(&#039;CopyText&#039;).done(function (i18n) {&lt;br /&gt;
            function showSuccess() {&lt;br /&gt;
                if (window.BannerNotification) {&lt;br /&gt;
                    new BannerNotification(i18n.msg(&#039;success&#039;).escape(), &#039;confirm&#039;, null, 5000).show();&lt;br /&gt;
                } else {&lt;br /&gt;
                    mw.notify(i18n.msg(&#039;success&#039;).plain());&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $(&#039;body&#039;).on(&#039;click&#039;, &#039;.copy-to-clipboard-button&#039;, function(e){&lt;br /&gt;
                var text = $(this).data(&#039;text&#039;),&lt;br /&gt;
                $input = $(&#039;&amp;lt;textarea&amp;gt;&#039;, { type: &#039;text&#039; })&lt;br /&gt;
                    .val($(&#039;.copy-to-clipboard-text&#039;).filter(function() {&lt;br /&gt;
                        return $(this).data(&#039;text&#039;) == text;&lt;br /&gt;
                    }).first().text())&lt;br /&gt;
                    .appendTo(&#039;body&#039;)&lt;br /&gt;
                    .select();&lt;br /&gt;
                var success = document.execCommand(&#039;Copy&#039;);&lt;br /&gt;
                $input.remove();&lt;br /&gt;
                if (success) {&lt;br /&gt;
                    showSuccess();&lt;br /&gt;
                } else {&lt;br /&gt;
                    if (window.navigator &amp;amp;&amp;amp; navigator.clipboard &amp;amp;&amp;amp; navigator.clipboard.writeText) {&lt;br /&gt;
                        navigator.clipboard.writeText(text).then(function() {&lt;br /&gt;
                            showSuccess();&lt;br /&gt;
                        });&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/* custom one-time animations */&lt;br /&gt;
(function() {&lt;br /&gt;
	function ensureOnetimeAnimations(elem, ) {&lt;br /&gt;
	   // the hacky way is to just set a timeout longer than the animation timeout then add a class&lt;br /&gt;
	   setTimeout(() =&amp;gt; { elem.classList.add(&amp;quot;inhibit-load-animations&amp;quot;) }, 500);&lt;br /&gt;
	}&lt;br /&gt;
	mw.hook(&#039;wikipage.content&#039;).add(() =&amp;gt; {&lt;br /&gt;
		console.log(&#039;hi&#039;);&lt;br /&gt;
		const onetimeAnimatedElems = document.querySelectorAll(&amp;quot;#mw-content,#mw-site-navigation,#mw-related-navigation&amp;quot;);&lt;br /&gt;
		for (const elem of onetimeAnimatedElems) {&lt;br /&gt;
			ensureOnetimeAnimations(elem);&lt;br /&gt;
		}&lt;br /&gt;
	})&lt;br /&gt;
})()&lt;/div&gt;</summary>
		<author><name>Pynappo</name></author>
	</entry>
	<entry>
		<id>https://nbittrpgwiki.pynappo.xyz/index.php?title=MediaWiki:Common.js&amp;diff=3009</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://nbittrpgwiki.pynappo.xyz/index.php?title=MediaWiki:Common.js&amp;diff=3009"/>
		<updated>2026-09-25T11:31:26Z</updated>

		<summary type="html">&lt;p&gt;Pynappo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/*&lt;br /&gt;
    Template:Spoiler on dev.miraheze.org&lt;br /&gt;
*/&lt;br /&gt;
$(function(){&lt;br /&gt;
    //spoiler block behavior&lt;br /&gt;
	$(&#039;.spoiler&#039;).click(function(){&lt;br /&gt;
		$(this).toggleClass(&#039;off&#039;);&lt;br /&gt;
	});&lt;br /&gt;
	// spoiler button behavior&lt;br /&gt;
    $(&#039;#spoilerbtn&#039;).text(&#039;Show all spoilers&#039;);&lt;br /&gt;
	$(&#039;#spoilerbtn&#039;).click(function(){&lt;br /&gt;
		$(this).toggleClass(&#039;hide&#039;);&lt;br /&gt;
		$(&#039;.spoiler&#039;).toggleClass(&#039;showall&#039;);&lt;br /&gt;
		&lt;br /&gt;
		if ($(this).is(&#039;.hide&#039;)){ $(this).text(&#039;Hide all spoilers&#039;); } &lt;br /&gt;
        else { $(this).text(&#039;Show all spoilers&#039;); }&lt;br /&gt;
	});	&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * TabberEX&lt;br /&gt;
 *&lt;br /&gt;
 * @version 2.3&lt;br /&gt;
 *&lt;br /&gt;
 * @author Jono99 &amp;lt;https://phigros.fandom.com/wiki/User:Jono99&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * documentation and examples at:&lt;br /&gt;
 * &amp;lt;https://dev.fandom.com/wiki/TabberEX&amp;gt;&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
 (function (window, $, mw) {&lt;br /&gt;
	// Function called by tabs to switch tabs&lt;br /&gt;
	window.tabberex_switchTab = function(tabber_id, tab)&lt;br /&gt;
	{&lt;br /&gt;
		tabberex_hideAllTabs(tabber_id);&lt;br /&gt;
		tabberex_showTab(tabber_id, tab);&lt;br /&gt;
	};&lt;br /&gt;
 &lt;br /&gt;
	// Inject CSS&lt;br /&gt;
	(function() {&lt;br /&gt;
		var tabberex_css = document.createElement(&amp;quot;style&amp;quot;);&lt;br /&gt;
		tabberex_css.innerHTML = &amp;quot;/* CSS owned by FANDOM */\n.oo-ui-tabOptionWidget{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;vertical-align:bottom;align-items:center;color:color-mix(in srgb, var(--text-color) 75%, transparent);display:inline-flex;font-size:14px;font-weight:500;height:40px;letter-spacing:.5px;margin:0;padding:0 11px;-webkit-transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s;-moz-transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s;transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s}.oo-ui-tabSelectWidget:not(.oo-ui-tabSelectWidget-framed) .oo-ui-tabOptionWidget{-webkit-transition:color .3s,box-shadow .3s;-moz-transition:color .3s,box-shadow .3s;transition:color .3s,box-shadow .3s;border-bottom:1px solid var(--banner-color)}.oo-ui-tabSelectWidget:not(.oo-ui-tabSelectWidget-framed) .oo-ui-tabOptionWidget.oo-ui-optionWidget-selected{box-shadow:inset 0 -2px 0 0 var(--link-color);color:var(--link-color)}&amp;quot;;&lt;br /&gt;
		document.head.appendChild(tabberex_css);&lt;br /&gt;
	})();&lt;br /&gt;
		&lt;br /&gt;
	window.tabberex_showTab = function(tabber_id, i)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;)&lt;br /&gt;
		.addClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;default&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$($(&amp;quot;.tabberex-body&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;).get()).each(function () {&lt;br /&gt;
            var display_value = $(this).attr(&amp;quot;data-tab-display&amp;quot;);&lt;br /&gt;
            if (display_value === undefined) display_value = &amp;quot;block&amp;quot;;&lt;br /&gt;
            $(this).css(&amp;quot;display&amp;quot;, display_value);&lt;br /&gt;
        });&lt;br /&gt;
	};&lt;br /&gt;
	 &lt;br /&gt;
	window.tabberex_hideTab = function(tabber_id, i)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;)&lt;br /&gt;
		.removeClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$(&amp;quot;.tabberex-body&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;).css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
			&lt;br /&gt;
	window.tabberex_hideAllTabs = function(tabber_id)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children()&lt;br /&gt;
		.removeClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$(&amp;quot;.tabberex-body&amp;quot; + base_selector).children().css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var tabberex_buildTabHead = function(host_div, tabber_id, tab_headers, tab_ex_headers, tab_locations)&lt;br /&gt;
	{&lt;br /&gt;
		var tabber_head = host_div;&lt;br /&gt;
		tabber_head.innerHTML = &amp;quot;&amp;quot;;&lt;br /&gt;
		$(tabber_head).addClass(&amp;quot;tabberex-head oo-ui-widget oo-ui-widget-enabled oo-ui-selectWidget oo-ui-selectWidget-unpressed oo-ui-selectWidget-depressed oo-ui-tabSelectWidget&amp;quot;)&lt;br /&gt;
		.attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
		for (var i = 0; i &amp;lt; tab_headers.length; i++)&lt;br /&gt;
		{&lt;br /&gt;
			console.log(&amp;quot;Building tab &amp;quot; + tabber_id + &amp;quot; &amp;quot; + String(i));&lt;br /&gt;
			var tab = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
			$(tab).addClass(&amp;quot;oo-ui-widget oo-ui-widget-enabled oo-ui-labelElement oo-ui-optionWidget oo-ui-tabOptionWidget&amp;quot;)&lt;br /&gt;
			.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
			if (tab_locations[i] === undefined)&lt;br /&gt;
				$(tab).attr(&amp;quot;onclick&amp;quot;, &amp;quot;tabberex_switchTab(\&amp;quot;&amp;quot; + mw.html.escape(tabber_id) + &amp;quot;\&amp;quot;, &amp;quot; + (i + 1) + &amp;quot;)&amp;quot;);&lt;br /&gt;
			else&lt;br /&gt;
				$(tab).attr(&amp;quot;onclick&amp;quot;, &amp;quot;location = \&amp;quot;&amp;quot; + mw.html.escape(tab_locations[i]) + &amp;quot;\&amp;quot;&amp;quot;);&lt;br /&gt;
			var tab_span = document.createElement(&amp;quot;span&amp;quot;);&lt;br /&gt;
			$(tab_span).addClass(&amp;quot;oo-ui-labelElement-label&amp;quot;);&lt;br /&gt;
			if (tab_ex_headers[i] === undefined)&lt;br /&gt;
				$(tab_span).text(tab_headers[i]);&lt;br /&gt;
			else&lt;br /&gt;
			{&lt;br /&gt;
				console.log(&amp;quot;EX Header present&amp;quot;);&lt;br /&gt;
				for (var attr in tab_ex_headers[i][1])&lt;br /&gt;
					tab_span.setAttribute(attr, tab_ex_headers[i][1][attr]);&lt;br /&gt;
				$(tab_span).html(tab_ex_headers[i][0]);&lt;br /&gt;
			}&lt;br /&gt;
			tab.appendChild(tab_span);&lt;br /&gt;
			tabber_head.appendChild(tab);&lt;br /&gt;
			console.log(&amp;quot;Successfully built tab&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		return tabber_head.outerHTML;&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var process_tabber_head_tab = function(tab_element, i)&lt;br /&gt;
	{&lt;br /&gt;
		// Get header&lt;br /&gt;
		var header = $(tab_element).attr(&amp;quot;data-tab-header&amp;quot;);&lt;br /&gt;
		if (header === undefined) header = i + 1;&lt;br /&gt;
		&lt;br /&gt;
		// Get ex header&lt;br /&gt;
		var ex_header;&lt;br /&gt;
		function get_ex_header(_) {&lt;br /&gt;
			console.log(&#039;EX Header found&#039;);&lt;br /&gt;
			var attributes = {};&lt;br /&gt;
			var attrs = this.getAttributeNames();&lt;br /&gt;
			for (var i in attrs)&lt;br /&gt;
				attributes[attrs[i]] = this.getAttribute(attrs[i]);&lt;br /&gt;
			ex_header = [$(this).html(), attributes];&lt;br /&gt;
			$(this).remove();&lt;br /&gt;
		}&lt;br /&gt;
		$(tab_element).children(&amp;quot;p&amp;quot;).children(&amp;quot;span.tabberex-tab-header&amp;quot;).each(get_ex_header);&lt;br /&gt;
		$(tab_element).children(&amp;quot;span.tabberex-tab-header&amp;quot;).each(get_ex_header);&lt;br /&gt;
		&lt;br /&gt;
		// Get default&lt;br /&gt;
		var is_default = false;&lt;br /&gt;
		if ($(tab_element).hasClass(&amp;quot;tabberex-tab-default&amp;quot;))&lt;br /&gt;
			is_default = true;&lt;br /&gt;
		&lt;br /&gt;
		// Get tab location&lt;br /&gt;
		var tab_location = $(this).attr(&amp;quot;data-tab-location&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		return {&amp;quot;header&amp;quot;: header, &amp;quot;ex_header&amp;quot;: ex_header, &amp;quot;default&amp;quot;: is_default, &amp;quot;location&amp;quot;: tab_location};&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var process_tabbers = function()&lt;br /&gt;
	{&lt;br /&gt;
		console.log(&#039;TabberEX started&#039;);&lt;br /&gt;
		var tabber_i = 0;&lt;br /&gt;
		var default_tabs = {};&lt;br /&gt;
		var tabber_ids = [];&lt;br /&gt;
		// The tabs are iterated through backwards to properly handle tabbers that are nested within other tabbers&lt;br /&gt;
		$($(&amp;quot;.tabberex-head&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			var tab_headers = [];&lt;br /&gt;
			var tab_ex_headers = [];&lt;br /&gt;
			var tab_locations = [];&lt;br /&gt;
			var default_tab = 0;&lt;br /&gt;
				&lt;br /&gt;
			var tabber_id = $(this).attr(&amp;quot;data-tabber-id&amp;quot;);&lt;br /&gt;
			if (tabber_id === undefined) tabber_id = String(tabber_i);&lt;br /&gt;
				&lt;br /&gt;
			$(this).children(&amp;quot;.tabberex-tab&amp;quot;).each(function(i) {&lt;br /&gt;
				console.log(&#039;Processing head tab &#039; + tabber_id + &#039; &#039; + String(i));&lt;br /&gt;
				var tab_details = process_tabber_head_tab(this, i);&lt;br /&gt;
				console.log(&#039;Processing complete&#039;);&lt;br /&gt;
				tab_headers[i] = tab_details.header;&lt;br /&gt;
				tab_ex_headers[i] = tab_details.ex_header;&lt;br /&gt;
				if (tab_details.default)&lt;br /&gt;
					default_tab = i;&lt;br /&gt;
				tab_locations[i] = tab_details.location;&lt;br /&gt;
				$(this).detach();&lt;br /&gt;
			});&lt;br /&gt;
			&lt;br /&gt;
			// Insert tabs into DOM&lt;br /&gt;
			tabberex_buildTabHead(this, tabber_id, tab_headers, tab_ex_headers, tab_locations);&lt;br /&gt;
			if (default_tabs[tabber_id] === undefined)&lt;br /&gt;
				default_tabs[tabber_id] = default_tab;&lt;br /&gt;
			tabber_ids.push(tabber_id);&lt;br /&gt;
			tabber_i++;&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		$($(&amp;quot;.tabberex-body&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			$(this).children().css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		$($(&amp;quot;.tabberex&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			var tab_headers = [];&lt;br /&gt;
			var tab_ex_headers = [];&lt;br /&gt;
			var tab_locations = [];&lt;br /&gt;
			var default_tab = 0;&lt;br /&gt;
			var tab_contents = [];&lt;br /&gt;
			&lt;br /&gt;
			var tabber_id = $(this).attr(&amp;quot;data-tabber-id&amp;quot;);&lt;br /&gt;
			if (tabber_id === undefined) tabber_id = String(tabber_i);&lt;br /&gt;
            $(this).attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
&lt;br /&gt;
            var tabber_head = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
            $(tabber_head).addClass(&amp;quot;tabberex-head&amp;quot;).attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
            $(this).removeClass(&amp;quot;tabberex&amp;quot;).addClass(&amp;quot;tabberex-body&amp;quot;);&lt;br /&gt;
			&lt;br /&gt;
			$(this).children(&amp;quot;.tabberex-tab&amp;quot;).each(function(i) {&lt;br /&gt;
				console.log(&#039;Processing head tab &#039; + tabber_id + &#039; &#039; + String(i));&lt;br /&gt;
				var tab_details = process_tabber_head_tab(this, i);&lt;br /&gt;
				console.log(&#039;Processing complete&#039;);&lt;br /&gt;
				tab_headers[i] = tab_details.header;&lt;br /&gt;
				tab_ex_headers[i] = tab_details.ex_header;&lt;br /&gt;
				if (tab_details.default)&lt;br /&gt;
					default_tab = i;&lt;br /&gt;
				tab_locations[i] = tab_details.location;&lt;br /&gt;
				&lt;br /&gt;
				// Get tab content&lt;br /&gt;
				$(this).css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
				tab_contents[i] = $(this);&lt;br /&gt;
			});&lt;br /&gt;
&lt;br /&gt;
            tabberex_buildTabHead(tabber_head, tabber_id, tab_headers, tab_ex_headers, tab_locations);&lt;br /&gt;
			if (default_tabs[tabber_id] === undefined)&lt;br /&gt;
				default_tabs[tabber_id] = default_tab;&lt;br /&gt;
            $(tabber_head).insertBefore(this);&lt;br /&gt;
			tabber_ids.push(tabber_id);&lt;br /&gt;
			tabber_i++;&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		// Select default tabs&lt;br /&gt;
		for (var i in tabber_ids)&lt;br /&gt;
		{&lt;br /&gt;
			tabberex_showTab(tabber_ids[i], default_tabs[tabber_ids[i]] + 1);&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
 &lt;br /&gt;
	mw.hook(&amp;quot;wikipage.content&amp;quot;).add(process_tabbers);&lt;br /&gt;
}(this, jQuery, mediaWiki));&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * @title           SoundcloudPlayer.js&lt;br /&gt;
 * @version         1.1.2&lt;br /&gt;
 * @description     Add support for soundcloud players&lt;br /&gt;
 * @author          Himmalerin&lt;br /&gt;
 * @license         CC-BY-SA-3.0&lt;br /&gt;
 */&lt;br /&gt;
(function () {&lt;br /&gt;
	// Build the iframe&lt;br /&gt;
	const scPlayer = function (data) {&lt;br /&gt;
		const widget = document.createElement(&#039;iframe&#039;);&lt;br /&gt;
&lt;br /&gt;
		widget.classList.add(&#039;soundcloud-player&#039;);&lt;br /&gt;
&lt;br /&gt;
		widget.src =&lt;br /&gt;
			&#039;https://w.soundcloud.com/player/?show_artwork=false&amp;amp;url=&#039; +&lt;br /&gt;
			encodeURI(data.src);&lt;br /&gt;
&lt;br /&gt;
		// If data-color is set add the value to the iframe&lt;br /&gt;
		if (data.color) widget.src += &#039;&amp;amp;color=&#039; + encodeURIComponent(data.color);&lt;br /&gt;
		// If data-width/height are set add that value to the iframe&lt;br /&gt;
		if (data.width) widget.width = data.width;&lt;br /&gt;
		if (data.height) widget.height = data.height;&lt;br /&gt;
&lt;br /&gt;
		return widget;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	const scParseTags = function ($content) {&lt;br /&gt;
		// Get all instances of the soundcloud class&lt;br /&gt;
		const scTags = $content.find(&#039;.soundcloud&#039;);&lt;br /&gt;
&lt;br /&gt;
		// For each instance of the soundcloud class run scPlayer&lt;br /&gt;
		for (var i = 0; i &amp;lt; scTags.length; i++) {&lt;br /&gt;
			scTags[i].replaceWith(scPlayer(scTags[i].dataset));&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	mw.hook(&#039;wikipage.content&#039;).add(function ($content) {&lt;br /&gt;
		scParseTags($content);&lt;br /&gt;
	});&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
https://dev.fandom.com/wiki/MediaWiki:CopyText/code.js&lt;br /&gt;
 */&lt;br /&gt;
(function () {&lt;br /&gt;
    if (window.CopyTextLoaded) {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    window.CopyTextLoaded = true;&lt;br /&gt;
    mw.hook(&#039;dev.i18n&#039;).add(function (i18n) {&lt;br /&gt;
        i18n.loadMessages(&#039;CopyText&#039;).done(function (i18n) {&lt;br /&gt;
            function showSuccess() {&lt;br /&gt;
                if (window.BannerNotification) {&lt;br /&gt;
                    new BannerNotification(i18n.msg(&#039;success&#039;).escape(), &#039;confirm&#039;, null, 5000).show();&lt;br /&gt;
                } else {&lt;br /&gt;
                    mw.notify(i18n.msg(&#039;success&#039;).plain());&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $(&#039;body&#039;).on(&#039;click&#039;, &#039;.copy-to-clipboard-button&#039;, function(e){&lt;br /&gt;
                var text = $(this).data(&#039;text&#039;),&lt;br /&gt;
                $input = $(&#039;&amp;lt;textarea&amp;gt;&#039;, { type: &#039;text&#039; })&lt;br /&gt;
                    .val($(&#039;.copy-to-clipboard-text&#039;).filter(function() {&lt;br /&gt;
                        return $(this).data(&#039;text&#039;) == text;&lt;br /&gt;
                    }).first().text())&lt;br /&gt;
                    .appendTo(&#039;body&#039;)&lt;br /&gt;
                    .select();&lt;br /&gt;
                var success = document.execCommand(&#039;Copy&#039;);&lt;br /&gt;
                $input.remove();&lt;br /&gt;
                if (success) {&lt;br /&gt;
                    showSuccess();&lt;br /&gt;
                } else {&lt;br /&gt;
                    if (window.navigator &amp;amp;&amp;amp; navigator.clipboard &amp;amp;&amp;amp; navigator.clipboard.writeText) {&lt;br /&gt;
                        navigator.clipboard.writeText(text).then(function() {&lt;br /&gt;
                            showSuccess();&lt;br /&gt;
                        });&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/* custom one-time animations */&lt;br /&gt;
(function() {&lt;br /&gt;
	function ensureOnetimeAnimations(elem, callback) {&lt;br /&gt;
	  // 1. Read the applied @keyframes names from the element&#039;s computed CSS&lt;br /&gt;
	  const computedNameString = window.getComputedStyle(elem).animationName;&lt;br /&gt;
	&lt;br /&gt;
	  // 2. Parse the comma-separated string into a clean Set of names&lt;br /&gt;
	  const expectedAnimations = new Set(&lt;br /&gt;
	    computedNameString&lt;br /&gt;
	      .split(&#039;,&#039;)&lt;br /&gt;
	      .map(name =&amp;gt; name.trim())&lt;br /&gt;
	      .filter(name =&amp;gt; name &amp;amp;&amp;amp; name !== &#039;none&#039;)&lt;br /&gt;
	  );&lt;br /&gt;
	&lt;br /&gt;
	  // 3. Edge Case: If no animations are applied, trigger the callback immediately&lt;br /&gt;
	  if (expectedAnimations.size === 0) {&lt;br /&gt;
	    callback();&lt;br /&gt;
	    return;&lt;br /&gt;
	  }&lt;br /&gt;
	  console.log({ expectedAnimations });&lt;br /&gt;
	&lt;br /&gt;
	  // 4. Handle the completion or cancellation of an animation&lt;br /&gt;
	  function handleAnimationEnd(event) {&lt;br /&gt;
	    // Ensure the event came from this element, not a bubbling event from a child&lt;br /&gt;
	    if (event.target !== elem) return;&lt;br /&gt;
	&lt;br /&gt;
	    if (expectedAnimations.has(event.animationName)) {&lt;br /&gt;
	      expectedAnimations.delete(event.animationName);&lt;br /&gt;
	&lt;br /&gt;
	      // Once the Set is completely empty, clean up and fire the callback&lt;br /&gt;
	      if (expectedAnimations.size === 0) {&lt;br /&gt;
	        cleanupListeners();&lt;br /&gt;
	        elem.classList.add(&amp;quot;inhibit-load-animations&amp;quot;);&lt;br /&gt;
	      }&lt;br /&gt;
	    }&lt;br /&gt;
	  }&lt;br /&gt;
	&lt;br /&gt;
	  // 5. Practical Safety: Clean up listeners so they don&#039;t linger in memory&lt;br /&gt;
	  function cleanupListeners() {&lt;br /&gt;
	    elem.removeEventListener(&#039;animationend&#039;, handleAnimationEnd);&lt;br /&gt;
	    elem.removeEventListener(&#039;animationcancel&#039;, handleAnimationEnd);&lt;br /&gt;
	  }&lt;br /&gt;
	&lt;br /&gt;
	  // 6. Bind to both end and cancel (in case an animation is interrupted)&lt;br /&gt;
	  elem.addEventListener(&#039;animationend&#039;, handleAnimationEnd);&lt;br /&gt;
	  elem.addEventListener(&#039;animationcancel&#039;, handleAnimationEnd);&lt;br /&gt;
	}&lt;br /&gt;
	mw.hook(&#039;wikipage.content&#039;).add(() =&amp;gt; {&lt;br /&gt;
		console.log(&#039;hi&#039;);&lt;br /&gt;
		const onetimeAnimatedElems = document.querySelectorAll(&amp;quot;#mw-content,#mw-site-navigation,#mw-related-navigation&amp;quot;);&lt;br /&gt;
		for (const elem of onetimeAnimatedElems) {&lt;br /&gt;
					console.log(&#039;elem&#039;);&lt;br /&gt;
			ensureOnetimeAnimations(elem);&lt;br /&gt;
		}&lt;br /&gt;
	})&lt;br /&gt;
})()&lt;/div&gt;</summary>
		<author><name>Pynappo</name></author>
	</entry>
	<entry>
		<id>https://nbittrpgwiki.pynappo.xyz/index.php?title=MediaWiki:Common.js&amp;diff=3008</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://nbittrpgwiki.pynappo.xyz/index.php?title=MediaWiki:Common.js&amp;diff=3008"/>
		<updated>2026-09-25T11:30:20Z</updated>

		<summary type="html">&lt;p&gt;Pynappo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/*&lt;br /&gt;
    Template:Spoiler on dev.miraheze.org&lt;br /&gt;
*/&lt;br /&gt;
$(function(){&lt;br /&gt;
    //spoiler block behavior&lt;br /&gt;
	$(&#039;.spoiler&#039;).click(function(){&lt;br /&gt;
		$(this).toggleClass(&#039;off&#039;);&lt;br /&gt;
	});&lt;br /&gt;
	// spoiler button behavior&lt;br /&gt;
    $(&#039;#spoilerbtn&#039;).text(&#039;Show all spoilers&#039;);&lt;br /&gt;
	$(&#039;#spoilerbtn&#039;).click(function(){&lt;br /&gt;
		$(this).toggleClass(&#039;hide&#039;);&lt;br /&gt;
		$(&#039;.spoiler&#039;).toggleClass(&#039;showall&#039;);&lt;br /&gt;
		&lt;br /&gt;
		if ($(this).is(&#039;.hide&#039;)){ $(this).text(&#039;Hide all spoilers&#039;); } &lt;br /&gt;
        else { $(this).text(&#039;Show all spoilers&#039;); }&lt;br /&gt;
	});	&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * TabberEX&lt;br /&gt;
 *&lt;br /&gt;
 * @version 2.3&lt;br /&gt;
 *&lt;br /&gt;
 * @author Jono99 &amp;lt;https://phigros.fandom.com/wiki/User:Jono99&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * documentation and examples at:&lt;br /&gt;
 * &amp;lt;https://dev.fandom.com/wiki/TabberEX&amp;gt;&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
 (function (window, $, mw) {&lt;br /&gt;
	// Function called by tabs to switch tabs&lt;br /&gt;
	window.tabberex_switchTab = function(tabber_id, tab)&lt;br /&gt;
	{&lt;br /&gt;
		tabberex_hideAllTabs(tabber_id);&lt;br /&gt;
		tabberex_showTab(tabber_id, tab);&lt;br /&gt;
	};&lt;br /&gt;
 &lt;br /&gt;
	// Inject CSS&lt;br /&gt;
	(function() {&lt;br /&gt;
		var tabberex_css = document.createElement(&amp;quot;style&amp;quot;);&lt;br /&gt;
		tabberex_css.innerHTML = &amp;quot;/* CSS owned by FANDOM */\n.oo-ui-tabOptionWidget{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;vertical-align:bottom;align-items:center;color:color-mix(in srgb, var(--text-color) 75%, transparent);display:inline-flex;font-size:14px;font-weight:500;height:40px;letter-spacing:.5px;margin:0;padding:0 11px;-webkit-transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s;-moz-transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s;transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s}.oo-ui-tabSelectWidget:not(.oo-ui-tabSelectWidget-framed) .oo-ui-tabOptionWidget{-webkit-transition:color .3s,box-shadow .3s;-moz-transition:color .3s,box-shadow .3s;transition:color .3s,box-shadow .3s;border-bottom:1px solid var(--banner-color)}.oo-ui-tabSelectWidget:not(.oo-ui-tabSelectWidget-framed) .oo-ui-tabOptionWidget.oo-ui-optionWidget-selected{box-shadow:inset 0 -2px 0 0 var(--link-color);color:var(--link-color)}&amp;quot;;&lt;br /&gt;
		document.head.appendChild(tabberex_css);&lt;br /&gt;
	})();&lt;br /&gt;
		&lt;br /&gt;
	window.tabberex_showTab = function(tabber_id, i)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;)&lt;br /&gt;
		.addClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;default&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$($(&amp;quot;.tabberex-body&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;).get()).each(function () {&lt;br /&gt;
            var display_value = $(this).attr(&amp;quot;data-tab-display&amp;quot;);&lt;br /&gt;
            if (display_value === undefined) display_value = &amp;quot;block&amp;quot;;&lt;br /&gt;
            $(this).css(&amp;quot;display&amp;quot;, display_value);&lt;br /&gt;
        });&lt;br /&gt;
	};&lt;br /&gt;
	 &lt;br /&gt;
	window.tabberex_hideTab = function(tabber_id, i)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;)&lt;br /&gt;
		.removeClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$(&amp;quot;.tabberex-body&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;).css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
			&lt;br /&gt;
	window.tabberex_hideAllTabs = function(tabber_id)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children()&lt;br /&gt;
		.removeClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$(&amp;quot;.tabberex-body&amp;quot; + base_selector).children().css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var tabberex_buildTabHead = function(host_div, tabber_id, tab_headers, tab_ex_headers, tab_locations)&lt;br /&gt;
	{&lt;br /&gt;
		var tabber_head = host_div;&lt;br /&gt;
		tabber_head.innerHTML = &amp;quot;&amp;quot;;&lt;br /&gt;
		$(tabber_head).addClass(&amp;quot;tabberex-head oo-ui-widget oo-ui-widget-enabled oo-ui-selectWidget oo-ui-selectWidget-unpressed oo-ui-selectWidget-depressed oo-ui-tabSelectWidget&amp;quot;)&lt;br /&gt;
		.attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
		for (var i = 0; i &amp;lt; tab_headers.length; i++)&lt;br /&gt;
		{&lt;br /&gt;
			console.log(&amp;quot;Building tab &amp;quot; + tabber_id + &amp;quot; &amp;quot; + String(i));&lt;br /&gt;
			var tab = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
			$(tab).addClass(&amp;quot;oo-ui-widget oo-ui-widget-enabled oo-ui-labelElement oo-ui-optionWidget oo-ui-tabOptionWidget&amp;quot;)&lt;br /&gt;
			.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
			if (tab_locations[i] === undefined)&lt;br /&gt;
				$(tab).attr(&amp;quot;onclick&amp;quot;, &amp;quot;tabberex_switchTab(\&amp;quot;&amp;quot; + mw.html.escape(tabber_id) + &amp;quot;\&amp;quot;, &amp;quot; + (i + 1) + &amp;quot;)&amp;quot;);&lt;br /&gt;
			else&lt;br /&gt;
				$(tab).attr(&amp;quot;onclick&amp;quot;, &amp;quot;location = \&amp;quot;&amp;quot; + mw.html.escape(tab_locations[i]) + &amp;quot;\&amp;quot;&amp;quot;);&lt;br /&gt;
			var tab_span = document.createElement(&amp;quot;span&amp;quot;);&lt;br /&gt;
			$(tab_span).addClass(&amp;quot;oo-ui-labelElement-label&amp;quot;);&lt;br /&gt;
			if (tab_ex_headers[i] === undefined)&lt;br /&gt;
				$(tab_span).text(tab_headers[i]);&lt;br /&gt;
			else&lt;br /&gt;
			{&lt;br /&gt;
				console.log(&amp;quot;EX Header present&amp;quot;);&lt;br /&gt;
				for (var attr in tab_ex_headers[i][1])&lt;br /&gt;
					tab_span.setAttribute(attr, tab_ex_headers[i][1][attr]);&lt;br /&gt;
				$(tab_span).html(tab_ex_headers[i][0]);&lt;br /&gt;
			}&lt;br /&gt;
			tab.appendChild(tab_span);&lt;br /&gt;
			tabber_head.appendChild(tab);&lt;br /&gt;
			console.log(&amp;quot;Successfully built tab&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		return tabber_head.outerHTML;&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var process_tabber_head_tab = function(tab_element, i)&lt;br /&gt;
	{&lt;br /&gt;
		// Get header&lt;br /&gt;
		var header = $(tab_element).attr(&amp;quot;data-tab-header&amp;quot;);&lt;br /&gt;
		if (header === undefined) header = i + 1;&lt;br /&gt;
		&lt;br /&gt;
		// Get ex header&lt;br /&gt;
		var ex_header;&lt;br /&gt;
		function get_ex_header(_) {&lt;br /&gt;
			console.log(&#039;EX Header found&#039;);&lt;br /&gt;
			var attributes = {};&lt;br /&gt;
			var attrs = this.getAttributeNames();&lt;br /&gt;
			for (var i in attrs)&lt;br /&gt;
				attributes[attrs[i]] = this.getAttribute(attrs[i]);&lt;br /&gt;
			ex_header = [$(this).html(), attributes];&lt;br /&gt;
			$(this).remove();&lt;br /&gt;
		}&lt;br /&gt;
		$(tab_element).children(&amp;quot;p&amp;quot;).children(&amp;quot;span.tabberex-tab-header&amp;quot;).each(get_ex_header);&lt;br /&gt;
		$(tab_element).children(&amp;quot;span.tabberex-tab-header&amp;quot;).each(get_ex_header);&lt;br /&gt;
		&lt;br /&gt;
		// Get default&lt;br /&gt;
		var is_default = false;&lt;br /&gt;
		if ($(tab_element).hasClass(&amp;quot;tabberex-tab-default&amp;quot;))&lt;br /&gt;
			is_default = true;&lt;br /&gt;
		&lt;br /&gt;
		// Get tab location&lt;br /&gt;
		var tab_location = $(this).attr(&amp;quot;data-tab-location&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		return {&amp;quot;header&amp;quot;: header, &amp;quot;ex_header&amp;quot;: ex_header, &amp;quot;default&amp;quot;: is_default, &amp;quot;location&amp;quot;: tab_location};&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var process_tabbers = function()&lt;br /&gt;
	{&lt;br /&gt;
		console.log(&#039;TabberEX started&#039;);&lt;br /&gt;
		var tabber_i = 0;&lt;br /&gt;
		var default_tabs = {};&lt;br /&gt;
		var tabber_ids = [];&lt;br /&gt;
		// The tabs are iterated through backwards to properly handle tabbers that are nested within other tabbers&lt;br /&gt;
		$($(&amp;quot;.tabberex-head&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			var tab_headers = [];&lt;br /&gt;
			var tab_ex_headers = [];&lt;br /&gt;
			var tab_locations = [];&lt;br /&gt;
			var default_tab = 0;&lt;br /&gt;
				&lt;br /&gt;
			var tabber_id = $(this).attr(&amp;quot;data-tabber-id&amp;quot;);&lt;br /&gt;
			if (tabber_id === undefined) tabber_id = String(tabber_i);&lt;br /&gt;
				&lt;br /&gt;
			$(this).children(&amp;quot;.tabberex-tab&amp;quot;).each(function(i) {&lt;br /&gt;
				console.log(&#039;Processing head tab &#039; + tabber_id + &#039; &#039; + String(i));&lt;br /&gt;
				var tab_details = process_tabber_head_tab(this, i);&lt;br /&gt;
				console.log(&#039;Processing complete&#039;);&lt;br /&gt;
				tab_headers[i] = tab_details.header;&lt;br /&gt;
				tab_ex_headers[i] = tab_details.ex_header;&lt;br /&gt;
				if (tab_details.default)&lt;br /&gt;
					default_tab = i;&lt;br /&gt;
				tab_locations[i] = tab_details.location;&lt;br /&gt;
				$(this).detach();&lt;br /&gt;
			});&lt;br /&gt;
			&lt;br /&gt;
			// Insert tabs into DOM&lt;br /&gt;
			tabberex_buildTabHead(this, tabber_id, tab_headers, tab_ex_headers, tab_locations);&lt;br /&gt;
			if (default_tabs[tabber_id] === undefined)&lt;br /&gt;
				default_tabs[tabber_id] = default_tab;&lt;br /&gt;
			tabber_ids.push(tabber_id);&lt;br /&gt;
			tabber_i++;&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		$($(&amp;quot;.tabberex-body&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			$(this).children().css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		$($(&amp;quot;.tabberex&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			var tab_headers = [];&lt;br /&gt;
			var tab_ex_headers = [];&lt;br /&gt;
			var tab_locations = [];&lt;br /&gt;
			var default_tab = 0;&lt;br /&gt;
			var tab_contents = [];&lt;br /&gt;
			&lt;br /&gt;
			var tabber_id = $(this).attr(&amp;quot;data-tabber-id&amp;quot;);&lt;br /&gt;
			if (tabber_id === undefined) tabber_id = String(tabber_i);&lt;br /&gt;
            $(this).attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
&lt;br /&gt;
            var tabber_head = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
            $(tabber_head).addClass(&amp;quot;tabberex-head&amp;quot;).attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
            $(this).removeClass(&amp;quot;tabberex&amp;quot;).addClass(&amp;quot;tabberex-body&amp;quot;);&lt;br /&gt;
			&lt;br /&gt;
			$(this).children(&amp;quot;.tabberex-tab&amp;quot;).each(function(i) {&lt;br /&gt;
				console.log(&#039;Processing head tab &#039; + tabber_id + &#039; &#039; + String(i));&lt;br /&gt;
				var tab_details = process_tabber_head_tab(this, i);&lt;br /&gt;
				console.log(&#039;Processing complete&#039;);&lt;br /&gt;
				tab_headers[i] = tab_details.header;&lt;br /&gt;
				tab_ex_headers[i] = tab_details.ex_header;&lt;br /&gt;
				if (tab_details.default)&lt;br /&gt;
					default_tab = i;&lt;br /&gt;
				tab_locations[i] = tab_details.location;&lt;br /&gt;
				&lt;br /&gt;
				// Get tab content&lt;br /&gt;
				$(this).css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
				tab_contents[i] = $(this);&lt;br /&gt;
			});&lt;br /&gt;
&lt;br /&gt;
            tabberex_buildTabHead(tabber_head, tabber_id, tab_headers, tab_ex_headers, tab_locations);&lt;br /&gt;
			if (default_tabs[tabber_id] === undefined)&lt;br /&gt;
				default_tabs[tabber_id] = default_tab;&lt;br /&gt;
            $(tabber_head).insertBefore(this);&lt;br /&gt;
			tabber_ids.push(tabber_id);&lt;br /&gt;
			tabber_i++;&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		// Select default tabs&lt;br /&gt;
		for (var i in tabber_ids)&lt;br /&gt;
		{&lt;br /&gt;
			tabberex_showTab(tabber_ids[i], default_tabs[tabber_ids[i]] + 1);&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
 &lt;br /&gt;
	mw.hook(&amp;quot;wikipage.content&amp;quot;).add(process_tabbers);&lt;br /&gt;
}(this, jQuery, mediaWiki));&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * @title           SoundcloudPlayer.js&lt;br /&gt;
 * @version         1.1.2&lt;br /&gt;
 * @description     Add support for soundcloud players&lt;br /&gt;
 * @author          Himmalerin&lt;br /&gt;
 * @license         CC-BY-SA-3.0&lt;br /&gt;
 */&lt;br /&gt;
(function () {&lt;br /&gt;
	// Build the iframe&lt;br /&gt;
	const scPlayer = function (data) {&lt;br /&gt;
		const widget = document.createElement(&#039;iframe&#039;);&lt;br /&gt;
&lt;br /&gt;
		widget.classList.add(&#039;soundcloud-player&#039;);&lt;br /&gt;
&lt;br /&gt;
		widget.src =&lt;br /&gt;
			&#039;https://w.soundcloud.com/player/?show_artwork=false&amp;amp;url=&#039; +&lt;br /&gt;
			encodeURI(data.src);&lt;br /&gt;
&lt;br /&gt;
		// If data-color is set add the value to the iframe&lt;br /&gt;
		if (data.color) widget.src += &#039;&amp;amp;color=&#039; + encodeURIComponent(data.color);&lt;br /&gt;
		// If data-width/height are set add that value to the iframe&lt;br /&gt;
		if (data.width) widget.width = data.width;&lt;br /&gt;
		if (data.height) widget.height = data.height;&lt;br /&gt;
&lt;br /&gt;
		return widget;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	const scParseTags = function ($content) {&lt;br /&gt;
		// Get all instances of the soundcloud class&lt;br /&gt;
		const scTags = $content.find(&#039;.soundcloud&#039;);&lt;br /&gt;
&lt;br /&gt;
		// For each instance of the soundcloud class run scPlayer&lt;br /&gt;
		for (var i = 0; i &amp;lt; scTags.length; i++) {&lt;br /&gt;
			scTags[i].replaceWith(scPlayer(scTags[i].dataset));&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	mw.hook(&#039;wikipage.content&#039;).add(function ($content) {&lt;br /&gt;
		scParseTags($content);&lt;br /&gt;
	});&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
https://dev.fandom.com/wiki/MediaWiki:CopyText/code.js&lt;br /&gt;
 */&lt;br /&gt;
(function () {&lt;br /&gt;
    if (window.CopyTextLoaded) {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    window.CopyTextLoaded = true;&lt;br /&gt;
    mw.hook(&#039;dev.i18n&#039;).add(function (i18n) {&lt;br /&gt;
        i18n.loadMessages(&#039;CopyText&#039;).done(function (i18n) {&lt;br /&gt;
            function showSuccess() {&lt;br /&gt;
                if (window.BannerNotification) {&lt;br /&gt;
                    new BannerNotification(i18n.msg(&#039;success&#039;).escape(), &#039;confirm&#039;, null, 5000).show();&lt;br /&gt;
                } else {&lt;br /&gt;
                    mw.notify(i18n.msg(&#039;success&#039;).plain());&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $(&#039;body&#039;).on(&#039;click&#039;, &#039;.copy-to-clipboard-button&#039;, function(e){&lt;br /&gt;
                var text = $(this).data(&#039;text&#039;),&lt;br /&gt;
                $input = $(&#039;&amp;lt;textarea&amp;gt;&#039;, { type: &#039;text&#039; })&lt;br /&gt;
                    .val($(&#039;.copy-to-clipboard-text&#039;).filter(function() {&lt;br /&gt;
                        return $(this).data(&#039;text&#039;) == text;&lt;br /&gt;
                    }).first().text())&lt;br /&gt;
                    .appendTo(&#039;body&#039;)&lt;br /&gt;
                    .select();&lt;br /&gt;
                var success = document.execCommand(&#039;Copy&#039;);&lt;br /&gt;
                $input.remove();&lt;br /&gt;
                if (success) {&lt;br /&gt;
                    showSuccess();&lt;br /&gt;
                } else {&lt;br /&gt;
                    if (window.navigator &amp;amp;&amp;amp; navigator.clipboard &amp;amp;&amp;amp; navigator.clipboard.writeText) {&lt;br /&gt;
                        navigator.clipboard.writeText(text).then(function() {&lt;br /&gt;
                            showSuccess();&lt;br /&gt;
                        });&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/* custom one-time animations */&lt;br /&gt;
(function() {&lt;br /&gt;
	function ensureOnetimeAnimations(elem, callback) {&lt;br /&gt;
	  // 1. Read the applied @keyframes names from the element&#039;s computed CSS&lt;br /&gt;
	  const computedNameString = window.getComputedStyle(elem).animationName;&lt;br /&gt;
	&lt;br /&gt;
	  // 2. Parse the comma-separated string into a clean Set of names&lt;br /&gt;
	  const expectedAnimations = new Set(&lt;br /&gt;
	    computedNameString&lt;br /&gt;
	      .split(&#039;,&#039;)&lt;br /&gt;
	      .map(name =&amp;gt; name.trim())&lt;br /&gt;
	      .filter(name =&amp;gt; name &amp;amp;&amp;amp; name !== &#039;none&#039;)&lt;br /&gt;
	  );&lt;br /&gt;
	&lt;br /&gt;
	  // 3. Edge Case: If no animations are applied, trigger the callback immediately&lt;br /&gt;
	  if (expectedAnimations.size === 0) {&lt;br /&gt;
	    callback();&lt;br /&gt;
	    return;&lt;br /&gt;
	  }&lt;br /&gt;
	&lt;br /&gt;
	  // 4. Handle the completion or cancellation of an animation&lt;br /&gt;
	  function handleAnimationEnd(event) {&lt;br /&gt;
	    // Ensure the event came from this element, not a bubbling event from a child&lt;br /&gt;
	    if (event.target !== elem) return;&lt;br /&gt;
	&lt;br /&gt;
	    if (expectedAnimations.has(event.animationName)) {&lt;br /&gt;
	      expectedAnimations.delete(event.animationName);&lt;br /&gt;
	&lt;br /&gt;
	      // Once the Set is completely empty, clean up and fire the callback&lt;br /&gt;
	      if (expectedAnimations.size === 0) {&lt;br /&gt;
	        cleanupListeners();&lt;br /&gt;
	        elem.classList.add(&amp;quot;inhibit-load-animations&amp;quot;);&lt;br /&gt;
	      }&lt;br /&gt;
	    }&lt;br /&gt;
	  }&lt;br /&gt;
	&lt;br /&gt;
	  // 5. Practical Safety: Clean up listeners so they don&#039;t linger in memory&lt;br /&gt;
	  function cleanupListeners() {&lt;br /&gt;
	    elem.removeEventListener(&#039;animationend&#039;, handleAnimationEnd);&lt;br /&gt;
	    elem.removeEventListener(&#039;animationcancel&#039;, handleAnimationEnd);&lt;br /&gt;
	  }&lt;br /&gt;
	&lt;br /&gt;
	  // 6. Bind to both end and cancel (in case an animation is interrupted)&lt;br /&gt;
	  elem.addEventListener(&#039;animationend&#039;, handleAnimationEnd);&lt;br /&gt;
	  elem.addEventListener(&#039;animationcancel&#039;, handleAnimationEnd);&lt;br /&gt;
	}&lt;br /&gt;
	mw.hook(&#039;wikipage.content&#039;).add(() =&amp;gt; {&lt;br /&gt;
		console.log(&#039;hi&#039;);&lt;br /&gt;
		const onetimeAnimatedElems = document.querySelectorAll(&amp;quot;#mw-content,#mw-site-navigation,#mw-related-navigation&amp;quot;);&lt;br /&gt;
		for (const elem of onetimeAnimatedElems) {&lt;br /&gt;
					console.log(&#039;elem&#039;);&lt;br /&gt;
			ensureOnetimeAnimations(elem);&lt;br /&gt;
		}&lt;br /&gt;
	})&lt;br /&gt;
})()&lt;/div&gt;</summary>
		<author><name>Pynappo</name></author>
	</entry>
	<entry>
		<id>https://nbittrpgwiki.pynappo.xyz/index.php?title=MediaWiki:Common.js&amp;diff=3007</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://nbittrpgwiki.pynappo.xyz/index.php?title=MediaWiki:Common.js&amp;diff=3007"/>
		<updated>2026-09-25T11:28:42Z</updated>

		<summary type="html">&lt;p&gt;Pynappo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/*&lt;br /&gt;
    Template:Spoiler on dev.miraheze.org&lt;br /&gt;
*/&lt;br /&gt;
$(function(){&lt;br /&gt;
    //spoiler block behavior&lt;br /&gt;
	$(&#039;.spoiler&#039;).click(function(){&lt;br /&gt;
		$(this).toggleClass(&#039;off&#039;);&lt;br /&gt;
	});&lt;br /&gt;
	// spoiler button behavior&lt;br /&gt;
    $(&#039;#spoilerbtn&#039;).text(&#039;Show all spoilers&#039;);&lt;br /&gt;
	$(&#039;#spoilerbtn&#039;).click(function(){&lt;br /&gt;
		$(this).toggleClass(&#039;hide&#039;);&lt;br /&gt;
		$(&#039;.spoiler&#039;).toggleClass(&#039;showall&#039;);&lt;br /&gt;
		&lt;br /&gt;
		if ($(this).is(&#039;.hide&#039;)){ $(this).text(&#039;Hide all spoilers&#039;); } &lt;br /&gt;
        else { $(this).text(&#039;Show all spoilers&#039;); }&lt;br /&gt;
	});	&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * TabberEX&lt;br /&gt;
 *&lt;br /&gt;
 * @version 2.3&lt;br /&gt;
 *&lt;br /&gt;
 * @author Jono99 &amp;lt;https://phigros.fandom.com/wiki/User:Jono99&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * documentation and examples at:&lt;br /&gt;
 * &amp;lt;https://dev.fandom.com/wiki/TabberEX&amp;gt;&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
 (function (window, $, mw) {&lt;br /&gt;
	// Function called by tabs to switch tabs&lt;br /&gt;
	window.tabberex_switchTab = function(tabber_id, tab)&lt;br /&gt;
	{&lt;br /&gt;
		tabberex_hideAllTabs(tabber_id);&lt;br /&gt;
		tabberex_showTab(tabber_id, tab);&lt;br /&gt;
	};&lt;br /&gt;
 &lt;br /&gt;
	// Inject CSS&lt;br /&gt;
	(function() {&lt;br /&gt;
		var tabberex_css = document.createElement(&amp;quot;style&amp;quot;);&lt;br /&gt;
		tabberex_css.innerHTML = &amp;quot;/* CSS owned by FANDOM */\n.oo-ui-tabOptionWidget{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;vertical-align:bottom;align-items:center;color:color-mix(in srgb, var(--text-color) 75%, transparent);display:inline-flex;font-size:14px;font-weight:500;height:40px;letter-spacing:.5px;margin:0;padding:0 11px;-webkit-transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s;-moz-transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s;transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s}.oo-ui-tabSelectWidget:not(.oo-ui-tabSelectWidget-framed) .oo-ui-tabOptionWidget{-webkit-transition:color .3s,box-shadow .3s;-moz-transition:color .3s,box-shadow .3s;transition:color .3s,box-shadow .3s;border-bottom:1px solid var(--banner-color)}.oo-ui-tabSelectWidget:not(.oo-ui-tabSelectWidget-framed) .oo-ui-tabOptionWidget.oo-ui-optionWidget-selected{box-shadow:inset 0 -2px 0 0 var(--link-color);color:var(--link-color)}&amp;quot;;&lt;br /&gt;
		document.head.appendChild(tabberex_css);&lt;br /&gt;
	})();&lt;br /&gt;
		&lt;br /&gt;
	window.tabberex_showTab = function(tabber_id, i)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;)&lt;br /&gt;
		.addClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;default&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$($(&amp;quot;.tabberex-body&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;).get()).each(function () {&lt;br /&gt;
            var display_value = $(this).attr(&amp;quot;data-tab-display&amp;quot;);&lt;br /&gt;
            if (display_value === undefined) display_value = &amp;quot;block&amp;quot;;&lt;br /&gt;
            $(this).css(&amp;quot;display&amp;quot;, display_value);&lt;br /&gt;
        });&lt;br /&gt;
	};&lt;br /&gt;
	 &lt;br /&gt;
	window.tabberex_hideTab = function(tabber_id, i)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;)&lt;br /&gt;
		.removeClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$(&amp;quot;.tabberex-body&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;).css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
			&lt;br /&gt;
	window.tabberex_hideAllTabs = function(tabber_id)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children()&lt;br /&gt;
		.removeClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$(&amp;quot;.tabberex-body&amp;quot; + base_selector).children().css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var tabberex_buildTabHead = function(host_div, tabber_id, tab_headers, tab_ex_headers, tab_locations)&lt;br /&gt;
	{&lt;br /&gt;
		var tabber_head = host_div;&lt;br /&gt;
		tabber_head.innerHTML = &amp;quot;&amp;quot;;&lt;br /&gt;
		$(tabber_head).addClass(&amp;quot;tabberex-head oo-ui-widget oo-ui-widget-enabled oo-ui-selectWidget oo-ui-selectWidget-unpressed oo-ui-selectWidget-depressed oo-ui-tabSelectWidget&amp;quot;)&lt;br /&gt;
		.attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
		for (var i = 0; i &amp;lt; tab_headers.length; i++)&lt;br /&gt;
		{&lt;br /&gt;
			console.log(&amp;quot;Building tab &amp;quot; + tabber_id + &amp;quot; &amp;quot; + String(i));&lt;br /&gt;
			var tab = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
			$(tab).addClass(&amp;quot;oo-ui-widget oo-ui-widget-enabled oo-ui-labelElement oo-ui-optionWidget oo-ui-tabOptionWidget&amp;quot;)&lt;br /&gt;
			.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
			if (tab_locations[i] === undefined)&lt;br /&gt;
				$(tab).attr(&amp;quot;onclick&amp;quot;, &amp;quot;tabberex_switchTab(\&amp;quot;&amp;quot; + mw.html.escape(tabber_id) + &amp;quot;\&amp;quot;, &amp;quot; + (i + 1) + &amp;quot;)&amp;quot;);&lt;br /&gt;
			else&lt;br /&gt;
				$(tab).attr(&amp;quot;onclick&amp;quot;, &amp;quot;location = \&amp;quot;&amp;quot; + mw.html.escape(tab_locations[i]) + &amp;quot;\&amp;quot;&amp;quot;);&lt;br /&gt;
			var tab_span = document.createElement(&amp;quot;span&amp;quot;);&lt;br /&gt;
			$(tab_span).addClass(&amp;quot;oo-ui-labelElement-label&amp;quot;);&lt;br /&gt;
			if (tab_ex_headers[i] === undefined)&lt;br /&gt;
				$(tab_span).text(tab_headers[i]);&lt;br /&gt;
			else&lt;br /&gt;
			{&lt;br /&gt;
				console.log(&amp;quot;EX Header present&amp;quot;);&lt;br /&gt;
				for (var attr in tab_ex_headers[i][1])&lt;br /&gt;
					tab_span.setAttribute(attr, tab_ex_headers[i][1][attr]);&lt;br /&gt;
				$(tab_span).html(tab_ex_headers[i][0]);&lt;br /&gt;
			}&lt;br /&gt;
			tab.appendChild(tab_span);&lt;br /&gt;
			tabber_head.appendChild(tab);&lt;br /&gt;
			console.log(&amp;quot;Successfully built tab&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		return tabber_head.outerHTML;&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var process_tabber_head_tab = function(tab_element, i)&lt;br /&gt;
	{&lt;br /&gt;
		// Get header&lt;br /&gt;
		var header = $(tab_element).attr(&amp;quot;data-tab-header&amp;quot;);&lt;br /&gt;
		if (header === undefined) header = i + 1;&lt;br /&gt;
		&lt;br /&gt;
		// Get ex header&lt;br /&gt;
		var ex_header;&lt;br /&gt;
		function get_ex_header(_) {&lt;br /&gt;
			console.log(&#039;EX Header found&#039;);&lt;br /&gt;
			var attributes = {};&lt;br /&gt;
			var attrs = this.getAttributeNames();&lt;br /&gt;
			for (var i in attrs)&lt;br /&gt;
				attributes[attrs[i]] = this.getAttribute(attrs[i]);&lt;br /&gt;
			ex_header = [$(this).html(), attributes];&lt;br /&gt;
			$(this).remove();&lt;br /&gt;
		}&lt;br /&gt;
		$(tab_element).children(&amp;quot;p&amp;quot;).children(&amp;quot;span.tabberex-tab-header&amp;quot;).each(get_ex_header);&lt;br /&gt;
		$(tab_element).children(&amp;quot;span.tabberex-tab-header&amp;quot;).each(get_ex_header);&lt;br /&gt;
		&lt;br /&gt;
		// Get default&lt;br /&gt;
		var is_default = false;&lt;br /&gt;
		if ($(tab_element).hasClass(&amp;quot;tabberex-tab-default&amp;quot;))&lt;br /&gt;
			is_default = true;&lt;br /&gt;
		&lt;br /&gt;
		// Get tab location&lt;br /&gt;
		var tab_location = $(this).attr(&amp;quot;data-tab-location&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		return {&amp;quot;header&amp;quot;: header, &amp;quot;ex_header&amp;quot;: ex_header, &amp;quot;default&amp;quot;: is_default, &amp;quot;location&amp;quot;: tab_location};&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var process_tabbers = function()&lt;br /&gt;
	{&lt;br /&gt;
		console.log(&#039;TabberEX started&#039;);&lt;br /&gt;
		var tabber_i = 0;&lt;br /&gt;
		var default_tabs = {};&lt;br /&gt;
		var tabber_ids = [];&lt;br /&gt;
		// The tabs are iterated through backwards to properly handle tabbers that are nested within other tabbers&lt;br /&gt;
		$($(&amp;quot;.tabberex-head&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			var tab_headers = [];&lt;br /&gt;
			var tab_ex_headers = [];&lt;br /&gt;
			var tab_locations = [];&lt;br /&gt;
			var default_tab = 0;&lt;br /&gt;
				&lt;br /&gt;
			var tabber_id = $(this).attr(&amp;quot;data-tabber-id&amp;quot;);&lt;br /&gt;
			if (tabber_id === undefined) tabber_id = String(tabber_i);&lt;br /&gt;
				&lt;br /&gt;
			$(this).children(&amp;quot;.tabberex-tab&amp;quot;).each(function(i) {&lt;br /&gt;
				console.log(&#039;Processing head tab &#039; + tabber_id + &#039; &#039; + String(i));&lt;br /&gt;
				var tab_details = process_tabber_head_tab(this, i);&lt;br /&gt;
				console.log(&#039;Processing complete&#039;);&lt;br /&gt;
				tab_headers[i] = tab_details.header;&lt;br /&gt;
				tab_ex_headers[i] = tab_details.ex_header;&lt;br /&gt;
				if (tab_details.default)&lt;br /&gt;
					default_tab = i;&lt;br /&gt;
				tab_locations[i] = tab_details.location;&lt;br /&gt;
				$(this).detach();&lt;br /&gt;
			});&lt;br /&gt;
			&lt;br /&gt;
			// Insert tabs into DOM&lt;br /&gt;
			tabberex_buildTabHead(this, tabber_id, tab_headers, tab_ex_headers, tab_locations);&lt;br /&gt;
			if (default_tabs[tabber_id] === undefined)&lt;br /&gt;
				default_tabs[tabber_id] = default_tab;&lt;br /&gt;
			tabber_ids.push(tabber_id);&lt;br /&gt;
			tabber_i++;&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		$($(&amp;quot;.tabberex-body&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			$(this).children().css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		$($(&amp;quot;.tabberex&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			var tab_headers = [];&lt;br /&gt;
			var tab_ex_headers = [];&lt;br /&gt;
			var tab_locations = [];&lt;br /&gt;
			var default_tab = 0;&lt;br /&gt;
			var tab_contents = [];&lt;br /&gt;
			&lt;br /&gt;
			var tabber_id = $(this).attr(&amp;quot;data-tabber-id&amp;quot;);&lt;br /&gt;
			if (tabber_id === undefined) tabber_id = String(tabber_i);&lt;br /&gt;
            $(this).attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
&lt;br /&gt;
            var tabber_head = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
            $(tabber_head).addClass(&amp;quot;tabberex-head&amp;quot;).attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
            $(this).removeClass(&amp;quot;tabberex&amp;quot;).addClass(&amp;quot;tabberex-body&amp;quot;);&lt;br /&gt;
			&lt;br /&gt;
			$(this).children(&amp;quot;.tabberex-tab&amp;quot;).each(function(i) {&lt;br /&gt;
				console.log(&#039;Processing head tab &#039; + tabber_id + &#039; &#039; + String(i));&lt;br /&gt;
				var tab_details = process_tabber_head_tab(this, i);&lt;br /&gt;
				console.log(&#039;Processing complete&#039;);&lt;br /&gt;
				tab_headers[i] = tab_details.header;&lt;br /&gt;
				tab_ex_headers[i] = tab_details.ex_header;&lt;br /&gt;
				if (tab_details.default)&lt;br /&gt;
					default_tab = i;&lt;br /&gt;
				tab_locations[i] = tab_details.location;&lt;br /&gt;
				&lt;br /&gt;
				// Get tab content&lt;br /&gt;
				$(this).css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
				tab_contents[i] = $(this);&lt;br /&gt;
			});&lt;br /&gt;
&lt;br /&gt;
            tabberex_buildTabHead(tabber_head, tabber_id, tab_headers, tab_ex_headers, tab_locations);&lt;br /&gt;
			if (default_tabs[tabber_id] === undefined)&lt;br /&gt;
				default_tabs[tabber_id] = default_tab;&lt;br /&gt;
            $(tabber_head).insertBefore(this);&lt;br /&gt;
			tabber_ids.push(tabber_id);&lt;br /&gt;
			tabber_i++;&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		// Select default tabs&lt;br /&gt;
		for (var i in tabber_ids)&lt;br /&gt;
		{&lt;br /&gt;
			tabberex_showTab(tabber_ids[i], default_tabs[tabber_ids[i]] + 1);&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
 &lt;br /&gt;
	mw.hook(&amp;quot;wikipage.content&amp;quot;).add(process_tabbers);&lt;br /&gt;
}(this, jQuery, mediaWiki));&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * @title           SoundcloudPlayer.js&lt;br /&gt;
 * @version         1.1.2&lt;br /&gt;
 * @description     Add support for soundcloud players&lt;br /&gt;
 * @author          Himmalerin&lt;br /&gt;
 * @license         CC-BY-SA-3.0&lt;br /&gt;
 */&lt;br /&gt;
(function () {&lt;br /&gt;
	// Build the iframe&lt;br /&gt;
	const scPlayer = function (data) {&lt;br /&gt;
		const widget = document.createElement(&#039;iframe&#039;);&lt;br /&gt;
&lt;br /&gt;
		widget.classList.add(&#039;soundcloud-player&#039;);&lt;br /&gt;
&lt;br /&gt;
		widget.src =&lt;br /&gt;
			&#039;https://w.soundcloud.com/player/?show_artwork=false&amp;amp;url=&#039; +&lt;br /&gt;
			encodeURI(data.src);&lt;br /&gt;
&lt;br /&gt;
		// If data-color is set add the value to the iframe&lt;br /&gt;
		if (data.color) widget.src += &#039;&amp;amp;color=&#039; + encodeURIComponent(data.color);&lt;br /&gt;
		// If data-width/height are set add that value to the iframe&lt;br /&gt;
		if (data.width) widget.width = data.width;&lt;br /&gt;
		if (data.height) widget.height = data.height;&lt;br /&gt;
&lt;br /&gt;
		return widget;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	const scParseTags = function ($content) {&lt;br /&gt;
		// Get all instances of the soundcloud class&lt;br /&gt;
		const scTags = $content.find(&#039;.soundcloud&#039;);&lt;br /&gt;
&lt;br /&gt;
		// For each instance of the soundcloud class run scPlayer&lt;br /&gt;
		for (var i = 0; i &amp;lt; scTags.length; i++) {&lt;br /&gt;
			scTags[i].replaceWith(scPlayer(scTags[i].dataset));&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	mw.hook(&#039;wikipage.content&#039;).add(function ($content) {&lt;br /&gt;
		scParseTags($content);&lt;br /&gt;
	});&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
https://dev.fandom.com/wiki/MediaWiki:CopyText/code.js&lt;br /&gt;
 */&lt;br /&gt;
(function () {&lt;br /&gt;
    if (window.CopyTextLoaded) {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    window.CopyTextLoaded = true;&lt;br /&gt;
    mw.hook(&#039;dev.i18n&#039;).add(function (i18n) {&lt;br /&gt;
        i18n.loadMessages(&#039;CopyText&#039;).done(function (i18n) {&lt;br /&gt;
            function showSuccess() {&lt;br /&gt;
                if (window.BannerNotification) {&lt;br /&gt;
                    new BannerNotification(i18n.msg(&#039;success&#039;).escape(), &#039;confirm&#039;, null, 5000).show();&lt;br /&gt;
                } else {&lt;br /&gt;
                    mw.notify(i18n.msg(&#039;success&#039;).plain());&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $(&#039;body&#039;).on(&#039;click&#039;, &#039;.copy-to-clipboard-button&#039;, function(e){&lt;br /&gt;
                var text = $(this).data(&#039;text&#039;),&lt;br /&gt;
                $input = $(&#039;&amp;lt;textarea&amp;gt;&#039;, { type: &#039;text&#039; })&lt;br /&gt;
                    .val($(&#039;.copy-to-clipboard-text&#039;).filter(function() {&lt;br /&gt;
                        return $(this).data(&#039;text&#039;) == text;&lt;br /&gt;
                    }).first().text())&lt;br /&gt;
                    .appendTo(&#039;body&#039;)&lt;br /&gt;
                    .select();&lt;br /&gt;
                var success = document.execCommand(&#039;Copy&#039;);&lt;br /&gt;
                $input.remove();&lt;br /&gt;
                if (success) {&lt;br /&gt;
                    showSuccess();&lt;br /&gt;
                } else {&lt;br /&gt;
                    if (window.navigator &amp;amp;&amp;amp; navigator.clipboard &amp;amp;&amp;amp; navigator.clipboard.writeText) {&lt;br /&gt;
                        navigator.clipboard.writeText(text).then(function() {&lt;br /&gt;
                            showSuccess();&lt;br /&gt;
                        });&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
    importArticle({&lt;br /&gt;
        type: &#039;script&#039;,&lt;br /&gt;
        article: &#039;u:dev:MediaWiki:I18n-js/code.js&#039;&lt;br /&gt;
    });&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/* custom one-time animations */&lt;br /&gt;
(function() {&lt;br /&gt;
	function ensureOnetimeAnimations(elem, callback) {&lt;br /&gt;
	  // 1. Read the applied @keyframes names from the element&#039;s computed CSS&lt;br /&gt;
	  const computedNameString = window.getComputedStyle(elem).animationName;&lt;br /&gt;
	&lt;br /&gt;
	  // 2. Parse the comma-separated string into a clean Set of names&lt;br /&gt;
	  const expectedAnimations = new Set(&lt;br /&gt;
	    computedNameString&lt;br /&gt;
	      .split(&#039;,&#039;)&lt;br /&gt;
	      .map(name =&amp;gt; name.trim())&lt;br /&gt;
	      .filter(name =&amp;gt; name &amp;amp;&amp;amp; name !== &#039;none&#039;)&lt;br /&gt;
	  );&lt;br /&gt;
	&lt;br /&gt;
	  // 3. Edge Case: If no animations are applied, trigger the callback immediately&lt;br /&gt;
	  if (expectedAnimations.size === 0) {&lt;br /&gt;
	    callback();&lt;br /&gt;
	    return;&lt;br /&gt;
	  }&lt;br /&gt;
	&lt;br /&gt;
	  // 4. Handle the completion or cancellation of an animation&lt;br /&gt;
	  function handleAnimationEnd(event) {&lt;br /&gt;
	    // Ensure the event came from this element, not a bubbling event from a child&lt;br /&gt;
	    if (event.target !== elem) return;&lt;br /&gt;
	&lt;br /&gt;
	    if (expectedAnimations.has(event.animationName)) {&lt;br /&gt;
	      expectedAnimations.delete(event.animationName);&lt;br /&gt;
	&lt;br /&gt;
	      // Once the Set is completely empty, clean up and fire the callback&lt;br /&gt;
	      if (expectedAnimations.size === 0) {&lt;br /&gt;
	        cleanupListeners();&lt;br /&gt;
	        elem.classList.add(&amp;quot;inhibit-load-animations&amp;quot;);&lt;br /&gt;
	      }&lt;br /&gt;
	    }&lt;br /&gt;
	  }&lt;br /&gt;
	&lt;br /&gt;
	  // 5. Practical Safety: Clean up listeners so they don&#039;t linger in memory&lt;br /&gt;
	  function cleanupListeners() {&lt;br /&gt;
	    elem.removeEventListener(&#039;animationend&#039;, handleAnimationEnd);&lt;br /&gt;
	    elem.removeEventListener(&#039;animationcancel&#039;, handleAnimationEnd);&lt;br /&gt;
	  }&lt;br /&gt;
	&lt;br /&gt;
	  // 6. Bind to both end and cancel (in case an animation is interrupted)&lt;br /&gt;
	  elem.addEventListener(&#039;animationend&#039;, handleAnimationEnd);&lt;br /&gt;
	  elem.addEventListener(&#039;animationcancel&#039;, handleAnimationEnd);&lt;br /&gt;
	}&lt;br /&gt;
	mw.hook(&#039;wikipage.content&#039;).add(() =&amp;gt; {&lt;br /&gt;
		console.log(&#039;hi&#039;);&lt;br /&gt;
		const onetimeAnimatedElems = document.querySelectorAll(&amp;quot;#mw-content,#mw-site-navigation,#mw-related-navigation&amp;quot;);&lt;br /&gt;
		for (const elem of onetimeAnimatedElems) {&lt;br /&gt;
					console.log(&#039;elem&#039;);&lt;br /&gt;
			ensureOnetimeAnimations(elem);&lt;br /&gt;
		}&lt;br /&gt;
	})&lt;br /&gt;
})()&lt;/div&gt;</summary>
		<author><name>Pynappo</name></author>
	</entry>
	<entry>
		<id>https://nbittrpgwiki.pynappo.xyz/index.php?title=MediaWiki:Common.js&amp;diff=3006</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://nbittrpgwiki.pynappo.xyz/index.php?title=MediaWiki:Common.js&amp;diff=3006"/>
		<updated>2026-09-25T11:27:32Z</updated>

		<summary type="html">&lt;p&gt;Pynappo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/*&lt;br /&gt;
    Template:Spoiler on dev.miraheze.org&lt;br /&gt;
*/&lt;br /&gt;
$(function(){&lt;br /&gt;
    //spoiler block behavior&lt;br /&gt;
	$(&#039;.spoiler&#039;).click(function(){&lt;br /&gt;
		$(this).toggleClass(&#039;off&#039;);&lt;br /&gt;
	});&lt;br /&gt;
	// spoiler button behavior&lt;br /&gt;
    $(&#039;#spoilerbtn&#039;).text(&#039;Show all spoilers&#039;);&lt;br /&gt;
	$(&#039;#spoilerbtn&#039;).click(function(){&lt;br /&gt;
		$(this).toggleClass(&#039;hide&#039;);&lt;br /&gt;
		$(&#039;.spoiler&#039;).toggleClass(&#039;showall&#039;);&lt;br /&gt;
		&lt;br /&gt;
		if ($(this).is(&#039;.hide&#039;)){ $(this).text(&#039;Hide all spoilers&#039;); } &lt;br /&gt;
        else { $(this).text(&#039;Show all spoilers&#039;); }&lt;br /&gt;
	});	&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * TabberEX&lt;br /&gt;
 *&lt;br /&gt;
 * @version 2.3&lt;br /&gt;
 *&lt;br /&gt;
 * @author Jono99 &amp;lt;https://phigros.fandom.com/wiki/User:Jono99&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * documentation and examples at:&lt;br /&gt;
 * &amp;lt;https://dev.fandom.com/wiki/TabberEX&amp;gt;&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
 (function (window, $, mw) {&lt;br /&gt;
	// Function called by tabs to switch tabs&lt;br /&gt;
	window.tabberex_switchTab = function(tabber_id, tab)&lt;br /&gt;
	{&lt;br /&gt;
		tabberex_hideAllTabs(tabber_id);&lt;br /&gt;
		tabberex_showTab(tabber_id, tab);&lt;br /&gt;
	};&lt;br /&gt;
 &lt;br /&gt;
	// Inject CSS&lt;br /&gt;
	(function() {&lt;br /&gt;
		var tabberex_css = document.createElement(&amp;quot;style&amp;quot;);&lt;br /&gt;
		tabberex_css.innerHTML = &amp;quot;/* CSS owned by FANDOM */\n.oo-ui-tabOptionWidget{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;vertical-align:bottom;align-items:center;color:color-mix(in srgb, var(--text-color) 75%, transparent);display:inline-flex;font-size:14px;font-weight:500;height:40px;letter-spacing:.5px;margin:0;padding:0 11px;-webkit-transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s;-moz-transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s;transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s}.oo-ui-tabSelectWidget:not(.oo-ui-tabSelectWidget-framed) .oo-ui-tabOptionWidget{-webkit-transition:color .3s,box-shadow .3s;-moz-transition:color .3s,box-shadow .3s;transition:color .3s,box-shadow .3s;border-bottom:1px solid var(--banner-color)}.oo-ui-tabSelectWidget:not(.oo-ui-tabSelectWidget-framed) .oo-ui-tabOptionWidget.oo-ui-optionWidget-selected{box-shadow:inset 0 -2px 0 0 var(--link-color);color:var(--link-color)}&amp;quot;;&lt;br /&gt;
		document.head.appendChild(tabberex_css);&lt;br /&gt;
	})();&lt;br /&gt;
		&lt;br /&gt;
	window.tabberex_showTab = function(tabber_id, i)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;)&lt;br /&gt;
		.addClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;default&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$($(&amp;quot;.tabberex-body&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;).get()).each(function () {&lt;br /&gt;
            var display_value = $(this).attr(&amp;quot;data-tab-display&amp;quot;);&lt;br /&gt;
            if (display_value === undefined) display_value = &amp;quot;block&amp;quot;;&lt;br /&gt;
            $(this).css(&amp;quot;display&amp;quot;, display_value);&lt;br /&gt;
        });&lt;br /&gt;
	};&lt;br /&gt;
	 &lt;br /&gt;
	window.tabberex_hideTab = function(tabber_id, i)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;)&lt;br /&gt;
		.removeClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$(&amp;quot;.tabberex-body&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;).css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
			&lt;br /&gt;
	window.tabberex_hideAllTabs = function(tabber_id)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children()&lt;br /&gt;
		.removeClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$(&amp;quot;.tabberex-body&amp;quot; + base_selector).children().css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var tabberex_buildTabHead = function(host_div, tabber_id, tab_headers, tab_ex_headers, tab_locations)&lt;br /&gt;
	{&lt;br /&gt;
		var tabber_head = host_div;&lt;br /&gt;
		tabber_head.innerHTML = &amp;quot;&amp;quot;;&lt;br /&gt;
		$(tabber_head).addClass(&amp;quot;tabberex-head oo-ui-widget oo-ui-widget-enabled oo-ui-selectWidget oo-ui-selectWidget-unpressed oo-ui-selectWidget-depressed oo-ui-tabSelectWidget&amp;quot;)&lt;br /&gt;
		.attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
		for (var i = 0; i &amp;lt; tab_headers.length; i++)&lt;br /&gt;
		{&lt;br /&gt;
			console.log(&amp;quot;Building tab &amp;quot; + tabber_id + &amp;quot; &amp;quot; + String(i));&lt;br /&gt;
			var tab = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
			$(tab).addClass(&amp;quot;oo-ui-widget oo-ui-widget-enabled oo-ui-labelElement oo-ui-optionWidget oo-ui-tabOptionWidget&amp;quot;)&lt;br /&gt;
			.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
			if (tab_locations[i] === undefined)&lt;br /&gt;
				$(tab).attr(&amp;quot;onclick&amp;quot;, &amp;quot;tabberex_switchTab(\&amp;quot;&amp;quot; + mw.html.escape(tabber_id) + &amp;quot;\&amp;quot;, &amp;quot; + (i + 1) + &amp;quot;)&amp;quot;);&lt;br /&gt;
			else&lt;br /&gt;
				$(tab).attr(&amp;quot;onclick&amp;quot;, &amp;quot;location = \&amp;quot;&amp;quot; + mw.html.escape(tab_locations[i]) + &amp;quot;\&amp;quot;&amp;quot;);&lt;br /&gt;
			var tab_span = document.createElement(&amp;quot;span&amp;quot;);&lt;br /&gt;
			$(tab_span).addClass(&amp;quot;oo-ui-labelElement-label&amp;quot;);&lt;br /&gt;
			if (tab_ex_headers[i] === undefined)&lt;br /&gt;
				$(tab_span).text(tab_headers[i]);&lt;br /&gt;
			else&lt;br /&gt;
			{&lt;br /&gt;
				console.log(&amp;quot;EX Header present&amp;quot;);&lt;br /&gt;
				for (var attr in tab_ex_headers[i][1])&lt;br /&gt;
					tab_span.setAttribute(attr, tab_ex_headers[i][1][attr]);&lt;br /&gt;
				$(tab_span).html(tab_ex_headers[i][0]);&lt;br /&gt;
			}&lt;br /&gt;
			tab.appendChild(tab_span);&lt;br /&gt;
			tabber_head.appendChild(tab);&lt;br /&gt;
			console.log(&amp;quot;Successfully built tab&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		return tabber_head.outerHTML;&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var process_tabber_head_tab = function(tab_element, i)&lt;br /&gt;
	{&lt;br /&gt;
		// Get header&lt;br /&gt;
		var header = $(tab_element).attr(&amp;quot;data-tab-header&amp;quot;);&lt;br /&gt;
		if (header === undefined) header = i + 1;&lt;br /&gt;
		&lt;br /&gt;
		// Get ex header&lt;br /&gt;
		var ex_header;&lt;br /&gt;
		function get_ex_header(_) {&lt;br /&gt;
			console.log(&#039;EX Header found&#039;);&lt;br /&gt;
			var attributes = {};&lt;br /&gt;
			var attrs = this.getAttributeNames();&lt;br /&gt;
			for (var i in attrs)&lt;br /&gt;
				attributes[attrs[i]] = this.getAttribute(attrs[i]);&lt;br /&gt;
			ex_header = [$(this).html(), attributes];&lt;br /&gt;
			$(this).remove();&lt;br /&gt;
		}&lt;br /&gt;
		$(tab_element).children(&amp;quot;p&amp;quot;).children(&amp;quot;span.tabberex-tab-header&amp;quot;).each(get_ex_header);&lt;br /&gt;
		$(tab_element).children(&amp;quot;span.tabberex-tab-header&amp;quot;).each(get_ex_header);&lt;br /&gt;
		&lt;br /&gt;
		// Get default&lt;br /&gt;
		var is_default = false;&lt;br /&gt;
		if ($(tab_element).hasClass(&amp;quot;tabberex-tab-default&amp;quot;))&lt;br /&gt;
			is_default = true;&lt;br /&gt;
		&lt;br /&gt;
		// Get tab location&lt;br /&gt;
		var tab_location = $(this).attr(&amp;quot;data-tab-location&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		return {&amp;quot;header&amp;quot;: header, &amp;quot;ex_header&amp;quot;: ex_header, &amp;quot;default&amp;quot;: is_default, &amp;quot;location&amp;quot;: tab_location};&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var process_tabbers = function()&lt;br /&gt;
	{&lt;br /&gt;
		console.log(&#039;TabberEX started&#039;);&lt;br /&gt;
		var tabber_i = 0;&lt;br /&gt;
		var default_tabs = {};&lt;br /&gt;
		var tabber_ids = [];&lt;br /&gt;
		// The tabs are iterated through backwards to properly handle tabbers that are nested within other tabbers&lt;br /&gt;
		$($(&amp;quot;.tabberex-head&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			var tab_headers = [];&lt;br /&gt;
			var tab_ex_headers = [];&lt;br /&gt;
			var tab_locations = [];&lt;br /&gt;
			var default_tab = 0;&lt;br /&gt;
				&lt;br /&gt;
			var tabber_id = $(this).attr(&amp;quot;data-tabber-id&amp;quot;);&lt;br /&gt;
			if (tabber_id === undefined) tabber_id = String(tabber_i);&lt;br /&gt;
				&lt;br /&gt;
			$(this).children(&amp;quot;.tabberex-tab&amp;quot;).each(function(i) {&lt;br /&gt;
				console.log(&#039;Processing head tab &#039; + tabber_id + &#039; &#039; + String(i));&lt;br /&gt;
				var tab_details = process_tabber_head_tab(this, i);&lt;br /&gt;
				console.log(&#039;Processing complete&#039;);&lt;br /&gt;
				tab_headers[i] = tab_details.header;&lt;br /&gt;
				tab_ex_headers[i] = tab_details.ex_header;&lt;br /&gt;
				if (tab_details.default)&lt;br /&gt;
					default_tab = i;&lt;br /&gt;
				tab_locations[i] = tab_details.location;&lt;br /&gt;
				$(this).detach();&lt;br /&gt;
			});&lt;br /&gt;
			&lt;br /&gt;
			// Insert tabs into DOM&lt;br /&gt;
			tabberex_buildTabHead(this, tabber_id, tab_headers, tab_ex_headers, tab_locations);&lt;br /&gt;
			if (default_tabs[tabber_id] === undefined)&lt;br /&gt;
				default_tabs[tabber_id] = default_tab;&lt;br /&gt;
			tabber_ids.push(tabber_id);&lt;br /&gt;
			tabber_i++;&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		$($(&amp;quot;.tabberex-body&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			$(this).children().css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		$($(&amp;quot;.tabberex&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			var tab_headers = [];&lt;br /&gt;
			var tab_ex_headers = [];&lt;br /&gt;
			var tab_locations = [];&lt;br /&gt;
			var default_tab = 0;&lt;br /&gt;
			var tab_contents = [];&lt;br /&gt;
			&lt;br /&gt;
			var tabber_id = $(this).attr(&amp;quot;data-tabber-id&amp;quot;);&lt;br /&gt;
			if (tabber_id === undefined) tabber_id = String(tabber_i);&lt;br /&gt;
            $(this).attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
&lt;br /&gt;
            var tabber_head = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
            $(tabber_head).addClass(&amp;quot;tabberex-head&amp;quot;).attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
            $(this).removeClass(&amp;quot;tabberex&amp;quot;).addClass(&amp;quot;tabberex-body&amp;quot;);&lt;br /&gt;
			&lt;br /&gt;
			$(this).children(&amp;quot;.tabberex-tab&amp;quot;).each(function(i) {&lt;br /&gt;
				console.log(&#039;Processing head tab &#039; + tabber_id + &#039; &#039; + String(i));&lt;br /&gt;
				var tab_details = process_tabber_head_tab(this, i);&lt;br /&gt;
				console.log(&#039;Processing complete&#039;);&lt;br /&gt;
				tab_headers[i] = tab_details.header;&lt;br /&gt;
				tab_ex_headers[i] = tab_details.ex_header;&lt;br /&gt;
				if (tab_details.default)&lt;br /&gt;
					default_tab = i;&lt;br /&gt;
				tab_locations[i] = tab_details.location;&lt;br /&gt;
				&lt;br /&gt;
				// Get tab content&lt;br /&gt;
				$(this).css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
				tab_contents[i] = $(this);&lt;br /&gt;
			});&lt;br /&gt;
&lt;br /&gt;
            tabberex_buildTabHead(tabber_head, tabber_id, tab_headers, tab_ex_headers, tab_locations);&lt;br /&gt;
			if (default_tabs[tabber_id] === undefined)&lt;br /&gt;
				default_tabs[tabber_id] = default_tab;&lt;br /&gt;
            $(tabber_head).insertBefore(this);&lt;br /&gt;
			tabber_ids.push(tabber_id);&lt;br /&gt;
			tabber_i++;&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		// Select default tabs&lt;br /&gt;
		for (var i in tabber_ids)&lt;br /&gt;
		{&lt;br /&gt;
			tabberex_showTab(tabber_ids[i], default_tabs[tabber_ids[i]] + 1);&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
 &lt;br /&gt;
	mw.hook(&amp;quot;wikipage.content&amp;quot;).add(process_tabbers);&lt;br /&gt;
}(this, jQuery, mediaWiki));&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * @title           SoundcloudPlayer.js&lt;br /&gt;
 * @version         1.1.2&lt;br /&gt;
 * @description     Add support for soundcloud players&lt;br /&gt;
 * @author          Himmalerin&lt;br /&gt;
 * @license         CC-BY-SA-3.0&lt;br /&gt;
 */&lt;br /&gt;
(function () {&lt;br /&gt;
	// Build the iframe&lt;br /&gt;
	const scPlayer = function (data) {&lt;br /&gt;
		const widget = document.createElement(&#039;iframe&#039;);&lt;br /&gt;
&lt;br /&gt;
		widget.classList.add(&#039;soundcloud-player&#039;);&lt;br /&gt;
&lt;br /&gt;
		widget.src =&lt;br /&gt;
			&#039;https://w.soundcloud.com/player/?show_artwork=false&amp;amp;url=&#039; +&lt;br /&gt;
			encodeURI(data.src);&lt;br /&gt;
&lt;br /&gt;
		// If data-color is set add the value to the iframe&lt;br /&gt;
		if (data.color) widget.src += &#039;&amp;amp;color=&#039; + encodeURIComponent(data.color);&lt;br /&gt;
		// If data-width/height are set add that value to the iframe&lt;br /&gt;
		if (data.width) widget.width = data.width;&lt;br /&gt;
		if (data.height) widget.height = data.height;&lt;br /&gt;
&lt;br /&gt;
		return widget;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	const scParseTags = function ($content) {&lt;br /&gt;
		// Get all instances of the soundcloud class&lt;br /&gt;
		const scTags = $content.find(&#039;.soundcloud&#039;);&lt;br /&gt;
&lt;br /&gt;
		// For each instance of the soundcloud class run scPlayer&lt;br /&gt;
		for (var i = 0; i &amp;lt; scTags.length; i++) {&lt;br /&gt;
			scTags[i].replaceWith(scPlayer(scTags[i].dataset));&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	mw.hook(&#039;wikipage.content&#039;).add(function ($content) {&lt;br /&gt;
		scParseTags($content);&lt;br /&gt;
	});&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
https://dev.fandom.com/wiki/MediaWiki:CopyText/code.js&lt;br /&gt;
 */&lt;br /&gt;
(function () {&lt;br /&gt;
    if (window.CopyTextLoaded) {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    window.CopyTextLoaded = true;&lt;br /&gt;
    mw.hook(&#039;dev.i18n&#039;).add(function (i18n) {&lt;br /&gt;
        i18n.loadMessages(&#039;CopyText&#039;).done(function (i18n) {&lt;br /&gt;
            function showSuccess() {&lt;br /&gt;
                if (window.BannerNotification) {&lt;br /&gt;
                    new BannerNotification(i18n.msg(&#039;success&#039;).escape(), &#039;confirm&#039;, null, 5000).show();&lt;br /&gt;
                } else {&lt;br /&gt;
                    mw.notify(i18n.msg(&#039;success&#039;).plain());&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $(&#039;body&#039;).on(&#039;click&#039;, &#039;.copy-to-clipboard-button&#039;, function(e){&lt;br /&gt;
                var text = $(this).data(&#039;text&#039;),&lt;br /&gt;
                $input = $(&#039;&amp;lt;textarea&amp;gt;&#039;, { type: &#039;text&#039; })&lt;br /&gt;
                    .val($(&#039;.copy-to-clipboard-text&#039;).filter(function() {&lt;br /&gt;
                        return $(this).data(&#039;text&#039;) == text;&lt;br /&gt;
                    }).first().text())&lt;br /&gt;
                    .appendTo(&#039;body&#039;)&lt;br /&gt;
                    .select();&lt;br /&gt;
                var success = document.execCommand(&#039;Copy&#039;);&lt;br /&gt;
                $input.remove();&lt;br /&gt;
                if (success) {&lt;br /&gt;
                    showSuccess();&lt;br /&gt;
                } else {&lt;br /&gt;
                    if (window.navigator &amp;amp;&amp;amp; navigator.clipboard &amp;amp;&amp;amp; navigator.clipboard.writeText) {&lt;br /&gt;
                        navigator.clipboard.writeText(text).then(function() {&lt;br /&gt;
                            showSuccess();&lt;br /&gt;
                        });&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
    importArticle({&lt;br /&gt;
        type: &#039;script&#039;,&lt;br /&gt;
        article: &#039;u:dev:MediaWiki:I18n-js/code.js&#039;&lt;br /&gt;
    });&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/* custom one-time animations */&lt;br /&gt;
(function() {&lt;br /&gt;
	function ensureOnetimeAnimations(elem, callback) {&lt;br /&gt;
	  // 1. Read the applied @keyframes names from the element&#039;s computed CSS&lt;br /&gt;
	  const computedNameString = window.getComputedStyle(elem).animationName;&lt;br /&gt;
	&lt;br /&gt;
	  // 2. Parse the comma-separated string into a clean Set of names&lt;br /&gt;
	  const expectedAnimations = new Set(&lt;br /&gt;
	    computedNameString&lt;br /&gt;
	      .split(&#039;,&#039;)&lt;br /&gt;
	      .map(name =&amp;gt; name.trim())&lt;br /&gt;
	      .filter(name =&amp;gt; name &amp;amp;&amp;amp; name !== &#039;none&#039;)&lt;br /&gt;
	  );&lt;br /&gt;
	&lt;br /&gt;
	  // 3. Edge Case: If no animations are applied, trigger the callback immediately&lt;br /&gt;
	  if (expectedAnimations.size === 0) {&lt;br /&gt;
	    callback();&lt;br /&gt;
	    return;&lt;br /&gt;
	  }&lt;br /&gt;
	&lt;br /&gt;
	  // 4. Handle the completion or cancellation of an animation&lt;br /&gt;
	  function handleAnimationEnd(event) {&lt;br /&gt;
	    // Ensure the event came from this element, not a bubbling event from a child&lt;br /&gt;
	    if (event.target !== elem) return;&lt;br /&gt;
	&lt;br /&gt;
	    if (expectedAnimations.has(event.animationName)) {&lt;br /&gt;
	      expectedAnimations.delete(event.animationName);&lt;br /&gt;
	&lt;br /&gt;
	      // Once the Set is completely empty, clean up and fire the callback&lt;br /&gt;
	      if (expectedAnimations.size === 0) {&lt;br /&gt;
	        cleanupListeners();&lt;br /&gt;
	        elem.classList.add(&amp;quot;inhibit-load-animations&amp;quot;);&lt;br /&gt;
	      }&lt;br /&gt;
	    }&lt;br /&gt;
	  }&lt;br /&gt;
	&lt;br /&gt;
	  // 5. Practical Safety: Clean up listeners so they don&#039;t linger in memory&lt;br /&gt;
	  function cleanupListeners() {&lt;br /&gt;
	    elem.removeEventListener(&#039;animationend&#039;, handleAnimationEnd);&lt;br /&gt;
	    elem.removeEventListener(&#039;animationcancel&#039;, handleAnimationEnd);&lt;br /&gt;
	  }&lt;br /&gt;
	&lt;br /&gt;
	  // 6. Bind to both end and cancel (in case an animation is interrupted)&lt;br /&gt;
	  elem.addEventListener(&#039;animationend&#039;, handleAnimationEnd);&lt;br /&gt;
	  elem.addEventListener(&#039;animationcancel&#039;, handleAnimationEnd);&lt;br /&gt;
	}&lt;br /&gt;
	mw.hook(&#039;wikipage.content&#039;).add(() =&amp;gt; {&lt;br /&gt;
		const onetimeAnimatedElems = document.querySelectorAll(&amp;quot;#mw-content,#mw-site-navigation,#mw-related-navigation&amp;quot;);&lt;br /&gt;
		for (const elem of onetimeAnimatedElems) {&lt;br /&gt;
			ensureOnetimeAnimations(elem);&lt;br /&gt;
		}&lt;br /&gt;
	})&lt;br /&gt;
})()&lt;/div&gt;</summary>
		<author><name>Pynappo</name></author>
	</entry>
	<entry>
		<id>https://nbittrpgwiki.pynappo.xyz/index.php?title=MediaWiki:Common.js&amp;diff=3005</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://nbittrpgwiki.pynappo.xyz/index.php?title=MediaWiki:Common.js&amp;diff=3005"/>
		<updated>2026-09-25T11:26:27Z</updated>

		<summary type="html">&lt;p&gt;Pynappo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/*&lt;br /&gt;
    Template:Spoiler on dev.miraheze.org&lt;br /&gt;
*/&lt;br /&gt;
$(function(){&lt;br /&gt;
    //spoiler block behavior&lt;br /&gt;
	$(&#039;.spoiler&#039;).click(function(){&lt;br /&gt;
		$(this).toggleClass(&#039;off&#039;);&lt;br /&gt;
	});&lt;br /&gt;
	// spoiler button behavior&lt;br /&gt;
    $(&#039;#spoilerbtn&#039;).text(&#039;Show all spoilers&#039;);&lt;br /&gt;
	$(&#039;#spoilerbtn&#039;).click(function(){&lt;br /&gt;
		$(this).toggleClass(&#039;hide&#039;);&lt;br /&gt;
		$(&#039;.spoiler&#039;).toggleClass(&#039;showall&#039;);&lt;br /&gt;
		&lt;br /&gt;
		if ($(this).is(&#039;.hide&#039;)){ $(this).text(&#039;Hide all spoilers&#039;); } &lt;br /&gt;
        else { $(this).text(&#039;Show all spoilers&#039;); }&lt;br /&gt;
	});	&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * TabberEX&lt;br /&gt;
 *&lt;br /&gt;
 * @version 2.3&lt;br /&gt;
 *&lt;br /&gt;
 * @author Jono99 &amp;lt;https://phigros.fandom.com/wiki/User:Jono99&amp;gt;&lt;br /&gt;
 *&lt;br /&gt;
 * documentation and examples at:&lt;br /&gt;
 * &amp;lt;https://dev.fandom.com/wiki/TabberEX&amp;gt;&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
 (function (window, $, mw) {&lt;br /&gt;
	// Function called by tabs to switch tabs&lt;br /&gt;
	window.tabberex_switchTab = function(tabber_id, tab)&lt;br /&gt;
	{&lt;br /&gt;
		tabberex_hideAllTabs(tabber_id);&lt;br /&gt;
		tabberex_showTab(tabber_id, tab);&lt;br /&gt;
	};&lt;br /&gt;
 &lt;br /&gt;
	// Inject CSS&lt;br /&gt;
	(function() {&lt;br /&gt;
		var tabberex_css = document.createElement(&amp;quot;style&amp;quot;);&lt;br /&gt;
		tabberex_css.innerHTML = &amp;quot;/* CSS owned by FANDOM */\n.oo-ui-tabOptionWidget{display:inline-block;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;vertical-align:bottom;align-items:center;color:color-mix(in srgb, var(--text-color) 75%, transparent);display:inline-flex;font-size:14px;font-weight:500;height:40px;letter-spacing:.5px;margin:0;padding:0 11px;-webkit-transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s;-moz-transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s;transition:var(--content-background-color) .3s,color .3s,var(--banner-color) .3s}.oo-ui-tabSelectWidget:not(.oo-ui-tabSelectWidget-framed) .oo-ui-tabOptionWidget{-webkit-transition:color .3s,box-shadow .3s;-moz-transition:color .3s,box-shadow .3s;transition:color .3s,box-shadow .3s;border-bottom:1px solid var(--banner-color)}.oo-ui-tabSelectWidget:not(.oo-ui-tabSelectWidget-framed) .oo-ui-tabOptionWidget.oo-ui-optionWidget-selected{box-shadow:inset 0 -2px 0 0 var(--link-color);color:var(--link-color)}&amp;quot;;&lt;br /&gt;
		document.head.appendChild(tabberex_css);&lt;br /&gt;
	})();&lt;br /&gt;
		&lt;br /&gt;
	window.tabberex_showTab = function(tabber_id, i)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;)&lt;br /&gt;
		.addClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;default&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$($(&amp;quot;.tabberex-body&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;).get()).each(function () {&lt;br /&gt;
            var display_value = $(this).attr(&amp;quot;data-tab-display&amp;quot;);&lt;br /&gt;
            if (display_value === undefined) display_value = &amp;quot;block&amp;quot;;&lt;br /&gt;
            $(this).css(&amp;quot;display&amp;quot;, display_value);&lt;br /&gt;
        });&lt;br /&gt;
	};&lt;br /&gt;
	 &lt;br /&gt;
	window.tabberex_hideTab = function(tabber_id, i)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;)&lt;br /&gt;
		.removeClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$(&amp;quot;.tabberex-body&amp;quot; + base_selector).children(&amp;quot;:nth-child(&amp;quot; + i + &amp;quot;)&amp;quot;).css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
			&lt;br /&gt;
	window.tabberex_hideAllTabs = function(tabber_id)&lt;br /&gt;
	{&lt;br /&gt;
		var base_selector = &amp;quot;[data-tabber-id=\&amp;quot;&amp;quot; + tabber_id + &amp;quot;\&amp;quot;]&amp;quot;;&lt;br /&gt;
		$(&amp;quot;.tabberex-head&amp;quot; + base_selector).children()&lt;br /&gt;
		.removeClass(&amp;quot;oo-ui-optionWidget-selected&amp;quot;)&lt;br /&gt;
		.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
		$(&amp;quot;.tabberex-body&amp;quot; + base_selector).children().css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var tabberex_buildTabHead = function(host_div, tabber_id, tab_headers, tab_ex_headers, tab_locations)&lt;br /&gt;
	{&lt;br /&gt;
		var tabber_head = host_div;&lt;br /&gt;
		tabber_head.innerHTML = &amp;quot;&amp;quot;;&lt;br /&gt;
		$(tabber_head).addClass(&amp;quot;tabberex-head oo-ui-widget oo-ui-widget-enabled oo-ui-selectWidget oo-ui-selectWidget-unpressed oo-ui-selectWidget-depressed oo-ui-tabSelectWidget&amp;quot;)&lt;br /&gt;
		.attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
		for (var i = 0; i &amp;lt; tab_headers.length; i++)&lt;br /&gt;
		{&lt;br /&gt;
			console.log(&amp;quot;Building tab &amp;quot; + tabber_id + &amp;quot; &amp;quot; + String(i));&lt;br /&gt;
			var tab = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
			$(tab).addClass(&amp;quot;oo-ui-widget oo-ui-widget-enabled oo-ui-labelElement oo-ui-optionWidget oo-ui-tabOptionWidget&amp;quot;)&lt;br /&gt;
			.css(&amp;quot;cursor&amp;quot;, &amp;quot;pointer&amp;quot;);&lt;br /&gt;
			if (tab_locations[i] === undefined)&lt;br /&gt;
				$(tab).attr(&amp;quot;onclick&amp;quot;, &amp;quot;tabberex_switchTab(\&amp;quot;&amp;quot; + mw.html.escape(tabber_id) + &amp;quot;\&amp;quot;, &amp;quot; + (i + 1) + &amp;quot;)&amp;quot;);&lt;br /&gt;
			else&lt;br /&gt;
				$(tab).attr(&amp;quot;onclick&amp;quot;, &amp;quot;location = \&amp;quot;&amp;quot; + mw.html.escape(tab_locations[i]) + &amp;quot;\&amp;quot;&amp;quot;);&lt;br /&gt;
			var tab_span = document.createElement(&amp;quot;span&amp;quot;);&lt;br /&gt;
			$(tab_span).addClass(&amp;quot;oo-ui-labelElement-label&amp;quot;);&lt;br /&gt;
			if (tab_ex_headers[i] === undefined)&lt;br /&gt;
				$(tab_span).text(tab_headers[i]);&lt;br /&gt;
			else&lt;br /&gt;
			{&lt;br /&gt;
				console.log(&amp;quot;EX Header present&amp;quot;);&lt;br /&gt;
				for (var attr in tab_ex_headers[i][1])&lt;br /&gt;
					tab_span.setAttribute(attr, tab_ex_headers[i][1][attr]);&lt;br /&gt;
				$(tab_span).html(tab_ex_headers[i][0]);&lt;br /&gt;
			}&lt;br /&gt;
			tab.appendChild(tab_span);&lt;br /&gt;
			tabber_head.appendChild(tab);&lt;br /&gt;
			console.log(&amp;quot;Successfully built tab&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
		return tabber_head.outerHTML;&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var process_tabber_head_tab = function(tab_element, i)&lt;br /&gt;
	{&lt;br /&gt;
		// Get header&lt;br /&gt;
		var header = $(tab_element).attr(&amp;quot;data-tab-header&amp;quot;);&lt;br /&gt;
		if (header === undefined) header = i + 1;&lt;br /&gt;
		&lt;br /&gt;
		// Get ex header&lt;br /&gt;
		var ex_header;&lt;br /&gt;
		function get_ex_header(_) {&lt;br /&gt;
			console.log(&#039;EX Header found&#039;);&lt;br /&gt;
			var attributes = {};&lt;br /&gt;
			var attrs = this.getAttributeNames();&lt;br /&gt;
			for (var i in attrs)&lt;br /&gt;
				attributes[attrs[i]] = this.getAttribute(attrs[i]);&lt;br /&gt;
			ex_header = [$(this).html(), attributes];&lt;br /&gt;
			$(this).remove();&lt;br /&gt;
		}&lt;br /&gt;
		$(tab_element).children(&amp;quot;p&amp;quot;).children(&amp;quot;span.tabberex-tab-header&amp;quot;).each(get_ex_header);&lt;br /&gt;
		$(tab_element).children(&amp;quot;span.tabberex-tab-header&amp;quot;).each(get_ex_header);&lt;br /&gt;
		&lt;br /&gt;
		// Get default&lt;br /&gt;
		var is_default = false;&lt;br /&gt;
		if ($(tab_element).hasClass(&amp;quot;tabberex-tab-default&amp;quot;))&lt;br /&gt;
			is_default = true;&lt;br /&gt;
		&lt;br /&gt;
		// Get tab location&lt;br /&gt;
		var tab_location = $(this).attr(&amp;quot;data-tab-location&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		return {&amp;quot;header&amp;quot;: header, &amp;quot;ex_header&amp;quot;: ex_header, &amp;quot;default&amp;quot;: is_default, &amp;quot;location&amp;quot;: tab_location};&lt;br /&gt;
	};&lt;br /&gt;
	&lt;br /&gt;
	var process_tabbers = function()&lt;br /&gt;
	{&lt;br /&gt;
		console.log(&#039;TabberEX started&#039;);&lt;br /&gt;
		var tabber_i = 0;&lt;br /&gt;
		var default_tabs = {};&lt;br /&gt;
		var tabber_ids = [];&lt;br /&gt;
		// The tabs are iterated through backwards to properly handle tabbers that are nested within other tabbers&lt;br /&gt;
		$($(&amp;quot;.tabberex-head&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			var tab_headers = [];&lt;br /&gt;
			var tab_ex_headers = [];&lt;br /&gt;
			var tab_locations = [];&lt;br /&gt;
			var default_tab = 0;&lt;br /&gt;
				&lt;br /&gt;
			var tabber_id = $(this).attr(&amp;quot;data-tabber-id&amp;quot;);&lt;br /&gt;
			if (tabber_id === undefined) tabber_id = String(tabber_i);&lt;br /&gt;
				&lt;br /&gt;
			$(this).children(&amp;quot;.tabberex-tab&amp;quot;).each(function(i) {&lt;br /&gt;
				console.log(&#039;Processing head tab &#039; + tabber_id + &#039; &#039; + String(i));&lt;br /&gt;
				var tab_details = process_tabber_head_tab(this, i);&lt;br /&gt;
				console.log(&#039;Processing complete&#039;);&lt;br /&gt;
				tab_headers[i] = tab_details.header;&lt;br /&gt;
				tab_ex_headers[i] = tab_details.ex_header;&lt;br /&gt;
				if (tab_details.default)&lt;br /&gt;
					default_tab = i;&lt;br /&gt;
				tab_locations[i] = tab_details.location;&lt;br /&gt;
				$(this).detach();&lt;br /&gt;
			});&lt;br /&gt;
			&lt;br /&gt;
			// Insert tabs into DOM&lt;br /&gt;
			tabberex_buildTabHead(this, tabber_id, tab_headers, tab_ex_headers, tab_locations);&lt;br /&gt;
			if (default_tabs[tabber_id] === undefined)&lt;br /&gt;
				default_tabs[tabber_id] = default_tab;&lt;br /&gt;
			tabber_ids.push(tabber_id);&lt;br /&gt;
			tabber_i++;&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		$($(&amp;quot;.tabberex-body&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			$(this).children().css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		$($(&amp;quot;.tabberex&amp;quot;).get().reverse()).each(function() {&lt;br /&gt;
			var tab_headers = [];&lt;br /&gt;
			var tab_ex_headers = [];&lt;br /&gt;
			var tab_locations = [];&lt;br /&gt;
			var default_tab = 0;&lt;br /&gt;
			var tab_contents = [];&lt;br /&gt;
			&lt;br /&gt;
			var tabber_id = $(this).attr(&amp;quot;data-tabber-id&amp;quot;);&lt;br /&gt;
			if (tabber_id === undefined) tabber_id = String(tabber_i);&lt;br /&gt;
            $(this).attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
&lt;br /&gt;
            var tabber_head = document.createElement(&amp;quot;div&amp;quot;);&lt;br /&gt;
            $(tabber_head).addClass(&amp;quot;tabberex-head&amp;quot;).attr(&amp;quot;data-tabber-id&amp;quot;, tabber_id);&lt;br /&gt;
            $(this).removeClass(&amp;quot;tabberex&amp;quot;).addClass(&amp;quot;tabberex-body&amp;quot;);&lt;br /&gt;
			&lt;br /&gt;
			$(this).children(&amp;quot;.tabberex-tab&amp;quot;).each(function(i) {&lt;br /&gt;
				console.log(&#039;Processing head tab &#039; + tabber_id + &#039; &#039; + String(i));&lt;br /&gt;
				var tab_details = process_tabber_head_tab(this, i);&lt;br /&gt;
				console.log(&#039;Processing complete&#039;);&lt;br /&gt;
				tab_headers[i] = tab_details.header;&lt;br /&gt;
				tab_ex_headers[i] = tab_details.ex_header;&lt;br /&gt;
				if (tab_details.default)&lt;br /&gt;
					default_tab = i;&lt;br /&gt;
				tab_locations[i] = tab_details.location;&lt;br /&gt;
				&lt;br /&gt;
				// Get tab content&lt;br /&gt;
				$(this).css(&amp;quot;display&amp;quot;, &amp;quot;none&amp;quot;);&lt;br /&gt;
				tab_contents[i] = $(this);&lt;br /&gt;
			});&lt;br /&gt;
&lt;br /&gt;
            tabberex_buildTabHead(tabber_head, tabber_id, tab_headers, tab_ex_headers, tab_locations);&lt;br /&gt;
			if (default_tabs[tabber_id] === undefined)&lt;br /&gt;
				default_tabs[tabber_id] = default_tab;&lt;br /&gt;
            $(tabber_head).insertBefore(this);&lt;br /&gt;
			tabber_ids.push(tabber_id);&lt;br /&gt;
			tabber_i++;&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		// Select default tabs&lt;br /&gt;
		for (var i in tabber_ids)&lt;br /&gt;
		{&lt;br /&gt;
			tabberex_showTab(tabber_ids[i], default_tabs[tabber_ids[i]] + 1);&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
 &lt;br /&gt;
	mw.hook(&amp;quot;wikipage.content&amp;quot;).add(process_tabbers);&lt;br /&gt;
}(this, jQuery, mediaWiki));&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * @title           SoundcloudPlayer.js&lt;br /&gt;
 * @version         1.1.2&lt;br /&gt;
 * @description     Add support for soundcloud players&lt;br /&gt;
 * @author          Himmalerin&lt;br /&gt;
 * @license         CC-BY-SA-3.0&lt;br /&gt;
 */&lt;br /&gt;
(function () {&lt;br /&gt;
	// Build the iframe&lt;br /&gt;
	const scPlayer = function (data) {&lt;br /&gt;
		const widget = document.createElement(&#039;iframe&#039;);&lt;br /&gt;
&lt;br /&gt;
		widget.classList.add(&#039;soundcloud-player&#039;);&lt;br /&gt;
&lt;br /&gt;
		widget.src =&lt;br /&gt;
			&#039;https://w.soundcloud.com/player/?show_artwork=false&amp;amp;url=&#039; +&lt;br /&gt;
			encodeURI(data.src);&lt;br /&gt;
&lt;br /&gt;
		// If data-color is set add the value to the iframe&lt;br /&gt;
		if (data.color) widget.src += &#039;&amp;amp;color=&#039; + encodeURIComponent(data.color);&lt;br /&gt;
		// If data-width/height are set add that value to the iframe&lt;br /&gt;
		if (data.width) widget.width = data.width;&lt;br /&gt;
		if (data.height) widget.height = data.height;&lt;br /&gt;
&lt;br /&gt;
		return widget;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	const scParseTags = function ($content) {&lt;br /&gt;
		// Get all instances of the soundcloud class&lt;br /&gt;
		const scTags = $content.find(&#039;.soundcloud&#039;);&lt;br /&gt;
&lt;br /&gt;
		// For each instance of the soundcloud class run scPlayer&lt;br /&gt;
		for (var i = 0; i &amp;lt; scTags.length; i++) {&lt;br /&gt;
			scTags[i].replaceWith(scPlayer(scTags[i].dataset));&lt;br /&gt;
		}&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	mw.hook(&#039;wikipage.content&#039;).add(function ($content) {&lt;br /&gt;
		scParseTags($content);&lt;br /&gt;
	});&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
https://dev.fandom.com/wiki/MediaWiki:CopyText/code.js&lt;br /&gt;
 */&lt;br /&gt;
(function () {&lt;br /&gt;
    if (window.CopyTextLoaded) {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    window.CopyTextLoaded = true;&lt;br /&gt;
    mw.hook(&#039;dev.i18n&#039;).add(function (i18n) {&lt;br /&gt;
        i18n.loadMessages(&#039;CopyText&#039;).done(function (i18n) {&lt;br /&gt;
            function showSuccess() {&lt;br /&gt;
                if (window.BannerNotification) {&lt;br /&gt;
                    new BannerNotification(i18n.msg(&#039;success&#039;).escape(), &#039;confirm&#039;, null, 5000).show();&lt;br /&gt;
                } else {&lt;br /&gt;
                    mw.notify(i18n.msg(&#039;success&#039;).plain());&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            $(&#039;body&#039;).on(&#039;click&#039;, &#039;.copy-to-clipboard-button&#039;, function(e){&lt;br /&gt;
                var text = $(this).data(&#039;text&#039;),&lt;br /&gt;
                $input = $(&#039;&amp;lt;textarea&amp;gt;&#039;, { type: &#039;text&#039; })&lt;br /&gt;
                    .val($(&#039;.copy-to-clipboard-text&#039;).filter(function() {&lt;br /&gt;
                        return $(this).data(&#039;text&#039;) == text;&lt;br /&gt;
                    }).first().text())&lt;br /&gt;
                    .appendTo(&#039;body&#039;)&lt;br /&gt;
                    .select();&lt;br /&gt;
                var success = document.execCommand(&#039;Copy&#039;);&lt;br /&gt;
                $input.remove();&lt;br /&gt;
                if (success) {&lt;br /&gt;
                    showSuccess();&lt;br /&gt;
                } else {&lt;br /&gt;
                    if (window.navigator &amp;amp;&amp;amp; navigator.clipboard &amp;amp;&amp;amp; navigator.clipboard.writeText) {&lt;br /&gt;
                        navigator.clipboard.writeText(text).then(function() {&lt;br /&gt;
                            showSuccess();&lt;br /&gt;
                        });&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
    importArticle({&lt;br /&gt;
        type: &#039;script&#039;,&lt;br /&gt;
        article: &#039;u:dev:MediaWiki:I18n-js/code.js&#039;&lt;br /&gt;
    });&lt;br /&gt;
})();&lt;br /&gt;
&lt;br /&gt;
/* custom one-time animations */&lt;br /&gt;
(function() {&lt;br /&gt;
	function waitForCssAnimations(elem, callback) {&lt;br /&gt;
	  // 1. Read the applied @keyframes names from the element&#039;s computed CSS&lt;br /&gt;
	  const computedNameString = window.getComputedStyle(elem).animationName;&lt;br /&gt;
	&lt;br /&gt;
	  // 2. Parse the comma-separated string into a clean Set of names&lt;br /&gt;
	  const expectedAnimations = new Set(&lt;br /&gt;
	    computedNameString&lt;br /&gt;
	      .split(&#039;,&#039;)&lt;br /&gt;
	      .map(name =&amp;gt; name.trim())&lt;br /&gt;
	      .filter(name =&amp;gt; name &amp;amp;&amp;amp; name !== &#039;none&#039;)&lt;br /&gt;
	  );&lt;br /&gt;
	&lt;br /&gt;
	  // 3. Edge Case: If no animations are applied, trigger the callback immediately&lt;br /&gt;
	  if (expectedAnimations.size === 0) {&lt;br /&gt;
	    callback();&lt;br /&gt;
	    return;&lt;br /&gt;
	  }&lt;br /&gt;
	&lt;br /&gt;
	  // 4. Handle the completion or cancellation of an animation&lt;br /&gt;
	  function handleAnimationEnd(event) {&lt;br /&gt;
	    // Ensure the event came from this element, not a bubbling event from a child&lt;br /&gt;
	    if (event.target !== elem) return;&lt;br /&gt;
	&lt;br /&gt;
	    if (expectedAnimations.has(event.animationName)) {&lt;br /&gt;
	      expectedAnimations.delete(event.animationName);&lt;br /&gt;
	&lt;br /&gt;
	      // Once the Set is completely empty, clean up and fire the callback&lt;br /&gt;
	      if (expectedAnimations.size === 0) {&lt;br /&gt;
	        cleanupListeners();&lt;br /&gt;
	        callback();&lt;br /&gt;
	      }&lt;br /&gt;
	    }&lt;br /&gt;
	  }&lt;br /&gt;
	&lt;br /&gt;
	  // 5. Practical Safety: Clean up listeners so they don&#039;t linger in memory&lt;br /&gt;
	  function cleanupListeners() {&lt;br /&gt;
	    elem.removeEventListener(&#039;animationend&#039;, handleAnimationEnd);&lt;br /&gt;
	    elem.removeEventListener(&#039;animationcancel&#039;, handleAnimationEnd);&lt;br /&gt;
	  }&lt;br /&gt;
	&lt;br /&gt;
	  // 6. Bind to both end and cancel (in case an animation is interrupted)&lt;br /&gt;
	  elem.addEventListener(&#039;animationend&#039;, handleAnimationEnd);&lt;br /&gt;
	  elem.addEventListener(&#039;animationcancel&#039;, handleAnimationEnd);&lt;br /&gt;
	}&lt;br /&gt;
	mw.hook(&#039;wikipage.content&#039;).add(() =&amp;gt; {&lt;br /&gt;
		const onetimeAnimatedElems = document.querySelectorAll(&amp;quot;#mw-content,#mw-site-navigation,#mw-related-navigation&amp;quot;);&lt;br /&gt;
		for (const elem of onetimeAnimatedElems) {&lt;br /&gt;
			ensureOnetimeAnimations(elem);&lt;br /&gt;
		}&lt;br /&gt;
	})&lt;br /&gt;
})()&lt;/div&gt;</summary>
		<author><name>Pynappo</name></author>
	</entry>
</feed>