SPEC v0.16: D-098 goldens at 1x in three variants, D-099 no licences row, D-102 S-7 editor rows; R8 release build; HANDOFF, prompts

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TQd3pEP9UeN2uifbHknQ7B
This commit is contained in:
2026-10-18 21:47:02 +02:00
parent bacbd1896c
commit bfc3acbbe0
5 changed files with 48 additions and 35 deletions
+6 -4
View File
@@ -531,12 +531,14 @@ Every default category has its own colour; `teal` is shared with the archived ex
**`CategoryGridSheet`**: modal bottom sheet "Välj kategori": all active categories in `sort_order`, 4 columns (3 at ≥ 1.5×), items as in the quick row; tapping picks and closes the sheet.
**`EditorChip`** (the chips row under the category row): `FlowRow`, gap 6. Chip: min height 36 (48 target), radius full, `surface-container-high`, padding 4 / 10 / 4 / 8, label 14 / 18 sp weight 500 with an optional key prefix in `on-surface-variant` weight 600 ("Betalt av ", "Delning "), leading 18 dp element, trailing 18 dp icon. Selected (the split section is open): `secondary-container`. Chips:
**`EditorOptionRows`** (S-7, D-102): the account, date, payer and split options as four full-width rows in a fixed order, Konto, Datum, Betalt av, Delning, as a segmented group (outer corners 24, inner 8, gap 3), `surface-container-high`, the Delning row `secondary-container` while the split section is open. Row: min height 48, padding 8 / 16, gap 12: the leading element of the chip table below in a 24 dp box (icons 24), the label (label-large `on-surface-variant`; `editor_account`, `expense_editor_date`, `editor_paid_by`, `editor_split`) in a column as wide as the widest label, the value (body-large, 1 line, ellipsis) and the trailing icon (24) at the right edge; the whole row is one button with the TalkBack sentences below. Rows never move when a value changes. 200 %: the label over the value, the value up to 2 lines, every row keeping the two-line height.
**`EditorChip`** (the chips row of S-9 and S-19): `FlowRow`, gap 6. Chip: min height 36 (48 target), radius full, `surface-container-high`, padding 4 / 10 / 4 / 8, label 14 / 18 sp weight 500 with an optional key prefix in `on-surface-variant` weight 600 ("Betalt av ", "Delning "), leading 18 dp element, trailing 18 dp icon. Selected (the split section is open): `secondary-container`. Chips:
| Chip | Leading | Label | Trailing | Tap |
|---|---|---|---|---|
| Konto | 12 dp dot in the account's chart colour | "Vardag" | `expand_more` | opens `AccountPickerSheet` |
| Datum (S-7 only) | `event` | "Idag" / "Igår" / "14 okt." (§9.8 list format) | `expand_more` | Material `DatePickerDialog`, range per §9.6 |
| Datum (S-9 only) | `event` | "Idag" / "Igår" / "14 okt." (§9.8 list format) | `expand_more` | Material `DatePickerDialog`, range per §9.6 |
| Betalt av | payer avatar 24 | "Betalt av Du" / "Betalt av Anna" | `swap_horiz` | toggles between the two users (AC-8.3), no picker |
| Delning | `call_split` | "Delning Kontots standard 50/50" / "Egen fördelning 70/30" / "Exakta belopp" / "Allt på Anna" | `expand_more` / `expand_less` | opens or closes `SplitSection` in place and scrolls it into view |
@@ -595,7 +597,7 @@ TalkBack: "Konto: Vardag. Dubbeltryck för att byta konto"; "Datum: idag"; "Beta
**`BreakdownList(rows, total, onRow)`** (AC-14.6 charts 2 and 3): rows sorted by amount descending, padding 8 / 0, gap 6: tile 32 (`CategoryTile` or `AccountTile`) + name (title-small, 1 line, ellipsis; "Arkiverat" badge for archived accounts) + right column `MoneyText(Small)` over the percent (body-small muted, one decimal, half-up, "34,8 %", AC-14.10); below, a 10 dp bar track (`surface-container-highest`, radius full) indented 44 dp, filled to amount / largest amount in the group colour. Row is one node "Boende, 62 000 kronor, 34,8 procent"; click → `onRow(id)`.
**`AnalyticsFilterBar(filter, onChange)`**: row 1: period chip (`date_range`, label "Senaste 6 mån" / "Anpassad · 1–30 nov.", `expand_more`; TalkBack "Period: senaste 6 månaderna") + `ButtonGroup` "Månad | Vecka" (min width 170, fills the rest); row 2: `ButtonGroup` "Hushållet | Min del" and `ButtonGroup` "Kategori | Konto", half width each. Connected buttons: min height 40, label-large weight 600, unselected `surface-container-high` / `on-surface-variant`, selected `secondary` / `on-secondary` with full radius. 200 %: one control per row. Semantics: each group a radio group named "Indelning", "Mått", "Gruppera efter".
**`AnalyticsFilterBar(filter, onChange)`**: row 1: period chip (`date_range`, label "Senaste 6 mån" / "Anpassad · 1–30 nov.", `expand_more`; TalkBack "Period: senaste 6 månaderna") + `ButtonGroup` "Månad | Vecka" (min width 170, fills the rest); row 2: `ButtonGroup` "Hushållet | Min del" and `ButtonGroup` "Kategori | Konto", half width each. Connected buttons: min height 40, label-large weight 600, unselected `surface-container-high` / `on-surface-variant`, selected `secondary` / `on-secondary` with full radius; connected buttons: 8 dp side padding (D-102). 200 %: one control per row. Semantics: each group a radio group named "Indelning", "Mått", "Gruppera efter".
**`TotalCard(totalOre, caption)`**: card, padding 16 / 20: "Totalt" (label-large muted; "Totalt · Min del" for my share) over `MoneyText(Large)` over the range caption (body-small muted, "maj–okt 2026 · Hushållet").
@@ -1130,7 +1132,7 @@ Not a screen: the `UpdateBanner` on S-4 (and S-22) and one dialog.
### S-22 About (`:feature:settings`)
**Layout** (app bar: back, "Om Kvitt"; column gap 10): centred app mark 96 (Sunny, `primary`, `receipt_long` 48), "Kvitt 1.1 (11)" (headline-medium), "Delade utgifter för två" (body-medium muted); `UpdateBanner` when an update is available; group of `FactRow`s: Server (`dns`, URL wraps), Serverversion (`memory`, "1.1.0" or "Okänd" when `/health` failed), "Licenser för öppen källkod" (`description`, chevron → the licences screen); "Sök efter uppdatering" (tonal medium, `system_update`, centred; hidden in debug builds, AC-16.5).
**Layout** (app bar: back, "Om Kvitt"; column gap 10): centred app mark 96 (Sunny, `primary`, `receipt_long` 48), "Kvitt 1.1 (11)" (headline-medium), "Delade utgifter för två" (body-medium muted); `UpdateBanner` when an update is available; group of `FactRow`s: Server (`dns`, URL wraps), Serverversion (`memory`, "1.1.0" or "Okänd" when `/health` failed); no open-source licences row (OQ-5, D-099); "Sök efter uppdatering" (tonal medium, `system_update`, centred; hidden in debug builds, AC-16.5).
**States**