Shredsauce dark Theme

All-black dark theme for Shredsauce website by Gheat – Combined Menu with collapsible Tools, SLVSH, and Settings HUD

// ==UserScript==
// @name         Shredsauce dark Theme
// @namespace    stylish
// @version      1.9.0
// @description  All-black dark theme for Shredsauce website by Gheat – Combined Menu with collapsible Tools, SLVSH, and Settings HUD
// @include      *://shredsauce.com/*
// @include      *://suikagame.io/shredsauce/*
// @run-at       document-start
// @grant        GM_xmlhttpRequest
// @license      All Rights Reserved
// ==/UserScript==

(function() {
  const style = document.createElement('style');
  style.innerText = `
    body, html { background-color: #000 !important; color: #fff !important; }
    mobileContainer, #webContainer, .scroll-section, .carousel, .navbar, footer, #contentContainer, #playerContainerOverlay {
      background-color: #000 !important; color: #fff !important;
    }
    button, .btn, .flickity-button, .playButton, #playButton { background-color: #333 !important; color: #fff !important; border: 1px solid #555 !important; }
    button:hover, .btn:hover, .flickity-button:hover, .playButton:hover, #playButton:hover { background-color: #444 !important; }
    .navbar, .navbar nav ul li a, .social-icons a, .dropdown-content a, .logoContainer img, .videoOverlayLogo { filter: brightness(0) invert(1) !important; }
    #playContainerInfoBox, .updateTitle, .text, .leaderboardContainer, .skyscraperContainer, .pull-right, .clearfix { background-color: #000 !important; color: #fff !important; }
    img, video, .carousel img, .flickity-button svg, .videoOverlayLogo { filter: brightness(0.8) !important; }
    #playIcon path { fill: #fff !important; }
    a, a:link, a:visited { color: #66ccff !important; } a:hover { color: #00aaff !important; }
    [class*="ad"], .ad-container, #div-gpt-ad, .banner-ad, .myAds { display: none !important; }
    *:not(#gheat-menu):not(#slvsh-hud):not(#gheat-tools-popup):not(#gheat-menu-sections):not(#gheat-tools-section):not(#gheat-slvsh-section):not(#gheat-settings-hud):not(#webContainer):not(.scroll-section):not(#playerContainerOverlay):not(.navbar):not(footer):not(#contentContainer):not(body):not(html) {
      background-color: transparent !important;
    }
    #gheat-message {
      position: fixed; bottom: 10px; right: 20px; font-size: 12px; color: #aaa; font-family: monospace; z-index: 99999;
    }
    #leaderboardContainer, #skyscraperContainer,
    div[class*="8p7p6pdb282"] { display: none !important; }
  `;
  document.head.appendChild(style);

  // Delete unwanted elements
  window.addEventListener('load', () => {
    const msg = document.createElement('div');
    msg.id = 'gheat-message';
    msg.innerText = 'https://sites.google.com/view/shredhub/home - Gheat';
    document.body.appendChild(msg);
    const allowedIds = [
      'webContainer', 'mobileContainer', 'gheat-message', 'gheat-menu',
      'gheat-menu-header', 'gheat-menu-sections',
      'gheat-tools-popup', 'gheat-tools-section', 'gheat-slvsh-section',
      'gheat-settings-hud',
      'slvsh-hud', 'slvsh-p1-bg', 'slvsh-p2-bg',
      'butta-edit', 'butta-video'
    ];
    function nukeUnwanted() {
      Array.from(document.body.children).forEach(el => {
        if (!allowedIds.includes(el.id)) { el.remove(); }
      });
    }
    setTimeout(() => {
      allowedIds.push('gheat-menu');
      nukeUnwanted();
      const observer = new MutationObserver(() => { nukeUnwanted(); });
      observer.observe(document.body, { childList: true, subtree: true });
    }, 2500);
  });
})();

// Update theme message and YouTube section
window.addEventListener('load', () => {
  const titleDiv = document.querySelector('.updateTitle');
  if (titleDiv) titleDiv.textContent = '';
  const msgContainer = document.querySelector('.text');
  if (msgContainer) {
    msgContainer.innerHTML = `
      <em>sites.google.com/view/shredhub</em><br>
      <em>April 6 2025</em><br><br>
      Thank you for using my theme<br><br>
      - Gheat
    `;
    const ytSection = document.createElement('div');
    ytSection.id = 'butta-edit';
    ytSection.style.marginTop = '30px';
    ytSection.style.textAlign = 'center';
    ytSection.style.color = '#fff';
    ytSection.style.fontFamily = 'Arial, sans-serif';
    ytSection.innerHTML = `
      <h2 style="margin-bottom: 10px; font-size: 16px; text-align: left;">Butta Park shredsauce edit by Gheat</h2>
      <div style="width: 520px; height: 292px; margin-right: auto;">
        <iframe id="butta-video" width="520" height="292"
          src="https://www.youtube.com/embed/moFxyVw-L78"
          title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write;
          encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
      </div>
    `;
    msgContainer.appendChild(ytSection);
  }
});

