feat(ui): card layout with accent stripe for settings sections#969
Conversation
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.
…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
SummarySmall, 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 ( Issues Found🟢 Minor — Dead
|
SummarySmall, 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 The math in Issues FoundNone blocking. One observation worth noting (not requesting changes): 🟢 Orphaned section comment ( That's the only nit. Not a merge blocker. Strengths
VerdictApprove. Already approved by @kovtcharov-amd; nothing here changes that. The orphaned |
SummaryTight, 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 Issues Found🟢 Minor —
|
… 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
## 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
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-secondaryinstead of--text-mutedfor legibility, and carry a 2 px--accentleft stripe that sits flush with the card body text — heading text and body content share the same left edge.Test plan