feat: Passwordless cross-device authentication

- Arkitektur: docs/auth/passwordless-architecture.md
- Backend: iom/quixzoom-auth-service/ (FastAPI + Redis)
- Webb: quixzoom-market-pages/se/login/ (QR-kod + polling)
- App: iom/quixzoom-app/src/features/auth/ (push + deep links)

Flöde: QR-kod → app-godkännande → webb-inloggad
This commit is contained in:
Bernt
2026-07-07 07:11:50 +00:00
parent 4aa984ad74
commit 6989a98d75
61843 changed files with 5491611 additions and 872231 deletions
+7 -7
View File
@@ -57,12 +57,12 @@
.contact-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 24px; }
.contact-card {
background: var(--surface); border: 1px solid var(--border); border-radius: 20px;
background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius-xl);
padding: 40px; text-align: center; transition: transform 0.2s, box-shadow 0.2s;
}
.contact-card:hover { transform: translateY(-4px); box-shadow: 0 12px 40px rgba(0,0,0,0.08); }
.contact-icon {
width: 56px; height: 56px; background: var(--blue-glow); border-radius: 16px;
width: 56px; height: 56px; background: var(--blue-glow); border-radius: var(--radius-lg);
display: flex; align-items: center; justify-content: center;
margin: 0 auto 20px; color: var(--blue);
}
@@ -74,7 +74,7 @@
/* Form section */
.form-section {
background: var(--surface); border: 1px solid var(--border); border-radius: 20px;
background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius-xl);
padding: 48px; margin: 40px 0;
}
.form-section h2 { font-size: 1.75rem; font-weight: 700; margin-bottom: 16px; text-align: center; }
@@ -84,7 +84,7 @@
.form-group.full { grid-column: 1 / -1; }
.form-group label { font-size: 0.875rem; font-weight: 600; margin-bottom: 6px; color: var(--text-dark); }
.form-group input, .form-group textarea, .form-group select {
padding: 12px 16px; border: 1px solid var(--border); border-radius: 12px;
padding: 12px 16px; border: 1px solid var(--border); border-radius: var(--radius-md);
font-size: 1rem; font-family: inherit; background: var(--surface-2);
}
.form-group input:focus, .form-group textarea:focus, .form-group select:focus {
@@ -93,7 +93,7 @@
.form-group textarea { min-height: 120px; resize: vertical; }
.submit-btn {
background: var(--blue); color: #fff; border: none; padding: 14px 32px;
border-radius: 12px; font-size: 1rem; font-weight: 600; cursor: pointer;
border-radius: var(--radius-md); font-size: 1rem; font-weight: 600; cursor: pointer;
margin-top: 8px; transition: background 0.2s;
}
.submit-btn:hover { background: var(--blue-dark); }
@@ -102,12 +102,12 @@
.offices { padding: 60px 0; background: var(--surface); }
.office-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 24px; }
.office-card {
background: var(--surface-2); border: 1px solid var(--border); border-radius: 16px; padding: 32px;
background: var(--surface-2); border: 1px solid var(--border); border-radius: var(--radius-lg); padding: 32px;
}
.office-card h3 { font-size: 1.125rem; font-weight: 700; margin-bottom: 8px; }
.office-card p { font-size: 0.9rem; color: var(--text-muted); line-height: 1.6; }
.office-icon {
width: 48px; height: 48px; background: var(--blue-glow); border-radius: 12px;
width: 48px; height: 48px; background: var(--blue-glow); border-radius: var(--radius-md);
display: flex; align-items: center; justify-content: center;
margin-bottom: 16px; color: var(--blue);
}