// Replace video
window.addEventListener('load', () => {
  const video = document.querySelector('video.video');
  const source = video ? video.querySelector('source') : null;
  if (source) { source.src = 'https://files.catbox.moe/nmgerh.mp4'; video.load(); }
});

///////////////////////////////////////////////////////////////////
//////////////////////////Gheat Menu///////////////////////////////
///////////////////////////////////////////////////////////////////
window.addEventListener('load', () => {
  // Main Menu container
  const menu = document.createElement('div');
  menu.id = 'gheat-menu';
  Object.assign(menu.style, {
    position: 'fixed',
    top: '50%',
    right: '20px',
    transform: 'translate(100%, -50%)',
    color: 'white',
    fontFamily: 'Arial, sans-serif',
    padding: '20px',
    borderRadius: '16px',
    zIndex: '99999',
    textAlign: 'center',
    width: 'max-content',
    background: 'rgba(255, 255, 255, 0.1)',
    backdropFilter: 'blur(12px) saturate(140%)',
    WebkitBackdropFilter: 'blur(12px) saturate(140%)',
    boxShadow: '0 4px 20px rgba(0, 0, 0, 0.2)',
    border: '1px solid rgba(255,255,255,0.1)',
    opacity: '0',
    transition: 'opacity 0.5s ease, transform 0.5s ease'
  });
  setTimeout(() => {
    menu.style.opacity = '1';
    menu.style.transform = 'translate(0, -50%)';
  }, 300);
  document.body.appendChild(menu);

  // Content wrapper for fading inner content
  const contentWrapper = document.createElement('div');
  contentWrapper.style.opacity = '0';
  contentWrapper.style.transition = 'opacity 0.4s ease';
  menu.appendChild(contentWrapper);
  setTimeout(() => { contentWrapper.style.opacity = '1'; }, 200);

  // Main Menu header with buttons and container for sub panels
  contentWrapper.innerHTML = `
    <div id="gheat-menu-header" style="display: flex; flex-direction: column; align-items: center; width: 100%;">
      <div style="font-weight: bold; font-size: 16px; margin-bottom: 12px;">✦ Gheat Menu ✦</div>
      <div class="menu-item" style="margin: 5px 0; width: 100%; text-align: center;">
        <button id="cheatBtn" style="padding: 6px 12px; width: 140px; border: none; border-radius: 6px; background: #444; color: white; cursor: pointer;">
          Cheat Sheet
        </button>
      </div>
      <div class="menu-item" style="margin: 5px 0; width: 100%; text-align: center;">
        <button id="toolsBtn" style="padding: 6px 12px; width: 140px; border: none; border-radius: 6px; background: #444; color: white; cursor: pointer;">
          Tools
        </button>
        <div id="gheat-tools-section" style="
          display: none;
          flex-direction: column;
          align-items: center;
          opacity: 0;
          transform: translateY(-10px);
          transition: opacity 0.3s ease, transform 0.3s ease;
          margin-top: 5px;
          width: 100%;
          text-align: center;
        ">
          <div style="font-weight: bold; font-size: 16px; margin-bottom: 8px;">✦ Tools ✦</div>
          <div style="display: flex; flex-direction: column; align-items: center; gap: 10px;">
            <button id="btnCustomTextures" style="padding: 6px 12px; width: 140px; border: none; border-radius: 6px; background: #444; color: white; cursor: pointer;">
              Custom Textures Extension
            </button>
            <button id="btnIsItDown" style="padding: 6px 12px; width: 140px; border: none; border-radius: 6px; background: #444; color: white; cursor: pointer;">
              Checking...
            </button>
            <button id="btnBeta" style="padding: 6px 12px; width: 140px; border: none; border-radius: 6px; background: #444; color: white; cursor: pointer;">
              Beta
            </button>
            <button id="btnSettings" style="padding: 6px 12px; width: 140px; border: none; border-radius: 6px; background: #444; color: white; cursor: pointer;">
              Settings
            </button>
          </div>
        </div>
      </div>
      <div class="menu-item" style="margin: 5px 0; width: 100%; text-align: center;">
        <button id="slvshBtn" style="padding: 6px 12px; width: 140px; border: none; border-radius: 6px; background: #444; color: white; cursor: pointer;">
          SLVSH
        </button>
        <div id="gheat-slvsh-section" style="
          display: none;
          opacity: 0;
          transform: translateY(-10px);
          transition: opacity 0.3s ease, transform 0.3s ease;
          margin-top: 5px;
          width: 100%;
          text-align: center;
        ">
          <div style="font-weight: bold; font-size: 16px; margin-bottom: 8px;">✦ Slvsh Cup ✦</div>
          <div style="margin-bottom: 8px;"><strong>Skier 1 - </strong><span id="p1Letters"></span></div>
          <div style="margin-bottom: 8px;"><strong>Skier 2 - </strong><span id="p2Letters"></span></div>
          <div style="margin-bottom: 8px; display: flex; gap: 4px; justify-content: center;">
            <button id="slvshBtnPlus1" style="padding:4px 8px; border:none; border-radius:4px; background:#555; color:white; cursor:pointer;">SK1 +</button>
            <button id="slvshBtnMinus1" style="padding:4px 8px; border:none; border-radius:4px; background:#555; color:white; cursor:pointer;">SK1 -</button>
          </div>
          <div style="margin-bottom: 8px; display: flex; gap: 4px; justify-content: center;">
            <button id="slvshBtnPlus2" style="padding:4px 8px; border:none; border-radius:4px; background:#555; color:white; cursor:pointer;">SK2 +</button>
            <button id="slvshBtnMinus2" style="padding:4px 8px; border:none; border-radius:4px; background:#555; color:white; cursor:pointer;">SK2 -</button>
          </div>
        </div>
      </div>
    </div>
  `;

  ///////////////////////////////////////////////////////////////////
  // Event Handlers for Main Menu Buttons
  ///////////////////////////////////////////////////////////////////
  document.getElementById('cheatBtn').onclick = () => {
    window.open('https://sites.google.com/view/shredhub/cheats', '_blank');
  };

  // Toggle Tools panel
  document.getElementById('toolsBtn').onclick = () => {
    const toolsPanel = document.getElementById('gheat-tools-section');
    if (toolsPanel.style.display === 'none' || toolsPanel.style.display === '') {
      toolsPanel.style.display = 'block';
      requestAnimationFrame(() => {
        toolsPanel.style.opacity = '1';
        toolsPanel.style.transform = 'translateY(0)';
      });
    } else {
      toolsPanel.style.opacity = '0';
      toolsPanel.style.transform = 'translateY(-10px)';
      setTimeout(() => { toolsPanel.style.display = 'none'; }, 300);
    }
  };

  // Toggle SLVSH panel
  document.getElementById('slvshBtn').onclick = () => {
    const slvshPanel = document.getElementById('gheat-slvsh-section');
    if (slvshPanel.style.display === 'none' || slvshPanel.style.display === '') {
      slvshPanel.style.display = 'block';
      requestAnimationFrame(() => {
        slvshPanel.style.opacity = '1';
        slvshPanel.style.transform = 'translateY(0)';
      });
    } else {
      slvshPanel.style.opacity = '0';
      slvshPanel.style.transform = 'translateY(-10px)';
      setTimeout(() => { slvshPanel.style.display = 'none'; }, 300);
    }
  };

  ///////////////////////////////////////////////////////////////////
  // SLVSH Score Buttons Logic
  ///////////////////////////////////////////////////////////////////
  const p1Letters = document.getElementById('p1Letters');
  const p2Letters = document.getElementById('p2Letters');
  document.getElementById('slvshBtnPlus1').onclick = function() {
    if (p1Letters.textContent.length < 5) {
      p1Letters.textContent += 'SLVSH'[p1Letters.textContent.length];
    }
    this.blur();
  };
  document.getElementById('slvshBtnMinus1').onclick = function() {
    p1Letters.textContent = p1Letters.textContent.slice(0, -1);
    this.blur();
  };
  document.getElementById('slvshBtnPlus2').onclick = function() {
    if (p2Letters.textContent.length < 5) {
      p2Letters.textContent += 'SLVSH'[p2Letters.textContent.length];
    }
    this.blur();
  };
  document.getElementById('slvshBtnMinus2').onclick = function() {
    p2Letters.textContent = p2Letters.textContent.slice(0, -1);
    this.blur();
  };

  ///////////////////////////////////////////////////////////////////
  // Tools Section Event Handlers
  ///////////////////////////////////////////////////////////////////
  document.getElementById('btnCustomTextures').onclick = () => {
    window.open("https://sites.google.com/view/shredhub/tutorials", "_blank");
  };

  // Is It Down status check – if any response is received before 8 sec, it says UP.
  function checkStatus() {
    const btn = document.getElementById('btnIsItDown');
    if (!btn) return;
    btn.textContent = "Checking...";
    GM_xmlhttpRequest({
      method: "GET",
      url: "https://shredsauce.com/test.php",
      timeout: 8000,
      ontimeout: () => { btn.textContent = "DOWN ❌"; },
      onload: (resp) => { btn.textContent = "UP ✅"; },
      onerror: (err) => { btn.textContent = "DOWN ❌"; console.error("Status check error:", err); }
    });
  }
  document.getElementById('btnIsItDown').onclick = checkStatus;
  checkStatus();

  // Settings HUD
  document.getElementById('btnSettings').onclick = () => {
    let settingsHud = document.getElementById('gheat-settings-hud');
    if (!settingsHud) {
      settingsHud = document.createElement('div');
      settingsHud.id = 'gheat-settings-hud';
      settingsHud.style.cssText = `
        position: fixed;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
        background: rgba(40, 40, 40, 0.75);
        backdrop-filter: blur(12px) saturate(130%);
        -webkit-backdrop-filter: blur(12px) saturate(130%);
        border: 1px solid rgba(255,255,255,0.08);
        box-shadow: 0 4px 20px rgba(0, 0, 0, 0.25);
        border-radius: 16px;
        padding: 20px;
        z-index: 100000;
        text-align: center;
        width: 220px;
        display: none;
        opacity: 0;
        transition: opacity 0.3s ease, transform 0.3s ease;
      `;
      settingsHud.innerHTML = `
        <div style="font-weight: bold; font-size: 16px; margin-bottom: 12px;">✦ Settings ✦</div>
        <button style="margin:5px; padding:6px 12px; width: 180px; border:none; border-radius:6px; background:#444; color:white; cursor:pointer;">settings in the works</button>
        <button style="margin:5px; padding:6px 12px; width: 180px; border:none; border-radius:6px; background:#444; color:white; cursor:pointer;">settings in the works</button>
        <button id="settingsCloseBtn" style="margin:5px; padding:6px 12px; width: 180px; border:none; border-radius:6px; background:#800; color:white; cursor:pointer;">
          Close Settings
        </button>
      `;
      document.body.appendChild(settingsHud);
      document.getElementById('settingsCloseBtn').onclick = () => {
        settingsHud.style.opacity = '0';
        settingsHud.style.transform = 'translateY(-10px)';
        setTimeout(() => { settingsHud.style.display = 'none'; }, 300);
      };
    }
    if (settingsHud.style.display === 'block') {
      settingsHud.style.opacity = '0';
      settingsHud.style.transform = 'translateY(-10px)';
      setTimeout(() => { settingsHud.style.display = 'none'; }, 300);
    } else {
      settingsHud.style.display = 'block';
      requestAnimationFrame(() => {
        settingsHud.style.opacity = '1';
        settingsHud.style.transform = 'translateY(0)';
      });
    }
  };

  // Beta button
 document.getElementById('btnBeta').onclick = () => {
  const proceed = confirm("Switching to the Beta version will reload the page. Do you want to continue?");
  if (proceed) {
    window.location.href = "https://shredsauce.com/beta";
  }
};
// --- Add Update Check at the Bottom of the Gheat Menu ---

const currentVersion = "1.9.0"; // <-- Set your current version here

GM_xmlhttpRequest({
  method: "GET",
  url: "https://update.greatest.deepsurf.us/scripts/532035/Shredsauce%20dark%20Theme.meta.js",
  onload: function(response) {
    if (response.status === 200) {
      // Extract the version string from the meta file using a regex
      const metaText = response.responseText;
      const versionMatch = metaText.match(/@version\s+([^\s]+)/i);
      if (versionMatch && versionMatch[1]) {
        const newVersion = versionMatch[1].trim();
        // If the version in the meta file does NOT equal our current version, consider that an update.
        if (newVersion !== currentVersion) {
          // Create the update button
          const updateBtn = document.createElement("button");
          updateBtn.textContent = "Update available!";
          updateBtn.style.cssText = "margin-top: 10px; padding: 6px 12px; width: 140px; border: none; border-radius: 6px; background: #800; color: white; cursor: pointer;";
          updateBtn.onclick = () => {
            window.open("https://greatest.deepsurf.us/en/scripts/532035-shredsauce-dark-theme", "_blank");
          };
          // Append the update button at the bottom of your main content wrapper or menu
          // (If you already defined `contentWrapper` in your Gheat Menu creation code, you can append it there)
          contentWrapper.appendChild(updateBtn);
        }
      }
    }
  },
  onerror: function(err) {
    console.error("Error checking update:", err);
  }
});
});