Thanks to visit codestin.com
Credit goes to github.com

Skip to content

feat(ui): card layout with accent stripe for settings sections#969

Merged
itomek merged 4 commits into
mainfrom
claude/xenodochial-feynman-0426d6
May 6, 2026
Merged

feat(ui): card layout with accent stripe for settings sections#969
itomek merged 4 commits into
mainfrom
claude/xenodochial-feynman-0426d6

Conversation

@itomek

@itomek itomek commented May 6, 2026

Copy link
Copy Markdown
Collaborator

Before, settings sections were separated only by margin — the uppercase monospaced headings blended into the content and users couldn't easily tell where one section ended and the next began.

Each section is now an outlined card (1 px border, 10 px radius, inner padding). Section headings are 13 px (up from 11 px), use --text-secondary instead of --text-muted for legibility, and carry a 2 px --accent left stripe that sits flush with the card body text — heading text and body content share the same left edge.

Test plan

  • Open Settings and confirm each section renders as a distinct card
  • Confirm heading text and body content are left-aligned
  • Confirm accent stripe appears on all section headings (System Status, Active Model, Context Size, Custom Agents, Connectors, About, Privacy & Data)
  • Check light and dark themes

Each settings section now renders as an outlined card (border,
border-radius, padding) so sections are visually distinct without
relying on margin alone. Section headings gain a 2 px accent-colour
left stripe and are sized up (11 px → 13 px) with heading text kept
flush with the card body content.
@itomek itomek requested a review from kovtcharov-amd as a code owner May 6, 2026 16:45
@github-actions github-actions Bot added the electron Electron app changes label May 6, 2026
…ger-zone rule

- margin-left: -8px on h4 (was -2px) so border-left + padding-left
  cancel out, landing heading text flush with the 20px card padding
- remove .danger-zone border-color override — the section is its own
  card so the orphan rule had no visible purpose
@github-actions

github-actions Bot commented May 6, 2026

Copy link
Copy Markdown
Contributor

Summary

Small, focused CSS-only refactor (14 additions / 10 deletions across two files) that turns each settings section into an outlined card with an accent-stripe heading. The visual rationale in the PR description is clear, the diff is well-scoped, and the second commit (25720ad7) sensibly drops the now-redundant .danger-zone rule — its border-top and padding-top were superseded by the card's own border and padding. One small cleanup opportunity: the dead danger-zone className is still on the JSX.

Issues Found

🟢 Minor — Dead danger-zone className left on the JSX (src/gaia/apps/webui/src/components/SettingsPage.tsx:505)

The CSS rule for .danger-zone was correctly removed in 25720ad7 (its three properties — border-top, padding-top, margin-top — are all subsumed by the new .settings-section card style). However, the class name is still on the section element:

<section className="settings-section danger-zone">

Since no rule targets .danger-zone anymore, the class is dead and can be dropped to keep the markup honest. The actual danger styling (.danger-divider, .danger-warning, .btn-danger) lives on inner elements and is unaffected.

                <section className="settings-section">

Not a blocker — fine as a follow-up if you'd rather keep this PR purely cosmetic.

🟢 Minor — File-naming nit (pre-existing, flagging for awareness)

SettingsModal.css is the home of .settings-section, but there's no SettingsModal.tsx anymore — SettingsPage.tsx (and CustomAgentsSection.tsx, ConnectorsSection.tsx) are the only consumers. Not introduced by this PR, but worth a future rename to e.g. SettingsShared.css so future contributors don't grep for a phantom modal.

Strengths

  • Heading alignment trick is clean. margin-left: -8px; padding-left: 6px with the 2 px accent border puts the heading text flush with the card body's left edge — that's a deliberate, well-thought-out detail and matches the "align settings heading text with body content" intent of commit 25720ad7.
  • Tokens used everywhere. --bg-primary, --border-light, --accent, --text-secondary, --font-mono — no hardcoded colors or fonts, which keeps light/dark themes consistent (matches the test-plan checkbox).
  • Tight scope. Two CSS files, no JS/TS/test churn, no doc churn needed for a visual refinement of an already-documented surface. PR description leads with before/after impact in plain English exactly as CLAUDE.md asks.

Verdict

Approve with suggestion — Already approved by @kovtcharov-amd; the only change worth applying is dropping the dead danger-zone className on SettingsPage.tsx:505. Safe to merge as-is if you'd rather batch the cleanup later.

@github-actions

github-actions Bot commented May 6, 2026

Copy link
Copy Markdown
Contributor

Summary

Small, well-scoped CSS refactor (15+/11-) that turns each settings section into an outlined card with an accent stripe on the heading. The TSX change is limited to dropping the now-unused danger-zone modifier from the Privacy & Data section, and the follow-up commits in this branch (25720ad7, 05653fd2) already removed the dead .danger-zone CSS rule. No code paths, behaviour, or public APIs are touched — purely visual.

The math in SettingsModal.css:23-25 works out: card content sits at padding-left: 20px from the card border; the heading is pulled margin-left: -8px, then 2px accent stripe + 6px padding-left puts heading text at exactly 20px — so heading text and body share the same left edge as the PR description claims.

