MediaWiki:Test.css: различия между версиями

Страница интерфейса MediaWiki
Нет описания правки
Нет описания правки
Метка: отменено
Строка 1: Строка 1:
:root {
(function() {
     --color-primary__h: 25;
     var today = new Date();
     --color-primary__l: 40%;
     var month = today.getMonth() + 1;
     --primary-bg-color: #2a1a0f;
     if (month !== 10 && month !== 11) return;
    --secondary-bg-color: #3b1f0b;
    --item-bg-color: #402715;
    --item-hover-bg-color: #5a2d0f;
    --border-color: #8b4513;
    --text-color: #ffe4b5;
    --hover-text-color: #fff8dc;
    --cf-bg-card: #3a1a0f;
    --cf-text-light: #ffdab9;
    --cf-text-muted: #c68642;
    --pumpkin-orange: #ff7518;
    --spooky-purple: #5a005a;
    --bat-black: #1b0c0c;
    --ghost-white: #f8f8ff;
    --zombie-green: #556b2f;
}


body, .mw-body {
    mw.loader.load('/w/index.php?title=MediaWiki:Test.css&action=raw&ctype=text/css');
    background:
        radial-gradient(circle at top, #3b0f0f 0%, #1c0c0c 70%),
        linear-gradient(
            to bottom,
            #2a1a0f 0%,
            #3b1f0b 30%,
            #5a2d0f 60%,
            #ff7518 80%,
            #2c1c0f 100%
        );
    background-attachment: fixed;
    color: var(--text-color);
    transition: all 0.5s ease;
    min-height: 100vh;
}


.mw-headline, h2, h3 {
    var config = {
    color: var(--pumpkin-orange);
        leavesCount: 50,
    text-shadow: 2px 2px 6px #000, 0 0 15px rgba(255,117,24,0.4), 0 0 25px rgba(139,0,139,0.3);
        batsCount: 8,
    animation: spooky-glow 4s ease-in-out infinite alternate;
        websCount: 5,
     position: relative;
        pumpkinCount: 3,
}
        leafIcons: ['🍂','🍁','🦇','🕸️'],
        leafSizes: {min: 14, max: 42},
        pumpkinSizes: {min: 24, max: 36},
        batAnimationDuration: {min: 8, max: 14},
        leafAnimationDuration: [8, 10, 12],
        mobileMaxLeaves: 25
     };


@keyframes spooky-glow {
     function isMobile() {
     0%, 100% {  
         return window.innerWidth <= 768;
         text-shadow: 2px 2px 6px #000, 0 0 15px rgba(255,117,24,0.4);
     }
     }
     50% {  
 
         text-shadow: 2px 2px 8px #000, 0 0 20px rgba(255,117,24,0.6), 0 0 30px rgba(90,0,90,0.4);
     function random(min, max) {
         return min + Math.random() * (max - min);
     }
     }
}


.mw-body-header .firstHeading-container h1 {
    function createElement(tag, className, innerHTML) {
    color: #ffb84d !important;
        var el = document.createElement(tag);
    text-shadow: 2px 2px 4px #000;
        if (className) el.className = className;
     animation: none !important;
        if (innerHTML) el.innerHTML = innerHTML;
}
        return el;
     }


.mw-body-header #siteSub {
    function initLeaves() {
    color: #ffdcb3 !important;
        var leavesFragment = document.createDocumentFragment();
}
        var count = isMobile() ? config.mobileMaxLeaves : config.leavesCount;


.mw-body-header a {
        for (var i = 0; i < count; i++) {
    color: #ffb84d !important;
            var leaf = createElement('span', 'halloween-leaf', config.leafIcons[Math.floor(Math.random() * config.leafIcons.length)]);
    text-shadow: 0 0 3px rgba(255,117,24,0.2);
            leaf.style.left = random(0, 100) + '%';
}
            leaf.style.fontSize = random(config.leafSizes.min, config.leafSizes.max) + 'px';
            leaf.style.opacity = random(0.3, 1);
            leaf.style.animationDuration = config.leafAnimationDuration[i % config.leafAnimationDuration.length] + 's';
            leaf.style.animationDelay = random(0, 10) + 's';
            leavesFragment.appendChild(leaf);
        }
        var leavesContainer = createElement('div', 'halloween-leaves');
        leavesContainer.appendChild(leavesFragment);
        document.body.appendChild(leavesContainer);
    }


.mw-body-header a:hover {
    function initPumpkins() {
    color: #fff8dc !important;
        var heading = document.getElementById('firstHeading');
    text-shadow: 0 0 8px var(--pumpkin-orange);
        if (!heading) return;
}


a {  
        for (var i = 0; i < config.pumpkinCount; i++) {
    color: #ffb84d;  
            var pumpkin = createElement('span', 'halloween-pumpkin', '🎃');
    text-decoration: none;  
            pumpkin.style.margin = '0 2px';
    transition: all 0.3s;  
            pumpkin.style.fontSize = random(config.pumpkinSizes.min, config.pumpkinSizes.max) + 'px';
}
            heading.appendChild(pumpkin);
            floatPumpkin(pumpkin);
        }
    }


a:hover {  
    function floatPumpkin(el) {
    color: #fff8dc;  
        var pos = 0, dir = 1;
    text-shadow: 0 0 12px var(--pumpkin-orange);  
        setInterval(function() {
}
            pos += dir * 0.3;
            if(pos > 5 || pos < 0) dir *= -1;
            el.style.transform = 'translateY(' + pos + 'px)';
        }, 30);
    }


table, th, td, blockquote, .infobox, .navbox, div.thumb, .mw-parser-output > div {
    function initLinks() {
    background: linear-gradient(135deg, #402715, #5a2d0f);
        document.body.addEventListener('mouseover', function(e) {
    color: var(--text-color);
            if (e.target.tagName.toLowerCase() === 'a') {
    border: 1px solid var(--border-color);
                e.target.style.color = '#ffa500';
    border-radius: 8px;
                e.target.style.textShadow = '0 0 8px #ffa500, 0 0 15px #ff7518';
    box-shadow: 0 4px 15px rgba(0,0,0,0.3);
            }
    transition: all 0.3s;
        });
    position: relative;
        document.body.addEventListener('mouseout', function(e) {
     overflow: hidden;
            if (e.target.tagName.toLowerCase() === 'a') {
}
                e.target.style.color = '';
                e.target.style.textShadow = '';
            }
        });
     }


table:hover, .infobox:hover, .navbox:hover {
    function initBats() {
    box-shadow: 0 6px 20px rgba(255,117,24,0.3);
        var batsFragment = document.createDocumentFragment();
    border-color: var(--pumpkin-orange);
        for (var i = 0; i < config.batsCount; i++) {
}
            var bat = createElement('div', 'halloween-bat');
            bat.style.top = random(0, 50) + 'vh';
            bat.style.left = (-50 + random(0, 100)) + 'px';
            bat.style.animationDuration = random(config.batAnimationDuration.min, config.batAnimationDuration.max) + 's';
            batsFragment.appendChild(bat);
        }
        document.body.appendChild(batsFragment);
    }


button, .oo-ui-buttonElement-button {
     function initWebs() {
     background: linear-gradient(135deg, #331a00, #5a2d0f);
        var websFragment = document.createDocumentFragment();
    color: var(--text-color);
        for (var i = 0; i < config.websCount; i++) {
    border: 1px solid #8b4513;
            var web = createElement('div', 'spider-web');
    border-radius: 6px;
            web.style.top = random(0, 80) + 'vh';
    transition: all 0.3s;
            web.style.left = random(0, 90) + 'vw';
    position: relative;
            web.style.transform = 'rotate(' + random(0, 360) + 'deg)';
    overflow: hidden;
            websFragment.appendChild(web);
}
        }
 
        document.body.appendChild(websFragment);
button:hover, .oo-ui-buttonElement-button:hover {
     }
    background: linear-gradient(135deg, #5a2d0f, var(--pumpkin-orange));
    color: var(--ghost-white);
    box-shadow: 0 0 15px var(--pumpkin-orange), 0 0 30px rgba(255,117,24,0.3);
    transform: translateY(-2px);
}
 
.mw-footer {
    background: linear-gradient(135deg, #3b1f0b, #2a1a0f);
    color: var(--text-color);
    border-top: 3px solid var(--pumpkin-orange);
    box-shadow: 0 -5px 20px rgba(255, 117, 24, 0.2);
}
 
.citizen-header {
    background: linear-gradient(to bottom, #2a1a0f 0%, #5a2d0f 50%, #ff7518 100%);
}
 
.halloween-leaves {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    pointer-events: none;
    overflow: hidden;
    z-index: 998;
}
 
.halloween-leaf {
    position: absolute;
    top: -2em;
    font-size: 1.5em;
    animation: fall linear infinite;
    opacity: 0;
    filter: drop-shadow(0 0 5px var(--pumpkin-orange));
}
 
.halloween-leaf:nth-child(odd) { animation-duration: 8s; }
.halloween-leaf:nth-child(even) { animation-duration: 10s; }
.halloween-leaf:nth-child(3n) { animation-duration: 12s; }
.halloween-leaf:nth-child(3n+1) { animation-delay: -2s; }
.halloween-leaf:nth-child(5n) { animation-delay: -4s; }
 
@keyframes fall {
    0% { transform: translateY(-20px) translateX(-10px) rotate(0deg); opacity: 0; }
    10% { opacity: 1; }
    90% { opacity: 0.8; }
    100% { transform: translateY(100vh) translateX(20px) rotate(360deg); opacity: 0; }
}
 
.halloween-pumpkin {
    display: inline-block;
    animation: float 3s ease-in-out infinite, spooky-glow 4s ease-in-out infinite;
    filter: drop-shadow(0 0 8px var(--pumpkin-orange));
}
 
.halloween-eyes {
    position: absolute;
    width: 12px;
    height: 12px;
    border-radius: 50%;
    background: var(--pumpkin-orange);
    box-shadow: 0 0 10px var(--pumpkin-orange);
    animation: blink 2s infinite;
}
 
@keyframes blink {
    0%, 20%, 40%, 60%, 80%, 100% { opacity: 1; }
    10%, 30%, 50%, 70%, 90% { opacity: 0; }
}
 
.halloween-bat {
    position: absolute;
    width: 25px;
    height: 15px;
    background: var(--bat-black);
    border-radius: 50% 50% 20% 20%;
    animation: fly 12s linear infinite;
}
 
.halloween-bat::after, .halloween-bat::before {
    content: '';
    position: absolute;
    width: 15px;
    height: 5px;
    background: var(--bat-black);
    border-radius: 50%;
}
 
.halloween-bat::before { top: -5px; left: 0; transform: rotate(30deg); }
.halloween-bat::after { top: -5px; right: 0; transform: rotate(-30deg); }
 
@keyframes fly {
    0% { transform: translate(-50px, 0) rotate(0deg); }
    25% { transform: translate(200px, 100px) rotate(15deg); }
    50% { transform: translate(400px, 50px) rotate(-15deg); }
    75% { transform: translate(600px, 150px) rotate(10deg); }
    100% { transform: translate(800px, 0) rotate(0deg); }
}
 
.spider-web {
    position: absolute;
    top: 10px;
    right: 10px;
    width: 30px;
    height: 30px;
    background:
        radial-gradient(circle, transparent 30%, var(--border-color) 31%, transparent 32%),
        linear-gradient(45deg, transparent 45%, var(--border-color) 46%, transparent 47%),
        linear-gradient(-45deg, transparent 45%, var(--border-color) 46%, transparent 47%);
    opacity: 0.3;
     pointer-events: none;
}


html { scroll-behavior: smooth; }
    mw.hook('wikipage.content').add(function() {
        initLeaves();
        initPumpkins();
        initLinks();
        initBats();
        initWebs();
    });


body::before {
})();
    content: '';
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background:
        radial-gradient(circle at 20% 80%, rgba(255, 117, 24, 0.1) 0%, transparent 50%),
        radial-gradient(circle at 80% 20%, rgba(139, 0, 139, 0.1) 0%, transparent 50%);
    pointer-events: none;
    z-index: -1;
}

Версия от 19:48, 23 октября 2025

(function() {
    var today = new Date();
    var month = today.getMonth() + 1;
    if (month !== 10 && month !== 11) return;

    mw.loader.load('/w/index.php?title=MediaWiki:Test.css&action=raw&ctype=text/css');

    var config = {
        leavesCount: 50,
        batsCount: 8,
        websCount: 5,
        pumpkinCount: 3,
        leafIcons: ['🍂','🍁','🦇','🕸️'],
        leafSizes: {min: 14, max: 42},
        pumpkinSizes: {min: 24, max: 36},
        batAnimationDuration: {min: 8, max: 14},
        leafAnimationDuration: [8, 10, 12],
        mobileMaxLeaves: 25
    };

    function isMobile() {
        return window.innerWidth <= 768;
    }

    function random(min, max) {
        return min + Math.random() * (max - min);
    }

    function createElement(tag, className, innerHTML) {
        var el = document.createElement(tag);
        if (className) el.className = className;
        if (innerHTML) el.innerHTML = innerHTML;
        return el;
    }

    function initLeaves() {
        var leavesFragment = document.createDocumentFragment();
        var count = isMobile() ? config.mobileMaxLeaves : config.leavesCount;

        for (var i = 0; i < count; i++) {
            var leaf = createElement('span', 'halloween-leaf', config.leafIcons[Math.floor(Math.random() * config.leafIcons.length)]);
            leaf.style.left = random(0, 100) + '%';
            leaf.style.fontSize = random(config.leafSizes.min, config.leafSizes.max) + 'px';
            leaf.style.opacity = random(0.3, 1);
            leaf.style.animationDuration = config.leafAnimationDuration[i % config.leafAnimationDuration.length] + 's';
            leaf.style.animationDelay = random(0, 10) + 's';
            leavesFragment.appendChild(leaf);
        }
        var leavesContainer = createElement('div', 'halloween-leaves');
        leavesContainer.appendChild(leavesFragment);
        document.body.appendChild(leavesContainer);
    }

    function initPumpkins() {
        var heading = document.getElementById('firstHeading');
        if (!heading) return;

        for (var i = 0; i < config.pumpkinCount; i++) {
            var pumpkin = createElement('span', 'halloween-pumpkin', '🎃');
            pumpkin.style.margin = '0 2px';
            pumpkin.style.fontSize = random(config.pumpkinSizes.min, config.pumpkinSizes.max) + 'px';
            heading.appendChild(pumpkin);
            floatPumpkin(pumpkin);
        }
    }

    function floatPumpkin(el) {
        var pos = 0, dir = 1;
        setInterval(function() {
            pos += dir * 0.3;
            if(pos > 5 || pos < 0) dir *= -1;
            el.style.transform = 'translateY(' + pos + 'px)';
        }, 30);
    }

    function initLinks() {
        document.body.addEventListener('mouseover', function(e) {
            if (e.target.tagName.toLowerCase() === 'a') {
                e.target.style.color = '#ffa500';
                e.target.style.textShadow = '0 0 8px #ffa500, 0 0 15px #ff7518';
            }
        });
        document.body.addEventListener('mouseout', function(e) {
            if (e.target.tagName.toLowerCase() === 'a') {
                e.target.style.color = '';
                e.target.style.textShadow = '';
            }
        });
    }

    function initBats() {
        var batsFragment = document.createDocumentFragment();
        for (var i = 0; i < config.batsCount; i++) {
            var bat = createElement('div', 'halloween-bat');
            bat.style.top = random(0, 50) + 'vh';
            bat.style.left = (-50 + random(0, 100)) + 'px';
            bat.style.animationDuration = random(config.batAnimationDuration.min, config.batAnimationDuration.max) + 's';
            batsFragment.appendChild(bat);
        }
        document.body.appendChild(batsFragment);
    }

    function initWebs() {
        var websFragment = document.createDocumentFragment();
        for (var i = 0; i < config.websCount; i++) {
            var web = createElement('div', 'spider-web');
            web.style.top = random(0, 80) + 'vh';
            web.style.left = random(0, 90) + 'vw';
            web.style.transform = 'rotate(' + random(0, 360) + 'deg)';
            websFragment.appendChild(web);
        }
        document.body.appendChild(websFragment);
    }

    mw.hook('wikipage.content').add(function() {
        initLeaves();
        initPumpkins();
        initLinks();
        initBats();
        initWebs();
    });

})();