diff --git a/packages/docs/src/global.css b/packages/docs/src/global.css
index 0c6e75e0738..95d2d77c03f 100644
--- a/packages/docs/src/global.css
+++ b/packages/docs/src/global.css
@@ -171,68 +171,6 @@
--panel-toggle-background-color: var(--qwik-dark-blue);
}
-@media (prefers-color-scheme: dark) {
- :root:not([data-theme]) {
- color-scheme: dark;
- --qwik-blue: #009dfd;
-
- --bg-color: #101010;
- --bg-secondary-color: #232323;
- --bg-header-color: #00000006;
- --text-color: #e3e2e9;
- --secondary-text-color: #ffffffc3;
- --interactive-text-color: var(--qwik-blue);
-
- --code-bg-color: #1d1d1d;
- --code-border-color: #525252;
- --blockquote-bg-color: #353639;
-
- --repl-tab-button-hover-bg-color: #ffffff25;
- --repl-tab-button-input-hover-border-color: #c3c1de75;
- --repl-tab-button-input-active-border-color: #d8c2fa;
- --repl-tab-button-active-border-color: var(--qwik-light-blue);
- --repl-diagnostics-hover-border-color: rgba(255, 0, 144, 0.46);
- --repl-diagnostics-active-border-color: rgb(255, 0, 144);
- --repl-commands-color: var(--qwik-light-blue);
- --repl-tab-bg-color: var(--bg-color);
- --repl-border-color: rgba(255, 255, 255, 0.2);
-
- --examples-header-text-color: var(--text-color);
- --examples-active-bg-color: #1d1d1d;
- --examples-hover-bg-color: #353639;
- --examples-border-color: rgba(255, 255, 255, 0.2);
- --examples-main-border-color: rgba(255, 255, 255, 0.1);
-
- --made-with-love-text-color: #c6c5cb;
-
- --media-separator-color: rgba(255, 255, 255, 0.1);
- --media-video-shadow-color: var(--qwik-blue);
-
- --panel-toggle-background-color: var(--qwik-dark-blue);
- .builder .dark-mode :is(img, iframe, video) {
- filter: invert(100%) hue-rotate(180deg);
- }
-
- /* Temporary workaround */
- .builder .csoetdv,
- .builder .cvha93q {
- filter: invert(90%) hue-rotate(180deg);
- }
-
- .builder .dark-mode {
- filter: invert(90%) hue-rotate(180deg);
- }
-
- .dark-mode-invert {
- filter: invert(100%) hue-rotate(180deg);
- }
-
- .dark-mode-hide {
- display: none !important;
- }
- }
-}
-
@media (max-width: 768px) {
:root {
--panel-toggle-height: 56px;
diff --git a/packages/docs/src/routes/(ecosystem)/ecosystem.css b/packages/docs/src/routes/(ecosystem)/ecosystem.css
index 5e99fe7740f..0a8307f26ea 100644
--- a/packages/docs/src/routes/(ecosystem)/ecosystem.css
+++ b/packages/docs/src/routes/(ecosystem)/ecosystem.css
@@ -18,18 +18,6 @@
filter: invert(1);
}
-@media (prefers-color-scheme: light) {
- :root:not([data-theme]) {
- .qwik-plus-logo-text {
- filter: invert(1);
- }
- .ecosystem h2,
- .ecosystem-menu h3 {
- border-color: rgba(0, 0, 0, 0.3);
- }
- }
-}
-
.ecosystem .purple-gradient {
position: fixed;
width: 1400px;
diff --git a/packages/docs/src/routes/api/api.css b/packages/docs/src/routes/api/api.css
index e710b2355d2..0586a5022aa 100644
--- a/packages/docs/src/routes/api/api.css
+++ b/packages/docs/src/routes/api/api.css
@@ -266,37 +266,4 @@
}
.docs.api .table-wrapper {
overflow-x: auto;
-}
-
-@media (prefers-color-scheme: dark) {
- :root:not([data-theme]) {
- .docs.api article a[href*="github.com"] {
- background: #373737;
- }
- .docs.api table {
- box-shadow: 0 0 30px 0 rgba(80,80,80,0.1);
- }
- .docs.api thead tr {
- background: #373737;
- }
- .docs.api tbody tr:hover,
- .docs.api tbody tr:nth-child(even) {
- background: black;
- }
- .docs.api .section-title {
- background: #373737;
- }
- .docs.api a {
- color: inherit;
- }
- .docs.api a {
- color: inherit;
- }
- .api-detail-section {
- border-bottom: 1px solid #373737;
- }
- .docs.api .filter-item {
- background: #373737;
- }
- }
}
\ No newline at end of file
diff --git a/packages/docs/src/routes/docs/(qwik)/advanced/eslint/styles.css b/packages/docs/src/routes/docs/(qwik)/advanced/eslint/styles.css
index 9cba0b9c82a..6b7a4a21c7d 100644
--- a/packages/docs/src/routes/docs/(qwik)/advanced/eslint/styles.css
+++ b/packages/docs/src/routes/docs/(qwik)/advanced/eslint/styles.css
@@ -140,30 +140,3 @@
border-color: #575757;
color: var(--color-text);
}
-
-@media (prefers-color-scheme: dark) {
- :root:not([data-theme]) {
- .docs .edit-examples-wrapper .edit-btn {
- background: #373737;
- border-color: #575757;
- color: var(--color-text);
- }
- .docs .badge.bad {
- @apply bg-red-900;
- }
- .docs .badge.good {
- @apply bg-green-900;
- }
- .docs .rule-wrapper {
- border-color: #575757;
- }
- .docs .panel .panel-border {
- border-color: #575757;
- }
- .docs .panel {
- background: #373737;
- border-color: #575757;
- color: var(--color-text);
- }
- }
-}
From c4a2fd4f25fd005a20db4d6cc6efbd9186ca9669 Mon Sep 17 00:00:00 2001
From: Jerry_Wu <409187100@qq.com>
Date: Wed, 15 Oct 2025 15:26:35 +0800
Subject: [PATCH 07/11] refactor: update SVG logos to use 'currentColor' for
fill attribute
- Changed the fill attribute in Discord, GitHub, and Twitter logo SVGs from a specific color to 'currentColor' for better adaptability in different themes.
- Cleaned up unnecessary CSS rules in the API styles to enhance maintainability.
---
.../docs/src/components/svgs/discord-logo.tsx | 2 +-
.../docs/src/components/svgs/github-logo.tsx | 2 +-
.../docs/src/components/svgs/twitter-logo.tsx | 2 +-
packages/docs/src/routes/api/api.css | 22 +------------------
4 files changed, 4 insertions(+), 24 deletions(-)
diff --git a/packages/docs/src/components/svgs/discord-logo.tsx b/packages/docs/src/components/svgs/discord-logo.tsx
index bdcd10665be..931c62270fb 100644
--- a/packages/docs/src/components/svgs/discord-logo.tsx
+++ b/packages/docs/src/components/svgs/discord-logo.tsx
@@ -13,7 +13,7 @@ export const DiscordLogo = ({ width, height }: DiscordLogoProps) => (
viewBox="0 0 512 512"
role="img"
aria-label="Discord Logo"
- class="fill-[#e3e2e9]"
+ fill="currentColor"
>
diff --git a/packages/docs/src/components/svgs/github-logo.tsx b/packages/docs/src/components/svgs/github-logo.tsx
index 9bcdbbd1d82..ad56defd8cd 100644
--- a/packages/docs/src/components/svgs/github-logo.tsx
+++ b/packages/docs/src/components/svgs/github-logo.tsx
@@ -10,7 +10,7 @@ export const GithubLogo = ({ width, height }: GithubLogoProps) => (
height={height}
role="img"
aria-label="GitHub Logo"
- class="fill-[#e3e2e9]"
+ fill="currentColor"
>
diff --git a/packages/docs/src/components/svgs/twitter-logo.tsx b/packages/docs/src/components/svgs/twitter-logo.tsx
index 70cf58a88fc..fac49fa48b7 100644
--- a/packages/docs/src/components/svgs/twitter-logo.tsx
+++ b/packages/docs/src/components/svgs/twitter-logo.tsx
@@ -11,7 +11,7 @@ export const TwitterLogo = ({ width, height }: TwitterLogoProps) => (
viewBox="0 0 512 512"
role="img"
aria-label="Twitter Logo"
- class="fill-[#e3e2e9]"
+ fill="currentColor"
>
diff --git a/packages/docs/src/routes/api/api.css b/packages/docs/src/routes/api/api.css
index 0586a5022aa..94b229ab68c 100644
--- a/packages/docs/src/routes/api/api.css
+++ b/packages/docs/src/routes/api/api.css
@@ -60,8 +60,6 @@
[data-theme="dark"] .docs.api table {
box-shadow: 0 0 30px 0 rgba(80,80,80,0.1);
}
-
-
.docs.api article thead tr {
background: #f6f6f6;
text-align: left;
@@ -72,8 +70,6 @@
[data-theme="dark"] .docs.api thead tr {
background: #373737;
}
-
-
.docs.api thead th,
.docs.api tbody tr td {
padding: 12px 24px;
@@ -87,7 +83,6 @@
background: black;
}
-
.docs.api .docs-container {
margin: 10px auto;
padding: 80px 30px 0;
@@ -108,10 +103,6 @@
[data-theme="dark"] .docs.api .section-title {
background: #373737;
}
-
-
-
-
@media screen and (min-width: 768px) {
.docs.api .section-title {
font-size: 1rem;
@@ -153,8 +144,6 @@
color: inherit;
}
-
-
.docs.api a {
display: inline-block;
color: black;
@@ -164,8 +153,6 @@
color: inherit;
}
-
-
.docs.api ul {
margin: 0;
}
@@ -183,8 +170,6 @@
border-bottom: 1px solid #373737;
}
-
-
.docs.api .api-edit {
position: absolute;
top: 50px;
@@ -201,8 +186,6 @@
background: #373737;
}
-
-
.docs.api .filter-item {
@apply bg-slate-100;
line-height: 2;
@@ -210,9 +193,6 @@
[data-theme="dark"] .docs.api .filter-item {
background: #373737;
}
-
-
-
@media screen and (min-width: 768px) {
.docs.api .filter-item {
line-height: 1.5;
@@ -266,4 +246,4 @@
}
.docs.api .table-wrapper {
overflow-x: auto;
-}
\ No newline at end of file
+}
From 12441e5a32c7d5569a42cf97b9406903aa4ec4d7 Mon Sep 17 00:00:00 2001
From: Jerry_Wu <409187100@qq.com>
Date: Wed, 15 Oct 2025 15:29:41 +0800
Subject: [PATCH 08/11] refactor: reorganize theme handling and remove
deprecated theme script
- Moved the ThemeScript import to the theme-toggle component for better structure.
- Removed the obsolete theme-script file to clean up the codebase.
- Updated the colorSchemeChangeListener import to reflect the new file structure.
---
packages/docs/src/components/header/header.tsx | 2 +-
.../src/components/router-head/router-head.tsx | 2 +-
.../{router-head => theme-toggle}/theme-script.tsx | 12 ++++++++++++
.../src/components/theme-toggle/theme-toggle.tsx | 14 +-------------
4 files changed, 15 insertions(+), 15 deletions(-)
rename packages/docs/src/components/{router-head => theme-toggle}/theme-script.tsx (61%)
diff --git a/packages/docs/src/components/header/header.tsx b/packages/docs/src/components/header/header.tsx
index 2435f6e48ab..c2f72607ce8 100644
--- a/packages/docs/src/components/header/header.tsx
+++ b/packages/docs/src/components/header/header.tsx
@@ -18,7 +18,6 @@ import { TwitterLogo } from '../svgs/twitter-logo';
import styles from './header.css?inline';
import { GlobalStore } from '../../context';
import {
- colorSchemeChangeListener,
getColorPreference,
setPreference,
ThemeToggle,
@@ -26,6 +25,7 @@ import {
} from '../theme-toggle/theme-toggle';
import { SearchIcon } from '../docsearch/icons/SearchIcon';
import { getPkgManagerPreference } from '../package-manager-tabs';
+import { colorSchemeChangeListener } from '../theme-toggle/theme-script';
export const SearchButton = component$
>(({ ...props }) => {
return (
diff --git a/packages/docs/src/components/router-head/router-head.tsx b/packages/docs/src/components/router-head/router-head.tsx
index b9b512370d3..728bb1154b9 100644
--- a/packages/docs/src/components/router-head/router-head.tsx
+++ b/packages/docs/src/components/router-head/router-head.tsx
@@ -2,7 +2,7 @@ import { component$ } from '@builder.io/qwik';
import { useDocumentHead, useLocation } from '@builder.io/qwik-city';
import { Social } from './social';
import { Vendor } from './vendor';
-import { ThemeScript } from './theme-script';
+import { ThemeScript } from '../theme-toggle/theme-script';
export const RouterHead = component$(() => {
const { url } = useLocation();
diff --git a/packages/docs/src/components/router-head/theme-script.tsx b/packages/docs/src/components/theme-toggle/theme-script.tsx
similarity index 61%
rename from packages/docs/src/components/router-head/theme-script.tsx
rename to packages/docs/src/components/theme-toggle/theme-script.tsx
index 10d825052f0..6281a21a384 100644
--- a/packages/docs/src/components/router-head/theme-script.tsx
+++ b/packages/docs/src/components/theme-toggle/theme-script.tsx
@@ -1,5 +1,17 @@
export const themeStorageKey = 'theme-preference';
+export const colorSchemeChangeListener = (onColorSchemeChange: (isDark: boolean) => void) => {
+ const listener = ({ matches: isDark }: MediaQueryListEvent) => {
+ onColorSchemeChange(isDark);
+ };
+ window
+ .matchMedia('(prefers-color-scheme: dark)')
+ .addEventListener('change', (event) => listener(event));
+
+ return () =>
+ window.matchMedia('(prefers-color-scheme: dark)').removeEventListener('change', listener);
+};
+
export const ThemeScript = () => {
const themeScript = `
try {
diff --git a/packages/docs/src/components/theme-toggle/theme-toggle.tsx b/packages/docs/src/components/theme-toggle/theme-toggle.tsx
index 2dc159794d1..23a138c17c5 100644
--- a/packages/docs/src/components/theme-toggle/theme-toggle.tsx
+++ b/packages/docs/src/components/theme-toggle/theme-toggle.tsx
@@ -1,5 +1,5 @@
import { component$, event$, isServer, useSignal, useStyles$ } from '@builder.io/qwik';
-import { themeStorageKey } from '../router-head/theme-script';
+import { themeStorageKey } from './theme-script';
import themeToggle from './theme-toggle.css?inline';
import { SunIcon } from './Sun';
import { MoonIcon } from './Moon';
@@ -46,18 +46,6 @@ export const getColorPreference = (): ThemePreference => {
return (theme as ThemePreference) || 'auto';
};
-export const colorSchemeChangeListener = (onColorSchemeChange: (isDark: boolean) => void) => {
- const listener = ({ matches: isDark }: MediaQueryListEvent) => {
- onColorSchemeChange(isDark);
- };
- window
- .matchMedia('(prefers-color-scheme: dark)')
- .addEventListener('change', (event) => listener(event));
-
- return () =>
- window.matchMedia('(prefers-color-scheme: dark)').removeEventListener('change', listener);
-};
-
export const ThemeToggle = component$(() => {
useStyles$(themeToggle);
const preference = useSignal(getColorPreference());
From fd65cc93f0b5bb05726494d6e6b754fd92a33188 Mon Sep 17 00:00:00 2001
From: Jerry_Wu <409187100@qq.com>
Date: Thu, 16 Oct 2025 13:40:43 +0800
Subject: [PATCH 09/11] refactor: enhance theme toggle component for better
responsiveness
- Updated the theme toggle button styles to improve layout and alignment.
- Added conditional text display for theme preference on smaller screens.
- Adjusted visibility of theme icons based on screen size for a cleaner UI.
---
.../docs/src/components/theme-toggle/theme-toggle.tsx | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
diff --git a/packages/docs/src/components/theme-toggle/theme-toggle.tsx b/packages/docs/src/components/theme-toggle/theme-toggle.tsx
index 23a138c17c5..ee68d7a3c53 100644
--- a/packages/docs/src/components/theme-toggle/theme-toggle.tsx
+++ b/packages/docs/src/components/theme-toggle/theme-toggle.tsx
@@ -67,7 +67,7 @@ export const ThemeToggle = component$(() => {