diff --git a/.claude/rules/design.md b/.claude/rules/design.md
index e98b808f..2cd4676c 100644
--- a/.claude/rules/design.md
+++ b/.claude/rules/design.md
@@ -53,6 +53,7 @@ Decided during the 2026-07 concept work (dev_docs/ui_migration_plan.md); they ap
12. **Status colors are data, not chrome**: sage/ochre/terracotta only in numbers, exception chips and `.attn`.
13. **Overlays**: centered modal for create/confirm (template, assistant, confirmations, settings); right slide-over for reviewing an object (Granskning detail). Both with veil, Esc, and click-outside.
14. **Manual base, AI as opt-in.** Base flows work without AI; AI entry points are clearly labeled discrete choices (e.g. "Skapa med assistenten") and no AI suggestion posts without Granskning.
+15. **Settings speak "Fönster"** (founder-chosen 2026-07-25, applies to every settings tab). Settings content is flat hairline rows, never boxed cards: `SettingsGroup` / `SettingsRow` / `SettingsSectionHeader` from `components/settings/SettingsRows.tsx`. Toggles are switches, not checkboxes. Saving is a sticky bar that fades in only when the form is dirty (`components/settings/SettingsFormWrapper.tsx`); no always-visible save button. The settings surface is a 920x680 modal (`components/settings/SettingsModal.tsx`); switching tabs inside it updates the URL shallowly via `history.replaceState` (`SettingsRail.tsx`), never `router.replace`, which would remount the modal.
## Design System Tokens
@@ -89,7 +90,8 @@ Compact metric cards (e.g. dashboard tiles, salary KPI row) use `p-4`. Detail ca
| No-data state | `components/ui/empty-state.tsx` `EmptyState` | Don't hand-roll `
…
`. Preset variants exist (`EmptyInvoices`, `EmptyCustomers`, `EmptyTransactions`, etc.). |
| Loading placeholder | `components/ui/skeleton.tsx` `` | Don't hand-roll `bg-muted rounded animate-pulse` divs. |
| Inline help / formulas | `components/ui/info-tooltip.tsx` `InfoTooltip` | Hover-revealed; don't use always-visible info buttons. |
-| Fiscal year picker | `components/common/FiscalYearSelector.tsx` | Don't use raw `` for fiscal periods. |
+| Fiscal year picker | `components/common/FyPicker.tsx` | The chip-dropdown context picker of convention 8 (wraps `ContextPicker`). `FiscalYearSelector` is the legacy pre-frame control: don't add new uses. Never use a raw `` for fiscal periods. |
+| Settings rows / save | `components/settings/SettingsRows.tsx`, `SettingsFormWrapper.tsx` | Fönster language (convention 15): flat hairline rows, dirty-only sticky save bar. Don't hand-roll settings cards or per-field save buttons. |
**Tabular display rules.**
- All financial values get `tabular-nums`.
diff --git a/.claude/skills/create-ticket/prompts/design.md b/.claude/skills/create-ticket/prompts/design.md
index c2e87b0b..520a2650 100644
--- a/.claude/skills/create-ticket/prompts/design.md
+++ b/.claude/skills/create-ticket/prompts/design.md
@@ -2,7 +2,7 @@
## Perspective
-You are scanning for design and UX issues in the Accounted interface. The app follows an editorial-monochrome aesthetic: paper-white surfaces, hairline borders, serif headlines; considered and quiet. Evaluate against the Accounted design system: achromatic palette (semantic sage/ochre/terracotta are data-only: charts and financial deltas, never chrome), Hedvig Letters Serif display headings, Geist body, generous whitespace, functional (non-decorative) motion.
+You are scanning for design and UX issues in the Accounted interface. The app follows an editorial-monochrome aesthetic: paper-white surfaces, hairline borders, serif headlines; considered and quiet. Evaluate against the Accounted design system: achromatic palette (semantic sage/ochre/terracotta are data-only: charts and financial deltas, never chrome), Hedvig Letters Serif display headings, Geist body, generous whitespace, functional (non-decorative) motion. Since 2026-07 the app uses the frame layout (rounded page panel on a warm `--frame`, pill buttons, flat shadow-free cards); the locked conventions live in `.claude/rules/design.md`.
## Checklist
@@ -15,6 +15,19 @@ You are scanning for design and UX issues in the Accounted interface. The app fo
- [ ] Icon sizes consistent (15px nav, larger for empty states)
- [ ] Borders are full-opacity `border-border` on cards/surfaces (no `border-border/60`)
+### Locked UI-migration conventions (2026-07, full list in `.claude/rules/design.md`)
+- [ ] Page title via `PageHeader` (24px/32px serif); no hand-rolled ``
+- [ ] Buttons keep the app-wide pill radius (no per-call-site `rounded-*` on ``)
+- [ ] Cards flat and shadow-free (`rounded-lg`, hairline border); shadows only on overlays
+- [ ] Table rows are one line; no sub-rows (secondary info in detail view or popup)
+- [ ] Chips mark exceptions only; normal states are muted text, not a Badge on every row
+- [ ] Attention is one `.attn` sentence, not a banner; max one per page
+- [ ] Help behind the "?" popover after the H1; no instructional copy in the page flow
+- [ ] One context picker per page, far right in the toolbar (`FyPicker`/`ContextPicker`)
+- [ ] Actions that post/send confirm up front in a dialog; no outcome text written into the page
+- [ ] `.stagger-enter` on list/table content entry
+- [ ] Settings tabs use the Fönster language (flat hairline rows, switches, dirty-only sticky save bar)
+
### Loading & Empty States
- [ ] Pages have loading states (skeletons preferred over spinners)
- [ ] Empty states exist with message and CTA when no data
diff --git a/.claude/skills/loop-design-scan/SKILL.md b/.claude/skills/loop-design-scan/SKILL.md
index 557fad52..aab59776 100644
--- a/.claude/skills/loop-design-scan/SKILL.md
+++ b/.claude/skills/loop-design-scan/SKILL.md
@@ -33,6 +33,13 @@ Flag concrete deviations, each tied to `file:line` and a rule:
- **Motion**: press-scale / hover-lift / spring overshoot (all forbidden); missing `transition-colors`.
- **A11y**: contrast < AA, icon-only button without `aria-label`, no visible focus ring, touch target < 40px.
- **UX friction**: unclear labels, redundant `PageHeader.description`, slow paths for the 90-second session.
+- **Locked migration conventions** (2026-07, the numbered list in `.claude/rules/design.md`): sub-rows or
+ two-line rows in list tables; the same Badge on every row (chips mark exceptions only); banners instead
+ of one `.attn` sentence; instructional copy in the page flow instead of the "?" popover after the H1;
+ context picker missing, duplicated, or not far-right (`FyPicker`/`ContextPicker`); per-call-site radius
+ overrides on `` (pills are app-wide); `shadow-*` on cards; outcome text written into the page
+ instead of an up-front confirm dialog; settings tabs not using the Fönster language (flat hairline rows,
+ switches, dirty-only sticky save bar).
## 4. Adversarial verification (kill false positives)
Prefer the **`.claude/workflows/design-scan.js`** workflow: it fans out one agent per page, then runs a
diff --git a/.claude/skills/scout-design/SKILL.md b/.claude/skills/scout-design/SKILL.md
index 6dbda5d7..fdadfd7d 100644
--- a/.claude/skills/scout-design/SKILL.md
+++ b/.claude/skills/scout-design/SKILL.md
@@ -37,6 +37,20 @@ Read ALL files in the resolved scope (pages + components). For each file, evalua
- Are icon sizes consistent (15px nav, larger for empty states)?
- Are borders full-opacity `border-border` on cards/surfaces (no opacity-suffixed border classes like `border-border/60`)?
+**Locked UI-migration conventions (2026-07; full list in `.claude/rules/design.md`)**
+- Frame layout intact: content lives inside the rounded page panel; no per-page restyling of `MAIN_PANEL_CLASS`, no `window`-scroll assumptions on dashboard pages.
+- Page title via `PageHeader` (24px/32px serif); buttons keep the app-wide pill radius (no per-call-site `rounded-*` overrides on ``).
+- Cards are flat: no `shadow-*`, `rounded-lg` only; shadows survive only on dialogs/popovers.
+- Table rows are one line; secondary info belongs in the detail view or a click-popup, never sub-rows.
+- Chips mark exceptions only: normal states render as muted text; the same Badge on every row means the chip is wrong.
+- Attention is one ochre `.attn` sentence, never a banner; max one per page.
+- Help lives behind the "?" button after the H1; no instructional copy in the page flow.
+- One context picker per page, far right in the toolbar (`FyPicker` / `ContextPicker` chip-dropdown).
+- Primary action in the page header; actions that post or send confirm up front in a dialog instead of writing outcome text into the page.
+- `.stagger-enter` on list/table content entry (server render and client-fetch alike).
+- Overlays: centered modal to create/confirm, right slide-over to review an object.
+- Settings speak Fönster: flat hairline rows (`SettingsRows.tsx`), switches not checkboxes, dirty-only sticky save bar.
+
**Loading & Empty States**
- Does the page/component have a loading state? (skeleton, spinner, or shimmer)
- Is there an empty state when no data exists? (illustration, message, CTA)
@@ -127,9 +141,9 @@ After creating tickets, list them with their Linear identifiers so the user can
## Important Notes
-- Be specific. "The button looks off" is not actionable. "The primary button in InvoiceForm uses `rounded-lg` while all other forms use `rounded-md`" is.
+- Be specific. "The button looks off" is not actionable. "The primary button in InvoiceForm overrides the app-wide pill radius with `rounded-lg`" is.
- Reference exact Tailwind classes, component names, and line numbers.
-- Don't flag things that are intentional design choices documented in CLAUDE.md.
+- Don't flag things that are intentional design choices documented in `.claude/rules/design.md` or `DECISIONS.md` (e.g. the LedgerGraph always-dark panel and SalaryCalendar's categorical absence colors are sanctioned exceptions).
- Don't suggest adding features, only flag design/UX issues with what already exists.
- Keep findings focused on visual design, interaction design, and frontend polish. Not code quality or architecture.
- If a component is very small or trivial (e.g., a simple redirect page), skip it.
diff --git a/.claude/workflows/design-scan.js b/.claude/workflows/design-scan.js
index ef724e75..45e9eeee 100644
--- a/.claude/workflows/design-scan.js
+++ b/.claude/workflows/design-scan.js
@@ -22,7 +22,14 @@ status colors via only (no bg-blue-100 / bg-emerald-500/10 as ch
primitives PageHeader/Table/EmptyState/Skeleton/InfoTooltip (hand-rolled equivalents are violations);
Hedvig serif display must NOT be font-medium; financial numbers need tabular-nums; motion is
transition-colors only (no press-scale/hover-lift/spring); a11y WCAG AA, aria-label on icon buttons,
-visible focus, touch targets >=40px. A "finding" must cite file:line and the exact rule it breaks.`
+visible focus, touch targets >=40px. Locked 2026-07 migration conventions (numbered list in design.md):
+frame layout with pill Buttons (per-call-site rounded-* overrides are violations); cards flat and
+shadow-free (shadow-* on a card is a violation; overlays keep shadows); one-line table rows (sub-rows
+are violations); chips mark exceptions only (same Badge on every row is a violation); attention is one
+.attn sentence, banners are violations; help behind the "?" popover after the H1; one context picker
+far right in the toolbar (FyPicker/ContextPicker); confirm-up-front dialogs, not outcome text written
+into the page; .stagger-enter on list entry; settings tabs use the Fonster row language (flat hairline
+rows, switches, dirty-only sticky save bar). A "finding" must cite file:line and the exact rule it breaks.`
const FINDINGS_SCHEMA = {
type: 'object',
diff --git a/app/(dashboard)/import/page.tsx b/app/(dashboard)/import/page.tsx
index 91705189..ecedcdfd 100644
--- a/app/(dashboard)/import/page.tsx
+++ b/app/(dashboard)/import/page.tsx
@@ -2098,7 +2098,7 @@ export default function ImportPage() {
}
+ chips={ }
disabled={stripeDisabled}
onClick={() => setMode('stripe')}
/>
diff --git a/public/logos/stripe.svg b/public/logos/stripe.svg
deleted file mode 100644
index e1fd0e12..00000000
--- a/public/logos/stripe.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/public/logos/stripeicon.jpeg b/public/logos/stripeicon.jpeg
new file mode 100644
index 00000000..eb417856
Binary files /dev/null and b/public/logos/stripeicon.jpeg differ