Issues Found

None blocking. One observation worth noting (not requesting changes):

🟢 Orphaned section comment (SettingsModal.css:398)
The /* Danger zone */ comment now labels a stretch of CSS that no longer contains .danger-zone — only .danger-divider, .danger-warning, and .btn-danger-adjacent rules. Those classes are still used (SettingsPage.tsx:511, SettingsPage.tsx:513), so the comment isn't fully wrong, but the heading lost its anchor. Optional rename:

/* Danger actions */

That's the only nit. Not a merge blocker.

Strengths

  • Clean diff hygiene — the branch's three commits (card layout → heading alignment → dead-rule removal) tell the story step-by-step rather than landing as one mixed change. Makes the visual review easy.
  • Good use of design tokensvar(--bg-primary), var(--border-light), var(--text-secondary), var(--accent) instead of hard-coded colours, so light/dark themes pick up the new card automatically with no per-theme overrides.
  • No drive-by changes — the diff stays inside the three files genuinely affected; no unrelated reformatting in CustomAgentsSection.tsx / ConnectorsSection.tsx even though both also render .settings-section. They inherit the new card automatically, which is the right outcome.

Verdict

Approve. Already approved by @kovtcharov-amd; nothing here changes that. The orphaned /* Danger zone */ comment is a one-word nit the author can take or leave.

@github-actions

github-actions Bot commented May 6, 2026

Copy link
Copy Markdown
Contributor

Summary

Tight, focused UI polish PR (3 files, +16/-12) that converts settings sections from margin-separated blocks into outlined cards with a left accent stripe on the headings. The change is scoped cleanly to CSS plus a single class removal in SettingsPage.tsx, follow-up commits already cleaned up the orphaned .danger-zone selector and an obsolete comment, and Grep confirms no remaining danger-zone references in the webui tree. One thing worth flagging before merge: the new stripe pulls from var(--accent), which is not defined in styles/index.css — so the stripe will render as currentColor (the heading text colour), not the brand accent the description advertises.

Issues Found

🟢 Minor — var(--accent) is undefined; stripe falls back to currentColor (SettingsModal.css:23)

src/gaia/apps/webui/src/styles/index.css defines --accent-green, --accent-blue, --accent-gold, --accent-danger, etc., but no plain --accent. Per CSS spec, border-left: 2px solid var(--accent) with an undefined custom property and no fallback invalidates the colour and falls through to currentColor — which on this h4 is var(--text-secondary) (a muted purple-tinted gray). The stripe will be visible, but it won't be the AMD brand accent the PR description sells (“2 px --accent left stripe”).

This is pre-existing tech debt, not a regression introduced here — SettingsModal.css:114,151,183,185 and ConnectorsSection.css:206,225,252 already use var(--accent) the same way. Two ways to fix:

Option A — pick an existing brand colour explicitly (smallest, no global change):

    border-left: 2px solid var(--accent-gold);
    margin-left: -8px;
    padding-left: 6px;

Option B — define --accent once in styles/index.css and let all the existing call sites benefit. That's a separate, slightly larger change but it would also retroactively fix the pre-existing usages. Worth opening a follow-up issue either way.

If the current currentColor rendering is actually what the maintainer-approved screenshots show, feel free to ignore — but the description explicitly promises a brand-accented stripe, so it's worth a 30-second visual check in both light and dark themes.

🟢 Minor — Empty CSS comment block left over after removing .danger-zone (SettingsModal.css:398)

The follow-up commit 25720ad7 retitled the comment from /* Danger zone */ to /* Danger actions */, but the section it was labelling (the .danger-zone rule) is gone, leaving an orphan comment with no following block. The next rule that is danger-related (.danger-divider) sits two lines below. Either delete the comment or move it down to label the divider/buttons block:

