Sundsvall DS v0.2
Verksamhet Läge
Kontrast

Sundsvall DS

Alternativ A. Designsystem för Sundsvalls kommuns digitala tjänster som tolkar profilen troget: utgår från de tolv färgerna, bygger på shadcn/ui och är skrivet så att både människor och AI-agenter kan bygga rätt. Den här sidan är hela systemet: varför det behövs, principer, grunder, komponenter, mönster, färdiga tillämpningar och nästa steg.

Byt verksamhetsfärg och läge uppe till höger. Allt på sidan ritas från samma tokens.

Grunder

Färgskalor, semantiska tokens, lager och elevation, radie, avstånd, typografi, ikoner och rörelse. Allt har ett namn och ett värde i tokens.json.

Komponenter

shadcn/ui oförändrat, tematiserat via tokens. Installeras från kommunens registry. Varje komponent har regler för när den används.

Mönster och tillämpningar

Åtta namngivna mönster som täcker de flesta kommunala tjänster, och fem hela vyer som visar hur de sätts ihop.

Systemets delar

DelFil eller platsÄgareLäses av
Tokenstokens.json (W3C Design Tokens)Kommunikation + ITByggverktyg, Figma, AI
Temaglobals.css, genereradITTailwind, shadcn
ReglerAGENTS.mdKommunikation + ITAI-agenter, utvecklare, lint
Komponenter och mönsterdesign.sundsvall.se/r (shadcn-registry)ITnpx shadcn add, MCP
DokumentationDen här sidan, genereradAllaMänniskor

Varför blir dagens tjänster platta?

Den grafiska profilen är gjord för tryck och skyltar. Den har fyra mörka färger, fyra mycket ljusa och fyra grå. För en skärm saknas allt däremellan. Det är inte ett smakproblem utan ett strukturproblem, och det har tre orsaker.

Två steg per färg

Mellan mörk och ljus finns inget. Inga hover-, aktiv- eller inaktiv-lägen, inga mellantoner för diagram, ingen text som är "lite mindre viktig".

Fyra gråtoner

Ett gränssnitt behöver 10–12 neutrala steg för kanter, ytor, hjälptext och avaktiverade fält. Med fyra blir allt antingen vitt eller ljusgrått.

Ingen definition av yta

Profilen säger vilka färger som finns, inte vad som ligger på vad. Utan lager, skugga och kantregler blir kort, sida och dialog samma vita rektangel.

Fem principer

Profilfärgerna är ankare, inte hela paletten

Varje profilfärg bevaras exakt och blir ett fast steg i en elvastegsskala. Skalan är beräknad i OKLCH så att stegen upplevs jämna och nyansen inte driver.

En tjänst, en verksamhetsfärg

Grön, blå, lila eller rosa väljs en gång per tjänst. Allt annat är neutralt. Mättad färg upptar under tio procent av ytan och betyder alltid handling eller status.

Djup är information

Bakgrund, yta, upphöjd yta och dialog är fyra namngivna lager med varsin elevation. Radie följer samma hierarki. Det är detta som tar bort plattheten.

Text är sanningen, bilden är en vy

Systemet lever i tokens.json och AGENTS.md. CSS, Tailwind, Figma och dokumentation genereras därifrån. En AI som läser texten kan bygga rätt utan att ha sett en skiss.

Standard före specialitet

Komponenterna är shadcn/ui oförändrade där det går, eftersom varje AI-modell redan kan dem. Kommunens egna bidrag är tokens, regler och namngivna mönster, inte nya komponentbibliotek.

Färg

Sex skalor med elva steg. Rutor med ram är profilens exakta hex-värden. Övriga steg är beräknade i OKLCH från dessa ankare så att stegen upplevs jämna. Kontrast mot vitt är förberäknad per steg.

Ljus text på färg

Från steg 600 och uppåt (Vattjom 700, Björnstigen 700) klarar vit text 4.5:1.

Mjuka ytor

Steg 200 som bakgrund, steg 900 som text och steg 500 som kant. Kanten gör att ytan syns även på en TV som tappar ljusa toner.

Diagram

Alltid i ordningen chart-1…5. Fler än fem serier: gruppera eller dela upp.

