{"project":{"id":"W1ITHAv","userId":"mananjain.22.3f@gmail.com","username":null,"userPicture":null,"name":"MOVEIT","thumbnail":"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","visible":true,"contributors":"","githubRepo":null,"forkedFrom":null,"isTemplate":false,"tags":"","files":{"folder":"","files":[{"name":"index.html","content":"<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, viewport-fit=cover\">\n    <meta name=\"theme-color\" content=\"#0a0a0f\">\n    <meta name=\"apple-mobile-web-app-capable\" content=\"yes\">\n    <meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black-translucent\">\n    <meta name=\"description\" content=\"MOVEIT — India's #1 Vehicle Parking Conflict Resolver. Move your car, protect your privacy.\">\n    <title>MOVEIT — Move Your Car. Protect Your Privacy.</title>\n    <link rel=\"manifest\" href=\"/manifest.json\">\n    <link rel=\"icon\" href=\"/icons/icon.svg\" type=\"image/svg+xml\">\n    <link rel=\"apple-touch-icon\" href=\"/icons/icon.svg\">\n    <link rel=\"stylesheet\" href=\"/css/styles.css\">\n    <script src=\"https://unpkg.com/lucide@latest/dist/umd/lucide.js\"></script>\n    <script src=\"https://cdn.jsdelivr.net/npm/qrcode@1.5.3/build/qrcode.min.js\"></script>\n</head>\n<body>\n    <div id=\"app\">\n\n        <!-- ========== AUTH SCREEN ========== -->\n        <section id=\"screen-auth\" class=\"screen active\">\n            <div class=\"auth-container\">\n                <div class=\"auth-logo\">\n                    <div class=\"logo-icon-large\">\n                        <img src=\"/icons/icon.svg\" alt=\"MOVEIT car logo\" width=\"80\" height=\"80\" style=\"border-radius: 20px;\">\n                    </div>\n                    <h1 class=\"brand-title\">MOVE<span class=\"accent\">IT</span></h1>\n                    <p class=\"brand-tagline\">Move Your Car. Protect Your Privacy.</p>\n                    <p class=\"brand-sub\">India's #1 Vehicle Privacy Platform</p>\n                </div>\n\n                <!-- Login Form -->\n                <form id=\"login-form\" class=\"auth-form\">\n                    <div class=\"form-group\">\n                        <label for=\"login-email\">Email Address</label>\n                        <div class=\"input-wrap\">\n                            <i data-lucide=\"mail\"></i>\n                            <input type=\"email\" id=\"login-email\" placeholder=\"your@email.com\" required autocomplete=\"email\">\n                        </div>\n                    </div>\n                    <div class=\"form-group\">\n                        <label for=\"login-password\">Password</label>\n                        <div class=\"input-wrap\">\n                            <i data-lucide=\"lock\"></i>\n                            <input type=\"password\" id=\"login-password\" placeholder=\"Enter password\" required autocomplete=\"current-password\">\n                            <button type=\"button\" class=\"toggle-pw\" data-target=\"login-password\" aria-label=\"Toggle password visibility\"><i data-lucide=\"eye\"></i></button>\n                        </div>\n                    </div>\n                    <button type=\"submit\" class=\"btn btn-primary btn-full\">\n                        <i data-lucide=\"log-in\"></i> Sign In\n                    </button>\n                    <p class=\"auth-switch\">Don't have an account? <button type=\"button\" class=\"link-btn\" id=\"show-register\">Create Account</button></p>\n                </form>\n\n                <!-- Register Form -->\n                <form id=\"register-form\" class=\"auth-form hidden\">\n                    <div class=\"form-group\">\n                        <label for=\"reg-name\">Full Name</label>\n                        <div class=\"input-wrap\">\n                            <i data-lucide=\"user\"></i>\n                            <input type=\"text\" id=\"reg-name\" placeholder=\"Your full name\" required>\n                        </div>\n                    </div>\n                    <div class=\"form-group\">\n                        <label for=\"reg-email\">Email Address <span class=\"label-note\">(use your real email)</span></label>\n                        <div class=\"input-wrap\">\n                            <i data-lucide=\"mail\"></i>\n                            <input type=\"email\" id=\"reg-email\" placeholder=\"your@email.com\" required autocomplete=\"email\">\n                        </div>\n                        <p class=\"field-hint\">Used for account recovery & payment verification</p>\n                    </div>\n                    <div class=\"form-group\">\n                        <label for=\"reg-password\">Create App Password</label>\n                        <div class=\"input-wrap\">\n                            <i data-lucide=\"shield\"></i>\n                            <input type=\"password\" id=\"reg-password\" placeholder=\"Min 8 chars, 1 uppercase, 1 number\" required autocomplete=\"new-password\">\n                            <button type=\"button\" class=\"toggle-pw\" data-target=\"reg-password\" aria-label=\"Toggle password visibility\"><i data-lucide=\"eye\"></i></button>\n                        </div>\n                        <div id=\"pw-strength\" class=\"pw-strength\"></div>\n                    </div>\n                    <div class=\"form-group\">\n                        <label for=\"reg-confirm\">Confirm Password</label>\n                        <div class=\"input-wrap\">\n                            <i data-lucide=\"shield-check\"></i>\n                            <input type=\"password\" id=\"reg-confirm\" placeholder=\"Re-enter password\" required autocomplete=\"new-password\">\n                        </div>\n                        <p id=\"pw-match\" class=\"pw-match\"></p>\n                    </div>\n                    <button type=\"submit\" class=\"btn btn-primary btn-full\" id=\"register-btn\" disabled>\n                        <i data-lucide=\"user-plus\"></i> Create Account\n                    </button>\n                    <p class=\"auth-switch\">Already have an account? <button type=\"button\" class=\"link-btn\" id=\"show-login\">Sign In</button></p>\n                </form>\n            </div>\n        </section>\n\n        <!-- ========== HOME SCREEN ========== -->\n        <section id=\"screen-home\" class=\"screen\">\n            <div class=\"screen-content\">\n                <div class=\"home-hero\">\n                    <div class=\"hero-badge\">🇮🇳 India's #1 Privacy Platform</div>\n                    <h2 class=\"hero-title\">Move Your Car.<br><span class=\"accent\">Protect Your Privacy.</span></h2>\n                    <p class=\"hero-desc\">India's one and only vehicle privacy platform. 50+ cities, 1 Lakh+ vehicles protected, 5 Lakh+ conflicts resolved.</p>\n                </div>\n\n                <div id=\"premium-banner\" class=\"premium-banner hidden\">\n                    <div class=\"banner-glow\"></div>\n                    <i data-lucide=\"crown\"></i>\n                    <div class=\"banner-text\">\n                        <strong>Unlock Unlimited Power</strong>\n                        <span>Unlimited vehicles, calls, messages & AI features</span>\n                    </div>\n                    <button class=\"btn btn-sm btn-gold\" onclick=\"MOVEIT.navigate('premium')\">Upgrade ₹50/mo</button>\n                </div>\n\n                <div class=\"stats-row\">\n                    <div class=\"stat-card\">\n                        <span class=\"stat-num\">50+</span>\n                        <span class=\"stat-label\">Cities</span>\n                    </div>\n                    <div class=\"stat-card\">\n                        <span class=\"stat-num\">1L+</span>\n                        <span class=\"stat-label\">Vehicles</span>\n                    </div>\n                    <div class=\"stat-card\">\n                        <span class=\"stat-num\">5L+</span>\n                        <span class=\"stat-label\">Resolved</span>\n                    </div>\n                </div>\n\n                <h3 class=\"section-title\">Quick Actions</h3>\n                <div class=\"action-grid\">\n                    <button class=\"action-card\" onclick=\"MOVEIT.navigate('vehicles')\">\n                        <i data-lucide=\"car\"></i>\n                        <span>My Vehicles</span>\n                    </button>\n                    <button class=\"action-card\" onclick=\"MOVEIT.navigate('scan')\">\n                        <i data-lucide=\"scan\"></i>\n                        <span>Scan QR</span>\n                    </button>\n                    <button class=\"action-card\" onclick=\"MOVEIT.showContactOwner()\">\n                        <i data-lucide=\"phone\"></i>\n                        <span>Contact Owner</span>\n                    </button>\n                    <button class=\"action-card\" onclick=\"MOVEIT.navigate('premium')\">\n                        <i data-lucide=\"crown\"></i>\n                        <span>Premium</span>\n                    </button>\n                </div>\n\n                <h3 class=\"section-title\">How It Works</h3>\n                <div class=\"steps-list\">\n                    <div class=\"step-item\">\n                        <div class=\"step-num\">1</div>\n                        <div class=\"step-text\">\n                            <strong>Register Your Vehicle</strong>\n                            <p>Add your plate number & get a unique encrypted QR code</p>\n                        </div>\n                    </div>\n                    <div class=\"step-item\">\n                        <div class=\"step-num\">2</div>\n                        <div class=\"step-text\">\n                            <strong>Stick the QR</strong>\n                            <p>Place it on your windshield — no phone number exposed</p>\n                        </div>\n                    </div>\n                    <div class=\"step-item\">\n                        <div class=\"step-num\">3</div>\n                        <div class=\"step-text\">\n                            <strong>Someone Scans It</strong>\n                            <p>They can anonymously call or message you to move your car</p>\n                        </div>\n                    </div>\n                    <div class=\"step-item\">\n                        <div class=\"step-num\">4</div>\n                        <div class=\"step-text\">\n                            <strong>Resolve & Move</strong>\n                            <p>Quick anonymous communication — no privacy compromised</p>\n                        </div>\n                    </div>\n                </div>\n\n                <div class=\"india-pride-card\">\n                    <span>🇮🇳</span>\n                    <div>\n                        <strong>Made in India, for India</strong>\n                        <p>Every feature designed for Indian roads, Indian privacy, Indian drivers</p>\n                    </div>\n                </div>\n            </div>\n        </section>\n\n        <!-- ========== VEHICLES SCREEN ========== -->\n        <section id=\"screen-vehicles\" class=\"screen\">\n            <div class=\"screen-content\">\n                <div class=\"screen-header\">\n                    <h2><i data-lucide=\"car\"></i> My Vehicles</h2>\n                    <button class=\"btn btn-sm btn-primary\" id=\"add-vehicle-btn\" onclick=\"MOVEIT.showAddVehicle()\">\n                        <i data-lucide=\"plus\"></i> Add Vehicle\n                    </button>\n                </div>\n\n                <div id=\"vehicle-limit-notice\" class=\"limit-notice hidden\">\n                    <i data-lucide=\"alert-triangle\"></i>\n                    <div>\n                        <strong>Free Plan: 1 Vehicle Limit</strong>\n                        <p>Upgrade to Premium for unlimited vehicles</p>\n                    </div>\n                    <button class=\"btn btn-sm btn-gold\" onclick=\"MOVEIT.navigate('premium')\">Upgrade</button>\n                </div>\n\n                <div id=\"vehicles-list\" class=\"vehicles-list\">\n                    <!-- Vehicles rendered here -->\n                </div>\n\n                <div id=\"no-vehicles\" class=\"empty-state\">\n                    <i data-lucide=\"car\"></i>\n                    <p>No vehicles yet</p>\n                    <button class=\"btn btn-primary\" onclick=\"MOVEIT.showAddVehicle()\">Add Your First Vehicle</button>\n                </div>\n            </div>\n        </section>\n\n        <!-- ========== ADD VEHICLE MODAL ========== -->\n        <div id=\"modal-add-vehicle\" class=\"modal hidden\">\n            <div class=\"modal-backdrop\" onclick=\"MOVEIT.closeModal('modal-add-vehicle')\"></div>\n            <div class=\"modal-content\">\n                <div class=\"modal-header\">\n                    <h3><i data-lucide=\"plus-circle\"></i> Add Vehicle</h3>\n                    <button class=\"modal-close\" onclick=\"MOVEIT.closeModal('modal-add-vehicle')\"><i data-lucide=\"x\"></i></button>\n                </div>\n                <form id=\"add-vehicle-form\">\n                    <div class=\"form-group\">\n                        <label for=\"vehicle-plate\">Plate Number</label>\n                        <div class=\"input-wrap\">\n                            <i data-lucide=\"hash\"></i>\n                            <input type=\"text\" id=\"vehicle-plate\" placeholder=\"e.g. MH 02 AB 1234\" required maxlength=\"15\" style=\"text-transform:uppercase\">\n                        </div>\n                        <p class=\"field-hint\">Enter your vehicle registration number</p>\n                    </div>\n                    <button type=\"submit\" class=\"btn btn-primary btn-full\">\n                        <i data-lucide=\"plus\"></i> Register Vehicle\n                    </button>\n                </form>\n            </div>\n        </div>\n\n        <!-- ========== VEHICLE DETAIL / QR ========== -->\n        <div id=\"modal-vehicle-qr\" class=\"modal hidden\">\n            <div class=\"modal-backdrop\" onclick=\"MOVEIT.closeModal('modal-vehicle-qr')\"></div>\n            <div class=\"modal-content modal-qr\">\n                <div class=\"modal-header\">\n                    <h3><i data-lucide=\"qr-code\"></i> Vehicle QR Code</h3>\n                    <button class=\"modal-close\" onclick=\"MOVEIT.closeModal('modal-vehicle-qr')\"><i data-lucide=\"x\"></i></button>\n                </div>\n                <div class=\"qr-display\">\n                    <p class=\"qr-plate\" id=\"qr-plate-display\"></p>\n                    <canvas id=\"qr-canvas\"></canvas>\n                    <p class=\"qr-hint\">Anyone can scan this to contact you anonymously</p>\n                    <div class=\"qr-token-wrap\">\n                        <span class=\"label-small\">QR Token</span>\n                        <code id=\"qr-token-display\"></code>\n                    </div>\n                </div>\n                <div class=\"qr-actions\">\n                    <button class=\"btn btn-primary\" onclick=\"MOVEIT.downloadQR()\">\n                        <i data-lucide=\"download\"></i> Download QR\n                    </button>\n                    <button class=\"btn btn-secondary\" onclick=\"MOVEIT.copyQRLink()\">\n                        <i data-lucide=\"link\"></i> Copy Link\n                    </button>\n                </div>\n            </div>\n        </div>\n\n        <!-- ========== SCAN SCREEN ========== -->\n        <section id=\"screen-scan\" class=\"screen\">\n            <div class=\"screen-content\">\n                <div class=\"scan-area\">\n                    <h2><i data-lucide=\"scan\"></i> Scan QR Code</h2>\n                    <p>Scan a MOVEIT QR code to anonymously contact the vehicle owner</p>\n                    <div class=\"scan-frame\">\n                        <div class=\"scan-corner tl\"></div>\n                        <div class=\"scan-corner tr\"></div>\n                        <div class=\"scan-corner bl\"></div>\n                        <div class=\"scan-corner br\"></div>\n                        <div class=\"scan-line\"></div>\n                        <i data-lucide=\"camera\" class=\"scan-icon\"></i>\n                    </div>\n                    <p class=\"scan-note\">Position the QR code within the frame</p>\n                    <div class=\"manual-entry\">\n                        <p>Or enter QR token manually:</p>\n                        <div class=\"input-row\">\n                            <input type=\"text\" id=\"manual-token\" placeholder=\"Enter QR token\">\n                            <button class=\"btn btn-primary\" onclick=\"MOVEIT.lookupToken()\">Lookup</button>\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </section>\n\n        <!-- ========== CONTACT OWNER SCREEN ========== -->\n        <section id=\"screen-contact\" class=\"screen\">\n            <div class=\"screen-content\">\n                <div class=\"contact-card\">\n                    <div class=\"contact-avatar\">\n                        <i data-lucide=\"car\"></i>\n                    </div>\n                    <h2 id=\"contact-plate\">MH •••• ••••</h2>\n                    <p class=\"contact-sub\">Vehicle Owner</p>\n                    <p class=\"contact-privacy\">🔒 Your identity is completely anonymous</p>\n\n                    <div class=\"contact-actions\">\n                        <button class=\"btn btn-primary btn-lg\" onclick=\"MOVEIT.startCall()\">\n                            <i data-lucide=\"phone\"></i> Call Owner\n                        </button>\n                        <button class=\"btn btn-secondary btn-lg\" onclick=\"MOVEIT.sendMessage()\">\n                            <i data-lucide=\"message-circle\"></i> Send Message\n                        </button>\n                        <button class=\"btn btn-accent btn-lg\" onclick=\"MOVEIT.requestLocation()\">\n                            <i data-lucide=\"map-pin\"></i> Request Arrival\n                        </button>\n                    </div>\n\n                    <div class=\"contact-meta\">\n                        <span><i data-lucide=\"shield-check\"></i> Fully Anonymous</span>\n                        <span><i data-lucide=\"lock\"></i> Encrypted</span>\n                    </div>\n                </div>\n            </div>\n        </section>\n\n        <!-- ========== CALLING SCREEN ========== -->\n        <section id=\"screen-calling\" class=\"screen\">\n            <div class=\"calling-container\">\n                <div class=\"calling-avatar pulse-ring\">\n                    <i data-lucide=\"phone\"></i>\n                </div>\n                <h2 id=\"calling-status\">Calling...</h2>\n                <p id=\"calling-target\" class=\"calling-sub\">Anonymous Vehicle Owner</p>\n                <div class=\"calling-timer\" id=\"calling-timer\">00:00</div>\n                <div class=\"calling-actions\">\n                    <button class=\"btn btn-danger btn-circle\" onclick=\"MOVEIT.endCall()\">\n                        <i data-lucide=\"phone-off\"></i>\n                    </button>\n                </div>\n                <p class=\"calling-note\">🔒 This call is fully anonymous & encrypted</p>\n            </div>\n        </section>\n\n        <!-- ========== INCOMING CALL ========== -->\n        <div id=\"modal-incoming-call\" class=\"modal hidden\">\n            <div class=\"modal-backdrop\"></div>\n            <div class=\"modal-content incoming-call-modal\">\n                <div class=\"incoming-avatar pulse-ring\">\n                    <i data-lucide=\"phone-incoming\"></i>\n                </div>\n                <h2>Incoming Call</h2>\n                <p>Someone wants to reach you about your vehicle</p>\n                <p class=\"calling-sub\">Anonymous Requester</p>\n                <div class=\"incoming-actions\">\n                    <button class=\"btn btn-success btn-circle\" onclick=\"MOVEIT.acceptCall()\">\n                        <i data-lucide=\"phone\"></i>\n                    </button>\n                    <button class=\"btn btn-danger btn-circle\" onclick=\"MOVEIT.declineCall()\">\n                        <i data-lucide=\"phone-off\"></i>\n                    </button>\n                </div>\n            </div>\n        </div>\n\n        <!-- ========== MESSAGE SCREEN ========== -->\n        <section id=\"screen-message\" class=\"screen\">\n            <div class=\"screen-content\">\n                <div class=\"message-container\">\n                    <h2><i data-lucide=\"message-circle\"></i> Send Anonymous Message</h2>\n                    <p class=\"contact-sub\">To: <span id=\"msg-recipient\">Anonymous Vehicle Owner</span></p>\n\n                    <div class=\"msg-presets\">\n                        <button class=\"preset-btn\" onclick=\"MOVEIT.setMsgPreset('Could you please move your vehicle? It is blocking my way. Thank you! 🙏')\">\n                            🙏 Polite Request\n                        </button>\n                        <button class=\"preset-btn\" onclick=\"MOVEIT.setMsgPreset('Urgent: Your vehicle is blocking emergency access. Please move it immediately.')\">\n                            ⚠️ Urgent\n                        </button>\n                        <button class=\"preset-btn\" onclick=\"MOVEIT.setMsgPreset('🚨 EMERGENCY: Your vehicle is blocking an ambulance/emergency vehicle. Please move NOW.')\">\n                            🚨 Emergency\n                        </button>\n                    </div>\n\n                    <div class=\"form-group\">\n                        <label for=\"msg-text\">Your Message</label>\n                        <textarea id=\"msg-text\" rows=\"4\" placeholder=\"Type your message...\"></textarea>\n                    </div>\n\n                    <div class=\"msg-eta\">\n                        <label>Expected Arrival</label>\n                        <div class=\"eta-btns\">\n                            <button class=\"eta-btn active\" data-eta=\"2\">2 min</button>\n                            <button class=\"eta-btn\" data-eta=\"5\">5 min</button>\n                            <button class=\"eta-btn\" data-eta=\"10\">10 min</button>\n                            <button class=\"eta-btn\" data-eta=\"delayed\">Delayed</button>\n                        </div>\n                    </div>\n\n                    <button class=\"btn btn-primary btn-full\" onclick=\"MOVEIT.sendMsg()\">\n                        <i data-lucide=\"send\"></i> Send Message\n                    </button>\n                </div>\n            </div>\n        </section>\n\n        <!-- ========== LOCATION SHARING ========== -->\n        <div id=\"modal-location\" class=\"modal hidden\">\n            <div class=\"modal-backdrop\" onclick=\"MOVEIT.closeModal('modal-location')\"></div>\n            <div class=\"modal-content\">\n                <div class=\"location-header\">\n                    <h3>📍 Share Live Location?</h3>\n                    <p>Share your location for <strong>5 minutes only</strong> so the requester can see your arrival.</p>\n                    <div class=\"privacy-checklist\">\n                        <span>✔ Only the requester can view it</span>\n                        <span>✔ Your exact address is never displayed</span>\n                        <span>✔ Sharing auto-stops after 5 minutes</span>\n                    </div>\n                </div>\n                <div class=\"modal-actions\">\n                    <button class=\"btn btn-primary btn-full\" onclick=\"MOVEIT.startLocationShare()\">\n                        <i data-lucide=\"map-pin\"></i> Share for 5 Minutes\n                    </button>\n                    <button class=\"btn btn-secondary btn-full\" onclick=\"MOVEIT.closeModal('modal-location')\">Cancel</button>\n                </div>\n            </div>\n        </div>\n\n        <!-- ========== LIVE LOCATION BANNER ========== -->\n        <div id=\"location-banner\" class=\"location-banner hidden\">\n            <div class=\"loc-banner-top\">\n                <span class=\"loc-dot pulse\"></span>\n                <strong>🟢 Live Location Sharing Active</strong>\n            </div>\n            <div class=\"loc-banner-info\">\n                <span>Time Remaining: <strong id=\"loc-timer\">05:00</strong></span>\n            </div>\n            <div class=\"loc-banner-actions\">\n                <button class=\"btn btn-sm btn-danger\" onclick=\"MOVEIT.stopLocationShare()\">Stop Sharing</button>\n                <button class=\"btn btn-sm btn-secondary\" onclick=\"MOVEIT.extendLocationShare()\">Extend 5 Min</button>\n            </div>\n        </div>\n\n        <!-- ========== LOCATION TRACKER (Requester) ========== -->\n        <div id=\"tracker-card\" class=\"tracker-card hidden\">\n            <div class=\"tracker-header\">\n                <span class=\"tracker-pulse\"></span>\n                <h3>🚗 Owner is on the way</h3>\n            </div>\n            <div class=\"tracker-stats\">\n                <div class=\"tracker-stat\">\n                    <span class=\"tracker-label\">Estimated Arrival</span>\n                    <span class=\"tracker-value\" id=\"tracker-eta\">2 Minutes</span>\n                </div>\n                <div class=\"tracker-stat\">\n                    <span class=\"tracker-label\">Distance</span>\n                    <span class=\"tracker-value\" id=\"tracker-distance\">180 meters</span>\n                </div>\n                <div class=\"tracker-stat\">\n                    <span class=\"tracker-label\">Status</span>\n                    <span class=\"tracker-value\" id=\"tracker-status\">Moving toward vehicle</span>\n                </div>\n            </div>\n            <div class=\"tracker-progress\">\n                <div class=\"progress-bar\" id=\"tracker-progress-bar\" style=\"width:60%\"></div>\n            </div>\n            <p class=\"tracker-updated\">Last Updated: <span id=\"tracker-time\">Just now</span></p>\n        </div>\n\n        <!-- ========== PREMIUM SCREEN ========== -->\n        <section id=\"screen-premium\" class=\"screen\">\n            <div class=\"screen-content\">\n                <div class=\"premium-hero\">\n                    <div class=\"crown-icon\">👑</div>\n                    <h2>MOVEIT <span class=\"accent\">Premium</span></h2>\n                    <p>Unlock the full power of India's #1 vehicle privacy platform</p>\n                </div>\n\n                <div class=\"plan-cards\">\n                    <div class=\"plan-card\">\n                        <div class=\"plan-badge\">Popular</div>\n                        <h3>Monthly</h3>\n                        <div class=\"plan-price\">₹50<span>/month</span></div>\n                        <ul class=\"plan-features\">\n                            <li><i data-lucide=\"check\"></i> Unlimited Vehicles</li>\n                            <li><i data-lucide=\"check\"></i> Unlimited Calls & Messages</li>\n                            <li><i data-lucide=\"check\"></i> AI Plate Detection</li>\n                            <li><i data-lucide=\"check\"></i> Priority Routing</li>\n                            <li><i data-lucide=\"check\"></i> Premium Badge</li>\n                            <li><i data-lucide=\"check\"></i> Live Location Sharing</li>\n                        </ul>\n                        <button class=\"btn btn-primary btn-full\" onclick=\"MOVEIT.selectPlan('monthly')\">Select Monthly</button>\n                    </div>\n                    <div class=\"plan-card plan-featured\">\n                        <div class=\"plan-badge gold\">Best Value</div>\n                        <h3>Yearly</h3>\n                        <div class=\"plan-price\">₹499<span>/year</span></div>\n                        <div class=\"plan-save\">Save ₹101 (17% off)</div>\n                        <ul class=\"plan-features\">\n                            <li><i data-lucide=\"check\"></i> Everything in Monthly</li>\n                            <li><i data-lucide=\"check\"></i> Save 2 months free</li>\n                            <li><i data-lucide=\"check\"></i> Early access to features</li>\n                            <li><i data-lucide=\"check\"></i> Priority support</li>\n                        </ul>\n                        <button class=\"btn btn-gold btn-full\" onclick=\"MOVEIT.selectPlan('yearly')\">Select Yearly</button>\n                    </div>\n                </div>\n\n                <!-- UPI Payment Section -->\n                <div id=\"payment-section\" class=\"payment-section hidden\">\n                    <h3>💳 UPI Payment</h3>\n                    <p>Transfer the amount to the UPI number below, then submit your transaction ID.</p>\n\n                    <div class=\"upi-card\">\n                        <div class=\"upi-number-wrap\">\n                            <span class=\"upi-label\">UPI Number</span>\n                            <code class=\"upi-number\" id=\"upi-number\">9920114676</code>\n                            <button class=\"btn btn-xs btn-secondary\" onclick=\"MOVEIT.copyUPI()\">\n                                <i data-lucide=\"copy\"></i> Copy\n                            </button>\n                        </div>\n                        <div class=\"upi-amount\">\n                            <span>Amount</span>\n                            <strong id=\"upi-amount-display\">₹50</strong>\n                        </div>\n                    </div>\n\n                    <div class=\"upi-apps\">\n                        <p>Open UPI App to Pay:</p>\n                        <div class=\"upi-app-btns\">\n                            <a id=\"upi-gpay\" href=\"#\" class=\"upi-app-btn\" target=\"_blank\">\n                                <span>💳</span> Google Pay\n                            </a>\n                            <a id=\"upi-phonepe\" href=\"#\" class=\"upi-app-btn\" target=\"_blank\">\n                                <span>📱</span> PhonePe\n                            </a>\n                            <a id=\"upi-paytm\" href=\"#\" class=\"upi-app-btn\" target=\"_blank\">\n                                <span>💰</span> Paytm\n                            </a>\n                        </div>\n                    </div>\n\n                    <form id=\"payment-form\" class=\"payment-form\">\n                        <div class=\"form-group\">\n                            <label for=\"txid\">Transaction ID / UTR Number</label>\n                            <div class=\"input-wrap\">\n                                <i data-lucide=\"hash\"></i>\n                                <input type=\"text\" id=\"txid\" placeholder=\"Enter UPI transaction ID\" required>\n                            </div>\n                        </div>\n                        <button type=\"submit\" class=\"btn btn-primary btn-full\">\n                            <i data-lucide=\"check-circle\"></i> Submit Payment\n                        </button>\n                    </form>\n\n                    <div id=\"payment-status\" class=\"payment-status hidden\"></div>\n                </div>\n\n                <div class=\"support-card\">\n                    <h4>📞 Need Help?</h4>\n                    <div class=\"support-links\">\n                        <a href=\"tel:8291032232\" class=\"support-link\">\n                            <i data-lucide=\"phone\"></i> 8291032232\n                        </a>\n                        <a href=\"mailto:mananjain.22.3f@gmail.com\" class=\"support-link\">\n                            <i data-lucide=\"mail\"></i> mananjain.22.3f@gmail.com\n                        </a>\n                    </div>\n                </div>\n            </div>\n        </section>\n\n        <!-- ========== PROFILE SCREEN ========== -->\n        <section id=\"screen-profile\" class=\"screen\">\n            <div class=\"screen-content\">\n                <div class=\"profile-header\">\n                    <div class=\"profile-avatar\">\n                        <i data-lucide=\"user\"></i>\n                    </div>\n                    <h2 id=\"profile-name\">User</h2>\n                    <p id=\"profile-email\" class=\"profile-email\">user@email.com</p>\n                    <div id=\"profile-badge\" class=\"profile-badge free\">Free Plan</div>\n                </div>\n\n                <div class=\"profile-stats\">\n                    <div class=\"pstat\">\n                        <span class=\"pstat-num\" id=\"pstat-vehicles\">0</span>\n                        <span class=\"pstat-label\">Vehicles</span>\n                    </div>\n                    <div class=\"pstat\">\n                        <span class=\"pstat-num\" id=\"pstat-plan\">Free</span>\n                        <span class=\"pstat-label\">Plan</span>\n                    </div>\n                    <div class=\"pstat\">\n                        <span class=\"pstat-num\" id=\"pstat-payments\">0</span>\n                        <span class=\"pstat-label\">Payments</span>\n                    </div>\n                </div>\n\n                <div id=\"profile-upgrade-card\" class=\"upgrade-card\">\n                    <i data-lucide=\"crown\"></i>\n                    <div>\n                        <strong>Upgrade to Premium</strong>\n                        <p>Unlimited vehicles, calls, messages & more</p>\n                    </div>\n                    <button class=\"btn btn-sm btn-gold\" onclick=\"MOVEIT.navigate('premium')\">₹50/mo</button>\n                </div>\n\n                <div class=\"profile-menu\">\n                    <button class=\"menu-item\" onclick=\"MOVEIT.navigate('vehicles')\">\n                        <i data-lucide=\"car\"></i>\n                        <span>My Vehicles</span>\n                        <i data-lucide=\"chevron-right\"></i>\n                    </button>\n                    <button class=\"menu-item\" onclick=\"MOVEIT.navigate('premium')\">\n                        <i data-lucide=\"crown\"></i>\n                        <span>Premium</span>\n                        <i data-lucide=\"chevron-right\"></i>\n                    </button>\n                    <a href=\"tel:8291032232\" class=\"menu-item\">\n                        <i data-lucide=\"phone\"></i>\n                        <span>Call Support: 8291032232</span>\n                        <i data-lucide=\"chevron-right\"></i>\n                    </a>\n                    <a href=\"mailto:mananjain.22.3f@gmail.com\" class=\"menu-item\">\n                        <i data-lucide=\"mail\"></i>\n                        <span>Email: mananjain.22.3f@gmail.com</span>\n                        <i data-lucide=\"chevron-right\"></i>\n                    </a>\n                    <button class=\"menu-item\" onclick=\"MOVEIT.showAbout()\">\n                        <i data-lucide=\"info\"></i>\n                        <span>About MOVEIT</span>\n                        <i data-lucide=\"chevron-right\"></i>\n                    </button>\n                    <button class=\"menu-item menu-item-danger\" onclick=\"MOVEIT.logout()\">\n                        <i data-lucide=\"log-out\"></i>\n                        <span>Sign Out</span>\n                        <i data-lucide=\"chevron-right\"></i>\n                    </button>\n                </div>\n            </div>\n        </section>\n\n        <!-- ========== NOTIFICATIONS SCREEN ========== -->\n        <section id=\"screen-notifications\" class=\"screen\">\n            <div class=\"screen-content\">\n                <h2><i data-lucide=\"bell\"></i> Notifications</h2>\n                <div id=\"notifications-list\" class=\"notifications-list\"></div>\n                <div id=\"no-notifications\" class=\"empty-state\">\n                    <i data-lucide=\"bell-off\"></i>\n                    <p>No notifications yet</p>\n                </div>\n            </div>\n        </section>\n\n        <!-- ========== ABOUT MODAL ========== -->\n        <div id=\"modal-about\" class=\"modal hidden\">\n            <div class=\"modal-backdrop\" onclick=\"MOVEIT.closeModal('modal-about')\"></div>\n            <div class=\"modal-content\">\n                <div class=\"modal-header\">\n                    <h3>About MOVEIT</h3>\n                    <button class=\"modal-close\" onclick=\"MOVEIT.closeModal('modal-about')\"><i data-lucide=\"x\"></i></button>\n                </div>\n                <div class=\"about-content\">\n                    <div class=\"about-logo\">\n                        <img src=\"/icons/icon.svg\" alt=\"MOVEIT car logo\" width=\"56\" height=\"56\" style=\"border-radius: 14px;\">\n                        <h2>MOVE<span class=\"accent\">IT</span></h2>\n                    </div>\n                    <p><strong>Move Your Car. Protect Your Privacy.</strong></p>\n                    <p>India's #1 and only vehicle privacy platform. We solve parking conflicts through anonymous, encrypted communication — no phone numbers exposed, no privacy compromised.</p>\n                    <p class=\"about-version\">Version 1.0.0</p>\n                    <div class=\"about-links\">\n                        <a href=\"tel:8291032232\" class=\"btn btn-secondary btn-full\"><i data-lucide=\"phone\"></i> Support: 8291032232</a>\n                        <a href=\"mailto:mananjain.22.3f@gmail.com\" class=\"btn btn-secondary btn-full\"><i data-lucide=\"mail\"></i> mananjain.22.3f@gmail.com</a>\n                    </div>\n                </div>\n            </div>\n        </div>\n\n        <!-- ========== TOAST ========== -->\n        <div id=\"toast\" class=\"toast hidden\">\n            <span id=\"toast-msg\"></span>\n        </div>\n\n        <!-- ========== BOTTOM NAV ========== -->\n        <nav id=\"bottom-nav\" class=\"bottom-nav hidden\">\n            <button class=\"nav-item active\" data-screen=\"home\" onclick=\"MOVEIT.navigate('home')\">\n                <i data-lucide=\"home\"></i>\n                <span>Home</span>\n            </button>\n            <button class=\"nav-item\" data-screen=\"vehicles\" onclick=\"MOVEIT.navigate('vehicles')\">\n                <i data-lucide=\"car\"></i>\n                <span>Vehicles</span>\n            </button>\n            <button class=\"nav-item\" data-screen=\"scan\" onclick=\"MOVEIT.navigate('scan')\">\n                <i data-lucide=\"scan\"></i>\n                <span>Scan</span>\n            </button>\n            <button class=\"nav-item\" data-screen=\"notifications\" onclick=\"MOVEIT.navigate('notifications')\">\n                <i data-lucide=\"bell\"></i>\n                <span>Alerts</span>\n                <span id=\"notif-badge\" class=\"notif-badge hidden\">0</span>\n            </button>\n            <button class=\"nav-item\" data-screen=\"profile\" onclick=\"MOVEIT.navigate('profile')\">\n                <i data-lucide=\"user\"></i>\n                <span>Profile</span>\n            </button>\n        </nav>\n    </div>\n\n    <script src=\"https://unpkg.com/qrcodejs@1.0.0/qrcode.min.js\"></script>\n    <script src=\"/js/auth.js\"></script>\n    <script src=\"/js/vehicles.js\"></script>\n    <script src=\"/js/premium.js\"></script>\n    <script src=\"/js/qr.js\"></script>\n    <script src=\"/js/profile.js\"></script>\n    <script src=\"/js/app.js\"></script>\n</body>\n</html>\n"},{"name":"manifest.json","content":"{\n  \"name\": \"MOVEIT — Move Your Car. Protect Your Privacy.\",\n  \"short_name\": \"MOVEIT\",\n  \"description\": \"India's #1 Parking Privacy Platform. Smart QR, anonymous calls, AI-powered messaging.\",\n  \"start_url\": \"/\",\n  \"display\": \"standalone\",\n  \"background_color\": \"#0a0a0f\",\n  \"theme_color\": \"#0a0a0f\",\n  \"orientation\": \"portrait\",\n  \"icons\": [\n    {\n      \"src\": \"/icons/icon.svg\",\n      \"sizes\": \"any\",\n      \"type\": \"image/svg+xml\",\n      \"purpose\": \"any\"\n    }\n  ],\n  \"categories\": [\"utilities\", \"social\"],\n  \"lang\": \"en\",\n  \"dir\": \"ltr\"\n}\n"},{"name":"README.md","content":"# Blnq Project\n"},{"name":"sw.js","content":"/**\n * MOVEIT — Service Worker\n * Enables PWA install & offline support\n */\nconst CACHE_NAME = 'moveit-v1';\nconst PRECACHE = [\n  '/',\n  '/index.html',\n  '/css/styles.css',\n  '/js/app.js',\n  '/js/auth.js',\n  '/js/vehicles.js',\n  '/js/premium.js',\n  '/js/qr.js',\n  '/js/profile.js',\n  '/manifest.json',\n  '/icons/icon.svg'\n];\n\nself.addEventListener('install', (e) => {\n  e.waitUntil(\n    caches.open(CACHE_NAME)\n      .then(cache => cache.addAll(PRECACHE))\n      .then(() => self.skipWaiting())\n  );\n});\n\nself.addEventListener('activate', (e) => {\n  e.waitUntil(\n    caches.keys().then(keys =>\n      Promise.all(keys.filter(k => k !== CACHE_NAME).map(k => caches.delete(k)))\n    ).then(() => self.clients.claim())\n  );\n});\n\nself.addEventListener('fetch', (e) => {\n  if (e.request.method !== 'GET') return;\n  e.respondWith(\n    fetch(e.request).then(res => {\n      const clone = res.clone();\n      caches.open(CACHE_NAME).then(cache => cache.put(e.request, clone));\n      return res;\n    }).catch(() => caches.match(e.request))\n  );\n});\n"}],"folders":[{"folder":"css","files":[{"name":"styles.css","content":"/* ===========================\n   MOVEIT — Complete Styles\n   Dark theme, electric blue accent\n   =========================== */\n\n/* ---------- RESET & VARIABLES ---------- */\n*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }\n\n:root {\n    --bg: #0a0a0f;\n    --bg-surface: #12121a;\n    --bg-card: #1a1a25;\n    --bg-elevated: #222233;\n    --text: #f0f0f5;\n    --text-secondary: #8888aa;\n    --text-muted: #9494a8;\n    --accent: #2d7aff;\n    --accent-glow: rgba(45, 122, 255, 0.3);\n    --accent-soft: rgba(45, 122, 255, 0.15);\n    --gold: #f5a623;\n    --gold-glow: rgba(245, 166, 35, 0.3);\n    --success: #22c55e;\n    --danger: #ef4444;\n    --warning: #f59e0b;\n    --border: rgba(255, 255, 255, 0.08);\n    --radius: 16px;\n    --radius-sm: 10px;\n    --radius-xs: 6px;\n    --nav-height: 72px;\n    --safe-bottom: env(safe-area-inset-bottom, 0px);\n    font-family: 'Inter', system-ui, -apple-system, sans-serif;\n    color-scheme: dark;\n    background: var(--bg);\n    color: var(--text);\n    -webkit-font-smoothing: antialiased;\n}\n\nhtml, body {\n    height: 100%;\n    overflow: hidden;\n    background: var(--bg);\n    color: var(--text);\n}\n\n#app {\n    height: 100%;\n    width: 100%;\n    max-width: 480px;\n    margin: 0 auto;\n    position: relative;\n    overflow: hidden;\n}\n\n/* ---------- SCREENS ---------- */\n.screen {\n    display: none;\n    position: absolute;\n    inset: 0;\n    overflow-y: auto;\n    overflow-x: hidden;\n    -webkit-overflow-scrolling: touch;\n    background: var(--bg);\n}\n.screen.active { display: block; }\n.screen-content {\n    padding: 24px 20px;\n    padding-bottom: calc(var(--nav-height) + var(--safe-bottom) + 24px);\n    min-height: 100%;\n}\n\n/* ---------- SCROLLBAR ---------- */\n.screen::-webkit-scrollbar { width: 4px; }\n.screen::-webkit-scrollbar-track { background: transparent; }\n.screen::-webkit-scrollbar-thumb { background: var(--text-muted); border-radius: 4px; }\n\n/* ---------- TYPOGRAPHY ---------- */\nh1 { font-size: 2rem; font-weight: 800; letter-spacing: -0.02em; }\nh2 { font-size: 1.4rem; font-weight: 700; letter-spacing: -0.01em; }\nh3 { font-size: 1.1rem; font-weight: 600; }\n.accent { color: var(--accent); }\n.gold-text { color: var(--gold); }\n\n/* ---------- BUTTONS ---------- */\n.btn {\n    display: inline-flex;\n    align-items: center;\n    justify-content: center;\n    gap: 8px;\n    padding: 12px 24px;\n    border: none;\n    border-radius: var(--radius-sm);\n    font-size: 0.95rem;\n    font-weight: 600;\n    cursor: pointer;\n    transition: all 0.2s;\n    text-decoration: none;\n    white-space: nowrap;\n}\n.btn i { width: 18px; height: 18px; }\n.btn-primary { background: var(--accent); color: #fff; }\n.btn-primary:hover { background: #4090ff; box-shadow: 0 0 20px var(--accent-glow); }\n.btn-secondary { background: var(--bg-elevated); color: var(--text); border: 1px solid var(--border); }\n.btn-secondary:hover { background: var(--bg-card); }\n.btn-accent { background: rgba(45, 122, 255, 0.15); color: var(--accent); border: 1px solid rgba(45, 122, 255, 0.3); }\n.btn-accent:hover { background: rgba(45, 122, 255, 0.25); }\n.btn-gold { background: var(--gold); color: #000; }\n.btn-gold:hover { box-shadow: 0 0 20px var(--gold-glow); }\n.btn-danger { background: var(--danger); color: #fff; }\n.btn-danger:hover { background: #dc2626; }\n.btn-success { background: var(--success); color: #fff; }\n.btn-success:hover { background: #16a34a; }\n.btn-full { width: 100%; }\n.btn-sm { padding: 8px 16px; font-size: 0.82rem; }\n.btn-xs { padding: 4px 10px; font-size: 0.75rem; }\n.btn-circle { width: 64px; height: 64px; border-radius: 50%; padding: 0; }\n.btn-circle i { width: 28px; height: 28px; }\n.btn-lg { padding: 16px 28px; font-size: 1rem; }\n.btn:disabled { opacity: 0.4; pointer-events: none; }\n\n/* ---------- FORMS ---------- */\n.form-group { margin-bottom: 16px; }\n.form-group label {\n    display: block;\n    font-size: 0.85rem;\n    font-weight: 600;\n    color: var(--text-secondary);\n    margin-bottom: 6px;\n}\n.label-note { font-weight: 400; color: var(--text-muted); font-size: 0.8rem; }\n.input-wrap {\n    display: flex;\n    align-items: center;\n    gap: 10px;\n    background: var(--bg-surface);\n    border: 1px solid var(--border);\n    border-radius: var(--radius-sm);\n    padding: 0 14px;\n    transition: border-color 0.2s;\n}\n.input-wrap:focus-within { border-color: var(--accent); box-shadow: 0 0 0 3px var(--accent-soft); }\n.input-wrap i { width: 18px; height: 18px; color: var(--text-muted); flex-shrink: 0; }\n.input-wrap input,\n.input-wrap textarea {\n    flex: 1;\n    background: none;\n    border: none;\n    color: var(--text);\n    font-size: 0.95rem;\n    padding: 12px 0;\n    outline: none;\n    font-family: inherit;\n    width: 100%;\n}\n.input-wrap input::placeholder,\ntextarea::placeholder { color: var(--text-muted); }\ntextarea {\n    background: var(--bg-surface);\n    border: 1px solid var(--border);\n    border-radius: var(--radius-sm);\n    padding: 12px 14px;\n    color: var(--text);\n    font-size: 0.95rem;\n    resize: vertical;\n    outline: none;\n    font-family: inherit;\n    width: 100%;\n}\ntextarea:focus { border-color: var(--accent); box-shadow: 0 0 0 3px var(--accent-soft); }\n.toggle-pw {\n    background: none;\n    border: none;\n    color: var(--text-muted);\n    cursor: pointer;\n    padding: 4px;\n    display: flex;\n}\n.toggle-pw i { width: 18px; height: 18px; }\n.field-hint { font-size: 0.78rem; color: var(--text-muted); margin-top: 4px; }\n\n/* ---------- PASSWORD STRENGTH ---------- */\n.pw-strength { display: flex; gap: 4px; margin-top: 8px; height: 4px; }\n.pw-strength .bar { flex: 1; border-radius: 2px; background: var(--bg-elevated); transition: background 0.3s; }\n.pw-strength .bar.active.weak { background: var(--danger); }\n.pw-strength .bar.active.medium { background: var(--warning); }\n.pw-strength .bar.active.strong { background: var(--success); }\n.pw-match { font-size: 0.82rem; margin-top: 4px; }\n.pw-match.match { color: var(--success); }\n.pw-match.no-match { color: var(--danger); }\n\n/* ---------- AUTH ---------- */\n.auth-container {\n    min-height: 100%;\n    display: flex;\n    flex-direction: column;\n    justify-content: center;\n    padding: 40px 24px;\n}\n.auth-logo { text-align: center; margin-bottom: 40px; }\n.logo-icon-large {\n    width: 80px; height: 80px;\n    background: linear-gradient(135deg, var(--accent), #6366f1);\n    border-radius: 24px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    margin: 0 auto 16px;\n}\n.logo-icon-large i { width: 40px; height: 40px; color: #fff; }\n.brand-title { font-size: 2.5rem; font-weight: 900; letter-spacing: -0.03em; }\n.brand-tagline { color: var(--text-secondary); margin-top: 4px; font-size: 0.9rem; }\n.brand-sub { color: var(--text-muted); font-size: 0.8rem; margin-top: 2px; }\n.auth-switch { text-align: center; margin-top: 16px; color: var(--text-secondary); font-size: 0.85rem; }\n.link-btn {\n    background: none;\n    border: none;\n    color: var(--accent);\n    font-weight: 600;\n    cursor: pointer;\n    font-size: inherit;\n    text-decoration: underline;\n}\n\n/* ---------- HOME ---------- */\n.home-hero { margin-bottom: 28px; }\n.hero-badge {\n    display: inline-block;\n    background: var(--accent-soft);\n    color: var(--accent);\n    padding: 6px 14px;\n    border-radius: 20px;\n    font-size: 0.78rem;\n    font-weight: 600;\n    margin-bottom: 16px;\n}\n.hero-title { font-size: 1.8rem; line-height: 1.2; margin-bottom: 10px; }\n.hero-desc { color: var(--text-secondary); font-size: 0.9rem; line-height: 1.5; }\n\n/* Premium Banner */\n.premium-banner {\n    position: relative;\n    background: linear-gradient(135deg, rgba(245, 166, 35, 0.12), rgba(245, 166, 35, 0.04));\n    border: 1px solid rgba(245, 166, 35, 0.25);\n    border-radius: var(--radius);\n    padding: 16px;\n    display: flex;\n    align-items: center;\n    gap: 12px;\n    margin-bottom: 24px;\n    overflow: hidden;\n}\n.premium-banner i { width: 28px; height: 28px; color: var(--gold); flex-shrink: 0; }\n.banner-text { flex: 1; }\n.banner-text strong { color: var(--gold); display: block; font-size: 0.9rem; }\n.banner-text span { color: var(--text-secondary); font-size: 0.78rem; }\n\n/* Stats */\n.stats-row { display: flex; gap: 12px; margin-bottom: 28px; }\n.stat-card {\n    flex: 1;\n    background: var(--bg-surface);\n    border: 1px solid var(--border);\n    border-radius: var(--radius-sm);\n    padding: 16px 12px;\n    text-align: center;\n}\n.stat-num { display: block; font-size: 1.3rem; font-weight: 800; color: var(--accent); }\n.stat-label { display: block; font-size: 0.75rem; color: var(--text-muted); margin-top: 2px; }\n\n/* Section Title */\n.section-title { font-size: 1rem; font-weight: 700; margin-bottom: 14px; color: var(--text-secondary); }\n\n/* Action Grid */\n.action-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin-bottom: 28px; }\n.action-card {\n    background: var(--bg-surface);\n    border: 1px solid var(--border);\n    border-radius: var(--radius);\n    padding: 20px 16px;\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    gap: 10px;\n    cursor: pointer;\n    transition: all 0.2s;\n    color: var(--text);\n    font-size: 0.85rem;\n    font-weight: 600;\n    font-family: inherit;\n    text-align: center;\n}\n.action-card i { width: 28px; height: 28px; color: var(--accent); }\n.action-card:hover { border-color: var(--accent); background: var(--accent-soft); }\n\n/* Steps */\n.steps-list { margin-bottom: 28px; }\n.step-item {\n    display: flex;\n    gap: 14px;\n    align-items: flex-start;\n    margin-bottom: 16px;\n}\n.step-num {\n    width: 32px; height: 32px;\n    background: var(--accent);\n    color: #fff;\n    border-radius: 50%;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    font-weight: 700;\n    font-size: 0.85rem;\n    flex-shrink: 0;\n}\n.step-text strong { display: block; font-size: 0.9rem; margin-bottom: 2px; }\n.step-text p { font-size: 0.8rem; color: var(--text-secondary); }\n\n/* India Pride Card */\n.india-pride-card {\n    display: flex;\n    gap: 14px;\n    align-items: center;\n    background: var(--bg-surface);\n    border: 1px solid var(--border);\n    border-radius: var(--radius);\n    padding: 16px;\n}\n.india-pride-card span:first-child { font-size: 2rem; }\n.india-pride-card strong { display: block; font-size: 0.9rem; }\n.india-pride-card p { font-size: 0.8rem; color: var(--text-secondary); margin-top: 2px; }\n\n/* ---------- VEHICLES ---------- */\n.screen-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 20px; }\n.screen-header h2 { display: flex; align-items: center; gap: 8px; }\n.screen-header h2 i { width: 22px; height: 22px; color: var(--accent); }\n\n.limit-notice {\n    display: flex;\n    align-items: center;\n    gap: 10px;\n    background: rgba(245, 166, 35, 0.1);\n    border: 1px solid rgba(245, 166, 35, 0.25);\n    border-radius: var(--radius-sm);\n    padding: 12px 14px;\n    margin-bottom: 16px;\n}\n.limit-notice i { width: 20px; height: 20px; color: var(--warning); flex-shrink: 0; }\n.limit-notice div { flex: 1; }\n.limit-notice strong { font-size: 0.85rem; color: var(--warning); display: block; }\n.limit-notice p { font-size: 0.78rem; color: var(--text-secondary); }\n\n.vehicles-list { display: flex; flex-direction: column; gap: 12px; }\n.vehicle-card {\n    background: var(--bg-surface);\n    border: 1px solid var(--border);\n    border-radius: var(--radius);\n    padding: 16px;\n    display: flex;\n    align-items: center;\n    gap: 14px;\n}\n.vehicle-icon {\n    width: 48px; height: 48px;\n    background: var(--accent-soft);\n    border-radius: var(--radius-sm);\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    flex-shrink: 0;\n}\n.vehicle-icon i { width: 24px; height: 24px; color: var(--accent); }\n.vehicle-info { flex: 1; }\n.vehicle-plate { font-weight: 700; font-size: 1rem; letter-spacing: 0.05em; }\n.vehicle-token { font-size: 0.75rem; color: var(--text-muted); margin-top: 2px; font-family: monospace; }\n.vehicle-actions { display: flex; gap: 8px; }\n.vehicle-actions button {\n    width: 36px; height: 36px;\n    border-radius: 50%;\n    border: none;\n    cursor: pointer;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    transition: all 0.2s;\n}\n.vehicle-actions button i { width: 16px; height: 16px; }\n.btn-qr { background: var(--accent-soft); color: var(--accent); }\n.btn-qr:hover { background: var(--accent); color: #fff; }\n.btn-delete { background: rgba(239, 68, 68, 0.1); color: var(--danger); }\n.btn-delete:hover { background: var(--danger); color: #fff; }\n\n.empty-state {\n    text-align: center;\n    padding: 60px 20px;\n    color: var(--text-muted);\n}\n.empty-state i { width: 48px; height: 48px; margin-bottom: 12px; opacity: 0.5; }\n.empty-state p { margin-bottom: 16px; font-size: 0.95rem; }\n\n/* ---------- MODALS ---------- */\n.modal {\n    position: fixed;\n    inset: 0;\n    z-index: 1000;\n    display: flex;\n    align-items: flex-end;\n    justify-content: center;\n}\n.modal.hidden { display: none; }\n.modal-backdrop {\n    position: absolute;\n    inset: 0;\n    background: rgba(0, 0, 0, 0.6);\n    backdrop-filter: blur(4px);\n}\n.modal-content {\n    position: relative;\n    z-index: 1;\n    background: var(--bg-card);\n    border-radius: var(--radius) var(--radius) 0 0;\n    width: 100%;\n    max-width: 480px;\n    max-height: 85vh;\n    overflow-y: auto;\n    padding: 24px 20px;\n    padding-bottom: calc(24px + var(--safe-bottom));\n}\n.modal-header {\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    margin-bottom: 20px;\n}\n.modal-header h3 { display: flex; align-items: center; gap: 8px; }\n.modal-header h3 i { width: 20px; height: 20px; color: var(--accent); }\n.modal-close {\n    background: var(--bg-elevated);\n    border: none;\n    color: var(--text-secondary);\n    width: 32px; height: 32px;\n    border-radius: 50%;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    cursor: pointer;\n}\n.modal-close i { width: 18px; height: 18px; }\n\n/* QR Modal */\n.modal-qr { text-align: center; }\n.qr-display { margin: 16px 0; }\n.qr-plate { font-size: 1.3rem; font-weight: 700; letter-spacing: 0.08em; margin-bottom: 16px; }\n.qr-display canvas { border-radius: var(--radius-sm); margin-bottom: 12px; }\n.qr-hint { font-size: 0.8rem; color: var(--text-muted); margin-bottom: 12px; }\n.qr-token-wrap { display: flex; flex-direction: column; gap: 4px; align-items: center; }\n.qr-token-wrap .label-small { font-size: 0.75rem; color: var(--text-muted); text-transform: uppercase; letter-spacing: 0.1em; }\n.qr-token-wrap code { font-size: 0.85rem; background: var(--bg-surface); padding: 6px 12px; border-radius: var(--radius-xs); color: var(--accent); word-break: break-all; }\n.qr-actions { display: flex; gap: 10px; margin-top: 16px; }\n.qr-actions .btn { flex: 1; }\n\n/* ---------- SCAN ---------- */\n.scan-area { text-align: center; padding-top: 20px; }\n.scan-area h2 { display: flex; align-items: center; justify-content: center; gap: 8px; margin-bottom: 8px; }\n.scan-area h2 i { width: 24px; height: 24px; color: var(--accent); }\n.scan-area > p { color: var(--text-secondary); font-size: 0.9rem; margin-bottom: 24px; }\n.scan-frame {\n    width: 240px; height: 240px;\n    margin: 0 auto 20px;\n    position: relative;\n    background: var(--bg-surface);\n    border-radius: var(--radius);\n    overflow: hidden;\n}\n.scan-corner {\n    position: absolute;\n    width: 30px; height: 30px;\n    border-color: var(--accent);\n    border-style: solid;\n}\n.scan-corner.tl { top: 0; left: 0; border-width: 3px 0 0 3px; border-radius: 8px 0 0 0; }\n.scan-corner.tr { top: 0; right: 0; border-width: 3px 3px 0 0; border-radius: 0 8px 0 0; }\n.scan-corner.bl { bottom: 0; left: 0; border-width: 0 0 3px 3px; border-radius: 0 0 0 8px; }\n.scan-corner.br { bottom: 0; right: 0; border-width: 0 3px 3px 0; border-radius: 0 0 8px 0; }\n.scan-line {\n    position: absolute;\n    top: 0; left: 10%; right: 10%;\n    height: 2px;\n    background: linear-gradient(90deg, transparent, var(--accent), transparent);\n    animation: scanLine 2s ease-in-out infinite;\n}\n@keyframes scanLine { 0%,100%{ top: 10% } 50%{ top: 90% } }\n.scan-icon { position: absolute; top: 50%; left: 50%; transform: translate(-50%,-50%); width: 48px; height: 48px; color: var(--text-muted); opacity: 0.3; }\n.scan-note { font-size: 0.8rem; color: var(--text-muted); margin-bottom: 24px; }\n.manual-entry { max-width: 320px; margin: 0 auto; }\n.manual-entry p { font-size: 0.85rem; color: var(--text-secondary); margin-bottom: 10px; }\n.input-row { display: flex; gap: 8px; }\n.input-row input {\n    flex: 1;\n    background: var(--bg-surface);\n    border: 1px solid var(--border);\n    border-radius: var(--radius-sm);\n    color: var(--text);\n    padding: 10px 14px;\n    font-size: 0.9rem;\n    outline: none;\n    font-family: inherit;\n}\n.input-row input:focus { border-color: var(--accent); }\n\n/* ---------- CONTACT OWNER ---------- */\n.contact-card { text-align: center; padding-top: 20px; }\n.contact-avatar {\n    width: 80px; height: 80px;\n    background: var(--accent-soft);\n    border-radius: 50%;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    margin: 0 auto 16px;\n}\n.contact-avatar i { width: 36px; height: 36px; color: var(--accent); }\n.contact-sub { color: var(--text-secondary); font-size: 0.9rem; margin-top: 4px; }\n.contact-privacy { color: var(--text-muted); font-size: 0.8rem; margin-top: 8px; margin-bottom: 28px; }\n.contact-actions { display: flex; flex-direction: column; gap: 12px; margin-bottom: 24px; }\n.contact-meta { display: flex; justify-content: center; gap: 16px; }\n.contact-meta span { display: flex; align-items: center; gap: 4px; font-size: 0.78rem; color: var(--text-muted); }\n.contact-meta i { width: 14px; height: 14px; }\n\n/* ---------- CALLING ---------- */\n.calling-container {\n    height: 100%;\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    justify-content: center;\n    padding: 40px 20px;\n    text-align: center;\n}\n.calling-avatar {\n    width: 100px; height: 100px;\n    background: var(--accent);\n    border-radius: 50%;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    margin-bottom: 24px;\n}\n.calling-avatar i { width: 40px; height: 40px; color: #fff; }\n.pulse-ring {\n    position: relative;\n}\n.pulse-ring::before {\n    content: '';\n    position: absolute;\n    inset: -8px;\n    border: 2px solid var(--accent);\n    border-radius: 50%;\n    animation: pulse 1.5s ease-out infinite;\n}\n@keyframes pulse {\n    0% { transform: scale(1); opacity: 0.6; }\n    100% { transform: scale(1.4); opacity: 0; }\n}\n.calling-sub { color: var(--text-secondary); font-size: 0.9rem; margin-top: 4px; }\n.calling-timer { font-size: 2rem; font-weight: 700; color: var(--text); margin: 16px 0 24px; font-variant-numeric: tabular-nums; }\n.calling-actions { margin-bottom: 20px; }\n.calling-note { font-size: 0.78rem; color: var(--text-muted); }\n\n/* Incoming Call */\n.incoming-call-modal { text-align: center; padding: 40px 20px !important; }\n.incoming-avatar {\n    width: 80px; height: 80px;\n    background: var(--success);\n    border-radius: 50%;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    margin: 0 auto 20px;\n}\n.incoming-avatar i { width: 36px; height: 36px; color: #fff; }\n.incoming-actions { display: flex; gap: 24px; justify-content: center; margin-top: 24px; }\n\n/* ---------- MESSAGES ---------- */\n.message-container { padding-top: 10px; }\n.message-container h2 { display: flex; align-items: center; gap: 8px; margin-bottom: 4px; }\n.message-container h2 i { width: 22px; height: 22px; color: var(--accent); }\n.msg-presets { display: flex; flex-wrap: wrap; gap: 8px; margin: 16px 0; }\n.preset-btn {\n    background: var(--bg-surface);\n    border: 1px solid var(--border);\n    border-radius: 20px;\n    padding: 8px 14px;\n    color: var(--text-secondary);\n    font-size: 0.82rem;\n    cursor: pointer;\n    transition: all 0.2s;\n    font-family: inherit;\n}\n.preset-btn:hover { border-color: var(--accent); color: var(--accent); }\n.msg-eta { margin-bottom: 16px; }\n.msg-eta label { font-size: 0.85rem; font-weight: 600; color: var(--text-secondary); display: block; margin-bottom: 8px; }\n.eta-btns { display: flex; gap: 8px; flex-wrap: wrap; }\n.eta-btn {\n    background: var(--bg-surface);\n    border: 1px solid var(--border);\n    border-radius: var(--radius-xs);\n    padding: 8px 16px;\n    color: var(--text-secondary);\n    font-size: 0.85rem;\n    cursor: pointer;\n    transition: all 0.2s;\n    font-family: inherit;\n}\n.eta-btn.active, .eta-btn:hover { border-color: var(--accent); color: var(--accent); background: var(--accent-soft); }\n\n/* ---------- LOCATION ---------- */\n.location-header h3 { font-size: 1.2rem; margin-bottom: 8px; }\n.location-header > p { color: var(--text-secondary); font-size: 0.9rem; margin-bottom: 16px; }\n.privacy-checklist { display: flex; flex-direction: column; gap: 8px; margin-bottom: 20px; }\n.privacy-checklist span { font-size: 0.85rem; color: var(--text-secondary); }\n.modal-actions { display: flex; flex-direction: column; gap: 10px; }\n\n.location-banner {\n    position: fixed;\n    top: 0;\n    left: 0;\n    right: 0;\n    max-width: 480px;\n    margin: 0 auto;\n    background: var(--bg-card);\n    border-bottom: 1px solid rgba(34, 197, 94, 0.3);\n    padding: 14px 20px;\n    padding-top: calc(14px + env(safe-area-inset-top, 0px));\n    z-index: 900;\n}\n.loc-banner-top { display: flex; align-items: center; gap: 8px; margin-bottom: 6px; }\n.loc-dot {\n    width: 8px; height: 8px;\n    background: var(--success);\n    border-radius: 50%;\n}\n.loc-dot.pulse { animation: locPulse 1s infinite; }\n@keyframes locPulse { 0%,100%{ opacity:1 } 50%{ opacity:0.3 } }\n.loc-banner-info { font-size: 0.85rem; color: var(--text-secondary); margin-bottom: 10px; }\n.loc-banner-actions { display: flex; gap: 8px; }\n\n/* Tracker Card */\n.tracker-card {\n    position: fixed;\n    bottom: calc(var(--nav-height) + 10px);\n    left: 20px;\n    right: 20px;\n    max-width: 440px;\n    margin: 0 auto;\n    background: var(--bg-card);\n    border: 1px solid rgba(45, 122, 255, 0.3);\n    border-radius: var(--radius);\n    padding: 16px;\n    z-index: 800;\n    backdrop-filter: blur(12px);\n}\n.tracker-header { display: flex; align-items: center; gap: 10px; margin-bottom: 14px; }\n.tracker-pulse {\n    width: 10px; height: 10px;\n    background: var(--accent);\n    border-radius: 50%;\n    animation: locPulse 1s infinite;\n}\n.tracker-header h3 { font-size: 0.95rem; }\n.tracker-stats { display: flex; gap: 12px; margin-bottom: 12px; }\n.tracker-stat { flex: 1; }\n.tracker-label { display: block; font-size: 0.7rem; color: var(--text-muted); text-transform: uppercase; letter-spacing: 0.05em; }\n.tracker-value { display: block; font-size: 0.9rem; font-weight: 600; margin-top: 2px; }\n.tracker-progress {\n    height: 4px;\n    background: var(--bg-elevated);\n    border-radius: 2px;\n    overflow: hidden;\n    margin-bottom: 8px;\n}\n.progress-bar {\n    height: 100%;\n    background: linear-gradient(90deg, var(--accent), #6366f1);\n    border-radius: 2px;\n    transition: width 1s ease;\n}\n.tracker-updated { font-size: 0.75rem; color: var(--text-muted); }\n\n/* ---------- PREMIUM ---------- */\n.premium-hero { text-align: center; margin-bottom: 28px; }\n.crown-icon { font-size: 3rem; margin-bottom: 12px; }\n.premium-hero h2 { font-size: 1.6rem; margin-bottom: 6px; }\n.premium-hero p { color: var(--text-secondary); font-size: 0.9rem; }\n\n.plan-cards { display: flex; flex-direction: column; gap: 14px; margin-bottom: 24px; }\n.plan-card {\n    background: var(--bg-surface);\n    border: 1px solid var(--border);\n    border-radius: var(--radius);\n    padding: 20px;\n    position: relative;\n}\n.plan-featured { border-color: var(--gold); }\n.plan-badge {\n    display: inline-block;\n    background: var(--accent);\n    color: #fff;\n    font-size: 0.7rem;\n    font-weight: 700;\n    padding: 4px 10px;\n    border-radius: 12px;\n    margin-bottom: 10px;\n    text-transform: uppercase;\n}\n.plan-badge.gold { background: var(--gold); color: #000; }\n.plan-card h3 { margin-bottom: 8px; }\n.plan-price { font-size: 2rem; font-weight: 800; }\n.plan-price span { font-size: 0.9rem; font-weight: 400; color: var(--text-secondary); }\n.plan-save { color: var(--success); font-size: 0.82rem; font-weight: 600; margin-top: 4px; margin-bottom: 8px; }\n.plan-features { list-style: none; margin: 12px 0 16px; }\n.plan-features li {\n    display: flex;\n    align-items: center;\n    gap: 8px;\n    padding: 6px 0;\n    font-size: 0.88rem;\n    color: var(--text-secondary);\n}\n.plan-features i { width: 16px; height: 16px; color: var(--success); flex-shrink: 0; }\n\n/* Payment */\n.payment-section { margin-top: 24px; }\n.payment-section h3 { margin-bottom: 8px; }\n.payment-section > p { color: var(--text-secondary); font-size: 0.88rem; margin-bottom: 16px; }\n.upi-card {\n    background: var(--bg-surface);\n    border: 1px solid var(--border);\n    border-radius: var(--radius);\n    padding: 16px;\n    margin-bottom: 16px;\n}\n.upi-number-wrap { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-bottom: 12px; }\n.upi-label { font-size: 0.78rem; color: var(--text-muted); text-transform: uppercase; letter-spacing: 0.1em; width: 100%; }\n.upi-number { font-size: 1.3rem; font-weight: 700; color: var(--accent); letter-spacing: 0.05em; }\n.upi-amount { display: flex; justify-content: space-between; align-items: center; padding-top: 12px; border-top: 1px solid var(--border); }\n.upi-amount span { color: var(--text-secondary); font-size: 0.9rem; }\n.upi-amount strong { font-size: 1.3rem; color: var(--gold); }\n\n.upi-apps { margin-bottom: 16px; }\n.upi-apps > p { font-size: 0.85rem; color: var(--text-secondary); margin-bottom: 10px; }\n.upi-app-btns { display: flex; gap: 8px; }\n.upi-app-btn {\n    flex: 1;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    gap: 6px;\n    padding: 12px 8px;\n    background: var(--bg-surface);\n    border: 1px solid var(--border);\n    border-radius: var(--radius-sm);\n    color: var(--text);\n    font-size: 0.8rem;\n    font-weight: 600;\n    text-decoration: none;\n    transition: all 0.2s;\n}\n.upi-app-btn:hover { border-color: var(--accent); background: var(--accent-soft); }\n\n.payment-form { margin-top: 16px; }\n.payment-status {\n    margin-top: 12px;\n    padding: 12px;\n    border-radius: var(--radius-sm);\n    font-size: 0.88rem;\n    text-align: center;\n}\n.payment-status.pending { background: rgba(245, 166, 35, 0.1); border: 1px solid rgba(245, 166, 35, 0.3); color: var(--gold); }\n.payment-status.success { background: rgba(34, 197, 94, 0.1); border: 1px solid rgba(34, 197, 94, 0.3); color: var(--success); }\n\n.support-card {\n    background: var(--bg-surface);\n    border: 1px solid var(--border);\n    border-radius: var(--radius);\n    padding: 16px;\n    margin-top: 24px;\n}\n.support-card h4 { margin-bottom: 10px; }\n.support-links { display: flex; flex-direction: column; gap: 8px; }\n.support-link {\n    display: flex;\n    align-items: center;\n    gap: 8px;\n    color: var(--accent);\n    text-decoration: none;\n    font-size: 0.9rem;\n    padding: 8px 12px;\n    background: var(--bg-elevated);\n    border-radius: var(--radius-xs);\n}\n.support-link i { width: 16px; height: 16px; }\n\n/* ---------- PROFILE ---------- */\n.profile-header { text-align: center; padding-bottom: 20px; }\n.profile-avatar {\n    width: 72px; height: 72px;\n    background: var(--accent-soft);\n    border-radius: 50%;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    margin: 0 auto 12px;\n}\n.profile-avatar i { width: 32px; height: 32px; color: var(--accent); }\n.profile-email { color: var(--text-secondary); font-size: 0.88rem; margin-top: 4px; }\n.profile-badge {\n    display: inline-block;\n    padding: 4px 14px;\n    border-radius: 14px;\n    font-size: 0.78rem;\n    font-weight: 600;\n    margin-top: 10px;\n}\n.profile-badge.free { background: var(--bg-elevated); color: var(--text-secondary); }\n.profile-badge.premium { background: rgba(245, 166, 35, 0.15); color: var(--gold); }\n\n.profile-stats {\n    display: flex;\n    gap: 12px;\n    margin-bottom: 20px;\n}\n.pstat {\n    flex: 1;\n    background: var(--bg-surface);\n    border: 1px solid var(--border);\n    border-radius: var(--radius-sm);\n    padding: 14px 10px;\n    text-align: center;\n}\n.pstat-num { display: block; font-size: 1.1rem; font-weight: 700; color: var(--accent); }\n.pstat-label { display: block; font-size: 0.72rem; color: var(--text-muted); margin-top: 2px; text-transform: uppercase; letter-spacing: 0.05em; }\n\n.upgrade-card {\n    display: flex;\n    align-items: center;\n    gap: 12px;\n    background: linear-gradient(135deg, rgba(245, 166, 35, 0.1), rgba(245, 166, 35, 0.04));\n    border: 1px solid rgba(245, 166, 35, 0.25);\n    border-radius: var(--radius);\n    padding: 14px;\n    margin-bottom: 20px;\n}\n.upgrade-card > i { width: 28px; height: 28px; color: var(--gold); flex-shrink: 0; }\n.upgrade-card div { flex: 1; }\n.upgrade-card strong { font-size: 0.9rem; display: block; }\n.upgrade-card p { font-size: 0.78rem; color: var(--text-secondary); }\n\n.profile-menu { display: flex; flex-direction: column; gap: 4px; }\n.menu-item {\n    display: flex;\n    align-items: center;\n    gap: 12px;\n    padding: 14px 16px;\n    background: var(--bg-surface);\n    border: 1px solid var(--border);\n    border-radius: var(--radius-sm);\n    color: var(--text);\n    font-size: 0.9rem;\n    cursor: pointer;\n    transition: all 0.2s;\n    text-decoration: none;\n    font-family: inherit;\n    text-align: left;\n    width: 100%;\n}\n.menu-item i:first-child { width: 18px; height: 18px; color: var(--text-muted); }\n.menu-item span { flex: 1; }\n.menu-item i:last-child { width: 16px; height: 16px; color: var(--text-muted); }\n.menu-item:hover { border-color: var(--accent); }\n.menu-item-danger { color: var(--danger); }\n.menu-item-danger i:first-child { color: var(--danger) !important; }\n\n/* ---------- NOTIFICATIONS ---------- */\n.notifications-list { display: flex; flex-direction: column; gap: 8px; margin-top: 16px; }\n.notif-item {\n    background: var(--bg-surface);\n    border: 1px solid var(--border);\n    border-radius: var(--radius-sm);\n    padding: 14px;\n    display: flex;\n    gap: 12px;\n    align-items: flex-start;\n}\n.notif-icon {\n    width: 36px; height: 36px;\n    background: var(--accent-soft);\n    border-radius: 50%;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    flex-shrink: 0;\n}\n.notif-icon i { width: 16px; height: 16px; color: var(--accent); }\n.notif-text { flex: 1; }\n.notif-text strong { font-size: 0.88rem; display: block; margin-bottom: 2px; }\n.notif-text p { font-size: 0.8rem; color: var(--text-secondary); }\n.notif-time { font-size: 0.72rem; color: var(--text-muted); margin-top: 4px; }\n\n/* ---------- ABOUT ---------- */\n.about-content { text-align: center; }\n.about-logo { margin-bottom: 16px; }\n.about-logo i { width: 48px; height: 48px; color: var(--accent); margin-bottom: 8px; }\n.about-content p { color: var(--text-secondary); font-size: 0.9rem; margin-bottom: 10px; line-height: 1.5; }\n.about-version { font-size: 0.8rem; color: var(--text-muted); }\n.about-links { display: flex; flex-direction: column; gap: 8px; margin-top: 16px; }\n\n/* ---------- TOAST ---------- */\n.toast {\n    position: fixed;\n    bottom: calc(var(--nav-height) + 16px);\n    left: 50%;\n    transform: translateX(-50%);\n    background: var(--bg-elevated);\n    border: 1px solid var(--border);\n    border-radius: var(--radius-sm);\n    padding: 12px 20px;\n    font-size: 0.88rem;\n    z-index: 2000;\n    max-width: 400px;\n    text-align: center;\n    box-shadow: 0 8px 32px rgba(0,0,0,0.4);\n}\n.toast.hidden { display: none; }\n\n/* ---------- BOTTOM NAV ---------- */\n.bottom-nav {\n    position: fixed;\n    bottom: 0;\n    left: 0;\n    right: 0;\n    max-width: 480px;\n    margin: 0 auto;\n    background: rgba(18, 18, 26, 0.92);\n    backdrop-filter: blur(16px);\n    -webkit-backdrop-filter: blur(16px);\n    border-top: 1px solid var(--border);\n    display: flex;\n    justify-content: space-around;\n    padding: 8px 0;\n    padding-bottom: calc(8px + var(--safe-bottom));\n    z-index: 100;\n}\n.bottom-nav.hidden { display: none; }\n.nav-item {\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    gap: 2px;\n    background: none;\n    border: none;\n    color: var(--text-muted);\n    font-size: 0.65rem;\n    cursor: pointer;\n    padding: 6px 12px;\n    position: relative;\n    transition: color 0.2s;\n    font-family: inherit;\n}\n.nav-item i { width: 22px; height: 22px; }\n.nav-item.active { color: var(--accent); }\n.notif-badge {\n    position: absolute;\n    top: 2px;\n    right: 4px;\n    background: var(--danger);\n    color: #fff;\n    font-size: 0.6rem;\n    font-weight: 700;\n    min-width: 16px;\n    height: 16px;\n    border-radius: 8px;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    padding: 0 4px;\n}\n.notif-badge.hidden { display: none; }\n\n/* ---------- UTILITIES ---------- */\n.hidden { display: none !important; }\n\n/* ---------- RESPONSIVE ---------- */\n@media (min-width: 481px) {\n    .bottom-nav, .modal-content, .modal, .location-banner { max-width: 480px; }\n}\n@media (min-width: 768px) {\n    #app { border-left: 1px solid var(--border); border-right: 1px solid var(--border); }\n}\n"}],"folders":[]},{"folder":"icons","files":[{"name":"icon.svg","content":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\">\n  <rect width=\"512\" height=\"512\" rx=\"96\" fill=\"#0a0a0f\"/>\n  <rect x=\"32\" y=\"32\" width=\"448\" height=\"448\" rx=\"80\" fill=\"#12121a\"/>\n  <!-- Car body -->\n  <path d=\"M80 300c0-10 5-18 14-22l40-18c8-4 18-12 26-24l30-44c8-12 20-20 34-22h138c14 2 26 10 34 22l30 44c8 12 18 20 26 24l40 18c9 4 14 12 14 22v24c0 14-10 24-24 24h-24c0 22-18 40-40 40s-40-18-40-40H176c0 22-18 40-40 40s-40-18-40-40h-12c-14 0-24-10-24-24v-24z\" fill=\"#2979ff\"/>\n  <!-- Roof -->\n  <path d=\"M158 236l30-44c8-12 20-20 34-22h138c14 2 26 10 34 22l30 44H158z\" fill=\"#4096ff\"/>\n  <!-- Windows -->\n  <path d=\"M172 240h176l-20-28H192L172 240z\" fill=\"#0a0a0f\" opacity=\"0.6\"/>\n  <!-- Windshield highlight -->\n  <path d=\"M192 240l14-20h112l14 20H192z\" fill=\"#0a0a0f\" opacity=\"0.3\"/>\n  <!-- Headlights -->\n  <ellipse cx=\"108\" cy=\"292\" rx=\"10\" ry=\"6\" fill=\"#ffc107\"/>\n  <ellipse cx=\"404\" cy=\"292\" rx=\"10\" ry=\"6\" fill=\"#ffc107\"/>\n  <!-- Wheels -->\n  <circle cx=\"156\" cy=\"348\" r=\"28\" fill=\"#1a1a2e\" stroke=\"#2979ff\" stroke-width=\"6\"/>\n  <circle cx=\"156\" cy=\"348\" r=\"10\" fill=\"#2979ff\"/>\n  <circle cx=\"356\" cy=\"348\" r=\"28\" fill=\"#1a1a2e\" stroke=\"#2979ff\" stroke-width=\"6\"/>\n  <circle cx=\"356\" cy=\"348\" r=\"10\" fill=\"#2979ff\"/>\n  <!-- Door line -->\n  <line x1=\"256\" y1=\"248\" x2=\"256\" y2=\"320\" stroke=\"#4096ff\" stroke-width=\"2\" opacity=\"0.5\"/>\n</svg>\n"}],"folders":[]},{"folder":"js","files":[{"name":"app.js","content":"/**\n * MOVEIT — Main App Controller\n * Routing, navigation, state management, global API\n */\n\nwindow.MOVEIT = (() => {\n    let currentScreen = 'auth';\n\n    // ===== Navigation =====\n\n    function navigate(screenName) {\n        // Hide all screens\n        document.querySelectorAll('.screen').forEach(s => s.classList.remove('active'));\n\n        // Show target screen\n        const target = document.getElementById(screenName + '-screen');\n        if (target) {\n            target.classList.add('active');\n            target.scrollTop = 0;\n        }\n\n        // Update nav\n        document.querySelectorAll('.nav-item').forEach(item => {\n            if (item.dataset.screen === screenName) {\n                item.classList.add('active');\n            } else {\n                item.classList.remove('active');\n            }\n        });\n\n        currentScreen = screenName;\n\n        // Render screen-specific content\n        switch (screenName) {\n            case 'home':\n                Profile.renderHome();\n                break;\n            case 'vehicles':\n                Vehicles.renderVehicles();\n                break;\n            case 'premium':\n                Premium.renderPremium();\n                break;\n            case 'profile':\n                Profile.renderProfile();\n                break;\n        }\n\n        // Re-create icons for new content\n        if (window.lucide) lucide.createIcons();\n    }\n\n    // ===== Auth State =====\n\n    function showAuth() {\n        document.getElementById('screen-auth').classList.add('active');\n        document.querySelectorAll('.screen:not(#screen-auth)').forEach(s => s.classList.remove('active'));\n        document.getElementById('bottom-nav').classList.add('hidden');\n    }\n\n    function showApp() {\n        document.getElementById('screen-auth').classList.remove('active');\n        document.getElementById('bottom-nav').classList.remove('hidden');\n        navigate('home');\n    }\n\n    function onAuthSuccess() {\n        showApp();\n        showToast('Welcome to MOVEIT! 🚗');\n    }\n\n    // ===== Modals =====\n\n    function showAddVehicle() {\n        document.getElementById('add-vehicle-modal').classList.remove('hidden');\n    }\n\n    function showVehicleQR(vehicleId) {\n        QR.showVehicleQR(vehicleId);\n    }\n\n    function showQRScanner() {\n        document.getElementById('scan-result').classList.add('hidden');\n        document.getElementById('scan-token-input').value = '';\n        document.getElementById('qr-scanner-modal').classList.remove('hidden');\n    }\n\n    function showAbout() {\n        document.getElementById('about-modal').classList.remove('hidden');\n    }\n\n    function closeModal(modalId) {\n        document.getElementById(modalId).classList.add('hidden');\n    }\n\n    // ===== Vehicle Actions =====\n\n    function addVehicle(e) {\n        // Handled by Vehicles module form listener\n    }\n\n    function deleteVehicle(vehicleId) {\n        if (confirm('Are you sure you want to delete this vehicle?')) {\n            Vehicles.removeVehicle(vehicleId);\n            Vehicles.renderVehicles();\n            showToast('Vehicle deleted');\n        }\n    }\n\n    function copyToken(token) {\n        QR.copyToken(token);\n    }\n\n    // ===== QR Scanner =====\n\n    function resolveQRToken(e) {\n        e.preventDefault();\n        const token = document.getElementById('scan-token-input').value.trim();\n        if (!token) return;\n\n        const result = Vehicles.resolveToken(token);\n        const resultDiv = document.getElementById('scan-result');\n\n        if (result) {\n            document.getElementById('scan-plate-masked').textContent = result.maskedPlate;\n            resultDiv.classList.remove('hidden');\n        } else {\n            resultDiv.classList.add('hidden');\n            showToast('No vehicle found with this token');\n        }\n    }\n\n    function startCall() {\n        showToast('Calling owner... (WebRTC calling coming soon)');\n        closeModal('qr-scanner-modal');\n    }\n\n    function sendMessage() {\n        showToast('Messaging owner... (Chat coming soon)');\n        closeModal('qr-scanner-modal');\n    }\n\n    // ===== Premium Actions =====\n\n    function copyUPI() {\n        Premium.copyUPI();\n    }\n\n    function openUPIApp() {\n        Premium.openUPIApp();\n    }\n\n    function submitPayment(e) {\n        // Handled by Premium module form listener\n    }\n\n    // ===== Profile Actions =====\n\n    function logout() {\n        if (confirm('Are you sure you want to sign out?')) {\n            Auth.logout();\n            showAuth();\n            showToast('Signed out successfully');\n        }\n    }\n\n    // ===== Toast =====\n\n    function showToast(message, duration = 3000) {\n        const toast = document.getElementById('toast');\n        const msgEl = document.getElementById('toast-message');\n        msgEl.textContent = message;\n        toast.classList.remove('hidden');\n        toast.classList.add('show');\n\n        setTimeout(() => {\n            toast.classList.remove('show');\n            setTimeout(() => toast.classList.add('hidden'), 300);\n        }, duration);\n    }\n\n    // ===== Init =====\n\n    function init() {\n        // Init modules\n        Auth.initAuthUI();\n        Vehicles.initVehicleUI();\n        Premium.initPremiumUI();\n\n        // Check auth state\n        if (Auth.isLoggedIn()) {\n            showApp();\n        } else {\n            showAuth();\n        }\n\n        // Create Lucide icons\n        if (window.lucide) lucide.createIcons();\n\n        // Handle hash routing for QR scans\n        handleHashRoute();\n        window.addEventListener('hashchange', handleHashRoute);\n    }\n\n    function handleHashRoute() {\n        const hash = window.location.hash;\n        if (hash.startsWith('#/qr/')) {\n            const token = hash.split('/qr/')[1];\n            if (token && Auth.isLoggedIn()) {\n                showQRScanner();\n                document.getElementById('scan-token-input').value = token;\n                // Auto-resolve\n                const result = Vehicles.resolveToken(token);\n                const resultDiv = document.getElementById('scan-result');\n                if (result) {\n                    document.getElementById('scan-plate-masked').textContent = result.maskedPlate;\n                    resultDiv.classList.remove('hidden');\n                }\n            }\n        }\n    }\n\n    // ===== Public API =====\n\n    return {\n        navigate,\n        onAuthSuccess,\n        showAddVehicle,\n        showVehicleQR,\n        showQRScanner,\n        showAbout,\n        closeModal,\n        addVehicle,\n        deleteVehicle,\n        copyToken,\n        resolveQRToken,\n        startCall,\n        sendMessage,\n        copyUPI,\n        openUPIApp,\n        submitPayment,\n        logout,\n        showToast,\n        init\n    };\n})();\n\n// Boot on DOM ready\ndocument.addEventListener('DOMContentLoaded', () => {\n    window.MOVEIT.init();\n});\n"},{"name":"auth.js","content":"/**\n * MOVEIT — Auth Module\n * Handles login, registration, session management\n * All data stored in localStorage (client-side simulation)\n */\n\nconst Auth = (() => {\n    const USERS_KEY = 'moveit_users';\n    const SESSION_KEY = 'moveit_session';\n\n    function getUsers() {\n        try {\n            return JSON.parse(localStorage.getItem(USERS_KEY)) || [];\n        } catch {\n            return [];\n        }\n    }\n\n    function saveUsers(users) {\n        localStorage.setItem(USERS_KEY, JSON.stringify(users));\n    }\n\n    function getSession() {\n        try {\n            return JSON.parse(localStorage.getItem(SESSION_KEY));\n        } catch {\n            return null;\n        }\n    }\n\n    function saveSession(user) {\n        localStorage.setItem(SESSION_KEY, JSON.stringify(user));\n    }\n\n    function clearSession() {\n        localStorage.removeItem(SESSION_KEY);\n    }\n\n    function generateId() {\n        return 'u_' + Date.now().toString(36) + '_' + Math.random().toString(36).substr(2, 8);\n    }\n\n    function hashPassword(password) {\n        // Simple hash for demo — in production use bcrypt/argon2\n        let hash = 0;\n        for (let i = 0; i < password.length; i++) {\n            const char = password.charCodeAt(i);\n            hash = ((hash << 5) - hash) + char;\n            hash |= 0;\n        }\n        return 'h_' + Math.abs(hash).toString(36) + '_' + password.length;\n    }\n\n    function register(name, email, password) {\n        const users = getUsers();\n        const existing = users.find(u => u.email.toLowerCase() === email.toLowerCase());\n        if (existing) {\n            return { success: false, error: 'An account with this email already exists.' };\n        }\n\n        const user = {\n            id: generateId(),\n            name: name.trim(),\n            email: email.trim().toLowerCase(),\n            password: hashPassword(password),\n            isPremium: false,\n            createdAt: new Date().toISOString(),\n            vehicleLimit: 1\n        };\n\n        users.push(user);\n        saveUsers(users);\n\n        const session = { ...user };\n        delete session.password;\n        saveSession(session);\n\n        return { success: true, user: session };\n    }\n\n    function login(email, password) {\n        const users = getUsers();\n        const user = users.find(u => u.email.toLowerCase() === email.toLowerCase());\n\n        if (!user) {\n            return { success: false, error: 'No account found with this email.' };\n        }\n\n        if (user.password !== hashPassword(password)) {\n            return { success: false, error: 'Incorrect password.' };\n        }\n\n        const session = { ...user };\n        delete session.password;\n        saveSession(session);\n\n        return { success: true, user: session };\n    }\n\n    function logout() {\n        clearSession();\n    }\n\n    function currentUser() {\n        return getSession();\n    }\n\n    function isLoggedIn() {\n        return !!getSession();\n    }\n\n    function updatePremiumStatus(userId, isPremium) {\n        const users = getUsers();\n        const idx = users.findIndex(u => u.id === userId);\n        if (idx !== -1) {\n            users[idx].isPremium = isPremium;\n            saveUsers(users);\n\n            const session = getSession();\n            if (session && session.id === userId) {\n                session.isPremium = isPremium;\n                saveSession(session);\n            }\n        }\n    }\n\n    function getVehicleLimit() {\n        const user = currentUser();\n        if (!user) return 0;\n        return user.isPremium ? Infinity : 1;\n    }\n\n    // ===== UI Binding =====\n\n    let isRegisterMode = false;\n\n    function initAuthUI() {\n        const loginForm = document.getElementById('login-form');\n        const registerForm = document.getElementById('register-form');\n        const showRegisterBtn = document.getElementById('show-register');\n        const showLoginBtn = document.getElementById('show-login');\n        const nameField = document.getElementById('reg-name');\n        const confirmInput = document.getElementById('reg-confirm');\n        const pwStrength = document.getElementById('pw-strength');\n        const matchLabel = document.getElementById('pw-match');\n\n        if (showRegisterBtn) showRegisterBtn.addEventListener('click', (e) => {\n            e.preventDefault();\n            isRegisterMode = true;\n            if (loginForm) loginForm.classList.add('hidden');\n            if (registerForm) registerForm.classList.remove('hidden');\n        });\n        if (showLoginBtn) showLoginBtn.addEventListener('click', (e) => {\n            e.preventDefault();\n            isRegisterMode = false;\n            if (registerForm) registerForm.classList.add('hidden');\n            if (loginForm) loginForm.classList.remove('hidden');\n        });\n\n        // Password match indicator\n        confirmInput.addEventListener('input', () => {\n            const pw = document.getElementById('auth-password').value;\n            const confirm = confirmInput.value;\n            if (confirm.length === 0) {\n                matchLabel.textContent = '';\n                matchLabel.style.color = '';\n            } else if (pw === confirm) {\n                matchLabel.textContent = '✓ Passwords match';\n                matchLabel.style.color = 'var(--success)';\n            } else {\n                matchLabel.textContent = '✗ Passwords don\\'t match';\n                matchLabel.style.color = 'var(--danger)';\n            }\n        });\n\n        loginForm.addEventListener('submit', (e) => {\n            e.preventDefault();\n\n            const email = document.getElementById('auth-email').value.trim();\n            const password = document.getElementById('auth-password').value;\n\n            if (isRegisterMode) {\n                const name = document.getElementById('auth-name').value.trim();\n                const confirm = confirmInput.value;\n\n                if (!name) {\n                    window.MOVEIT.showToast('Please enter your name');\n                    return;\n                }\n                if (password.length < 6) {\n                    window.MOVEIT.showToast('Password must be at least 6 characters');\n                    return;\n                }\n                if (password !== confirm) {\n                    window.MOVEIT.showToast('Passwords don\\'t match');\n                    return;\n                }\n\n                const result = register(name, email, password);\n                if (result.success) {\n                    window.MOVEIT.onAuthSuccess();\n                } else {\n                    window.MOVEIT.showToast(result.error);\n                }\n            } else {\n                if (!email || !password) {\n                    window.MOVEIT.showToast('Please fill in all fields');\n                    return;\n                }\n\n                const result = login(email, password);\n                if (result.success) {\n                    window.MOVEIT.onAuthSuccess();\n                } else {\n                    window.MOVEIT.showToast(result.error);\n                }\n            }\n        });\n    }\n\n    return {\n        initAuthUI,\n        currentUser,\n        isLoggedIn,\n        logout,\n        updatePremiumStatus,\n        getVehicleLimit,\n        USERS_KEY,\n        SESSION_KEY\n    };\n})();\n"},{"name":"main.js","content":"/**\n * MOVEIT — Service Worker Registration & PWA Install\n */\n(function () {\n  // Register service worker\n  if ('serviceWorker' in navigator) {\n    window.addEventListener('load', () => {\n      navigator.serviceWorker.register('/sw.js').catch(() => {});\n    });\n  }\n\n  // PWA install prompt\n  let deferredPrompt = null;\n  const INSTALL_KEY = 'moveit_install_dismissed';\n\n  window.addEventListener('beforeinstallprompt', (e) => {\n    e.preventDefault();\n    deferredPrompt = e;\n    // Show install banner if not dismissed\n    if (!localStorage.getItem(INSTALL_KEY)) {\n      showInstallBanner();\n    }\n  });\n\n  window.addEventListener('appinstalled', () => {\n    deferredPrompt = null;\n    hideInstallBanner();\n  });\n\n  function showInstallBanner() {\n    const existing = document.getElementById('install-banner');\n    if (existing) return;\n    const banner = document.createElement('div');\n    banner.id = 'install-banner';\n    banner.className = 'install-banner';\n    banner.innerHTML = `\n      <div class=\"install-banner__inner\">\n        <div class=\"install-banner__icon\">📱</div>\n        <div class=\"install-banner__text\">\n          <strong>Install MOVEIT</strong>\n          <span>Add to home screen for the best experience</span>\n        </div>\n        <button class=\"install-banner__btn\" id=\"install-accept\">Install</button>\n        <button class=\"install-banner__dismiss\" id=\"install-dismiss\" aria-label=\"Dismiss\">&times;</button>\n      </div>\n    `;\n    document.body.appendChild(banner);\n\n    document.getElementById('install-accept').addEventListener('click', async () => {\n      if (!deferredPrompt) return;\n      deferredPrompt.prompt();\n      const { outcome } = await deferredPrompt.userChoice;\n      deferredPrompt = null;\n      hideInstallBanner();\n    });\n\n    document.getElementById('install-dismiss').addEventListener('click', () => {\n      localStorage.setItem(INSTALL_KEY, '1');\n      hideInstallBanner();\n    });\n  }\n\n  function hideInstallBanner() {\n    const b = document.getElementById('install-banner');\n    if (b) b.remove();\n  }\n\n  // Expose for manual trigger\n  window.installMOVEIT = async function () {\n    if (!deferredPrompt) {\n      alert('Open this page in Chrome on Android and tap \"Add to Home Screen\" from the browser menu.');\n      return;\n    }\n    deferredPrompt.prompt();\n    await deferredPrompt.userChoice;\n    deferredPrompt = null;\n  };\n})();\n"},{"name":"premium.js","content":"/**\n * MOVEIT — Premium Module\n * UPI payment, transaction submission, plan management\n */\n\nconst Premium = (() => {\n    const PAYMENTS_KEY = 'moveit_payments';\n    const UPI_NUMBER = '9920114676';\n    const SUPPORT_PHONE = '8291032232';\n    const SUPPORT_EMAIL = 'mananjain.22.3f@gmail.com';\n\n    function getPayments() {\n        try {\n            return JSON.parse(localStorage.getItem(PAYMENTS_KEY)) || [];\n        } catch {\n            return [];\n        }\n    }\n\n    function savePayments(payments) {\n        localStorage.setItem(PAYMENTS_KEY, JSON.stringify(payments));\n    }\n\n    function getUserPayments() {\n        const user = Auth.currentUser();\n        if (!user) return [];\n        return getPayments().filter(p => p.userId === user.id);\n    }\n\n    function submitPayment(name, txnId, amount) {\n        const user = Auth.currentUser();\n        if (!user) return { success: false, error: 'Not logged in' };\n\n        // Check for duplicate txn ID\n        const payments = getPayments();\n        if (payments.find(p => p.txnId === txnId)) {\n            return { success: false, error: 'This transaction ID has already been submitted.' };\n        }\n\n        const payment = {\n            id: 'p_' + Date.now().toString(36) + '_' + Math.random().toString(36).substr(2, 6),\n            userId: user.id,\n            name: name.trim(),\n            txnId: txnId.trim(),\n            amount: parseInt(amount),\n            status: 'pending', // pending | verified | rejected\n            createdAt: new Date().toISOString()\n        };\n\n        payments.push(payment);\n        savePayments(payments);\n\n        return { success: true, payment };\n    }\n\n    function getPendingPayments() {\n        const userPayments = getUserPayments();\n        return userPayments.filter(p => p.status === 'pending');\n    }\n\n    function hasVerifiedPayment() {\n        const userPayments = getUserPayments();\n        return userPayments.some(p => p.status === 'verified');\n    }\n\n    function simulateVerification(txnId) {\n        // In production, this would be a backend admin action\n        const payments = getPayments();\n        const idx = payments.findIndex(p => p.txnId === txnId);\n        if (idx !== -1) {\n            payments[idx].status = 'verified';\n            savePayments(payments);\n            Auth.updatePremiumStatus(payments[idx].userId, true);\n            return true;\n        }\n        return false;\n    }\n\n    function renderPremium() {\n        const user = Auth.currentUser();\n        if (!user) return;\n\n        const userPayments = getUserPayments();\n        const pendingPayments = userPayments.filter(p => p.status === 'pending');\n        const verifiedPayments = userPayments.filter(p => p.status === 'verified');\n\n        const form = document.getElementById('payment-form');\n        const successMsg = document.getElementById('payment-success');\n        const pendingMsg = document.getElementById('payment-pending');\n\n        if (user.isPremium) {\n            form.classList.add('hidden');\n            successMsg.classList.add('hidden');\n            pendingMsg.classList.add('hidden');\n        } else if (pendingPayments.length > 0) {\n            form.classList.add('hidden');\n            successMsg.classList.add('hidden');\n            pendingMsg.classList.remove('hidden');\n        } else {\n            form.classList.remove('hidden');\n            successMsg.classList.add('hidden');\n            pendingMsg.classList.add('hidden');\n        }\n\n        // Pre-fill name\n        document.getElementById('payment-name').value = user.name || '';\n\n        if (window.lucide) lucide.createIcons();\n    }\n\n    function initPremiumUI() {\n        document.getElementById('payment-form').addEventListener('submit', (e) => {\n            e.preventDefault();\n            const name = document.getElementById('payment-name').value.trim();\n            const txnId = document.getElementById('payment-txn').value.trim();\n            const amount = document.getElementById('payment-amount').value;\n\n            if (!name || !txnId || !amount) {\n                window.MOVEIT.showToast('Please fill in all fields');\n                return;\n            }\n\n            const result = submitPayment(name, txnId, amount);\n            if (result.success) {\n                document.getElementById('payment-form').classList.add('hidden');\n                document.getElementById('payment-success').classList.remove('hidden');\n                document.getElementById('payment-txn').value = '';\n                document.getElementById('payment-amount').value = '';\n                window.MOVEIT.showToast('Payment submitted for verification!');\n            } else {\n                window.MOVEIT.showToast(result.error);\n            }\n        });\n    }\n\n    function copyUPI() {\n        navigator.clipboard.writeText(UPI_NUMBER).then(() => {\n            window.MOVEIT.showToast('UPI number copied!');\n        }).catch(() => {\n            // Fallback\n            const textArea = document.createElement('textarea');\n            textArea.value = UPI_NUMBER;\n            document.body.appendChild(textArea);\n            textArea.select();\n            document.execCommand('copy');\n            document.body.removeChild(textArea);\n            window.MOVEIT.showToast('UPI number copied!');\n        });\n    }\n\n    function openUPIApp() {\n        const amount = '50';\n        const note = 'MOVEIT Premium Monthly';\n        const upiId = UPI_NUMBER + '@upi';\n        const upiUrl = `upi://pay?pa=${upiId}&pn=MOVEIT&am=${amount}&cu=INR&tn=${encodeURIComponent(note)}`;\n\n        // Try to open UPI app\n        window.location.href = upiUrl;\n\n        // Fallback: show instructions\n        setTimeout(() => {\n            window.MOVEIT.showToast('Open your UPI app and pay ₹50 to ' + UPI_NUMBER);\n        }, 2000);\n    }\n\n    return {\n        UPI_NUMBER,\n        SUPPORT_PHONE,\n        SUPPORT_EMAIL,\n        getPayments,\n        getUserPayments,\n        submitPayment,\n        getPendingPayments,\n        hasVerifiedPayment,\n        simulateVerification,\n        renderPremium,\n        initPremiumUI,\n        copyUPI,\n        openUPIApp\n    };\n})();\n"},{"name":"profile.js","content":"/**\n * MOVEIT — Profile Module\n * User profile display, stats, logout\n */\n\nconst Profile = (() => {\n    function renderProfile() {\n        const user = Auth.currentUser();\n        if (!user) return;\n\n        // Header\n        const nameEl = document.getElementById('profile-name');\n        const emailEl = document.getElementById('profile-email');\n        if (nameEl) nameEl.textContent = user.name || 'User';\n        if (emailEl) emailEl.textContent = user.email || '';\n\n        // Stats\n        const vehicles = Vehicles.getUserVehicles();\n        const payments = Premium.getUserPayments();\n        const vehicleCountEl = document.getElementById('profile-vehicle-count');\n        const planTypeEl = document.getElementById('profile-plan-type');\n        const paymentsCountEl = document.getElementById('profile-payments-count');\n\n        if (vehicleCountEl) vehicleCountEl.textContent = vehicles.length;\n        if (planTypeEl) {\n            planTypeEl.textContent = user.isPremium ? 'Premium' : 'Free';\n            planTypeEl.style.color = user.isPremium ? 'var(--gold)' : 'var(--accent)';\n        }\n        if (paymentsCountEl) paymentsCountEl.textContent = payments.length;\n\n        // Hide upgrade card if premium\n        const upgradeCard = document.getElementById('profile-upgrade-card');\n        if (upgradeCard) {\n            if (user.isPremium) {\n                upgradeCard.classList.add('hidden');\n            } else {\n                upgradeCard.classList.remove('hidden');\n            }\n        }\n    }\n\n    function renderHome() {\n        const user = Auth.currentUser();\n        if (!user) return;\n\n        // Greeting\n        const hour = new Date().getHours();\n        let greeting = 'Good Evening';\n        if (hour < 12) greeting = 'Good Morning';\n        else if (hour < 17) greeting = 'Good Afternoon';\n\n        const greetingEl = document.getElementById('home-greeting-text');\n        if (greetingEl) greetingEl.textContent = `${greeting}, ${user.name || 'User'}!`;\n\n        // Premium badge\n        const badge = document.getElementById('premium-badge-header');\n        if (badge) {\n            if (user.isPremium) {\n                badge.classList.remove('hidden');\n            } else {\n                badge.classList.add('hidden');\n            }\n        }\n\n        // Upgrade banner\n        const banner = document.getElementById('upgrade-banner');\n        if (banner) {\n            if (user.isPremium) {\n                banner.classList.add('hidden');\n            } else {\n                banner.classList.remove('hidden');\n            }\n        }\n    }\n\n    return {\n        renderProfile,\n        renderHome\n    };\n})();\n"},{"name":"qr.js","content":"/**\n * MOVEIT — QR Module\n * QR code generation and download using qrcodejs library\n */\n(function () {\n  window.MOVEIT = window.MOVEIT || {};\n\n  window.MOVEIT.QR = {\n    generateQR(data, elementId) {\n      const el = document.getElementById(elementId);\n      if (!el) return;\n      el.innerHTML = '';\n\n      if (typeof QRCode !== 'undefined') {\n        new QRCode(el, {\n          text: data,\n          width: 220,\n          height: 220,\n          colorDark: '#00c8ff',\n          colorLight: '#0a0a0f',\n          correctLevel: QRCode.CorrectLevel.H\n        });\n      } else {\n        // Fallback — plain text\n        el.innerHTML = '<div style=\"padding:20px;text-align:center;color:#888;\">QR code — ' + data + '</div>';\n      }\n    },\n\n    downloadQR(elementId, filename) {\n      const el = document.getElementById(elementId);\n      if (!el) return;\n\n      const canvas = el.querySelector('canvas');\n      if (canvas) {\n        const link = document.createElement('a');\n        link.download = filename || 'moveit-qr.png';\n        link.href = canvas.toDataURL('image/png');\n        document.body.appendChild(link);\n        link.click();\n        document.body.removeChild(link);\n        return;\n      }\n\n      // qrcodejs may produce an <img> instead of canvas — convert it\n      const img = el.querySelector('img');\n      if (img) {\n        const c = document.createElement('canvas');\n        c.width = img.naturalWidth || 220;\n        c.height = img.naturalHeight || 220;\n        const ctx = c.getContext('2d');\n        ctx.drawImage(img, 0, 0);\n        const link = document.createElement('a');\n        link.download = filename || 'moveit-qr.png';\n        link.href = c.toDataURL('image/png');\n        document.body.appendChild(link);\n        link.click();\n        document.body.removeChild(link);\n      }\n    }\n  };\n})();\n"},{"name":"vehicles.js","content":"/**\n * MOVEIT — Vehicles Module\n * Add/delete vehicles, QR tokens, limit enforcement\n */\n\nconst Vehicles = (() => {\n    const VEHICLES_KEY = 'moveit_vehicles';\n\n    function getAll() {\n        try {\n            return JSON.parse(localStorage.getItem(VEHICLES_KEY)) || [];\n        } catch {\n            return [];\n        }\n    }\n\n    function saveAll(vehicles) {\n        localStorage.setItem(VEHICLES_KEY, JSON.stringify(vehicles));\n    }\n\n    function getUserVehicles() {\n        const user = Auth.currentUser();\n        if (!user) return [];\n        return getAll().filter(v => v.userId === user.id);\n    }\n\n    function generateToken() {\n        const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n        let token = '';\n        for (let i = 0; i < 12; i++) {\n            token += chars.charAt(Math.floor(Math.random() * chars.length));\n        }\n        return token;\n    }\n\n    function addVehicle(plateNumber) {\n        const user = Auth.currentUser();\n        if (!user) return { success: false, error: 'Not logged in' };\n\n        const vehicles = getAll();\n        const userVehicles = vehicles.filter(v => v.userId === user.id);\n        const limit = Auth.getVehicleLimit();\n\n        if (userVehicles.length >= limit) {\n            return { success: false, error: 'Vehicle limit reached. Upgrade to Premium for unlimited vehicles.' };\n        }\n\n        // Check for duplicate plate\n        const normalizedPlate = plateNumber.toUpperCase().trim();\n        const exists = userVehicles.find(v => v.plate === normalizedPlate);\n        if (exists) {\n            return { success: false, error: 'This plate number is already registered.' };\n        }\n\n        const vehicle = {\n            id: 'v_' + Date.now().toString(36) + '_' + Math.random().toString(36).substr(2, 6),\n            userId: user.id,\n            plate: normalizedPlate,\n            token: generateToken(),\n            createdAt: new Date().toISOString()\n        };\n\n        vehicles.push(vehicle);\n        saveAll(vehicles);\n\n        return { success: true, vehicle };\n    }\n\n    function removeVehicle(vehicleId) {\n        const vehicles = getAll();\n        const filtered = vehicles.filter(v => v.id !== vehicleId);\n        saveAll(filtered);\n    }\n\n    function resolveToken(token) {\n        const vehicles = getAll();\n        const vehicle = vehicles.find(v => v.token === token);\n        if (!vehicle) return null;\n\n        // Return masked plate for privacy\n        const plate = vehicle.plate;\n        const masked = plate.substring(0, 2) + ' •••• ' + plate.slice(-4);\n        return {\n            id: vehicle.id,\n            maskedPlate: masked,\n            token: vehicle.token\n        };\n    }\n\n    function renderVehicles() {\n        const userVehicles = getUserVehicles();\n        const vehiclesList = document.getElementById('vehicles-list');\n        const countBadge = document.getElementById('vehicle-count-badge');\n        const addBtn = document.getElementById('add-vehicle-btn');\n        const limitMsg = document.getElementById('vehicle-limit-msg');\n\n        const user = Auth.currentUser();\n        const limit = Auth.getVehicleLimit();\n        const isLimitReached = userVehicles.length >= limit;\n\n        // Update count badge\n        if (user && !user.isPremium) {\n            countBadge.textContent = `${userVehicles.length}/${limit}`;\n            if (isLimitReached) {\n                countBadge.classList.add('limit-reached');\n            } else {\n                countBadge.classList.remove('limit-reached');\n            }\n        } else if (user && user.isPremium) {\n            countBadge.textContent = `${userVehicles.length} ∞`;\n            countBadge.classList.remove('limit-reached');\n        }\n\n        // Render vehicle cards\n        if (userVehicles.length === 0) {\n            vehiclesList.innerHTML = `\n                <div class=\"empty-state\">\n                    <i data-lucide=\"car\"></i>\n                    <p>No vehicles added yet.</p>\n                    <p style=\"margin-top:4px;font-size:13px;color:var(--text-muted)\">Add your first vehicle to get started.</p>\n                </div>\n            `;\n        } else {\n            vehiclesList.innerHTML = userVehicles.map(v => `\n                <div class=\"vehicle-card\">\n                    <div class=\"vehicle-card-icon\">\n                        <i data-lucide=\"car\"></i>\n                    </div>\n                    <div class=\"vehicle-card-info\">\n                        <div class=\"vehicle-card-plate\">${v.plate}</div>\n                        <div class=\"vehicle-card-token\">Token: ${v.token}</div>\n                    </div>\n                    <div class=\"vehicle-card-actions\">\n                        <button title=\"Show QR\" onclick=\"window.MOVEIT.showVehicleQR('${v.id}')\">\n                            <i data-lucide=\"qr-code\"></i>\n                        </button>\n                        <button title=\"Copy Token\" onclick=\"window.MOVEIT.copyToken('${v.token}')\">\n                            <i data-lucide=\"copy\"></i>\n                        </button>\n                        <button title=\"Delete\" class=\"delete-btn\" onclick=\"window.MOVEIT.deleteVehicle('${v.id}')\">\n                            <i data-lucide=\"trash-2\"></i>\n                        </button>\n                    </div>\n                </div>\n            `).join('');\n        }\n\n        // Show/hide add button and limit message\n        if (isLimitReached && user && !user.isPremium) {\n            addBtn.classList.add('hidden');\n            limitMsg.classList.remove('hidden');\n        } else {\n            addBtn.classList.remove('hidden');\n            limitMsg.classList.add('hidden');\n        }\n\n        // Re-create Lucide icons\n        if (window.lucide) lucide.createIcons();\n    }\n\n    function initVehicleUI() {\n        const form = document.getElementById('add-vehicle-form');\n        form.addEventListener('submit', (e) => {\n            e.preventDefault();\n            const plate = document.getElementById('vehicle-plate').value.trim();\n            if (!plate) {\n                window.MOVEIT.showToast('Please enter a plate number');\n                return;\n            }\n            const result = addVehicle(plate);\n            if (result.success) {\n                window.MOVEIT.closeModal('add-vehicle-modal');\n                document.getElementById('vehicle-plate').value = '';\n                renderVehicles();\n                window.MOVEIT.showToast('Vehicle added successfully!');\n            } else {\n                window.MOVEIT.showToast(result.error);\n            }\n        });\n    }\n\n    return {\n        getAll,\n        getUserVehicles,\n        addVehicle,\n        removeVehicle,\n        resolveToken,\n        renderVehicles,\n        initVehicleUI\n    };\n})();\n"}],"folders":[]},{"folder":"other","files":[{"name":"main.sketch","content":""}],"folders":[],"collapsed":true}]},"variants":null,"createdAt":"2026-07-05T10:56:26.873Z","updatedAt":"2026-07-05T10:56:32.289Z"}}