<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://classic.pgnrp.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Maegnus</id>
	<title>PGN Classic - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://classic.pgnrp.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Maegnus"/>
	<link rel="alternate" type="text/html" href="https://classic.pgnrp.com/index.php/Special:Contributions/Maegnus"/>
	<updated>2026-04-08T18:19:44Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://classic.pgnrp.com/index.php?title=MediaWiki:Common.js&amp;diff=116</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://classic.pgnrp.com/index.php?title=MediaWiki:Common.js&amp;diff=116"/>
		<updated>2025-05-21T06:48:07Z</updated>

		<summary type="html">&lt;p&gt;Maegnus: Created page with &amp;quot;(function () {     var pageName = mw.config.get(&amp;quot;wgPageName&amp;quot;);     var skin = mw.config.get(&amp;quot;skin&amp;quot;);     var isMainPage = mw.config.get(&amp;quot;wgIsMainPage&amp;quot;);      function onMainPage() {         var searchTrigger = document.getElementById(             &amp;quot;tg-mainpage-search-trigger&amp;quot;         );         var searchInput = document.getElementById(&amp;quot;searchInput&amp;quot;);         var searchToggle;          function onSearchTriggerClick() {             if (skin === &amp;quot;citizen&amp;quot;) {...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;(function () {&lt;br /&gt;
    var pageName = mw.config.get(&amp;quot;wgPageName&amp;quot;);&lt;br /&gt;
    var skin = mw.config.get(&amp;quot;skin&amp;quot;);&lt;br /&gt;
    var isMainPage = mw.config.get(&amp;quot;wgIsMainPage&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    function onMainPage() {&lt;br /&gt;
        var searchTrigger = document.getElementById(&lt;br /&gt;
            &amp;quot;tg-mainpage-search-trigger&amp;quot;&lt;br /&gt;
        );&lt;br /&gt;
        var searchInput = document.getElementById(&amp;quot;searchInput&amp;quot;);&lt;br /&gt;
        var searchToggle;&lt;br /&gt;
&lt;br /&gt;
        function onSearchTriggerClick() {&lt;br /&gt;
            if (skin === &amp;quot;citizen&amp;quot;) {&lt;br /&gt;
                // HACK: Force sticky header to be visible&lt;br /&gt;
                var isSearchHidden =&lt;br /&gt;
                    document.body.classList.contains(&amp;quot;citizen-scroll--down&amp;quot;) &amp;amp;&amp;amp;&lt;br /&gt;
                    window.matchMedia(&amp;quot;(max-width: 1119px)&amp;quot;);&lt;br /&gt;
                if (isSearchHidden) {&lt;br /&gt;
                    document.body.classList.remove(&amp;quot;citizen-scroll--down&amp;quot;);&lt;br /&gt;
                    document.body.classList.add(&amp;quot;citizen-scroll--up&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                // Citizen does not have a visible search bar, you need to expand the search card first&lt;br /&gt;
                // And Citizen will focus the input automatically&lt;br /&gt;
                searchToggle.open = true;&lt;br /&gt;
            } else {&lt;br /&gt;
                // This should work for all skins that has visible search bar&lt;br /&gt;
                searchInput.focus();&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // Attach click event listener to search button on the main page&lt;br /&gt;
        if (searchTrigger &amp;amp;&amp;amp; searchInput) {&lt;br /&gt;
            if (skin === &amp;quot;citizen&amp;quot;) {&lt;br /&gt;
                searchToggle = document.getElementById(&amp;quot;citizen-search-details&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            searchTrigger.addEventListener(&amp;quot;click&amp;quot;, onSearchTriggerClick);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function initSauronEye(container) {&lt;br /&gt;
        var Eye = {&lt;br /&gt;
            size: 250,&lt;br /&gt;
            point: 15,&lt;br /&gt;
            speed: 100,&lt;br /&gt;
            pupil: { x: 6, y: 36 },&lt;br /&gt;
            eye: { x: 100, y: 65 },&lt;br /&gt;
            data: [],&lt;br /&gt;
&lt;br /&gt;
            Add: function (val) {&lt;br /&gt;
                return val + Eye.size / 2;&lt;br /&gt;
            },&lt;br /&gt;
&lt;br /&gt;
            Interval: function (color, distance, value) {&lt;br /&gt;
                var s = Math.abs(&lt;br /&gt;
                    (color.a - color.b) / (distance.b - distance.a)&lt;br /&gt;
                );&lt;br /&gt;
                var v = value - distance.a;&lt;br /&gt;
                var c = color.a &amp;gt; color.b ? color.a - v * s : color.a + v * s;&lt;br /&gt;
                return Math.round(c);&lt;br /&gt;
            },&lt;br /&gt;
&lt;br /&gt;
            Color: function (percent) {&lt;br /&gt;
                if (percent &amp;lt; 5)&lt;br /&gt;
                    return Eye.Interval(&lt;br /&gt;
                        { a: 255, b: 180 },&lt;br /&gt;
                        { a: 0, b: 2 },&lt;br /&gt;
                        percent&lt;br /&gt;
                    );&lt;br /&gt;
                else if (percent &amp;lt; 10)&lt;br /&gt;
                    return Eye.Interval(&lt;br /&gt;
                        { a: 180, b: 100 },&lt;br /&gt;
                        { a: 2, b: 5 },&lt;br /&gt;
                        percent&lt;br /&gt;
                    );&lt;br /&gt;
                else if (percent &amp;lt; 40)&lt;br /&gt;
                    return Eye.Interval(&lt;br /&gt;
                        { a: 100, b: 0 },&lt;br /&gt;
                        { a: 5, b: 30 },&lt;br /&gt;
                        percent&lt;br /&gt;
                    );&lt;br /&gt;
                else if (percent &amp;lt; 70)&lt;br /&gt;
                    return Eye.Interval(&lt;br /&gt;
                        { a: 0, b: 100 },&lt;br /&gt;
                        { a: 30, b: 70 },&lt;br /&gt;
                        percent&lt;br /&gt;
                    );&lt;br /&gt;
                else if (percent &amp;lt; 75)&lt;br /&gt;
                    return Eye.Interval(&lt;br /&gt;
                        { a: 100, b: 180 },&lt;br /&gt;
                        { a: 70, b: 80 },&lt;br /&gt;
                        percent&lt;br /&gt;
                    );&lt;br /&gt;
                else&lt;br /&gt;
                    return Eye.Interval(&lt;br /&gt;
                        { a: 180, b: 255 },&lt;br /&gt;
                        { a: 80, b: 100 },&lt;br /&gt;
                        percent&lt;br /&gt;
                    );&lt;br /&gt;
            },&lt;br /&gt;
&lt;br /&gt;
            Pifagor: function (x, y) {&lt;br /&gt;
                return Math.sqrt(x * x + y * y);&lt;br /&gt;
            },&lt;br /&gt;
&lt;br /&gt;
            Remove: function (radius, max, i) {&lt;br /&gt;
                if (radius &amp;gt; max) {&lt;br /&gt;
                    Eye.data.splice(i, 1);&lt;br /&gt;
                }&lt;br /&gt;
            },&lt;br /&gt;
&lt;br /&gt;
            Write: function (x, y, color, opacity) {&lt;br /&gt;
                Eye.ctx.fillStyle = &amp;quot;rgba(255,&amp;quot; + color + &amp;quot;,0,&amp;quot; + opacity + &amp;quot;)&amp;quot;;&lt;br /&gt;
                Eye.ctx.fillRect(Eye.Add(x), Eye.Add(y), 1, 1);&lt;br /&gt;
            },&lt;br /&gt;
&lt;br /&gt;
            Style: function (point, i) {&lt;br /&gt;
                var radius = Eye.Pifagor(point.x, point.y);&lt;br /&gt;
                var percent =&lt;br /&gt;
                    ((radius - point.min) / (point.max - point.min)) * 100;&lt;br /&gt;
                var color = Eye.Color(percent);&lt;br /&gt;
                var opacity = percent &amp;gt; 70 ? 1 - (percent - 70) / 30 : 1;&lt;br /&gt;
&lt;br /&gt;
                Eye.Write(point.x, point.y, color, opacity);&lt;br /&gt;
                Eye.Remove(radius, point.max, i);&lt;br /&gt;
            },&lt;br /&gt;
&lt;br /&gt;
            Move: function (i) {&lt;br /&gt;
                var point = Eye.data[i];&lt;br /&gt;
                point.x += point.X;&lt;br /&gt;
                point.y += point.Y;&lt;br /&gt;
                Eye.Style(point, i);&lt;br /&gt;
            },&lt;br /&gt;
&lt;br /&gt;
            Update: function () {&lt;br /&gt;
                Eye.Fill(0.02);&lt;br /&gt;
                for (var i = 0; i &amp;lt; Eye.point; i++) {&lt;br /&gt;
                    Eye.Point();&lt;br /&gt;
                }&lt;br /&gt;
                for (var j = 0; j &amp;lt; Eye.data.length; j++) {&lt;br /&gt;
                    Eye.Move(j);&lt;br /&gt;
                }&lt;br /&gt;
            },&lt;br /&gt;
&lt;br /&gt;
            Draw: function () {&lt;br /&gt;
                Eye.Update();&lt;br /&gt;
                requestAnimationFrame(Eye.Draw, Eye.canvas);&lt;br /&gt;
            },&lt;br /&gt;
&lt;br /&gt;
            Noise: function (value) {&lt;br /&gt;
                return Math.random() * value - value / 2;&lt;br /&gt;
            },&lt;br /&gt;
&lt;br /&gt;
            Radius: function (start, end) {&lt;br /&gt;
                return {&lt;br /&gt;
                    max: Eye.Pifagor(end.x, end.y),&lt;br /&gt;
                    min: Eye.Pifagor(start.x, start.y),&lt;br /&gt;
                };&lt;br /&gt;
            },&lt;br /&gt;
&lt;br /&gt;
            Step: function (start, end) {&lt;br /&gt;
                return {&lt;br /&gt;
                    x: (end.x - start.x) / Eye.speed,&lt;br /&gt;
                    y: (end.y - start.y) / Eye.speed,&lt;br /&gt;
                };&lt;br /&gt;
            },&lt;br /&gt;
&lt;br /&gt;
            Position: function (type, angel, noise) {&lt;br /&gt;
                return {&lt;br /&gt;
                    x: Eye[type].x * Math.cos(angel) + Eye.Noise(noise),&lt;br /&gt;
                    y: Eye[type].y * Math.sin(angel) + Eye.Noise(noise),&lt;br /&gt;
                };&lt;br /&gt;
            },&lt;br /&gt;
&lt;br /&gt;
            Point: function () {&lt;br /&gt;
                var angel = Math.random() * 2 * Math.PI;&lt;br /&gt;
                var start = Eye.Position(&amp;quot;pupil&amp;quot;, angel, 5);&lt;br /&gt;
                var end = Eye.Position(&amp;quot;eye&amp;quot;, angel, 25);&lt;br /&gt;
                var radius = Eye.Radius(start, end);&lt;br /&gt;
                var step = Eye.Step(start, end);&lt;br /&gt;
&lt;br /&gt;
                Eye.data.push({&lt;br /&gt;
                    x: start.x,&lt;br /&gt;
                    y: start.y,&lt;br /&gt;
                    X: step.x,&lt;br /&gt;
                    Y: step.y,&lt;br /&gt;
                    min: radius.min,&lt;br /&gt;
                    max: radius.max,&lt;br /&gt;
                });&lt;br /&gt;
            },&lt;br /&gt;
&lt;br /&gt;
            Fill: function (a) {&lt;br /&gt;
                Eye.ctx.fillStyle = &amp;quot;rgba(0,0,0,&amp;quot; + a + &amp;quot;)&amp;quot;;&lt;br /&gt;
                Eye.ctx.fillRect(0, 0, Eye.size, Eye.size);&lt;br /&gt;
            },&lt;br /&gt;
&lt;br /&gt;
            Init: function () {&lt;br /&gt;
                Eye.Fill(1);&lt;br /&gt;
                for (var i = 0; i &amp;lt; Eye.point; i++) {&lt;br /&gt;
                    Eye.Point();&lt;br /&gt;
                }&lt;br /&gt;
                Eye.Draw();&lt;br /&gt;
            },&lt;br /&gt;
&lt;br /&gt;
            Watch: function () {&lt;br /&gt;
                Eye.canvas = document.getElementById(&amp;quot;tg-sauroneye&amp;quot;);&lt;br /&gt;
                Eye.canvas.width = Eye.size;&lt;br /&gt;
                Eye.canvas.height = Eye.size;&lt;br /&gt;
                Eye.ctx = Eye.canvas.getContext(&amp;quot;2d&amp;quot;);&lt;br /&gt;
                Eye.Init();&lt;br /&gt;
            },&lt;br /&gt;
        };&lt;br /&gt;
&lt;br /&gt;
        var canvas = document.createElement(&amp;quot;canvas&amp;quot;);&lt;br /&gt;
        canvas.id = &amp;quot;tg-sauroneye&amp;quot;;&lt;br /&gt;
        container.append(canvas);&lt;br /&gt;
        Eye.Watch();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function init() {&lt;br /&gt;
        // Wait for page content to be fully loaded&lt;br /&gt;
        mw.hook(&amp;quot;wikipage.content&amp;quot;).add(function () {&lt;br /&gt;
            if (isMainPage) {&lt;br /&gt;
                onMainPage();&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            var eyeContainer = document.getElementById(&lt;br /&gt;
                &amp;quot;tg-sauroneye-container&amp;quot;&lt;br /&gt;
            );&lt;br /&gt;
            if (eyeContainer) {&lt;br /&gt;
                initSauronEye(eyeContainer);&lt;br /&gt;
            }&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    init();&lt;br /&gt;
})();&lt;br /&gt;
/* Any JavaScript here will be loaded for all users on every page load. */&lt;br /&gt;
(function () {&lt;br /&gt;
    var pageName = mw.config.get(&amp;quot;wgPageName&amp;quot;);&lt;br /&gt;
    var skin = mw.config.get(&amp;quot;skin&amp;quot;);&lt;br /&gt;
    var isMainPage = mw.config.get(&amp;quot;wgIsMainPage&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    function onMainPage() {&lt;br /&gt;
        var searchTrigger = document.getElementById(&lt;br /&gt;
            &amp;quot;tg-mainpage-search-trigger&amp;quot;&lt;br /&gt;
        );&lt;br /&gt;
        var searchInput = document.getElementById(&amp;quot;searchInput&amp;quot;);&lt;br /&gt;
        var searchToggle;&lt;br /&gt;
&lt;br /&gt;
        function onSearchTriggerClick() {&lt;br /&gt;
            if (skin === &amp;quot;citizen&amp;quot;) {&lt;br /&gt;
                // HACK: Force sticky header to be visible&lt;br /&gt;
                var isSearchHidden =&lt;br /&gt;
                    document.body.classList.contains(&amp;quot;citizen-scroll--down&amp;quot;) &amp;amp;&amp;amp;&lt;br /&gt;
                    window.matchMedia(&amp;quot;(max-width: 1119px)&amp;quot;);&lt;br /&gt;
                if (isSearchHidden) {&lt;br /&gt;
                    document.body.classList.remove(&amp;quot;citizen-scroll--down&amp;quot;);&lt;br /&gt;
                    document.body.classList.add(&amp;quot;citizen-scroll--up&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                // Citizen does not have a visible search bar, you need to expand the search card first&lt;br /&gt;
                // And Citizen will focus the input automatically&lt;br /&gt;
                searchToggle.open = true;&lt;br /&gt;
            } else {&lt;br /&gt;
                // This should work for all skins that has visible search bar&lt;br /&gt;
                searchInput.focus();&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        // Attach click event listener to search button on the main page&lt;br /&gt;
        if (searchTrigger &amp;amp;&amp;amp; searchInput) {&lt;br /&gt;
            if (skin === &amp;quot;citizen&amp;quot;) {&lt;br /&gt;
                searchToggle = document.getElementById(&amp;quot;citizen-search-details&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            searchTrigger.addEventListener(&amp;quot;click&amp;quot;, onSearchTriggerClick);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function initSauronEye(container) {&lt;br /&gt;
        var Eye = {&lt;br /&gt;
            size: 250,&lt;br /&gt;
            point: 15,&lt;br /&gt;
            speed: 100,&lt;br /&gt;
            pupil: { x: 6, y: 36 },&lt;br /&gt;
            eye: { x: 100, y: 65 },&lt;br /&gt;
            data: [],&lt;br /&gt;
&lt;br /&gt;
            Add: function (val) {&lt;br /&gt;
                return val + Eye.size / 2;&lt;br /&gt;
            },&lt;br /&gt;
&lt;br /&gt;
            Interval: function (color, distance, value) {&lt;br /&gt;
                var s = Math.abs(&lt;br /&gt;
                    (color.a - color.b) / (distance.b - distance.a)&lt;br /&gt;
                );&lt;br /&gt;
                var v = value - distance.a;&lt;br /&gt;
                var c = color.a &amp;gt; color.b ? color.a - v * s : color.a + v * s;&lt;br /&gt;
                return Math.round(c);&lt;br /&gt;
            },&lt;br /&gt;
&lt;br /&gt;
            Color: function (percent) {&lt;br /&gt;
                if (percent &amp;lt; 5)&lt;br /&gt;
                    return Eye.Interval(&lt;br /&gt;
                        { a: 255, b: 180 },&lt;br /&gt;
                        { a: 0, b: 2 },&lt;br /&gt;
                        percent&lt;br /&gt;
                    );&lt;br /&gt;
                else if (percent &amp;lt; 10)&lt;br /&gt;
                    return Eye.Interval(&lt;br /&gt;
                        { a: 180, b: 100 },&lt;br /&gt;
                        { a: 2, b: 5 },&lt;br /&gt;
                        percent&lt;br /&gt;
                    );&lt;br /&gt;
                else if (percent &amp;lt; 40)&lt;br /&gt;
                    return Eye.Interval(&lt;br /&gt;
                        { a: 100, b: 0 },&lt;br /&gt;
                        { a: 5, b: 30 },&lt;br /&gt;
                        percent&lt;br /&gt;
                    );&lt;br /&gt;
                else if (percent &amp;lt; 70)&lt;br /&gt;
                    return Eye.Interval(&lt;br /&gt;
                        { a: 0, b: 100 },&lt;br /&gt;
                        { a: 30, b: 70 },&lt;br /&gt;
                        percent&lt;br /&gt;
                    );&lt;br /&gt;
                else if (percent &amp;lt; 75)&lt;br /&gt;
                    return Eye.Interval(&lt;br /&gt;
                        { a: 100, b: 180 },&lt;br /&gt;
                        { a: 70, b: 80 },&lt;br /&gt;
                        percent&lt;br /&gt;
                    );&lt;br /&gt;
                else&lt;br /&gt;
                    return Eye.Interval(&lt;br /&gt;
                        { a: 180, b: 255 },&lt;br /&gt;
                        { a: 80, b: 100 },&lt;br /&gt;
                        percent&lt;br /&gt;
                    );&lt;br /&gt;
            },&lt;br /&gt;
&lt;br /&gt;
            Pifagor: function (x, y) {&lt;br /&gt;
                return Math.sqrt(x * x + y * y);&lt;br /&gt;
            },&lt;br /&gt;
&lt;br /&gt;
            Remove: function (radius, max, i) {&lt;br /&gt;
                if (radius &amp;gt; max) {&lt;br /&gt;
                    Eye.data.splice(i, 1);&lt;br /&gt;
                }&lt;br /&gt;
            },&lt;br /&gt;
&lt;br /&gt;
            Write: function (x, y, color, opacity) {&lt;br /&gt;
                Eye.ctx.fillStyle = &amp;quot;rgba(255,&amp;quot; + color + &amp;quot;,0,&amp;quot; + opacity + &amp;quot;)&amp;quot;;&lt;br /&gt;
                Eye.ctx.fillRect(Eye.Add(x), Eye.Add(y), 1, 1);&lt;br /&gt;
            },&lt;br /&gt;
&lt;br /&gt;
            Style: function (point, i) {&lt;br /&gt;
                var radius = Eye.Pifagor(point.x, point.y);&lt;br /&gt;
                var percent =&lt;br /&gt;
                    ((radius - point.min) / (point.max - point.min)) * 100;&lt;br /&gt;
                var color = Eye.Color(percent);&lt;br /&gt;
                var opacity = percent &amp;gt; 70 ? 1 - (percent - 70) / 30 : 1;&lt;br /&gt;
&lt;br /&gt;
                Eye.Write(point.x, point.y, color, opacity);&lt;br /&gt;
                Eye.Remove(radius, point.max, i);&lt;br /&gt;
            },&lt;br /&gt;
&lt;br /&gt;
            Move: function (i) {&lt;br /&gt;
                var point = Eye.data[i];&lt;br /&gt;
                point.x += point.X;&lt;br /&gt;
                point.y += point.Y;&lt;br /&gt;
                Eye.Style(point, i);&lt;br /&gt;
            },&lt;br /&gt;
&lt;br /&gt;
            Update: function () {&lt;br /&gt;
                Eye.Fill(0.02);&lt;br /&gt;
                for (var i = 0; i &amp;lt; Eye.point; i++) {&lt;br /&gt;
                    Eye.Point();&lt;br /&gt;
                }&lt;br /&gt;
                for (var j = 0; j &amp;lt; Eye.data.length; j++) {&lt;br /&gt;
                    Eye.Move(j);&lt;br /&gt;
                }&lt;br /&gt;
            },&lt;br /&gt;
&lt;br /&gt;
            Draw: function () {&lt;br /&gt;
                Eye.Update();&lt;br /&gt;
                requestAnimationFrame(Eye.Draw, Eye.canvas);&lt;br /&gt;
            },&lt;br /&gt;
&lt;br /&gt;
            Noise: function (value) {&lt;br /&gt;
                return Math.random() * value - value / 2;&lt;br /&gt;
            },&lt;br /&gt;
&lt;br /&gt;
            Radius: function (start, end) {&lt;br /&gt;
                return {&lt;br /&gt;
                    max: Eye.Pifagor(end.x, end.y),&lt;br /&gt;
                    min: Eye.Pifagor(start.x, start.y),&lt;br /&gt;
                };&lt;br /&gt;
            },&lt;br /&gt;
&lt;br /&gt;
            Step: function (start, end) {&lt;br /&gt;
                return {&lt;br /&gt;
                    x: (end.x - start.x) / Eye.speed,&lt;br /&gt;
                    y: (end.y - start.y) / Eye.speed,&lt;br /&gt;
                };&lt;br /&gt;
            },&lt;br /&gt;
&lt;br /&gt;
            Position: function (type, angel, noise) {&lt;br /&gt;
                return {&lt;br /&gt;
                    x: Eye[type].x * Math.cos(angel) + Eye.Noise(noise),&lt;br /&gt;
                    y: Eye[type].y * Math.sin(angel) + Eye.Noise(noise),&lt;br /&gt;
                };&lt;br /&gt;
            },&lt;br /&gt;
&lt;br /&gt;
            Point: function () {&lt;br /&gt;
                var angel = Math.random() * 2 * Math.PI;&lt;br /&gt;
                var start = Eye.Position(&amp;quot;pupil&amp;quot;, angel, 5);&lt;br /&gt;
                var end = Eye.Position(&amp;quot;eye&amp;quot;, angel, 25);&lt;br /&gt;
                var radius = Eye.Radius(start, end);&lt;br /&gt;
                var step = Eye.Step(start, end);&lt;br /&gt;
&lt;br /&gt;
                Eye.data.push({&lt;br /&gt;
                    x: start.x,&lt;br /&gt;
                    y: start.y,&lt;br /&gt;
                    X: step.x,&lt;br /&gt;
                    Y: step.y,&lt;br /&gt;
                    min: radius.min,&lt;br /&gt;
                    max: radius.max,&lt;br /&gt;
                });&lt;br /&gt;
            },&lt;br /&gt;
&lt;br /&gt;
            Fill: function (a) {&lt;br /&gt;
                Eye.ctx.fillStyle = &amp;quot;rgba(0,0,0,&amp;quot; + a + &amp;quot;)&amp;quot;;&lt;br /&gt;
                Eye.ctx.fillRect(0, 0, Eye.size, Eye.size);&lt;br /&gt;
            },&lt;br /&gt;
&lt;br /&gt;
            Init: function () {&lt;br /&gt;
                Eye.Fill(1);&lt;br /&gt;
                for (var i = 0; i &amp;lt; Eye.point; i++) {&lt;br /&gt;
                    Eye.Point();&lt;br /&gt;
                }&lt;br /&gt;
                Eye.Draw();&lt;br /&gt;
            },&lt;br /&gt;
&lt;br /&gt;
            Watch: function () {&lt;br /&gt;
                Eye.canvas = document.getElementById(&amp;quot;tg-sauroneye&amp;quot;);&lt;br /&gt;
                Eye.canvas.width = Eye.size;&lt;br /&gt;
                Eye.canvas.height = Eye.size;&lt;br /&gt;
                Eye.ctx = Eye.canvas.getContext(&amp;quot;2d&amp;quot;);&lt;br /&gt;
                Eye.Init();&lt;br /&gt;
            },&lt;br /&gt;
        };&lt;br /&gt;
&lt;br /&gt;
        var canvas = document.createElement(&amp;quot;canvas&amp;quot;);&lt;br /&gt;
        canvas.id = &amp;quot;tg-sauroneye&amp;quot;;&lt;br /&gt;
        container.append(canvas);&lt;br /&gt;
        Eye.Watch();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function init() {&lt;br /&gt;
        // Wait for page content to be fully loaded&lt;br /&gt;
        mw.hook(&amp;quot;wikipage.content&amp;quot;).add(function () {&lt;br /&gt;
            if (isMainPage) {&lt;br /&gt;
                onMainPage();&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            var eyeContainer = document.getElementById(&lt;br /&gt;
                &amp;quot;tg-sauroneye-container&amp;quot;&lt;br /&gt;
            );&lt;br /&gt;
            if (eyeContainer) {&lt;br /&gt;
                initSauronEye(eyeContainer);&lt;br /&gt;
            }&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    init();&lt;br /&gt;
})();&lt;/div&gt;</summary>
		<author><name>Maegnus</name></author>
	</entry>
	<entry>
		<id>https://classic.pgnrp.com/index.php?title=MediaWiki:Common.css&amp;diff=115</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://classic.pgnrp.com/index.php?title=MediaWiki:Common.css&amp;diff=115"/>
		<updated>2025-05-21T06:44:26Z</updated>

		<summary type="html">&lt;p&gt;Maegnus: Created page with &amp;quot;/* &amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt; */  /* Tolkien Gateway theme */  /* Import fonts from Google Fonts: EB Garamond, Lora */ @import url(&amp;#039;https://fonts.googleapis.com/css2?family=EB+Garamond:ital,wght@0,400..800;1,400..800&amp;amp;family=Lora:ital,wght@0,400..700;1,400..700&amp;amp;display=swap&amp;#039;);  /*  * Use customized system fonts as fallback for font stack  * Needed to avoid layout shift  */ @font-face { 	font-family: &amp;#039;EB Garamond-fallback&amp;#039;; 	size-adjust: 94.29999999999998%; 	ascent-override: 101%; 	des...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* &amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt; */&lt;br /&gt;
&lt;br /&gt;
/* Tolkien Gateway theme */&lt;br /&gt;
&lt;br /&gt;
/* Import fonts from Google Fonts: EB Garamond, Lora */&lt;br /&gt;
@import url(&#039;https://fonts.googleapis.com/css2?family=EB+Garamond:ital,wght@0,400..800;1,400..800&amp;amp;family=Lora:ital,wght@0,400..700;1,400..700&amp;amp;display=swap&#039;);&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
 * Use customized system fonts as fallback for font stack&lt;br /&gt;
 * Needed to avoid layout shift&lt;br /&gt;
 */&lt;br /&gt;
@font-face {&lt;br /&gt;
	font-family: &#039;EB Garamond-fallback&#039;;&lt;br /&gt;
	size-adjust: 94.29999999999998%;&lt;br /&gt;
	ascent-override: 101%;&lt;br /&gt;
	descent-override: 36.40000000000171%;&lt;br /&gt;
	src: local(&#039;Times New Roman&#039;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@font-face {&lt;br /&gt;
	font-family: &#039;Lora-fallback&#039;;&lt;br /&gt;
	size-adjust: 105.20000000000005%;&lt;br /&gt;
	ascent-override: 92%;&lt;br /&gt;
	descent-override: 32.60000000000166%;&lt;br /&gt;
	src: local(&#039;Georgia&#039;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* CSS variables */&lt;br /&gt;
:root {&lt;br /&gt;
	/* Border */&lt;br /&gt;
	/* Border color */&lt;br /&gt;
	--tg-border-color-base: rgba(0, 0, 0, 0.08);&lt;br /&gt;
	--tg-border-color-subtle: rgba(0, 0, 0, 0.05);&lt;br /&gt;
	--tg-border-color-interactive: rgba(0, 0, 0, 0.11);&lt;br /&gt;
	/* Border radius */&lt;br /&gt;
	--tg-border-radius-sharp: 0;&lt;br /&gt;
	--tg-border-radius-small: 4px;&lt;br /&gt;
	--tg-border-radius-medium: 8px;&lt;br /&gt;
	--tg-border-radius-large: 12px;&lt;br /&gt;
	--tg-border-radius-pill: 9999px;&lt;br /&gt;
	--tg-border-radius-circle: 50%;&lt;br /&gt;
	/* Shorthand */&lt;br /&gt;
	--tg-border-base: 1px solid var(--tg-border-color-base);&lt;br /&gt;
&lt;br /&gt;
	/* Color */&lt;br /&gt;
	/* Text color */&lt;br /&gt;
	--tg-color-emphasized: #1a1f15;&lt;br /&gt;
	--tg-color-base: #2a3025;&lt;br /&gt;
	--tg-color-subtle: #4e5a42;&lt;br /&gt;
	--tg-color-inverted-progressive: #fff;&lt;br /&gt;
	--tg-color-link: #36c;&lt;br /&gt;
	/* Background color */&lt;br /&gt;
	--tg-color-surface-0: #f9f4ee;&lt;br /&gt;
	--tg-color-surface-1: #fffbf6;&lt;br /&gt;
	--tg-color-surface-2: #f6ede0;&lt;br /&gt;
	--tg-color-surface-3: #f0e3cf;&lt;br /&gt;
	--tg-color-surface-4: #e6d9c5;&lt;br /&gt;
	--tg-color-surface-5: #e3d2b8;&lt;br /&gt;
	/* Progressive color */&lt;br /&gt;
	--tg-color-progressive: #507b07;&lt;br /&gt;
	--tg-color-progressive--hover: #588418;&lt;br /&gt;
	--tg-color-progressive--active: #4a710a;&lt;br /&gt;
&lt;br /&gt;
	/* Font */&lt;br /&gt;
	/* Font family */&lt;br /&gt;
	--tg-font-family-heading: &#039;EB Garamond&#039;, &#039;EB Garamond-fallback&#039;, serif;&lt;br /&gt;
	--tg-font-family-body: &#039;Lora&#039;, &#039;Lora-fallback&#039;, serif;&lt;br /&gt;
	/* Font size */&lt;br /&gt;
	--tg-font-size-x-small: 0.8125rem;&lt;br /&gt;
	--tg-font-size-small: 0.875rem;&lt;br /&gt;
	--tg-font-size-medium: 1rem;&lt;br /&gt;
	--tg-font-size-large: 1.125rem;&lt;br /&gt;
	--tg-font-size-x-large: 1.25rem;&lt;br /&gt;
	--tg-font-size-xx-large: 1.5rem;&lt;br /&gt;
	--tg-font-size-xxx-large: 2rem;&lt;br /&gt;
	/* Font weight */&lt;br /&gt;
	--tg-font-weight-regular: 400;&lt;br /&gt;
	--tg-font-weight-medium: 500;&lt;br /&gt;
	--tg-font-weight-semibold: 600;&lt;br /&gt;
	/* Line height */&lt;br /&gt;
	--tg-line-height-xxx-small: 1.25;&lt;br /&gt;
	--tg-line-height-xx-small: 1.375;&lt;br /&gt;
	--tg-line-height: 1.6;&lt;br /&gt;
&lt;br /&gt;
	/* Opacity */&lt;br /&gt;
	--tg-opacity-pattern: 0.08;&lt;br /&gt;
&lt;br /&gt;
	/* Codex token backport */&lt;br /&gt;
	/* Quiet color */&lt;br /&gt;
	--background-color-button-quiet--hover: rgba(0, 0, 0, 0.07);&lt;br /&gt;
	--background-color-button-quiet--active: rgba(0, 0, 0, 0.09);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
html {&lt;br /&gt;
	/* Force serif fonts to format number on the same line */&lt;br /&gt;
	font-variant-numeric: lining-nums;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Blockquote */&lt;br /&gt;
blockquote {&lt;br /&gt;
	padding-left: 1rem;&lt;br /&gt;
	border-left: 2px solid var(--tg-border-color-base);&lt;br /&gt;
	font-style: italic;&lt;br /&gt;
	/* Fallback for non-Chromium browsers */&lt;br /&gt;
	text-wrap: balance;&lt;br /&gt;
	/* Only works on Chromium browsers */&lt;br /&gt;
	text-wrap: pretty;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
blockquote cite {&lt;br /&gt;
	color: var(--tg-color-subtle);&lt;br /&gt;
	font-size: var(--tg-font-size-x-small);&lt;br /&gt;
	font-style: normal;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
blockquote cite::before {&lt;br /&gt;
	content: &#039;―&#039;;&lt;br /&gt;
	margin-right: 0.5em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
blockquote &amp;gt; p:first-child::before {&lt;br /&gt;
	content: open-quote;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* &amp;lt;cite&amp;gt; is wrapped in the last &amp;lt;p&amp;gt; */&lt;br /&gt;
blockquote:has(cite) &amp;gt; p:nth-last-child(2)::after,&lt;br /&gt;
blockquote:not(:has(cite)) &amp;gt; p:last-child::after {&lt;br /&gt;
	content: close-quote;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* LINKS */&lt;br /&gt;
a {&lt;br /&gt;
	/*color: var(--tg-color-link);*/&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.underlinelink a {&lt;br /&gt;
	text-decoration: underline !important;&lt;br /&gt;
}&lt;br /&gt;
.nounderlinelink a {&lt;br /&gt;
	text-decoration: none !important;&lt;br /&gt;
}&lt;br /&gt;
.nounderlinelink a:hover {&lt;br /&gt;
	text-decoration: underline !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* SEQUENCE TEMPLATE */&lt;br /&gt;
&lt;br /&gt;
td.seqwhite a {&lt;br /&gt;
	color: #ffffff !important;&lt;br /&gt;
}&lt;br /&gt;
td.seqwhite div span a {&lt;br /&gt;
	color: #ffffff !important;&lt;br /&gt;
}&lt;br /&gt;
td.seqcream a {&lt;br /&gt;
	color: #fffdd0 !important;&lt;br /&gt;
}&lt;br /&gt;
td.seqcream div span a {&lt;br /&gt;
	color: #fffdd0 !important;&lt;br /&gt;
}&lt;br /&gt;
td.seqgrey a {&lt;br /&gt;
	color: #2a2a2a !important;&lt;br /&gt;
}&lt;br /&gt;
td.seqgrey div span a {&lt;br /&gt;
	color: #2a2a2a !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* REFERENCES TEMPLATE */&lt;br /&gt;
ol.references {&lt;br /&gt;
	font-size: var(--tg-font-size-x-small);&lt;br /&gt;
	margin-top: 0px;&lt;br /&gt;
	padding-top: 0px;&lt;br /&gt;
}&lt;br /&gt;
.references-small {&lt;br /&gt;
	font-size: 0.75rem;&lt;br /&gt;
}&lt;br /&gt;
ol.references &amp;gt; li:target {&lt;br /&gt;
	background-color: #ddeeff;&lt;br /&gt;
}&lt;br /&gt;
sup.reference:target {&lt;br /&gt;
	background-color: #ddeeff;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Infobox customizations so they scale for desktop and mobile appropriately */&lt;br /&gt;
@media only screen and (max-width: 600px) {&lt;br /&gt;
	.tginfobox {&lt;br /&gt;
		min-width: 100%;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media only screen and (min-width: 601px) {&lt;br /&gt;
	.tginfobox {&lt;br /&gt;
		width: 275px;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (max-width: 600px) {&lt;br /&gt;
	.spotify,&lt;br /&gt;
	.template-month {&lt;br /&gt;
		float: center;&lt;br /&gt;
		margin-left: 10px;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pi-type-film .pi-secondary-background {&lt;br /&gt;
	background: rgb(238, 249, 238);&lt;br /&gt;
	background: linear-gradient(&lt;br /&gt;
		90deg,&lt;br /&gt;
		rgba(238, 249, 238, 1) 0%,&lt;br /&gt;
		rgba(171, 194, 171, 1) 35%,&lt;br /&gt;
		rgba(114, 139, 114, 1) 100%&lt;br /&gt;
	);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.pi-data {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.spotify {&lt;br /&gt;
	float: right;&lt;br /&gt;
	width: 300px;&lt;br /&gt;
	height: 100px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (max-width: 850px) {&lt;br /&gt;
	#p-logo-text {&lt;br /&gt;
		/* Tighten the logo a bit more to the left on mobile devices to prevent overlapping */&lt;br /&gt;
		left: 3em;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Print styles */&lt;br /&gt;
@media print {&lt;br /&gt;
	:root {&lt;br /&gt;
		/* Border */&lt;br /&gt;
		/* Border color */&lt;br /&gt;
		--tg-border-color-base: #aaa !important;&lt;br /&gt;
		--tg-border-color-subtle: #ddd !important;&lt;br /&gt;
		--tg-border-color-interactive: #000 !important;&lt;br /&gt;
		/* Color */&lt;br /&gt;
		/* Text color */&lt;br /&gt;
		--tg-color-emphasized: #000 !important;&lt;br /&gt;
		--tg-color-base: #222 !important;&lt;br /&gt;
		--tg-color-subtle: #444 !important;&lt;br /&gt;
		/* Background color */&lt;br /&gt;
		--tg-color-surface-0: #fff !important;&lt;br /&gt;
		--tg-color-surface-1: #fff !important;&lt;br /&gt;
		--tg-color-surface-2: #fff !important;&lt;br /&gt;
		--tg-color-surface-3: #fff !important;&lt;br /&gt;
		--tg-color-surface-4: #fff !important;&lt;br /&gt;
		--tg-color-surface-5: #fff !important;&lt;br /&gt;
		/* Progressive color */&lt;br /&gt;
		--tg-color-progressive: #000 !important;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Limit FloatingUI content width */&lt;br /&gt;
.ext-floatingui-floating-content {&lt;br /&gt;
	max-width: 50ch;&lt;br /&gt;
	padding: 12px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* &amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt; */&lt;/div&gt;</summary>
		<author><name>Maegnus</name></author>
	</entry>
	<entry>
		<id>https://classic.pgnrp.com/index.php?title=Template:Main_page/browse&amp;diff=114</id>
		<title>Template:Main page/browse</title>
		<link rel="alternate" type="text/html" href="https://classic.pgnrp.com/index.php?title=Template:Main_page/browse&amp;diff=114"/>
		<updated>2025-05-21T06:28:19Z</updated>

		<summary type="html">&lt;p&gt;Maegnus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
Template:Main page/Browse&lt;br /&gt;
--------------------&lt;br /&gt;
Browse component of the main page&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;{{Card&amp;lt;!--&lt;br /&gt;
--&amp;gt;|class = tg-mainpage-browse&amp;lt;!--&lt;br /&gt;
--&amp;gt;|content = &amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
	Header&lt;br /&gt;
	------&lt;br /&gt;
	--&amp;gt;&amp;lt;div class=&amp;quot;tg-mainpage-browse-header&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
		--&amp;gt;&amp;lt;div class=&amp;quot;tg-mainpage-browse-header-content&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
			--&amp;gt;&amp;lt;div class=&amp;quot;tg-card-title&amp;quot;&amp;gt;Discover PGN Classic&amp;lt;/div&amp;gt;&amp;lt;!--&lt;br /&gt;
			--&amp;gt;&amp;lt;div class=&amp;quot;tg-card-caption&amp;quot;&amp;gt;{{NUMBEROFARTICLES}} articles written by {{NUMBEROFUSERS}} contributors.&amp;lt;/div&amp;gt;&amp;lt;!--&lt;br /&gt;
		--&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=Random article|type=secondary|page=Special:Random}}&amp;lt;!--&lt;br /&gt;
	--&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
	A to Z&lt;br /&gt;
	------&lt;br /&gt;
	--&amp;gt;&amp;lt;div class=&amp;quot;tg-mainpage-browse-atoz citizen-overflow&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
		--&amp;gt;&amp;lt;div class=&amp;quot;tg-mainpage-browse-atoz-label&amp;quot;&amp;gt;A to Z&amp;lt;/div&amp;gt;&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=A|url=https://classic.pgnrp.com/index.php/Special:PrefixIndex?prefix=A&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=B|url=https://classic.pgnrp.com/index.php/Special:PrefixIndex?prefix=B&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=C|url=https://classic.pgnrp.com/index.php/Special:PrefixIndex?prefix=C&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=D|url=https://classic.pgnrp.com/index.php/Special:PrefixIndex?prefix=D&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=E|url=https://classic.pgnrp.com/index.php/Special:PrefixIndex?prefix=E&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=F|url=https://classic.pgnrp.com/index.php/Special:PrefixIndex?prefix=F&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=G|url=https://classic.pgnrp.com/index.php/Special:PrefixIndex?prefix=G&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=H|url=https://classic.pgnrp.com/index.php/Special:PrefixIndex?prefix=H&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=I|url=https://classic.pgnrp.com/index.php/Special:PrefixIndex?prefix=I&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=J|url=https://classic.pgnrp.com/index.php/Special:PrefixIndex?prefix=J&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=K|url=https://classic.pgnrp.com/index.php/Special:PrefixIndex?prefix=K&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=L|url=https://classic.pgnrp.com/index.php/Special:PrefixIndex?prefix=L&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=M|url=https://classic.pgnrp.com/index.php/Special:PrefixIndex?prefix=M&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=N|url=https://classic.pgnrp.com/index.php/Special:PrefixIndex?prefix=N&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=O|url=https://classic.pgnrp.com/index.php/Special:PrefixIndex?prefix=O&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=P|url=https://classic.pgnrp.com/index.php/Special:PrefixIndex?prefix=P&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=Q|url=https://classic.pgnrp.com/index.php/Special:PrefixIndex?prefix=Q&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=R|url=https://classic.pgnrp.com/index.php/Special:PrefixIndex?prefix=R&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=S|url=https://classic.pgnrp.com/index.php/Special:PrefixIndex?prefix=S&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=T|url=https://classic.pgnrp.com/index.php/Special:PrefixIndex?prefix=T&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=U|url=https://classic.pgnrp.com/index.php/Special:PrefixIndex?prefix=U&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=V|url=https://classic.pgnrp.com/index.php/Special:PrefixIndex?prefix=V&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=W|url=https://classic.pgnrp.com/index.php/Special:PrefixIndex?prefix=W&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=X|url=https://classic.pgnrp.com/index.php/Special:PrefixIndex?prefix=X&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=Y|url=https://classic.pgnrp.com/index.php/Special:PrefixIndex?prefix=Y&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=Z|url=https://classic.pgnrp.com/index.php/Special:PrefixIndex?prefix=Z&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
	--&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
	Index&lt;br /&gt;
	-----&lt;br /&gt;
	--&amp;gt;{{Flexbox&amp;lt;!--&lt;br /&gt;
	--&amp;gt;|columns = 2&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
	--&amp;gt;|span1 = 2&amp;lt;!--&lt;br /&gt;
	--&amp;gt;|content1 = {{Section divider|[[:Category:Books by J.R.R. Tolkien|Books]]}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;&#039;&#039;[[The Hobbit]]&#039;&#039; ([[1937]]) · &#039;&#039;[[The Lord of the Rings]]&#039;&#039; ([[1954|1954]]-[[1955|5]]) · &#039;&#039;[[The Silmarillion]]&#039;&#039; ([[1977]]) · &#039;&#039;[[Unfinished Tales]]&#039;&#039; ([[1980]]) · &#039;&#039;[[The History of Middle-earth]]&#039;&#039; ([[1983]]-[[1996|96]]) · &#039;&#039;[[The Children of Húrin]]&#039;&#039; ([[2007]]) · &#039;&#039;[[Beren and Lúthien]]&#039;&#039; ([[2017]]) · &#039;&#039;[[The Fall of Gondolin]]&#039;&#039; ([[2018]]) · &#039;&#039;[[The Nature of Middle-earth]]&#039;&#039; ([[2021]]) · &#039;&#039;[[Tales from the Perilous Realm]]&#039;&#039; ([[1945]]-[[1998|98]]) · &#039;&#039;[[Letters from Father Christmas]]&#039;&#039; ([[1976]])&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
	--&amp;gt;|span2 = 2&amp;lt;!--&lt;br /&gt;
	--&amp;gt;|content2 = {{Section divider|[[:Category:Books by J.R.R. Tolkien|Adaptations]]}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;[[The Hobbit (1977 film)|&#039;&#039;The Hobbit&#039;&#039; (1977)]] · [[The Lord of the Rings (1978 film)|&#039;&#039;The Lord of the Rings&#039;&#039; (1978)]] · [[The Return of the King (1980 film)|&#039;&#039;The Return of the King&#039;&#039; (1980)]] · [[The Lord of the Rings: The Fellowship of the Ring|&#039;&#039;The Fellowship of the Ring&#039;&#039; (2001)]] · [[The Lord of the Rings: The Two Towers|&#039;&#039;The Two Towers&#039;&#039; (2002)]] · [[The Lord of the Rings: The Return of the King|&#039;&#039;The Return of the King&#039;&#039; (2003)]] · [[The Hobbit: An Unexpected Journey|&#039;&#039;An Unexpected Journey&#039;&#039; (2012)]] · [[The Hobbit: The Desolation of Smaug|&#039;&#039;The Desolation of Smaug&#039;&#039; (2013)]] · [[The Hobbit: The Battle of the Five Armies|&#039;&#039;The Battle of the Five Armies&#039;&#039; (2014)]] · [[The Lord of the Rings: The Rings of Power|&#039;&#039;The Rings of Power&#039;&#039; series (2022)]] · [[The Lord of the Rings: The War of the Rohirrim|&#039;&#039;The War of the Rohirrim&#039;&#039; (2024)]] · [[The Lord of the Rings: The Hunt for Gollum|The Hunt for Gollum (2026)]] · &#039;&#039;See also: [[:Category:Fan films|Fan films]]&#039;&#039;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
	--&amp;gt;|content3 = &amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Flexbox&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|rows = 3&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
		--&amp;gt;|content1 = {{Section divider|&#039;&#039;The Hobbit&#039;&#039; Characters}}&amp;lt;!--&lt;br /&gt;
			--&amp;gt;[[Bilbo Baggins|Bilbo]] · [[Gandalf]] · [[Thorin|Thorin]] · [[Balin]] · [[Dwalin]] · [[Fíli]] · [[Kíli]] · [[Dori]] · [[Nori]] · [[Ori]] · [[Óin]] · [[Glóin]] · [[Bifur]] · [[Bofur]] · [[Bombur]] · [[Elrond]] · [[Great Goblin]] · [[Gollum]] · [[Beorn]] · [[Great Eagle]] · [[Thranduil|Elven-king]] · [[Smaug]] · [[Bard]] (&#039;&#039;&#039;&#039;&#039;[[:Category:Characters in The Hobbit|more]]&#039;&#039;&#039;&#039;&#039;)&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
		--&amp;gt;|content2 = {{Section divider|&#039;&#039;The Lord of the Rings&#039;&#039; Characters}}&amp;lt;!--&lt;br /&gt;
			--&amp;gt;[[Frodo Baggins|Frodo]] · [[Samwise Gamgee|Sam]] · [[Meriadoc Brandybuck|Merry]] · [[Peregrin Took|Pippin]] · [[Gandalf]] · [[Aragorn]] · [[Boromir]] · [[Legolas]] · [[Gimli]] · [[Elrond]] · [[Galadriel]] · [[Théoden]] · [[Éomer]] · [[Éowyn]] · [[Saruman]] · [[Sauron]] · [[Witch-king]] · [[Denethor]] · [[Faramir]] · [[Gollum]] · [[Tom Bombadil]] (&#039;&#039;&#039;&#039;&#039;[[:Category:Characters in The Lord of the Rings|more]]&#039;&#039;&#039;&#039;&#039;)&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
		--&amp;gt;|content3 = {{Section divider|&#039;&#039;The Silmarillion&#039;&#039; Characters}}&amp;lt;!--&lt;br /&gt;
			--&amp;gt;[[Ar-Pharazôn]] · [[Aulë]] · [[Beren]] · [[Celebrimbor]] · [[Eärendil]] · [[Varda|Elbereth]] · [[Elendil]] · [[Elros]] · [[Elwing]] · [[Ilúvatar|Eru]] · [[Fëanor]] ([[Sons of Fëanor|and sons]]) · [[Finduilas]] · [[Fingolfin]] · [[Finrod]] · [[Finwë]] ·  [[Gil-galad]] · [[Glaurung]] · [[Huan]] · [[Huor]] · [[Húrin]] · [[Isildur]] · [[Lúthien]] · [[Maeglin]] · [[Mandos]] · [[Manwë]] · [[Morgoth]] · [[Morwen]] · [[Nienor]] · [[Orodreth]] · [[Oromë]] · [[Thingol]] · [[Tuor]] · [[Turgon]] · [[Túrin]] · [[Ulmo]] (&#039;&#039;&#039;&#039;&#039;[[:Category:Characters in The Silmarillion|more]]&#039;&#039;&#039;&#039;&#039;)&amp;lt;!--&lt;br /&gt;
		--&amp;gt;}}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
	--&amp;gt;|content4 = &amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Flexbox&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|rows = 4&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
		--&amp;gt;|content1 = {{Section divider|[[:Category:Races|Races]]}}&amp;lt;!--&lt;br /&gt;
			--&amp;gt;[[:Category:Animals|Animals]] · [[:Category:Balrogs|Balrogs]] · [[:Category:Dragons|Dragons]] · [[:Category:Dwarves|Dwarves]] · [[:Category:Eagles|Eagles]] · [[:Category:Elves|Elves]] · [[:Category:Ents|Ents]] · [[:Category:Giants|Giants]] · [[:Category:Half-elven|Half-elven]] · [[:Category:Hobbits|Hobbits]] · [[:Category:Maiar|Maiar]] · [[:Category:Men|Men]] · [[:Category:Orcs|Orcs]] · [[:Category:Other races|Other races]] · [[:Category:Spirits|Spirits]] · [[:Category:Trolls|Trolls]] · [[:Category:Undead|Undead]] · [[:Category:Valar|Valar]] · [[:Category:Werewolves|Werewolves]]&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
		--&amp;gt;|content2 = {{Section divider|[[:Category:locations|Locations]]}}&amp;lt;!--&lt;br /&gt;
			--&amp;gt;[[:Category:Bays|Bays]] · [[:Category:Bridges|Bridges]] · [[:Category:Buildings|Buildings]] · [[:Category:Caves|Caves]] · [[:Category:Doors and gates|Doors]] · [[:Category:Falls|Falls]] · [[:Category:Fields, plains and deserts|Fields]] · [[:Category:Fords|Fords]] · [[:Category:Forests|Forests]] · [[:Category:Fortresses|Fortresses]] · [[:Category:Graves and tombs|Graves]] · [[:Category:Harbours|Harbours]] · [[:Category:Hills|Hills]] · [[:Category:Islands|Islands]] · [[:Category:Lakes|Lakes]] · [[:Category:Mountains|Mountains]] ([[:Category:Mountain ranges|Ranges]]) · [[:Category:Passes|Passes]] · [[:Category:Realms|Realms]] ([[:Category:Dwarven realms|Dwarven]] · [[:Category:Elven realms|Elven]] · [[:Category:Hobbit realms|Hobbit]] · [[:Category:Mannish realms|Mannish]] · [[:Category:Evil realms|Evil]]) · [[:Category:Regions|Regions]] · [[:Category:Rivers|Rivers]] · [[:Category:Roads and streets|Roads]] · [[:Category:Seas and oceans|Seas]] · [[:Category:Streams|Streams]] · [[:Category:Swamps|Swamps]] · [[:Category:Cities, towns and villages|Towns]] · [[:Category:Valleys|Valleys]] · [[:Category:Walls|Walls]] (&#039;&#039;&#039;&#039;&#039;[[Index:Locations|list of all]]&#039;&#039;&#039;&#039;&#039;)&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
		--&amp;gt;|content3 = {{Section divider|[[:Category:Events|Events]]}}&amp;lt;!--&lt;br /&gt;
			--&amp;gt;[[:Category:Calendars|Calendars]] · [[:Category:Wars and conflicts|Conflicts]] · [[:Category:Dates|Dates]] · [[:Category:Festivals and feasts|Festivals]] · [[:Category:Sieges|Sieges]]&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
		--&amp;gt;|content4 = {{Section divider|Other}}&amp;lt;!--&lt;br /&gt;
			--&amp;gt;[[:Category:Armor|Armor]] · [[:Category:Books and documents within the legendarium|Books]] · [[:Category:Cosmology|Cosmology]] · [[:Category:Flowers|Flowers]] · [[:Category:Food|Food]] · [[:Category:Lays and tales within the legendarium|Lays and tales]] · [[:Category:Materials|Materials]] · [[:Category:Devices and symbols|Devices and symbols]] · [[:Category:Monuments|Monuments]] · [[:Category:Organizations|Organizations]] · [[:Category:Plants|Plants]] · [[:Category:Rings and jewels|Rings and jewels]] · [[:Category:Ships|Ships]] · [[:Category:Trees|Trees]] · [[:Category:Weapons|Weapons]]&amp;lt;!--&lt;br /&gt;
		--&amp;gt;}}&amp;lt;!--&lt;br /&gt;
	--&amp;gt;}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;}}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&amp;lt;templatestyles src=&amp;quot;Template:Main page/browse/styles.css&amp;quot;/&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;noinclude&amp;gt;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
Template documentation&lt;br /&gt;
----------------------&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;{{/doc}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maegnus</name></author>
	</entry>
	<entry>
		<id>https://classic.pgnrp.com/index.php?title=Template:Main_page/featured&amp;diff=113</id>
		<title>Template:Main page/featured</title>
		<link rel="alternate" type="text/html" href="https://classic.pgnrp.com/index.php?title=Template:Main_page/featured&amp;diff=113"/>
		<updated>2025-05-21T06:24:11Z</updated>

		<summary type="html">&lt;p&gt;Maegnus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
Template:Main page/featured&lt;br /&gt;
--------------------&lt;br /&gt;
Featured component of the main page&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&amp;lt;div class=&amp;quot;tg-mainpage-featured&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
	--&amp;gt;{{Section divider|Featured}}&amp;lt;!--&lt;br /&gt;
	--&amp;gt;{{Flexbox&amp;lt;!--&lt;br /&gt;
	--&amp;gt;|columns = 3&amp;lt;!--&lt;br /&gt;
	--&amp;gt;|content1 = &amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
		Featured article&lt;br /&gt;
		----------------&lt;br /&gt;
		--&amp;gt;{{Card&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|height = 20rem&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|class = tg-mainpage-featured-article&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|image = {{Main page/settings|featuredarticleimage}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|imageColorR = {{Main page/settings|featuredarticleimagecolorr}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|imageColorG = {{Main page/settings|featuredarticleimagecolorg}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|imageColorB = {{Main page/settings|featuredarticleimagecolorb}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|imagePosition = {{Main page/settings|featuredarticleimageposition}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|label = Command Team&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|labelpage = PGN Classic:Command Members&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|title = {{Main page/settings|featuredarticlename}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|caption = {{Main page/settings|featuredarticlecaption}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|link = {{Main page/settings|featuredarticlepage}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;}}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
	--&amp;gt;|content2 = &amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
		Featured artist&lt;br /&gt;
		---------------&lt;br /&gt;
		--&amp;gt;{{Card&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|height = 20rem&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|class = tg-mainpage-featured-artist&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|image = {{Main page/settings|featuredartistartworkimage}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|imageColorR = {{Main page/settings|featuredartistartworkimagecolorr}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|imageColorG = {{Main page/settings|featuredartistartworkimagecolorg}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|imageColorB = {{Main page/settings|featuredartistartworkimagecolorb}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|imagePosition = {{Main page/settings|featuredartistartworkimageposition}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|label = Members&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|labelpage = PGN Classic:Classes&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|content = &amp;lt;!--&lt;br /&gt;
			--&amp;gt;&amp;lt;div class=&amp;quot;tg-mainpage-featured-artist-portrait&amp;quot;&amp;gt;[[File:{{Main page/settings|featuredartistimage}}|48px|link=]]&amp;lt;/div&amp;gt;&amp;lt;!--&lt;br /&gt;
			--&amp;gt;&amp;lt;div class=&amp;quot;tg-mainpage-featured-artist-info&amp;quot;&amp;gt;&amp;lt;!---&lt;br /&gt;
				--&amp;gt;&amp;lt;div class=&amp;quot;tg-card-caption&amp;quot;&amp;gt;{{Main page/settings|featuredartistartworkname}}&amp;lt;/div&amp;gt;&amp;lt;!--&lt;br /&gt;
				--&amp;gt;&amp;lt;div class=&amp;quot;tg-card-title&amp;quot;&amp;gt;{{Main page/settings|featuredartistname}}&amp;lt;/div&amp;gt;&amp;lt;!--&lt;br /&gt;
			--&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|link = {{Main page/settings|featuredartistpage}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|afterImage = {{Main page/settings|featuredartistdescription}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;}}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
	--&amp;gt;|content3 = &amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
		Featured quote&lt;br /&gt;
		--------------&lt;br /&gt;
		--&amp;gt;{{Card&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|height = 20rem&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|class = tg-mainpage-featured-quote&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|label = Quote&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|labelpage = PGN Classic:Featured quotes&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|content = {{Blockquote&amp;lt;!--&lt;br /&gt;
			--&amp;gt;|{{Main page/settings|featuredquote}}&amp;lt;!--&lt;br /&gt;
			--&amp;gt;|{{Main page/settings|featuredquotecitation}}&amp;lt;!--&lt;br /&gt;
			--&amp;gt;}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;}}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
	--&amp;gt;}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;templatestyles src=&amp;quot;Template:Main page/featured/styles.css&amp;quot;/&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;noinclude&amp;gt;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
Template documentation&lt;br /&gt;
----------------------&lt;br /&gt;
[[Category:Featured]]&lt;br /&gt;
--&amp;gt;{{/doc}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maegnus</name></author>
	</entry>
	<entry>
		<id>https://classic.pgnrp.com/index.php?title=Template:Main_page/featured&amp;diff=112</id>
		<title>Template:Main page/featured</title>
		<link rel="alternate" type="text/html" href="https://classic.pgnrp.com/index.php?title=Template:Main_page/featured&amp;diff=112"/>
		<updated>2025-05-21T06:22:52Z</updated>

		<summary type="html">&lt;p&gt;Maegnus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
Template:Main page/featured&lt;br /&gt;
--------------------&lt;br /&gt;
Featured component of the main page&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&amp;lt;div class=&amp;quot;tg-mainpage-featured&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
	--&amp;gt;{{Section divider|Featured}}&amp;lt;!--&lt;br /&gt;
	--&amp;gt;{{Flexbox&amp;lt;!--&lt;br /&gt;
	--&amp;gt;|columns = 3&amp;lt;!--&lt;br /&gt;
	--&amp;gt;|content1 = &amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
		Featured article&lt;br /&gt;
		----------------&lt;br /&gt;
		--&amp;gt;{{Card&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|height = 20rem&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|class = tg-mainpage-featured-article&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|image = {{Main page/settings|featuredarticleimage}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|imageColorR = {{Main page/settings|featuredarticleimagecolorr}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|imageColorG = {{Main page/settings|featuredarticleimagecolorg}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|imageColorB = {{Main page/settings|featuredarticleimagecolorb}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|imagePosition = {{Main page/settings|featuredarticleimageposition}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|label = Command Team&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|labelpage = PGN Classic:Featured articles&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|title = {{Main page/settings|featuredarticlename}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|caption = {{Main page/settings|featuredarticlecaption}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|link = {{Main page/settings|featuredarticlepage}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;}}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
	--&amp;gt;|content2 = &amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
		Featured artist&lt;br /&gt;
		---------------&lt;br /&gt;
		--&amp;gt;{{Card&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|height = 20rem&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|class = tg-mainpage-featured-artist&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|image = {{Main page/settings|featuredartistartworkimage}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|imageColorR = {{Main page/settings|featuredartistartworkimagecolorr}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|imageColorG = {{Main page/settings|featuredartistartworkimagecolorg}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|imageColorB = {{Main page/settings|featuredartistartworkimagecolorb}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|imagePosition = {{Main page/settings|featuredartistartworkimageposition}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|label = Members&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|labelpage = PGN Classic:Featured artists&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|content = &amp;lt;!--&lt;br /&gt;
			--&amp;gt;&amp;lt;div class=&amp;quot;tg-mainpage-featured-artist-portrait&amp;quot;&amp;gt;[[File:{{Main page/settings|featuredartistimage}}|48px|link=]]&amp;lt;/div&amp;gt;&amp;lt;!--&lt;br /&gt;
			--&amp;gt;&amp;lt;div class=&amp;quot;tg-mainpage-featured-artist-info&amp;quot;&amp;gt;&amp;lt;!---&lt;br /&gt;
				--&amp;gt;&amp;lt;div class=&amp;quot;tg-card-caption&amp;quot;&amp;gt;{{Main page/settings|featuredartistartworkname}}&amp;lt;/div&amp;gt;&amp;lt;!--&lt;br /&gt;
				--&amp;gt;&amp;lt;div class=&amp;quot;tg-card-title&amp;quot;&amp;gt;{{Main page/settings|featuredartistname}}&amp;lt;/div&amp;gt;&amp;lt;!--&lt;br /&gt;
			--&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|link = {{Main page/settings|featuredartistpage}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|afterImage = {{Main page/settings|featuredartistdescription}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;}}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
	--&amp;gt;|content3 = &amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
		Featured quote&lt;br /&gt;
		--------------&lt;br /&gt;
		--&amp;gt;{{Card&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|height = 20rem&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|class = tg-mainpage-featured-quote&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|label = Quote&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|labelpage = PGN Classic:Featured quotes&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|content = {{Blockquote&amp;lt;!--&lt;br /&gt;
			--&amp;gt;|{{Main page/settings|featuredquote}}&amp;lt;!--&lt;br /&gt;
			--&amp;gt;|{{Main page/settings|featuredquotecitation}}&amp;lt;!--&lt;br /&gt;
			--&amp;gt;}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;}}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
	--&amp;gt;}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;templatestyles src=&amp;quot;Template:Main page/featured/styles.css&amp;quot;/&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;noinclude&amp;gt;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
Template documentation&lt;br /&gt;
----------------------&lt;br /&gt;
[[Category:Featured]]&lt;br /&gt;
--&amp;gt;{{/doc}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maegnus</name></author>
	</entry>
	<entry>
		<id>https://classic.pgnrp.com/index.php?title=Template:Main_page/settings&amp;diff=111</id>
		<title>Template:Main page/settings</title>
		<link rel="alternate" type="text/html" href="https://classic.pgnrp.com/index.php?title=Template:Main_page/settings&amp;diff=111"/>
		<updated>2025-05-21T06:16:04Z</updated>

		<summary type="html">&lt;p&gt;Maegnus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
Template:Main page/settings&lt;br /&gt;
--------------------&lt;br /&gt;
Settings for the main page&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&amp;lt;includeonly&amp;gt;{{#if:{{{1|}}}|{{#switch:{{{1}}}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
Header&lt;br /&gt;
------&lt;br /&gt;
--&amp;gt;|tagline = The [[PGN Classic]] encyclopedia [[Help:Contents|built by fans]]&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
Featured article&lt;br /&gt;
----------------&lt;br /&gt;
--&amp;gt;|featuredarticlepage = Classic Command&amp;lt;!--&lt;br /&gt;
--&amp;gt;|featuredarticleimage = cc.jpg&amp;lt;!--&lt;br /&gt;
--&amp;gt;|featuredarticleimageposition = center&amp;lt;!--&lt;br /&gt;
--&amp;gt;|featuredarticleimagecolorr = 40&amp;lt;!--&lt;br /&gt;
--&amp;gt;|featuredarticleimagecolorg = 53&amp;lt;!--&lt;br /&gt;
--&amp;gt;|featuredarticleimagecolorb = 82&amp;lt;!--&lt;br /&gt;
--&amp;gt;|featuredarticlename = Classic Command&amp;lt;!--&lt;br /&gt;
--&amp;gt;|featuredarticlecaption = The Command team of the PGN Classic Server.&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
Featured quote&lt;br /&gt;
----------------&lt;br /&gt;
--&amp;gt;|featuredquote = &amp;lt;!--&lt;br /&gt;
	--&amp;gt;Seek for the Sword that was broken:&amp;lt;br/&amp;gt;&amp;lt;!--&lt;br /&gt;
	--&amp;gt;In Imladris it dwells;&amp;lt;br/&amp;gt;&amp;lt;!--&lt;br /&gt;
	--&amp;gt;There shall be counsels taken&amp;lt;br/&amp;gt;&amp;lt;!--&lt;br /&gt;
	--&amp;gt;Stronger than Morgul-spells.&amp;lt;br/&amp;gt;&amp;lt;!--&lt;br /&gt;
	--&amp;gt;There shall be shown a token&amp;lt;br/&amp;gt;&amp;lt;!--&lt;br /&gt;
	--&amp;gt;That Doom is near at hand,&amp;lt;br/&amp;gt;&amp;lt;!--&lt;br /&gt;
    --&amp;gt;For Isildur&#039;s Bane shall waken,&amp;lt;br/&amp;gt;&amp;lt;!--&lt;br /&gt;
    --&amp;gt;And the Halfling forth shall stand.&amp;lt;!--&lt;br /&gt;
--&amp;gt;|featuredquotecitation = [[Boromir]]&#039;s [[Seek for the Sword that was broken|rhyme]] in &#039;&#039;[[The Fellowship of the Ring]]&#039;&#039;, &amp;quot;[[The Council of Elrond]]&amp;quot;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
Featured artist&lt;br /&gt;
---------------&lt;br /&gt;
--&amp;gt;|featuredartistpage = :Category:Elite&amp;lt;!--&lt;br /&gt;
--&amp;gt;|featuredartistname = Elites&amp;lt;!--&lt;br /&gt;
--&amp;gt;|featuredartistimage = elite.jpg&amp;lt;!--&lt;br /&gt;
--&amp;gt;|featuredartistdescription = The Highest Civilian Rank in Classic&amp;lt;!--&lt;br /&gt;
--&amp;gt;|featuredartistartworkname = This Months&amp;lt;!--&lt;br /&gt;
--&amp;gt;|featuredartistartworkimageposition = center&amp;lt;!--&lt;br /&gt;
--&amp;gt;|featuredartistartworkimage = elite.jpg&amp;lt;!--&lt;br /&gt;
--&amp;gt;|featuredartistartworkimagecolorr = 120&amp;lt;!--&lt;br /&gt;
--&amp;gt;|featuredartistartworkimagecolorg = 85&amp;lt;!--&lt;br /&gt;
--&amp;gt;|featuredartistartworkimagecolorb = 73&amp;lt;!--&lt;br /&gt;
--&amp;gt;}}}}&amp;lt;/includeonly&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;noinclude&amp;gt;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
Template documentation&lt;br /&gt;
----------------------&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;{{/doc}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maegnus</name></author>
	</entry>
	<entry>
		<id>https://classic.pgnrp.com/index.php?title=Template:Main_page/navigation/styles.css&amp;diff=110</id>
		<title>Template:Main page/navigation/styles.css</title>
		<link rel="alternate" type="text/html" href="https://classic.pgnrp.com/index.php?title=Template:Main_page/navigation/styles.css&amp;diff=110"/>
		<updated>2025-05-21T06:04:24Z</updated>

		<summary type="html">&lt;p&gt;Maegnus: Created page with &amp;quot;.tg-mainpage-navigation { 	margin: 0.5rem 0; }  /* Temp styles until we have images */ .template-navpill { 	background-color: var(--tg-color-surface-2); }&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.tg-mainpage-navigation {&lt;br /&gt;
	margin: 0.5rem 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Temp styles until we have images */&lt;br /&gt;
.template-navpill {&lt;br /&gt;
	background-color: var(--tg-color-surface-2);&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Maegnus</name></author>
	</entry>
	<entry>
		<id>https://classic.pgnrp.com/index.php?title=Template:Main_page/navigation&amp;diff=109</id>
		<title>Template:Main page/navigation</title>
		<link rel="alternate" type="text/html" href="https://classic.pgnrp.com/index.php?title=Template:Main_page/navigation&amp;diff=109"/>
		<updated>2025-05-21T06:03:55Z</updated>

		<summary type="html">&lt;p&gt;Maegnus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
Template:Main page/navigation&lt;br /&gt;
--------------------&lt;br /&gt;
Navigation component of the main page&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&amp;lt;div class=&amp;quot;tg-mainpage-navigation&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
	--&amp;gt;{{Navpills&amp;lt;!--&lt;br /&gt;
	--&amp;gt;|page1=Portal:Businesses|text1=Businesses|image1=Main page - Businesses.webp&amp;lt;!--&lt;br /&gt;
	--&amp;gt;|page2=Portal:Characters|text2=Characters|image2=Main page - Characters.webp&amp;lt;!--&lt;br /&gt;
	--&amp;gt;|page3=Portal:Departments|text3=Departments|image3=Main page - Departments.webp&amp;lt;!--&lt;br /&gt;
	--&amp;gt;|page4=Portal:Gangs|text4=Gangs|image4=Main page - Gangs.webp&amp;lt;!--&lt;br /&gt;
	--&amp;gt;|page5=Portal:Government|text5=Government|image5=Main page - Government.webp&amp;lt;!--&lt;br /&gt;
	--&amp;gt;|page6=Portal:Laws|text6=Laws|image6=Main page - Laws.webp&amp;lt;!--&lt;br /&gt;
	--&amp;gt;}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;templatestyles src=&amp;quot;Template:Main page/navigation/styles.css&amp;quot;/&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;noinclude&amp;gt;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
Template documentation&lt;br /&gt;
----------------------&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;{{/doc}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maegnus</name></author>
	</entry>
	<entry>
		<id>https://classic.pgnrp.com/index.php?title=Main_Page&amp;diff=108</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://classic.pgnrp.com/index.php?title=Main_Page&amp;diff=108"/>
		<updated>2025-05-21T06:03:22Z</updated>

		<summary type="html">&lt;p&gt;Maegnus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Main page/header}}&lt;br /&gt;
{{Main page/navigation}}&lt;br /&gt;
{{Main page/featured}}&lt;br /&gt;
{{Main page/legacy}}&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
{{Main page/browse}}&lt;br /&gt;
&amp;lt;div class=&amp;quot;metadata&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;[&amp;lt;/nowiki&amp;gt;[[Template:Main page/settings|settings]]&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Contents]]&lt;/div&gt;</summary>
		<author><name>Maegnus</name></author>
	</entry>
	<entry>
		<id>https://classic.pgnrp.com/index.php?title=Template:Main_page/navigation&amp;diff=107</id>
		<title>Template:Main page/navigation</title>
		<link rel="alternate" type="text/html" href="https://classic.pgnrp.com/index.php?title=Template:Main_page/navigation&amp;diff=107"/>
		<updated>2025-05-21T06:01:59Z</updated>

		<summary type="html">&lt;p&gt;Maegnus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
Template:Main page/navigation&lt;br /&gt;
--------------------&lt;br /&gt;
Navigation component of the main page&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&amp;lt;div class=&amp;quot;tg-mainpage-navigation&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
	--&amp;gt;{{Navpills&amp;lt;!--&lt;br /&gt;
	--&amp;gt;|page1=Portal:Businesses|text1=Businesses|image1=Main page - Businesses.webp&amp;lt;!--&lt;br /&gt;
	--&amp;gt;|page2=Portal:Characters|text2=Characters|image2=Main page - Characters.webp&amp;lt;!--&lt;br /&gt;
	--&amp;gt;|page3=Portal:Departments|text3=Departments|image3=Main page - Departments.webp&amp;lt;!--&lt;br /&gt;
	--&amp;gt;|page4=Portal:Gangs|text4=Gangs|image4=Main page - Gangs.webp&amp;lt;!--&lt;br /&gt;
	--&amp;gt;|page5=Portal:Government|text5=Government|image5=Main page - Government.webp&amp;lt;!--&lt;br /&gt;
	--&amp;gt;|page6=Portal:Laws|text6=Laws|image6=Main page - Laws.webp&amp;lt;!--&lt;br /&gt;
	--&amp;gt;|page7=Portal:Locations|text7=Locations|image7=Main page - Locations.webp&amp;lt;!--&lt;br /&gt;
	--&amp;gt;|page8=Portal:Music|text8=Music|image8=Main page - Music.webp&amp;lt;!--&lt;br /&gt;
	--&amp;gt;|page9=Portal:People|text9=People|image9=Main page - People.webp&amp;lt;!--&lt;br /&gt;
	--&amp;gt;|page10=Portal:Timeline|text10=Timeline|image10=Main page - Timeline.webp&amp;lt;!--&lt;br /&gt;
	--&amp;gt;|page11=Portal:Collectibles|text11=Collectibles|image11=Main page - Collectibles.webp&amp;lt;!--&lt;br /&gt;
	--&amp;gt;|page12=Tolkien Gateway:Community Portal|text12=Community|image12=Main page - Community.webp&amp;lt;!--&lt;br /&gt;
	--&amp;gt;}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;templatestyles src=&amp;quot;Template:Main page/navigation/styles.css&amp;quot;/&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;noinclude&amp;gt;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
Template documentation&lt;br /&gt;
----------------------&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;{{/doc}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maegnus</name></author>
	</entry>
	<entry>
		<id>https://classic.pgnrp.com/index.php?title=Main_Page&amp;diff=106</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://classic.pgnrp.com/index.php?title=Main_Page&amp;diff=106"/>
		<updated>2025-05-21T05:54:05Z</updated>

		<summary type="html">&lt;p&gt;Maegnus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Main page/header}}&lt;br /&gt;
{{Main page/navigation}}&lt;br /&gt;
{{Main page/featured}}&lt;br /&gt;
{{Main page/legacy}}&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
{{Main page/browse}}&lt;br /&gt;
&amp;lt;div class=&amp;quot;metadata&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;[&amp;lt;/nowiki&amp;gt;[[Template:Main page/settings|settings]]&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Contents]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{#seo:&lt;br /&gt;
|keywords=lotr,lord of the rings,tolkien,encyclopedia,wiki&lt;br /&gt;
|description=The largest Lord of the Rings encyclopedia&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Maegnus</name></author>
	</entry>
	<entry>
		<id>https://classic.pgnrp.com/index.php?title=Template:Main_page/social/styles.css&amp;diff=105</id>
		<title>Template:Main page/social/styles.css</title>
		<link rel="alternate" type="text/html" href="https://classic.pgnrp.com/index.php?title=Template:Main_page/social/styles.css&amp;diff=105"/>
		<updated>2025-05-21T05:46:56Z</updated>

		<summary type="html">&lt;p&gt;Maegnus: Created page with &amp;quot;.tg-mainpage-social {     text-align: center; }  .tg-mainpage-social:before {     content: &amp;quot;&amp;quot;;     position: absolute;     inset: 0;     background-image: url(/w/images/thumb/e/ed/Gate_of_Durin_cropped.png/320px-Gate_of_Durin_cropped.png);     background-repeat: no-repeat;     background-position: center;     opacity: var(--tg-opacity-pattern);     filter: var(--filter-invert); }  .tg-mainpage-social .tg-card-content {     position: relative; }  .tg-mainpage-social-disco...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.tg-mainpage-social {&lt;br /&gt;
    text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-mainpage-social:before {&lt;br /&gt;
    content: &amp;quot;&amp;quot;;&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    inset: 0;&lt;br /&gt;
    background-image: url(/w/images/thumb/e/ed/Gate_of_Durin_cropped.png/320px-Gate_of_Durin_cropped.png);&lt;br /&gt;
    background-repeat: no-repeat;&lt;br /&gt;
    background-position: center;&lt;br /&gt;
    opacity: var(--tg-opacity-pattern);&lt;br /&gt;
    filter: var(--filter-invert);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-mainpage-social .tg-card-content {&lt;br /&gt;
    position: relative;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-mainpage-social-discord {&lt;br /&gt;
    margin-top: 0.5rem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-button.tg-mainpage-social-discord &amp;gt; a {&lt;br /&gt;
    color: #fff !important;&lt;br /&gt;
    background: #5865F2 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-button.tg-mainpage-social-discord &amp;gt; a:hover {&lt;br /&gt;
    background: #8891f2 !important&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-button.tg-mainpage-social-discord &amp;gt; a:active {&lt;br /&gt;
    background: #3442d9 !important&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-mainpage-social-discord img {&lt;br /&gt;
    filter: invert(1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-mainpage-social .tg-section-divider {&lt;br /&gt;
    margin-top: 1rem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-mainpage-social-followus {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    gap: 0.5rem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-mainpage-social-followus img {&lt;br /&gt;
    filter: var(--filter-invert);&lt;br /&gt;
    opacity: 0.7;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Maegnus</name></author>
	</entry>
	<entry>
		<id>https://classic.pgnrp.com/index.php?title=Template:Main_page/editing/styles.css&amp;diff=104</id>
		<title>Template:Main page/editing/styles.css</title>
		<link rel="alternate" type="text/html" href="https://classic.pgnrp.com/index.php?title=Template:Main_page/editing/styles.css&amp;diff=104"/>
		<updated>2025-05-21T05:44:35Z</updated>

		<summary type="html">&lt;p&gt;Maegnus: Created page with &amp;quot;.tg-mainpage-editing-image &amp;gt; .mw-halign-center {     margin-top: 0;     margin-bottom: 0; }  .tg-mainpage-editing .tg-card-title {     text-align: center; }  .tg-mainpage-editing .tg-card-caption {     margin-top: 0.5rem; }  .tg-mainpage-editing-actions {     margin-top: 1rem;     display: flex;     flex-direction: column;     gap: 0.5rem; }&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.tg-mainpage-editing-image &amp;gt; .mw-halign-center {&lt;br /&gt;
    margin-top: 0;&lt;br /&gt;
    margin-bottom: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-mainpage-editing .tg-card-title {&lt;br /&gt;
    text-align: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-mainpage-editing .tg-card-caption {&lt;br /&gt;
    margin-top: 0.5rem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-mainpage-editing-actions {&lt;br /&gt;
    margin-top: 1rem;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
    gap: 0.5rem;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Maegnus</name></author>
	</entry>
	<entry>
		<id>https://classic.pgnrp.com/index.php?title=Template:Main_page/settings&amp;diff=103</id>
		<title>Template:Main page/settings</title>
		<link rel="alternate" type="text/html" href="https://classic.pgnrp.com/index.php?title=Template:Main_page/settings&amp;diff=103"/>
		<updated>2025-05-21T05:43:59Z</updated>

		<summary type="html">&lt;p&gt;Maegnus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
Template:Main page/settings&lt;br /&gt;
--------------------&lt;br /&gt;
Settings for the main page&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&amp;lt;includeonly&amp;gt;{{#if:{{{1|}}}|{{#switch:{{{1}}}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
Header&lt;br /&gt;
------&lt;br /&gt;
--&amp;gt;|tagline = The [[PGN Classic]] encyclopedia [[Help:Contents|built by fans]]&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
Featured article&lt;br /&gt;
----------------&lt;br /&gt;
--&amp;gt;|featuredarticlepage = Helm&amp;lt;!--&lt;br /&gt;
--&amp;gt;|featuredarticleimage = Turner Mohan - Helm Hammerhand.jpg&amp;lt;!--&lt;br /&gt;
--&amp;gt;|featuredarticleimageposition = center&amp;lt;!--&lt;br /&gt;
--&amp;gt;|featuredarticleimagecolorr = 40&amp;lt;!--&lt;br /&gt;
--&amp;gt;|featuredarticleimagecolorg = 53&amp;lt;!--&lt;br /&gt;
--&amp;gt;|featuredarticleimagecolorb = 82&amp;lt;!--&lt;br /&gt;
--&amp;gt;|featuredarticlename = Helm&amp;lt;!--&lt;br /&gt;
--&amp;gt;|featuredarticlecaption = Ninth King of Rohan and last King of the first line.&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
Featured quote&lt;br /&gt;
----------------&lt;br /&gt;
--&amp;gt;|featuredquote = &amp;lt;!--&lt;br /&gt;
	--&amp;gt;Seek for the Sword that was broken:&amp;lt;br/&amp;gt;&amp;lt;!--&lt;br /&gt;
	--&amp;gt;In Imladris it dwells;&amp;lt;br/&amp;gt;&amp;lt;!--&lt;br /&gt;
	--&amp;gt;There shall be counsels taken&amp;lt;br/&amp;gt;&amp;lt;!--&lt;br /&gt;
	--&amp;gt;Stronger than Morgul-spells.&amp;lt;br/&amp;gt;&amp;lt;!--&lt;br /&gt;
	--&amp;gt;There shall be shown a token&amp;lt;br/&amp;gt;&amp;lt;!--&lt;br /&gt;
	--&amp;gt;That Doom is near at hand,&amp;lt;br/&amp;gt;&amp;lt;!--&lt;br /&gt;
    --&amp;gt;For Isildur&#039;s Bane shall waken,&amp;lt;br/&amp;gt;&amp;lt;!--&lt;br /&gt;
    --&amp;gt;And the Halfling forth shall stand.&amp;lt;!--&lt;br /&gt;
--&amp;gt;|featuredquotecitation = [[Boromir]]&#039;s [[Seek for the Sword that was broken|rhyme]] in &#039;&#039;[[The Fellowship of the Ring]]&#039;&#039;, &amp;quot;[[The Council of Elrond]]&amp;quot;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
Featured artist&lt;br /&gt;
---------------&lt;br /&gt;
--&amp;gt;|featuredartistpage = :Category:Images by Justin Gerard&amp;lt;!--&lt;br /&gt;
--&amp;gt;|featuredartistname = Justin Gerard&amp;lt;!--&lt;br /&gt;
--&amp;gt;|featuredartistimage = Justin Gerard.jpg&amp;lt;!--&lt;br /&gt;
--&amp;gt;|featuredartistdescription = Justin Gerard is an artist who has worked within the publishing, film, and game industries.&amp;lt;!--&lt;br /&gt;
--&amp;gt;|featuredartistartworkname = The Hunting of Carcharoth&amp;lt;!--&lt;br /&gt;
--&amp;gt;|featuredartistartworkimageposition = center&amp;lt;!--&lt;br /&gt;
--&amp;gt;|featuredartistartworkimage = Justin Gerard - The Hunting of Carcharoth.jpg&amp;lt;!--&lt;br /&gt;
--&amp;gt;|featuredartistartworkimagecolorr = 120&amp;lt;!--&lt;br /&gt;
--&amp;gt;|featuredartistartworkimagecolorg = 85&amp;lt;!--&lt;br /&gt;
--&amp;gt;|featuredartistartworkimagecolorb = 73&amp;lt;!--&lt;br /&gt;
--&amp;gt;}}}}&amp;lt;/includeonly&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;noinclude&amp;gt;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
Template documentation&lt;br /&gt;
----------------------&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;{{/doc}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maegnus</name></author>
	</entry>
	<entry>
		<id>https://classic.pgnrp.com/index.php?title=Main_Page&amp;diff=102</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://classic.pgnrp.com/index.php?title=Main_Page&amp;diff=102"/>
		<updated>2025-05-21T05:42:58Z</updated>

		<summary type="html">&lt;p&gt;Maegnus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Main page/header}}&lt;br /&gt;
{{Main page/navigation}}&lt;br /&gt;
{{Main page/featured}}&lt;br /&gt;
{{Main page/legacy}}&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
{{Main page/browse}}&lt;br /&gt;
&amp;lt;div class=&amp;quot;metadata&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;[&amp;lt;/nowiki&amp;gt;[[Template:Main page/settings|settings]]&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Contents]]&lt;br /&gt;
&lt;br /&gt;
[[de:Hauptseite]]&lt;br /&gt;
[[fr:encyclo]]&lt;br /&gt;
[[fi:Etusivu]]&lt;br /&gt;
[[pt-br:Página principal]]&lt;br /&gt;
[[ru:Заглавная_страница]]&lt;br /&gt;
[[zh:首页]]&lt;br /&gt;
&lt;br /&gt;
{{#seo:&lt;br /&gt;
|keywords=lotr,lord of the rings,tolkien,encyclopedia,wiki&lt;br /&gt;
|description=The largest Lord of the Rings encyclopedia&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
__NOTOC__ __NOEDITSECTION__ __NOTITLE__&lt;/div&gt;</summary>
		<author><name>Maegnus</name></author>
	</entry>
	<entry>
		<id>https://classic.pgnrp.com/index.php?title=Main_Page&amp;diff=101</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://classic.pgnrp.com/index.php?title=Main_Page&amp;diff=101"/>
		<updated>2025-05-21T05:41:06Z</updated>

		<summary type="html">&lt;p&gt;Maegnus: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Main page/header}}&lt;br /&gt;
{{Main page/navigation}}&lt;br /&gt;
{{Main page/featured}}&lt;br /&gt;
{{Main page/legacy}}&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
{{Main page/browse}}&lt;br /&gt;
&amp;lt;div class=&amp;quot;metadata&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;[&amp;lt;/nowiki&amp;gt;[https://classic.pgnrp.com/index.php?Template:Main_page/settings?action=edit settings]&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Contents]]&lt;br /&gt;
&lt;br /&gt;
[[de:Hauptseite]]&lt;br /&gt;
[[fr:encyclo]]&lt;br /&gt;
[[fi:Etusivu]]&lt;br /&gt;
[[pt-br:Página principal]]&lt;br /&gt;
[[ru:Заглавная_страница]]&lt;br /&gt;
[[zh:首页]]&lt;br /&gt;
&lt;br /&gt;
{{#seo:&lt;br /&gt;
|keywords=lotr,lord of the rings,tolkien,encyclopedia,wiki&lt;br /&gt;
|description=The largest Lord of the Rings encyclopedia&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
__NOTOC__ __NOEDITSECTION__ __NOTITLE__&lt;/div&gt;</summary>
		<author><name>Maegnus</name></author>
	</entry>
	<entry>
		<id>https://classic.pgnrp.com/index.php?title=Template:Main_page/social&amp;diff=100</id>
		<title>Template:Main page/social</title>
		<link rel="alternate" type="text/html" href="https://classic.pgnrp.com/index.php?title=Template:Main_page/social&amp;diff=100"/>
		<updated>2025-05-21T05:38:03Z</updated>

		<summary type="html">&lt;p&gt;Maegnus: Created page with &amp;quot;&amp;lt;!--  Template:Main page/social -------------------- Social component of the main page  --&amp;gt;{{Card&amp;lt;!-- --&amp;gt;|class = tg-mainpage-social&amp;lt;!-- --&amp;gt;|content = &amp;lt;!--- 	--&amp;gt;&amp;lt;div class=&amp;quot;tg-card-title&amp;quot;&amp;gt;Speak Friend and Enter&amp;lt;/div&amp;gt;&amp;lt;!-- 	--&amp;gt;{{Button|label=Join our Discord|url=https://discord.gg/ktX6fhU9FY|icon=Discord - Simple Icons.svg|class=tg-mainpage-social-discord}}&amp;lt;!-- 	--&amp;gt;{{Section divider|Follow us}}&amp;lt;!-- 	--&amp;gt;&amp;lt;div class=&amp;quot;tg-mainpage-social-followus&amp;quot;&amp;gt;&amp;lt;!-- 		--&amp;gt;{{Button|label=Follo...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
Template:Main page/social&lt;br /&gt;
--------------------&lt;br /&gt;
Social component of the main page&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;{{Card&amp;lt;!--&lt;br /&gt;
--&amp;gt;|class = tg-mainpage-social&amp;lt;!--&lt;br /&gt;
--&amp;gt;|content = &amp;lt;!---&lt;br /&gt;
	--&amp;gt;&amp;lt;div class=&amp;quot;tg-card-title&amp;quot;&amp;gt;Speak Friend and Enter&amp;lt;/div&amp;gt;&amp;lt;!--&lt;br /&gt;
	--&amp;gt;{{Button|label=Join our Discord|url=https://discord.gg/ktX6fhU9FY|icon=Discord - Simple Icons.svg|class=tg-mainpage-social-discord}}&amp;lt;!--&lt;br /&gt;
	--&amp;gt;{{Section divider|Follow us}}&amp;lt;!--&lt;br /&gt;
	--&amp;gt;&amp;lt;div class=&amp;quot;tg-mainpage-social-followus&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=Follow on X|url=https://x.com/TolkienGateway|icon=X - Simple Icons.svg|type=icon|class=tg-mainpage-social-x}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=Follow on Bluesky|url=https://bsky.app/profile/tolkiengateway.net|icon=Bluesky - Simple Icons.svg|type=icon|class=tg-mainpage-social-bluesky}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=Follow on Facebook|url=https://www.facebook.com/tolkiengateway|icon=Facebook - Simple Icons.svg|type=icon|class=tg-mainpage-social-facebook}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=Follow on Reddit|url=https://www.reddit.com/u/TolkienGateway|icon=Reddit - Simple Icons.svg|type=icon|class=tg-mainpage-social-reddit}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=Follow on Instagram|url=https://www.instagram.com/tolkiengatewayofficial|icon=Instagram - Simple Icons.svg|type=icon|class=tg-mainpage-social-instagram}}&amp;lt;!--&lt;br /&gt;
		{{Button|label=Follow on TikTok|url=https://www.tiktok.com/@tolkiengateway|icon=TikTok - Simple Icons.svg|type=icon|class=tg-mainpage-social-tiktok}}--&amp;gt;&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=Follow on YouTube|url=https://www.youtube.com/@Tolkien-Gateway|icon=YouTube - Simple Icons.svg|type=icon|class=tg-mainpage-social-youtube}}&amp;lt;!--&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
	--&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;}}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&amp;lt;templatestyles src=&amp;quot;Template:Main page/social/styles.css&amp;quot;/&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;noinclude&amp;gt;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
Template documentation&lt;br /&gt;
----------------------&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;{{/doc}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maegnus</name></author>
	</entry>
	<entry>
		<id>https://classic.pgnrp.com/index.php?title=Template:Main_page/editing&amp;diff=99</id>
		<title>Template:Main page/editing</title>
		<link rel="alternate" type="text/html" href="https://classic.pgnrp.com/index.php?title=Template:Main_page/editing&amp;diff=99"/>
		<updated>2025-05-21T05:37:21Z</updated>

		<summary type="html">&lt;p&gt;Maegnus: Created page with &amp;quot;&amp;lt;!--  Template:Main page/editing -------------------- Editing component of the main page  --&amp;gt;{{Card&amp;lt;!-- --&amp;gt;|class = tg-mainpage-editing&amp;lt;!-- --&amp;gt;|content = &amp;lt;!--- 	--&amp;gt;&amp;lt;div class=&amp;quot;tg-mainpage-editing-image&amp;quot;&amp;gt;link=&amp;lt;/div&amp;gt;&amp;lt;!-- 	--&amp;gt;&amp;lt;div class=&amp;quot;tg-card-title&amp;quot;&amp;gt;We need your help!&amp;lt;/div&amp;gt;&amp;lt;!-- 	--&amp;gt;&amp;lt;div class=&amp;quot;tg-card-caption&amp;quot;&amp;gt;Tolkien Gateway is maintained entirely by volunteers like you. Join our community of Tolkien enthusiasts by cre...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
Template:Main page/editing&lt;br /&gt;
--------------------&lt;br /&gt;
Editing component of the main page&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;{{Card&amp;lt;!--&lt;br /&gt;
--&amp;gt;|class = tg-mainpage-editing&amp;lt;!--&lt;br /&gt;
--&amp;gt;|content = &amp;lt;!---&lt;br /&gt;
	--&amp;gt;&amp;lt;div class=&amp;quot;tg-mainpage-editing-image&amp;quot;&amp;gt;[[File:Gandalf I Want You.png|thumb|center|x120px|link=]]&amp;lt;/div&amp;gt;&amp;lt;!--&lt;br /&gt;
	--&amp;gt;&amp;lt;div class=&amp;quot;tg-card-title&amp;quot;&amp;gt;We need your help!&amp;lt;/div&amp;gt;&amp;lt;!--&lt;br /&gt;
	--&amp;gt;&amp;lt;div class=&amp;quot;tg-card-caption&amp;quot;&amp;gt;Tolkien Gateway is maintained entirely by volunteers like you. Join our community of Tolkien enthusiasts by creating an account today! &amp;lt;/div&amp;gt;&amp;lt;!--&lt;br /&gt;
	--&amp;gt;&amp;lt;div class=&amp;quot;tg-mainpage-editing-actions&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=Create an account|page=Special:CreateAccount|type=primary}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=Edits needed|page=Tolkien_Gateway:To-do|type=framed}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=Support Independent Wikis|url=https://getindie.wiki|type=framed}}&amp;lt;!--&lt;br /&gt;
	--&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;}}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&amp;lt;templatestyles src=&amp;quot;Template:Main page/editing/styles.css&amp;quot;/&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;noinclude&amp;gt;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
Template documentation&lt;br /&gt;
----------------------&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;{{/doc}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maegnus</name></author>
	</entry>
	<entry>
		<id>https://classic.pgnrp.com/index.php?title=Template:Quote/styles.css&amp;diff=98</id>
		<title>Template:Quote/styles.css</title>
		<link rel="alternate" type="text/html" href="https://classic.pgnrp.com/index.php?title=Template:Quote/styles.css&amp;diff=98"/>
		<updated>2025-05-21T05:35:26Z</updated>

		<summary type="html">&lt;p&gt;Maegnus: Created page with &amp;quot;.tg-quote-container {     margin: 1rem 0; }  .tg-quote-container &amp;gt; .tg-section-divider {     margin: 0; }  .tg-quote-container &amp;gt; .tg-section-divider &amp;gt; span {     line-height: 0;     font-size: 2rem;     margin-top: 1rem; }  .tg-quote-container &amp;gt; .tg-quote {     padding-left: 0;     border-left: none; }&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.tg-quote-container {&lt;br /&gt;
    margin: 1rem 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-quote-container &amp;gt; .tg-section-divider {&lt;br /&gt;
    margin: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-quote-container &amp;gt; .tg-section-divider &amp;gt; span {&lt;br /&gt;
    line-height: 0;&lt;br /&gt;
    font-size: 2rem;&lt;br /&gt;
    margin-top: 1rem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-quote-container &amp;gt; .tg-quote {&lt;br /&gt;
    padding-left: 0;&lt;br /&gt;
    border-left: none;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Maegnus</name></author>
	</entry>
	<entry>
		<id>https://classic.pgnrp.com/index.php?title=Template:Quote&amp;diff=97</id>
		<title>Template:Quote</title>
		<link rel="alternate" type="text/html" href="https://classic.pgnrp.com/index.php?title=Template:Quote&amp;diff=97"/>
		<updated>2025-05-21T05:34:49Z</updated>

		<summary type="html">&lt;p&gt;Maegnus: Created page with &amp;quot;{{#if:{{{blockquote|}}}||&amp;lt;div class=&amp;quot;tg-quote-container&amp;quot;&amp;gt;{{Section divider|”}}}}&amp;lt;blockquote class=&amp;quot;tg-quote noexcerpt&amp;quot;&amp;gt; {{{1}}} {{#if:{{{2|}}}|&amp;lt;p class=&amp;quot;tg-quote-footer&amp;quot;&amp;gt;&amp;lt;cite&amp;gt;{{{2}}}&amp;lt;/cite&amp;gt;&amp;lt;/p&amp;gt;}} &amp;lt;/blockquote&amp;gt;{{#if:{{{blockquote|}}}||{{Section divider}}&amp;lt;/div&amp;gt;}}&amp;lt;templatestyles src=&amp;quot;Template:Quote/styles.css&amp;quot;/&amp;gt;&amp;lt;noinclude&amp;gt; ==Usage== &amp;lt;pre&amp;gt; {{Quote|Written quotation|Character in &amp;#039;&amp;#039;book&amp;#039;&amp;#039;, &amp;quot;Chapter&amp;quot;}} &amp;lt;/pre&amp;gt; *Quotes are not required for every article *They shoul...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#if:{{{blockquote|}}}||&amp;lt;div class=&amp;quot;tg-quote-container&amp;quot;&amp;gt;{{Section divider|”}}}}&amp;lt;blockquote class=&amp;quot;tg-quote noexcerpt&amp;quot;&amp;gt;&lt;br /&gt;
{{{1}}}&lt;br /&gt;
{{#if:{{{2|}}}|&amp;lt;p class=&amp;quot;tg-quote-footer&amp;quot;&amp;gt;&amp;lt;cite&amp;gt;{{{2}}}&amp;lt;/cite&amp;gt;&amp;lt;/p&amp;gt;}}&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;{{#if:{{{blockquote|}}}||{{Section divider}}&amp;lt;/div&amp;gt;}}&amp;lt;templatestyles src=&amp;quot;Template:Quote/styles.css&amp;quot;/&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
==Usage==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{Quote|Written quotation|[[Character]] in &#039;&#039;[[book]]&#039;&#039;, &amp;quot;[[Chapter]]&amp;quot;}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*Quotes are not required for every article&lt;br /&gt;
*They should be used only at the top of key articles&lt;br /&gt;
*For longer quotes, poems or songs use [[Template:Blockquote]]&lt;br /&gt;
&lt;br /&gt;
==TemplateData ==&lt;br /&gt;
&amp;lt;templatedata&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;params&amp;quot;: {&lt;br /&gt;
		&amp;quot;1&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Text&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Text to be quoted&amp;quot;,&lt;br /&gt;
			&amp;quot;example&amp;quot;: &amp;quot;My precious.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: true,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;2&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Citation&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The citation of the quote&amp;quot;,&lt;br /&gt;
			&amp;quot;example&amp;quot;: &amp;quot;Gollum&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	&amp;quot;paramOrder&amp;quot;: [&lt;br /&gt;
		&amp;quot;1&amp;quot;,&lt;br /&gt;
		&amp;quot;2&amp;quot;&lt;br /&gt;
	],&lt;br /&gt;
	&amp;quot;format&amp;quot;: &amp;quot;inline&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/templatedata&amp;gt;&lt;br /&gt;
[[Category:Utility templates|{{PAGENAME}}]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maegnus</name></author>
	</entry>
	<entry>
		<id>https://classic.pgnrp.com/index.php?title=Template:Blockquote&amp;diff=96</id>
		<title>Template:Blockquote</title>
		<link rel="alternate" type="text/html" href="https://classic.pgnrp.com/index.php?title=Template:Blockquote&amp;diff=96"/>
		<updated>2025-05-21T05:34:11Z</updated>

		<summary type="html">&lt;p&gt;Maegnus: Created page with &amp;quot;{{Quote|{{{1}}}|{{{2|}}}|blockquote=true}}&amp;lt;noinclude&amp;gt; ==Usage== &amp;lt;pre&amp;gt; {{blockquote|Quote goes here  And another line. |citation}} &amp;lt;/pre&amp;gt; Makes styled, semantic blockquotes with optional attribution. Remember to manually add line breaks or use [http://www.mediawiki.org/wiki/Extension:Poem &amp;amp;lt;poem&amp;amp;gt;] for poems.  ==TemplateData == &amp;lt;templatedata&amp;gt; { 	&amp;quot;params&amp;quot;: { 		&amp;quot;1&amp;quot;: { 			&amp;quot;label&amp;quot;: &amp;quot;Text&amp;quot;, 			&amp;quot;description&amp;quot;: &amp;quot;Text to be quoted&amp;quot;, 			&amp;quot;example&amp;quot;: &amp;quot;My precious.&amp;quot;, 			&amp;quot;type&amp;quot;: &amp;quot;co...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Quote|{{{1}}}|{{{2|}}}|blockquote=true}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
==Usage==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{blockquote|Quote goes here&lt;br /&gt;
&lt;br /&gt;
And another line.&lt;br /&gt;
|citation}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Makes styled, semantic blockquotes with optional attribution. Remember to manually add line breaks or use [http://www.mediawiki.org/wiki/Extension:Poem &amp;amp;lt;poem&amp;amp;gt;] for poems.&lt;br /&gt;
&lt;br /&gt;
==TemplateData ==&lt;br /&gt;
&amp;lt;templatedata&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;params&amp;quot;: {&lt;br /&gt;
		&amp;quot;1&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Text&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Text to be quoted&amp;quot;,&lt;br /&gt;
			&amp;quot;example&amp;quot;: &amp;quot;My precious.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: true,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;2&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Citation&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;The citation of the quote&amp;quot;,&lt;br /&gt;
			&amp;quot;example&amp;quot;: &amp;quot;Gollum&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;content&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	&amp;quot;paramOrder&amp;quot;: [&lt;br /&gt;
		&amp;quot;1&amp;quot;,&lt;br /&gt;
		&amp;quot;2&amp;quot;&lt;br /&gt;
	],&lt;br /&gt;
	&amp;quot;format&amp;quot;: &amp;quot;block&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/templatedata&amp;gt;&lt;br /&gt;
[[Category:Utility templates|{{PAGENAME}}]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maegnus</name></author>
	</entry>
	<entry>
		<id>https://classic.pgnrp.com/index.php?title=Template:Button/styles.css&amp;diff=95</id>
		<title>Template:Button/styles.css</title>
		<link rel="alternate" type="text/html" href="https://classic.pgnrp.com/index.php?title=Template:Button/styles.css&amp;diff=95"/>
		<updated>2025-05-21T05:33:32Z</updated>

		<summary type="html">&lt;p&gt;Maegnus: Created page with &amp;quot;/* Important is needed because of weird externa link rules */ .tg-button &amp;gt; a {     border: 1px solid transparent;     border-radius: var(--tg-border-radius-small);     height: 36px;     padding: 0 1rem !important;     color: var(--tg-color-emphasized) !important;     display: flex;     align-items: center;     justify-content: center;     gap: 0.5rem;     line-height: 1;     font-size: var(--tg-font-size-small);     font-weight: var(--tg-font-weight-medium);     text-dec...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Important is needed because of weird externa link rules */&lt;br /&gt;
.tg-button &amp;gt; a {&lt;br /&gt;
    border: 1px solid transparent;&lt;br /&gt;
    border-radius: var(--tg-border-radius-small);&lt;br /&gt;
    height: 36px;&lt;br /&gt;
    padding: 0 1rem !important;&lt;br /&gt;
    color: var(--tg-color-emphasized) !important;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
    gap: 0.5rem;&lt;br /&gt;
    line-height: 1;&lt;br /&gt;
    font-size: var(--tg-font-size-small);&lt;br /&gt;
    font-weight: var(--tg-font-weight-medium);&lt;br /&gt;
    text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-button &amp;gt; a:hover {&lt;br /&gt;
    background-color: var(--background-color-button-quiet--hover) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-button &amp;gt; a:active {&lt;br /&gt;
    background-color: var(--background-color-button-quiet--active) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-button.tg-button--framed &amp;gt; a {&lt;br /&gt;
    border-color: var(--tg-border-color-interactive);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-button.tg-button--icon &amp;gt; a {&lt;br /&gt;
    padding-left: 0.5rem !important;&lt;br /&gt;
    padding-right: 0.5rem !important;&lt;br /&gt;
    font-size: 0;&lt;br /&gt;
    gap: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-button.tg-button--primary &amp;gt; a {&lt;br /&gt;
    color: var(--tg-color-inverted-progressive) !important;&lt;br /&gt;
    background-color: var(--tg-color-progressive) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-button.tg-button--primary &amp;gt; a:hover {&lt;br /&gt;
    background-color: var(--tg-color-progressive--hover) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-button.tg-button--primary &amp;gt; a:active {&lt;br /&gt;
    background-color: var(--tg-color-progressive--active) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-button.tg-button--secondary &amp;gt; a {&lt;br /&gt;
    border-color: var(--tg-color-progressive) !important;&lt;br /&gt;
    color: var(--tg-color-progressive) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-button.tg-button--secondary &amp;gt; a:hover {&lt;br /&gt;
    border-color: var(--tg-color-progressive--hover) !important;&lt;br /&gt;
    background-color: var(--tg-color-progressive--hover) !important;&lt;br /&gt;
    color: var(--tg-color-inverted-progressive) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-button.tg-button--secondary &amp;gt; a:active {&lt;br /&gt;
    border-color: var(--tg-color-progressive--active) !important;&lt;br /&gt;
    background-color: var(--tg-color-progressive--active) !important;&lt;br /&gt;
    color: var(--tg-color-inverted-progressive) !important;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Maegnus</name></author>
	</entry>
	<entry>
		<id>https://classic.pgnrp.com/index.php?title=Module:Transcluder&amp;diff=94</id>
		<title>Module:Transcluder</title>
		<link rel="alternate" type="text/html" href="https://classic.pgnrp.com/index.php?title=Module:Transcluder&amp;diff=94"/>
		<updated>2025-05-21T05:32:46Z</updated>

		<summary type="html">&lt;p&gt;Maegnus: Created page with &amp;quot;-- Module:Transcluder is a general-purpose transclusion engine -- Documentation and master version: https://en.wikipedia.org/wiki/Module:Transcluder -- Authors: User:Sophivorus, User:Certes &amp;amp; others -- License: CC-BY-SA-3.0  local p = {}  -- Helper function to test for truthy and falsy values -- @todo Somehow internationalize it local function truthy(value) 	if not value or value == &amp;#039;&amp;#039; or value == 0 or value == &amp;#039;0&amp;#039; or value == &amp;#039;false&amp;#039; or value == &amp;#039;no&amp;#039; or value == &amp;#039;non&amp;#039; t...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- Module:Transcluder is a general-purpose transclusion engine&lt;br /&gt;
-- Documentation and master version: https://en.wikipedia.org/wiki/Module:Transcluder&lt;br /&gt;
-- Authors: User:Sophivorus, User:Certes &amp;amp; others&lt;br /&gt;
-- License: CC-BY-SA-3.0&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- Helper function to test for truthy and falsy values&lt;br /&gt;
-- @todo Somehow internationalize it&lt;br /&gt;
local function truthy(value)&lt;br /&gt;
	if not value or value == &#039;&#039; or value == 0 or value == &#039;0&#039; or value == &#039;false&#039; or value == &#039;no&#039; or value == &#039;non&#039; then&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	return true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Helper function to match from a list of regular expressions&lt;br /&gt;
-- Like so: match pre..list[1]..post or pre..list[2]..post or ...&lt;br /&gt;
local function matchAny(text, pre, list, post, init)&lt;br /&gt;
	local match = {}&lt;br /&gt;
	for i = 1, #list do&lt;br /&gt;
		match = { mw.ustring.match(text, pre .. list[i] .. post, init) }&lt;br /&gt;
		if match[1] then return unpack(match) end&lt;br /&gt;
	end&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Like matchAny but for Category/File links with less overhead&lt;br /&gt;
local function matchAnyLink(text, list)&lt;br /&gt;
	local match&lt;br /&gt;
	for _, v in ipairs(list) do&lt;br /&gt;
		match = string.match(text, &#039;%[%[%s*&#039; .. v .. &#039;%s*:.*%]%]&#039;)&lt;br /&gt;
		if match then break end&lt;br /&gt;
	end&lt;br /&gt;
	return match&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Helper function to escape a string for use in regexes&lt;br /&gt;
local function escapeString(str)&lt;br /&gt;
	return string.gsub(str, &#039;[%^%$%(%)%.%[%]%*%+%-%?%%]&#039;, &#039;%%%0&#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Helper function to remove a string from a text&lt;br /&gt;
local function removeString(text, str)&lt;br /&gt;
	local pattern = escapeString(str)&lt;br /&gt;
	if #pattern &amp;gt; 9999 then -- strings longer than 10000 bytes can&#039;t be put into regexes&lt;br /&gt;
		pattern = escapeString(mw.ustring.sub(str, 1, 999)) .. &#039;.-&#039; .. escapeString(mw.ustring.sub(str, -999))&lt;br /&gt;
	end&lt;br /&gt;
	return string.gsub(text, pattern, &#039;&#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Helper function to convert a comma-separated list of numbers or min-max ranges into a list of booleans&lt;br /&gt;
-- @param flags Comma-separated list of numbers or min-max ranges, for example &#039;1,3-5&#039;&lt;br /&gt;
-- @return Map from integers to booleans, for example {1=true,2=false,3=true,4=true,5=true}&lt;br /&gt;
-- @return Boolean indicating whether the flags should be treated as a blacklist or not&lt;br /&gt;
local function parseFlags(value)&lt;br /&gt;
	local flags = {}&lt;br /&gt;
	local blacklist = false&lt;br /&gt;
&lt;br /&gt;
	if not value then return nil, false end&lt;br /&gt;
&lt;br /&gt;
	if type(value) == &#039;number&#039; then&lt;br /&gt;
		if value &amp;lt; 0 then&lt;br /&gt;
			value = -value&lt;br /&gt;
			blacklist = true&lt;br /&gt;
		end&lt;br /&gt;
		flags = { [value] = true }&lt;br /&gt;
&lt;br /&gt;
	elseif type(value) == &#039;string&#039; then&lt;br /&gt;
		if string.sub(value, 1, 1) == &#039;-&#039; then&lt;br /&gt;
			blacklist = true&lt;br /&gt;
			value = string.sub(value, 2)&lt;br /&gt;
		end&lt;br /&gt;
		local ranges = mw.text.split(value, &#039;,&#039;) -- split ranges: &#039;1,3-5&#039; to {&#039;1&#039;,&#039;3-5&#039;}&lt;br /&gt;
		for _, range in pairs(ranges) do&lt;br /&gt;
			range = mw.text.trim(range)&lt;br /&gt;
			local min, max = mw.ustring.match(range, &#039;^(%d+)%s*[-–—]%s*(%d+)$&#039;) -- &#039;3-5&#039; to min=3 max=5&lt;br /&gt;
			if not max then min, max = string.match(range, &#039;^((%d+))$&#039;) end -- &#039;1&#039; to min=1 max=1&lt;br /&gt;
			if max then&lt;br /&gt;
				for i = min, max do flags[i] = true end&lt;br /&gt;
			else&lt;br /&gt;
				flags[range] = true -- if we reach this point, the string had the form &#039;a,b,c&#039; rather than &#039;1,2,3&#039;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
	-- List has the form { [1] = false, [2] = true, [&#039;c&#039;] = false }&lt;br /&gt;
	-- Convert it to { [1] = true, [2] = true, [&#039;c&#039;] = true }&lt;br /&gt;
	-- But if ANY value is set to false, treat the list as a blacklist&lt;br /&gt;
	elseif type(value) == &#039;table&#039; then&lt;br /&gt;
		for i, v in pairs(value) do&lt;br /&gt;
			if v == false then blacklist = true end&lt;br /&gt;
			flags[i] = true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return flags, blacklist&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Helper function to see if a value matches any of the given flags&lt;br /&gt;
local function matchFlag(value, flags)&lt;br /&gt;
	if not value then return false end&lt;br /&gt;
	value = tostring(value)&lt;br /&gt;
	local lang = mw.language.getContentLanguage()&lt;br /&gt;
	local lcvalue = lang:lcfirst(value)&lt;br /&gt;
	local ucvalue = lang:ucfirst(value)&lt;br /&gt;
	for flag in pairs(flags) do&lt;br /&gt;
		if value == tostring(flag)&lt;br /&gt;
		or lcvalue == flag&lt;br /&gt;
		or ucvalue == flag&lt;br /&gt;
		or ( not tonumber(flag) and mw.ustring.match(value, flag) ) then&lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Helper function to convert template arguments into an array of options fit for get()&lt;br /&gt;
local function parseArgs(frame)&lt;br /&gt;
	local args = {}&lt;br /&gt;
	for key, value in pairs(frame:getParent().args) do args[key] = value end&lt;br /&gt;
	for key, value in pairs(frame.args) do args[key] = value end -- args from Lua calls have priority over parent args from template&lt;br /&gt;
	return args&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Error handling function&lt;br /&gt;
-- Throws a Lua error or returns an empty string if error reporting is disabled&lt;br /&gt;
local function throwError(key, value)&lt;br /&gt;
	--local TNT = require(&#039;Module:TNT&#039;)&lt;br /&gt;
	--local ok, message = pcall(TNT.format, &#039;I18n/Module:Transcluder.tab&#039;, &#039;error-&#039; .. key, value)&lt;br /&gt;
	--if not ok then message = key end&lt;br /&gt;
	local message = key&lt;br /&gt;
	error(message, 2)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Error handling function&lt;br /&gt;
-- Returns a wiki friendly error or an empty string if error reporting is disabled&lt;br /&gt;
local function getError(key, value)&lt;br /&gt;
	--local TNT = require(&#039;Module:TNT&#039;)&lt;br /&gt;
	--local ok, message = pcall(TNT.format, &#039;I18n/Module:Transcluder.tab&#039;, &#039;error-&#039; .. key, value)&lt;br /&gt;
	--if not ok then message = key end&lt;br /&gt;
	local message = key&lt;br /&gt;
	message = mw.html.create(&#039;div&#039;):addClass(&#039;error&#039;):wikitext(message)&lt;br /&gt;
	return message&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Helper function to get the local name of a namespace and all its aliases&lt;br /&gt;
-- @param name Canonical name of the namespace, for example &#039;File&#039;&lt;br /&gt;
-- @return Local name of the namespace and all aliases, for example {&#039;File&#039;,&#039;Image&#039;,&#039;Archivo&#039;,&#039;Imagen&#039;}&lt;br /&gt;
local function getNamespaces(name)&lt;br /&gt;
	local namespaces = mw.clone(mw.site.namespaces[name].aliases) -- Clone because https://en.wikipedia.org/w/index.php?diff=1056921358&lt;br /&gt;
	table.insert(namespaces, mw.site.namespaces[name].name)&lt;br /&gt;
	table.insert(namespaces, mw.site.namespaces[name].canonicalName)&lt;br /&gt;
	return namespaces&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Get the page wikitext, following redirects&lt;br /&gt;
-- Also returns the page name, or the target page name if a redirect was followed, or false if no page was found&lt;br /&gt;
-- For file pages, returns the content of the file description page&lt;br /&gt;
local function getText(page, noFollow)&lt;br /&gt;
	page = mw.text.decode(page)&lt;br /&gt;
	local title = mw.title.new(page)&lt;br /&gt;
	if not title then return false, false end&lt;br /&gt;
&lt;br /&gt;
	local target = title.redirectTarget&lt;br /&gt;
	if target and not noFollow then title = target end&lt;br /&gt;
&lt;br /&gt;
	local text = title:getContent()&lt;br /&gt;
	if not text then return false, title.prefixedText end&lt;br /&gt;
&lt;br /&gt;
	-- Remove &amp;lt;noinclude&amp;gt; tags&lt;br /&gt;
	text = string.gsub(text, &#039;&amp;lt;[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]&amp;gt;.-&amp;lt;/[Nn][Oo][Ii][Nn][Cc][Ll][Uu][Dd][Ee]&amp;gt;&#039;, &#039;&#039;) -- remove noinclude bits&lt;br /&gt;
&lt;br /&gt;
	-- Keep &amp;lt;onlyinclude&amp;gt; tags&lt;br /&gt;
	if string.find(text, &#039;onlyinclude&#039;) then -- avoid expensive search if possible&lt;br /&gt;
		text = text&lt;br /&gt;
			:gsub(&#039;&amp;lt;/onlyinclude&amp;gt;.-&amp;lt;onlyinclude&amp;gt;&#039;, &#039;&#039;) -- remove text between onlyinclude sections&lt;br /&gt;
			:gsub(&#039;^.-&amp;lt;onlyinclude&amp;gt;&#039;, &#039;&#039;) -- remove text before first onlyinclude section&lt;br /&gt;
			:gsub(&#039;&amp;lt;/onlyinclude&amp;gt;.*&#039;, &#039;&#039;) -- remove text after last onlyinclude section&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return text, title.prefixedText&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Get the requested files from the given wikitext.&lt;br /&gt;
-- @param text Required. Wikitext to parse.&lt;br /&gt;
-- @param flags Range of files to return, for example 2 or &#039;1,3-5&#039;. Omit to return all files.&lt;br /&gt;
-- @return Sequence of strings containing the wikitext of the requested files.&lt;br /&gt;
-- @return Original wikitext minus requested files.&lt;br /&gt;
local function getFiles(text, flags)&lt;br /&gt;
	local files = {}&lt;br /&gt;
	local flags, blacklist = parseFlags(flags)&lt;br /&gt;
	local fileNamespaces = getNamespaces(&#039;File&#039;)&lt;br /&gt;
	local name&lt;br /&gt;
	local count = 0&lt;br /&gt;
	for file in string.gmatch(text, &#039;%b[]&#039;) do&lt;br /&gt;
		if matchAnyLink(file, fileNamespaces) then&lt;br /&gt;
			name = string.match(file, &#039;%[%[[^:]-:([^]|]+)&#039;)&lt;br /&gt;
			count = count + 1&lt;br /&gt;
			if not blacklist and ( not flags or flags[count] or matchFlag(name, flags) )&lt;br /&gt;
			or blacklist and flags and not flags[count] and not matchFlag(name, flags) then&lt;br /&gt;
				table.insert(files, file)&lt;br /&gt;
			else&lt;br /&gt;
				text = removeString(text, file)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return files, text&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Get the requested tables from the given wikitext.&lt;br /&gt;
-- @param text Required. Wikitext to parse.&lt;br /&gt;
-- @param flags Range of tables to return, for example 2 or &#039;1,3-5&#039;. Omit to return all tables.&lt;br /&gt;
-- @return Sequence of strings containing the wikitext of the requested tables.&lt;br /&gt;
-- @return Original wikitext minus requested tables.&lt;br /&gt;
local function getTables(text, flags)&lt;br /&gt;
	local tables = {}&lt;br /&gt;
	local flags, blacklist = parseFlags(flags)&lt;br /&gt;
	local id&lt;br /&gt;
	local count = 0&lt;br /&gt;
	for t in string.gmatch(&#039;\n&#039; .. text, &#039;\n%b{}&#039;) do&lt;br /&gt;
		if string.sub(t, 1, 3) == &#039;\n{|&#039; then&lt;br /&gt;
			id = string.match(t, &#039;\n{|[^\n]-id%s*=%s*[&amp;quot;\&#039;]?([^&amp;quot;\&#039;\n]+)[&amp;quot;\&#039;]?[^\n]*\n&#039;)&lt;br /&gt;
			count = count + 1&lt;br /&gt;
			if not blacklist and ( not flags or flags[count] or flags[id] )&lt;br /&gt;
			or blacklist and flags and not flags[count] and not flags[id] then&lt;br /&gt;
				table.insert(tables, t)&lt;br /&gt;
			else&lt;br /&gt;
				text = removeString(text, t)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return tables, text&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Get the requested templates from the given wikitext.&lt;br /&gt;
-- @param text Required. Wikitext to parse.&lt;br /&gt;
-- @param flags Range of templates to return, for example 2 or &#039;1,3-5&#039;. Omit to return all templates.&lt;br /&gt;
-- @return Sequence of strings containing the wikitext of the requested templates.&lt;br /&gt;
-- @return Original wikitext minus requested templates.&lt;br /&gt;
local function getTemplates(text, flags)&lt;br /&gt;
	local templates = {}&lt;br /&gt;
	local flags, blacklist = parseFlags(flags)&lt;br /&gt;
	local name&lt;br /&gt;
	local count = 0&lt;br /&gt;
	for template in string.gmatch(text, &#039;{%b{}}&#039;) do&lt;br /&gt;
		if string.sub(template, 1, 3) ~= &#039;{{#&#039; then -- skip parser functions like #if&lt;br /&gt;
			name = mw.text.trim( string.match(template, &#039;{{([^}|\n]+)&#039;) or &amp;quot;&amp;quot; ) -- get the template name&lt;br /&gt;
			if name ~= &amp;quot;&amp;quot; then&lt;br /&gt;
				count = count + 1&lt;br /&gt;
				if not blacklist and ( not flags or flags[count] or matchFlag(name, flags) )&lt;br /&gt;
				or blacklist and flags and not flags[count] and not matchFlag(name, flags) then&lt;br /&gt;
					table.insert(templates, template)&lt;br /&gt;
				else&lt;br /&gt;
					text = removeString(text, template)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return templates, text&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Get the requested template parameters from the given wikitext.&lt;br /&gt;
-- @param text Required. Wikitext to parse.&lt;br /&gt;
-- @param flags Range of parameters to return, for example 2 or &#039;1,3-5&#039;. Omit to return all parameters.&lt;br /&gt;
-- @return Map from parameter name to value, NOT IN THE ORIGINAL ORDER&lt;br /&gt;
-- @return Original wikitext minus requested parameters.&lt;br /&gt;
-- @return Order in which the parameters were parsed.&lt;br /&gt;
local function getParameters(text, flags)&lt;br /&gt;
	local parameters, parameterOrder = {}, {}&lt;br /&gt;
	local flags, blacklist = parseFlags(flags)&lt;br /&gt;
	local params, count, parts, key, value&lt;br /&gt;
	for template in string.gmatch(text, &#039;{%b{}}&#039;) do&lt;br /&gt;
		params = string.match(template, &#039;{{[^|}]-|(.*)}}&#039;)&lt;br /&gt;
		if params then&lt;br /&gt;
			count = 0&lt;br /&gt;
			-- Temporarily replace pipes in subtemplates and links to avoid chaos&lt;br /&gt;
			for subtemplate in string.gmatch(params, &#039;{%b{}}&#039;) do&lt;br /&gt;
				params = string.gsub(params, escapeString(subtemplate), string.gsub(subtemplate, &amp;quot;.&amp;quot;, {[&amp;quot;%&amp;quot;]=&amp;quot;%%&amp;quot;, [&amp;quot;|&amp;quot;]=&amp;quot;@@:@@&amp;quot;, [&amp;quot;=&amp;quot;]=&amp;quot;@@_@@&amp;quot;}) )&lt;br /&gt;
			end&lt;br /&gt;
			for link in string.gmatch(params, &#039;%b[]&#039;) do&lt;br /&gt;
				params = string.gsub(params, escapeString(link), string.gsub(link, &amp;quot;.&amp;quot;, {[&amp;quot;%&amp;quot;]=&amp;quot;%%&amp;quot;, [&amp;quot;|&amp;quot;]=&amp;quot;@@:@@&amp;quot;, [&amp;quot;=&amp;quot;]=&amp;quot;@@_@@&amp;quot;}) )&lt;br /&gt;
			end&lt;br /&gt;
			for parameter in mw.text.gsplit(params, &#039;|&#039;) do&lt;br /&gt;
				parts = mw.text.split(parameter, &#039;=&#039;)&lt;br /&gt;
				key = mw.text.trim(parts[1])&lt;br /&gt;
				if #parts == 1 then&lt;br /&gt;
					value = key&lt;br /&gt;
					count = count + 1&lt;br /&gt;
					key = count&lt;br /&gt;
				else&lt;br /&gt;
					value = mw.text.trim(table.concat(parts, &#039;=&#039;, 2))&lt;br /&gt;
				end&lt;br /&gt;
				value = string.gsub(string.gsub(value, &#039;@@:@@&#039;, &#039;|&#039;), &#039;@@_@@&#039;, &#039;=&#039;)&lt;br /&gt;
				if not blacklist and ( not flags or matchFlag(key, flags) )&lt;br /&gt;
				or blacklist and flags and not matchFlag(key, flags) then&lt;br /&gt;
					table.insert(parameterOrder, key)&lt;br /&gt;
					parameters[key] = value&lt;br /&gt;
				else&lt;br /&gt;
					text = removeString(text, parameter)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return parameters, text, parameterOrder&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Get the requested lists from the given wikitext.&lt;br /&gt;
-- @param text Required. Wikitext to parse.&lt;br /&gt;
-- @param flags Range of lists to return, for example 2 or &#039;1,3-5&#039;. Omit to return all lists.&lt;br /&gt;
-- @return Sequence of strings containing the wikitext of the requested lists.&lt;br /&gt;
-- @return Original wikitext minus requested lists.&lt;br /&gt;
local function getLists(text, flags)&lt;br /&gt;
	local lists = {}&lt;br /&gt;
	local flags, blacklist = parseFlags(flags)&lt;br /&gt;
	local count = 0&lt;br /&gt;
	for list in string.gmatch(&#039;\n&#039; .. text .. &#039;\n\n&#039;, &#039;\n([*#].-)\n[^*#]&#039;) do&lt;br /&gt;
		count = count + 1&lt;br /&gt;
		if not blacklist and ( not flags or flags[count] )&lt;br /&gt;
		or blacklist and flags and not flags[count] then&lt;br /&gt;
			table.insert(lists, list)&lt;br /&gt;
		else&lt;br /&gt;
			text = removeString(text, list)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return lists, text&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Get the requested paragraphs from the given wikitext.&lt;br /&gt;
-- @param text Required. Wikitext to parse.&lt;br /&gt;
-- @param flags Range of paragraphs to return, for example 2 or &#039;1,3-5&#039;. Omit to return all paragraphs.&lt;br /&gt;
-- @return Sequence of strings containing the wikitext of the requested paragraphs.&lt;br /&gt;
-- @return Original wikitext minus requested paragraphs.&lt;br /&gt;
local function getParagraphs(text, flags)&lt;br /&gt;
	local paragraphs = {}&lt;br /&gt;
	local flags, blacklist = parseFlags(flags)&lt;br /&gt;
&lt;br /&gt;
	-- Remove non-paragraphs&lt;br /&gt;
	local elements&lt;br /&gt;
	local temp = &#039;\n&#039; .. text .. &#039;\n&#039;&lt;br /&gt;
	elements, temp = getLists(temp, 0) -- remove lists&lt;br /&gt;
	elements, temp = getFiles(temp, 0) -- remove files&lt;br /&gt;
	temp = mw.text.trim((temp&lt;br /&gt;
		:gsub(&#039;\n%b{} *\n&#039;, &#039;\n%0\n&#039;) -- add spacing between tables and block templates&lt;br /&gt;
		:gsub(&#039;\n%b{} *\n&#039;, &#039;\n&#039;) -- remove tables and block templates&lt;br /&gt;
		:gsub(&#039;\n==+[^=]+==+ *\n&#039;, &#039;\n&#039;) -- remove section titles&lt;br /&gt;
	))&lt;br /&gt;
&lt;br /&gt;
	-- Assume that anything remaining is a paragraph&lt;br /&gt;
	local count = 0&lt;br /&gt;
	for paragraph in mw.text.gsplit(temp, &#039;\n\n+&#039;) do&lt;br /&gt;
		if mw.text.trim(paragraph) ~= &#039;&#039; then&lt;br /&gt;
			count = count + 1&lt;br /&gt;
			if not blacklist and ( not flags or flags[count] )&lt;br /&gt;
			or blacklist and flags and not flags[count] then&lt;br /&gt;
				table.insert(paragraphs, paragraph)&lt;br /&gt;
			else&lt;br /&gt;
				text = removeString(text, paragraph)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return paragraphs, text&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Get the requested categories from the given wikitext.&lt;br /&gt;
-- @param text Required. Wikitext to parse.&lt;br /&gt;
-- @param flags Range of categories to return, for example 2 or &#039;1,3-5&#039;. Omit to return all categories.&lt;br /&gt;
-- @return Sequence of strings containing the wikitext of the requested categories.&lt;br /&gt;
-- @return Original wikitext minus requested categories.&lt;br /&gt;
local function getCategories(text, flags)&lt;br /&gt;
	local categories = {}&lt;br /&gt;
	local flags, blacklist = parseFlags(flags)&lt;br /&gt;
	local categoryNamespaces = getNamespaces(&#039;Category&#039;)&lt;br /&gt;
	local name&lt;br /&gt;
	local count = 0&lt;br /&gt;
	for category in string.gmatch(text, &#039;%b[]&#039;) do&lt;br /&gt;
		if matchAnyLink(category, categoryNamespaces) then&lt;br /&gt;
			name = string.match(category, &#039;%[%[[^:]-:([^]|]+)&#039;)&lt;br /&gt;
			count = count + 1&lt;br /&gt;
			if not blacklist and ( not flags or flags[count] or matchFlag(name, flags) )&lt;br /&gt;
			or blacklist and flags and not flags[count] and not matchFlag(name, flags) then&lt;br /&gt;
				table.insert(categories, category)&lt;br /&gt;
			else&lt;br /&gt;
				text = removeString(text, category)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return categories, text&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Get the requested references from the given wikitext.&lt;br /&gt;
-- @param text Required. Wikitext to parse.&lt;br /&gt;
-- @param flags Range of references to return, for example 2 or &#039;1,3-5&#039;. Omit to return all references.&lt;br /&gt;
-- @return Sequence of strings containing the wikitext of the requested references.&lt;br /&gt;
-- @return Original wikitext minus requested references.&lt;br /&gt;
local function getReferences(text, flags)&lt;br /&gt;
	local references = {}&lt;br /&gt;
&lt;br /&gt;
	-- Remove all references, including citations, when 0 references are requested&lt;br /&gt;
	-- This is kind of hacky but currently necessary because the rest of the code&lt;br /&gt;
	-- doesn&#039;t remove citations like &amp;lt;ref name=&amp;quot;Foo&amp;quot; /&amp;gt; if Foo is defined elsewhere&lt;br /&gt;
	if flags and not truthy(flags) then&lt;br /&gt;
		text = string.gsub(text, &#039;&amp;lt;%s*[Rr][Ee][Ff][^&amp;gt;/]*&amp;gt;.-&amp;lt;%s*/%s*[Rr][Ee][Ff]%s*&amp;gt;&#039;, &#039;&#039;)&lt;br /&gt;
		text = string.gsub(text, &#039;&amp;lt;%s*[Rr][Ee][Ff][^&amp;gt;/]*/%s*&amp;gt;&#039;, &#039;&#039;)&lt;br /&gt;
		return references, text&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local flags, blacklist = parseFlags(flags)&lt;br /&gt;
	local name&lt;br /&gt;
	local count = 0&lt;br /&gt;
	for reference in string.gmatch(text, &#039;&amp;lt;%s*[Rr][Ee][Ff][^&amp;gt;/]*&amp;gt;.-&amp;lt;%s*/%s*[Rr][Ee][Ff]%s*&amp;gt;&#039;) do&lt;br /&gt;
		name = string.match(reference, &#039;&amp;lt;%s*[Rr][Ee][Ff][^&amp;gt;]*name%s*=%s*[&amp;quot;\&#039;]?([^&amp;quot;\&#039;&amp;gt;/]+)[&amp;quot;\&#039;]?[^&amp;gt;]*%s*&amp;gt;&#039;)&lt;br /&gt;
		count = count + 1&lt;br /&gt;
		if not blacklist and ( not flags or flags[count] or matchFlag(name, flags) )&lt;br /&gt;
		or blacklist and flags and not flags[count] and not matchFlag(name, flags) then&lt;br /&gt;
			table.insert(references, reference)&lt;br /&gt;
		else&lt;br /&gt;
			text = removeString(text, reference)&lt;br /&gt;
			if name then&lt;br /&gt;
				for citation in string.gmatch(text, &#039;&amp;lt;%s*[Rr][Ee][Ff][^&amp;gt;]*name%s*=%s*[&amp;quot;\&#039;]?&#039; .. escapeString(name) .. &#039;[&amp;quot;\&#039;]?[^/&amp;gt;]*/%s*&amp;gt;&#039;) do&lt;br /&gt;
					text = removeString(text, citation)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return references, text&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Get the lead section from the given wikitext.&lt;br /&gt;
-- @param text Required. Wikitext to parse.&lt;br /&gt;
-- @return Wikitext of the lead section.&lt;br /&gt;
local function getLead(text)&lt;br /&gt;
	text = string.gsub(&#039;\n&#039; .. text, &#039;\n==.*&#039;, &#039;&#039;)&lt;br /&gt;
	text = mw.text.trim(text)&lt;br /&gt;
	if not text then return throwError(&#039;lead-empty&#039;) end&lt;br /&gt;
	return text&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Get the requested sections from the given wikitext.&lt;br /&gt;
-- @param text Required. Wikitext to parse.&lt;br /&gt;
-- @param flags Range of sections to return, for example 2 or &#039;1,3-5&#039;. Omit to return all sections.&lt;br /&gt;
-- @return Sequence of strings containing the wikitext of the requested sections.&lt;br /&gt;
-- @return Original wikitext minus requested sections.&lt;br /&gt;
local function getSections(text, flags)&lt;br /&gt;
	local sections = {}&lt;br /&gt;
	local flags, blacklist = parseFlags(flags)&lt;br /&gt;
	local count = 0&lt;br /&gt;
	local prefix, section, suffix&lt;br /&gt;
	for title in string.gmatch(&#039;\n&#039; .. text .. &#039;\n==&#039;, &#039;\n==+%s*([^=]+)%s*==+&#039;) do&lt;br /&gt;
		count = count + 1&lt;br /&gt;
		prefix, section, suffix = string.match(&#039;\n&#039; .. text .. &#039;\n==&#039;, &#039;\n()==+%s*&#039; .. escapeString(title) .. &#039;%s*==+(.-)()\n==&#039;)&lt;br /&gt;
		if not blacklist and ( not flags or flags[count] or matchFlag(title, flags) )&lt;br /&gt;
		or blacklist and flags and not flags[count] and not matchFlag(title, flags) then&lt;br /&gt;
			sections[title] = section&lt;br /&gt;
		else&lt;br /&gt;
			text = string.sub(text, 1, prefix) .. string.sub(text, suffix)&lt;br /&gt;
			text = string.gsub(text, &#039;\n?==$&#039;, &#039;&#039;) -- remove the trailing \n==&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return sections, text&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Get the requested section or &amp;lt;section&amp;gt; tag from the given wikitext (including subsections).&lt;br /&gt;
-- @param text Required. Wikitext to parse.&lt;br /&gt;
-- @param section Required. Title of the section to get (in wikitext), for example &#039;History&#039; or &#039;History of [[Athens]]&#039;.&lt;br /&gt;
-- @return Wikitext of the requested section.&lt;br /&gt;
local function getSection(text, section)&lt;br /&gt;
	section = mw.text.trim(section)&lt;br /&gt;
	local escapedSection = escapeString(section)&lt;br /&gt;
	-- First check if the section title matches a &amp;lt;section&amp;gt; tag&lt;br /&gt;
	if string.find(text, &#039;&amp;lt;%s*[Ss]ection%s+begin%s*=%s*[&amp;quot;\&#039;]?%s*&#039; .. escapedSection .. &#039;%s*[&amp;quot;\&#039;]?%s*/&amp;gt;&#039;) then -- avoid expensive search if possible&lt;br /&gt;
		text = mw.text.trim((text&lt;br /&gt;
			:gsub(&#039;&amp;lt;%s*[Ss]ection%s+end=%s*[&amp;quot;\&#039;]?%s*&#039;.. escapedSection ..&#039;%s*[&amp;quot;\&#039;]?%s*/&amp;gt;.-&amp;lt;%s*[Ss]ection%s+begin%s*=%s*[&amp;quot;\&#039;]?%s*&#039; .. escapedSection .. &#039;%s*[&amp;quot;\&#039;]?%s*/&amp;gt;&#039;, &#039;&#039;) -- remove text between section tags&lt;br /&gt;
			:gsub(&#039;^.-&amp;lt;%s*[Ss]ection%s+begin%s*=%s*[&amp;quot;\&#039;]?%s*&#039; .. escapedSection .. &#039;%s*[&amp;quot;\&#039;]?%s*/&amp;gt;&#039;, &#039;&#039;) -- remove text before first section tag&lt;br /&gt;
			:gsub(&#039;&amp;lt;%s*[Ss]ection%s+end=%s*[&amp;quot;\&#039;]?%s*&#039;.. escapedSection ..&#039;%s*[&amp;quot;\&#039;]?%s*/&amp;gt;.*&#039;, &#039;&#039;) -- remove text after last section tag&lt;br /&gt;
		))&lt;br /&gt;
		if text == &#039;&#039; then return throwError(&#039;section-tag-empty&#039;, section) end&lt;br /&gt;
		return text&lt;br /&gt;
	end&lt;br /&gt;
	local level, text = string.match(&#039;\n&#039; .. text .. &#039;\n&#039;, &#039;\n(==+)%s*&#039; .. escapedSection .. &#039;%s*==.-\n(.*)&#039;)&lt;br /&gt;
	if not text then return throwError(&#039;section-not-found&#039;, section) end&lt;br /&gt;
	local nextSection = &#039;\n==&#039; .. string.rep(&#039;=?&#039;, #level - 2) .. &#039;[^=].*&#039;&lt;br /&gt;
	text = string.gsub(text, nextSection, &#039;&#039;) -- remove later sections with headings at this level or higher&lt;br /&gt;
	text = mw.text.trim(text)&lt;br /&gt;
	if text == &#039;&#039; then return throwError(&#039;section-empty&#039;, section) end&lt;br /&gt;
	return text&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Replace the first call to each reference defined outside of the text for the full reference, to prevent undefined references&lt;br /&gt;
-- Then prefix the page title to the reference names to prevent conflicts&lt;br /&gt;
-- that is, replace &amp;lt;ref name=&amp;quot;Foo&amp;quot;&amp;gt; for &amp;lt;ref name=&amp;quot;Title of the article Foo&amp;quot;&amp;gt;&lt;br /&gt;
-- and also &amp;lt;ref name=&amp;quot;Foo&amp;quot; /&amp;gt; for &amp;lt;ref name=&amp;quot;Title of the article Foo&amp;quot; /&amp;gt;&lt;br /&gt;
-- also remove reference groups: &amp;lt;ref name=&amp;quot;Foo&amp;quot; group=&amp;quot;Bar&amp;quot;&amp;gt; for &amp;lt;ref name=&amp;quot;Title of the article Foo&amp;quot;&amp;gt;&lt;br /&gt;
-- and &amp;lt;ref group=&amp;quot;Bar&amp;quot;&amp;gt; for &amp;lt;ref&amp;gt;&lt;br /&gt;
-- @todo The current regex may fail in cases with both kinds of quotes, like &amp;lt;ref name=&amp;quot;Darwin&#039;s book&amp;quot;&amp;gt;&lt;br /&gt;
local function fixReferences(text, page, full)&lt;br /&gt;
	if not full then full = getText(page) end&lt;br /&gt;
	local refNames = {}&lt;br /&gt;
	local refName&lt;br /&gt;
	local refBody&lt;br /&gt;
	local position = 1&lt;br /&gt;
	while position &amp;lt; mw.ustring.len(text) do&lt;br /&gt;
		refName, position = mw.ustring.match(text, &#039;&amp;lt;%s*[Rr][Ee][Ff][^&amp;gt;]*name%s*=%s*[&amp;quot;\&#039;]?([^&amp;quot;\&#039;&amp;gt;]+)[&amp;quot;\&#039;]?[^&amp;gt;]*/%s*&amp;gt;()&#039;, position)&lt;br /&gt;
		if refName then&lt;br /&gt;
			refName = mw.text.trim(refName)&lt;br /&gt;
			if not refNames[refName] then -- make sure we process each ref name only once&lt;br /&gt;
				table.insert(refNames, refName)&lt;br /&gt;
				refName = escapeString(refName)&lt;br /&gt;
				refBody = mw.ustring.match(text, &#039;&amp;lt;%s*[Rr][Ee][Ff][^&amp;gt;]*name%s*=%s*[&amp;quot;\&#039;]?%s*&#039; .. refName .. &#039;%s*[&amp;quot;\&#039;]?[^&amp;gt;/]*&amp;gt;.-&amp;lt;%s*/%s*[Rr][Ee][Ff]%s*&amp;gt;&#039;)&lt;br /&gt;
				if not refBody then -- the ref body is not in the excerpt&lt;br /&gt;
					refBody = mw.ustring.match(full, &#039;&amp;lt;%s*[Rr][Ee][Ff][^&amp;gt;]*name%s*=%s*[&amp;quot;\&#039;]?%s*&#039; .. refName .. &#039;%s*[&amp;quot;\&#039;]?[^/&amp;gt;]*&amp;gt;.-&amp;lt;%s*/%s*[Rr][Ee][Ff]%s*&amp;gt;&#039;)&lt;br /&gt;
					if refBody then -- the ref body was found elsewhere&lt;br /&gt;
						text = mw.ustring.gsub(text, &#039;&amp;lt;%s*[Rr][Ee][Ff][^&amp;gt;]*name%s*=%s*[&amp;quot;\&#039;]?%s*&#039; .. refName .. &#039;%s*[&amp;quot;\&#039;]?[^&amp;gt;]*/?%s*&amp;gt;&#039;, mw.ustring.gsub(refBody, &#039;%%&#039;, &#039;%%%%&#039;), 1)&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			position = mw.ustring.len(text)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	page = string.gsub(page, &#039;&amp;quot;&#039;, &#039;&#039;) -- remove any quotation marks from the page title&lt;br /&gt;
	text = mw.ustring.gsub(text, &#039;&amp;lt;%s*[Rr][Ee][Ff][^&amp;gt;]*name%s*=%s*[&amp;quot;\&#039;]?([^&amp;quot;\&#039;&amp;gt;/]+)[&amp;quot;\&#039;]?[^&amp;gt;/]*(/?)%s*&amp;gt;&#039;, &#039;&amp;lt;ref name=&amp;quot;&#039; .. page .. &#039; %1&amp;quot;%2&amp;gt;&#039;)&lt;br /&gt;
	text = mw.ustring.gsub(text, &#039;&amp;lt;%s*[Rr][Ee][Ff]%s*group%s*=%s*[&amp;quot;\&#039;]?[^&amp;quot;\&#039;&amp;gt;/]+[&amp;quot;\&#039;]%s*&amp;gt;&#039;, &#039;&amp;lt;ref&amp;gt;&#039;)&lt;br /&gt;
	return text&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Replace the bold title or synonym near the start of the page by a link to the page&lt;br /&gt;
local function linkBold(text, page)&lt;br /&gt;
	local lang = mw.language.getContentLanguage()&lt;br /&gt;
	local position = mw.ustring.find(text, &amp;quot;&#039;&#039;&#039;&amp;quot; .. lang:ucfirst(page) .. &amp;quot;&#039;&#039;&#039;&amp;quot;, 1, true) -- look for &amp;quot;&#039;&#039;&#039;Foo&#039;&#039;&#039; is...&amp;quot; (uc) or &amp;quot;A &#039;&#039;&#039;foo&#039;&#039;&#039; is...&amp;quot; (lc)&lt;br /&gt;
		or mw.ustring.find(text, &amp;quot;&#039;&#039;&#039;&amp;quot; .. lang:lcfirst(page) .. &amp;quot;&#039;&#039;&#039;&amp;quot;, 1, true) -- plain search: special characters in page represent themselves&lt;br /&gt;
	if position then&lt;br /&gt;
		local length = mw.ustring.len(page)&lt;br /&gt;
		text = mw.ustring.sub(text, 1, position + 2) .. &amp;quot;[[&amp;quot; .. mw.ustring.sub(text, position + 3, position + length + 2) .. &amp;quot;]]&amp;quot; .. mw.ustring.sub(text, position + length + 3, -1) -- link it&lt;br /&gt;
	else -- look for anything unlinked in bold, assumed to be a synonym of the title (e.g. a person&#039;s birth name)&lt;br /&gt;
		text = mw.ustring.gsub(text, &amp;quot;()&#039;&#039;&#039;(.-&#039;*)&#039;&#039;&#039;&amp;quot;, function(a, b)&lt;br /&gt;
			if not mw.ustring.find(b, &amp;quot;%[&amp;quot;) and not mw.ustring.find(b, &amp;quot;%{&amp;quot;) then -- if not wikilinked or some weird template&lt;br /&gt;
				return &amp;quot;&#039;&#039;&#039;[[&amp;quot; .. page .. &amp;quot;|&amp;quot; .. b .. &amp;quot;]]&#039;&#039;&#039;&amp;quot; -- replace &#039;&#039;&#039;Foo&#039;&#039;&#039; by &#039;&#039;&#039;[[page|Foo]]&#039;&#039;&#039;&lt;br /&gt;
			else&lt;br /&gt;
				return nil -- instruct gsub to make no change&lt;br /&gt;
			end&lt;br /&gt;
		end, 1) -- &amp;quot;end&amp;quot; here terminates the anonymous replacement function(a, b) passed to gsub&lt;br /&gt;
	end&lt;br /&gt;
	return text&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Remove non-free files.&lt;br /&gt;
-- @param text Required. Wikitext to clean.&lt;br /&gt;
-- @return Clean wikitext.&lt;br /&gt;
local function removeNonFreeFiles(text)&lt;br /&gt;
	local fileNamespaces = getNamespaces(&#039;File&#039;)&lt;br /&gt;
	local fileName&lt;br /&gt;
	local fileDescription&lt;br /&gt;
	local frame = mw.getCurrentFrame()&lt;br /&gt;
	for file in string.gmatch(text, &#039;%b[]&#039;) do&lt;br /&gt;
		if matchAnyLink(file, fileNamespaces) then&lt;br /&gt;
			fileName = &#039;File:&#039; .. string.match(file, &#039;%[%[[^:]-:([^]|]+)&#039;)&lt;br /&gt;
			fileDescription, fileName = getText(fileName)&lt;br /&gt;
			if fileName then&lt;br /&gt;
				if not fileDescription or fileDescription == &#039;&#039; then&lt;br /&gt;
					fileDescription = frame:preprocess(&#039;{{&#039; .. fileName .. &#039;}}&#039;) -- try Commons&lt;br /&gt;
				end&lt;br /&gt;
				if fileDescription and string.match(fileDescription, &#039;[Nn]on%-free&#039;) then&lt;br /&gt;
					text = removeString(text, file)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return text&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Remove any self links&lt;br /&gt;
local function removeSelfLinks(text)&lt;br /&gt;
	local lang = mw.language.getContentLanguage()&lt;br /&gt;
	local page = escapeString(mw.title.getCurrentTitle().prefixedText)&lt;br /&gt;
	local ucpage = lang:ucfirst(page)&lt;br /&gt;
	local lcpage = lang:lcfirst(page)&lt;br /&gt;
	text = text&lt;br /&gt;
		:gsub(&#039;%[%[(&#039; .. ucpage .. &#039;)%]%]&#039;, &#039;%1&#039;)&lt;br /&gt;
		:gsub(&#039;%[%[(&#039; .. lcpage .. &#039;)%]%]&#039;, &#039;%1&#039;)&lt;br /&gt;
		:gsub(&#039;%[%[&#039; .. ucpage .. &#039;|([^]]+)%]%]&#039;, &#039;%1&#039;)&lt;br /&gt;
		:gsub(&#039;%[%[&#039; .. lcpage .. &#039;|([^]]+)%]%]&#039;, &#039;%1&#039;)&lt;br /&gt;
	return text&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Remove all wikilinks&lt;br /&gt;
local function removeLinks(text)&lt;br /&gt;
	text = text&lt;br /&gt;
		:gsub(&#039;%[%[[^%]|]+|([^]]+)%]%]&#039;, &#039;%1&#039;)&lt;br /&gt;
		:gsub(&#039;%[%[([^]]+)%]%]&#039;, &#039;%1&#039;)&lt;br /&gt;
		:gsub(&#039;%[[^ ]+ ([^]]+)%]&#039;, &#039;%1&#039;)&lt;br /&gt;
		:gsub(&#039;%[([^]]+)%]&#039;, &#039;%1&#039;)&lt;br /&gt;
	return text&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Remove HTML comments&lt;br /&gt;
local function removeComments(text)&lt;br /&gt;
	text = string.gsub(text, &#039;&amp;lt;!%-%-.-%-%-&amp;gt;&#039;, &#039;&#039;)&lt;br /&gt;
	return text&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Remove behavior switches, such as __NOTOC__&lt;br /&gt;
local function removeBehaviorSwitches(text)&lt;br /&gt;
	text = string.gsub(text, &#039;__[A-Z]+__&#039;, &#039;&#039;)&lt;br /&gt;
	return text&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Remove bold text&lt;br /&gt;
local function removeBold(text)&lt;br /&gt;
	text = string.gsub(text, &amp;quot;&#039;&#039;&#039;&amp;quot;, &#039;&#039;)&lt;br /&gt;
	return text&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Main function for modules&lt;br /&gt;
local function get(page, options)&lt;br /&gt;
	if not options then options = {} end&lt;br /&gt;
&lt;br /&gt;
	-- Make sure the page exists&lt;br /&gt;
	if not page then return throwError(&#039;no-page&#039;) end&lt;br /&gt;
	page = mw.text.trim(page)&lt;br /&gt;
	page = mw.text.decode(page)&lt;br /&gt;
	if page == &#039;&#039; then return throwError(&#039;no-page&#039;) end&lt;br /&gt;
	local page, hash, section = string.match(page, &#039;([^#]+)(#?)(.*)&#039;)&lt;br /&gt;
	local text, temp = getText(page, options.noFollow)&lt;br /&gt;
	if not temp then return throwError(&#039;invalid-title&#039;, page) end&lt;br /&gt;
	page = temp&lt;br /&gt;
	if not text then return throwError(&#039;page-not-found&#039;, page) end&lt;br /&gt;
	local full = text -- save the full text for fixReferences below&lt;br /&gt;
&lt;br /&gt;
	-- Get the requested section&lt;br /&gt;
	if truthy(section) then&lt;br /&gt;
		text = getSection(text, section)&lt;br /&gt;
	elseif truthy(hash) then&lt;br /&gt;
		text = getLead(text)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Keep only the requested elements&lt;br /&gt;
	local elements&lt;br /&gt;
	if options.only then&lt;br /&gt;
		if options.only == &#039;sections&#039; then elements = getSections(text, options.sections) end&lt;br /&gt;
		if options.only == &#039;lists&#039; then elements = getLists(text, options.lists) end&lt;br /&gt;
		if options.only == &#039;files&#039; then elements = getFiles(text, options.files) end&lt;br /&gt;
		if options.only == &#039;tables&#039; then elements = getTables(text, options.tables) end&lt;br /&gt;
		if options.only == &#039;templates&#039; then elements = getTemplates(text, options.templates) end&lt;br /&gt;
		if options.only == &#039;parameters&#039; then elements = getParameters(text, options.parameters) end&lt;br /&gt;
		if options.only == &#039;paragraphs&#039; then elements = getParagraphs(text, options.paragraphs) end&lt;br /&gt;
		if options.only == &#039;categories&#039; then elements = getCategories(text, options.categories) end&lt;br /&gt;
		if options.only == &#039;references&#039; then elements = getReferences(text, options.references) end&lt;br /&gt;
		text = &#039;&#039;&lt;br /&gt;
		if elements then&lt;br /&gt;
			for key, element in pairs(elements) do&lt;br /&gt;
				text = text .. &#039;\n&#039; .. element .. &#039;\n&#039;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Filter the requested elements&lt;br /&gt;
	if options.sections and options.only ~= &#039;sections&#039; then elements, text = getSections(text, options.sections) end&lt;br /&gt;
	if options.lists and options.only ~= &#039;lists&#039; then elements, text = getLists(text, options.lists) end&lt;br /&gt;
	if options.files and options.only ~= &#039;files&#039; then elements, text = getFiles(text, options.files) end&lt;br /&gt;
	if options.tables and options.only ~= &#039;tables&#039; then elements, text = getTables(text, options.tables) end&lt;br /&gt;
	if options.templates and options.only ~= &#039;templates&#039; then elements, text = getTemplates(text, options.templates) end&lt;br /&gt;
	if options.parameters and options.only ~= &#039;parameters&#039; then elements, text = getParameters(text, options.parameters) end&lt;br /&gt;
	if options.paragraphs and options.only ~= &#039;paragraphs&#039; then elements, text = getParagraphs(text, options.paragraphs) end&lt;br /&gt;
	if options.categories and options.only ~= &#039;categories&#039; then elements, text = getCategories(text, options.categories) end&lt;br /&gt;
	if options.references and options.only ~= &#039;references&#039; then elements, text = getReferences(text, options.references) end&lt;br /&gt;
&lt;br /&gt;
	-- Misc options&lt;br /&gt;
	if truthy(options.fixReferences) then text = fixReferences(text, page, full) end&lt;br /&gt;
	if truthy(options.linkBold) and not truthy(section) then text = linkBold(text, page) end&lt;br /&gt;
	if truthy(options.noBold) then text = removeBold(text) end&lt;br /&gt;
	if truthy(options.noLinks) then text = removeLinks(text) end&lt;br /&gt;
	if truthy(options.noSelfLinks) then text = removeSelfLinks(text) end&lt;br /&gt;
	if truthy(options.noNonFreeFiles) then text = removeNonFreeFiles(text) end&lt;br /&gt;
	if truthy(options.noBehaviorSwitches) then text = removeBehaviorSwitches(text) end&lt;br /&gt;
	if truthy(options.noComments) then text = removeComments(text) end&lt;br /&gt;
&lt;br /&gt;
	-- Remove multiple newlines left over from removing elements&lt;br /&gt;
	text = string.gsub(text, &#039;\n\n\n+&#039;, &#039;\n\n&#039;)&lt;br /&gt;
	text = mw.text.trim(text)&lt;br /&gt;
&lt;br /&gt;
	return text&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Main invocation function for templates&lt;br /&gt;
local function main(frame)&lt;br /&gt;
	local args = parseArgs(frame)&lt;br /&gt;
	local page = args[1]&lt;br /&gt;
	local ok, text = pcall(get, page, args)&lt;br /&gt;
	if not ok then return getError(text) end&lt;br /&gt;
	local raw = args[&#039;raw&#039;]&lt;br /&gt;
	if raw then return text end&lt;br /&gt;
	return frame:preprocess(text)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Entry points for templates&lt;br /&gt;
function p.main(frame) return main(frame) end&lt;br /&gt;
&lt;br /&gt;
-- Entry points for modules&lt;br /&gt;
function p.get(page, options) return get(page, options) end&lt;br /&gt;
function p.getText(page, noFollow) return getText(page, noFollow) end&lt;br /&gt;
function p.getLead(text) return getLead(text) end&lt;br /&gt;
function p.getSection(text, section) return getSection(text, section) end&lt;br /&gt;
function p.getSections(text, flags) return getSections(text, flags) end&lt;br /&gt;
function p.getParagraphs(text, flags) return getParagraphs(text, flags) end&lt;br /&gt;
function p.getParameters(text, flags) return getParameters(text, flags) end&lt;br /&gt;
function p.getCategories(text, flags) return getCategories(text, flags) end&lt;br /&gt;
function p.getReferences(text, flags) return getReferences(text, flags) end&lt;br /&gt;
function p.getTemplates(text, flags) return getTemplates(text, flags) end&lt;br /&gt;
function p.getTables(text, flags) return getTables(text, flags) end&lt;br /&gt;
function p.getLists(text, flags) return getLists(text, flags) end&lt;br /&gt;
function p.getFiles(text, flags) return getFiles(text, flags) end&lt;br /&gt;
function p.getError(message, value) return getError(message, value) end&lt;br /&gt;
&lt;br /&gt;
-- Expose handy methods&lt;br /&gt;
function p.truthy(value) return truthy(value) end&lt;br /&gt;
function p.parseArgs(frame) return parseArgs(frame) end&lt;br /&gt;
function p.matchAny(text, pre, list, post, init) return matchAny(text, pre, list, post, init) end&lt;br /&gt;
function p.matchFlag(value, flags) return matchFlag(value, flags) end&lt;br /&gt;
function p.getNamespaces(name) return getNamespaces(name) end&lt;br /&gt;
function p.removeBold(text) return removeBold(text) end&lt;br /&gt;
function p.removeLinks(text) return removeLinks(text) end&lt;br /&gt;
function p.removeSelfLinks(text) return removeSelfLinks(text) end&lt;br /&gt;
function p.removeNonFreeFiles(text) return removeNonFreeFiles(text) end&lt;br /&gt;
function p.removeBehaviorSwitches(text) return removeBehaviorSwitches(text) end&lt;br /&gt;
function p.removeComments(text) return removeComments(text) end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Maegnus</name></author>
	</entry>
	<entry>
		<id>https://classic.pgnrp.com/index.php?title=Template:Button&amp;diff=93</id>
		<title>Template:Button</title>
		<link rel="alternate" type="text/html" href="https://classic.pgnrp.com/index.php?title=Template:Button&amp;diff=93"/>
		<updated>2025-05-21T05:31:34Z</updated>

		<summary type="html">&lt;p&gt;Maegnus: Created page with &amp;quot;&amp;lt;!--  Template:Button -------------------- Template to create a button that is actually a link  @param {string} class HTML class for the button @param {string} icon File name of the icon @param {string} label Label for the button @param {string} page Page name to be link @param {string} type Type of button @param {string} url URL to be linked  @return {string} wikitext of the button  --&amp;gt;&amp;lt;includeonly&amp;gt;&amp;lt;!-- --&amp;gt;&amp;lt;div class=&amp;quot;tg-button {{#if:{{{type|}}}|tg-button--{{{type}}}}}...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
Template:Button&lt;br /&gt;
--------------------&lt;br /&gt;
Template to create a button that is actually a link&lt;br /&gt;
&lt;br /&gt;
@param {string} class HTML class for the button&lt;br /&gt;
@param {string} icon File name of the icon&lt;br /&gt;
@param {string} label Label for the button&lt;br /&gt;
@param {string} page Page name to be link&lt;br /&gt;
@param {string} type Type of button&lt;br /&gt;
@param {string} url URL to be linked&lt;br /&gt;
&lt;br /&gt;
@return {string} wikitext of the button&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&amp;lt;includeonly&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;div class=&amp;quot;tg-button {{#if:{{{type|}}}|tg-button--{{{type}}}}} {{#if:{{{url|}}}|plainlinks}} {{#if:{{{class|}}}|{{{class}}}}}&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{#if:{{{page|}}}|&amp;lt;!--&lt;br /&gt;
	--&amp;gt;[[{{{page}}}|{{#if:{{{icon|}}}|&amp;lt;span class=&amp;quot;tg-button-icon&amp;quot;&amp;gt;[[File:{{{icon}}}|{{#ifeq:{{{type|}}}|icon|24px|18px}}|class=metadata|link=]]&amp;lt;/span&amp;gt;}}{{{label|{{{page}}}}}}]]&amp;lt;!--&lt;br /&gt;
--&amp;gt;}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{#if:{{{url|}}}|&amp;lt;!--&lt;br /&gt;
	--&amp;gt;[{{{url}}} {{#if:{{{icon|}}}|&amp;lt;span class=&amp;quot;tg-button-icon&amp;quot;&amp;gt;[[File:{{{icon}}}|{{#ifeq:{{{type|}}}|icon|24px|18px}}|class=metadata|link=]]&amp;lt;/span&amp;gt;}}{{{label}}}]&amp;lt;!--&lt;br /&gt;
--&amp;gt;}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;templatestyles src=&amp;quot;Template:Button/styles.css&amp;quot;/&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;/includeonly&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;noinclude&amp;gt;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
Template documentation&lt;br /&gt;
----------------------&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;{{/doc}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maegnus</name></author>
	</entry>
	<entry>
		<id>https://classic.pgnrp.com/index.php?title=Template:Section_divider/styles.css&amp;diff=92</id>
		<title>Template:Section divider/styles.css</title>
		<link rel="alternate" type="text/html" href="https://classic.pgnrp.com/index.php?title=Template:Section_divider/styles.css&amp;diff=92"/>
		<updated>2025-05-21T05:22:54Z</updated>

		<summary type="html">&lt;p&gt;Maegnus: Created page with &amp;quot;.tg-section-divider {     margin-top: 1rem;     margin-bottom: 0.5rem;     color: var(--tg-color-subtle);     display: flex;     align-items: center;     justify-content: space-between; }  .tg-section-divider:not(:empty) {     gap: 1rem;     white-space: nowrap; }  .tg-section-divider::before, .tg-section-divider::after {     content: &amp;quot;&amp;quot;;     height: 1px;     width: 100%;     background-color: var(--tg-border-color-base); }&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.tg-section-divider {&lt;br /&gt;
    margin-top: 1rem;&lt;br /&gt;
    margin-bottom: 0.5rem;&lt;br /&gt;
    color: var(--tg-color-subtle);&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    justify-content: space-between;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-section-divider:not(:empty) {&lt;br /&gt;
    gap: 1rem;&lt;br /&gt;
    white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-section-divider::before,&lt;br /&gt;
.tg-section-divider::after {&lt;br /&gt;
    content: &amp;quot;&amp;quot;;&lt;br /&gt;
    height: 1px;&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    background-color: var(--tg-border-color-base);&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Maegnus</name></author>
	</entry>
	<entry>
		<id>https://classic.pgnrp.com/index.php?title=Template:Card/styles.css&amp;diff=91</id>
		<title>Template:Card/styles.css</title>
		<link rel="alternate" type="text/html" href="https://classic.pgnrp.com/index.php?title=Template:Card/styles.css&amp;diff=91"/>
		<updated>2025-05-21T05:22:24Z</updated>

		<summary type="html">&lt;p&gt;Maegnus: Created page with &amp;quot;.tg-card {     --tg-card-image-color_r: 0;     --tg-card-image-color_g: 0;     --tg-card-image-color_b: 0;      position: relative;     background-color: var(--tg-color-surface-2);     border: var(--tg-border-base);     border-radius: var(--tg-border-radius-medium);     overflow: hidden;     display: flex;     flex-direction: column; }  .tg-card-header, .tg-card-footer {     padding: 0.5rem 1rem;     background: var(--tg-color-surface-3); }  .tg-card-footer {     font-si...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.tg-card {&lt;br /&gt;
    --tg-card-image-color_r: 0;&lt;br /&gt;
    --tg-card-image-color_g: 0;&lt;br /&gt;
    --tg-card-image-color_b: 0;&lt;br /&gt;
&lt;br /&gt;
    position: relative;&lt;br /&gt;
    background-color: var(--tg-color-surface-2);&lt;br /&gt;
    border: var(--tg-border-base);&lt;br /&gt;
    border-radius: var(--tg-border-radius-medium);&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-card-header,&lt;br /&gt;
.tg-card-footer {&lt;br /&gt;
    padding: 0.5rem 1rem;&lt;br /&gt;
    background: var(--tg-color-surface-3);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-card-footer {&lt;br /&gt;
    font-size: var(--tg-font-size-small);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.template-flexbox-item .tg-card {&lt;br /&gt;
    height: 100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-card blockquote {&lt;br /&gt;
    margin-left: 0;&lt;br /&gt;
    margin-right: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-card-image {&lt;br /&gt;
    position: relative;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-grow: 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-card-afterImage {&lt;br /&gt;
    position: relative;&lt;br /&gt;
    margin-top: -0.5rem;&lt;br /&gt;
    padding: 0 1rem 1rem 1rem;&lt;br /&gt;
    background-color: rgb(&lt;br /&gt;
        var(--tg-card-image-color_r),&lt;br /&gt;
        var(--tg-card-image-color_g),&lt;br /&gt;
        var(--tg-card-image-color_b)&lt;br /&gt;
    );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-card-afterImage a {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-card-afterImage,&lt;br /&gt;
.tg-card-label,&lt;br /&gt;
.tg-card-caption {&lt;br /&gt;
    font-size: var(--tg-font-size-x-small);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-card-label {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    top: 0;&lt;br /&gt;
    left: 0;&lt;br /&gt;
    z-index: 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-card-label &amp;gt; a,&lt;br /&gt;
.tg-card-label &amp;gt; span {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    height: 32px;&lt;br /&gt;
    padding: 0 12px;&lt;br /&gt;
    border-bottom-right-radius: var(--tg-border-radius-medium);&lt;br /&gt;
    background: var(--tg-color-progressive);&lt;br /&gt;
    color: var(--tg-color-inverted-progressive);&lt;br /&gt;
    line-height: 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-card-label &amp;gt; a:hover {&lt;br /&gt;
    background: var(--tg-color-progressive--hover);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-card-label &amp;gt; a:active {&lt;br /&gt;
    background: var(--tg-color-progressive--hover);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-card-content {&lt;br /&gt;
    padding: 1rem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-card-label + .tg-card-content {&lt;br /&gt;
    margin-top: 1.5rem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-card-title {&lt;br /&gt;
    color: var(--tg-color-emphasized);&lt;br /&gt;
    font-family: var(--tg-font-family-heading);&lt;br /&gt;
    font-size: var(--tg-font-size-x-large);&lt;br /&gt;
    font-weight: var(--tg-font-weight-semibold);&lt;br /&gt;
    line-height: var(--tg-line-height-xxx-small);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-card-caption {&lt;br /&gt;
    margin-top: 0.25rem;&lt;br /&gt;
    color: var(--tg-color-subtle);&lt;br /&gt;
    line-height: var(--tg-line-height-xx-small);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-card-title + .tg-card-body,&lt;br /&gt;
.tg-card-caption + .tg-card-body {&lt;br /&gt;
    margin-top: 1rem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-card-background,&lt;br /&gt;
.tg-card-link {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    inset: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-card-background {&lt;br /&gt;
    pointer-events: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-card-background::after {&lt;br /&gt;
    content: &amp;quot;&amp;quot;;&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    left: 0;&lt;br /&gt;
    right: 0;&lt;br /&gt;
    bottom: 0;&lt;br /&gt;
    height: 50%;&lt;br /&gt;
    background: linear-gradient(&lt;br /&gt;
        to top,&lt;br /&gt;
        rgba(&lt;br /&gt;
                var(--tg-card-image-color_r),&lt;br /&gt;
                var(--tg-card-image-color_g),&lt;br /&gt;
                var(--tg-card-image-color_b),&lt;br /&gt;
                1&lt;br /&gt;
            )&lt;br /&gt;
            0%,&lt;br /&gt;
        rgba(&lt;br /&gt;
                var(--tg-card-image-color_r),&lt;br /&gt;
                var(--tg-card-image-color_g),&lt;br /&gt;
                var(--tg-card-image-color_b),&lt;br /&gt;
                0.987&lt;br /&gt;
            )&lt;br /&gt;
            8.1%,&lt;br /&gt;
        rgba(&lt;br /&gt;
                var(--tg-card-image-color_r),&lt;br /&gt;
                var(--tg-card-image-color_g),&lt;br /&gt;
                var(--tg-card-image-color_b),&lt;br /&gt;
                0.951&lt;br /&gt;
            )&lt;br /&gt;
            15.5%,&lt;br /&gt;
        rgba(&lt;br /&gt;
                var(--tg-card-image-color_r),&lt;br /&gt;
                var(--tg-card-image-color_g),&lt;br /&gt;
                var(--tg-card-image-color_b),&lt;br /&gt;
                0.896&lt;br /&gt;
            )&lt;br /&gt;
            22.5%,&lt;br /&gt;
        rgba(&lt;br /&gt;
                var(--tg-card-image-color_r),&lt;br /&gt;
                var(--tg-card-image-color_g),&lt;br /&gt;
                var(--tg-card-image-color_b),&lt;br /&gt;
                0.825&lt;br /&gt;
            )&lt;br /&gt;
            29%,&lt;br /&gt;
        rgba(&lt;br /&gt;
                var(--tg-card-image-color_r),&lt;br /&gt;
                var(--tg-card-image-color_g),&lt;br /&gt;
                var(--tg-card-image-color_b),&lt;br /&gt;
                0.741&lt;br /&gt;
            )&lt;br /&gt;
            35.3%,&lt;br /&gt;
        rgba(&lt;br /&gt;
                var(--tg-card-image-color_r),&lt;br /&gt;
                var(--tg-card-image-color_g),&lt;br /&gt;
                var(--tg-card-image-color_b),&lt;br /&gt;
                0.648&lt;br /&gt;
            )&lt;br /&gt;
            41.2%,&lt;br /&gt;
        rgba(&lt;br /&gt;
                var(--tg-card-image-color_r),&lt;br /&gt;
                var(--tg-card-image-color_g),&lt;br /&gt;
                var(--tg-card-image-color_b),&lt;br /&gt;
                0.55&lt;br /&gt;
            )&lt;br /&gt;
            47.1%,&lt;br /&gt;
        rgba(&lt;br /&gt;
                var(--tg-card-image-color_r),&lt;br /&gt;
                var(--tg-card-image-color_g),&lt;br /&gt;
                var(--tg-card-image-color_b),&lt;br /&gt;
                0.45&lt;br /&gt;
            )&lt;br /&gt;
            52.9%,&lt;br /&gt;
        rgba(&lt;br /&gt;
                var(--tg-card-image-color_r),&lt;br /&gt;
                var(--tg-card-image-color_g),&lt;br /&gt;
                var(--tg-card-image-color_b),&lt;br /&gt;
                0.352&lt;br /&gt;
            )&lt;br /&gt;
            58.8%,&lt;br /&gt;
        rgba(&lt;br /&gt;
                var(--tg-card-image-color_r),&lt;br /&gt;
                var(--tg-card-image-color_g),&lt;br /&gt;
                var(--tg-card-image-color_b),&lt;br /&gt;
                0.259&lt;br /&gt;
            )&lt;br /&gt;
            64.7%,&lt;br /&gt;
        rgba(&lt;br /&gt;
                var(--tg-card-image-color_r),&lt;br /&gt;
                var(--tg-card-image-color_g),&lt;br /&gt;
                var(--tg-card-image-color_b),&lt;br /&gt;
                0.175&lt;br /&gt;
            )&lt;br /&gt;
            71%,&lt;br /&gt;
        rgba(&lt;br /&gt;
                var(--tg-card-image-color_r),&lt;br /&gt;
                var(--tg-card-image-color_g),&lt;br /&gt;
                var(--tg-card-image-color_b),&lt;br /&gt;
                0.104&lt;br /&gt;
            )&lt;br /&gt;
            77.5%,&lt;br /&gt;
        rgba(&lt;br /&gt;
                var(--tg-card-image-color_r),&lt;br /&gt;
                var(--tg-card-image-color_g),&lt;br /&gt;
                var(--tg-card-image-color_b),&lt;br /&gt;
                0.049&lt;br /&gt;
            )&lt;br /&gt;
            84.5%,&lt;br /&gt;
        rgba(&lt;br /&gt;
                var(--tg-card-image-color_r),&lt;br /&gt;
                var(--tg-card-image-color_g),&lt;br /&gt;
                var(--tg-card-image-color_b),&lt;br /&gt;
                0.013&lt;br /&gt;
            )&lt;br /&gt;
            91.9%,&lt;br /&gt;
        rgba(&lt;br /&gt;
                var(--tg-card-image-color_r),&lt;br /&gt;
                var(--tg-card-image-color_g),&lt;br /&gt;
                var(--tg-card-image-color_b),&lt;br /&gt;
                0&lt;br /&gt;
            )&lt;br /&gt;
            100%&lt;br /&gt;
    );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-card-background--top img {&lt;br /&gt;
    object-position: top;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-card-background--bottom img {&lt;br /&gt;
    object-position: bottom;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-card-background img {&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    height: 100%;&lt;br /&gt;
    object-fit: cover;&lt;br /&gt;
    transition: 100ms ease;&lt;br /&gt;
    transition-property: transform;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-card:hover .tg-card-background img {&lt;br /&gt;
    transform: scale(1.1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-card-link {&lt;br /&gt;
    opacity: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-card-link &amp;gt; a {&lt;br /&gt;
    display: block;&lt;br /&gt;
    height: 100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-card-image .tg-card-content {&lt;br /&gt;
    position: relative;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-card-image .tg-card-content {&lt;br /&gt;
    margin-top: auto;&lt;br /&gt;
    line-height: var(--tg-line-height-xx-small);&lt;br /&gt;
    flex-grow: 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-card-image .tg-card-title {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-card-image .tg-card-caption,&lt;br /&gt;
.tg-card-afterImage {&lt;br /&gt;
    color: #ddd;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Maegnus</name></author>
	</entry>
	<entry>
		<id>https://classic.pgnrp.com/index.php?title=Template:Section_divider&amp;diff=90</id>
		<title>Template:Section divider</title>
		<link rel="alternate" type="text/html" href="https://classic.pgnrp.com/index.php?title=Template:Section_divider&amp;diff=90"/>
		<updated>2025-05-21T05:20:36Z</updated>

		<summary type="html">&lt;p&gt;Maegnus: Created page with &amp;quot;&amp;lt;!--  Template:Section divider -------------------- Template to add a section divider Have to use &amp;lt;div&amp;gt; because &amp;lt;hr&amp;gt; are not semantically correct for non-text elements  @param {string} 1 Label text in the section divider  @return {string} wikitext of the section divider  --&amp;gt;&amp;lt;includeonly&amp;gt;&amp;lt;!-- --&amp;gt;&amp;lt;div class=&amp;quot;tg-section-divider&amp;quot;&amp;gt;{{#if:{{{1|}}}|&amp;lt;span&amp;gt;{{{1}}}&amp;lt;/span&amp;gt;}}&amp;lt;/div&amp;gt;&amp;lt;!-- --&amp;gt;&amp;lt;templatestyles src=&amp;quot;Template:Section divider/styles.css&amp;quot;/&amp;gt;&amp;lt;!-- --&amp;gt;&amp;lt;/includeonly&amp;gt;&amp;lt;!-- --&amp;gt;&amp;lt;noincl...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
Template:Section divider&lt;br /&gt;
--------------------&lt;br /&gt;
Template to add a section divider&lt;br /&gt;
Have to use &amp;lt;div&amp;gt; because &amp;lt;hr&amp;gt; are not semantically correct for non-text elements&lt;br /&gt;
&lt;br /&gt;
@param {string} 1 Label text in the section divider&lt;br /&gt;
&lt;br /&gt;
@return {string} wikitext of the section divider&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&amp;lt;includeonly&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;div class=&amp;quot;tg-section-divider&amp;quot;&amp;gt;{{#if:{{{1|}}}|&amp;lt;span&amp;gt;{{{1}}}&amp;lt;/span&amp;gt;}}&amp;lt;/div&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;templatestyles src=&amp;quot;Template:Section divider/styles.css&amp;quot;/&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;/includeonly&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;noinclude&amp;gt;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
Template documentation&lt;br /&gt;
----------------------&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;{{/doc}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maegnus</name></author>
	</entry>
	<entry>
		<id>https://classic.pgnrp.com/index.php?title=Template:Card&amp;diff=89</id>
		<title>Template:Card</title>
		<link rel="alternate" type="text/html" href="https://classic.pgnrp.com/index.php?title=Template:Card&amp;diff=89"/>
		<updated>2025-05-21T05:19:20Z</updated>

		<summary type="html">&lt;p&gt;Maegnus: Created page with &amp;quot;&amp;lt;!--  Template:Card -------------------- Create a card  --&amp;gt;&amp;lt;includeonly&amp;gt;&amp;lt;!-- --&amp;gt;&amp;lt;templatestyles src=&amp;quot;Template:Card/styles.css&amp;quot;/&amp;gt;&amp;lt;!-- --&amp;gt;&amp;lt;div     class=&amp;quot;tg-card {{{class|}}}&amp;quot;     style=&amp;quot;         {{#if:{{{imageColorR|}}}|--tg-card-image-color_r:{{{imageColorR}}};}}         {{#if:{{{imageColorG|}}}|--tg-card-image-color_g:{{{imageColorG}}};}}         {{#if:{{{imageColorB|}}}|--tg-card-image-color_b:{{{imageColorB}}};}}         {{#if:{{{height|}}}|min-height:{{{height}}};}}...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
Template:Card&lt;br /&gt;
--------------------&lt;br /&gt;
Create a card&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&amp;lt;includeonly&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;templatestyles src=&amp;quot;Template:Card/styles.css&amp;quot;/&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;div&lt;br /&gt;
    class=&amp;quot;tg-card {{{class|}}}&amp;quot;&lt;br /&gt;
    style=&amp;quot;&lt;br /&gt;
        {{#if:{{{imageColorR|}}}|--tg-card-image-color_r:{{{imageColorR}}};}}&lt;br /&gt;
        {{#if:{{{imageColorG|}}}|--tg-card-image-color_g:{{{imageColorG}}};}}&lt;br /&gt;
        {{#if:{{{imageColorB|}}}|--tg-card-image-color_b:{{{imageColorB}}};}}&lt;br /&gt;
        {{#if:{{{height|}}}|min-height:{{{height}}};}}&lt;br /&gt;
    &amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
    --&amp;gt;{{#if:{{{header|}}}|&amp;lt;div class=&amp;quot;tg-card-header&amp;quot;&amp;gt;{{{header}}}&amp;lt;/div&amp;gt;}}&amp;lt;!--&lt;br /&gt;
    Image wrapper is needed to content overlay effect&lt;br /&gt;
    --&amp;gt;{{#if:{{{image|}}}|&amp;lt;div class=&amp;quot;tg-card-image&amp;quot;&amp;gt;}}&amp;lt;!--&lt;br /&gt;
        --&amp;gt;{{#if:{{{image|}}}|&amp;lt;div class=&amp;quot;tg-card-background {{#if:{{{imagePosition|}}}|tg-card-background--{{{imagePosition}}}}}&amp;quot;&amp;gt;[[File:{{{image}}}|{{{imageWidth|400}}}px|link=]]&amp;lt;/div&amp;gt;}}&amp;lt;!--&lt;br /&gt;
        --&amp;gt;{{#if:{{{label|}}}|&amp;lt;div class=&amp;quot;tg-card-label&amp;quot;&amp;gt;{{#if:{{{labelpage|}}}|[[{{{labelpage}}}|{{{label}}}]]|&amp;lt;span&amp;gt;{{{label}}}&amp;lt;/span&amp;gt;}}&amp;lt;/div&amp;gt;}}&amp;lt;!--&lt;br /&gt;
        --&amp;gt;&amp;lt;div class=&amp;quot;tg-card-content&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
            --&amp;gt;{{#if:{{{title|}}}|&amp;lt;div class=&amp;quot;tg-card-title&amp;quot;&amp;gt;{{{title}}}&amp;lt;/div&amp;gt;}}&amp;lt;!--&lt;br /&gt;
            --&amp;gt;{{#if:{{{caption|}}}|&amp;lt;div class=&amp;quot;tg-card-caption&amp;quot;&amp;gt;{{{caption}}}&amp;lt;/div&amp;gt;}}&amp;lt;!--&lt;br /&gt;
            --&amp;gt;{{#if:{{{content|}}}|&amp;lt;div class=&amp;quot;tg-card-body&amp;quot;&amp;gt;{{{content}}}&amp;lt;/div&amp;gt;}}&amp;lt;!--&lt;br /&gt;
        --&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;!--&lt;br /&gt;
        --&amp;gt;{{#if:{{{link|}}}|&amp;lt;div class=&amp;quot;tg-card-link&amp;quot;&amp;gt;[[{{{link}}}]]&amp;lt;/div&amp;gt;}}&amp;lt;!--&lt;br /&gt;
    --&amp;gt;{{#if:{{{image|}}}|&amp;lt;/div&amp;gt;}}&amp;lt;!--&lt;br /&gt;
    --&amp;gt;{{#if:{{{afterImage|}}}|&amp;lt;div class=&amp;quot;tg-card-afterImage&amp;quot;&amp;gt;{{{afterImage}}}&amp;lt;/div&amp;gt;}}&amp;lt;!--&lt;br /&gt;
    --&amp;gt;{{#if:{{{footer|}}}|&amp;lt;div class=&amp;quot;tg-card-footer&amp;quot;&amp;gt;{{{footer}}}&amp;lt;/div&amp;gt;}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;/includeonly&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;noinclude&amp;gt;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
Template documentation&lt;br /&gt;
----------------------&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;{{/doc}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maegnus</name></author>
	</entry>
	<entry>
		<id>https://classic.pgnrp.com/index.php?title=Template:Main_page/browse/styles.css&amp;diff=88</id>
		<title>Template:Main page/browse/styles.css</title>
		<link rel="alternate" type="text/html" href="https://classic.pgnrp.com/index.php?title=Template:Main_page/browse/styles.css&amp;diff=88"/>
		<updated>2025-05-21T05:14:18Z</updated>

		<summary type="html">&lt;p&gt;Maegnus: Created page with &amp;quot;.tg-mainpage-browse-header {     margin-bottom: 1rem;     display: flex;     justify-content: space-between;     align-items: center;     gap: 1rem;     flex-wrap: wrap; }  .tg-mainpage-browse-atoz {     display: flex;     align-items: center; }  .tg-mainpage-browse-atoz-label {     margin-right: 1rem;     flex-grow: 1;     white-space: nowrap;     color: var(--tg-color-subtle);     font-size: var(--tg-font-size-small); }  .tg-mainpage-browse-atoz &amp;gt; .tg-button &amp;gt; a {...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.tg-mainpage-browse-header {&lt;br /&gt;
    margin-bottom: 1rem;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    justify-content: space-between;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    gap: 1rem;&lt;br /&gt;
    flex-wrap: wrap;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-mainpage-browse-atoz {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-mainpage-browse-atoz-label {&lt;br /&gt;
    margin-right: 1rem;&lt;br /&gt;
    flex-grow: 1;&lt;br /&gt;
    white-space: nowrap;&lt;br /&gt;
    color: var(--tg-color-subtle);&lt;br /&gt;
    font-size: var(--tg-font-size-small);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-mainpage-browse-atoz &amp;gt; .tg-button &amp;gt; a {&lt;br /&gt;
    width: 36px;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Maegnus</name></author>
	</entry>
	<entry>
		<id>https://classic.pgnrp.com/index.php?title=Template:Main_page/browse&amp;diff=87</id>
		<title>Template:Main page/browse</title>
		<link rel="alternate" type="text/html" href="https://classic.pgnrp.com/index.php?title=Template:Main_page/browse&amp;diff=87"/>
		<updated>2025-05-21T05:14:03Z</updated>

		<summary type="html">&lt;p&gt;Maegnus: Created page with &amp;quot;&amp;lt;!--  Template:Main page/Browse -------------------- Browse component of the main page  --&amp;gt;{{Card&amp;lt;!-- --&amp;gt;|class = tg-mainpage-browse&amp;lt;!-- --&amp;gt;|content = &amp;lt;!--  	Header 	------ 	--&amp;gt;&amp;lt;div class=&amp;quot;tg-mainpage-browse-header&amp;quot;&amp;gt;&amp;lt;!-- 		--&amp;gt;&amp;lt;div class=&amp;quot;tg-mainpage-browse-header-content&amp;quot;&amp;gt;&amp;lt;!-- 			--&amp;gt;&amp;lt;div class=&amp;quot;tg-card-title&amp;quot;&amp;gt;Discover the Tolkien Gateway&amp;lt;/div&amp;gt;&amp;lt;!-- 			--&amp;gt;&amp;lt;div class=&amp;quot;tg-card-caption&amp;quot;&amp;gt;{{NUMBEROFARTICLES}} articles written by {{NUMBEROFUSERS}} contributors.&amp;lt;/div&amp;gt;&amp;lt;!-- 		--&amp;gt;&amp;lt;/...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
Template:Main page/Browse&lt;br /&gt;
--------------------&lt;br /&gt;
Browse component of the main page&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;{{Card&amp;lt;!--&lt;br /&gt;
--&amp;gt;|class = tg-mainpage-browse&amp;lt;!--&lt;br /&gt;
--&amp;gt;|content = &amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
	Header&lt;br /&gt;
	------&lt;br /&gt;
	--&amp;gt;&amp;lt;div class=&amp;quot;tg-mainpage-browse-header&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
		--&amp;gt;&amp;lt;div class=&amp;quot;tg-mainpage-browse-header-content&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
			--&amp;gt;&amp;lt;div class=&amp;quot;tg-card-title&amp;quot;&amp;gt;Discover the Tolkien Gateway&amp;lt;/div&amp;gt;&amp;lt;!--&lt;br /&gt;
			--&amp;gt;&amp;lt;div class=&amp;quot;tg-card-caption&amp;quot;&amp;gt;{{NUMBEROFARTICLES}} articles written by {{NUMBEROFUSERS}} contributors.&amp;lt;/div&amp;gt;&amp;lt;!--&lt;br /&gt;
		--&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=Random article|type=secondary|page=Special:Random}}&amp;lt;!--&lt;br /&gt;
	--&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
	A to Z&lt;br /&gt;
	------&lt;br /&gt;
	--&amp;gt;&amp;lt;div class=&amp;quot;tg-mainpage-browse-atoz citizen-overflow&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
		--&amp;gt;&amp;lt;div class=&amp;quot;tg-mainpage-browse-atoz-label&amp;quot;&amp;gt;A to Z&amp;lt;/div&amp;gt;&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=A|url=https://tolkiengateway.net/wiki/Special:PrefixIndex?prefix=A&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=B|url=https://tolkiengateway.net/wiki/Special:PrefixIndex?prefix=B&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=C|url=https://tolkiengateway.net/wiki/Special:PrefixIndex?prefix=C&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=D|url=https://tolkiengateway.net/wiki/Special:PrefixIndex?prefix=D&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=E|url=https://tolkiengateway.net/wiki/Special:PrefixIndex?prefix=E&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=F|url=https://tolkiengateway.net/wiki/Special:PrefixIndex?prefix=F&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=G|url=https://tolkiengateway.net/wiki/Special:PrefixIndex?prefix=G&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=H|url=https://tolkiengateway.net/wiki/Special:PrefixIndex?prefix=H&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=I|url=https://tolkiengateway.net/wiki/Special:PrefixIndex?prefix=I&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=J|url=https://tolkiengateway.net/wiki/Special:PrefixIndex?prefix=J&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=K|url=https://tolkiengateway.net/wiki/Special:PrefixIndex?prefix=K&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=L|url=https://tolkiengateway.net/wiki/Special:PrefixIndex?prefix=L&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=M|url=https://tolkiengateway.net/wiki/Special:PrefixIndex?prefix=M&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=N|url=https://tolkiengateway.net/wiki/Special:PrefixIndex?prefix=N&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=O|url=https://tolkiengateway.net/wiki/Special:PrefixIndex?prefix=O&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=P|url=https://tolkiengateway.net/wiki/Special:PrefixIndex?prefix=P&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=Q|url=https://tolkiengateway.net/wiki/Special:PrefixIndex?prefix=Q&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=R|url=https://tolkiengateway.net/wiki/Special:PrefixIndex?prefix=R&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=S|url=https://tolkiengateway.net/wiki/Special:PrefixIndex?prefix=S&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=T|url=https://tolkiengateway.net/wiki/Special:PrefixIndex?prefix=T&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=U|url=https://tolkiengateway.net/wiki/Special:PrefixIndex?prefix=U&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=V|url=https://tolkiengateway.net/wiki/Special:PrefixIndex?prefix=V&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=W|url=https://tolkiengateway.net/wiki/Special:PrefixIndex?prefix=W&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=X|url=https://tolkiengateway.net/wiki/Special:PrefixIndex?prefix=X&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=Y|url=https://tolkiengateway.net/wiki/Special:PrefixIndex?prefix=Y&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=Z|url=https://tolkiengateway.net/wiki/Special:PrefixIndex?prefix=Z&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
	--&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
	Index&lt;br /&gt;
	-----&lt;br /&gt;
	--&amp;gt;{{Flexbox&amp;lt;!--&lt;br /&gt;
	--&amp;gt;|columns = 2&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
	--&amp;gt;|span1 = 2&amp;lt;!--&lt;br /&gt;
	--&amp;gt;|content1 = {{Section divider|[[:Category:Books by J.R.R. Tolkien|Books]]}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;&#039;&#039;[[The Hobbit]]&#039;&#039; ([[1937]]) · &#039;&#039;[[The Lord of the Rings]]&#039;&#039; ([[1954|1954]]-[[1955|5]]) · &#039;&#039;[[The Silmarillion]]&#039;&#039; ([[1977]]) · &#039;&#039;[[Unfinished Tales]]&#039;&#039; ([[1980]]) · &#039;&#039;[[The History of Middle-earth]]&#039;&#039; ([[1983]]-[[1996|96]]) · &#039;&#039;[[The Children of Húrin]]&#039;&#039; ([[2007]]) · &#039;&#039;[[Beren and Lúthien]]&#039;&#039; ([[2017]]) · &#039;&#039;[[The Fall of Gondolin]]&#039;&#039; ([[2018]]) · &#039;&#039;[[The Nature of Middle-earth]]&#039;&#039; ([[2021]]) · &#039;&#039;[[Tales from the Perilous Realm]]&#039;&#039; ([[1945]]-[[1998|98]]) · &#039;&#039;[[Letters from Father Christmas]]&#039;&#039; ([[1976]])&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
	--&amp;gt;|span2 = 2&amp;lt;!--&lt;br /&gt;
	--&amp;gt;|content2 = {{Section divider|[[:Category:Books by J.R.R. Tolkien|Adaptations]]}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;[[The Hobbit (1977 film)|&#039;&#039;The Hobbit&#039;&#039; (1977)]] · [[The Lord of the Rings (1978 film)|&#039;&#039;The Lord of the Rings&#039;&#039; (1978)]] · [[The Return of the King (1980 film)|&#039;&#039;The Return of the King&#039;&#039; (1980)]] · [[The Lord of the Rings: The Fellowship of the Ring|&#039;&#039;The Fellowship of the Ring&#039;&#039; (2001)]] · [[The Lord of the Rings: The Two Towers|&#039;&#039;The Two Towers&#039;&#039; (2002)]] · [[The Lord of the Rings: The Return of the King|&#039;&#039;The Return of the King&#039;&#039; (2003)]] · [[The Hobbit: An Unexpected Journey|&#039;&#039;An Unexpected Journey&#039;&#039; (2012)]] · [[The Hobbit: The Desolation of Smaug|&#039;&#039;The Desolation of Smaug&#039;&#039; (2013)]] · [[The Hobbit: The Battle of the Five Armies|&#039;&#039;The Battle of the Five Armies&#039;&#039; (2014)]] · [[The Lord of the Rings: The Rings of Power|&#039;&#039;The Rings of Power&#039;&#039; series (2022)]] · [[The Lord of the Rings: The War of the Rohirrim|&#039;&#039;The War of the Rohirrim&#039;&#039; (2024)]] · [[The Lord of the Rings: The Hunt for Gollum|The Hunt for Gollum (2026)]] · &#039;&#039;See also: [[:Category:Fan films|Fan films]]&#039;&#039;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
	--&amp;gt;|content3 = &amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Flexbox&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|rows = 3&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
		--&amp;gt;|content1 = {{Section divider|&#039;&#039;The Hobbit&#039;&#039; Characters}}&amp;lt;!--&lt;br /&gt;
			--&amp;gt;[[Bilbo Baggins|Bilbo]] · [[Gandalf]] · [[Thorin|Thorin]] · [[Balin]] · [[Dwalin]] · [[Fíli]] · [[Kíli]] · [[Dori]] · [[Nori]] · [[Ori]] · [[Óin]] · [[Glóin]] · [[Bifur]] · [[Bofur]] · [[Bombur]] · [[Elrond]] · [[Great Goblin]] · [[Gollum]] · [[Beorn]] · [[Great Eagle]] · [[Thranduil|Elven-king]] · [[Smaug]] · [[Bard]] (&#039;&#039;&#039;&#039;&#039;[[:Category:Characters in The Hobbit|more]]&#039;&#039;&#039;&#039;&#039;)&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
		--&amp;gt;|content2 = {{Section divider|&#039;&#039;The Lord of the Rings&#039;&#039; Characters}}&amp;lt;!--&lt;br /&gt;
			--&amp;gt;[[Frodo Baggins|Frodo]] · [[Samwise Gamgee|Sam]] · [[Meriadoc Brandybuck|Merry]] · [[Peregrin Took|Pippin]] · [[Gandalf]] · [[Aragorn]] · [[Boromir]] · [[Legolas]] · [[Gimli]] · [[Elrond]] · [[Galadriel]] · [[Théoden]] · [[Éomer]] · [[Éowyn]] · [[Saruman]] · [[Sauron]] · [[Witch-king]] · [[Denethor]] · [[Faramir]] · [[Gollum]] · [[Tom Bombadil]] (&#039;&#039;&#039;&#039;&#039;[[:Category:Characters in The Lord of the Rings|more]]&#039;&#039;&#039;&#039;&#039;)&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
		--&amp;gt;|content3 = {{Section divider|&#039;&#039;The Silmarillion&#039;&#039; Characters}}&amp;lt;!--&lt;br /&gt;
			--&amp;gt;[[Ar-Pharazôn]] · [[Aulë]] · [[Beren]] · [[Celebrimbor]] · [[Eärendil]] · [[Varda|Elbereth]] · [[Elendil]] · [[Elros]] · [[Elwing]] · [[Ilúvatar|Eru]] · [[Fëanor]] ([[Sons of Fëanor|and sons]]) · [[Finduilas]] · [[Fingolfin]] · [[Finrod]] · [[Finwë]] ·  [[Gil-galad]] · [[Glaurung]] · [[Huan]] · [[Huor]] · [[Húrin]] · [[Isildur]] · [[Lúthien]] · [[Maeglin]] · [[Mandos]] · [[Manwë]] · [[Morgoth]] · [[Morwen]] · [[Nienor]] · [[Orodreth]] · [[Oromë]] · [[Thingol]] · [[Tuor]] · [[Turgon]] · [[Túrin]] · [[Ulmo]] (&#039;&#039;&#039;&#039;&#039;[[:Category:Characters in The Silmarillion|more]]&#039;&#039;&#039;&#039;&#039;)&amp;lt;!--&lt;br /&gt;
		--&amp;gt;}}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
	--&amp;gt;|content4 = &amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Flexbox&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|rows = 4&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
		--&amp;gt;|content1 = {{Section divider|[[:Category:Races|Races]]}}&amp;lt;!--&lt;br /&gt;
			--&amp;gt;[[:Category:Animals|Animals]] · [[:Category:Balrogs|Balrogs]] · [[:Category:Dragons|Dragons]] · [[:Category:Dwarves|Dwarves]] · [[:Category:Eagles|Eagles]] · [[:Category:Elves|Elves]] · [[:Category:Ents|Ents]] · [[:Category:Giants|Giants]] · [[:Category:Half-elven|Half-elven]] · [[:Category:Hobbits|Hobbits]] · [[:Category:Maiar|Maiar]] · [[:Category:Men|Men]] · [[:Category:Orcs|Orcs]] · [[:Category:Other races|Other races]] · [[:Category:Spirits|Spirits]] · [[:Category:Trolls|Trolls]] · [[:Category:Undead|Undead]] · [[:Category:Valar|Valar]] · [[:Category:Werewolves|Werewolves]]&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
		--&amp;gt;|content2 = {{Section divider|[[:Category:locations|Locations]]}}&amp;lt;!--&lt;br /&gt;
			--&amp;gt;[[:Category:Bays|Bays]] · [[:Category:Bridges|Bridges]] · [[:Category:Buildings|Buildings]] · [[:Category:Caves|Caves]] · [[:Category:Doors and gates|Doors]] · [[:Category:Falls|Falls]] · [[:Category:Fields, plains and deserts|Fields]] · [[:Category:Fords|Fords]] · [[:Category:Forests|Forests]] · [[:Category:Fortresses|Fortresses]] · [[:Category:Graves and tombs|Graves]] · [[:Category:Harbours|Harbours]] · [[:Category:Hills|Hills]] · [[:Category:Islands|Islands]] · [[:Category:Lakes|Lakes]] · [[:Category:Mountains|Mountains]] ([[:Category:Mountain ranges|Ranges]]) · [[:Category:Passes|Passes]] · [[:Category:Realms|Realms]] ([[:Category:Dwarven realms|Dwarven]] · [[:Category:Elven realms|Elven]] · [[:Category:Hobbit realms|Hobbit]] · [[:Category:Mannish realms|Mannish]] · [[:Category:Evil realms|Evil]]) · [[:Category:Regions|Regions]] · [[:Category:Rivers|Rivers]] · [[:Category:Roads and streets|Roads]] · [[:Category:Seas and oceans|Seas]] · [[:Category:Streams|Streams]] · [[:Category:Swamps|Swamps]] · [[:Category:Cities, towns and villages|Towns]] · [[:Category:Valleys|Valleys]] · [[:Category:Walls|Walls]] (&#039;&#039;&#039;&#039;&#039;[[Index:Locations|list of all]]&#039;&#039;&#039;&#039;&#039;)&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
		--&amp;gt;|content3 = {{Section divider|[[:Category:Events|Events]]}}&amp;lt;!--&lt;br /&gt;
			--&amp;gt;[[:Category:Calendars|Calendars]] · [[:Category:Wars and conflicts|Conflicts]] · [[:Category:Dates|Dates]] · [[:Category:Festivals and feasts|Festivals]] · [[:Category:Sieges|Sieges]]&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
		--&amp;gt;|content4 = {{Section divider|Other}}&amp;lt;!--&lt;br /&gt;
			--&amp;gt;[[:Category:Armor|Armor]] · [[:Category:Books and documents within the legendarium|Books]] · [[:Category:Cosmology|Cosmology]] · [[:Category:Flowers|Flowers]] · [[:Category:Food|Food]] · [[:Category:Lays and tales within the legendarium|Lays and tales]] · [[:Category:Materials|Materials]] · [[:Category:Devices and symbols|Devices and symbols]] · [[:Category:Monuments|Monuments]] · [[:Category:Organizations|Organizations]] · [[:Category:Plants|Plants]] · [[:Category:Rings and jewels|Rings and jewels]] · [[:Category:Ships|Ships]] · [[:Category:Trees|Trees]] · [[:Category:Weapons|Weapons]]&amp;lt;!--&lt;br /&gt;
		--&amp;gt;}}&amp;lt;!--&lt;br /&gt;
	--&amp;gt;}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;}}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&amp;lt;templatestyles src=&amp;quot;Template:Main page/browse/styles.css&amp;quot;/&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;noinclude&amp;gt;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
Template documentation&lt;br /&gt;
----------------------&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;{{/doc}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maegnus</name></author>
	</entry>
	<entry>
		<id>https://classic.pgnrp.com/index.php?title=Module:Flexbox/styles.css&amp;diff=86</id>
		<title>Module:Flexbox/styles.css</title>
		<link rel="alternate" type="text/html" href="https://classic.pgnrp.com/index.php?title=Module:Flexbox/styles.css&amp;diff=86"/>
		<updated>2025-05-21T05:11:29Z</updated>

		<summary type="html">&lt;p&gt;Maegnus: Created page with &amp;quot;.template-flexbox { 	display: flex; 	gap: var(--template-flexbox-gap); 	flex-wrap: wrap; 	flex-direction: var(--template-flexbox-direction); }  .template-flexbox-item { 	--template-flexbox-flex-basis: calc( 		(100% / var(--template-flexbox-columns)) - 			( 				var(--template-flexbox-gap) / var(--template-flexbox-columns) * 					(var(--template-flexbox-columns) - 1) 			) 	); 	flex-basis: var(--template-flexbox-flex-basis); 	flex-grow: 1; }  @media (max-width: 1120px) { 	....&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.template-flexbox {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	gap: var(--template-flexbox-gap);&lt;br /&gt;
	flex-wrap: wrap;&lt;br /&gt;
	flex-direction: var(--template-flexbox-direction);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.template-flexbox-item {&lt;br /&gt;
	--template-flexbox-flex-basis: calc(&lt;br /&gt;
		(100% / var(--template-flexbox-columns)) -&lt;br /&gt;
			(&lt;br /&gt;
				var(--template-flexbox-gap) / var(--template-flexbox-columns) *&lt;br /&gt;
					(var(--template-flexbox-columns) - 1)&lt;br /&gt;
			)&lt;br /&gt;
	);&lt;br /&gt;
	flex-basis: var(--template-flexbox-flex-basis);&lt;br /&gt;
	flex-grow: 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media (max-width: 1120px) {&lt;br /&gt;
	.template-flexbox {&lt;br /&gt;
		--template-flexbox-columns: 2 !important;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media (max-width: 640px) {&lt;br /&gt;
	.template-flexbox {&lt;br /&gt;
		--template-flexbox-columns: 1 !important;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Maegnus</name></author>
	</entry>
	<entry>
		<id>https://classic.pgnrp.com/index.php?title=Module:Flexbox&amp;diff=85</id>
		<title>Module:Flexbox</title>
		<link rel="alternate" type="text/html" href="https://classic.pgnrp.com/index.php?title=Module:Flexbox&amp;diff=85"/>
		<updated>2025-05-21T05:03:18Z</updated>

		<summary type="html">&lt;p&gt;Maegnus: Created page with &amp;quot;local mArguments --initialize lazily local getArgNums = require(&amp;#039;Module:Common&amp;#039;).getArgNums local p = {}   --Implements {{flexbox}} from the frame function p.flexbox(frame) 	mArguments = require(&amp;#039;Module:Arguments&amp;#039;) 	return p._flexbox(mArguments.getArgs(frame), frame) end  function p._flexbox(args, frame) 	if not args then 		return &amp;#039;Missing arguments&amp;#039; 	end  	local html = mw.html.create(&amp;#039;div&amp;#039;):addClass(&amp;#039;template-flexbox&amp;#039;) 	local columns = args[&amp;#039;columns&amp;#039;] 	local rows = args...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local mArguments --initialize lazily&lt;br /&gt;
local getArgNums = require(&#039;Module:Common&#039;).getArgNums&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--Implements {{flexbox}} from the frame&lt;br /&gt;
function p.flexbox(frame)&lt;br /&gt;
	mArguments = require(&#039;Module:Arguments&#039;)&lt;br /&gt;
	return p._flexbox(mArguments.getArgs(frame), frame)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._flexbox(args, frame)&lt;br /&gt;
	if not args then&lt;br /&gt;
		return &#039;Missing arguments&#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local html = mw.html.create(&#039;div&#039;):addClass(&#039;template-flexbox&#039;)&lt;br /&gt;
	local columns = args[&#039;columns&#039;]&lt;br /&gt;
	local rows = args[&#039;rows&#039;]&lt;br /&gt;
	local gap = args[&#039;gap&#039;] or &#039;0.5rem&#039;&lt;br /&gt;
	local direction&lt;br /&gt;
&lt;br /&gt;
	if columns then&lt;br /&gt;
		direction = &#039;row&#039;&lt;br /&gt;
	elseif rows then&lt;br /&gt;
		direction = &#039;column&#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	html:css(&#039;--template-flexbox-columns&#039;, columns or rows )&lt;br /&gt;
	html:css(&#039;--template-flexbox-direction&#039;, direction )&lt;br /&gt;
	html:css(&#039;--template-flexbox-gap&#039;, gap )&lt;br /&gt;
&lt;br /&gt;
	for i, _ in ipairs(getArgNums(&#039;content&#039;, args)) do&lt;br /&gt;
		local num = tostring(i)&lt;br /&gt;
		local content = args[&#039;content&#039; .. num]&lt;br /&gt;
		if not content then return end&lt;br /&gt;
&lt;br /&gt;
		local item = mw.html.create(&#039;div&#039;):addClass(&#039;template-flexbox-item&#039;)&lt;br /&gt;
		local span = args[&#039;span&#039; .. num] or &#039;1&#039;&lt;br /&gt;
		item:css(&#039;--template-flexbox-item-span&#039;, span)&lt;br /&gt;
		item:wikitext(content)&lt;br /&gt;
		html:node(item)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return frame:extensionTag {&lt;br /&gt;
		name = &#039;templatestyles&#039;, args = { src = &#039;Module:Flexbox/styles.css&#039; }&lt;br /&gt;
	} .. tostring(html)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Maegnus</name></author>
	</entry>
	<entry>
		<id>https://classic.pgnrp.com/index.php?title=Template:Flexbox&amp;diff=84</id>
		<title>Template:Flexbox</title>
		<link rel="alternate" type="text/html" href="https://classic.pgnrp.com/index.php?title=Template:Flexbox&amp;diff=84"/>
		<updated>2025-05-21T05:01:44Z</updated>

		<summary type="html">&lt;p&gt;Maegnus: Created page with &amp;quot;&amp;lt;includeonly&amp;gt;{{#invoke:Flexbox|flexbox}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt; Flexbox is used to layout a list of items. It is powered by Module:Flexbox.  == Usage == === Simple columns === &amp;lt;pre&amp;gt; {{Flexbox |columns = 3 |content1 = Gollum |content2 = Is |content3 = Precious }} &amp;lt;/pre&amp;gt; gives {{Flexbox |columns = 3 |content1 = Gollum |content2 = Is |content3 = Precious }}   === Simple row === &amp;lt;pre&amp;gt; {{Flexbox |rows = 3 |content1 = Gollum |content2 = Is |content3 = Precious }} &amp;lt;/pre&amp;gt;...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{#invoke:Flexbox|flexbox}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
Flexbox is used to layout a list of items. It is powered by [[Module:Flexbox]].&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
=== Simple columns ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{Flexbox&lt;br /&gt;
|columns = 3&lt;br /&gt;
|content1 = Gollum&lt;br /&gt;
|content2 = Is&lt;br /&gt;
|content3 = Precious&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
gives&lt;br /&gt;
{{Flexbox&lt;br /&gt;
|columns = 3&lt;br /&gt;
|content1 = Gollum&lt;br /&gt;
|content2 = Is&lt;br /&gt;
|content3 = Precious&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Simple row ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{Flexbox&lt;br /&gt;
|rows = 3&lt;br /&gt;
|content1 = Gollum&lt;br /&gt;
|content2 = Is&lt;br /&gt;
|content3 = Precious&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
gives&lt;br /&gt;
{{Flexbox&lt;br /&gt;
|rows = 3&lt;br /&gt;
|content1 = Gollum&lt;br /&gt;
|content2 = Is&lt;br /&gt;
|content3 = Precious&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Item span ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{Flexbox&lt;br /&gt;
|columns = 4&lt;br /&gt;
|content1 = Gollum&lt;br /&gt;
|span2 = 2&lt;br /&gt;
|content2 = Is&lt;br /&gt;
|content3 = Precious&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
gives&lt;br /&gt;
{{Flexbox&lt;br /&gt;
|columns = 4&lt;br /&gt;
|content1 = Gollum&lt;br /&gt;
|span2 = 2&lt;br /&gt;
|content2 = Is&lt;br /&gt;
|content3 = Precious&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Maegnus</name></author>
	</entry>
	<entry>
		<id>https://classic.pgnrp.com/index.php?title=Template:Main_page/legacy&amp;diff=83</id>
		<title>Template:Main page/legacy</title>
		<link rel="alternate" type="text/html" href="https://classic.pgnrp.com/index.php?title=Template:Main_page/legacy&amp;diff=83"/>
		<updated>2025-05-21T05:01:23Z</updated>

		<summary type="html">&lt;p&gt;Maegnus: Created page with &amp;quot;&amp;lt;hr&amp;gt; {{Flexbox |columns = 3 |span1 = 2 |content1 = &amp;lt;!-- --&amp;gt;{{Card&amp;lt;!-- --&amp;gt;|title = {{CURRENTDAY}} {{CURRENTMONTHNAME}}&amp;lt;!-- --&amp;gt;|caption = Today&amp;#039;s date in the Shire Calendar: &amp;#039;&amp;#039;&amp;#039;{{#ifeq: {{#timel:z}} | 172 | | 		{{#switch:{{#expr:({{#timel:z}}{{#ifexpr: {{#timel:z}} &amp;lt; 172 | +10 | {{#ifexpr: {{#timel:z}} &amp;lt; 356 | +9 | -355 }} | }})-{{#expr:trunc(({{#timel:z}}{{#ifexpr: {{#timel:z}} &amp;lt; 172 | +10 | {{#ifexpr: {{#timel:z}} &amp;lt; 356 | +9 | -355 }} | }})/7)}}*7}} 		| 0  = Sterday...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;hr&amp;gt;&lt;br /&gt;
{{Flexbox&lt;br /&gt;
|columns = 3&lt;br /&gt;
|span1 = 2&lt;br /&gt;
|content1 = &amp;lt;!--&lt;br /&gt;
--&amp;gt;{{Card&amp;lt;!--&lt;br /&gt;
--&amp;gt;|title = {{CURRENTDAY}} {{CURRENTMONTHNAME}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;|caption = Today&#039;s date in the Shire Calendar: &#039;&#039;&#039;{{#ifeq: {{#timel:z}} | 172 | |&lt;br /&gt;
		{{#switch:{{#expr:({{#timel:z}}{{#ifexpr: {{#timel:z}} &amp;lt; 172 | +10 | {{#ifexpr: {{#timel:z}} &amp;lt; 356 | +9 | -355 }} | }})-{{#expr:trunc(({{#timel:z}}{{#ifexpr: {{#timel:z}} &amp;lt; 172 | +10 | {{#ifexpr: {{#timel:z}} &amp;lt; 356 | +9 | -355 }} | }})/7)}}*7}}&lt;br /&gt;
		| 0  = [[Sterday]]&lt;br /&gt;
		| 1  = [[Sunday]]&lt;br /&gt;
		| 2  = [[Monday]]&lt;br /&gt;
		| 3  = [[Trewsday]]&lt;br /&gt;
		| 4  = [[Hevensday]]&lt;br /&gt;
		| 5  = [[Mersday]]&lt;br /&gt;
		| 6  = [[Highday]]&lt;br /&gt;
		}},}} {{#switch: {{#timel:z}}&lt;br /&gt;
		| 355 = [[2 Yule]]&lt;br /&gt;
		| 171 = 1 [[Lithedays|Lithe]]&lt;br /&gt;
		| 172 = [[Mid-year&#039;s Day]]&lt;br /&gt;
		| 173 = 2 [[Lithedays|Lithe]]&lt;br /&gt;
		| 354 = [[1 Yule]]&lt;br /&gt;
		| #default = {{#expr:({{#timel:z}}{{#ifexpr: {{#timel:z}} &amp;lt; 172 | +10 | {{#ifexpr: {{#timel:z}} &amp;lt; 356 | +7 | -355 }} | }})-{{#expr:trunc(({{#timel:z}}{{#ifexpr: {{#timel:z}} &amp;lt; 172 | +9 | {{#ifexpr: {{#timel:z}} &amp;lt; 356 | +6 | -356 }} | }})/30)}}*30}} {{#switch:{{#expr:trunc(({{#timel:z}}{{#ifexpr: {{#timel:z}} &amp;lt; 172 | +8 | {{#ifexpr: {{#timel:z}} &amp;lt; 356 | +6 | -356 }} | }})/30)}}&lt;br /&gt;
		| 0  = [[Afteryule]]&lt;br /&gt;
		| 1  = [[Solmath]]&lt;br /&gt;
		| 2  = [[Rethe]]&lt;br /&gt;
		| 3  = [[Astron]]&lt;br /&gt;
		| 4  = [[Thrimidge]]&lt;br /&gt;
		| 5  = [[Forelithe]]&lt;br /&gt;
		| 6  = [[Afterlithe]]&lt;br /&gt;
		| 7  = [[Wedmath]]&lt;br /&gt;
		| 8  = [[Halimath]]&lt;br /&gt;
		| 9  = [[Winterfilth]]&lt;br /&gt;
		| 10 = [[Blotmath]]&lt;br /&gt;
		| 11 = [[Foreyule]] }} }}&#039;&#039;&#039;&amp;lt;!--&lt;br /&gt;
--&amp;gt;|content = {{#ifexist:{{CURRENTDAY}} {{CURRENTMONTHNAME}}/eventcard|{{:{{CURRENTDAY}} {{CURRENTMONTHNAME}}/eventcard}}}}&lt;br /&gt;
		&amp;lt;div style=&amp;quot;display:flex;justify-content:center;text-align:center&amp;quot;&amp;gt;&lt;br /&gt;
			{{Button|label={{#time: j M | -2 days}}|page={{#time: j F | -2 days}}}}&lt;br /&gt;
			{{Button|label={{#time: j M | -1 days}}|page={{#time: j F | -1 day}}}}&lt;br /&gt;
			{{Button|label={{#time: j M}}|page={{#time: j F}}|type=primary}}&lt;br /&gt;
			{{Button|label={{#time: j M | +1 days}}|page={{#time: j F | 1 day}}}}&lt;br /&gt;
			{{Button|label={{#time: j M | +2 days}}|page={{#time: j F | 2 day}}}}&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
		{{Section divider|On Earth}}&lt;br /&gt;
		{{#invoke:Transcluder|main|{{CURRENTDAY}} {{CURRENTMONTHNAME}}|only=lists|lists=1|references=0}}&lt;br /&gt;
		{{Section divider|In Arda}}&lt;br /&gt;
		{{#invoke:Transcluder|main|{{CURRENTDAY}} {{CURRENTMONTHNAME}}|only=lists|lists=2|references=0}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;}}&lt;br /&gt;
|content2 = &amp;lt;!--&lt;br /&gt;
	--&amp;gt;{{Flexbox&amp;lt;!--&lt;br /&gt;
	--&amp;gt;|rows = 2&lt;br /&gt;
	--&amp;gt;|content1 = {{Main page/editing}}&amp;lt;!--&lt;br /&gt;
	--&amp;gt;|content2 = {{Main page/social}}&amp;lt;!--&lt;br /&gt;
	--&amp;gt;}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Maegnus</name></author>
	</entry>
	<entry>
		<id>https://classic.pgnrp.com/index.php?title=Template:Main_page/featured/styles.css&amp;diff=82</id>
		<title>Template:Main page/featured/styles.css</title>
		<link rel="alternate" type="text/html" href="https://classic.pgnrp.com/index.php?title=Template:Main_page/featured/styles.css&amp;diff=82"/>
		<updated>2025-05-21T05:00:53Z</updated>

		<summary type="html">&lt;p&gt;Maegnus: Created page with &amp;quot;.tg-mainpage-featured-quote {     justify-content: center; }  .tg-mainpage-featured-quote::before {     content: &amp;quot;”&amp;quot;;     position: absolute;     right: 0;     top: 0;     font-size: 400px;     line-height: 0.75;     opacity: var(--tg-opacity-pattern); }  .tg-mainpage-featured-quote .tg-card-body {     margin: 1.5rem auto; }  .tg-mainpage-featured-quote blockquote, .tg-mainpage-featured-quote p {     margin: 0; }  .tg-mainpage-featured-artist .tg-card-body {     displa...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.tg-mainpage-featured-quote {&lt;br /&gt;
    justify-content: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-mainpage-featured-quote::before {&lt;br /&gt;
    content: &amp;quot;”&amp;quot;;&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    right: 0;&lt;br /&gt;
    top: 0;&lt;br /&gt;
    font-size: 400px;&lt;br /&gt;
    line-height: 0.75;&lt;br /&gt;
    opacity: var(--tg-opacity-pattern);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-mainpage-featured-quote .tg-card-body {&lt;br /&gt;
    margin: 1.5rem auto;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-mainpage-featured-quote blockquote,&lt;br /&gt;
.tg-mainpage-featured-quote p {&lt;br /&gt;
    margin: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-mainpage-featured-artist .tg-card-body {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    gap: 0.75rem;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-mainpage-featured-artist-portrait {&lt;br /&gt;
    width: 48px;&lt;br /&gt;
    height: 48px;&lt;br /&gt;
    border-radius: var(--tg-border-radius-circle);&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-mainpage-featured-artist-portrait img {&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    height: 100%;&lt;br /&gt;
    object-fit: cover;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Maegnus</name></author>
	</entry>
	<entry>
		<id>https://classic.pgnrp.com/index.php?title=Template:Main_page/featured&amp;diff=81</id>
		<title>Template:Main page/featured</title>
		<link rel="alternate" type="text/html" href="https://classic.pgnrp.com/index.php?title=Template:Main_page/featured&amp;diff=81"/>
		<updated>2025-05-21T05:00:29Z</updated>

		<summary type="html">&lt;p&gt;Maegnus: Created page with &amp;quot;&amp;lt;!--  Template:Main page/featured -------------------- Featured component of the main page  --&amp;gt;&amp;lt;div class=&amp;quot;tg-mainpage-featured&amp;quot;&amp;gt;&amp;lt;!-- 	--&amp;gt;{{Section divider|Featured}}&amp;lt;!-- 	--&amp;gt;{{Flexbox&amp;lt;!-- 	--&amp;gt;|columns = 3&amp;lt;!-- 	--&amp;gt;|content1 = &amp;lt;!--  		Featured article 		---------------- 		--&amp;gt;{{Card&amp;lt;!-- 		--&amp;gt;|height = 20rem&amp;lt;!-- 		--&amp;gt;|class = tg-mainpage-featured-article&amp;lt;!-- 		--&amp;gt;|image = {{Main page/settings|featuredarticleimage}}&amp;lt;!-- 		--&amp;gt;|imageColorR = {{Main page/settings|featuredarticl...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
Template:Main page/featured&lt;br /&gt;
--------------------&lt;br /&gt;
Featured component of the main page&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&amp;lt;div class=&amp;quot;tg-mainpage-featured&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
	--&amp;gt;{{Section divider|Featured}}&amp;lt;!--&lt;br /&gt;
	--&amp;gt;{{Flexbox&amp;lt;!--&lt;br /&gt;
	--&amp;gt;|columns = 3&amp;lt;!--&lt;br /&gt;
	--&amp;gt;|content1 = &amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
		Featured article&lt;br /&gt;
		----------------&lt;br /&gt;
		--&amp;gt;{{Card&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|height = 20rem&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|class = tg-mainpage-featured-article&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|image = {{Main page/settings|featuredarticleimage}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|imageColorR = {{Main page/settings|featuredarticleimagecolorr}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|imageColorG = {{Main page/settings|featuredarticleimagecolorg}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|imageColorB = {{Main page/settings|featuredarticleimagecolorb}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|imagePosition = {{Main page/settings|featuredarticleimageposition}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|label = Article&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|labelpage = Tolkien Gateway:Featured articles&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|title = {{Main page/settings|featuredarticlename}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|caption = {{Main page/settings|featuredarticlecaption}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|link = {{Main page/settings|featuredarticlepage}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;}}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
	--&amp;gt;|content2 = &amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
		Featured artist&lt;br /&gt;
		---------------&lt;br /&gt;
		--&amp;gt;{{Card&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|height = 20rem&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|class = tg-mainpage-featured-artist&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|image = {{Main page/settings|featuredartistartworkimage}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|imageColorR = {{Main page/settings|featuredartistartworkimagecolorr}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|imageColorG = {{Main page/settings|featuredartistartworkimagecolorg}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|imageColorB = {{Main page/settings|featuredartistartworkimagecolorb}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|imagePosition = {{Main page/settings|featuredartistartworkimageposition}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|label = Artist&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|labelpage = Tolkien Gateway:Featured artists&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|content = &amp;lt;!--&lt;br /&gt;
			--&amp;gt;&amp;lt;div class=&amp;quot;tg-mainpage-featured-artist-portrait&amp;quot;&amp;gt;[[File:{{Main page/settings|featuredartistimage}}|48px|link=]]&amp;lt;/div&amp;gt;&amp;lt;!--&lt;br /&gt;
			--&amp;gt;&amp;lt;div class=&amp;quot;tg-mainpage-featured-artist-info&amp;quot;&amp;gt;&amp;lt;!---&lt;br /&gt;
				--&amp;gt;&amp;lt;div class=&amp;quot;tg-card-caption&amp;quot;&amp;gt;{{Main page/settings|featuredartistartworkname}}&amp;lt;/div&amp;gt;&amp;lt;!--&lt;br /&gt;
				--&amp;gt;&amp;lt;div class=&amp;quot;tg-card-title&amp;quot;&amp;gt;{{Main page/settings|featuredartistname}}&amp;lt;/div&amp;gt;&amp;lt;!--&lt;br /&gt;
			--&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|link = {{Main page/settings|featuredartistpage}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|afterImage = {{Main page/settings|featuredartistdescription}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;}}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
	--&amp;gt;|content3 = &amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
		Featured quote&lt;br /&gt;
		--------------&lt;br /&gt;
		--&amp;gt;{{Card&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|height = 20rem&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|class = tg-mainpage-featured-quote&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|label = Quote&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|labelpage = Tolkien Gateway:Featured quotes&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|content = {{Blockquote&amp;lt;!--&lt;br /&gt;
			--&amp;gt;|{{Main page/settings|featuredquote}}&amp;lt;!--&lt;br /&gt;
			--&amp;gt;|{{Main page/settings|featuredquotecitation}}&amp;lt;!--&lt;br /&gt;
			--&amp;gt;}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;}}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
	--&amp;gt;}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;templatestyles src=&amp;quot;Template:Main page/featured/styles.css&amp;quot;/&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;noinclude&amp;gt;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
Template documentation&lt;br /&gt;
----------------------&lt;br /&gt;
[[Category:Featured]]&lt;br /&gt;
--&amp;gt;{{/doc}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maegnus</name></author>
	</entry>
	<entry>
		<id>https://classic.pgnrp.com/index.php?title=Main_page/browse/doc&amp;diff=80</id>
		<title>Main page/browse/doc</title>
		<link rel="alternate" type="text/html" href="https://classic.pgnrp.com/index.php?title=Main_page/browse/doc&amp;diff=80"/>
		<updated>2025-05-21T04:56:06Z</updated>

		<summary type="html">&lt;p&gt;Maegnus: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Browse component of the main page&lt;br /&gt;
&lt;br /&gt;
&amp;lt;includeonly&amp;gt;[[Category:Main page templates]]&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maegnus</name></author>
	</entry>
	<entry>
		<id>https://classic.pgnrp.com/index.php?title=18_April&amp;diff=78</id>
		<title>18 April</title>
		<link rel="alternate" type="text/html" href="https://classic.pgnrp.com/index.php?title=18_April&amp;diff=78"/>
		<updated>2025-05-21T04:56:06Z</updated>

		<summary type="html">&lt;p&gt;Maegnus: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{month|April}}&lt;br /&gt;
Events that occurred on 18 April.&lt;br /&gt;
==On Earth==&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;[[1917]]&#039;&#039;&#039; - [[J.R.R. Tolkien]] and [[Christopher Wiseman]], the Great Twin Brethren, meet in Harrogate, and discuss the fate of the [[T.C.B.S.|Barrovians]] and the future of the Society. &lt;br /&gt;
* &#039;&#039;&#039;[[1930]]&#039;&#039;&#039; - Voice actor [[Clive Revill]] is born.&lt;br /&gt;
* &#039;&#039;&#039;[[1944]]&#039;&#039;&#039; - [[J.R.R. Tolkien]] writes [[Letter 61]].&lt;br /&gt;
* &#039;&#039;&#039;[[1945]]&#039;&#039;&#039; - Amateur cartographer [[Karen Wynn Fonstad]] is born.&lt;br /&gt;
* &#039;&#039;&#039;[[1955]]&#039;&#039;&#039; - [[J.R.R. Tolkien]] writes [[Letter 162]].&lt;br /&gt;
* &#039;&#039;&#039;[[1955]]&#039;&#039;&#039; - [[Grant Major]] is born.&lt;br /&gt;
* &#039;&#039;&#039;[[1963]]&#039;&#039;&#039; - [[J.R.R. Tolkien]] starts writing [[Letter to Mr and Mrs Kloos|a letter to Mr. and Mrs. Kloos]].&lt;br /&gt;
* &#039;&#039;&#039;[[1984]]&#039;&#039;&#039; - Voice actor [[Francis de Wolff]] dies.&lt;br /&gt;
* &#039;&#039;&#039;[[2007]]&#039;&#039;&#039; - The fourth and final day of [[The Children of Húrin Release Party]] is hosted by [[Tolkien Gateway]].&lt;br /&gt;
&lt;br /&gt;
==In Arda==&lt;br /&gt;
:&#039;&#039;There are no known events for this day.&#039;&#039;&amp;lt;noinclude&amp;gt;[[Category:Dates|109]][[fi:18. huhtikuuta]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maegnus</name></author>
	</entry>
	<entry>
		<id>https://classic.pgnrp.com/index.php?title=Main_page/featured/doc&amp;diff=76</id>
		<title>Main page/featured/doc</title>
		<link rel="alternate" type="text/html" href="https://classic.pgnrp.com/index.php?title=Main_page/featured/doc&amp;diff=76"/>
		<updated>2025-05-21T04:56:06Z</updated>

		<summary type="html">&lt;p&gt;Maegnus: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The featured component of the [[Main Page|main page]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;includeonly&amp;gt;[[Category:Main page templates]]&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maegnus</name></author>
	</entry>
	<entry>
		<id>https://classic.pgnrp.com/index.php?title=Module:Navpills/styles.css&amp;diff=74</id>
		<title>Module:Navpills/styles.css</title>
		<link rel="alternate" type="text/html" href="https://classic.pgnrp.com/index.php?title=Module:Navpills/styles.css&amp;diff=74"/>
		<updated>2025-05-21T04:50:02Z</updated>

		<summary type="html">&lt;p&gt;Maegnus: Created page with &amp;quot;.template-navpills {     display: grid;     gap: 0.5rem;     grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));     grid-auto-rows: 3rem;     font-size: 0.875rem; }  .template-navpill {     position: relative;     border: var(--tg-border-base);     border-radius: var( --tg-border-radius-medium);     font-weight: var(--tg-font-weight-medium);     line-height: var(--tg-line-height-xx-small);     overflow: hidden; }  .template-navpill-background {     position: a...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.template-navpills {&lt;br /&gt;
    display: grid;&lt;br /&gt;
    gap: 0.5rem;&lt;br /&gt;
    grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));&lt;br /&gt;
    grid-auto-rows: 3rem;&lt;br /&gt;
    font-size: 0.875rem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.template-navpill {&lt;br /&gt;
    position: relative;&lt;br /&gt;
    border: var(--tg-border-base);&lt;br /&gt;
    border-radius: var( --tg-border-radius-medium);&lt;br /&gt;
    font-weight: var(--tg-font-weight-medium);&lt;br /&gt;
    line-height: var(--tg-line-height-xx-small);&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.template-navpill-background {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    inset: 0;&lt;br /&gt;
    pointer-events: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.template-navpill-background:after {&lt;br /&gt;
    content: &amp;quot;&amp;quot;;&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    inset: 0;&lt;br /&gt;
    background: linear-gradient(to right, #000, transparent);&lt;br /&gt;
    transition: transform 250ms ease;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.template-navpill-background img {&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    height: 100%;&lt;br /&gt;
    object-fit: cover;&lt;br /&gt;
    transition: 100ms ease;&lt;br /&gt;
    transition-property: transform;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.template-navpill:hover .template-navpill-background::after {&lt;br /&gt;
    transform: translateX(-100%);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.template-navpill:hover .template-navpill-background img {&lt;br /&gt;
    transform: scale(1.1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.template-navpill &amp;gt; a {&lt;br /&gt;
    position: relative;&lt;br /&gt;
    padding: 0 1rem;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    color: var(--tg-color-emphasized);&lt;br /&gt;
    text-decoration: none;&lt;br /&gt;
    height: 100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.template-navpill &amp;gt; .template-navpill-background + a {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
    text-shadow: -1px 0 .2em #000, 0 1px .2em #000, 1px 0 .2em #000, 0 -1px .2em #000;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.template-navpill:hover {&lt;br /&gt;
    background: rgba(255, 255, 255, 0.3);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.template-navpill:active {&lt;br /&gt;
    background: rgba(255, 255, 255, 0.1);&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Maegnus</name></author>
	</entry>
	<entry>
		<id>https://classic.pgnrp.com/index.php?title=Main_Page&amp;diff=73</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://classic.pgnrp.com/index.php?title=Main_Page&amp;diff=73"/>
		<updated>2025-05-21T04:48:13Z</updated>

		<summary type="html">&lt;p&gt;Maegnus: Changed protection settings for &amp;quot;Main Page&amp;quot;: High traffic page ([Edit=Allow only administrators] (indefinite) [Move=Allow only administrators] (indefinite)) [cascading]&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Main page/header}}&lt;br /&gt;
{{Main page/navigation}}&lt;br /&gt;
{{Main page/featured}}&lt;br /&gt;
{{Main page/legacy}}&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
{{Main page/browse}}&lt;br /&gt;
&amp;lt;div class=&amp;quot;metadata&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;[&amp;lt;/nowiki&amp;gt;[https://tolkiengateway.net/wiki/Template:Main_page/settings?action=edit settings]&amp;lt;nowiki&amp;gt;]&amp;lt;/nowiki&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Contents]]&lt;br /&gt;
&lt;br /&gt;
[[de:Hauptseite]]&lt;br /&gt;
[[fr:encyclo]]&lt;br /&gt;
[[fi:Etusivu]]&lt;br /&gt;
[[pt-br:Página principal]]&lt;br /&gt;
[[ru:Заглавная_страница]]&lt;br /&gt;
[[zh:首页]]&lt;br /&gt;
&lt;br /&gt;
{{#seo:&lt;br /&gt;
|keywords=lotr,lord of the rings,tolkien,encyclopedia,wiki&lt;br /&gt;
|description=The largest Lord of the Rings encyclopedia&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
__NOTOC__ __NOEDITSECTION__ __NOTITLE__&lt;/div&gt;</summary>
		<author><name>Maegnus</name></author>
	</entry>
	<entry>
		<id>https://classic.pgnrp.com/index.php?title=Template:Main_page/header/styles.css&amp;diff=72</id>
		<title>Template:Main page/header/styles.css</title>
		<link rel="alternate" type="text/html" href="https://classic.pgnrp.com/index.php?title=Template:Main_page/header/styles.css&amp;diff=72"/>
		<updated>2025-05-21T04:46:29Z</updated>

		<summary type="html">&lt;p&gt;Maegnus: Created page with &amp;quot;.tg-mainpage-header { 	position: relative; 	margin-top: -2rem; 	margin-bottom: -4rem; 	padding-top: 6rem; 	padding-bottom: 6rem; 	clear: both; 	overflow: hidden; /* Prevent circular inscription from affecting element size */ 	pointer-events: none; /* So that you can click elements overlap with the header */ }  .tg-mainpage-header::before { 	content: &amp;#039;&amp;#039;; 	position: absolute; 	inset: 0; 	background-image: url(/w/images/7/72/Main_page_header_circular_inscription.svg); 	back...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.tg-mainpage-header {&lt;br /&gt;
	position: relative;&lt;br /&gt;
	margin-top: -2rem;&lt;br /&gt;
	margin-bottom: -4rem;&lt;br /&gt;
	padding-top: 6rem;&lt;br /&gt;
	padding-bottom: 6rem;&lt;br /&gt;
	clear: both;&lt;br /&gt;
	overflow: hidden; /* Prevent circular inscription from affecting element size */&lt;br /&gt;
	pointer-events: none; /* So that you can click elements overlap with the header */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-mainpage-header::before {&lt;br /&gt;
	content: &#039;&#039;;&lt;br /&gt;
	position: absolute;&lt;br /&gt;
	inset: 0;&lt;br /&gt;
	background-image: url(/w/images/7/72/Main_page_header_circular_inscription.svg);&lt;br /&gt;
	background-repeat: no-repeat;&lt;br /&gt;
	background-position: center;&lt;br /&gt;
	background-size: contain;&lt;br /&gt;
	opacity: 0.1;&lt;br /&gt;
	filter: var(--filter-invert);&lt;br /&gt;
	pointer-events: none;&lt;br /&gt;
	animation: spin 60s infinite linear;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-mainpage-content {&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	display: flex;&lt;br /&gt;
	flex-direction: column;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	pointer-events: auto; /* Reset pointer-events: none from header */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Fellowship background */&lt;br /&gt;
.tg-mainpage-header-wordmark::before {&lt;br /&gt;
	content: &#039;&#039;;&lt;br /&gt;
	position: absolute;&lt;br /&gt;
	left: 0;&lt;br /&gt;
	right: 0;&lt;br /&gt;
	top: -100%;&lt;br /&gt;
	margin: 0 auto;&lt;br /&gt;
	width: 50%;&lt;br /&gt;
	height: 100%;&lt;br /&gt;
	background-image: url(/w/images/b/bf/The_Fellowship_of_the_Ring_silhouette.svg);&lt;br /&gt;
	background-repeat: no-repeat;&lt;br /&gt;
	background-position: bottom center;&lt;br /&gt;
	opacity: 0.2;&lt;br /&gt;
	filter: var(--filter-invert);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Temp styles until we have wordmark */&lt;br /&gt;
.tg-mainpage-header-wordmark {&lt;br /&gt;
	position: relative;&lt;br /&gt;
	margin-top: 2.5rem;&lt;br /&gt;
	width: 420px;&lt;br /&gt;
	max-width: 100%;&lt;br /&gt;
	padding-top: 0.75rem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-mainpage-header-wordmark img {&lt;br /&gt;
	width: 100%;&lt;br /&gt;
	height: 100%;&lt;br /&gt;
	filter: var(--filter-invert);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-mainpage-header-tagline {&lt;br /&gt;
	margin-top: -0.25rem;&lt;br /&gt;
	color: var(--tg-color-subtle);&lt;br /&gt;
	font-size: var(--tg-font-size-small);&lt;br /&gt;
	line-height: var(--tg-line-height-xx-small);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-mainpage-header-search {&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	background-color: var(--tg-color-progressive);&lt;br /&gt;
	border-radius: var(--tg-border-radius-pill);&lt;br /&gt;
	color: var(--tg-color-inverted-progressive);&lt;br /&gt;
	cursor: pointer;&lt;br /&gt;
	display: flex;&lt;br /&gt;
	font-size: 0.875rem;&lt;br /&gt;
	font-weight: var(--font-weight-medium);&lt;br /&gt;
	gap: 0.5rem;&lt;br /&gt;
	line-height: 1;&lt;br /&gt;
	margin-top: 1rem;&lt;br /&gt;
	padding: 1rem 2rem;&lt;br /&gt;
	user-select: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-mainpage-header-search:before {&lt;br /&gt;
	content: &#039;&#039;;&lt;br /&gt;
	width: 1rem;&lt;br /&gt;
	height: 1rem;&lt;br /&gt;
	mask-image: url(/w/images/a/a5/CdxIconSearch.svg);&lt;br /&gt;
	mask-size: contain;&lt;br /&gt;
	background-color: currentColor;&lt;br /&gt;
	display: block;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Keyboard hint */&lt;br /&gt;
@media (hover: hover) {&lt;br /&gt;
	.tg-mainpage-header-search:after {&lt;br /&gt;
		content: &#039;/&#039;;&lt;br /&gt;
		margin-top: -2px;&lt;br /&gt;
		margin-bottom: -2px;&lt;br /&gt;
		margin-left: 2px;&lt;br /&gt;
		width: 18px;&lt;br /&gt;
		height: 18px;&lt;br /&gt;
		display: flex;&lt;br /&gt;
		background-color: var(--tg-color-inverted-progressive);&lt;br /&gt;
		color: var(--tg-color-progressive);&lt;br /&gt;
		border-radius: var(--tg-border-radius-small);&lt;br /&gt;
		line-height: 1;&lt;br /&gt;
		align-items: center;&lt;br /&gt;
		justify-content: center;&lt;br /&gt;
		font-size: 10px;&lt;br /&gt;
		font-weight: 900;&lt;br /&gt;
		opacity: 0.6;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-mainpage-header-search:hover {&lt;br /&gt;
	background-color: var(--tg-color-progressive--hover);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-mainpage-header-search:active {&lt;br /&gt;
	background-color: var(--tg-color-progressive--active);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@keyframes spin {&lt;br /&gt;
	from {&lt;br /&gt;
		transform: rotate(0deg);&lt;br /&gt;
	}&lt;br /&gt;
	to {&lt;br /&gt;
		transform: rotate(360deg);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Maegnus</name></author>
	</entry>
	<entry>
		<id>https://classic.pgnrp.com/index.php?title=Module:Arguments&amp;diff=71</id>
		<title>Module:Arguments</title>
		<link rel="alternate" type="text/html" href="https://classic.pgnrp.com/index.php?title=Module:Arguments&amp;diff=71"/>
		<updated>2025-05-21T04:44:03Z</updated>

		<summary type="html">&lt;p&gt;Maegnus: Created page with &amp;quot;-- This module provides easy processing of arguments passed to Scribunto from -- #invoke. It is intended for use by other Lua modules, and should not be -- called from #invoke directly.  local libraryUtil = require(&amp;#039;libraryUtil&amp;#039;) local checkType = libraryUtil.checkType  local arguments = {}  -- Generate four different tidyVal functions, so that we don&amp;#039;t have to check the -- options every time we call it.  local function tidyValDefault(key, val) 	if type(val) == &amp;#039;string&amp;#039;...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- This module provides easy processing of arguments passed to Scribunto from&lt;br /&gt;
-- #invoke. It is intended for use by other Lua modules, and should not be&lt;br /&gt;
-- called from #invoke directly.&lt;br /&gt;
&lt;br /&gt;
local libraryUtil = require(&#039;libraryUtil&#039;)&lt;br /&gt;
local checkType = libraryUtil.checkType&lt;br /&gt;
&lt;br /&gt;
local arguments = {}&lt;br /&gt;
&lt;br /&gt;
-- Generate four different tidyVal functions, so that we don&#039;t have to check the&lt;br /&gt;
-- options every time we call it.&lt;br /&gt;
&lt;br /&gt;
local function tidyValDefault(key, val)&lt;br /&gt;
	if type(val) == &#039;string&#039; then&lt;br /&gt;
		val = val:match(&#039;^%s*(.-)%s*$&#039;)&lt;br /&gt;
		if val == &#039;&#039; then&lt;br /&gt;
			return nil&lt;br /&gt;
		else&lt;br /&gt;
			return val&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		return val&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function tidyValTrimOnly(key, val)&lt;br /&gt;
	if type(val) == &#039;string&#039; then&lt;br /&gt;
		return val:match(&#039;^%s*(.-)%s*$&#039;)&lt;br /&gt;
	else&lt;br /&gt;
		return val&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function tidyValRemoveBlanksOnly(key, val)&lt;br /&gt;
	if type(val) == &#039;string&#039; then&lt;br /&gt;
		if val:find(&#039;%S&#039;) then&lt;br /&gt;
			return val&lt;br /&gt;
		else&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		return val&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function tidyValNoChange(key, val)&lt;br /&gt;
	return val&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function matchesTitle(given, title)&lt;br /&gt;
	local tp = type( given )&lt;br /&gt;
	return (tp == &#039;string&#039; or tp == &#039;number&#039;) and mw.title.new( given ).prefixedText == title&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local translate_mt = { __index = function(t, k) return k end }&lt;br /&gt;
&lt;br /&gt;
function arguments.getArgs(frame, options)&lt;br /&gt;
	checkType(&#039;getArgs&#039;, 1, frame, &#039;table&#039;, true)&lt;br /&gt;
	checkType(&#039;getArgs&#039;, 2, options, &#039;table&#039;, true)&lt;br /&gt;
	frame = frame or {}&lt;br /&gt;
	options = options or {}&lt;br /&gt;
&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Set up argument translation.&lt;br /&gt;
	--]]&lt;br /&gt;
	options.translate = options.translate or {}&lt;br /&gt;
	if getmetatable(options.translate) == nil then&lt;br /&gt;
		setmetatable(options.translate, translate_mt)&lt;br /&gt;
	end&lt;br /&gt;
	if options.backtranslate == nil then&lt;br /&gt;
		options.backtranslate = {}&lt;br /&gt;
		for k,v in pairs(options.translate) do&lt;br /&gt;
			options.backtranslate[v] = k&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if options.backtranslate and getmetatable(options.backtranslate) == nil then&lt;br /&gt;
		setmetatable(options.backtranslate, {&lt;br /&gt;
			__index = function(t, k)&lt;br /&gt;
				if options.translate[k] ~= k then&lt;br /&gt;
					return nil&lt;br /&gt;
				else&lt;br /&gt;
					return k&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		})&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Get the argument tables. If we were passed a valid frame object, get the&lt;br /&gt;
	-- frame arguments (fargs) and the parent frame arguments (pargs), depending&lt;br /&gt;
	-- on the options set and on the parent frame&#039;s availability. If we weren&#039;t&lt;br /&gt;
	-- passed a valid frame object, we are being called from another Lua module&lt;br /&gt;
	-- or from the debug console, so assume that we were passed a table of args&lt;br /&gt;
	-- directly, and assign it to a new variable (luaArgs).&lt;br /&gt;
	--]]&lt;br /&gt;
	local fargs, pargs, luaArgs&lt;br /&gt;
	if type(frame.args) == &#039;table&#039; and type(frame.getParent) == &#039;function&#039; then&lt;br /&gt;
		if options.wrappers then&lt;br /&gt;
			--[[&lt;br /&gt;
			-- The wrappers option makes Module:Arguments look up arguments in&lt;br /&gt;
			-- either the frame argument table or the parent argument table, but&lt;br /&gt;
			-- not both. This means that users can use either the #invoke syntax&lt;br /&gt;
			-- or a wrapper template without the loss of performance associated&lt;br /&gt;
			-- with looking arguments up in both the frame and the parent frame.&lt;br /&gt;
			-- Module:Arguments will look up arguments in the parent frame&lt;br /&gt;
			-- if it finds the parent frame&#039;s title in options.wrapper;&lt;br /&gt;
			-- otherwise it will look up arguments in the frame object passed&lt;br /&gt;
			-- to getArgs.&lt;br /&gt;
			--]]&lt;br /&gt;
			local parent = frame:getParent()&lt;br /&gt;
			if not parent then&lt;br /&gt;
				fargs = frame.args&lt;br /&gt;
			else&lt;br /&gt;
				local title = parent:getTitle():gsub(&#039;/sandbox$&#039;, &#039;&#039;)&lt;br /&gt;
				local found = false&lt;br /&gt;
				if matchesTitle(options.wrappers, title) then&lt;br /&gt;
					found = true&lt;br /&gt;
				elseif type(options.wrappers) == &#039;table&#039; then&lt;br /&gt;
					for _,v in pairs(options.wrappers) do&lt;br /&gt;
						if matchesTitle(v, title) then&lt;br /&gt;
							found = true&lt;br /&gt;
							break&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
&lt;br /&gt;
				-- We test for false specifically here so that nil (the default) acts like true.&lt;br /&gt;
				if found or options.frameOnly == false then&lt;br /&gt;
					pargs = parent.args&lt;br /&gt;
				end&lt;br /&gt;
				if not found or options.parentOnly == false then&lt;br /&gt;
					fargs = frame.args&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			-- options.wrapper isn&#039;t set, so check the other options.&lt;br /&gt;
			if not options.parentOnly then&lt;br /&gt;
				fargs = frame.args&lt;br /&gt;
			end&lt;br /&gt;
			if not options.frameOnly then&lt;br /&gt;
				local parent = frame:getParent()&lt;br /&gt;
				pargs = parent and parent.args or nil&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if options.parentFirst then&lt;br /&gt;
			fargs, pargs = pargs, fargs&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		luaArgs = frame&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Set the order of precedence of the argument tables. If the variables are&lt;br /&gt;
	-- nil, nothing will be added to the table, which is how we avoid clashes&lt;br /&gt;
	-- between the frame/parent args and the Lua args.&lt;br /&gt;
	local argTables = {fargs}&lt;br /&gt;
	argTables[#argTables + 1] = pargs&lt;br /&gt;
	argTables[#argTables + 1] = luaArgs&lt;br /&gt;
&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Generate the tidyVal function. If it has been specified by the user, we&lt;br /&gt;
	-- use that; if not, we choose one of four functions depending on the&lt;br /&gt;
	-- options chosen. This is so that we don&#039;t have to call the options table&lt;br /&gt;
	-- every time the function is called.&lt;br /&gt;
	--]]&lt;br /&gt;
	local tidyVal = options.valueFunc&lt;br /&gt;
	if tidyVal then&lt;br /&gt;
		if type(tidyVal) ~= &#039;function&#039; then&lt;br /&gt;
			error(&lt;br /&gt;
				&amp;quot;bad value assigned to option &#039;valueFunc&#039;&amp;quot;&lt;br /&gt;
					.. &#039;(function expected, got &#039;&lt;br /&gt;
					.. type(tidyVal)&lt;br /&gt;
					.. &#039;)&#039;,&lt;br /&gt;
				2&lt;br /&gt;
			)&lt;br /&gt;
		end&lt;br /&gt;
	elseif options.trim ~= false then&lt;br /&gt;
		if options.removeBlanks ~= false then&lt;br /&gt;
			tidyVal = tidyValDefault&lt;br /&gt;
		else&lt;br /&gt;
			tidyVal = tidyValTrimOnly&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		if options.removeBlanks ~= false then&lt;br /&gt;
			tidyVal = tidyValRemoveBlanksOnly&lt;br /&gt;
		else&lt;br /&gt;
			tidyVal = tidyValNoChange&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Set up the args, metaArgs and nilArgs tables. args will be the one&lt;br /&gt;
	-- accessed from functions, and metaArgs will hold the actual arguments. Nil&lt;br /&gt;
	-- arguments are memoized in nilArgs, and the metatable connects all of them&lt;br /&gt;
	-- together.&lt;br /&gt;
	--]]&lt;br /&gt;
	local args, metaArgs, nilArgs, metatable = {}, {}, {}, {}&lt;br /&gt;
	setmetatable(args, metatable)&lt;br /&gt;
&lt;br /&gt;
	local function mergeArgs(tables)&lt;br /&gt;
		--[[&lt;br /&gt;
		-- Accepts multiple tables as input and merges their keys and values&lt;br /&gt;
		-- into one table. If a value is already present it is not overwritten;&lt;br /&gt;
		-- tables listed earlier have precedence. We are also memoizing nil&lt;br /&gt;
		-- values, which can be overwritten if they are &#039;s&#039; (soft).&lt;br /&gt;
		--]]&lt;br /&gt;
		for _, t in ipairs(tables) do&lt;br /&gt;
			for key, val in pairs(t) do&lt;br /&gt;
				if metaArgs[key] == nil and nilArgs[key] ~= &#039;h&#039; then&lt;br /&gt;
					local tidiedVal = tidyVal(key, val)&lt;br /&gt;
					if tidiedVal == nil then&lt;br /&gt;
						nilArgs[key] = &#039;s&#039;&lt;br /&gt;
					else&lt;br /&gt;
						metaArgs[key] = tidiedVal&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Define metatable behaviour. Arguments are memoized in the metaArgs table,&lt;br /&gt;
	-- and are only fetched from the argument tables once. Fetching arguments&lt;br /&gt;
	-- from the argument tables is the most resource-intensive step in this&lt;br /&gt;
	-- module, so we try and avoid it where possible. For this reason, nil&lt;br /&gt;
	-- arguments are also memoized, in the nilArgs table. Also, we keep a record&lt;br /&gt;
	-- in the metatable of when pairs and ipairs have been called, so we do not&lt;br /&gt;
	-- run pairs and ipairs on the argument tables more than once. We also do&lt;br /&gt;
	-- not run ipairs on fargs and pargs if pairs has already been run, as all&lt;br /&gt;
	-- the arguments will already have been copied over.&lt;br /&gt;
	--]]&lt;br /&gt;
&lt;br /&gt;
	metatable.__index = function (t, key)&lt;br /&gt;
		--[[&lt;br /&gt;
		-- Fetches an argument when the args table is indexed. First we check&lt;br /&gt;
		-- to see if the value is memoized, and if not we try and fetch it from&lt;br /&gt;
		-- the argument tables. When we check memoization, we need to check&lt;br /&gt;
		-- metaArgs before nilArgs, as both can be non-nil at the same time.&lt;br /&gt;
		-- If the argument is not present in metaArgs, we also check whether&lt;br /&gt;
		-- pairs has been run yet. If pairs has already been run, we return nil.&lt;br /&gt;
		-- This is because all the arguments will have already been copied into&lt;br /&gt;
		-- metaArgs by the mergeArgs function, meaning that any other arguments&lt;br /&gt;
		-- must be nil.&lt;br /&gt;
		--]]&lt;br /&gt;
		if type(key) == &#039;string&#039; then&lt;br /&gt;
			key = options.translate[key]&lt;br /&gt;
		end&lt;br /&gt;
		local val = metaArgs[key]&lt;br /&gt;
		if val ~= nil then&lt;br /&gt;
			return val&lt;br /&gt;
		elseif metatable.donePairs or nilArgs[key] then&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
		for _, argTable in ipairs(argTables) do&lt;br /&gt;
			local argTableVal = tidyVal(key, argTable[key])&lt;br /&gt;
			if argTableVal ~= nil then&lt;br /&gt;
				metaArgs[key] = argTableVal&lt;br /&gt;
				return argTableVal&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		nilArgs[key] = &#039;h&#039;&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	metatable.__newindex = function (t, key, val)&lt;br /&gt;
		-- This function is called when a module tries to add a new value to the&lt;br /&gt;
		-- args table, or tries to change an existing value.&lt;br /&gt;
		if type(key) == &#039;string&#039; then&lt;br /&gt;
			key = options.translate[key]&lt;br /&gt;
		end&lt;br /&gt;
		if options.readOnly then&lt;br /&gt;
			error(&lt;br /&gt;
				&#039;could not write to argument table key &amp;quot;&#039;&lt;br /&gt;
					.. tostring(key)&lt;br /&gt;
					.. &#039;&amp;quot;; the table is read-only&#039;,&lt;br /&gt;
				2&lt;br /&gt;
			)&lt;br /&gt;
		elseif options.noOverwrite and args[key] ~= nil then&lt;br /&gt;
			error(&lt;br /&gt;
				&#039;could not write to argument table key &amp;quot;&#039;&lt;br /&gt;
					.. tostring(key)&lt;br /&gt;
					.. &#039;&amp;quot;; overwriting existing arguments is not permitted&#039;,&lt;br /&gt;
				2&lt;br /&gt;
			)&lt;br /&gt;
		elseif val == nil then&lt;br /&gt;
			--[[&lt;br /&gt;
			-- If the argument is to be overwritten with nil, we need to erase&lt;br /&gt;
			-- the value in metaArgs, so that __index, __pairs and __ipairs do&lt;br /&gt;
			-- not use a previous existing value, if present; and we also need&lt;br /&gt;
			-- to memoize the nil in nilArgs, so that the value isn&#039;t looked&lt;br /&gt;
			-- up in the argument tables if it is accessed again.&lt;br /&gt;
			--]]&lt;br /&gt;
			metaArgs[key] = nil&lt;br /&gt;
			nilArgs[key] = &#039;h&#039;&lt;br /&gt;
		else&lt;br /&gt;
			metaArgs[key] = val&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function translatenext(invariant)&lt;br /&gt;
		local k, v = next(invariant.t, invariant.k)&lt;br /&gt;
		invariant.k = k&lt;br /&gt;
		if k == nil then&lt;br /&gt;
			return nil&lt;br /&gt;
		elseif type(k) ~= &#039;string&#039; or not options.backtranslate then&lt;br /&gt;
			return k, v&lt;br /&gt;
		else&lt;br /&gt;
			local backtranslate = options.backtranslate[k]&lt;br /&gt;
			if backtranslate == nil then&lt;br /&gt;
				-- Skip this one. This is a tail call, so this won&#039;t cause stack overflow&lt;br /&gt;
				return translatenext(invariant)&lt;br /&gt;
			else&lt;br /&gt;
				return backtranslate, v&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	metatable.__pairs = function ()&lt;br /&gt;
		-- Called when pairs is run on the args table.&lt;br /&gt;
		if not metatable.donePairs then&lt;br /&gt;
			mergeArgs(argTables)&lt;br /&gt;
			metatable.donePairs = true&lt;br /&gt;
		end&lt;br /&gt;
		return translatenext, { t = metaArgs }&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function inext(t, i)&lt;br /&gt;
		-- This uses our __index metamethod&lt;br /&gt;
		local v = t[i + 1]&lt;br /&gt;
		if v ~= nil then&lt;br /&gt;
			return i + 1, v&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	metatable.__ipairs = function (t)&lt;br /&gt;
		-- Called when ipairs is run on the args table.&lt;br /&gt;
		return inext, t, 0&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return args&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return arguments&lt;/div&gt;</summary>
		<author><name>Maegnus</name></author>
	</entry>
	<entry>
		<id>https://classic.pgnrp.com/index.php?title=Module:Navpills&amp;diff=70</id>
		<title>Module:Navpills</title>
		<link rel="alternate" type="text/html" href="https://classic.pgnrp.com/index.php?title=Module:Navpills&amp;diff=70"/>
		<updated>2025-05-21T04:41:50Z</updated>

		<summary type="html">&lt;p&gt;Maegnus: Created page with &amp;quot;local mArguments --initialize lazily local getArgNums = require(&amp;#039;Module:Common&amp;#039;).getArgNums local p = {}   --Implements {{Navpills}} from the frame function p.navpills( frame ) 	mArguments = require( &amp;#039;Module:Arguments&amp;#039; ) 	return p._navpills( mArguments.getArgs( frame ) ) end   function p._navpills( args ) 	if not args then 		return &amp;#039;Missing arguments&amp;#039; 	end  	local html = mw.html.create( &amp;#039;div&amp;#039; ):addClass( &amp;#039;template-navpills&amp;#039; ):attr( &amp;#039;role&amp;#039;, &amp;#039;navigation&amp;#039; ) 	 	for i, _ in i...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local mArguments --initialize lazily&lt;br /&gt;
local getArgNums = require(&#039;Module:Common&#039;).getArgNums&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--Implements {{Navpills}} from the frame&lt;br /&gt;
function p.navpills( frame )&lt;br /&gt;
	mArguments = require( &#039;Module:Arguments&#039; )&lt;br /&gt;
	return p._navpills( mArguments.getArgs( frame ) )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function p._navpills( args )&lt;br /&gt;
	if not args then&lt;br /&gt;
		return &#039;Missing arguments&#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local html = mw.html.create( &#039;div&#039; ):addClass( &#039;template-navpills&#039; ):attr( &#039;role&#039;, &#039;navigation&#039; )&lt;br /&gt;
	&lt;br /&gt;
	for i, _ in ipairs( getArgNums( &#039;page&#039;, args ) ) do&lt;br /&gt;
		if not args[ &#039;page&#039; .. i ] then return end&lt;br /&gt;
		local num = tostring( i )&lt;br /&gt;
		local navpill = mw.html.create(&#039;div&#039;):addClass(&#039;template-navpill&#039;)&lt;br /&gt;
&lt;br /&gt;
		if args[ &#039;image&#039; .. i ] then&lt;br /&gt;
			navpill:tag(&#039;div&#039;):addClass(&#039;template-navpill-background&#039;)&lt;br /&gt;
				:wikitext( string.format( &#039;[[File:%s|x48px|link=]]&#039;, args[ &#039;image&#039; .. num ] ) )&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		navpill:wikitext( string.format( &#039;[[%s|%s]]&#039;, args[ &#039;page&#039; .. num ], args[ &#039;text&#039; .. num ] or args[ &#039;page&#039; .. num ] ) )&lt;br /&gt;
		html:node(navpill)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return mw.getCurrentFrame():extensionTag{&lt;br /&gt;
		name = &#039;templatestyles&#039;, args = { src = &#039;Module:Navpills/styles.css&#039; }&lt;br /&gt;
	} .. tostring( html )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Maegnus</name></author>
	</entry>
	<entry>
		<id>https://classic.pgnrp.com/index.php?title=Module:Common&amp;diff=69</id>
		<title>Module:Common</title>
		<link rel="alternate" type="text/html" href="https://classic.pgnrp.com/index.php?title=Module:Common&amp;diff=69"/>
		<updated>2025-05-21T04:41:15Z</updated>

		<summary type="html">&lt;p&gt;Maegnus: Created page with &amp;quot;local libraryUtil = require(&amp;#039;libraryUtil&amp;#039;) local checkType = libraryUtil.checkType local checkTypeMulti = libraryUtil.checkTypeMulti  local p = {}   --- Escape pattern for regex  --- @param s string string to escape --- @return string local function escapePattern(s) 	return s:gsub(&amp;quot;%W&amp;quot;, &amp;quot;%%%1&amp;quot;) end   --- Check if table contains value, return key if match --- --- @param t table - Table to search --- @param val any - Value to match --- @return number|nil function p.tableCo...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local libraryUtil = require(&#039;libraryUtil&#039;)&lt;br /&gt;
local checkType = libraryUtil.checkType&lt;br /&gt;
local checkTypeMulti = libraryUtil.checkTypeMulti&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--- Escape pattern for regex&lt;br /&gt;
&lt;br /&gt;
--- @param s string string to escape&lt;br /&gt;
--- @return string&lt;br /&gt;
local function escapePattern(s)&lt;br /&gt;
	return s:gsub(&amp;quot;%W&amp;quot;, &amp;quot;%%%1&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--- Check if table contains value, return key if match&lt;br /&gt;
---&lt;br /&gt;
--- @param t table - Table to search&lt;br /&gt;
--- @param val any - Value to match&lt;br /&gt;
--- @return number|nil&lt;br /&gt;
function p.tableContains(t, val)&lt;br /&gt;
	checkType(&#039;Module:Common.tableContains&#039;, 1, t, &#039;table&#039;)&lt;br /&gt;
	for k, v in pairs(t) do&lt;br /&gt;
		if v == val then&lt;br /&gt;
			return k&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--- Check if table contains key, return value if match&lt;br /&gt;
---&lt;br /&gt;
--- @param t table - Table to search&lt;br /&gt;
--- @param key string|number - Key to match&lt;br /&gt;
--- @return number|nil&lt;br /&gt;
function p.tableContainsKey(t, key)&lt;br /&gt;
	checkType(&#039;Module:Common.tableContainsKey&#039;, 1, t, &#039;table&#039;)&lt;br /&gt;
	checkTypeMulti(&#039;Module:Common.tableContainsKey&#039;, 2, key, {&#039;string&#039;, &#039;number&#039;})&lt;br /&gt;
	for k, v in pairs(t) do&lt;br /&gt;
		if k == key then&lt;br /&gt;
			return v&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--- Split string by delimiter and return the table of string parts&lt;br /&gt;
---&lt;br /&gt;
--- @param str string String to split&lt;br /&gt;
--- @param delimiter string Delimiter used to split the string, default to %s&lt;br /&gt;
--- @return table&lt;br /&gt;
function p.splitStringIntoTable( str, delimiter )&lt;br /&gt;
        if delimiter == nil then&lt;br /&gt;
                delimiter = &amp;quot;%s&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        local t = {}&lt;br /&gt;
        local pattern = &#039;[^&#039; .. escapePattern( delimiter ) .. &#039;]+&#039;&lt;br /&gt;
        for s in string.gmatch( str, pattern ) do&lt;br /&gt;
                table.insert( t, s )&lt;br /&gt;
        end&lt;br /&gt;
        return t&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--- Returns a table containing the numbers of the arguments that exist&lt;br /&gt;
--- for the specified prefix. For example, if the prefix was &#039;data&#039;, and&lt;br /&gt;
--- &#039;data1&#039;, &#039;data2&#039;, and &#039;data5&#039; exist, it would return {1, 2, 5}.&lt;br /&gt;
---&lt;br /&gt;
--- @param prefix string Prefix of the argument name&lt;br /&gt;
--- @param args table Table of arguments&lt;br /&gt;
--- @return table Table of argument numbers&lt;br /&gt;
function p.getArgNums(prefix, args)&lt;br /&gt;
	local nums = {}&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		local num = tostring(k):match(&#039;^&#039; .. prefix .. &#039;([1-9]%d*)$&#039;)&lt;br /&gt;
		if num then table.insert(nums, tonumber(num)) end&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(nums)&lt;br /&gt;
	return nums&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Maegnus</name></author>
	</entry>
	<entry>
		<id>https://classic.pgnrp.com/index.php?title=Navpills/doc&amp;diff=68</id>
		<title>Navpills/doc</title>
		<link rel="alternate" type="text/html" href="https://classic.pgnrp.com/index.php?title=Navpills/doc&amp;diff=68"/>
		<updated>2025-05-21T03:22:31Z</updated>

		<summary type="html">&lt;p&gt;Maegnus: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;See [[Template:Navpills]]&lt;/div&gt;</summary>
		<author><name>Maegnus</name></author>
	</entry>
	<entry>
		<id>https://classic.pgnrp.com/index.php?title=Main_page/browse&amp;diff=66</id>
		<title>Main page/browse</title>
		<link rel="alternate" type="text/html" href="https://classic.pgnrp.com/index.php?title=Main_page/browse&amp;diff=66"/>
		<updated>2025-05-21T03:12:39Z</updated>

		<summary type="html">&lt;p&gt;Maegnus: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
Template:Main page/Browse&lt;br /&gt;
--------------------&lt;br /&gt;
Browse component of the main page&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;{{Card&amp;lt;!--&lt;br /&gt;
--&amp;gt;|class = tg-mainpage-browse&amp;lt;!--&lt;br /&gt;
--&amp;gt;|content = &amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
	Header&lt;br /&gt;
	------&lt;br /&gt;
	--&amp;gt;&amp;lt;div class=&amp;quot;tg-mainpage-browse-header&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
		--&amp;gt;&amp;lt;div class=&amp;quot;tg-mainpage-browse-header-content&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
			--&amp;gt;&amp;lt;div class=&amp;quot;tg-card-title&amp;quot;&amp;gt;Discover the Tolkien Gateway&amp;lt;/div&amp;gt;&amp;lt;!--&lt;br /&gt;
			--&amp;gt;&amp;lt;div class=&amp;quot;tg-card-caption&amp;quot;&amp;gt;{{NUMBEROFARTICLES}} articles written by {{NUMBEROFUSERS}} contributors.&amp;lt;/div&amp;gt;&amp;lt;!--&lt;br /&gt;
		--&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=Random article|type=secondary|page=Special:Random}}&amp;lt;!--&lt;br /&gt;
	--&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
	A to Z&lt;br /&gt;
	------&lt;br /&gt;
	--&amp;gt;&amp;lt;div class=&amp;quot;tg-mainpage-browse-atoz citizen-overflow&amp;quot;&amp;gt;&amp;lt;!--&lt;br /&gt;
		--&amp;gt;&amp;lt;div class=&amp;quot;tg-mainpage-browse-atoz-label&amp;quot;&amp;gt;A to Z&amp;lt;/div&amp;gt;&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=A|url=https://tolkiengateway.net/wiki/Special:PrefixIndex?prefix=A&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=B|url=https://tolkiengateway.net/wiki/Special:PrefixIndex?prefix=B&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=C|url=https://tolkiengateway.net/wiki/Special:PrefixIndex?prefix=C&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=D|url=https://tolkiengateway.net/wiki/Special:PrefixIndex?prefix=D&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=E|url=https://tolkiengateway.net/wiki/Special:PrefixIndex?prefix=E&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=F|url=https://tolkiengateway.net/wiki/Special:PrefixIndex?prefix=F&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=G|url=https://tolkiengateway.net/wiki/Special:PrefixIndex?prefix=G&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=H|url=https://tolkiengateway.net/wiki/Special:PrefixIndex?prefix=H&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=I|url=https://tolkiengateway.net/wiki/Special:PrefixIndex?prefix=I&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=J|url=https://tolkiengateway.net/wiki/Special:PrefixIndex?prefix=J&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=K|url=https://tolkiengateway.net/wiki/Special:PrefixIndex?prefix=K&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=L|url=https://tolkiengateway.net/wiki/Special:PrefixIndex?prefix=L&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=M|url=https://tolkiengateway.net/wiki/Special:PrefixIndex?prefix=M&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=N|url=https://tolkiengateway.net/wiki/Special:PrefixIndex?prefix=N&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=O|url=https://tolkiengateway.net/wiki/Special:PrefixIndex?prefix=O&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=P|url=https://tolkiengateway.net/wiki/Special:PrefixIndex?prefix=P&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=Q|url=https://tolkiengateway.net/wiki/Special:PrefixIndex?prefix=Q&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=R|url=https://tolkiengateway.net/wiki/Special:PrefixIndex?prefix=R&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=S|url=https://tolkiengateway.net/wiki/Special:PrefixIndex?prefix=S&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=T|url=https://tolkiengateway.net/wiki/Special:PrefixIndex?prefix=T&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=U|url=https://tolkiengateway.net/wiki/Special:PrefixIndex?prefix=U&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=V|url=https://tolkiengateway.net/wiki/Special:PrefixIndex?prefix=V&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=W|url=https://tolkiengateway.net/wiki/Special:PrefixIndex?prefix=W&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=X|url=https://tolkiengateway.net/wiki/Special:PrefixIndex?prefix=X&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=Y|url=https://tolkiengateway.net/wiki/Special:PrefixIndex?prefix=Y&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Button|label=Z|url=https://tolkiengateway.net/wiki/Special:PrefixIndex?prefix=Z&amp;amp;namespace=0&amp;amp;hideredirects=1}}&amp;lt;!--&lt;br /&gt;
	--&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
	Index&lt;br /&gt;
	-----&lt;br /&gt;
	--&amp;gt;{{Flexbox&amp;lt;!--&lt;br /&gt;
	--&amp;gt;|columns = 2&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
	--&amp;gt;|span1 = 2&amp;lt;!--&lt;br /&gt;
	--&amp;gt;|content1 = {{Section divider|[[:Category:Books by J.R.R. Tolkien|Books]]}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;&#039;&#039;[[The Hobbit]]&#039;&#039; ([[1937]]) · &#039;&#039;[[The Lord of the Rings]]&#039;&#039; ([[1954|1954]]-[[1955|5]]) · &#039;&#039;[[The Silmarillion]]&#039;&#039; ([[1977]]) · &#039;&#039;[[Unfinished Tales]]&#039;&#039; ([[1980]]) · &#039;&#039;[[The History of Middle-earth]]&#039;&#039; ([[1983]]-[[1996|96]]) · &#039;&#039;[[The Children of Húrin]]&#039;&#039; ([[2007]]) · &#039;&#039;[[Beren and Lúthien]]&#039;&#039; ([[2017]]) · &#039;&#039;[[The Fall of Gondolin]]&#039;&#039; ([[2018]]) · &#039;&#039;[[The Nature of Middle-earth]]&#039;&#039; ([[2021]]) · &#039;&#039;[[Tales from the Perilous Realm]]&#039;&#039; ([[1945]]-[[1998|98]]) · &#039;&#039;[[Letters from Father Christmas]]&#039;&#039; ([[1976]])&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
	--&amp;gt;|span2 = 2&amp;lt;!--&lt;br /&gt;
	--&amp;gt;|content2 = {{Section divider|[[:Category:Books by J.R.R. Tolkien|Adaptations]]}}&amp;lt;!--&lt;br /&gt;
		--&amp;gt;[[The Hobbit (1977 film)|&#039;&#039;The Hobbit&#039;&#039; (1977)]] · [[The Lord of the Rings (1978 film)|&#039;&#039;The Lord of the Rings&#039;&#039; (1978)]] · [[The Return of the King (1980 film)|&#039;&#039;The Return of the King&#039;&#039; (1980)]] · [[The Lord of the Rings: The Fellowship of the Ring|&#039;&#039;The Fellowship of the Ring&#039;&#039; (2001)]] · [[The Lord of the Rings: The Two Towers|&#039;&#039;The Two Towers&#039;&#039; (2002)]] · [[The Lord of the Rings: The Return of the King|&#039;&#039;The Return of the King&#039;&#039; (2003)]] · [[The Hobbit: An Unexpected Journey|&#039;&#039;An Unexpected Journey&#039;&#039; (2012)]] · [[The Hobbit: The Desolation of Smaug|&#039;&#039;The Desolation of Smaug&#039;&#039; (2013)]] · [[The Hobbit: The Battle of the Five Armies|&#039;&#039;The Battle of the Five Armies&#039;&#039; (2014)]] · [[The Lord of the Rings: The Rings of Power|&#039;&#039;The Rings of Power&#039;&#039; series (2022)]] · [[The Lord of the Rings: The War of the Rohirrim|&#039;&#039;The War of the Rohirrim&#039;&#039; (2024)]] · [[The Lord of the Rings: The Hunt for Gollum|The Hunt for Gollum (2026)]] · &#039;&#039;See also: [[:Category:Fan films|Fan films]]&#039;&#039;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
	--&amp;gt;|content3 = &amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Flexbox&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|rows = 3&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
		--&amp;gt;|content1 = {{Section divider|&#039;&#039;The Hobbit&#039;&#039; Characters}}&amp;lt;!--&lt;br /&gt;
			--&amp;gt;[[Bilbo Baggins|Bilbo]] · [[Gandalf]] · [[Thorin|Thorin]] · [[Balin]] · [[Dwalin]] · [[Fíli]] · [[Kíli]] · [[Dori]] · [[Nori]] · [[Ori]] · [[Óin]] · [[Glóin]] · [[Bifur]] · [[Bofur]] · [[Bombur]] · [[Elrond]] · [[Great Goblin]] · [[Gollum]] · [[Beorn]] · [[Great Eagle]] · [[Thranduil|Elven-king]] · [[Smaug]] · [[Bard]] (&#039;&#039;&#039;&#039;&#039;[[:Category:Characters in The Hobbit|more]]&#039;&#039;&#039;&#039;&#039;)&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
		--&amp;gt;|content2 = {{Section divider|&#039;&#039;The Lord of the Rings&#039;&#039; Characters}}&amp;lt;!--&lt;br /&gt;
			--&amp;gt;[[Frodo Baggins|Frodo]] · [[Samwise Gamgee|Sam]] · [[Meriadoc Brandybuck|Merry]] · [[Peregrin Took|Pippin]] · [[Gandalf]] · [[Aragorn]] · [[Boromir]] · [[Legolas]] · [[Gimli]] · [[Elrond]] · [[Galadriel]] · [[Théoden]] · [[Éomer]] · [[Éowyn]] · [[Saruman]] · [[Sauron]] · [[Witch-king]] · [[Denethor]] · [[Faramir]] · [[Gollum]] · [[Tom Bombadil]] (&#039;&#039;&#039;&#039;&#039;[[:Category:Characters in The Lord of the Rings|more]]&#039;&#039;&#039;&#039;&#039;)&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
		--&amp;gt;|content3 = {{Section divider|&#039;&#039;The Silmarillion&#039;&#039; Characters}}&amp;lt;!--&lt;br /&gt;
			--&amp;gt;[[Ar-Pharazôn]] · [[Aulë]] · [[Beren]] · [[Celebrimbor]] · [[Eärendil]] · [[Varda|Elbereth]] · [[Elendil]] · [[Elros]] · [[Elwing]] · [[Ilúvatar|Eru]] · [[Fëanor]] ([[Sons of Fëanor|and sons]]) · [[Finduilas]] · [[Fingolfin]] · [[Finrod]] · [[Finwë]] ·  [[Gil-galad]] · [[Glaurung]] · [[Huan]] · [[Huor]] · [[Húrin]] · [[Isildur]] · [[Lúthien]] · [[Maeglin]] · [[Mandos]] · [[Manwë]] · [[Morgoth]] · [[Morwen]] · [[Nienor]] · [[Orodreth]] · [[Oromë]] · [[Thingol]] · [[Tuor]] · [[Turgon]] · [[Túrin]] · [[Ulmo]] (&#039;&#039;&#039;&#039;&#039;[[:Category:Characters in The Silmarillion|more]]&#039;&#039;&#039;&#039;&#039;)&amp;lt;!--&lt;br /&gt;
		--&amp;gt;}}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
	--&amp;gt;|content4 = &amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{Flexbox&amp;lt;!--&lt;br /&gt;
		--&amp;gt;|rows = 4&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
		--&amp;gt;|content1 = {{Section divider|[[:Category:Races|Races]]}}&amp;lt;!--&lt;br /&gt;
			--&amp;gt;[[:Category:Animals|Animals]] · [[:Category:Balrogs|Balrogs]] · [[:Category:Dragons|Dragons]] · [[:Category:Dwarves|Dwarves]] · [[:Category:Eagles|Eagles]] · [[:Category:Elves|Elves]] · [[:Category:Ents|Ents]] · [[:Category:Giants|Giants]] · [[:Category:Half-elven|Half-elven]] · [[:Category:Hobbits|Hobbits]] · [[:Category:Maiar|Maiar]] · [[:Category:Men|Men]] · [[:Category:Orcs|Orcs]] · [[:Category:Other races|Other races]] · [[:Category:Spirits|Spirits]] · [[:Category:Trolls|Trolls]] · [[:Category:Undead|Undead]] · [[:Category:Valar|Valar]] · [[:Category:Werewolves|Werewolves]]&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
		--&amp;gt;|content2 = {{Section divider|[[:Category:locations|Locations]]}}&amp;lt;!--&lt;br /&gt;
			--&amp;gt;[[:Category:Bays|Bays]] · [[:Category:Bridges|Bridges]] · [[:Category:Buildings|Buildings]] · [[:Category:Caves|Caves]] · [[:Category:Doors and gates|Doors]] · [[:Category:Falls|Falls]] · [[:Category:Fields, plains and deserts|Fields]] · [[:Category:Fords|Fords]] · [[:Category:Forests|Forests]] · [[:Category:Fortresses|Fortresses]] · [[:Category:Graves and tombs|Graves]] · [[:Category:Harbours|Harbours]] · [[:Category:Hills|Hills]] · [[:Category:Islands|Islands]] · [[:Category:Lakes|Lakes]] · [[:Category:Mountains|Mountains]] ([[:Category:Mountain ranges|Ranges]]) · [[:Category:Passes|Passes]] · [[:Category:Realms|Realms]] ([[:Category:Dwarven realms|Dwarven]] · [[:Category:Elven realms|Elven]] · [[:Category:Hobbit realms|Hobbit]] · [[:Category:Mannish realms|Mannish]] · [[:Category:Evil realms|Evil]]) · [[:Category:Regions|Regions]] · [[:Category:Rivers|Rivers]] · [[:Category:Roads and streets|Roads]] · [[:Category:Seas and oceans|Seas]] · [[:Category:Streams|Streams]] · [[:Category:Swamps|Swamps]] · [[:Category:Cities, towns and villages|Towns]] · [[:Category:Valleys|Valleys]] · [[:Category:Walls|Walls]] (&#039;&#039;&#039;&#039;&#039;[[Index:Locations|list of all]]&#039;&#039;&#039;&#039;&#039;)&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
		--&amp;gt;|content3 = {{Section divider|[[:Category:Events|Events]]}}&amp;lt;!--&lt;br /&gt;
			--&amp;gt;[[:Category:Calendars|Calendars]] · [[:Category:Wars and conflicts|Conflicts]] · [[:Category:Dates|Dates]] · [[:Category:Festivals and feasts|Festivals]] · [[:Category:Sieges|Sieges]]&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
		--&amp;gt;|content4 = {{Section divider|Other}}&amp;lt;!--&lt;br /&gt;
			--&amp;gt;[[:Category:Armor|Armor]] · [[:Category:Books and documents within the legendarium|Books]] · [[:Category:Cosmology|Cosmology]] · [[:Category:Flowers|Flowers]] · [[:Category:Food|Food]] · [[:Category:Lays and tales within the legendarium|Lays and tales]] · [[:Category:Materials|Materials]] · [[:Category:Devices and symbols|Devices and symbols]] · [[:Category:Monuments|Monuments]] · [[:Category:Organizations|Organizations]] · [[:Category:Plants|Plants]] · [[:Category:Rings and jewels|Rings and jewels]] · [[:Category:Ships|Ships]] · [[:Category:Trees|Trees]] · [[:Category:Weapons|Weapons]]&amp;lt;!--&lt;br /&gt;
		--&amp;gt;}}&amp;lt;!--&lt;br /&gt;
	--&amp;gt;}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;}}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&amp;lt;templatestyles src=&amp;quot;Template:Main page/browse/styles.css&amp;quot;/&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;noinclude&amp;gt;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
Template documentation&lt;br /&gt;
----------------------&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;{{/doc}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Maegnus</name></author>
	</entry>
	<entry>
		<id>https://classic.pgnrp.com/index.php?title=Main_page/browse/styles.css&amp;diff=64</id>
		<title>Main page/browse/styles.css</title>
		<link rel="alternate" type="text/html" href="https://classic.pgnrp.com/index.php?title=Main_page/browse/styles.css&amp;diff=64"/>
		<updated>2025-05-21T03:12:39Z</updated>

		<summary type="html">&lt;p&gt;Maegnus: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.tg-mainpage-browse-header {&lt;br /&gt;
    margin-bottom: 1rem;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    justify-content: space-between;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    gap: 1rem;&lt;br /&gt;
    flex-wrap: wrap;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-mainpage-browse-atoz {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-mainpage-browse-atoz-label {&lt;br /&gt;
    margin-right: 1rem;&lt;br /&gt;
    flex-grow: 1;&lt;br /&gt;
    white-space: nowrap;&lt;br /&gt;
    color: var(--tg-color-subtle);&lt;br /&gt;
    font-size: var(--tg-font-size-small);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-mainpage-browse-atoz &amp;gt; .tg-button &amp;gt; a {&lt;br /&gt;
    width: 36px;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Maegnus</name></author>
	</entry>
	<entry>
		<id>https://classic.pgnrp.com/index.php?title=Card/styles.css&amp;diff=62</id>
		<title>Card/styles.css</title>
		<link rel="alternate" type="text/html" href="https://classic.pgnrp.com/index.php?title=Card/styles.css&amp;diff=62"/>
		<updated>2025-05-21T03:12:39Z</updated>

		<summary type="html">&lt;p&gt;Maegnus: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.tg-card {&lt;br /&gt;
    --tg-card-image-color_r: 0;&lt;br /&gt;
    --tg-card-image-color_g: 0;&lt;br /&gt;
    --tg-card-image-color_b: 0;&lt;br /&gt;
&lt;br /&gt;
    position: relative;&lt;br /&gt;
    background-color: var(--tg-color-surface-2);&lt;br /&gt;
    border: var(--tg-border-base);&lt;br /&gt;
    border-radius: var(--tg-border-radius-medium);&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-direction: column;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-card-header,&lt;br /&gt;
.tg-card-footer {&lt;br /&gt;
    padding: 0.5rem 1rem;&lt;br /&gt;
    background: var(--tg-color-surface-3);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-card-footer {&lt;br /&gt;
    font-size: var(--tg-font-size-small);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.template-flexbox-item .tg-card {&lt;br /&gt;
    height: 100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-card blockquote {&lt;br /&gt;
    margin-left: 0;&lt;br /&gt;
    margin-right: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-card-image {&lt;br /&gt;
    position: relative;&lt;br /&gt;
    display: flex;&lt;br /&gt;
    flex-grow: 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-card-afterImage {&lt;br /&gt;
    position: relative;&lt;br /&gt;
    margin-top: -0.5rem;&lt;br /&gt;
    padding: 0 1rem 1rem 1rem;&lt;br /&gt;
    background-color: rgb(&lt;br /&gt;
        var(--tg-card-image-color_r),&lt;br /&gt;
        var(--tg-card-image-color_g),&lt;br /&gt;
        var(--tg-card-image-color_b)&lt;br /&gt;
    );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-card-afterImage a {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-card-afterImage,&lt;br /&gt;
.tg-card-label,&lt;br /&gt;
.tg-card-caption {&lt;br /&gt;
    font-size: var(--tg-font-size-x-small);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-card-label {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    top: 0;&lt;br /&gt;
    left: 0;&lt;br /&gt;
    z-index: 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-card-label &amp;gt; a,&lt;br /&gt;
.tg-card-label &amp;gt; span {&lt;br /&gt;
    display: flex;&lt;br /&gt;
    align-items: center;&lt;br /&gt;
    height: 32px;&lt;br /&gt;
    padding: 0 12px;&lt;br /&gt;
    border-bottom-right-radius: var(--tg-border-radius-medium);&lt;br /&gt;
    background: var(--tg-color-progressive);&lt;br /&gt;
    color: var(--tg-color-inverted-progressive);&lt;br /&gt;
    line-height: 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-card-label &amp;gt; a:hover {&lt;br /&gt;
    background: var(--tg-color-progressive--hover);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-card-label &amp;gt; a:active {&lt;br /&gt;
    background: var(--tg-color-progressive--hover);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-card-content {&lt;br /&gt;
    padding: 1rem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-card-label + .tg-card-content {&lt;br /&gt;
    margin-top: 1.5rem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-card-title {&lt;br /&gt;
    color: var(--tg-color-emphasized);&lt;br /&gt;
    font-family: var(--tg-font-family-heading);&lt;br /&gt;
    font-size: var(--tg-font-size-x-large);&lt;br /&gt;
    font-weight: var(--tg-font-weight-semibold);&lt;br /&gt;
    line-height: var(--tg-line-height-xxx-small);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-card-caption {&lt;br /&gt;
    margin-top: 0.25rem;&lt;br /&gt;
    color: var(--tg-color-subtle);&lt;br /&gt;
    line-height: var(--tg-line-height-xx-small);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-card-title + .tg-card-body,&lt;br /&gt;
.tg-card-caption + .tg-card-body {&lt;br /&gt;
    margin-top: 1rem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-card-background,&lt;br /&gt;
.tg-card-link {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    inset: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-card-background {&lt;br /&gt;
    pointer-events: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-card-background::after {&lt;br /&gt;
    content: &amp;quot;&amp;quot;;&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    left: 0;&lt;br /&gt;
    right: 0;&lt;br /&gt;
    bottom: 0;&lt;br /&gt;
    height: 50%;&lt;br /&gt;
    background: linear-gradient(&lt;br /&gt;
        to top,&lt;br /&gt;
        rgba(&lt;br /&gt;
                var(--tg-card-image-color_r),&lt;br /&gt;
                var(--tg-card-image-color_g),&lt;br /&gt;
                var(--tg-card-image-color_b),&lt;br /&gt;
                1&lt;br /&gt;
            )&lt;br /&gt;
            0%,&lt;br /&gt;
        rgba(&lt;br /&gt;
                var(--tg-card-image-color_r),&lt;br /&gt;
                var(--tg-card-image-color_g),&lt;br /&gt;
                var(--tg-card-image-color_b),&lt;br /&gt;
                0.987&lt;br /&gt;
            )&lt;br /&gt;
            8.1%,&lt;br /&gt;
        rgba(&lt;br /&gt;
                var(--tg-card-image-color_r),&lt;br /&gt;
                var(--tg-card-image-color_g),&lt;br /&gt;
                var(--tg-card-image-color_b),&lt;br /&gt;
                0.951&lt;br /&gt;
            )&lt;br /&gt;
            15.5%,&lt;br /&gt;
        rgba(&lt;br /&gt;
                var(--tg-card-image-color_r),&lt;br /&gt;
                var(--tg-card-image-color_g),&lt;br /&gt;
                var(--tg-card-image-color_b),&lt;br /&gt;
                0.896&lt;br /&gt;
            )&lt;br /&gt;
            22.5%,&lt;br /&gt;
        rgba(&lt;br /&gt;
                var(--tg-card-image-color_r),&lt;br /&gt;
                var(--tg-card-image-color_g),&lt;br /&gt;
                var(--tg-card-image-color_b),&lt;br /&gt;
                0.825&lt;br /&gt;
            )&lt;br /&gt;
            29%,&lt;br /&gt;
        rgba(&lt;br /&gt;
                var(--tg-card-image-color_r),&lt;br /&gt;
                var(--tg-card-image-color_g),&lt;br /&gt;
                var(--tg-card-image-color_b),&lt;br /&gt;
                0.741&lt;br /&gt;
            )&lt;br /&gt;
            35.3%,&lt;br /&gt;
        rgba(&lt;br /&gt;
                var(--tg-card-image-color_r),&lt;br /&gt;
                var(--tg-card-image-color_g),&lt;br /&gt;
                var(--tg-card-image-color_b),&lt;br /&gt;
                0.648&lt;br /&gt;
            )&lt;br /&gt;
            41.2%,&lt;br /&gt;
        rgba(&lt;br /&gt;
                var(--tg-card-image-color_r),&lt;br /&gt;
                var(--tg-card-image-color_g),&lt;br /&gt;
                var(--tg-card-image-color_b),&lt;br /&gt;
                0.55&lt;br /&gt;
            )&lt;br /&gt;
            47.1%,&lt;br /&gt;
        rgba(&lt;br /&gt;
                var(--tg-card-image-color_r),&lt;br /&gt;
                var(--tg-card-image-color_g),&lt;br /&gt;
                var(--tg-card-image-color_b),&lt;br /&gt;
                0.45&lt;br /&gt;
            )&lt;br /&gt;
            52.9%,&lt;br /&gt;
        rgba(&lt;br /&gt;
                var(--tg-card-image-color_r),&lt;br /&gt;
                var(--tg-card-image-color_g),&lt;br /&gt;
                var(--tg-card-image-color_b),&lt;br /&gt;
                0.352&lt;br /&gt;
            )&lt;br /&gt;
            58.8%,&lt;br /&gt;
        rgba(&lt;br /&gt;
                var(--tg-card-image-color_r),&lt;br /&gt;
                var(--tg-card-image-color_g),&lt;br /&gt;
                var(--tg-card-image-color_b),&lt;br /&gt;
                0.259&lt;br /&gt;
            )&lt;br /&gt;
            64.7%,&lt;br /&gt;
        rgba(&lt;br /&gt;
                var(--tg-card-image-color_r),&lt;br /&gt;
                var(--tg-card-image-color_g),&lt;br /&gt;
                var(--tg-card-image-color_b),&lt;br /&gt;
                0.175&lt;br /&gt;
            )&lt;br /&gt;
            71%,&lt;br /&gt;
        rgba(&lt;br /&gt;
                var(--tg-card-image-color_r),&lt;br /&gt;
                var(--tg-card-image-color_g),&lt;br /&gt;
                var(--tg-card-image-color_b),&lt;br /&gt;
                0.104&lt;br /&gt;
            )&lt;br /&gt;
            77.5%,&lt;br /&gt;
        rgba(&lt;br /&gt;
                var(--tg-card-image-color_r),&lt;br /&gt;
                var(--tg-card-image-color_g),&lt;br /&gt;
                var(--tg-card-image-color_b),&lt;br /&gt;
                0.049&lt;br /&gt;
            )&lt;br /&gt;
            84.5%,&lt;br /&gt;
        rgba(&lt;br /&gt;
                var(--tg-card-image-color_r),&lt;br /&gt;
                var(--tg-card-image-color_g),&lt;br /&gt;
                var(--tg-card-image-color_b),&lt;br /&gt;
                0.013&lt;br /&gt;
            )&lt;br /&gt;
            91.9%,&lt;br /&gt;
        rgba(&lt;br /&gt;
                var(--tg-card-image-color_r),&lt;br /&gt;
                var(--tg-card-image-color_g),&lt;br /&gt;
                var(--tg-card-image-color_b),&lt;br /&gt;
                0&lt;br /&gt;
            )&lt;br /&gt;
            100%&lt;br /&gt;
    );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-card-background--top img {&lt;br /&gt;
    object-position: top;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-card-background--bottom img {&lt;br /&gt;
    object-position: bottom;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-card-background img {&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    height: 100%;&lt;br /&gt;
    object-fit: cover;&lt;br /&gt;
    transition: 100ms ease;&lt;br /&gt;
    transition-property: transform;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-card:hover .tg-card-background img {&lt;br /&gt;
    transform: scale(1.1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-card-link {&lt;br /&gt;
    opacity: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-card-link &amp;gt; a {&lt;br /&gt;
    display: block;&lt;br /&gt;
    height: 100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-card-image .tg-card-content {&lt;br /&gt;
    position: relative;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-card-image .tg-card-content {&lt;br /&gt;
    margin-top: auto;&lt;br /&gt;
    line-height: var(--tg-line-height-xx-small);&lt;br /&gt;
    flex-grow: 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-card-image .tg-card-title {&lt;br /&gt;
    color: #fff;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tg-card-image .tg-card-caption,&lt;br /&gt;
.tg-card-afterImage {&lt;br /&gt;
    color: #ddd;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Maegnus</name></author>
	</entry>
	<entry>
		<id>https://classic.pgnrp.com/index.php?title=Flexbox/styles.css&amp;diff=60</id>
		<title>Flexbox/styles.css</title>
		<link rel="alternate" type="text/html" href="https://classic.pgnrp.com/index.php?title=Flexbox/styles.css&amp;diff=60"/>
		<updated>2025-05-21T03:12:39Z</updated>

		<summary type="html">&lt;p&gt;Maegnus: 1 revision imported&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.template-flexbox {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	gap: var(--template-flexbox-gap);&lt;br /&gt;
	flex-wrap: wrap;&lt;br /&gt;
	flex-direction: var(--template-flexbox-direction);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.template-flexbox-item {&lt;br /&gt;
	--template-flexbox-flex-basis: calc(&lt;br /&gt;
		(100% / var(--template-flexbox-columns)) -&lt;br /&gt;
			(&lt;br /&gt;
				var(--template-flexbox-gap) / var(--template-flexbox-columns) *&lt;br /&gt;
					(var(--template-flexbox-columns) - 1)&lt;br /&gt;
			)&lt;br /&gt;
	);&lt;br /&gt;
	flex-basis: var(--template-flexbox-flex-basis);&lt;br /&gt;
	flex-grow: 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media (max-width: 1120px) {&lt;br /&gt;
	.template-flexbox {&lt;br /&gt;
		--template-flexbox-columns: 2 !important;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media (max-width: 640px) {&lt;br /&gt;
	.template-flexbox {&lt;br /&gt;
		--template-flexbox-columns: 1 !important;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Maegnus</name></author>
	</entry>
</feed>