@@ -1137,7 +1135,7 @@ export function Style() {
style={{
borderRadius: 14,
border: '0.5px solid rgba(148,163,184,0.22)',
- background: 'rgba(248,250,252,0.9)',
+ background: 'var(--ol-style-subtle-bg)',
padding: 14,
}}
>
@@ -1155,7 +1153,7 @@ export function Style() {
style={{
borderRadius: 14,
border: '0.5px solid rgba(37,99,235,0.16)',
- background: 'rgba(239,246,255,0.86)',
+ background: 'var(--ol-style-subtle-bg)',
padding: 14,
}}
>
@@ -1189,7 +1187,7 @@ function MetaItem({ label, value }: { label: string; value: string }) {
style={{
borderRadius: 12,
border: '0.5px solid rgba(148,163,184,0.2)',
- background: 'rgba(255,255,255,0.92)',
+ background: 'var(--ol-style-input-bg)',
padding: '10px 12px',
}}
>
@@ -1226,7 +1224,7 @@ function DirectiveRow({
padding: '10px 12px',
borderRadius: 12,
border: '0.5px solid rgba(148,163,184,0.2)',
- background: 'rgba(255,255,255,0.92)',
+ background: 'var(--ol-style-input-bg)',
}}
>
diff --git a/openless-all/app/src/pages/Translation.tsx b/openless-all/app/src/pages/Translation.tsx
index f54c563c..cb54afa7 100644
--- a/openless-all/app/src/pages/Translation.tsx
+++ b/openless-all/app/src/pages/Translation.tsx
@@ -228,7 +228,7 @@ export function Translation() {
options={targetOptions}
placeholder={t('translation.target.disabled')}
ariaLabel={t('translation.target.title')}
- style={{ width: '100%', maxWidth: 360, fontSize: 13, background: '#fff' }}
+ style={{ width: '100%', maxWidth: 360, fontSize: 13 }}
/>
diff --git a/openless-all/app/src/pages/_atoms.tsx b/openless-all/app/src/pages/_atoms.tsx
index d98ce7cb..89644c6b 100644
--- a/openless-all/app/src/pages/_atoms.tsx
+++ b/openless-all/app/src/pages/_atoms.tsx
@@ -53,7 +53,7 @@ export function Card({ children, style, padding = 18, glassy = false, className
= {
- default: { bg: 'rgba(0,0,0,0.05)', color: 'var(--ol-ink-2)', bd: 'transparent' },
- blue: { bg: 'var(--ol-blue-soft)',color: 'var(--ol-blue)', bd: 'transparent' },
- ok: { bg: 'var(--ol-ok-soft)', color: 'var(--ol-ok)', bd: 'transparent' },
- outline: { bg: 'transparent', color: 'var(--ol-ink-3)', bd: 'var(--ol-line-strong)' },
- dark: { bg: 'var(--ol-ink)', color: '#fff', bd: 'transparent' },
+ default: { bg: 'var(--ol-pill-bg)', color: 'var(--ol-ink-2)', bd: 'transparent' },
+ blue: { bg: 'var(--ol-pill-blue-bg)', color: 'var(--ol-blue)', bd: 'transparent' },
+ ok: { bg: 'var(--ol-pill-ok-bg)', color: 'var(--ol-ok)', bd: 'transparent' },
+ outline: { bg: 'transparent', color: 'var(--ol-ink-3)', bd: 'var(--ol-line-strong)' },
+ dark: { bg: 'var(--ol-pill-selected-bg)', color: 'var(--ol-pill-selected-ink)', bd: 'transparent' },
};
const t = tones[tone];
const sz = size === 'sm'
@@ -125,10 +125,10 @@ interface BtnProps {
export function Btn({ children, variant = 'ghost', size = 'md', icon, style, onClick, disabled = false }: BtnProps) {
const variants: Record
= {
- primary: { bg: 'var(--ol-ink)', color: '#fff', bd: 'transparent', sh: '0 1px 2px rgba(0,0,0,.08)' },
- blue: { bg: 'var(--ol-blue)', color: '#fff', bd: 'transparent', sh: '0 1px 2px rgba(37,99,235,.18)' },
- ghost: { bg: 'transparent', color: 'var(--ol-ink-2)', bd: 'var(--ol-line-strong)', sh: 'none' },
- soft: { bg: 'rgba(0,0,0,0.04)', color: 'var(--ol-ink-2)', bd: 'transparent', sh: 'none' },
+ primary: { bg: 'var(--ol-primary-solid-bg)', color: 'var(--ol-primary-solid-ink)', bd: 'transparent', sh: 'var(--ol-shadow-sm)' },
+ blue: { bg: 'var(--ol-accent-solid-bg)', color: 'var(--ol-accent-solid-ink)', bd: 'transparent', sh: 'var(--ol-shadow-sm)' },
+ ghost: { bg: 'transparent', color: 'var(--ol-ink-2)', bd: 'var(--ol-line-strong)', sh: 'none' },
+ soft: { bg: 'var(--ol-control-muted)', color: 'var(--ol-ink-2)', bd: 'transparent', sh: 'none' },
};
const v = variants[variant];
const sizes: Record = {
diff --git a/openless-all/app/src/pages/settings/AboutSection.tsx b/openless-all/app/src/pages/settings/AboutSection.tsx
index 5d9b4cb3..5915a7e6 100644
--- a/openless-all/app/src/pages/settings/AboutSection.tsx
+++ b/openless-all/app/src/pages/settings/AboutSection.tsx
@@ -3,7 +3,7 @@
// 「加入 Beta 渠道」已挪到「高级」页底部(见 BetaChannelSection),这里图标旁
// 只保留查正式版的「检查更新」按钮。
-import { useEffect, useRef, useState, type CSSProperties } from 'react';
+import { useEffect, useRef, useState } from 'react';
import { useTranslation } from 'react-i18next';
import { Icon } from '../../components/Icon';
import { Row } from '../../components/ui/Row';
@@ -11,7 +11,7 @@ import { getPlatformCapabilities, openExternal } from '../../lib/ipc';
import type { PlatformCapabilities } from '../../lib/types';
import { APP_VERSION_LABEL } from '../../lib/appVersion';
import { Card } from '../_atoms';
-import { SectionTitle } from './shared';
+import { btnGhostStyle, SectionTitle } from './shared';
import { CheckUpdateButton } from './CheckUpdateButton';
const HELP_URL = 'https://github.com/appergb/openless#readme';
@@ -67,27 +67,27 @@ export function AboutSection() {
{t('settings.about.linksTitle')}
-
- openExternal(HELP_URL)}>
+ openExternal(HELP_URL)}>
{t('modal.about.docsBtn')}
- openExternal(HELP_URL)}>
+ openExternal(HELP_URL)}>
{t('modal.sections.helpCenter')}
- openExternal(RELEASE_NOTES_URL)}>
+ openExternal(RELEASE_NOTES_URL)}>
{t('modal.sections.releaseNotes')}
- openExternal('https://github.com/appergb/openless/issues')}>
+ openExternal('https://github.com/appergb/openless/issues')}>
{t('modal.about.feedbackBtn')}
@@ -100,7 +100,7 @@ export function AboutSection() {
boxShadow: '0 1px 0 rgba(0,0,0,0.04)',
color: 'var(--ol-ink-2)',
}}>1078960553
-
+
{qqCopied && {t('common.copied')}}
@@ -111,11 +111,3 @@ export function AboutSection() {
);
}
-const btnGhost: CSSProperties = {
- padding: '5px 10px', fontSize: 12, borderRadius: 6,
- border: '0.5px solid var(--ol-line-strong)',
- background: '#fff', color: 'var(--ol-ink-2)',
- cursor: 'default', fontFamily: 'inherit',
- maxWidth: '100%',
- transition: 'background 0.16s var(--ol-motion-quick), border-color 0.16s var(--ol-motion-quick)',
-};
diff --git a/openless-all/app/src/pages/settings/CheckUpdateButton.tsx b/openless-all/app/src/pages/settings/CheckUpdateButton.tsx
index 23ab8ec5..19106fd2 100644
--- a/openless-all/app/src/pages/settings/CheckUpdateButton.tsx
+++ b/openless-all/app/src/pages/settings/CheckUpdateButton.tsx
@@ -5,7 +5,8 @@
// 呈现 2.5s 后自动回到 idle,绝不另起文字块、不改变所在卡片高度 —— 杜绝
// 「渲染框突然变大 / 抽搐」。发现新版则弹出固定定位的 UpdateDialog。
-import { useEffect, type CSSProperties } from 'react';
+import { useEffect } from 'react';
+import { btnGhostStyle } from './shared';
import { useTranslation } from 'react-i18next';
import { Icon } from '../../components/Icon';
import { isDialogStatus, UpdateDialog, useAutoUpdate } from '../../components/AutoUpdate';
@@ -45,7 +46,7 @@ export function CheckUpdateButton({ channel }: { channel: UpdateChannel }) {
? t('settings.about.upToDate')
: undefined
}
- style={{ ...checkBtnStyle, color, opacity: checking || busy ? 0.7 : 1 }}
+ style={{ ...btnGhostStyle, color, opacity: checking || busy ? 0.7 : 1, display: 'inline-flex', alignItems: 'center', justifyContent: 'center', gap: 6, minWidth: 84 }}
>
-
+
{choices.map(([v, l]) => (
(
+ () => prefs?.themeMode ?? readThemePreference(),
+ );
+
+ useEffect(() => {
+ if (prefs?.themeMode) setPref(prefs.themeMode);
+ }, [prefs?.themeMode]);
+
+ const options = useMemo(
+ () => [
+ { value: 'system' as const, label: t('settings.theme.system') },
+ { value: 'light' as const, label: t('settings.theme.light') },
+ { value: 'dark' as const, label: t('settings.theme.dark') },
+ ],
+ [t],
+ );
+
+ const apply = async (next: ThemePreference) => {
+ setPref(next);
+ setThemePreference(next);
+ await updatePrefs(current => {
+ if (current.themeMode === next) return current;
+ return { ...current, themeMode: next };
+ });
+ };
+
+ return (
+
+
+ {t('settings.theme.title')}
+
+
+ void apply(next as ThemePreference)}
+ options={options}
+ ariaLabel={t('settings.theme.label')}
+ style={{ maxWidth: 220, minWidth: 200 }}
+ />
+
+
+ );
+}
diff --git a/openless-all/app/src/pages/settings/shared.tsx b/openless-all/app/src/pages/settings/shared.tsx
index ad385393..f4e594c4 100644
--- a/openless-all/app/src/pages/settings/shared.tsx
+++ b/openless-all/app/src/pages/settings/shared.tsx
@@ -128,6 +128,37 @@ export function Toggle({
)
}
+export function chipSelectedStyle(selected: boolean): CSSProperties {
+ return {
+ background: selected ? "var(--ol-pill-selected-bg)" : "transparent",
+ border: selected
+ ? "0.5px solid var(--ol-pill-selected-border)"
+ : "0.5px solid var(--ol-line-strong)",
+ color: selected ? "var(--ol-pill-selected-ink)" : "var(--ol-ink-3)",
+ }
+}
+
+export const btnGhostStyle: CSSProperties = {
+ padding: "5px 10px",
+ fontSize: 12,
+ borderRadius: 6,
+ border: "0.5px solid var(--ol-line-strong)",
+ background: "var(--ol-control-solid)",
+ color: "var(--ol-ink-2)",
+ cursor: "default",
+ fontFamily: "inherit",
+ maxWidth: "100%",
+ transition:
+ "background 0.16s var(--ol-motion-quick), border-color 0.16s var(--ol-motion-quick)",
+}
+
+export const segmentedTrackStyle: CSSProperties = {
+ display: "inline-flex",
+ padding: 2,
+ borderRadius: 8,
+ background: "var(--ol-segmented-bg)",
+}
+
export const inputStyle: CSSProperties = {
flex: 1,
height: 32,
diff --git a/openless-all/app/src/pages/settings/tabs.tsx b/openless-all/app/src/pages/settings/tabs.tsx
index c2a4555d..161fa61d 100644
--- a/openless-all/app/src/pages/settings/tabs.tsx
+++ b/openless-all/app/src/pages/settings/tabs.tsx
@@ -6,6 +6,7 @@ import { useEffect, useState } from 'react';
import { RecordingInputSection } from './RecordingInputSection';
import { ShortcutsSection } from './ShortcutsSection';
import { LanguageSection } from './LanguageSection';
+import { ThemeSection } from './ThemeSection';
import { ProvidersSection } from './ProvidersSection';
import { MarketplaceSection } from './MarketplaceSection';
import { PermissionsSection } from './PermissionsSection';
@@ -33,6 +34,7 @@ export function GeneralTab() {
<>
{showDesktopShortcuts && }
+
>
);
@@ -66,7 +68,8 @@ export function PrivacyTab() {
>
{t('modal.about.localFirst')}
diff --git a/openless-all/app/src/state/HotkeySettingsContext.tsx b/openless-all/app/src/state/HotkeySettingsContext.tsx
index cb69b49a..abde285e 100644
--- a/openless-all/app/src/state/HotkeySettingsContext.tsx
+++ b/openless-all/app/src/state/HotkeySettingsContext.tsx
@@ -20,6 +20,7 @@ import type {
UserPreferences,
} from "../lib/types"
import i18n, { outputPrefsForLocale, type SupportedLocale } from "../i18n"
+import { applyThemeFromPreference } from "../lib/themeMode"
interface HotkeySettingsContextValue {
prefs: UserPreferences | null
@@ -59,6 +60,7 @@ export function HotkeySettingsProvider({ children }: { children: ReactNode }) {
let nextError: string | null = null
if (prefsResult.status === "fulfilled") {
setPrefs(prefsResult.value)
+ applyThemeFromPreference(prefsResult.value.themeMode ?? "system")
} else {
console.error(
"[hotkey-settings] failed to load preferences",
@@ -118,6 +120,7 @@ export function HotkeySettingsProvider({ children }: { children: ReactNode }) {
if (!nextPrefs) return
latestPrefsRef.current = nextPrefs
setPrefs(nextPrefs)
+ applyThemeFromPreference(nextPrefs.themeMode ?? "system")
},
)
if (cancelled) {
diff --git a/openless-all/app/src/styles/global.css b/openless-all/app/src/styles/global.css
index 30fdfd61..3f712952 100644
--- a/openless-all/app/src/styles/global.css
+++ b/openless-all/app/src/styles/global.css
@@ -13,6 +13,16 @@ html[data-ol-platform="linux"] #root {
background: var(--ol-surface);
}
+html[data-ol-platform="android"],
+html[data-ol-platform="android"] body,
+html[data-ol-platform="android"] #root {
+ background: var(--ol-surface);
+}
+
+html {
+ color-scheme: light dark;
+}
+
body {
background: transparent;
user-select: none;
@@ -145,14 +155,7 @@ a { color: inherit; text-decoration: none; }
.ol-frost {
position: relative;
isolation: isolate;
- /* 体渐变 + 左上高光扫面 —— 半透明白底(~0.9),给磨砂面体积感而不是死平。 */
- background:
- radial-gradient(135% 86% at 15% -10%,
- rgba(255, 255, 255, 0.97) 0%,
- rgba(255, 255, 255, 0) 56%),
- linear-gradient(161deg,
- rgba(255, 255, 255, 0.93) 0%,
- rgba(244, 247, 252, 0.88) 100%);
+ background: var(--ol-frost-bg);
}
.ol-frost::before {
@@ -177,3 +180,50 @@ html[data-ol-platform="linux"] .ol-frost {
html[data-ol-platform="linux"] .ol-frost::before {
content: none;
}
+
+html[data-ol-platform="android"] .ol-frost {
+ background: var(--ol-surface);
+}
+
+html[data-ol-platform="android"] .ol-frost::before {
+ content: none;
+}
+
+.ol-app-shell-bg {
+ background: var(--ol-app-shell-bg);
+}
+
+.ol-aura-panel {
+ background: var(--ol-panel-bg);
+ border: 0.5px solid var(--ol-panel-border);
+ box-shadow: var(--ol-panel-shadow);
+}
+
+.ol-aura-card {
+ background: var(--ol-card-bg);
+ border: 0.5px solid var(--ol-card-border);
+ box-shadow: var(--ol-card-shadow);
+}
+
+.ol-aura-settings {
+ background: var(--ol-settings-content-bg);
+}
+
+.ol-aura-settings[data-ol-mobile="true"] {
+ border-radius: var(--ol-panel-radius) var(--ol-panel-radius) 0 0;
+}
+
+.ol-overview-hero {
+ background: var(--ol-card-bg);
+ border: 0.5px solid var(--ol-card-border);
+}
+
+.ol-capsule-pill {
+ background: var(--ol-capsule-pill-bg) !important;
+ border-color: var(--ol-capsule-pill-border) !important;
+}
+
+html[data-ol-platform="linux"] .ol-capsule-pill,
+html[data-ol-platform="android"] .ol-capsule-pill {
+ background: var(--ol-capsule-pill-bg) !important;
+}
diff --git a/openless-all/app/src/styles/tokens.css b/openless-all/app/src/styles/tokens.css
index 5b6c168e..dab4af9b 100755
--- a/openless-all/app/src/styles/tokens.css
+++ b/openless-all/app/src/styles/tokens.css
@@ -4,11 +4,22 @@
/* QaPanel(划词追问)保留新代码引用的 6 个 solid/radius token —— 旧 UI 回退后
补回这几个,避免该页元素丢色。用 var() 间接引用基础色,深浅模式自动跟随。 */
--ol-accent-solid-bg: var(--ol-blue);
+ --ol-accent-solid-bg-hover: var(--ol-blue-hover);
--ol-accent-solid-ink: var(--ol-on-accent);
+ --ol-primary-solid-bg: var(--ol-ink);
+ --ol-primary-solid-ink: var(--ol-on-accent);
--ol-danger-solid-bg: var(--ol-err);
--ol-danger-solid-ink: #ffffff;
--ol-control-radius: 8px;
--ol-bubble-radius: var(--ol-r-lg);
+ --ol-input-ink: var(--ol-ink);
+ --ol-frost-bg:
+ radial-gradient(135% 86% at 15% -10%,
+ rgba(255, 255, 255, 0.97) 0%,
+ rgba(255, 255, 255, 0) 56%),
+ linear-gradient(161deg,
+ rgba(255, 255, 255, 0.93) 0%,
+ rgba(244, 247, 252, 0.88) 100%);
/* Shared palette */
--ol-white: #ffffff;
--ol-canvas: #f7f7f8;
@@ -33,7 +44,7 @@
--ol-ink: #0a0a0b;
--ol-ink-2: #2a2a2d;
--ol-ink-3: rgba(10, 10, 11, 0.62);
- --ol-ink-4: rgba(10, 10, 11, 0.42);
+ --ol-ink-4: rgba(10, 10, 11, 0.58);
--ol-ink-5: rgba(10, 10, 11, 0.24);
/* Blue accent */
@@ -157,6 +168,11 @@
--ol-segmented-bg: rgba(0,0,0,0.04);
--ol-segmented-active-bg: #ffffff;
--ol-segmented-active-shadow: 0 1px 2px rgba(0,0,0,.06), 0 0 0 0.5px rgba(0,0,0,.06);
+ --ol-select-trigger-bg: var(--ol-control-solid);
+ --ol-select-popover-bg: rgba(252, 252, 254, 0.96);
+ --ol-select-popover-border: rgba(0, 0, 0, 0.10);
+ --ol-select-popover-shadow: 0 12px 30px -10px rgba(15, 17, 22, 0.25), 0 0 0 0.5px rgba(0, 0, 0, 0.06);
+ --ol-select-option-hover-bg: rgba(37, 99, 235, 0.10);
--ol-toggle-off-bg: rgba(0,0,0,0.15);
--ol-toggle-knob: #ffffff;
--ol-overlay-bg: rgba(15,17,22,0.32);
@@ -189,9 +205,40 @@
--ol-style-editor-bg: linear-gradient(180deg, rgba(255,255,255,0.92), rgba(247,249,252,0.82));
--ol-style-editor-border: rgba(255,255,255,0.74);
--ol-style-editor-shadow: 0 32px 96px -32px rgba(15,23,42,0.34);
+
+ /* Desktop capsule: follows app theme (light frosted pill / dark solid pill). */
+ --ol-capsule-pill-bg: rgba(255, 255, 255, 0.90);
+ --ol-capsule-pill-border: rgba(0, 0, 0, 0.10);
+ --ol-capsule-pill-shadow: 0 18px 50px -10px rgba(15, 17, 22, 0.16), 0 0 0 0.5px rgba(0, 0, 0, 0.06);
+ --ol-capsule-pill-inset: inset 0 1px 0 0 rgba(255, 255, 255, 0.72);
+ --ol-capsule-btn-bg: rgba(0, 0, 0, 0.06);
+ --ol-capsule-btn-bg-confirm: rgba(0, 0, 0, 0.08);
+ --ol-capsule-btn-ink: #2a2a2d;
+ --ol-capsule-btn-border: rgba(0, 0, 0, 0.10);
+ --ol-capsule-center-ink: rgba(10, 10, 11, 0.72);
+ --ol-capsule-confirm-bg: var(--ol-capsule-btn-bg-confirm);
+ --ol-capsule-confirm-ink: var(--ol-capsule-btn-ink);
+ --ol-capsule-badge-bg: rgba(255, 255, 255, 0.82);
+ --ol-capsule-badge-border: rgba(37, 99, 235, 0.25);
}
[data-ol-theme='dark'] {
+ --ol-accent-solid-bg: #2563eb;
+ --ol-accent-solid-bg-hover: #3b82f6;
+ --ol-accent-solid-ink: #f8fbff;
+ --ol-primary-solid-bg: #2563eb;
+ --ol-primary-solid-ink: #f8fbff;
+ --ol-danger-solid-bg: #dc2626;
+ --ol-danger-solid-ink: #ffffff;
+ --ol-input-ink: #f4f7fb;
+ --ol-frost-bg:
+ radial-gradient(135% 86% at 15% -10%,
+ rgba(255, 255, 255, 0.06) 0%,
+ rgba(255, 255, 255, 0) 56%),
+ linear-gradient(161deg,
+ rgba(26, 26, 30, 0.96) 0%,
+ rgba(20, 20, 24, 0.92) 100%);
+
--ol-white: #11141a;
--ol-canvas: #0b0e13;
--ol-surface: #141922;
@@ -279,7 +326,7 @@
--ol-control-muted: rgba(255,255,255,0.05);
--ol-control-muted-strong: rgba(255,255,255,0.08);
--ol-control-border: rgba(255,255,255,0.08);
- --ol-control-solid: rgba(24,31,41,0.96);
+ --ol-control-solid: rgba(28, 34, 44, 0.98);
--ol-control-elevated: rgba(21,27,36,0.98);
--ol-control-shadow: none;
--ol-pill-bg: rgba(255,255,255,0.05);
@@ -292,12 +339,17 @@
--ol-pill-dark-bg: rgba(255,255,255,0.08);
--ol-pill-dark-border: rgba(255,255,255,0.12);
--ol-pill-dark-shadow: none;
- --ol-pill-selected-bg: rgba(96,165,250,0.18);
+ --ol-pill-selected-bg: rgba(36, 42, 54, 0.98);
--ol-pill-selected-ink: #f4f7fb;
- --ol-pill-selected-border: rgba(96,165,250,0.40);
+ --ol-pill-selected-border: rgba(255, 255, 255, 0.10);
--ol-segmented-bg: rgba(255,255,255,0.06);
- --ol-segmented-active-bg: rgba(255,255,255,0.12);
- --ol-segmented-active-shadow: none;
+ --ol-segmented-active-bg: rgba(36, 42, 54, 0.98);
+ --ol-segmented-active-shadow: 0 1px 2px rgba(0, 0, 0, 0.28), 0 0 0 0.5px rgba(255, 255, 255, 0.06);
+ --ol-select-trigger-bg: var(--ol-control-solid);
+ --ol-select-popover-bg: rgba(28, 32, 40, 0.98);
+ --ol-select-popover-border: rgba(255, 255, 255, 0.10);
+ --ol-select-popover-shadow: 0 12px 30px -10px rgba(0, 0, 0, 0.48), 0 0 0 0.5px rgba(255, 255, 255, 0.06);
+ --ol-select-option-hover-bg: rgba(96, 165, 250, 0.14);
--ol-toggle-off-bg: rgba(255,255,255,0.16);
--ol-toggle-knob: #f8fbff;
--ol-overlay-bg: rgba(4, 8, 14, 0.58);
@@ -330,6 +382,20 @@
--ol-style-editor-bg: linear-gradient(180deg, rgba(27,27,30,0.96), rgba(23,23,26,0.94));
--ol-style-editor-border: rgba(255,255,255,0.07);
--ol-style-editor-shadow: none;
+
+ --ol-capsule-pill-bg: #1a1a1e;
+ --ol-capsule-pill-border: rgba(255, 255, 255, 0.10);
+ --ol-capsule-pill-shadow: 0 18px 50px -10px rgba(0, 0, 0, 0.42), 0 0 0 0.5px rgba(0, 0, 0, 0.24);
+ --ol-capsule-pill-inset: inset 0 1px 0 0 rgba(255, 255, 255, 0.08);
+ --ol-capsule-btn-bg: #2a2a2f;
+ --ol-capsule-btn-bg-confirm: #2e2e33;
+ --ol-capsule-btn-ink: #f4f7fb;
+ --ol-capsule-btn-border: rgba(255, 255, 255, 0.12);
+ --ol-capsule-center-ink: rgba(244, 247, 251, 0.72);
+ --ol-capsule-confirm-bg: var(--ol-capsule-btn-bg-confirm);
+ --ol-capsule-confirm-ink: var(--ol-capsule-btn-ink);
+ --ol-capsule-badge-bg: rgba(26, 26, 30, 0.94);
+ --ol-capsule-badge-border: rgba(96, 165, 250, 0.28);
}
* { box-sizing: border-box; }
@@ -355,7 +421,15 @@ body {
border-radius: 3px;
}
.ol-thinscroll::-webkit-scrollbar-thumb:hover { background: rgba(0, 0, 0, 0.28); }
-.ol-thinscroll { scrollbar-width: thin; scrollbar-color: rgba(0, 0, 0, 0.18) transparent; }
+[data-ol-theme='dark'] .ol-thinscroll::-webkit-scrollbar-thumb {
+ background: rgba(255, 255, 255, 0.18);
+}
+[data-ol-theme='dark'] .ol-thinscroll::-webkit-scrollbar-thumb:hover {
+ background: rgba(255, 255, 255, 0.28);
+}
+[data-ol-theme='dark'] .ol-thinscroll {
+ scrollbar-color: rgba(255, 255, 255, 0.18) transparent;
+}
/* Glass surface */
.ol-glass {