Skip to content

ui: Updated dark theme, scrollable panel, and sidebar refinements#88

Merged
robinebers merged 3 commits into
mainfrom
feat/updated-dark-theme
Feb 7, 2026
Merged

ui: Updated dark theme, scrollable panel, and sidebar refinements#88
robinebers merged 3 commits into
mainfrom
feat/updated-dark-theme

Conversation

@robinebers
Copy link
Copy Markdown
Owner

@robinebers robinebers commented Feb 7, 2026

Refreshed dark mode palette and improved panel UX across both themes.

Description

  • Dark theme overhaul: warmer dark backgrounds (#1c1c1e/#2a2a2c), lime accent color, dark-aware progress bar tracks, and branded color fallback to white for low-luminance icons
  • Scrollable panel: fixed height chain so content scrolls inside the card (flex flex-col on card, flex-1 on inner row), hidden scrollbar track, and a fade-out gradient above the footer that animates in/out when more content is available
  • Sidebar/content color flip: sidebar uses the subdued surface and content area the brighter one in both light and dark modes; added pace-aware green/yellow/red semantic tokens; expanded mock plugin test data for visual QA

Made with Cursor


Note

Medium Risk
UI layout and scroll behavior changes can cause subtle regressions in sizing/overflow and dark-mode contrast, but no auth/security or data-path logic is touched.

Overview
Refreshes the UI’s dark theme palette (warmer surfaces + lime --page-accent), adds semantic --green/yellow/red-500 tokens, and tweaks component styling for better dark-mode contrast (e.g., progress track, sidebar surfaces, active indicator accent).

Makes the main panel’s content area properly scroll within the card: introduces a dedicated scroll container with hidden scrollbars and a bottom fade gradient that appears only when more content is available.

Simplifies the mock plugin from configurable “chaos” modes to a deterministic stress-test output (including periodDurationMs on progress lines) and updates its manifest/tests accordingly. Also switches App to a named export and updates imports/tests, plus sets Tauri Rust edition to 2024.

Written by Cursor Bugbot for commit 10ff923. This will update automatically on new commits. Configure here.


Summary by cubic

Refreshes dark mode with warmer surfaces and a lime accent, and updates the panel to scroll inside the card with a gradient hint that only appears when content can scroll. Improves contrast for progress bars and sidebar icons, and replaces the mock plugin with deterministic stress-test pacing metrics for visual QA.

  • UI Improvements

    • Warmer dark palette (#1c1c1e/#2a2a2c); sidebar subdued, content brighter; lime page-accent.
    • Panel content now scrolls; hidden scrollbar with a fade overlay that shows only when overflow is detected.
    • Progress tracks tuned for dark (#353537); active nav indicator uses page-accent in dark.
    • Brand icon fallback: white in dark for very dark colors; currentColor in light for very light.
    • New green/yellow/red semantic tokens for pace statuses.
  • Refactors

    • Mock plugin now returns deterministic “stress-test” lines with pacing statuses and edge cases; added periodDurationMs support; plugin.json ordering and tests updated.
    • Switched App to a named export and updated imports; fixed Rust edition to 2024.

Written for commit 10ff923. Summary will update on new commits.

- Updated the mock plugin's JSON configuration to include new progress labels for various pacing statuses.
- Modified the App component to generate mock output with detailed progress metrics for testing purposes.
- Improved CSS variables for color consistency across themes, including new definitions for green, yellow, and red colors.
- Adjusted side navigation styles to ensure proper contrast in light and dark modes.
- Enhanced progress component styling for better visual representation in dark mode.
- Added scroll detection functionality to the App component, allowing for dynamic visibility of a gradient overlay when content is scrollable.
- Introduced a new scroll reference and state to manage scroll behavior.
- Updated the layout to improve content rendering within the scrollable area.
- Enhanced CSS to hide the scrollbar globally for a cleaner UI experience.
@macroscopeapp
Copy link
Copy Markdown

macroscopeapp Bot commented Feb 7, 2026

Update dark theme colors, add hidden-scroll scrollable content area with gradient in App, and refine sidebar icon fallback to white in dark mode

Replace the mock plugin with a deterministic stress-test output and new overview mapping; add a scrollable main content area with a bottom gradient in App; adjust dark theme tokens and progress bar dark background; switch App to a named export; set dark-mode sidebar icon fallback to #ffffff for low-luminance brand colors; and change Rust edition to 2024.

📍Where to Start

Start with the probe() implementation in plugin.js, then review UI updates in App.tsx and theme changes in index.css.


Macroscope summarized 10ff923.

Copy link
Copy Markdown

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

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: c494da46c5

ℹ️ 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 src/App.tsx Outdated
Comment on lines +430 to +434
const _15d = 15 * 24 * 60 * 60 * 1000
const _30d = _15d * 2
const _resets = new Date(Date.now() + _15d).toISOString()
const _pastReset = new Date(Date.now() - 60_000).toISOString()
output = {
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Remove mock output override from probe handling

In handleProbeResult, the new debug block replaces every probe response from the "mock" provider with hard-coded demo lines, so any real mock plugin data or error output is discarded. This means anyone using the mock plugin (including automated tests or manual verification) will never see actual probe results, which can hide regressions and break workflows that depend on the mock provider’s real output. This only occurs when the providerId is "mock", but it affects all environments where the mock plugin is enabled.

Useful? React with 👍 / 👎.

@robinebers robinebers mentioned this pull request Feb 7, 2026
2 tasks
Comment thread src/App.tsx Outdated
Copy link
Copy Markdown
Contributor

@cubic-dev-ai cubic-dev-ai Bot left a comment

Choose a reason for hiding this comment

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

1 issue found across 7 files

Prompt for AI agents (all issues)

Check if these issues are valid — if so, understand the root cause of each and fix them.


<file name="src/App.tsx">

<violation number="1" location="src/App.tsx:428">
P1: Debug code that should be removed before merging. This block overwrites all mock plugin output with hardcoded test data and will execute in production. The inline comment explicitly states "remove after visual QA".</violation>
</file>

Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.

Comment thread src/App.tsx Outdated
Copy link
Copy Markdown

@cursor cursor Bot left a comment

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes and found 3 potential issues.

Bugbot Autofix is OFF. To automatically fix reported issues with Cloud Agents, enable Autofix in the Cursor dashboard.

Comment thread src/App.tsx Outdated
Comment thread src/App.tsx
<div ref={scrollRef} className="h-full overflow-y-auto scrollbar-none">
{renderContent()}
</div>
<div className={`pointer-events-none absolute inset-x-0 bottom-0 h-14 bg-gradient-to-t from-card dark:from-muted/50 to-transparent transition-opacity duration-200 ${canScrollDown ? "opacity-100" : "opacity-0"}`} />
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Dark mode fade gradient uses semi-transparent color

Medium Severity

In dark mode the content area background is dark:bg-muted/50 (semi-transparent #2a2a2c at 50% opacity composited over the bg-card #1c1c1e beneath it). The fade-out gradient uses the same dark:from-muted/50, which is also semi-transparent. Because the gradient overlay can never fully obscure the scroll content underneath, text will bleed through the "fade" at the bottom instead of cleanly disappearing. In light mode from-card is fully opaque white, so it works correctly there. The gradient's from color needs to be the fully-composited opaque result of the background stack.

Additional Locations (1)

Fix in Cursor Fix in Web

Comment thread src/App.tsx
- Added support for period duration in the lineProgress function to improve pacing metrics.
- Updated the mock plugin to include various pacing statuses and edge cases for testing.
- Refactored the App component to remove debug code and improve clarity in handling mock output.
- Changed import statements for the App component to use named exports for consistency.
Copy link
Copy Markdown
Contributor

@cubic-dev-ai cubic-dev-ai Bot left a comment

Choose a reason for hiding this comment

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

2 issues found across 5 files (changes from recent commits).

Prompt for AI agents (all issues)

Check if these issues are valid — if so, understand the root cause of each and fix them.


<file name="plugins/mock/plugin.js">

<violation number="1" location="plugins/mock/plugin.js:42">
P2: Percent progress bars must use limit = 100. This mock line uses limit 10000, which violates the plugin schema and will be treated as invalid by the host.</violation>

<violation number="2" location="plugins/mock/plugin.js:43">
P2: Percent progress bars must use limit = 100. This mock line uses limit 10000, which violates the plugin schema and will be treated as invalid by the host.</violation>
</file>

Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.

Comment thread plugins/mock/plugin.js
lineProgress({ label: "Over limit!", used: 1337, limit: 1000, format: { kind: "count", suffix: "requests" } }),
lineProgress({ label: "Huge numbers", used: 8429301, limit: 10000000, format: { kind: "count", suffix: "tokens" } }),
lineProgress({ label: "Tiny sliver", used: 1, limit: 10000, format: { kind: "percent" } }),
lineProgress({ label: "Almost full", used: 9999, limit: 10000, format: { kind: "percent" } }),
Copy link
Copy Markdown
Contributor

@cubic-dev-ai cubic-dev-ai Bot Feb 7, 2026

Choose a reason for hiding this comment

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

P2: Percent progress bars must use limit = 100. This mock line uses limit 10000, which violates the plugin schema and will be treated as invalid by the host.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At plugins/mock/plugin.js, line 43:

<comment>Percent progress bars must use limit = 100. This mock line uses limit 10000, which violates the plugin schema and will be treated as invalid by the host.</comment>

<file context>
@@ -1,342 +1,55 @@
+        lineProgress({ label: "Over limit!", used: 1337, limit: 1000, format: { kind: "count", suffix: "requests" } }),
+        lineProgress({ label: "Huge numbers", used: 8429301, limit: 10000000, format: { kind: "count", suffix: "tokens" } }),
+        lineProgress({ label: "Tiny sliver", used: 1, limit: 10000, format: { kind: "percent" } }),
+        lineProgress({ label: "Almost full", used: 9999, limit: 10000, format: { kind: "percent" } }),
+        lineProgress({ label: "Expired reset", used: 42, limit: 100, format: { kind: "percent" }, resetsAt: _pastReset, periodDurationMs: _30d }),
+        // Text lines
</file context>
Suggested change
lineProgress({ label: "Almost full", used: 9999, limit: 10000, format: { kind: "percent" } }),
lineProgress({ label: "Almost full", used: 99.9, limit: 100, format: { kind: "percent" } }),
Fix with Cubic

Comment thread plugins/mock/plugin.js
lineProgress({ label: "Exactly full", used: 1000, limit: 1000, format: { kind: "count", suffix: "tokens" } }),
lineProgress({ label: "Over limit!", used: 1337, limit: 1000, format: { kind: "count", suffix: "requests" } }),
lineProgress({ label: "Huge numbers", used: 8429301, limit: 10000000, format: { kind: "count", suffix: "tokens" } }),
lineProgress({ label: "Tiny sliver", used: 1, limit: 10000, format: { kind: "percent" } }),
Copy link
Copy Markdown
Contributor

@cubic-dev-ai cubic-dev-ai Bot Feb 7, 2026

Choose a reason for hiding this comment

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

P2: Percent progress bars must use limit = 100. This mock line uses limit 10000, which violates the plugin schema and will be treated as invalid by the host.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At plugins/mock/plugin.js, line 42:

<comment>Percent progress bars must use limit = 100. This mock line uses limit 10000, which violates the plugin schema and will be treated as invalid by the host.</comment>

<file context>
@@ -1,342 +1,55 @@
+        lineProgress({ label: "Exactly full", used: 1000, limit: 1000, format: { kind: "count", suffix: "tokens" } }),
+        lineProgress({ label: "Over limit!", used: 1337, limit: 1000, format: { kind: "count", suffix: "requests" } }),
+        lineProgress({ label: "Huge numbers", used: 8429301, limit: 10000000, format: { kind: "count", suffix: "tokens" } }),
+        lineProgress({ label: "Tiny sliver", used: 1, limit: 10000, format: { kind: "percent" } }),
+        lineProgress({ label: "Almost full", used: 9999, limit: 10000, format: { kind: "percent" } }),
+        lineProgress({ label: "Expired reset", used: 42, limit: 100, format: { kind: "percent" }, resetsAt: _pastReset, periodDurationMs: _30d }),
</file context>
Suggested change
lineProgress({ label: "Tiny sliver", used: 1, limit: 10000, format: { kind: "percent" } }),
lineProgress({ label: "Tiny sliver", used: 0.01, limit: 100, format: { kind: "percent" } }),
Fix with Cubic

@robinebers robinebers merged commit 7905417 into main Feb 7, 2026
3 checks passed
@robinebers robinebers deleted the feat/updated-dark-theme branch February 7, 2026 09:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant