Skip to content

UI: add corner radius slider and appearance polish#49436

Merged
BunsDev merged 8 commits into
mainfrom
ui/touch-ups
Mar 18, 2026
Merged

UI: add corner radius slider and appearance polish#49436
BunsDev merged 8 commits into
mainfrom
ui/touch-ups

Conversation

@BunsDev

@BunsDev BunsDev commented Mar 18, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Unify border radii across all three themes (Claw, Knot, Dash) by removing per-theme radius overrides, so every theme starts from the same baseline values.
  • Add a Roundness slider (0–100) to the Appearance settings, allowing users to adjust corner radius across the entire UI from sharp to fully rounded.
  • Polish focus styles, hover effects, accent color variables, and mobile layout for chat, config, and layout components.
  • Harden form-utils against prototype-pollution and add click-to-reveal for redacted env vars in config UI.

Change Type (select all)

  • Bug fix
  • Feature
  • Refactor
  • Docs
  • Security hardening
  • Chore/infra

Scope (select all touched areas)

  • Gateway / orchestration
  • Skills / tool execution
  • Auth / tokens
  • Memory / storage
  • Integrations
  • API / contracts
  • UI / DX
  • CI/CD / infra

Linked Issue/PR

  • Related: N/A

User-visible / Behavior Changes

  • New "Roundness" slider in Settings > Appearance lets users scale corner radii from fully sharp (0) to double the defaults (100), with 50 as the default matching the current look.
  • Dash theme no longer overrides corner radii to near-square values — all themes now share the same base radii, adjustable via the slider.

Security Impact (required)

  • New permissions/capabilities? No
  • Secrets/tokens handling changed? No
  • New/changed network calls? No
  • Command/tool execution surface changed? No
  • Data access scope changed? No

Repro + Verification

Environment

  • OS: macOS
  • Runtime/container: Node 22+, Bun
  • Model/provider: N/A (UI-only)
  • Integration/channel (if any): Control UI
  • Relevant config (redacted): N/A

Steps

  1. Open Control UI → Settings → Appearance
  2. Locate the "Roundness" slider below Theme Mode
  3. Drag between 0 (sharp) and 100 (round) — preview swatches and full UI update live

Expected

  • Slider updates all --radius-* CSS custom properties in real time
  • Setting persists across page reloads
  • Default value (50) matches the current baseline look

Actual

  • Works as expected

Evidence

  • Failing test/log before + passing after
  • All 26 relevant UI tests pass after changes

Human Verification (required)

  • Verified scenarios: slider at 0/50/100, page reload persistence, all three themes
  • Edge cases checked: boundary values (0, 100), missing/invalid persisted value falls back to 50
  • What you did not verify: other browsers beyond Chrome/Safari

Review Conversations

  • I replied to or resolved every bot review conversation I addressed in this PR.
  • I left unresolved only the conversations that still need reviewer or maintainer judgment.

Compatibility / Migration

  • Backward compatible? Yes
  • Config/env changes? No
  • Migration needed? No

Failure Recovery (if this breaks)

  • How to disable/revert this change quickly: revert the commit; the default (50) matches the original look
  • Files/config to restore: N/A — setting auto-defaults to 50 if missing
  • Known bad symptoms reviewers should watch for: square corners on Dash theme (intentionally removed per unification)

Risks and Mitigations

  • Risk: Dash theme users may notice their previously square corners are now rounded by default.
    • Mitigation: They can set the slider to 0 for a sharp look, which is sharper than the old Dash defaults.

Made with Cursor

@openclaw-barnacle openclaw-barnacle Bot added app: web-ui App: web-ui size: XL maintainer Maintainer-authored PR labels Mar 18, 2026
@BunsDev BunsDev self-assigned this Mar 18, 2026
BunsDev added 8 commits March 17, 2026 23:03
…accent colors and optimize spacing rules in layout files.
…djust focus states for chat components and layout elements.
…x-shadow effects for improved accessibility and visual consistency.
…n user settings, update CSS variables for new themes, and enhance security by preventing prototype pollution in form utilities.
…roundness, update CSS styles for sliders, and integrate border radius adjustments across components.
…to simplify configuration and enhance consistency across components.
…, adjust padding and grid structures, and implement bottom navigation for improved usability on smaller screens.
@greptile-apps

greptile-apps Bot commented Mar 18, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR delivers three related improvements to the Control UI: (1) a new Roundness slider in Appearance settings that scales all --radius-* CSS custom properties live via applyBorderRadius, persisted in UiSettings; (2) a full theme redesign for Dash (warm amber/chocolate palette) and Knot (blue accent), with per-theme radius overrides removed so the slider controls all themes uniformly; and (3) a collection of polish changes — mobile responsive layouts, focus/hover style refinements, prototype-pollution hardening in form-utils, and click-to-reveal for redacted env vars.

Key points:

  • applyBorderRadius correctly guards against SSR and scales five --radius-* properties linearly; --radius-full (used for pills/circles) is intentionally left untouched.
  • Prototype-pollution hardening in setPathValue / removePathValue is solid and well-tested.
  • The "caps persisted session scopes to the most recent gateways" test in storage.node.test.ts was rewritten to use a single gateway URL for all 12 iterations, so it no longer validates the eviction/cap behavior it originally covered — this is a test coverage regression worth addressing.
  • setBorderRadius in app.ts calls applyBorderRadius twice per invocation (once directly, once via applySettingsInternal); harmless but redundant.
  • The light/dark Mode picker is removed from the Appearance settings section and is now accessible only via the topbar toggle — a deliberate UX simplification.

Confidence Score: 3/5

  • Safe to merge with minor issues — the only meaningful concern is a test coverage regression that leaves gateway-session eviction logic untested.
  • The feature implementation is clean and well-structured. The prototype-pollution hardening, storage validation, and CSS variable approach are all solid. Score is held back by the storage.node.test.ts test regression where the "caps persisted session scopes" test no longer exercises multi-gateway eviction, leaving a coverage gap on a non-trivial storage invariant.
  • ui/src/ui/storage.node.test.ts — the gateway-session eviction test needs to be restored to actually test scoping across multiple distinct gateway URLs.

