Tubextend Mid2014 - 2015 (YouTube Redux Add-on)

Additional styling for the YouTube Redux extension, may NOT work properly without it.

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         Tubextend Mid2014 - 2015 (YouTube Redux Add-on)
// @namespace    https://github.com/veira24922
// @version      1.4.5
// @description  Additional styling for the YouTube Redux extension, may NOT work properly without it.
// @license      MIT
// @author       Veira24922
// @match        http*://www.youtube.com/*
// @icon         https://web.archive.org/web/20150205041212im_/https://www.youtube.com/favicon.ico
// @run-at       document-start
// @grant        GM_addStyle
// @grant        GM_setValue
// @grant        GM_getValue
// @grant        GM_registerMenuCommand
// ==/UserScript==

var createdStyles = [];
var createdElements = [];
var createdIntervals = [];
const languageStrings = {
    "en": {
        whatToWatch: "What to Watch",
        music: "Music",

        publishedOnText: "Published on",

        settingsHeader: "Tubextend Settings",
        generalHeader: "General",

        enableAppbar: "Enable Appbar",
        enableAppbarDesc: "Whether or not to enable the Appbar, which it was present since the January 2014 layout experiment.",

        enableSAT: "Enable system accent theming",
        enableSATDesc: "<b>EXPERIMENTAL!</b> Uses the system accent color for some styles, compatible with PlayerTube.",

        buttonSave: "Save changes",
        buttonCancel: "Cancel"
    },
    "pt": {
        whatToWatch: "O que assistir",
        music: "Música",

        publishedOnText: "Publicado em",

        settingsHeader: "Configurações do Tubextend",
        generalHeader: "Geral",

        enableAppbar: "Ativar o Appbar",
        enableAppbarDesc: "Ativar ou não o Appbar, que estava presente desde o experimento do layout de janeiro de 2014.",

        enableSAT: "Ativar cores de destaque do sistema",
        enableSATDesc: "<b>EXPERIMENTAL!</b> Usa a cor de destaque do sistema para outros estilos, compatível com o PlayerTube.",

        buttonSave: "Salvar alterações",
        buttonCancel: "Cancelar"
    },
    "pt-pt": {
        whatToWatch: "O que assistir",
        music: "Música",

        publishedOnText: "Publicado em",

        settingsHeader: "Configurações do Tubextend",
        generalHeader: "Geral",

        enableAppbar: "Ativar o Appbar",
        enableAppbarDesc: "Ativar ou não o Appbar, que estava presente desde a experiência do layout de janeiro de 2014.",

        enableSAT: "Ativar cores de destaque do sistema",
        enableSATDesc: "<b>EXPERIMENTAL!</b> Utiliza a cor de destaque do sistema para outros estilos, compatível com o PlayerTube.",

        buttonSave: "Guardar alterações",
        buttonCancel: "Cancelar"
    },
    "es": {
        whatToWatch: "Qué ver",
        music: "Música",

        publishedOnText: "Publicado el",

        settingsHeader: "Configuración de Tubextend",
        generalHeader: "General",

        enableAppbar: "Habilitar la Appbar",
        enableAppbarDesc: "Habilita o no la Appbar, presente desde el experimento de diseño de enero de 2014.",

        enableSAT: "Activar colores de acento del sistema",
        enableSATDesc: "<b>¡EXPERIMENTAL!</b> Usa el color de acento del sistema para otros estilos, compatible con PlayerTube.",

        buttonSave: "Guardar cambios",
        buttonCancel: "Cancelar"
    },
    "es-419": {
        whatToWatch: "Qué ver",
        music: "Música",

        publishedOnText: "Publicado el",

        settingsHeader: "Configuración de Tubextend",
        generalHeader: "General",

        enableAppbar: "Habilitar la Appbar",
        enableAppbarDesc: "Habilita o no la Appbar, presente desde el experimento de diseño de enero de 2014.",

        enableSAT: "Activar colores de acento del sistema",
        enableSATDesc: "<b>¡EXPERIMENTAL!</b> Usa el color de acento del sistema para otros estilos, compatible con PlayerTube.",

        buttonSave: "Guardar cambios",
        buttonCancel: "Cancelar"
    },
    "es-us": {
        whatToWatch: "Qué ver",
        music: "Música",

        publishedOnText: "Publicado el",

        settingsHeader: "Configuración de Tubextend",
        generalHeader: "Cargar más",

        enableAppbar: "Habilitar la Appbar",
        enableAppbarDesc: "Habilita o no la Appbar, presente desde el experimento de diseño de enero de 2014.",

        enableSAT: "Activar colores de acento del sistema",
        enableSATDesc: "<b>¡EXPERIMENTAL!</b> Usa el color de acento del sistema para otros estilos, compatible con PlayerTube.",

        buttonSave: "Guardar cambios",
        buttonCancel: "Cancelar"
    },
    "fr": {
        whatToWatch: "Que regarder",
        music: "Musique",

        publishedOnText: "Publié le",

        settingsHeader: "Paramètres Tubextend",
        generalHeader: "Général",

        enableAppbar: "Activer la Appbar",
        enableAppbarDesc: "Indique si la Appbar doit être activée ou désactivée (présente depuis l'expérimentation de janvier 2014.)",

        enableSAT: "Activer les couleurs d'accentuation du système",
        enableSATDesc: "<b>EXPÉRIMENTAL !</b> Utilise la couleur d'accentuation du système pour les autres styles. Compatible avec PlayerTube.",

        buttonSave: "Enregistrer les modifications",
        buttonCancel: "Annuler"
    },
    "fr-ca": {
        whatToWatch: "Que regarder",
        music: "Musique",

        publishedOnText: "Publié le",

        settingsHeader: "Paramètres Tubextend",
        generalHeader: "Général",

        enableAppbar: "Activer la Appbar",
        enableAppbarDesc: "Indique si la Appbar doit être activée ou désactivée (présente depuis l'expérimentation de janvier 2014.)",

        enableSAT: "Activer les couleurs d'accentuation du système",
        enableSATDesc: "<b>EXPÉRIMENTAL !</b> Utilise la couleur d'accentuation du système pour les autres styles. Compatible avec PlayerTube.",

        buttonSave: "Enregistrer les modifications",
        buttonCancel: "Annuler"
    },
    "ru": {
        whatToWatch: "Что смотреть",
        music: "Музыка",

        publishedOnText: "Опубликовано",

        settingsHeader: "Настройки Tubextend",
        generalHeader: "Общие",

        enableAppbar: "Включить панель приложений",
        enableAppbarDesc: "Включать ли панель приложений, которая присутствовала с момента эксперимента с макетом в январе 2014 года",

        enableSAT: "Включить системные акцентные цвета",
        enableSATDesc: "<b>ЭКСПЕРИМЕНТАЛЬНО!</b> Использует системный акцентный цвет для других стилей, совместимо с PlayerTube.",

        buttonSave: "Сохранить изменения",
        buttonCancel: "Отмена"
    },
    "uk": {
        whatToWatch: "Налаштування Tubextend",
        music: "Музика",

        publishedOnText: "Опубліковано",

        settingsHeader: "Tubextend Settings",
        generalHeader: "Загальне",

        enableAppbar: "Увімкнути панель програм",
        enableAppbarDesc: "Чи вмикати панель програм, яка була присутня з експериментального макета січня 2014 року.",

        enableSAT: "Увімкнути системні акцентні кольори",
        enableSATDesc: "<b>ЕКСПЕРИМЕНТАЛЬНА ФУНКЦІЯ!</b> Використовує системний акцентний колір для інших стилів, сумісний з PlayerTube.",

        buttonSave: "Зберегти зміни",
        buttonCancel: "Скасувати"
    },
    "it": {
        whatToWatch: "Cosa guardare",
        music: "Musica",

        publishedOnText: "Pubblicato il",

        settingsHeader: "Impostazioni Tubextend",
        generalHeader: "Generale",

        enableAppbar: "Abilita Appbar",
        enableAppbarDesc: "Se abilitare o meno l'Appbar, presente dall'esperimento di layout di gennaio 2014.",

        enableSAT: "Abilita i colori di accento del sistema",
        enableSATDesc: "<b>SPERIMENTALE!</b> Utilizza il colore di accento del sistema per altri stili, compatibile con PlayerTube.",

        buttonSave: "Salva modifiche",
        buttonCancel: "Annulla"
    }
}

