您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Adds a dark mode toggle to Rubiks.AI, with persistent preference, tailored to specific image elements.
// ==UserScript== // @name Rubiks AI Dark Mode // @namespace http://tampermonkey.net/ // @version 1.1 // @description Adds a dark mode toggle to Rubiks.AI, with persistent preference, tailored to specific image elements. // @author YouTubeDrawaria // @match https://*.rubiks.ai/* // @icon https://img.freepik.com/free-vector/like-button-thumbs-up-cartoon-style_78370-1159.jpg // @license MIT // @grant GM_addStyle // ==/UserScript== (function() { 'use strict'; const DARK_MODE_CLASS = 'dark-mode'; const STORAGE_KEY = 'rubiksAIDarkMode'; // 1. Dark Mode CSS // This CSS selectively overrides the existing styles for dark mode. // Tailwind-like classes with special characters like [] and / need to be escaped in CSS. // For example, `bg-[#f4f4f4]` becomes `bg-\\[\\#f4f4f4\\]` in the JS string literal. // `bg-black/50` becomes `bg-black\\/50`. const darkModeCss = ` /* General Dark Mode Variables & Body Background */ body.dark-mode { --primary-colour: #5E9BFF; /* Lighter blue for better contrast in dark mode */ --text-colour: #E0E0E0; --placeholder-colour: #A0A0A0; --background-colour: #1A1A1A; --border-colour: #333333; --hover-colour: #3A3A3A; --footer-text-colour: #777777; --footer-text-hover-colour: #BBBBBB; background: #121212 !important; /* Main app background as per image */ } /* Core Layout Components */ body.dark-mode .navbar { background-color: #222222; border-bottom-color: #333333; } body.dark-mode .title { color: #B0B0B0; } body.dark-mode .sidebar { background: #222222; border-right-color: #333333; } body.dark-mode .content { background: #1C1C1C; /* Main content area background */ } /* "Rubik's AI" Logo Text */ body.dark-mode .logo { color: var(--text-colour); /* Make the logo text white as requested */ } /* "Get 1-Month Free Premium" Button - Requires specific HTML to target reliably. This element is not covered by the provided CSS classes and exact HTML is unknown. If it's a general button, its appearance might be influenced by default browser styles or other scripts. You might need to inspect its HTML in your browser to find a unique class/ID for precise targeting. Example (if it had a class like 'premium-promo-button'): body.dark-mode .premium-promo-button { background-color: #2D2D2D; color: var(--text-colour); border-color: #4A4A4A; } */ /* "Auto" Dropdown Button Text */ body.dark-mode .button-container .text-primary { color: white !important; /* Make "Auto" text white as requested */ } /* "Auto" button border, if any */ body.dark-mode .button-container button.dropdown-toggle { border-color: #4A4A4A; /* Adjust border color for dark mode */ } body.dark-mode .button-container button.dropdown-toggle:hover { background-color: #3A3A3A; /* Adjust hover state */ } /* Send Button (Blue Arrow) */ body.dark-mode .submit { background: var(--primary-colour) !important; /* Make button the dark mode primary blue */ } /* SVG within submit button already has inline color: white from HTML */ body.dark-mode .submit.active { background: #4A8AE6 !important; /* Slightly different shade when active */ } /* General Chat Bubbles / Output Area */ body.dark-mode * { scrollbar-color: #4A4A4A transparent; } body.dark-mode .text-token-text-primary { color: var(--text-colour); } body.dark-mode .text-token-link { color: var(--primary-colour); } /* Image Grids/Carousels */ body.dark-mode .border-token-border-light { border-color: rgba(255, 255, 255, 0.1); } body.dark-mode .bg-token-main-surface-tertiary { background-color: #3A3A3A; } body.dark-mode .bg-black\\/50 { /* For the "more images" overlay button */ background-color: rgba(255, 255, 255, 0.2); } body.dark-mode .text-white { /* Text on "more images" button */ color: #E0E0E0; } body.dark-mode .hover\\:bg-black\\/80:hover { background-color: rgba(255, 255, 255, 0.3); } body.dark-mode .bg-black\\/95 { /* Fullscreen image viewer background */ background-color: rgba(0, 0, 0, 0.95); /* Keep very dark for image popups */ } body.dark-mode .text-token-text-tertiary, body.dark-mode .text-gray-400 { color: #A0A0A0; } /* Bottom Result Cards (e.g., related searches) */ body.dark-mode .result { background: #2D2D2D; } body.dark-mode .result:hover { background: #3A3A3A; } body.dark-mode .resultheading { color: #E0E0E0; } body.dark-mode .resulttitle { color: #A0A0A0; } /* Skeleton Loading States */ body.dark-mode .skeleton-line { background: linear-gradient(90deg, #3A3A3A, #4A4A4A, #3A3A3A); } /* Follow-up Questions */ body.dark-mode .bg-\\[\\#f4f4f4\\] { /* Tailwind class for followup questions */ background-color: #2D2D2D; color: var(--text-colour); } /* "In the Grey" sections (main app layout) */ body.dark-mode .sidebar { background: #1C1C1C; } body.dark-mode .content { background: #222222; } /* Navbar specific styles (from second 'NavBar' section in original CSS) */ body.dark-mode .border-borderMain\\/60 { border-color: #333333; } body.dark-mode .divide-borderMain\\/60 { border-color: #333333; } body.dark-mode .ring-borderMain { --tw-ring-color: #333333; } body.dark-mode .text-textMain { color: var(--text-colour); } body.dark-mode .text-textOff { color: #A0A0A0; } body.dark-mode .md\\:hover\\:text-textOff:hover { color: #D0D0D0 !important; } body.dark-mode .md\\:hover\\:bg-offsetPlus:hover { background-color: #3A3A3A !important; } body.dark-mode .bg-background { /* Navbar background */ background: #222222; } /* Bottom Chat Buttons (model selection etc.) */ body.dark-mode .text-token-text-secondary { color: #A0A0A0; } body.dark-mode .hover\\:bg-token-main-surface-secondary:hover { background: #3A3A3A; } body.dark-mode .modelname { color: var(--text-colour); } body.dark-mode .hover\\:bg-token-main-surface-secondary:hover .modelname { color: var(--text-colour); } /* Sidebar Navigation Items (e.g., "Getting Started") */ body.dark-mode .getting-started-dialog-contents { background: #1C1C1C; } body.dark-mode .getting-started-dialog-navigation-button { color: #E0E0E0; } body.dark-mode .getting-started-dialog-navigation-button-selected:not(.getting-started-dialog-navigation-button-disabled), body.dark-mode .getting-started-dialog-navigation-button-selected:not(.getting-started-dialog-navigation-button-disabled) .iconSVG { color: var(--primary-colour); fill: var(--primary-colour); } body.dark-mode .getting-started-dialog-navigation-button-selected:not(.getting-started-dialog-navigation-button-disabled) .getting-started-dialog-navigation-button-icon { background: #3A3A3A; } body.dark-mode .getting-started-dialog-navigation-button:not(.getting-started-dialog-navigation-button-selected):hover .getting-started-dialog-navigation-button-icon { background: #333333; } /* Tables within output */ body.dark-mode .output table, body.dark-mode .output th, body.dark-mode .output td { border: 1px solid #444444; } body.dark-mode .output thead tr:first-child { background-color: #333333; color: var(--text-colour); } /* Code Blocks */ body.dark-mode codeblock-header > svg { background-color: #555555; color: #E0E0E0; } body.dark-mode .code { background-color: #2D2D2D; } body.dark-mode code { background-color: #3A3A3A; color: #E0E0E0; } body.dark-mode code.inline { color: var(--text-colour); background: #3A3A3A !important; } body.dark-mode code:not([class]) { color: var(--text-colour); background-color: #3A3A3A !important; } /* Highlight.js theme overrides for code syntax highlighting */ body.dark-mode .hljs{color:#E0E0E0;background:#333333;} body.dark-mode .hljs-keyword,.hljs-link,.hljs-literal,.hljs-section,.hljs-selector-tag{color:#E0E0E0;} body.dark-mode .hljs-addition,.hljs-attribute,.hljs-built_in,.hljs-bullet,.hljs-name,.hljs-string,.hljs-symbol,.hljs-template-tag,.hljs-template-variable,.hljs-title,.hljs-type,.hljs-variable{color:#FFA0A0;} /* Lighter red/orange for contrast */ body.dark-mode .hljs-comment,.hljs-deletion,.hljs-meta,.hljs-quote{color:#909090;} body.dark-mode .hljs-doctag,.hljs-keyword,.hljs-literal,.hljs-name,.hljs-section,.hljs-selector-tag,.hljs-strong,.hljs-title,.hljs-type{font-weight:700;} body.dark-mode .hljs-emphasis{font-style:italic;} body.dark-mode .hljs-string { color: rgb(153, 204, 153); } body.dark-mode .hljs-built_in { color: rgb(204, 153, 204); } /* Dropdown Menus (e.g., model selection) */ body.dark-mode #semo { background: #2D2D2D; border-color: #444444; box-shadow: rgba(0, 0, 0, 0.3) 0px 2px 4px; } body.dark-mode .selectbtn { color: var(--text-colour); } body.dark-mode .selectbtn:hover { background: #3A3A3A !important; } body.dark-mode .selectbtn.active { background: #3A3A3A; } body.dark-mode .selectbtn.active .activeb { color: var(--primary-colour); } body.dark-mode .activeb { color: var(--text-colour); } /* Mobile Navigation Bar */ @media (max-width: 768px) { body.dark-mode .mnav { background: #222222; border-top-color: #333333; } } /* Copilot / Deep Search Interface */ body.dark-mode .segment-assistant[data-v-b80c1281] .segment-content { background-color: #1C1C1C; } body.dark-mode .k1-research[data-v-3730e423] { --bg: linear-gradient(180deg, #2D2D2D 21.69%, #1C1C1C 100%); --done-bg: #2D2D2D; /* Update SVG background for done icon with new primary color and background for checkmark */ --show-finish-icon: url('data:image/svg+xml,%3csvg%20xmlns=%27http://www.w3.org/2000/svg%27%20width=%2740%27%20height=%2740%27%20fill=%27none%27%3e%3ccircle%20cx=%2720%27%20cy=%2720%27%20r=%2715%27%20fill=%27%235E9BFF%27/%3e%3cpath%20fill=%27%231A1A1A%27%20d=%27M18%2025.2l-5.6-5.6a.94.94%200%200%201%200-1.34l1.34-1.34a.94.94%200%200%201%201.34%200l3.9%203.9%208.4-8.4a.94.94%200%200%201%201.34%200l1.34%201.34a.94.94%200%200%201%200%201.34L18%2025.2Z%27/%3e%3c/svg%3e'); /* Larger SVG if needed, adjust path and fill */ } body.dark-mode .k1-research-title[data-v-3730e423] { color: var(--text-colour); } body.dark-mode .researchItem[data-v-86b76042] { --title-bg-hover: #3A3A3A; --done-icon: var(--primary-colour); --empty-icon: #555555; --target-bg: #3A3A3A; --target-color: #D0D0D0; --target-bg-hover: #4A4A4A; --loading-text: #888888; --loading-block: #E0E0E0; --line-bg: linear-gradient(180deg, #555555 0%, rgba(85, 85, 85, .2) 100%); --expand-text-color: #888888; --expand-text-hover-color: #E0E0E0; --tag-color: var(--primary-colour); --tag-bg-color: rgba(94, 155, 255, .2); --caret-bg: #A0A0A0; } body.dark-mode .researchItem-status-icon[data-v-86b76042]:before { background-color: var(--done-icon); } body.dark-mode .researchItem-status.is-done .researchItem-status-icon[data-v-86b76042]:before { /* Updated SVG for active icon: blue circle, dark checkmark */ background: url("data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='16'%20height='16'%20fill='none'%3e%3ccircle%20cx=%278%27%20cy=%278%27%20r=%275%27%20fill=%27%235E9BFF%27/%3e%3cpath%20fill=%27%23222222%27%20d=%27m7.279%209.79-1.6-1.6a.266.266%200%200%201%200-.378l.377-.377a.266.266%200%200%201%20.377%200l1.034%201.034%202.368-2.367a.266.266%200%200%201%20.377%200l.377.377a.266.266%200%200%201%200%20.377L7.656%209.789a.266.266%200%200%201-.377%200Z%27/%3e%3c/svg%3e") no-repeat center center; } body.dark-mode .researchItem-status[data-v-86b76042]:after { background: var(--line-bg); } body.dark-mode .researchItem-status.is-done[data-v-86b76042]:after { background: var(--empty-icon); } body.dark-mode .researchItem-summary-text[data-v-86b76042] { color: var(--text-colour); } body.dark-mode .researchItem-summary-action[data-v-86b76042] { background-color: var(--caret-bg); /* Updated SVG mask for caret icon: dark grey fill */ -webkit-mask: url("data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='20'%20height='20'%20fill='none'%3e%3cpath%20fill='%23A0A0A0'%20fill-rule='evenodd'%20d='M6.01%207.7944a.595.595%200%200%201%20.8414%200l3.1493%203.1493L13.15%207.7944a.595.595%200%201%201%20.8414.8414l-3.57%203.57a.595.595%200%200%201-.8414%200l-3.57-3.57a.595.595%200%200%201%200-.8414Z'%20clip-rule='evenodd'%20opacity='.7'/%3e%3c/svg%3e") no-repeat center center; mask: url("data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='20'%20height='20'%20fill='none'%3e%3cpath%20fill='%23A0A0A0'%20fill-rule='evenodd'%20d='M6.01%207.7944a.595.595%200%200%201%20.8414%200l3.1493%203.1493L13.15%207.7944a.595.595%200%201%201%20.8414.8414l-3.57%203.57a.595.595%200%200%201-.8414%200l-3.57-3.57a.595.595%200%200%201%200-.8414Z'%20clip-rule='evenodd'%20opacity='.7'/%3e%3c/svg%3e") no-repeat center center; } body.dark-mode .researchItem-target-item[data-v-86b76042] { background: var(--target-bg); color: var(--target-color); } body.dark-mode .researchItem-target-item[data-v-86b76042]:hover { background-color: var(--target-bg-hover); } body.dark-mode .researchItem-target-item.has-search-icon[data-v-86b76042]:before { /* Updated SVG mask for search icon: dark grey stroke */ -webkit-mask: url("data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='14'%20height='14'%20fill='none'%3e%3cpath%20stroke='%23A0A0A0'%20stroke-linecap='round'%20stroke-linejoin='round'%20stroke-width='1.167'%20d='m8.102%208.102%203.273%203.273M5.833%209.042a3.208%203.208%200%201%200%200-6.417%203.208%203.208%200%200%200%200%206.417Z'/%3e%3c/svg%3e") no-repeat center center; mask: url("data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20width='14'%20height='14'%20fill='none'%3e%3cpath%20stroke='%23A0A0A0'%20stroke-linecap='round'%20stroke-linejoin='round'%20stroke-width='1.167'%20d='m8.102%208.102%203.273%203.273M5.833%209.042a3.208%203.208%200%201%200%200-6.417%203.208%203.208%200%200%200%200%206.417Z'/%3e%3c/svg%3e") no-repeat center center; } body.dark-mode .researchItem-text[data-v-86b76042] { --text-primary: var(--text-colour); } body.dark-mode :root .markdown[data-v-53cd9be5] { --table-border-color: #444444; --table-header-bg: #333333; --text-tertiary: #A0A0A0; } body.dark-mode .markdown { color: var(--text-colour); } body.dark-mode .researchItem-result-item[data-v-86b76042] { background: var(--target-bg); color: var(--target-color); } body.dark-mode .researchItem-result-item[data-v-86b76042]:hover { background-color: var(--target-bg-hover); } /* Deep Search specific elements */ body.dark-mode .r-x572qd { /* Background for deep search container */ background-color: #2D2D2D; } body.dark-mode .r-1hmrgzh { /* Chevron color */ color: #A0A0A0; } body.dark-mode .r-14j79pv { /* Text in deep search items */ color: #D0D0D0; } body.dark-mode .r-j0xqu1 { /* Spinner/line color */ color: #555555; } body.dark-mode .r-1bimlpy { /* Vertical line in deep search */ background-color: #555555; } body.dark-mode .r-1soe94j { /* Small square icon */ background-color: #A0A0A0; } body.dark-mode a.css-175oi2r.r-18kxxzh.r-1wbh5a2.r-dnmrzs.r-1udh08x.r-1udbk01.r-1loqt21.r-1ny4l3l { color: var(--text-colour); /* Ensure links are visible */ } body.dark-mode a.css-1jxf684.r-bcqeeo.r-1ttztb7.r-qvutc0.r-poiln3.r-1loqt21 { color: var(--primary-colour); /* Ensure links are visible */ } body.dark-mode .thinkingText { border-left-color: #555555; color: #D0D0D0; background-color: #2D2D2D; } /* Pricing Modal */ body.dark-mode .s4d5f6 { /* modal-overlay */ background-color: rgba(0, 0, 0, 0.85); } body.dark-mode .k1l2m3 { /* modal-content */ background-color: #1C1C1C; color: var(--text-colour); } body.dark-mode .n4p5q6:hover { background-color: #3A3A3A; } body.dark-mode .n4p5q6 svg { stroke: #A0A0A0; } body.dark-mode .n4p5q6:hover svg { stroke: var(--text-colour); } body.dark-mode .r7s8t9 { color: var(--text-colour); } body.dark-mode .u1v2w3 { /* pricing-card */ background-color: #2D2D2D; box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.3), 0 4px 6px -2px rgba(0, 0, 0, 0.15); } body.dark-mode .u1v2w3.x4y5z6 { /* pricing-card.featured */ border-color: var(--primary-colour); } body.dark-mode .k7l8m9 { /* plan-name */ color: var(--text-colour); } body.dark-mode .n1p2q3 { /* price */ color: var(--primary-colour); } body.dark-mode .r4s5t6 { /* section-title */ color: #A0A0A0; } body.dark-mode .u7v8w9 { /* popular-badge */ color: #D0D0D0; background-color: #3A3A3A; border-color: #4A4A4A; } body.dark-mode .x1y2z3 { /* cta-button */ background-color: var(--primary-colour); color: #1A1A1A; /* Dark text on primary button */ } body.dark-mode .x1y2z3:hover:not(:disabled) { background-color: #4A8AE6; /* Slightly lighter primary on hover */ } body.dark-mode .c4d5e6, .f7g8h9, .j1k2l3 { /* model-item, feature-item, included-features */ color: var(--text-colour); } body.dark-mode .q7r8s9, .j1k2l3 span { color: var(--text-colour); } body.dark-mode .t1u2v3, .w4x5y6 { color: #A0A0A0; } body.dark-mode .t1u2v3.z7a8b9 { color: #FFB080; /* Darker orange for exclusive */ } body.dark-mode .o9p1q2 { /* feature-icon */ color: #A0A0A0; } `; // Inject the dark mode CSS into the page GM_addStyle(darkModeCss); /** * Toggles the dark mode class on the body and saves the preference. * @param {boolean} isDark - True to enable dark mode, false to disable. */ function setDarkMode(isDark) { if (isDark) { document.body.classList.add(DARK_MODE_CLASS); localStorage.setItem(STORAGE_KEY, 'dark'); } else { document.body.classList.remove(DARK_MODE_CLASS); localStorage.setItem(STORAGE_KEY, 'light'); } // Update the icon appearance immediately updateToggleButtonIcon(); } /** * Updates the moon/sun icon based on the current dark mode state. */ function updateToggleButtonIcon() { const toggleButton = document.getElementById('rubiks-ai-dark-mode-toggle'); if (!toggleButton) return; const isDark = document.body.classList.contains(DARK_MODE_CLASS); const svgPath = toggleButton.querySelector('path'); const visuallyHiddenSpan = toggleButton.querySelector('.visually-hidden'); if (isDark) { svgPath.setAttribute('d', 'M12 3v1m0 16v1m9-9h1M3 12h1m1.83-5.07l.7-.7a1 1 0 0 1 1.41 0l.7.7a1 1 0 0 1 0 1.41l-.7.7a1 1 0 0 1-1.41 0l-.7-.7a1 1 0 0 1 0-1.41zM18.17 18.17l-.7.7a1 1 0 0 1-1.41 0l-.7-.7a1 1 0 0 1 0-1.41l.7-.7a1 1 0 0 1 1.41 0l.7.7a1 1 0 0 1 0 1.41zM4.93 18.17l.7-.7a1 1 0 0 0 0-1.41l-.7-.7a1 1 0 0 0-1.41 0l-.7.7a1 1 0 0 0 0 1.41l.7.7a1 1 0 0 0 1.41 0zM19.07 4.93l-.7-.7a1 1 0 0 0-1.41 0l-.7.7a1 1 0 0 0 0 1.41l.7.7a1 1 0 0 0 1.41 0l.7-.7a1 1 0 0 0 0-1.41z'); // Sun icon svgPath.setAttribute('fill', '#E0E0E0'); svgPath.setAttribute('stroke', '#E0E0E0'); visuallyHiddenSpan.textContent = 'Toggle Light Mode'; } else { svgPath.setAttribute('d', 'M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z'); // Moon icon svgPath.setAttribute('fill', 'none'); svgPath.setAttribute('stroke', '#9B9B9B'); visuallyHiddenSpan.textContent = 'Toggle Dark Mode'; } } /** * Adds the dark mode toggle button to the UI. * It tries to find the sidebar first, then the mobile navigation bar. */ function addToggleButton() { if (document.getElementById('rubiks-ai-dark-mode-toggle')) { // Button already exists return; } let targetContainer = document.querySelector('.sidebar .icon-container'); if (!targetContainer) { // Fallback for mobile or if .icon-container is not present targetContainer = document.querySelector('.mnav'); } if (!targetContainer) { targetContainer = document.querySelector('.sidebar'); } if (targetContainer) { const toggleButton = document.createElement('div'); toggleButton.id = 'rubiks-ai-dark-mode-toggle'; // Add an ID for easy lookup toggleButton.classList.add('sicon'); // Re-use existing styling toggleButton.style.cursor = 'pointer'; toggleButton.style.marginTop = '20px'; // Add some space // SVG for the icon (will be updated by updateToggleButtonIcon) toggleButton.innerHTML = ` <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path></path> </svg> <span class="visually-hidden"></span> `; toggleButton.addEventListener('click', () => { const isDark = document.body.classList.contains(DARK_MODE_CLASS); setDarkMode(!isDark); }); targetContainer.appendChild(toggleButton); updateToggleButtonIcon(); // Initial update of the icon // Observe changes to the body's class attribute to keep the icon in sync // (e.g., if another script or dev tools change the mode) const observer = new MutationObserver(updateToggleButtonIcon); observer.observe(document.body, { attributes: true, attributeFilter: ['class'] }); } else { console.warn('Rubiks AI Dark Mode: Could not find a suitable container (.sidebar .icon-container, .mnav, or .sidebar) to add the dark mode toggle.'); } } // Apply saved preference on page load const savedMode = localStorage.getItem(STORAGE_KEY); if (savedMode === 'dark') { setDarkMode(true); } else if (savedMode === null && window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) { // If no preference saved, check system preference and apply dark mode if system prefers it setDarkMode(true); } else { // Default to light mode if no preference or explicitly set to light setDarkMode(false); } // Use a MutationObserver to ensure the button is added once the target element is available const observer = new MutationObserver((mutationsList, observer) => { const sidebar = document.querySelector('.sidebar'); const mnav = document.querySelector('.mnav'); if (sidebar || mnav) { addToggleButton(); observer.disconnect(); // Stop observing once the button is added } }); // Start observing the body for child list changes (new elements being added) observer.observe(document.body, { childList: true, subtree: true }); // Also try adding on load event as a fallback for simpler pages window.addEventListener('load', addToggleButton); })();