diff --git a/loader/include/Geode/ui/BasedButtonSprite.hpp b/loader/include/Geode/ui/BasedButtonSprite.hpp
index 0c5f2ef1..b317bf73 100644
--- a/loader/include/Geode/ui/BasedButtonSprite.hpp
+++ b/loader/include/Geode/ui/BasedButtonSprite.hpp
@@ -29,6 +29,7 @@ namespace geode {
         Blue = 3,
         Cyan = 4,
         DarkPurple = 5, // Geode-added color, used in Geode UIs
+        DarkAqua = 6,   // Geode-added color, used in Geode UIs
     };
     GEODE_DLL const char* baseEnumToString(CircleBaseColor);
 
diff --git a/loader/resources/blanks/baseCircle_BigAlt_DarkAqua.png b/loader/resources/blanks/baseCircle_BigAlt_DarkAqua.png
new file mode 100644
index 00000000..c9dbe7ab
Binary files /dev/null and b/loader/resources/blanks/baseCircle_BigAlt_DarkAqua.png differ
diff --git a/loader/resources/blanks/baseCircle_Large_DarkAqua.png b/loader/resources/blanks/baseCircle_Large_DarkAqua.png
new file mode 100644
index 00000000..a2e7353a
Binary files /dev/null and b/loader/resources/blanks/baseCircle_Large_DarkAqua.png differ
diff --git a/loader/resources/blanks/baseCircle_MediumAlt_DarkAqua.png b/loader/resources/blanks/baseCircle_MediumAlt_DarkAqua.png
new file mode 100644
index 00000000..2d9abff8
Binary files /dev/null and b/loader/resources/blanks/baseCircle_MediumAlt_DarkAqua.png differ
diff --git a/loader/resources/blanks/baseCircle_Medium_DarkAqua.png b/loader/resources/blanks/baseCircle_Medium_DarkAqua.png
new file mode 100644
index 00000000..8182874a
Binary files /dev/null and b/loader/resources/blanks/baseCircle_Medium_DarkAqua.png differ
diff --git a/loader/resources/blanks/baseCircle_SmallAlt_DarkAqua.png b/loader/resources/blanks/baseCircle_SmallAlt_DarkAqua.png
new file mode 100644
index 00000000..12fa6e99
Binary files /dev/null and b/loader/resources/blanks/baseCircle_SmallAlt_DarkAqua.png differ
diff --git a/loader/resources/blanks/baseCircle_Small_DarkAqua.png b/loader/resources/blanks/baseCircle_Small_DarkAqua.png
new file mode 100644
index 00000000..2640d65d
Binary files /dev/null and b/loader/resources/blanks/baseCircle_Small_DarkAqua.png differ
diff --git a/loader/resources/blanks/baseCircle_Tiny_DarkAqua.png b/loader/resources/blanks/baseCircle_Tiny_DarkAqua.png
new file mode 100644
index 00000000..8a8c149a
Binary files /dev/null and b/loader/resources/blanks/baseCircle_Tiny_DarkAqua.png differ
diff --git a/loader/resources/images/GE_square02.png b/loader/resources/images/GE_square02.png
new file mode 100644
index 00000000..f084b2fc
Binary files /dev/null and b/loader/resources/images/GE_square02.png differ
diff --git a/loader/src/ui/mods/GeodeStyle.cpp b/loader/src/ui/mods/GeodeStyle.cpp
index 070a9158..06b003b4 100644
--- a/loader/src/ui/mods/GeodeStyle.cpp
+++ b/loader/src/ui/mods/GeodeStyle.cpp
@@ -8,6 +8,8 @@ $execute {
     ColorProvider::get()->define("mod-list-restart-required-label"_spr, ccc3(153, 245, 245));
     ColorProvider::get()->define("mod-list-restart-required-label-bg"_spr, ccc3(123, 156, 163));
     ColorProvider::get()->define("mod-list-search-bg"_spr, { 83, 65, 109, 255 });
+    ColorProvider::get()->define("mod-list-tab-selected-bg"_spr, { 168, 147, 185, 255 });
+    ColorProvider::get()->define("mod-list-tab-selected-bg-alt"_spr, { 147, 163, 185, 255 });
 }
 
 bool GeodeSquareSprite::init(CCSprite* top, bool* state) {
@@ -101,7 +103,7 @@ std::pair<ccColor3B, ccColor3B> geodeTagColor(std::string_view const& text) {
     return TAG_COLORS[hash(text) % 5932 % TAG_COLORS.size()];
 }
 
-bool GeodeTabSprite::init(const char* iconFrame, const char* text, float width) {
+bool GeodeTabSprite::init(const char* iconFrame, const char* text, float width, bool altColor) {
     if (!CCNode::init())
         return false;
     
@@ -120,7 +122,11 @@ bool GeodeTabSprite::init(const char* iconFrame, const char* text, float width)
     m_selectedBG = CCScale9Sprite::createWithSpriteFrameName("tab-bg.png"_spr);
     m_selectedBG->setScale(.8f);
     m_selectedBG->setContentSize(itemSize / .8f);
-    m_selectedBG->setColor({ 168, 147, 185 });
+    m_selectedBG->setColor(to3B(ColorProvider::get()->color(
+        altColor ? 
+            "mod-list-tab-selected-bg-alt"_spr : 
+            "mod-list-tab-selected-bg"_spr
+    )));
     this->addChildAtPosition(m_selectedBG, Anchor::Center);
 
     m_icon = CCSprite::createWithSpriteFrameName(iconFrame);
@@ -135,9 +141,9 @@ bool GeodeTabSprite::init(const char* iconFrame, const char* text, float width)
     return true;
 }
 
-GeodeTabSprite* GeodeTabSprite::create(const char* iconFrame, const char* text, float width) {
+GeodeTabSprite* GeodeTabSprite::create(const char* iconFrame, const char* text, float width, bool altColor) {
     auto ret = new GeodeTabSprite();
-    if (ret && ret->init(iconFrame, text, width)) {
+    if (ret && ret->init(iconFrame, text, width, altColor)) {
         ret->autorelease();
         return ret;
     }
diff --git a/loader/src/ui/mods/GeodeStyle.hpp b/loader/src/ui/mods/GeodeStyle.hpp
index 3a11c89f..3dc9d1b5 100644
--- a/loader/src/ui/mods/GeodeStyle.hpp
+++ b/loader/src/ui/mods/GeodeStyle.hpp
@@ -9,15 +9,22 @@ using namespace geode::prelude;
 template <class... Args>
 class GeodePopup : public Popup<Args...> {
 protected:
-    bool init(float width, float height, Args... args) {
-        if (!Popup<Args...>::initAnchored(width, height, std::forward<Args>(args)..., "GE_square01.png"_spr))
+    bool init(float width, float height, Args... args, bool altBG = false) {
+        if (!Popup<Args...>::initAnchored(width, height, std::forward<Args>(args)..., (altBG ? "GE_square02.png"_spr : "GE_square01.png"_spr)))
             return false;
         
-        // Replace the close button with a Geode style one
+        // Store original attributes of the close button
         auto origSize = Popup<Args...>::m_closeBtn->getContentSize();
         auto orig = Ref(Popup<Args...>::m_closeBtn->getNormalImage());
-        auto spr = CircleButtonSprite::createWithSpriteFrameName("close.png"_spr, 1.f, CircleBaseColor::DarkPurple);
+        
+        // Replace the close button with a Geode style one
+        auto spr = CircleButtonSprite::createWithSpriteFrameName(
+            "close.png"_spr, 1.f,
+            (altBG ? CircleBaseColor::DarkAqua : CircleBaseColor::DarkPurple)
+        );
         Popup<Args...>::m_closeBtn->setNormalImage(spr);
+
+        // Restore size and position
         spr->setScale(orig->getScale());
         spr->setPosition(orig->getPosition());
         spr->setAnchorPoint(orig->getAnchorPoint());
@@ -57,10 +64,10 @@ protected:
     CCSprite* m_icon;
     CCLabelBMFont* m_label;
 
-    bool init(const char* iconFrame, const char* text, float width);
+    bool init(const char* iconFrame, const char* text, float width, bool altColor);
 
 public:
-    static GeodeTabSprite* create(const char* iconFrame, const char* text, float width);
+    static GeodeTabSprite* create(const char* iconFrame, const char* text, float width, bool altColor = false);
 
     void select(bool selected);
     void disable(bool disabled);
diff --git a/loader/src/ui/mods/popups/ModPopup.cpp b/loader/src/ui/mods/popups/ModPopup.cpp
index 73224e94..7e7ee74b 100644
--- a/loader/src/ui/mods/popups/ModPopup.cpp
+++ b/loader/src/ui/mods/popups/ModPopup.cpp
@@ -400,7 +400,7 @@ bool ModPopup::setup(ModSource&& src) {
         { "changelog.png"_spr, "Changelog",   Tab::Changelog },
         { "version.png"_spr,   "Versions",    Tab::Versions },
     }) {
-        auto spr = GeodeTabSprite::create(std::get<0>(mdTab), std::get<1>(mdTab), 140);
+        auto spr = GeodeTabSprite::create(std::get<0>(mdTab), std::get<1>(mdTab), 140, m_source.asServer());
         auto btn = CCMenuItemSpriteExtra::create(spr, this, menu_selector(ModPopup::onTab));
         btn->setTag(static_cast<int>(std::get<2>(mdTab)));
         tabsMenu->addChild(btn);
@@ -685,7 +685,8 @@ void ModPopup::onSupport(CCObject*) {
 
 ModPopup* ModPopup::create(ModSource&& src) {
     auto ret = new ModPopup();
-    if (ret && ret->init(440, 280, std::move(src))) {
+    bool isServer = src.asServer();
+    if (ret && ret->init(440, 280, std::move(src), isServer)) {
         ret->autorelease();
         return ret;
     }
diff --git a/loader/src/ui/nodes/BasedButtonSprite.cpp b/loader/src/ui/nodes/BasedButtonSprite.cpp
index 53a56cae..dd99fe42 100644
--- a/loader/src/ui/nodes/BasedButtonSprite.cpp
+++ b/loader/src/ui/nodes/BasedButtonSprite.cpp
@@ -26,6 +26,7 @@ const char* geode::baseEnumToString(CircleBaseColor value) {
         case CircleBaseColor::Blue: return "Blue";
         case CircleBaseColor::Cyan: return "Cyan";
         case CircleBaseColor::DarkPurple: return "DarkPurple";
+        case CircleBaseColor::DarkAqua: return "DarkAqua";
     }
     return "Unknown";
 }