Drawaria.online Aquatic Abyss

A deep ocean, aquatic abyss theme for Drawaria.online with subtle underwater effects.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         Drawaria.online Aquatic Abyss
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  A deep ocean, aquatic abyss theme for Drawaria.online with subtle underwater effects.
// @author       YouTubeDrawaria
// @icon         https://www.google.com/s2/favicons?sz=64&domain=drawaria.online
// @match        https://drawaria.online/*
// @require      https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js
// @grant        GM_addStyle
// @grant        GM_getResourceText
// @grant        GM_xmlhttpRequest
// @connect      fonts.googleapis.com
// @connect      fonts.gstatic.com
// @run-at       document-start
// @license      MIT
// ==/UserScript==

(function() {
    'use strict';

    // Fetch and inject Google Font (Orbitron can still fit a deep-sea tech vibe)
    GM_xmlhttpRequest({
        method: "GET",
        url: "https://fonts.googleapis.com/css2?family=Orbitron:wght@400;700&display=swap",
        onload: function(response) {
            GM_addStyle(response.responseText);
        }
    });

    // --- Aquatic Abyss Theme Styles ---
    const aquaticStyles = `
        /* --- Aquatic Abyss Color Variables --- */
        :root {
            --abyss-dark-blue: #0A122A; /* Very dark, deep blue */
            --abyss-mid-blue: #1B2A41;  /* Slightly lighter for panels */
            --abyss-deep-green: #0E3337; /* Dark greenish tint */
            --abyss-light-blue: #4B8A8A; /* Muted light blue/cyan */
            --abyss-biolum-purple: #5D3A6F; /* Hint of bioluminescence */
            --abyss-biolum-green: #9BE1A9;  /* Hint of glowing green */

            --abyss-text-color: var(--abyss-light-blue);
            --abyss-link-color: var(--abyss-biolum-green);
            --abyss-heading-color: var(--abyss-light-blue);
            --abyss-border-color: var(--abyss-deep-green);

            --abyss-text-glow: 0 0 4px var(--abyss-light-blue),
                               0 0 8px rgba(75, 138, 138, 0.5); /* Faint glow */
            --abyss-box-shadow: 0 0 10px rgba(0, 0, 0, 0.5), /* Soft overall shadow */
                                0 0 5px var(--abyss-biolum-purple); /* Hint of bioluminescent edge */
            --abyss-border: 1px solid var(--abyss-border-color);
        }

        /* --- Global Styles --- */
        body, html {
            background: var(--abyss-dark-blue) !important;
            /* Subtle gradient or texture to suggest depth */
            background-image: linear-gradient(to bottom, var(--abyss-dark-blue), #050a18) !important;
            color: var(--abyss-text-color) !important;
            font-family: 'Orbitron', sans-serif !important;
            height: 100%;
            overflow-x: hidden; /* Prevent horizontal scroll */
        }

        /* Ensure the body background image is overridden */
        body {
             background-image: none !important; /* Remove any site background */
        }


        a {
            color: var(--abyss-link-color) !important;
            text-decoration: none !important;
            transition: color 0.3s ease, text-shadow 0.3s ease;
            /* Subtle underwater ripple effect on hover - requires JS or complex CSS */
        }
        a:hover {
            color: #fff !important; /* Brighter on hover */
            text-shadow: var(--abyss-text-glow);
        }

        h1, h2, h3, h4, h5, h6 {
            color: var(--abyss-heading-color) !important;
            text-shadow: var(--abyss-text-glow);
        }

        /* --- Layout Principal and Panels --- */
        #main {
            background-color: transparent !important;
        }

        #leftbar, #rightbar {
            background: var(--abyss-mid-blue) !important;
            border-color: var(--abyss-border-color) !important;
            box-shadow: var(--abyss-box-shadow);
            border-radius: 8px !important; /* Slightly rounded like sub windows */
            padding: 1em !important;
            transition: box-shadow 0.3s ease;
            width: 18% !important; /* Keep width as before */
             /* Optional: subtle pulsating effect on hover */
        }
        #leftbar:hover, #rightbar:hover {
             box-shadow: 0 0 15px rgba(0,0,0,0.8),
                               0 0 8px var(--abyss-biolum-purple),
                               0 0 12px var(--abyss-biolum-green);
        }
        #leftbar { border-right: var(--abyss-border) !important; }
        #rightbar { border-left: var(--abyss-border) !important; }


        /* --- Login Area and Central Content --- */
        #login {
            padding-top: 5vh !important; /* Adjust padding */
        }
        .sitelogo img {
            /* Adjust filter for aquatic look and subtle glow */
            filter: drop-shadow(0 0 5px var(--abyss-light-blue)) drop-shadow(0 0 10px var(--abyss-deep-green));
            animation: aquaticPulse 4s infinite alternate ease-in-out; /* Slower, smoother pulse */
        }
        @keyframes aquaticPulse {
            0% { filter: drop-shadow(0 0 5px var(--abyss-light-blue)) drop-shadow(0 0 10px var(--abyss-deep-green)); }
            100% { filter: drop_shadow(0 0 8px var(--abyss-biolum-purple)) drop-shadow(0 0 15px var(--abyss-biolum-green)); }
        }

        #login-midcol {
            background: var(--abyss-mid-blue) !important;
            padding: 1.5em !important;
            border-radius: 8px !important;
            box-shadow: var(--abyss-box-shadow);
            border: var(--abyss-border) !important;
            max-width: 300px !important;
        }
        #login-leftcol > div, #login-rightcol > div:not(.loginbox) { /* Ads/Other boxes */
            background: rgba(0,0,0,0.2) !important; /* More transparent */
            border-radius: 6px;
            padding: 10px;
            border: 1px solid var(--abyss-deep-green);
            color: var(--abyss-text-color) !important;
        }
        #login-leftcol > div img, #login-rightcol > div img {
            opacity: 0.7; /* Make images less prominent */
        }

        /* --- Forms (Inputs, Selects, Buttons) --- */
        input[type="text"], .custom-select {
            background-color: rgba(10, 18, 42, 0.7) !important; /* Darker, semi-transparent */
            color: var(--abyss-biolum-green) !important; /* Glowing text */
            border: 1px solid var(--abyss-deep-green) !important;
            border-radius: 4px !important;
            padding: 0.5em !important;
            box-shadow: inset 0 0 5px rgba(155, 225, 169, 0.2); /* Subtle green inner glow */
        }
        input[type="text"]::placeholder {
            color: rgba(155, 225, 169, 0.5) !important; /* Glowing placeholder text */
        }
        .input-group-text { /* Adjacent elements */
            background: transparent !important;
            border: none !important;
            color: var(--abyss-text-color) !important;
        }
         #avatarcontainer img {
             border: 2px solid var(--abyss-biolum-purple) !important;
             box-shadow: 0 0 10px var(--abyss-biolum-purple), 0 0 5px #fff inset; /* Purple glow, slight inner highlight */
             border-radius: 50% !important; /* Keep circular avatar */
             transition: transform 0.3s ease;
         }
         #avatarcontainer img:hover {
             transform: scale(1.05); /* Subtle hover effect */
         }

        .btn {
            color: #fff !important; /* White or light text */
            border-radius: 5px !important;
            text-shadow: 0 0 3px rgba(0,0,0,0.5); /* Subtle text shadow */
            transition: background-color 0.3s ease, box-shadow 0.3s ease, transform 0.2s ease;
            position: relative;
            overflow: hidden;
            border: none !important; /* Remove default borders */
        }
        .btn:before { /* Underwater shimmer effect on hover */
            content: '';
            position: absolute;
            top: 0;
            left: -100%;
            width: 100%;
            height: 100%;
             /* Aquatic shimmer gradient */
            background: linear-gradient(120deg, transparent, rgba(255,255,255,0.2), rgba(255,255,255,0.2), transparent);
            transition: all 0.5s cubic-bezier(0.4, 0, 0.2, 1); /* Smoother transition */
        }
        .btn:hover:before {
            left: 100%;
        }

        .btn-warning { /* 'Play' button */
            background-color: var(--abyss-biolum-green) !important;
            box-shadow: 0 0 8px var(--abyss-biolum-green), 0 0 15px rgba(155, 225, 169, 0.5);
        }
        .btn-warning:hover {
            background-color: #fff !important; /* Bright white on hover */
            color: var(--abyss-dark-blue) !important; /* Dark text on light background */
            text-shadow: none;
            box-shadow: 0 0 12px var(--abyss-biolum-green), 0 0 25px rgba(155, 225, 169, 0.8), 0 0 5px #fff;
            transform: translateY(-2px);
        }

        .btn-secondary, .btn-info, .btn-primary:not(#login-rightcol .loginbox .btn-primary) { /* 'Create Room', etc. */
            background-color: var(--abyss-light-blue) !important;
            box-shadow: 0 0 8px var(--abyss-light-blue), 0 0 15px rgba(75, 138, 138, 0.5);
        }
         .btn-secondary:hover, .btn-info:hover, .btn-primary:not(#login-rightcol .loginbox .btn-primary):hover {
            background-color: #fff !important;
            color: var(--abyss-dark-blue) !important;
             text-shadow: none;
            box-shadow: 0 0 12px var(--abyss-light-blue), 0 0 25px rgba(75, 138, 138, 0.8), 0 0 5px #fff;
            transform: translateY(-2px);
        }

        .btn-outline-info { /* 'Restore Drawing', etc. */
            color: var(--abyss-biolum-purple) !important;
            border: 1px solid var(--abyss-biolum-purple) !important;
            background: transparent !important;
            box-shadow: 0 0 5px rgba(93, 58, 111, 0.5);
        }
        .btn-outline-info:hover {
            background-color: var(--abyss-biolum-purple) !important;
            color: #fff !important;
            text-shadow: none;
            box-shadow: 0 0 10px var(--abyss-biolum-purple), 0 0 20px rgba(93, 58, 111, 0.8);
        }

        /* Links at the bottom of login-midcol */
        #login-midcol a {
            color: var(--abyss-biolum-green) !important;
            text-shadow: 0 0 3px var(--abyss-biolum-green);
            font-weight: bold;
        }
        #login-midcol a:hover {
            color: #fff !important;
            text-shadow: 0 0 5px var(--abyss-biolum-green), 0 0 10px var(--abyss-biolum-green);
        }

        /* --- Chat and Game Elements (examples) --- */
        #chatbox_messages {
            background-color: rgba(11, 18, 42, 0.6) !important; /* Darker, more transparent */
            border: 1px solid var(--abyss-deep-green);
            border-radius: 5px;
            padding: 5px;
        }
        .playerchatmessage {
            padding: 3px 5px;
            border-radius: 3px;
            margin-bottom: 3px;
             /* Subtle hover effect to highlight message */
            transition: background-color 0.2s ease;
        }
        .playerchatmessage:hover {
            background-color: rgba(75, 138, 138, 0.1);
        }
        .playerchatmessage-name {
            color: var(--abyss-biolum-purple) !important; /* Purple for others */
            font-weight: bold;
        }
        .playerchatmessage-selfname {
            color: var(--abyss-biolum-green) !important; /* Green for self */
             text-shadow: 0 0 3px var(--abyss-biolum-green); /* Self-name glows */
        }
        #chatbox_messages > div:nth-child(odd) {
            background: rgba(0,0,0,0.05) !important; /* Very subtle stripe */
        }

        .roomlist-item {
            background: var(--abyss-mid-blue) !important;
            border: 1px solid var(--abyss-deep-green) !important;
            box-shadow: 0 0 5px rgba(0,0,0,0.5);
            transition: box-shadow 0.3s ease;
        }
        .roomlist-item:hover {
            box-shadow: 0 0 10px rgba(0,0,0,0.8), 0 0 5px var(--abyss-biolum-purple);
        }
        .roomlist-preview {
            border-color: var(--abyss-light-blue) !important;
        }

        .wordchooser-row {
            background-color: var(--abyss-mid-blue) !important;
            color: var(--abyss-biolum-green) !important;
            border: 1px solid var(--abyss-deep-green);
            text-shadow: 0 0 3px var(--abyss-biolum-green);
            transition: background-color 0.3s ease, box-shadow 0.3s ease;
        }
        .wordchooser-row:hover {
            background-color: var(--abyss-deep-green) !important;
            color: #fff !important;
             text-shadow: none;
            box-shadow: 0 0 10px var(--abyss-deep-green);
        }

        /* --- Footer --- */
        .footer, .footer a {
            color: var(--abyss-light-blue) !important;
            opacity: 0.7;
        }
        .footer a:hover {
            color: var(--abyss-biolum-green) !important;
            opacity: 1;
        }
        #discordprombox a, #discordprombox2 a { /* Discord Promos */
           border: 1px solid var(--abyss-biolum-purple) !important;
           padding: 0.5em !important;
           border-radius: 5px !important;
           background-color: rgba(93, 58, 111, 0.2) !important; /* Semi-transparent purple */
           box-shadow: 0 0 8px var(--abyss-biolum-purple);
           display: inline-block;
           color: var(--abyss-biolum-purple) !important; /* Ensure link color */
           transition: background-color 0.3s ease, box-shadow 0.3s ease;
        }
         #discordprombox a:hover, #discordprombox2 a:hover {
            background-color: rgba(93, 58, 111, 0.4) !important;
            box-shadow: 0 0 15px var(--abyss-biolum-purple), 0 0 5px #fff inset;
         }
         #discordprombox img, #discordprombox2 img {
              /* subtle pulsating/breathing effect instead of spin */
             animation: discordPulse 5s ease-in-out infinite alternate;
             filter: drop-shadow(0 0 3px var(--abyss-biolum-purple));
         }
         @keyframes discordPulse {
             0% { transform: scale(1); opacity: 0.8; }
             100% { transform: scale(1.05); opacity: 1; }
         }


        /* --- Modal Styles --- */
        .modal-content {
            background-color: var(--abyss-mid-blue) !important; /* Panel background */
            border: 2px solid var(--abyss-biolum-purple) !important; /* Bioluminescent border */
            box-shadow: 0 0 20px rgba(0,0,0,0.8), 0 0 15px var(--abyss-biolum-purple), 0 0 10px var(--abyss-biolum-green) inset; /* Dark shadow with bioluminescent glow */
            color: var(--abyss-text-color) !important;
            border-radius: 10px !important;
        }
        .modal-header {
            border-bottom: 1px solid var(--abyss-biolum-green) !important; /* Green separation */
            color: var(--abyss-heading-color) !important;
        }
        .modal-header .close { /* Close button */
            color: var(--abyss-biolum-purple) !important;
            text-shadow: 0 0 5px var(--abyss-biolum-purple);
            opacity: 0.8;
            transition: opacity 0.3s ease;
        }
         .modal-header .close:hover {
             opacity: 1;
         }
        .modal-footer {
            border-top: 1px solid var(--abyss-biolum-green) !important; /* Green separation */
        }


        /* --- Scrollbars with Aquatic Style --- */
        ::-webkit-scrollbar {
            width: 10px;
            height: 10px;
        }
        ::-webkit-scrollbar-track {
            background: rgba(11, 18, 42, 0.8); /* Darker track */
            border-radius: 5px;
        }
        ::-webkit-scrollbar-thumb {
            background: var(--abyss-deep-green); /* Greenish thumb */
            border-radius: 5px;
            box-shadow: inset 0 0 3px rgba(75, 138, 138, 0.5); /* Subtle inner highlight */
        }
        ::-webkit-scrollbar-thumb:hover {
            background: var(--abyss-light-blue); /* Lighter blue on hover */
             box-shadow: 0 0 5px var(--abyss-light-blue), inset 0 0 5px #fff; /* Light glow */
        }
        ::-webkit-scrollbar-corner {
            background: transparent;
        }

        /* Add subtle bubble animation background (optional and complex) */
        /* This is a basic attempt; more advanced effects require more complex CSS/JS */
        /* You could also use a static background image with bubbles */
         body::before {
             content: '';
             position: fixed;
             top: 0;
             left: 0;
             width: 100%;
             height: 100%;
             pointer-events: none;
             z-index: -1; /* Behind everything */
             /* Example: subtle static bubble effect using pseudo-element */
             /* background-image: radial-gradient(circle at 20% 30%, rgba(75, 138, 138, 0.1) 1px, transparent 0),
                                 radial-gradient(circle at 80% 70%, rgba(93, 58, 111, 0.1) 1px, transparent 0),
                                 radial-gradient(circle at 50% 50%, rgba(155, 225, 169, 0.1) 1px, transparent 0);
             background-size: 50px 50px, 60px 60px, 70px 70px;
              */
             /* More complex animation requires multiple elements or libraries */
         }


    `;

    // Apply styles when the head is available
    function applyStylesWhenReady() {
        if (document.head) {
            GM_addStyle(aquaticStyles);
        } else {
            setTimeout(applyStylesWhenReady, 50); // Re-check frequently
        }
    }
    applyStylesWhenReady();

    // No complex JS needed for this theme, basic onload retained for structure
    window.onload = function() {
        // Optional: You could add JS here for more dynamic effects like moving bubbles
        // or water ripples, but it adds complexity. CSS animations are often enough.
    };

})();