<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://whatafinefellowsaidhisnamewashades.trumpetz.com/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3ACommon.js</id>
	<title>MediaWiki:Common.js - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://whatafinefellowsaidhisnamewashades.trumpetz.com/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3ACommon.js"/>
	<link rel="alternate" type="text/html" href="https://whatafinefellowsaidhisnamewashades.trumpetz.com/index.php?title=MediaWiki:Common.js&amp;action=history"/>
	<updated>2026-04-15T06:47:09Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://whatafinefellowsaidhisnamewashades.trumpetz.com/index.php?title=MediaWiki:Common.js&amp;diff=7&amp;oldid=prev</id>
		<title>Possession at 01:20, 15 April 2026</title>
		<link rel="alternate" type="text/html" href="https://whatafinefellowsaidhisnamewashades.trumpetz.com/index.php?title=MediaWiki:Common.js&amp;diff=7&amp;oldid=prev"/>
		<updated>2026-04-15T01:20:49Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;https://whatafinefellowsaidhisnamewashades.trumpetz.com/index.php?title=MediaWiki:Common.js&amp;amp;diff=7&amp;amp;oldid=2&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Possession</name></author>
	</entry>
	<entry>
		<id>https://whatafinefellowsaidhisnamewashades.trumpetz.com/index.php?title=MediaWiki:Common.js&amp;diff=2&amp;oldid=prev</id>
		<title>Possession: Created page with &quot;/**  * ╔═══════════════════════════════════════════════════════════════╗  * ║         HADES WIKI — MediaWiki Theme JavaScript               ║  * ║     The Free Encyclopedia of the Underworld                   ║  * ║     Based on: Hades (2026) by Melanie Martinez                ║  * ║     Install in: MediaWiki:Common.js...&quot;</title>
		<link rel="alternate" type="text/html" href="https://whatafinefellowsaidhisnamewashades.trumpetz.com/index.php?title=MediaWiki:Common.js&amp;diff=2&amp;oldid=prev"/>
		<updated>2026-04-15T00:52:25Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;/**  * ╔═══════════════════════════════════════════════════════════════╗  * ║         HADES WIKI — MediaWiki Theme JavaScript               ║  * ║     The Free Encyclopedia of the Underworld                   ║  * ║     Based on: Hades (2026) by Melanie Martinez                ║  * ║     Install in: MediaWiki:Common.js...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;/**&lt;br /&gt;
 * ╔═══════════════════════════════════════════════════════════════╗&lt;br /&gt;
 * ║         HADES WIKI — MediaWiki Theme JavaScript               ║&lt;br /&gt;
 * ║     The Free Encyclopedia of the Underworld                   ║&lt;br /&gt;
 * ║     Based on: Hades (2026) by Melanie Martinez                ║&lt;br /&gt;
 * ║     Install in: MediaWiki:Common.js                           ║&lt;br /&gt;
 * ╚═══════════════════════════════════════════════════════════════╝&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
(function () {&lt;br /&gt;
  &amp;#039;use strict&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
  /* ─────────────────────────────────────────&lt;br /&gt;
     CONFIGURATION&lt;br /&gt;
  ───────────────────────────────────────── */&lt;br /&gt;
  const HADES_CONFIG = {&lt;br /&gt;
    candleCount: 4,&lt;br /&gt;
    particleCount: 15,&lt;br /&gt;
    particleColors: [&amp;#039;#c8922a&amp;#039;, &amp;#039;#ff8800&amp;#039;, &amp;#039;#ffcc44&amp;#039;, &amp;#039;#ff6600&amp;#039;, &amp;#039;#ffd700&amp;#039;],&lt;br /&gt;
    goldColor: &amp;#039;#c8922a&amp;#039;,&lt;br /&gt;
    pageFadeInDelay: 100,&lt;br /&gt;
    navHighlightDelay: 200,&lt;br /&gt;
    siteSubtitle: &amp;#039;The Free Encyclopedia of the Underworld&amp;#039;,&lt;br /&gt;
  };&lt;br /&gt;
&lt;br /&gt;
  /* ─────────────────────────────────────────&lt;br /&gt;
     UTILITY: Wait for DOM element&lt;br /&gt;
  ───────────────────────────────────────── */&lt;br /&gt;
  function waitFor(selector, callback, timeout = 5000) {&lt;br /&gt;
    const el = document.querySelector(selector);&lt;br /&gt;
    if (el) return callback(el);&lt;br /&gt;
    const start = Date.now();&lt;br /&gt;
    const interval = setInterval(() =&amp;gt; {&lt;br /&gt;
      const found = document.querySelector(selector);&lt;br /&gt;
      if (found || Date.now() - start &amp;gt; timeout) {&lt;br /&gt;
        clearInterval(interval);&lt;br /&gt;
        if (found) callback(found);&lt;br /&gt;
      }&lt;br /&gt;
    }, 100);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ─────────────────────────────────────────&lt;br /&gt;
     1. ANIMATED CANDLES IN HEADER&lt;br /&gt;
  ───────────────────────────────────────── */&lt;br /&gt;
  function injectCandles() {&lt;br /&gt;
    const header = document.querySelector(&amp;#039;#mw-head, .mw-header, .vector-header&amp;#039;);&lt;br /&gt;
    if (!header) return;&lt;br /&gt;
&lt;br /&gt;
    // Remove existing candle container if present&lt;br /&gt;
    const existing = document.getElementById(&amp;#039;hades-candles&amp;#039;);&lt;br /&gt;
    if (existing) existing.remove();&lt;br /&gt;
&lt;br /&gt;
    const container = document.createElement(&amp;#039;div&amp;#039;);&lt;br /&gt;
    container.id = &amp;#039;hades-candles&amp;#039;;&lt;br /&gt;
    container.style.cssText = `&lt;br /&gt;
      display: flex;&lt;br /&gt;
      align-items: flex-end;&lt;br /&gt;
      gap: 6px;&lt;br /&gt;
      padding: 8px 16px;&lt;br /&gt;
      position: absolute;&lt;br /&gt;
      right: 80px;&lt;br /&gt;
      top: 50%;&lt;br /&gt;
      transform: translateY(-50%);&lt;br /&gt;
      z-index: 50;&lt;br /&gt;
      pointer-events: none;&lt;br /&gt;
    `;&lt;br /&gt;
&lt;br /&gt;
    const candleHeights = [50, 75, 60, 42];&lt;br /&gt;
    const candleDelays  = [0.3, 0, 0.6, 1.0];&lt;br /&gt;
&lt;br /&gt;
    candleHeights.forEach((height, i) =&amp;gt; {&lt;br /&gt;
      const candleEl = createCandleElement(height, candleDelays[i]);&lt;br /&gt;
      container.appendChild(candleEl);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    header.style.position = &amp;#039;relative&amp;#039;;&lt;br /&gt;
    header.appendChild(container);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  function createCandleElement(height, delay) {&lt;br /&gt;
    const wrapper = document.createElement(&amp;#039;div&amp;#039;);&lt;br /&gt;
    wrapper.style.cssText = &amp;#039;display:flex;flex-direction:column;align-items:center;position:relative;&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
    // Smoke&lt;br /&gt;
    const smoke = document.createElement(&amp;#039;div&amp;#039;);&lt;br /&gt;
    smoke.style.cssText = `&lt;br /&gt;
      position:absolute;&lt;br /&gt;
      bottom:${height + 36}px;&lt;br /&gt;
      left:50%;&lt;br /&gt;
      width:4px;&lt;br /&gt;
      height:10px;&lt;br /&gt;
      background:rgba(200,180,150,0.25);&lt;br /&gt;
      border-radius:50%;&lt;br /&gt;
      transform:translateX(-50%);&lt;br /&gt;
      animation:hadesSmoke ${2 + delay * 0.5}s ${delay * 0.3}s ease-out infinite;&lt;br /&gt;
    `;&lt;br /&gt;
    wrapper.appendChild(smoke);&lt;br /&gt;
&lt;br /&gt;
    // Outer flame&lt;br /&gt;
    const outerFlame = document.createElement(&amp;#039;div&amp;#039;);&lt;br /&gt;
    outerFlame.style.cssText = `&lt;br /&gt;
      width:14px;&lt;br /&gt;
      height:22px;&lt;br /&gt;
      background:radial-gradient(ellipse at 50% 80%,#ff5500 0%,#ff9900 40%,#ffcc00 70%,rgba(255,220,100,0) 100%);&lt;br /&gt;
      border-radius:50% 50% 30% 30%/60% 60% 40% 40%;&lt;br /&gt;
      animation:hadesCandle ${1.4 + delay * 0.3}s ${delay * 0.2}s ease-in-out infinite;&lt;br /&gt;
      transform-origin:bottom center;&lt;br /&gt;
      filter:blur(0.5px);&lt;br /&gt;
      margin-bottom:0;&lt;br /&gt;
    `;&lt;br /&gt;
    wrapper.appendChild(outerFlame);&lt;br /&gt;
&lt;br /&gt;
    // Inner flame&lt;br /&gt;
    const innerFlame = document.createElement(&amp;#039;div&amp;#039;);&lt;br /&gt;
    innerFlame.style.cssText = `&lt;br /&gt;
      width:5px;&lt;br /&gt;
      height:13px;&lt;br /&gt;
      background:radial-gradient(ellipse at 50% 80%,#fff 0%,#ffe066 50%,rgba(255,200,0,0) 100%);&lt;br /&gt;
      border-radius:50% 50% 30% 30%/60% 60% 40% 40%;&lt;br /&gt;
      animation:hadesCandle ${1.1 + delay * 0.2}s ${delay * 0.15}s ease-in-out infinite;&lt;br /&gt;
      transform-origin:bottom center;&lt;br /&gt;
      margin-top:-13px;&lt;br /&gt;
      align-self:center;&lt;br /&gt;
    `;&lt;br /&gt;
    wrapper.appendChild(innerFlame);&lt;br /&gt;
&lt;br /&gt;
    // Glow orb&lt;br /&gt;
    const glow = document.createElement(&amp;#039;div&amp;#039;);&lt;br /&gt;
    glow.style.cssText = `&lt;br /&gt;
      width:22px;&lt;br /&gt;
      height:22px;&lt;br /&gt;
      border-radius:50%;&lt;br /&gt;
      background:rgba(255,160,50,0.1);&lt;br /&gt;
      animation:hadesGlowOrb ${2.2 + delay * 0.4}s ${delay * 0.1}s ease-in-out infinite;&lt;br /&gt;
      position:absolute;&lt;br /&gt;
      top:0;&lt;br /&gt;
      left:50%;&lt;br /&gt;
      transform:translateX(-50%);&lt;br /&gt;
    `;&lt;br /&gt;
    wrapper.appendChild(glow);&lt;br /&gt;
&lt;br /&gt;
    // Wick&lt;br /&gt;
    const wick = document.createElement(&amp;#039;div&amp;#039;);&lt;br /&gt;
    wick.style.cssText = &amp;#039;width:2px;height:5px;background:#1a0800;margin-bottom:-1px;position:relative;z-index:2;&amp;#039;;&lt;br /&gt;
    wrapper.appendChild(wick);&lt;br /&gt;
&lt;br /&gt;
    // Wax body&lt;br /&gt;
    const waxColors = [&amp;#039;#d4c4a0&amp;#039;, &amp;#039;#e8d8b0&amp;#039;, &amp;#039;#ddd0a8&amp;#039;, &amp;#039;#c8b890&amp;#039;];&lt;br /&gt;
    const wax = document.createElement(&amp;#039;div&amp;#039;);&lt;br /&gt;
    wax.style.cssText = `&lt;br /&gt;
      width:16px;&lt;br /&gt;
      height:${height}px;&lt;br /&gt;
      background:linear-gradient(to right,${waxColors[Math.floor(Math.random() * waxColors.length)]}bb 0%,${waxColors[0]} 35%,${waxColors[0]} 70%,${waxColors[0]}88 100%);&lt;br /&gt;
      border-radius:2px 2px 3px 3px;&lt;br /&gt;
      position:relative;&lt;br /&gt;
      box-shadow:inset -3px 0 6px rgba(0,0,0,0.2),inset 3px 0 3px rgba(255,255,255,0.08);&lt;br /&gt;
    `;&lt;br /&gt;
&lt;br /&gt;
    // Wax drip 1&lt;br /&gt;
    const drip1 = document.createElement(&amp;#039;div&amp;#039;);&lt;br /&gt;
    drip1.style.cssText = `&lt;br /&gt;
      position:absolute;top:0;left:30%;width:4px;&lt;br /&gt;
      background:inherit;border-radius:0 0 3px 3px;&lt;br /&gt;
      animation:hadesWaxDrip ${4 + delay}s ${delay + 0.5}s ease-in-out infinite alternate;&lt;br /&gt;
      height:10px;opacity:0.6;&lt;br /&gt;
    `;&lt;br /&gt;
    wax.appendChild(drip1);&lt;br /&gt;
&lt;br /&gt;
    // Wax drip 2&lt;br /&gt;
    const drip2 = document.createElement(&amp;#039;div&amp;#039;);&lt;br /&gt;
    drip2.style.cssText = `&lt;br /&gt;
      position:absolute;top:0;right:25%;width:3px;&lt;br /&gt;
      background:inherit;border-radius:0 0 3px 3px;&lt;br /&gt;
      animation:hadesWaxDrip ${5 + delay}s ${delay + 1.5}s ease-in-out infinite alternate;&lt;br /&gt;
      height:7px;opacity:0.5;&lt;br /&gt;
    `;&lt;br /&gt;
    wax.appendChild(drip2);&lt;br /&gt;
&lt;br /&gt;
    wrapper.appendChild(wax);&lt;br /&gt;
    return wrapper;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ─────────────────────────────────────────&lt;br /&gt;
     2. INJECT EXTRA CSS KEYFRAMES (JS version)&lt;br /&gt;
  ───────────────────────────────────────── */&lt;br /&gt;
  function injectExtraStyles() {&lt;br /&gt;
    const style = document.createElement(&amp;#039;style&amp;#039;);&lt;br /&gt;
    style.id = &amp;#039;hades-js-styles&amp;#039;;&lt;br /&gt;
    style.textContent = `&lt;br /&gt;
      @keyframes hadesSmoke {&lt;br /&gt;
        0%   { opacity: 0.4; transform: translateX(-50%) translateY(0) scaleX(1); }&lt;br /&gt;
        50%  { opacity: 0.2; transform: translateX(-50%) translateY(-16px) scaleX(1.5); }&lt;br /&gt;
        100% { opacity: 0;   transform: translateX(-50%) translateY(-32px) scaleX(2); }&lt;br /&gt;
      }&lt;br /&gt;
      @keyframes hadesGlowOrb {&lt;br /&gt;
        0%,100% { box-shadow:0 0 8px 3px rgba(255,160,50,0.4),0 0 20px 8px rgba(200,100,20,0.2); opacity:0.8; }&lt;br /&gt;
        50%     { box-shadow:0 0 14px 6px rgba(255,190,70,0.7),0 0 35px 14px rgba(210,130,35,0.4); opacity:1; }&lt;br /&gt;
      }&lt;br /&gt;
      @keyframes hadesWaxDrip {&lt;br /&gt;
        0%   { height:0px; opacity:0.8; }&lt;br /&gt;
        100% { height:18px; opacity:0.3; }&lt;br /&gt;
      }&lt;br /&gt;
      @keyframes hadesParticleAnim {&lt;br /&gt;
        0%   { transform:translateY(0) translateX(0) rotate(0deg) scale(1); opacity:0.9; }&lt;br /&gt;
        50%  { transform:translateY(-50vh) translateX(30px) rotate(180deg) scale(0.5); opacity:0.4; }&lt;br /&gt;
        100% { transform:translateY(-100vh) translateX(-20px) rotate(360deg) scale(0.1); opacity:0; }&lt;br /&gt;
      }&lt;br /&gt;
      @keyframes hadesPageReveal {&lt;br /&gt;
        from { opacity:0; transform:translateY(16px); }&lt;br /&gt;
        to   { opacity:1; transform:translateY(0); }&lt;br /&gt;
      }&lt;br /&gt;
      @keyframes hadesNavLine {&lt;br /&gt;
        from { width:0; left:50%; }&lt;br /&gt;
        to   { width:100%; left:0; }&lt;br /&gt;
      }&lt;br /&gt;
      @keyframes hadesTitlePulse {&lt;br /&gt;
        0%,100% { filter:brightness(1); }&lt;br /&gt;
        50%     { filter:brightness(1.15) drop-shadow(0 0 8px rgba(200,146,42,0.5)); }&lt;br /&gt;
      }&lt;br /&gt;
      @keyframes hadesLinkShimmer {&lt;br /&gt;
        0%   { background-position:-200% center; }&lt;br /&gt;
        100% { background-position:200% center; }&lt;br /&gt;
      }&lt;br /&gt;
      @keyframes hadesScrollIndicator {&lt;br /&gt;
        0%,100% { opacity:0.4; transform:translateY(0); }&lt;br /&gt;
        50%     { opacity:1; transform:translateY(4px); }&lt;br /&gt;
      }&lt;br /&gt;
      @keyframes hadesCrownFloat {&lt;br /&gt;
        0%,100% { transform:translateY(0) rotate(-2deg); filter:drop-shadow(0 0 6px rgba(200,146,42,0.5)); }&lt;br /&gt;
        50%     { transform:translateY(-5px) rotate(2deg); filter:drop-shadow(0 0 12px rgba(200,146,42,0.8)); }&lt;br /&gt;
      }&lt;br /&gt;
      @keyframes hadesSubtitleReveal {&lt;br /&gt;
        from { opacity:0; letter-spacing:8px; }&lt;br /&gt;
        to   { opacity:1; letter-spacing:5px; }&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      /* Hover glow for wiki links */&lt;br /&gt;
      .hades-link-glow {&lt;br /&gt;
        position:relative;&lt;br /&gt;
        transition:all 0.3s ease !important;&lt;br /&gt;
      }&lt;br /&gt;
      .hades-link-glow:hover {&lt;br /&gt;
        text-shadow:0 0 12px rgba(200,146,42,0.6) !important;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      /* Section reveal animation */&lt;br /&gt;
      .hades-section-reveal {&lt;br /&gt;
        animation:hadesPageReveal 0.6s ease forwards;&lt;br /&gt;
        opacity:0;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      /* Candle hover effect */&lt;br /&gt;
      #hades-candles:hover {&lt;br /&gt;
        filter:brightness(1.2);&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      /* Ornament spin */&lt;br /&gt;
      .hades-spinning-ornament {&lt;br /&gt;
        display:inline-block;&lt;br /&gt;
        animation:hadesOrnamentSpin 8s linear infinite;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      /* Progress bar shimmer */&lt;br /&gt;
      .hades-progress {&lt;br /&gt;
        height:2px;&lt;br /&gt;
        background:linear-gradient(to right, transparent, #c8922a, transparent);&lt;br /&gt;
        position:fixed;&lt;br /&gt;
        top:0;&lt;br /&gt;
        left:0;&lt;br /&gt;
        z-index:9999;&lt;br /&gt;
        transition:width 0.3s ease;&lt;br /&gt;
      }&lt;br /&gt;
    `;&lt;br /&gt;
    document.head.appendChild(style);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ─────────────────────────────────────────&lt;br /&gt;
     3. FLOATING EMBER PARTICLES&lt;br /&gt;
  ───────────────────────────────────────── */&lt;br /&gt;
  function createParticles() {&lt;br /&gt;
    const container = document.createElement(&amp;#039;div&amp;#039;);&lt;br /&gt;
    container.id = &amp;#039;hades-particles&amp;#039;;&lt;br /&gt;
    container.style.cssText = `&lt;br /&gt;
      position:fixed;&lt;br /&gt;
      inset:0;&lt;br /&gt;
      pointer-events:none;&lt;br /&gt;
      z-index:1;&lt;br /&gt;
      overflow:hidden;&lt;br /&gt;
    `;&lt;br /&gt;
&lt;br /&gt;
    for (let i = 0; i &amp;lt; HADES_CONFIG.particleCount; i++) {&lt;br /&gt;
      const p = document.createElement(&amp;#039;div&amp;#039;);&lt;br /&gt;
      const size = 1.5 + Math.random() * 2.5;&lt;br /&gt;
      const color = HADES_CONFIG.particleColors[Math.floor(Math.random() * HADES_CONFIG.particleColors.length)];&lt;br /&gt;
      const left = Math.random() * 100;&lt;br /&gt;
      const delay = Math.random() * 8;&lt;br /&gt;
      const duration = 6 + Math.random() * 8;&lt;br /&gt;
&lt;br /&gt;
      p.style.cssText = `&lt;br /&gt;
        position:absolute;&lt;br /&gt;
        bottom:0;&lt;br /&gt;
        left:${left}%;&lt;br /&gt;
        width:${size}px;&lt;br /&gt;
        height:${size}px;&lt;br /&gt;
        border-radius:50%;&lt;br /&gt;
        background:radial-gradient(circle, ${color} 0%, rgba(200,100,20,0.2) 70%, transparent 100%);&lt;br /&gt;
        animation:hadesParticleAnim ${duration}s ${delay}s ease-out infinite;&lt;br /&gt;
        opacity:0;&lt;br /&gt;
      `;&lt;br /&gt;
      container.appendChild(p);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    document.body.prepend(container);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ─────────────────────────────────────────&lt;br /&gt;
     4. SITE TITLE ENHANCEMENT&lt;br /&gt;
  ───────────────────────────────────────── */&lt;br /&gt;
  function enhanceSiteTitle() {&lt;br /&gt;
    // Add animated crown to logo area&lt;br /&gt;
    const logo = document.querySelector(&amp;#039;#p-logo, .mw-logo, #mw-head-base&amp;#039;);&lt;br /&gt;
    if (logo) {&lt;br /&gt;
      const crown = document.createElement(&amp;#039;div&amp;#039;);&lt;br /&gt;
      crown.style.cssText = `&lt;br /&gt;
        font-size:28px;&lt;br /&gt;
        text-align:center;&lt;br /&gt;
        animation:hadesCrownFloat 3s ease-in-out infinite;&lt;br /&gt;
        filter:drop-shadow(0 0 8px rgba(200,146,42,0.6));&lt;br /&gt;
        margin-bottom:4px;&lt;br /&gt;
        display:block;&lt;br /&gt;
        color:#c8922a;&lt;br /&gt;
      `;&lt;br /&gt;
      crown.textContent = &amp;#039;♛&amp;#039;;&lt;br /&gt;
      logo.prepend(crown);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Animate site subtitle&lt;br /&gt;
    const subtitle = document.querySelector(&amp;#039;#p-logo a[title], .mw-wiki-title&amp;#039;);&lt;br /&gt;
    if (subtitle) {&lt;br /&gt;
      const sub = document.createElement(&amp;#039;div&amp;#039;);&lt;br /&gt;
      sub.textContent = HADES_CONFIG.siteSubtitle;&lt;br /&gt;
      sub.style.cssText = `&lt;br /&gt;
        font-family:&amp;#039;Cinzel&amp;#039;,serif;&lt;br /&gt;
        font-size:8px;&lt;br /&gt;
        letter-spacing:5px;&lt;br /&gt;
        color:#8b4a20;&lt;br /&gt;
        text-transform:uppercase;&lt;br /&gt;
        text-align:center;&lt;br /&gt;
        animation:hadesSubtitleReveal 2s ease forwards;&lt;br /&gt;
        opacity:0;&lt;br /&gt;
        margin-top:2px;&lt;br /&gt;
      `;&lt;br /&gt;
      subtitle.parentNode.insertBefore(sub, subtitle.nextSibling);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ─────────────────────────────────────────&lt;br /&gt;
     5. PAGE CONTENT ANIMATIONS&lt;br /&gt;
  ───────────────────────────────────────── */&lt;br /&gt;
  function animatePageContent() {&lt;br /&gt;
    const content = document.querySelector(&amp;#039;#mw-content-text, .mw-body, #content&amp;#039;);&lt;br /&gt;
    if (content) {&lt;br /&gt;
      content.style.animation = &amp;#039;hadesPageReveal 0.8s 0.1s ease forwards&amp;#039;;&lt;br /&gt;
      content.style.opacity = &amp;#039;0&amp;#039;;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // Animate each heading with stagger&lt;br /&gt;
    const headings = document.querySelectorAll(&amp;#039;h2, h3&amp;#039;);&lt;br /&gt;
    headings.forEach((h, i) =&amp;gt; {&lt;br /&gt;
      h.style.animation = `hadesPageReveal 0.6s ${0.1 + i * 0.08}s ease forwards`;&lt;br /&gt;
      h.style.opacity = &amp;#039;0&amp;#039;;&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Animate infobox&lt;br /&gt;
    const infobox = document.querySelector(&amp;#039;.infobox&amp;#039;);&lt;br /&gt;
    if (infobox) {&lt;br /&gt;
      infobox.style.animation = &amp;#039;hadesPageReveal 0.8s 0.3s ease forwards&amp;#039;;&lt;br /&gt;
      infobox.style.opacity = &amp;#039;0&amp;#039;;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ─────────────────────────────────────────&lt;br /&gt;
     6. ENHANCED LINK INTERACTIONS&lt;br /&gt;
  ───────────────────────────────────────── */&lt;br /&gt;
  function enhanceLinks() {&lt;br /&gt;
    // Add ripple effect to all article links&lt;br /&gt;
    document.querySelectorAll(&amp;#039;#mw-content-text a, .mw-body a&amp;#039;).forEach(link =&amp;gt; {&lt;br /&gt;
      link.classList.add(&amp;#039;hades-link-glow&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
      link.addEventListener(&amp;#039;mouseenter&amp;#039;, function () {&lt;br /&gt;
        this.style.transition = &amp;#039;all 0.2s ease&amp;#039;;&lt;br /&gt;
      });&lt;br /&gt;
&lt;br /&gt;
      link.addEventListener(&amp;#039;click&amp;#039;, function (e) {&lt;br /&gt;
        const ripple = document.createElement(&amp;#039;span&amp;#039;);&lt;br /&gt;
        ripple.style.cssText = `&lt;br /&gt;
          position:absolute;&lt;br /&gt;
          width:12px;&lt;br /&gt;
          height:12px;&lt;br /&gt;
          background:rgba(200,146,42,0.6);&lt;br /&gt;
          border-radius:50%;&lt;br /&gt;
          pointer-events:none;&lt;br /&gt;
          animation:hadesRipple 0.5s ease forwards;&lt;br /&gt;
          transform:translate(-50%,-50%);&lt;br /&gt;
          top:${e.offsetY}px;&lt;br /&gt;
          left:${e.offsetX}px;&lt;br /&gt;
          z-index:9;&lt;br /&gt;
        `;&lt;br /&gt;
        this.style.position = &amp;#039;relative&amp;#039;;&lt;br /&gt;
        this.style.overflow = &amp;#039;hidden&amp;#039;;&lt;br /&gt;
        this.appendChild(ripple);&lt;br /&gt;
        setTimeout(() =&amp;gt; ripple.remove(), 500);&lt;br /&gt;
      });&lt;br /&gt;
    });&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ─────────────────────────────────────────&lt;br /&gt;
     7. NAVIGATION ACTIVE INDICATOR&lt;br /&gt;
  ───────────────────────────────────────── */&lt;br /&gt;
  function enhanceNavigation() {&lt;br /&gt;
    const navLinks = document.querySelectorAll(&lt;br /&gt;
      &amp;#039;#p-namespaces ul li a, #p-views ul li a, .vector-menu-tabs ul li a&amp;#039;&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
    navLinks.forEach(link =&amp;gt; {&lt;br /&gt;
      link.addEventListener(&amp;#039;mouseenter&amp;#039;, function () {&lt;br /&gt;
        const indicator = document.createElement(&amp;#039;div&amp;#039;);&lt;br /&gt;
        indicator.style.cssText = `&lt;br /&gt;
          position:absolute;&lt;br /&gt;
          bottom:0;&lt;br /&gt;
          left:0;&lt;br /&gt;
          height:2px;&lt;br /&gt;
          background:linear-gradient(to right, transparent, #c8922a, transparent);&lt;br /&gt;
          animation:hadesNavLine 0.25s ease forwards;&lt;br /&gt;
          pointer-events:none;&lt;br /&gt;
        `;&lt;br /&gt;
        this.style.position = &amp;#039;relative&amp;#039;;&lt;br /&gt;
        this.appendChild(indicator);&lt;br /&gt;
      });&lt;br /&gt;
&lt;br /&gt;
      link.addEventListener(&amp;#039;mouseleave&amp;#039;, function () {&lt;br /&gt;
        const indicator = this.querySelector(&amp;#039;div[style*=&amp;quot;hadesNavLine&amp;quot;]&amp;#039;);&lt;br /&gt;
        if (indicator) indicator.remove();&lt;br /&gt;
      });&lt;br /&gt;
    });&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ─────────────────────────────────────────&lt;br /&gt;
     8. SCROLL PROGRESS BAR&lt;br /&gt;
  ───────────────────────────────────────── */&lt;br /&gt;
  function createScrollProgressBar() {&lt;br /&gt;
    const bar = document.createElement(&amp;#039;div&amp;#039;);&lt;br /&gt;
    bar.className = &amp;#039;hades-progress&amp;#039;;&lt;br /&gt;
    bar.style.width = &amp;#039;0%&amp;#039;;&lt;br /&gt;
    document.body.appendChild(bar);&lt;br /&gt;
&lt;br /&gt;
    window.addEventListener(&amp;#039;scroll&amp;#039;, () =&amp;gt; {&lt;br /&gt;
      const scrollTop = window.scrollY;&lt;br /&gt;
      const docHeight = document.documentElement.scrollHeight - window.innerHeight;&lt;br /&gt;
      const progress = docHeight &amp;gt; 0 ? (scrollTop / docHeight) * 100 : 0;&lt;br /&gt;
      bar.style.width = progress + &amp;#039;%&amp;#039;;&lt;br /&gt;
    }, { passive: true });&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ─────────────────────────────────────────&lt;br /&gt;
     9. TABLE ENHANCEMENTS&lt;br /&gt;
  ───────────────────────────────────────── */&lt;br /&gt;
  function enhanceTables() {&lt;br /&gt;
    document.querySelectorAll(&amp;#039;.wikitable tr&amp;#039;).forEach((row, i) =&amp;gt; {&lt;br /&gt;
      row.addEventListener(&amp;#039;mouseenter&amp;#039;, function () {&lt;br /&gt;
        this.style.background = &amp;#039;rgba(200,146,42,0.08)&amp;#039;;&lt;br /&gt;
        this.style.transition = &amp;#039;background 0.2s ease&amp;#039;;&lt;br /&gt;
        this.querySelectorAll(&amp;#039;td&amp;#039;).forEach(td =&amp;gt; {&lt;br /&gt;
          td.style.color = &amp;#039;#d4c4a0&amp;#039;;&lt;br /&gt;
          td.style.transition = &amp;#039;color 0.2s ease&amp;#039;;&lt;br /&gt;
        });&lt;br /&gt;
      });&lt;br /&gt;
      row.addEventListener(&amp;#039;mouseleave&amp;#039;, function () {&lt;br /&gt;
        this.style.background = &amp;#039;&amp;#039;;&lt;br /&gt;
        this.querySelectorAll(&amp;#039;td&amp;#039;).forEach(td =&amp;gt; { td.style.color = &amp;#039;&amp;#039;; });&lt;br /&gt;
      });&lt;br /&gt;
    });&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ─────────────────────────────────────────&lt;br /&gt;
     10. SEARCH BAR ENHANCEMENTS&lt;br /&gt;
  ───────────────────────────────────────── */&lt;br /&gt;
  function enhanceSearch() {&lt;br /&gt;
    const searchInput = document.querySelector(&amp;#039;#searchInput, .vector-search-box input[type=&amp;quot;search&amp;quot;]&amp;#039;);&lt;br /&gt;
    if (!searchInput) return;&lt;br /&gt;
&lt;br /&gt;
    searchInput.placeholder = &amp;#039;Search HADES Wiki...&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
    searchInput.addEventListener(&amp;#039;focus&amp;#039;, function () {&lt;br /&gt;
      this.parentElement.style.boxShadow = &amp;#039;0 0 0 3px rgba(200,146,42,0.2), 0 4px 20px rgba(0,0,0,0.5)&amp;#039;;&lt;br /&gt;
      this.style.borderColor = &amp;#039;#c8922a&amp;#039;;&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    searchInput.addEventListener(&amp;#039;blur&amp;#039;, function () {&lt;br /&gt;
      this.parentElement.style.boxShadow = &amp;#039;&amp;#039;;&lt;br /&gt;
      this.style.borderColor = &amp;#039;&amp;#039;;&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Add search icon label&lt;br /&gt;
    const label = document.createElement(&amp;#039;span&amp;#039;);&lt;br /&gt;
    label.textContent = &amp;#039;🔍&amp;#039;;&lt;br /&gt;
    label.style.cssText = `&lt;br /&gt;
      position:absolute;&lt;br /&gt;
      left:12px;&lt;br /&gt;
      top:50%;&lt;br /&gt;
      transform:translateY(-50%);&lt;br /&gt;
      pointer-events:none;&lt;br /&gt;
      font-size:14px;&lt;br /&gt;
      z-index:5;&lt;br /&gt;
    `;&lt;br /&gt;
    const searchWrapper = searchInput.parentElement;&lt;br /&gt;
    if (searchWrapper) {&lt;br /&gt;
      searchWrapper.style.position = &amp;#039;relative&amp;#039;;&lt;br /&gt;
      searchWrapper.prepend(label);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ─────────────────────────────────────────&lt;br /&gt;
     11. FIRST HEADING SUBTITLE&lt;br /&gt;
  ───────────────────────────────────────── */&lt;br /&gt;
  function enhanceFirstHeading() {&lt;br /&gt;
    const h1 = document.querySelector(&amp;#039;#firstHeading, h1.firstHeading&amp;#039;);&lt;br /&gt;
    if (!h1) return;&lt;br /&gt;
&lt;br /&gt;
    // Add decorative ornaments around h1&lt;br /&gt;
    h1.innerHTML = h1.innerHTML;&lt;br /&gt;
&lt;br /&gt;
    const sub = document.createElement(&amp;#039;div&amp;#039;);&lt;br /&gt;
    sub.style.cssText = `&lt;br /&gt;
      font-family:&amp;#039;IM Fell English&amp;#039;,serif;&lt;br /&gt;
      font-style:italic;&lt;br /&gt;
      font-size:13px;&lt;br /&gt;
      color:#8b7a50;&lt;br /&gt;
      margin-top:4px;&lt;br /&gt;
      letter-spacing:0.5px;&lt;br /&gt;
    `;&lt;br /&gt;
&lt;br /&gt;
    // Add page metadata&lt;br /&gt;
    const pageName = h1.textContent.trim();&lt;br /&gt;
    const ns = mw.config.get(&amp;#039;wgNamespaceNumber&amp;#039;);&lt;br /&gt;
    if (ns === 0 &amp;amp;&amp;amp; pageName) {&lt;br /&gt;
      // Main article namespace&lt;br /&gt;
      sub.textContent = `Article · Hades Wiki`;&lt;br /&gt;
      h1.parentNode.insertBefore(sub, h1.nextSibling);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ─────────────────────────────────────────&lt;br /&gt;
     12. FOOTER ENHANCEMENT&lt;br /&gt;
  ───────────────────────────────────────── */&lt;br /&gt;
  function enhanceFooter() {&lt;br /&gt;
    const footer = document.querySelector(&amp;#039;#footer, .mw-footer&amp;#039;);&lt;br /&gt;
    if (!footer) return;&lt;br /&gt;
&lt;br /&gt;
    const logo = document.createElement(&amp;#039;div&amp;#039;);&lt;br /&gt;
    logo.style.cssText = `&lt;br /&gt;
      font-family:&amp;#039;Cinzel Decorative&amp;#039;,serif;&lt;br /&gt;
      font-size:16px;&lt;br /&gt;
      color:#8b6914;&lt;br /&gt;
      letter-spacing:4px;&lt;br /&gt;
      margin-bottom:12px;&lt;br /&gt;
      text-align:center;&lt;br /&gt;
      animation:hadesTitlePulse 4s ease-in-out infinite;&lt;br /&gt;
    `;&lt;br /&gt;
    logo.textContent = &amp;#039;⚜ HADES WIKI ⚜&amp;#039;;&lt;br /&gt;
    footer.prepend(logo);&lt;br /&gt;
&lt;br /&gt;
    const divider = document.createElement(&amp;#039;div&amp;#039;);&lt;br /&gt;
    divider.style.cssText = `&lt;br /&gt;
      height:1px;&lt;br /&gt;
      background:linear-gradient(to right, transparent, #c8922a, transparent);&lt;br /&gt;
      margin:12px 0;&lt;br /&gt;
      opacity:0.4;&lt;br /&gt;
    `;&lt;br /&gt;
    footer.prepend(divider);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ─────────────────────────────────────────&lt;br /&gt;
     13. IMAGE LIGHTBOX (simple)&lt;br /&gt;
  ───────────────────────────────────────── */&lt;br /&gt;
  function initLightbox() {&lt;br /&gt;
    document.querySelectorAll(&amp;#039;.thumbimage img, .infobox img&amp;#039;).forEach(img =&amp;gt; {&lt;br /&gt;
      img.style.cursor = &amp;#039;zoom-in&amp;#039;;&lt;br /&gt;
      img.addEventListener(&amp;#039;click&amp;#039;, function (e) {&lt;br /&gt;
        e.preventDefault();&lt;br /&gt;
&lt;br /&gt;
        const overlay = document.createElement(&amp;#039;div&amp;#039;);&lt;br /&gt;
        overlay.style.cssText = `&lt;br /&gt;
          position:fixed;&lt;br /&gt;
          inset:0;&lt;br /&gt;
          background:rgba(0,0,0,0.92);&lt;br /&gt;
          z-index:99999;&lt;br /&gt;
          display:flex;&lt;br /&gt;
          align-items:center;&lt;br /&gt;
          justify-content:center;&lt;br /&gt;
          cursor:zoom-out;&lt;br /&gt;
          animation:hadesPageReveal 0.3s ease forwards;&lt;br /&gt;
        `;&lt;br /&gt;
&lt;br /&gt;
        const clone = this.cloneNode();&lt;br /&gt;
        clone.style.cssText = `&lt;br /&gt;
          max-width:90vw;&lt;br /&gt;
          max-height:90vh;&lt;br /&gt;
          object-fit:contain;&lt;br /&gt;
          border:1px solid rgba(200,146,42,0.4);&lt;br /&gt;
          box-shadow:0 0 60px rgba(200,146,42,0.2),0 0 120px rgba(0,0,0,0.8);&lt;br /&gt;
        `;&lt;br /&gt;
&lt;br /&gt;
        const closeBtn = document.createElement(&amp;#039;div&amp;#039;);&lt;br /&gt;
        closeBtn.textContent = &amp;#039;✕&amp;#039;;&lt;br /&gt;
        closeBtn.style.cssText = `&lt;br /&gt;
          position:absolute;&lt;br /&gt;
          top:20px;&lt;br /&gt;
          right:24px;&lt;br /&gt;
          color:#c8922a;&lt;br /&gt;
          font-size:24px;&lt;br /&gt;
          cursor:pointer;&lt;br /&gt;
          font-family:Cinzel,serif;&lt;br /&gt;
          letter-spacing:2px;&lt;br /&gt;
          opacity:0.8;&lt;br /&gt;
          transition:opacity 0.2s;&lt;br /&gt;
        `;&lt;br /&gt;
        closeBtn.addEventListener(&amp;#039;mouseenter&amp;#039;, () =&amp;gt; closeBtn.style.opacity = &amp;#039;1&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
        const close = () =&amp;gt; {&lt;br /&gt;
          overlay.style.opacity = &amp;#039;0&amp;#039;;&lt;br /&gt;
          overlay.style.transition = &amp;#039;opacity 0.3s ease&amp;#039;;&lt;br /&gt;
          setTimeout(() =&amp;gt; overlay.remove(), 300);&lt;br /&gt;
        };&lt;br /&gt;
&lt;br /&gt;
        overlay.addEventListener(&amp;#039;click&amp;#039;, close);&lt;br /&gt;
        closeBtn.addEventListener(&amp;#039;click&amp;#039;, close);&lt;br /&gt;
        overlay.appendChild(clone);&lt;br /&gt;
        overlay.appendChild(closeBtn);&lt;br /&gt;
        document.body.appendChild(overlay);&lt;br /&gt;
      });&lt;br /&gt;
    });&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /* ─────────────────────────────────────────&lt;br /&gt;
     14. MAIN EXECUTION (mw.loader.using)&lt;br /&gt;
  ───────────────────────────────────────── */&lt;br /&gt;
  function init() {&lt;br /&gt;
    injectExtraStyles();&lt;br /&gt;
    createParticles();&lt;br /&gt;
    injectCandles();&lt;br /&gt;
    createScrollProgressBar();&lt;br /&gt;
    animatePageContent();&lt;br /&gt;
    enhanceLinks();&lt;br /&gt;
    enhanceNavigation();&lt;br /&gt;
    enhanceTables();&lt;br /&gt;
    enhanceSearch();&lt;br /&gt;
    enhanceFooter();&lt;br /&gt;
    initLightbox();&lt;br /&gt;
&lt;br /&gt;
    // Slight delay for heading enhancement (needs mw object)&lt;br /&gt;
    setTimeout(() =&amp;gt; {&lt;br /&gt;
      try { enhanceFirstHeading(); } catch (e) { /* not critical */ }&lt;br /&gt;
    }, 500);&lt;br /&gt;
&lt;br /&gt;
    console.log(&amp;#039;%c⚜ HADES WIKI THEME LOADED ⚜&amp;#039;, &amp;#039;color:#c8922a;font-family:Cinzel,serif;font-size:14px;letter-spacing:3px;&amp;#039;);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // Use MediaWiki&amp;#039;s jQuery.ready or plain DOMContentLoaded&lt;br /&gt;
  if (typeof jQuery !== &amp;#039;undefined&amp;#039; &amp;amp;&amp;amp; typeof mw !== &amp;#039;undefined&amp;#039;) {&lt;br /&gt;
    mw.loader.using([&amp;#039;mediawiki.util&amp;#039;], function () {&lt;br /&gt;
      jQuery(document).ready(function () {&lt;br /&gt;
        init();&lt;br /&gt;
      });&lt;br /&gt;
    });&lt;br /&gt;
  } else {&lt;br /&gt;
    document.addEventListener(&amp;#039;DOMContentLoaded&amp;#039;, init);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
})();&lt;/div&gt;</summary>
		<author><name>Possession</name></author>
	</entry>
</feed>