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
+16 -16
View File
@@ -14,10 +14,10 @@ body { font-family: -apple-system, BlinkMacSystemFont, 'Inter', sans-serif; back
.nav a { color: #666; text-decoration: none; padding: 12px 20px; font-size: 0.85rem; transition: all 0.2s; border-bottom: 2px solid transparent; }
.nav a:hover, .nav a.active { color: #00d4ff; border-bottom-color: #00d4ff; }
.main { padding: 40px; max-width: 1400px; margin: 0 auto; }
.hero { text-align: center; padding: 60px 20px; background: linear-gradient(180deg, #0a0a0a 0%, #1a1a2e 100%); border-radius: 16px; margin-bottom: 40px; }
.hero { text-align: center; padding: 60px 20px; background: linear-gradient(180deg, #0a0a0a 0%, #1a1a2e 100%); border-radius: var(--radius-lg); margin-bottom: 40px; }
.hero h2 { font-size: 2rem; margin-bottom: 16px; background: linear-gradient(90deg, #00d4ff, #7c3aed); -webkit-background-clip: text; -webkit-text-fill-color: transparent; }
.hero p { font-size: 1rem; color: #aaa; max-width: 800px; margin: 0 auto; }
.north-star { background: #111; border: 2px solid #00d4ff; border-radius: 12px; padding: 32px; margin-bottom: 40px; text-align: center; }
.north-star { background: #111; border: 2px solid #00d4ff; border-radius: var(--radius-md); padding: 32px; margin-bottom: 40px; text-align: center; }
.north-star h2 { font-size: 1.5rem; margin-bottom: 16px; color: #00d4ff; }
.north-star .metric-value { font-size: 3rem; font-weight: 700; color: #00d4ff; }
.north-star .metric-label { font-size: 0.9rem; color: #888; margin-bottom: 16px; }
@@ -26,24 +26,24 @@ body { font-family: -apple-system, BlinkMacSystemFont, 'Inter', sans-serif; back
.target-year { font-size: 0.8rem; color: #666; }
.target-value { font-size: 1.2rem; font-weight: 600; }
.dimensions { display: grid; grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)); gap: 20px; margin-bottom: 40px; }
.dimension { background: #111; border: 1px solid #333; border-radius: 12px; padding: 24px; }
.dimension { background: #111; border: 1px solid #333; border-radius: var(--radius-md); padding: 24px; }
.dimension h3 { font-size: 1rem; margin-bottom: 8px; color: #00d4ff; }
.dimension .current { font-size: 2rem; font-weight: 700; color: #fff; }
.dimension .target { font-size: 0.85rem; color: #888; margin-top: 4px; }
.framework { background: #111; border: 1px solid #333; border-radius: 12px; padding: 32px; margin-bottom: 40px; }
.framework { background: #111; border: 1px solid #333; border-radius: var(--radius-md); padding: 32px; margin-bottom: 40px; }
.framework h2 { font-size: 1.5rem; margin-bottom: 16px; color: #7c3aed; }
.framework p { color: #888; margin-bottom: 16px; }
.categories { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 16px; }
.category { background: #1a1a1a; border-radius: 8px; padding: 16px; }
.category { background: #1a1a1a; border-radius: var(--radius-md); padding: 16px; }
.category-name { color: #00d4ff; font-weight: 600; }
.category-desc { color: #888; font-size: 0.8rem; margin-top: 4px; }
.category-example { color: #aaa; font-size: 0.75rem; margin-top: 8px; font-style: italic; }
.roadmap { background: #111; border: 1px solid #333; border-radius: 12px; padding: 32px; margin-bottom: 40px; }
.roadmap { background: #111; border: 1px solid #333; border-radius: var(--radius-md); padding: 32px; margin-bottom: 40px; }
.roadmap h2 { font-size: 1.5rem; margin-bottom: 16px; color: #00d4ff; }
.phase { margin-bottom: 20px; padding: 16px; background: #1a1a1a; border-radius: 8px; }
.phase { margin-bottom: 20px; padding: 16px; background: #1a1a1a; border-radius: var(--radius-md); }
.phase-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 8px; }
.phase-name { font-weight: 600; color: #fff; }
.phase-priority { font-size: 0.75rem; padding: 2px 8px; border-radius: 4px; }
.phase-priority { font-size: 0.75rem; padding: 2px 8px; border-radius: var(--radius-sm); }
.priority-critical { background: #7c3aed; }
.priority-high { background: #00d4ff; color: #000; }
.priority-medium { background: #333; }
@@ -97,27 +97,27 @@ body { font-family: -apple-system, BlinkMacSystemFont, 'Inter', sans-serif; back
<div class="dimensions">
<div class="dimension">
<h3>📊 Object Coverage</h3>
<h3> Object Coverage</h3>
<div class="current">78%</div>
<div class="target">Target: 95%</div>
</div>
<div class="dimension">
<h3>🔍 Multi-source Verification</h3>
<h3><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><circle cx="7" cy="7" r="5" stroke="#666" stroke-width="2"/><path d="M11 11L14 14" stroke="#666" stroke-width="2" stroke-linecap="round"/></svg> Multi-source Verification</h3>
<div class="current">34%</div>
<div class="target">Target: 60%</div>
</div>
<div class="dimension">
<h3> Evidence Freshness</h3>
<h3>⏱ Evidence Freshness</h3>
<div class="current">14.2d</div>
<div class="target">Target: 7d</div>
</div>
<div class="dimension">
<h3>🎯 Average Confidence</h3>
<h3> Average Confidence</h3>
<div class="current">68</div>
<div class="target">Target: 80</div>
</div>
<div class="dimension">
<h3>🔗 Traceability</h3>
<h3> Traceability</h3>
<div class="current">92%</div>
<div class="target">Target: 98%</div>
</div>
@@ -129,17 +129,17 @@ body { font-family: -apple-system, BlinkMacSystemFont, 'Inter', sans-serif; back
<div class="categories">
<div class="category">
<div class="category-name">🎯 Vision</div>
<div class="category-name"> Vision</div>
<div class="category-desc">What we aim to achieve long-term</div>
<div class="category-example">"LIFE aims to establish an open framework for Reality Intelligence."</div>
</div>
<div class="category">
<div class="category-name">🏗️ Architecture</div>
<div class="category-name"><svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M2 14H14M4 14V8L8 4L12 8V14" stroke="#666" stroke-width="1.5" stroke-linejoin="round"/><path d="M6 14V10H10V14" stroke="#666" stroke-width="1.5"/></svg> Architecture</div>
<div class="category-desc">How the system is designed</div>
<div class="category-example">"RIS defines objects, evidence, confidence, and interoperability."</div>
</div>
<div class="category">
<div class="category-name"> Validated Results</div>
<div class="category-name"><svg width="20" height="20" viewBox="0 0 20 20" fill="none"><circle cx="10" cy="10" r="9" stroke="#22c55e" stroke-width="2"/><path d="M6 10L9 13L14 7" stroke="#22c55e" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg> Validated Results</div>
<div class="category-desc">What we have actually demonstrated</div>
<div class="category-example">"In Pilot X, Y changes identified with Z% verification rate."</div>
</div>