Files
boc/quixzoom-landing-fixed/app-store-guide.html
T

901 lines
40 KiB
HTML
Raw Normal View History

<!DOCTYPE html>
<html lang="sv" data-theme="dark">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
<title>App Store Guide — quiXzoom</title>
<link rel="stylesheet" >
<style>
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
body {
font-family: var(--font-text);
background: var(--grouped-background-primary);
color: var(--label-primary);
min-height: 100dvh;
padding-top: env(safe-area-inset-top, 44px);
padding-bottom: calc(env(safe-area-inset-bottom, 34px) + 40px);
-webkit-font-smoothing: antialiased;
}
.nav-bar {
position: sticky; top: 0; z-index: 200;
display: flex; align-items: center; justify-content: space-between;
height: 44px; padding: 0 16px;
background: var(--navbar-bg);
backdrop-filter: saturate(180%) blur(20px);
-webkit-backdrop-filter: saturate(180%) blur(20px);
border-bottom: 0.5px solid var(--separator);
}
.nav-title { font-size: 17px; font-weight: 600; letter-spacing: -0.41px; }
.nav-badge {
font-size: 12px; font-weight: 600; padding: 4px 10px;
background: rgba(10,132,255,0.15); color: var(--ios-blue);
border-radius: var(--radius-xl);
}
/* Hero */
.hero {
padding: 28px 20px 24px;
text-align: center;
background: linear-gradient(180deg, rgba(10,132,255,0.08) 0%, transparent 100%);
}
.hero-icon { font-size: 64px; margin-bottom: 12px; line-height: 1; }
.hero-title {
font-family: var(--font-display);
font-size: 28px; font-weight: 800; letter-spacing: -0.5px;
margin-bottom: 8px;
}
.hero-sub { font-size: 15px; color: var(--label-secondary); line-height: 1.5; }
/* Progress overview */
.progress-overview {
margin: 0 16px 20px;
background: var(--background-secondary);
border-radius: var(--radius-lg); overflow: hidden;
border: 0.5px solid var(--separator);
padding: 16px;
}
.progress-label {
display: flex; justify-content: space-between; align-items: center;
margin-bottom: 10px;
}
.progress-label-text { font-size: 14px; color: var(--label-secondary); }
.progress-label-count { font-size: 14px; font-weight: 700; color: var(--ios-blue); }
.progress-track {
height: 8px; background: var(--fill-secondary); border-radius: var(--radius-sm); overflow: hidden;
}
.progress-fill {
height: 100%; border-radius: var(--radius-sm);
background: linear-gradient(90deg, var(--ios-blue), var(--ios-indigo));
transition: width 0.8s cubic-bezier(0.34,1.56,0.64,1);
}
.progress-chips {
display: flex; gap: 8px; margin-top: 12px; flex-wrap: wrap;
}
.progress-chip {
font-size: 12px; font-weight: 500; padding: 4px 10px; border-radius: var(--radius-md);
}
.chip-done { background: rgba(48,209,88,0.15); color: var(--ios-green); }
.chip-todo { background: var(--fill-secondary); color: var(--label-secondary); }
/* Section */
.section { margin: 0 16px 28px; }
.section-header {
font-size: 13px; font-weight: 600; color: var(--label-secondary);
text-transform: uppercase; letter-spacing: 0.5px;
padding: 0 4px 10px;
}
/* Steps */
.steps-list { display: flex; flex-direction: column; gap: 0; }
.step-card {
background: var(--background-secondary);
border-radius: 0; overflow: hidden;
border: 0.5px solid var(--separator);
margin-bottom: -0.5px;
}
.step-card:first-child { border-radius: var(--radius-lg) 14px 0 0; }
.step-card:last-child { border-radius: 0 0 14px 14px; margin-bottom: 0; }
.step-card:only-child { border-radius: var(--radius-lg); }
.step-header {
display: flex; align-items: center; gap: 14px;
padding: 16px; cursor: pointer;
}
.step-number {
width: 32px; height: 32px; border-radius: var(--radius-full);
display: flex; align-items: center; justify-content: center;
font-size: 14px; font-weight: 700; flex-shrink: 0;
}
.step-num-done { background: var(--ios-green); color: #fff; }
.step-num-todo { background: var(--fill-secondary); color: var(--label-secondary); }
.step-num-progress { background: var(--ios-blue); color: #fff; }
.step-info { flex: 1; }
.step-title { font-size: 16px; font-weight: 600; }
.step-desc { font-size: 13px; color: var(--label-secondary); margin-top: 2px; }
.step-check { font-size: 18px; }
.step-body {
padding: 0 16px 16px 62px;
font-size: 14px; color: var(--label-secondary);
line-height: 1.6;
display: none;
}
.step-body.open { display: block; }
.step-detail-row {
display: flex; gap: 8px; margin-bottom: 8px; align-items: flex-start;
}
.step-detail-dot { margin-top: 5px; width: 5px; height: 5px; border-radius: var(--radius-full); background: var(--ios-blue); flex-shrink: 0; }
.step-detail-text { flex: 1; color: var(--label-primary); }
.step-code {
font-family: var(--font-mono); font-size: 13px;
background: var(--fill-secondary); padding: 2px 7px; border-radius: var(--radius-sm);
color: var(--ios-teal);
}
.step-cta {
display: inline-flex; align-items: center; gap: 6px;
margin-top: 10px; padding: 9px 16px; border-radius: var(--radius-md);
background: rgba(10,132,255,0.12); color: var(--ios-blue);
font-size: 14px; font-weight: 600; text-decoration: none;
transition: opacity 0.12s;
}
.step-cta:active { opacity: 0.7; }
/* Legal checklist */
.legal-card {
background: var(--background-secondary);
border-radius: var(--radius-lg); overflow: hidden;
border: 0.5px solid var(--separator);
}
.legal-row {
display: flex; align-items: center; gap: 14px;
padding: 13px 16px;
border-bottom: 0.5px solid var(--separator);
}
.legal-row:last-child { border-bottom: none; }
.legal-icon { font-size: 20px; }
.legal-info { flex: 1; }
.legal-title { font-size: 15px; font-weight: 500; }
.legal-sub { font-size: 12px; color: var(--label-secondary); margin-top: 2px; }
.legal-status { font-size: 16px; }
/* Screenshot guide */
.screenshot-grid {
display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 10px;
margin-top: 0;
}
.screenshot-card {
background: var(--background-secondary);
border-radius: var(--radius-md); overflow: hidden;
border: 0.5px solid var(--separator);
padding: 14px 10px; text-align: center;
}
.screenshot-icon { font-size: 28px; margin-bottom: 8px; }
.screenshot-size { font-size: 12px; font-weight: 700; color: var(--label-primary); }
.screenshot-note { font-size: 11px; color: var(--label-secondary); margin-top: 3px; }
/* Info card */
.info-card {
background: rgba(10,132,255,0.08);
border: 0.5px solid rgba(10,132,255,0.2);
border-radius: var(--radius-lg); padding: 14px 16px;
margin-top: 12px;
}
.info-card-title { font-size: 13px; font-weight: 600; color: var(--ios-blue); margin-bottom: 4px; }
.info-card-body { font-size: 13px; color: var(--label-secondary); line-height: 1.5; }
/* Warning card */
.warn-card {
background: rgba(255,159,10,0.08);
border: 0.5px solid rgba(255,159,10,0.2);
border-radius: var(--radius-lg); padding: 14px 16px;
margin: 16px 16px 8px;
}
.warn-card-title { font-size: 13px; font-weight: 600; color: var(--ios-orange); margin-bottom: 4px; }
.warn-card-body { font-size: 13px; color: var(--label-secondary); line-height: 1.5; }
@media (max-width: 640px) {
.hero h1 { font-size: 2rem !important; }
.hero p { font-size: 1rem !important; }
.card { padding: 1.5rem !important; }
.grid { grid-template-columns: 1fr !important; }
.btn { padding: 0.75rem 1.5rem !important; font-size: 1rem !important; }
}
</style>
<style id="wcag-contrast-enforcement">
/* AAMOS GLOBAL CONTRAST ENFORCEMENT — WCAG AA (4.5:1 minimum) */
/* Regel: Ingen text under 70% opacity. Aldrig. */
body { -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }
/* Fix common low-contrast patterns */
[style*="rgba(60,60,67,0.4)"] { color: rgba(60,60,67,0.65) !important; }
[style*="rgba(60,60,67,0.3)"] { color: rgba(60,60,67,0.65) !important; }
[style*="rgba(255,255,255,0.4)"] { color: rgba(255,255,255,0.72) !important; }
[style*="rgba(255,255,255,0.3)"] { color: rgba(255,255,255,0.72) !important; }
[style*="opacity: 0.4"] { opacity: 0.72 !important; }
[style*="opacity: 0.3"] { opacity: 0.72 !important; }
@media (max-width: 640px) {
.hero h1 { font-size: 2rem !important; }
.hero p { font-size: 1rem !important; }
.card { padding: 1.5rem !important; }
.grid { grid-template-columns: 1fr !important; }
.btn { padding: 0.75rem 1.5rem !important; font-size: 1rem !important; }
}
</style>
<meta property="og:type" content="website">
<meta property="og:title" content="App Store Guide — quiXzoom">
<meta property="og:description" content="quiXzoom — Earn per Mission. No Platform Fee.">
<meta property="og:url" content="https://www.quixzoom.com/app-store-guide.html">
<meta property="og:image" content="https://www.quixzoom.com/images/app-screenshot.jpg">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta property="og:image:alt" content="quiXzoom App Store guide — download on iOS and Android">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:image" content="https://www.quixzoom.com/images/app-screenshot.jpg">
<meta name="twitter:title" content="App Store Guide — quiXzoom">
<script type="module" src="https://auth.quixzoom.com/site-auth-snippet.js"></script>
</head>
<body>
<!-- Nav -->
<div class="nav-bar">
<span class="nav-title">App Store Guide</span>
<span class="nav-badge">3 / 9 klara</span>
</div>
<!-- Hero -->
<div class="hero">
<div class="hero-icon"></div>
<div class="hero-title">App Store Submission</div>
<div class="hero-sub">Steg-för-steg guide för quiXzoom<br>iOS App — augusti 2026</div>
</div>
<!-- Progress -->
<div class="progress-overview">
<div class="progress-label">
<span class="progress-label-text">Inlämningssteg slutförda</span>
<span class="progress-label-count">3 av 9</span>
</div>
<div class="progress-track">
<div class="progress-fill" id="progress-fill" style="width:33%"></div>
</div>
<div class="progress-chips">
<span class="progress-chip chip-done"><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> Privacy Policy</span>
<span class="progress-chip chip-done"><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> Support URL</span>
<span class="progress-chip chip-done"><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> Terms of Service</span>
<span class="progress-chip chip-todo">⏳ SwiftUI App</span>
<span class="progress-chip chip-todo">⏳ Screenshots</span>
<span class="progress-chip chip-todo">⏳ App Store Connect</span>
</div>
</div>
<!-- Steps -->
<div class="section">
<div class="section-header">Inlämningssteg</div>
<div class="steps-list">
<!-- Step 1 -->
<div class="step-card" onclick="toggle(1)">
<div class="step-header">
<div class="step-number step-num-todo">1</div>
<div class="step-info">
<div class="step-title">App Store Connect konto</div>
<div class="step-desc">Apple Developer Program · $99/år</div>
</div>
<span class="step-check"><svg width="20" height="20" viewBox="0 0 20 20" fill="none"><path d="M10 3L17 17H3L10 3Z" stroke="#f59e0b" stroke-width="2"/><path d="M10 8V12M10 14V14.5" stroke="#f59e0b" stroke-width="2" stroke-linecap="round"/></svg></span>
</div>
<div class="step-body" id="step-1">
<div class="step-detail-row">
<div class="step-detail-dot"></div>
<div class="step-detail-text">Logga in på <strong>appstoreconnect.apple.com</strong> med <span class="step-code">erik@hypbit.com</span></div>
</div>
<div class="step-detail-row">
<div class="step-detail-dot"></div>
<div class="step-detail-text">Verifiera att Apple Developer Program ($99/år) är aktivt — kan ta 2448h att aktivera om nytt</div>
</div>
<div class="step-detail-row">
<div class="step-detail-dot"></div>
<div class="step-detail-text">Navigera till "Apps" → klicka "+" → "New App"</div>
</div>
<a class="step-cta" href="https://appstoreconnect.apple.com" target="_blank">
Öppna App Store Connect
</a>
</div>
</div>
<!-- Step 2 -->
<div class="step-card" onclick="toggle(2)">
<div class="step-header">
<div class="step-number step-num-todo">2</div>
<div class="step-info">
<div class="step-title">App ID & Bundle ID</div>
<div class="step-desc">Registrera unik identifierare</div>
</div>
<span class="step-check"><svg width="20" height="20" viewBox="0 0 20 20" fill="none"><path d="M10 3L17 17H3L10 3Z" stroke="#f59e0b" stroke-width="2"/><path d="M10 8V12M10 14V14.5" stroke="#f59e0b" stroke-width="2" stroke-linecap="round"/></svg></span>
</div>
<div class="step-body" id="step-2">
<div class="step-detail-row">
<div class="step-detail-dot"></div>
<div class="step-detail-text">Gå till <strong>developer.apple.com/account</strong> → Certificates, IDs & Profiles → Identifiers</div>
</div>
<div class="step-detail-row">
<div class="step-detail-dot"></div>
<div class="step-detail-text">Klicka "+" → App IDs → App → Continue</div>
</div>
<div class="step-detail-row">
<div class="step-detail-dot"></div>
<div class="step-detail-text">Bundle ID (Explicit): <span class="step-code">se.wavult.quixzoom</span></div>
</div>
<div class="step-detail-row">
<div class="step-detail-dot"></div>
<div class="step-detail-text">Capabilities att aktivera: Push Notifications, Sign in with Apple, Location Services</div>
</div>
<div class="info-card">
<div class="info-card-title"> Bundle ID</div>
<div class="info-card-body">Bundle ID är permanent och kan inte ändras efter publicering. Använd <code>se.wavult.quixzoom</code> exakt.</div>
</div>
</div>
</div>
<!-- Step 3 -->
<div class="step-card" onclick="toggle(3)">
<div class="step-header">
<div class="step-number step-num-todo">3</div>
<div class="step-info">
<div class="step-title">App Metadata</div>
<div class="step-desc">Namn, kategori, beskrivning</div>
</div>
<span class="step-check"><svg width="20" height="20" viewBox="0 0 20 20" fill="none"><path d="M10 3L17 17H3L10 3Z" stroke="#f59e0b" stroke-width="2"/><path d="M10 8V12M10 14V14.5" stroke="#f59e0b" stroke-width="2" stroke-linecap="round"/></svg></span>
</div>
<div class="step-body" id="step-3">
<div class="step-detail-row">
<div class="step-detail-dot"></div>
<div class="step-detail-text">App Name: <span class="step-code">quiXzoom</span></div>
</div>
<div class="step-detail-row">
<div class="step-detail-dot"></div>
<div class="step-detail-text">Subtitle (max 30 tecken): <span class="step-code">Drönartjänster på begäran</span></div>
</div>
<div class="step-detail-row">
<div class="step-detail-dot"></div>
<div class="step-detail-text">Primary Category: <strong>Business</strong></div>
</div>
<div class="step-detail-row">
<div class="step-detail-dot"></div>
<div class="step-detail-text">Secondary Category: <strong>Productivity</strong></div>
</div>
<div class="step-detail-row">
<div class="step-detail-dot"></div>
<div class="step-detail-text">Keywords (max 100 tecken): <span class="step-code">drönare, scanning, uppdrag, zoomer, fastighet, inspektiön</span></div>
</div>
<div class="step-detail-row">
<div class="step-detail-dot"></div>
<div class="step-detail-text">Description: Skriv en övertygande 4000-tecken beskrivning på svenska och engelska</div>
</div>
<div class="step-detail-row">
<div class="step-detail-dot"></div>
<div class="step-detail-text">What's New (v1.0): <span class="step-code">quiXzoom lanseras i Sverige! Ta drönarppdrag när det passar dig.</span></div>
</div>
</div>
</div>
<!-- Step 4 -->
<div class="step-card" onclick="toggle(4)">
<div class="step-header">
<div class="step-number step-num-todo">4</div>
<div class="step-info">
<div class="step-title">Screenshots</div>
<div class="step-desc">3 storlekar krävda av Apple</div>
</div>
<span class="step-check"><svg width="20" height="20" viewBox="0 0 20 20" fill="none"><path d="M10 3L17 17H3L10 3Z" stroke="#f59e0b" stroke-width="2"/><path d="M10 8V12M10 14V14.5" stroke="#f59e0b" stroke-width="2" stroke-linecap="round"/></svg></span>
</div>
<div class="step-body" id="step-4">
<div class="screenshot-grid">
<div class="screenshot-card">
<div class="screenshot-icon"></div>
<div class="screenshot-size">6.7"</div>
<div class="screenshot-note">iPhone 15 Plus<br>1290×2796</div>
</div>
<div class="screenshot-card">
<div class="screenshot-icon"></div>
<div class="screenshot-size">6.1"</div>
<div class="screenshot-note">iPhone 15<br>1179×2556</div>
</div>
<div class="screenshot-card">
<div class="screenshot-icon"></div>
<div class="screenshot-size">iPad 12.9"</div>
<div class="screenshot-note">iPad Pro<br>2048×2732</div>
</div>
</div>
<div class="step-detail-row" style="margin-top:14px">
<div class="step-detail-dot"></div>
<div class="step-detail-text">Minimum 3 screenshots, max 10 per enhet</div>
</div>
<div class="step-detail-row">
<div class="step-detail-dot"></div>
<div class="step-detail-text">Visa: Uppdragskarta, Zoomer-profil, Betalningsflöde, Onboarding</div>
</div>
<div class="step-detail-row">
<div class="step-detail-dot"></div>
<div class="step-detail-text">Verktyg: Figma + iPhone Simulator (Xcode), eller Rottenwood/AppLaunchpad</div>
</div>
<div class="info-card">
<div class="info-card-title"> Pro tip</div>
<div class="info-card-body">Lägg till device frames och svenska texter i bilderna. Localize screenshots till SV för bättre konvertering.</div>
</div>
</div>
</div>
<!-- Step 5 -->
<div class="step-card" onclick="toggle(5)">
<div class="step-header">
<div class="step-number step-num-todo">5</div>
<div class="step-info">
<div class="step-title">App Review Information</div>
<div class="step-desc">Kontaktinfo + demouppgifter</div>
</div>
<span class="step-check"><svg width="20" height="20" viewBox="0 0 20 20" fill="none"><path d="M10 3L17 17H3L10 3Z" stroke="#f59e0b" stroke-width="2"/><path d="M10 8V12M10 14V14.5" stroke="#f59e0b" stroke-width="2" stroke-linecap="round"/></svg></span>
</div>
<div class="step-body" id="step-5">
<div class="step-detail-row">
<div class="step-detail-dot"></div>
<div class="step-detail-text">First Name / Last Name: <span class="step-code">Erik Svensson</span></div>
</div>
<div class="step-detail-row">
<div class="step-detail-dot"></div>
<div class="step-detail-text">Email: <span class="step-code">erik@hypbit.com</span></div>
</div>
<div class="step-detail-row">
<div class="step-detail-dot"></div>
<div class="step-detail-text">Phone: <span class="step-code">+46709123223</span></div>
</div>
<div class="step-detail-row">
<div class="step-detail-dot"></div>
<div class="step-detail-text">Demo Account: Skapa ett test-zoomer-konto med verifierad KYC för review-teamet</div>
</div>
<div class="step-detail-row">
<div class="step-detail-dot"></div>
<div class="step-detail-text">Review Notes: "quiXzoom is a gig economy platform for drone operators. Use the demo account to browse available missions. Location access is required for the mission map feature."</div>
</div>
<div class="step-detail-row">
<div class="step-detail-dot"></div>
<div class="step-detail-text">Attachment: Valfri — överväg att bifoga en kort video (MP4, max 2 min) som demonstrerar appen</div>
</div>
</div>
</div>
<!-- Step 6 -->
<div class="step-card" onclick="toggle(6)">
<div class="step-header">
<div class="step-number step-num-done">6</div>
<div class="step-info">
<div class="step-title">Privacy Policy URL</div>
<div class="step-desc">GDPR-kompatibel · live</div>
</div>
<span class="step-check"><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></span>
</div>
<div class="step-body" id="step-6">
<div class="step-detail-row">
<div class="step-detail-dot"></div>
<div class="step-detail-text">URL: <span class="step-code">https://quixzoom.com/privacy</span> <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> Live</div>
</div>
<div class="step-detail-row">
<div class="step-detail-dot"></div>
<div class="step-detail-text">GDPR compliance: <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> Täcker datainsamling, behandling, raderingsrätt</div>
</div>
<div class="step-detail-row">
<div class="step-detail-dot"></div>
<div class="step-detail-text">Måste vara tillgänglig utan inloggning (publikt URL)</div>
</div>
<a class="step-cta" href="https://quixzoom.com/privacy" target="_blank">
Visa Privacy Policy
</a>
</div>
</div>
<!-- Step 7 -->
<div class="step-card" onclick="toggle(7)">
<div class="step-header">
<div class="step-number step-num-done">7</div>
<div class="step-info">
<div class="step-title">Support URL</div>
<div class="step-desc">Kundservice · live</div>
</div>
<span class="step-check"><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></span>
</div>
<div class="step-body" id="step-7">
<div class="step-detail-row">
<div class="step-detail-dot"></div>
<div class="step-detail-text">URL: <span class="step-code">https://quixzoom.com/support</span> <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> Live</div>
</div>
<div class="step-detail-row">
<div class="step-detail-dot"></div>
<div class="step-detail-text">Email: <span class="step-code">support@quixzoom.com</span></div>
</div>
<div class="step-detail-row">
<div class="step-detail-dot"></div>
<div class="step-detail-text">Phone: <span class="step-code">+46 8 123 45 67</span></div>
</div>
<a class="step-cta" href="https://quixzoom.com/support" target="_blank">
Visa Support-sida
</a>
</div>
</div>
<!-- Step 8 -->
<div class="step-card" onclick="toggle(8)">
<div class="step-header">
<div class="step-number step-num-todo">8</div>
<div class="step-info">
<div class="step-title">Marketing URL</div>
<div class="step-desc">Valfritt — produktsida</div>
</div>
<span class="step-check"></span>
</div>
<div class="step-body" id="step-8">
<div class="step-detail-row">
<div class="step-detail-dot"></div>
<div class="step-detail-text">Valfri men rekommenderad — ökar trovärdighet hos Apple</div>
</div>
<div class="step-detail-row">
<div class="step-detail-dot"></div>
<div class="step-detail-text">Förslag: <span class="step-code">https://quixzoom.com</span> (landningssida)</div>
</div>
<div class="step-detail-row">
<div class="step-detail-dot"></div>
<div class="step-detail-text">Alternativt: <span class="step-code">https://quixzoom.com/app</span> — specifik nedladdningssida</div>
</div>
</div>
</div>
<!-- Step 9 -->
<div class="step-card" onclick="toggle(9)">
<div class="step-header">
<div class="step-number step-num-todo">9</div>
<div class="step-info">
<div class="step-title">Submit for Review</div>
<div class="step-desc">Sista steget · 17 dagar väntetid</div>
</div>
<span class="step-check"></span>
</div>
<div class="step-body" id="step-9">
<div class="step-detail-row">
<div class="step-detail-dot"></div>
<div class="step-detail-text">Kontrollera att alla tidigare steg är klara (grön check)</div>
</div>
<div class="step-detail-row">
<div class="step-detail-dot"></div>
<div class="step-detail-text">Klicka "Add for Review" → välj release type: <strong>Automatic release</strong></div>
</div>
<div class="step-detail-row">
<div class="step-detail-dot"></div>
<div class="step-detail-text">Genomsnittlig granskningstid: 2448h (kan vara upp till 7 dagar v1.0)</div>
</div>
<div class="step-detail-row">
<div class="step-detail-dot"></div>
<div class="step-detail-text">Planera inlämning: <strong>senast 24 juli</strong> för lansering 1 augusti</div>
</div>
<div class="info-card">
<div class="info-card-title">⏱ Tidslinje</div>
<div class="info-card-body">Lämna in senast 24 juli → App Review 25 dagar → Klar 3031 juli → Launch Day 1 augusti <svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M8 2L10 8L14 9L8 14L6 8L2 7L8 2Z" fill="#666"/></svg></div>
</div>
</div>
</div>
</div>
</div>
<!-- Legal checklist -->
<div class="section">
<div class="section-header">Juridisk checklista</div>
<div class="legal-card">
<div class="legal-row">
<span class="legal-icon"></span>
<div class="legal-info">
<div class="legal-title">GDPR Compliance</div>
<div class="legal-sub">Privacy policy live, dataskyddsombud</div>
</div>
<span class="legal-status"><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></span>
</div>
<div class="legal-row">
<span class="legal-icon"></span>
<div class="legal-info">
<div class="legal-title">DAC7 Rapportering</div>
<div class="legal-sub">EU-direktiv för plattformsekonomin — pågår</div>
</div>
<span class="legal-status"></span>
</div>
<div class="legal-row">
<span class="legal-icon"></span>
<div class="legal-info">
<div class="legal-title">Zoomer-avtal</div>
<div class="legal-sub">Uppdragstagares villkor — behövs innan launch</div>
</div>
<span class="legal-status"><svg width="20" height="20" viewBox="0 0 20 20" fill="none"><circle cx="10" cy="10" r="9" stroke="#ef4444" stroke-width="2"/><path d="M7 7L13 13M13 7L7 13" stroke="#ef4444" stroke-width="2" stroke-linecap="round"/></svg></span>
</div>
<div class="legal-row">
<span class="legal-icon"></span>
<div class="legal-info">
<div class="legal-title">SwiftUI App</div>
<div class="legal-sub">Native iOS-app för App Store</div>
</div>
<span class="legal-status"><svg width="20" height="20" viewBox="0 0 20 20" fill="none"><circle cx="10" cy="10" r="9" stroke="#ef4444" stroke-width="2"/><path d="M7 7L13 13M13 7L7 13" stroke="#ef4444" stroke-width="2" stroke-linecap="round"/></svg></span>
</div>
<div class="legal-row">
<span class="legal-icon"></span>
<div class="legal-info">
<div class="legal-title">Terms of Service</div>
<div class="legal-sub">Användarvillkor live</div>
</div>
<span class="legal-status"><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></span>
</div>
<div class="legal-row">
<span class="legal-icon"></span>
<div class="legal-info">
<div class="legal-title">Drönartillstånd (LFV/Transportstyrelsen)</div>
<div class="legal-sub">Zoomer ansvarar för eget tillstånd</div>
</div>
<span class="legal-status"><svg width="20" height="20" viewBox="0 0 20 20" fill="none"><path d="M10 3L17 17H3L10 3Z" stroke="#f59e0b" stroke-width="2"/><path d="M10 8V12M10 14V14.5" stroke="#f59e0b" stroke-width="2" stroke-linecap="round"/></svg></span>
</div>
</div>
</div>
<!-- Critical path warning -->
<div class="warn-card">
<div class="warn-card-title"><svg width="20" height="20" viewBox="0 0 20 20" fill="none"><path d="M10 3L17 17H3L10 3Z" stroke="#f59e0b" stroke-width="2"/><path d="M10 8V12M10 14V14.5" stroke="#f59e0b" stroke-width="2" stroke-linecap="round"/></svg> Kritisk väg till 1 augusti</div>
<div class="warn-card-body">SwiftUI-app måste vara klar senast <strong>5 juni</strong> för att hinna med screenshots, testning och App Review-processen. Det är den enda blockande faktorn för en lyckad launch.</div>
</div>
<div style="height:32px"></div>
<script>
const openSteps = new Set();
function toggle(n) {
const el = document.getElementById('step-' + n);
if (!el) return;
if (openSteps.has(n)) {
el.classList.remove('open');
openSteps.delete(n);
} else {
el.classList.add('open');
openSteps.add(n);
}
}
// Auto-open step 1 on load
toggle(1);
</script>
<!-- quiXzoom Mina Sidor - Universal Header Component -->
<!-- Injicera detta i <head> på alla quiXzoom-sajter -->
<style>
.qz-auth-bar {
position: fixed;
top: 0;
left: 0;
right: 0;
height: 48px;
background: #0A0A0A;
border-bottom: 1px solid rgba(255,255,255,0.1);
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 20px;
z-index: 9999;
font-family: -apple-system, BlinkMacSystemFont, 'SF Pro Display', 'Segoe UI', Roboto, sans-serif;
}
.qz-auth-bar .qz-logo {
font-size: 18px;
font-weight: 700;
color: #fff;
text-decoration: none;
letter-spacing: -0.5px;
}
.qz-auth-bar .qz-logo span {
color: #007AFF;
}
.qz-auth-bar .qz-nav {
display: flex;
gap: 8px;
align-items: center;
}
.qz-auth-bar .qz-btn {
padding: 8px 16px;
border-radius: 8px;
font-size: 14px;
font-weight: 500;
cursor: pointer;
transition: all 0.2s;
border: none;
text-decoration: none;
}
.qz-auth-bar .qz-btn-primary {
background: #007AFF;
color: white;
}
.qz-auth-bar .qz-btn-primary:hover {
background: #0056CC;
}
.qz-auth-bar .qz-btn-ghost {
background: transparent;
color: rgba(255,255,255,0.8);
}
.qz-auth-bar .qz-btn-ghost:hover {
background: rgba(255,255,255,0.1);
color: white;
}
.qz-auth-bar .qz-user {
display: flex;
align-items: center;
gap: 8px;
color: white;
font-size: 14px;
}
.qz-auth-bar .qz-avatar {
width: 32px;
height: 32px;
border-radius: 50%;
background: #007AFF;
display: flex;
align-items: center;
justify-content: center;
font-weight: 600;
font-size: 14px;
}
.qz-auth-bar .qz-dropdown {
position: relative;
}
.qz-auth-bar .qz-dropdown-menu {
position: absolute;
top: 40px;
right: 0;
background: #1C1C1E;
border: 1px solid rgba(255,255,255,0.1);
border-radius: 12px;
padding: 8px;
min-width: 200px;
display: none;
box-shadow: 0 8px 32px rgba(0,0,0,0.4);
}
.qz-auth-bar .qz-dropdown-menu.active {
display: block;
}
.qz-auth-bar .qz-dropdown-item {
padding: 10px 12px;
border-radius: 8px;
color: white;
text-decoration: none;
display: flex;
align-items: center;
gap: 10px;
font-size: 14px;
transition: background 0.2s;
}
.qz-auth-bar .qz-dropdown-item:hover {
background: rgba(255,255,255,0.1);
}
.qz-auth-bar .qz-dropdown-divider {
height: 1px;
background: rgba(255,255,255,0.1);
margin: 8px 0;
}
.qz-auth-bar .qz-balance {
background: rgba(0,122,255,0.15);
color: #007AFF;
padding: 4px 10px;
border-radius: 6px;
font-size: 13px;
font-weight: 600;
}
@media (max-width: 640px) {
.qz-auth-bar .qz-nav .qz-btn-ghost:not(.qz-user) {
display: none;
}
}
</style>
<div id="qz-auth-bar" class="qz-auth-bar">
<a href="https://quixzoom.com" class="qz-logo">qui<span>X</span>zoom</a>
<div class="qz-nav">
<div id="qz-auth-guest">
<a href="https://app.quixzoom.com/login" class="qz-btn qz-btn-ghost">Logga in</a>
<a href="https://app.quixzoom.com/register" class="qz-btn qz-btn-primary">Bli Zoomer</a>
</div>
<div id="qz-auth-user" style="display:none;">
<span class="qz-balance" id="qz-balance">$0.00</span>
<div class="qz-dropdown">
<button class="qz-btn qz-btn-ghost qz-user" onclick="qzToggleDropdown()">
<div class="qz-avatar" id="qz-avatar">E</div>
<span id="qz-user-name">Erik</span>
<svg width="12" height="12" viewBox="0 0 12 12" fill="none"><path d="M2.5 4.5L6 8L9.5 4.5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>
</button>
<div class="qz-dropdown-menu" id="qz-dropdown-menu">
<a href="https://app.quixzoom.com/dashboard" class="qz-dropdown-item">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="3" y="3" width="7" height="7" rx="1"/><rect x="14" y="3" width="7" height="7" rx="1"/><rect x="14" y="14" width="7" height="7" rx="1"/><rect x="3" y="14" width="7" height="7" rx="1"/></svg>
Dashboard
</a>
<a href="https://app.quixzoom.com/wallet" class="qz-dropdown-item">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21 12V7H5a2 2 0 0 1 0-4h14v4"/><path d="M3 5v14a2 2 0 0 0 2 2h16v-5"/><path d="M18 12a2 2 0 0 0 0 4h4v-4h-4z"/></svg>
Plånbok
</a>
<a href="https://app.quixzoom.com/missions" class="qz-dropdown-item">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 2L2 7l10 5 10-5-10-5z"/><path d="M2 17l10 5 10-5"/><path d="M2 12l10 5 10-5"/></svg>
Mina uppdrag
</a>
<div class="qz-dropdown-divider"></div>
<a href="https://app.quixzoom.com/settings" class="qz-dropdown-item">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="3"/><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06A1.65 1.65 0 0 0 4.67 15a1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.67 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06A1.65 1.65 0 0 0 9 4.67a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z"/></svg>
Inställningar
</a>
<a href="#" onclick="qzLogout(); return false;" class="qz-dropdown-item">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4"/><polyline points="16 17 21 12 16 7"/><line x1="21" y1="12" x2="9" y2="12"/></svg>
Logga ut
</a>
</div>
</div>
</div>
</div>
</div>
<script>
(function() {
const SSO_BASE = 'https://auth.quixzoom.com';
const APP_BASE = 'https://app.quixzoom.com';
// Check auth status
async function qzCheckAuth() {
try {
const res = await fetch(SSO_BASE + '/auth/check', {
credentials: 'include',
});
if (res.ok) {
const data = await res.json();
if (data.authenticated) {
document.getElementById('qz-auth-guest').style.display = 'none';
document.getElementById('qz-auth-user').style.display = 'flex';
document.getElementById('qz-user-name').textContent = data.user.name || data.user.email;
document.getElementById('qz-avatar').textContent = (data.user.name || data.user.email)[0].toUpperCase();
if (data.user.balance !== undefined) {
document.getElementById('qz-balance').textContent = '$' + data.user.balance.toFixed(2);
}
}
}
} catch (e) {
// Silent fail - show guest state
}
}
// Toggle dropdown
window.qzToggleDropdown = function() {
document.getElementById('qz-dropdown-menu').classList.toggle('active');
};
// Close dropdown on outside click
document.addEventListener('click', function(e) {
if (!e.target.closest('.qz-dropdown')) {
document.getElementById('qz-dropdown-menu').classList.remove('active');
}
});
// Logout
window.qzLogout = async function() {
try {
await fetch(SSO_BASE + '/auth/logout', {
method: 'POST',
credentials: 'include',
});
} catch (e) {}
document.cookie = 'qz_access_token=; expires=Thu, 01 Jan 1970 00:00:00 UTC; domain=.quixzoom.com; path=/;';
document.cookie = 'qz_refresh_token=; expires=Thu, 01 Jan 1970 00:00:00 UTC; domain=.quixzoom.com; path=/;';
window.location.reload();
};
// Init
qzCheckAuth();
})();
</script>
</body>
</html>