Review each page below and reply in chat, one page at a time: approve, revise (say what's wrong), or defer. Nothing is implemented until a page is approved — see the footer for the full approval policy.
@cardBgElevated, 1px @borderColor, radius 12, single drop shadow alpha 90 / blur 26 / offset 0,2, 8px outer margin). The shadow lives on the container, never on rows. Source: DESIGN_SYSTEM.md DS §2 (dashboard_tile_wrapper.cpp:107-130) + DS §7 (container-level shadow). Evidence: renders/processes_dark.png.@pageContent, container @cardBgElevated, flat rows @cardBg. In the before, the table band and page were near-identical tones. Source: DS §1 (values.ini:2,29,30).metric_tile_base.cpp:255-307); DS §4 typography (style.qss:772-815).style.qss:328-350); [NNG-TABLES] (sources.md).@cardBgElevated, 1px @borderColor, radius 12, one drop shadow alpha 90 / blur 26 / offset 0,2, 8px margin) — container-level shadow, flat rows. Source: DS §2 (dashboard_tile_wrapper.cpp:107-130) + DS §7. Evidence: renders/search_dark.png.@pageContent / @cardBgElevated / @cardBg) so the results surface separates from the page. Source: DS §1 (values.ini:2,29,30).metric_tile_base.cpp:255-307); DS §4 (style.qss:772-815).style.qss:328-350); [NNG-TABLES].@cardBgElevated, 1px @borderColor, radius 12, single drop shadow alpha 90 / blur 26 / offset 0,2, 8px margin). The shadow is on the container only; the many log rows stay flat. Source: DS §2 (dashboard_tile_wrapper.cpp:107-130) + DS §7. Evidence: renders/system_logs_dark.png.@pageContent / @cardBgElevated / @cardBg) — flat rows on @cardBg with the container elevated one step above the page. Source: DS §1 (values.ini:2,29,30).setAutoRaise-style action button) are kept and aligned. Source: DS §3 (metric_tile_base.cpp:255-307, gear button 24×24 autoRaise :171-180); DS §4 (style.qss:772-815).@borderColor gridlines, zebra striping realised through the DS §1 flat-row surface (@cardBg), and an @accentBgTint hover-highlight. Source: DS §7 (style.qss:328-350); [NNG-TABLES].@chartGridColor track: NOTICE → info (@infoColor), INFO → dimmed (@tertiaryText). Those are the only two severities present in the capture; the same [status] mechanism carries warning/error (@warningColor/@destructiveColor) when present. Source: DS §5 (style.qss:2421-2435, pill 809-815).@color06) + the value as the 14pt/700 hero (@color05). Source: DS §2 (dashboard_tile_wrapper.cpp:107-130); DS §3 (metric_tile_base.cpp:255-307); DS §4 hero role (style.qss:772-815). Evidence: renders/boot_analysis_dark.png.@pageContent / @cardBgElevated) so the uptime card and the notice card read as raised surfaces rather than floating text. Source: DS §1 (values.ini:2,29,30).metric_tile_base.cpp:255-307); DS §4 (style.qss:772-815).#lblBootEmptyState as the text-only instance to upgrade. Source: DS §5 (boot_analysis_page.cpp:78-83,145-146); [NNG-EMPTY].@cardBgElevated, 1px @borderColor, radius 12, one drop shadow alpha 90 / blur 26 / offset 0,2, 8px margin). In the before, the sections were near-flat outlined boxes on a same-tone page; they now read as raised surfaces. Source: DS §2 (dashboard_tile_wrapper.cpp:107-130). Evidence: renders/hardware_info_dark.png.@pageContent base / @cardBgElevated cards) so the elevated cards separate from the page. Source: DS §1 (values.ini:2,29,30).var(--gpuColor)), while other sections use their respective type-appropriate accent tokens (System/Processor/Memory). Source: DS §3 (metric_tile_base.cpp:255-307); DS §3 accent bar rule ("accent bar takes a type-appropriate metric color, as on Dashboard tiles").@color06, values @color05, with a @borderColor divider between rows. Source: DS §4 (style.qss:772-815).dashboard_tile_wrapper.cpp:107-130) + DS §7 (shadow on the container, never per row). Evidence: renders/uninstaller_dark.png.@pageContent / @cardBgElevated container / @cardBg rows). Source: DS §1 (values.ini:2,29,30).@accentColor. Source: DS §3 (metric_tile_base.cpp:255-307); DS §4 (style.qss:772-815).@cardBgElevated, @borderColor bottom rule) and the "▸ Applications (49)" group row is a flat @cardBg-eligible row inside the elevated card. Source: DS §7 (style.qss:328-350); [NNG-TABLES].@cardBgElevated, 1px @borderColor, radius 12, single drop shadow alpha 90 / blur 26 / offset 0,2, 8px outer margin) holding flat @cardBg rows. This supersedes the per-row Utilities::addDropShadow(this, 30, 10) each ServiceItem currently applies. Source: DS §2 (dashboard_tile_wrapper.cpp:107-130) + DS §7 (shadow on the container, never per row — supersedes service_item.cpp:30). Evidence: renders/services_dark.png.@pageContent page / @cardBgElevated container / @cardBg rows) so the list reads as one raised surface; in the before, each row floated on its own shadow with no unifying container. Source: DS §1 (values.ini:2,29,30).metric_tile_base.cpp:255-307); DS §4 typography (style.qss:772-815).– identifier suffix at the muted meta role; long identifiers ellipsis-clip [NNG-TABLES] and rows carry a hover-highlight. Source: DS §4 (style.qss:772-815); DS §7 / [NNG-TABLES] (sources.md).@chartGridColor background, colored text): "Running" = @successColor, "Stopped" = @tertiaryText dimmed — replacing the before's solid-green / bordered-grey chips. The green on/off toggle affordance is kept unchanged. Source: DS §5 pill (style.qss:809-815) + [status="…"] selectors (style.qss:2421-2435).@cardBg rows inside — one container-level shadow instead of a shadow on every row. Source: DS §2 (dashboard_tile_wrapper.cpp:107-130) + DS §7 (container-level shadow). Evidence: renders/startup_apps_dark.png.@pageContent / @cardBgElevated container / @cardBg rows). Source: DS §1 (values.ini:2,29,30).metric_tile_base.cpp:255-307); DS §4 (style.qss:772-815)..plist path at the muted meta role — and its three affordances unchanged: edit (pencil), remove (X), and the green enable toggle. Source: DS §4 typography (style.qss:772-815); DS §7 (style.qss:328-350); GNOME grouped-list convention [GNOME-HIG] (sources.md).listWidgetAptSources repository list as one elevated container card (DS §2 recipe) with flat @cardBg rows — a GNOME-style boxed list — replacing the per-row Utilities::addDropShadow(this, 30, 10) each AptSourceRepositoryItem currently applies. Source: DS §2 (dashboard_tile_wrapper.cpp:107-130) + DS §7 (container-level shadow, supersedes apt_source_repository_item.cpp:29); boxed-list container convention [GNOME-HIG] (sources.md). Evidence: renders/apt_source_manager_dark.png.@pageContent / @cardBgElevated container / @cardBg rows). Source: DS §1 (values.ini:2,29,30)..ui's own "Select to delete or edit." info label (lblAptSourceSelectInfo) folded into the muted source line, keeping the captured Search field (txtSearchAptSource, placeholder "Search…"). Source: DS §3 (metric_tile_base.cpp:255-307); DS §4 (style.qss:772-815)..ui structure — icon + deb … source line (9pt/600 title role) + the enable toggle (checkAptSource, an iconSize 45×23 switch-style checkbox) — unchanged as an affordance; one row is shown in the disabled/off toggle state. Source: DS §4 typography (style.qss:772-815); DS §7 (style.qss:328-350).apt_source_manager_page.ui's horizontalLayout_2: Edit + Delete on the left, then the txtAptSource source input, the "Enable Source" circle checkbox (checkEnableSource, accessibleName "circle"), "Add Repository", and Cancel. Primary buttons use @accentColor; the two danger-role buttons (Delete, Cancel) use @destructiveColor. Source: .ui (apt_source_manager_page.ui rows 200-353, accessibleName "primary"/"danger"/"circle"); DS §5 status colors (style.qss:2421-2435).@cardBgElevated, 1px @borderColor, radius 12, single drop shadow alpha 90 / blur 26 / offset 0,2). The shadow lives on each tile container, never on its inner rows — consistent with the Dashboard's one-shadow-per-tile precedent, so eight tiles stay within the bounded-shadow guardrail. Source: DS §2 (dashboard_tile_wrapper.cpp:107-130) + DS §7/§9-3 (container-level shadow, bounded count). Evidence: renders/system_cleaner_dark.png.@pageContent, category tiles @cardBgElevated, controls on @cardBg — so the grid reads as raised surfaces over the page. Source: DS §1 (values.ini:2,29,30).metric_tile_base.cpp:255-307); DS §4 typography (style.qss:772-815).@successColor value, per the captured green underline) + "Select All" + primary "Clean selected", control set unchanged. Source: DS §3 (metric_tile_base.cpp:255-307); DS §5 status color (style.qss:2421-2435).@chartGridColor, fill @accentColor, radius 2, height 4 — a static placeholder with no animation per the no-per-frame guardrail. Source: DS §6 (style.qss:817-826); DS §9-2 (no timers/animation).@cardBgElevated, 1px @borderColor, radius 12, single container-level shadow) — the results table's scan-root rows and result rows are flat inside their container. Source: DS §2 (dashboard_tile_wrapper.cpp:107-130) + DS §7 (shadow on the container, never per row). Evidence: renders/disk_tools_dark.png.@pageContent, containers @cardBgElevated, flat path/result rows @cardBg. In the before, the panels and page were near-identical tones. Source: DS §1 (values.ini:2,29,30).@accentColor. Source: DS §3 (metric_tile_base.cpp:255-307); DS §4 (style.qss:772-815).style.qss:328-350); DS §5 empty-state rule + [NNG-EMPTY] (sources.md).metric_tile_base.cpp:255-307)..ui tabWidget → treeWidgetImages (a rootIsDecorated tree, NoSelection) as one DS §2 elevated container card with a frozen "Image / Size / Created" header and flat @cardBg tree rows; the decorated group node (ubuntu, expanded) and its child tag rows keep the tree's caret/indent. Source: DS §2 (dashboard_tile_wrapper.cpp:107-130) + DS §7 (container-level shadow, frozen header, flat rows). Evidence: renders/docker_dark.png.@pageContent / @cardBgElevated container / @cardBg rows). Source: DS §1 (values.ini:2,29,30)..ui top bar — the txtSearch field ("Search docker resources…") and the btnRefresh button. The .ui's cmbContainerFilter is visible=false, so it is omitted. The .ui tabWidget tabs (Images / Containers / Volumes) are kept, Images active. Source: DS §3 (metric_tile_base.cpp:255-307); .ui (docker_page.ui topBarLayout rows 30-61, tabWidget rows 113-269)..ui: the bottomBarLayout status line (lblDockerStatus left, lblItemCount right) as a footer band, then the actionBarLayout — Start + Stop, spacer, Prune Unused, Remove Selected. Primary buttons (btnStartContainer, btnPrune, accessibleName="primary") use @accentColor; the danger-role button (btnRemoveSelected, accessibleName="danger") uses @destructiveColor. Source: .ui (docker_page.ui rows 307-390); DS §5 status colors (style.qss:2421-2435).@cardBgElevated, 1px @borderColor, radius 12, container-level shadow) in a 4-up grid; the Host Manage table sits in one DS §2 elevated container with flat @cardBg rows. Source: DS §2 (dashboard_tile_wrapper.cpp:107-130) + DS §7 (container-level shadow, flat rows). Evidence: renders/helpers_dark.png.@pageContent, cards/containers @cardBgElevated, table rows @cardBg. Source: DS §1 (values.ini:2,29,30).@tertiaryText, uppercase); each Maintenance card is title (DS §4 title role, @color05) over description (DS §4 meta role, @tertiaryText); the "Hosts (1)" sub-section leads with a 3px accent bar per DS §3. The captured tool buttons are kept, Host Manage active (@accentColor). Source: DS §3 (metric_tile_base.cpp:255-307); DS §4 (style.qss:772-815).style.qss:328-350); [NNG-TABLES] (sources.md).@cardBgElevated, 1px @borderColor, radius 12, single container-level shadow); update rows and the collapsible tree-group rows are flat inside their container. Source: DS §2 (dashboard_tile_wrapper.cpp:107-130) + DS §7 (shadow on the container, never per row). Evidence: renders/homebrew_dark.png.@pageContent, containers @cardBgElevated, flat rows @cardBg. In the before the tables sat as flat bands barely distinct from the page. Source: DS §1 (values.ini:2,29,30).metric_tile_base.cpp:255-307); DS §4 (style.qss:772-815).style.qss:328-350); [NNG-TABLES] (sources.md).@cardBgElevated, 1px @borderColor, radius 12, single drop shadow alpha 90 / blur 26 / offset 0,2, 8px outer margin). The shadow lives on the container, never on chart internals. Source: DESIGN_SYSTEM.md DS §2 (dashboard_tile_wrapper.cpp:107-130, addDropShadow(90,26)); DS §7 (container-level shadow). Evidence: renders/resources_dark.png.@pageContent, container @cardBgElevated, and the plot inset uses the chart surface token @chartBackgroundColor with @chartGridColor gridlines. In the before, the chart bands and the page were near-identical tones. Source: DS §1 (values.ini:2,29,30); DS §6 chart surface/grid tokens (values.ini:60-79, CHANGELOG.md:31,45).@cpuColor, GPU @gpuColor, Disk @diskColor. Source: DS §3 (metric_tile_base.cpp:255-307, gear/action button metric_tile_base.cpp:171-180); DS §4 typography (style.qss:772-815).@chartBackgroundColor surface, @chartGridColor gridlines, @chartLabelColor axis text. Axis labels copied exactly from the capture — CPU/GPU Y 100.0 / 75.0 / 50.0 / 25.0 / 0.0, Load Averages Y 1.00 / 0.75 / 0.50 / 0.25 / 0.00, all X axes 60.0 / 45.0 / 30.0 / 15.0 / 0.0. Plots are empty (no data series drawn), matching the captured empty plots — no data was invented. Source: DS §6 (chart tokens); DS §9-2 (no animation, static chrome only).@chartSeries01–@chartSeries10), CPU Load Averages = 3 (@chartSeries01–03), GPU = 1 (@chartSeries01), Disk Read Write = 2 (@chartSeries01–02). Source: DS §6 series palette (values.ini:60-79).@cardBgElevated, 1px @borderColor, radius 12, single drop shadow alpha 90 / blur 26 / offset 0,2, 8px outer margin). Shadows live on the container, never on internals. Source: DS §2 (dashboard_tile_wrapper.cpp:107-130); DS §7 (container-level shadow). Evidence: renders/network_usage_dark.png.@pageContent, container @cardBgElevated, and the stat/hero readouts on the elevated surface. In the before, the bands and page were near-identical tones. Source: DS §1 (values.ini:2,29,30).@networkColor) + "Network Usage" title + a muted "Per-interface throughput and data usage" source line — and kept the interface selector (unchanged control) top-right. The faint page title is present in the light capture; the source line is the DS §3 pattern applied per Processes precedent. Source: DS §3 (metric_tile_base.cpp:255-307); DS §4 typography (style.qss:772-815).@networkColor) with the title copied exactly ("30-Day History (↓ Download ↑ Upload)", "Monthly Data Cap", "Settings"). Source: DS §3.@chartBackgroundColor fill with @chartGridColor gridlines. The plot is empty, matching the captured empty plot — no download/upload bars were invented. The throughput arrows use the metric tokens @networkDownloadColor (↓) and @networkUploadColor (↑). Source: DS §6 (chart tokens, download/upload metric tokens); DS §9-2 (static, no animation).@chartGridColor (empty fill, as captured — 0% used). Source: DS §6 (style.qss:817-826, track @chartGridColor).QGroupBox form section (groupGeneral, groupAppearance, groupAlerts, groupTools, groupScheduledCleaning) becomes one DS §2 elevated section card (@cardBgElevated, radius 12, 1px @borderColor, single container shadow alpha 90 / blur 26 / offset (0,2)). Source: DS §2 (dashboard_tile_wrapper.cpp:107-130, utilities.h:21-32); .ui section list (settings_page.ui:41,148,214,311,358).@pageContent behind the scroll, @cardBgElevated section cards, flat controls on top. Source: DS §1 (values.ini:2,29,30).@accentColor) left of the section title (General, Appearance, …). A page-level accent-bar header ("Settings" + "Preferences and alerts" source line) sits above the scroll. Source: DS §3 (metric_tile_base.cpp:255-307).@color06), control right — combos as @cardBg selects (Language English, Start Page Dashboard, Default Disk /dev/disk3s1s1, Color Scheme Auto, Font Inter (Recommended), Tray Icon Style Color (Default), Disk Analyzer Auto (Detect)), %/GB steppers for the QSpinBox alerts (CPU/Memory/Disk/Battery all 0 %). Boolean options render as the capture's toggle switches (green @successColor on, @chartGridColor off): "Show Dashboard system summary and status bar" and "Enable disk health alerts" on, the rest off, per the capture. Source: DS §4 (style.qss:772-815); .ui labels/values (settings_page.ui:47-306,317-513).QGroupBox (groupThemes, groupFonts, groupInterface, groupClock) becomes one DS §2 elevated section card (@cardBgElevated, radius 12, 1px @borderColor, single container shadow alpha 90 / blur 26 / offset (0,2)). Source: DS §2 (dashboard_tile_wrapper.cpp:107-130, utilities.h:21-32); .ui group list (gnome_appearance_tab.ui:27,103,250,285).@pageContent behind the scroll, @cardBgElevated group cards, flat controls. Source: DS §1 (values.ini:2,29,30).@accentColor accent bar + group title). A page-level accent-bar header ("GNOME Settings" + "GNOME desktop preferences" source line) sits above the tab bar. Source: DS §3 (metric_tile_base.cpp:255-307).@color06), control right — @cardBg combos (Color Scheme, GTK/Icon/Cursor Theme, Font Antialiasing, Font Hinting, Clock Format), QFontComboBox+size-QSpinBox pairs in the Fonts group (UI / Document / Monospace font, each with an 11 pt stepper), a QDoubleSpinBox stepper for Text Scaling Factor (1.0), a spinbox stepper for Cursor Size (24), and toggle switches for the QCheckBox rows (Animations / Hot Corners on; Clock Show Seconds off; Clock Show Weekday / Show Battery Percentage on). Source: DS §4 (style.qss:772-815); .ui labels/controls (gnome_appearance_tab.ui:33-338)..ui tabBarLayout (gnome_settings_page.ui:36-144) renders as a tab strip — Appearance (checked, @accentColor) / Window Manager / Mouse & Touchpad / Desktop — above the section cards. Only the Appearance tab's content is shown (its .ui is the checked/default tab); the other three tabs' stackedWidget pages are not populated in this skeleton. Source: .ui (gnome_settings_page.ui:40-130).