.danger-divider {

(i.e. drop the orphan /* Danger actions */ line and let the existing rules below speak for themselves — there are only two danger-related selectors and they're self-describing.)

Strengths

  • Scope-clean diff. Three files, all in the same component pair, all genuinely needed for the stated UX change. No drive-by formatting, no unrelated refactors.
  • Dead-code follow-through. The orphaned .danger-zone class was removed in CSS and in the only TSX consumer (SettingsPage.tsx:505), and Grep confirms zero remaining references in src/gaia/apps/webui/. That kind of "remove it everywhere" hygiene is exactly what GAIA's "no half-finished work" rule asks for.
  • Sensible token discipline. The heading colour change from --text-muted to --text-secondary and the use of --bg-primary / --border-light for the card chrome all pull from the existing design-token set in styles/index.css:87-92,133-137 — no hardcoded colours snuck in.

Verdict

Approve with suggestions. Nothing blocking — the PR is already approved by @kovtcharov-amd and the change is a clean CSS-only polish. The --accent fallback is the only thing worth a quick visual sanity check before merge; if the rendered stripe matches the design intent in both themes, ship it and file a follow-up to define --accent (or rename existing call sites to a defined token) so future readers don't trip over the same question.

@itomek itomek added this pull request to the merge queue May 6, 2026
Merged via the queue into main with commit ba011b4 May 6, 2026
24 checks passed
@itomek itomek deleted the claude/xenodochial-feynman-0426d6 branch May 6, 2026 17:18
kovtcharov-amd pushed a commit that referenced this pull request May 6, 2026
… version bump

- Update test_electron_chat_app.js to reference SettingsPage (renamed
  from SettingsModal in the card-layout settings PR #969)
- Remove stale role="dialog"/aria-modal assertions (no longer a modal)
- Fix danger-zone CSS assertions to match current class names
- Bump package.json/package-lock.json to 0.17.6 to match version.py
theonlychant pushed a commit to theonlychant/gaia that referenced this pull request May 7, 2026
## Why this matters

Ships the v0.17.6 patch: a new Email Triage Agent with Gmail (every
email body stays on local Lemonade), the OAuth PKCE foundation that
backs it, settings UI card layout, and a sweep of installer fixes that
close the remaining first-launch failures uncovered after v0.17.5.
Custom Python agents that follow the template's
`super().__init__(**kwargs)` pattern no longer crash on the first
message in the Agent UI.

Full notes: `docs/releases/v0.17.6.mdx`.

## What's New

- **Email Triage Agent with Gmail**
([amd#965](amd#965)) — `EmailTriageAgent` with
25 tools across read / organize / reply / delete / calendar mixins.
Every email body processed locally on Lemonade; seven destructive tools
confirmation-gated; three layers of prompt-injection defense; SQLite
undo log via `DatabaseMixin`.
- **OAuth PKCE foundation for Google connections**
([amd#926](amd#926)) — Self-contained
`gaia.connections` module: refresh tokens in the OS keychain (Keychain /
DPAPI / SecretService), per-agent grants in
`~/.gaia/connections/grants.json`, async token cache with refresh
rotation. Baseline for the v0.17.7 connectors framework.
- **Settings UI card layout**
([amd#969](amd#969)) — Outlined cards with
accent left-stripe replace margin-separated blocks across all settings
sections; light + dark themes both updated.

## Bug Fixes

- **Custom Python agents crashed on first message**
([amd#974](amd#974), closes
[amd#973](amd#973)) — `python_factory` now
introspects the target class's `__init__` chain and only forwards kwargs
the chain accepts, so the bare `super().__init__(**kwargs)` template
pattern no longer crashes with `unexpected keyword argument
'rag_documents'`.
- **Windows installer failed at `ensure-uv`**
([amd#968](amd#968), closes
[amd#966](amd#966)) — `uv` binary now
bundled for `win-x64`; packaged Windows rescue installer included.
- **macOS installer failed at `ensure-uv` on clean Apple Silicon**
([amd#967](amd#967), closes
[amd#941](amd#941)) — Pinned `uv` v0.5.14
(`aarch64-apple-darwin`) shipped in the DMG; new `dmg-structural-smoke`
CI job blocks future drift.
- **AppImage users hit `gaia: command not found`**
([amd#942](amd#942), closes
[amd#782](amd#782)) — Startup writes a
`~/.local/bin/gaia` shim so `gaia` is on PATH after first launch (skips
creation if already present).
- **Windows fell back to Qwen instead of Gemma 4 default**
([amd#949](amd#949), closes
[amd#948](amd#948)) — Model-resolution logic
fixed so Gemma loads correctly on Windows.

## Tooling & Docs

- **`gaia-release` skill**
([amd#939](amd#939)) — Phased release flow
with hard gates before every irreversible step; encodes the manual
pre-tag verification that caught two release-blocking bugs in v0.17.4.
- **Internal-task issue template**
([amd#906](amd#906)) — Third issue template
for agent-assignable internal work.
- **Outlook via Power Automate plan**
([amd#954](amd#954)) — Enterprise-bypass spec
for v0.17.7 Outlook integration.
- **PR description guidance sharpened**
([amd#947](amd#947)) — `CLAUDE.md` "tight and
value-focused" rule with anti-patterns.
- **Stale `macOS uv fetch removed` orphan comment removed**
([amd#975](amd#975)).

## Thanks

External contributors in this release:

- [@theonlychant](https://github.com/theonlychant) — installer fixes
([amd#968](amd#968),
[amd#942](amd#942),
[amd#949](amd#949))
- [@BlueriteSoul](https://github.com/BlueriteSoul) — reported AppImage
`gaia: command not found`
([amd#782](amd#782))
- [@nuts23](https://github.com/nuts23) — reported Windows Gemma/Qwen
fallback ([amd#948](amd#948))

## Release checklist

- [x] `util/validate_release_notes.py docs/releases/v0.17.6.mdx --tag
v0.17.6` passes
- [x] `src/gaia/version.py` → `0.17.6`
- [x] `src/gaia/apps/webui/package.json` → `0.17.6`
- [x] Navbar label in `docs/docs.json` → `v0.17.6 · Lemonade 10.2.0`
- [x] All 14 commits in the range (v0.17.5..HEAD) are represented in the
notes
- [ ] Review from @kovtcharov-amd addressed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

electron Electron app changes

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants