<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://en.mippedia.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Admin</id>
	<title>Mippedia - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://en.mippedia.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Admin"/>
	<link rel="alternate" type="text/html" href="https://en.mippedia.org/wiki/Special:Contributions/Admin"/>
	<updated>2026-06-04T22:46:24Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://en.mippedia.org/index.php?title=Mippedia_Community&amp;diff=468</id>
		<title>Mippedia Community</title>
		<link rel="alternate" type="text/html" href="https://en.mippedia.org/index.php?title=Mippedia_Community&amp;diff=468"/>
		<updated>2026-05-30T19:09:49Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Mippedia Community&#039;&#039;&#039; is an online community that functions and is responsible for managing, maintaining, and developing the [[encyclopedia]] [[Mippedia]] ecosystem. Created on January 21, 2023, by a [[musician]] named [[Rumi Haitami]], this community operates entirely in cyberspace without any physical form, headquarters, or conventional organizational structure.&lt;br /&gt;
&lt;br /&gt;
The Mippedia Community is not a real - world body, foundation, or organization; rather, it is a collaborative collective of internet users responsible for the technical continuity of the entire Mippedia project. Its primary focus covers a wide range of knowledge such as history, [[music]], technology, and other general topics.&lt;br /&gt;
&lt;br /&gt;
[[id: Komunitas Mippedia]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://en.mippedia.org/index.php?title=Template:(!&amp;diff=467</id>
		<title>Template:(!</title>
		<link rel="alternate" type="text/html" href="https://en.mippedia.org/index.php?title=Template:(!&amp;diff=467"/>
		<updated>2026-05-30T19:07:59Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;&amp;lt;includeonly&amp;gt;{|&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&amp;lt;nowiki&amp;gt;{|&amp;lt;/nowiki&amp;gt;{{Documentation}} &amp;lt;/noinclude&amp;gt;&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{|&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&amp;lt;nowiki&amp;gt;{|&amp;lt;/nowiki&amp;gt;{{Documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://en.mippedia.org/index.php?title=Template:!)&amp;diff=466</id>
		<title>Template:!)</title>
		<link rel="alternate" type="text/html" href="https://en.mippedia.org/index.php?title=Template:!)&amp;diff=466"/>
		<updated>2026-05-30T19:07:11Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;|}&amp;lt;noinclude&amp;gt;  {{Documentation}}  &amp;lt;/noinclude&amp;gt;&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;|}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Documentation}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://en.mippedia.org/index.php?title=Mippedia_Community&amp;diff=465</id>
		<title>Mippedia Community</title>
		<link rel="alternate" type="text/html" href="https://en.mippedia.org/index.php?title=Mippedia_Community&amp;diff=465"/>
		<updated>2026-05-30T19:05:51Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox album&lt;br /&gt;
| italic_title = Tanpa Arah&lt;br /&gt;
| name         = Tanpa Arah&lt;br /&gt;
| type         = Album&lt;br /&gt;
| artist       = [[Rumi Haitami]]&lt;br /&gt;
| cover        = Rumi Haitami.jpg&lt;br /&gt;
| imageclass   =&lt;br /&gt;
| border       = Rumi Haitami.jpg&lt;br /&gt;
| alt          =&lt;br /&gt;
| caption      = a&lt;br /&gt;
| released     = b&lt;br /&gt;
| recorded     = h&lt;br /&gt;
| venue        = y&lt;br /&gt;
| studio       = u&lt;br /&gt;
| genre        = o&lt;br /&gt;
| length       = p&lt;br /&gt;
| label        = g&lt;br /&gt;
| director     = u&lt;br /&gt;
| producer     = j&lt;br /&gt;
| compiler     = e&lt;br /&gt;
| chronology   = w&lt;br /&gt;
| prev_title   = i&lt;br /&gt;
| prev_year    = v&lt;br /&gt;
| year         = x&lt;br /&gt;
| next_title   = z&lt;br /&gt;
| next_year    = m&lt;br /&gt;
| misc         = n&lt;br /&gt;
}}{{#invoke:Check for conflicting parameters|check&lt;br /&gt;
| template = [[Template:Infobox album]]&lt;br /&gt;
| cat = {{main other|Category:Pages using infobox album with conflicting parameters}}&lt;br /&gt;
| image; cover &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Mippedia Community&#039;&#039;&#039; is an online community that functions and is responsible for managing, maintaining, and developing the [[encyclopedia]] [[Mippedia]] ecosystem. Created on January 21, 2023, by a [[musician]] named [[Rumi Haitami]], this community operates entirely in cyberspace without any physical form, headquarters, or conventional organizational structure.&lt;br /&gt;
&lt;br /&gt;
The Mippedia Community is not a real - world body, foundation, or organization; rather, it is a collaborative collective of internet users responsible for the technical continuity of the entire Mippedia project. Its primary focus covers a wide range of knowledge such as history, [[music]], technology, and other general topics.&lt;br /&gt;
&lt;br /&gt;
[[id: Komunitas Mippedia]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://en.mippedia.org/index.php?title=Template:Infobox/styles-images.css&amp;diff=464</id>
		<title>Template:Infobox/styles-images.css</title>
		<link rel="alternate" type="text/html" href="https://en.mippedia.org/index.php?title=Template:Infobox/styles-images.css&amp;diff=464"/>
		<updated>2026-05-30T18:51:38Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;/* {{pp-template}} */ @media screen {   html.skin-theme-clientpref-night .infobox-has-images-with-white-backgrounds img {       background: white;   } }  @media screen and (prefers-color-scheme: dark) {   html.skin-theme-clientpref-os .infobox-has-images-with-white-backgrounds img {       background: white;   } }&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* {{pp-template}} */&lt;br /&gt;
@media screen {&lt;br /&gt;
  html.skin-theme-clientpref-night .infobox-has-images-with-white-backgrounds img {&lt;br /&gt;
      background: white;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (prefers-color-scheme: dark) {&lt;br /&gt;
  html.skin-theme-clientpref-os .infobox-has-images-with-white-backgrounds img {&lt;br /&gt;
      background: white;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://en.mippedia.org/index.php?title=Template:Start_date&amp;diff=462</id>
		<title>Template:Start date</title>
		<link rel="alternate" type="text/html" href="https://en.mippedia.org/index.php?title=Template:Start_date&amp;diff=462"/>
		<updated>2026-05-30T18:36:52Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;&amp;lt;includeonly&amp;gt;{{#invoke:Date time|generate_date}}&amp;lt;!-- Tracking categories --&amp;gt;{{#invoke:Check for unknown parameters|check|unknown={{Main other|_VALUE_}}|preview=Page using Template:Start date with unknown parameter &amp;quot;_VALUE_&amp;quot;|showblankpositional=1| 1 | 2 | 3 | 4 | 5 | 6 | 7 | df }}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt; {{documentation}} &amp;lt;/noinclude&amp;gt;&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{#invoke:Date time|generate_date}}&amp;lt;!-- Tracking categories&lt;br /&gt;
--&amp;gt;{{#invoke:Check for unknown parameters|check|unknown={{Main other|[[Category:Pages using start date with unknown parameters|_VALUE_]]}}|preview=Page using [[Template:Start date]] with unknown parameter &amp;quot;_VALUE_&amp;quot;|showblankpositional=1| 1 | 2 | 3 | 4 | 5 | 6 | 7 | df }}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://en.mippedia.org/index.php?title=Template:Infobox_album/link&amp;diff=461</id>
		<title>Template:Infobox album/link</title>
		<link rel="alternate" type="text/html" href="https://en.mippedia.org/index.php?title=Template:Infobox_album/link&amp;diff=461"/>
		<updated>2026-05-30T18:35:50Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;{{#switch: {{lc:{{delink|{{{1|}}}}}}}&amp;lt;!--  --&amp;gt;|studio album|studio|album    |tribute|tribute album    |cover album|cover    |double album                                  = Studio album    |demo                                          = Demo album&amp;lt;!--  --&amp;gt;|extended play|ep                              = EP    |single album                                  = Single album&amp;lt;!--  --&amp;gt;|live album|live...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#switch: {{lc:{{delink|{{{1|}}}}}}}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;|studio album|studio|album&lt;br /&gt;
   |tribute|tribute album&lt;br /&gt;
   |cover album|cover&lt;br /&gt;
   |double album                                  = [[Album|Studio album]]&lt;br /&gt;
   |demo                                          = [[Demo (music)|Demo album]]&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;|extended play|ep                              = [[Extended play|EP]]&lt;br /&gt;
   |single album                                  = [[Single album]]&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;|live album|live                               = [[Album#Live|Live album]]&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;|compilation album|compilation                 = [[Compilation album]]&lt;br /&gt;
   |greatest hits|greatest                        = [[Greatest hits album]]&lt;br /&gt;
   |box set|box                                   = [[Box set]]&lt;br /&gt;
   |remix album|remix                             = [[Remix album]]&lt;br /&gt;
   |mixtape                                       = [[Mixtape]]&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;|soundtrack album|soundtrack                   = [[Soundtrack album]]&lt;br /&gt;
   |television theme|television                   = [[Soundtrack|Television theme]]&lt;br /&gt;
   |film score|film                               = [[Film score]]&lt;br /&gt;
   |cast recording|cast album|cast                = [[Cast recording]]&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;|video|dvd                                     = [[Music video|Video]]&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;|other                                         = [[Timeline of audio formats|Recording]]&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;|#default={{{1|}}}{{main other |[[Category:Music infoboxes with unknown value for type|A]]|}}&lt;br /&gt;
}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://en.mippedia.org/index.php?title=Module:Delink&amp;diff=460</id>
		<title>Module:Delink</title>
		<link rel="alternate" type="text/html" href="https://en.mippedia.org/index.php?title=Module:Delink&amp;diff=460"/>
		<updated>2026-05-30T18:27:29Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;-- This module de-links most wikitext.  require(&amp;quot;strict&amp;quot;)  local p = {}  local getArgs  local function delinkReversePipeTrick(s) 	if s:match(&amp;quot;^%[%[|.*[|\n]&amp;quot;) then -- Check for newlines or multiple pipes. 		return s 	end 	return s:match(&amp;quot;%[%[|(.*)%]%]&amp;quot;)  end  local function delinkPipeTrick(s) 	-- We need to deal with colons, brackets, and commas, per Help:Pipe trick. 	-- First, remove the text before the first colon, if any. 	if s:match(&amp;quot;:&amp;quot;) then 		s = s:match(&amp;quot;%[%[.-...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- This module de-links most wikitext.&lt;br /&gt;
&lt;br /&gt;
require(&amp;quot;strict&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local getArgs&lt;br /&gt;
&lt;br /&gt;
local function delinkReversePipeTrick(s)&lt;br /&gt;
	if s:match(&amp;quot;^%[%[|.*[|\n]&amp;quot;) then -- Check for newlines or multiple pipes.&lt;br /&gt;
		return s&lt;br /&gt;
	end&lt;br /&gt;
	return s:match(&amp;quot;%[%[|(.*)%]%]&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function delinkPipeTrick(s)&lt;br /&gt;
	-- We need to deal with colons, brackets, and commas, per [[Help:Pipe trick]].&lt;br /&gt;
	-- First, remove the text before the first colon, if any.&lt;br /&gt;
	if s:match(&amp;quot;:&amp;quot;) then&lt;br /&gt;
		s = s:match(&amp;quot;%[%[.-:(.*)|%]%]&amp;quot;)&lt;br /&gt;
	-- If there are no colons, grab all of the text apart from the square brackets and the pipe.&lt;br /&gt;
	else&lt;br /&gt;
		s = s:match(&amp;quot;%[%[(.*)|%]%]&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Next up, brackets and commas.&lt;br /&gt;
	if s:match(&amp;quot;%(.-%)$&amp;quot;) then -- Brackets trump commas.&lt;br /&gt;
		s = s:match(&amp;quot;(.-) ?%(.-%)$&amp;quot;)&lt;br /&gt;
	elseif s:match(&amp;quot;,&amp;quot;) then -- If there are no brackets, display only the text before the first comma.&lt;br /&gt;
		s = s:match(&amp;quot;(.-),.*$&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	return s&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Return wikilink target |wikilinks=target&lt;br /&gt;
local function getDelinkedTarget(s)&lt;br /&gt;
	local result = s&lt;br /&gt;
	-- Deal with the reverse pipe trick.&lt;br /&gt;
	if result:match(&amp;quot;%[%[|&amp;quot;) then&lt;br /&gt;
		return delinkReversePipeTrick(result)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	result = mw.uri.decode(result, &amp;quot;PATH&amp;quot;) -- decode percent-encoded entities. Leave underscores and plus signs.&lt;br /&gt;
	result = mw.text.decode(result, true) -- decode HTML entities.&lt;br /&gt;
	&lt;br /&gt;
	-- Check for bad titles. To do this we need to find the&lt;br /&gt;
	-- title area of the link, i.e. the part before any pipes.&lt;br /&gt;
	local target_area&lt;br /&gt;
	if result:match(&amp;quot;|&amp;quot;) then -- Find if we&#039;re dealing with a piped link.&lt;br /&gt;
		target_area = result:match(&amp;quot;^%[%[(.-)|.*%]%]&amp;quot;)&lt;br /&gt;
	else&lt;br /&gt;
		target_area = result:match(&amp;quot;^%[%[(.-)%]%]&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Check for bad characters.&lt;br /&gt;
	if mw.ustring.match(target_area, &amp;quot;[%[%]&amp;lt;&amp;gt;{}%%%c\n]&amp;quot;) and mw.ustring.match(target_area, &amp;quot;[%[%]&amp;lt;&amp;gt;{}%%%c\n]&amp;quot;) ~= &amp;quot;?&amp;quot; then&lt;br /&gt;
		return s&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return target_area&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getDelinkedLabel(s)&lt;br /&gt;
	local result = s&lt;br /&gt;
	-- Deal with the reverse pipe trick.&lt;br /&gt;
	if result:match(&amp;quot;%[%[|&amp;quot;) then&lt;br /&gt;
		return delinkReversePipeTrick(result)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	result = mw.uri.decode(result, &amp;quot;PATH&amp;quot;) -- decode percent-encoded entities. Leave underscores and plus signs.&lt;br /&gt;
	result = mw.text.decode(result, true) -- decode HTML entities.&lt;br /&gt;
&lt;br /&gt;
	-- Check for bad titles. To do this we need to find the&lt;br /&gt;
	-- title area of the link, i.e. the part before any pipes.&lt;br /&gt;
	local target_area&lt;br /&gt;
	if result:match(&amp;quot;|&amp;quot;) then -- Find if we&#039;re dealing with a piped link.&lt;br /&gt;
		target_area = result:match(&amp;quot;^%[%[(.-)|.*%]%]&amp;quot;)&lt;br /&gt;
	else&lt;br /&gt;
		target_area = result:match(&amp;quot;^%[%[(.-)%]%]&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Check for bad characters.&lt;br /&gt;
	if mw.ustring.match(target_area, &amp;quot;[%[%]&amp;lt;&amp;gt;{}%%%c\n]&amp;quot;) and mw.ustring.match(target_area, &amp;quot;[%[%]&amp;lt;&amp;gt;{}%%%c\n]&amp;quot;) ~= &amp;quot;?&amp;quot; then&lt;br /&gt;
		return s&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Check for categories, interwikis, and files.&lt;br /&gt;
	local colon_prefix = result:match(&amp;quot;%[%[(.-):.*%]%]&amp;quot;) or &amp;quot;&amp;quot; -- Get the text before the first colon.&lt;br /&gt;
	local ns = mw.site.namespaces[colon_prefix] -- see if this is a known namespace&lt;br /&gt;
	if mw.language.isKnownLanguageTag(colon_prefix) or (ns and (ns.canonicalName == &amp;quot;File&amp;quot; or ns.canonicalName == &amp;quot;Category&amp;quot;)) then&lt;br /&gt;
		return &amp;quot;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Remove the colon if the link is using the [[Help:Colon trick]].&lt;br /&gt;
	if result:match(&amp;quot;%[%[:&amp;quot;) then&lt;br /&gt;
		result = &amp;quot;[[&amp;quot; .. result:match(&amp;quot;%[%[:(.*%]%])&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Deal with links using the [[Help:Pipe trick]].&lt;br /&gt;
	if mw.ustring.match(result, &amp;quot;^%[%[[^|]*|%]%]&amp;quot;) then&lt;br /&gt;
		return delinkPipeTrick(result)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Find the display area of the wikilink&lt;br /&gt;
	if result:match(&amp;quot;|&amp;quot;) then -- Find if we&#039;re dealing with a piped link.&lt;br /&gt;
		result = result:match(&amp;quot;^%[%[.-|(.+)%]%]&amp;quot;)&lt;br /&gt;
		-- Remove new lines from the display of multiline piped links,&lt;br /&gt;
		-- where the pipe is before the first new line.&lt;br /&gt;
		result = result:gsub(&amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
	else&lt;br /&gt;
		result = result:match(&amp;quot;^%[%[(.-)%]%]&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function delinkURL(s)&lt;br /&gt;
	-- Assume we have already delinked internal wikilinks, and that&lt;br /&gt;
	-- we have been passed some text between two square brackets [foo].&lt;br /&gt;
	&lt;br /&gt;
	-- If the text contains a line break it is not formatted as a URL, regardless of other content.&lt;br /&gt;
	if s:match(&amp;quot;\n&amp;quot;) then&lt;br /&gt;
		return s&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Check if the text has a valid URL prefix and at least one valid URL character.&lt;br /&gt;
	local valid_url_prefixes = {&amp;quot;//&amp;quot;, &amp;quot;http://&amp;quot;, &amp;quot;https://&amp;quot;, &amp;quot;ftp://&amp;quot;, &amp;quot;gopher://&amp;quot;, &amp;quot;mailto:&amp;quot;, &amp;quot;news:&amp;quot;, &amp;quot;irc://&amp;quot;} &lt;br /&gt;
	local url_prefix&lt;br /&gt;
	for _ ,v in ipairs(valid_url_prefixes) do&lt;br /&gt;
		if mw.ustring.match(s, &#039;^%[&#039; .. v ..&#039;[^&amp;quot;%s].*%]&#039; ) then&lt;br /&gt;
			url_prefix = v&lt;br /&gt;
			break&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Get display text&lt;br /&gt;
	if not url_prefix then&lt;br /&gt;
		return s&lt;br /&gt;
	end&lt;br /&gt;
	s = s:match(&amp;quot;^%[&amp;quot; .. url_prefix .. &amp;quot;(.*)%]&amp;quot;) -- Grab all of the text after the URL prefix and before the final square bracket.&lt;br /&gt;
	s = s:match(&#039;^.-([&amp;quot;&amp;lt;&amp;gt; ].*)&#039;) or &amp;quot;&amp;quot; -- Grab all of the text after the first URL separator character (&amp;quot;&amp;lt;&amp;gt; ).&lt;br /&gt;
	s = mw.ustring.match(s, &amp;quot;^%s*(%S.*)$&amp;quot;) or &amp;quot;&amp;quot; -- If the separating character was a space, trim it off.&lt;br /&gt;
	&lt;br /&gt;
	local s_decoded = mw.text.decode(s, true)&lt;br /&gt;
	if mw.ustring.match(s_decoded, &amp;quot;%c&amp;quot;) then&lt;br /&gt;
		return s&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return s_decoded&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function delinkLinkClass(text, pattern, delinkFunction)&lt;br /&gt;
	if type(text) ~= &amp;quot;string&amp;quot; then&lt;br /&gt;
		error(&amp;quot;Attempt to de-link non-string input.&amp;quot;, 2)&lt;br /&gt;
	end&lt;br /&gt;
	if type(pattern) ~= &amp;quot;string&amp;quot; or mw.ustring.sub(pattern, 1, 1) ~= &amp;quot;^&amp;quot; then&lt;br /&gt;
		error(&#039;Invalid pattern detected. Patterns must begin with &amp;quot;^&amp;quot;.&#039;, 2)&lt;br /&gt;
	end&lt;br /&gt;
	-- Iterate over the text string, and replace any matched text. using the &lt;br /&gt;
	-- delink function. We need to iterate character by character rather &lt;br /&gt;
	-- than just use gsub, otherwise nested links aren&#039;t detected properly.&lt;br /&gt;
	local result = &amp;quot;&amp;quot;&lt;br /&gt;
	while text ~= &amp;quot;&amp;quot; do&lt;br /&gt;
		-- Replace text using one iteration of gsub.&lt;br /&gt;
		text = mw.ustring.gsub(text, pattern, delinkFunction, 1)&lt;br /&gt;
		-- Append the left-most character to the result string.&lt;br /&gt;
		result = result .. mw.ustring.sub(text, 1, 1)&lt;br /&gt;
		text = mw.ustring.sub(text, 2, -1)&lt;br /&gt;
	end&lt;br /&gt;
	return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._delink(args)&lt;br /&gt;
	local text = args[1] or &amp;quot;&amp;quot;&lt;br /&gt;
	if args.refs == &amp;quot;yes&amp;quot; then&lt;br /&gt;
		-- Remove any [[Help:Strip markers]] representing ref tags. In most situations &lt;br /&gt;
		-- this is not a good idea - only use it if you know what you are doing!&lt;br /&gt;
		text = mw.ustring.gsub(text, &amp;quot;UNIQ%w*%-ref%-%d*%-QINU&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	if args.comments ~= &amp;quot;no&amp;quot; then&lt;br /&gt;
		text = text:gsub(&amp;quot;&amp;lt;!%-%-.-%-%-&amp;gt;&amp;quot;, &amp;quot;&amp;quot;) -- Remove html comments.&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if args.wikilinks ~= &amp;quot;no&amp;quot; and args.wikilinks ~= &amp;quot;target&amp;quot; then&lt;br /&gt;
		-- De-link wikilinks and return the label portion of the wikilink.&lt;br /&gt;
		text = delinkLinkClass(text, &amp;quot;^%[%[.-%]%]&amp;quot;, getDelinkedLabel)&lt;br /&gt;
	elseif args.wikilinks == &amp;quot;target&amp;quot; then&lt;br /&gt;
		-- De-link wikilinks and return the target portions of the wikilink.&lt;br /&gt;
		text = delinkLinkClass(text, &amp;quot;^%[%[.-%]%]&amp;quot;, getDelinkedTarget)&lt;br /&gt;
	end&lt;br /&gt;
	if args.urls ~= &amp;quot;no&amp;quot; then&lt;br /&gt;
		text = delinkLinkClass(text, &amp;quot;^%[.-%]&amp;quot;, delinkURL) -- De-link URLs.&lt;br /&gt;
	end&lt;br /&gt;
	if args.whitespace ~= &amp;quot;no&amp;quot; then&lt;br /&gt;
		-- Replace single new lines with a single space, but leave double new lines&lt;br /&gt;
		-- and new lines only containing spaces or tabs before a second new line.&lt;br /&gt;
		text = mw.ustring.gsub(text, &amp;quot;([^\n \t][ \t]*)\n([ \t]*[^\n \t])&amp;quot;, &amp;quot;%1 %2&amp;quot;)&lt;br /&gt;
		text = text:gsub(&amp;quot;[ \t]+&amp;quot;, &amp;quot; &amp;quot;) -- Remove extra tabs and spaces.&lt;br /&gt;
	end&lt;br /&gt;
	return text&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.delink(frame)&lt;br /&gt;
	if not getArgs then&lt;br /&gt;
		getArgs = require(&#039;Module:Arguments&#039;).getArgs&lt;br /&gt;
	end&lt;br /&gt;
	return p._delink(getArgs(frame, {wrappers = &#039;Template:Delink&#039;}))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://en.mippedia.org/index.php?title=Template:Delink&amp;diff=459</id>
		<title>Template:Delink</title>
		<link rel="alternate" type="text/html" href="https://en.mippedia.org/index.php?title=Template:Delink&amp;diff=459"/>
		<updated>2026-05-30T18:26:53Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;{{&amp;lt;includeonly&amp;gt;safesubst:&amp;lt;/includeonly&amp;gt;#invoke:delink|delink}}&amp;lt;noinclude&amp;gt; {{documentation}} &amp;lt;/noinclude&amp;gt;&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{&amp;lt;includeonly&amp;gt;safesubst:&amp;lt;/includeonly&amp;gt;#invoke:delink|delink}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://en.mippedia.org/index.php?title=Module:MultiReplace&amp;diff=458</id>
		<title>Module:MultiReplace</title>
		<link rel="alternate" type="text/html" href="https://en.mippedia.org/index.php?title=Module:MultiReplace&amp;diff=458"/>
		<updated>2026-05-30T18:24:34Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;local p = {}  local function MultiReplace(args) 	local input = args[1] or &amp;quot;{{{1}}}&amp;quot; 	local plain = args.plain == &amp;quot;yes&amp;quot;  	local i = 1 	local changeList = {} 	while args[i * 2] do 		local change = {pattern = args[i * 2], repl = args[i * 2 + 1]} 		if not change.repl then 			return require(&amp;#039;Module:Error&amp;#039;).error{ 				&amp;#039;MultiReplace: Unpaired argument: &amp;lt;code&amp;gt;&amp;#039; .. (i * 2) .. &amp;#039; = &amp;#039; .. mw.text.nowiki(change.pattern) .. &amp;#039;&amp;lt;/code&amp;gt;&amp;#039; 			} 		end 		changeList[i] = change 		i = i + 1 	end...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
local function MultiReplace(args)&lt;br /&gt;
	local input = args[1] or &amp;quot;{{{1}}}&amp;quot;&lt;br /&gt;
	local plain = args.plain == &amp;quot;yes&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	local i = 1&lt;br /&gt;
	local changeList = {}&lt;br /&gt;
	while args[i * 2] do&lt;br /&gt;
		local change = {pattern = args[i * 2], repl = args[i * 2 + 1]}&lt;br /&gt;
		if not change.repl then&lt;br /&gt;
			return require(&#039;Module:Error&#039;).error{&lt;br /&gt;
				&#039;MultiReplace: Unpaired argument: &amp;lt;code&amp;gt;&#039; .. (i * 2) .. &#039; = &#039; .. mw.text.nowiki(change.pattern) .. &#039;&amp;lt;/code&amp;gt;&#039;&lt;br /&gt;
			}&lt;br /&gt;
		end&lt;br /&gt;
		changeList[i] = change&lt;br /&gt;
		i = i + 1&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local matchList = {}&lt;br /&gt;
	local pos = 1&lt;br /&gt;
	local len = mw.ustring.len(input)&lt;br /&gt;
	local result = &amp;quot;&amp;quot;&lt;br /&gt;
	while pos &amp;lt;= len do&lt;br /&gt;
		local bestStart = len + 1&lt;br /&gt;
		local bestStop = len&lt;br /&gt;
		local bestChange&lt;br /&gt;
		for _, change in ipairs(changeList) do&lt;br /&gt;
			local start, stop = mw.ustring.find(input, change.pattern, pos, plain)&lt;br /&gt;
			if start and (start &amp;lt; bestStart) then&lt;br /&gt;
				bestStart = start&lt;br /&gt;
				bestStop = stop&lt;br /&gt;
				bestChange = change&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		result = result .. mw.ustring.sub(input, pos, bestStart - 1)&lt;br /&gt;
		if bestChange then&lt;br /&gt;
			local fragment = mw.ustring.sub(input, bestStart, bestStop)&lt;br /&gt;
			result = result .. (plain and bestChange.repl or&lt;br /&gt;
				mw.ustring.gsub(fragment, bestChange.pattern, bestChange.repl, 1))&lt;br /&gt;
		end&lt;br /&gt;
		pos = bestStop + 1&lt;br /&gt;
	end&lt;br /&gt;
	return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame, ...)&lt;br /&gt;
	local args =&lt;br /&gt;
		type(frame) ~= &#039;table&#039; and {frame, ...} or&lt;br /&gt;
		type(frame.args) ~= &#039;table&#039; and frame or&lt;br /&gt;
		frame.args[1] and frame.args or&lt;br /&gt;
		frame:getParent().args&lt;br /&gt;
	return MultiReplace(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://en.mippedia.org/index.php?title=Template:Encodefirst&amp;diff=457</id>
		<title>Template:Encodefirst</title>
		<link rel="alternate" type="text/html" href="https://en.mippedia.org/index.php?title=Template:Encodefirst&amp;diff=457"/>
		<updated>2026-05-30T18:23:47Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;{{#invoke:MultiReplace|main|1={{{1}}}|2=^:|3=&amp;amp;#58;|4=^;|5=&amp;amp;#59;|6=^*|7=&amp;amp;#42;|8=^#|9=&amp;amp;#35;}}&amp;lt;noinclude&amp;gt; {{Documentation}} &amp;lt;/noinclude&amp;gt;&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#invoke:MultiReplace|main|1={{{1}}}|2=^:|3=&amp;amp;#58;|4=^;|5=&amp;amp;#59;|6=^*|7=&amp;amp;#42;|8=^#|9=&amp;amp;#35;}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://en.mippedia.org/index.php?title=Module:Hms&amp;diff=456</id>
		<title>Module:Hms</title>
		<link rel="alternate" type="text/html" href="https://en.mippedia.org/index.php?title=Module:Hms&amp;diff=456"/>
		<updated>2026-05-30T18:23:00Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;local p = {}  function p._error( error_str )     return &amp;#039;Category:Duration with input error&amp;lt;strong class=&amp;quot;error&amp;quot;&amp;gt;Error in Module:Duration: &amp;#039; .. error_str .. &amp;#039;&amp;lt;/strong&amp;gt;&amp;#039; end  function p.main(frame) 	local args = require(&amp;#039;Module:Arguments&amp;#039;).getArgs(frame, {wrappers = {&amp;#039;Template:Duration&amp;#039;, &amp;#039;Template:Duration/sandbox&amp;#039;}}) 	local tmp = args.duration or args[1] or &amp;#039;&amp;#039; 	local duration = {} 	if tonumber(args[1]) or args[2] or args[3] then 		if args[4] then return p._error(&amp;#039;Par...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
function p._error( error_str )&lt;br /&gt;
    return &#039;[[Category:Duration with input error]]&amp;lt;strong class=&amp;quot;error&amp;quot;&amp;gt;Error in Module:Duration: &#039; .. error_str .. &#039;&amp;lt;/strong&amp;gt;&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local args = require(&#039;Module:Arguments&#039;).getArgs(frame, {wrappers = {&#039;Template:Duration&#039;, &#039;Template:Duration/sandbox&#039;}})&lt;br /&gt;
	local tmp = args.duration or args[1] or &#039;&#039;&lt;br /&gt;
	local duration = {}&lt;br /&gt;
	if tonumber(args[1]) or args[2] or args[3] then&lt;br /&gt;
		if args[4] then return p._error(&#039;Parameter number 4 should not be specified&#039;) end&lt;br /&gt;
		if not args[1] or args[1] == &#039;&#039; then&lt;br /&gt;
			duration = {args[2] or 0, args[3] or 0}&lt;br /&gt;
		else&lt;br /&gt;
			duration = {args[1], args[2] or 0, args[3] or 0}&lt;br /&gt;
		end&lt;br /&gt;
		tmp = nil&lt;br /&gt;
		for k, v in ipairs(duration) do&lt;br /&gt;
			duration[k] = tonumber(v)&lt;br /&gt;
			if not duration[k] then return p._error(&#039;Invalid values&#039;) end&lt;br /&gt;
		end&lt;br /&gt;
	elseif args.h or args.m or args.s then&lt;br /&gt;
		if not args.h or args.h == &#039;&#039; then&lt;br /&gt;
			duration = {args.m or 0, args.s or 0}&lt;br /&gt;
		else&lt;br /&gt;
			duration = {args.h, args.m or 0, args.s or 0}&lt;br /&gt;
		end&lt;br /&gt;
		tmp = nil&lt;br /&gt;
		for k, v in ipairs(duration) do&lt;br /&gt;
			duration[k] = tonumber(v)&lt;br /&gt;
			if not duration[k] then return p._error(&#039;Invalid values&#039;) end&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		if mw.ustring.find(tmp, &#039;class=&amp;quot;duration&amp;quot;&#039;, 1, yes) then return tmp end -- if there is already a microformat, don&#039;t do anything&lt;br /&gt;
		duration = mw.text.split(mw.ustring.match(tmp, &#039;%d*:?%d+:%d+%.?%d*&#039;) or &#039;&#039;, &#039;:&#039;) -- split into table&lt;br /&gt;
		if duration[4] then return p._error(&#039;Maximum of two colons allowed&#039;) end&lt;br /&gt;
		for k, v in ipairs(duration) do duration[k] = tonumber(v) or 0 end -- convert values to numbers&lt;br /&gt;
	end&lt;br /&gt;
	if duration[3] then&lt;br /&gt;
		if (duration[1] + duration[2] + duration[3]) == 0 then return nil end&lt;br /&gt;
		if (duration[1] ~= math.ceil(duration[1])) or (duration[2] ~= math.ceil(duration[2])) then return p._error(&#039;Hours and minutes values must be integers&#039;) end&lt;br /&gt;
		if duration[3] &amp;gt;= 60 then return p._error(&#039;Seconds value must be less than 60&#039;) end&lt;br /&gt;
		if duration[2] &amp;gt;= 60 then return p._error(&#039;Minutes value must be less than 60 if hours value is specified&#039;) end&lt;br /&gt;
		if duration[2] &amp;lt; 10 then duration[2] = &#039;0&#039;..duration[2] end -- zero padding&lt;br /&gt;
		if duration[3] &amp;lt; 10 then duration[3] = &#039;0&#039;..duration[3] end&lt;br /&gt;
		duration = &#039;&amp;lt;span class=&amp;quot;duration&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;h&amp;quot;&amp;gt;&#039; .. duration[1] .. &#039;&amp;lt;/span&amp;gt;:&amp;lt;span class=&amp;quot;min&amp;quot;&amp;gt;&#039; .. duration[2] .. &#039;&amp;lt;/span&amp;gt;:&amp;lt;span class=&amp;quot;s&amp;quot;&amp;gt;&#039; .. duration[3] .. &#039;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
	elseif duration[2] then&lt;br /&gt;
		if (duration[1] + duration[2]) == 0 then return nil end&lt;br /&gt;
		if duration[1] ~= math.ceil(duration[1]) then return p._error(&#039;Hours and minutes values must be integers&#039;) end&lt;br /&gt;
		if duration[2] &amp;gt;= 60 then return p._error(&#039;Seconds value must be less than 60&#039;) end&lt;br /&gt;
		if duration[2] &amp;lt; 10 then duration[2] = &#039;0&#039;..duration[2] end -- zero padding&lt;br /&gt;
		duration = &#039;&amp;lt;span class=&amp;quot;duration&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;min&amp;quot;&amp;gt;&#039; .. duration[1] .. &#039;&amp;lt;/span&amp;gt;:&amp;lt;span class=&amp;quot;s&amp;quot;&amp;gt;&#039; .. duration[2] .. &#039;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
	else&lt;br /&gt;
		duration = &#039;&#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if tmp and tmp ~= &#039;&#039; then&lt;br /&gt;
		if duration ~= &#039;&#039; then tmp = mw.ustring.gsub(tmp, &#039;%d*:?%d+:%d+%.?%d*&#039;, duration, 1) else tmp = tmp .. &#039; [[Category:Duration without hAudio microformat]]&#039; end&lt;br /&gt;
	else&lt;br /&gt;
		if duration ~= &#039;&#039; then tmp = duration end&lt;br /&gt;
	end&lt;br /&gt;
	return tmp&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://en.mippedia.org/index.php?title=Module:Category_handler/config&amp;diff=455</id>
		<title>Module:Category handler/config</title>
		<link rel="alternate" type="text/html" href="https://en.mippedia.org/index.php?title=Module:Category_handler/config&amp;diff=455"/>
		<updated>2026-05-30T18:22:02Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;-------------------------------------------------------------------------------- --            Module:Category handler configuration data                  -- --       Language-specific parameter names and values can be set here.        -- --       For blacklist config, see Module:Category handler/blacklist.     -- --------------------------------------------------------------------------------  local cfg = {} -- Don&amp;#039;t edit this line.  ----------------------------...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;--------------------------------------------------------------------------------&lt;br /&gt;
--            [[Module:Category handler]] configuration data                  --&lt;br /&gt;
--       Language-specific parameter names and values can be set here.        --&lt;br /&gt;
--       For blacklist config, see [[Module:Category handler/blacklist]].     --&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local cfg = {} -- Don&#039;t edit this line.&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
--                       Start configuration data                             --&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
--                              Parameter names                               --&lt;br /&gt;
-- These configuration items specify custom parameter names.                  --&lt;br /&gt;
-- To add one extra name, you can use this format:                            --&lt;br /&gt;
--                                                                            --&lt;br /&gt;
-- foo = &#039;parameter name&#039;,                                                    --&lt;br /&gt;
--                                                                            --&lt;br /&gt;
-- To add multiple names, you can use this format:                            --&lt;br /&gt;
--                                                                            --&lt;br /&gt;
-- foo = {&#039;parameter name 1&#039;, &#039;parameter name 2&#039;, &#039;parameter name 3&#039;},        --&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
cfg.parameters = {&lt;br /&gt;
	&lt;br /&gt;
	-- The nocat and categories parameter suppress&lt;br /&gt;
	-- categorisation. They are used with Module:Yesno, and work as follows:&lt;br /&gt;
	--&lt;br /&gt;
	-- cfg.nocat:&lt;br /&gt;
	-- Result of yesno()                        Effect&lt;br /&gt;
	-- true                                     Categorisation is suppressed&lt;br /&gt;
	-- false                                    Categorisation is allowed, and&lt;br /&gt;
	--                                          the blacklist check is skipped&lt;br /&gt;
	-- nil                                      Categorisation is allowed&lt;br /&gt;
	--&lt;br /&gt;
	-- cfg.categories:&lt;br /&gt;
	-- Result of yesno()                        Effect&lt;br /&gt;
	-- true                                     Categorisation is allowed, and&lt;br /&gt;
	--                                          the blacklist check is skipped&lt;br /&gt;
	-- false                                    Categorisation is suppressed&lt;br /&gt;
	-- nil                                      Categorisation is allowed&lt;br /&gt;
	nocat = &#039;nocat&#039;,&lt;br /&gt;
	categories = &#039;categories&#039;,&lt;br /&gt;
	&lt;br /&gt;
	-- The parameter name for the legacy &amp;quot;category2&amp;quot; parameter. This skips the&lt;br /&gt;
	-- blacklist if set to the cfg.category2Yes value, and suppresses&lt;br /&gt;
	-- categorisation if present but equal to anything other than&lt;br /&gt;
	-- cfg.category2Yes or cfg.category2Negative.&lt;br /&gt;
	category2 = &#039;category2&#039;,&lt;br /&gt;
	&lt;br /&gt;
	-- cfg.subpage is the parameter name to specify how to behave on subpages.&lt;br /&gt;
	subpage = &#039;subpage&#039;,&lt;br /&gt;
	&lt;br /&gt;
	-- The parameter for data to return in all namespaces.&lt;br /&gt;
	all = &#039;all&#039;,&lt;br /&gt;
	&lt;br /&gt;
	-- The parameter name for data to return if no data is specified for the&lt;br /&gt;
	-- namespace that is detected.&lt;br /&gt;
	other = &#039;other&#039;,&lt;br /&gt;
	&lt;br /&gt;
	-- The parameter name used to specify a page other than the current page;&lt;br /&gt;
	-- used for testing and demonstration.&lt;br /&gt;
	demopage = &#039;page&#039;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
--                              Parameter values                              --&lt;br /&gt;
-- These are set values that can be used with certain parameters. Only one    --&lt;br /&gt;
-- value can be specified, like this:                                         --&lt;br /&gt;
--                                                                            --&lt;br /&gt;
-- cfg.foo = &#039;value name&#039;                                                     --                                               --&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- The following settings are used with the cfg.category2 parameter. Setting&lt;br /&gt;
-- cfg.category2 to cfg.category2Yes skips the blacklist, and if cfg.category2&lt;br /&gt;
-- is present but equal to anything other than cfg.category2Yes or&lt;br /&gt;
-- cfg.category2Negative then it supresses cateogrisation.&lt;br /&gt;
cfg.category2Yes = &#039;yes&#039;&lt;br /&gt;
cfg.category2Negative = &#039;¬&#039;&lt;br /&gt;
&lt;br /&gt;
-- The following settings are used with the cfg.subpage parameter.&lt;br /&gt;
-- cfg.subpageNo is the value to specify to not categorise on subpages;&lt;br /&gt;
-- cfg.subpageOnly is the value to specify to only categorise on subpages.&lt;br /&gt;
cfg.subpageNo = &#039;no&#039;&lt;br /&gt;
cfg.subpageOnly = &#039;only&#039;&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
--                           Default namespaces                               --&lt;br /&gt;
-- This is a table of namespaces to categorise by default. The keys are the   --&lt;br /&gt;
-- namespace numbers.                                                         --&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
cfg.defaultNamespaces = {&lt;br /&gt;
	[  0] = true, -- main&lt;br /&gt;
	[  6] = true, -- file&lt;br /&gt;
	[ 12] = true, -- help&lt;br /&gt;
	[ 14] = true, -- category&lt;br /&gt;
	[100] = true, -- portal&lt;br /&gt;
	[108] = true, -- book&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
--                                Wrappers                                    --&lt;br /&gt;
-- This is a wrapper template or a list of wrapper templates to be passed to  --&lt;br /&gt;
-- [[Module:Arguments]].                                                      --&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
cfg.wrappers = &#039;Template:Category handler&#039;&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
--                           End configuration data                           --&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
return cfg -- Don&#039;t edit this line.&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://en.mippedia.org/index.php?title=Module:Category_handler/blacklist&amp;diff=454</id>
		<title>Module:Category handler/blacklist</title>
		<link rel="alternate" type="text/html" href="https://en.mippedia.org/index.php?title=Module:Category_handler/blacklist&amp;diff=454"/>
		<updated>2026-05-30T18:20:59Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;-- This module contains the blacklist used by Module:Category handler. -- Pages that match Lua patterns in this list will not be categorised unless -- categorisation is explicitly requested.  return { 	&amp;#039;^Main Page$&amp;#039;, -- don&amp;#039;t categorise the main page.  	-- Don&amp;#039;t categorise the following pages or their subpages. 	-- &amp;quot;%f[/\0]&amp;quot; matches if the next character is &amp;quot;/&amp;quot; or the end of the string. 	&amp;#039;^Wikipedia:Cascade%-protected items%f[/\0]&amp;#039;, 	&amp;#039;^User:UBX%f[/\0]&amp;#039;, -- The userbo...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- This module contains the blacklist used by [[Module:Category handler]].&lt;br /&gt;
-- Pages that match Lua patterns in this list will not be categorised unless&lt;br /&gt;
-- categorisation is explicitly requested.&lt;br /&gt;
&lt;br /&gt;
return {&lt;br /&gt;
	&#039;^Main Page$&#039;, -- don&#039;t categorise the main page.&lt;br /&gt;
&lt;br /&gt;
	-- Don&#039;t categorise the following pages or their subpages.&lt;br /&gt;
	-- &amp;quot;%f[/\0]&amp;quot; matches if the next character is &amp;quot;/&amp;quot; or the end of the string.&lt;br /&gt;
	&#039;^Wikipedia:Cascade%-protected items%f[/\0]&#039;,&lt;br /&gt;
	&#039;^User:UBX%f[/\0]&#039;, -- The userbox &amp;quot;template&amp;quot; space.&lt;br /&gt;
	&#039;^User talk:UBX%f[/\0]&#039;,&lt;br /&gt;
&lt;br /&gt;
	-- Don&#039;t categorise subpages of these pages, but allow&lt;br /&gt;
	-- categorisation of the base page.&lt;br /&gt;
	&#039;^Wikipedia:Template index/.*$&#039;,&lt;br /&gt;
&lt;br /&gt;
	-- Don&#039;t categorise archives.&lt;br /&gt;
	&#039;/[aA]rchive&#039;,&lt;br /&gt;
	&amp;quot;^Wikipedia:Administrators&#039; noticeboard/IncidentArchive%d+$&amp;quot;,&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://en.mippedia.org/index.php?title=Module:Category_handler/shared&amp;diff=453</id>
		<title>Module:Category handler/shared</title>
		<link rel="alternate" type="text/html" href="https://en.mippedia.org/index.php?title=Module:Category_handler/shared&amp;diff=453"/>
		<updated>2026-05-30T18:20:10Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;-- This module contains shared functions used by Module:Category handler -- and its submodules.  local p = {}  function p.matchesBlacklist(page, blacklist) 	for i, pattern in ipairs(blacklist) do 		local match = mw.ustring.match(page, pattern) 		if match then 			return true 		end 	end 	return false end  function p.getParamMappings(useLoadData) 	local dataPage = &amp;#039;Module:Namespace detect/data&amp;#039; 	if useLoadData then 		return mw.loadData(dataPage).mappings 	else 		return...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- This module contains shared functions used by [[Module:Category handler]]&lt;br /&gt;
-- and its submodules.&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
function p.matchesBlacklist(page, blacklist)&lt;br /&gt;
	for i, pattern in ipairs(blacklist) do&lt;br /&gt;
		local match = mw.ustring.match(page, pattern)&lt;br /&gt;
		if match then&lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getParamMappings(useLoadData)&lt;br /&gt;
	local dataPage = &#039;Module:Namespace detect/data&#039;&lt;br /&gt;
	if useLoadData then&lt;br /&gt;
		return mw.loadData(dataPage).mappings&lt;br /&gt;
	else&lt;br /&gt;
		return require(dataPage).mappings&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getNamespaceParameters(titleObj, mappings)&lt;br /&gt;
	-- We don&#039;t use title.nsText for the namespace name because it adds&lt;br /&gt;
	-- underscores.&lt;br /&gt;
	local mappingsKey&lt;br /&gt;
	if titleObj.isTalkPage then&lt;br /&gt;
		mappingsKey = &#039;talk&#039;&lt;br /&gt;
	else&lt;br /&gt;
		mappingsKey = mw.site.namespaces[titleObj.namespace].name&lt;br /&gt;
	end&lt;br /&gt;
	mappingsKey = mw.ustring.lower(mappingsKey)&lt;br /&gt;
	return mappings[mappingsKey] or {}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://en.mippedia.org/index.php?title=Module:Category_handler/data&amp;diff=452</id>
		<title>Module:Category handler/data</title>
		<link rel="alternate" type="text/html" href="https://en.mippedia.org/index.php?title=Module:Category_handler/data&amp;diff=452"/>
		<updated>2026-05-30T18:18:37Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;-- This module assembles data to be passed to Module:Category handler using -- mw.loadData. This includes the configuration data and whether the current -- page matches the title blacklist.  local data = require(&amp;#039;Module:Category handler/config&amp;#039;) local mShared = require(&amp;#039;Module:Category handler/shared&amp;#039;) local blacklist = require(&amp;#039;Module:Category handler/blacklist&amp;#039;) local title = mw.title.getCurrentTitle()  data.currentTitleMatchesBlacklist = mShared.matchesBlacklist(...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- This module assembles data to be passed to [[Module:Category handler]] using&lt;br /&gt;
-- mw.loadData. This includes the configuration data and whether the current&lt;br /&gt;
-- page matches the title blacklist.&lt;br /&gt;
&lt;br /&gt;
local data = require(&#039;Module:Category handler/config&#039;)&lt;br /&gt;
local mShared = require(&#039;Module:Category handler/shared&#039;)&lt;br /&gt;
local blacklist = require(&#039;Module:Category handler/blacklist&#039;)&lt;br /&gt;
local title = mw.title.getCurrentTitle()&lt;br /&gt;
&lt;br /&gt;
data.currentTitleMatchesBlacklist = mShared.matchesBlacklist(&lt;br /&gt;
	title.prefixedText,&lt;br /&gt;
	blacklist&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
data.currentTitleNamespaceParameters = mShared.getNamespaceParameters(&lt;br /&gt;
	title,&lt;br /&gt;
	mShared.getParamMappings()&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
return data&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://en.mippedia.org/index.php?title=Module:Category_handler&amp;diff=451</id>
		<title>Module:Category handler</title>
		<link rel="alternate" type="text/html" href="https://en.mippedia.org/index.php?title=Module:Category_handler&amp;diff=451"/>
		<updated>2026-05-30T18:17:50Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;-------------------------------------------------------------------------------- --                                                                            -- --                              CATEGORY HANDLER                              -- --                                                                            -- --      This module implements the {{category handler}} template in Lua,      -- --      with a few improvements: all namespaces and all namespace alia...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;--------------------------------------------------------------------------------&lt;br /&gt;
--                                                                            --&lt;br /&gt;
--                              CATEGORY HANDLER                              --&lt;br /&gt;
--                                                                            --&lt;br /&gt;
--      This module implements the {{category handler}} template in Lua,      --&lt;br /&gt;
--      with a few improvements: all namespaces and all namespace aliases     --&lt;br /&gt;
--      are supported, and namespace names are detected automatically for     --&lt;br /&gt;
--      the local wiki. This module requires [[Module:Namespace detect]]      --&lt;br /&gt;
--      and [[Module:Yesno]] to be available on the local wiki. It can be     --&lt;br /&gt;
--      configured for different wikis by altering the values in              --&lt;br /&gt;
--      [[Module:Category handler/config]], and pages can be blacklisted      --&lt;br /&gt;
--      from categorisation by using [[Module:Category handler/blacklist]].   --&lt;br /&gt;
--                                                                            --&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-- Load required modules&lt;br /&gt;
local yesno = require(&#039;Module:Yesno&#039;)&lt;br /&gt;
&lt;br /&gt;
-- Lazily load things we don&#039;t always need&lt;br /&gt;
local mShared, mappings&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Helper functions&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local function trimWhitespace(s, removeBlanks)&lt;br /&gt;
	if type(s) ~= &#039;string&#039; then&lt;br /&gt;
		return s&lt;br /&gt;
	end&lt;br /&gt;
	s = s:match(&#039;^%s*(.-)%s*$&#039;)&lt;br /&gt;
	if removeBlanks then&lt;br /&gt;
		if s ~= &#039;&#039; then&lt;br /&gt;
			return s&lt;br /&gt;
		else&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		return s&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- CategoryHandler class&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local CategoryHandler = {}&lt;br /&gt;
CategoryHandler.__index = CategoryHandler&lt;br /&gt;
&lt;br /&gt;
function CategoryHandler.new(data, args)&lt;br /&gt;
	local obj = setmetatable({ _data = data, _args = args }, CategoryHandler)&lt;br /&gt;
	&lt;br /&gt;
	-- Set the title object&lt;br /&gt;
	do&lt;br /&gt;
		local pagename = obj:parameter(&#039;demopage&#039;)&lt;br /&gt;
		local success, titleObj&lt;br /&gt;
		if pagename then&lt;br /&gt;
			success, titleObj = pcall(mw.title.new, pagename)&lt;br /&gt;
		end&lt;br /&gt;
		if success and titleObj then&lt;br /&gt;
			obj.title = titleObj&lt;br /&gt;
			if titleObj == mw.title.getCurrentTitle() then&lt;br /&gt;
				obj._usesCurrentTitle = true&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			obj.title = mw.title.getCurrentTitle()&lt;br /&gt;
			obj._usesCurrentTitle = true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Set suppression parameter values&lt;br /&gt;
	for _, key in ipairs{&#039;nocat&#039;, &#039;categories&#039;} do&lt;br /&gt;
		local value = obj:parameter(key)&lt;br /&gt;
		value = trimWhitespace(value, true)&lt;br /&gt;
		obj[&#039;_&#039; .. key] = yesno(value)&lt;br /&gt;
	end&lt;br /&gt;
	do&lt;br /&gt;
		local subpage = obj:parameter(&#039;subpage&#039;)&lt;br /&gt;
		local category2 = obj:parameter(&#039;category2&#039;)&lt;br /&gt;
		if type(subpage) == &#039;string&#039; then&lt;br /&gt;
			subpage = mw.ustring.lower(subpage)&lt;br /&gt;
		end&lt;br /&gt;
		if type(category2) == &#039;string&#039; then&lt;br /&gt;
			subpage = mw.ustring.lower(category2)&lt;br /&gt;
		end&lt;br /&gt;
		obj._subpage = trimWhitespace(subpage, true)&lt;br /&gt;
		obj._category2 = trimWhitespace(category2) -- don&#039;t remove blank values&lt;br /&gt;
	end&lt;br /&gt;
	return obj&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function CategoryHandler:parameter(key)&lt;br /&gt;
	local parameterNames = self._data.parameters[key]&lt;br /&gt;
	local pntype = type(parameterNames)&lt;br /&gt;
	if pntype == &#039;string&#039; or pntype == &#039;number&#039; then&lt;br /&gt;
		return self._args[parameterNames]&lt;br /&gt;
	elseif pntype == &#039;table&#039; then&lt;br /&gt;
		for _, name in ipairs(parameterNames) do&lt;br /&gt;
			local value = self._args[name]&lt;br /&gt;
			if value ~= nil then&lt;br /&gt;
				return value&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return nil&lt;br /&gt;
	else&lt;br /&gt;
		error(string.format(&lt;br /&gt;
			&#039;invalid config key &amp;quot;%s&amp;quot;&#039;,&lt;br /&gt;
			tostring(key)&lt;br /&gt;
		), 2)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function CategoryHandler:isSuppressedByArguments()&lt;br /&gt;
	return&lt;br /&gt;
		-- See if a category suppression argument has been set.&lt;br /&gt;
		self._nocat == true&lt;br /&gt;
		or self._categories == false&lt;br /&gt;
		or (&lt;br /&gt;
			self._category2&lt;br /&gt;
			and self._category2 ~= self._data.category2Yes&lt;br /&gt;
			and self._category2 ~= self._data.category2Negative&lt;br /&gt;
		)&lt;br /&gt;
&lt;br /&gt;
		-- Check whether we are on a subpage, and see if categories are&lt;br /&gt;
		-- suppressed based on our subpage status.&lt;br /&gt;
		or self._subpage == self._data.subpageNo and self.title.isSubpage&lt;br /&gt;
		or self._subpage == self._data.subpageOnly and not self.title.isSubpage&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function CategoryHandler:shouldSkipBlacklistCheck()&lt;br /&gt;
	-- Check whether the category suppression arguments indicate we&lt;br /&gt;
	-- should skip the blacklist check.&lt;br /&gt;
	return self._nocat == false&lt;br /&gt;
		or self._categories == true&lt;br /&gt;
		or self._category2 == self._data.category2Yes&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function CategoryHandler:matchesBlacklist()&lt;br /&gt;
	if self._usesCurrentTitle then&lt;br /&gt;
		return self._data.currentTitleMatchesBlacklist&lt;br /&gt;
	else&lt;br /&gt;
		mShared = mShared or require(&#039;Module:Category handler/shared&#039;)&lt;br /&gt;
		return mShared.matchesBlacklist(&lt;br /&gt;
			self.title.prefixedText,&lt;br /&gt;
			mw.loadData(&#039;Module:Category handler/blacklist&#039;)&lt;br /&gt;
		)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function CategoryHandler:isSuppressed()&lt;br /&gt;
	-- Find if categories are suppressed by either the arguments or by&lt;br /&gt;
	-- matching the blacklist.&lt;br /&gt;
	return self:isSuppressedByArguments()&lt;br /&gt;
		or not self:shouldSkipBlacklistCheck() and self:matchesBlacklist()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function CategoryHandler:getNamespaceParameters()&lt;br /&gt;
	if self._usesCurrentTitle then&lt;br /&gt;
		return self._data.currentTitleNamespaceParameters&lt;br /&gt;
	else&lt;br /&gt;
		if not mappings then&lt;br /&gt;
			mShared = mShared or require(&#039;Module:Category handler/shared&#039;)&lt;br /&gt;
			mappings = mShared.getParamMappings(true) -- gets mappings with mw.loadData&lt;br /&gt;
		end&lt;br /&gt;
		return mShared.getNamespaceParameters(&lt;br /&gt;
			self.title,&lt;br /&gt;
			mappings&lt;br /&gt;
		)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function CategoryHandler:namespaceParametersExist()&lt;br /&gt;
	-- Find whether any namespace parameters have been specified.&lt;br /&gt;
	-- We use the order &amp;quot;all&amp;quot; --&amp;gt; namespace params --&amp;gt; &amp;quot;other&amp;quot; as this is what&lt;br /&gt;
	-- the old template did.&lt;br /&gt;
	if self:parameter(&#039;all&#039;) then&lt;br /&gt;
		return true&lt;br /&gt;
	end&lt;br /&gt;
	if not mappings then&lt;br /&gt;
		mShared = mShared or require(&#039;Module:Category handler/shared&#039;)&lt;br /&gt;
		mappings = mShared.getParamMappings(true) -- gets mappings with mw.loadData&lt;br /&gt;
	end&lt;br /&gt;
	for ns, params in pairs(mappings) do&lt;br /&gt;
		for i, param in ipairs(params) do&lt;br /&gt;
			if self._args[param] then&lt;br /&gt;
				return true&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if self:parameter(&#039;other&#039;) then&lt;br /&gt;
		return true&lt;br /&gt;
	end&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function CategoryHandler:getCategories()&lt;br /&gt;
	local params = self:getNamespaceParameters()&lt;br /&gt;
	local nsCategory&lt;br /&gt;
	for i, param in ipairs(params) do&lt;br /&gt;
		local value = self._args[param]&lt;br /&gt;
		if value ~= nil then&lt;br /&gt;
			nsCategory = value&lt;br /&gt;
			break&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if nsCategory ~= nil or self:namespaceParametersExist() then&lt;br /&gt;
		-- Namespace parameters exist - advanced usage.&lt;br /&gt;
		if nsCategory == nil then&lt;br /&gt;
			nsCategory = self:parameter(&#039;other&#039;)&lt;br /&gt;
		end&lt;br /&gt;
		local ret = {self:parameter(&#039;all&#039;)}&lt;br /&gt;
		local numParam = tonumber(nsCategory)&lt;br /&gt;
		if numParam and numParam &amp;gt;= 1 and math.floor(numParam) == numParam then&lt;br /&gt;
			-- nsCategory is an integer&lt;br /&gt;
			ret[#ret + 1] = self._args[numParam]&lt;br /&gt;
		else&lt;br /&gt;
			ret[#ret + 1] = nsCategory&lt;br /&gt;
		end&lt;br /&gt;
		if #ret &amp;lt; 1 then&lt;br /&gt;
			return nil&lt;br /&gt;
		else&lt;br /&gt;
			return table.concat(ret)&lt;br /&gt;
		end&lt;br /&gt;
	elseif self._data.defaultNamespaces[self.title.namespace] then&lt;br /&gt;
		-- Namespace parameters don&#039;t exist, simple usage.&lt;br /&gt;
		return self._args[1]&lt;br /&gt;
	end&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Exports&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
function p._exportClasses()&lt;br /&gt;
	-- Used for testing purposes.&lt;br /&gt;
	return {&lt;br /&gt;
		CategoryHandler = CategoryHandler&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._main(args, data)&lt;br /&gt;
	data = data or mw.loadData(&#039;Module:Category handler/data&#039;)&lt;br /&gt;
	local handler = CategoryHandler.new(data, args)&lt;br /&gt;
	if handler:isSuppressed() then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	return handler:getCategories()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame, data)&lt;br /&gt;
	data = data or mw.loadData(&#039;Module:Category handler/data&#039;)&lt;br /&gt;
	local args = require(&#039;Module:Arguments&#039;).getArgs(frame, {&lt;br /&gt;
		wrappers = data.wrappers,&lt;br /&gt;
		valueFunc = function (k, v)&lt;br /&gt;
			v = trimWhitespace(v)&lt;br /&gt;
			if type(k) == &#039;number&#039; then&lt;br /&gt;
				if v ~= &#039;&#039; then&lt;br /&gt;
					return v&lt;br /&gt;
				else&lt;br /&gt;
					return nil&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				return v&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	})&lt;br /&gt;
	return p._main(args, data)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://en.mippedia.org/index.php?title=Template:Category_handler&amp;diff=450</id>
		<title>Template:Category handler</title>
		<link rel="alternate" type="text/html" href="https://en.mippedia.org/index.php?title=Template:Category_handler&amp;diff=450"/>
		<updated>2026-05-30T18:16:56Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;{{#invoke:Category handler|main}}&amp;lt;noinclude&amp;gt; {{documentation}} &amp;lt;/noinclude&amp;gt;&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#invoke:Category handler|main}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://en.mippedia.org/index.php?title=Template:Infobox_album/color&amp;diff=449</id>
		<title>Template:Infobox album/color</title>
		<link rel="alternate" type="text/html" href="https://en.mippedia.org/index.php?title=Template:Infobox_album/color&amp;diff=449"/>
		<updated>2026-05-30T18:15:57Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;&amp;lt;includeonly&amp;gt;{{#switch: {{lc:{{delink|{{{1|}}}}}}}&amp;lt;!--  --&amp;gt;|studio album|studio|album    |tribute|tribute album    |cover album|cover    |double album    |demo                                          = lightsteelblue&amp;lt;!--  --&amp;gt;|extended play|ep    |single album                                  = &amp;amp;#32;#F4BF92&amp;lt;!--  --&amp;gt;|live album|live                               = burlywood&amp;lt;!--  --&amp;gt;|compilation album|compilation    |greatest hits|greatest    |box set|box    |remix album|r...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{#switch: {{lc:{{delink|{{{1|}}}}}}}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;|studio album|studio|album&lt;br /&gt;
   |tribute|tribute album&lt;br /&gt;
   |cover album|cover&lt;br /&gt;
   |double album&lt;br /&gt;
   |demo                                          = lightsteelblue&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;|extended play|ep&lt;br /&gt;
   |single album                                  = &amp;amp;#32;#F4BF92&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;|live album|live                               = burlywood&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;|compilation album|compilation&lt;br /&gt;
   |greatest hits|greatest&lt;br /&gt;
   |box set|box&lt;br /&gt;
   |remix album|remix&lt;br /&gt;
   |mixtape                                       = &amp;amp;#32;#BFE0BF&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;|soundtrack album|soundtrack&lt;br /&gt;
   |television theme|television&lt;br /&gt;
   |film score|film&lt;br /&gt;
   |cast recording|cast album|cast                = gainsboro&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;|video|dvd                                     = &amp;amp;#32;#99CCFF&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;|single|singles                                = khaki&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;|song                                          = &amp;amp;#32;#E6E8FA&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;|other                                         = peachpuff&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;|{{#if:{{{2|}}}|{{{2}}}|peachpuff}}&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://en.mippedia.org/index.php?title=Module:Unsubst-infobox&amp;diff=448</id>
		<title>Module:Unsubst-infobox</title>
		<link rel="alternate" type="text/html" href="https://en.mippedia.org/index.php?title=Module:Unsubst-infobox&amp;diff=448"/>
		<updated>2026-05-30T18:14:48Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;local p = {}  local specialParams = { 	[&amp;#039;$params&amp;#039;] = &amp;#039;all parameters&amp;#039;, 	[&amp;#039;$extra&amp;#039;] = &amp;#039;extra parameters&amp;#039;, 	[&amp;#039;$set1&amp;#039;] = &amp;#039;parameter set 1&amp;#039;, 	[&amp;#039;$set2&amp;#039;] = &amp;#039;parameter set 2&amp;#039;, 	[&amp;#039;$set3&amp;#039;] = &amp;#039;parameter set 3&amp;#039;, 	[&amp;#039;$aliases&amp;#039;] = &amp;#039;parameter aliases&amp;#039;, 	[&amp;#039;$indent&amp;#039;] = &amp;#039;indent&amp;#039;, 	[&amp;#039;$flags&amp;#039;] = &amp;#039;flags&amp;#039;, 	[&amp;#039;$B&amp;#039;] = &amp;#039;template content&amp;#039;, 	[&amp;#039;$template-name&amp;#039;] = &amp;#039;template invocation name override&amp;#039; }  p[&amp;#039;&amp;#039;] = function ( frame ) 	if not frame:getParent() then 		error( &amp;#039;{{#invoke:Unsubst-infobox|}} m...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
local specialParams = {&lt;br /&gt;
	[&#039;$params&#039;] = &#039;all parameters&#039;,&lt;br /&gt;
	[&#039;$extra&#039;] = &#039;extra parameters&#039;,&lt;br /&gt;
	[&#039;$set1&#039;] = &#039;parameter set 1&#039;,&lt;br /&gt;
	[&#039;$set2&#039;] = &#039;parameter set 2&#039;,&lt;br /&gt;
	[&#039;$set3&#039;] = &#039;parameter set 3&#039;,&lt;br /&gt;
	[&#039;$aliases&#039;] = &#039;parameter aliases&#039;,&lt;br /&gt;
	[&#039;$indent&#039;] = &#039;indent&#039;,&lt;br /&gt;
	[&#039;$flags&#039;] = &#039;flags&#039;,&lt;br /&gt;
	[&#039;$B&#039;] = &#039;template content&#039;,&lt;br /&gt;
	[&#039;$template-name&#039;] = &#039;template invocation name override&#039;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
p[&#039;&#039;] = function ( frame )&lt;br /&gt;
	if not frame:getParent() then&lt;br /&gt;
		error( &#039;{{#invoke:Unsubst-infobox|}} makes no sense without a parent frame&#039; )&lt;br /&gt;
	end&lt;br /&gt;
	if not frame.args[&#039;$B&#039;] then&lt;br /&gt;
		error( &#039;{{#invoke:Unsubst-infobox|}} requires parameter $B (template content)&#039; )&lt;br /&gt;
	end&lt;br /&gt;
	if not frame.args[&#039;$params&#039;] then&lt;br /&gt;
		error( &#039;{{#invoke:Unsubst-infobox|}} requires parameter $params (parameter list)&#039; )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if mw.isSubsting() then&lt;br /&gt;
		---- substing&lt;br /&gt;
		-- Combine passed args with passed defaults&lt;br /&gt;
		local args = {}&lt;br /&gt;
		if string.find( &#039;,&#039;..(frame.args[&#039;$flags&#039;] or &#039;&#039;)..&#039;,&#039;, &#039;,%s*override%s*,&#039; ) then&lt;br /&gt;
			for k, v in pairs( frame:getParent().args ) do&lt;br /&gt;
				args[k] = v&lt;br /&gt;
			end&lt;br /&gt;
			for k, v in pairs( frame.args ) do&lt;br /&gt;
				if not specialParams[k] then&lt;br /&gt;
					if v == &#039;__DATE__&#039; then&lt;br /&gt;
						v = mw.getContentLanguage():formatDate( &#039;F Y&#039; )&lt;br /&gt;
					end&lt;br /&gt;
					args[k] = v&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			for k, v in pairs( frame.args ) do&lt;br /&gt;
				if not specialParams[k] then&lt;br /&gt;
					if v == &#039;__DATE__&#039; then&lt;br /&gt;
						v = mw.getContentLanguage():formatDate( &#039;F Y&#039; )&lt;br /&gt;
					end&lt;br /&gt;
					args[k] = v&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			for k, v in pairs( frame:getParent().args ) do&lt;br /&gt;
				args[k] = v&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- Build an equivalent template invocation&lt;br /&gt;
		-- First, find the title to use&lt;br /&gt;
		local titleobj = mw.title.new(frame:getParent():getTitle())&lt;br /&gt;
		local title&lt;br /&gt;
		if titleobj.namespace == 10 then -- NS_TEMPLATE&lt;br /&gt;
			title = titleobj.text&lt;br /&gt;
		elseif titleobj.namespace == 0 then -- NS_MAIN&lt;br /&gt;
			title = &#039;:&#039; .. titleobj.text&lt;br /&gt;
		else&lt;br /&gt;
			title = titleobj.prefixedText&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if frame.args[&#039;$template-name&#039;] and &#039;&#039; ~= frame.args[&#039;$template-name&#039;] then&lt;br /&gt;
			title = frame.args[&#039;$template-name&#039;] -- override whatever the template name is with this name&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- Remove empty fields&lt;br /&gt;
		for k, v in pairs( args ) do&lt;br /&gt;
			if v == &#039;&#039; then args[k] = nil end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- Pull information from parameter aliases&lt;br /&gt;
		local aliases, extra = {}, {}&lt;br /&gt;
		if frame.args[&#039;$aliases&#039;] then&lt;br /&gt;
			local list = mw.text.split( frame.args[&#039;$aliases&#039;], &#039;%s*,%s*&#039; )&lt;br /&gt;
			for k, v in ipairs( list ) do&lt;br /&gt;
				local tmp = mw.text.split( v, &#039;%s*&amp;gt;%s*&#039; )&lt;br /&gt;
				local alias = (tonumber(mw.ustring.match(tmp[1], &#039;^[1-9][0-9]*$&#039;))) or tmp[1]&lt;br /&gt;
				aliases[alias] = ((tonumber(mw.ustring.match(tmp[2], &#039;^[1-9][0-9]*$&#039;))) or tmp[2])&lt;br /&gt;
				extra[alias] = true&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		for k, v in pairs( aliases ) do&lt;br /&gt;
			if args[k] and not args[v] then args[v], args[k] = args[k], nil end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- Build the invocation body with numbered args first, then named&lt;br /&gt;
		local ret = &#039;{{&#039; .. title&lt;br /&gt;
		for k, v in ipairs( args ) do&lt;br /&gt;
			if mw.ustring.find( v, &#039;=&#039;, 1, true ) then&lt;br /&gt;
				-- likely something like 1=foo=bar, we need to do it as a named arg&lt;br /&gt;
				break&lt;br /&gt;
			end&lt;br /&gt;
			ret = ret .. &#039;|&#039; .. v&lt;br /&gt;
			args[k] = nil&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- Pull lists from special parameters&lt;br /&gt;
		local discard = {}&lt;br /&gt;
		local params = mw.text.split( frame.args[&#039;$params&#039;], &#039;%s*,%s*&#039; )&lt;br /&gt;
		for k, v in ipairs( params ) do&lt;br /&gt;
			-- Numbered args don&#039;t go here&lt;br /&gt;
			if mw.ustring.match(v, &#039;^[1-9][0-9]*$&#039;) then&lt;br /&gt;
				table.insert( discard, 1, k )&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		for k, v in ipairs( discard ) do table.remove( params, v ) end&lt;br /&gt;
		local sets, setparams = {{}, {}, {}}, {}&lt;br /&gt;
		for k = 1, 3 do&lt;br /&gt;
			local v = frame.args[&#039;$set&#039; .. k]&lt;br /&gt;
			if v then&lt;br /&gt;
				setparams[k] = mw.text.split( v, &#039;%s*,%s*&#039; )&lt;br /&gt;
				discard = {}&lt;br /&gt;
				for x, y in ipairs( setparams[k] ) do&lt;br /&gt;
					sets[k][setparams[k][x]] = true&lt;br /&gt;
					-- Numbered args don&#039;t go here&lt;br /&gt;
					if mw.ustring.match(y, &#039;^[1-9][0-9]*$&#039;) then&lt;br /&gt;
						table.insert( discard, 1, x )&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
    			for x, y in ipairs( discard ) do table.remove( setparams[k], y ) end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if frame.args[&#039;$extra&#039;] then&lt;br /&gt;
			local tmp = mw.text.split( frame.args[&#039;$extra&#039;], &#039;%s*,%s*&#039; )&lt;br /&gt;
			for k, v in ipairs( tmp ) do extra[(tonumber(mw.ustring.match(v, &#039;^[1-9][0-9]*$&#039;))) or v] = true end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- Replace parameter list with short version if full version not necessary&lt;br /&gt;
		local tmp = {}&lt;br /&gt;
		for k, v in ipairs( sets ) do&lt;br /&gt;
			if next(v) then  -- if table v is not empty&lt;br /&gt;
				for _, x in ipairs( params ) do&lt;br /&gt;
					if args[x] and not v[x] then&lt;br /&gt;
						tmp[k] = true&lt;br /&gt;
						break&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				if not tmp[k] then params = setparams[k] end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- Align parameters correctly and remove extra ones&lt;br /&gt;
		local maxlength = 0&lt;br /&gt;
		discard = {}&lt;br /&gt;
		for k, v in ipairs( params ) do&lt;br /&gt;
			if (not extra[v]) or args[v] then&lt;br /&gt;
				local tmp = mw.ustring.len( tostring( v ) )&lt;br /&gt;
				if tmp &amp;gt; maxlength then maxlength = tmp end&lt;br /&gt;
			else&lt;br /&gt;
				table.insert( discard, 1, k )&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		for k, v in ipairs( discard ) do table.remove( params, v ) end&lt;br /&gt;
		local indent = mw.ustring.rep(&#039; &#039;, (tonumber(frame.args[&#039;$indent&#039;]) or 0))&lt;br /&gt;
		-- Numbered args after discontinuity continue first&lt;br /&gt;
		discard = {}&lt;br /&gt;
		for k, v in pairs( args ) do&lt;br /&gt;
			if mw.ustring.match(k, &#039;^[1-9][0-9]*$&#039;) then table.insert ( discard, 1, k ) end&lt;br /&gt;
		end&lt;br /&gt;
		for k, v in ipairs( discard ) do table.insert( params, 1, v ) end&lt;br /&gt;
&lt;br /&gt;
		local space, newline = &#039; &#039;, &#039;\n&#039;&lt;br /&gt;
		if not next(params) then space, newline = &#039;&#039;, &#039;&#039; end&lt;br /&gt;
&lt;br /&gt;
		for k, v in ipairs( params ) do&lt;br /&gt;
			local tmp = space&lt;br /&gt;
			if mw.ustring.match( mw.ustring.sub( ( args[v] or &#039;&#039; ) .. &#039; &#039;, 1, 1 ), &#039;[%*:;#]&#039; ) then tmp = &#039;\n&#039; end&lt;br /&gt;
			ret = ret .. newline .. indent .. &#039;|&#039; .. space .. v .. string.rep(&#039; &#039;, (maxlength - mw.ustring.len( v ))) .. space .. &#039;=&#039; .. tmp .. (args[v] or &#039;&#039;)&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		ret = ret .. newline .. &#039;}}&#039;&lt;br /&gt;
&lt;br /&gt;
		ret = mw.ustring.gsub(ret, &#039;%s+\n&#039;, &#039;\n&#039;)&lt;br /&gt;
&lt;br /&gt;
		return ret&lt;br /&gt;
	else&lt;br /&gt;
		-- Not substing&lt;br /&gt;
		-- Just return the &amp;quot;body&amp;quot;&lt;br /&gt;
		return frame.args[&#039;$B&#039;]&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://en.mippedia.org/index.php?title=Template:Infobox_album&amp;diff=447</id>
		<title>Template:Infobox album</title>
		<link rel="alternate" type="text/html" href="https://en.mippedia.org/index.php?title=Template:Infobox_album&amp;diff=447"/>
		<updated>2026-05-30T18:13:32Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;{{&amp;lt;includeonly&amp;gt;safesubst:&amp;lt;/includeonly&amp;gt;#invoke:Unsubst-infobox||$params=italic_title,name,type,longtype,artist,cover,imageclass,border,alt,caption,released,recorded,venue,studio,genre,length,language,label,director,producer,compiler,chronology,prev_title,prev_year,year,next_title,next_year,misc|$extra=italic_title,longtype,border,caption,language,director,compiler,chronology,year,misc|$aliases=italic title&amp;gt;italic_title,Italic title&amp;gt;italic_title,Name&amp;gt;name,Type&amp;gt;type,image&amp;gt;...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{&amp;lt;includeonly&amp;gt;safesubst:&amp;lt;/includeonly&amp;gt;#invoke:Unsubst-infobox||$params=italic_title,name,type,longtype,artist,cover,imageclass,border,alt,caption,released,recorded,venue,studio,genre,length,language,label,director,producer,compiler,chronology,prev_title,prev_year,year,next_title,next_year,misc|$extra=italic_title,longtype,border,caption,language,director,compiler,chronology,year,misc|$aliases=italic title&amp;gt;italic_title,Italic title&amp;gt;italic_title,Name&amp;gt;name,Type&amp;gt;type,image&amp;gt;cover,Cover&amp;gt;cover,Border&amp;gt;border,Alt&amp;gt;alt,Caption&amp;gt;caption,Longtype&amp;gt;longtype,Artist&amp;gt;artist,Released&amp;gt;released,Recorded&amp;gt;recorded,Venue&amp;gt;venue,Studio&amp;gt;studio,Genre&amp;gt;genre,Length&amp;gt;length,Language&amp;gt;language,Label&amp;gt;label,Director&amp;gt;director,Producer&amp;gt;producer,Compiler&amp;gt;compiler,Chronology&amp;gt;chronology,Misc&amp;gt;misc|$flags=override|$B={{#ifeq:{{#invoke:Is infobox in lead|main|[Ii]nfobox [Aa]lbum}}|true|{{#if:{{Has short description}} |&amp;lt;!--Do nothing--&amp;gt; |{{#if: {{{released|}}} | {{short description|{{#invoke:Plain text|main|{{#if:{{#invoke:string|match|{{{released|}}}|%d%d%d%d|ignore_errors = true}}|{{#invoke:string|match|{{{released|}}}|%d%d%d%d|ignore_errors = true}} {{#switch:{{Infobox album/link|{{{type|}}} }}|[[Extended play|EP]] = EP|#default = {{lc:{{Infobox album/link|{{{type|}}} }}}}}}|{{Infobox album/link|{{{type|}}} }}}}{{#if:{{{longtype|}}}|&amp;amp;#32;{{{longtype|}}}}}{{#if:{{{artist|}}}|&amp;amp;#32;by {{{artist|}}}}}}}|noreplace}}}}}}}}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;{{Infobox&lt;br /&gt;
| italic title= {{if empty|{{{italic_title|}}}|&amp;lt;noinclude&amp;gt;no&amp;lt;/noinclude&amp;gt;}}&lt;br /&gt;
| bodyclass   = vevent haudio&lt;br /&gt;
&lt;br /&gt;
| aboveclass  = summary album&lt;br /&gt;
| abovestyle  = font-style: italic; color: inherit; background-color: {{#ifeq:{{Infobox album/color|{{{type|}}}}}|khaki|{{Infobox album/color}}|{{Infobox album/color|{{{type|}}} }} }}; font-size: 125%;&lt;br /&gt;
| above       = {{if empty|{{encodefirst|1={{{name|}}}}}|&amp;lt;includeonly&amp;gt;&amp;lt;span style=&amp;quot;font-style: normal&amp;quot;&amp;gt;Untitled&amp;lt;/span&amp;gt;&amp;lt;/includeonly&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
| image       = {{#invoke:InfoboxImage|InfoboxImage|image={{#switch:{{if empty|{{{image|}}}|{{{cover|}}}}}|blank=|???=Nocover.png|#default={{if empty|{{{image|}}}|{{{cover|}}}}}}}|border={{{border|}}}|alt={{{alt|}}}|title={{{alt|}}}}}&lt;br /&gt;
| imageclass = {{{imageclass|}}}&lt;br /&gt;
| caption     = {{{caption|}}}&lt;br /&gt;
&lt;br /&gt;
| headerstyle = color: #202122;background-color: {{#ifeq:{{Infobox album/color|{{{type|}}}}}|khaki|{{Infobox album/color}}|{{Infobox album/color|{{{type|}}}}}}}&lt;br /&gt;
| headerclass = description&lt;br /&gt;
&lt;br /&gt;
| header1     = &amp;lt;includeonly&amp;gt;{{Infobox album/link|{{{type|}}} }}&amp;lt;/includeonly&amp;gt;{{#if:{{{longtype|}}}|&amp;amp;#32;{{{longtype|}}}}}{{#if:{{{artist|}}}|&amp;amp;#32;by &amp;lt;div class=&amp;quot;contributor&amp;quot; style=&amp;quot;display:inline&amp;quot;&amp;gt;{{{artist|}}}&amp;lt;/div&amp;gt; }}&lt;br /&gt;
| label2      = Released&lt;br /&gt;
| data2       = {{{released|}}}&lt;br /&gt;
| class2      = published&lt;br /&gt;
| label3      = Recorded&lt;br /&gt;
| data3       = {{{recorded|}}}&lt;br /&gt;
| class3      = plainlist&lt;br /&gt;
| label4      = Venue&lt;br /&gt;
| data4       = {{{venue|}}}&lt;br /&gt;
| label5      = Studio&lt;br /&gt;
| data5       = {{{studio|}}}&lt;br /&gt;
| class5      = plainlist&lt;br /&gt;
| label6      = [[Music genre|Genre]]&lt;br /&gt;
| data6       = {{{genre|}}}&lt;br /&gt;
| class6      = category hlist&lt;br /&gt;
| label7      = Length&lt;br /&gt;
| data7       = {{#invoke:hms|main|duration={{{length|}}}}}&lt;br /&gt;
| label8      = Language&lt;br /&gt;
| data8       = {{{language|}}}&lt;br /&gt;
| class8      = category&lt;br /&gt;
| label9      = [[Record label|Label]]&lt;br /&gt;
| data9       = {{{label|}}}&lt;br /&gt;
| class9      = hlist&lt;br /&gt;
| label10     = [[Film director|Director]]&lt;br /&gt;
| data10      = {{{director|}}}&lt;br /&gt;
| class10     = hlist&lt;br /&gt;
| label11     = [[Record producer|Producer]]&lt;br /&gt;
| data11      = {{{producer|}}}&lt;br /&gt;
| class11     = hlist&lt;br /&gt;
| label12     = Compiler&lt;br /&gt;
| data12      = {{{compiler|}}}&lt;br /&gt;
| class12     = hlist&lt;br /&gt;
&lt;br /&gt;
| header13    = {{#if:{{{prev_title|}}}{{{next_title|}}}|{{#if:{{{chronology|}}}|{{{chronology|}}}|{{#ifeq: {{str letter|{{delink| {{{artist|}}} }}}}|0|{{{artist|}}}|{{#invoke:String2 | ucfirst |{{{artist|}}}}}}}}} chronology }}&lt;br /&gt;
| data14      = {{#if:{{{prev_title|}}}{{{next_title|}}}|&lt;br /&gt;
{{(!}} role=&amp;quot;presentation&amp;quot; style=&amp;quot;color:inherit; background: transparent; width: 100%; min-width: 100%; border-collapse: collapse; display: inline-table;&amp;quot;&lt;br /&gt;
{{!}}- style=&amp;quot;line-height: 1.4em;&amp;quot;&lt;br /&gt;
{{!}} style=&amp;quot;width: 33%; text-align: center; vertical-align: top; padding: .2em .1em .2em 0&amp;quot; {{!}} {{#if:{{{prev_title|}}}|&#039;&#039;{{{prev_title}}}&#039;&#039;{{#if:{{{prev_year|}}}|&amp;lt;br /&amp;gt;({{{prev_year}}})}}|}}&lt;br /&gt;
{{!}} style=&amp;quot;width: 33%; text-align: center; vertical-align: top; padding: .2em .1em&amp;quot; {{!}} &#039;&#039;&#039;&#039;&#039;{{if empty|{{encodefirst|1={{{name|}}}}}|{{PAGENAMEBASE}}}}&#039;&#039;&#039;&#039;&#039;{{#if:{{{next_year|}}}{{{prev_year|}}}|&amp;lt;br /&amp;gt;({{{year|{{#invoke:String|match|error_category=Music infoboxes with Module:String errors{{!}}A|{{{released|}}}|%d%d%d+}}}}})}}&lt;br /&gt;
{{!}} style=&amp;quot;width: 33%; text-align: center; vertical-align: top; padding: .2em 0 .2em .1em&amp;quot; {{!}} {{#if:{{{next_title|}}}|&#039;&#039;{{{next_title}}}&#039;&#039;{{#if:{{{next_year|}}}|&amp;lt;br /&amp;gt;({{{next_year}}})}}|}}&lt;br /&gt;
{{!)}}&lt;br /&gt;
}}&lt;br /&gt;
| below       = {{{misc|}}}&lt;br /&gt;
}}{{category handler&lt;br /&gt;
 |main={{#ifeq:{{Infobox album/color|{{{type|}}}|Test}}|Test&lt;br /&gt;
  |[[Category:Album articles with non-standard infoboxes]]&lt;br /&gt;
 }}{{#ifeq:{{Infobox album/color|{{{type|}}}}}|khaki&lt;br /&gt;
  |[[Category:Album articles with non-standard infoboxes]][[Category:Song articles needing single infobox conversion]]&lt;br /&gt;
 }}[[Category:Articles with hAudio microformats]]{{#switch:{{lc:{{if empty|{{{image|}}}|{{{cover|}}}}}}}&lt;br /&gt;
  |&lt;br /&gt;
  |???&lt;br /&gt;
  |nocover.png = {{#ifeq:{{#invoke:Is infobox in lead|main|[Ii]nfobox [Aa]lbum}}|true|[[Category:Album infoboxes lacking a cover]]}}&lt;br /&gt;
 }}{{#switch:{{lc:{{if empty|{{{image|}}}|{{{alt|}}}}}}}&lt;br /&gt;
  |&lt;br /&gt;
  |??? = {{main other|[[Category:Album articles lacking alt text for covers]]}}&lt;br /&gt;
 }}&lt;br /&gt;
}}{{main other|{{#ifeq:{{{type|}}}||[[Category:Pages using infobox album with empty type parameter]]}}}}{{#invoke:Check for unknown parameters|check|unknown={{main other|[[Category:Pages using infobox album with unknown parameters|_VALUE_{{PAGENAME}}]]}}|preview=Page using [[Template:Infobox album]] with unknown parameter &amp;quot;_VALUE_&amp;quot;|ignoreblank=y|italic_title |type |name |image |cover |imageclass |border |alt |caption |longtype |artist |released |recorded |venue |studio |genre |length |language |label |director |producer |compiler |prev_title|prev_year|next_title|next_year|chronology|year|misc}}{{#if:{{#invoke:String|match|error_category=Music infoboxes with Module:String errors{{!}}A|1={{{prev_title|}}}{{{prev_year|}}}{{{next_title|}}}{{{next_year|}}}{{{italic_title|}}}{{{italic title|}}}{{{type|}}}{{{name|}}}{{{image|}}}{{{imageclass|}}}{{{cover|}}}{{{border|}}}{{{alt|}}}{{{caption|}}}{{{longtype|}}}{{{artist|}}}{{{released|}}}{{{recorded|}}}{{{venue|}}}{{{studio|}}}{{{genre|}}}{{{length|}}}{{{language|}}}{{{label|}}}{{{director|}}}{{{producer|}}}{{{compiler|}}}{{{chronology|}}}{{{year|}}}x|2=&amp;lt;/?t[drh][ &amp;gt;]|nomatch=}}|{{main other|[[Category:Music infoboxes with malformed table placement|A]]}}}}{{main other|{{#if:{{{length|}}}|{{#if:{{#invoke:String|match|error_category=Music infoboxes with Module:String errors{{!}}A|1={{#invoke:hms|main|duration={{{length|}}}}}|2=class=&amp;quot;duration&amp;quot;|plain=true|nomatch=}}|[[Category:Articles with hAudio microformats]]}}}}}}}}{{#invoke:Check for conflicting parameters|check&lt;br /&gt;
| template = [[Template:Infobox album]]&lt;br /&gt;
| cat = {{main other|Category:Pages using infobox album with conflicting parameters}}&lt;br /&gt;
| image; cover &lt;br /&gt;
}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation}}&lt;br /&gt;
&amp;lt;!-- Add categories to the /doc subpage, not here. --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://en.mippedia.org/index.php?title=MediaWiki:Common.css&amp;diff=442</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://en.mippedia.org/index.php?title=MediaWiki:Common.css&amp;diff=442"/>
		<updated>2026-05-30T09:33:20Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* --- FIX UKURAN DAN SKALA LOGO (UNTUK SEMUA SKIN) --- */&lt;br /&gt;
&lt;br /&gt;
/* Menargetkan elemen wadah logo */&lt;br /&gt;
#p-logo {&lt;br /&gt;
    /* Memaksa elemen wadah memiliki ukuran standar */&lt;br /&gt;
    width: 135px;&lt;br /&gt;
    height: 135px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Menargetkan elemen link di dalam wadah logo */&lt;br /&gt;
#p-logo a, .mw-wiki-logo {&lt;br /&gt;
    /* Memaksa ukuran area gambar agar sesuai */&lt;br /&gt;
    width: 135px !important;&lt;br /&gt;
    height: 135px !important;&lt;br /&gt;
    &lt;br /&gt;
    /* Memastikan gambar diskala (terutama untuk SVG) */&lt;br /&gt;
    background-size: contain !important;&lt;br /&gt;
    &lt;br /&gt;
    /* Memastikan gambar berada di tengah dan tidak berulang */&lt;br /&gt;
    background-position: center center !important;&lt;br /&gt;
    background-repeat: no-repeat !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- CAPTCHA STYLING ---------- */&lt;br /&gt;
.captcha-code {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  padding: 10px 16px;&lt;br /&gt;
  font-size: 1.8em;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  font-family: monospace;&lt;br /&gt;
  border-radius: 10px;&lt;br /&gt;
  letter-spacing: 4px;&lt;br /&gt;
  user-select: none;&lt;br /&gt;
  text-shadow: 1px 1px 2px rgba(0,0,0,0.2);&lt;br /&gt;
  margin: 10px auto;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  animation: fadeIn 0.4s ease-in-out;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Bikin background captcha punya warna acak */&lt;br /&gt;
.captcha-code {&lt;br /&gt;
  background: linear-gradient(135deg, #f8f8f8, #e8e8e8);&lt;br /&gt;
  border: 1px solid #bbb;&lt;br /&gt;
  color: #2c3e50;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Variasi warna random */&lt;br /&gt;
.captcha-code:nth-child(3n) {&lt;br /&gt;
  background: linear-gradient(135deg, #e3f2fd, #bbdefb);&lt;br /&gt;
  border-color: #90caf9;&lt;br /&gt;
  color: #0d47a1;&lt;br /&gt;
}&lt;br /&gt;
.captcha-code:nth-child(3n+1) {&lt;br /&gt;
  background: linear-gradient(135deg, #f1f8e9, #dcedc8);&lt;br /&gt;
  border-color: #aed581;&lt;br /&gt;
  color: #33691e;&lt;br /&gt;
}&lt;br /&gt;
.captcha-code:nth-child(3n+2) {&lt;br /&gt;
  background: linear-gradient(135deg, #fff3e0, #ffe0b2);&lt;br /&gt;
  border-color: #ffb74d;&lt;br /&gt;
  color: #e65100;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Label agar center di HP */&lt;br /&gt;
.mw-confirmedit-captcha label {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  margin: 12px 0;&lt;br /&gt;
  font-size: 1em;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  color: #444;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Responsif untuk seluler */&lt;br /&gt;
@media (max-width: 720px) {&lt;br /&gt;
  .captcha-code { font-size: 2.2em; padding: 12px 18px; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Animasi halus saat muncul */&lt;br /&gt;
@keyframes fadeIn {&lt;br /&gt;
  from { opacity: 0; transform: scale(0.9); }&lt;br /&gt;
  to   { opacity: 1; transform: scale(1); }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* === Hilangkan judul &amp;quot;Halaman Utama&amp;quot; di tampilan MobileFrontend === */&lt;br /&gt;
.page-Main_Page #section_0,&lt;br /&gt;
.page-Main_Page .content-header,&lt;br /&gt;
.page-Main_Page h1.firstHeading,&lt;br /&gt;
.page-Main_Page #firstHeading {&lt;br /&gt;
    display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Opsional: rapikan jarak setelah header hilang */&lt;br /&gt;
.page-Main_Page .content {&lt;br /&gt;
    margin-top: 0 !important;&lt;br /&gt;
    padding-top: 0.5em !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen {&lt;br /&gt;
	.infobox {&lt;br /&gt;
		background-color: var(--background-color-neutral-subtle, #f8f9fa);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media (max-width: 640px) {&lt;br /&gt;
	.infobox {&lt;br /&gt;
		width: 100%;&lt;br /&gt;
	}&lt;br /&gt;
    &lt;br /&gt;
	.infobox .nowrap {&lt;br /&gt;
		white-space: normal;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media (min-width: 640px) {&lt;br /&gt;
	.infobox {&lt;br /&gt;
		/* @noflip */&lt;br /&gt;
		margin-left: 1em;&lt;br /&gt;
		/* @noflip */&lt;br /&gt;
		float: right;&lt;br /&gt;
		/* @noflip */&lt;br /&gt;
		clear: right;&lt;br /&gt;
		width: 22em;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-header,&lt;br /&gt;
.infobox-label,&lt;br /&gt;
.infobox-above,&lt;br /&gt;
.infobox-full-data,&lt;br /&gt;
.infobox-data,&lt;br /&gt;
.infobox-below,&lt;br /&gt;
.infobox-subheader,&lt;br /&gt;
.infobox-image,&lt;br /&gt;
.infobox-navbar,&lt;br /&gt;
/* Remove element selector when every .infobox thing is using the standard module/templates  */&lt;br /&gt;
.infobox th,&lt;br /&gt;
.infobox td {&lt;br /&gt;
	vertical-align: top;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-label,&lt;br /&gt;
.infobox-data,&lt;br /&gt;
/* Remove element selector when every .infobox thing is using the standard module/templates  */&lt;br /&gt;
.infobox th,&lt;br /&gt;
.infobox td {&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Remove .infobox when element selectors above are removed */&lt;br /&gt;
.infobox .infobox-above,&lt;br /&gt;
.infobox .infobox-title,&lt;br /&gt;
/* Remove element selector when every .infobox thing is using the standard module/templates  */&lt;br /&gt;
.infobox caption {&lt;br /&gt;
	font-size: 125%;&lt;br /&gt;
	font-weight: bold;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-title,&lt;br /&gt;
/* Remove element selector when every .infobox thing is using the standard module/templates  */&lt;br /&gt;
.infobox caption {&lt;br /&gt;
	padding: 0.2em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Remove .infobox when element selectors above are removed */&lt;br /&gt;
.infobox .infobox-header,&lt;br /&gt;
.infobox .infobox-subheader,&lt;br /&gt;
.infobox .infobox-image,&lt;br /&gt;
.infobox .infobox-full-data,&lt;br /&gt;
.infobox .infobox-below {&lt;br /&gt;
	text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Remove .infobox when element selectors above are removed */&lt;br /&gt;
.infobox .infobox-navbar {&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	text-align: right;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================&lt;br /&gt;
   ➕ HANYA MENAMBAHKAN DI BAWAH INI (Sesuai Perintah)&lt;br /&gt;
   ========================================================== */&lt;br /&gt;
&lt;br /&gt;
/* 1. Menambahkan garis bawah halus abu-abu di setiap baris data */&lt;br /&gt;
.infobox th, &lt;br /&gt;
.infobox td,&lt;br /&gt;
.infobox-label,&lt;br /&gt;
.infobox-data,&lt;br /&gt;
.infobox-header,&lt;br /&gt;
.infobox-subheader {&lt;br /&gt;
	border-bottom: 1px solid #eaecf0;&lt;br /&gt;
	padding: 6px 4px; /* Memberikan space halus agar tidak kaku */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 2. Mengatur ukuran huruf caption foto agak kecil dan TETAP TEGAK (tidak miring) */&lt;br /&gt;
.infobox .infobox-image,&lt;br /&gt;
.infobox tr:has(img) + tr td {&lt;br /&gt;
	font-size: 88% !important;&lt;br /&gt;
	font-style: normal !important;&lt;br /&gt;
	color: #54595d;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#siteSub {&lt;br /&gt;
		display: block;&lt;br /&gt;
	}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://en.mippedia.org/index.php?title=MediaWiki:Common.css&amp;diff=441</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://en.mippedia.org/index.php?title=MediaWiki:Common.css&amp;diff=441"/>
		<updated>2026-05-30T09:23:26Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* --- FIX UKURAN DAN SKALA LOGO (UNTUK SEMUA SKIN) --- */&lt;br /&gt;
&lt;br /&gt;
/* Menargetkan elemen wadah logo */&lt;br /&gt;
#p-logo {&lt;br /&gt;
    /* Memaksa elemen wadah memiliki ukuran standar */&lt;br /&gt;
    width: 135px;&lt;br /&gt;
    height: 135px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Menargetkan elemen link di dalam wadah logo */&lt;br /&gt;
#p-logo a, .mw-wiki-logo {&lt;br /&gt;
    /* Memaksa ukuran area gambar agar sesuai */&lt;br /&gt;
    width: 135px !important;&lt;br /&gt;
    height: 135px !important;&lt;br /&gt;
    &lt;br /&gt;
    /* Memastikan gambar diskala (terutama untuk SVG) */&lt;br /&gt;
    background-size: contain !important;&lt;br /&gt;
    &lt;br /&gt;
    /* Memastikan gambar berada di tengah dan tidak berulang */&lt;br /&gt;
    background-position: center center !important;&lt;br /&gt;
    background-repeat: no-repeat !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- CAPTCHA STYLING ---------- */&lt;br /&gt;
.captcha-code {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  padding: 10px 16px;&lt;br /&gt;
  font-size: 1.8em;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  font-family: monospace;&lt;br /&gt;
  border-radius: 10px;&lt;br /&gt;
  letter-spacing: 4px;&lt;br /&gt;
  user-select: none;&lt;br /&gt;
  text-shadow: 1px 1px 2px rgba(0,0,0,0.2);&lt;br /&gt;
  margin: 10px auto;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  animation: fadeIn 0.4s ease-in-out;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Bikin background captcha punya warna acak */&lt;br /&gt;
.captcha-code {&lt;br /&gt;
  background: linear-gradient(135deg, #f8f8f8, #e8e8e8);&lt;br /&gt;
  border: 1px solid #bbb;&lt;br /&gt;
  color: #2c3e50;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Variasi warna random */&lt;br /&gt;
.captcha-code:nth-child(3n) {&lt;br /&gt;
  background: linear-gradient(135deg, #e3f2fd, #bbdefb);&lt;br /&gt;
  border-color: #90caf9;&lt;br /&gt;
  color: #0d47a1;&lt;br /&gt;
}&lt;br /&gt;
.captcha-code:nth-child(3n+1) {&lt;br /&gt;
  background: linear-gradient(135deg, #f1f8e9, #dcedc8);&lt;br /&gt;
  border-color: #aed581;&lt;br /&gt;
  color: #33691e;&lt;br /&gt;
}&lt;br /&gt;
.captcha-code:nth-child(3n+2) {&lt;br /&gt;
  background: linear-gradient(135deg, #fff3e0, #ffe0b2);&lt;br /&gt;
  border-color: #ffb74d;&lt;br /&gt;
  color: #e65100;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Label agar center di HP */&lt;br /&gt;
.mw-confirmedit-captcha label {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  margin: 12px 0;&lt;br /&gt;
  font-size: 1em;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  color: #444;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Responsif untuk seluler */&lt;br /&gt;
@media (max-width: 720px) {&lt;br /&gt;
  .captcha-code { font-size: 2.2em; padding: 12px 18px; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Animasi halus saat muncul */&lt;br /&gt;
@keyframes fadeIn {&lt;br /&gt;
  from { opacity: 0; transform: scale(0.9); }&lt;br /&gt;
  to   { opacity: 1; transform: scale(1); }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* === Hilangkan judul &amp;quot;Halaman Utama&amp;quot; di tampilan MobileFrontend === */&lt;br /&gt;
.page-Main_Page #section_0,&lt;br /&gt;
.page-Main_Page .content-header,&lt;br /&gt;
.page-Main_Page h1.firstHeading,&lt;br /&gt;
.page-Main_Page #firstHeading {&lt;br /&gt;
    display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Opsional: rapikan jarak setelah header hilang */&lt;br /&gt;
.page-Main_Page .content {&lt;br /&gt;
    margin-top: 0 !important;&lt;br /&gt;
    padding-top: 0.5em !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================&lt;br /&gt;
   📦 MIPPEDIA INFOBOX (Stable Version - Added Borders &amp;amp; Caption Style)&lt;br /&gt;
   ========================================================== */&lt;br /&gt;
&lt;br /&gt;
/* Ditambahkan border-collapse agar garis pembatas antar-sel menyatu halus */&lt;br /&gt;
.infobox {&lt;br /&gt;
	border: 1px solid #a2a9b1;&lt;br /&gt;
	color: black;&lt;br /&gt;
	padding: 0.2em;&lt;br /&gt;
	font-size: 88%;&lt;br /&gt;
	line-height: 1.5em;&lt;br /&gt;
	border-spacing: 3px;&lt;br /&gt;
	margin: 0.5em 0;&lt;br /&gt;
	border-collapse: collapse; &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen {&lt;br /&gt;
	.infobox {&lt;br /&gt;
		background-color: var(--background-color-neutral-subtle, #f8f9fa);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media (max-width: 640px) {&lt;br /&gt;
	.infobox {&lt;br /&gt;
		width: 100%;&lt;br /&gt;
	}&lt;br /&gt;
    &lt;br /&gt;
	.infobox .nowrap {&lt;br /&gt;
		white-space: normal;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media (min-width: 640px) {&lt;br /&gt;
	.infobox {&lt;br /&gt;
		/* @noflip */&lt;br /&gt;
		margin-left: 1em;&lt;br /&gt;
		/* @noflip */&lt;br /&gt;
		float: right;&lt;br /&gt;
		/* @noflip */&lt;br /&gt;
		clear: right;&lt;br /&gt;
		width: 22em;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-header,&lt;br /&gt;
.infobox-label,&lt;br /&gt;
.infobox-above,&lt;br /&gt;
.infobox-full-data,&lt;br /&gt;
.infobox-data,&lt;br /&gt;
.infobox-below,&lt;br /&gt;
.infobox-subheader,&lt;br /&gt;
.infobox-image,&lt;br /&gt;
.infobox-navbar,&lt;br /&gt;
/* Remove element selector when every .infobox thing is using the standard module/templates  */&lt;br /&gt;
.infobox th,&lt;br /&gt;
.infobox td {&lt;br /&gt;
	vertical-align: top;&lt;br /&gt;
	/* Penambahan garis bawah halus warna abu-abu tipis di setiap baris data */&lt;br /&gt;
	border-bottom: 1px solid #eaecf0; &lt;br /&gt;
	padding: 5px 6px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-label,&lt;br /&gt;
.infobox-data,&lt;br /&gt;
/* Remove element selector when every .infobox thing is using the standard module/templates  */&lt;br /&gt;
.infobox th,&lt;br /&gt;
.infobox td {&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Remove .infobox when element selectors above are removed */&lt;br /&gt;
.infobox .infobox-above,&lt;br /&gt;
.infobox .infobox-title,&lt;br /&gt;
/* Remove element selector when every .infobox thing is using the standard module/templates  */&lt;br /&gt;
.infobox caption {&lt;br /&gt;
	font-size: 125%;&lt;br /&gt;
	font-weight: bold;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-title,&lt;br /&gt;
/* Remove element selector when every .infobox thing is using the standard module/templates  */&lt;br /&gt;
.infobox caption {&lt;br /&gt;
	padding: 0.2em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Remove .infobox when element selectors above are removed */&lt;br /&gt;
.infobox .infobox-header,&lt;br /&gt;
.infobox .infobox-subheader,&lt;br /&gt;
.infobox .infobox-image,&lt;br /&gt;
.infobox .infobox-full-data,&lt;br /&gt;
.infobox .infobox-below {&lt;br /&gt;
	text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ➕ PENAMBAHAN KHUSUS: Mengatur teks caption di bawah foto */&lt;br /&gt;
/* Menghasilkan teks caption yang lebih kecil, rapi, dan tetap TEGAK (tidak miring) */&lt;br /&gt;
.infobox .infobox-image, &lt;br /&gt;
.infobox td img + div,&lt;br /&gt;
.infobox tr[style*=&amp;quot;text-align: center&amp;quot;] td {&lt;br /&gt;
	font-size: 90% !important;&lt;br /&gt;
	font-style: normal !important; &lt;br /&gt;
	color: #54595d;&lt;br /&gt;
	padding-top: 4px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Remove .infobox when element selectors above are removed */&lt;br /&gt;
.infobox .infobox-navbar {&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	text-align: right;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#siteSub {&lt;br /&gt;
		display: block;&lt;br /&gt;
	}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://en.mippedia.org/index.php?title=MediaWiki:Common.css&amp;diff=440</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://en.mippedia.org/index.php?title=MediaWiki:Common.css&amp;diff=440"/>
		<updated>2026-05-30T09:13:15Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* --- FIX UKURAN DAN SKALA LOGO (UNTUK SEMUA SKIN) --- */&lt;br /&gt;
&lt;br /&gt;
/* Menargetkan elemen wadah logo */&lt;br /&gt;
#p-logo {&lt;br /&gt;
    /* Memaksa elemen wadah memiliki ukuran standar */&lt;br /&gt;
    width: 135px;&lt;br /&gt;
    height: 135px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Menargetkan elemen link di dalam wadah logo */&lt;br /&gt;
#p-logo a, .mw-wiki-logo {&lt;br /&gt;
    /* Memaksa ukuran area gambar agar sesuai */&lt;br /&gt;
    width: 135px !important;&lt;br /&gt;
    height: 135px !important;&lt;br /&gt;
    &lt;br /&gt;
    /* Memastikan gambar diskala (terutama untuk SVG) */&lt;br /&gt;
    background-size: contain !important;&lt;br /&gt;
    &lt;br /&gt;
    /* Memastikan gambar berada di tengah dan tidak berulang */&lt;br /&gt;
    background-position: center center !important;&lt;br /&gt;
    background-repeat: no-repeat !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- CAPTCHA STYLING ---------- */&lt;br /&gt;
.captcha-code {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  padding: 10px 16px;&lt;br /&gt;
  font-size: 1.8em;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  font-family: monospace;&lt;br /&gt;
  border-radius: 10px;&lt;br /&gt;
  letter-spacing: 4px;&lt;br /&gt;
  user-select: none;&lt;br /&gt;
  text-shadow: 1px 1px 2px rgba(0,0,0,0.2);&lt;br /&gt;
  margin: 10px auto;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  animation: fadeIn 0.4s ease-in-out;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Bikin background captcha punya warna acak */&lt;br /&gt;
.captcha-code {&lt;br /&gt;
  background: linear-gradient(135deg, #f8f8f8, #e8e8e8);&lt;br /&gt;
  border: 1px solid #bbb;&lt;br /&gt;
  color: #2c3e50;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Variasi warna random */&lt;br /&gt;
.captcha-code:nth-child(3n) {&lt;br /&gt;
  background: linear-gradient(135deg, #e3f2fd, #bbdefb);&lt;br /&gt;
  border-color: #90caf9;&lt;br /&gt;
  color: #0d47a1;&lt;br /&gt;
}&lt;br /&gt;
.captcha-code:nth-child(3n+1) {&lt;br /&gt;
  background: linear-gradient(135deg, #f1f8e9, #dcedc8);&lt;br /&gt;
  border-color: #aed581;&lt;br /&gt;
  color: #33691e;&lt;br /&gt;
}&lt;br /&gt;
.captcha-code:nth-child(3n+2) {&lt;br /&gt;
  background: linear-gradient(135deg, #fff3e0, #ffe0b2);&lt;br /&gt;
  border-color: #ffb74d;&lt;br /&gt;
  color: #e65100;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Label agar center di HP */&lt;br /&gt;
.mw-confirmedit-captcha label {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  margin: 12px 0;&lt;br /&gt;
  font-size: 1em;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  color: #444;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Responsif untuk seluler */&lt;br /&gt;
@media (max-width: 720px) {&lt;br /&gt;
  .captcha-code { font-size: 2.2em; padding: 12px 18px; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Animasi halus saat muncul */&lt;br /&gt;
@keyframes fadeIn {&lt;br /&gt;
  from { opacity: 0; transform: scale(0.9); }&lt;br /&gt;
  to   { opacity: 1; transform: scale(1); }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* === Hilangkan judul &amp;quot;Halaman Utama&amp;quot; di tampilan MobileFrontend === */&lt;br /&gt;
.page-Main_Page #section_0,&lt;br /&gt;
.page-Main_Page .content-header,&lt;br /&gt;
.page-Main_Page h1.firstHeading,&lt;br /&gt;
.page-Main_Page #firstHeading {&lt;br /&gt;
    display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Opsional: rapikan jarak setelah header hilang */&lt;br /&gt;
.page-Main_Page .content {&lt;br /&gt;
    margin-top: 0 !important;&lt;br /&gt;
    padding-top: 0.5em !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen {&lt;br /&gt;
	.infobox {&lt;br /&gt;
		background-color: var(--background-color-neutral-subtle, #f8f9fa);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media (max-width: 640px) {&lt;br /&gt;
	.infobox {&lt;br /&gt;
		width: 100%;&lt;br /&gt;
	}&lt;br /&gt;
    &lt;br /&gt;
	.infobox .nowrap {&lt;br /&gt;
		white-space: normal;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media (min-width: 640px) {&lt;br /&gt;
	.infobox {&lt;br /&gt;
		/* @noflip */&lt;br /&gt;
		margin-left: 1em;&lt;br /&gt;
		/* @noflip */&lt;br /&gt;
		float: right;&lt;br /&gt;
		/* @noflip */&lt;br /&gt;
		clear: right;&lt;br /&gt;
		width: 22em;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-header,&lt;br /&gt;
.infobox-label,&lt;br /&gt;
.infobox-above,&lt;br /&gt;
.infobox-full-data,&lt;br /&gt;
.infobox-data,&lt;br /&gt;
.infobox-below,&lt;br /&gt;
.infobox-subheader,&lt;br /&gt;
.infobox-image,&lt;br /&gt;
.infobox-navbar,&lt;br /&gt;
/* Remove element selector when every .infobox thing is using the standard module/templates  */&lt;br /&gt;
.infobox th,&lt;br /&gt;
.infobox td {&lt;br /&gt;
	vertical-align: top;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-label,&lt;br /&gt;
.infobox-data,&lt;br /&gt;
/* Remove element selector when every .infobox thing is using the standard module/templates  */&lt;br /&gt;
.infobox th,&lt;br /&gt;
.infobox td {&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Remove .infobox when element selectors above are removed */&lt;br /&gt;
.infobox .infobox-above,&lt;br /&gt;
.infobox .infobox-title,&lt;br /&gt;
/* Remove element selector when every .infobox thing is using the standard module/templates  */&lt;br /&gt;
.infobox caption {&lt;br /&gt;
	font-size: 125%;&lt;br /&gt;
	font-weight: bold;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-title,&lt;br /&gt;
/* Remove element selector when every .infobox thing is using the standard module/templates  */&lt;br /&gt;
.infobox caption {&lt;br /&gt;
	padding: 0.2em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Remove .infobox when element selectors above are removed */&lt;br /&gt;
.infobox .infobox-header,&lt;br /&gt;
.infobox .infobox-subheader,&lt;br /&gt;
.infobox .infobox-image,&lt;br /&gt;
.infobox .infobox-full-data,&lt;br /&gt;
.infobox .infobox-below {&lt;br /&gt;
	text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Remove .infobox when element selectors above are removed */&lt;br /&gt;
.infobox .infobox-navbar {&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	text-align: right;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#siteSub {&lt;br /&gt;
		display: block;&lt;br /&gt;
	}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://en.mippedia.org/index.php?title=MediaWiki:Common.css&amp;diff=439</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://en.mippedia.org/index.php?title=MediaWiki:Common.css&amp;diff=439"/>
		<updated>2026-05-30T09:10:17Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* --- FIX UKURAN DAN SKALA LOGO (UNTUK SEMUA SKIN) --- */&lt;br /&gt;
&lt;br /&gt;
/* Menargetkan elemen wadah logo */&lt;br /&gt;
#p-logo {&lt;br /&gt;
    /* Memaksa elemen wadah memiliki ukuran standar */&lt;br /&gt;
    width: 135px;&lt;br /&gt;
    height: 135px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Menargetkan elemen link di dalam wadah logo */&lt;br /&gt;
#p-logo a, .mw-wiki-logo {&lt;br /&gt;
    /* Memaksa ukuran area gambar agar sesuai */&lt;br /&gt;
    width: 135px !important;&lt;br /&gt;
    height: 135px !important;&lt;br /&gt;
    &lt;br /&gt;
    /* Memastikan gambar diskala (terutama untuk SVG) */&lt;br /&gt;
    background-size: contain !important;&lt;br /&gt;
    &lt;br /&gt;
    /* Memastikan gambar berada di tengah dan tidak berulang */&lt;br /&gt;
    background-position: center center !important;&lt;br /&gt;
    background-repeat: no-repeat !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- CAPTCHA STYLING ---------- */&lt;br /&gt;
.captcha-code {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  padding: 10px 16px;&lt;br /&gt;
  font-size: 1.8em;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  font-family: monospace;&lt;br /&gt;
  border-radius: 10px;&lt;br /&gt;
  letter-spacing: 4px;&lt;br /&gt;
  user-select: none;&lt;br /&gt;
  text-shadow: 1px 1px 2px rgba(0,0,0,0.2);&lt;br /&gt;
  margin: 10px auto;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  animation: fadeIn 0.4s ease-in-out;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Bikin background captcha punya warna acak */&lt;br /&gt;
.captcha-code {&lt;br /&gt;
  background: linear-gradient(135deg, #f8f8f8, #e8e8e8);&lt;br /&gt;
  border: 1px solid #bbb;&lt;br /&gt;
  color: #2c3e50;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Variasi warna random */&lt;br /&gt;
.captcha-code:nth-child(3n) {&lt;br /&gt;
  background: linear-gradient(135deg, #e3f2fd, #bbdefb);&lt;br /&gt;
  border-color: #90caf9;&lt;br /&gt;
  color: #0d47a1;&lt;br /&gt;
}&lt;br /&gt;
.captcha-code:nth-child(3n+1) {&lt;br /&gt;
  background: linear-gradient(135deg, #f1f8e9, #dcedc8);&lt;br /&gt;
  border-color: #aed581;&lt;br /&gt;
  color: #33691e;&lt;br /&gt;
}&lt;br /&gt;
.captcha-code:nth-child(3n+2) {&lt;br /&gt;
  background: linear-gradient(135deg, #fff3e0, #ffe0b2);&lt;br /&gt;
  border-color: #ffb74d;&lt;br /&gt;
  color: #e65100;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Label agar center di HP */&lt;br /&gt;
.mw-confirmedit-captcha label {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  margin: 12px 0;&lt;br /&gt;
  font-size: 1em;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  color: #444;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Responsif untuk seluler */&lt;br /&gt;
@media (max-width: 720px) {&lt;br /&gt;
  .captcha-code { font-size: 2.2em; padding: 12px 18px; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Animasi halus saat muncul */&lt;br /&gt;
@keyframes fadeIn {&lt;br /&gt;
  from { opacity: 0; transform: scale(0.9); }&lt;br /&gt;
  to   { opacity: 1; transform: scale(1); }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* === Hilangkan judul &amp;quot;Halaman Utama&amp;quot; di tampilan MobileFrontend === */&lt;br /&gt;
.page-Main_Page #section_0,&lt;br /&gt;
.page-Main_Page .content-header,&lt;br /&gt;
.page-Main_Page h1.firstHeading,&lt;br /&gt;
.page-Main_Page #firstHeading {&lt;br /&gt;
    display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Opsional: rapikan jarak setelah header hilang */&lt;br /&gt;
.page-Main_Page .content {&lt;br /&gt;
    margin-top: 0 !important;&lt;br /&gt;
    padding-top: 0.5em !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen {&lt;br /&gt;
	.infobox {&lt;br /&gt;
		background-color: var(--background-color-neutral-subtle, #f8f9fa);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media (max-width: 640px) {&lt;br /&gt;
	.infobox {&lt;br /&gt;
		width: 100%;&lt;br /&gt;
	}&lt;br /&gt;
    &lt;br /&gt;
	.infobox .nowrap {&lt;br /&gt;
		white-space: normal;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media (min-width: 640px) {&lt;br /&gt;
	.infobox {&lt;br /&gt;
		/* @noflip */&lt;br /&gt;
		margin-left: 1em;&lt;br /&gt;
		/* @noflip */&lt;br /&gt;
		float: right;&lt;br /&gt;
		/* @noflip */&lt;br /&gt;
		clear: right;&lt;br /&gt;
		width: 22em;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-header,&lt;br /&gt;
.infobox-label,&lt;br /&gt;
.infobox-above,&lt;br /&gt;
.infobox-full-data,&lt;br /&gt;
.infobox-data,&lt;br /&gt;
.infobox-below,&lt;br /&gt;
.infobox-subheader,&lt;br /&gt;
.infobox-image,&lt;br /&gt;
.infobox-navbar,&lt;br /&gt;
/* Remove element selector when every .infobox thing is using the standard module/templates  */&lt;br /&gt;
.infobox th,&lt;br /&gt;
.infobox td {&lt;br /&gt;
	vertical-align: top;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-label,&lt;br /&gt;
.infobox-data,&lt;br /&gt;
/* Remove element selector when every .infobox thing is using the standard module/templates  */&lt;br /&gt;
.infobox th,&lt;br /&gt;
.infobox td {&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Remove .infobox when element selectors above are removed */&lt;br /&gt;
.infobox .infobox-above,&lt;br /&gt;
.infobox .infobox-title,&lt;br /&gt;
/* Remove element selector when every .infobox thing is using the standard module/templates  */&lt;br /&gt;
.infobox caption {&lt;br /&gt;
	font-size: 125%;&lt;br /&gt;
	font-weight: bold;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-title,&lt;br /&gt;
/* Remove element selector when every .infobox thing is using the standard module/templates  */&lt;br /&gt;
.infobox caption {&lt;br /&gt;
	padding: 0.2em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Remove .infobox when element selectors above are removed */&lt;br /&gt;
.infobox .infobox-header,&lt;br /&gt;
.infobox .infobox-subheader,&lt;br /&gt;
.infobox .infobox-image,&lt;br /&gt;
.infobox .infobox-full-data,&lt;br /&gt;
.infobox .infobox-below {&lt;br /&gt;
	text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Remove .infobox when element selectors above are removed */&lt;br /&gt;
.infobox .infobox-navbar {&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	text-align: right;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://en.mippedia.org/index.php?title=Rumi_Haitami&amp;diff=438</id>
		<title>Rumi Haitami</title>
		<link rel="alternate" type="text/html" href="https://en.mippedia.org/index.php?title=Rumi_Haitami&amp;diff=438"/>
		<updated>2026-05-29T22:32:39Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox musical artist &lt;br /&gt;
| background        = person&lt;br /&gt;
| honorific_prefix  =&lt;br /&gt;
| name              = &lt;br /&gt;
| honorific_suffix  = &lt;br /&gt;
| image             = Rumi Haitami.jpg&lt;br /&gt;
| image_upright     =&lt;br /&gt;
| image_size        = 250&lt;br /&gt;
| landscape         =&lt;br /&gt;
| alt               =&lt;br /&gt;
| caption           = Rumi Haitami in 2023&lt;br /&gt;
| native_name       = Muhamad Rumi Haitami Kusuma&lt;br /&gt;
| native_name_lang  =&lt;br /&gt;
| birth_name        = Muhamad Rumi Haitami Kusuma&lt;br /&gt;
| alias             =&lt;br /&gt;
| birth_date        = {{Birth date and age|2003|04|15}}&lt;br /&gt;
| birth_place       = Bandung &lt;br /&gt;
| origin            = Indonesian&lt;br /&gt;
| death_date        = &amp;lt;!-- {{Death date and age|YYYY|MM|DD|YYYY|MM|DD}} (death date first) --&amp;gt;&lt;br /&gt;
| death_place       = &lt;br /&gt;
| death_cause       = &amp;lt;!-- should be included only when the cause of death has significance for the subject&#039;s notability--&amp;gt;&lt;br /&gt;
| genre             = Music rock, pop Indonesian&lt;br /&gt;
| occupation        = &lt;br /&gt;
| instrument        = Vocal, Guitar&lt;br /&gt;
| works             = musician&lt;br /&gt;
| years_active      = 2022-present&lt;br /&gt;
| label             = &lt;br /&gt;
| publishers        =&lt;br /&gt;
| current_member_of = &lt;br /&gt;
| past_member_of    = &lt;br /&gt;
| spouse            = &amp;lt;!-- Use article title or common name --&amp;gt;&lt;br /&gt;
| partner           = &amp;lt;!-- (unmarried long-term partner) --&amp;gt;&lt;br /&gt;
| awards            = &lt;br /&gt;
| website           ={{URL|rumihaitami.com}}&lt;br /&gt;
| module            = &lt;br /&gt;
| module2           = &lt;br /&gt;
| module3           = &lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Rumi Haitami&#039;&#039;&#039; (born April 15, 2003) is a [[musician]], founder of [[Mippedia]], and the [[Mippedia Community]], a community that manages Mippedia. &amp;lt;ref&amp;gt;[https://www.rumihaitami.com/ who is Rumi Haitami? Here is his complete biography] &#039;&#039;accessed December 21, 2025&#039;&#039;&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
He is known for being the founder of the general online encyclopedia project Mippedia and the community that manages it, Mippedia Community.&lt;br /&gt;
&lt;br /&gt;
He is also known in the world of music because his six music albums exploded in the world music market in August 2025.&amp;lt;ref name=&amp;quot;Pikiranbangsa.co&amp;quot;&amp;gt;[https://pikiranbangsa.co/rumi-haitami-artis Rumi Haitami&#039;s Career Journey as a Musician &amp;amp; Complete Biodata: Siblings, and other family] pikiranbangsa.co &#039;&#039;accessed December 8, 2025&#039;&#039;&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Early Life ==&lt;br /&gt;
Rumi Haitami has two younger sisters, Firoh Syakillah and Nayla Syakillah. &amp;lt;ref name = &amp;quot;Pikiranbangsa.co&amp;quot;/&amp;gt; In 2012, he and his extended family moved to South Jakarta and settled in a house they purchased in the area. &amp;lt;ref name = &amp;quot;Kompasiana.com&amp;quot;&amp;gt;[https://www.kompasiana.com/sugarstoreofficial2874/68aa19bcc925c439856461f5/rumi-haitami-artis-terkenal-kelahiran-kota-bandung Rumi Haitami&#039;s Popular Songs &amp;amp; His Popularity in the Media] &#039;&#039; accessed December 8, 2025&amp;lt;/ref&amp;gt;&lt;br /&gt;
== Music Career ==&lt;br /&gt;
In 2024, Rumi Haitami began his career as a [[songwriter]]. He began writing [[Song lyrics|lyrics]] and melodies for songs that later became the basis of his work.&amp;lt;ref name = &amp;quot;Kompasiana.com&amp;quot;/&amp;gt; In August 2025, Rumi officially published his musical works worldwide. The songs he wrote the previous year were then widely released on various digital music platforms.&amp;lt;ref name = &amp;quot;Kompasiana.com&amp;quot;/&amp;gt; To date, his [[work]] has been streamed on various music streaming platforms and gained attention from the international music community.&amp;lt;ref name = &amp;quot;Pikiranbangsa.co&amp;quot;/&amp;gt;&lt;br /&gt;
== Music Albums ==&lt;br /&gt;
Rumi Haitami has six [[music albums]] that have become a spotlight after their release&amp;lt;ref name = &amp;quot;Pikiranbangsa.co&amp;quot;/&amp;gt; :&lt;br /&gt;
# &#039;&#039;Betrayal&#039;&#039;&lt;br /&gt;
# &#039;&#039;Beautiful Memories&#039;&#039;&amp;lt;ref name = &amp;quot;Pikiranbangsa.co&amp;quot;/&amp;gt;&lt;br /&gt;
# &#039;&#039;My Beloved&#039;&#039;&lt;br /&gt;
# &#039;&#039;Night Start&#039;&#039;&lt;br /&gt;
# &#039;&#039;Without Direction&#039;&#039;&lt;br /&gt;
# &#039;&#039;Treachery of Love&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;These albums are widely used as background music on TikTok, Instagram Reels, and YouTube Shorts&#039;&#039;&amp;lt;ref name = &amp;quot;Pikiranbangsa.co/&amp;gt;&lt;br /&gt;
{{#related:Nur Khosiyah}}&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
[[id:Rumi Haitami]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://en.mippedia.org/index.php?title=MediaWiki:Common.css&amp;diff=437</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://en.mippedia.org/index.php?title=MediaWiki:Common.css&amp;diff=437"/>
		<updated>2026-05-29T22:31:51Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* --- FIX UKURAN DAN SKALA LOGO (UNTUK SEMUA SKIN) --- */&lt;br /&gt;
&lt;br /&gt;
/* Menargetkan elemen wadah logo */&lt;br /&gt;
#p-logo {&lt;br /&gt;
    /* Memaksa elemen wadah memiliki ukuran standar */&lt;br /&gt;
    width: 135px;&lt;br /&gt;
    height: 135px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Menargetkan elemen link di dalam wadah logo */&lt;br /&gt;
#p-logo a, .mw-wiki-logo {&lt;br /&gt;
    /* Memaksa ukuran area gambar agar sesuai */&lt;br /&gt;
    width: 135px !important;&lt;br /&gt;
    height: 135px !important;&lt;br /&gt;
    &lt;br /&gt;
    /* Memastikan gambar diskala (terutama untuk SVG) */&lt;br /&gt;
    background-size: contain !important;&lt;br /&gt;
    &lt;br /&gt;
    /* Memastikan gambar berada di tengah dan tidak berulang */&lt;br /&gt;
    background-position: center center !important;&lt;br /&gt;
    background-repeat: no-repeat !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- CAPTCHA STYLING ---------- */&lt;br /&gt;
.captcha-code {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  padding: 10px 16px;&lt;br /&gt;
  font-size: 1.8em;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  font-family: monospace;&lt;br /&gt;
  border-radius: 10px;&lt;br /&gt;
  letter-spacing: 4px;&lt;br /&gt;
  user-select: none;&lt;br /&gt;
  text-shadow: 1px 1px 2px rgba(0,0,0,0.2);&lt;br /&gt;
  margin: 10px auto;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  animation: fadeIn 0.4s ease-in-out;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Bikin background captcha punya warna acak */&lt;br /&gt;
.captcha-code {&lt;br /&gt;
  background: linear-gradient(135deg, #f8f8f8, #e8e8e8);&lt;br /&gt;
  border: 1px solid #bbb;&lt;br /&gt;
  color: #2c3e50;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Variasi warna random */&lt;br /&gt;
.captcha-code:nth-child(3n) {&lt;br /&gt;
  background: linear-gradient(135deg, #e3f2fd, #bbdefb);&lt;br /&gt;
  border-color: #90caf9;&lt;br /&gt;
  color: #0d47a1;&lt;br /&gt;
}&lt;br /&gt;
.captcha-code:nth-child(3n+1) {&lt;br /&gt;
  background: linear-gradient(135deg, #f1f8e9, #dcedc8);&lt;br /&gt;
  border-color: #aed581;&lt;br /&gt;
  color: #33691e;&lt;br /&gt;
}&lt;br /&gt;
.captcha-code:nth-child(3n+2) {&lt;br /&gt;
  background: linear-gradient(135deg, #fff3e0, #ffe0b2);&lt;br /&gt;
  border-color: #ffb74d;&lt;br /&gt;
  color: #e65100;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Label agar center di HP */&lt;br /&gt;
.mw-confirmedit-captcha label {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  margin: 12px 0;&lt;br /&gt;
  font-size: 1em;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  color: #444;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Responsif untuk seluler */&lt;br /&gt;
@media (max-width: 720px) {&lt;br /&gt;
  .captcha-code { font-size: 2.2em; padding: 12px 18px; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Animasi halus saat muncul */&lt;br /&gt;
@keyframes fadeIn {&lt;br /&gt;
  from { opacity: 0; transform: scale(0.9); }&lt;br /&gt;
  to   { opacity: 1; transform: scale(1); }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* === Hilangkan judul &amp;quot;Halaman Utama&amp;quot; di tampilan MobileFrontend === */&lt;br /&gt;
.page-Main_Page #section_0,&lt;br /&gt;
.page-Main_Page .content-header,&lt;br /&gt;
.page-Main_Page h1.firstHeading,&lt;br /&gt;
.page-Main_Page #firstHeading {&lt;br /&gt;
    display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Opsional: rapikan jarak setelah header hilang */&lt;br /&gt;
.page-Main_Page .content {&lt;br /&gt;
    margin-top: 0 !important;&lt;br /&gt;
    padding-top: 0.5em !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Infoboxes */&lt;br /&gt;
.infobox {&lt;br /&gt;
	border: 1px solid #a2a9b1;&lt;br /&gt;
	color: #202122;&lt;br /&gt;
	padding: 0.2em;&lt;br /&gt;
	font-size: 88%;&lt;br /&gt;
	line-height: 1.5em;&lt;br /&gt;
	/* Mengubah border-collapse agar garis pemisah (border-bottom) bisa tersambung rapi */&lt;br /&gt;
	border-collapse: collapse; &lt;br /&gt;
	margin: 0.5em 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen {&lt;br /&gt;
	.infobox {&lt;br /&gt;
		background-color: var(--background-color-neutral-subtle, #f8f9fa);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media (max-width: 640px) {&lt;br /&gt;
	.infobox {&lt;br /&gt;
		width: 100%;&lt;br /&gt;
	}&lt;br /&gt;
    &lt;br /&gt;
	.infobox .nowrap {&lt;br /&gt;
		white-space: normal;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media (min-width: 640px) {&lt;br /&gt;
	.infobox {&lt;br /&gt;
		/* @noflip */&lt;br /&gt;
		margin-left: 1em;&lt;br /&gt;
		/* @noflip */&lt;br /&gt;
		float: right;&lt;br /&gt;
		/* @noflip */&lt;br /&gt;
		clear: right;&lt;br /&gt;
		/* Memperlebar ukuran kotak dari 22em ke 24.5em standar Wikipedia */&lt;br /&gt;
		width: 24.5em; &lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-header,&lt;br /&gt;
.infobox-label,&lt;br /&gt;
.infobox-above,&lt;br /&gt;
.infobox-full-data,&lt;br /&gt;
.infobox-data,&lt;br /&gt;
.infobox-below,&lt;br /&gt;
.infobox-subheader,&lt;br /&gt;
.infobox-image,&lt;br /&gt;
.infobox-navbar,&lt;br /&gt;
.infobox th,&lt;br /&gt;
.infobox td {&lt;br /&gt;
	vertical-align: top;&lt;br /&gt;
	/* Menambahkan garis pemisah horizontal tipis di setiap baris data */&lt;br /&gt;
	border-top: 1px solid #a2a9b1; &lt;br /&gt;
	padding: 4px 6px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Memastikan baris pertama (Judul/Foto) tidak memiliki garis pemisah di bagian atasnya */&lt;br /&gt;
.infobox tr:first-child th,&lt;br /&gt;
.infobox tr:first-child td {&lt;br /&gt;
	border-top: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-label,&lt;br /&gt;
.infobox-data,&lt;br /&gt;
.infobox th,&lt;br /&gt;
.infobox td {&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	/* Mengembalikan text-align ke kiri agar susunan parameter data rapi lurus */&lt;br /&gt;
	text-align: left; &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Mengunci label kiri agar posisinya condong ke kiri atau kanan secara proporsional */&lt;br /&gt;
.infobox-label,&lt;br /&gt;
.infobox th {&lt;br /&gt;
	font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Remove .infobox when element selectors above are removed */&lt;br /&gt;
.infobox .infobox-above,&lt;br /&gt;
.infobox .infobox-title,&lt;br /&gt;
.infobox caption {&lt;br /&gt;
	font-size: 125%;&lt;br /&gt;
	font-weight: bold;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	border-top: 0; /* Menghilangkan border atas untuk judul utama */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-title,&lt;br /&gt;
.infobox caption {&lt;br /&gt;
	padding: 0.4em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Remove .infobox when element selectors above are removed */&lt;br /&gt;
.infobox .infobox-header,&lt;br /&gt;
.infobox .infobox-subheader,&lt;br /&gt;
.infobox .infobox-image,&lt;br /&gt;
.infobox .infobox-full-data,&lt;br /&gt;
.infobox .infobox-below {&lt;br /&gt;
	text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Mengatur teks di area foto/image info (caption) agar otomatis miring (italic) */&lt;br /&gt;
.infobox .infobox-image,&lt;br /&gt;
.infobox td [style=&amp;quot;text-align: center&amp;quot;] {&lt;br /&gt;
	font-style: italic;&lt;br /&gt;
	font-size: 95%; /* Sedikit lebih kecil agar kontras sebagai keterangan foto */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Jangan buat teks judul utama ikut miring meskipun memakai tag th/td */&lt;br /&gt;
.infobox .infobox-above,&lt;br /&gt;
.infobox .infobox-title {&lt;br /&gt;
	font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Remove .infobox when element selectors above are removed */&lt;br /&gt;
.infobox .infobox-navbar {&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	text-align: right;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
	#siteSub {&lt;br /&gt;
		display: block;&lt;br /&gt;
	}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://en.mippedia.org/index.php?title=Template:Subinfobox_bodystyle/styles.css&amp;diff=436</id>
		<title>Template:Subinfobox bodystyle/styles.css</title>
		<link rel="alternate" type="text/html" href="https://en.mippedia.org/index.php?title=Template:Subinfobox_bodystyle/styles.css&amp;diff=436"/>
		<updated>2026-05-29T22:23:32Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;/* {{pp-protected|reason=match parent|small=yes}} */ /*  * Templatestyles implementation of the styling from {{Subinfobox bodystyle}}  */  .subinfobox table { 	background-color: transparent; 	color: var( --color-base, #202122 ); 	border-collapse:collapse; 	border-spacing:0; 	border:none !important; 	width:100%; 	margin:0; 	font-size:100%; 	clear:none; 	float:none; }&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* {{pp-protected|reason=match parent|small=yes}} */&lt;br /&gt;
/*&lt;br /&gt;
 * Templatestyles implementation of the styling from {{Subinfobox bodystyle}}&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
.subinfobox table {&lt;br /&gt;
	background-color: transparent;&lt;br /&gt;
	color: var( --color-base, #202122 );&lt;br /&gt;
	border-collapse:collapse;&lt;br /&gt;
	border-spacing:0;&lt;br /&gt;
	border:none !important;&lt;br /&gt;
	width:100%;&lt;br /&gt;
	margin:0;&lt;br /&gt;
	font-size:100%;&lt;br /&gt;
	clear:none;&lt;br /&gt;
	float:none;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://en.mippedia.org/index.php?title=Template:Subinfobox_bodystyle&amp;diff=435</id>
		<title>Template:Subinfobox bodystyle</title>
		<link rel="alternate" type="text/html" href="https://en.mippedia.org/index.php?title=Template:Subinfobox_bodystyle&amp;diff=435"/>
		<updated>2026-05-29T22:22:34Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;background-color: transparent; color: var( --color-base, #202122 ); border-collapse:collapse; border-spacing:0px; border:none; width:100%; margin:0px; font-size:100%; clear:none; float:none&amp;lt;noinclude&amp;gt;  {{documentation}} &amp;lt;/noinclude&amp;gt;&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;background-color: transparent; color: var( --color-base, #202122 ); border-collapse:collapse; border-spacing:0px; border:none; width:100%; margin:0px; font-size:100%; clear:none; float:none&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://en.mippedia.org/index.php?title=Module:Sidebar/styles.css&amp;diff=434</id>
		<title>Module:Sidebar/styles.css</title>
		<link rel="alternate" type="text/html" href="https://en.mippedia.org/index.php?title=Module:Sidebar/styles.css&amp;diff=434"/>
		<updated>2026-05-29T22:21:32Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;/* {{pp-template}} */ /* TODO: Invert width design to be &amp;quot;mobile first&amp;quot; */ .sidebar { 	/* TODO: Ask if we should have max-width 22em instead */ 	width: 22em; 	/* @noflip */ 	float: right; 	/* @noflip */ 	clear: right; 	/* @noflip */ 	margin: 0.5em 0 1em 1em; 	background: var(--background-color-neutral-subtle, #f8f9fa); 	border: 1px solid var(--border-color-base, #a2a9b1); 	padding: 0.2em; 	text-align: center; 	line-height: 1.4em; 	font-size: 88%; 	border-collapse: collap...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* {{pp-template}} */&lt;br /&gt;
/* TODO: Invert width design to be &amp;quot;mobile first&amp;quot; */&lt;br /&gt;
.sidebar {&lt;br /&gt;
	/* TODO: Ask if we should have max-width 22em instead */&lt;br /&gt;
	width: 22em;&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	float: right;&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	clear: right;&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	margin: 0.5em 0 1em 1em;&lt;br /&gt;
	background: var(--background-color-neutral-subtle, #f8f9fa);&lt;br /&gt;
	border: 1px solid var(--border-color-base, #a2a9b1);&lt;br /&gt;
	padding: 0.2em;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	line-height: 1.4em;&lt;br /&gt;
	font-size: 88%;&lt;br /&gt;
	border-collapse: collapse;&lt;br /&gt;
	/* Timeless has display: none on .nomobile at mobile resolutions, so we&lt;br /&gt;
	 * unhide it with display: table and let precedence and proximity win.&lt;br /&gt;
	 */&lt;br /&gt;
	display: table; &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Unfortunately, so does Minerva desktop, except Minerva drops an&lt;br /&gt;
 * !important on the declaration. So we have to be mean for Minerva users.&lt;br /&gt;
 * Mobile removes the element entirely with `wgMFRemovableClasses` in &lt;br /&gt;
 * https://github.com/wikimedia/operations-mediawiki-config/blob/master/&lt;br /&gt;
 wmf-config/InitialiseSettings.php#L16992&lt;br /&gt;
 * which is why displaying it categorically with display: table works.&lt;br /&gt;
 * We don&#039;t really want to expose the generic user in the wild on mobile to have&lt;br /&gt;
 * to deal with sidebars. (Maybe the ones with collapsible lists, so that&lt;br /&gt;
 * might be an improvement. That is blocked on [[:phab:T111565]].)&lt;br /&gt;
 */&lt;br /&gt;
body.skin-minerva .sidebar {&lt;br /&gt;
	display: table !important;&lt;br /&gt;
	/* also, minerva is way too aggressive about other stylings on tables.&lt;br /&gt;
	 * TODO remove when this template gets moved to a div. plans on talk page.&lt;br /&gt;
	 * We always float right on Minerva because that&#039;s a lot of extra CSS&lt;br /&gt;
	 * otherwise. */&lt;br /&gt;
    float: right !important;&lt;br /&gt;
    margin: 0.5em 0 1em 1em !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.sidebar-subgroup {&lt;br /&gt;
	width: 100%;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	border-spacing: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.sidebar-left {&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	float: left;&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	clear: left;&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	margin: 0.5em 1em 1em 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.sidebar-none {&lt;br /&gt;
	float: none;&lt;br /&gt;
	clear: both;&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	margin: 0.5em 1em 1em 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.sidebar-outer-title {&lt;br /&gt;
	padding: 0 0.4em 0.2em;&lt;br /&gt;
	font-size: 125%;&lt;br /&gt;
	line-height: 1.2em;&lt;br /&gt;
	font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.sidebar-top-image {&lt;br /&gt;
	padding: 0.4em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.sidebar-top-caption,&lt;br /&gt;
.sidebar-pretitle-with-top-image,&lt;br /&gt;
.sidebar-caption {&lt;br /&gt;
	padding: 0.2em 0.4em 0;&lt;br /&gt;
	line-height: 1.2em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.sidebar-pretitle {&lt;br /&gt;
	padding: 0.4em 0.4em 0;&lt;br /&gt;
	line-height: 1.2em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.sidebar-title,&lt;br /&gt;
.sidebar-title-with-pretitle {&lt;br /&gt;
	padding: 0.2em 0.8em;&lt;br /&gt;
	font-size: 145%;&lt;br /&gt;
	line-height: 1.2em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.sidebar-title-with-pretitle {&lt;br /&gt;
	padding: 0.1em 0.4em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.sidebar-image {&lt;br /&gt;
	padding: 0.2em 0.4em 0.4em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.sidebar-heading {&lt;br /&gt;
	padding: 0.1em 0.4em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.sidebar-content {&lt;br /&gt;
	padding: 0 0.5em 0.4em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.sidebar-content-with-subgroup {&lt;br /&gt;
	padding: 0.1em 0.4em 0.2em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.sidebar-above,&lt;br /&gt;
.sidebar-below {&lt;br /&gt;
	padding: 0.3em 0.8em;&lt;br /&gt;
	font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.sidebar-collapse .sidebar-above,&lt;br /&gt;
.sidebar-collapse .sidebar-below {&lt;br /&gt;
	border-top: 1px solid #aaa;&lt;br /&gt;
	border-bottom: 1px solid #aaa;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.sidebar-navbar {&lt;br /&gt;
	text-align: right;&lt;br /&gt;
	font-size: 115%;&lt;br /&gt;
	padding: 0 0.4em 0.4em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.sidebar-list-title {&lt;br /&gt;
	padding: 0 0.4em;&lt;br /&gt;
	text-align: left;&lt;br /&gt;
	font-weight: bold;&lt;br /&gt;
	line-height: 1.6em;&lt;br /&gt;
	font-size: 105%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* centered text with mw-collapsible headers is finicky */&lt;br /&gt;
.sidebar-list-title-c {&lt;br /&gt;
	padding: 0 0.4em;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	margin: 0 3.3em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media (max-width: 640px) {&lt;br /&gt;
	/* users have wide latitude to set arbitrary width and margin :(&lt;br /&gt;
	   &amp;quot;Super-specific&amp;quot; selector to prevent overriding this appearance by&lt;br /&gt;
	   lower level sidebars too */&lt;br /&gt;
	body.mediawiki .sidebar {&lt;br /&gt;
		width: 100% !important;&lt;br /&gt;
		clear: both;&lt;br /&gt;
		float: none !important; /* Remove when we div based; Minerva is dumb */&lt;br /&gt;
		margin-left: 0 !important;&lt;br /&gt;
		margin-right: 0 !important;&lt;br /&gt;
	}&lt;br /&gt;
	/* TODO: We might consider making all links wrap at small resolutions and then&lt;br /&gt;
	 * only introduce nowrap at higher resolutions. Do when we invert the media&lt;br /&gt;
	 * query.&lt;br /&gt;
	 */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Fixes: T367463 */&lt;br /&gt;
body.skin--responsive .sidebar a &amp;gt; img {&lt;br /&gt;
	max-width: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Disable backgrounds via style attribute in night mode Eg.https://phabricator.wikimedia.org/F55243859&lt;br /&gt;
 * https://en.wikipedia.org/w/index.php?title=Laissez-faire&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
@media screen {&lt;br /&gt;
    html.skin-theme-clientpref-night .sidebar:not( .notheme ) .sidebar-list-title,&lt;br /&gt;
    html.skin-theme-clientpref-night .sidebar:not( .notheme ) .sidebar-title-with-pretitle {&lt;br /&gt;
	  background: transparent !important;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    html.skin-theme-clientpref-night .sidebar:not( .notheme ) .sidebar-title-with-pretitle a {&lt;br /&gt;
     	color: var( --color-progressive ) !important;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (prefers-color-scheme: dark) {&lt;br /&gt;
	html.skin-theme-clientpref-os .sidebar:not( .notheme ) .sidebar-list-title,&lt;br /&gt;
	html.skin-theme-clientpref-os .sidebar:not( .notheme ) .sidebar-title-with-pretitle {&lt;br /&gt;
		background: transparent !important;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	html.skin-theme-clientpref-os .sidebar:not( .notheme ) .sidebar-title-with-pretitle a {&lt;br /&gt;
		color: var( --color-progressive ) !important;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media print {&lt;br /&gt;
	body.ns-0 .sidebar {&lt;br /&gt;
		display: none !important;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://en.mippedia.org/index.php?title=Module:Sidebar/configuration&amp;diff=433</id>
		<title>Module:Sidebar/configuration</title>
		<link rel="alternate" type="text/html" href="https://en.mippedia.org/index.php?title=Module:Sidebar/configuration&amp;diff=433"/>
		<updated>2026-05-29T22:20:02Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;return { 	i18n = { 		child_yes = &amp;#039;yes&amp;#039;, 		float_none = &amp;#039;none&amp;#039;, 		float_left = &amp;#039;left&amp;#039;, 		wrap_true = &amp;#039;true&amp;#039;, 		navbar_none = &amp;#039;none&amp;#039;, 		navbar_off = &amp;#039;off&amp;#039;, 		default_list_title = &amp;#039;List&amp;#039;, 		title_not_to_add_navbar = &amp;#039;Template:Sidebar&amp;#039;, 		collapse_title_not_to_add_navbar = &amp;#039;Template:Sidebar with collapsible lists&amp;#039;, 		templatestyles = { 			sidebar = &amp;#039;Module:Sidebar/styles.css&amp;#039;, 			hlist = &amp;#039;Hlist/styles.css&amp;#039;, 			plainlist = &amp;#039;Plainlist/styles.css&amp;#039;, 			subinfobox = &amp;#039;Subinfobox b...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;return {&lt;br /&gt;
	i18n = {&lt;br /&gt;
		child_yes = &#039;yes&#039;,&lt;br /&gt;
		float_none = &#039;none&#039;,&lt;br /&gt;
		float_left = &#039;left&#039;,&lt;br /&gt;
		wrap_true = &#039;true&#039;,&lt;br /&gt;
		navbar_none = &#039;none&#039;,&lt;br /&gt;
		navbar_off = &#039;off&#039;,&lt;br /&gt;
		default_list_title = &#039;List&#039;,&lt;br /&gt;
		title_not_to_add_navbar = &#039;Template:Sidebar&#039;,&lt;br /&gt;
		collapse_title_not_to_add_navbar = &#039;Template:Sidebar with collapsible lists&#039;,&lt;br /&gt;
		templatestyles = {&lt;br /&gt;
			sidebar = &#039;Module:Sidebar/styles.css&#039;,&lt;br /&gt;
			hlist = &#039;Hlist/styles.css&#039;,&lt;br /&gt;
			plainlist = &#039;Plainlist/styles.css&#039;,&lt;br /&gt;
			subinfobox = &#039;Subinfobox bodystyle/styles.css&#039;,&lt;br /&gt;
		},&lt;br /&gt;
		category = {&lt;br /&gt;
			child = &#039;[[Category:Pages using sidebar with the child parameter]]&#039;,&lt;br /&gt;
			conversion = &#039;[[Category:Sidebars with styles needing conversion]]&#039;&lt;br /&gt;
		},&lt;br /&gt;
		pattern = {&lt;br /&gt;
			collapse_sandbox = &#039;/sandbox$&#039;,&lt;br /&gt;
			sandbox = &#039;/sandbox$&#039;,&lt;br /&gt;
			subgroup = &#039;sidebar%-subgroup&#039;,&lt;br /&gt;
			style_conversion = &#039;style$&#039;,&lt;br /&gt;
			uncategorized_conversion_titles = {&lt;br /&gt;
				&#039;/[Ss]andbox&#039;,&lt;br /&gt;
				&#039;/[Tt]estcases&#039;,&lt;br /&gt;
				&#039;/[Dd]oc$&#039;&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		class = {&lt;br /&gt;
			sidebar = &#039;sidebar&#039;,&lt;br /&gt;
			subgroup = &#039;sidebar-subgroup&#039;,&lt;br /&gt;
			subinfobox = &#039;subinfobox&#039;,&lt;br /&gt;
			collapse = &#039;sidebar-collapse&#039;,&lt;br /&gt;
			float_none = &#039;sidebar-none&#039;,&lt;br /&gt;
			float_left = &#039;sidebar-left&#039;,&lt;br /&gt;
			wraplinks = &#039;nowraplinks&#039;,&lt;br /&gt;
			outer_title = &#039;sidebar-outer-title&#039;,&lt;br /&gt;
			top_image = &#039;sidebar-top-image&#039;,&lt;br /&gt;
			top_caption = &#039;sidebar-top-caption&#039;,&lt;br /&gt;
			pretitle = &#039;sidebar-pretitle&#039;,&lt;br /&gt;
			pretitle_with_top_image = &#039;sidebar-pretitle-with-top-image&#039;,&lt;br /&gt;
			title = &#039;sidebar-title&#039;,&lt;br /&gt;
			title_with_pretitle = &#039;sidebar-title-with-pretitle&#039;,&lt;br /&gt;
			image = &#039;sidebar-image&#039;,&lt;br /&gt;
			caption = &#039;sidebar-caption&#039;,&lt;br /&gt;
			above = &#039;sidebar-above&#039;,&lt;br /&gt;
			heading = &#039;sidebar-heading&#039;,&lt;br /&gt;
			content = &#039;sidebar-content&#039;,&lt;br /&gt;
			content_with_subgroup = &#039;sidebar-content-with-subgroup&#039;,&lt;br /&gt;
			below = &#039;sidebar-below&#039;,&lt;br /&gt;
			navbar = &#039;sidebar-navbar&#039;,&lt;br /&gt;
			list = &#039;sidebar-list&#039;,&lt;br /&gt;
			list_title = &#039;sidebar-list-title&#039;,&lt;br /&gt;
			list_title_centered = &#039;sidebar-list-title-c&#039;,&lt;br /&gt;
			list_content = &#039;sidebar-list-content&#039;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://en.mippedia.org/index.php?title=Module:Sidebar&amp;diff=432</id>
		<title>Module:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://en.mippedia.org/index.php?title=Module:Sidebar&amp;diff=432"/>
		<updated>2026-05-29T22:19:04Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;require(&amp;#039;strict&amp;#039;) local cfg = mw.loadData(&amp;#039;Module:Sidebar/configuration&amp;#039;)  local p = {}  local getArgs = require(&amp;#039;Module:Arguments&amp;#039;).getArgs  -- Categorizes calling templates and modules with a &amp;#039;style&amp;#039; parameter of any sort for tracking to convert to TemplateStyles.  TODO after a long cleanup: Catch sidebars in other namespaces than Template and Module. TODO would probably want to remove /log and /archive as CS1 does  local function categorizeTemplatesWithInlineStyle...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;require(&#039;strict&#039;)&lt;br /&gt;
local cfg = mw.loadData(&#039;Module:Sidebar/configuration&#039;)&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local getArgs = require(&#039;Module:Arguments&#039;).getArgs&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
Categorizes calling templates and modules with a &#039;style&#039; parameter of any sort&lt;br /&gt;
for tracking to convert to TemplateStyles.&lt;br /&gt;
&lt;br /&gt;
TODO after a long cleanup: Catch sidebars in other namespaces than Template and Module.&lt;br /&gt;
TODO would probably want to remove /log and /archive as CS1 does&lt;br /&gt;
]]&lt;br /&gt;
local function categorizeTemplatesWithInlineStyles(args)&lt;br /&gt;
	local title = mw.title.getCurrentTitle()&lt;br /&gt;
	if title.namespace ~= 10 and title.namespace ~= 828 then return &#039;&#039; end&lt;br /&gt;
	for _, pattern in ipairs (cfg.i18n.pattern.uncategorized_conversion_titles) do&lt;br /&gt;
		if title.text:match(pattern) then return &#039;&#039; end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	for key, _ in pairs(args) do&lt;br /&gt;
		if mw.ustring.find(key, cfg.i18n.pattern.style_conversion) or key == &#039;width&#039; then&lt;br /&gt;
			return cfg.i18n.category.conversion&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
For compatibility with the original {{sidebar with collapsible lists}}&lt;br /&gt;
implementation, which passed some parameters through {{#if}} to trim their&lt;br /&gt;
whitespace. This also triggered the automatic newline behavior.&lt;br /&gt;
]]&lt;br /&gt;
-- See ([[meta:Help:Newlines and spaces#Automatic newline]])&lt;br /&gt;
local function trimAndAddAutomaticNewline(s)&lt;br /&gt;
	s = mw.ustring.gsub(s, &amp;quot;^%s*(.-)%s*$&amp;quot;, &amp;quot;%1&amp;quot;)&lt;br /&gt;
	if mw.ustring.find(s, &#039;^[#*:;]&#039;) or mw.ustring.find(s, &#039;^{|&#039;) then&lt;br /&gt;
		return &#039;\n&#039; .. s&lt;br /&gt;
	else&lt;br /&gt;
		return s&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
Finds whether a sidebar has a subgroup sidebar.&lt;br /&gt;
]]&lt;br /&gt;
local function detectChild(s)&lt;br /&gt;
	if mw.ustring.find(s, cfg.i18n.pattern.subgroup) then&lt;br /&gt;
		return true&lt;br /&gt;
	else&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function has_navbar(navbar_mode, sidebar_name)&lt;br /&gt;
	return navbar_mode ~= cfg.i18n.navbar_none and&lt;br /&gt;
		navbar_mode ~= cfg.i18n.navbar_off and&lt;br /&gt;
		(&lt;br /&gt;
			sidebar_name or&lt;br /&gt;
			mw.getCurrentFrame():getParent():getTitle():gsub(cfg.i18n.pattern.sandbox, &#039;&#039;) ~=&lt;br /&gt;
			cfg.i18n.title_not_to_add_navbar&lt;br /&gt;
		)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function has_list_class(args, htmlclass)&lt;br /&gt;
	local patterns = {&lt;br /&gt;
		&#039;^&#039; .. htmlclass .. &#039;$&#039;,&lt;br /&gt;
		&#039;%s&#039; .. htmlclass .. &#039;$&#039;,&lt;br /&gt;
		&#039;^&#039; .. htmlclass .. &#039;%s&#039;,&lt;br /&gt;
		&#039;%s&#039; .. htmlclass .. &#039;%s&#039;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	for arg, value in pairs(args) do&lt;br /&gt;
		if type(arg) == &#039;string&#039; and mw.ustring.find(arg, &#039;class&#039;) then&lt;br /&gt;
			for _, pattern in ipairs(patterns) do&lt;br /&gt;
				if mw.ustring.find(args[arg] or &#039;&#039;, pattern) then&lt;br /&gt;
					return true&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- there are a lot of list classes in the wild, so we add their TemplateStyles&lt;br /&gt;
local function add_list_styles(args)&lt;br /&gt;
	local frame = mw.getCurrentFrame()&lt;br /&gt;
	local function add_list_templatestyles(htmlclass, templatestyles)&lt;br /&gt;
		if has_list_class(args, htmlclass) then&lt;br /&gt;
			return frame:extensionTag{&lt;br /&gt;
				name = &#039;templatestyles&#039;, args = { src = templatestyles }&lt;br /&gt;
			}&lt;br /&gt;
		else&lt;br /&gt;
			return &#039;&#039;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local plainlist_styles = add_list_templatestyles(&#039;plainlist&#039;, cfg.i18n.templatestyles.plainlist)&lt;br /&gt;
	local hlist_styles = add_list_templatestyles(&#039;hlist&#039;, cfg.i18n.templatestyles.hlist)&lt;br /&gt;
	&lt;br /&gt;
	-- a second workaround for [[phab:T303378]]&lt;br /&gt;
	-- when that issue is fixed, we can actually use has_navbar not to emit the&lt;br /&gt;
	-- tag here if we want&lt;br /&gt;
	if has_navbar(args.navbar, args.name) and hlist_styles == &#039;&#039; then&lt;br /&gt;
		hlist_styles = frame:extensionTag{&lt;br /&gt;
			name = &#039;templatestyles&#039;, args = { src = cfg.i18n.templatestyles.hlist}&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- hlist -&amp;gt; plainlist is best-effort to preserve old Common.css ordering. [hlist_note]&lt;br /&gt;
	return hlist_styles .. plainlist_styles&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- work around [[phab:T303378]]&lt;br /&gt;
-- for each arg: find all the templatestyles strip markers, insert them into a&lt;br /&gt;
-- table. then remove all templatestyles markers from the arg&lt;br /&gt;
local function move_hiding_templatestyles(args)&lt;br /&gt;
	local gmatch = string.gmatch&lt;br /&gt;
	local gsub = string.gsub&lt;br /&gt;
	local templatestyles_markers = {}&lt;br /&gt;
	local strip_marker_pattern = &#039;(\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127)&#039;&lt;br /&gt;
	for k, arg in pairs(args) do&lt;br /&gt;
		for marker in gmatch(arg, strip_marker_pattern) do&lt;br /&gt;
			table.insert(templatestyles_markers, marker)&lt;br /&gt;
		end&lt;br /&gt;
		args[k] = gsub(arg, strip_marker_pattern, &#039;&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	return templatestyles_markers&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
Main sidebar function. Takes the frame, args, and an optional collapsibleClass.&lt;br /&gt;
The collapsibleClass is and should be used only for sidebars with collapsible&lt;br /&gt;
lists, as in p.collapsible.&lt;br /&gt;
]]&lt;br /&gt;
function p.sidebar(frame, args, collapsibleClass)&lt;br /&gt;
	if not args then&lt;br /&gt;
		args = getArgs(frame)&lt;br /&gt;
	end&lt;br /&gt;
	local hiding_templatestyles = table.concat(move_hiding_templatestyles(args))&lt;br /&gt;
	local root = mw.html.create()&lt;br /&gt;
	local child = args.child and mw.text.trim(args.child) == cfg.i18n.child_yes&lt;br /&gt;
&lt;br /&gt;
	root = root:tag(&#039;table&#039;)&lt;br /&gt;
	if not child then&lt;br /&gt;
		root&lt;br /&gt;
			:addClass(cfg.i18n.class.sidebar)&lt;br /&gt;
			-- force collapsibleClass to be sidebar-collapse otherwise output nothing&lt;br /&gt;
			:addClass(collapsibleClass == cfg.i18n.class.collapse and cfg.i18n.class.collapse or nil)&lt;br /&gt;
			:addClass(&#039;nomobile&#039;)&lt;br /&gt;
			:addClass(args.float == cfg.i18n.float_none and cfg.i18n.class.float_none or nil)&lt;br /&gt;
			:addClass(args.float == cfg.i18n.float_left and cfg.i18n.class.float_left or nil)&lt;br /&gt;
			:addClass(args.wraplinks ~= cfg.i18n.wrap_true and cfg.i18n.class.wraplinks or nil)&lt;br /&gt;
			:addClass(args.bodyclass or args.class)&lt;br /&gt;
			:attr(&#039;role&#039;, &#039;navigation&#039;)&lt;br /&gt;
			:css(&#039;width&#039;, args.width or nil)&lt;br /&gt;
			:cssText(args.bodystyle or args.style)&lt;br /&gt;
&lt;br /&gt;
		if args.outertitle then&lt;br /&gt;
			root&lt;br /&gt;
				:tag(&#039;caption&#039;)&lt;br /&gt;
					:addClass(cfg.i18n.class.outer_title)&lt;br /&gt;
					:addClass(args.outertitleclass)&lt;br /&gt;
					:cssText(args.outertitlestyle)&lt;br /&gt;
					:wikitext(args.outertitle)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if args.topimage then&lt;br /&gt;
			local imageCell = root:tag(&#039;tr&#039;):tag(&#039;td&#039;)&lt;br /&gt;
&lt;br /&gt;
			imageCell&lt;br /&gt;
				:addClass(cfg.i18n.class.top_image)&lt;br /&gt;
				:addClass(args.topimageclass)&lt;br /&gt;
				:cssText(args.topimagestyle)&lt;br /&gt;
				:wikitext(args.topimage)&lt;br /&gt;
&lt;br /&gt;
			if args.topcaption then&lt;br /&gt;
				imageCell&lt;br /&gt;
					:tag(&#039;div&#039;)&lt;br /&gt;
						:addClass(cfg.i18n.class.top_caption)&lt;br /&gt;
						:cssText(args.topcaptionstyle)&lt;br /&gt;
						:wikitext(args.topcaption)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if args.pretitle then&lt;br /&gt;
			root&lt;br /&gt;
				:tag(&#039;tr&#039;)&lt;br /&gt;
					:tag(&#039;td&#039;)&lt;br /&gt;
						:addClass(args.topimage and cfg.i18n.class.pretitle_with_top_image&lt;br /&gt;
							or cfg.i18n.class.pretitle)&lt;br /&gt;
						:addClass(args.pretitleclass)&lt;br /&gt;
						:cssText(args.basestyle)&lt;br /&gt;
						:cssText(args.pretitlestyle)&lt;br /&gt;
						:wikitext(args.pretitle)&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		root&lt;br /&gt;
			:addClass(cfg.i18n.class.subgroup)&lt;br /&gt;
			:addClass(args.bodyclass or args.class)&lt;br /&gt;
			:cssText(args.bodystyle or args.style)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if args.title then&lt;br /&gt;
		if child then&lt;br /&gt;
			root&lt;br /&gt;
				:wikitext(args.title)&lt;br /&gt;
		else&lt;br /&gt;
			root&lt;br /&gt;
				:tag(&#039;tr&#039;)&lt;br /&gt;
					:tag(&#039;th&#039;)&lt;br /&gt;
						:addClass(args.pretitle and cfg.i18n.class.title_with_pretitle&lt;br /&gt;
							or cfg.i18n.class.title)&lt;br /&gt;
						:addClass(args.titleclass)&lt;br /&gt;
						:cssText(args.basestyle)&lt;br /&gt;
						:cssText(args.titlestyle)&lt;br /&gt;
						:wikitext(args.title)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if args.image then&lt;br /&gt;
		local imageCell = root:tag(&#039;tr&#039;):tag(&#039;td&#039;)&lt;br /&gt;
&lt;br /&gt;
		imageCell&lt;br /&gt;
			:addClass(cfg.i18n.class.image)&lt;br /&gt;
			:addClass(args.imageclass)&lt;br /&gt;
			:cssText(args.imagestyle)&lt;br /&gt;
			:wikitext(args.image)&lt;br /&gt;
&lt;br /&gt;
		if args.caption then&lt;br /&gt;
			imageCell&lt;br /&gt;
				:tag(&#039;div&#039;)&lt;br /&gt;
					:addClass(cfg.i18n.class.caption)&lt;br /&gt;
					:cssText(args.captionstyle)&lt;br /&gt;
					:wikitext(args.caption)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if args.above then&lt;br /&gt;
		root&lt;br /&gt;
			:tag(&#039;tr&#039;)&lt;br /&gt;
				:tag(&#039;td&#039;)&lt;br /&gt;
					:addClass(cfg.i18n.class.above)&lt;br /&gt;
					:addClass(args.aboveclass)&lt;br /&gt;
					:cssText(args.abovestyle)&lt;br /&gt;
					:newline() -- newline required for bullet-points to work&lt;br /&gt;
					:wikitext(args.above)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local rowNums = {}&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		k = &#039;&#039; .. k&lt;br /&gt;
		local num = k:match(&#039;^heading(%d+)$&#039;) or k:match(&#039;^content(%d+)$&#039;)&lt;br /&gt;
		if num then table.insert(rowNums, tonumber(num)) end&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(rowNums)&lt;br /&gt;
	-- remove duplicates from the list (e.g. 3 will be duplicated if both heading3&lt;br /&gt;
	-- and content3 are specified)&lt;br /&gt;
	for i = #rowNums, 1, -1 do&lt;br /&gt;
		if rowNums[i] == rowNums[i - 1] then&lt;br /&gt;
			table.remove(rowNums, i)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local hasChild = false&lt;br /&gt;
	for i, num in ipairs(rowNums) do&lt;br /&gt;
		local heading = args[&#039;heading&#039; .. num]&lt;br /&gt;
		if heading then&lt;br /&gt;
			root&lt;br /&gt;
				:tag(&#039;tr&#039;)&lt;br /&gt;
					:tag(&#039;th&#039;)&lt;br /&gt;
						:addClass(cfg.i18n.class.heading)&lt;br /&gt;
						:addClass(args.headingclass)&lt;br /&gt;
						:addClass(args[&#039;heading&#039; .. num .. &#039;class&#039;])&lt;br /&gt;
						:cssText(args.basestyle)&lt;br /&gt;
						:cssText(args.headingstyle)&lt;br /&gt;
						:cssText(args[&#039;heading&#039; .. num .. &#039;style&#039;])&lt;br /&gt;
						:newline()&lt;br /&gt;
						:wikitext(heading)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		local content = args[&#039;content&#039; .. num]&lt;br /&gt;
		if content then&lt;br /&gt;
			local baseContentClass = cfg.i18n.class.content&lt;br /&gt;
			if detectChild(content) then&lt;br /&gt;
				baseContentClass = cfg.i18n.class.content_with_subgroup&lt;br /&gt;
				hasChild = true&lt;br /&gt;
			end&lt;br /&gt;
			root&lt;br /&gt;
				:tag(&#039;tr&#039;)&lt;br /&gt;
					:tag(&#039;td&#039;)&lt;br /&gt;
						:addClass(baseContentClass)&lt;br /&gt;
						:addClass(args.contentclass)&lt;br /&gt;
						:addClass(args[&#039;content&#039; .. num .. &#039;class&#039;])&lt;br /&gt;
						:cssText(args.contentstyle)&lt;br /&gt;
						:cssText(args[&#039;content&#039; .. num .. &#039;style&#039;])&lt;br /&gt;
						:newline()&lt;br /&gt;
						:wikitext(content)&lt;br /&gt;
						:done()&lt;br /&gt;
					 -- Without a linebreak after the &amp;lt;/td&amp;gt;, a nested list like&lt;br /&gt;
					 -- &amp;quot;* {{hlist| ...}}&amp;quot; doesn&#039;t parse correctly.&lt;br /&gt;
					:newline()&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if args.below then&lt;br /&gt;
		root&lt;br /&gt;
			:tag(&#039;tr&#039;)&lt;br /&gt;
				:tag(&#039;td&#039;)&lt;br /&gt;
					:addClass(cfg.i18n.class.below)&lt;br /&gt;
					:addClass(args.belowclass)&lt;br /&gt;
					:cssText(args.belowstyle)&lt;br /&gt;
					:newline()&lt;br /&gt;
					:wikitext(args.below)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if not child and has_navbar(args.navbar, args.name) then&lt;br /&gt;
		root&lt;br /&gt;
			:tag(&#039;tr&#039;)&lt;br /&gt;
				:tag(&#039;td&#039;)&lt;br /&gt;
					:addClass(cfg.i18n.class.navbar)&lt;br /&gt;
					:cssText(args.navbarstyle)&lt;br /&gt;
					:wikitext(require(&#039;Module:Navbar&#039;)._navbar{&lt;br /&gt;
						args.name,&lt;br /&gt;
						mini = 1,&lt;br /&gt;
						fontstyle = args.navbarfontstyle&lt;br /&gt;
					})&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local base_templatestyles = &#039;&#039;&lt;br /&gt;
	if not child then&lt;br /&gt;
		base_templatestyles = frame:extensionTag{&lt;br /&gt;
			name = &#039;templatestyles&#039;, args = { src = cfg.i18n.templatestyles.sidebar }&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local templatestyles = &#039;&#039;&lt;br /&gt;
	if args[&#039;templatestyles&#039;] and args[&#039;templatestyles&#039;] ~= &#039;&#039; then&lt;br /&gt;
		templatestyles = frame:extensionTag{&lt;br /&gt;
			name = &#039;templatestyles&#039;, args = { src = args[&#039;templatestyles&#039;] }&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local child_templatestyles = &#039;&#039;&lt;br /&gt;
	if args[&#039;child templatestyles&#039;] and args[&#039;child templatestyles&#039;] ~= &#039;&#039; then&lt;br /&gt;
		child_templatestyles = frame:extensionTag{&lt;br /&gt;
			name = &#039;templatestyles&#039;, args = { src = args[&#039;child templatestyles&#039;] }&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local grandchild_templatestyles = &#039;&#039;&lt;br /&gt;
	if args[&#039;grandchild templatestyles&#039;] and args[&#039;grandchild templatestyles&#039;] ~= &#039;&#039; then&lt;br /&gt;
		grandchild_templatestyles = frame:extensionTag{&lt;br /&gt;
			name = &#039;templatestyles&#039;, args = { src = args[&#039;grandchild templatestyles&#039;] }&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return table.concat({&lt;br /&gt;
		add_list_styles(args), -- see [hlist_note] above about ordering&lt;br /&gt;
		base_templatestyles,&lt;br /&gt;
		templatestyles,&lt;br /&gt;
		child_templatestyles,&lt;br /&gt;
		grandchild_templatestyles,&lt;br /&gt;
		hiding_templatestyles,&lt;br /&gt;
		tostring(root),&lt;br /&gt;
		(hasChild and cfg.i18n.category.child or &#039;&#039;),&lt;br /&gt;
		categorizeTemplatesWithInlineStyles(args)&lt;br /&gt;
	})&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function list_title(args, is_centered_list_titles, num)&lt;br /&gt;
	&lt;br /&gt;
	local title_text = trimAndAddAutomaticNewline(args[&#039;list&#039; .. num .. &#039;title&#039;]&lt;br /&gt;
		or cfg.i18n.default_list_title)&lt;br /&gt;
&lt;br /&gt;
	local title&lt;br /&gt;
	if is_centered_list_titles then&lt;br /&gt;
		-- collapsible can be finicky, so provide some CSS/HTML to support&lt;br /&gt;
		title = mw.html.create(&#039;div&#039;)&lt;br /&gt;
			:addClass(cfg.i18n.class.list_title_centered)&lt;br /&gt;
			:wikitext(title_text)&lt;br /&gt;
	else&lt;br /&gt;
		title = mw.html.create()&lt;br /&gt;
			:wikitext(title_text)&lt;br /&gt;
	end&lt;br /&gt;
		&lt;br /&gt;
	local title_container = mw.html.create(&#039;div&#039;)&lt;br /&gt;
		:addClass(cfg.i18n.class.list_title)&lt;br /&gt;
		-- don&#039;t /need/ a listnumtitleclass because you can do&lt;br /&gt;
		-- .templateclass .listnumclass .sidebar-list-title&lt;br /&gt;
		:addClass(args.listtitleclass)&lt;br /&gt;
		:cssText(args.basestyle)&lt;br /&gt;
		:cssText(args.listtitlestyle)&lt;br /&gt;
		:cssText(&#039;color: var(--color-base)&#039;)&lt;br /&gt;
		:cssText(args[&#039;list&#039; .. num .. &#039;titlestyle&#039;])&lt;br /&gt;
		:node(title)&lt;br /&gt;
		:done()&lt;br /&gt;
	&lt;br /&gt;
	return title_container&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
Main entry point for sidebar with collapsible lists.&lt;br /&gt;
Does the work of creating the collapsible lists themselves and including them&lt;br /&gt;
into the args.&lt;br /&gt;
]]&lt;br /&gt;
function p.collapsible(frame)&lt;br /&gt;
	local args = getArgs(frame)&lt;br /&gt;
	if not args.name and&lt;br /&gt;
		frame:getParent():getTitle():gsub(cfg.i18n.pattern.collapse_sandbox, &#039;&#039;) ==&lt;br /&gt;
		cfg.i18n.collapse_title_not_to_add_navbar then&lt;br /&gt;
		args.navbar = cfg.i18n.navbar_none&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local contentArgs = {}&lt;br /&gt;
	&lt;br /&gt;
	local is_centered_list_titles = false&lt;br /&gt;
	if args[&#039;centered list titles&#039;] and args[&#039;centered list titles&#039;] ~= &#039;&#039; then&lt;br /&gt;
		is_centered_list_titles = true&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		local num = string.match(k, &#039;^list(%d+)$&#039;)&lt;br /&gt;
		if num then&lt;br /&gt;
			local expand = args.expanded and&lt;br /&gt;
				(args.expanded == &#039;all&#039; or args.expanded == args[&#039;list&#039; .. num .. &#039;name&#039;])&lt;br /&gt;
			local row = mw.html.create(&#039;div&#039;)&lt;br /&gt;
			row&lt;br /&gt;
				:addClass(cfg.i18n.class.list)&lt;br /&gt;
				:addClass(&#039;mw-collapsible&#039;)&lt;br /&gt;
				:addClass((not expand) and &#039;mw-collapsed&#039; or nil)&lt;br /&gt;
				:addClass(args[&#039;list&#039; .. num .. &#039;class&#039;])&lt;br /&gt;
				:cssText(args.listframestyle)&lt;br /&gt;
				:cssText(args[&#039;list&#039; .. num .. &#039;framestyle&#039;])&lt;br /&gt;
				:node(list_title(args, is_centered_list_titles, num))&lt;br /&gt;
				:tag(&#039;div&#039;)&lt;br /&gt;
					:addClass(cfg.i18n.class.list_content)&lt;br /&gt;
					:addClass(&#039;mw-collapsible-content&#039;)&lt;br /&gt;
					-- don&#039;t /need/ a listnumstyleclass because you can do&lt;br /&gt;
					-- .templatename .listnumclass .sidebar-list&lt;br /&gt;
					:addClass(args.listclass)&lt;br /&gt;
					:cssText(args.liststyle)&lt;br /&gt;
					:cssText(args[&#039;list&#039; .. num .. &#039;style&#039;])&lt;br /&gt;
					:wikitext(trimAndAddAutomaticNewline(args[&#039;list&#039; .. num]))&lt;br /&gt;
&lt;br /&gt;
			contentArgs[&#039;content&#039; .. num] = tostring(row)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	for k, v in pairs(contentArgs) do&lt;br /&gt;
		args[k] = v&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return p.sidebar(frame, args, cfg.i18n.class.collapse)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://en.mippedia.org/index.php?title=Template:Sidebar&amp;diff=431</id>
		<title>Template:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://en.mippedia.org/index.php?title=Template:Sidebar&amp;diff=431"/>
		<updated>2026-05-29T22:18:26Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;{{#invoke:Sidebar|sidebar}}&amp;lt;noinclude&amp;gt; {{documentation}}&amp;lt;/noinclude&amp;gt;&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#invoke:Sidebar|sidebar}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://en.mippedia.org/index.php?title=Module:Color_contrast/colors&amp;diff=430</id>
		<title>Module:Color contrast/colors</title>
		<link rel="alternate" type="text/html" href="https://en.mippedia.org/index.php?title=Module:Color_contrast/colors&amp;diff=430"/>
		<updated>2026-05-29T22:17:13Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;return { 	aliceblue            = 0.92880068253475, 	antiquewhite         = 0.84646951707754, 	aqua                 = 0.7874, 	aquamarine           = 0.8078549208338, 	azure                = 0.97265264954166, 	beige                = 0.8988459998705, 	bisque               = 0.80732327372979, 	black                = 0, 	blanchedalmond       = 0.85084439608156, 	blue                 = 0.0722, 	blueviolet           = 0.12622014321946, 	brown                = 0.098224287876511...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;return {&lt;br /&gt;
	aliceblue            = 0.92880068253475,&lt;br /&gt;
	antiquewhite         = 0.84646951707754,&lt;br /&gt;
	aqua                 = 0.7874,&lt;br /&gt;
	aquamarine           = 0.8078549208338,&lt;br /&gt;
	azure                = 0.97265264954166,&lt;br /&gt;
	beige                = 0.8988459998705,&lt;br /&gt;
	bisque               = 0.80732327372979,&lt;br /&gt;
	black                = 0,&lt;br /&gt;
	blanchedalmond       = 0.85084439608156,&lt;br /&gt;
	blue                 = 0.0722,&lt;br /&gt;
	blueviolet           = 0.12622014321946,&lt;br /&gt;
	brown                = 0.098224287876511,&lt;br /&gt;
	burlywood            = 0.51559844533893,&lt;br /&gt;
	cadetblue            = 0.29424681085422,&lt;br /&gt;
	chartreuse           = 0.76032025902623,&lt;br /&gt;
	chocolate            = 0.23898526114557,&lt;br /&gt;
	coral                = 0.37017930872924,&lt;br /&gt;
	cornflowerblue       = 0.30318641994179,&lt;br /&gt;
	cornsilk             = 0.93562110372965,&lt;br /&gt;
	crimson              = 0.16042199953026,&lt;br /&gt;
	cyan                 = 0.7874,&lt;br /&gt;
	darkblue             = 0.018640801980939,&lt;br /&gt;
	darkcyan             = 0.20329317839046,&lt;br /&gt;
	darkgoldenrod        = 0.27264703559993,&lt;br /&gt;
	darkgray             = 0.39675523072563,&lt;br /&gt;
	darkgreen            = 0.091143429047575,&lt;br /&gt;
	darkgrey             = 0.39675523072563,&lt;br /&gt;
	darkkhaki            = 0.45747326349994,&lt;br /&gt;
	darkmagenta          = 0.07353047651207,&lt;br /&gt;
	darkolivegreen       = 0.12651920884889,&lt;br /&gt;
	darkorange           = 0.40016167026524,&lt;br /&gt;
	darkorchid           = 0.13413142174857,&lt;br /&gt;
	darkred              = 0.054889674531132,&lt;br /&gt;
	darksalmon           = 0.40541471563381,&lt;br /&gt;
	darkseagreen         = 0.43789249325969,&lt;br /&gt;
	darkslateblue        = 0.065792846227988,&lt;br /&gt;
	darkslategray        = 0.067608151928044,&lt;br /&gt;
	darkslategrey        = 0.067608151928044,&lt;br /&gt;
	darkturquoise        = 0.4874606277449,&lt;br /&gt;
	darkviolet           = 0.10999048339343,&lt;br /&gt;
	deeppink             = 0.23866895828276,&lt;br /&gt;
	deepskyblue          = 0.44481603395575,&lt;br /&gt;
	dimgray              = 0.14126329114027,&lt;br /&gt;
	dimgrey              = 0.14126329114027,&lt;br /&gt;
	dodgerblue           = 0.27442536991456,&lt;br /&gt;
	firebrick            = 0.10724525535015,&lt;br /&gt;
	floralwhite          = 0.95922484825004,&lt;br /&gt;
	forestgreen          = 0.18920812076002,&lt;br /&gt;
	fuchsia              = 0.2848,&lt;br /&gt;
	gainsboro            = 0.71569350050648,&lt;br /&gt;
	ghostwhite           = 0.94311261886323,&lt;br /&gt;
	gold                 = 0.69860877428159,&lt;br /&gt;
	goldenrod            = 0.41919977809569,&lt;br /&gt;
	gray                 = 0.2158605001139,&lt;br /&gt;
	green                = 0.15438342968146,&lt;br /&gt;
	greenyellow          = 0.80609472611453,&lt;br /&gt;
	grey                 = 0.2158605001139,&lt;br /&gt;
	honeydew             = 0.96336535554782,&lt;br /&gt;
	hotpink              = 0.34658438169715,&lt;br /&gt;
	indianred            = 0.21406134963884,&lt;br /&gt;
	indigo               = 0.03107561486337,&lt;br /&gt;
	ivory                = 0.99071270600615,&lt;br /&gt;
	khaki                = 0.77012343394121,&lt;br /&gt;
	lavender             = 0.80318750514521,&lt;br /&gt;
	lavenderblush        = 0.90172748631046,&lt;br /&gt;
	lawngreen            = 0.73905893124963,&lt;br /&gt;
	lemonchiffon         = 0.94038992245622,&lt;br /&gt;
	lightblue            = 0.63709141280807,&lt;br /&gt;
	lightcoral           = 0.35522120733135,&lt;br /&gt;
	lightcyan            = 0.94587293494829,&lt;br /&gt;
	lightgoldenrodyellow = 0.93348351018297,&lt;br /&gt;
	lightgray            = 0.65140563741982,&lt;br /&gt;
	lightgreen           = 0.69091979956865,&lt;br /&gt;
	lightgrey            = 0.65140563741982,&lt;br /&gt;
	lightpink            = 0.58566152734898,&lt;br /&gt;
	lightsalmon          = 0.4780675225206,&lt;br /&gt;
	lightseagreen        = 0.35050145117042,&lt;br /&gt;
	lightskyblue         = 0.56195637618331,&lt;br /&gt;
	lightslategray       = 0.23830165007287,&lt;br /&gt;
	lightslategrey       = 0.23830165007287,&lt;br /&gt;
	lightsteelblue       = 0.53983888284666,&lt;br /&gt;
	lightyellow          = 0.98161818392882,&lt;br /&gt;
	lime                 = 0.7152,&lt;br /&gt;
	limegreen            = 0.44571042246098,&lt;br /&gt;
	linen                = 0.88357340984379,&lt;br /&gt;
	magenta              = 0.2848,&lt;br /&gt;
	maroon               = 0.045891942324215,&lt;br /&gt;
	mediumaquamarine     = 0.49389703310801,&lt;br /&gt;
	mediumblue           = 0.044077780212328,&lt;br /&gt;
	mediumorchid         = 0.21639251153773,&lt;br /&gt;
	mediumpurple         = 0.22905858091648,&lt;br /&gt;
	mediumseagreen       = 0.34393112338131,&lt;br /&gt;
	mediumslateblue      = 0.20284629471622,&lt;br /&gt;
	mediumspringgreen    = 0.70704308194184,&lt;br /&gt;
	mediumturquoise      = 0.5133827926448,&lt;br /&gt;
	mediumvioletred      = 0.14371899849357,&lt;br /&gt;
	midnightblue         = 0.02071786635086,&lt;br /&gt;
	mintcream            = 0.97834604947588,&lt;br /&gt;
	mistyrose            = 0.82183047859185,&lt;br /&gt;
	moccasin             = 0.80083000991567,&lt;br /&gt;
	navajowhite          = 0.76519682342785,&lt;br /&gt;
	navy                 = 0.015585128108224,&lt;br /&gt;
	oldlace              = 0.91900633405549,&lt;br /&gt;
	olive                = 0.20027537200568,&lt;br /&gt;
	olivedrab            = 0.22593150951929,&lt;br /&gt;
	orange               = 0.4817026703631,&lt;br /&gt;
	orangered            = 0.25516243753416,&lt;br /&gt;
	orchid               = 0.31348806761439,&lt;br /&gt;
	palegoldenrod        = 0.78792647887614,&lt;br /&gt;
	palegreen            = 0.77936759006353,&lt;br /&gt;
	paleturquoise        = 0.76436077921714,&lt;br /&gt;
	palevioletred        = 0.28754994117889,&lt;br /&gt;
	papayawhip           = 0.87797100199835,&lt;br /&gt;
	peachpuff            = 0.74905589878251,&lt;br /&gt;
	peru                 = 0.30113074877936,&lt;br /&gt;
	pink                 = 0.63271070702466,&lt;br /&gt;
	plum                 = 0.45734221587969,&lt;br /&gt;
	powderblue           = 0.68254586500605,&lt;br /&gt;
	purple               = 0.061477070432439,&lt;br /&gt;
	rebeccapurple        = 0.07492341159447,&lt;br /&gt;
	red                  = 0.2126,&lt;br /&gt;
	rosybrown            = 0.32319457649407,&lt;br /&gt;
	royalblue            = 0.16663210743188,&lt;br /&gt;
	saddlebrown          = 0.097922285020521,&lt;br /&gt;
	salmon               = 0.36977241527596,&lt;br /&gt;
	sandybrown           = 0.46628543696283,&lt;br /&gt;
	seagreen             = 0.19734199706275,&lt;br /&gt;
	seashell             = 0.92737862206922,&lt;br /&gt;
	sienna               = 0.13697631337098,&lt;br /&gt;
	silver               = 0.52711512570581,&lt;br /&gt;
	skyblue              = 0.55291668518184,&lt;br /&gt;
	slateblue            = 0.14784278062136,&lt;br /&gt;
	slategray            = 0.20896704076536,&lt;br /&gt;
	slategrey            = 0.20896704076536,&lt;br /&gt;
	snow                 = 0.96533341834849,&lt;br /&gt;
	springgreen          = 0.73052306068529,&lt;br /&gt;
	steelblue            = 0.20562642207625,&lt;br /&gt;
	tan                  = 0.48237604163921,&lt;br /&gt;
	teal                 = 0.16996855778968,&lt;br /&gt;
	thistle              = 0.56818401093733,&lt;br /&gt;
	tomato               = 0.30638612719415,&lt;br /&gt;
	turquoise            = 0.5895536427578,&lt;br /&gt;
	violet               = 0.40315452986676,&lt;br /&gt;
	wheat                = 0.74909702820482,&lt;br /&gt;
	white                = 1,&lt;br /&gt;
	whitesmoke           = 0.91309865179342,&lt;br /&gt;
	yellow               = 0.9278,&lt;br /&gt;
	yellowgreen          = 0.50762957208707,&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://en.mippedia.org/index.php?title=Module:Color_contrast&amp;diff=429</id>
		<title>Module:Color contrast</title>
		<link rel="alternate" type="text/html" href="https://en.mippedia.org/index.php?title=Module:Color_contrast&amp;diff=429"/>
		<updated>2026-05-29T22:16:02Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;-- -- This module implements --  {{Color contrast ratio}} --  {{Greater color contrast ratio}} --  {{ColorToLum}} --  {{RGBColorToLum}} -- local p = {} local HTMLcolor = mw.loadData( &amp;#039;Module:Color contrast/colors&amp;#039; )  local function sRGB (v) 	if (v &amp;lt;= 0.03928) then 		v = v / 12.92 	else 		v = math.pow((v+0.055)/1.055, 2.4) 	end 	return v end  local function rgbdec2lum(R, G, B) 	if ( 0 &amp;lt;= R and R &amp;lt; 256 and 0 &amp;lt;= G and G &amp;lt; 256 and 0 &amp;lt;= B and B &amp;lt; 256 ) then 		return 0.2126 *...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;--&lt;br /&gt;
-- This module implements&lt;br /&gt;
--  {{Color contrast ratio}}&lt;br /&gt;
--  {{Greater color contrast ratio}}&lt;br /&gt;
--  {{ColorToLum}}&lt;br /&gt;
--  {{RGBColorToLum}}&lt;br /&gt;
--&lt;br /&gt;
local p = {}&lt;br /&gt;
local HTMLcolor = mw.loadData( &#039;Module:Color contrast/colors&#039; )&lt;br /&gt;
&lt;br /&gt;
local function sRGB (v)&lt;br /&gt;
	if (v &amp;lt;= 0.03928) then&lt;br /&gt;
		v = v / 12.92&lt;br /&gt;
	else&lt;br /&gt;
		v = math.pow((v+0.055)/1.055, 2.4)&lt;br /&gt;
	end&lt;br /&gt;
	return v&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function rgbdec2lum(R, G, B)&lt;br /&gt;
	if ( 0 &amp;lt;= R and R &amp;lt; 256 and 0 &amp;lt;= G and G &amp;lt; 256 and 0 &amp;lt;= B and B &amp;lt; 256 ) then&lt;br /&gt;
		return 0.2126 * sRGB(R/255) + 0.7152 * sRGB(G/255) + 0.0722 * sRGB(B/255)&lt;br /&gt;
	else&lt;br /&gt;
		return &#039;&#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function hsl2lum(h, s, l)&lt;br /&gt;
	if ( 0 &amp;lt;= h and h &amp;lt; 360 and 0 &amp;lt;= s and s &amp;lt;= 1 and 0 &amp;lt;= l and l &amp;lt;= 1 ) then&lt;br /&gt;
		local c = (1 - math.abs(2*l - 1))*s&lt;br /&gt;
		local x = c*(1 - math.abs( math.fmod(h/60, 2) - 1) )&lt;br /&gt;
		local m = l - c/2&lt;br /&gt;
&lt;br /&gt;
		local r, g, b = m, m, m&lt;br /&gt;
		if( 0 &amp;lt;= h and h &amp;lt; 60 ) then&lt;br /&gt;
			r = r + c&lt;br /&gt;
			g = g + x&lt;br /&gt;
		elseif( 60 &amp;lt;= h and h &amp;lt; 120 ) then&lt;br /&gt;
			r = r + x&lt;br /&gt;
			g = g + c&lt;br /&gt;
		elseif( 120 &amp;lt;= h and h &amp;lt; 180 ) then&lt;br /&gt;
			g = g + c&lt;br /&gt;
			b = b + x&lt;br /&gt;
		elseif( 180 &amp;lt;= h and h &amp;lt; 240 ) then&lt;br /&gt;
			g = g + x&lt;br /&gt;
			b = b + c&lt;br /&gt;
		elseif( 240 &amp;lt;= h and h &amp;lt; 300 ) then&lt;br /&gt;
			r = r + x&lt;br /&gt;
			b = b + c&lt;br /&gt;
		elseif( 300 &amp;lt;= h and h &amp;lt; 360 ) then&lt;br /&gt;
			r = r + c&lt;br /&gt;
			b = b + x&lt;br /&gt;
		end&lt;br /&gt;
		return rgbdec2lum(255*r, 255*g, 255*b)&lt;br /&gt;
	else&lt;br /&gt;
		return &#039;&#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function color2lum(c)&lt;br /&gt;
&lt;br /&gt;
	if (c == nil) then&lt;br /&gt;
		return &#039;&#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- html &#039;#&#039; entity&lt;br /&gt;
	c = c:gsub(&amp;quot;&amp;amp;#35;&amp;quot;, &amp;quot;#&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
	-- whitespace&lt;br /&gt;
	c = c:match( &#039;^%s*(.-)[%s;]*$&#039; )&lt;br /&gt;
&lt;br /&gt;
	-- unstrip nowiki strip markers&lt;br /&gt;
	c = mw.text.unstripNoWiki(c)&lt;br /&gt;
&lt;br /&gt;
	-- lowercase&lt;br /&gt;
	c = c:lower()&lt;br /&gt;
&lt;br /&gt;
	-- first try to look it up&lt;br /&gt;
	local L = HTMLcolor[c]&lt;br /&gt;
	if (L ~= nil) then&lt;br /&gt;
		return L&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- convert from hsl&lt;br /&gt;
	if mw.ustring.match(c,&#039;^hsl%([%s]*[0-9][0-9%.]*[%s]*,[%s]*[0-9][0-9%.]*%%[%s]*,[%s]*[0-9][0-9%.]*%%[%s]*%)$&#039;) then&lt;br /&gt;
		local h, s, l = mw.ustring.match(c,&#039;^hsl%([%s]*([0-9][0-9%.]*)[%s]*,[%s]*([0-9][0-9%.]*)%%[%s]*,[%s]*([0-9][0-9%.]*)%%[%s]*%)$&#039;)&lt;br /&gt;
		return hsl2lum(tonumber(h), tonumber(s)/100, tonumber(l)/100)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- convert from rgb&lt;br /&gt;
	if mw.ustring.match(c,&#039;^rgb%([%s]*[0-9][0-9]*[%s]*,[%s]*[0-9][0-9]*[%s]*,[%s]*[0-9][0-9]*[%s]*%)$&#039;) then&lt;br /&gt;
		local R, G, B = mw.ustring.match(c,&#039;^rgb%([%s]*([0-9][0-9]*)[%s]*,[%s]*([0-9][0-9]*)[%s]*,[%s]*([0-9][0-9]*)[%s]*%)$&#039;)&lt;br /&gt;
		return rgbdec2lum(tonumber(R), tonumber(G), tonumber(B))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- convert from rgb percent&lt;br /&gt;
	if mw.ustring.match(c,&#039;^rgb%([%s]*[0-9][0-9%.]*%%[%s]*,[%s]*[0-9][0-9%.]*%%[%s]*,[%s]*[0-9][0-9%.]*%%[%s]*%)$&#039;) then&lt;br /&gt;
		local R, G, B = mw.ustring.match(c,&#039;^rgb%([%s]*([0-9][0-9%.]*)%%[%s]*,[%s]*([0-9][0-9%.]*)%%[%s]*,[%s]*([0-9][0-9%.]*)%%[%s]*%)$&#039;)&lt;br /&gt;
		return rgbdec2lum(255*tonumber(R)/100, 255*tonumber(G)/100, 255*tonumber(B)/100)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- remove leading # (if there is one) and whitespace&lt;br /&gt;
	c = mw.ustring.match(c, &#039;^[%s#]*([a-f0-9]*)[%s]*$&#039;)&lt;br /&gt;
&lt;br /&gt;
	-- split into rgb&lt;br /&gt;
	local cs = mw.text.split(c or &#039;&#039;, &#039;&#039;)&lt;br /&gt;
	if( #cs == 6 ) then&lt;br /&gt;
		local R = 16*tonumber(&#039;0x&#039; .. cs[1]) + tonumber(&#039;0x&#039; .. cs[2])&lt;br /&gt;
		local G = 16*tonumber(&#039;0x&#039; .. cs[3]) + tonumber(&#039;0x&#039; .. cs[4])&lt;br /&gt;
		local B = 16*tonumber(&#039;0x&#039; .. cs[5]) + tonumber(&#039;0x&#039; .. cs[6])&lt;br /&gt;
&lt;br /&gt;
		return rgbdec2lum(R, G, B)&lt;br /&gt;
	elseif ( #cs == 3 ) then&lt;br /&gt;
		local R = 16*tonumber(&#039;0x&#039; .. cs[1]) + tonumber(&#039;0x&#039; .. cs[1])&lt;br /&gt;
		local G = 16*tonumber(&#039;0x&#039; .. cs[2]) + tonumber(&#039;0x&#039; .. cs[2])&lt;br /&gt;
		local B = 16*tonumber(&#039;0x&#039; .. cs[3]) + tonumber(&#039;0x&#039; .. cs[3])&lt;br /&gt;
&lt;br /&gt;
		return rgbdec2lum(R, G, B)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- failure, return blank&lt;br /&gt;
	return &#039;&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- This exports the function for use in other modules.&lt;br /&gt;
-- The colour is passed as a string.&lt;br /&gt;
function p._lum(color)&lt;br /&gt;
	return color2lum(color)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._greatercontrast(args)&lt;br /&gt;
	local bias = tonumber(args[&#039;bias&#039;] or &#039;0&#039;) or 0&lt;br /&gt;
	local css = (args[&#039;css&#039;] and args[&#039;css&#039;] ~= &#039;&#039;) and true or false&lt;br /&gt;
	local v1 = color2lum(args[1] or &#039;&#039;)&lt;br /&gt;
	local c2 = args[2] or &#039;white&#039;&lt;br /&gt;
	local v2 = color2lum(c2)&lt;br /&gt;
	local c3 = args[3] or &#039;black&#039;&lt;br /&gt;
	local v3 = color2lum(c3)&lt;br /&gt;
	local ratio1 = -1;&lt;br /&gt;
	local ratio2 = -1;&lt;br /&gt;
	if (type(v1) == &#039;number&#039; and type(v2) == &#039;number&#039;) then&lt;br /&gt;
		ratio1 = (v2 + 0.05)/(v1 + 0.05)&lt;br /&gt;
		ratio1 = (ratio1 &amp;lt; 1) and 1/ratio1 or ratio1&lt;br /&gt;
	end&lt;br /&gt;
	if (type(v1) == &#039;number&#039; and type(v3) == &#039;number&#039;) then&lt;br /&gt;
		ratio2 = (v3 + 0.05)/(v1 + 0.05)&lt;br /&gt;
		ratio2 = (ratio2 &amp;lt; 1) and 1/ratio2 or ratio2&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if css then&lt;br /&gt;
		local c1 = args[1] or &#039;&#039;&lt;br /&gt;
		if mw.ustring.match(c1, &#039;^[A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9]$&#039;) or&lt;br /&gt;
			mw.ustring.match(c1, &#039;^[A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9]$&#039;) then&lt;br /&gt;
				c1 = &#039;#&#039; .. c1&lt;br /&gt;
		end&lt;br /&gt;
		if mw.ustring.match(c2, &#039;^[A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9]$&#039;) or&lt;br /&gt;
			mw.ustring.match(c2, &#039;^[A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9]$&#039;) then&lt;br /&gt;
				c2 = &#039;#&#039; .. c2&lt;br /&gt;
		end&lt;br /&gt;
		if mw.ustring.match(v3, &#039;^[A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9]$&#039;) or&lt;br /&gt;
			mw.ustring.match(v3, &#039;^[A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9]$&#039;) then&lt;br /&gt;
				c3 = &#039;#&#039; .. c3&lt;br /&gt;
		end&lt;br /&gt;
		return &#039;background-color:&#039; .. c1 .. &#039;; color:&#039; .. ((ratio1 &amp;gt; 0) and (ratio2 &amp;gt; 0) and ((ratio1 + bias &amp;gt; ratio2) and c2 or c3) or &#039;&#039;) .. &#039;;&#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return (ratio1 &amp;gt; 0) and (ratio2 &amp;gt; 0) and ((ratio1 + bias &amp;gt; ratio2) and c2 or c3) or &#039;&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._ratio(args)&lt;br /&gt;
	local v1 = color2lum(args[1])&lt;br /&gt;
	local v2 = color2lum(args[2])&lt;br /&gt;
	if (type(v1) == &#039;number&#039; and type(v2) == &#039;number&#039;) then&lt;br /&gt;
		-- v1 should be the brighter of the two.&lt;br /&gt;
		if v2 &amp;gt; v1 then&lt;br /&gt;
			v1, v2 = v2, v1&lt;br /&gt;
		end&lt;br /&gt;
		return (v1 + 0.05)/(v2 + 0.05)&lt;br /&gt;
	else&lt;br /&gt;
		return args[&#039;error&#039;] or &#039;?&#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._styleratio(args)&lt;br /&gt;
	local style = (args[1] or &#039;&#039;):lower()&lt;br /&gt;
	local bg, fg = &#039;white&#039;, &#039;black&#039;&lt;br /&gt;
	local lum_bg, lum_fg = 1, 0&lt;br /&gt;
&lt;br /&gt;
	if args[2] then&lt;br /&gt;
		local lum = color2lum(args[2])&lt;br /&gt;
		if lum ~= &#039;&#039; then bg, lum_bg = args[2], lum end&lt;br /&gt;
	end&lt;br /&gt;
	if args[3] then&lt;br /&gt;
		local lum = color2lum(args[3])&lt;br /&gt;
		if lum ~= &#039;&#039; then fg, lum_fg = args[3], lum end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local slist = mw.text.split(mw.ustring.gsub(mw.ustring.gsub(style or &#039;&#039;, &#039;&amp;amp;#[Xx]23;&#039;, &#039;#&#039;), &#039;&amp;amp;#35;&#039;, &#039;#&#039;), &#039;;&#039;)&lt;br /&gt;
	for k = 1,#slist do&lt;br /&gt;
		local s = slist[k]&lt;br /&gt;
		local k,v = s:match( &#039;^[%s]*([^:]-):([^:]-)[%s;]*$&#039; )&lt;br /&gt;
		k = k or &#039;&#039;&lt;br /&gt;
		v = v or &#039;&#039;&lt;br /&gt;
		if (k:match(&#039;^[%s]*(background)[%s]*$&#039;) or k:match(&#039;^[%s]*(background%-color)[%s]*$&#039;)) then&lt;br /&gt;
			local lum = color2lum(v)&lt;br /&gt;
			if( lum ~= &#039;&#039; ) then bg, lum_bg = v, lum end&lt;br /&gt;
		elseif (k:match(&#039;^[%s]*(color)[%s]*$&#039;)) then&lt;br /&gt;
			local lum = color2lum(v)&lt;br /&gt;
			if( lum ~= &#039;&#039; ) then bg, lum_fg = v, lum end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if lum_bg &amp;gt; lum_fg then&lt;br /&gt;
		return (lum_bg + 0.05)/(lum_fg + 0.05)&lt;br /&gt;
	else&lt;br /&gt;
		return (lum_fg + 0.05)/(lum_bg + 0.05)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
Use {{#invoke:Color contrast|somecolor}} directly or&lt;br /&gt;
{{#invoke:Color contrast}} from a wrapper template.&lt;br /&gt;
&lt;br /&gt;
Parameters:&lt;br /&gt;
	-- |1=	— required; A color to check.&lt;br /&gt;
--]]&lt;br /&gt;
function p.lum(frame)&lt;br /&gt;
	local color = frame.args[1] or frame:getParent().args[1]&lt;br /&gt;
	return p._lum(color)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.ratio(frame)&lt;br /&gt;
	local args = frame.args[1] and frame.args or frame:getParent().args&lt;br /&gt;
	return p._ratio(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.styleratio(frame)&lt;br /&gt;
	local args = frame.args[1] and frame.args or frame:getParent().args&lt;br /&gt;
	return p._styleratio(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.greatercontrast(frame)&lt;br /&gt;
	local args = frame.args[1] and frame.args or frame:getParent().args&lt;br /&gt;
	return p._greatercontrast(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://en.mippedia.org/index.php?title=Module:Navbox/styles.css&amp;diff=428</id>
		<title>Module:Navbox/styles.css</title>
		<link rel="alternate" type="text/html" href="https://en.mippedia.org/index.php?title=Module:Navbox/styles.css&amp;diff=428"/>
		<updated>2026-05-29T22:14:56Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;/* {{pp|small=y}} */ .navbox { 	box-sizing: border-box; 	border: 1px solid #a2a9b1; 	width: 100%; 	clear: both; 	font-size: 88%; 	text-align: center; 	padding: 1px; 	margin: 1em auto 0; /* Prevent preceding content from clinging to navboxes */ }  .navbox .navbox { 	margin-top: 0; /* No top margin for nested navboxes */ }  .navbox + .navbox-styles + .navbox, /* category positions are wrapped in an &amp;quot;empty&amp;quot; span in Parsoid phab:T378906 */  .navbox + span.mw-empty-elt +...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* {{pp|small=y}} */&lt;br /&gt;
.navbox {&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	border: 1px solid #a2a9b1;&lt;br /&gt;
	width: 100%;&lt;br /&gt;
	clear: both;&lt;br /&gt;
	font-size: 88%;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	padding: 1px;&lt;br /&gt;
	margin: 1em auto 0; /* Prevent preceding content from clinging to navboxes */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox .navbox {&lt;br /&gt;
	margin-top: 0; /* No top margin for nested navboxes */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox + .navbox-styles + .navbox,&lt;br /&gt;
/* category positions are wrapped in an &amp;quot;empty&amp;quot; span in Parsoid [[phab:T378906]] */ &lt;br /&gt;
.navbox + span.mw-empty-elt + .navbox-styles + .navbox {&lt;br /&gt;
	margin-top: -1px; /* Single pixel border between adjacent navboxes */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-inner,&lt;br /&gt;
.navbox-subgroup {&lt;br /&gt;
	width: 100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-group,&lt;br /&gt;
.navbox-title,&lt;br /&gt;
.navbox-abovebelow {&lt;br /&gt;
	padding: 0.25em 1em;&lt;br /&gt;
	line-height: 1.5em;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-group {&lt;br /&gt;
	white-space: nowrap;&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	text-align: right;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox,&lt;br /&gt;
.navbox-subgroup {&lt;br /&gt;
	background-color: #fdfdfd;&lt;br /&gt;
    color:inherit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-list {&lt;br /&gt;
	line-height: 1.5em;&lt;br /&gt;
	border-color: #fdfdfd; /* Must match background color */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-list-with-group {&lt;br /&gt;
	text-align: left;&lt;br /&gt;
	border-left-width: 2px;&lt;br /&gt;
	border-left-style: solid;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* cell spacing for navbox cells */&lt;br /&gt;
/* Borders above 2nd, 3rd, etc. rows */&lt;br /&gt;
/* TODO: figure out how to replace tr as structure;&lt;br /&gt;
 * with div structure it should be just a matter of first-child */&lt;br /&gt;
tr + tr &amp;gt; .navbox-abovebelow,&lt;br /&gt;
tr + tr &amp;gt; .navbox-group,&lt;br /&gt;
tr + tr &amp;gt; .navbox-image,&lt;br /&gt;
tr + tr &amp;gt; .navbox-list {&lt;br /&gt;
	border-top: 2px solid #fdfdfd; /* Must match background color */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-title {&lt;br /&gt;
	background-color: #ccf; /* Level 1 color */&lt;br /&gt;
    color:inherit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-abovebelow,&lt;br /&gt;
.navbox-group,&lt;br /&gt;
.navbox-subgroup .navbox-title {&lt;br /&gt;
	background-color: #ddf; /* Level 2 color */&lt;br /&gt;
    color:inherit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-subgroup .navbox-group,&lt;br /&gt;
.navbox-subgroup .navbox-abovebelow {&lt;br /&gt;
	background-color: #e6e6ff; /* Level 3 color */&lt;br /&gt;
    color:inherit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-even {&lt;br /&gt;
	background-color: #f7f7f7;&lt;br /&gt;
    color:inherit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-odd {&lt;br /&gt;
	background-color: transparent;&lt;br /&gt;
    color:inherit;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* TODO: figure out how to remove reliance on td as structure */&lt;br /&gt;
.navbox .hlist td dl,&lt;br /&gt;
.navbox .hlist td ol,&lt;br /&gt;
.navbox .hlist td ul,&lt;br /&gt;
.navbox td.hlist dl,&lt;br /&gt;
.navbox td.hlist ol,&lt;br /&gt;
.navbox td.hlist ul {&lt;br /&gt;
	padding: 0.125em 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox .navbar {&lt;br /&gt;
	display: block;&lt;br /&gt;
	font-size: 100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.navbox-title .navbar {&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	float: left;&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	text-align: left;&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	margin-right: 0.5em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/** T367463 */&lt;br /&gt;
body.skin--responsive .navbox-image img {&lt;br /&gt;
	max-width: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media print {&lt;br /&gt;
	body.ns-0 .navbox {&lt;br /&gt;
		display: none !important;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://en.mippedia.org/index.php?title=Module:Navbox/configuration&amp;diff=427</id>
		<title>Module:Navbox/configuration</title>
		<link rel="alternate" type="text/html" href="https://en.mippedia.org/index.php?title=Module:Navbox/configuration&amp;diff=427"/>
		<updated>2026-05-29T22:14:12Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;return { 	aria_label = &amp;#039;Navbox&amp;#039;, 	nowrap_item = &amp;#039;%s&amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;%s&amp;lt;/span&amp;gt;&amp;#039;, 	templatestyles = mw.getCurrentFrame():extensionTag{ 		name = &amp;#039;templatestyles&amp;#039;, args = { src = &amp;#039;Module:Navbox/styles.css&amp;#039; } 	}, 	hlist_templatestyles = &amp;#039;Hlist/styles.css&amp;#039;, 	plainlist_templatestyles = &amp;#039;Plainlist/styles.css&amp;#039;, 	-- do not localize marker table 	marker = { 		oddeven = &amp;#039;\127_ODDEVEN_\127&amp;#039;, 		restart = &amp;#039;\127_ODDEVEN0_\127&amp;#039;, 		regex = &amp;#039;\127_ODDEVEN(%d?)_\127&amp;#039; 	}, 	category = {...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;return {&lt;br /&gt;
	aria_label = &#039;Navbox&#039;,&lt;br /&gt;
	nowrap_item = &#039;%s&amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;%s&amp;lt;/span&amp;gt;&#039;,&lt;br /&gt;
	templatestyles = mw.getCurrentFrame():extensionTag{&lt;br /&gt;
		name = &#039;templatestyles&#039;, args = { src = &#039;Module:Navbox/styles.css&#039; }&lt;br /&gt;
	},&lt;br /&gt;
	hlist_templatestyles = &#039;Hlist/styles.css&#039;,&lt;br /&gt;
	plainlist_templatestyles = &#039;Plainlist/styles.css&#039;,&lt;br /&gt;
	-- do not localize marker table&lt;br /&gt;
	marker = {&lt;br /&gt;
		oddeven = &#039;\127_ODDEVEN_\127&#039;,&lt;br /&gt;
		restart = &#039;\127_ODDEVEN0_\127&#039;,&lt;br /&gt;
		regex = &#039;\127_ODDEVEN(%d?)_\127&#039;&lt;br /&gt;
	},&lt;br /&gt;
	category = {&lt;br /&gt;
		orphan = &#039;[[Category:Navbox orphans]]&#039;,&lt;br /&gt;
		horizontal_lists = &#039;Navigational boxes without horizontal lists&#039;,&lt;br /&gt;
		background_colors = &#039;Navboxes using background colours&#039;,&lt;br /&gt;
		illegible = &#039;Potentially illegible navboxes&#039;,&lt;br /&gt;
		borders = &#039;Navboxes using borders&#039;,&lt;br /&gt;
		without_first_col = &#039;[[Category:Pages using navbox columns without the first column]]&#039;&lt;br /&gt;
	},&lt;br /&gt;
	keyword = {&lt;br /&gt;
		border_subgroup = &#039;subgroup&#039;,&lt;br /&gt;
		border_child = &#039;child&#039;,&lt;br /&gt;
		border_none = &#039;none&#039;,&lt;br /&gt;
		evenodd_swap = &#039;swap&#039;,&lt;br /&gt;
		navbar_off = &#039;off&#039;,&lt;br /&gt;
		navbar_plain = &#039;plain&#039;,&lt;br /&gt;
		nocat_false = &#039;false&#039;,&lt;br /&gt;
		nowrapitems_yes = &#039;yes&#039;,&lt;br /&gt;
		orphan_yes = &#039;yes&#039;,&lt;br /&gt;
		state_collapsed = &#039;collapsed&#039;,&lt;br /&gt;
		state_off = &#039;off&#039;,&lt;br /&gt;
		state_plain = &#039;plain&#039;,&lt;br /&gt;
		state_uncollapsed = &#039;uncollapsed&#039;,&lt;br /&gt;
		subgroups = {&#039;subgroup&#039;, &#039;child&#039;, &#039;&#039;},&lt;br /&gt;
		subpage_doc = &#039;doc&#039;,&lt;br /&gt;
		subpage_sandbox = &#039;sandbox&#039;,&lt;br /&gt;
		subpage_testcases = &#039;testcases&#039;,&lt;br /&gt;
		tracking_no = &#039;no&#039;,&lt;br /&gt;
		with_collapsible_groups = &#039;with collapsible groups&#039;,&lt;br /&gt;
		with_collapsible_groups_short = &#039;collapsible&#039;,&lt;br /&gt;
		with_columns = &#039;with columns&#039;,&lt;br /&gt;
		with_columns_short = &#039;columns&#039;,&lt;br /&gt;
	},&lt;br /&gt;
	class = {&lt;br /&gt;
		autocollapse = &#039;autocollapse&#039;,&lt;br /&gt;
		collapsible = &#039;mw-collapsible&#039;,&lt;br /&gt;
		collapsed = &#039;mw-collapsed&#039;,&lt;br /&gt;
		-- Warning&lt;br /&gt;
		navbox = &#039;navbox&#039;, -- WMF currently hides &#039;navbox&#039; from mobile,&lt;br /&gt;
		-- so you probably shouldn&#039;t change the navbox class.&lt;br /&gt;
		navbox_abovebelow = &#039;navbox-abovebelow&#039;,&lt;br /&gt;
		navbox_group = &#039;navbox-group&#039;,&lt;br /&gt;
		navbox_image = &#039;navbox-image&#039;,&lt;br /&gt;
		navbox_inner = &#039;navbox-inner&#039;,&lt;br /&gt;
		navbox_list = &#039;navbox-list&#039;,&lt;br /&gt;
		navbox_list_with_group = &#039;navbox-list-with-group&#039;,&lt;br /&gt;
		navbox_part = &#039;navbox-&#039;, -- do not l10n&lt;br /&gt;
		navbox_styles = &#039;navbox-styles&#039;,&lt;br /&gt;
		navbox_subgroup = &#039;navbox-subgroup&#039;,&lt;br /&gt;
		navbox_title = &#039;navbox-title&#039;, -- l10n only if you change pattern.navbox_title below&lt;br /&gt;
		navbox_odd_part = &#039;odd&#039;, -- do not l10n&lt;br /&gt;
		navbox_even_part = &#039;even&#039;, -- do not l10n&lt;br /&gt;
		nomobile = &#039;nomobile&#039;,&lt;br /&gt;
		nowraplinks = &#039;nowraplinks&#039;,&lt;br /&gt;
		noviewer = &#039;noviewer&#039;, -- used to remove images from MediaViewer&lt;br /&gt;
		notheme = &#039;notheme&#039;&lt;br /&gt;
	},&lt;br /&gt;
	pattern = {&lt;br /&gt;
		class = &#039;class&#039;,&lt;br /&gt;
		colnum = &#039;^col(%d+)$&#039;,&lt;br /&gt;
		colheadernum = &#039;^col(%d+)header$&#039;,&lt;br /&gt;
		colfooternum = &#039;^col(%d+)footer$&#039;,&lt;br /&gt;
		contentnum = &#039;^content(%d+)$&#039;,&lt;br /&gt;
		groupnum = &#039;^group(%d+)$&#039;,&lt;br /&gt;
		hlist = &#039;hlist&#039;,&lt;br /&gt;
		listnum = &#039;^list(%d+)$&#039;,&lt;br /&gt;
		navbox = &#039;Template:Navbox&#039;,&lt;br /&gt;
		navbox_title = &#039;&amp;lt;th[^&amp;gt;]*&amp;quot;navbox%-title&amp;quot;&#039;,&lt;br /&gt;
		nowrap = &#039;^&amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;&#039;,&lt;br /&gt;
		num = &#039;^%a+(%d+)$&#039;,&lt;br /&gt;
		plainlist = &#039;plainlist&#039;,&lt;br /&gt;
		sandbox = &#039;/sandbox$&#039;,&lt;br /&gt;
		sectionnum = &#039;^section(%d+)$&#039;,&lt;br /&gt;
		sectnum = &#039;^sect(%d+)$&#039;,&lt;br /&gt;
		style = &#039;style$&#039;,&lt;br /&gt;
		with_collapsible_groups = &#039;Template:Navbox with collapsible groups&#039;,&lt;br /&gt;
		with_columns = &#039;Template:Navbox with columns&#039;,&lt;br /&gt;
	},&lt;br /&gt;
	arg = {&lt;br /&gt;
		abbr_and_num = &#039;abbr%d&#039;,&lt;br /&gt;
		above = &#039;above&#039;,&lt;br /&gt;
		aboveclass = &#039;aboveclass&#039;,&lt;br /&gt;
		abovestyle = &#039;abovestyle&#039;,&lt;br /&gt;
		basestyle = &#039;basestyle&#039;,&lt;br /&gt;
		below = &#039;below&#039;,&lt;br /&gt;
		belowclass = &#039;belowclass&#039;,&lt;br /&gt;
		belowstyle = &#039;belowstyle&#039;,&lt;br /&gt;
		bodyclass = &#039;bodyclass&#039;,&lt;br /&gt;
		bodystyle = &#039;bodystyle&#039;,&lt;br /&gt;
		border = &#039;border&#039;,&lt;br /&gt;
		content_and_num = &#039;content%d&#039;,&lt;br /&gt;
		contentstyle = &#039;contentstyle&#039;,&lt;br /&gt;
		contentstyle_and_num = &#039;content%dstyle&#039;,&lt;br /&gt;
		colheaderstyle = &#039;colheaderstyle&#039;,&lt;br /&gt;
		colheader_and_num = &#039;col%dheader&#039;,&lt;br /&gt;
		colheaderstyle_and_num = &#039;col%dheaderstyle&#039;,&lt;br /&gt;
		colheadercolspan_and_num = &#039;col%dheadercolspan&#039;,&lt;br /&gt;
		colstyle = &#039;colstyle&#039;,&lt;br /&gt;
		col_and_num = &#039;col%d&#039;,&lt;br /&gt;
		colstyle_and_num = &#039;col%dstyle&#039;,&lt;br /&gt;
		colwidth = &#039;colwidth&#039;,&lt;br /&gt;
		colwidth_and_num = &#039;col%dwidth&#039;,&lt;br /&gt;
		colfooterstyle = &#039;colfooterstyle&#039;,&lt;br /&gt;
		colfooter_and_num = &#039;col%dfooter&#039;,&lt;br /&gt;
		colfooterstyle_and_num = &#039;col%dfooterstyle&#039;,&lt;br /&gt;
		colfootercolspan_and_num = &#039;col%dfootercolspan&#039;,&lt;br /&gt;
		coltablestyle = &#039;coltablestyle&#039;,&lt;br /&gt;
		evencolstyle = &#039;evencolstyle&#039;,&lt;br /&gt;
		evenodd = &#039;evenodd&#039;,&lt;br /&gt;
		evenstyle = &#039;evenstyle&#039;,&lt;br /&gt;
		fullwidth = &#039;fullwidth&#039;,&lt;br /&gt;
		group1 = &#039;group1&#039;,&lt;br /&gt;
		group2 = &#039;group2&#039;,&lt;br /&gt;
		group_and_num = &#039;group%d&#039;,&lt;br /&gt;
		groupclass = &#039;groupclass&#039;,&lt;br /&gt;
		groupstyle = &#039;groupstyle&#039;,&lt;br /&gt;
		groupstyle_and_num = &#039;group%dstyle&#039;,&lt;br /&gt;
		groupwidth = &#039;groupwidth&#039;,&lt;br /&gt;
		image = &#039;image&#039;,&lt;br /&gt;
		image_and_num = &#039;image%d&#039;,&lt;br /&gt;
		imageclass = &#039;imageclass&#039;,&lt;br /&gt;
		imageleft = &#039;imageleft&#039;,&lt;br /&gt;
		imageleft_and_num = &#039;imageleft%d&#039;,&lt;br /&gt;
		imageleftstyle = &#039;imageleftstyle&#039;,&lt;br /&gt;
		imagestyle = &#039;imagestyle&#039;,&lt;br /&gt;
		innerstyle = &#039;innerstyle&#039;,&lt;br /&gt;
		list1padding = &#039;list1padding&#039;,&lt;br /&gt;
		list_and_num = &#039;list%d&#039;,&lt;br /&gt;
		listclass = &#039;listclass&#039;,&lt;br /&gt;
		listclass_and_num = &#039;list%dclass&#039;,&lt;br /&gt;
		listpadding = &#039;listpadding&#039;,&lt;br /&gt;
		liststyle = &#039;liststyle&#039;,&lt;br /&gt;
		liststyle_and_num = &#039;list%dstyle&#039;,&lt;br /&gt;
		name = &#039;name&#039;,&lt;br /&gt;
		navbar = &#039;navbar&#039;,&lt;br /&gt;
		navboxclass = &#039;navboxclass&#039;,&lt;br /&gt;
		nocat = &#039;nocat&#039;,&lt;br /&gt;
		nowrapitems = &#039;nowrapitems&#039;,&lt;br /&gt;
		oddcolstyle = &#039;oddcolstyle&#039;,&lt;br /&gt;
		oddstyle = &#039;oddstyle&#039;,&lt;br /&gt;
		orphan = &#039;orphan&#039;,&lt;br /&gt;
		padding = &#039;padding&#039;,&lt;br /&gt;
		sect_and_num = &#039;sect%d&#039;,&lt;br /&gt;
		section_and_num = &#039;section%d&#039;,&lt;br /&gt;
		sectiontitlestyle_and_num = &#039;section%dtitlestyle&#039;,&lt;br /&gt;
		secttitlestyle = &#039;secttitlestyle&#039;,&lt;br /&gt;
		selected = &#039;selected&#039;,&lt;br /&gt;
		state = &#039;state&#039;,&lt;br /&gt;
		state_and_num = &#039;state%d&#039;,&lt;br /&gt;
		style = &#039;style&#039;,&lt;br /&gt;
		subgroups_and_num = {&#039;subgroup%d&#039;, &#039;child%d&#039;, &#039;%d&#039;},&lt;br /&gt;
		templatestyles = &#039;templatestyles&#039;,&lt;br /&gt;
		child_templatestyles = &#039;child templatestyles&#039;,&lt;br /&gt;
		title = &#039;title&#039;,&lt;br /&gt;
		titleclass = &#039;titleclass&#039;,&lt;br /&gt;
		titlestyle = &#039;titlestyle&#039;,&lt;br /&gt;
		tracking = &#039;tracking&#039;,&lt;br /&gt;
	},&lt;br /&gt;
	-- names of navbar arguments&lt;br /&gt;
	navbar = {&lt;br /&gt;
		name = 1,&lt;br /&gt;
		fontstyle = &#039;fontstyle&#039;,&lt;br /&gt;
		mini = &#039;mini&#039;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://en.mippedia.org/index.php?title=Module:Navbox&amp;diff=426</id>
		<title>Module:Navbox</title>
		<link rel="alternate" type="text/html" href="https://en.mippedia.org/index.php?title=Module:Navbox&amp;diff=426"/>
		<updated>2026-05-29T22:13:23Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;require(&amp;#039;strict&amp;#039;) local p = {} local cfg = mw.loadData(&amp;#039;Module:Navbox/configuration&amp;#039;) local inArray = require(&amp;quot;Module:TableTools&amp;quot;).inArray local getArgs -- lazily initialized local hiding_templatestyles = {}   -- global passthrough variables local passthrough = { 	[cfg.arg.above]=true,[cfg.arg.aboveclass]=true,[cfg.arg.abovestyle]=true, 	[cfg.arg.basestyle]=true, 	[cfg.arg.below]=true,[cfg.arg.belowclass]=true,[cfg.arg.belowstyle]=true, 	[cfg.arg.bodyclass]=true, 	[cfg.a...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;require(&#039;strict&#039;)&lt;br /&gt;
local p = {}&lt;br /&gt;
local cfg = mw.loadData(&#039;Module:Navbox/configuration&#039;)&lt;br /&gt;
local inArray = require(&amp;quot;Module:TableTools&amp;quot;).inArray&lt;br /&gt;
local getArgs -- lazily initialized&lt;br /&gt;
local hiding_templatestyles = {} &lt;br /&gt;
&lt;br /&gt;
-- global passthrough variables&lt;br /&gt;
local passthrough = {&lt;br /&gt;
	[cfg.arg.above]=true,[cfg.arg.aboveclass]=true,[cfg.arg.abovestyle]=true,&lt;br /&gt;
	[cfg.arg.basestyle]=true,&lt;br /&gt;
	[cfg.arg.below]=true,[cfg.arg.belowclass]=true,[cfg.arg.belowstyle]=true,&lt;br /&gt;
	[cfg.arg.bodyclass]=true,&lt;br /&gt;
	[cfg.arg.groupclass]=true,&lt;br /&gt;
	[cfg.arg.image]=true,[cfg.arg.imageclass]=true,[cfg.arg.imagestyle]=true,&lt;br /&gt;
	[cfg.arg.imageleft]=true,[cfg.arg.imageleftstyle]=true,&lt;br /&gt;
	[cfg.arg.listclass]=true,&lt;br /&gt;
	[cfg.arg.name]=true,&lt;br /&gt;
	[cfg.arg.navbar]=true,&lt;br /&gt;
	[cfg.arg.state]=true,&lt;br /&gt;
	[cfg.arg.title]=true,[cfg.arg.titleclass]=true,[cfg.arg.titlestyle]=true,&lt;br /&gt;
	argHash=true&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- helper functions&lt;br /&gt;
local andnum = function(s, n) return string.format(cfg.arg[s .. &#039;_and_num&#039;], n) end&lt;br /&gt;
local isblank = function(v) return (v or &#039;&#039;) == &#039;&#039; end&lt;br /&gt;
&lt;br /&gt;
local function concatstrings(s)&lt;br /&gt;
	local r = table.concat(s, &#039;&#039;)&lt;br /&gt;
	if r:match(&#039;^%s*$&#039;) then return nil end&lt;br /&gt;
	return r&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function concatstyles(s)&lt;br /&gt;
	local r = &#039;&#039;&lt;br /&gt;
	for _, v in ipairs(s) do&lt;br /&gt;
		v = mw.text.trim(v, &amp;quot;%s;&amp;quot;)&lt;br /&gt;
		if not isblank(v) then r = r .. v .. &#039;;&#039; end&lt;br /&gt;
	end&lt;br /&gt;
	if isblank(r) then return nil end&lt;br /&gt;
	return r&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getSubgroup(args, listnum, listText, prefix)&lt;br /&gt;
	local subArgs = {&lt;br /&gt;
		[cfg.arg.border] = cfg.keyword.border_subgroup,&lt;br /&gt;
		[cfg.arg.navbar] = cfg.keyword.navbar_plain,&lt;br /&gt;
		argHash = 0&lt;br /&gt;
	}&lt;br /&gt;
	local hasSubArgs = false&lt;br /&gt;
	local subgroups_and_num = prefix and {prefix} or cfg.arg.subgroups_and_num&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		k = tostring(k)&lt;br /&gt;
		for _, w in ipairs(subgroups_and_num) do&lt;br /&gt;
			w = string.format(w, listnum) .. &amp;quot;_&amp;quot;&lt;br /&gt;
			if (#k &amp;gt; #w) and (k:sub(1, #w) == w) then&lt;br /&gt;
				subArgs[k:sub(#w + 1)] = v&lt;br /&gt;
				hasSubArgs = true&lt;br /&gt;
				subArgs.argHash = subArgs.argHash + (v and #v or 0)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return hasSubArgs and p._navbox(subArgs) or listText&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Main functions&lt;br /&gt;
function p._navbox(args)&lt;br /&gt;
	if args.type == cfg.keyword.with_collapsible_groups then&lt;br /&gt;
		return p._withCollapsibleGroups(args)&lt;br /&gt;
	elseif args.type == cfg.keyword.with_columns then&lt;br /&gt;
		return p._withColumns(args)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function striped(wikitext, border)&lt;br /&gt;
		-- Return wikitext with markers replaced for odd/even striping.&lt;br /&gt;
		-- Child (subgroup) navboxes are flagged with a category that is removed&lt;br /&gt;
		-- by parent navboxes. The result is that the category shows all pages&lt;br /&gt;
		-- where a child navbox is not contained in a parent navbox.&lt;br /&gt;
		local orphanCat = cfg.category.orphan&lt;br /&gt;
		if border == cfg.keyword.border_subgroup and args[cfg.arg.orphan] ~= cfg.keyword.orphan_yes then&lt;br /&gt;
			-- No change; striping occurs in outermost navbox.&lt;br /&gt;
			return wikitext .. orphanCat&lt;br /&gt;
		end&lt;br /&gt;
		local first, second = cfg.class.navbox_odd_part, cfg.class.navbox_even_part&lt;br /&gt;
		if args[cfg.arg.evenodd] then&lt;br /&gt;
			if args[cfg.arg.evenodd] == cfg.keyword.evenodd_swap then&lt;br /&gt;
				first, second = second, first&lt;br /&gt;
			else&lt;br /&gt;
				first = args[cfg.arg.evenodd]&lt;br /&gt;
				second = first&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		local changer&lt;br /&gt;
		if first == second then&lt;br /&gt;
			changer = first&lt;br /&gt;
		else&lt;br /&gt;
			local index = 0&lt;br /&gt;
			changer = function (code)&lt;br /&gt;
				if code == &#039;0&#039; then&lt;br /&gt;
					-- Current occurrence is for a group before a nested table.&lt;br /&gt;
					-- Set it to first as a valid although pointless class.&lt;br /&gt;
					-- The next occurrence will be the first row after a title&lt;br /&gt;
					-- in a subgroup and will also be first.&lt;br /&gt;
					index = 0&lt;br /&gt;
					return first&lt;br /&gt;
				end&lt;br /&gt;
				index = index + 1&lt;br /&gt;
				return index % 2 == 1 and first or second&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		local regex = orphanCat:gsub(&#039;([%[%]])&#039;, &#039;%%%1&#039;)&lt;br /&gt;
		return (wikitext:gsub(regex, &#039;&#039;):gsub(cfg.marker.regex, changer)) -- () omits gsub count&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function processItem(item, nowrapitems)&lt;br /&gt;
		if item:sub(1, 2) == &#039;{|&#039; then&lt;br /&gt;
			-- Applying nowrap to lines in a table does not make sense.&lt;br /&gt;
			-- Add newlines to compensate for trim of x in |parm=x in a template.&lt;br /&gt;
			return &#039;\n&#039; .. item .. &#039;\n&#039;&lt;br /&gt;
		end&lt;br /&gt;
		if nowrapitems == cfg.keyword.nowrapitems_yes then&lt;br /&gt;
			local lines = {}&lt;br /&gt;
			for line in (item .. &#039;\n&#039;):gmatch(&#039;([^\n]*)\n&#039;) do&lt;br /&gt;
				local prefix, content = line:match(&#039;^([*:;#]+)%s*(.*)&#039;)&lt;br /&gt;
				if prefix and not content:match(cfg.pattern.nowrap) then&lt;br /&gt;
					line = string.format(cfg.nowrap_item, prefix, content)&lt;br /&gt;
				end&lt;br /&gt;
				table.insert(lines, line)&lt;br /&gt;
			end&lt;br /&gt;
			item = table.concat(lines, &#039;\n&#039;)&lt;br /&gt;
		end&lt;br /&gt;
		if item:match(&#039;^[*:;#]&#039;) then&lt;br /&gt;
			return &#039;\n&#039; .. item .. &#039;\n&#039;&lt;br /&gt;
		end&lt;br /&gt;
		return item&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function has_navbar()&lt;br /&gt;
		return args[cfg.arg.navbar] ~= cfg.keyword.navbar_off&lt;br /&gt;
			and args[cfg.arg.navbar] ~= cfg.keyword.navbar_plain&lt;br /&gt;
			and (&lt;br /&gt;
				args[cfg.arg.name]&lt;br /&gt;
				or mw.getCurrentFrame():getParent():getTitle():gsub(cfg.pattern.sandbox, &#039;&#039;)&lt;br /&gt;
					~= cfg.pattern.navbox&lt;br /&gt;
			)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- extract text color from css, which is the only permitted inline CSS for the navbar&lt;br /&gt;
	local function extract_color(css_str)&lt;br /&gt;
		-- return nil because navbar takes its argument into mw.html which handles&lt;br /&gt;
		-- nil gracefully, removing the associated style attribute&lt;br /&gt;
		return mw.ustring.match(&#039;;&#039; .. css_str .. &#039;;&#039;, &#039;.*;%s*([Cc][Oo][Ll][Oo][Rr]%s*:%s*.-)%s*;&#039;) or nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function renderNavBar(titleCell)&lt;br /&gt;
		if has_navbar() then&lt;br /&gt;
			local navbar = require(&#039;Module:Navbar&#039;)._navbar&lt;br /&gt;
			titleCell:wikitext(navbar{&lt;br /&gt;
				[cfg.navbar.name] = args[cfg.arg.name],&lt;br /&gt;
				[cfg.navbar.mini] = 1,&lt;br /&gt;
				[cfg.navbar.fontstyle] = extract_color(&lt;br /&gt;
					(args[cfg.arg.basestyle] or &#039;&#039;) .. &#039;;&#039; .. (args[cfg.arg.titlestyle] or &#039;&#039;)&lt;br /&gt;
				)&lt;br /&gt;
			})&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function renderTitleRow(tbl)&lt;br /&gt;
		if not args[cfg.arg.title] then return end&lt;br /&gt;
&lt;br /&gt;
		local titleRow = tbl:tag(&#039;tr&#039;)&lt;br /&gt;
&lt;br /&gt;
		local titleCell = titleRow:tag(&#039;th&#039;):attr(&#039;scope&#039;, &#039;col&#039;)&lt;br /&gt;
&lt;br /&gt;
		local titleColspan = 2&lt;br /&gt;
		if args[cfg.arg.imageleft] then titleColspan = titleColspan + 1 end&lt;br /&gt;
		if args[cfg.arg.image] then titleColspan = titleColspan + 1 end&lt;br /&gt;
&lt;br /&gt;
		titleCell&lt;br /&gt;
			:cssText(args[cfg.arg.basestyle])&lt;br /&gt;
			:cssText(args[cfg.arg.titlestyle])&lt;br /&gt;
			:addClass(cfg.class.navbox_title)&lt;br /&gt;
			:attr(&#039;colspan&#039;, titleColspan)&lt;br /&gt;
&lt;br /&gt;
		renderNavBar(titleCell)&lt;br /&gt;
&lt;br /&gt;
		titleCell&lt;br /&gt;
			:tag(&#039;div&#039;)&lt;br /&gt;
				-- id for aria-labelledby attribute&lt;br /&gt;
				:attr(&#039;id&#039;, mw.uri.anchorEncode(args[cfg.arg.title]) .. args.argHash)&lt;br /&gt;
				:addClass(args[cfg.arg.titleclass])&lt;br /&gt;
				:css(&#039;font-size&#039;, &#039;114%&#039;)&lt;br /&gt;
				:css(&#039;margin&#039;, &#039;0 4em&#039;)&lt;br /&gt;
				:wikitext(processItem(args[cfg.arg.title]))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function getAboveBelowColspan()&lt;br /&gt;
		local ret = 2&lt;br /&gt;
		if args[cfg.arg.imageleft] then ret = ret + 1 end&lt;br /&gt;
		if args[cfg.arg.image] then ret = ret + 1 end&lt;br /&gt;
		return ret&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function renderAboveRow(tbl)&lt;br /&gt;
		if not args[cfg.arg.above] then return end&lt;br /&gt;
&lt;br /&gt;
		tbl:tag(&#039;tr&#039;)&lt;br /&gt;
			:tag(&#039;td&#039;)&lt;br /&gt;
				:addClass(cfg.class.navbox_abovebelow)&lt;br /&gt;
				:addClass(args[cfg.arg.aboveclass])&lt;br /&gt;
				:cssText(args[cfg.arg.basestyle])&lt;br /&gt;
				:cssText(args[cfg.arg.abovestyle])&lt;br /&gt;
				:attr(&#039;colspan&#039;, getAboveBelowColspan())&lt;br /&gt;
				:tag(&#039;div&#039;)&lt;br /&gt;
					-- id for aria-labelledby attribute, if no title&lt;br /&gt;
					:attr(&#039;id&#039;, (not args[cfg.arg.title]) and &lt;br /&gt;
						(mw.uri.anchorEncode(args[cfg.arg.above]) .. args.argHash)&lt;br /&gt;
						or nil)&lt;br /&gt;
					:wikitext(processItem(args[cfg.arg.above], args[cfg.arg.nowrapitems]))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function renderBelowRow(tbl)&lt;br /&gt;
		if not args[cfg.arg.below] then return end&lt;br /&gt;
&lt;br /&gt;
		tbl:tag(&#039;tr&#039;)&lt;br /&gt;
			:tag(&#039;td&#039;)&lt;br /&gt;
				:addClass(cfg.class.navbox_abovebelow)&lt;br /&gt;
				:addClass(args[cfg.arg.belowclass])&lt;br /&gt;
				:cssText(args[cfg.arg.basestyle])&lt;br /&gt;
				:cssText(args[cfg.arg.belowstyle])&lt;br /&gt;
				:attr(&#039;colspan&#039;, getAboveBelowColspan())&lt;br /&gt;
				:tag(&#039;div&#039;)&lt;br /&gt;
					:wikitext(processItem(args[cfg.arg.below], args[cfg.arg.nowrapitems]))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function renderListRow(tbl, index, listnum, listnums_size)&lt;br /&gt;
		local row = tbl:tag(&#039;tr&#039;)&lt;br /&gt;
&lt;br /&gt;
		if index == 1 and args[cfg.arg.imageleft] then&lt;br /&gt;
			row&lt;br /&gt;
				:tag(&#039;td&#039;)&lt;br /&gt;
					:addClass(cfg.class.noviewer)&lt;br /&gt;
					:addClass(cfg.class.navbox_image)&lt;br /&gt;
					:addClass(args[cfg.arg.imageclass])&lt;br /&gt;
					:css(&#039;width&#039;, &#039;1px&#039;)               -- Minimize width&lt;br /&gt;
					:css(&#039;padding&#039;, &#039;0 2px 0 0&#039;)&lt;br /&gt;
					:cssText(args[cfg.arg.imageleftstyle])&lt;br /&gt;
					:attr(&#039;rowspan&#039;, listnums_size)&lt;br /&gt;
					:tag(&#039;div&#039;)&lt;br /&gt;
						:wikitext(processItem(args[cfg.arg.imageleft]))&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		local group_and_num = andnum(&#039;group&#039;, listnum)&lt;br /&gt;
		local groupstyle_and_num = andnum(&#039;groupstyle&#039;, listnum)&lt;br /&gt;
		if args[group_and_num] then&lt;br /&gt;
			local groupCell = row:tag(&#039;th&#039;)&lt;br /&gt;
&lt;br /&gt;
			-- id for aria-labelledby attribute, if lone group with no title or above&lt;br /&gt;
			if listnum == 1 and not (args[cfg.arg.title] or args[cfg.arg.above] or args[cfg.arg.group2]) then&lt;br /&gt;
				groupCell&lt;br /&gt;
					:attr(&#039;id&#039;, mw.uri.anchorEncode(args[cfg.arg.group1]) .. args.argHash)&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			groupCell&lt;br /&gt;
				:attr(&#039;scope&#039;, &#039;row&#039;)&lt;br /&gt;
				:addClass(cfg.class.navbox_group)&lt;br /&gt;
				:addClass(args[cfg.arg.groupclass])&lt;br /&gt;
				:cssText(args[cfg.arg.basestyle])&lt;br /&gt;
				-- If groupwidth not specified, minimize width&lt;br /&gt;
				:css(&#039;width&#039;, args[cfg.arg.groupwidth] or &#039;1%&#039;)&lt;br /&gt;
&lt;br /&gt;
			groupCell&lt;br /&gt;
				:cssText(args[cfg.arg.groupstyle])&lt;br /&gt;
				:cssText(args[groupstyle_and_num])&lt;br /&gt;
				:wikitext(args[group_and_num])&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		local listCell = row:tag(&#039;td&#039;)&lt;br /&gt;
&lt;br /&gt;
		if args[group_and_num] then&lt;br /&gt;
			listCell&lt;br /&gt;
				:addClass(cfg.class.navbox_list_with_group)&lt;br /&gt;
		else&lt;br /&gt;
			listCell:attr(&#039;colspan&#039;, 2)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if not args[cfg.arg.groupwidth] then&lt;br /&gt;
			listCell:css(&#039;width&#039;, &#039;100%&#039;)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		local rowstyle  -- usually nil so cssText(rowstyle) usually adds nothing&lt;br /&gt;
		if index % 2 == 1 then&lt;br /&gt;
			rowstyle = args[cfg.arg.oddstyle]&lt;br /&gt;
		else&lt;br /&gt;
			rowstyle = args[cfg.arg.evenstyle]&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		local list_and_num = andnum(&#039;list&#039;, listnum)&lt;br /&gt;
		local listText = inArray(cfg.keyword.subgroups, args[list_and_num])&lt;br /&gt;
			and getSubgroup(args, listnum, args[list_and_num]) or args[list_and_num]&lt;br /&gt;
&lt;br /&gt;
		local oddEven = cfg.marker.oddeven&lt;br /&gt;
		if listText:sub(1, 12) == &#039;&amp;lt;/div&amp;gt;&amp;lt;table&#039; then&lt;br /&gt;
			-- Assume list text is for a subgroup navbox so no automatic striping for this row.&lt;br /&gt;
			oddEven = listText:find(cfg.pattern.navbox_title) and cfg.marker.restart or cfg.class.navbox_odd_part&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		local liststyle_and_num = andnum(&#039;liststyle&#039;, listnum)&lt;br /&gt;
		local listclass_and_num = andnum(&#039;listclass&#039;, listnum)&lt;br /&gt;
		listCell&lt;br /&gt;
			:css(&#039;padding&#039;, &#039;0&#039;)&lt;br /&gt;
			:cssText(args[cfg.arg.liststyle])&lt;br /&gt;
			:cssText(rowstyle)&lt;br /&gt;
			:cssText(args[liststyle_and_num])&lt;br /&gt;
			:addClass(cfg.class.navbox_list)&lt;br /&gt;
			:addClass(cfg.class.navbox_part .. oddEven)&lt;br /&gt;
			:addClass(args[cfg.arg.listclass])&lt;br /&gt;
			:addClass(args[listclass_and_num])&lt;br /&gt;
			:tag(&#039;div&#039;)&lt;br /&gt;
				:css(&#039;padding&#039;,&lt;br /&gt;
					(index == 1 and args[cfg.arg.list1padding]) or args[cfg.arg.listpadding] or &#039;0 0.25em&#039;&lt;br /&gt;
				)&lt;br /&gt;
				:wikitext(processItem(listText, args[cfg.arg.nowrapitems]))&lt;br /&gt;
&lt;br /&gt;
		if index == 1 and args[cfg.arg.image] then&lt;br /&gt;
			row&lt;br /&gt;
				:tag(&#039;td&#039;)&lt;br /&gt;
					:addClass(cfg.class.noviewer)&lt;br /&gt;
					:addClass(cfg.class.navbox_image)&lt;br /&gt;
					:addClass(args[cfg.arg.imageclass])&lt;br /&gt;
					:css(&#039;width&#039;, &#039;1px&#039;)               -- Minimize width&lt;br /&gt;
					:css(&#039;padding&#039;, &#039;0 0 0 2px&#039;)&lt;br /&gt;
					:cssText(args[cfg.arg.imagestyle])&lt;br /&gt;
					:attr(&#039;rowspan&#039;, listnums_size)&lt;br /&gt;
					:tag(&#039;div&#039;)&lt;br /&gt;
						:wikitext(processItem(args[cfg.arg.image]))&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function has_list_class(htmlclass)&lt;br /&gt;
		local patterns = {&lt;br /&gt;
			&#039;^&#039; .. htmlclass .. &#039;$&#039;,&lt;br /&gt;
			&#039;%s&#039; .. htmlclass .. &#039;$&#039;,&lt;br /&gt;
			&#039;^&#039; .. htmlclass .. &#039;%s&#039;,&lt;br /&gt;
			&#039;%s&#039; .. htmlclass .. &#039;%s&#039;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		for arg, _ in pairs(args) do&lt;br /&gt;
			if type(arg) == &#039;string&#039; and mw.ustring.find(arg, cfg.pattern.class) then&lt;br /&gt;
				for _, pattern in ipairs(patterns) do&lt;br /&gt;
					if mw.ustring.find(args[arg] or &#039;&#039;, pattern) then&lt;br /&gt;
						return true&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- there are a lot of list classes in the wild, so we add their TemplateStyles&lt;br /&gt;
	local function add_list_styles()&lt;br /&gt;
		local frame = mw.getCurrentFrame()&lt;br /&gt;
		local function add_list_templatestyles(htmlclass, templatestyles)&lt;br /&gt;
			if has_list_class(htmlclass) then&lt;br /&gt;
				return frame:extensionTag{&lt;br /&gt;
					name = &#039;templatestyles&#039;, args = { src = templatestyles }&lt;br /&gt;
				}&lt;br /&gt;
			else&lt;br /&gt;
				return &#039;&#039;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		local hlist_styles = add_list_templatestyles(&#039;hlist&#039;, cfg.hlist_templatestyles)&lt;br /&gt;
		local plainlist_styles = add_list_templatestyles(&#039;plainlist&#039;, cfg.plainlist_templatestyles)&lt;br /&gt;
&lt;br /&gt;
		-- a second workaround for [[phab:T303378]]&lt;br /&gt;
		-- when that issue is fixed, we can actually use has_navbar not to emit the&lt;br /&gt;
		-- tag here if we want&lt;br /&gt;
		if has_navbar() and hlist_styles == &#039;&#039; then&lt;br /&gt;
			hlist_styles = frame:extensionTag{&lt;br /&gt;
				name = &#039;templatestyles&#039;, args = { src = cfg.hlist_templatestyles }&lt;br /&gt;
			}&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- hlist -&amp;gt; plainlist is best-effort to preserve old Common.css ordering.&lt;br /&gt;
		-- this ordering is not a guarantee because most navboxes will emit only&lt;br /&gt;
		-- one of these classes [hlist_note]&lt;br /&gt;
		return hlist_styles .. plainlist_styles&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function needsHorizontalLists(border)&lt;br /&gt;
		if border == cfg.keyword.border_subgroup or args[cfg.arg.tracking] == cfg.keyword.tracking_no then&lt;br /&gt;
			return false&lt;br /&gt;
		end&lt;br /&gt;
		return not has_list_class(cfg.pattern.hlist) and not has_list_class(cfg.pattern.plainlist)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function hasBackgroundColors()&lt;br /&gt;
		for _, key in ipairs({cfg.arg.titlestyle, cfg.arg.groupstyle,&lt;br /&gt;
			cfg.arg.basestyle, cfg.arg.abovestyle, cfg.arg.belowstyle}) do&lt;br /&gt;
			if tostring(args[key]):find(&#039;background&#039;, 1, true) then&lt;br /&gt;
				return true&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function hasBorders()&lt;br /&gt;
		for _, key in ipairs({cfg.arg.groupstyle, cfg.arg.basestyle,&lt;br /&gt;
			cfg.arg.abovestyle, cfg.arg.belowstyle}) do&lt;br /&gt;
			if tostring(args[key]):find(&#039;border&#039;, 1, true) then&lt;br /&gt;
				return true&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function isIllegible()&lt;br /&gt;
		local styleratio = require(&#039;Module:Color contrast&#039;)._styleratio&lt;br /&gt;
		for key, style in pairs(args) do&lt;br /&gt;
			if tostring(key):match(cfg.pattern.style) then&lt;br /&gt;
				if styleratio{mw.text.unstripNoWiki(style)} &amp;lt; 4.5 then&lt;br /&gt;
					return true&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function getTrackingCategories(border)&lt;br /&gt;
		local cats = {}&lt;br /&gt;
		if needsHorizontalLists(border) then table.insert(cats, cfg.category.horizontal_lists) end&lt;br /&gt;
		if hasBackgroundColors() then table.insert(cats, cfg.category.background_colors) end&lt;br /&gt;
		if isIllegible() then table.insert(cats, cfg.category.illegible) end&lt;br /&gt;
		if hasBorders() then table.insert(cats, cfg.category.borders) end&lt;br /&gt;
		return cats&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function renderTrackingCategories(builder, border)&lt;br /&gt;
		local title = mw.title.getCurrentTitle()&lt;br /&gt;
		if title.namespace ~= 10 then return end -- not in template space&lt;br /&gt;
		local subpage = title.subpageText&lt;br /&gt;
		if subpage == cfg.keyword.subpage_doc or subpage == cfg.keyword.subpage_sandbox&lt;br /&gt;
			or subpage == cfg.keyword.subpage_testcases then return end&lt;br /&gt;
&lt;br /&gt;
		for _, cat in ipairs(getTrackingCategories(border)) do&lt;br /&gt;
			builder:wikitext(&#039;[[Category:&#039; .. cat .. &#039;]]&#039;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function renderMainTable(border, listnums)&lt;br /&gt;
		local tbl = mw.html.create(&#039;table&#039;)&lt;br /&gt;
			:addClass(cfg.class.nowraplinks)&lt;br /&gt;
			:addClass(args[cfg.arg.bodyclass])&lt;br /&gt;
&lt;br /&gt;
		local state = args[cfg.arg.state]&lt;br /&gt;
		if args[cfg.arg.title] and state ~= cfg.keyword.state_plain and state ~= cfg.keyword.state_off then&lt;br /&gt;
			if state == cfg.keyword.state_collapsed then&lt;br /&gt;
				state = cfg.class.collapsed&lt;br /&gt;
			end&lt;br /&gt;
			tbl&lt;br /&gt;
				:addClass(cfg.class.collapsible)&lt;br /&gt;
				:addClass(state or cfg.class.autocollapse)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		tbl:css(&#039;border-spacing&#039;, 0)&lt;br /&gt;
		if border == cfg.keyword.border_subgroup or border == cfg.keyword.border_none then&lt;br /&gt;
			tbl&lt;br /&gt;
				:addClass(cfg.class.navbox_subgroup)&lt;br /&gt;
				:cssText(args[cfg.arg.bodystyle])&lt;br /&gt;
				:cssText(args[cfg.arg.style])&lt;br /&gt;
		else  -- regular navbox - bodystyle and style will be applied to the wrapper table&lt;br /&gt;
			tbl&lt;br /&gt;
				:addClass(cfg.class.navbox_inner)&lt;br /&gt;
				:css(&#039;background&#039;, &#039;transparent&#039;)&lt;br /&gt;
				:css(&#039;color&#039;, &#039;inherit&#039;)&lt;br /&gt;
		end&lt;br /&gt;
		tbl:cssText(args[cfg.arg.innerstyle])&lt;br /&gt;
&lt;br /&gt;
		renderTitleRow(tbl)&lt;br /&gt;
		renderAboveRow(tbl)&lt;br /&gt;
		local listnums_size = #listnums&lt;br /&gt;
		for i, listnum in ipairs(listnums) do&lt;br /&gt;
			renderListRow(tbl, i, listnum, listnums_size)&lt;br /&gt;
		end&lt;br /&gt;
		renderBelowRow(tbl)&lt;br /&gt;
&lt;br /&gt;
		return tbl&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function add_navbox_styles(hiding_templatestyles)&lt;br /&gt;
		local frame = mw.getCurrentFrame()&lt;br /&gt;
		-- This is a lambda so that it doesn&#039;t need the frame as a parameter&lt;br /&gt;
		local function add_user_styles(templatestyles)&lt;br /&gt;
			if not isblank(templatestyles) then&lt;br /&gt;
				return frame:extensionTag{&lt;br /&gt;
					name = &#039;templatestyles&#039;, args = { src = templatestyles }&lt;br /&gt;
				}&lt;br /&gt;
			end&lt;br /&gt;
			return &#039;&#039;&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- get templatestyles. load base from config so that Lua only needs to do&lt;br /&gt;
		-- the work once of parser tag expansion&lt;br /&gt;
		local base_templatestyles = cfg.templatestyles&lt;br /&gt;
		local templatestyles = add_user_styles(args[cfg.arg.templatestyles])&lt;br /&gt;
		local child_templatestyles = add_user_styles(args[cfg.arg.child_templatestyles])&lt;br /&gt;
&lt;br /&gt;
		-- The &#039;navbox-styles&#039; div exists to wrap the styles to work around T200206&lt;br /&gt;
		-- more elegantly. Instead of combinatorial rules, this ends up being linear&lt;br /&gt;
		-- number of CSS rules.&lt;br /&gt;
		return mw.html.create(&#039;div&#039;)&lt;br /&gt;
			:addClass(cfg.class.navbox_styles)&lt;br /&gt;
			:wikitext(&lt;br /&gt;
				add_list_styles() .. -- see [hlist_note] applied to &#039;before base_templatestyles&#039;&lt;br /&gt;
				base_templatestyles ..&lt;br /&gt;
				templatestyles ..&lt;br /&gt;
				child_templatestyles ..&lt;br /&gt;
				table.concat(hiding_templatestyles)&lt;br /&gt;
			)&lt;br /&gt;
			:done()&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- work around [[phab:T303378]]&lt;br /&gt;
	-- for each arg: find all the templatestyles strip markers, insert them into a&lt;br /&gt;
	-- table. then remove all templatestyles markers from the arg&lt;br /&gt;
	local strip_marker_pattern = &#039;(\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127)&#039;&lt;br /&gt;
	local argHash = 0&lt;br /&gt;
	for k, arg in pairs(args) do&lt;br /&gt;
		if type(arg) == &#039;string&#039; then&lt;br /&gt;
			for marker in string.gfind(arg, strip_marker_pattern) do&lt;br /&gt;
				table.insert(hiding_templatestyles, marker)&lt;br /&gt;
			end&lt;br /&gt;
			argHash = argHash + #arg&lt;br /&gt;
			args[k] = string.gsub(arg, strip_marker_pattern, &#039;&#039;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if not args.argHash then args.argHash = argHash end&lt;br /&gt;
&lt;br /&gt;
	local listnums = {}&lt;br /&gt;
&lt;br /&gt;
	for k, _ in pairs(args) do&lt;br /&gt;
		if type(k) == &#039;string&#039; then&lt;br /&gt;
			local listnum = k:match(cfg.pattern.listnum)&lt;br /&gt;
			if listnum and args[andnum(&#039;list&#039;, tonumber(listnum))] then&lt;br /&gt;
				table.insert(listnums, tonumber(listnum))&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(listnums)&lt;br /&gt;
&lt;br /&gt;
	local border = mw.text.trim(args[cfg.arg.border] or args[1] or &#039;&#039;)&lt;br /&gt;
	if border == cfg.keyword.border_child then&lt;br /&gt;
		border = cfg.keyword.border_subgroup&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- render the main body of the navbox&lt;br /&gt;
	local tbl = renderMainTable(border, listnums)&lt;br /&gt;
&lt;br /&gt;
	local res = mw.html.create()&lt;br /&gt;
	-- render the appropriate wrapper for the navbox, based on the border param&lt;br /&gt;
&lt;br /&gt;
	if border == cfg.keyword.border_none then&lt;br /&gt;
		res:node(add_navbox_styles(hiding_templatestyles))&lt;br /&gt;
		local nav = res:tag(&#039;div&#039;)&lt;br /&gt;
			:attr(&#039;role&#039;, &#039;navigation&#039;)&lt;br /&gt;
			:node(tbl)&lt;br /&gt;
		-- aria-labelledby title, otherwise above, otherwise lone group&lt;br /&gt;
		if args[cfg.arg.title] or args[cfg.arg.above] or (args[cfg.arg.group1]&lt;br /&gt;
			and not args[cfg.arg.group2]) then&lt;br /&gt;
			nav:attr(&lt;br /&gt;
				&#039;aria-labelledby&#039;,&lt;br /&gt;
				mw.uri.anchorEncode(&lt;br /&gt;
					args[cfg.arg.title] or args[cfg.arg.above] or args[cfg.arg.group1]&lt;br /&gt;
				) .. args.argHash&lt;br /&gt;
			)&lt;br /&gt;
		else&lt;br /&gt;
			nav:attr(&#039;aria-label&#039;, cfg.aria_label .. args.argHash)&lt;br /&gt;
		end&lt;br /&gt;
	elseif border == cfg.keyword.border_subgroup then&lt;br /&gt;
		-- We assume that this navbox is being rendered in a list cell of a&lt;br /&gt;
		-- parent navbox, and is therefore inside a div with padding:0em 0.25em.&lt;br /&gt;
		-- We start with a &amp;lt;/div&amp;gt; to avoid the padding being applied, and at the&lt;br /&gt;
		-- end add a &amp;lt;div&amp;gt; to balance out the parent&#039;s &amp;lt;/div&amp;gt;&lt;br /&gt;
		res&lt;br /&gt;
			:wikitext(&#039;&amp;lt;/div&amp;gt;&#039;)&lt;br /&gt;
			:node(tbl)&lt;br /&gt;
			:wikitext(&#039;&amp;lt;div&amp;gt;&#039;)&lt;br /&gt;
	else&lt;br /&gt;
		res:node(add_navbox_styles(hiding_templatestyles))&lt;br /&gt;
		local nav = res:tag(&#039;div&#039;)&lt;br /&gt;
			:attr(&#039;role&#039;, &#039;navigation&#039;)&lt;br /&gt;
			:addClass(cfg.class.navbox)&lt;br /&gt;
			:addClass(args[cfg.arg.navboxclass])&lt;br /&gt;
			:cssText(args[cfg.arg.bodystyle])&lt;br /&gt;
			:cssText(args[cfg.arg.style])&lt;br /&gt;
			:css(&#039;padding&#039;, &#039;3px&#039;)&lt;br /&gt;
			:node(tbl)&lt;br /&gt;
		-- aria-labelledby title, otherwise above, otherwise lone group&lt;br /&gt;
		if args[cfg.arg.title] or args[cfg.arg.above]&lt;br /&gt;
			or (args[cfg.arg.group1] and not args[cfg.arg.group2]) then&lt;br /&gt;
			nav:attr(&lt;br /&gt;
				&#039;aria-labelledby&#039;,&lt;br /&gt;
				mw.uri.anchorEncode(&lt;br /&gt;
					args[cfg.arg.title] or args[cfg.arg.above] or args[cfg.arg.group1]&lt;br /&gt;
				) .. args.argHash&lt;br /&gt;
			)&lt;br /&gt;
		else&lt;br /&gt;
			nav:attr(&#039;aria-label&#039;, cfg.aria_label .. args.argHash)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if (args[cfg.arg.nocat] or cfg.keyword.nocat_false):lower() == cfg.keyword.nocat_false then&lt;br /&gt;
		renderTrackingCategories(res, border)&lt;br /&gt;
	end&lt;br /&gt;
	return striped(tostring(res), border)&lt;br /&gt;
end --p._navbox&lt;br /&gt;
&lt;br /&gt;
function p._withCollapsibleGroups(pargs)&lt;br /&gt;
	-- table for args passed to navbox&lt;br /&gt;
	local targs = {}&lt;br /&gt;
&lt;br /&gt;
	-- process args&lt;br /&gt;
	local passthroughLocal = {&lt;br /&gt;
		[cfg.arg.bodystyle] = true,&lt;br /&gt;
		[cfg.arg.border] = true,&lt;br /&gt;
		[cfg.arg.style] = true,&lt;br /&gt;
	}&lt;br /&gt;
	for k,v in pairs(pargs) do&lt;br /&gt;
		if k and type(k) == &#039;string&#039; then&lt;br /&gt;
			if passthrough[k] or passthroughLocal[k] then&lt;br /&gt;
				targs[k] = v&lt;br /&gt;
			elseif (k:match(cfg.pattern.num)) then&lt;br /&gt;
				local n = k:match(cfg.pattern.num)&lt;br /&gt;
				local list_and_num = andnum(&#039;list&#039;, n)&lt;br /&gt;
				if ((k:match(cfg.pattern.listnum) or k:match(cfg.pattern.contentnum))&lt;br /&gt;
						and targs[list_and_num] == nil&lt;br /&gt;
						and pargs[andnum(&#039;group&#039;, n)] == nil&lt;br /&gt;
						and pargs[andnum(&#039;sect&#039;, n)] == nil&lt;br /&gt;
						and pargs[andnum(&#039;section&#039;, n)] == nil) then&lt;br /&gt;
					targs[list_and_num] = concatstrings({&lt;br /&gt;
						pargs[list_and_num] or &#039;&#039;,&lt;br /&gt;
						pargs[andnum(&#039;content&#039;, n)] or &#039;&#039;&lt;br /&gt;
					})&lt;br /&gt;
					if (targs[list_and_num] and inArray(cfg.keyword.subgroups, targs[list_and_num])) then&lt;br /&gt;
						targs[list_and_num] = getSubgroup(pargs, n, targs[list_and_num])&lt;br /&gt;
					end&lt;br /&gt;
				elseif ((k:match(cfg.pattern.groupnum) or k:match(cfg.pattern.sectnum) or k:match(cfg.pattern.sectionnum))&lt;br /&gt;
						and targs[list_and_num] == nil) then&lt;br /&gt;
					local titlestyle = concatstyles({&lt;br /&gt;
						pargs[cfg.arg.groupstyle] or &#039;&#039;,&lt;br /&gt;
						pargs[cfg.arg.secttitlestyle] or &#039;&#039;, &lt;br /&gt;
						pargs[andnum(&#039;groupstyle&#039;, n)] or &#039;&#039;, &lt;br /&gt;
						pargs[andnum(&#039;sectiontitlestyle&#039;, n)] or &#039;&#039;&lt;br /&gt;
					})&lt;br /&gt;
					local liststyle = concatstyles({&lt;br /&gt;
						pargs[cfg.arg.liststyle] or &#039;&#039;,&lt;br /&gt;
						pargs[cfg.arg.contentstyle] or &#039;&#039;, &lt;br /&gt;
						pargs[andnum(&#039;liststyle&#039;, n)] or &#039;&#039;, &lt;br /&gt;
						pargs[andnum(&#039;contentstyle&#039;, n)] or &#039;&#039;&lt;br /&gt;
					})&lt;br /&gt;
					local title = concatstrings({&lt;br /&gt;
						pargs[andnum(&#039;group&#039;, n)] or &#039;&#039;,&lt;br /&gt;
						pargs[andnum(&#039;sect&#039;, n)] or &#039;&#039;,&lt;br /&gt;
						pargs[andnum(&#039;section&#039;, n)] or &#039;&#039;&lt;br /&gt;
					})&lt;br /&gt;
					local list = concatstrings({&lt;br /&gt;
						pargs[list_and_num] or &#039;&#039;, &lt;br /&gt;
						pargs[andnum(&#039;content&#039;, n)] or &#039;&#039;&lt;br /&gt;
					})&lt;br /&gt;
					if list and inArray(cfg.keyword.subgroups, list) then&lt;br /&gt;
						list = getSubgroup(pargs, n, list)&lt;br /&gt;
					end&lt;br /&gt;
					local abbr_and_num = andnum(&#039;abbr&#039;, n)&lt;br /&gt;
					local state = (pargs[abbr_and_num] and pargs[abbr_and_num] == pargs[cfg.arg.selected]) &lt;br /&gt;
						and cfg.keyword.state_uncollapsed&lt;br /&gt;
						or (pargs[andnum(&#039;state&#039;, n)] or cfg.keyword.state_collapsed)&lt;br /&gt;
					&lt;br /&gt;
					targs[list_and_num] =p._navbox({&lt;br /&gt;
						cfg.keyword.border_child,&lt;br /&gt;
						[cfg.arg.navbar] = cfg.keyword.navbar_plain,&lt;br /&gt;
						[cfg.arg.state] = state,&lt;br /&gt;
						[cfg.arg.basestyle] = pargs[cfg.arg.basestyle],&lt;br /&gt;
						[cfg.arg.title] = title,&lt;br /&gt;
						[cfg.arg.titlestyle] = titlestyle,&lt;br /&gt;
						[andnum(&#039;list&#039;, 1)] = list,&lt;br /&gt;
						[cfg.arg.liststyle] = liststyle,&lt;br /&gt;
						[cfg.arg.listclass] = pargs[andnum(&#039;listclass&#039;, n)],&lt;br /&gt;
						[cfg.arg.image] = pargs[andnum(&#039;image&#039;, n)],&lt;br /&gt;
						[cfg.arg.imageleft] = pargs[andnum(&#039;imageleft&#039;, n)],&lt;br /&gt;
						[cfg.arg.listpadding] = pargs[cfg.arg.listpadding],&lt;br /&gt;
						argHash = pargs.argHash&lt;br /&gt;
					})&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	-- ordering of style and bodystyle&lt;br /&gt;
	targs[cfg.arg.style] = concatstyles({targs[cfg.arg.style] or &#039;&#039;, targs[cfg.arg.bodystyle] or &#039;&#039;})&lt;br /&gt;
	targs[cfg.arg.bodystyle] = nil&lt;br /&gt;
&lt;br /&gt;
	-- child or subgroup&lt;br /&gt;
	if targs[cfg.arg.border] == nil then targs[cfg.arg.border] = pargs[1] end&lt;br /&gt;
&lt;br /&gt;
	return p._navbox(targs)&lt;br /&gt;
end --p._withCollapsibleGroups&lt;br /&gt;
&lt;br /&gt;
function p._withColumns(pargs)&lt;br /&gt;
	-- table for args passed to navbox&lt;br /&gt;
	local targs = {}&lt;br /&gt;
&lt;br /&gt;
	-- tables of column numbers&lt;br /&gt;
	local colheadernums = {}&lt;br /&gt;
	local colnums = {}&lt;br /&gt;
	local colfooternums = {}&lt;br /&gt;
&lt;br /&gt;
	-- process args&lt;br /&gt;
	local passthroughLocal = {&lt;br /&gt;
		[cfg.arg.evenstyle]=true,&lt;br /&gt;
		[cfg.arg.groupstyle]=true,&lt;br /&gt;
		[cfg.arg.liststyle]=true,&lt;br /&gt;
		[cfg.arg.oddstyle]=true,&lt;br /&gt;
		[cfg.arg.state]=true,&lt;br /&gt;
	}&lt;br /&gt;
	for k,v in pairs(pargs) do&lt;br /&gt;
		if passthrough[k] or passthroughLocal[k] then&lt;br /&gt;
			targs[k] = v&lt;br /&gt;
		elseif type(k) == &#039;string&#039; then&lt;br /&gt;
			if k:match(cfg.pattern.listnum) then&lt;br /&gt;
				local n = k:match(cfg.pattern.listnum)&lt;br /&gt;
				targs[andnum(&#039;liststyle&#039;, n + 2)] = pargs[andnum(&#039;liststyle&#039;, n)]&lt;br /&gt;
				targs[andnum(&#039;group&#039;, n + 2)] = pargs[andnum(&#039;group&#039;, n)]&lt;br /&gt;
				targs[andnum(&#039;groupstyle&#039;, n + 2)] = pargs[andnum(&#039;groupstyle&#039;, n)]&lt;br /&gt;
				if v and inArray(cfg.keyword.subgroups, v) then&lt;br /&gt;
					targs[andnum(&#039;list&#039;, n + 2)] = getSubgroup(pargs, n, v)&lt;br /&gt;
				else&lt;br /&gt;
					targs[andnum(&#039;list&#039;, n + 2)] = v&lt;br /&gt;
				end&lt;br /&gt;
			elseif (k:match(cfg.pattern.colheadernum) and v ~= &#039;&#039;) then&lt;br /&gt;
				table.insert(colheadernums, tonumber(k:match(cfg.pattern.colheadernum)))&lt;br /&gt;
			elseif (k:match(cfg.pattern.colnum) and v ~= &#039;&#039;) then&lt;br /&gt;
				table.insert(colnums, tonumber(k:match(cfg.pattern.colnum)))&lt;br /&gt;
			elseif (k:match(cfg.pattern.colfooternum) and v ~= &#039;&#039;) then&lt;br /&gt;
				table.insert(colfooternums, tonumber(k:match(cfg.pattern.colfooternum)))&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(colheadernums)&lt;br /&gt;
	table.sort(colnums)&lt;br /&gt;
	table.sort(colfooternums)&lt;br /&gt;
&lt;br /&gt;
	-- HTML table for list1&lt;br /&gt;
	local coltable = mw.html.create( &#039;table&#039; ):addClass(&#039;navbox-columns-table&#039;)&lt;br /&gt;
	local row, col&lt;br /&gt;
&lt;br /&gt;
	local tablestyle = ( (#colheadernums &amp;gt; 0) or (not isblank(pargs[cfg.arg.fullwidth])) )&lt;br /&gt;
		and &#039;width:100%&#039;&lt;br /&gt;
		or &#039;width:auto; margin-left:auto; margin-right:auto&#039;&lt;br /&gt;
&lt;br /&gt;
	coltable:cssText(concatstyles({&lt;br /&gt;
		&#039;border-spacing: 0px; text-align:left&#039;,&lt;br /&gt;
		tablestyle,&lt;br /&gt;
		pargs[cfg.arg.coltablestyle] or &#039;&#039;&lt;br /&gt;
	}))&lt;br /&gt;
&lt;br /&gt;
	--- Header row ---&lt;br /&gt;
	if (#colheadernums &amp;gt; 0) then&lt;br /&gt;
		row = coltable:tag(&#039;tr&#039;)&lt;br /&gt;
		for k, n in ipairs(colheadernums) do&lt;br /&gt;
			col = row:tag(&#039;th&#039;):addClass(&#039;navbox-abovebelow&#039;)&lt;br /&gt;
			col:cssText(concatstyles({&lt;br /&gt;
				(k &amp;gt; 1) and &#039;border-left:2px solid #fdfdfd&#039; or &#039;&#039;,&lt;br /&gt;
				&#039;font-weight:bold&#039;,&lt;br /&gt;
				pargs[cfg.arg.colheaderstyle] or &#039;&#039;,&lt;br /&gt;
				pargs[andnum(&#039;colheaderstyle&#039;, n)] or &#039;&#039;&lt;br /&gt;
			}))&lt;br /&gt;
			col:attr(&#039;colspan&#039;, tonumber(pargs[andnum(&#039;colheadercolspan&#039;, n)]))&lt;br /&gt;
			col:wikitext(pargs[andnum(&#039;colheader&#039;, n)])&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	--- Main columns ---&lt;br /&gt;
	row = coltable:tag(&#039;tr&#039;):css(&#039;vertical-align&#039;, &#039;top&#039;)&lt;br /&gt;
	for k, n in ipairs(colnums) do&lt;br /&gt;
		if k == 1 and isblank(pargs[andnum(&#039;colheader&#039;, 1)])&lt;br /&gt;
				and isblank(pargs[andnum(&#039;colfooter&#039;, 1)])&lt;br /&gt;
				and isblank(pargs[cfg.arg.fullwidth]) then&lt;br /&gt;
			local nopad = inArray(&lt;br /&gt;
				{&#039;off&#039;, &#039;0&#039;, &#039;0em&#039;, &#039;0px&#039;},&lt;br /&gt;
				mw.ustring.gsub(pargs[cfg.arg.padding] or &#039;&#039;, &#039;[;%%]&#039;, &#039;&#039;))&lt;br /&gt;
			if not nopad then&lt;br /&gt;
				row:tag(&#039;td&#039;):wikitext(&#039;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&#039;)&lt;br /&gt;
					:css(&#039;width&#039;, (pargs[cfg.arg.padding] or &#039;5em&#039;))&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		col = row:tag(&#039;td&#039;):addClass(&#039;navbox-list&#039;)&lt;br /&gt;
		col:cssText(concatstyles({&lt;br /&gt;
			(k &amp;gt; 1) and &#039;border-left:2px solid #fdfdfd&#039; or &#039;&#039;,&lt;br /&gt;
			&#039;padding:0px&#039;,&lt;br /&gt;
			pargs[cfg.arg.colstyle] or &#039;&#039;,&lt;br /&gt;
			((n%2 == 0) and pargs[cfg.arg.evencolstyle] or pargs[cfg.arg.oddcolstyle]) or &#039;&#039;,&lt;br /&gt;
			pargs[andnum(&#039;colstyle&#039;, n)] or &#039;&#039;,&lt;br /&gt;
			&#039;width:&#039; .. (pargs[andnum(&#039;colwidth&#039;, n)] or pargs[cfg.arg.colwidth] or &#039;10em&#039;)&lt;br /&gt;
		}))&lt;br /&gt;
		local wt = pargs[andnum(&#039;col&#039;, n)]&lt;br /&gt;
		if wt and inArray(cfg.keyword.subgroups, wt) then&lt;br /&gt;
			wt = getSubgroup(pargs, n, wt, cfg.arg.col_and_num)&lt;br /&gt;
		end&lt;br /&gt;
		col:tag(&#039;div&#039;):newline():wikitext(wt):newline()&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	--- Footer row ---&lt;br /&gt;
	if (#colfooternums &amp;gt; 0) then&lt;br /&gt;
		row = coltable:tag(&#039;tr&#039;)&lt;br /&gt;
		for k, n in ipairs(colfooternums) do&lt;br /&gt;
			col = row:tag(&#039;td&#039;):addClass(&#039;navbox-abovebelow&#039;)&lt;br /&gt;
			col:cssText(concatstyles({&lt;br /&gt;
				(k &amp;gt; 1) and &#039;border-left:2px solid #fdfdfd&#039; or &#039;&#039;,&lt;br /&gt;
				&#039;font-weight:bold&#039;,&lt;br /&gt;
				pargs[cfg.arg.colfooterstyle] or &#039;&#039;,&lt;br /&gt;
				pargs[andnum(&#039;colfooterstyle&#039;, n)] or &#039;&#039;&lt;br /&gt;
			}))&lt;br /&gt;
			col:attr(&#039;colspan&#039;, tonumber(pargs[andnum(&#039;colfootercolspan&#039;, n)]))&lt;br /&gt;
			col:wikitext(pargs[andnum(&#039;colfooter&#039;, n)])&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- assign table to list1&lt;br /&gt;
	targs[andnum(&#039;list&#039;, 1)] = tostring(coltable)&lt;br /&gt;
	if isblank(pargs[andnum(&#039;colheader&#039;, 1)]) &lt;br /&gt;
			and isblank(pargs[andnum(&#039;col&#039;, 1)])&lt;br /&gt;
			and isblank(pargs[andnum(&#039;colfooter&#039;, 1)]) then&lt;br /&gt;
		targs[andnum(&#039;list&#039;, 1)] = targs[andnum(&#039;list&#039;, 1)] ..&lt;br /&gt;
			cfg.category.without_first_col&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Other parameters&lt;br /&gt;
	targs[cfg.arg.border] = pargs[cfg.arg.border] or pargs[1]&lt;br /&gt;
	targs[cfg.arg.evenodd] = (not isblank(pargs[cfg.arg.evenodd])) and pargs[cfg.arg.evenodd] or nil&lt;br /&gt;
	targs[cfg.arg.list1padding] = &#039;0px&#039;&lt;br /&gt;
	targs[andnum(&#039;liststyle&#039;, 1)] = &#039;background:transparent;color:inherit;&#039;&lt;br /&gt;
	targs[cfg.arg.style] = concatstyles({pargs[cfg.arg.style], pargs[cfg.arg.bodystyle]})&lt;br /&gt;
	targs[cfg.arg.tracking] = &#039;no&#039;&lt;br /&gt;
	&lt;br /&gt;
	return p._navbox(targs)&lt;br /&gt;
end --p._withColumns&lt;br /&gt;
&lt;br /&gt;
-- Template entry points&lt;br /&gt;
function p.navbox (frame, boxtype)&lt;br /&gt;
	local function readArgs(args, prefix)&lt;br /&gt;
		local function readSubgroups(element, i)&lt;br /&gt;
			if inArray(cfg.keyword.subgroups, args[prefix .. andnum(element, i)]) then&lt;br /&gt;
				for _, v in ipairs(cfg.arg.subgroups_and_num) do&lt;br /&gt;
					readArgs(args, prefix .. string.format(v, i) .. &amp;quot;_&amp;quot;)&lt;br /&gt;
				end&lt;br /&gt;
				readArgs(args, prefix .. andnum(&#039;col&#039;, i) .. &amp;quot;_&amp;quot;)&lt;br /&gt;
			end&lt;br /&gt;
		end	&lt;br /&gt;
		-- Read the arguments in the order they&#039;ll be output in, to make references&lt;br /&gt;
		-- number in the right order.&lt;br /&gt;
		local _&lt;br /&gt;
		_ = args[prefix .. cfg.arg.title]&lt;br /&gt;
		_ = args[prefix .. cfg.arg.above]&lt;br /&gt;
		-- Limit this to 20 as covering &#039;most&#039; cases (that&#039;s a SWAG) and because&lt;br /&gt;
		-- iterator approach won&#039;t work here&lt;br /&gt;
		local boxtype = args.type or cfg.keyword[boxtype]&lt;br /&gt;
		if boxtype == cfg.keyword.with_columns then&lt;br /&gt;
			for i = 1, 20 do&lt;br /&gt;
				_ = args[prefix .. andnum(&#039;colheader&#039;, i)]&lt;br /&gt;
			end		&lt;br /&gt;
			for i = 1, 20 do&lt;br /&gt;
				readSubgroups(&#039;col&#039;, i)&lt;br /&gt;
			end		&lt;br /&gt;
			for i = 1, 20 do&lt;br /&gt;
				_ = args[prefix .. andnum(&#039;colfooter&#039;, i)]&lt;br /&gt;
			end		&lt;br /&gt;
		end&lt;br /&gt;
		for i = 1, 20 do&lt;br /&gt;
			_ = args[prefix .. andnum(&#039;group&#039;, i)]&lt;br /&gt;
			readSubgroups(&#039;list&#039;, i)&lt;br /&gt;
		end&lt;br /&gt;
		_ = args[prefix .. cfg.arg.below]&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if not getArgs then&lt;br /&gt;
		getArgs = require(&#039;Module:Arguments&#039;).getArgs&lt;br /&gt;
	end&lt;br /&gt;
	local args = getArgs(frame, {wrappers = {cfg.pattern[boxtype or &#039;navbox&#039;]}})&lt;br /&gt;
	readArgs(args, &amp;quot;&amp;quot;)&lt;br /&gt;
	args.argHash = nil -- we shouldn&#039;t accept argHash passed from a template&lt;br /&gt;
	args.type = args.type or cfg.keyword[boxtype]&lt;br /&gt;
	return p[&#039;_navbox&#039;](args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p[cfg.keyword.with_collapsible_groups] = function (frame)&lt;br /&gt;
	return p.navbox(frame, &#039;with_collapsible_groups&#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p[cfg.keyword.with_columns] = function (frame)&lt;br /&gt;
	return p.navbox(frame, &#039;with_columns&#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://en.mippedia.org/index.php?title=Template:Navbox&amp;diff=425</id>
		<title>Template:Navbox</title>
		<link rel="alternate" type="text/html" href="https://en.mippedia.org/index.php?title=Template:Navbox&amp;diff=425"/>
		<updated>2026-05-29T22:11:38Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;&amp;lt;includeonly&amp;gt;{{#invoke:Navbox|navbox}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt; {{Documentation}} &amp;lt;/noinclude&amp;gt;&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{#invoke:Navbox|navbox}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://en.mippedia.org/index.php?title=MediaWiki:Common.css&amp;diff=424</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://en.mippedia.org/index.php?title=MediaWiki:Common.css&amp;diff=424"/>
		<updated>2026-05-29T22:06:41Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* --- FIX UKURAN DAN SKALA LOGO (UNTUK SEMUA SKIN) --- */&lt;br /&gt;
&lt;br /&gt;
/* Menargetkan elemen wadah logo */&lt;br /&gt;
#p-logo {&lt;br /&gt;
    /* Memaksa elemen wadah memiliki ukuran standar */&lt;br /&gt;
    width: 135px;&lt;br /&gt;
    height: 135px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Menargetkan elemen link di dalam wadah logo */&lt;br /&gt;
#p-logo a, .mw-wiki-logo {&lt;br /&gt;
    /* Memaksa ukuran area gambar agar sesuai */&lt;br /&gt;
    width: 135px !important;&lt;br /&gt;
    height: 135px !important;&lt;br /&gt;
    &lt;br /&gt;
    /* Memastikan gambar diskala (terutama untuk SVG) */&lt;br /&gt;
    background-size: contain !important;&lt;br /&gt;
    &lt;br /&gt;
    /* Memastikan gambar berada di tengah dan tidak berulang */&lt;br /&gt;
    background-position: center center !important;&lt;br /&gt;
    background-repeat: no-repeat !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- CAPTCHA STYLING ---------- */&lt;br /&gt;
.captcha-code {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  padding: 10px 16px;&lt;br /&gt;
  font-size: 1.8em;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  font-family: monospace;&lt;br /&gt;
  border-radius: 10px;&lt;br /&gt;
  letter-spacing: 4px;&lt;br /&gt;
  user-select: none;&lt;br /&gt;
  text-shadow: 1px 1px 2px rgba(0,0,0,0.2);&lt;br /&gt;
  margin: 10px auto;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  animation: fadeIn 0.4s ease-in-out;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Bikin background captcha punya warna acak */&lt;br /&gt;
.captcha-code {&lt;br /&gt;
  background: linear-gradient(135deg, #f8f8f8, #e8e8e8);&lt;br /&gt;
  border: 1px solid #bbb;&lt;br /&gt;
  color: #2c3e50;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Variasi warna random */&lt;br /&gt;
.captcha-code:nth-child(3n) {&lt;br /&gt;
  background: linear-gradient(135deg, #e3f2fd, #bbdefb);&lt;br /&gt;
  border-color: #90caf9;&lt;br /&gt;
  color: #0d47a1;&lt;br /&gt;
}&lt;br /&gt;
.captcha-code:nth-child(3n+1) {&lt;br /&gt;
  background: linear-gradient(135deg, #f1f8e9, #dcedc8);&lt;br /&gt;
  border-color: #aed581;&lt;br /&gt;
  color: #33691e;&lt;br /&gt;
}&lt;br /&gt;
.captcha-code:nth-child(3n+2) {&lt;br /&gt;
  background: linear-gradient(135deg, #fff3e0, #ffe0b2);&lt;br /&gt;
  border-color: #ffb74d;&lt;br /&gt;
  color: #e65100;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Label agar center di HP */&lt;br /&gt;
.mw-confirmedit-captcha label {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  margin: 12px 0;&lt;br /&gt;
  font-size: 1em;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  color: #444;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Responsif untuk seluler */&lt;br /&gt;
@media (max-width: 720px) {&lt;br /&gt;
  .captcha-code { font-size: 2.2em; padding: 12px 18px; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Animasi halus saat muncul */&lt;br /&gt;
@keyframes fadeIn {&lt;br /&gt;
  from { opacity: 0; transform: scale(0.9); }&lt;br /&gt;
  to   { opacity: 1; transform: scale(1); }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* === Hilangkan judul &amp;quot;Halaman Utama&amp;quot; di tampilan MobileFrontend === */&lt;br /&gt;
.page-Main_Page #section_0,&lt;br /&gt;
.page-Main_Page .content-header,&lt;br /&gt;
.page-Main_Page h1.firstHeading,&lt;br /&gt;
.page-Main_Page #firstHeading {&lt;br /&gt;
    display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Opsional: rapikan jarak setelah header hilang */&lt;br /&gt;
.page-Main_Page .content {&lt;br /&gt;
    margin-top: 0 !important;&lt;br /&gt;
    padding-top: 0.5em !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Infoboxes */&lt;br /&gt;
.infobox {&lt;br /&gt;
	border: 1px solid #a2a9b1;&lt;br /&gt;
	color: #202122;&lt;br /&gt;
	padding: 0.2em;&lt;br /&gt;
	font-size: 88%;&lt;br /&gt;
	line-height: 1.5em;&lt;br /&gt;
	/* Mengubah border-collapse agar garis pemisah (border-bottom) bisa tersambung rapi */&lt;br /&gt;
	border-collapse: collapse; &lt;br /&gt;
	margin: 0.5em 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen {&lt;br /&gt;
	.infobox {&lt;br /&gt;
		background-color: var(--background-color-neutral-subtle, #f8f9fa);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media (max-width: 640px) {&lt;br /&gt;
	.infobox {&lt;br /&gt;
		width: 100%;&lt;br /&gt;
	}&lt;br /&gt;
    &lt;br /&gt;
	.infobox .nowrap {&lt;br /&gt;
		white-space: normal;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media (min-width: 640px) {&lt;br /&gt;
	.infobox {&lt;br /&gt;
		/* @noflip */&lt;br /&gt;
		margin-left: 1em;&lt;br /&gt;
		/* @noflip */&lt;br /&gt;
		float: right;&lt;br /&gt;
		/* @noflip */&lt;br /&gt;
		clear: right;&lt;br /&gt;
		width: 22em;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-header,&lt;br /&gt;
.infobox-label,&lt;br /&gt;
.infobox-above,&lt;br /&gt;
.infobox-full-data,&lt;br /&gt;
.infobox-data,&lt;br /&gt;
.infobox-below,&lt;br /&gt;
.infobox-subheader,&lt;br /&gt;
.infobox-image,&lt;br /&gt;
.infobox-navbar,&lt;br /&gt;
.infobox th,&lt;br /&gt;
.infobox td {&lt;br /&gt;
	vertical-align: top;&lt;br /&gt;
	/* Menambahkan garis pemisah horizontal tipis di setiap baris data */&lt;br /&gt;
	border-top: 1px solid #a2a9b1; &lt;br /&gt;
	padding: 4px 6px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Memastikan baris pertama (Judul/Foto) tidak memiliki garis pemisah di bagian atasnya */&lt;br /&gt;
.infobox tr:first-child th,&lt;br /&gt;
.infobox tr:first-child td {&lt;br /&gt;
	border-top: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-label,&lt;br /&gt;
.infobox-data,&lt;br /&gt;
.infobox th,&lt;br /&gt;
.infobox td {&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	/* Mengembalikan text-align ke kiri agar susunan parameter data rapi lurus */&lt;br /&gt;
	text-align: left; &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Mengunci label kiri agar posisinya condong ke kiri atau kanan secara proporsional */&lt;br /&gt;
.infobox-label,&lt;br /&gt;
.infobox th {&lt;br /&gt;
	font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Remove .infobox when element selectors above are removed */&lt;br /&gt;
.infobox .infobox-above,&lt;br /&gt;
.infobox .infobox-title,&lt;br /&gt;
.infobox caption {&lt;br /&gt;
	font-size: 125%;&lt;br /&gt;
	font-weight: bold;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	border-top: 0; /* Menghilangkan border atas untuk judul utama */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-title,&lt;br /&gt;
.infobox caption {&lt;br /&gt;
	padding: 0.4em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Remove .infobox when element selectors above are removed */&lt;br /&gt;
.infobox .infobox-header,&lt;br /&gt;
.infobox .infobox-subheader,&lt;br /&gt;
.infobox .infobox-image,&lt;br /&gt;
.infobox .infobox-full-data,&lt;br /&gt;
.infobox .infobox-below {&lt;br /&gt;
	text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Remove .infobox when element selectors above are removed */&lt;br /&gt;
.infobox .infobox-navbar {&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	text-align: right;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
	#siteSub {&lt;br /&gt;
		display: block;&lt;br /&gt;
	}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://en.mippedia.org/index.php?title=MediaWiki:Common.css&amp;diff=423</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://en.mippedia.org/index.php?title=MediaWiki:Common.css&amp;diff=423"/>
		<updated>2026-05-29T21:54:05Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* --- FIX UKURAN DAN SKALA LOGO (UNTUK SEMUA SKIN) --- */&lt;br /&gt;
&lt;br /&gt;
/* Menargetkan elemen wadah logo */&lt;br /&gt;
#p-logo {&lt;br /&gt;
    /* Memaksa elemen wadah memiliki ukuran standar */&lt;br /&gt;
    width: 135px;&lt;br /&gt;
    height: 135px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Menargetkan elemen link di dalam wadah logo */&lt;br /&gt;
#p-logo a, .mw-wiki-logo {&lt;br /&gt;
    /* Memaksa ukuran area gambar agar sesuai */&lt;br /&gt;
    width: 135px !important;&lt;br /&gt;
    height: 135px !important;&lt;br /&gt;
    &lt;br /&gt;
    /* Memastikan gambar diskala (terutama untuk SVG) */&lt;br /&gt;
    background-size: contain !important;&lt;br /&gt;
    &lt;br /&gt;
    /* Memastikan gambar berada di tengah dan tidak berulang */&lt;br /&gt;
    background-position: center center !important;&lt;br /&gt;
    background-repeat: no-repeat !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- CAPTCHA STYLING ---------- */&lt;br /&gt;
.captcha-code {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  padding: 10px 16px;&lt;br /&gt;
  font-size: 1.8em;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  font-family: monospace;&lt;br /&gt;
  border-radius: 10px;&lt;br /&gt;
  letter-spacing: 4px;&lt;br /&gt;
  user-select: none;&lt;br /&gt;
  text-shadow: 1px 1px 2px rgba(0,0,0,0.2);&lt;br /&gt;
  margin: 10px auto;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  animation: fadeIn 0.4s ease-in-out;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Bikin background captcha punya warna acak */&lt;br /&gt;
.captcha-code {&lt;br /&gt;
  background: linear-gradient(135deg, #f8f8f8, #e8e8e8);&lt;br /&gt;
  border: 1px solid #bbb;&lt;br /&gt;
  color: #2c3e50;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Variasi warna random */&lt;br /&gt;
.captcha-code:nth-child(3n) {&lt;br /&gt;
  background: linear-gradient(135deg, #e3f2fd, #bbdefb);&lt;br /&gt;
  border-color: #90caf9;&lt;br /&gt;
  color: #0d47a1;&lt;br /&gt;
}&lt;br /&gt;
.captcha-code:nth-child(3n+1) {&lt;br /&gt;
  background: linear-gradient(135deg, #f1f8e9, #dcedc8);&lt;br /&gt;
  border-color: #aed581;&lt;br /&gt;
  color: #33691e;&lt;br /&gt;
}&lt;br /&gt;
.captcha-code:nth-child(3n+2) {&lt;br /&gt;
  background: linear-gradient(135deg, #fff3e0, #ffe0b2);&lt;br /&gt;
  border-color: #ffb74d;&lt;br /&gt;
  color: #e65100;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Label agar center di HP */&lt;br /&gt;
.mw-confirmedit-captcha label {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  margin: 12px 0;&lt;br /&gt;
  font-size: 1em;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  color: #444;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Responsif untuk seluler */&lt;br /&gt;
@media (max-width: 720px) {&lt;br /&gt;
  .captcha-code { font-size: 2.2em; padding: 12px 18px; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Animasi halus saat muncul */&lt;br /&gt;
@keyframes fadeIn {&lt;br /&gt;
  from { opacity: 0; transform: scale(0.9); }&lt;br /&gt;
  to   { opacity: 1; transform: scale(1); }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* === Hilangkan judul &amp;quot;Halaman Utama&amp;quot; di tampilan MobileFrontend === */&lt;br /&gt;
.page-Main_Page #section_0,&lt;br /&gt;
.page-Main_Page .content-header,&lt;br /&gt;
.page-Main_Page h1.firstHeading,&lt;br /&gt;
.page-Main_Page #firstHeading {&lt;br /&gt;
    display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Opsional: rapikan jarak setelah header hilang */&lt;br /&gt;
.page-Main_Page .content {&lt;br /&gt;
    margin-top: 0 !important;&lt;br /&gt;
    padding-top: 0.5em !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Infoboxes */&lt;br /&gt;
.infobox {&lt;br /&gt;
	border: 1px solid #a2a9b1;&lt;br /&gt;
	color: black;&lt;br /&gt;
	width: 100%;&lt;br /&gt;
	padding: 0.2em;&lt;br /&gt;
	font-size: 88%;&lt;br /&gt;
	line-height: 1.5em;&lt;br /&gt;
	border-spacing: 3px;&lt;br /&gt;
	margin: 0.5em 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen {&lt;br /&gt;
	.infobox {&lt;br /&gt;
		background-color: var(--background-color-neutral-subtle, #f8f9fa);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media (max-width: 640px) {&lt;br /&gt;
	.infobox {&lt;br /&gt;
		width: 100%;&lt;br /&gt;
	}&lt;br /&gt;
    &lt;br /&gt;
	.infobox .nowrap {&lt;br /&gt;
		white-space: normal;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media (min-width: 640px) {&lt;br /&gt;
	.infobox {&lt;br /&gt;
		/* @noflip */&lt;br /&gt;
		margin-left: 1em;&lt;br /&gt;
		/* @noflip */&lt;br /&gt;
		float: right;&lt;br /&gt;
		/* @noflip */&lt;br /&gt;
		clear: right;&lt;br /&gt;
		width: 22em;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-header,&lt;br /&gt;
.infobox-label,&lt;br /&gt;
.infobox-above,&lt;br /&gt;
.infobox-full-data,&lt;br /&gt;
.infobox-data,&lt;br /&gt;
.infobox-below,&lt;br /&gt;
.infobox-subheader,&lt;br /&gt;
.infobox-image,&lt;br /&gt;
.infobox-navbar,&lt;br /&gt;
/* Remove element selector when every .infobox thing is using the standard module/templates  */&lt;br /&gt;
.infobox th,&lt;br /&gt;
.infobox td {&lt;br /&gt;
	vertical-align: top;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-label,&lt;br /&gt;
.infobox-data,&lt;br /&gt;
/* Remove element selector when every .infobox thing is using the standard module/templates  */&lt;br /&gt;
.infobox th,&lt;br /&gt;
.infobox td {&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Remove .infobox when element selectors above are removed */&lt;br /&gt;
.infobox .infobox-above,&lt;br /&gt;
.infobox .infobox-title,&lt;br /&gt;
/* Remove element selector when every .infobox thing is using the standard module/templates  */&lt;br /&gt;
.infobox caption {&lt;br /&gt;
	font-size: 125%;&lt;br /&gt;
	font-weight: bold;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-title,&lt;br /&gt;
/* Remove element selector when every .infobox thing is using the standard module/templates  */&lt;br /&gt;
.infobox caption {&lt;br /&gt;
	padding: 0.2em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Remove .infobox when element selectors above are removed */&lt;br /&gt;
.infobox .infobox-header,&lt;br /&gt;
.infobox .infobox-subheader,&lt;br /&gt;
.infobox .infobox-image,&lt;br /&gt;
.infobox .infobox-full-data,&lt;br /&gt;
.infobox .infobox-below {&lt;br /&gt;
	text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Remove .infobox when element selectors above are removed */&lt;br /&gt;
.infobox .infobox-navbar {&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	text-align: right;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
	#siteSub {&lt;br /&gt;
		display: block;&lt;br /&gt;
	}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://en.mippedia.org/index.php?title=MediaWiki:Common.css&amp;diff=422</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://en.mippedia.org/index.php?title=MediaWiki:Common.css&amp;diff=422"/>
		<updated>2026-05-29T21:44:15Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* --- FIX UKURAN DAN SKALA LOGO (UNTUK SEMUA SKIN) --- */&lt;br /&gt;
&lt;br /&gt;
/* Menargetkan elemen wadah logo */&lt;br /&gt;
#p-logo {&lt;br /&gt;
    /* Memaksa elemen wadah memiliki ukuran standar */&lt;br /&gt;
    width: 135px;&lt;br /&gt;
    height: 135px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Menargetkan elemen link di dalam wadah logo */&lt;br /&gt;
#p-logo a, .mw-wiki-logo {&lt;br /&gt;
    /* Memaksa ukuran area gambar agar sesuai */&lt;br /&gt;
    width: 135px !important;&lt;br /&gt;
    height: 135px !important;&lt;br /&gt;
    &lt;br /&gt;
    /* Memastikan gambar diskala (terutama untuk SVG) */&lt;br /&gt;
    background-size: contain !important;&lt;br /&gt;
    &lt;br /&gt;
    /* Memastikan gambar berada di tengah dan tidak berulang */&lt;br /&gt;
    background-position: center center !important;&lt;br /&gt;
    background-repeat: no-repeat !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- CAPTCHA STYLING ---------- */&lt;br /&gt;
.captcha-code {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  padding: 10px 16px;&lt;br /&gt;
  font-size: 1.8em;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  font-family: monospace;&lt;br /&gt;
  border-radius: 10px;&lt;br /&gt;
  letter-spacing: 4px;&lt;br /&gt;
  user-select: none;&lt;br /&gt;
  text-shadow: 1px 1px 2px rgba(0,0,0,0.2);&lt;br /&gt;
  margin: 10px auto;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  animation: fadeIn 0.4s ease-in-out;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Bikin background captcha punya warna acak */&lt;br /&gt;
.captcha-code {&lt;br /&gt;
  background: linear-gradient(135deg, #f8f8f8, #e8e8e8);&lt;br /&gt;
  border: 1px solid #bbb;&lt;br /&gt;
  color: #2c3e50;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Variasi warna random */&lt;br /&gt;
.captcha-code:nth-child(3n) {&lt;br /&gt;
  background: linear-gradient(135deg, #e3f2fd, #bbdefb);&lt;br /&gt;
  border-color: #90caf9;&lt;br /&gt;
  color: #0d47a1;&lt;br /&gt;
}&lt;br /&gt;
.captcha-code:nth-child(3n+1) {&lt;br /&gt;
  background: linear-gradient(135deg, #f1f8e9, #dcedc8);&lt;br /&gt;
  border-color: #aed581;&lt;br /&gt;
  color: #33691e;&lt;br /&gt;
}&lt;br /&gt;
.captcha-code:nth-child(3n+2) {&lt;br /&gt;
  background: linear-gradient(135deg, #fff3e0, #ffe0b2);&lt;br /&gt;
  border-color: #ffb74d;&lt;br /&gt;
  color: #e65100;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Label agar center di HP */&lt;br /&gt;
.mw-confirmedit-captcha label {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  margin: 12px 0;&lt;br /&gt;
  font-size: 1em;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  color: #444;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Responsif untuk seluler */&lt;br /&gt;
@media (max-width: 720px) {&lt;br /&gt;
  .captcha-code { font-size: 2.2em; padding: 12px 18px; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Animasi halus saat muncul */&lt;br /&gt;
@keyframes fadeIn {&lt;br /&gt;
  from { opacity: 0; transform: scale(0.9); }&lt;br /&gt;
  to   { opacity: 1; transform: scale(1); }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* === Hilangkan judul &amp;quot;Halaman Utama&amp;quot; di tampilan MobileFrontend === */&lt;br /&gt;
.page-Main_Page #section_0,&lt;br /&gt;
.page-Main_Page .content-header,&lt;br /&gt;
.page-Main_Page h1.firstHeading,&lt;br /&gt;
.page-Main_Page #firstHeading {&lt;br /&gt;
    display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Opsional: rapikan jarak setelah header hilang */&lt;br /&gt;
.page-Main_Page .content {&lt;br /&gt;
    margin-top: 0 !important;&lt;br /&gt;
    padding-top: 0.5em !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Infoboxes */&lt;br /&gt;
.infobox {&lt;br /&gt;
	border: 1px solid #a2a9b1;&lt;br /&gt;
	color: black;&lt;br /&gt;
	width: 100;&lt;br /&gt;
	padding: 0.2em;&lt;br /&gt;
	font-size: 88%;&lt;br /&gt;
	line-height: 1.5em;&lt;br /&gt;
	border-spacing: 3px;&lt;br /&gt;
	margin: 0.5em 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen {&lt;br /&gt;
	.infobox {&lt;br /&gt;
		background-color: var(--background-color-neutral-subtle, #f8f9fa);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media (max-width: 640px) {&lt;br /&gt;
	.infobox {&lt;br /&gt;
		width: 100%;&lt;br /&gt;
	}&lt;br /&gt;
    &lt;br /&gt;
	.infobox .nowrap {&lt;br /&gt;
		white-space: normal;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media (min-width: 640px) {&lt;br /&gt;
	.infobox {&lt;br /&gt;
		/* @noflip */&lt;br /&gt;
		margin-left: 1em;&lt;br /&gt;
		/* @noflip */&lt;br /&gt;
		float: right;&lt;br /&gt;
		/* @noflip */&lt;br /&gt;
		clear: right;&lt;br /&gt;
		width: 22em;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-header,&lt;br /&gt;
.infobox-label,&lt;br /&gt;
.infobox-above,&lt;br /&gt;
.infobox-full-data,&lt;br /&gt;
.infobox-data,&lt;br /&gt;
.infobox-below,&lt;br /&gt;
.infobox-subheader,&lt;br /&gt;
.infobox-image,&lt;br /&gt;
.infobox-navbar,&lt;br /&gt;
/* Remove element selector when every .infobox thing is using the standard module/templates  */&lt;br /&gt;
.infobox th,&lt;br /&gt;
.infobox td {&lt;br /&gt;
	vertical-align: top;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-label,&lt;br /&gt;
.infobox-data,&lt;br /&gt;
/* Remove element selector when every .infobox thing is using the standard module/templates  */&lt;br /&gt;
.infobox th,&lt;br /&gt;
.infobox td {&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Remove .infobox when element selectors above are removed */&lt;br /&gt;
.infobox .infobox-above,&lt;br /&gt;
.infobox .infobox-title,&lt;br /&gt;
/* Remove element selector when every .infobox thing is using the standard module/templates  */&lt;br /&gt;
.infobox caption {&lt;br /&gt;
	font-size: 125%;&lt;br /&gt;
	font-weight: bold;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-title,&lt;br /&gt;
/* Remove element selector when every .infobox thing is using the standard module/templates  */&lt;br /&gt;
.infobox caption {&lt;br /&gt;
	padding: 0.2em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Remove .infobox when element selectors above are removed */&lt;br /&gt;
.infobox .infobox-header,&lt;br /&gt;
.infobox .infobox-subheader,&lt;br /&gt;
.infobox .infobox-image,&lt;br /&gt;
.infobox .infobox-full-data,&lt;br /&gt;
.infobox .infobox-below {&lt;br /&gt;
	text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Remove .infobox when element selectors above are removed */&lt;br /&gt;
.infobox .infobox-navbar {&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	text-align: right;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
	#siteSub {&lt;br /&gt;
		display: block;&lt;br /&gt;
	}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://en.mippedia.org/index.php?title=MediaWiki:Common.css&amp;diff=421</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://en.mippedia.org/index.php?title=MediaWiki:Common.css&amp;diff=421"/>
		<updated>2026-05-29T21:37:37Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* --- FIX UKURAN DAN SKALA LOGO (UNTUK SEMUA SKIN) --- */&lt;br /&gt;
&lt;br /&gt;
/* Menargetkan elemen wadah logo */&lt;br /&gt;
#p-logo {&lt;br /&gt;
    /* Memaksa elemen wadah memiliki ukuran standar */&lt;br /&gt;
    width: 135px;&lt;br /&gt;
    height: 135px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Menargetkan elemen link di dalam wadah logo */&lt;br /&gt;
#p-logo a, .mw-wiki-logo {&lt;br /&gt;
    /* Memaksa ukuran area gambar agar sesuai */&lt;br /&gt;
    width: 135px !important;&lt;br /&gt;
    height: 135px !important;&lt;br /&gt;
    &lt;br /&gt;
    /* Memastikan gambar diskala (terutama untuk SVG) */&lt;br /&gt;
    background-size: contain !important;&lt;br /&gt;
    &lt;br /&gt;
    /* Memastikan gambar berada di tengah dan tidak berulang */&lt;br /&gt;
    background-position: center center !important;&lt;br /&gt;
    background-repeat: no-repeat !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- CAPTCHA STYLING ---------- */&lt;br /&gt;
.captcha-code {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  padding: 10px 16px;&lt;br /&gt;
  font-size: 1.8em;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  font-family: monospace;&lt;br /&gt;
  border-radius: 10px;&lt;br /&gt;
  letter-spacing: 4px;&lt;br /&gt;
  user-select: none;&lt;br /&gt;
  text-shadow: 1px 1px 2px rgba(0,0,0,0.2);&lt;br /&gt;
  margin: 10px auto;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  animation: fadeIn 0.4s ease-in-out;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Bikin background captcha punya warna acak */&lt;br /&gt;
.captcha-code {&lt;br /&gt;
  background: linear-gradient(135deg, #f8f8f8, #e8e8e8);&lt;br /&gt;
  border: 1px solid #bbb;&lt;br /&gt;
  color: #2c3e50;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Variasi warna random */&lt;br /&gt;
.captcha-code:nth-child(3n) {&lt;br /&gt;
  background: linear-gradient(135deg, #e3f2fd, #bbdefb);&lt;br /&gt;
  border-color: #90caf9;&lt;br /&gt;
  color: #0d47a1;&lt;br /&gt;
}&lt;br /&gt;
.captcha-code:nth-child(3n+1) {&lt;br /&gt;
  background: linear-gradient(135deg, #f1f8e9, #dcedc8);&lt;br /&gt;
  border-color: #aed581;&lt;br /&gt;
  color: #33691e;&lt;br /&gt;
}&lt;br /&gt;
.captcha-code:nth-child(3n+2) {&lt;br /&gt;
  background: linear-gradient(135deg, #fff3e0, #ffe0b2);&lt;br /&gt;
  border-color: #ffb74d;&lt;br /&gt;
  color: #e65100;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Label agar center di HP */&lt;br /&gt;
.mw-confirmedit-captcha label {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  margin: 12px 0;&lt;br /&gt;
  font-size: 1em;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  color: #444;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Responsif untuk seluler */&lt;br /&gt;
@media (max-width: 720px) {&lt;br /&gt;
  .captcha-code { font-size: 2.2em; padding: 12px 18px; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Animasi halus saat muncul */&lt;br /&gt;
@keyframes fadeIn {&lt;br /&gt;
  from { opacity: 0; transform: scale(0.9); }&lt;br /&gt;
  to   { opacity: 1; transform: scale(1); }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* === Hilangkan judul &amp;quot;Halaman Utama&amp;quot; di tampilan MobileFrontend === */&lt;br /&gt;
.page-Main_Page #section_0,&lt;br /&gt;
.page-Main_Page .content-header,&lt;br /&gt;
.page-Main_Page h1.firstHeading,&lt;br /&gt;
.page-Main_Page #firstHeading {&lt;br /&gt;
    display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Opsional: rapikan jarak setelah header hilang */&lt;br /&gt;
.page-Main_Page .content {&lt;br /&gt;
    margin-top: 0 !important;&lt;br /&gt;
    padding-top: 0.5em !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Infoboxes */&lt;br /&gt;
.infobox {&lt;br /&gt;
	border: 1px solid #a2a9b1;&lt;br /&gt;
	color: black;&lt;br /&gt;
	width: 100;&lt;br /&gt;
	padding: 0.2em;&lt;br /&gt;
	font-size: 88%;&lt;br /&gt;
	line-height: 1.5em;&lt;br /&gt;
	border-spacing: 3px;&lt;br /&gt;
	margin: 0.5em 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen {&lt;br /&gt;
	.infobox {&lt;br /&gt;
		background-color: var(--background-color-neutral-subtle, #f8f9fa);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media (max-width: 640px) {&lt;br /&gt;
	.infobox {&lt;br /&gt;
		width: 100%;&lt;br /&gt;
	}&lt;br /&gt;
    &lt;br /&gt;
	.infobox .nowrap {&lt;br /&gt;
		white-space: normal;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media (min-width: 640px) {&lt;br /&gt;
	.infobox {&lt;br /&gt;
		/* @noflip */&lt;br /&gt;
		margin-left: 1em;&lt;br /&gt;
		/* @noflip */&lt;br /&gt;
		float: right;&lt;br /&gt;
		/* @noflip */&lt;br /&gt;
		clear: right;&lt;br /&gt;
		width: 22em;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-header,&lt;br /&gt;
.infobox-label,&lt;br /&gt;
.infobox-above,&lt;br /&gt;
.infobox-full-data,&lt;br /&gt;
.infobox-data,&lt;br /&gt;
.infobox-below,&lt;br /&gt;
.infobox-subheader,&lt;br /&gt;
.infobox-image,&lt;br /&gt;
.infobox-navbar,&lt;br /&gt;
/* Remove element selector when every .infobox thing is using the standard module/templates  */&lt;br /&gt;
.infobox th,&lt;br /&gt;
.infobox td {&lt;br /&gt;
	vertical-align: top;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-label,&lt;br /&gt;
.infobox-data,&lt;br /&gt;
/* Remove element selector when every .infobox thing is using the standard module/templates  */&lt;br /&gt;
.infobox th,&lt;br /&gt;
.infobox td {&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Remove .infobox when element selectors above are removed */&lt;br /&gt;
.infobox .infobox-above,&lt;br /&gt;
.infobox .infobox-title,&lt;br /&gt;
/* Remove element selector when every .infobox thing is using the standard module/templates  */&lt;br /&gt;
.infobox caption {&lt;br /&gt;
	font-size: 125%;&lt;br /&gt;
	font-weight: bold;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-title,&lt;br /&gt;
/* Remove element selector when every .infobox thing is using the standard module/templates  */&lt;br /&gt;
.infobox caption {&lt;br /&gt;
	padding: 0.2em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Remove .infobox when element selectors above are removed */&lt;br /&gt;
.infobox .infobox-header,&lt;br /&gt;
.infobox .infobox-subheader,&lt;br /&gt;
.infobox .infobox-image,&lt;br /&gt;
.infobox .infobox-full-data,&lt;br /&gt;
.infobox .infobox-below {&lt;br /&gt;
	text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Remove .infobox when element selectors above are removed */&lt;br /&gt;
.infobox .infobox-navbar {&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	text-align: right;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://en.mippedia.org/index.php?title=MediaWiki:Common.css&amp;diff=420</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://en.mippedia.org/index.php?title=MediaWiki:Common.css&amp;diff=420"/>
		<updated>2026-05-29T21:32:27Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* --- FIX UKURAN DAN SKALA LOGO (UNTUK SEMUA SKIN) --- */&lt;br /&gt;
&lt;br /&gt;
/* Menargetkan elemen wadah logo */&lt;br /&gt;
#p-logo {&lt;br /&gt;
    /* Memaksa elemen wadah memiliki ukuran standar */&lt;br /&gt;
    width: 135px;&lt;br /&gt;
    height: 135px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Menargetkan elemen link di dalam wadah logo */&lt;br /&gt;
#p-logo a, .mw-wiki-logo {&lt;br /&gt;
    /* Memaksa ukuran area gambar agar sesuai */&lt;br /&gt;
    width: 135px !important;&lt;br /&gt;
    height: 135px !important;&lt;br /&gt;
    &lt;br /&gt;
    /* Memastikan gambar diskala (terutama untuk SVG) */&lt;br /&gt;
    background-size: contain !important;&lt;br /&gt;
    &lt;br /&gt;
    /* Memastikan gambar berada di tengah dan tidak berulang */&lt;br /&gt;
    background-position: center center !important;&lt;br /&gt;
    background-repeat: no-repeat !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- CAPTCHA STYLING ---------- */&lt;br /&gt;
.captcha-code {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  padding: 10px 16px;&lt;br /&gt;
  font-size: 1.8em;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  font-family: monospace;&lt;br /&gt;
  border-radius: 10px;&lt;br /&gt;
  letter-spacing: 4px;&lt;br /&gt;
  user-select: none;&lt;br /&gt;
  text-shadow: 1px 1px 2px rgba(0,0,0,0.2);&lt;br /&gt;
  margin: 10px auto;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  animation: fadeIn 0.4s ease-in-out;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Bikin background captcha punya warna acak */&lt;br /&gt;
.captcha-code {&lt;br /&gt;
  background: linear-gradient(135deg, #f8f8f8, #e8e8e8);&lt;br /&gt;
  border: 1px solid #bbb;&lt;br /&gt;
  color: #2c3e50;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Variasi warna random */&lt;br /&gt;
.captcha-code:nth-child(3n) {&lt;br /&gt;
  background: linear-gradient(135deg, #e3f2fd, #bbdefb);&lt;br /&gt;
  border-color: #90caf9;&lt;br /&gt;
  color: #0d47a1;&lt;br /&gt;
}&lt;br /&gt;
.captcha-code:nth-child(3n+1) {&lt;br /&gt;
  background: linear-gradient(135deg, #f1f8e9, #dcedc8);&lt;br /&gt;
  border-color: #aed581;&lt;br /&gt;
  color: #33691e;&lt;br /&gt;
}&lt;br /&gt;
.captcha-code:nth-child(3n+2) {&lt;br /&gt;
  background: linear-gradient(135deg, #fff3e0, #ffe0b2);&lt;br /&gt;
  border-color: #ffb74d;&lt;br /&gt;
  color: #e65100;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Label agar center di HP */&lt;br /&gt;
.mw-confirmedit-captcha label {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  margin: 12px 0;&lt;br /&gt;
  font-size: 1em;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  color: #444;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Responsif untuk seluler */&lt;br /&gt;
@media (max-width: 720px) {&lt;br /&gt;
  .captcha-code { font-size: 2.2em; padding: 12px 18px; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Animasi halus saat muncul */&lt;br /&gt;
@keyframes fadeIn {&lt;br /&gt;
  from { opacity: 0; transform: scale(0.9); }&lt;br /&gt;
  to   { opacity: 1; transform: scale(1); }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* === Hilangkan judul &amp;quot;Halaman Utama&amp;quot; di tampilan MobileFrontend === */&lt;br /&gt;
.page-Main_Page #section_0,&lt;br /&gt;
.page-Main_Page .content-header,&lt;br /&gt;
.page-Main_Page h1.firstHeading,&lt;br /&gt;
.page-Main_Page #firstHeading {&lt;br /&gt;
    display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Opsional: rapikan jarak setelah header hilang */&lt;br /&gt;
.page-Main_Page .content {&lt;br /&gt;
    margin-top: 0 !important;&lt;br /&gt;
    padding-top: 0.5em !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Infoboxes */&lt;br /&gt;
.infobox {&lt;br /&gt;
	border: 100px solid #a2a9b1;&lt;br /&gt;
	color: black;&lt;br /&gt;
	padding: 0.2em;&lt;br /&gt;
	font-size: 88%;&lt;br /&gt;
	line-height: 1.5em;&lt;br /&gt;
	border-spacing: 3px;&lt;br /&gt;
	margin: 0.5em 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen {&lt;br /&gt;
	.infobox {&lt;br /&gt;
		background-color: var(--background-color-neutral-subtle, #f8f9fa);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media (max-width: 640px) {&lt;br /&gt;
	.infobox {&lt;br /&gt;
		width: 100%;&lt;br /&gt;
	}&lt;br /&gt;
    &lt;br /&gt;
	.infobox .nowrap {&lt;br /&gt;
		white-space: normal;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media (min-width: 640px) {&lt;br /&gt;
	.infobox {&lt;br /&gt;
		/* @noflip */&lt;br /&gt;
		margin-left: 1em;&lt;br /&gt;
		/* @noflip */&lt;br /&gt;
		float: right;&lt;br /&gt;
		/* @noflip */&lt;br /&gt;
		clear: right;&lt;br /&gt;
		width: 22em;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-header,&lt;br /&gt;
.infobox-label,&lt;br /&gt;
.infobox-above,&lt;br /&gt;
.infobox-full-data,&lt;br /&gt;
.infobox-data,&lt;br /&gt;
.infobox-below,&lt;br /&gt;
.infobox-subheader,&lt;br /&gt;
.infobox-image,&lt;br /&gt;
.infobox-navbar,&lt;br /&gt;
/* Remove element selector when every .infobox thing is using the standard module/templates  */&lt;br /&gt;
.infobox th,&lt;br /&gt;
.infobox td {&lt;br /&gt;
	vertical-align: top;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-label,&lt;br /&gt;
.infobox-data,&lt;br /&gt;
/* Remove element selector when every .infobox thing is using the standard module/templates  */&lt;br /&gt;
.infobox th,&lt;br /&gt;
.infobox td {&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Remove .infobox when element selectors above are removed */&lt;br /&gt;
.infobox .infobox-above,&lt;br /&gt;
.infobox .infobox-title,&lt;br /&gt;
/* Remove element selector when every .infobox thing is using the standard module/templates  */&lt;br /&gt;
.infobox caption {&lt;br /&gt;
	font-size: 125%;&lt;br /&gt;
	font-weight: bold;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-title,&lt;br /&gt;
/* Remove element selector when every .infobox thing is using the standard module/templates  */&lt;br /&gt;
.infobox caption {&lt;br /&gt;
	padding: 0.2em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Remove .infobox when element selectors above are removed */&lt;br /&gt;
.infobox .infobox-header,&lt;br /&gt;
.infobox .infobox-subheader,&lt;br /&gt;
.infobox .infobox-image,&lt;br /&gt;
.infobox .infobox-full-data,&lt;br /&gt;
.infobox .infobox-below {&lt;br /&gt;
	text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Remove .infobox when element selectors above are removed */&lt;br /&gt;
.infobox .infobox-navbar {&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	text-align: right;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://en.mippedia.org/index.php?title=MediaWiki:Common.css&amp;diff=419</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://en.mippedia.org/index.php?title=MediaWiki:Common.css&amp;diff=419"/>
		<updated>2026-05-29T21:30:25Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* --- FIX UKURAN DAN SKALA LOGO (UNTUK SEMUA SKIN) --- */&lt;br /&gt;
&lt;br /&gt;
/* Menargetkan elemen wadah logo */&lt;br /&gt;
#p-logo {&lt;br /&gt;
    /* Memaksa elemen wadah memiliki ukuran standar */&lt;br /&gt;
    width: 135px;&lt;br /&gt;
    height: 135px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Menargetkan elemen link di dalam wadah logo */&lt;br /&gt;
#p-logo a, .mw-wiki-logo {&lt;br /&gt;
    /* Memaksa ukuran area gambar agar sesuai */&lt;br /&gt;
    width: 135px !important;&lt;br /&gt;
    height: 135px !important;&lt;br /&gt;
    &lt;br /&gt;
    /* Memastikan gambar diskala (terutama untuk SVG) */&lt;br /&gt;
    background-size: contain !important;&lt;br /&gt;
    &lt;br /&gt;
    /* Memastikan gambar berada di tengah dan tidak berulang */&lt;br /&gt;
    background-position: center center !important;&lt;br /&gt;
    background-repeat: no-repeat !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ---------- CAPTCHA STYLING ---------- */&lt;br /&gt;
.captcha-code {&lt;br /&gt;
  display: inline-block;&lt;br /&gt;
  padding: 10px 16px;&lt;br /&gt;
  font-size: 1.8em;&lt;br /&gt;
  font-weight: 700;&lt;br /&gt;
  font-family: monospace;&lt;br /&gt;
  border-radius: 10px;&lt;br /&gt;
  letter-spacing: 4px;&lt;br /&gt;
  user-select: none;&lt;br /&gt;
  text-shadow: 1px 1px 2px rgba(0,0,0,0.2);&lt;br /&gt;
  margin: 10px auto;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  animation: fadeIn 0.4s ease-in-out;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Bikin background captcha punya warna acak */&lt;br /&gt;
.captcha-code {&lt;br /&gt;
  background: linear-gradient(135deg, #f8f8f8, #e8e8e8);&lt;br /&gt;
  border: 1px solid #bbb;&lt;br /&gt;
  color: #2c3e50;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Variasi warna random */&lt;br /&gt;
.captcha-code:nth-child(3n) {&lt;br /&gt;
  background: linear-gradient(135deg, #e3f2fd, #bbdefb);&lt;br /&gt;
  border-color: #90caf9;&lt;br /&gt;
  color: #0d47a1;&lt;br /&gt;
}&lt;br /&gt;
.captcha-code:nth-child(3n+1) {&lt;br /&gt;
  background: linear-gradient(135deg, #f1f8e9, #dcedc8);&lt;br /&gt;
  border-color: #aed581;&lt;br /&gt;
  color: #33691e;&lt;br /&gt;
}&lt;br /&gt;
.captcha-code:nth-child(3n+2) {&lt;br /&gt;
  background: linear-gradient(135deg, #fff3e0, #ffe0b2);&lt;br /&gt;
  border-color: #ffb74d;&lt;br /&gt;
  color: #e65100;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Label agar center di HP */&lt;br /&gt;
.mw-confirmedit-captcha label {&lt;br /&gt;
  display: block;&lt;br /&gt;
  text-align: center;&lt;br /&gt;
  margin: 12px 0;&lt;br /&gt;
  font-size: 1em;&lt;br /&gt;
  font-weight: 500;&lt;br /&gt;
  color: #444;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Responsif untuk seluler */&lt;br /&gt;
@media (max-width: 720px) {&lt;br /&gt;
  .captcha-code { font-size: 2.2em; padding: 12px 18px; }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Animasi halus saat muncul */&lt;br /&gt;
@keyframes fadeIn {&lt;br /&gt;
  from { opacity: 0; transform: scale(0.9); }&lt;br /&gt;
  to   { opacity: 1; transform: scale(1); }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* === Hilangkan judul &amp;quot;Halaman Utama&amp;quot; di tampilan MobileFrontend === */&lt;br /&gt;
.page-Main_Page #section_0,&lt;br /&gt;
.page-Main_Page .content-header,&lt;br /&gt;
.page-Main_Page h1.firstHeading,&lt;br /&gt;
.page-Main_Page #firstHeading {&lt;br /&gt;
    display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Opsional: rapikan jarak setelah header hilang */&lt;br /&gt;
.page-Main_Page .content {&lt;br /&gt;
    margin-top: 0 !important;&lt;br /&gt;
    padding-top: 0.5em !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Infoboxes */&lt;br /&gt;
.infobox {&lt;br /&gt;
	border: 1px solid #a2a9b1;&lt;br /&gt;
	color: black;&lt;br /&gt;
	padding: 0.2em;&lt;br /&gt;
	font-size: 88%;&lt;br /&gt;
	line-height: 1.5em;&lt;br /&gt;
	border-spacing: 3px;&lt;br /&gt;
	margin: 0.5em 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen {&lt;br /&gt;
	.infobox {&lt;br /&gt;
		background-color: var(--background-color-neutral-subtle, #f8f9fa);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media (max-width: 640px) {&lt;br /&gt;
	.infobox {&lt;br /&gt;
		width: 250%;&lt;br /&gt;
	}&lt;br /&gt;
    &lt;br /&gt;
	.infobox .nowrap {&lt;br /&gt;
		white-space: normal;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media (min-width: 640px) {&lt;br /&gt;
	.infobox {&lt;br /&gt;
		/* @noflip */&lt;br /&gt;
		margin-left: 1em;&lt;br /&gt;
		/* @noflip */&lt;br /&gt;
		float: right;&lt;br /&gt;
		/* @noflip */&lt;br /&gt;
		clear: right;&lt;br /&gt;
		width: 22em;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-header,&lt;br /&gt;
.infobox-label,&lt;br /&gt;
.infobox-above,&lt;br /&gt;
.infobox-full-data,&lt;br /&gt;
.infobox-data,&lt;br /&gt;
.infobox-below,&lt;br /&gt;
.infobox-subheader,&lt;br /&gt;
.infobox-image,&lt;br /&gt;
.infobox-navbar,&lt;br /&gt;
/* Remove element selector when every .infobox thing is using the standard module/templates  */&lt;br /&gt;
.infobox th,&lt;br /&gt;
.infobox td {&lt;br /&gt;
	vertical-align: top;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-label,&lt;br /&gt;
.infobox-data,&lt;br /&gt;
/* Remove element selector when every .infobox thing is using the standard module/templates  */&lt;br /&gt;
.infobox th,&lt;br /&gt;
.infobox td {&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Remove .infobox when element selectors above are removed */&lt;br /&gt;
.infobox .infobox-above,&lt;br /&gt;
.infobox .infobox-title,&lt;br /&gt;
/* Remove element selector when every .infobox thing is using the standard module/templates  */&lt;br /&gt;
.infobox caption {&lt;br /&gt;
	font-size: 125%;&lt;br /&gt;
	font-weight: bold;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-title,&lt;br /&gt;
/* Remove element selector when every .infobox thing is using the standard module/templates  */&lt;br /&gt;
.infobox caption {&lt;br /&gt;
	padding: 0.2em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Remove .infobox when element selectors above are removed */&lt;br /&gt;
.infobox .infobox-header,&lt;br /&gt;
.infobox .infobox-subheader,&lt;br /&gt;
.infobox .infobox-image,&lt;br /&gt;
.infobox .infobox-full-data,&lt;br /&gt;
.infobox .infobox-below {&lt;br /&gt;
	text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Remove .infobox when element selectors above are removed */&lt;br /&gt;
.infobox .infobox-navbar {&lt;br /&gt;
	/* @noflip */&lt;br /&gt;
	text-align: right;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://en.mippedia.org/index.php?title=Template:Fmbox&amp;diff=418</id>
		<title>Template:Fmbox</title>
		<link rel="alternate" type="text/html" href="https://en.mippedia.org/index.php?title=Template:Fmbox&amp;diff=418"/>
		<updated>2026-05-29T21:21:06Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#invoke:Message  box|fmbox|plainlinks={{{plainlinks|yes}}}}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;!-- Add categories and interwikis to the /doc subpage, not here! --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://en.mippedia.org/index.php?title=Module:Message_box/fmbox.css&amp;diff=417</id>
		<title>Module:Message box/fmbox.css</title>
		<link rel="alternate" type="text/html" href="https://en.mippedia.org/index.php?title=Module:Message_box/fmbox.css&amp;diff=417"/>
		<updated>2026-05-29T21:20:34Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;/* {{pp|small=y}} */ .fmbox { 	clear: both; /* this sheet does not require overflow-x because of this clear */ 	margin: 0.2em 0; 	border: 1px solid #a2a9b1;     background-color: var(--background-color-interactive-subtle, #f8f9fa);     box-sizing: border-box;     color: var(--color-base, #202122); }  .fmbox-warning { 	border: 1px solid #bb7070;  /* Dark pink */ 	background-color: #ffdbdb;  /* Pink */ }  .fmbox-editnotice { 	background-color: transparent; }  .fmbox .mbox-...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* {{pp|small=y}} */&lt;br /&gt;
.fmbox {&lt;br /&gt;
	clear: both; /* this sheet does not require overflow-x because of this clear */&lt;br /&gt;
	margin: 0.2em 0;&lt;br /&gt;
	border: 1px solid #a2a9b1;&lt;br /&gt;
    background-color: var(--background-color-interactive-subtle, #f8f9fa);&lt;br /&gt;
    box-sizing: border-box;&lt;br /&gt;
    color: var(--color-base, #202122);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.fmbox-warning {&lt;br /&gt;
	border: 1px solid #bb7070;  /* Dark pink */&lt;br /&gt;
	background-color: #ffdbdb;  /* Pink */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.fmbox-editnotice {&lt;br /&gt;
	background-color: transparent;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.fmbox .mbox-text {&lt;br /&gt;
	padding: 0.35em 1em;&lt;br /&gt;
	flex: 1 1 100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.fmbox .mbox-image,&lt;br /&gt;
.fmbox .mbox-imageright {&lt;br /&gt;
	padding: 4px 2px;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	flex: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* keep synced with each other type of message box as this isn&#039;t qualified */&lt;br /&gt;
.mbox-invalid-type {&lt;br /&gt;
	text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media (min-width: 480px) {&lt;br /&gt;
	.fmbox {&lt;br /&gt;
		display: flex;&lt;br /&gt;
		align-items: center;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	.fmbox .mbox-image {&lt;br /&gt;
		/* @noflip */&lt;br /&gt;
		padding-left: 1em;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	.fmbox .mbox-imageright {&lt;br /&gt;
		/* @noflip */&lt;br /&gt;
		padding-right: 1em;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen {&lt;br /&gt;
    html.skin-theme-clientpref-night .fmbox-warning {&lt;br /&gt;
		background-color: #300;    /* Reddish, same hue/saturation as light */&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (prefers-color-scheme: dark) {&lt;br /&gt;
	html.skin-theme-clientpref-os .fmbox-warning {&lt;br /&gt;
		background-color: #300; /* Reddish, same hue/saturation as light */&lt;br /&gt;
	}&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://en.mippedia.org/index.php?title=Template:Fmbox&amp;diff=416</id>
		<title>Template:Fmbox</title>
		<link rel="alternate" type="text/html" href="https://en.mippedia.org/index.php?title=Template:Fmbox&amp;diff=416"/>
		<updated>2026-05-29T21:19:21Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;{{#invoke:Message box|fmbox|plainlinks={{{plainlinks|yes}}}}}&amp;lt;noinclude&amp;gt; {{documentation}} &amp;lt;!-- Add categories and interwikis to the /doc subpage, not here! --&amp;gt; &amp;lt;/noinclude&amp;gt;&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#invoke:Message box|fmbox|plainlinks={{{plainlinks|yes}}}}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;!-- Add categories and interwikis to the /doc subpage, not here! --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://en.mippedia.org/index.php?title=Template:FULLROOTPAGENAME&amp;diff=415</id>
		<title>Template:FULLROOTPAGENAME</title>
		<link rel="alternate" type="text/html" href="https://en.mippedia.org/index.php?title=Template:FULLROOTPAGENAME&amp;diff=415"/>
		<updated>2026-05-29T21:18:41Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;{{ safesubst:&amp;lt;noinclude/&amp;gt;#if: {{ safesubst:&amp;lt;noinclude/&amp;gt;Ns has subpages | {{ safesubst:&amp;lt;noinclude/&amp;gt;#if:{{{1|}}}|{{ safesubst:&amp;lt;noinclude/&amp;gt;NAMESPACE:{{{1}}}}}|{{ safesubst:&amp;lt;noinclude/&amp;gt;NAMESPACE}}}} }}    | {{ safesubst:&amp;lt;noinclude/&amp;gt;#titleparts:{{ safesubst:&amp;lt;noinclude/&amp;gt;#if:{{{1|}}}|{{{1}}}|{{ safesubst:&amp;lt;noinclude/&amp;gt;FULLPAGENAME}}}}|1}}   | {{ safesubst:&amp;lt;noinclude/&amp;gt;#if:{{{1|}}}|{{{1}}}|{{ safesubst:&amp;lt;noinclude/&amp;gt;FULLPAGENAME}}}} }}&amp;lt;noinclude&amp;gt;  {{documentation}}  &amp;lt;/noinclude&amp;gt;&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ safesubst:&amp;lt;noinclude/&amp;gt;#if: {{ safesubst:&amp;lt;noinclude/&amp;gt;Ns has subpages | {{ safesubst:&amp;lt;noinclude/&amp;gt;#if:{{{1|}}}|{{ safesubst:&amp;lt;noinclude/&amp;gt;NAMESPACE:{{{1}}}}}|{{ safesubst:&amp;lt;noinclude/&amp;gt;NAMESPACE}}}} }} &lt;br /&gt;
  | {{ safesubst:&amp;lt;noinclude/&amp;gt;#titleparts:{{ safesubst:&amp;lt;noinclude/&amp;gt;#if:{{{1|}}}|{{{1}}}|{{ safesubst:&amp;lt;noinclude/&amp;gt;FULLPAGENAME}}}}|1}}&lt;br /&gt;
  | {{ safesubst:&amp;lt;noinclude/&amp;gt;#if:{{{1|}}}|{{{1}}}|{{ safesubst:&amp;lt;noinclude/&amp;gt;FULLPAGENAME}}}}&lt;br /&gt;
}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://en.mippedia.org/index.php?title=Template:Pp-protected&amp;diff=414</id>
		<title>Template:Pp-protected</title>
		<link rel="alternate" type="text/html" href="https://en.mippedia.org/index.php?title=Template:Pp-protected&amp;diff=414"/>
		<updated>2026-05-29T21:17:39Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;&amp;lt;includeonly&amp;gt;{{#invoke:Protection banner|main}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt; {{Documentation}} &amp;lt;/noinclude&amp;gt;&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{#invoke:Protection banner|main}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
</feed>