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
+8 -8
View File
@@ -6,23 +6,23 @@
body{font-family:-apple-system,BlinkMacSystemFont,sans-serif;background:#F2F2F7;color:#000}
.header{position:sticky;top:0;background:rgba(242,242,247,.9);backdrop-filter:blur(20px);border-bottom:1px solid rgba(60,60,67,.12);padding:12px 16px;display:flex;align-items:center;gap:12px}
.header h1{font-size:17px;font-weight:600}
.search{flex:1;background:rgba(120,120,128,.12);border:none;border-radius:10px;padding:7px 12px;font-size:15px;outline:none}
.search{flex:1;background:rgba(120,120,128,.12);border:none;border-radius: var(--radius-md);padding:7px 12px;font-size:15px;outline:none}
.stats{display:flex;gap:8px;padding:16px;overflow-x:auto}
.stat{background:#fff;border-radius:12px;padding:12px 16px;min-width:100px;text-align:center}
.stat{background:#fff;border-radius: var(--radius-md);padding:12px 16px;min-width:100px;text-align:center}
.stat-val{font-size:26px;font-weight:700}.stat-lbl{font-size:12px;color:rgba(60,60,67,.6);margin-top:2px}
.filters{padding:0 16px 8px;display:flex;gap:8px;overflow-x:auto}
.chip{background:rgba(120,120,128,.12);border:none;border-radius:20px;padding:6px 14px;font-size:14px;font-weight:500;cursor:pointer}
.chip{background:rgba(120,120,128,.12);border:none;border-radius: var(--radius-xl);padding:6px 14px;font-size:14px;font-weight:500;cursor:pointer}
.chip.active{background:#007AFF;color:#fff}
.list{padding:0 16px 80px}
.card{background:#fff;border-radius:12px;padding:14px;margin-bottom:8px;display:flex;align-items:center;gap:12px}
.avatar{width:42px;height:42px;border-radius:21px;background:#007AFF15;display:flex;align-items:center;justify-content:center;font-size:18px;font-weight:600;color:#007AFF;flex-shrink:0}
.card{background:#fff;border-radius: var(--radius-md);padding:14px;margin-bottom:8px;display:flex;align-items:center;gap:12px}
.avatar{width:42px;height:42px;border-radius: 21px;background:#007AFF15;display:flex;align-items:center;justify-content:center;font-size:18px;font-weight:600;color:#007AFF;flex-shrink:0}
.info{flex:1}
.name{font-size:15px;font-weight:600}.sub{font-size:13px;color:rgba(60,60,67,.6);margin-top:2px}
.badge{font-size:12px;padding:3px 8px;border-radius:6px;font-weight:500}
.badge{font-size:12px;padding:3px 8px;border-radius: var(--radius-sm);font-weight:500}
.badge.pending{background:#FF950015;color:#FF9500}
.badge.verified{background:#34C75915;color:#34C759}
.badge.active{background:#007AFF15;color:#007AFF}
.btn-verify{background:#34C759;color:#fff;border:none;border-radius:8px;padding:7px 14px;font-size:13px;font-weight:600;cursor:pointer}
.btn-verify{background:#34C759;color:#fff;border:none;border-radius: var(--radius-md);padding:7px 14px;font-size:13px;font-weight:600;cursor:pointer}
@media (max-width: 640px) {
.hero h1 { font-size: 2rem !important; }
.hero p { font-size: 1rem !important; }
@@ -52,7 +52,7 @@ body { -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;
</style>
</head><body>
<div class="header">
<h1>🎯 Zoomer Admin</h1>
<h1> Zoomer Admin</h1>
<input class="search" type="text" placeholder="Sök namn eller email…" id="q" oninput="filter()">
</div>
<div class="stats" id="stats"></div>