function setupValues() {
    if (GM_getValue("appbar-enabled") == null) GM_setValue("appbar-enabled", true);
    if (GM_getValue("sat-enabled") == null) GM_setValue("sat-enabled", false);
}
function getLanguage() {
    if (yt == null) return languageStrings["en"];
    if (languageStrings[yt.config_.HL.toLowerCase()] == null) return languageStrings["en"];
    return languageStrings[yt.config_.HL.toLowerCase()];
}
function makeStyle(code) {
    let result = GM_addStyle(code);
    createdStyles.push(result);
}
function clearEverything() {
    for (let i in createdStyles) {
        if (createdStyles[i] != null)
            createdStyles[i].remove();
    }
    for (let i in createdElements) {
        if (createdElements[i] != null)
            createdElements[i].remove();
    }
    for (let i in createdIntervals) {
        if (createdIntervals[i] != null)
            clearInterval(createdIntervals[i]);
    }
}
function waitForSelector(selector) {
    var interv;
    return new Promise(resolve => {
        interv = setInterval(() => {
            var query = document.querySelector(selector);
            if (query != null) {
                resolve(query);
                clearInterval(interv);
            }
        }, 1);
    });
}
function rgbToHue(r, g, b) {
    r /= 255;
    g /= 255;
    b /= 255;

    const max = Math.max(r, g, b);
    const min = Math.min(r, g, b);
    const delta = max - min;

    let hue = 0;
    if (delta === 0) {
        hue = 0;
    } else if (max === r) {
        hue = ((g-b)/delta)%6;
    } else if (max === g) {
        hue = (b-r)/delta+2;
    } else {
        hue = (r-g)/delta+4;
    }

    hue = Math.round(hue*60);
    if (hue < 0) {
        hue += 360;
    }

    return hue;
}
function rgbToSaturation(r, g, b) {
    r /= 255;
    g /= 255;
    b /= 255;

    const max = Math.max(r, g, b);
    const min = Math.min(r, g, b);

    let lightness = (max+min)/2;
    let saturation = 0;

    if (max !== min) {
        const delta = max-min;
        saturation = lightness > 0.5 ? delta/(2-max-min) : delta/(max+min);
    }

    return saturation;
}
function rgbToLuminance(r, g, b) {
    const r_norm = r/255;
    const g_norm = g/255;
    const b_norm = b/255;

    const toLinear = (c) => {
        if (c <= 0.03928) {
            return c/12.92;
        } else {
            return Math.pow((c+0.055)/1.055,2.4);
        }
    };

    const r_linear = toLinear(r_norm);
    const g_linear = toLinear(g_norm);
    const b_linear = toLinear(b_norm);

    const luminance = 0.2126*r_linear+0.7152*g_linear+0.0722*b_linear;
    return luminance;
}


async function openSettings() {
    var language = getLanguage();

    var body = await waitForSelector("body");
    var modal = document.createElement("tubextend-modal");
    body.appendChild(modal);
    modal.outerHTML = `
        <tubextend-modal>
            <tubextend-modal-dialog>
                <tubextend-header>${language.settingsHeader}</tubextend-header>
                <tubextend-splitter></tubextend-splitter>
                <tubextend-container>
                    <tubextend-header-small>${language.generalHeader}</tubextend-header-small>
                    <tubextend-div direction="vertical">
                        <tubextend-div direction="horizontal">
                            <input type="checkbox" class="appbar-toggle">
                            <tubextend-font>${language.enableAppbar}</tubextend-font>
                        </tubextend-div>
                        <tubextend-font bold gray>${language.enableAppbarDesc}</tubextend-font>
                    </tubextend-div>
                    <tubextend-div direction="vertical">
                        <tubextend-div direction="horizontal">
                            <input type="checkbox" class="sat-toggle">
                            <tubextend-font>${language.enableSAT}</tubextend-font>
                        </tubextend-div>
                        <tubextend-font bold gray>${language.enableSATDesc}</tubextend-font>
                    </tubextend-div>
                </tubextend-container>
                <tubextend-splitter></tubextend-splitter>
                <tubextend-div direction="horizontal" horizontal="end">
                    <tubextend-button class="save">${language.buttonSave}</tubextend-button>
                    <tubextend-button class="cancel">${language.buttonCancel}</tubextend-button>
                </tubextend-div>
            </tubextend-modal-dialog>
        </tubextend-modal>
    `;

    var appbarEnabled = await waitForSelector("tubextend-modal tubextend-modal-dialog input.appbar-toggle");
    var satEnabled = await waitForSelector("tubextend-modal tubextend-modal-dialog input.sat-toggle");
    if (GM_getValue("appbar-enabled")) appbarEnabled.checked = "true";
    if (GM_getValue("sat-enabled")) satEnabled.checked = "true";

    var saveButton = await waitForSelector("tubextend-modal tubextend-modal-dialog tubextend-button.save");
    var cancelButton = await waitForSelector("tubextend-modal tubextend-modal-dialog tubextend-button.cancel");
    saveButton.addEventListener("mouseup", (e) => {
        e.preventDefault();
        GM_setValue("appbar-enabled", appbarEnabled.checked == true);
        GM_setValue("sat-enabled", satEnabled.checked == true);
        window.location.reload();
    });
    cancelButton.addEventListener("mouseup", (e) => {
        e.preventDefault();
        var tempModal = document.querySelector("tubextend-modal");
        if (tempModal) tempModal.remove();
    });
}

