Classic Reddit++

Tools that restore and introduce new functionalities in the old.reddit interface (Views, vote tallies, etc.)

// ==UserScript==
// @name         Classic Reddit++
// @namespace    https://github.com/SlippingGitty
// @version      1.6.3
// @description  Tools that restore and introduce new functionalities in the old.reddit interface (Views, vote tallies, etc.)
// @author       SlippingGitty
// @match        http://old.reddit.com/notifications
// @match        https://old.reddit.com/notifications
// @match        https://sh.reddit.com/notifications*
// @match        *://*.reddit.com/*
// @icon         https://files.catbox.moe/6e7371.png
// @grant        GM_addStyle
// @grant        GM_setValue
// @grant        GM_getValue
// @grant        GM_xmlhttpRequest
// @grant        GM_registerMenuCommand
// @license      WTFPL
// ==/UserScript==

(function () {
    'use strict';

    //
    // Insures sh.reddit is loaded for notifications, adds old.reddit frontpage button on logo
    //
    if (window.location.href.includes("old.reddit.com/notifications")) {
        window.location.href = window.location.href.replace("old.reddit.com/notifications", "sh.reddit.com/notifications");
    }

    if (window.location.href.includes("sh.reddit.com/notifications")) {
        window.addEventListener('load', function () {
            const container = document.createElement('div');
            container.style.display = 'flex';
            container.style.alignItems = 'center';
            container.style.position = 'fixed';
            container.style.top = '10px';
            container.style.left = '10px';
            container.style.zIndex = '9999';
            container.style.backgroundColor = 'rgba(255, 255, 255, 0.9)';
            container.style.padding = '5px 10px';
            container.style.borderRadius = '4px';
            container.style.boxShadow = '0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24)';

            const logo = document.createElement('div');
            logo.innerHTML = `
                    <svg width="24" height="24" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg">
                        <g>
                            <circle fill="#FF4500" cx="10" cy="10" r="10"/>
                            <path fill="#FFF" d="M16.67,10A1.46,1.46,0,0,0,14.2,9a7.12,7.12,0,0,0-3.85-1.23L11,4.65,13.14,5.1a1,1,0,1,0,.13-0.61L10.82,4a0.31,0.31,0,0,0-.37.24L9.71,7.71a7.14,7.14,0,0,0-3.9,1.23A1.46,1.46,0,1,0,4.2,11.33a2.87,2.87,0,0,0,0,.44c0,2.24,2.61,4.06,5.83,4.06s5.83-1.82,5.83-4.06a2.87,2.87,0,0,0,0-.44A1.46,1.46,0,0,0,16.67,10Zm-10,1a1,1,0,1,1,1,1A1,1,0,0,1,6.67,11Zm5.81,2.75a3.84,3.84,0,0,1-2.47.77,3.84,3.84,0,0,1-2.47-.77,0.27,0.27,0,0,1,.38-0.38A3.27,3.27,0,0,0,10,14a3.28,3.28,0,0,0,2.09-.61A0.27,0.27,0,1,1,12.48,13.79Zm-0.18-1.71a1,1,0,1,1,1-1A1,1,0,0,1,12.29,12.08Z"/>
                        </g>
                    </svg>
                `;
            logo.style.marginRight = '8px';

            const backButton = document.createElement('a');
            backButton.innerText = 'Back to Old Reddit';
            backButton.href = window.location.href.replace("sh.reddit.com/notifications", "old.reddit.com");
            backButton.title = 'Return to Old Reddit';

            backButton.style.display = 'inline-block';
            backButton.style.padding = '5px 10px';
            backButton.style.borderRadius = '4px';
            backButton.style.backgroundColor = '#ff4500';
            backButton.style.color = 'white';
            backButton.style.fontWeight = 'bold';
            backButton.style.textDecoration = 'none';
            backButton.style.fontSize = '12px';

            backButton.onmouseover = function () {
                this.style.backgroundColor = '#cc3700';
            };
            backButton.onmouseout = function () {
                this.style.backgroundColor = '#ff4500';
            };

            container.appendChild(logo);
            container.appendChild(backButton);
            document.body.appendChild(container);

            document.addEventListener('keydown', function (e) {
                if (e.key === 'Escape') {
                    window.location.href = backButton.href;
                }
            });
        });
    }

    //
    // Classic Reddit++
    //
    ///// Trending Subs Recreation
    const config = {
        commentsRange: [20, 50],
        lastTrendingUpdateKey: 'lastTrendingUpdate',
        updateInterval: 24 * 60 * 60 * 1000,
        subredditsPool: [
            "/r/AskReddit", "/r/funny", "/r/pics", "/r/gaming", "/r/science", "/r/worldnews",
            "/r/movies", "/r/videos", "/r/aww", "/r/Music", "/r/todayilearned", "/r/memes",
            "/r/sports", "/r/technology", "/r/news", "/r/anime", "/r/travel", "/r/food",
            "/r/space", "/r/interestingasfuck", "/r/worldpolitics", "/r/nfl", "/r/art",
            "/r/hobbies", "/r/personalfinance", "/r/books", "/r/history", "/r/photography",
            "/r/gadgets", "/r/television", "/r/wtf", "/r/awfuleverything", "/r/facepalm",
            "/r/mildlyinteresting", "/r/unexpected", "/r/dankmemes", "/r/publicfreakout",
            "/r/natureismetal", "/r/rarepuppers", "/r/oldschoolcool", "/r/blessedimages",
            "/r/madlads", "/r/animalsbeingjerks", "/r/whatcouldgowrong", "/r/instantkarma",
            "/r/therewasanattempt", "/r/wholesomememes", "/r/trashy", "/r/cringetopia",
            "/r/insaneparents", "/r/quityourbullshit", "/r/choosingbeggars", "/r/entitledparents",
            "/r/amitheasshole", "/r/relationship_advice", "/r/legaladvice", "/r/tifu",
            "/r/raisedbynarcissists", "/r/offmychest", "/r/venting", "/r/selfimprovement",
            "/r/getmotivated", "/r/loseit", "/r/stopdrinking", "/r/leaves", "/r/meditation",
            "/r/skincareaddiction", "/r/makeupaddiction", "/r/haircareScience", "/r/malefashionadvice",
            "/r/femalefashionadvice", "/r/streetwear", "/r/sneakers", "/r/watches", "/r/cars",
            "/r/buildapc", "/r/pcmasterrace", "/r/android", "/r/apple", "/r/programming",
            "/r/webdev", "/r/javascript", "/r/python", "/r/gamingnews", "/r/indiegaming",
            "/r/boardgames", "/r/tabletopgames", "/r/rpg", "/r/dndnext", "/r/pathfinder_rpg",
            "/r/magicTCG", "/r/yugioh", "/r/pokemontcg", "/r/hearthstone", "/r/gwent",
            "/r/competitivegaming", "/r/esports", "/r/gamernews", "/r/anime", "/r/manga", "/r/cosplay",
            "/r/kpop", "/r/jpop", "/r/cpop", "/r/popheads", "/r/indiepop", "/r/hiphopheads",
            "/r/rnb", "/r/electronicmusic", "/r/edm", "/r/techno", "/r/housemusic", "/r/trance",
            "/r/dubstep", "/r/jazz", "/r/classicalmusic", "/r/blues", "/r/folk", "/r/countrymusic",
            "/r/rock", "/r/metal", "/r/punk", "/r/alternativemusic", "/r/indierock",
            "/r/musicals", "/r/soundtracks", "/r/listentothis", "/r/newmusic", "/r/food", "/r/foodporn",
            "/r/recipes", "/r/baking", "/r/cooking", "/r/cocktails", "/r/coffee", "/r/tea",
            "/r/vegan", "/r/vegetarian", "/r/ketorecipes", "/r/paleo", "/r/glutenfree",
            "/r/healthyeating", "/r/nutrition", "/r/fitness", "/r/loseit", "/r/weightlifting",
            "/r/running", "/r/yoga", "/r/meditation", "/r/mindfulness", "/r/journaling",
            "/r/productivity", "/r/getdisciplined", "/r/selfimprovement", "/r/skincareaddiction",
            "/r/makeupaddiction", "/r/haircareScience", "/r/malefashionadvice",
            "/r/femalefashionadvice", "/r/streetwear", "/r/sneakers", "/r/watches", "/r/cars",
            "/r/motorcycles", "/r/aviation", "/r/space", "/r/astronomy", "/r/physics",
            "/r/chemistry", "/r/biology", "/r/medicine", "/r/science", "/r/technology",
            "/r/futurology", "/r/singularity", "/r/longevity", "/r/energy", "/r/renewableenergy",
            "/r/environment", "/r/climatechange", "/r/nature", "/r/earthporn", "/r/wildlifephotography",
            "/r/aww", "/r/animalsbeingbros", "/r/rarepuppers", "/r/corgi", "/r/goldenretrievers",
            "/r/cats", "/r/funnyanimals", "/r/mademesmile", "/r/wholesomememes", "/r/humansbeingbros",
            "/r/oldschoolcool", "/r/thewaywewere", "/r/nostalgia", "/r/retrophotos", "/r/vintagestyle",
            "/r/oldschoolriders", "/r/classiccars", "/r/classicfilms", "/r/classicrock",
            "/r/oldmovies", "/r/90s", "/r/80s", "/r/70s", "/r/60s", "/r/50s", "/r/40s", "/r/30s",
            "/r/20s", "/r/10s", "/r/00s", "/r/y2k", "/r/millennials", "/r/genz", "/r/genx",
            "/r/babyboomers", "/r/thegreatgeneration", "/r/silentgeneration", "/r/lostgeneration",
        ],
        enableTagline: 'enableTagline',
        enableRenameHome: 'enableRenameHome',
        enableFavicon: 'enableFavicon',
        enableTrending: 'enableTrending',
        viewCounterEnabled: 'viewCounterEnabled',
        voteEstimatorEnabled: 'voteEstimatorEnabled',
        hideMultibar: 'hideMultibar',
        hideBell: 'hideBell',
        hideChat: 'hideChat',
        addUserPrefix: 'addUserPrefix',
        hideArchivedArrows: 'hideArchivedArrows',
        oldCommentFont: 'oldCommentFont',
        fullUserScores: 'fullUserScores',
        oldRedditIcons: 'oldRedditIcons',
        expandoButtons: 'expandoButtons',
        classicRESNight: 'classicRESNight',
        enableSubmitUnderlay: 'enableSubmitUnderlay',
        classicResBorderHighlight: 'classicResBorderHighlight',
        classicFlair: 'classicFlair'
    };

    const defaultSettings = {
        [config.enableTagline]: false,
        [config.enableRenameHome]: true,
        [config.enableFavicon]: true,
        [config.enableTrending]: true,
        [config.viewCounterEnabled]: true,
        [config.voteEstimatorEnabled]: true,
        [config.hideMultibar]: false,
        [config.hideBell]: true,
        [config.hideChat]: true,
        [config.addUserPrefix]: false,
        [config.hideArchivedArrows]: false,
        [config.oldCommentFont]: false,
        [config.fullUserScores]: true,
        [config.oldRedditIcons]: true,
        [config.expandoButtons]: false,
        [config.classicRESNight]: false,
        [config.enableSubmitUnderlay]: false,
        [config.classicResBorderHighlight]: true,
        [config.classicFlair]: false
    };

    for (const key in defaultSettings) {
        if (GM_getValue(key) === undefined) {
            GM_setValue(key, defaultSettings[key]);
        }
    }


    // STATIC CSS (ALWAYS LOADS REGARDLESS OF TOGGLES)
    GM_addStyle(`

    /* Makes the post info it's classic grey */
     .linkinfo {
        border: 1px solid rgba(12, 10, 10, 0.41);
        background-color: rgba(134, 130, 130, 0.24);
    }


    /* Refered to as "RES" because I originally wanted to see if I could put the toggles in RES Settings */
#res-dashboard-container {
    display: none;
    position: fixed;
    top: 60px;
    right: 20px;
    width: 600px;
    max-height: 500px;
    background-color: #ffffff;
    border: 1px solid #5f99cf; /* Classic Reddit blue border */
    border-radius: 3px;
    z-index: 1001;
    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
    font-family: verdana, arial, helvetica, sans-serif; /* Classic Reddit font stack */
    font-size: 12px;
    opacity: 1;
    margin: 0;
    padding: 0;
    overflow-y: auto;
}

/* Indents Trending Tab */
div.entry:nth-child(1) {
    margin-left: 75px;
}

/* Night mode styling */
.res-nightmode #res-dashboard-container {
    background-color: #262626; /* Classic RES night mode color */
    border-color: #4d4d4d;
    color: #ddd;
}

#res-dashboard-header {
    background-color: #cee3f8; /* Classic Reddit header blue */
    padding: 5px 8px;
    border-bottom: 1px solid #5f99cf;
    display: flex;
    justify-content: space-between;
    align-items: center;
    height: 18px; /* Fixed height like old Reddit */
}

/* Night mode header */
.res-nightmode #res-dashboard-header {
    background-color: #2a2a2a;
    border-bottom-color: #4d4d4d;
}

#res-dashboard-title {
    font-size: 13px;
    font-weight: bold;
    color: #336699; /* Classic Reddit blue */
    margin: 0;
    text-transform: none;
    line-height: 18px;
}

/* Night mode title */
.res-nightmode #res-dashboard-title {
    color: #8cb3d9; /* Lighter blue for night mode */
}

#res-dashboard-close {
    cursor: pointer;
    font-size: 12px;
    color: #369;
    font-weight: bold;
    margin-right: 5px;
}

#res-dashboard-close:hover {
    color: #ff4500; /* Classic Reddit orangered */
    text-decoration: underline; /* Old Reddit often used underlines on hover */
}

/* Night mode close button */
.res-nightmode #res-dashboard-close {
    color: #8cb3d9;
}

.res-nightmode #res-dashboard-close:hover {
    color: #ff7247; /* Lighter orangered for night mode */
}

#res-dashboard-content {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
    gap: 7px;
    padding: 8px;
    background-color: #f6f7f8; /* Very light gray like classic Reddit content areas */
    overflow: visible;
}

/* Night mode content area */
.res-nightmode #res-dashboard-content {
    background-color: #262626;
    overflow: visible;
}

.res-setting-section {
    background-color: #ffffff;
    border: 1px solid #c3c3c3; /* Classic light gray border */
    border-radius: 0px; /* Old Reddit had square corners */
    padding: 8px;
    margin: 0;
    position: relative;
}

/* Night mode setting sections */
.res-nightmode .res-setting-section {
    background-color: #1a1a1a;
    border-color: #4d4d4d;
}

.res-setting-section:hover {
    border-color: #a5a5a5; /* Subtle hover effect common in old interfaces */
}

/* Night mode hover effect */
.res-nightmode .res-setting-section:hover {
    border-color: #666;
}

.res-setting-section h3 {
    font-size: 12px;
    margin: 0 0 5px 0;
    padding: 0;
    color: #222222; /* Dark gray, almost black */
    font-weight: bold;
}

/* Night mode headings */
.res-nightmode .res-setting-section h3 {
    color: #ddd;
}

/* Native tooltip styling */
.res-setting-section label {
    font-size: 11px;
    color: #222;
    cursor: pointer;
}

.res-setting-section label[title] {
    text-decoration: underline dotted #777; /* Indicate tooltip on hover */
}

/* Night mode labels */
.res-nightmode .res-setting-section label {
    color: #ddd;
}

.res-nightmode .res-setting-section label[title] {
    text-decoration: underline dotted #aaa; /* Indicate tooltip on hover for night mode */
}

/* Classic toggle switch styling */
.res-toggle-container {
    position: relative;
    display: flex;
    align-items: center;
    gap: 6px;
    margin-top: 5px;
}

.res-toggle-switch {
    position: relative;
    display: inline-block;
    width: 32px;
    height: 14px;
}

.res-toggle-switch input {
    opacity: 0;
    width: 0;
    height: 0;
}

.res-slider {
    position: absolute;
    cursor: pointer;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    background-color: #c3c3c3;
    transition: .2s;
    border-radius: 7px;
}

/* Night mode slider */
.res-nightmode .res-slider {
    background-color: #444;
}

.res-slider:before {
    position: absolute;
    content: "";
    height: 10px;
    width: 10px;
    left: 2px;
    bottom: 2px;
    background-color: white;
    transition: .2s;
    border-radius: 50%;
}

input:checked + .res-slider {
    background-color: #5f99cf; /* Classic Reddit blue */
}

input:focus + .res-slider {
    box-shadow: 0 0 1px #5f99cf;
}

input:checked + .res-slider:before {
    transform: translateX(18px);
}

/* Night mode checked slider */
.res-nightmode input:checked + .res-slider {
    background-color: #4c7eac; /* Darker blue for night mode */
}

/* Classic Reddit button with gradient */
#res-settings-toggle {
    position: fixed;
    top: 45px;
    right: 20px;
    opacity: 0;
    z-index: 1000;
    background: linear-gradient(to bottom, #75abff 0%, #5f99cf 100%); /* Classic button gradient */
    border: 1px solid #369;
    color: #fff;
    padding: 4px 8px;
    border-radius: 3px;
    cursor: pointer;
    font-size: 11px;
    font-weight: bold;
    text-transform: capitalize;
}

#res-settings-toggle:hover {
    background: linear-gradient(to bottom, #5f99cf 0%, #3a80c1 100%);
    opacity: 1;
    transition: .1s;
}

/* Night mode toggle button */
.res-nightmode #res-settings-toggle {
    background: linear-gradient(to bottom, #4c7eac 0%, #36648b 100%); /* Darker gradient for night mode */
    border-color: #2c5574;
}

.res-nightmode #res-settings-toggle:hover {
    background: linear-gradient(to bottom, #36648b 0%, #2c5574 100%);
}

#res-dashboard-logo {
    max-height: 14px;
    margin-right: 6px;
}

/* Additional elements to match old Reddit style */


/* Old Reddit-style scrollbars */
#res-dashboard-container::-webkit-scrollbar {
    width: 12px;
    background-color: #f5f5f5;
}

#res-dashboard-container::-webkit-scrollbar-thumb {
    background-color: #c3c3c3;
    border: 2px solid #f5f5f5;
}

#res-dashboard-container::-webkit-scrollbar-track {
    background-color: #f5f5f5;
}

/* Night mode scrollbars */
.res-nightmode #res-dashboard-container::-webkit-scrollbar {
    background-color: #1a1a1a;
}

.res-nightmode #res-dashboard-container::-webkit-scrollbar-thumb {
    background-color: #444;
    border: 2px solid #1a1a1a;
}

.res-nightmode #res-dashboard-container::-webkit-scrollbar-track {
    background-color: #1a1a1a;
}

/* Classic Reddit table styles for structured content if needed */
.res-table {
    border-collapse: collapse;
    width: 100%;
    margin: 5px 0;
    font-size: 11px;
}

.res-table th {
    background-color: #efefef;
    border: 1px solid #c3c3c3;
    padding: 3px 5px;
    text-align: left;
    font-weight: bold;
}

.res-table td {
    border: 1px solid #c3c3c3;
    padding: 3px 5px;
}

.res-nightmode .res-table th {
    background-color: #2a2a2a;
    border-color: #4d4d4d;
}

.res-nightmode .res-table td {
    border-color: #4d4d4d;
}
`);

    let dashboardContainer = document.createElement('div');
    dashboardContainer.id = 'res-dashboard-container';

    let dashboardHeader = document.createElement('div');
    dashboardHeader.id = 'res-dashboard-header';

    let dashboardTitle = document.createElement('h2');
    dashboardTitle.id = 'res-dashboard-title';
    dashboardTitle.textContent = 'Classic Reddit++ Settings';

    let logoImg = document.createElement('img');
    logoImg.id = 'res-dashboard-logo';
    logoImg.src = 'https://files.catbox.moe/6e7371.png';
    logoImg.alt = 'Classic Reddit++ Logo';

    dashboardHeader.appendChild(logoImg);
    dashboardHeader.appendChild(dashboardTitle);

    let closeButton = document.createElement('span');
    closeButton.id = 'res-dashboard-close';
    closeButton.textContent = 'x';
    closeButton.addEventListener('click', () => {
        dashboardContainer.style.display = 'none';
    });
    dashboardHeader.appendChild(closeButton);

    dashboardContainer.appendChild(dashboardHeader);

    let dashboardContent = document.createElement('div');
    dashboardContent.id = 'res-dashboard-content';
    dashboardContainer.appendChild(dashboardContent);

    document.body.appendChild(dashboardContainer);

    function createSettingElement(settingKey, description, updateFunction) {
        let section = document.createElement('div');
        section.classList.add('res-setting-section');

        let title = document.createElement('h3');
        title.textContent = {
            enableTagline: "Modify Title Tag",
            enableRenameHome: "Rename Home Shortcut",
            enableFavicon: "Restore Classic Favicon",
            enableTrending: "Simulate Trending Subreddits",
            viewCounterEnabled: "Display Post View Counts",
            voteEstimatorEnabled: "Estimate Post Votes",
            hideMultibar: "Hide Subreddit Multibar",
            hideBell: "Hide Notification Bell",
            hideChat: "Hide Reddit Chat",
            addUserPrefix: "Add Username Prefix",
            hideArchivedArrows: "Hide Archived Post Arrows",
            oldCommentFont: "Use Old Comment Font",
            fullUserScores: "Show Full User Scores",
            oldRedditIcons: "Restore Old Reddit Icons",
            expandoButtons: "Use Old Expando Buttons",
            classicRESNight: "Use Classic RES Night Mode",
            enableSubmitUnderlay: "Restore Submit Link Tagline",
            classicResBorderHighlight: "Enable Classic RES Border Highlight",
            classicFlair: "Remove Flair Colors"
        }[settingKey] || settingKey;
        section.appendChild(title);

        let desc = document.createElement('p');
        desc.textContent = description;
        section.appendChild(desc);

        let toggleContainer = document.createElement('div');
        toggleContainer.classList.add('res-toggle-container');

        let toggleLabel = document.createElement('label');
        toggleLabel.classList.add('res-toggle-switch');

        let toggleInput = document.createElement('input');
        toggleInput.type = 'checkbox';
        toggleInput.checked = GM_getValue(settingKey, defaultSettings[settingKey]);
        toggleInput.addEventListener('change', function () {
            GM_setValue(settingKey, this.checked);
            if (updateFunction) updateFunction(this.checked);
        });

        let toggleSlider = document.createElement('span');
        toggleSlider.classList.add('res-slider');

        toggleLabel.appendChild(toggleInput);
        toggleLabel.appendChild(toggleSlider);
        toggleContainer.appendChild(toggleLabel);

        section.appendChild(toggleContainer);
        return section;
    }

    // Populate the dashboard
    const settingsArray = [
        { key: config.enableTagline, description: "Modifies the title tag to say 'reddit: the front page of the internet'", func: setTagline },
        { key: config.enableRenameHome, description: "Renames the 'home' shortcut to 'FRONT'. Please Disable subredditManager in RES for time being.", func: renameHomeButton },
        { key: config.enableFavicon, description: "Brings back the classic Favicon.", func: changeFavicon },
        { key: config.enableTrending, description: "Simulates a collection of 'trending' subreddits to the top of your front page.", func: addTrendingSubreddits },
        { key: config.viewCounterEnabled, description: "Displays view counts on posts.", func: initializeViewCounter },
        { key: config.voteEstimatorEnabled, description: "Estimates upvotes and downvotes on posts, and adds a counter to every post.", func: initializeVoteEstimator },
        { key: config.hideMultibar, description: "Hide the subreddit multibar.", func: toggleHideMultibar },
        { key: config.hideBell, description: "Hide the notification bell.", func: toggleHideBell },
        { key: config.hideChat, description: "Hide Reddit chat.", func: toggleHideChat },
        { key: config.addUserPrefix, description: "Add /u/ before usernames.", func: toggleAddUserPrefix },
        { key: config.hideArchivedArrows, description: "Hide arrows on archived posts.", func: toggleHideArchivedArrows },
        { key: config.oldCommentFont, description: "Use old comment font sizes.", func: toggleOldCommentFont },
        { key: config.fullUserScores, description: "Show full scores on posts.", func: toggleFullUserScores },
        { key: config.oldRedditIcons, description: "Use old Reddit icons.", func: toggleOldRedditIcons },
        { key: config.expandoButtons, description: "Use old expando buttons.", func: toggleExpandoButtons },
        { key: config.classicRESNight, description: "Use Classic RES Night Mode.", func: toggleClassicRESNight },
        { key: config.enableSubmitUnderlay, description: "Restore tagline under Submit Link", func: toggleSubmitUnderlay },
        { key: config.classicResBorderHighlight, description: "Enable Classic RES Border Highlight", func: toggleClassicResBorderHighlight },
        { key: config.classicFlair, description: "Removes colors from flairs on posts. RES support limited.", func: classicFlair }
    ];

    settingsArray.forEach(setting => {
        dashboardContent.appendChild(createSettingElement(setting.key, setting.description, setting.func));
    });


    let toggleButton = document.createElement('button');
    toggleButton.id = 'res-settings-toggle';
    toggleButton.textContent = 'CR++';
    toggleButton.addEventListener('click', () => {
        dashboardContainer.style.display = dashboardContainer.style.display === 'block' ? 'none' : 'block';
    });
    document.body.appendChild(toggleButton);

    const refreshButton = document.createElement('button');
    refreshButton.textContent = "Refresh Trending";
    refreshButton.style.fontSize = "10px";
    refreshButton.style.marginTop = "5px";
    refreshButton.addEventListener('click', forceUpdateTrending);
    dashboardHeader.appendChild(refreshButton);

    function setTagline(enabled) {
        if (enabled) {
            document.title = "reddit: the front page of the internet";
        } else {
            const defaultTitle = document.title.split(":")[0];
            document.title = defaultTitle;
        }
    }

    function renameHomeButton(enabled) {
        const homeLink = document.querySelector('ul.flat-list:nth-child(1) > li:nth-child(1) > a:nth-child(1)');
        if (homeLink) {
            homeLink.textContent = enabled ? 'front' : 'home';
            homeLink.title = enabled ? 'Go to front page' : 'go to your personal reddit frontpage';
        }
    }

    function changeFavicon(enabled) {
        let icon = [...document.querySelectorAll('link[rel~="icon"]')];
        icon.forEach(x => x.parentNode.removeChild(x));

        if (enabled) {
            let newfav = `https://b.thumbs.redditmedia.com/JeP1WF0kEiiH1gT8vOr_7kFAwIlHzRBHjLDZIkQP61Q.jpg`;
            let link = document.createElement('link');
            link.rel = 'icon';
            link.href = newfav;
            document.head.appendChild(link);
        } else {
            var link = document.createElement('link');
            link.rel = 'icon';
            link.href = '//www.redditstatic.com/favicon.ico';
            document.head.appendChild(link);
        }
    }

    function getRandomSubreddits() {
        const now = Date.now();
        const lastUpdate = GM_getValue(config.lastTrendingUpdateKey, 0);
        const storedSubreddits = GM_getValue('trendingSubreddits', null);

        if (now - lastUpdate > config.updateInterval || !storedSubreddits) {
            const shuffled = [...config.subredditsPool].sort(() => 0.5 - Math.random());
            const selected = shuffled.slice(0, 5);
            const commentCount = Math.floor(
                Math.random() * (config.commentsRange[1] - config.commentsRange[0] + 1) +
                config.commentsRange[0]
            );
            const trendingData = {
                subreddits: selected,
                commentCount: commentCount + " comments"
            };
            GM_setValue('trendingSubreddits', JSON.stringify(trendingData));
            GM_setValue(config.lastTrendingUpdateKey, now);
            return trendingData;
        }
        return JSON.parse(storedSubreddits);
    }

    function createTrendingSubredditsElement(trendingData) {
        const container = document.createElement('div');
        container.className = 'thing';
        container.style.margin = '0';
        container.style.padding = '0';
        container.style.marginBottom = '7px';
        const content = document.createElement('div');
        content.className = 'entry unvoted';
        const lineContainer = document.createElement('div');
        lineContainer.style.display = 'flex';
        lineContainer.style.flexWrap = 'wrap';
        lineContainer.style.alignItems = 'center';
        lineContainer.style.gap = '5px';
        const trendingIcon = document.createElement('span');
        trendingIcon.style.backgroundImage = "url(https://web.archive.org/web/20151231010236im_/https://www.redditstatic.com/sprite-reddit.akRjeb2JalM.png)";
        trendingIcon.style.backgroundPosition = "-50px -886px";
        trendingIcon.style.height = '14px';
        trendingIcon.style.width = '14px';
        trendingIcon.style.display = 'inline-block';
        lineContainer.appendChild(trendingIcon);
        const headerText = document.createElement('strong');
        headerText.textContent = 'trending subreddits';
        headerText.style.color = '#222';
        headerText.style.marginRight = '10px';
        lineContainer.appendChild(headerText);
        trendingData.subreddits.forEach((subreddit) => {
            const link = document.createElement('a');
            link.href = subreddit;
            link.textContent = subreddit;
            link.style.textDecoration = 'none';
            link.style.color = '#0079d3';
            lineContainer.appendChild(link);
        });
        const commentsLink = document.createElement('a');
        commentsLink.href = '/r/trendingsubreddits';
        commentsLink.innerHTML = `<b>${trendingData.commentCount}</b>`;
        commentsLink.style.color = '#888';
        commentsLink.style.textDecoration = 'none';
        commentsLink.style.fontSize = '11px';
        commentsLink.style.marginLeft = '10px';
        lineContainer.appendChild(commentsLink);
        content.appendChild(lineContainer);
        container.appendChild(content);

        if (document.body.classList.contains('res-nightmode')) {
            headerText.style.color = '#A9A9A9';
            const links = lineContainer.querySelectorAll('a');
            links.forEach(link => {
                link.style.color = '#89b8e5';
            });
            commentsLink.style.color = '#b0b0b0';
        }

        return container;
    }

    function addTrendingSubreddits(enabled) {
        const isFrontPage = window.location.pathname === '/' || window.location.pathname === '/index.html';
        if (enabled && isFrontPage && (window.location.hostname === 'old.reddit.com' || window.location.hostname === 'www.reddit.com')) {
            const siteTable = document.getElementById('siteTable');
            if (!siteTable) {
                return;
            }
            const trendingData = getRandomSubreddits();
            const trendingElement = createTrendingSubredditsElement(trendingData);
            if (siteTable.firstChild) {
                siteTable.insertBefore(trendingElement, siteTable.firstChild);
            } else {
                siteTable.appendChild(trendingElement);
            }

        } else {
            const trendingElement = document.querySelector('.thing');
            if (trendingElement) {
                trendingElement.remove();
            }
        }
    }

    function forceUpdateTrending() {
        GM_setValue(config.lastTrendingUpdateKey, 0);
        location.reload();
    }

    function addDebugControls() {
        const debugBtn = document.createElement('button');
        debugBtn.textContent = "Update Trending Subreddits";
        debugBtn.style.position = 'fixed';
        debugBtn.style.top = '5px';
        debugBtn.style.right = '5px';
        debugBtn.style.zIndex = '9999';
        debugBtn.style.fontSize = '10px';
        debugBtn.style.opacity = '0.7';
        debugBtn.onclick = forceUpdateTrending;
        document.body.appendChild(debugBtn);
    }

    function addCommas(number) {
        return number.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
    }

    function httpGet(url) {
        return new Promise((resolve, reject) => {
            GM_xmlhttpRequest({
                method: "GET",
                url: url,
                onload: function (response) {
                    if (response.status >= 200 && response.status < 300) {
                        resolve(response.responseText);
                    } else {
                        reject(new Error(`HTTP error! status: ${response.status}`));
                    }
                }, onerror: function () {
                    reject(new Error("Network error occurred"));
                },
            });
        });
    }

    function getPostId(element) {
        if (element) {
            if (element.dataset.fullname) {
                return element.dataset.fullname.replace('t3_', '');
            }

            const idClass = Array.from(element.classList).find(c => c.startsWith('id-t3_'));
            if (idClass) {
                return idClass.replace('id-t3_', '');
            }

            const thingId = element.getAttribute('data-fullname');
            if (thingId && thingId.startsWith('t3_')) {
                return thingId.replace('t3_', '');
            }

            const permalink = element.querySelector('a.permalink');
            if (permalink && permalink.href) {
                const permalinkMatch = permalink.href.match(/\/comments\/([a-z0-9]+)\//i);
                if (permalinkMatch) {
                    return permalinkMatch[1];
                }
            }
        }

        const urlMatch = window.location.pathname.match(/\/comments\/([a-z0-9]+)\//i);
        return urlMatch ? urlMatch[1] : null;
    }

    //
    // Makes sure the Trending subreddits and Classic tagline only works
    // on the front page
    //
    if ((window.location.hostname === 'old.reddit.com' || window.location.hostname === 'www.reddit.com') &&
        (window.location.pathname === '/' || window.location.pathname === '/index.html')) {

        setTagline(GM_getValue(config.enableTagline));
        renameHomeButton(GM_getValue(config.enableRenameHome));
        changeFavicon(GM_getValue(config.enableFavicon));

        window.addEventListener('load', () => {
            addTrendingSubreddits(GM_getValue(config.enableTrending));
        });
    }

    //
    // View Counter Logic
    //
    function initializeViewCounter() {
        if (!GM_getValue(config.viewCounterEnabled)) return;

        const DEBUG = false;

        function debugLog(...args) {
            if (DEBUG) {
                console.log('[View Counter]', ...args);
            }
        }

        const viewCountCache = {};

        function formatNumber(num) {
            if (num === null || num === undefined || num === 0) return '? views';
            if (num >= 1000000) {
                return (num / 1000000).toFixed(1) + 'M views';
            } else if (num >= 1000) {
                return (num / 1000).toFixed(1) + 'K views';
            } else {
                return num + ' views';
            }
        }

        function fetchPostData(postId, targetElements) {
            if (viewCountCache[postId]) {
                targetElements.forEach(el => {
                    insertViewCount(el, viewCountCache[postId]);
                });
                return;
            }

            const jsonUrl = `https://www.reddit.com/by_id/t3_${postId}.json`;

            debugLog('Fetching data for post', postId, 'from', jsonUrl);

            GM_xmlhttpRequest({
                method: 'GET',
                url: jsonUrl,
                headers: {
                    'User-Agent': 'Mozilla/5.0',
                    'Accept': 'application/json'
                },
                onload: function (response) {
                    try {
                        const data = JSON.parse(response.responseText);
                        debugLog('Received data for post', postId, data);
                        const postData = data.data.children[0].data;

                        let viewCount = null;

                        if (postData.view_count !== undefined) {
                            viewCount = postData.view_count;
                        } else if (postData.viewed !== undefined) {
                            viewCount = postData.viewed;
                        } else if (postData.num_views !== undefined) {
                            viewCount = postData.num_views;
                        } else if (postData.viewCount !== undefined) {
                            viewCount = postData.viewCount;
                        } else {
                            const score = postData.score || 0;
                            const ratio = postData.upvote_ratio || 0.5;
                            const estimatedUpvotes = Math.round(score / (2 * ratio - 1));
                            viewCount = estimatedUpvotes * 25;
                            debugLog('Estimated view count:', viewCount, 'based on score:', score, 'and ratio:', ratio);
                        }

                        debugLog('View count for post', postId, ':', viewCount);

                        if (!viewCount || viewCount === 0) {
                            fetchNewRedditViewCount(postId, targetElements);
                            return;
                        }

                        viewCountCache[postId] = viewCount;

                        targetElements.forEach(el => {
                            insertViewCount(el, formatNumber(viewCount));
                        });
                    } catch (error) {
                        console.error('Old Reddit View Counter error:', error);
                        fetchNewRedditViewCount(postId, targetElements);
                    }
                },
                onerror: function (error) {
                    console.error('Failed to fetch post data:', error);
                    fetchNewRedditViewCount(postId, targetElements);
                }
            });
        }

        function fetchNewRedditViewCount(postId, targetElements) {
            const newRedditUrl = `https://www.reddit.com/comments/${postId}/.json`;

            debugLog('Trying new Reddit API for post', postId);

            GM_xmlhttpRequest({
                method: 'GET',
                url: newRedditUrl,
                headers: {
                    'User-Agent': 'Mozilla/5.0',
                    'Accept': 'application/json'
                },
                onload: function (response) {
                    try {
                        const data = JSON.parse(response.responseText);
                        const postData = data[0].data.children[0].data;

                        let viewCount = null;

                        if (postData.view_count !== undefined && postData.view_count !== null) {
                            viewCount = postData.view_count;
                        } else if (postData.viewCount !== undefined && postData.viewCount !== null) {
                            viewCount = postData.viewCount;
                        } else if (postData.num_views !== undefined && postData.num_views !== null) {
                            viewCount = postData.num_views;
                        } else {
                            const totalVotes = postData.ups + postData.downs;
                            viewCount = totalVotes * 25;
                            debugLog('Estimated view count from votes:', viewCount);
                        }

                        debugLog('New Reddit view count for post', postId, ':', viewCount);

                        if (viewCount) {
                            viewCountCache[postId] = viewCount;
                            targetElements.forEach(el => {
                                insertViewCount(el, formatNumber(viewCount));
                            });
                        } else {
                            targetElements.forEach(el => {
                                insertViewCount(el, '? views');
                            });
                        }
                    } catch (error) {
                        console.error('New Reddit View Counter error:', error);
                        targetElements.forEach(el => {
                            insertViewCount(el, '? views');
                        });
                    }
                },
                onerror: function (error) {
                    console.error('Failed to fetch from New Reddit:', error);
                    targetElements.forEach(el => {
                        insertViewCount(el, '? views');
                    });
                }
            });
        }

        function insertViewCount(element, formattedViews) {
            const tagline = element.querySelector('.tagline');
            if (!tagline) return;

            if (tagline.querySelector('.view-count')) return;
            const viewElement = document.createElement('span');
            viewElement.className = 'view-count';
            viewElement.textContent = formattedViews;
            viewElement.style.marginRight = '6px';
            viewElement.style.color = '#888';
            viewElement.style.fontSize = '0.9em';

            tagline.insertBefore(viewElement, tagline.firstChild);
        }

        function processPost(postElement) {
            const postId = getPostId(postElement);
            if (!postId) {
                debugLog('Could not find post ID for element', postElement);
                return;
            }

            debugLog('Processing post', postId);
            fetchPostData(postId, [postElement]);
        }

        function processAllPosts() {
            if (window.location.pathname.includes('/comments/')) {
                const postId = getPostId();
                if (!postId) return;

                const selfPost = document.querySelector('.thing.self');
                if (selfPost) {
                    fetchPostData(postId, [selfPost]);
                }
                return;
            }

            const posts = document.querySelectorAll('.thing.link:not([data-processed-views])');

            posts.forEach(post => {
                post.setAttribute('data-processed-views', 'true');
                processPost(post);
            });
        }

        function handleResExpando() {
            document.addEventListener('click', function (e) {
                setTimeout(() => {
                    const expandedPosts = document.querySelectorAll('.res-expando-box:not([data-processed-views])');

                    expandedPosts.forEach(post => {
                        post.setAttribute('data-processed-views', 'true');
                        const parentPost = post.closest('.thing');
                        if (parentPost) {
                            processPost(parentPost);
                        }
                    });
                }, 500);
            });
        }

        function handleNeverEndingReddit() {
            const observer = new MutationObserver(function (mutations) {
                mutations.forEach(function (mutation) {
                    if (mutation.addedNodes && mutation.addedNodes.length > 0) {
                        processAllPosts();
                    }
                });
            });

            const container = document.getElementById('siteTable') || document.body;
            observer.observe(container, { childList: true, subtree: true });
        }

        function initialize() {
            debugLog('Initializing View Counter');
            processAllPosts();
            handleResExpando();
            handleNeverEndingReddit();
            setInterval(processAllPosts, 2000);
        }

        setTimeout(initialize, 500);
    }

    //
    // Vote Estimator Logic
    //
    function initializeVoteEstimator() {
        if (!GM_getValue(config.voteEstimatorEnabled)) return;

        function addCommas(number) {
            return number.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
        }

        function estimatePostScoreVotes() {
            document.querySelectorAll('.linkinfo .score').forEach(linkinfoScore => {
                const numberElement = linkinfoScore.querySelector('.number');
                if (!numberElement) return;

                const points = parseInt(numberElement.textContent.replace(/[^0-9]/g, ''), 10);
                const percentageMatch = linkinfoScore.textContent.match(/([0-9]{1,3})\s?%/);
                const percentage = percentageMatch ? parseInt(percentageMatch[1], 10) : 0;

                if (points !== 50 && percentage !== 50) {
                    const upvotes = Math.round(points * percentage / (2 * percentage - 100));
                    const downvotes = upvotes - points;
                    const totalVotes = upvotes + downvotes;

                    const css = `
                            .linkinfo .upvotes { font-size: 80%; color: orangered; margin-left: 5px; }
                            .linkinfo .downvotes { font-size: 80%; color: #5f99cf; margin-left: 5px; }
                            .linkinfo .totalvotes { font-size: 80%; margin-left: 5px; }
                        `;

                    const style = document.createElement('style');
                    style.innerHTML = css;
                    document.head.appendChild(style);

                    linkinfoScore.insertAdjacentHTML('afterend', `
                            <span class="upvotes"><span class="number">${addCommas(upvotes)}</span> <span class="word">${upvotes > 1 ? 'upvotes' : 'upvote'}</span></span>
                            <span class="downvotes"><span class="number">${addCommas(downvotes)}</span> <span class="word">${downvotes > 1 ? 'downvotes' : 'downvote'}</span></span>
                            <span class="totalvotes"><span class="number">${addCommas(totalVotes)}</span> <span class="word">${totalVotes > 1 ? 'votes' : 'vote'}</span></span>
                        `);
                }
            });
        }

        async function addUpvoteDownvoteInfo() {
            const linkListing = document.querySelector(".linklisting") || document.querySelector(".Post")?.parentElement;
            if (!linkListing) return;

            const linkDivs = linkListing.getElementsByClassName("link");

            const promises = Array.from(linkDivs).map(async (linkDiv) => {
                const commentsLink = linkDiv.querySelector(".comments");
                if (!commentsLink) return;

                const commentsPage = await httpGet(`${commentsLink.href}?limit=1&depth=1`);

                const scoreSection = /<div class=(\"|\')score(\"|\')[\s\S]*?<\/div>/.exec(commentsPage);
                if (!scoreSection) return;

                const scoreMatch = /<span class=(\"|\')number(\"|\')>([\d\,\.]*)<\/span>/.exec(scoreSection[0]);
                if (!scoreMatch) return;

                const score = parseInt(scoreMatch[3].replace(',', '').replace('.', ''), 10);
                const upvotesPercentageMatch = /\((\d+)\s*\%[^\)]*\)/.exec(scoreSection[0]);
                if (!upvotesPercentageMatch) return;

                const upvotesPercentage = parseInt(upvotesPercentageMatch[1], 10);
                const upvotes = calcUpvotes(score, upvotesPercentage);
                const downvotes = upvotes !== "--" ? score - upvotes : "--";

                updateTagline(linkDiv, upvotes, downvotes, upvotesPercentage);
            });

            await Promise.all(promises);
        }

        function calcUpvotes(score, upvotesPercentage) {
            if (score === 0) return "--";
            return Math.round(((upvotesPercentage / 100) * score) / (2 * (upvotesPercentage / 100) - 1));
        }

        function updateTagline(linkDiv, upvotes, downvotes, upvotesPercentage) {
            const taglineParagraph = linkDiv.querySelector(".tagline") || linkDiv.querySelector(".Post div[data-test-id='post-content']")?.querySelector(".tagline");
            if (!taglineParagraph) return;

            let upvoteSpan = taglineParagraph.querySelector(".res_post_ups");
            let downvoteSpan = taglineParagraph.querySelector(".res_post_downs");
            let percentageSpan = taglineParagraph.querySelector(".res_post_percentage");

            if (!upvoteSpan || !downvoteSpan || !percentageSpan) {
                const updownInfoSpan = document.createElement("span");

                upvoteSpan = createVoteSpan("res_post_ups", upvotes, "#FF8B24");
                downvoteSpan = createVoteSpan("res_post_downs", downvotes, "#9494FF");
                percentageSpan = createVoteSpan("res_post_percentage", `${upvotesPercentage}%`, "#00A000");

                updownInfoSpan.append("(", upvoteSpan, "|", downvoteSpan, "|", percentageSpan, ") ");
                taglineParagraph.insertBefore(updownInfoSpan, taglineParagraph.firstChild);
            } else {
                upvoteSpan.textContent = upvotes;
                downvoteSpan.textContent = downvotes;
                percentageSpan.textContent = `${upvotesPercentage}%`;
            }
        }

        function createVoteSpan(className, textContent, color) {
            const span = document.createElement("span");
            span.classList.add(className);
            span.style.color = color;
            span.textContent = textContent;
            return span;
        }

        async function httpGet(url) {
            const response = await fetch(url);
            return response.text();
        }

        window.addEventListener('load', () => {
            estimatePostScoreVotes();
            addUpvoteDownvoteInfo();
        });

        window.addEventListener('keydown', (event) => {
            if (event.shiftKey && event.key === 'P') {
                estimatePostScoreVotes();
                addUpvoteDownvoteInfo();
            }
        });
    }

    //
    // Classic Reddit Rewrite
    //
    const styleIds = {
        hideMultibar: 'classicRedditMultibar',
        hideBell: 'classicRedditBell',
        hideChat: 'classicRedditChat',
        addUserPrefix: 'classicRedditUserPrefix',
        hideArchivedArrows: 'classicRedditArchivedArrows',
        oldCommentFont: 'classicRedditOldCommentFont',
        fullUserScores: 'classicRedditFullUserScores',
        oldRedditIcons: 'classicRedditOldRedditIcons',
        expandoButtons: 'classicRedditExpandoButtons',
        classicRESNight: 'classicRESNightStyles',
        submitUnderlay: 'classicRedditSubmitUnderlay',
        classicResBorderHighlight: 'classicResBorderHighlight',
        classicFlair: 'classicFlair'
    };


    function toggleHideMultibar(enabled) {
        GM_setValue(config.hideMultibar, enabled);
        const styleId = styleIds.hideMultibar;
        if (enabled) {
            GM_addStyle(`
                    .listing-chooser {
                        display: none;
                    }
                    .content[role=main] {
                        margin-left: 5px!important;
                    }
                `, { id: styleId });
        } else {
            document.getElementById(styleId)?.remove();
        }
    }

    function classicFlair(enabled) {
        GM_setValue(config.classicFlair, enabled);
        const styleId = styleIds.classicFlair;
        if (enabled) {
            GM_addStyle(`
                .flair,
                .RES-flair {
                background-color: transparent !important;
                color: #888 !important;
                border: 1px solid #ddd !important;
                font-size: x-small !important;
                padding: 1px !important;
                }

                .res-flairSearch.linkflairlabel > a {
                position: absolute;
                inset: 0 0 0 0;
                background-color: ;
                color: #e3000000 !important;
                    font-size: x-small !important;
                        padding: 1px !important;
                }
                .res-flairSearch.linkflairlabel {
                cursor: pointer;
                position: relative;
                background-color: #f000 !important;
                        font-size: x-small !important;
                        padding: 1px !important;
                }

                /* Target link flairs specifically */
                .linkflairlabel,
                .res-linkFlairLabel {
                background-color: transparent !important;
                color: #888 !important;
                border: 1px solid #ddd !important;
                font-size: x-small !important;
                        padding: 1px !important;
                }

                /* Target user flairs */
                .author-flair,
                .res-userFlairText {
                background-color: transparent !important;
                color: #888 !important;
                border: 1px solid #ddd !important;
                    font-size: x-small !important;
                        padding: 1px !important;
                }

                /* RES night mode compatibility */
                .res-nightmode .flair,
                .res-nightmode .linkflairlabel,
                .res-nightmode .author-flair {
                background-color: transparent !important;
                color: #aaa !important;
                    font-size: x-small !important;
                }

                /* Target RES-specific container elements */
                .res .tagline .flair,
                .res .thing .tagline .flair,
                .res .entry .tagline .flair {
                background-color: transparent !important;
                color: #888 !important;
                border: 1px solid #ddd !important;
                    font-size: x-small !important;
                        padding: 1px !important;
                }

                /* RES user tagger compatibility */
                .RESUserTag .flair {
                background-color: transparent !important;
                color: #888 !important;
                border: 1px solid #ddd !important;
                    font-size: x-small !important;
                        padding: 1px !important;
                }
                `, { id: styleId });
        } else {
            document.getElementById(styleId)?.remove();
        }
    }


    function toggleHideBell(enabled) {
        GM_setValue(config.hideBell, enabled);
        const styleId = styleIds.hideBell;
        if (enabled) {
            GM_addStyle(`
                    #notifications, span.separator:nth-child(6), span.separator:nth-child(7) {
                        display: none;
                    }
                `, { id: styleId });
        } else {
            document.getElementById(styleId)?.remove();
        }
    }

    function toggleHideChat(enabled) {
        GM_setValue(config.hideChat, enabled);
        const styleId = styleIds.hideChat;
        if (enabled) {
            GM_addStyle(`
                    #chat-v2, span.separator:nth-child(8), span.separator:nth-child(9) {
                        display: none;
                    }
                `, { id: styleId });
        } else {
            document.getElementById(styleId)?.remove();
        }
    }

    function toggleAddUserPrefix(enabled) {
        GM_setValue(config.addUserPrefix, enabled);
        const styleId = styleIds.addUserPrefix;
        if (enabled) {
            GM_addStyle(`
                    a.author:before {
                        content: "/u/";
                        text-transform: none!important;
                    }
                `, { id: styleId });
        } else {
            document.getElementById(styleId)?.remove();
        }
    }

    function toggleHideArchivedArrows(enabled) {
        GM_setValue(config.hideArchivedArrows, enabled);
        const styleId = styleIds.hideArchivedArrows;
        if (enabled) {
            GM_addStyle(`
                    .archived-infobar ~ #siteTable .arrow,
                    .archived-infobar ~ .commentarea .arrow {
                        visibility: hidden;
                    }
                `, { id: styleId });
        } else {
            document.getElementById(styleId)?.remove();
        }
    }

    function toggleOldCommentFont(enabled) {
        GM_setValue(config.oldCommentFont, enabled);
        const styleId = styleIds.oldCommentFont;
        if (enabled) {
            GM_addStyle(`
                    .md {
                        font-size: inherit;
                        line-height: normal;
                    }
                    .md p {
                        line-height: normal;
                    }
                    .md pre > code {
                        font-size: small;
                    }
                    .md h1 {
                        font-size: 1.2em;
                        line-height: normal;
                    }
                `, { id: styleId });
        } else {
            document.getElementById(styleId)?.remove();
        }
    }

    function toggleFullUserScores(enabled) {
        GM_setValue(config.fullUserScores, enabled);
        const styleId = styleIds.fullUserScores;
        if (enabled) {
            GM_addStyle(`
                    .link .score {
                        font-size: 0;
                    }
                    .link .score::before {
                        content: attr(title);
                        font-size: 12px;
                    }
                    .link .score::first-letter {
                        font-size: 12px;
                    }
                `, { id: styleId });
        } else {
            document.getElementById(styleId)?.remove();
        }
    }

    function toggleOldRedditIcons(enabled) {
        GM_setValue(config.oldRedditIcons, enabled);
        const styleId = styleIds.oldRedditIcons;
        if (enabled) {
            GM_addStyle(`
                    .thumbnail.self {
                        height: 50px;
                        background-image: url(https://www.redditstatic.com/sprite-reddit.ZDiVRxCXXWg.png);
                        background-position: 0px -491px;
                        background-repeat: no-repeat;
                    }
                    .thumbnail.default {
                        background-image: url(https://www.redditstatic.com/sprite-reddit.ZDiVRxCXXWg.png);
                        background-position: 0px -434px;
                        background-repeat: no-repeat;
                        height: 50px;
                    }
                    .thumbnail.image {
                        background-image: url(https://www.redditstatic.com/sprite-reddit.ZDiVRxCXXWg.png);
                        background-position: 0px -434px;
                        background-repeat: no-repeat;
                        height: 50px;
                    }
                    .thumbnail.nsfw {
                        background-image: url(https://www.redditstatic.com/sprite-reddit.ZDiVRxCXXWg.png);
                        background-position: 0px -361px;
                        background-repeat: no-repeat;
                        height: 69px;
                    }
                    .thumbnail.spoiler {
                        background-image: url(https://imgoat.com/uploads/679091c5a8/5031.png);
                        background-position: 0px -361px;
                        background-repeat: no-repeat;
                        height: 69px;
                    }
                    .gilded-gid2-icon:before {
                        width: 13px;
                        height: 13px;
                        background-position: -42px -1676px !important;
                    }
                `, { id: styleId });
        } else {
            document.getElementById(styleId)?.remove();
        }
    }

    function toggleExpandoButtons(enabled) {
        GM_setValue(config.expandoButtons, enabled);
        const styleId = styleIds.expandoButtons;
        if (enabled) {
            GM_addStyle(`
                    .expando-button.selftext.collapsed:hover,
                    .eb-sch {
                        background-image: url(http://www.redditstatic.com/sprite-reddit.jzJhk9_9j8Q.png);
                        background-position: -61px -547px;
                        background-repeat: no-repeat;
                    }
                    .expando-button.selftext.collapsed {
                        background-image: url(http://www.redditstatic.com/sprite-reddit.jzJhk9_9j8Q.png);
                        background-position: -90px -547px;
                        background-repeat: no-repeat;
                    }
                    .expando-button.video.collapsed {background-image: url(http://www.redditstatic.com/sprite-reddit.jzJhk9_9j8Q.png);
                        background-position: -87px -584px;
                        background-repeat: no-repeat;
                    }
                    .expando-button.video.collapsed:hover,
                    .eb-vch {
                        background-image: url(http://www.redditstatic.com/sprite-reddit.jzJhk9_9j8Q.png);
                        background-position: -58px -584px;
                        background-repeat: no-repeat;
                    }
                    .expando-button.selftext.expanded,
                    .eb-se {
                        margin-bottom: 5px;
                        background-image: url(http://www.redditstatic.com/sprite-reddit.jzJhk9_9j8Q.png);
                        background-position: -29px -584px;
                        background-repeat: no-repeat;
                    }
                    .expando-button.selftext.expanded:hover,
                    .eb-seh {
                        background-image: url(http://www.redditstatic.com/sprite-reddit.jzJhk9_9j8Q.png);
                        background-position: 0px -584px;
                        background-repeat: no-repeat;
                    }
                    .expando-button.video.expanded,
                    .eb-ve {
                        background-image: url(http://www.redditstatic.com/sprite-reddit.jzJhk9_9j8Q.png);
                        background-position: -29px -613px;
                        background-repeat: no-repeat;
                    }
                    .expando-button.video.expanded:hover,
                    .eb-veh {
                        background-image: url(http://www.redditstatic.com/sprite-reddit.jzJhk9_9j8Q.png);
                        background-position: 0px -613px;
                        background-repeat: no-repeat;
                    }
                    .expando-button.image,
                    .expando-button.video-muted,
                    .expando-button.expando-button-loading,
                    .expando-button.expando-button-requires-permission {
                        vertical-align: top !important;
                        width: 23px;
                        height: 23px;
                        max-width: 23px;
                        max-height: 23px;
                        display: inline-block;
                        background-image: url(https://imgur.com/m2osmrU.png);
                        margin-right: 6px;
                        padding: 0;
                    }
                    .comment .tagline {
                        display: inline-block !important;
                    }
                    .comment .expand {
                        float: right !important;
                        margin: -2px 0 0 2px !important;
                    }
                    .res .expando-button,
                    .res-nightmode .expando-button {
                        background-image: url(http://www.redditstatic.com/sprite-reddit.jzJhk9_9j8Q.png) !important;
                        filter: none !important;
                        -webkit-filter: none !important;
                        transform: none !important;
                        background-color: transparent !important;
                    }
                    .res .expando-button:hover,
                    .res-nightmode .expando-button:hover{
                        background-image: url(http://www.redditstatic.com/sprite-reddit.jzJhk9_9j8Q.png) !important;
                        filter: none !important;
                        -webkit-filter: none !important;
                        transform: none !important;
                        background-color: transparent !important;
                    }
                    .res .expando-button.selftext.expanded,
                    .res-nightmode .expando-button.selftext.expanded {
                        background-position: -29px -584px !important;
                        background-repeat: no-repeat !important;
                        margin-bottom: 5px !important;
                    }
                    .res .expando-button.selftext.expanded:hover,
                    .res-nightmode .expando-button.selftext.expanded:hover {
                        background-position: 0px -584px !important;
                        background-repeat: no-repeat !important;
                    }
                    .res .expando-button.video.collapsed,
                    .res-nightmode .expando-button.video.collapsed {
                        background-position: -87px -584px !important;
                        background-repeat: no-repeat !important;
                    }
                    .res .expando-button.video.collapsed:hover,
                    .res-nightmode .expando-button.video.collapsed:hover {
                        background-position: -58px -584px !important;
                        background-repeat: no-repeat !important;
                    }
                    .res .expando-button.video.expanded,
                    .res-nightmode .expando-button.video.expanded {
                        background-position: -29px -613px !important;
                        background-repeat: no-repeat !important;
                    }
                    .res .expando-button.video.expanded:hover,
                    .res-nightmode .expando-button.video.expanded:hover {
                        background-position: 0px -613px !important;
                        background-repeat: no-repeat !important;
                    }
                    .res .expando-button.image,
                    .res .expando-button.video-muted,
                    .res-nightmode .expando-button.image,
                    .res-nightmode .expando-button.video-muted {
                        vertical-align: top !important;
                        width: 23px !important;
                        height: 23px !important;
                        max-width: 23px !important;
                        max-height: 23px !important;
                        display: inline-block !important;
                        background-image: url(https://imgur.com/m2osmrU.png) !important;
                        margin-right: 6px !important;
                        padding: 0 !important;
                    }
                    .res .RESUsersDBIcon,
                    .res-nightmode .RESUsersDBIcon {
                        display: inline-block !important;
                        margin-left: 3px !important;
                    }
                `, { id: styleId });
        } else {
            document.getElementById(styleId)?.remove();
        }
    }

    function toggleClassicRESNight(enabled) {
        GM_setValue(config.classicRESNight, enabled);
        const styleId = styleIds.classicRESNight;
        if (enabled) {
            GM_addStyle(`
                    /* HEADER */
                    .res-nightmode div.entry:nth-child(1) > div:nth-child(1) {
                        margin-top: 10px;
                    }
                    .res-floater-visibleAfterScroll {
                        top: 5px !important;
                        z-index: 10000000000 !important;
                    }
                    .res-nightmode #sr-header-area, .res-nightmode #sr-more-link {
                        background-color: rgb(68, 68, 68) !important;
                        color: rgb(222, 222, 222) !important;
                    }
                    .res-nightmode #RESSubredditGroupDropdown a,
                    .res-nightmode #RESSubredditGroupDropdown > .RESShortcutsEditButtons .res-icon,
                    .res-nightmode .RESNotificationContent,
                    .res-nightmode .RESNotificationFooter,
                    .res-nightmode body .sr-bar a {
                        color: rgb(222, 222, 222);
                    }
                    .res-nightmode #header, .res-nightmode .liveupdate-home .content {
                        background-color: rgb(105, 105, 105);
                        border-bottom: 1px solid rgb(160, 160, 160) !important;
                    }
                    .res-nightmode body .tabmenu li.selected a {
                        color: orangered;
                        background-color: white;
                        border: 1px solid rgb(160, 160, 160);
                        border-bottom: 1px solid white;
                        border-bottom-color: rgb(34, 34, 34) !important;
                        z-index: 100;
                    }
                    .res-nightmode div#RESShortcutsEditContainer,
                    .res-nightmode div#RESShortcutsSort,
                    .res-nightmode div#RESShortcutsRight,
                    .res-nightmode div#RESShortcutsLeft,
                    .res-nightmode div#RESShortcutsAdd,
                    .res-nightmode div#RESShortcutsTrash {
                        background: rgb(68, 68, 68) !important;
                        color: rgb(140, 179, 217) !important;
                    }
                    .res-nightmode .pagename a {
                        color: black;
                    }
                    .res-nightmode body.with-listing-chooser #header .pagename {
                        position: inherit;
                    }
                    /* FRONTPAGE */
                    .res-nightmode .trending-subreddits {
                        background-color: rgb(54, 54, 54) !important;
                        margin-top: 0px !important;
                        margin-left: 0px !important;
                        margin-bottom: 4px !important;
                        padding-bottom: 1px !important;
                    }
                    .res-nightmode body,
                    .res-nightmode body .content,
                    .res-nightmode .modal-body,
                    .res-nightmode .side,
                    .res-nightmode .icon-menu a,
                    .res-nightmode .side .leavemoderator,
                    .res-nightmode .side .leavecontributor-button,
                    .res-nightmode .side .titlebox,
.res-nightmode .side .spacer .titlebox .redditname,
                    .res-nightmode .side .titlebox .flairtoggle,
                    .res-nightmode .side .usertext-body .md ol,
                    .res-nightmode .side .usertext-body .md ol ol,
                    .res-nightmode .side .usertext-body .md ol ol li,
                    .res-nightmode .modactionlisting table *,
                    .res-nightmode .side .recommend-box .rec-item,
                    .res-nightmode .side .md ul {
                        background-color: rgb(34, 34, 34) !important;
                    }
                    .res-nightmode .titlebox form.toggle, .leavemoderator {
                        background: rgb(34, 34, 34) none no-repeat scroll center left !important;
                    }
                    .res-nightmode .side .spacer {
                        margin: 7px 0 12px 5px !important;
                    }
                    .res-nightmode .content {
                        margin-left: 0px !important;
                        margin-top: 0px !important;
                    }
                    .res-nightmode body.with-listing-chooser.listing-chooser-collapsed>.content {
                        margin-left: 0px !important;
                    }
                    .res-nightmode body.with-listing-chooser.listing-chooser-collapsed .listing-chooser {
                        padding-right: 0px !important;
                    }
                    .res-nightmode body.with-listing-chooser.listing-chooser-collapsed .listing-chooser .grippy {
                        width: 0px !important;
                    }
                    .res-nightmode .content .spacer {
                        margin-bottom: 0px !important;
                    }
                    .res-nightmode .NERPageMarker {
                        background-color: rgb(24, 24, 24);
                        margin: 0px !important;
                    }
                    .res-nightmode .thing.odd.link {
                        padding: 7px !important;
                        margin: 0;
                        background-color: rgb(34, 34, 34);
                    }
                    .res-nightmode .thing.even.link {
                        background: rgb(24, 24, 24);
                        padding: 7px !important;
                        margin: 0;
                    }
                    .res-nightmode .midcol .score, .res-nightmode .moduleButton:not(.enabled) {
                        color: #c6c6c6 !important;
                    }
                    .res-nightmode .rank .star,
                    .res-nightmode .link .score.likes,
                    .res-nightmode .linkcompressed .score.likes {
                        color: rgb(255, 69, 0) !important;
                    }
                    .res-nightmode .rank .star,
                    .res-nightmode .link .score.dislikes,
                    .res-nightmode .linkcompressed .score.dislikes {
                        color: rgb(140, 179, 217) !important;
                    }
                    .res-nightmode .content {
                        border-color: rgb(17, 17, 17);
                    }
                    .res-nightmode .wiki-page .wiki-page-content .md.wiki > .toc ul,
                    .res-nightmode .tabmenu li a,
                    .res-nightmode .tabmenu li.selected a {
                        background-color: rgb(34, 34, 34) !important;
                    }
                    .res-nightmode .link .rank {
                        color: #c6c6c6 !important;
                    }
                    .res-nightmode .domain a {
color: rgb(173, 216, 230) !important;
                    }
                    .res-nightmode .subreddit {
                        color: rgba(20, 150, 220, 0.8) !important;
                    }
                    .res-nightmode .author {
                        color: rgba(20, 150, 220, 0.8) !important;
                    }
                    .res-nightmode .live-timestamp {
                        color: #B3B375 !important;
                    }
                    .res-nightmode .RES-keyNav-activeElement > .tagline,
                    .res-nightmode .RES-keyNav-activeElement .md-container > .md,
                    .res-nightmode .RES-keyNav-activeElement .md-container > .md p {
                        color: rgb(187, 187, 187) !important;
                    }
                    .res-nightmode .flair, .res-nightmode .linkflairlabel {
                        background-color: rgb(187, 187, 187);
                        color: rgb(0, 0, 0);
                        padding: 1px;
                    }
                    .res-nightmode:not(.res-nightMode-coloredLinks) .thing:not(.stickied) .title:visited,
                    .res-nightmode:not(.res-nightMode-coloredLinks) .thing.visited:not(.stickied) .title,
                    .res-nightmode:not(.res-nightMode-coloredLinks).combined-search-page .search-result a:visited,
                    .res-nightmode:not(.res-nightMode-coloredLinks).combined-search-page .search-result a:visited>mark {
                        color: rgb(120, 120, 120);
                    }
                    .res-nightmode .md,
                    .res-nightmode .content .sitetable .thing .md,.res-nightmode .RES-keyNav-activeElement .md-container > .mdp {
                        color: rgb(222, 222, 222) !important;
                    }
                    .res-nightmode .combined-search-page .search-result a {
                        color: rgb(222, 222, 222);
                    }
                    .res-nightmode .entry .buttons li a {
                        color: rgb(150, 150, 150) !important;
                    }
                    .res-nightmode #RESSubredditGroupDropdown,
                    #RESSubredditGroupDropdown > .RESShortcutsEditButtons {
                        background-color: rgb(68, 68, 68) !important;
                        border-color: rgb(128, 128, 128) !important;
                    }
                    .res-nightmode .spoiler-stamp {
                        color: #c76700 !important;
                    }
                    .res-nightmode .entry.res-selected,
                    .res-nightmode .entry.res-selected .md-container {
                        background-color: rgba(0, 0, 0, 0)!important;
                    }
                    /* BUTTONS */
                    .res-nightmode .thing .expando-button,
                    .res-nightmode .thing .expando-button:hover,
                    .res-nightmode .expando-button,
                    .res-nightmode .expando-button:hover {
                        background-image: url("https://s3.amazonaws.com/a.thumbs.redditmedia.com/PkckcN8_3ijRUVP-GUQ6E-c8Ash_jQ3kCrEAoqKjSC4.png") !important;
                        transform: scale(1);
                        -webkit-filter: grayscale(0%) invert(0%);
                        background-color: transparent;
                    }
                    .res-nightmode .expando-button.video-muted.collapsed {
                        background-position: 0px -384px !important;
                    }
                    .res-nightmode .expando-button.video-muted.collapsed:hover {
                        background-position: 0px -408px !important;
                    }
                    .res-nightmode .expando-button.video-muted.expanded {
                        background-position: 0px -432px !important;
                    }
                    .res-nightmode .expando-button.video-muted.expanded:hover {
                        background-position: 0px -456px !important;
                    }
                    .res-nightmode .expando-button.selftext.collapsed {
                        background-position: 0px -96px !important;
                    }
                    .res-nightmode .expando-button.selftext.collapsed:hover {
                        background-position: 0px -120px !important;
                    }
                    .res-nightmode .expando-button.selftext.expanded {
                        background-position: 0px -144px !important;
                    }
                    .res-nightmode .expando-button.selftext.expanded:hover {
                        background-position: 0px -168px !important;
                    }
                    .res-nightmode .expando-button.image.gallery.collapsed {
                        background-position: 0px -288px !important;
                    }
                    .res-nightmode .expando-button.image.gallery.collapsed:hover {
                        background-position: 0px -312px !important;
                    }
                    .res-nightmode .expando-button.image.gallery.expanded {
                        background-position: 0px -336px !important;
                    }
                    .res-nightmode .expando-button.image.gallery.expanded:hover {
                        background-position: 0px -360px !important;
                    }
                    .res-nightmode .expando-button.video.collapsed {
                        background-position: 0px -192px !important;
                    }
                    .res-nightmode .expando-button.video.collapsed:hover {
                        background-position: 0px -216px !important;
                    }
                    .res-nightmode .expando-button.video.expanded {
                        background-position: 0px -240px !important;
                    }
                    .res-nightmode .expando-button.video.expanded:hover {
                        background-position: 0px -264px !important;
                    }
                    .res-nightmode .expando-button.collapsed.crosspost {
                        background-position: 0px -96px !important;
                    }
                    .res-nightmode .expando-button.collapsed.crosspost:hover {
                        background-position: 0px -120px !important;
                    }
                    .res-nightmode .expando-button.expanded.crosspost {
                        background-position: 0px -144px !important;
                    }
                    .res-nightmode .expando-button.expanded.crosspost:hover {
                        background-position: 0px -168px !important;
                    }
                    .res-nightmode .expando-button.image.collapsed {
                        background-position: 0px 0px !important;
                    }
                    .res-nightmode .expando-button.image.collapsed:hover {
                        background-position: 0px -24px !important;
                    }
                    .res-nightmode .expando-button.image.expanded {
                        background-position: 0px -48px !important;
                    }
                    .res-nightmode .expando-button.image.expanded:hover {
                        background-position: 0px -72px !important;
                    }
                    /* COMMENTS */
                    .res-nightmode .res-commentBoxes .comment {
                        border-left-width: 0px !important;
                        border-right-width: 0px !important;
                        border-top-width: 0px !important;
                        border-bottom-width: 0px !important;
                    }
                    .res-nightmode .linkflairlabel, .res-nightmode .flair {
                        padding-top: 0px !important;
                        padding-left: 2px !important;
                        padding-right: 2px !important;
                    }
                    .res-nightmode.res-commentBoxes .comment,
                    .res-nightmode.res-commentBoxes .comment .comment .comment,
                    .res-nightmode.res-commentBoxes .comment .comment .comment .comment .comment,
                    .res-nightmode.res-commentBoxes .comment .comment .comment .comment .comment .comment .comment,
                    .res-nightmode.res-commentBoxes .comment .comment .comment .comment .comment .comment .comment .comment .comment {
                        background-color: rgb(24, 24, 24) !important;
                    }
                    .res-nightmode.res-commentBoxes body .comment .comment,
                    .res-nightmode.res-commentBoxes body .comment .comment .comment .comment,
                    .res-nightmode.res-commentBoxes body .comment .comment .comment .comment .comment .comment,
                    .res-nightmode.res-commentBoxes body .comment .comment .comment .comment .comment .comment .comment .comment,
                    .res-nightmode.res-commentBoxes body .comment .comment .comment .comment .comment .comment .comment .comment .comment .comment {
                        background-color: rgb(34, 34, 34) !important;
                    }
                `, { id: styleId });
        } else {
            document.getElementById(styleId)?.remove();
        }
    }

    function toggleSubmitUnderlay(enabled) {
        GM_setValue(config.enableSubmitUnderlay, enabled);
        const styleId = styleIds.submitUnderlay;
        if (enabled) {
            GM_addStyle(`
                    .submit-link-underlay {
                        margin-top: 5px;
                        padding: 5px;
                        background-color: transparent;
                        display: flex;
                        align-items: center;
                        font-family: verdana, sans-serif;
                        font-size: 11px;
                        color: dimgray;
                    }
                    .submit-link-underlay img {
                        max-width: 40px;
                        max-height: 40px;
                        margin-right: 5px;
                    }
                    .submit-link-underlay p {
                        margin: 0;
                    }
                `, { id: styleId });

            let underlayAdded = false;
            function addUnderlay() {
                const submitLink = document.querySelector('.submit-link');
                if (submitLink && !underlayAdded) {
                    const underlay = document.createElement('div');
                    underlay.className = 'submit-link-underlay';

                    const image = document.createElement('img');
                    image.src = 'https://files.catbox.moe/4zv032.png';

                    const textContainer = document.createElement('div');
                    textContainer.innerHTML = `<p>to anything interesting: news article, blog entry, video, picture...</p>`;

                    underlay.appendChild(image);
                    underlay.appendChild(textContainer);
                    submitLink.parentNode.insertBefore(underlay, submitLink.nextSibling);
                    underlayAdded = true;
                }
            }
            addUnderlay();
            const targetNode = document.body;
            const config = { childList: true, subtree: true };
            const observer = new MutationObserver(function (mutationsList) {
                for (const mutation of mutationsList) {
                    if (mutation.addedNodes.length && !underlayAdded) {
                        addUnderlay();
                    }
                }
            });
            observer.observe(targetNode, config);

        } else {
            document.getElementById(styleId)?.remove();
            const underlay = document.querySelector('.submit-link-underlay');
            if (underlay) {
                underlay.remove();
            }
        }
    }

    function toggleClassicResBorderHighlight(enabled) {
        GM_setValue(config.classicResBorderHighlight, enabled);
        const styleId = styleIds.classicResBorderHighlight;
        if (enabled) {
            GM_addStyle(`
                    .entry.res-selected {
                        border: dimgray 2px dotted;
                    }
                `, { id: styleId });
        } else {
            document.getElementById(styleId)?.remove();
        }
    }


    const headerArea = document.getElementById('sr-header-area');
    if (headerArea) {
        const betaOptin = headerArea.querySelector('.redesign-beta-optin');
        const premiumBanner = headerArea.querySelector('.premium-banner-outer');

        if (betaOptin) {
            betaOptin.remove();
        }
        if (premiumBanner) {
            premiumBanner.remove();
        }
    }
    const style = document.createElement('style');
    style.textContent = `
            .premium-banner {
                display: none !important;
            }
        `;
    document.head.appendChild(style);

    window.addEventListener('load', () => {
        toggleHideMultibar(GM_getValue(config.hideMultibar));
        toggleHideBell(GM_getValue(config.hideBell));
        toggleHideChat(GM_getValue(config.hideChat));
        toggleAddUserPrefix(GM_getValue(config.addUserPrefix));
        toggleHideArchivedArrows(GM_getValue(config.hideArchivedArrows));
        toggleOldCommentFont(GM_getValue(config.oldCommentFont));
        toggleFullUserScores(GM_getValue(config.fullUserScores));
        toggleOldRedditIcons(GM_getValue(config.oldRedditIcons));
        toggleExpandoButtons(GM_getValue(config.expandoButtons));
        toggleClassicRESNight(GM_getValue(config.classicRESNight));
        toggleSubmitUnderlay(GM_getValue(config.enableSubmitUnderlay));
        toggleClassicResBorderHighlight(GM_getValue(config.classicResBorderHighlight));
        classicFlair(GM_getValue(config.classicFlair)); // Call classicFlair on load
    });

    if (window.location.hostname === 'old.reddit.com' || window.location.hostname === 'www.reddit.com') {
        initializeViewCounter();
        initializeVoteEstimator();
    }

})();