Theme & Font Changer

Theme Changer + Font Changer for Black Logs

// ==UserScript==
// @name         Theme & Font Changer
// @namespace    https://logs.blackrussia.online/
// @version      0.4.1.0
// @description  Theme Changer + Font Changer for Black Logs
// @author       Lukky
// @match        https://logs.blackrussia.online/gslogs/*
// @icon         https://freepngimg.com/thumb/eagle/20-eagle-black-siluet-png-image-download-thumb.png
// @license      Lukky
// ==/UserScript==
(function() {
    'use strict';

    scriptInit();

    const styleButton = createStyleButton('div.container-fluid span.badge.bg-success');
    const styleContainerBg = createStyleContainerBg('main');

    function replaceTableHeading() {
        const titleElement = document.querySelector('div.container-fluid span.badge.bg-success');
        const tableHeading = document.querySelector('#log-table-heading');
        if (titleElement && tableHeading) {
            tableHeading.textContent += ' - ' + titleElement.textContent;
        };
    }

    function createStyleButton(element) {

        const fontStyles = document.createElement('style');
        fontStyles.textContent = `@import url('https://fonts.googleapis.com/css2?family=Bad+Script&family=Comfortaa&family=Fira+Sans&family=Marmelad&family=Montserrat&family=Neucha&family=Play&family=Roboto:ital@1&family=Sofia+Sans&family=Ubuntu&display=swap');`;
        document.head.appendChild(fontStyles);

        const styleToggle = document.createElement('button');
        styleToggle.className = 'style-button';
        styleToggle.id = 'style-modal-toggle';
        styleToggle.href = '#!';
        styleToggle.tabIndex = '0';
        styleToggle.dataset.bsToggle = 'modal';
        styleToggle.dataset.bsTarget = '#container-background';
        styleToggle.textContent = 'STYLE';
        styleToggle.style.color = '#ffffff';
        styleToggle.style.background = 'transparent';
        styleToggle.style.border = '3px solid #ffffff';
        styleToggle.style.borderRadius = '10px';
        styleToggle.style.boxShadow = '0px 0px 10px #ffffff';
        styleToggle.style.width = '10%';

        const replaceElement = document.querySelector(element);
        replaceElement.replaceWith(styleToggle);
    }

    function createStyleContainerBg(element) {

        const containerBg = document.createElement('div');
        containerBg.className = 'modal fade';
        containerBg.id = 'container-background';
        containerBg.tabIndex = '-1';
        containerBg.style.dispaly = 'none';
        containerBg.ariaHidden = 'true';

        const parentElement = document.querySelector(element);
        parentElement.parentNode.insertBefore(containerBg, parentElement);

        const containerContent = document.createElement('div');
        containerContent.className = 'modal-dialog modal-dialog-centered';
        containerContent.id = 'style-container-content';
        containerBg.appendChild(containerContent);

        const styleContainer = document.createElement('div');
        styleContainer.className = 'modal-content';
        containerContent.appendChild(styleContainer);

        const styleContHead = document.createElement('div');
        const styleContBody = document.createElement('div');
        styleContHead.className = 'modal-header';
        styleContBody.className = 'modal-body';
        styleContBody.style.display = 'flex';
        styleContBody.style.flexDirection = 'column';
        styleContainer.appendChild(styleContHead);
        styleContainer.appendChild(styleContBody);

        const styleTitle = document.createElement('h5');
        styleTitle.className = 'style-title';
        styleContHead.appendChild(styleTitle);

        const styleTitleText = document.createElement('span');
        styleTitleText.className = 'badge bg-success';
        styleTitleText.textContent = 'STYLE';
        styleTitle.appendChild(styleTitleText);
        styleTitle.insertAdjacentText('beforeend', '-Переключатель Тем-');

        const styleClose = document.createElement('button');
        styleClose.type = 'button';
        styleClose.className = 'btn-close';
        styleClose.dataset.bsDismiss = 'modal';
        styleClose.ariaLabel = 'Close';
        styleContHead.appendChild(styleClose);

        const switchStyleElement = document.createElement('label');
        switchStyleElement.className = 'switch';
        switchStyleElement.innerHTML = `
            <input type="checkbox" id="styleToggleCheck">
            <span class="slider round" style="padding-right: 20px; box-shadow: 0px 0px 5px #fff"></span>
            <span class="addingText" style="display: block; width: max-content; margin: 5px; padding-left: 50px"> Включить Переливание Текста </span>
        `;
        styleContBody.appendChild(switchStyleElement);

        var styleToggleCheck = document.getElementById('styleToggleCheck');
        if (localStorage.getItem('styleThemeEnabled') === 'true') {
            styleToggleCheck.checked = true;
            applyTextGradient();
        }
        styleToggleCheck.addEventListener('change', function() {
            if (styleToggleCheck.checked) {
                applyTextGradient();
                localStorage.setItem('styleThemeEnabled', 'true');
            } else {
                removeTextGradient();
                localStorage.setItem('styleThemeEnabled', 'false');
            }
        });
        function applyTextGradient() {
            const textGradient = document.createElement('style');
            textGradient.id = 'text-gradient';
            textGradient.textContent = `.td-category[data-v-2d76ca92] a[data-v-2d76ca92] {
    background: linear-gradient(45deg, #00ffff, #0045ff, #00ffff);
    background-size: 150% 150%;
    animation: gradientCategory 5s linear infinite;
    color: transparent !important;
    -webkit-background-clip: text;
    font-style: italic;
    font-weight: 700;
    text-decoration: none;
    text-shadow: 0px 0px 10px #08f;
    padding-right: 3px;
}
@keyframes gradientCategory {
    0% {background-position: 0% 100%;}
    100% {background-position: 1200% 100%;}
}
.td-player-name[data-v-2d76ca92] a[data-v-2d76ca92] {
    background: linear-gradient(45deg, #ffff00, #ff4400, #ffff00);
    background-size: 150% 150%;
    animation: gradientCategory 5s linear infinite;
    color: transparent !important;
    -webkit-background-clip: text;
    font-style: italic;
    font-weight: 700;
    text-decoration: none;
    text-shadow: 0px 0px 10px #f80;
    padding-right: 3px;
}
.navbar-brand {
    background: linear-gradient(45deg, #00ccff, #ff4400, #00ccff);
    background-size: 150% 150%;
    animation: gradientCategory 5s linear infinite;
    color: transparent !important;
    -webkit-background-clip: text;
    font-style: italic;
    font-weight: 700;
    text-decoration: none;
    text-shadow: 0px 0px 10px #888;
    padding-right: 3px;
}`;
            document.head.appendChild(textGradient);
        }
        function removeTextGradient() {
            var textGradient = document.querySelector('#text-gradient');
            document.head.removeChild(textGradient);
        }

        const fontSelectorBlock = document.createElement('label');
        fontSelectorBlock.className = 'font-selector-block';
        styleContBody.appendChild(fontSelectorBlock);

        const fontSelector = document.createElement('select');
        fontSelector.id = 'font-selector';
        fontSelector.style.width = '40%';
        fontSelector.style.borderRadius = '20px';
        fontSelector.style.border = '1px solid #fff';
        fontSelector.style.background = '#222';
        fontSelector.style.color = '#fff';
        fontSelector.style.fontSize = '18px';
        fontSelector.style.textAlign = 'center';
        fontSelector.style.padding = '4px';
        fontSelector.style.marginTop = '25px';
        fontSelector.style.marginRight = '10px';
        fontSelector.style.boxShadow = '0px 0px 5px #fff';
        fontSelector.style.cursor = 'pointer';
        const storedFont = localStorage.getItem('selectedFont') || 'Roboto';
        const fonts = ['Bad Script', 'Comfortaa', 'Fira Sans', 'Marmelad', 'Montserrat', 'Neucha', 'Play', 'Roboto', 'Sofia Sans', 'Ubuntu'];
        fonts.forEach(font => {
            const option = document.createElement('option');
            option.value = font;
            option.textContent = font;
            if (font === storedFont) {
                option.selected = true;
                document.body.style.fontFamily = font;
            }
            fontSelector.appendChild(option);
        });
        fontSelector.addEventListener('change', function() {
            const selectedFont = this.value;
            document.body.style.fontFamily = selectedFont;
            localStorage.setItem('selectedFont', selectedFont);
        });
        fontSelectorBlock.appendChild(fontSelector);

        const fontSelectorText = document.createElement('span');
        fontSelectorText.className = 'addingText';
        fontSelectorText.textContent = 'Выбор Шрифта';
        fontSelectorBlock.appendChild(fontSelectorText);

        const colorSelectorBlock = document.createElement('label');
        colorSelectorBlock.className = 'color-selector-block';
        styleContBody.appendChild(colorSelectorBlock);

        const colorSelector = document.createElement('select');
        colorSelector.id = 'color-selector';
        colorSelector.style.width = '40%';
        colorSelector.style.borderRadius = '20px';
        colorSelector.style.border = '1px solid #fff';
        colorSelector.style.background = '#222';
        colorSelector.style.color = '#fff';
        colorSelector.style.fontSize = '18px';
        colorSelector.style.textAlign = 'center';
        colorSelector.style.padding = '4px';
        colorSelector.style.marginTop = '25px';
        colorSelector.style.marginRight = '10px';
        colorSelector.style.boxShadow = '0px 0px 5px #fff';
        colorSelector.style.cursor = 'pointer';
        const storedColor = localStorage.getItem('selectedColor') || 'WHITE';
        const colors = ['WHITE', 'PINK', 'CYAN', 'KHAKI', 'SKYBLUE', 'PALEGREEN'];
        colors.forEach(color => {
            const option = document.createElement('option');
            option.value = color;
            option.textContent = color;
            if (color === storedColor) {
                option.selected = true;
                applySelectedStyle(color);
            }
            colorSelector.appendChild(option);
        });
        colorSelector.addEventListener('change', function() {
            const selectedColor = this.value;
            localStorage.setItem('selectedColor', selectedColor);
            applySelectedStyle(selectedColor);
        });
        colorSelectorBlock.appendChild(colorSelector);

        const colorSelectorText = document.createElement('span');
        colorSelectorText.className = 'addingText';
        colorSelectorText.textContent = 'Выбор Цвета';
        colorSelectorBlock.appendChild(colorSelectorText);

        const brightnessSliderBlock = document.createElement('label');
        brightnessSliderBlock.className = 'brightness-slider-block';
        styleContBody.appendChild(brightnessSliderBlock);

        const storedBright = localStorage.getItem('savedBrightness') || '100';
        const htmlContent = document.querySelector('html');
        const brightnessSlider = document.createElement('input');
        htmlContent.style.filter = `brightness(${storedBright}%)`
        brightnessSlider.id = 'brightness-slider';
        brightnessSlider.type = 'range';
        brightnessSlider.min = '30';
        brightnessSlider.max = '100';
        brightnessSlider.style.marginTop = '25px';
        brightnessSlider.style.marginRight = '10px';
        brightnessSlider.value = storedBright;
        brightnessSlider.addEventListener('input', function() {
            const brightnessValue = this.value;
            localStorage.setItem('savedBrightness', brightnessValue);
            htmlContent.style.filter = `brightness(${brightnessValue}%)`;
        });
        const filterHeading = document.querySelector('#log-filter-heading');
        if (filterHeading) {
            filterHeading.parentNode.insertBefore(brightnessSlider, filterHeading.nextSibling);
        }
        const sliderStyle = document.createElement('style');
        sliderStyle.textContent = `input[type=range]  {width: 40%; border-radius: 10px; -webkit-appearance: none; -moz-appearance: none; appearance: none; box-shadow: 0px 0px 5px #fff;}
                                   input[type=range]::-webkit-slider-runnable-track {border-radius: 10px; height: 15px; border: 2px solid #fff; background-color: #222;}
                                   input[type=range]::-webkit-slider-thumb {background: #444; border: 1px solid #fff; box-shadow: 0px 0px 2px #fff; border-radius: 25px; cursor: pointer; width: 15px; height: 30px; -webkit-appearance: none; margin-top: -8px;}
                                   input[type=range]::-moz-range-track {border-radius: 10px/100%; height: 5px; border: 1px solid cyan; background-color: #fff;}
                                   input[type=range]::-moz-range-thumb {background: #ecf0f1; border: 1px solid cyan; border-radius: 10px/100%; cursor: pointer;}`;
        document.head.appendChild(sliderStyle);
        brightnessSliderBlock.appendChild(brightnessSlider);

        const brightnessSliderText = document.createElement('span');
        brightnessSliderText.className = 'addingText';
        brightnessSliderText.textContent = 'Выбор Яркости';
        brightnessSliderBlock.appendChild(brightnessSliderText);

        const nickColorBlock = document.createElement('label');
        nickColorBlock.className = 'color-picker-nickname';
        styleContBody.appendChild(nickColorBlock);

        const colorNickElement = document.createElement('input');
        const nickColor = localStorage.getItem('playerNameColor') || '#ff8800';
        colorNickElement.type = 'color';
        colorNickElement.style.marginTop = '20px';
        colorNickElement.style.marginRight = '10px';
        colorNickElement.style.width = '40%';
        colorNickElement.value = nickColor;
        colorNickElement.addEventListener('input', function() {
            const selectedColor = colorNickElement.value;
            const tdElements = document.querySelectorAll('td.td-player-name[data-v-2d76ca92=""]');
            localStorage.setItem('playerNameColor', selectedColor);
            tdElements.forEach(function(td) {
                const playerNick = td.querySelector('a');
                if (playerNick) {
                    playerNick.style.color = selectedColor;
                    playerNick.style.textShadow = '0px 0px 1px' + selectedColor;
                }
            });
        });
        nickColorBlock.appendChild(colorNickElement);

        const colorNickText = document.createElement('span');
        colorNickText.className = 'addingText';
        colorNickText.textContent = 'Цвет Никнеймов';
        nickColorBlock.appendChild(colorNickText);

        const categoryColorBlock = document.createElement('label');
        nickColorBlock.className = 'color-picker-category';
        styleContBody.appendChild(categoryColorBlock);

        const colorCategoryElement = document.createElement('input');
        const categoryColor = localStorage.getItem('categoryColor') || '#0088ff';
        colorCategoryElement.type = 'color';
        colorCategoryElement.style.marginTop = '20px';
        colorCategoryElement.style.marginRight = '10px';
        colorCategoryElement.style.width = '40%';
        colorCategoryElement.value = categoryColor;
        colorCategoryElement.addEventListener('input', function() {
            const selectedColor = colorCategoryElement.value;
            const tdElements = document.querySelectorAll('td.td-category[data-v-2d76ca92=""]');
            localStorage.setItem('categoryColor', selectedColor);
            tdElements.forEach(function(td) {
                const category = td.querySelector('a');
                if (category) {
                    category.style.color = selectedColor;
                    category.style.textShadow = '0px 0px 1px' + selectedColor;
                }
            });
        });
        categoryColorBlock.appendChild(colorCategoryElement);

        const colorCategoryText = document.createElement('span');
        colorCategoryText.className = 'addingText';
        colorCategoryText.textContent = 'Цвет Категорий';
        categoryColorBlock.appendChild(colorCategoryText);
    }

    function applySavedColors() {
        const savedNick = localStorage.getItem('playerNameColor');
        const savedCategory = localStorage.getItem('categoryColor');
        const savedColors = document.createElement('style');
        savedColors.textContent = `.td-player-name[data-v-2d76ca92] a[data-v-2d76ca92] {
        color: ${savedNick};
        text-shadow: 0px 0px 1px ${savedNick};
        }
        .td-category[data-v-2d76ca92] a[data-v-2d76ca92] {
        color: ${savedCategory};
        text-shadow: 0px 0px 1px ${savedCategory};
        }`
        document.head.appendChild(savedColors);
    }

    function applySelectedStyle(color) {
    const currentStyleElement = document.getElementById('customStyle');
    if (currentStyleElement) {
        currentStyleElement.remove();
    }
    const styleElement = document.createElement('style');
    styleElement.id = 'customStyle';
    styleElement.textContent = `h1, h2, h3, h4, h5, h6 { color: ${color.toLowerCase()} !important; filter: contrast(0.8); text-shadow: 0px 0px 10px ${color.toLowerCase()} !important;}
    #log-filter[data-v-2d76ca92] .form-label[data-v-2d76ca92] {color: ${color.toLowerCase()} !important; filter: contrast(0.8); text-shadow: 0px 0px 2px ${color.toLowerCase()} !important;}
    #log-filter-section[data-v-2d76ca92] {border: 1px solid ${color.toLowerCase()} !important;}
    .navbar-dark .navbar-nav .nav-link {color: ${color.toLowerCase()} !important; filter: contrast(0.8); text-shadow: 0px 0px 2px ${color.toLowerCase()} !important;}
    #log-table[data-v-2d76ca92]>:not(:last-child)>:last-child>*, .table>:not(:last-child)>:last-child>* {color: ${color.toLowerCase()} !important; border-bottom: 1px solid ${color.toLowerCase()} !important;}
    #log-table[data-v-2d76ca92] .first-row[data-v-2d76ca92] td[data-v-2d76ca92] {color: ${color.toLowerCase()} !important; text-shadow: 0px 0px 2px ${color.toLowerCase()} !important;}
    #log-table[data-v-2d76ca92]>:not(caption)>*>*, .table-borderless>:not(caption)>*>* {border-bottom: 1px solid ${color.toLowerCase()} !important;}
    #log-table[data-v-2d76ca92] .second-row[data-v-2d76ca92] td[data-v-2d76ca92] {color: ${color.toLowerCase()} !important; text-shadow: 0px 0px 2px ${color.toLowerCase()} !important;}
    .form-control {color: ${color.toLowerCase()} !important; border: 1px solid ${color.toLowerCase()} !important;}
    .input-group.has-validation>.dropdown-toggle:nth-last-child(n+4), .input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu), .input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3), .input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu) {color: ${color.toLowerCase()} !important; border: 1px solid ${color.toLowerCase()} !important;}
    .autoComplete_wrapper>input {border: 1px solid ${color.toLowerCase()} !important;}
    .dp__input{border: 1px solid ${color.toLowerCase()} !important;};
    ` ;
    document.head.appendChild(styleElement);
    }

    function applySwitchStyle() {
    const switchStyle = document.createElement('style');
    switchStyle.textContent = `
        .switch {
            position: relative;
            display: inline-block;
            width: 60px;
            height: 34px;
            padding-left: 20px;
        }
        .switch input { display: none; }
        .slider {
            position: absolute;
            cursor: pointer;
            top: 0;
            left: 0;
            right: 0;
            bottom: 0;
            background-color: #ccc;
            transition: all .4s ease;
        }
        .slider:before {
            position: absolute;
            content: "";
            height: 26px;
            width: 26px;
            left: 4px;
            bottom: 4px;
            background-color: white;
            transition: all .4s ease;
        }
        input:checked + .slider {
            background-color: #222;
        }
        input:focus + .slider {
            box-shadow: 0 0 1px #222;
        }
        input:checked + .slider:before {
            transform: translateX(26px);
        }
        .slider.round {
            border-radius: 34px;
        }
        .slider.round:before {
            border-radius: 50%;
        }
    `;
    document.head.appendChild(switchStyle);};

    function applyBodyStyle() {
        const bodyStyle = document.createElement('style');
        bodyStyle.textContent = `
        .bg-dark {
    bs-bg-opacity: 0;
    background: #000 !important;
}
.modal-header {
    border-top-left-radius: 25px !important;
    border-top-right-radius: 25px !important;
}
.modal-body {
    border-bottom-left-radius: 25px !important;
    border-bottom-right-radius: 25px !important;
}
.modal-content {
    border-radius: 25px;
}
.modal-open {
    padding-right: 0px !important;
}
.modal-backdrop {
    height: 100%;
    width: 100%;
}
.modal.fade.show {
    padding-right: 80px !important;
    padding-left: 80px !important;
}
.addingText {
    font-size: 20px;
    font-style: italic;
    font-weight: 800;
}
h1, h2, h3, h4, h5, h6 {
    color: #fff;
    text-shadow: 0px 0px 10px #fff;
}
#game-logs-app {
  background: #000;
}
body {
    background-color: #000;
    background-size: 100%;
}
.navbar-dark .navbar-brand, .navbar-dark .navbar-brand:focus, .navbar-dark .navbar-brand:hover {
    color: #fff;
    font-weight: 900;
}
@keyframes textGradient {
    0% { background-position: 0% 50%; }
    100% { background-position: 1200% 50%; }
}
.bg-success {
    background: #000 !important;
    border: 1px solid #fff;
    box-shadow: 0px 0px 10px #fff;
}
.badge {
    border-radius: 7px;
    color: #fff;
    display: inline-block;
    font-size: .75em;
    font-weight: 500;
    line-height: 1;
    padding: 0.35em 0.65em;
    text-align: center;
    vertical-align: baseline;
    white-space: nowrap;
}
.navbar-dark .navbar-nav .nav-link {
    color: #fff;
    text-shadow: 0px 0px 10px #fff;
}
.bi-arrow-left::before {
    color: #fff;
}
#log-table[data-v-2d76ca92]>:not(:last-child)>:last-child>*, .table>:not(:last-child)>:last-child>* {
    border: 1px solid #111;
    border-bottom: 1px solid #fff;
    background: #111;
    color: #fff;
}
#log-table[data-v-2d76ca92] .first-row[data-v-2d76ca92] td[data-v-2d76ca92] {
    text-align: center;
    background: #111;
    color: #fff;
    text-shadow: 0px 0px 2px #fff;
}
.td-category[data-v-2d76ca92] a[data-v-2d76ca92] {
    color: #08f;
    -webkit-background-clip: text;
    font-style: italic;
    font-weight: 700;
    text-decoration: none;
    text-shadow: 0px 0px 1px #08f;
    padding-right: 3px;
}
.td-player-name[data-v-2d76ca92] a[data-v-2d76ca92] {
    color: #f80;
    -webkit-background-clip: text;
    font-style: italic;
    font-weight: 700;
    text-decoration: none;
    text-shadow: 0px 0px 1px #f80;
    padding-right: 3px;
}
#log-table[data-v-2d76ca92] .second-row[data-v-2d76ca92] td[data-v-2d76ca92] {
    padding: 0.5rem 0.5rem 0.5rem 1.5rem;
    background: #000;
    color: #fff;
    text-shadow: 0px 0px 2px #fff;
}
.td-index[data-v-2d76ca92] {
    background: linear-gradient(90deg, rgba(51,51,51,1) 0%, rgba(17,17,17,1) 100%) !important;
    color: #fff;
}
#log-table[data-v-2d76ca92]>:not(caption)>*>*, .table-borderless>:not(caption)>*>* {
    border: 1px solid rgba(0,0,0,0);
    border-bottom: 1px solid #fff;
}
.bi-sort-down::before {
    color: #f90;
    text-shadow: 0px 0px 2px #f90;
}
.bi-sort-up::before {
    color: #f90;
    text-shadow: 0px 0px 2px #f90;
}
#log-table[data-v-2d76ca92] .first-row[data-v-2d76ca92] td[data-v-2d76ca92] {
    border: 1px solid rgba(0,0,0,0);
    text-align: center;
}
#log-filter-section[data-v-2d76ca92] {
    background: #000;
    border: 1px solid #fff;
    border-radius: 25px;
    height: 830px;
    margin-left: 1rem;
    min-width: 20rem;
    overflow-y: auto;
}
#log-filter[data-v-2d76ca92] .form-label[data-v-2d76ca92] {
    color: #fff;
    font-weight: 500;
}
#log-filter[data-v-2d76ca92] .close-btn[data-v-2d76ca92] {
    height: 41px;
    background: #000;
    border-bottom-left-radius: 10px;
    border: 1px solid #000;
}
.btn-primary, .submit-btn {
    background-color: #000;
    border: 3px solid #0af;
    border-radius: 10px;
    color: #0ff;
}
.btn-outline-danger {
    border: 3px solid #f00;
    color: #f00;
    border-radius: 10px;
}
.input-group.has-validation>.dropdown-toggle:nth-last-child(n+4), .input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu), .input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3), .input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu) {
    border-bottom-right-radius: 0;
    border-top-right-radius: 0;
    background: #111;
    color: #fff;
    border: 1px solid #fff;
}
.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback):not(.field-error) {
    border-bottom-left-radius: 0;
    border-top-left-radius: 0;
    margin-left: -1px;
    background: #000;
    color: #fff;
}
.form-control {
    -webkit-appearance: none;
    -moz-appearance: none;
    appearance: none;
    background-clip: padding-box;
    background-color: #fff;
    border: 1px solid #fff;
    border-radius: 0.25rem;
    color: #fff;
    display: block;
    font-size: 1rem;
    font-weight: 400;
    line-height: 1.5;
    padding: 0.375rem 0.75rem;
    transition: border-color .15s ease-in-out,box-shadow .15s ease-in-out;
    width: 100%;
}
.form-control:focus {
    background-color: #fff;
    border-color: #fff;
    box-shadow: 0px 0px 10px #fff;
    color: #212529;
    outline: 0;
}
.multiselect-search {
    -webkit-appearance: none;
    -moz-appearance: none;
    appearance: none;
    background: #000;
    border: 0;
    border-radius: var(--ms-radius,4px);
    bottom: 0;
    box-sizing: border-box;
    color: #fff;
    font-family: inherit;
    font-size: inherit;
    left: 0;
    outline: none;
    padding-left: var(--ms-px,.875rem);
    position: absolute;
    right: 0;
    top: 0;
    width: 100%;
}
.multiselect-option {
    align-items: center;
    box-sizing: border-box;
    cursor: pointer;
    background: #000;
    display: flex;
    font-size: var(--ms-option-font-size,1rem);
    justify-content: flex-start;
    line-height: var(--ms-option-line-height,1.375);
    padding: var(--ms-option-py,.5rem) var(--ms-option-px,.75rem);
    text-align: left;
    text-decoration: none;
}
.multiselect .multiselect-option.is-pointed {
    background-color: #222;
    color: #fff;
}
.multiselect .multiselect-option.is-pointed.is-selected {
    background-color: #666;
    color: #fff;
}
.multiselect .multiselect-option.is-selected {
    background-color: #444;
    color: #fff;
}
.autoComplete_wrapper>input {
    background-color: #000;
    background-origin: border-box;
    background-position: left 1.05rem top 0.8rem;
    background-repeat: no-repeat;
    background-size: 1.4rem;
    border: 1px solid #fff;
    border-radius: 4px;
    box-sizing: border-box;
    color: #f90;
    font-size: 1rem;
    height: 2.45rem;
    margin: 0;
    outline: none;
    padding: 0 1rem;
    text-overflow: ellipsis;
    transition: all .4s ease;
    width: 100%;
}
.autoComplete_wrapper>input:focus {
    border: 1px solid #f90;
    color: #f90;
}
.autoComplete_wrapper>ul>li {
    background-color: #000;
    color: #fff;
    font-size: 1rem;
    margin: 0;
    overflow: hidden;
    padding: 0.3rem 0.5rem;
    text-align: left;
    text-overflow: ellipsis;
    transition: all .2s ease;
    white-space: nowrap;
}
.autoComplete_wrapper>ul>li:hover, .autoComplete_wrapper>ul>li[aria-selected=true] {
    background-color: #222;
}
.autoComplete_wrapper>ul>li mark {
    background-color: transparent;
    color: #f90;
    font-weight: 700;
}
.form-control {
    -webkit-appearance: none;
    -moz-appearance: none;
    appearance: none;
    background-clip: padding-box;
    background-color: #000;
    border: 1px solid #fff;
    border-radius: 0.25rem;
    color: #fff;
    display: block;
    font-size: 1rem;
    font-weight: 400;
    line-height: 1.5;
    padding: 0.375rem 0.75rem;
    transition: border-color .15s ease-in-out,box-shadow .15s ease-in-out;
    width: 100%;
}
.form-control:focus {
    background-color: #000;
    border-color: #fff;
    box-shadow: 0px 0px 10px #fff;
    color: #fff;
    outline: 0;
}
.dp__input {
    background-color: #111;
    border: 1px solid #fff;
    border-radius: 5px;
    box-sizing: border-box;
    color: #fff;
    font-family: -apple-system,blinkmacsystemfont,Segoe UI,roboto,oxygen,ubuntu,cantarell,Open Sans,Helvetica Neue,sans-serif;
    font-size: 1rem;
    line-height: 1.5rem;
    outline: none;
    padding: 6px 30px;
    transition: border-color .2s cubic-bezier(.645,.045,.355,1);
    width: 100%;
}
#loading-overlay[data-v-173ec149] {
    height: 100%;
    width: 100%;
}
#loading-overlay-heading[data-v-173ec149] {
    font-size: 2rem;
    font-weight: 500;
    letter-spacing: 1px;
    padding: 1rem;
    text-align: center;
    text-transform: uppercase;
    background: linear-gradient(90deg, #ffffff, #444444, #ffffff);
    background-size: 150% 150%;
    background-clip: text;
    -webkit-background-clip: text;
    color: transparent !important;
    filter: saturate(0);
    animation: textGradient 5s linear infinite;
    text-shadow: none !important;
}
#loading-overlay[data-v-173ec149] .spinner[data-v-173ec149] {
    border-width: 0.375rem;
    color: #fff;
    height: 4rem;
    width: 4rem;
}
#loading-overlay-container[data-v-173ec149] {
    align-items: center;
    display: flex;
    flex-direction: column;
    background-color: #000;
    height: 100%;
    justify-content: center;
    width: 100%;
}
#placeholder-pic[data-v-9c1e68e2] {
    display: block;
    opacity: 0;
    margin: auto;
    max-height: 20rem;
}
#content-placeholder[data-v-9c1e68e2] {
    background-image: url(https://snipboard.io/8kBudo.jpg);
    background-repeat: no-repeat;
    background-size: contain;
    background-position: center;
}
.bi-question-circle-fill::before {
    color: #666;
    text-shadow: 0px 0px 10px #000;
}
.modal-header {
    background: #000;
    border: 1px solid #fff;
    align-items: center;
    border-bottom: 1px solid #dee2e6;
    border-top-left-radius: calc(0.3rem - 1px);
    border-top-right-radius: calc(0.3rem - 1px);
    display: flex;
    flex-shrink: 0;
    justify-content: space-between;
    padding: 1rem;
}
.modal-body {
    background: #000;
    border: 1px solid #fff;
    color: #fff;
    flex: 1 1 auto;
    padding: 1rem;
    position: relative;
}
.fade {
    transition: opacity .15s linear;
    backdrop-filter: blur(5px);
}
.show-filter-btn[data-v-2d76ca92] {
    background: #328;
    border-bottom-left-radius: 10px;
    border: 0;
    height: 44px;
    opacity: 1;
    position: fixed;
    right: 0;
    top: 0;
    z-index: 1059;
}
body::-webkit-scrollbar {
  width: 16px;
}
body::-webkit-scrollbar-track {
  background: #222;
  border-left: 1px solid #fff;
}
body::-webkit-scrollbar-thumb {
  background-color: #fff;
  border-radius: 20px;
  border: 1px solid #222;
}
.multiselect-dropdown::-webkit-scrollbar {
  width: 12px;
}
.multiselect-dropdown::-webkit-scrollbar-track {
  background: #222;
  border-left: 1px solid #fff;
}
.multiselect-dropdown::-webkit-scrollbar-thumb {
  background-color: #fff;
  border-radius: 20px;
  border: 1px solid #222;
}
.autoComplete_wrapper>ul::-webkit-scrollbar {
  width: 12px;
}
.autoComplete_wrapper>ul::-webkit-scrollbar-track {
  background: #222;
  border-left: 1px solid #fff;
}
.autoComplete_wrapper>ul::-webkit-scrollbar-thumb {
  background-color: #fff;
  border-radius: 20px;
  border: 1px solid #222;
}
input#playerNameInput::placeholder {
  color: #a60;
}
.multiselect.is-open.is-active {
box-shadow: 0px 0px 10px #fff;
}
.autoComplete_wrapper>input:hover {
    color: #a60;
    transition: all .3s ease;
  }
.dp__input_icons {
    color: #0ff;
  }
.dp__month_year_row {
    background: #111;
    color: #fff;
  }
.dp__inner_nav svg {
    color: #0ff;
  }
.dp__calendar_header, .dp__calendar_wrap {
    background: #111;
  }
.dp__calendar_header_item {
    color: #fff;
  }
.dp__cell_inner {
    color: #fff;
  }
.dp__active_date, .dp__range_end, .dp__range_start {
    background: #666;
    color: #fff;
  }
.dp__date_hover:hover, .dp__date_hover_end:hover, .dp__date_hover_start:hover {
    background: #444;
    color: #fff;
		transition: all .5s ease-in-out;
  }
.dp__cell_disabled, .dp__cell_offset {
    color: #444;
  }
.dp__button {
    background: #222;
}
.dp__button_bottom {
    background: #222;
    color: #0ff;
  }
.dp__button:hover {
    background: #328;
    color: #077;
    transition: all .5s ease-in-out;
  }
.dp__month_year_select:hover {
    background: #222;
    color: #fff;
    transition: all .5s ease-in-out;
  }
.dp__overlay_cell, .dp__overlay_cell_active {
    background: #444;
  }
.dp__overlay_container {
    background: #000;
  }
.dp__overlay_cell_disabled, .dp__overlay_cell_disabled:hover {
    background: #111;
    color: #444;
  }
.dp__time_display {
    color: #aaa;
  }
.dp__time_display:hover {
    background: #111;
    color: #fff;
    transition: all .3s ease-in-out;
  }
.dp__inc_dec_button:hover {
    background: #222;
    color: #0ff;
    transition: all .3s ease-in-out;
  }
.dp__cell_in_between, .dp__overlay_cell:hover {
    background: #666;
    color: #fff;
    transition: all .3s ease-in-out;
  }
.dp__overlay_cell_pad {
    padding: 10px 0;
    color: #999;
  }
.dp__inner_nav:hover {
    background: #328;
    color: #fff;
    transition: all .3s ease-in-out;
  }
.dp__today {
    border: 1px solid #fff;
  }
.btn-outline-danger:hover {
    background-color: #900;
    border-color: #fff;
    color: #fff;
    transition: all .2s ease-in-out;
  }
.btn-primary:hover, .submit-btn:hover {
    background-color: #033;
    border-color: #fff;
    color: #fff;
    transition: all .2s ease-in-out;
  }
#next-page-btn[data-v-2d76ca92], .btn-secondary, .close-btn, .icon-btn, .show-filter-btn {
    background-color: #222;
    border-color: #fff;
    color: #fff;
}
#next-page-btn[data-v-2d76ca92]:hover, .btn-secondary:hover, .close-btn:hover, .icon-btn:hover, .show-filter-btn:hover {
    background-color: #444;
    border-color: #aaa;
    color: #fff;
}
#prev-page-btn[data-v-2d76ca92], .btn-outline-secondary {
    border-color: #fff;
    color: #fff;
}
#prev-page-btn[data-v-2d76ca92]:hover, .btn-outline-secondary:hover {
    background-color: #444;
    border-color: #aaa;
    color: #fff;
}
.lookup-comment[data-v-2d76ca92] {
    color: #fff;
    font-size: .9rem;
    font-weight: 400;
}
.accessible-servers .page-intro {
    color: #0ff;
    font-size: 1.15rem;
    font-weight: 300;
    text-align: center;
    text-shadow: 0px 0px 10px #fff;
}
a {
    color: #faf;
    text-decoration: none;
}
.dropdown-item:focus, .dropdown-item:hover {
    background-color: #444;
    color: #1e2125;
}
.dropdown-menu {
    background-color: #222;
}
.accessible-servers .game-logs-link {
    font-size: 1.5rem;
    text-shadow: 0px 0px 10px #f0f;
}
a:hover {
    color: #f0f;
}
#placeholder-msg[data-v-9c1e68e2] {
    color: #0aa;
    font-size: 1.25rem;
    padding: 1rem;
    text-align: center;
}
strong {
    color: #0ff;
}
.modal [type=button], .modal [type=submit] {
    margin-left: 0.5rem;
    filter: invert(1);
}
.lookup-symbol[data-v-2d76ca92] {
    color: #fff;
    font-size: 1.125rem;
    font-weight: 500;
    width: 1.75rem;
    text-shadow: 0px 0px 10px #fff;
}
.lookup-comment[data-v-2d76ca92] {
    color: #fff;
    font-size: .9rem;
    font-weight: 400;
    text-shadow: 0px 0px 10px #fff;
}
.dropdown-menu show {
    position: absolute;
    inset: 0px auto auto 0px;
    margin: 0px;
    transform: translate(-1px, 40px);
    background: #328;
}
.alert-danger, .alert-modal.failure .modal-content, .default-error-page .exception {
    background-color: #000;
    border: 5px solid #f11;
    border-radius: 50px;
    color: #fff;
}
    `;
        document.head.appendChild(bodyStyle);};

    function applyColorPickerStyle() {
        const colorPickerStyle = document.createElement('style');
        colorPickerStyle.textContent = `
        input[type="color"]::-webkit-color-swatch-wrapper {
  padding: 2px;
}

input[type="color"]::-webkit-color-swatch {
  border: none;
  border-radius: 20px;
}
input[type="color"] {
  -webkit-appearance: none;
  border: 2px solid #fff;
  background: #000;
  border-radius: 20px;
  overflow: hidden;
  outline: none;
  cursor: pointer;
  box-shadow: 0px 0px 5px #fff;
}`;
        document.head.appendChild(colorPickerStyle);
    }

    function replaceSpinnerImage() {
        const spinnerElement = document.querySelector('div.spinner.spinner-border[data-v-173ec149=""]');
        if (spinnerElement) {
            const gifImageUrl = 'https://rb.ru/media/upload_tmp/2018/d1.gif';
            const gifImage = document.createElement('img');
            gifImage.src = gifImageUrl;
            gifImage.style.width = '160px';
            gifImage.style.height = '120px';
            gifImage.style.filter = 'saturate(0)';
            spinnerElement.replaceWith(gifImage);
        }
    }

    function addListener() {
        const inputNameElement = document.querySelector('#playerNameInput');
        const transactionData = document.querySelector('#log-filter-form__transaction-desc');
        inputNameElement.addEventListener('keydown', function(event) {
            if (event.keyCode === 13) {
                const otherElement = document.querySelector('.btn.btn-primary');
                otherElement.click();
            }
        });
        transactionData.addEventListener('keydown', function(event) {
            if (event.keyCode === 13) {
                event.preventDefault();
                const otherElement = document.querySelector('.btn.btn-primary');
                otherElement.click();
            }
        });
    }

    function setPageTitle() {
        const titleElement = document.querySelector('div.container-fluid span.badge.bg-success');
        document.title += ' - ' + titleElement.textContent;
    }

    function scriptInit() {
        applySwitchStyle();

        applyBodyStyle();

        applyColorPickerStyle();

        replaceTableHeading();

        replaceSpinnerImage();

        addListener()

        applySavedColors();

        setPageTitle();
    }
})();