async function tweakAccentColor() {
    if (!GM_getValue("sat-enabled")) return;
    GM_addStyle(`
    .epic-nav-item-heading[aria-selected="true"] {
        border-bottom: 3px solid AccentColor !important;
    }
    yt-icon-button#guide-button > button > span.yt-uix-button-arrow {
        border-top-color: AccentColor !important;
    }
    div#items ytd-guide-entry-renderer[active],
    div#items ytd-guide-downloads-entry-renderer[active],
    .yt-spec-icon-badge-shape__badge,
    yt-lockup-view-model yt-thumbnail-overlay-progress-bar-view-model div.ytThumbnailOverlayProgressBarHostWatchedProgressBarSegment {
        background-color: AccentColor !important;
    }
    ytd-guide-section-renderer yt-formatted-string#guide-section-title.ytd-guide-section-renderer {
        color: AccentColor !important;
    }
    div#redux-video-stats div div#like-bar {
        background: AccentColor !important;
    }
    div#redux-video-stats div#container.ytd-sentiment-bar-renderer {
        background-color: rgba(0, 0, 0, 0.32) !important;
    }
    .yt-badge-shape--thumbnail-live,
    div#reduxSubDiv #subscribe-button ytd-subscribe-button-renderer:not(.style-primary) yt-button-shape button:not(.yt-spec-button-shape-next--tonal):not([page-subtype="subscriptions"] #subscribe-button yt-button-shape button):hover {
        background-color: color-mix(in srgb, AccentColor 94%, black) !important;
    }
    div#reduxSubDiv #subscribe-button ytd-subscribe-button-renderer:not(.style-primary) yt-button-shape button:not(.yt-spec-button-shape-next--tonal):not([page-subtype="subscriptions"] #subscribe-button yt-button-shape button) {
        background-color: color-mix(in srgb, AccentColor 90%, black) !important;
    }
    #comment-container #author-text,
    #comment-container #vote-count-middle,
    #replies #expander button,
    ytd-rich-item-renderer yt-lockup-metadata-view-model a[href],
    .yt-core-attributed-string__link--call-to-action-color {
        color: color-mix(in srgb, AccentColor 95%, black) !important;
    }
    ytd-button-renderer#more-replies span.yt-icon-shape > div {
        fill: color-mix(in srgb, AccentColor 95%, black) !important;
    }
    ytd-button-renderer#more-replies span.yt-icon-shape > div {
        fill: white !important;
    }
    :root {
        --pt-main-colour: color-mix(in srgb, AccentColor 92%, black) !important;
        --pt-volume-slider: color-mix(in srgb, AccentColor 92%, black) !important;
        --yt-spec-red-indicator: color-mix(in srgb, AccentColor 92%, black) !important;
        --yt-spec-call-to-action: AccentColor;
    }
    `);

    var tempDiv = document.createElement("div");
    tempDiv.style.setProperty("display", "none");
    tempDiv.style.setProperty("background-color", "AccentColor");
    document.documentElement.appendChild(tempDiv);
    var guideIcon = await waitForSelector("yt-icon-button#guide-button > button > yt-icon");
    var logo = await waitForSelector("ytd-topbar-logo-renderer > a#logo");

    setInterval(() => {
        var computed = getComputedStyle(tempDiv);
        var accentRGB = computed.backgroundColor;
        var accentSub = accentRGB.substring(4, accentRGB.length-1);

        var rgb = [
            parseFloat(accentSub.split(", ")[0] || 0),
            parseFloat(accentSub.split(", ")[1] || 0),
            parseFloat(accentSub.split(", ")[2] || 0)
        ];
        var hue = rgbToHue(rgb[0], rgb[1], rgb[2]);
        var saturation = (rgbToSaturation(rgb[0], rgb[1], rgb[2]))*100;
        var brightness = rgbToLuminance(rgb[0], rgb[1], rgb[2]);
        guideIcon.style.setProperty("filter", `hue-rotate(${hue}deg) brightness(${1.5+brightness}) contrast(1.125) saturate(${saturation}%)`);
        logo.style.setProperty("filter", `hue-rotate(${hue}deg) brightness(${0.8+brightness}) contrast(1.125) saturate(${saturation}%)`);
    }, 2);
}
async function tweakGuideButton() {
    var guide = await waitForSelector("yt-icon-button#guide-button > button");
    var span = document.createElement("span");
    span.className = "yt-uix-button-arrow yt-uix-load-more";
    guide.appendChild(span);
}
async function changeSidebar() {
    var language = getLanguage();
    var homeText = await waitForSelector("ytd-guide-section-renderer:first-child > div#items > ytd-guide-entry-renderer:first-child > a#endpoint > tp-yt-paper-item > yt-formatted-string");
    homeText.textContent = language.whatToWatch;
}
async function changeMastheadButtonOrder() {
    var logo = await waitForSelector("ytd-topbar-logo-renderer");
    var menu = await waitForSelector("yt-icon-button#guide-button");
    var start = await waitForSelector("div#start");
    start.insertBefore(menu, logo.nextSibling);
}
async function createAppbar() {
    if (!GM_getValue("appbar-enabled")) return;
    if (!(
        location.pathname.startsWith("/channel/UC-9-kyTW8ZkZNDHQJ6FgpwQ") ||
        location.pathname == "/"
        )) {
        return;
    }
    var language = getLanguage();
    var drawer = await waitForSelector("tp-yt-app-drawer");
    var masthead = await waitForSelector("ytd-masthead#masthead");
    var appbar = document.createElement("div");
    appbar.id = "appbar-content";
    var appbarNav = document.createElement("div");
    appbarNav.id = "appbar-nav";
    appbar.appendChild(appbarNav);
    createdElements.push(appbarNav);
    var appbarNavMenu = document.createElement("ul");
    appbarNavMenu.className = "appbar-nav-menu";
    appbarNav.appendChild(appbarNavMenu);
    createdElements.push(appbarNavMenu);

    var li1 = document.createElement("p");
    appbarNavMenu.appendChild(li1);
    createdElements.push(li1);
    if (location.pathname == "/") {
        li1.outerHTML = `
    <li>
      <h2 class="epic-nav-item-heading " aria-selected="true">${language.whatToWatch}</h2>
    </li>
    `;
    }else {
        li1.outerHTML = `
    <li>
      <a href="/" class="epic-nav-item-heading " aria-selected="false">${language.whatToWatch}</h2>
    </li>
    `;
    }
    var li2 = document.createElement("p");
    appbarNavMenu.appendChild(li2);
    createdElements.push(li2);
    if (location.pathname.startsWith("/channel/UC-9-kyTW8ZkZNDHQJ6FgpwQ")) {
        li2.outerHTML = `
    <li>
      <h2 class="epic-nav-item-heading " aria-selected="true">${language.music}</h2>
    </li>
    `;
    }else {
        li2.outerHTML = `
    <li>
      <a href="/feed/music" class="epic-nav-item-heading " aria-selected="false">${language.music}</h2>
    </li>
    `;
    }

    masthead.appendChild(appbar);
    createdElements.push(appbar);

    makeStyle(`
    :root {
        --overridden-masthead-height: 90px !important;
    }
    `);
}
function createIcon(head) {
    var base64 = `data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAABMLAAATCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgNkQkIDZGiCA2RzAgNkcwIDZH/CA2R/wgNkf8IDZH/CA2R/wgNkf8IDZH/CA2R2AgNkcwIDZHMCA2RhAgNkQYIDpWHCA6V/wgOlf8IDpX/CA6V/wgOlf8IDpX/CA6V/wgOlf8IDpX/CA6V/wgOlf8IDpX/CA6V/wgOlf8IDpWHCQ6ZzAkOmf8JDpn/CQ6Z/wkOmf8JDpb/BQhc/wgMgf8JDpn/CQ6Z/wkOmf8JDpn/CQ6Z/wkOmf8JDpn/CQ6ZzAkOnuoJDp7/CQ6e/wkOnv8JDp7/Exed/8jIy/9RU4j/Bwp0/wkOm/8JDp7/CQ6e/wkOnv8JDp7/CQ6e/wkOnuoJD6T8CQ+k/wkPpP8JD6T/CQ+k/xUbo//V1dX/1dXV/4yNrP8QFG//CA6Y/wkPpP8JD6T/CQ+k/wkPpP8JD6T8CQ+q/wkPqv8JD6r/CQ+q/wkPqv8WG6n/3d3d/93d3f/d3d3/v7/M/y0wjv8JD6r/CQ+q/wkPqv8JD6r/CQ+q/woQr/8KEK//ChCv/woQr/8KEK//Fx2v/+fn5//n5+f/5+fn/+jo6P+YmtP/ChCv/woQr/8KEK//ChCv/woQr/8KELX8ChC1/woQtf8KELX/ChC1/xgdtf/x8fH/8fHx//Ly8v+bndv/Ehi3/woQtf8KELX/ChC1/woQtf8KELX8ChG76goRu/8KEbv/ChG7/woRu/8YH77/+fn5/+/v9/9fY9H/ChG7/woRu/8KEbv/ChG7/woRu/8KEbv/ChG76goRwMwKEcD/ChHA/woRwP8KEcD/EBfB/6Ol5/8tM8n/ChHA/woRwP8KEcD/ChHA/woRwP8KEcD/ChHA/woRwMwLEcSHCxHE/wsRxP8LEcT/CxHE/wsRxP8LEcT/CxHE/wsRxP8LEcT/CxHE/wsRxP8LEcT/CxHE/wsRxP8LEcSHCxLICQsSyKULEsjMCxLI+QsSyP8LEsj/CxLI/wsSyP8LEsj/CxLI/wsSyP8LEsj/CxLI0gsSyMwLEsiiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8AAP//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAD//wAA//8AAA==`;
    var link = document.createElement("link");
    link.className = "tubextend-icon";
    link.rel = "icon";
    link.href = base64;
    head.appendChild(link);

    createdIntervals.push(setInterval(() => {
        var selector = document.querySelector('head link[rel="icon"]:not([class="tubextend-icon"])');
        if (selector) selector.remove();
    }, 1));
}

(async() => {
    var body = await waitForSelector("body");
    var head = await waitForSelector("head");

    function reloadStyle() {
        makeStyle(`
    * {
        font-family: Arial,sans-serif !important;
    }
    :root {
        --ytd-toolbar-height: 49px !important;
        --ytd-masthead-height: 49px !important;
        --yt-frosted-glass-mobile: rgb(255, 255, 255);
        --yt-frosted-glass-desktop: rgb(255, 255, 255);
    }

    body[class*="lock-scrollbar"] {
        overflow-y: auto !important;
        position: absolute !important;
    }

    tp-yt-app-drawer div {
        transition-duration: 0ms !important;
    }

    ytd-guide-section-renderer > div#items > ytd-guide-entry-renderer > a#endpoint > tp-yt-paper-item > yt-formatted-string,
    ytd-guide-collapsible-section-entry-renderer > div#section-items > ytd-guide-entry-renderer > a#endpoint > tp-yt-paper-item > yt-formatted-string,
    ytd-guide-collapsible-section-entry-renderer > div#section-items > ytd-guide-downloads-entry-renderer > ytd-guide-entry-renderer > a#endpoint > tp-yt-paper-item > yt-formatted-string,
    ytd-guide-collapsible-entry-renderer > div#expanded > div#expandable-items > ytd-guide-entry-renderer > a#endpoint > tp-yt-paper-item > yt-formatted-string {
        font-size: 12px !important;
    }
    ytd-guide-entry-renderer,
    #sections.ytd-guide-renderer {
        width: 100% !important;
    }
    ytd-guide-section-renderer.ytd-guide-renderer {
        width: calc(100% - 54px) !important;
    }
    ytd-guide-signin-promo-renderer {
        width: calc(100% - 86px) !important;
    }
    a#endpoint > tp-yt-paper-item > yt-formatted-string {
        transform: translateX(-6px);
    }
    a#endpoint[href*="/playlist?list=LL"] yt-icon:first-of-type {
        width: 15px !important;
        height: 15px !important;
        transform: translateX(-1px);
    }
    ytd-guide-section-renderer > div#items > ytd-guide-entry-renderer[active] > a#endpoint > tp-yt-paper-item > yt-formatted-string,
    ytd-guide-collapsible-section-entry-renderer > div#section-items > ytd-guide-entry-renderer[active] > a#endpoint > tp-yt-paper-item > yt-formatted-string,
    ytd-guide-collapsible-section-entry-renderer > div#section-items > ytd-guide-downloads-entry-renderer > ytd-guide-entry-renderer[active] > a#endpoint > tp-yt-paper-item > yt-formatted-string,
    ytd-guide-collapsible-entry-renderer > div#expanded > div#expandable-items > ytd-guide-entry-renderer[active] > a#endpoint > tp-yt-paper-item > yt-formatted-string {
        font-weight: bold;
        text-shadow: -1px -1px 0 rgba(0,0,0,0.25);
        font-size: 12px !important;
    }
    #guide-section-title.ytd-guide-section-renderer {
        font-size: 11px !important;
        font-weight: bold;
    }
    #sections.ytd-guide-renderer h3 > yt-formatted-string {
        font-size: 11px !important;
        padding-top: 0px !important;
        padding-bottom: 8px !important;
    }
    #sections.ytd-guide-renderer > ytd-guide-section-renderer,
    #sections.ytd-guide-renderer > ytd-guide-collapsible-section-entry-renderer,
    #sections.ytd-guide-renderer > ytd-guide-collapsible-entry-renderer {
        padding-bottom: 8px !important;
    }
    #sections.ytd-guide-renderer > *:not(:first-child) {
        padding-top: 8px !important;
    }

    ytd-guide-section-renderer:first-child > div#items > ytd-guide-entry-renderer:first-child > a#endpoint > tp-yt-paper-item > yt-icon {
        width: 20px !important;
        height: 20px !important;
        background: no-repeat url("https://web.archive.org/web/20150205041212im_/https://s.ytimg.com/yts/imgbin/www-hitchhiker-vflDkjvEN.png") -505px -242px;
        background-size: auto;
        transform: translate(-1px, 0px);
    }
    ytd-guide-section-renderer:first-child {
        transform: translate(0, 1px);
    }
    ytd-guide-section-renderer:first-child > div#items > ytd-guide-entry-renderer[active]:first-child > a#endpoint > tp-yt-paper-item > yt-icon,
    ytd-guide-section-renderer:first-child > div#items > ytd-guide-entry-renderer:first-child > a#endpoint:hover > tp-yt-paper-item > yt-icon {
        filter: brightness(10) !important;
    }

    tp-yt-app-drawer {
        z-index: 4000 !important;
        width: 229px !important;
        border-right: 1px solid #e8e8e8 !important;
    }
    tp-yt-app-drawer > div#contentContainer {
        width: 229px !important;
    }
    [dark] tp-yt-app-drawer {
        border-right: 1px solid #171717 !important;
    }
    div#masthead-container {
        z-index: 4012 !important;
    }
    ytd-popup-container,
    snackbar-container {
        z-index: 4013 !important
    }
    ytd-guide-renderer#guide-renderer {
        z-index: 4000 !important;
        width: 240px !important;
    }
    tp-yt-app-drawer,
    tp-yt-app-drawer * {
        --ytd-masthead-height: 49px !important;
        --ytd-masthead-height-absolute: 49px !important;
    }
    tp-yt-app-drawer div#contentContainer {
        padding-bottom: 0px;
    }
    div#container.ytd-masthead,
    div#background.ytd-masthead {
        height: 49px !important;
    }

    div#start {
        transform: translateX(-2px);
        width: 96px;
    }
    yt-searchbox.ytSearchboxComponentHost {
        transform: translateX(63px);
    }
    yt-searchbox.ytSearchboxComponentHost, div.ytSearchboxComponentInputBox form input {
        max-width: 650px !important;
        z-index: 4013 !important;
    }
    button.ytSearchboxComponentSearchButton > span > span > div {
        width: 14px !important;
        height: 14px !important;
        background: no-repeat url("https://web.archive.org/web/20150205041746im_/https://s.ytimg.com/yts/imgbin/www-hitchhiker-vflDkjvEN.png") -155px -172px;
        filter: contrast(0.2) !important;
    }
    button.ytSearchboxComponentSearchButton:hover > span > span > div {
        width: 14px !important;
        height: 14px !important;
        background: no-repeat url("https://web.archive.org/web/20150205041746im_/https://s.ytimg.com/yts/imgbin/www-hitchhiker-vflDkjvEN.png") -155px -172px;
        filter: contrast(1) !important;
    }

    ytd-comment-engagement-bar div#toolbar > ytd-button-renderer#reply-button-end {
        order: -1000 !important
    }

    ytd-guide-section-renderer:first-child > div#items > ytd-guide-entry-renderer:first-child > a#endpoint > tp-yt-paper-item > yt-icon > span > div > svg,
    button.ytSearchboxComponentSearchButton > span > span > div > svg {
        opacity: 0 !important;
    }
    div#footer,
    ytd-guide-entry-renderer#header-entry,
    ytd-mini-guide-renderer.ytd-app {
        display: none !important;
    }

    ytd-button-renderer#sign-in-button {
        border-color: #167ac6 !important;
        background: #167ac6 !important;
    }
    ytd-button-renderer#sign-in-button:hover {
        background: #126db3 !important;
    }

    div#menu > ytd-menu-renderer {
        height: 34px;
    }
    ytd-menu-renderer like-button-view-model div.yt-spec-button-shape-next__button-text-content,
    ytd-menu-renderer dislike-button-view-model div.yt-spec-button-shape-next__button-text-content,
    ytd-menu-renderer button-view-model div.yt-spec-button-shape-next__button-text-content {
        font-size: 11px !important;
        font-weight: 600 !important;
        color: #888;
    }
    ytd-menu-renderer yt-button-view-model button-view-model button span span div {
        fill: #888 !important;
    }
    ytd-menu-renderer yt-button-view-model button-view-model button span.ytIconWrapperHost {
        width: 22px;
        height: 22px;
        margin-right: 4px;
    }

    snackbar-view-model {
        border-radius: 0px !important;
    }

    div#buttons > ytd-button-renderer > yt-button-shape > a > div.yt-spec-button-shape-next__icon {
        display: none !important;
    }
    div#buttons > ytd-button-renderer > yt-button-shape > a {
        height: 28px !important;
        max-height: 28px !important;
    }

    ytd-thumbnail ytd-thumbnail-overlay-time-status-renderer.ytd-thumbnail {
        margin: 2px !important;
        padding: 0px !important;
    }
    yt-thumbnail-overlay-badge-view-model {
        margin: 2px !important;
        padding: 0px !important;
    }
    .ytThumbnailBottomOverlayViewModelBadgeContainerLarge {
        padding: 0 2px 2px 0 !important;
    }
    badge-shape {
        height: 13px !important;
        border-radius: 2px !important;
    }
    badge-shape * {
        font-weight: 600;
        font-size: 11px;
    }

    .guide-icon.ytd-guide-entry-renderer {
        --iron-icon-height: 18px !important;
        --iron-icon-width: 18px !important;
        width: 18px !important;
        height: 18px !important;
    }

    ytd-subscription-notification-toggle-button-renderer-next span.ytIconWrapperHost {
        width: 16px !important;
    }

    top-banner-image-text-icon-buttoned-layout-view-model,
    square-image-layout-view-model,
    top-landscape-image-layout-view-model,
    ytd-in-feed-ad-layout-renderer,
    ytd-rich-item-renderer:has(ytd-ad-slot-renderer),
    ytd-rich-item-renderer:has(.badge-style-type-members-only),
    ytd-rich-item-renderer:has(badge-shape.yt-badge-shape--membership),
    div#big-yoodle,
    div#masthead-ad {
        display: none !important;
    }
    iron-selector > yt-chip-cloud-chip-renderer div {
        height: 24px !important;
        padding-top: 6px;
        padding-bottom: 4px;
    }

    ytd-guide-entry-renderer:not([active]):hover {
        background-color: #444 !important;
    }
    ytd-guide-entry-renderer:not([active]):hover *,
    div.immersive-header-content.ytd-playlist-header-renderer yt-formatted-string,
    div.immersive-header-content.ytd-playlist-header-renderer yt-formatted-string > a {
        color: white !important;
    }

    yt-icon-button#guide-button > button {
        border: 1px solid transparent;
        background: transparent !important;
        border-radius: 2px !important;
        width: 46px !important;
        height: 28px !important;
        transform: translate(-18px, -1px);
    }
    ytd-masthead:hover yt-icon-button#guide-button > button {
        border: 1px solid #d3d3d3 !important;
        background: #f8f8f8 !important;
        border-radius: 2px !important;
    }
    ytd-masthead[dark]:hover yt-icon-button#guide-button > button {
        border: 1px solid #2c2c2c !important;
        background: #070707 !important;
        border-radius: 2px !important;
    }

    yt-icon-button.ytd-notification-topbar-button-renderer,
    ytd-button-renderer.ytd-masthead > yt-button-shape > button {
        border: 1px solid #d3d3d3 !important;
        background: #f8f8f8 !important;
        border-radius: 2px !important;
        width: 48px !important;
        height: 28px !important;
        margin-left: 8px;
    }
    [dark] yt-icon-button.ytd-notification-topbar-button-renderer,
    [dark] ytd-button-renderer.ytd-masthead > yt-button-shape > button {
        border: 1px solid #2c2c2c !important;
        background: #070707 !important;
        border-radius: 2px !important;
        width: 48px !important;
        height: 28px !important;
        margin-left: 8px;
    }
    yt-icon-button.ytd-notification-topbar-button-renderer:hover,
    ytd-button-renderer.ytd-masthead > yt-button-shape > button:hover {
        box-shadow: 0 1px 0 rgba(0, 0, 0, 0.10);
        border: 1px solid #c6c6c6 !important;
        background: #f0f0f0 !important;
    }
    [dark] yt-icon-button.ytd-notification-topbar-button-renderer:hover,
    [dark] ytd-button-renderer.ytd-masthead > yt-button-shape > button:hover {
        box-shadow: 0 1px 0 rgba(255, 255, 255, 0.10);
        border: 1px solid #393939 !important;
        background: #0f0f0f !important;
    }
    yt-icon-button.ytd-notification-topbar-button-renderer yt-icon-badge-shape *:not([class="yt-spec-icon-badge-shape__badge"]),
    ytd-button-renderer.ytd-masthead > yt-button-shape div.yt-spec-button-shape-next__icon * {
        width: 20px !important;
        height: 20px !important;
    }
    ytd-button-renderer.ytd-masthead > yt-button-shape div.yt-spec-button-shape-next__icon {
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
        margin: 0px !important;
    }

    yt-icon-button#guide-button > button {
        display: flex;
        flex-direction: row;
        align-items: center;
        justify-content: center;
    }
    yt-icon-button#guide-button > button > yt-icon {
        width: 16px !important;
        height: 16px !important;
        background: no-repeat url(//web.archive.org/web/20150205041746im_/https://s.ytimg.com/yts/imgbin/www-hitchhiker-vflDkjvEN.png) -155px -124px;
    }
    yt-icon-button#guide-button > button > span.yt-uix-button-arrow {
        width: 0px;
        height: 0px;
        margin-left: 2px;

        border: 1px solid transparent;
        border-width: 3px 3px 0px;
        border-top-color: #e63127;
    }

    body:not(:has(tp-yt-app-drawer[opened])) yt-icon-button#guide-button > button > yt-icon {
        width: 16px !important;
        height: 16px !important;
        background: no-repeat url(//web.archive.org/web/20150205152942im_/https://s.ytimg.com/yts/imgbin/www-hitchhiker-vflDkjvEN.png) -62px -46px !important;
        filter: none !important;
    }
    body:not(:has(tp-yt-app-drawer[opened])) yt-icon-button#guide-button > button:hover > yt-icon {
        width: 16px !important;
        height: 16px !important;
        background: no-repeat url(//web.archive.org/web/20150205152942im_/https://s.ytimg.com/yts/imgbin/www-hitchhiker-vflDkjvEN.png) -401px -101px !important;
        filter: none !important;
    }
    body:not(:has(tp-yt-app-drawer[opened])) yt-icon-button#guide-button > button > span.yt-uix-button-arrow {
        width: 0px;
        height: 0px;
        margin-left: 2px;

        border: 1px solid transparent;
        border-width: 3px 3px 0px;
        border-top-color: #b8b8b8 !important;
    }
    body:not(:has(tp-yt-app-drawer[opened])) yt-icon-button#guide-button > button:hover > span.yt-uix-button-arrow {
        border-top-color: #666 !important;
    }

    yt-icon-button#guide-button > button > yt-icon > span > div {
        opacity: 0;
    }
    yt-icon-button#guide-button > button:hover {
        box-shadow: 0 1px 0 rgba(0, 0, 0, 0.10);
    }
    [dark] yt-icon-button#guide-button > button:hover {
        box-shadow: 0 1px 0 rgba(255, 255, 255, 0.10);
    }
    yt-icon-button#guide-button:hover,
    ytd-notification-topbar-button-renderer {
        background: transparent !important;
    }

    a.yt-lockup-metadata-view-model__title > span {
        font-size: 13px;
        font-weight: bold;
    }
    yt-lockup-view-model button-view-model.ytSpecButtonViewModelHost > button {
        width: 16px !important;
        height: 16px !important;
        background: transparent !important;
        transform: translate(-18px, 8px);
    }
    yt-thumbnail-view-model > yt-thumbnail-hover-overlay-toggle-actions-view-model {
        display: none !important;
    }

    button.ytSearchboxComponentSearchButton {
        width: 66px !important;
        border-radius: 2px !important;
        border-top-left-radius: 0px !important;
        border-bottom-left-radius: 0px !important;
        box-shadow: 0 1px 0 rgba(0, 0, 0, 0.05);
    }
    button.ytSearchboxComponentSearchButton:hover {
        border: 1px solid #c6c6c6 !important;
        border-left: 1px solid rgb(198, 198, 198) !important;
        background: #f0f0f0 !important;
        box-shadow: 0 1px 0 rgba(0, 0, 0, 0.10);
    }
    div.ytSearchboxComponentInputBox {
        width: 585px !important;
    }
    div.ytSuggestionComponentSuggestion {
        height: 32px !important;
        padding-left: 8px;
        padding-right: 8px;
        border-radius: 0px;
    }
    img.ytSuggestionComponentVisualSuggestThumbnail,
    div.ytSearchboxComponentYtdTextInputAssistantWrapper,
    div.ytSearchboxComponentClearButtonWrapper {
        display: none !important;
    }
    div#i0.ytSearchboxComponentSuggestionsContainer {
        transform: translateY(-14px) !important;
        width: 648px !important;
    }
    div.thumbnail-container:has(yt-img-shadow) {
        border-radius: 0px !important;
    }

    div.immersive-header-background-wrapper.ytd-playlist-header-renderer {
        background: #444 !important;
    }
    div.immersive-header-gradient.ytd-playlist-header-renderer {
        display: none;
    }
    yt-img-shadow.blurred-image.ytd-playlist-header-renderer * {
        display: none !important;
    }

    yt-thumbnail-overlay-progress-bar-view-model div.ytThumbnailOverlayProgressBarHostWatchedProgressBarSegment {
        background: #cc181e !important;
    }

    ytd-player button.ytp-fullscreen-grid-expand-button.ytp-button,
    ytd-player button.ytp-playlist-menu-button.ytp-button,
    ytd-player div.ytp-fullscreen-quick-actions,
    ytd-player div.ytp-left-controls div.ytp-chapter-container {
        display: none !important;
    }

    button.yt-uix-button-default {
        display: flex;
        align-items: center;
        justify-content: center;

        width: auto;
        height: 28px;
        padding: 0 10px;

        border-radius: 2px;
        border: 1px solid #d3d3d3;
        background: #f8f8f8;
        color: #333;

        font-family: Arial;
        font-size: 11px;
        font-weight: 600;

        user-select: none;
    }
    button.yt-uix-button-default:hover {
        border: 1px solid #c6c6c6;
        background: #f0f0f0;
        box-shadow: 0 1px 0 rgba(0, 0, 0, 0.10);
    }
    button.yt-uix-button-default:active {
        border: 1px solid #c6c6c6;
        background: #e9e9e9;
        box-shadow: inset 0 1px 0 #ddd;
    }
    button.yt-uix-button-default.yt-uix-load-more {
        order: 10000;
    }
    `);

        makeStyle(`
    #appbar-content {
        position: absolute;
        margin-left: 230px;
        top: 49px;
        width: calc(100% - 230px);
        height: 40px;
        background-color: white;
        border-top: 1px solid #e8e8e8;
        border-bottom: 1px solid #e8e8e8;
    }
    body:not(:has(tp-yt-app-drawer[opened])) #appbar-content {
        display: none !important;
    }
    [dark] #appbar-content {
        background-color: #0e0e0e;
        border-top: 1px solid var(--redux-spec-10-percent-layer);
        border-bottom: 1px solid var(--redux-spec-10-percent-layer);
    }
    #appbar-nav {
        min-width: 500px;
        text-align: center;
        -moz-transition: margin-top .1s;
        -webkit-transition: margin-top .1s;
        transition: margin-top .1s;
    }
    #appbar-nav .appbar-nav-menu {
        overflow: hidden;
        display: inline-block;
        vertical-align: top;
    }
    .appbar-nav-menu { list-style: none; }
    .appbar-nav-menu li {
        margin-left: 30px;
        display: inline-block;
    }
    .appbar-nav-menu li:first-child {
        margin-left: 0px;
    }
    .epic-nav-item-heading {
        height: 40px;
        line-height: 40px;
        border-bottom: 3px solid transparent;
        padding-bottom: 0;
    }
    .epic-nav-item-heading {
        cursor: pointer;
        text-decoration: none;
    }
    .epic-nav-item-heading[aria-selected="true"] {
        border-bottom: 3px solid #cc181e;
        color: #333;
    }
    .epic-nav-item-heading[aria-selected="false"] {
        font-weight: 400 !important;
        color: #666;
    }
    [dark] .epic-nav-item-heading[aria-selected="true"] {
        border-bottom: 3px solid #cc181e;
        color: #fff;
    }
    [dark] .epic-nav-item-heading[aria-selected="false"] {
        font-weight: 400 !important;
        color: #ccc;
    }
    #appbar-nav .epic-nav-item-heading {
        height: 40px;
        padding: 0;
        line-height: 40px;
        -moz-box-sizing: border-box;
        box-sizing: border-box;
    }
    .epic-nav-item-heading {
        color: #333;
        font-size: 12px;
        font-weight: bold;
    }
    `);

        if (
            location.pathname == "/" ||
            location.pathname == "/feed/history" ||
            location.pathname.startsWith("/watch")
        ) makeStyle(`
    ytd-feed-filter-chip-bar-renderer,
    yt-related-chip-cloud-renderer,
    div#panels.ytd-watch-flexy > ytd-engagement-panel-section-list-renderer,
    div#contents > ytd-channel-renderer,
    div#header > chip-bar-view-model {
        display: none !important;
    }
        `);

        if (location.pathname.startsWith("/watch")) makeStyle(`
    yt-lockup-metadata-view-model div.yt-lockup-metadata-view-model__menu-button {
        position: unset;
    }
    yt-lockup-metadata-view-model div.yt-lockup-metadata-view-model__menu-button button-view-model button {
        position: absolute;
        top: 4px;
        left: 100%;
        transform: translateX(calc(-100% - 4px));
    }
    div#related div#items .yt-lockup-view-model--vertical {
        flex-direction: row !important;
        height: 68px;
    }
    div#related div#items yt-lockup-view-model a.yt-lockup-view-model__content-image {
        width: 120px !important;
        height: 68px !important;
        min-width: 120px !important;
        margin-right: 8px;
    }
    div#related div#items yt-lockup-view-model yt-lockup-metadata-view-model div.yt-lockup-metadata-view-model__text-container {
        height: 68px !important;
    }
    div#related div#items yt-lockup-view-model div.yt-lockup-view-model__metadata {
        width: calc(100% - 14px) !important;
    }
    div#related div#items yt-lockup-view-model yt-lockup-metadata-view-model div.yt-content-metadata-view-model__metadata-row yt-badge-view-model {
        display: none !important;
    }
    ytd-watch-flexy {
        --ytd-watch-flexy-sidebar-width: 416px;
        --ytd-watch-flexy-sidebar-min-width: 416px;
    }

    div#related div#items yt-lockup-view-model:not(:last-child) {
        margin-bottom: 8px !important;
    }
    div#related div#show-more-related {
        margin-bottom: 8px;
    }
        `);

        if (location.pathname == "/feed/history") makeStyle(`
    div#page-header-container > div#page-header,
    #page-header-container.ytd-tabbed-page-header {
        background-color: transparent !important;
    }
    div#page-header-container {
        transform: translate(10px, -14px);
    }

    #contents.ytd-section-list-renderer {
        transform: translate(10px, -8px) !important;
        width: calc(100% - 32px) !important;
    }
    #contents.ytd-item-section-renderer {
        margin-top: 8px !important;
    }
    #contents yt-lockup-view-model,
    #contents yt-lockup-view-model > div,
    #contents ytd-video-renderer {
        height: 96px !important;
    }
    #contents > yt-lockup-view-model yt-thumbnail-view-model,
    #contents > yt-lockup-view-model a.yt-lockup-view-model__content-image,
    #contents > ytd-video-renderer ytd-thumbnail.ytd-video-renderer,
    #contents > ytd-video-renderer ytd-thumbnail.ytd-video-renderer a#thumbnail {
        height: 96px !important;
        width: 170px !important;
    }
    #contents > yt-lockup-view-model yt-thumbnail-view-model,
    #contents > yt-lockup-view-model a.yt-lockup-view-model__content-image {
        max-height: 0 !important;
        min-width: 0 !important;
    }
    #contents > ytd-video-renderer ytd-thumbnail.ytd-video-renderer,
    #contents > ytd-video-renderer ytd-thumbnail.ytd-video-renderer a#thumbnail {
        min-height: 0 !important;
        min-width: 0 !important;
    }
    #contents > ytd-video-renderer ytd-thumbnail.ytd-video-renderer a#thumbnail {
        margin-left: 0 !important;
        margin-right: 0 !important;
    }

    h3 > a#video-title {
        font-size: 13px !important;
        font-weight: bold !important;
    }
    div#text-container > yt-formatted-string > a {
        font-size: 12px !important;
    }
        `);

        if (location.pathname.startsWith("/playlist")) makeStyle(`
    #contents.ytd-section-list-renderer {
        transform: translate(10px, -8px) !important;
        width: calc(100% - 32px) !important;
    }
    #contents.ytd-item-section-renderer {
        margin-top: 8px !important;
    }
    #contents > ytd-playlist-video-renderer div#container ytd-thumbnail {
        height: 96px !important;
        width: 170px !important;
    }

    h3 > a#video-title {
        font-size: 13px !important;
        font-weight: bold !important;
    }
    div#text-container > yt-formatted-string > a {
        font-size: 12px !important;
    }
    `);

        if (location.pathname.startsWith("/results")) makeStyle(`
    ytd-search > div#container {
        width: 693px !important;
    }
    ytd-ad-slot-renderer,
    yt-collections-stack > div div[class*="ytCollectionsStack"],
    ytd-two-column-search-results-renderer > ytd-secondary-search-container-renderer {
        display: none !important;
    }
    #contents ytd-channel-renderer,
    #contents ytd-video-renderer {
        width: calc(100% - 8px) !important;
    }
    #contents ytd-video-renderer ytd-thumbnail {
        width: 196px !important;
        min-width: 0px !important;
        max-width: 196px !important;
        height: 110px !important;
    }

    h3 > a#video-title {
        font-size: 13px !important;
        font-weight: bold !important;
    }
    div#text-container > yt-formatted-string > a {
        font-size: 12px !important;
    }
    a#channel-thumbnail,
    ytd-search-header-renderer > div#chip-bar {
        display: none !important;
    }
    ytd-search {
        transform: translate(0px, 8px);
    }

    yt-lockup-view-model a.yt-lockup-view-model__content-image {
        width: 196px !important;
    }
    `);

    makeStyle(`
tubextend-header {
    font-family: Arial;
    font-size: 24px;
    font-weight: 600;
}
tubextend-header-small {
    font-family: Arial;
    font-size: 15px;
    font-weight: 600;
}
tubextend-font {
    font-family: Arial;
    font-size: 12px;
}
tubextend-font[bold] {
    font-weight: 600;
}
tubextend-font[gray] {
    color: #888;
}
tubextend-splitter {
    width: 100%;
    height: 1px;

    margin-top: 8px;
    margin-bottom: 8px;

    background-color: #ccc;
}

tubextend-modal {
    display: flex;
    align-items: center;
    justify-content: center;

    position: fixed;
    top: 0px;
    left: 0px;
    z-index: 5000;

    width: 100vw;
    height: 100vh;

    background-color: rgb(0, 0, 0, 0.25);
}
tubextend-modal-dialog {
    display: flex;
    align-items: left;
    justify-content: start;
    flex-direction: column;

    width: 520px;
    height: 640px;

    box-sizing: border-box;
    padding: 12px;

    background-color: white;
    box-shadow: 0px 0px 3px rgba(0, 0, 0, 0.5);
}

tubextend-container {
    display: flex;
    align-items: start;
    justify-content: start;
    flex-direction: column;

    width: 100%;
    height: 100%;

    box-sizing: border-box;
    padding: 5px;
}
tubextend-container > *:not(:last-child) {
    margin-bottom: 8px;
}

tubextend-div[direction="horizontal"] {
    display: flex;
    align-items: center;
    justify-content: start;
    flex-direction: row;
}
tubextend-div[direction="horizontal"] > *:not(:last-child) {
    margin-right: 8px;
}
tubextend-div[horizontal="end"] {
    justify-content: end !important;
}

tubextend-button {
    border: 1px solid #d3d3d3;
    background: #f8f8f8;
    color: #333;

    font-family: Arial;
    font-size: 12px;
    font-weight: 600;

    padding: 12px;
    padding-top: 6px;
    padding-bottom: 6px;

    border-radius: 2px;
    user-select: none;
}
tubextend-button:hover {
    border: 1px solid #c6c6c6;
    background: #f0f0f0;
    box-shadow: 0 1px 0 rgba(0, 0, 0, 0.10);
}
tubextend-button:active {
    border: 1px solid #c6c6c6;
    background: #e9e9e9;
    box-shadow: inset 0 1px 0 #ddd;
}
    `);
    }

    reloadStyle();
    var _poll = location.href;
    setInterval(() => {
        if (_poll != location.href) {
            _poll = location.href;
            clearEverything();
            reloadStyle();
            setTimeout(createAppbar, 0);
        }
        if (yt != null) {
            yt.config_.EXPERIMENT_FLAGS.delhi_modern_web_player_icons = false;
            yt.config_.EXPERIMENT_FLAGS.enable_web_delhi_icons = false;
            yt.config_.EXPERIMENT_FLAGS.delhi_web_player_use_external_playlist_panel = false;
        }
    }, 2);

    setupValues();
    GM_registerMenuCommand("Open Tubextend Settings", openSettings);

    setTimeout(changeSidebar, 0);
    setTimeout(changeMastheadButtonOrder, 0);
    setTimeout(tweakGuideButton, 0);
    setTimeout(tweakAccentColor, 0);
    setTimeout(createAppbar, 0);
    createIcon(head);
})();