Comments Outside Diff (2)

  1. ui/src/ui/storage.node.test.ts, line 1604-1640 (link)

    P1 "caps persisted session scopes" test no longer validates the cap

    The test was rewritten to use the same gwUrl for all 12 save iterations, which means sessionsByGateway will only ever contain one entry (for that single URL, overwritten 12 times). The assertions were changed accordingly to only verify the final session value for that one gateway.

    The original test specifically verified that when more than 10 unique gateway URLs accumulate in sessionsByGateway, the oldest entries are evicted — this invariant is no longer exercised. The cap logic in storage.ts remains in the codebase but is now untested.

    Suggested fix: restore distinct gateway URLs across the loop iterations so that the eviction behavior can be verified, e.g.:

    for (let i = 0; i < 12; i += 1) {
      saveSettings({
        gatewayUrl: `wss://gateway-${i}.example:8443/openclaw`,
        ...
      });
    }
    // then verify only the 10 most recent gateways are retained
    const scopes = Object.keys(persisted.sessionsByGateway ?? {});
    expect(scopes).toHaveLength(10);
    expect(scopes).not.toContain("wss://gateway-0.example:8443/openclaw");
    expect(scopes).toContain("wss://gateway-11.example:8443/openclaw");
    Prompt To Fix With AI
    This is a comment left during a code review.
    Path: ui/src/ui/storage.node.test.ts
    Line: 1604-1640
    
    Comment:
    **"caps persisted session scopes" test no longer validates the cap**
    
    The test was rewritten to use the same `gwUrl` for all 12 save iterations, which means `sessionsByGateway` will only ever contain one entry (for that single URL, overwritten 12 times). The assertions were changed accordingly to only verify the final session value for that one gateway.
    
    The original test specifically verified that when more than 10 unique gateway URLs accumulate in `sessionsByGateway`, the oldest entries are evicted — this invariant is no longer exercised. The cap logic in `storage.ts` remains in the codebase but is now untested.
    
    Suggested fix: restore distinct gateway URLs across the loop iterations so that the eviction behavior can be verified, e.g.:
    
    ```ts
    for (let i = 0; i < 12; i += 1) {
      saveSettings({
        gatewayUrl: `wss://gateway-${i}.example:8443/openclaw`,
        ...
      });
    }
    // then verify only the 10 most recent gateways are retained
    const scopes = Object.keys(persisted.sessionsByGateway ?? {});
    expect(scopes).toHaveLength(10);
    expect(scopes).not.toContain("wss://gateway-0.example:8443/openclaw");
    expect(scopes).toContain("wss://gateway-11.example:8443/openclaw");
    ```
    
    How can I resolve this? If you propose a fix, please make it concise.
  2. ui/src/ui/app.ts, line 1169-1176 (link)

    P2 Redundant applyBorderRadius call

    applyBorderRadius(value) is called explicitly on line 1170, but then applySettingsInternal(...) is immediately called with the updated settings, and applySettings in app-settings.ts also calls applyBorderRadius(next.borderRadius). This results in two identical DOM property writes per user interaction.

    The explicit call can be dropped since applySettingsInternal already handles it:

    Prompt To Fix With AI
    This is a comment left during a code review.
    Path: ui/src/ui/app.ts
    Line: 1169-1176
    
    Comment:
    **Redundant `applyBorderRadius` call**
    
    `applyBorderRadius(value)` is called explicitly on line 1170, but then `applySettingsInternal(...)` is immediately called with the updated settings, and `applySettings` in `app-settings.ts` also calls `applyBorderRadius(next.borderRadius)`. This results in two identical DOM property writes per user interaction.
    
    The explicit call can be dropped since `applySettingsInternal` already handles it:
    
    
    
    How can I resolve this? If you propose a fix, please make it concise.
Prompt To Fix All With AI
This is a comment left during a code review.
Path: ui/src/ui/storage.node.test.ts
Line: 1604-1640

Comment:
**"caps persisted session scopes" test no longer validates the cap**

The test was rewritten to use the same `gwUrl` for all 12 save iterations, which means `sessionsByGateway` will only ever contain one entry (for that single URL, overwritten 12 times). The assertions were changed accordingly to only verify the final session value for that one gateway.

The original test specifically verified that when more than 10 unique gateway URLs accumulate in `sessionsByGateway`, the oldest entries are evicted — this invariant is no longer exercised. The cap logic in `storage.ts` remains in the codebase but is now untested.

Suggested fix: restore distinct gateway URLs across the loop iterations so that the eviction behavior can be verified, e.g.:

```ts
for (let i = 0; i < 12; i += 1) {
  saveSettings({
    gatewayUrl: `wss://gateway-${i}.example:8443/openclaw`,
    ...
  });
}
// then verify only the 10 most recent gateways are retained
const scopes = Object.keys(persisted.sessionsByGateway ?? {});
expect(scopes).toHaveLength(10);
expect(scopes).not.toContain("wss://gateway-0.example:8443/openclaw");
expect(scopes).toContain("wss://gateway-11.example:8443/openclaw");
```

How can I resolve this? If you propose a fix, please make it concise.

---

This is a comment left during a code review.
Path: ui/src/ui/app.ts
Line: 1169-1176

Comment:
**Redundant `applyBorderRadius` call**

`applyBorderRadius(value)` is called explicitly on line 1170, but then `applySettingsInternal(...)` is immediately called with the updated settings, and `applySettings` in `app-settings.ts` also calls `applyBorderRadius(next.borderRadius)`. This results in two identical DOM property writes per user interaction.

The explicit call can be dropped since `applySettingsInternal` already handles it:

```suggestion
  setBorderRadius(value: number) {
    applySettingsInternal(this as unknown as Parameters<typeof applySettingsInternal>[0], {
      ...this.settings,
      borderRadius: value,
    });
    this.requestUpdate();
  }