Vattjomblå · info, standardtema
50#f3fcfe
100#daeff1profil
200#cce4ff
300#a6d1fe
400#7eb4ed
500#5595d5
600#327cc2
700#1264a9
800#005595profil
900#003a69
950#00274a
Grönstagrön · success
50#f3fef3
100#e0f6deprofil
200#bfefcc
300#9ddeaf
400#74c48d
500#48a76a
600#278e52
700#00733bprofil
800#045d2f
900#004621
950#003015
Björnstigenlila
50#f9f9ff
100#f0eef9
200#d7dbf2profil
300#dbc0ec
400#c49edb
500#a97ac5
600#945db3
700#7f419f
800#692a88
900#5b1f78profil
950#3c0054
Juniskärrosa · destructive
50#fff8f9
100#faecf0
200#fedfe2profil
300#feb1d8
400#f583c1
500#e153a6
600#cb298f
700#a90074profil
800#89055e
900#690047
950#4a0030
Neutralgråskala, kall ton
0#ffffffprofil
50#f8fafd
100#f1f4f6
200#ecececprofil
300#d2d6da
400#b4b8bc
500#919498
600#707377
700#4b4b4bprofil
800#3c3d3f
900#252728
950#151618
1000#000000profil
Varningföreslaget tillägg – finns inte i profilen
50#fff9f2
100#ffedda
200#ffd8ad
300#fdbc6f
400#e9a03e
500#d0860f
600#b07004
700#915c06
800#734804
900#563502
950#3c2200
Varningsskalan är ett föreslaget tilläggProfilen saknar orange och gul. Tills kommunikationsavdelningen beslutat används info med ikon för varningar.

Semantiska tokens

Komponenter använder aldrig en skala direkt. De använder roller. Namnen är shadcn/ui:s egna plus ett litet tillägg för ytor och status. Verksamhetsfärg väljs med data-brand på dokumentet; mörkt läge följer systemet.

TokenLjustMörktTailwind-klassRoll
backgroundneutral-200neutral-950bg-backgroundSidans grund
card / surfaceneutral-0neutral-900bg-cardKort, paneler. Elevation 1.
popover / surface-raisedneutral-0neutral-800bg-popoverMeny, dropdown, dialog. Elevation 2–3.
surface-sunkenneutral-200neutral-950bg-surface-sunkenSammanfattning, kod, inaktivt
foregroundneutral-900neutral-100text-foregroundText
muted-foregroundneutral-700neutral-400text-muted-foregroundHjälptext, metadata
border / inputneutral-400 / 500neutral-700 / 600border-border / border-inputAvgränsning / fältkant
primarybrand-ankarebrand-300bg-primary text-primary-foregroundHandling. En per vy.
secondaryneutral-100neutral-800bg-secondarySekundär knapp
accent / primary-softbrand-200 + kant brand-500brand-950bg-accent text-accent-foregroundVald rad, aktiv flik
ringbrand-600brand-400ring-ringFokus
successgrönsta-700grönsta-400bg-success-soft text-success-soft-foregroundKlart, beviljat
infovattjom-800vattjom-400bg-info-soft text-info-soft-foregroundUpplysning
warningvarning-700varning-400bg-warning-soft text-warning-soft-foregroundKräver uppmärksamhet
destructivejuniskär-700juniskär-400bg-destructive text-destructive-foregroundFel, ta bort, avslag
chart-1…5vattjom-700, grönsta-600, björnstigen-600, juniskär-600, varning-500fill-chart-1Diagramserier i ordning

Djup, radie och avstånd

Fyra lager med varsin elevation. Skuggor tonade i profilens mörkblå. Radie och avstånd följer samma hierarki som lagren, så att storlek, höjd och rundning berättar samma sak.

Yta · surface · elevation 1Kort, formulärsektion
Upphöjd yta · surface-raised · elevation 2Popover, dropdown, meny
Nedsänkt · surface-sunken
Sammanfattning, kod
Dialog · elevation 3Sheet, modal. Radie xl.
Bakgrund · background

Elevation

0Rader, tabeller, flikar
1Kort på bakgrund
2Popover, hover på kort
3Dialog, sheet, toast

Radie

Chip och tabellkontroll → sm. Knapp och fält → md. Kort → lg. Dialog → xl.

Avstånd (4 px-skala)

Inom komponent 8–12. Mellan fält 16–24. Mellan sektioner 32–48. Sidmarginal 20 på mobil, 28–40 på desktop.

Typografi, ikoner och rörelse

Raleway för rubriker på nivå 1–2, Inter för allt gränssnitt, JetBrains Mono för ärendenummer och kod. Ikoner från Lucide (shadcn:s standard) i 20 px med 2 px linje. Rörelse bara som svar på en handling.

display 36/1.1Ansök om skolskjuts
h2 28/1.15Mina ärenden
h3 22/1.2Vem gäller ansökan?
title 17/1.3Kontaktuppgifter till vårdnadshavare
body 16/1.5Du kan ansöka om skolskjuts om avståndet mellan hemmet och skolan är längre än fyra kilometer.
small 14/1.5Vi behandlar dina personuppgifter enligt dataskyddsförordningen.
caption 12/1.4Senast sparat 15:42
mono 14SBK-2026-04471

Regler för text

  • Aldrig under 12 px, aldrig versaler.
  • Brödtext max 70 tecken per rad.
  • Rubriker i meningsform: "Vem gäller ansökan?"
  • Knappar säger vad som händer.

Ikoner

  • Lucide, 20 px i knappar och listor, 16 px i märken, 24 px i tomma vyer.
  • Ikon före text, aldrig ensam utan aria-label.
  • Statusikoner följer statusfärgen.

Rörelse

  • 120 ms hover och fokus.
  • 200 ms öppna och fälla ut.
  • 320 ms dialog och sheet.
  • Kurva 0.2, 0, 0, 1. Respekterar reduced-motion.

Komponenter

shadcn/ui:s komponenter ritade med kommunens tokens. Varje komponent har ett "använd när" och ett kodexempel som är den enda tillåtna formen. Installera med npx shadcn@latest add https://design.sundsvall.se/r/<namn>.json.

Button

r/button.json

Använd när

  • En primär per vy: den handling som för ärendet framåt.
  • Sekundär för "spara utkast", outline för "avbryt".
  • Ghost för navigering bakåt. Link inne i löptext.
  • Destructive bara för oåterkalleliga handlingar, alltid med bekräftelse.
<Button>Skicka in ansökan</Button>
<Button variant="secondary">Spara utkast</Button>
<Button variant="outline">Avbryt</Button>

Input, Select, Textarea, Label

r/input.json · r/select.json · r/textarea.json · r/label.json
Personnumret behöver vara 12 siffror (ÅÅÅÅMMDDXXXX).
Högst 500 tecken. Skriv inte personnummer här.

Regler

  • Alltid synlig label ovanför. Placeholder ersätter aldrig label.
  • Hjälptext under fältet, före felet uppstår.
  • Fel: kant i destructive, meddelande vid fältet med vad som är fel och hur man rättar det.
  • Höjd 40 px, 48 på mobil. Bredd efter förväntat innehåll (personnummer ≠ adress).
<Label htmlFor="pnr">Personnummer</Label>
<Input id="pnr" inputMode="numeric"
  aria-describedby="pnr-help" />
<p id="pnr-help" className="text-sm text-muted-foreground">
  12 siffror, med eller utan bindestreck
</p>

Checkbox, Radio, Switch

r/checkbox.json · r/radio-group.json · r/switch.json
Jag godkänner villkoren Växelvis boende Bor hos en vårdnadshavare Meddela mig via e-post

Använd när

  • Checkbox: flera val eller ett godkännande.
  • Radio: ett val av 2–5 alternativ som alla ska synas.
  • Fler än fem alternativ: Select.
  • Switch: inställning som slår igenom direkt, aldrig i ett formulär som skickas.

Alert (notice)

r/alert.json
Du behöver e-legitimationLogga in med BankID eller Freja för att fortsätta.
Ansökan är inskickadDu får svar inom tio arbetsdagar.
Utkastet sparas i 30 dagarEfter det behöver du börja om.
Bilagan kunde inte laddas uppFilen är större än 10 MB. Minska storleken och försök igen.

Regler

  • Mjuk bakgrund, mörk text. Mättad färg bara på ikon och kant.
  • Alltid ikon och rubrik; färg är aldrig ensam bärare.
  • Fel säger vad som hände och vad man gör.
  • Max ett meddelande per sektion. Fler: en sammanfattning överst.
<Alert variant="info">
  <Info />
  <AlertTitle>Du behöver e-legitimation</AlertTitle>
  <AlertDescription>Logga in med BankID …</AlertDescription>
</Alert>

Badge

r/badge.json
MottagetHandläggsBeviljatKomplettering behövsAvslagUtkast

Regler

  • Bara för status, aldrig som dekoration eller kategori.
  • Ett ord eller två. Prick före text för färgblinda.
  • Ärendestatus har fasta namn: Utkast, Mottaget, Handläggs, Komplettering behövs, Beviljat, Avslag, Avslutat.

Card

r/card.json

Skolskjuts, Elias

Handläggs

SBK-2026-04471 · Skickad 14 september

Förskoleplats

Ställ ditt barn i kö och följ din plats i kön.

Regler

  • Kort ligger på bakgrund, aldrig på kort.
  • Elevation 1; hela kortet klickbart om det har en handling, annars en knapp.
  • Radie lg, padding 20.
  • Lista med fler än sex kort: överväg tabell.

Tabs, Breadcrumb, Pagination

r/tabs.json · r/breadcrumb.json · r/pagination.json
Start/Mina ärenden/SBK-2026-04471
Pågående (3)AvslutadeUtkast (1)
1238

Regler

  • Tabs för vyer av samma sak, max fem. Aldrig för formulärsteg – använd step-form.
  • Breadcrumb på alla sidor under startnivån. Sista nivån utan länk.
  • Pagination vid fler än 25 rader; visa antal totalt.

Table

r/table.json · r/data-table (mönster)
ÄrendeGällerStatusUppdaterad
SBK-2026-04471Skolskjuts, Elias LundHandläggs15 sep
BYG-2026-01188Bygglov, altanKomplettering behövs11 sep
FSK-2026-00932Förskoleplats, Maja LundBeviljat2 sep

Regler

  • Elevation 0, rader skiljs med border. Hover: surface-sunken. Vald: primary-soft.
  • Max sju kolumner synliga; övriga i raddetalj.
  • Tal högerställda, datum korta, ID i mono.
  • Scrollar horisontellt i egen behållare på mobil, aldrig sidan.

Dialog och Toast

r/dialog.json · r/sonner.json
Utkastet är sparat

Regler

  • Dialog bara för beslut som inte kan tas i sidan. Rubrik som fråga, knappar som upprepar handlingen.
  • Avbryt-knappen beskriver vad som händer: "Behåll utkastet", inte "Avbryt".
  • Toast för bekräftelse av det man just gjorde, 5 s, med Ångra om möjligt. Aldrig för fel som kräver handling.

Skeleton och laddning

r/skeleton.json

Regler

  • Skeleton i samma form som innehållet, vid laddning över 300 ms.
  • Knapp som arbetar: inaktiv med spinner och samma text.
  • Aldrig helsidesspinner i en e-tjänst.

Mönster

Åtta namngivna block som beskriver en vy innan koden skrivs. Både människor och AI-agenter refererar till dessa namn. De installeras från registryt som färdiga kompositioner av komponenterna ovan.

service-header

r/service-header.json

Ansök om skolskjuts

Skolskjuts kan beviljas om vägen till skolan är längre än fyra kilometer eller trafikfarlig. Ansökan tar ungefär tio minuter.

Kräver e-legitimationSvar inom 10 arbetsdagarKostnadsfritt

Innehåll i ordning

  • Breadcrumb och verksamhetsområde.
  • Rubrik som verb: "Ansök om …", "Anmäl …".
  • Två meningar: vem, vad, hur lång tid.
  • Fakta: inloggning, handläggningstid, kostnad.
  • En primärknapp och en länk till regler.

step-form

r/step-form.json
Steg 2 av 4 · Vem gäller ansökan?

Regler

  • 3–6 steg, varje steg en fråga. Stegindikator med "Steg n av m" som text.
  • Ett kort per steg på bakgrunden. Sparas automatiskt.
  • Knappar alltid i samma ordning: Tillbaka vänster, spara och fortsätt höger.
  • Sista steget är alltid en summary-card.

case-status

r/case-status.json

Skolskjuts, Elias

Handläggs
  1. Mottagen14 september
  2. HandläggsSedan 15 september
  3. BeslutSenast 28 september

Regler

  • Tidslinje med fasta steg per ärendetyp. Klart = success, pågår = primary, kommande = border.
  • Alltid ett datum eller ett "senast"-datum per steg.
  • Komplettering visas som warning-notice ovanför tidslinjen med en knapp.

summary-card

r/summary-card.json
Barn
Namn
Elias Lund
Personnummer
20160223-4412
Skola
Bergsåkers skola, årskurs 4

Regler

  • Nedsänkt yta, en sektion per formulärsteg, "Ändra"-länk som hoppar tillbaka.
  • Föregås alltid av personal-data-notice och följs av primärknappen "Skicka in ansökan".

personal-data-notice, notice, empty-state, data-table

r/personal-data-notice.json · r/notice.json · r/empty-state.json · r/data-table.json
Så behandlar vi dina personuppgifterUppgifterna används för att handlägga din ansökan och sparas enligt arkivlagen. Läs mer på sundsvall.se/personuppgifter

Du har inga pågående ärenden

När du skickar in en ansökan eller anmälan visas den här, så att du kan följa den.

Regler

  • personal-data-notice: standardtext, alltid före inskick, info-variant med lås-ikon.
  • notice: Alert med regler enligt komponenten.
  • empty-state: ikon, rubrik som konstaterar, en mening som förklarar, en primärknapp.
  • data-table: Table med sortering, filter, radval och pagination. Tom tabell visar empty-state.

Tillämpningar

Fem hela vyer byggda enbart av komponenterna och mönstren ovan. Varje vy anger vilka mönster den använder. Byt verksamhet uppe till höger för att se samma vy i en annan förvaltning.

1. E-tjänst: sista steget innan inskick

Mönster: service-header (kort), step-form, summary-card, personal-data-notice, case-status.

E-tjänsterInloggad som Anna Lund

Ansök om skolskjuts

Steg 4 av 4: Granska och skicka in.

Granska dina uppgifter

Barn
Namn
Elias Lund
Personnummer
20160223-4412
Skola och resväg
Skola
Bergsåkers skola, årskurs 4
Adress
Kvarnvägen 12, Sundsbruk
Avstånd
5,2 km
Kontakt
E-post
anna.lund@exempel.se
Telefon
070-123 45 67
Så behandlar vi dina personuppgifterUppgifterna används för att handlägga din ansökan. Läs mer
Jag intygar att uppgifterna är riktiga

2. Mina ärenden: översikt för medborgaren

Mönster: data-table, case-status (kompakt), notice. Sidonavigation med accent för aktiv sida.

Mina sidorAnna Lund

Mina ärenden

Bygglovet behöver kompletterasHandläggaren behöver en situationsplan senast 25 september. Ladda upp situationsplan
Pågående (3)Avslutade (7)Utkast (1)
ÄrendeGällerStatusUppdaterad
BYG-2026-01188Bygglov, altanKomplettering behövs11 sep
SBK-2026-04471Skolskjuts, Elias LundHandläggs15 sep
FEL-2026-22910Felanmälan, gatubelysningMottaget9 sep
Visar 3 av 3
1

3. Handläggarvy: statistik och diagram

Intern tjänst byggd på samma tokens som medborgarvyerna. Diagram använder chart-1…5 i ordning. Stat-kort på elevation 1.

Ärendehantering · Barn och utbildningKarin Öhman, handläggare

Skolskjuts, läsår 2026/2027

Inkomna1 284+12 % mot förra året
Handläggs217Median 6 dagar
Kompletteringar4318 förfaller denna vecka
Beviljade84 %+3 procentenheter

Inkomna per vecka

Toppen v.35 följer skolstarten. Vecka 38 pågår.

Beslut per grund

Avstånd, 52 %Trafikfarlig väg, 26 %Växelvis boende, 14 %Funktionsnedsättning, 8 %

4. Mobil: bekräftelse efter inskick

Knappar 48 px, en kolumn, samma tokens. Mönster: notice (success), case-status.

Anna L.
Ansökan är inskickadDu får en bekräftelse via e-post inom några minuter.
Skolskjuts, EliasMottaget
Ärendenummer
SBK-2026-04471
  1. Mottagen16 september
  2. Handläggs
  3. BeslutSenast 30 september

5. Tom vy och bekräftelsedialog

Mönster: empty-state. Dialog på elevation 3 med knappar som upprepar handlingen.

Inga fakturor ännu

Fakturor för förskola, fritids och musikskola visas här när de skapas.

Kontrast på TV, projektor och i dagsljus

Ljusa toner försvinner först: en TV i butiksläge, en projektor i ett ljust rum eller en mobil i solen klipper bort allt under ungefär 1,3:1. Systemet är därför byggt så att ingen information bärs av en ljus ton ensam, och det har ett högkontrastläge för de miljöerna.

Grundnivån (gäller alltid)

  • Bakgrund mot kort: 1,18:1 (profilgrå #ececec mot vitt), och varje kort har en kant på 2:1.
  • Mjuka statusytor: bakgrund steg 200, text steg 900, kant steg 500 (≥ 3:1) och ikon. Tonen får försvinna, kanten och ikonen finns kvar.
  • Fältkanter 3:1, hjälptext 9,7:1, skuggor bär alltid en verklig kant.

Högkontrastläget

  • Slås på med data-contrast="high" eller automatiskt av prefers-contrast: more.
  • Bakgrund 1,46:1, kanter 4,8:1, statusytor steg 300 med kant steg 700, skuggor ersätts av kanter, inget glas.
  • Testa med knappen "Simulera TV" uppe till höger: den efterliknar en skärm som tappar ljusa toner. Allt som är läsbart där är läsbart på TV.
Samma statusytor. Slå på "Simulera TV" och jämför med och utan högkontrast.
InfoBakgrund 200, kant 500, text 900.
KlartSyns även när tonen försvinner.

Kort på bakgrund

Kanten är alltid där; skuggan är en bonus.

Nedsänkt yta
Steg 200 med kant

Gör och gör inte

Gör: en primärknapp per vy

Blicken hittar direkt vad som för ärendet framåt.

Gör inte: flera primära

Allt är lika viktigt, alltså inget.

Gör: mjuk status med ikon
BeviljatBeslutet skickas till din digitala brevlåda.

Läsbar text, färg som förstärker.

Gör inte: mättad platta med vit text
Beviljat
Beslutet skickas till din digitala brevlåda.

Tung, skriker, och ser ut som en knapp.

Gör: kort på bakgrund

Bygglov

BYG-2026-01188

Ett lager, en elevation.

Gör inte: kort i kort i kort
Bygglov

Skuggor staplas, kanter fördubblas, djupet blir brus.

Gör: fel vid fältet, förklarat
Personnumret behöver vara 12 siffror (ÅÅÅÅMMDDXXXX).

Vad som är fel och hur det rättas.

Gör inte: "Ogiltig inmatning" överst
Ogiltig inmatning

Vilket fält? Vad är fel? Användaren gissar.

Arbeta med AI

Systemet är byggt för att en agent ska kunna bygga en hel tjänst utan att ha sett en skiss. Så här ser arbetsflödet ut, och så här ser en bra beställning ut.

1. LäsAgenten läser AGENTS.md och tokens.json. Registryts index listar komponenter och mönster.
2. Beskriv vyn i mönster"service-header + step-form (4 steg) + summary-card + case-status i sidopanel."
3. Byggnpx shadcn add …/r/step-form.json och komponera. Enbart semantiska tokens.
4. VerifieraLint, axe, fyra teman, mörkt läge, en primärknapp per vy. Fel går tillbaka till steg 3.

Exempel på beställning till agenten

Prompt till Claude CodeBygg e-tjänsten "Ansök om parkeringstillstånd för rörelsehindrad" enligt AGENTS.md. Verksamhetsfärg: vattjom. Vyer: service-header med krav på e-legitimation; step-form i fyra steg (sökande, funktionsnedsättning med läkarintyg som bilaga, fordon, granskning); summary-card och personal-data-notice före inskick; bekräftelsesida med case-status. Handläggningstid 3 veckor. Använd registryts mönster, inga egna komponenter. Kör checklistan i §8 innan du är klar.

Det som gör beställningen bra: mönsternamn i stället för utseende, verksamhetsfärg angiven, innehållet (steg, krav, tider) specificerat, och ett krav på att verifiera.

Vad agenten får och inte får

FårKomponera mönster, skriva klarspråk, välja fältordning, lägga till hjälptext, bygga nya vyer av befintliga block.
Får inteSkriva färgvärden, skapa nya komponenter, blanda verksamhetsfärger, använda tabs för steg, lägga mer än en primärknapp per vy.
Måste frågaNär ett behov inte täcks av de åtta mönstren. Svaret blir ett nytt mönster i registryt, inte ett undantag i tjänsten.

MCP

Registryt exponeras via shadcn:s MCP-server, så att agenter kan slå upp komponenter, mönster och tokens som verktyg i stället för att läsa dokumentation. Samma källa, tre läsare: människa, byggverktyg, agent.

Nästa steg

  1. Beslut om två frågorVarningsfärgen (tillägg utanför profilen) och om Juniskär räcker som felfärg. Båda är markerade som öppna i AGENTS.md.
  2. Publicera registrytSätt upp design.sundsvall.se/r med de tolv shadcn-komponenter som används mest, plus de åtta mönstren. Tokens och globals.css finns redan.
  3. Bygg en tjänst med enbart AIGe Claude Code AGENTS.md och registryt och låt den bygga om en befintlig e-tjänst. Det som går fel är det som saknas i regelboken.
  4. Lint i CIStylelint och eslint-regler enligt §1 och §8 i AGENTS.md. Utan detta är reglerna rekommendationer.
  5. Generera Figma sistFigma-variabler skapas från tokens.json, inte tvärtom. Designers arbetar i samma sanning som agenterna.