God morgon, Elsa
32 nya bostäder i Stockholm matchar din profil.
Den här sidan är den enda källan till sanning för hur Samtrygg’s gränssnitt ser ut och beter sig. Komponenter, tokens och mönster—direkt avledda från varumärkesriktlinjerna.This page is the single source of truth for how Samtrygg’s interface looks and behaves. Components, tokens and patterns—directly derived from the brand guidelines.
Tio auktoriserade färger. Sam Red används sparsamt för primära handlingar. Sam Dark bär texten. Brunskalan ger en lugn, trygg ton—perfekt för kort, ramar och sekundär information.Ten authorised colours. Sam Red is used sparingly for primary actions. Sam Dark carries the text. The brown scale provides a calm, trustworthy tone—perfect for cards, borders and secondary information.
Sam Red endast för primär call-to-action. Body text i Sam Dark på Sam White för maximal läsbarhet.
Överanvänd inte Sam Red som bakgrund. Använd aldrig Sam Error som icke-fel-knapp—det urvattnar signalen.
Nuckle är vårt primära typsnitt. Bold för rubriker, Regular för brödtext, Light för småtext. Helvetica reserveras för miljöer där Nuckle inte är tillgängligt (e-post, dokument).
8 px är vår grundenhet. Allt från knappar till sektioner består av multiplar av 8. Layout följer ett 12-kolumnsgrid på desktop, som kollapsar till färre kolumner på mindre skärmar.
Ikoner är uppbyggda på ett 32×32 px grid med 2 px outline, och använder endast Sam Dark eller Sam White. Minsta storlek är 16 px, största rekommenderade 64 px.
Pillformade knappar i tre hierarkier: primär (Sam Red, reserveras för huvudhandling per sektion), sekundär (Sam Dark outline) och ghost. Storlekar S / M / L. Alla tillstånd måste implementeras.
Varje input har label, hint och felmeddelande. Focus ringar med Sam Dark + 12% transparens. Fel markeras tydligt med Sam Error plus text—aldrig bara färg.
Samtrygg.forms
Built-in validators: required, email, phone, pnr, pnrStrict, minLength, maxLength, match.
Live on-blur validation + scroll-to-first-error vid submit. Devs lägger till custom-validators via Samtrygg.forms.validators.myRule = (val) => …
// Validera form på submit
Samtrygg.forms.validate(formEl, [
{ id: 'email', rules: ['required', 'email'] },
{ id: 'phone', rules: ['phone'] },
{ id: 'civicNo', rules: ['required', 'pnrStrict'] },
{ id: 'pwd', rules: ['required', { minLength: 8 }] },
{ id: 'pwd2', rules: ['required', { match: 'pwd' }],
message: 'Lösenorden matchar inte.' }
]);
// Live on-blur (markerar fält medan användaren skriver)
Samtrygg.forms.attachLive(formEl, rules);
// Manuella state-helpers
Samtrygg.forms.setError(fieldEl, 'Ogiltigt värde');
Samtrygg.forms.setSuccess(fieldEl);
Samtrygg.forms.setLoading(fieldEl); // async-validering
Samtrygg.forms.clearField(fieldEl);
// Custom validator — devs lägger till per behov
Samtrygg.forms.validators.creditScore = function (val) {
return /^[0-9]{3}$/.test(val.trim());
};
.field__input from _input.css
Levande exempel av BEM-strukturen. Pages med lokala .input-regler eller inline padding/border ska migreras till denna form.
Live examples of the BEM structure. Pages using local .input rules or inline padding/border should migrate to this form.
Kort följer 12-kolumns-grid och har tre varianter: statisk (information), klickbar (leder någon annanstans) och hover (visar åtgärder). Bostadsannonser använder klickbar-variant med tydligt fokustillstånd.Cards follow the 12-column grid and have three variants: static (information), clickable (leads somewhere else) and hover (shows actions). Rental listings use the clickable variant with a clear focus state.
Samtrygg överför hyran till hyresvärden varje månad—även om hyresgästen skulle hamna i betalningssvårigheter.
.card from _card.css
Levande exempel av canonical-klasserna — använd dessa när du portar sidor från legacy .listing/lokala .card-rebuilds.
Live examples of canonical classes — use these when porting pages from legacy .listing or page-local .card rebuilds.
Base information card. No hover state. Used for content blocks where the whole card is not clickable.
Whole card is clickable. Lifts -2px on hover with shadow-2. Wrap entire card in <a>.
Tighter padding, smaller radius. For dense product surfaces.
Warm tinted background — for highlight sections and sub-promotional content.
Dark background. Used in CTA bands and hero cards for emphasis.
.listing-card
Canonical-versionen av bostadskortet. Pages som använder legacy .listing migreras till denna BEM-struktur.
Canonical version of the rental listing card. Pages using legacy .listing will be migrated to this BEM structure.
Topnotice, header och footer. Kopieras verbatim till varje sida så språkväljare, logotyp och navigation beter sig identiskt överallt. Handoff-baren läggs överst på designreview-sidor bara.
Mörk rand över headern. Kampanj eller systemmeddelande till vänster, undertext till höger. Höjd 37px, background: var(--sam-dark). Språkväljaren bor enbart i headern (menyn) — aldrig här.
Sticky på alla publika sidor. 80px hög, vit bakgrund, 1px grå underkant. Wordmark (26-28px) till vänster, primärnavigation centrerad, språkväljare + Logga in + Skapa konto till höger. Aktiv nav-länk får --sam-brown-light bakgrund.
.topband
Live-version via data-include="topband" — partial i assets/_shared-topband.html renderas av _includes.js.
Live version via data-include="topband" — partial in assets/_shared-topband.html rendered by _includes.js.
.site-nav
BEM-strukturen för publik nav-header. Använd denna när du portar sidor från legacy .nav-rebuild.
BEM structure for public nav header. Use this when porting pages from legacy .nav rebuild.
5-kolumner — speglar canonical assets/_shared-footer.html: brand-col + Hyresgäst + Hyresvärd + Samtrygg + Hjälp. Mörk bakgrund (--sam-dark), wordmark inverterad. Bottom-rad har org.nummer + juridiska länkar.
Live preview nedan: rendrar via data-include="footer" så denna alltid speglar production-footern. Ändra copy i assets/_shared-footer.html — den propagerar hit och till alla sidor.
Datatabeller för Dashboard — ansökningar, annonser, transaktioner. Sorterbar, med expanderbara rader.Data tables for Dashboard — applications, listings, transactions. Sortable, with expandable rows.
Modal, confirm dialog, drawer (sida-panel) och bottom sheet. Alltid en primär och en sekundär knapp.Modal, confirm dialog, drawer (side panel) and bottom sheet. Always one primary and one secondary button.
Samtrygg.modal
Real, accessible modal. ESC closes, backdrop click closes, Tab/Shift+Tab traps focus inside, return-focus to trigger on close, body scroll-locked. Wire via data-modal-open="id" on a trigger and data-modal-close on close-buttons inside the dialog. No JS needed in your page.
<button data-modal-open="myModal">Open</button>
<div class="modal" id="myModal" hidden role="dialog"
aria-modal="true" aria-labelledby="myModal-title">
<div class="modal__panel">
<header class="modal__header">
<h3 id="myModal-title" class="modal__title">Title</h3>
<button class="modal__close" data-modal-close aria-label="Stäng">×</button>
</header>
<div class="modal__body">…</div>
<footer class="modal__footer">
<button class="btn btn--ghost" data-modal-close>Avbryt</button>
<button class="btn btn--primary">Bekräfta</button>
</footer>
</div>
</div>
Lgh 2 rok · Södermalm · 16 950 kr/mån
Hyresgästen kommer att meddelas och måste flytta ut senast 31 juli 2026. Detta kan inte ångras.
Per Torsgatan-call 2026-05-05: Samtrygg.modal är nu fully-fledged och täcker alla modal-varianter inklusive BankID-skin. Ingen separat Samtrygg.bankid krävs (den lever kvar som deprecated under övergångsperioden).
// Open befintligt element
Samtrygg.modal.open('myModal', { dismissible: true, onClose: fn });
// Confirm — bygger dynamisk dialog, ingen markup behövs
Samtrygg.modal.confirm({
title: 'Är du säker?',
message: 'Detta kan inte ångras.',
confirmLabel: 'Ta bort',
cancelLabel: 'Avbryt',
destructive: true, // röd primary-knapp
onConfirm: function () {},
onCancel: function () {}
});
// BankID — bygger dynamisk dialog med QR + dots-animation
Samtrygg.modal.bankid({
title: 'Öppna BankID-appen',
sub: 'Skanna QR-koden eller öppna BankID på den här enheten.',
status: 'Väntar på identifiering…',
onCancel: function () {},
onComplete: function () {}
});
// Stäng
Samtrygg.modal.close(); // top of stack
Samtrygg.modal.close('myId'); // specific
Samtrygg.modal.closeAll();
Bredare panel för längre formulär
Fullskärm — för media-viewer eller onboarding-flow
Fullskärm-modal-innehåll
Tryck ESC eller × för att stänga
Hyresgästen kommer att meddelas och måste flytta ut senast 31 juli 2026. Detta kan inte ångras.
.modal + .modal-backdrop
Statisk preview av canonical-modalen + backdrop. I produktion togglas synligheten av Samtrygg.modal med aria-hidden + scroll-lås på <body>.
Static preview of the canonical modal + backdrop. In production Samtrygg.modal toggles visibility via aria-hidden + body scroll-lock.
Tomma listor ska kännas varma, inte gåtfulla. Alltid: ikon/illustration, rubrik, kort förklaring, primär CTA. Skeleton = samma layout som färdigt innehåll.Empty lists should feel warm, not mysterious. Always: icon/illustration, heading, brief explanation, primary CTA. Skeleton = same layout as finished content.
Prova att utöka sökområdet eller ta bort några filter för att se fler alternativ.
När hyresvärdar svarar på dina förfrågningar hamnar konversationerna här.
Publicera din första annons på 5 minuter — vi hjälper dig med texten.
Vi kunde inte ladda dina ansökningar. Kontrollera anslutningen och försök igen.
Vyer som hämtar data deklarerar alla tre tillstånd inline. _states.js visar rätt utifrån ?state=loading|empty|loaded och injicerar en switch nere i högra hörnet för QA. Lägg till stylesheet _empty-state.css + script _states.js.Data-driven views declare all three states inline. _states.js shows the right one based on ?state=loading|empty|loaded and injects a bottom-right switcher for QA. Include the _empty-state.css stylesheet plus _states.js.
<div data-state-host>
<div data-state="loaded">…verkligt innehåll…</div>
<div data-state="loading">…skeleton-block…</div>
<div data-state="empty">
<div class="empty-state empty-state--compact">…</div>
</div>
</div>
Live demos: Messages · Payments · Agreements · MyListings · InterestedTenants · LandlordViewings
Skeleton-CSS-klasser: .skel (basskimmer), .skel-text/-title/-thumb/-avatar/-btn/-badge, kompositmönster .skel-card, .skel-listing, .skel-thread, .skel-rows, .skel-stat.Skeleton CSS classes: .skel (base shimmer), .skel-text/-title/-thumb/-avatar/-btn/-badge, composite patterns .skel-card, .skel-listing, .skel-thread, .skel-rows, .skel-stat.
BankID-kort i tre states: QR-ruta, väntar på signering, klar. Används vid inloggning, signering av avtal, verifiering och kontoskapande.BankID card in three states: QR code, awaiting signature, complete. Used for login, contract signing, verification and account creation.
Öppna BankID-appen på din mobil.
Koden uppdateras automatiskt
Signera i BankID-appen på din mobil.
Anna Nilsson · 891212-xxxx
Signerad 14:23 · 12 april 2026
Ange koden vi skickade till 070-***23 45
Månadskalender med range-selektion, tid-slot-grid, och kompakt date-input. Range: start och slut får --sam-red, mellanliggande dagar --sam-brown-light.
Tisdag 12 maj 2026
Kartkomponenter för sökresultat och annonssidor. Pin-stil, kluster, infobox, zoom-kontroller.Map components for search results and listing pages. Pin style, clusters, infobox, zoom controls.
Default
Aktiv/vald
Visad/sedd
Kluster
Din plats
Kortvariga meddelanden nere till höger. 5 sek auto-dismiss, stackas uppåt, max 3 synliga.Short-lived notifications in the bottom right. 5s auto-dismiss, stacks upward, max 3 visible.
.toast from _toast.css
Live-instans av canonical-toast. JS API: Samtrygg.toast.success(title, msg) / .error(...) / .warning(...) / .info(...). För manuell markup, använd .toast.toast--{success|error|warning|info}.
Live instances of canonical toasts. JS API: Samtrygg.toast.success(title, msg) / .error(...) / .warning(...) / .info(...). For manual markup, use .toast.toast--{success|error|warning|info}.
Profilbilder i 5 storlekar, initialer som fallback, online-status, grupp-stackning och user-chips.Profile pictures in 5 sizes, initials as fallback, online status, group stacking and user chips.
xs · 24
sm · 32
md · 40
lg · 56
xl · 80
Online
Offline
Verifierad
Grupp (stack)
Grid-kortet är standarden. Här är fyra sammanhang där vi avviker: horisontell rad, featured/hero, compact och map-popup.The grid card is the standard. Here are four contexts where we deviate: horizontal row, featured/hero, compact and map popup.
Pris är känsligt — alltid tabulära siffror, tydliga linjer mellan poster, och info-tooltips. Totalsumman ska alltid vara visuellt dominant.Price is sensitive — always tabular numerals, clear lines between items, and info tooltips. The total must always be visually dominant.
Dialog mellan hyresgäst och hyresvärd sker alltid i Samtryggs trådar — aldrig via privat mejl.Dialogue between tenant and landlord always happens in Samtrygg threads — never via private email.
Bubblor: inkommande på ljus bakgrund med 4px hörnavvikelse nedåt-vänster; utgående mörk med hörnavvikelse nedåt-höger. Läsbekräftelse ✓ (skickad) · ✓✓ grå (levererad) · ✓✓ grön (läst). Max 75% bredd — aldrig full bredd även vid lång text.
Hyresgäst och hyresvärd betygsätter varandra efter avslutad uthyrning.Tenants and landlords rate each other after a completed rental.
“Anna var otroligt trevlig och lätt att ha att göra med. Lägenheten såg ut precis som på bilderna och all kommunikation gick via Samtrygg — tryggt och smidigt. Rekommenderar starkt.”
“Bra upplevelse överlag. Snabba svar och inget strul med depositionen vid utflytt. En stjärna mindre för att diskmaskinen gick sönder i månad fyra och det tog två veckor att få den lagad.”
Ditt omdöme hjälper nästa hyresgäst att välja tryggt.
Uppladdning, ordning, lightbox. Hyresvärden måste ha minst 5 bilder för att publicera.Upload, order, lightbox. Landlords must have at least 5 photos to publish.
JPG eller PNG, max 10 MB per bild. Minst 5 bilder, max 20.
7 av 20 bilder · Dra för att ändra ordning · Första bilden visas i sökresultat och är huvudbild
Fyra tonlägen: success, info, warning, error. Kombinera alltid färg med ikon och text.Four tones: success, info, warning, error. Always combine colour with icon and text. Toast-notifikationer stannar 5 sekunder; kritiska meddelanden kräver manuell stängning.
.alert__icon, .alert__title, .alert__text, .alert__close för full BEM-struktur.Rörelse ska vara subtil och meningsbärande. Hela systemet använder samma easing—cubic-bezier(.2, .8, .2, 1)—med durations från 150 ms till 300 ms. Hovra över rutorna nedan för att se beteendet.
Alla komponenter i kontext—hyresgästens sökvy till vänster, hyresvärdens översikt till höger. Båda följer samma grid, typografi och färgprinciper.
32 nya bostäder i Stockholm matchar din profil.
Hyresvärden lägger upp sin bostad med bilder, villkor och önskad hyresperiod.
Hyresgäster ansöker med profil och verifierad inkomst. Hyresvärden väljer.
Avtal skapas automatiskt och signeras med BankID av båda parter.
Samtrygg hanterar betalning—även om hyresgästen inte kan betala får värden sina pengar.
Samtrygg följer WCAG 2.1 AA. Alla designbeslut testas mot kontrast, tangentbordsnavigering och skärmläsarkompatibilitet. Ingen information förmedlas enbart genom färg.
Fel kommuniceras alltid med ikon + text + färg—inte enbart röd ram.
Alla interaktiva element får en 3 px ring med 2 px offset vid fokus.
<button aria-label="Spara bostad"> <svg aria-hidden="true" ... /> </button> <div role="alert"> Betalningen misslyckades. </div>
Komponenter som lagts till under 2026 för tenant/landlord-split, self-service och dashboardlayout. Dokumenteras här tills de integrerats i huvudavsnitten.Components added during 2026 for tenant/landlord split, self-service and dashboard layout. Documented here until merged into main sections.
CSS: assets/_dashboard.css · JS: assets/_dashboard.js
Användning: <div class="dash" data-page="favorites"><main class="dash__main">...</main></div>
260px sidebar (vänster) + main-content (höger). Sidebar renderas av JS baserat på localStorage.sam_role (tenant | landlord). Avatar-meny med byt-läge. Mobile: hamburger + bottom-slide sidebar + kvarstående Meddelanden-ikon.
CSS: assets/_toast.css · JS: assets/_toast.js
API: Samtrygg.toast.success(title, message, opts) — även .info(), .warning(), .error(), .show(opts).
5 sek auto-dismiss, max 3 synliga, stackas nedifrån-upp. Varianter: success (grön), info (blå), warning (orange), error (mörk bg, röd kant). Stöd för action-button och manuell .dismiss().
CSS: assets/_datepicker.css · JS: assets/_datepicker.js
API: Samtrygg.datepicker.attach(input, {mode:'single'|'range', min, max, onChange}) — eller .create(container, opts) för inline.
Time-slots: Samtrygg.datepicker.timeSlots(container, [{time,disabled?}], {onSelect}).
Måndagsbaserad vecka (M T O T F L S), today-markering (röd ring), out-of-month grayed, range-preview vid hover, min/max-gränser, disabled-dates-array. SV/EN via lang-en-class.
CSS: assets/_tooltip.css · JS: inget
Användning: <span class="info-tip" data-tip="Förklaring">Verifierad <i></i></span>
Hover/focus visar tooltip ovan. Använd .info-tip--below för under-placering. Använd för att förklara vaga produkttermer (Verifierad, Trygghetspaket).
Definierad i: pages/Search.html (inline, kandidat för utbrytning)
Struktur: .sheet-backdrop + .sheet > .sheet__handle + .sheet__head + .sheet__body + .sheet__foot. Klass .is-open triggar slide-in.
Används på mobil för filter. Transform-based, 86vh max, backdrop med 0.5 opacity. Esc-tangent och backdrop-klick stänger.
Två separata komponenter efter F2-rename 2026-05-05 (se audit/DUPLICATES_LOG.md):
.activity-timeline — aktivitetslogg med statusprickar. Definierad i assets/_agreement.css. Markup: <ol class="activity-timeline"><li class="t-success">...</li></ol>. Variants: .t-success (grön), .t-info (blå), .t-warning (orange), .t-error (röd), .t-current (pulserande röd för pågående). Används på Agreements + SelfService.
.history-timeline — företagshistorik / år-baserad linjär lista. Definierad i assets/_brand.css. Markup: <div class="history-timeline"><div class="history-timeline__item"><div class="history-timeline__year">2013</div><div class="history-timeline__content">...</div></div></div>. Används på About-sidan.
Definierad i: pages/Agreements.html (inline, kandidat för utbrytning till _agreement.css)
Struktur: .agr-card > .agr-card__head (adress/parter/period/status-chip) + .agr-card__actions (knappar) + .agr-card__requests (nestade change-requests) + .agr-card__activity-toggle + .agr-card__activity (timeline)
Varianter: .agr-card--warning (gul bg, ej signerat), .agr-card--info (blå bg, din tur).
Ersätter tidigare tabell-layout. Change-requests nestas inom kortet istället för som separata rader. Activity log kollapsbar.
CSS: assets/_badge.css (variant .badge--status-*)
Användning: <span class="badge badge--status-pending">Väntar</span>
Förenad från tidigare fragmenterade .status-tag, .status-chip, .agr-card__status-chip, .status-label. Intent-varianter: pending (blå), active (grön), warning (orange), info (blå), error/rejected (röd), neutral/expired (grå).
CSS: assets/_public-nav.css · JS: assets/_public-nav.js
Markup: <button data-nav-toggle aria-controls="siteDrawer"> + <div class="nav-drawer" id="siteDrawer"> med .nav-drawer__panel + .nav-drawer__links + .nav-drawer__footer.
Hamburger syns ≤976 px på Homepage och LandlordLanding. Slide-in-panel från vänster, backdrop stänger. Esc-tangent stänger. Använder endast --sam-*-tokens (inga DS-surface-tokens).
CSS: assets/_rating.css · JS: assets/_rating.js
API: Samtrygg.rating.attach(el, {value, readonly, onChange}) · .value(el) · .set(el, n)
Auto-init: Element med data-rating-auto initieras vid DOMContentLoaded. Använd data-rating-value + data-rating-readonly för konfig.
5 stjärnor (★), röd vid hover/selected, grå annars. Varianter: .rating--sm, .rating--lg, .is-readonly. Används i RateExperience.html.
CSS: assets/_media-upload.css · JS: assets/_media-upload.js
API: Samtrygg.mediaUpload.attach(rootEl, {onChange}) · .count(rootEl)
Markup: <div class="media-upload" data-media-upload data-max="20" data-min="5"> + .media-upload__zone + .media-upload__grid.
Dashed drop-zone, visar "is-dragover"-tillstånd vid drag. Thumb-grid (auto-fill 140px). Första slot får .media-upload__main-badge. Drag-reorder via slot-to-slot drop. Remove-knapp per slot. Emitterar toast när foton lagts till. Dokumenteras från CreateListing.html.
CSS: .modal--bankid skin i assets/_modal.css · JS: assets/_modal.js
API: Samtrygg.modal.bankid({title, sub, status, onCancel, onComplete}) → {close(), complete()}
Fullskärms-overlay med QR, titel, pulserande dots, status-text och avbrytknapp. Esc + backdrop-klick triggar onCancel. .complete() stänger och kör onComplete. För BankID-inloggning och initial kontraktssignering via Scrive. Konsoliderat 2026-05-05 från tidigare separat Samtrygg.bankid till generic modal med skin-variant.
Definierad i: pages/Search.html (inline) · embed-varianter portade till Samtrygg.Web/wwwroot/Content/v3/css/page_css/Listing.css · Förslag: utbryt till _map.css när Listing.html också integrerar kartvy
Struktur (split-vy): .map-view > .map-view__canvas (placeholder 3:2-ratio) + .map-view__pin (röd droppe med värde) + .map-view__legend
Struktur (embed-vy från Listing-portningen):
.map-embed > iframe (OSM-kakel, 380px höjd) + .map-hood (overlay-kort med adress + rikt-CTA) + .map-attrib (OSM-attribuering)
.map-block > gradient-fallback när lat/lng saknas, samma .map-hood-overlay för konsekvent visuell rytm
Produktionen använder Google Maps i Search (split-vy). På Listing visas en mindre OSM-iframe (embed-vy) — billigare, ingen API-nyckel, räcker för "Vart ligger den?". Pins, hover, popover gäller split-vy, inte embed.
Iframe-varning: använd inte sandbox eller loading="lazy" på OSM-iframen — bryter tile-loading i vissa browsers.
Definierad i: pages/Listing.html (inline) · portad till Samtrygg.Web/wwwroot/Content/v3/css/page_css/sam-shared.css
Markup: <div class="feat-chips"><span class="feat-chip">…</span></div>
Varianter: default (neutral) · .feat-chip.ok (grön bg/border, för verifierad/positiv status)
Liten pille-form i en horisontell rad ovanför kortets brödtext — visar nyckelegenskaper (möblerat, husdjur ok, balkong) eller verifieringsstatus. Används idag i Listing-huvudet ovanför titeln; återanvänds på Search-resultat och kort i listing-grid.
Definierad i: pages/Listing.html (inline) · portad till Samtrygg.Web/wwwroot/Content/v3/css/page_css/sam-shared.css
Struktur: .title-block > h1 + .meta-row (location/specs med ikoner) + .action-row (Save/Share-knappar) + valfri .feat-chips
Sid-hjältekomponent som ersätter den vanliga eyebrow + h2-rubriken. Används högst upp på publika sidor (Listing, Search-resultat, Homepage-hero, guider). Title-storlek anpassas via clamp(22px, 3vw, 30px).
Definierad i: pages/Listing.html (inline) · portad till Samtrygg.Web/wwwroot/Content/v3/css/page_css/sam-shared.css
Struktur: .facts > .fact > .k (eyebrow-label) + .v (värde) + valfri .sub (kontext)
Responsivt: 4 kolumner desktop, 2 vid <1100px, 2 vid <768px med tightare gap
Sammanfattningsruta för key-value-data ovanför brödtexten. Används på Listing för pris/period/storlek/rum, kandidat för Homepage stats-block och Search detalj-paneler.
Definierad i: pages/Listing.html (inline) · portad till Samtrygg.Web/wwwroot/Content/v3/css/page_css/sam-shared.css
Struktur: .toc > .inner > <a href="#anchor"> · aktiv flik = .on
Skiljs från Tabs: tabs byter innehåll (sektion visas/döljs), TOC är anchor-länkar (rullar till sektion på samma sida). Visuellt nästan identiskt — semantiken är skillnaden.
Sticky precis under main-nav (top: 64px). Används på långa sidor med flera sektioner — Listing, guider, juridiska sidor — så användaren kan hoppa direkt till "Bekvämligheter", "Hyresvärd", "Trygghet".
Definierad i: pages/Listing.html (inline) · portad till Samtrygg.Web/wwwroot/Content/v3/css/page_css/sam-shared.css
Struktur: .care-banner > h4 + p + .care-actions (vertikalt staplade knappar). Default display:none; visas via .on.
Varianter: default (sitter i höger-rail på desktop) · .care-banner--top (max-bredd, centrerad, ovanför grid på mobil)
Skiljer sig från generisk alert (.alert--*): Care-banner är ett kort med åtgärder som adresserar produktens omsorgsmoment ("Slutför ditt pågående avtal", "Du har redan 3 aktiva visningar"). Inte ett enkelt informationsmeddelande. Röd vänsterkant signalerar Samtrygg-handpåläggning.
Du har redan ett avtal under bearbetning. När det är klart kan du boka nya visningar.
Definierad i: pages/Listing.html (inline) · portad till Samtrygg.Web/wwwroot/Content/v3/css/page_css/sam-shared.css
Struktur: .mobile-bar > pris/sub-info-block + primär CTA-knapp (höger-justerad)
Visning: display:none default · visas via media query (max-width: 768px) som display:flex; lägger padding-bottom:76px på body för att inte täcka innehåll
Mobil-only sticky bar fastnaglad i botten. Visar pris + period + primär CTA (Boka visning / Ansök / Återupptag). Ersätter sticky-höger-rail på mobil. Andra användare: Search-resultat (kontaktkort), BookViewing-flow.
Definierad i: pages/Listing.html (inline) · portad till Samtrygg.Web/wwwroot/Content/v3/css/page_css/Listing.css (page-specific för Listing idag, kandidat för promotion när Edit-flödet använder samma layout)
Struktur: .gallery (CSS grid, 3 kolumner × 2 rader) > .g > img.ph-img wrapped in a.ph-link (klickbar för full-size i ny flik)
Responsivt: 5-tile desktop · 3-tile vid <1100px (hero + 2 thumbs) · 1-tile vid <480px
Hero (col-span 2) + 4 thumbs i klassisk 5-tile layout. Första bild = hero, restens placering animation-friendly via grid. .ph-link → full-size i ny flik. Lightbox/photoswipe-flow är planerad uppgradering — spårad som SAM-DS-GALLERY.
Definierad i: pages/Listing.html (inline) · portad till Samtrygg.Web/wwwroot/Content/v3/css/page_css/Listing.css
Struktur: <h3 class="amenities-subhead"> + <div class="amenities"> (3-col grid) > <div class="amenity {modifier}"> > .icon + label
Sub-sektioner (i denna ordning):
1. .amenities-subhead--included + .amenity.is-included — grön accent — "Ingår i hyran" (tri-state CV=1)
2. .amenities-subhead--extra + .amenity.is-extra — gul/orange accent — "Tillkommer som extra kostnad" (tri-state CV=2)
3. .amenities-subhead + .amenity — neutral — "I bostaden" (binär CV≥1, det apparmentet HAR)
4. .amenities-subhead--not-included + .amenity.is-not-included — line-through på label, ljust grå ikon — "Inte inkluderat" (binär CV=0, det apartmentet INTE HAR)
Tri-state CV=0 är medvetet inte synligt (matchar legacy production). Sub-headings döljs när Count=0. Används på Listing; samma struktur återanvänds på CreateListing-edit-flödet.
Definierad i: pages/Listing.html (inline) · portad till Samtrygg.Web/wwwroot/Content/v3/css/page_css/Listing.css
Struktur: .book-panel > .book-head (pris + period) + .book-body (CTA + fine print) + .book-breakdown (kostnadsuppställning) + .book-trust (Care-rad) + .book-id (annons-id)
Sticky: position:sticky; top:120px · försvinner på mobil (display:none); ersätts av .mobile-bar
Höger-rail-konvertering på Listing. CTA-text byter mellan "Boka visning" och "Ansök nu" baserat på ViewingTypeId. Cost-breakdown visar månadshyra + 15% serviceavgift + total. Återanvänds på BookViewing-flödet med datepicker insatt under .book-body.
Definierad i: pages/Listing.html (inline) · portad till Samtrygg.Web/wwwroot/Content/v3/css/page_css/Listing.css
Struktur: .safety-grid (2-kolumns grid) > .safety-item > ikon + <b> rubrik + <p> brödtext
Responsivt: 2 kolumner desktop, 1 kolumn vid <1100px
Trygghet/Care-content-block — punktlista i kort-format. Används på Listing för att förklara vad som ingår i Samtryggs trygghet (betalningsgaranti, försäkring, BankID-kontroll). Återanvänds på Homepage-hero, SafetyPackage-sidan och TenantGuide.
Hyran är garanterad varje månad, även om hyresgästen får problem.
Alla parter verifieras före avtalsskrivning.
Definierad i: pages/Listing.html (inline, ?state=agent) · portad till Samtrygg.Web/wwwroot/Content/v3/css/page_css/Listing.css
Struktur: .agent-card > img.agent-photo + .agent-tag ("Samtrygg-agent" eyebrow) + h3 namn + .agent-meta roll-rad
Visning: display:none default · visas via .on när ViewBag.AgentName är ifylld i controllern. Additivt — sitter ovanför .landlord-card, ersätter den inte.
Visas när Samtrygg-agent hanterar uthyrningen åt hyresvärden. Förklarar att agenten är gränssnittet, men chatt går fortfarande till hyresvärden. Röd vänsterkant-accent (3px) för att signalera Samtrygg-närvaro. Decision-källa: DECISIONS §11.7.
Samtrygg.formsCSS: shared.css §9 (.field--error, .field__error-msg, .field__error-icon, error focus ring) · JS: assets/_forms.js (även i _shared.js bundle)
API: Samtrygg.forms.validate(formEl, rules) · .attachLive(formEl, rules) · .setError(field, msg) · .setSuccess(field) · .setLoading(field) · .clearField(field) · .scrollToFirstError(form)
Built-in validators: required, email, phone, pnr, pnrStrict, {minLength: n}, {maxLength: n}, {match: 'otherFieldId'}
Custom validators: Samtrygg.forms.validators.myRule = (val, formEl) => …
Live on-blur via attachLive, scroll-till-första-fel vid submit, BEM-kompatibla state-klasser. Svenska felmeddelanden default. Ratificerat 2026-05-05 (C6 — AI äger visuella states, devs äger custom validation rules).
Live demo: scrolla till Section 6 (Formulär) → "Live validation" — eller använd direkt på vilken sida som helst med data-validate="required,email"-attribut.
--bp-*CSS-tokens i: shared.css :root
| Token | Värde | Avsedd för |
|---|---|---|
--bp-xs | 480px | Extra small phones (iPhone SE) |
--bp-sm | 640px | Small/large phones — mobile bottom-sheet trigger |
--bp-md | 768px | Tablet portrait — primär mobile-cutoff |
--bp-lg | 1024px | Desktop |
--bp-xl | 1280px | Large desktop |
--bp-2xl | 1440px | Ultrawide (Vinko C3) |
OBS: CSS @media-queries stödjer inte var(). Tokens är referens-värden för dokumentation + JS-användning. Skriv alltid @media (max-width: 640px) literalt med ett av de fem värdena.
Audit + migration-policy: audit/BREAKPOINTS.md. ~75% av nuvarande breakpoints följer redan canonical fem-set. Migration sker opportunistiskt — inte sweep.
Samtrygg.modalCSS: assets/_modal.css · JS: assets/_modal.js (även i _shared.js bundle)
Bas-API: Samtrygg.modal.open(elementOrId, opts) · .close(id?) · .closeAll()
Dynamiska helpers: Samtrygg.modal.confirm({title, message, confirmLabel, cancelLabel, destructive, onConfirm, onCancel}) · Samtrygg.modal.bankid({title, sub, status, onCancel, onComplete})
Varianter: .modal--sm, .modal--lg, .modal--confirm, .modal--form, .modal--fullscreen, .modal--bottom-sheet (drag-handle), .modal--bankid (skin)
Konsoliderat 2026-05-05 (B2/B5): generic modal äger nu BankID-skin. Samtrygg.bankid är borttaget — använd Samtrygg.modal.bankid() (drop-in API). Live demos i Section 11 (Modaler).
Auto-wire: data-modal-open="myId" på trigger + data-modal-close på close-buttons. Focus-trap, ESC, backdrop-click, scroll-lock, return-focus, stack-support, ARIA — allt inbyggt.
⚠ Följande dokumenterade komponenter används inte i produktens sidor och bör inte användas i ny kod:
.accordion__item / .accordion__body — dokumenterat men noll användning. Använd <details>/<summary> eller kollapsbar timeline istället..lang-switch__btn — ersatt av .langsw + .lang-btn som används överallt..profile-card (stora varianten) — används aldrig; tenant/landlord-profil-information finns i egna sidor istället.Samtrygg.bankid.open() / Samtrygg.bankid.close() + assets/_bankid.css + assets/_bankid.js — borttagna 2026-05-05 (B5). Använd Samtrygg.modal.bankid({...}) (drop-in API på generic modal med .modal--bankid skin)..timeline (utan prefix) — ersatt 2026-05-05 av .history-timeline (företagshistorik) eller .activity-timeline (aktivitetslogg). Klassnamn-krock löst genom F2-rename.Live BEM demos of every canonical class in assets/_*.css that lacks a primary demo elsewhere. Use this as the reference when porting legacy markup to canonical BEM.
.avatar variants & sizes (_avatar.css).badge & .status-chip (_badge.css).stepper + .step (_stepper.css).divider (_divider.css).nav-min (auth/funnel pages, _nav-min.css).faq-list + .faq-item (_faq.css)Samtrygg betalar ut hyran även om hyresgästen inte kan betala — i upp till 12 månader.
Ja, du kan säga upp avtalet enligt privatuthyrningslagen.
För page-local FAQ utan kort-styling.
.social-btn (_social-btn.css).confirm-screen + .confirm-card (_confirm.css)Din ansökan är skickad. Hyresvärden svarar inom 48 timmar.
.error-* (_error-page.css)Vi kunde tyvärr inte hitta sidan du letade efter.
.viewing-card (_viewing-card.css).pwd-wrap + .strength (_password-input.css).empty-state variants (_empty-state.css).skel* loading skeletons (_empty-state.css).toggle + .check-label + .field-row (_input.css).account-nav + .breadcrumb + .tabs + .topband children (_nav.css).brand-hero + .cta-band + .accordion + .stats-row (_brand.css)Det är gratis att lägga upp en annons.
Samtrygg betalar ut hyran även om hyresgästen hamnar i betalningssvårigheter.
Ja, kostnadsfritt, enligt privatuthyrningslagens uppsägningstider.
.amenity + .fact-grid + .feature-item + .map-block + .poi-item + .profile-card + .page-toc (_listing-detail.css).history-timeline + .activity-timeline.agr-card (_agreement.css)Tvåa på Södermalm · Maria → Anna · 2026-06-01 → 2027-05-31
Studio i Majorna · Jonas → Erik · slutdatum 2026-06-06
Trea i Limhamn · väntar på signatur från båda parter.
.chat-* + .bubble (_chat.css).toast-container (_toast.css)Container för toast-stack — i produktion skapas dynamiskt av Samtrygg.toast och fixed-positioneras bottom-right.
.rating sizes (_rating.css).info-tip variants (_tooltip.css)Hovra över denna text för default-tooltip, eller över denna för below-variant.
.modal--sm + .modal--lg + .modal--bankid sizes (_modal.css).card remaining variants + .listing-card__tags (_card.css)Has internal action buttons
Subtle hover (shadow-1 only) — no whole-card click.
No padding — for full-bleed media or tables
.alert--danger (_alert.css).gallery (_gallery.css)_tokens.css)