```

How can I resolve this? If you propose a fix, please make it concise.

Last reviewed commit: "Merge branch 'main' ..."

@BunsDev
BunsDev merged commit df72ca1 into main Mar 18, 2026
8 checks passed
@BunsDev
BunsDev deleted the ui/touch-ups branch March 18, 2026 04:06
@BunsDev
BunsDev restored the ui/touch-ups branch March 18, 2026 04:06
@BunsDev

BunsDev commented Mar 18, 2026

Copy link
Copy Markdown
Contributor Author

Landed via temp rebase onto main.

  • Gate: pnpm check + UI vitest run --project unit-node (161 tests passed)
  • Land commit: a5c207cdd8
  • Merge commit: df72ca1ece

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 3e04853efd

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread ui/index.html
Comment on lines +24 to +29
var keys = Object.keys(localStorage);
var raw;
for (var i = 0; i < keys.length; i++) {
if (keys[i].indexOf("openclaw.control.settings.v1") === 0) {
raw = localStorage.getItem(keys[i]);
if (raw) break;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Load the current gateway’s settings for prepaint theme

The new prepaint script selects the first openclaw.control.settings.v1* entry from localStorage, which is not guaranteed to be the active gateway’s scoped key. When users have settings saved for multiple gateways, this can apply the wrong theme/mode on initial paint (before app hydration), causing visible flash/inconsistent appearance until loadSettings() corrects it. The lookup should resolve the current gateway scope and read that specific key first, matching runtime settings resolution.

Useful? React with 👍 / 👎.

@aisle-research-bot

aisle-research-bot Bot commented Mar 18, 2026

Copy link
Copy Markdown

🔒 Aisle Security Analysis

We found 2 potential security issue(s) in this PR:

# Severity Title
1 🟡 Medium Prototype pollution via config map key rename bypasses FORBIDDEN_KEYS path checks
2 🔵 Low Unbounded localStorage/sessionStorage key growth from user-controlled gatewayUrl (client-side storage exhaustion DoS)

1. 🟡 Prototype pollution via config map key rename bypasses FORBIDDEN_KEYS path checks

Property Value
Severity Medium
CWE CWE-1321
Location ui/src/ui/views/config-form.node.ts:1229-1241

Description

The config form UI allows renaming keys for additionalProperties (“Custom entries”). The new key is taken from user input and used in a direct property assignment:

  • Input: nextKey from <input> value (.value.trim()) in renderMapField.
  • Sink: next[nextKey] = next[key].
  • If nextKey is "__proto__", the assignment invokes the __proto__ magic setter and mutates the prototype of next (rather than creating a normal own property).
  • This bypasses the new FORBIDDEN_KEYS protection in setPathValue/removePathValue because the forbidden key is not in the patch path; it is in the constructed object value being passed to onPatch(path, next).
  • The resulting polluted object is stored in config form state; in browsers cloneConfigObject() will typically use structuredClone, which preserves object prototypes, making the mutated prototype persist across later UI operations.

Vulnerable code:

const nextKey = (e.target as HTMLInputElement).value.trim();
...
const next = { ...value };
...
next[nextKey] = next[key];
delete next[key];
onPatch(path, next);

Impact:

  • A malicious key rename to __proto__ can replace the prototype of the affected config sub-object, causing inherited properties to appear via prototype chain lookups (e.g. "prop" in obj, obj.prop), potentially breaking logic or enabling follow-on exploitation in code that uses in / prototype chain reads.
  • This is a classic prototype pollution gadget in the UI layer even though setPathValue/removePathValue now block forbidden segments in paths.

Recommendation

Block forbidden keys at the point they are accepted and avoid the __proto__ setter behavior when creating/updating objects with attacker-controlled keys.

Suggested fix (minimal):

  • Reject __proto__, constructor, prototype for nextKey.
  • Prefer Object.hasOwn() over in to avoid prototype-chain surprises.
  • Use Object.defineProperty (or a null-prototype object) to create a data property safely.

Example:

const FORBIDDEN_KEYS = new Set(["__proto__", "prototype", "constructor"]);
...
const nextKey = (e.target as HTMLInputElement).value.trim();
if (!nextKey || nextKey === key) return;
if (FORBIDDEN_KEYS.has(nextKey)) return;

const next: Record<string, unknown> = { ...value };
if (Object.hasOwn(next, nextKey)) return;

Object.defineProperty(next, nextKey, {
  value: next[key],
  enumerable: true,
  writable: true,
  configurable: true,
});
delete next[key];
onPatch(path, next);

For stronger hardening, consider using Object.create(null) for maps representing additionalProperties values so they have no magic prototype keys at all.


2. 🔵 Unbounded localStorage/sessionStorage key growth from user-controlled gatewayUrl (client-side storage exhaustion DoS)

Property Value
Severity Low
CWE CWE-400
Location ui/src/ui/storage.ts:85-102

Description

The UI now persists settings under a gateway-scoped key derived from gatewayUrl (e.g., openclaw.control.settings.v1:${normalizeGatewayTokenScope(gatewayUrl)}). Because gatewayUrl is user-controlled and normalizeGatewayTokenScope() falls back to the raw trimmed input for invalid URLs, this enables unbounded creation of unique storage keys.

Impact:

  • A user (or script running in the origin) can cause a large number of distinct keys to be written (e.g., by repeatedly editing/typing different gateway URLs), eventually exceeding browser storage quota.
  • localStorage.setItem(...) is not wrapped in a try/catch in persistSettings(), so a QuotaExceededError can propagate and break settings updates / UI behavior.
  • Additionally, persistSessionToken() stores the token in sessionStorage under similarly derived keys, creating the same unbounded growth risk within the session.

Key code paths:

  • Input: gatewayUrl (user-configurable via UI and URL flows)
  • Key derivation: settingsKeyForGateway(next.gatewayUrl) and normalizeGatewayTokenScope(next.gatewayUrl)
  • Sink: storage.setItem(scopedKey, serialized) and sessionStorage.setItem(tokenSessionKeyForGateway(gatewayUrl), token)

Vulnerable code excerpt:

const scope = normalizeGatewayTokenScope(next.gatewayUrl);
const scopedKey = settingsKeyForGateway(next.gatewayUrl);
...
const serialized = JSON.stringify(persisted);
storage?.setItem(scopedKey, serialized);
storage?.setItem(LEGACY_SETTINGS_KEY, serialized);

Recommendation

Mitigate storage-exhaustion and key-injection risks by making persisted key space bounded and robust:

  1. Use a bounded, fixed-length key derived from the normalized gateway URL (e.g., a SHA-256 hash) rather than embedding the raw URL into the storage key.
  2. Cap and clean up old scoped settings keys (LRU eviction) so the number of persisted gateway entries cannot grow without bound.
  3. Debounce or defer persistence of gatewayUrl while the user is typing (persist only on blur/submit/confirm).
  4. Wrap storage writes in try/catch and gracefully handle quota errors.

Example approach (hash + bounded index):

const SETTINGS_KEY_PREFIX = "openclaw.control.settings.v1:";

async function gatewayScopeKey(gatewayUrl: string) {
  const normalized = normalizeGatewayTokenScope(gatewayUrl).slice(0, 2048); // also cap input
  const bytes = new TextEncoder().encode(normalized);
  const digest = await crypto.subtle.digest("SHA-256", bytes);
  const hex = [...new Uint8Array(digest)].map(b => b.toString(16).padStart(2,"0")).join("");
  return `${SETTINGS_KEY_PREFIX}${hex}`;
}

function safeSet(storage: Storage, key: string, value: string) {
  try {
    storage.setItem(key, value);
  } catch (e) {// handle QuotaExceededError: evict old keys and retry, or disable persistence
  }
}

Analyzed PR: #49436 at commit a5c207c

Last updated on: 2026-03-18T05:02:10Z

nikolaisid pushed a commit to nikolaisid/openclaw that referenced this pull request Mar 18, 2026
* Refactor CSS styles: replace hardcoded colors with CSS variables for accent colors and optimize spacing rules in layout files.

* Update CSS styles: streamline selectors, enhance hover effects, and adjust focus states for chat components and layout elements.

* Enhance focus styles for chat components: update border colors and box-shadow effects for improved accessibility and visual consistency.

* Implement theme management in UI: add dynamic theme switching based on user settings, update CSS variables for new themes, and enhance security by preventing prototype pollution in form utilities.

* Implement border radius customization in UI: add settings for corner roundness, update CSS styles for sliders, and integrate border radius adjustments across components.

* Remove border radius property from UI settings and related functions to simplify configuration and enhance consistency across components.

* Enhance responsive design in UI: add media queries for mobile layouts, adjust padding and grid structures, and implement bottom navigation for improved usability on smaller screens.

* UI: add corner radius slider to Appearance settings
fuller-stack-dev pushed a commit to fuller-stack-dev/openclaw that referenced this pull request Mar 20, 2026
* Refactor CSS styles: replace hardcoded colors with CSS variables for accent colors and optimize spacing rules in layout files.

* Update CSS styles: streamline selectors, enhance hover effects, and adjust focus states for chat components and layout elements.

* Enhance focus styles for chat components: update border colors and box-shadow effects for improved accessibility and visual consistency.

* Implement theme management in UI: add dynamic theme switching based on user settings, update CSS variables for new themes, and enhance security by preventing prototype pollution in form utilities.

* Implement border radius customization in UI: add settings for corner roundness, update CSS styles for sliders, and integrate border radius adjustments across components.

* Remove border radius property from UI settings and related functions to simplify configuration and enhance consistency across components.

* Enhance responsive design in UI: add media queries for mobile layouts, adjust padding and grid structures, and implement bottom navigation for improved usability on smaller screens.

* UI: add corner radius slider to Appearance settings
fuller-stack-dev pushed a commit to fuller-stack-dev/openclaw that referenced this pull request Mar 20, 2026
* Refactor CSS styles: replace hardcoded colors with CSS variables for accent colors and optimize spacing rules in layout files.

* Update CSS styles: streamline selectors, enhance hover effects, and adjust focus states for chat components and layout elements.

* Enhance focus styles for chat components: update border colors and box-shadow effects for improved accessibility and visual consistency.

* Implement theme management in UI: add dynamic theme switching based on user settings, update CSS variables for new themes, and enhance security by preventing prototype pollution in form utilities.

* Implement border radius customization in UI: add settings for corner roundness, update CSS styles for sliders, and integrate border radius adjustments across components.

* Remove border radius property from UI settings and related functions to simplify configuration and enhance consistency across components.

* Enhance responsive design in UI: add media queries for mobile layouts, adjust padding and grid structures, and implement bottom navigation for improved usability on smaller screens.

* UI: add corner radius slider to Appearance settings
ralyodio pushed a commit to ralyodio/openclaw that referenced this pull request Apr 3, 2026
* Refactor CSS styles: replace hardcoded colors with CSS variables for accent colors and optimize spacing rules in layout files.

* Update CSS styles: streamline selectors, enhance hover effects, and adjust focus states for chat components and layout elements.

* Enhance focus styles for chat components: update border colors and box-shadow effects for improved accessibility and visual consistency.

* Implement theme management in UI: add dynamic theme switching based on user settings, update CSS variables for new themes, and enhance security by preventing prototype pollution in form utilities.

* Implement border radius customization in UI: add settings for corner roundness, update CSS styles for sliders, and integrate border radius adjustments across components.

* Remove border radius property from UI settings and related functions to simplify configuration and enhance consistency across components.

* Enhance responsive design in UI: add media queries for mobile layouts, adjust padding and grid structures, and implement bottom navigation for improved usability on smaller screens.

* UI: add corner radius slider to Appearance settings
lovewanwan pushed a commit to lovewanwan/openclaw that referenced this pull request Apr 28, 2026
* Refactor CSS styles: replace hardcoded colors with CSS variables for accent colors and optimize spacing rules in layout files.

* Update CSS styles: streamline selectors, enhance hover effects, and adjust focus states for chat components and layout elements.

* Enhance focus styles for chat components: update border colors and box-shadow effects for improved accessibility and visual consistency.

* Implement theme management in UI: add dynamic theme switching based on user settings, update CSS variables for new themes, and enhance security by preventing prototype pollution in form utilities.

* Implement border radius customization in UI: add settings for corner roundness, update CSS styles for sliders, and integrate border radius adjustments across components.

* Remove border radius property from UI settings and related functions to simplify configuration and enhance consistency across components.

* Enhance responsive design in UI: add media queries for mobile layouts, adjust padding and grid structures, and implement bottom navigation for improved usability on smaller screens.

* UI: add corner radius slider to Appearance settings
ogt-redknie pushed a commit to ogt-redknie/OPENX that referenced this pull request May 2, 2026
* Refactor CSS styles: replace hardcoded colors with CSS variables for accent colors and optimize spacing rules in layout files.

* Update CSS styles: streamline selectors, enhance hover effects, and adjust focus states for chat components and layout elements.

* Enhance focus styles for chat components: update border colors and box-shadow effects for improved accessibility and visual consistency.

* Implement theme management in UI: add dynamic theme switching based on user settings, update CSS variables for new themes, and enhance security by preventing prototype pollution in form utilities.

* Implement border radius customization in UI: add settings for corner roundness, update CSS styles for sliders, and integrate border radius adjustments across components.

* Remove border radius property from UI settings and related functions to simplify configuration and enhance consistency across components.

* Enhance responsive design in UI: add media queries for mobile layouts, adjust padding and grid structures, and implement bottom navigation for improved usability on smaller screens.

* UI: add corner radius slider to Appearance settings
github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request May 9, 2026
* Refactor CSS styles: replace hardcoded colors with CSS variables for accent colors and optimize spacing rules in layout files.

* Update CSS styles: streamline selectors, enhance hover effects, and adjust focus states for chat components and layout elements.

* Enhance focus styles for chat components: update border colors and box-shadow effects for improved accessibility and visual consistency.

* Implement theme management in UI: add dynamic theme switching based on user settings, update CSS variables for new themes, and enhance security by preventing prototype pollution in form utilities.

* Implement border radius customization in UI: add settings for corner roundness, update CSS styles for sliders, and integrate border radius adjustments across components.

* Remove border radius property from UI settings and related functions to simplify configuration and enhance consistency across components.

* Enhance responsive design in UI: add media queries for mobile layouts, adjust padding and grid structures, and implement bottom navigation for improved usability on smaller screens.

* UI: add corner radius slider to Appearance settings
github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request May 24, 2026
* Refactor CSS styles: replace hardcoded colors with CSS variables for accent colors and optimize spacing rules in layout files.

* Update CSS styles: streamline selectors, enhance hover effects, and adjust focus states for chat components and layout elements.

* Enhance focus styles for chat components: update border colors and box-shadow effects for improved accessibility and visual consistency.

* Implement theme management in UI: add dynamic theme switching based on user settings, update CSS variables for new themes, and enhance security by preventing prototype pollution in form utilities.

* Implement border radius customization in UI: add settings for corner roundness, update CSS styles for sliders, and integrate border radius adjustments across components.

* Remove border radius property from UI settings and related functions to simplify configuration and enhance consistency across components.

* Enhance responsive design in UI: add media queries for mobile layouts, adjust padding and grid structures, and implement bottom navigation for improved usability on smaller screens.

* UI: add corner radius slider to Appearance settings
Nachx639 pushed a commit to Nachx639/clawdbot that referenced this pull request Jun 17, 2026
* Refactor CSS styles: replace hardcoded colors with CSS variables for accent colors and optimize spacing rules in layout files.

* Update CSS styles: streamline selectors, enhance hover effects, and adjust focus states for chat components and layout elements.

* Enhance focus styles for chat components: update border colors and box-shadow effects for improved accessibility and visual consistency.

* Implement theme management in UI: add dynamic theme switching based on user settings, update CSS variables for new themes, and enhance security by preventing prototype pollution in form utilities.

* Implement border radius customization in UI: add settings for corner roundness, update CSS styles for sliders, and integrate border radius adjustments across components.

* Remove border radius property from UI settings and related functions to simplify configuration and enhance consistency across components.

* Enhance responsive design in UI: add media queries for mobile layouts, adjust padding and grid structures, and implement bottom navigation for improved usability on smaller screens.

* UI: add corner radius slider to Appearance settings
steipete added a commit that referenced this pull request Jul 9, 2026
Corner radius is owned by themes; drop the browser-local multiplier that
scaled all --radius-* variables (added in #49436). Stale borderRadius
localStorage keys are ignored and dropped on next settings write.
github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request Jul 10, 2026
Corner radius is owned by themes; drop the browser-local multiplier that
scaled all --radius-* variables (added in openclaw#49436). Stale borderRadius
localStorage keys are ignored and dropped on next settings write.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

app: web-ui App: web-ui maintainer Maintainer-authored PR size: XL

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant