@burdenoff/microfe-kadaikodi 2026.830.1 → 2026.928.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -197,7 +197,7 @@ var F = [
197
197
  id: "faq-008",
198
198
  category: "Cart Owners",
199
199
  question: "What commission does Kadaikodi charge?",
200
- answer: "Kadaikodi charges a commission of 15-20% on each order, depending on your cart category and monthly order volume. Higher volume cart owners get reduced rates. This includes payment processing, marketing support, customer acquisition, and platform maintenance. You can view the detailed commission structure in your dashboard under \"Finances\".",
200
+ answer: "Kadaikodi charges an order commission that depends on your plan: 5% per completed order on Free, 4% on Starter, 2.5% on Growth and 1.5% on Business. Higher plans trade a monthly fee for a lower commission, so the cheapest plan is the one where the fee plus commission is lowest at your order volume; Enterprise rates are agreed individually. Charges levied by your payment provider are separate from this commission. Current rates for every plan are published on the Kadaikodi pricing page.",
201
201
  helpful: 0,
202
202
  tags: [
203
203
  "commission",
@@ -1 +1 @@
1
- {"version":3,"file":"HelpSupportPage.js","names":[],"sources":["../../../../src/kadaikodi/pages/common/HelpSupportPage.tsx"],"sourcesContent":["/**\n * Help & Support Page\n * @module kadaikodi/pages/common\n *\n * Full-featured help center with FAQ accordion (8 categories, search, helpful votes, tags),\n * contact support channels (email, phone, live chat, WhatsApp with response times),\n * submit ticket form with validation, my tickets section with status/priority badges,\n * popular articles, support hours, and emergency contact info.\n */\n\nimport { useState, useMemo } from 'react';\nimport {\n HelpCircle,\n ChevronDown,\n ChevronUp,\n MessageSquare,\n Phone,\n Mail,\n ShoppingBag,\n TrendingUp,\n CreditCard,\n User,\n Shield,\n Send,\n Search,\n X,\n Clock,\n ThumbsUp,\n Tag,\n Ticket,\n AlertTriangle,\n BookOpen,\n Wrench,\n Truck,\n BarChart3,\n Lock,\n FileText,\n CheckCircle2,\n CircleDot,\n Circle,\n XCircle,\n MessageCircle,\n PhoneCall,\n AlertCircle,\n Info,\n Lightbulb,\n ExternalLink,\n} from 'lucide-react';\nimport { EmphasisPanel, PagePurpose } from '@burdenoff/fe-libs/ui';\nimport { PageLayout } from '../../components/PageLayout';\nimport { EmptyState } from '../../components/EmptyState';\nimport { cn } from '../../utils/cn';\nimport { formatDate } from '../../utils/formatters';\n\n// ============================================================================\n// Types\n// ============================================================================\n\ninterface FAQItem {\n id: string;\n category: string;\n question: string;\n answer: string;\n helpful: number;\n tags: string[];\n}\n\ninterface SupportTicket {\n id: string;\n subject: string;\n category: string;\n priority: 'low' | 'medium' | 'high' | 'urgent';\n status: 'open' | 'in-progress' | 'resolved' | 'closed';\n description: string;\n createdAt: string;\n updatedAt: string;\n responses: Array<{\n id: string;\n message: string;\n sender: 'user' | 'support';\n timestamp: string;\n }>;\n}\n\ninterface ContactMethod {\n type: 'email' | 'phone' | 'chat' | 'whatsapp';\n label: string;\n value: string;\n available: boolean;\n responseTime: string;\n icon: typeof Mail;\n}\n\ninterface PopularArticle {\n id: string;\n title: string;\n category: string;\n /** FAQ category this article opens when clicked. */\n faqCategory: (typeof FAQ_CATEGORIES)[number];\n}\n\ntype ActiveSection = 'faq' | 'contact' | 'tickets';\n\n// ============================================================================\n// Constants\n// ============================================================================\n\nconst FAQ_CATEGORIES = [\n 'Account & Profile',\n 'Orders & Payments',\n 'Cart Owners',\n 'Delivery & Workers',\n 'Investors',\n 'Technical Issues',\n 'Billing & Refunds',\n 'Privacy & Security',\n] as const;\n\nconst HELP_CATEGORIES = [\n {\n label: 'Getting Started',\n icon: BookOpen,\n description: 'New to Kadaikodi? Start here',\n color: 'bg-[var(--color-accent-soft)] text-text-primary',\n },\n {\n label: 'Orders & Delivery',\n icon: ShoppingBag,\n description: 'Placing, tracking, and cancelling orders',\n color: 'bg-status-success-bg-subtle text-status-success-text',\n },\n {\n label: 'Payments & Billing',\n icon: CreditCard,\n description: 'Payment methods, refunds, and invoices',\n color: 'bg-accent-purple-subtle text-text-primary',\n },\n {\n label: 'Account & Profile',\n icon: User,\n description: 'Manage your account and settings',\n color: 'bg-status-warning-bg-subtle text-status-warning-text',\n },\n {\n label: 'Cart Owners',\n icon: Wrench,\n description: 'Running your cart business',\n color: 'bg-status-success-bg-subtle text-status-success-text',\n },\n {\n label: 'Workers & Delivery',\n icon: Truck,\n description: 'Delivery partner information',\n color: 'bg-[var(--color-accent-soft)] text-text-primary',\n },\n {\n label: 'Investments',\n icon: TrendingUp,\n description: 'Investment opportunities and returns',\n color: 'bg-status-success-bg-subtle text-status-success-text',\n },\n {\n label: 'Security & Privacy',\n icon: Shield,\n description: 'Data protection and safety',\n color: 'bg-status-error-bg-subtle text-status-error-text',\n },\n {\n label: 'Technical Issues',\n icon: AlertTriangle,\n description: 'App issues and troubleshooting',\n color: 'bg-status-warning-bg-subtle text-status-warning-text',\n },\n] as const;\n\nconst CONTACT_METHODS: ContactMethod[] = [\n {\n type: 'email',\n label: 'Email Support',\n value: 'support@kadaikodi.com',\n available: true,\n responseTime: 'Within 24 hours',\n icon: Mail,\n },\n {\n type: 'phone',\n label: 'Phone Support',\n value: '+91 80-4012-3456',\n available: true,\n responseTime: '9 AM - 9 PM IST',\n icon: PhoneCall,\n },\n {\n type: 'chat',\n label: 'Live Chat',\n value: 'Coming soon',\n available: false,\n responseTime: 'Not available yet',\n icon: MessageCircle,\n },\n {\n type: 'whatsapp',\n label: 'WhatsApp',\n value: '+91 98765-43210',\n available: true,\n responseTime: '2-4 hours',\n icon: MessageSquare,\n },\n];\n\nconst MOCK_FAQS: FAQItem[] = [\n {\n id: 'faq-001',\n category: 'Account & Profile',\n question: 'How do I create an account on Kadaikodi?',\n answer:\n 'You can create an account by clicking the \"Sign Up\" button on the homepage. You\\'ll need to provide your name, email address, phone number, and choose your role (Customer, Cart Owner, Worker, or Investor). After verification via OTP, your account will be activated immediately.',\n helpful: 0,\n tags: ['account', 'signup', 'registration'],\n },\n {\n id: 'faq-002',\n category: 'Account & Profile',\n question: 'How can I change my password?',\n answer:\n \"Go to Settings > Security > Change Password. You'll need to enter your current password and then your new password twice to confirm. Make sure your new password is at least 8 characters long and includes a mix of letters, numbers, and symbols for better security.\",\n helpful: 0,\n tags: ['password', 'security', 'account'],\n },\n {\n id: 'faq-003',\n category: 'Account & Profile',\n question: 'Can I switch my account role?',\n answer:\n 'Yes, you can request a role change from Settings > Profile > Account Role. Switching from Customer to Cart Owner or Worker requires additional verification. The process typically takes 2-3 business days. You can hold multiple roles simultaneously.',\n helpful: 0,\n tags: ['role', 'account', 'switch'],\n },\n {\n id: 'faq-004',\n category: 'Orders & Payments',\n question: 'What payment methods are accepted?',\n answer:\n 'We accept various payment methods including UPI (Google Pay, PhonePe, Paytm), credit/debit cards (Visa, Mastercard, RuPay), net banking from all major banks, and digital wallets. Some cart owners also accept cash on delivery for orders under a certain amount.',\n helpful: 0,\n tags: ['payment', 'upi', 'cards', 'wallet'],\n },\n {\n id: 'faq-005',\n category: 'Orders & Payments',\n question: 'How can I track my order in real-time?',\n answer:\n \"After placing an order, you'll receive a tracking link via SMS and email. You can also track your order in real-time through the app under \\\"My Orders\\\" section. The live map shows your delivery partner's location. You'll get push notifications at each stage: confirmed, preparing, picked up, and delivered.\",\n helpful: 0,\n tags: ['tracking', 'orders', 'delivery', 'real-time'],\n },\n {\n id: 'faq-006',\n category: 'Orders & Payments',\n question: 'How do I cancel or modify an order?',\n answer:\n \"You can cancel your order from the Order Details page if it hasn't been picked up yet. Go to My Orders > Select Order > Cancel Order. For modifications, contact the cart owner directly through the chat feature. Cancellation before preparation gets a full refund; after preparation, a partial refund may apply.\",\n helpful: 0,\n tags: ['cancel', 'modify', 'refund', 'orders'],\n },\n {\n id: 'faq-007',\n category: 'Cart Owners',\n question: 'How do I register my cart on Kadaikodi?',\n answer:\n \"To register your cart, sign up as a Cart Owner and complete the verification process. You'll need to provide business details, license documents (FSSAI for food carts, GST if applicable), photos of your cart, and your preferred operating location. Our team will review and approve your application within 2-3 business days.\",\n helpful: 0,\n tags: ['cart', 'registration', 'business', 'verification'],\n },\n {\n id: 'faq-008',\n category: 'Cart Owners',\n question: 'What commission does Kadaikodi charge?',\n answer:\n 'Kadaikodi charges a commission of 15-20% on each order, depending on your cart category and monthly order volume. Higher volume cart owners get reduced rates. This includes payment processing, marketing support, customer acquisition, and platform maintenance. You can view the detailed commission structure in your dashboard under \"Finances\".',\n helpful: 0,\n tags: ['commission', 'fees', 'business', 'pricing'],\n },\n {\n id: 'faq-009',\n category: 'Cart Owners',\n question: 'How do I manage my menu and pricing?',\n answer:\n 'Go to your Cart Dashboard > Menu Management to add, edit, or remove items. You can set prices, mark items as available/unavailable, add photos and descriptions, create categories, and set up combo offers. Changes are reflected instantly on the platform.',\n helpful: 0,\n tags: ['menu', 'pricing', 'cart', 'management'],\n },\n {\n id: 'faq-010',\n category: 'Delivery & Workers',\n question: 'How do I become a delivery worker?',\n answer:\n 'Apply through the \"Join as Worker\" section on the app. You\\'ll need a valid driving license, vehicle registration (bike/scooter), Aadhaar card, PAN card, and a smartphone with GPS. After document verification and background check (3-5 days), you\\'ll receive online training and can start accepting delivery requests.',\n helpful: 0,\n tags: ['worker', 'delivery', 'application', 'requirements'],\n },\n {\n id: 'faq-011',\n category: 'Delivery & Workers',\n question: 'How is delivery worker pay calculated?',\n answer:\n 'Delivery pay includes a base fee per delivery (varies by distance), surge pricing during peak hours, and tips from customers. You also earn bonuses for completing a certain number of deliveries per day/week. Payments are settled daily to your registered bank account.',\n helpful: 0,\n tags: ['pay', 'earnings', 'delivery', 'worker'],\n },\n {\n id: 'faq-012',\n category: 'Investors',\n question: 'What are the minimum investment requirements?',\n answer:\n \"The minimum investment amount varies by cart and investment type, typically starting from ₹50,000. You can invest in individual carts or diversified portfolios. Expected annual returns range from 12-18%, depending on the cart's performance. All investments are subject to market risk.\",\n helpful: 0,\n tags: ['investment', 'minimum', 'returns', 'portfolio'],\n },\n {\n id: 'faq-013',\n category: 'Investors',\n question: 'How are returns distributed?',\n answer:\n \"Returns are distributed monthly based on the cart's revenue performance. You can view detailed performance reports, revenue breakdowns, and ROI analytics in your Investor Dashboard. Funds can be withdrawn to your bank account with a 3-day processing time.\",\n helpful: 0,\n tags: ['returns', 'distribution', 'revenue', 'investor'],\n },\n {\n id: 'faq-014',\n category: 'Technical Issues',\n question: 'The app is not working properly. What should I do?',\n answer:\n 'Try these steps: 1) Close and restart the app, 2) Check your internet connection (try switching between WiFi and mobile data), 3) Update to the latest app version from the app store, 4) Clear app cache from your phone settings, 5) Restart your device. If the issue persists, create a support ticket with details about the problem, your device model, and app version.',\n helpful: 0,\n tags: ['technical', 'app', 'troubleshooting', 'bug'],\n },\n {\n id: 'faq-015',\n category: 'Technical Issues',\n question: 'Why am I not receiving notifications?',\n answer:\n 'Ensure notifications are enabled in both your phone settings and the app settings. Go to Phone Settings > Apps > Kadaikodi > Notifications and enable all categories. Also check the app: Settings > Preferences > Notification Settings. If using battery optimization, add Kadaikodi to the exception list.',\n helpful: 0,\n tags: ['notifications', 'technical', 'settings'],\n },\n {\n id: 'faq-016',\n category: 'Billing & Refunds',\n question: 'How do I request a refund?',\n answer:\n 'Refunds can be requested within 24 hours of order placement if the order hasn\\'t been prepared. Go to \"My Orders\" > Select the order > \"Request Refund\". You\\'ll need to select a reason. Refunds for quality issues can be raised within 2 hours of delivery. Refunds are processed within 3-5 business days to your original payment method.',\n helpful: 0,\n tags: ['refund', 'cancellation', 'billing', 'money'],\n },\n {\n id: 'faq-017',\n category: 'Billing & Refunds',\n question: 'Where can I find my payment receipts?',\n answer:\n 'All payment receipts are available under My Orders > Select Order > View Receipt. You can also find consolidated billing statements under Settings > Billing > Invoice History. Receipts can be downloaded as PDF or emailed to your registered address.',\n helpful: 0,\n tags: ['receipt', 'invoice', 'billing', 'download'],\n },\n {\n id: 'faq-018',\n category: 'Privacy & Security',\n question: 'How is my personal data protected?',\n answer:\n \"We follow industry-standard encryption (AES-256) for all personal data at rest and TLS 1.3 for data in transit. We are compliant with India's DPDP Act. You can control your data sharing preferences in Settings > Privacy. We never sell your personal information to third parties.\",\n helpful: 0,\n tags: ['privacy', 'data', 'encryption', 'security'],\n },\n {\n id: 'faq-019',\n category: 'Privacy & Security',\n question: 'How do I enable two-factor authentication?',\n answer:\n 'Go to Settings > Security > Two-Factor Authentication and toggle it on. You can choose between SMS OTP or an authenticator app (Google Authenticator, Authy). We strongly recommend enabling 2FA for enhanced account security, especially for Cart Owners and Investors.',\n helpful: 0,\n tags: ['2fa', 'authentication', 'security', 'account'],\n },\n {\n id: 'faq-020',\n category: 'Privacy & Security',\n question: 'How can I delete my account?',\n answer:\n 'You can request account deletion from Settings > Privacy > Delete Account. Please note: this action is irreversible. All your data, order history, and wallet balance will be permanently removed after a 30-day cooling period. Pending orders or investments must be settled before deletion.',\n helpful: 0,\n tags: ['delete', 'account', 'privacy', 'data'],\n },\n];\n\nconst POPULAR_ARTICLES: PopularArticle[] = [\n {\n id: 'art-1',\n title: 'Getting Started with Kadaikodi',\n category: 'Getting Started',\n faqCategory: 'Account & Profile',\n },\n {\n id: 'art-2',\n title: 'How to Place Your First Order',\n category: 'Orders',\n faqCategory: 'Orders & Payments',\n },\n {\n id: 'art-3',\n title: 'Understanding Investment Returns',\n category: 'Investors',\n faqCategory: 'Investors',\n },\n {\n id: 'art-4',\n title: 'Setting Up Your Cart Business',\n category: 'Cart Owners',\n faqCategory: 'Cart Owners',\n },\n {\n id: 'art-5',\n title: 'Payment Troubleshooting Guide',\n category: 'Payments',\n faqCategory: 'Orders & Payments',\n },\n {\n id: 'art-6',\n title: 'Delivery Partner Onboarding Guide',\n category: 'Workers',\n faqCategory: 'Delivery & Workers',\n },\n];\n\n// ============================================================================\n// Helper functions\n// ============================================================================\n\nfunction getStatusIcon(status: SupportTicket['status']) {\n switch (status) {\n case 'open':\n return Circle;\n case 'in-progress':\n return CircleDot;\n case 'resolved':\n return CheckCircle2;\n case 'closed':\n return XCircle;\n }\n}\n\nfunction getStatusColor(status: SupportTicket['status']): string {\n switch (status) {\n case 'open':\n return 'bg-[var(--color-accent-soft)] text-text-primary';\n case 'in-progress':\n return 'bg-status-warning-bg-subtle text-status-warning-text';\n case 'resolved':\n return 'bg-status-success-bg-subtle text-status-success-text';\n case 'closed':\n return 'bg-bg-sunken text-text-secondary';\n }\n}\n\nfunction getPriorityColor(priority: SupportTicket['priority']): string {\n switch (priority) {\n case 'urgent':\n return 'bg-status-error-bg-subtle text-status-error-text';\n case 'high':\n return 'bg-status-warning-bg-subtle text-status-warning-text';\n case 'medium':\n return 'bg-[var(--color-accent-soft)] text-text-primary';\n case 'low':\n return 'bg-bg-sunken text-text-secondary';\n }\n}\n\nfunction formatStatusLabel(status: string): string {\n return status.replace('-', ' ').replace(/\\b\\w/g, (c) => c.toUpperCase());\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport function HelpSupportPage() {\n // Section & navigation\n const [activeSection, setActiveSection] = useState<ActiveSection>('faq');\n\n // FAQ state\n const [searchQuery, setSearchQuery] = useState('');\n const [selectedCategory, setSelectedCategory] = useState('');\n const [expandedFaq, setExpandedFaq] = useState<string | null>(null);\n const faqs = MOCK_FAQS;\n // Local-only \"was this helpful\" acknowledgement. Not persisted anywhere and\n // deliberately shows no vote tally so it never implies a global count.\n const [helpfulVotes, setHelpfulVotes] = useState<Set<string>>(() => new Set());\n\n // Ticket state — there is no kadaikodi support-ticket backend for this\n // pre-launch product, so \"My Tickets\" stays an honest empty state and the\n // submit form composes a real email to support instead of fabricating one.\n const [tickets] = useState<SupportTicket[]>([]);\n const [showTicketForm, setShowTicketForm] = useState(false);\n const [ticketSuccess, setTicketSuccess] = useState('');\n const [ticketError, setTicketError] = useState('');\n const [ticketForm, setTicketForm] = useState({\n subject: '',\n category: '',\n priority: 'medium' as SupportTicket['priority'],\n description: '',\n });\n\n // FAQ filtering\n const filteredFaqs = useMemo(() => {\n return faqs.filter((faq) => {\n const matchesSearch =\n !searchQuery ||\n faq.question.toLowerCase().includes(searchQuery.toLowerCase()) ||\n faq.answer.toLowerCase().includes(searchQuery.toLowerCase()) ||\n faq.tags.some((tag) => tag.toLowerCase().includes(searchQuery.toLowerCase()));\n const matchesCategory = !selectedCategory || faq.category === selectedCategory;\n return matchesSearch && matchesCategory;\n });\n }, [faqs, searchQuery, selectedCategory]);\n\n // Ticket stats\n const ticketStats = useMemo(() => {\n const open = tickets.filter((t) => t.status === 'open').length;\n const inProgress = tickets.filter((t) => t.status === 'in-progress').length;\n const resolved = tickets.filter((t) => t.status === 'resolved').length;\n const closed = tickets.filter((t) => t.status === 'closed').length;\n return { open, inProgress, resolved, closed, total: tickets.length };\n }, [tickets]);\n\n // Handlers\n const toggleFaq = (id: string) => {\n setExpandedFaq((prev) => (prev === id ? null : id));\n };\n\n const handleMarkHelpful = (faqId: string) => {\n setHelpfulVotes((prev) => {\n if (prev.has(faqId)) return prev;\n const next = new Set(prev);\n next.add(faqId);\n return next;\n });\n };\n\n const openArticleFaq = (faqCategory: (typeof FAQ_CATEGORIES)[number]) => {\n setSearchQuery('');\n setSelectedCategory(faqCategory);\n setActiveSection('faq');\n window.scrollTo({ top: 0, behavior: 'smooth' });\n };\n\n const handleContactMethod = (method: ContactMethod) => {\n switch (method.type) {\n case 'email':\n window.location.href = `mailto:${method.value}`;\n break;\n case 'phone':\n window.location.href = `tel:${method.value.replace(/[^0-9+]/g, '')}`;\n break;\n case 'whatsapp':\n window.open(`https://wa.me/${method.value.replace(/[^0-9]/g, '')}`, '_blank');\n break;\n case 'chat':\n // Live chat is not available yet; the button is disabled, so this is a no-op.\n break;\n }\n };\n\n // No kadaikodi ticketing backend — send the request as a real email to support\n // rather than fabricating a ticket. Honest and functional.\n const handleSubmitTicket = () => {\n setTicketError('');\n setTicketSuccess('');\n\n if (!ticketForm.subject.trim()) {\n setTicketError('Please enter a subject for your ticket.');\n return;\n }\n if (!ticketForm.description.trim()) {\n setTicketError('Please describe your issue in the description field.');\n return;\n }\n if (!ticketForm.category) {\n setTicketError('Please select a category.');\n return;\n }\n\n const subject = encodeURIComponent(\n `[${ticketForm.priority.toUpperCase()}] ${ticketForm.subject}`\n );\n const body = encodeURIComponent(\n `Category: ${ticketForm.category}\\nPriority: ${ticketForm.priority}\\n\\n${ticketForm.description}`\n );\n window.location.href = `mailto:support@kadaikodi.com?subject=${subject}&body=${body}`;\n\n setTicketForm({ subject: '', category: '', priority: 'medium', description: '' });\n setShowTicketForm(false);\n setTicketSuccess(\n 'Opening your email app to send this to support@kadaikodi.com. Our team replies within 24 hours.'\n );\n window.setTimeout(() => setTicketSuccess(''), 6000);\n };\n\n // Navigation tabs\n const sectionTabs: Array<{ id: ActiveSection; label: string; icon: typeof HelpCircle }> = [\n { id: 'faq', label: 'FAQ', icon: HelpCircle },\n { id: 'contact', label: 'Contact Us', icon: Phone },\n { id: 'tickets', label: 'My Tickets', icon: Ticket },\n ];\n\n return (\n <PageLayout\n title=\"Help & Support\"\n description=\"Find answers, contact support, or track your requests\"\n >\n {/* Success message */}\n {ticketSuccess && (\n <div className=\"mb-4 flex items-center gap-2 rounded-lg border border-status-success-text/30 bg-status-success-bg-subtle px-4 py-3 text-sm text-status-success-text\">\n <CheckCircle2 className=\"h-4 w-4 shrink-0\" />\n {ticketSuccess}\n <button type=\"button\" onClick={() => setTicketSuccess('')} className=\"ml-auto\">\n <X className=\"h-4 w-4\" />\n </button>\n </div>\n )}\n\n <PagePurpose className=\"mb-6\">\n Stuck or have a question? Start here. Use this page to search FAQs and help articles, browse\n topics by category, reach our support team, and track any requests you&apos;ve raised — so\n you can get unblocked fast without leaving the app. Search first; if you still need a human,\n open a ticket and follow it under your requests.\n </PagePurpose>\n\n {/* Search Bar — the one emphasis zone for this page */}\n <EmphasisPanel className=\"mb-6\">\n <h2 className=\"mb-3 text-base font-semibold text-text-primary\">How can we help?</h2>\n <div className=\"relative\">\n <Search className=\"absolute left-3 top-1/2 h-5 w-5 -translate-y-1/2 text-text-secondary\" />\n <input\n type=\"text\"\n value={searchQuery}\n onChange={(e) => {\n setSearchQuery(e.target.value);\n if (activeSection !== 'faq') setActiveSection('faq');\n }}\n placeholder=\"Search help articles, FAQs, and more...\"\n className=\"w-full rounded-lg border border-border-subtle bg-bg-surface py-3 pl-10 pr-10 text-sm text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n {searchQuery && (\n <button\n type=\"button\"\n onClick={() => setSearchQuery('')}\n className=\"absolute right-3 top-1/2 -translate-y-1/2 text-text-secondary hover:text-text-primary\"\n >\n <X className=\"h-4 w-4\" />\n </button>\n )}\n </div>\n </EmphasisPanel>\n\n {/* Help Category Cards */}\n <section className=\"mb-6\">\n <h2 className=\"text-lg font-semibold text-text-primary mb-3\">Browse Help Topics</h2>\n <div className=\"grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-3\">\n {HELP_CATEGORIES.map((cat) => {\n const CatIcon = cat.icon;\n return (\n <button\n key={cat.label}\n type=\"button\"\n onClick={() => {\n setSelectedCategory(cat.label === selectedCategory ? '' : cat.label);\n setActiveSection('faq');\n }}\n className={cn(\n 'flex items-start gap-3 rounded-lg border bg-bg-surface p-4 text-left transition-all hover:shadow-sm',\n selectedCategory === cat.label\n ? 'border-primary ring-1 ring-primary'\n : 'border-border-subtle'\n )}\n >\n <div\n className={cn(\n 'flex h-10 w-10 shrink-0 items-center justify-center rounded-lg',\n cat.color\n )}\n >\n <CatIcon className=\"h-5 w-5\" />\n </div>\n <div>\n <p className=\"text-sm font-semibold text-text-primary\">{cat.label}</p>\n <p className=\"text-xs text-text-secondary\">{cat.description}</p>\n </div>\n </button>\n );\n })}\n </div>\n </section>\n\n {/* Navigation Tabs */}\n <section className=\"mb-6\">\n <div className=\"flex space-x-1 bg-bg-sunken p-1 rounded-lg w-full sm:w-fit\">\n {sectionTabs.map((tab) => {\n const TabIcon = tab.icon;\n return (\n <button\n key={tab.id}\n type=\"button\"\n onClick={() => setActiveSection(tab.id)}\n className={cn(\n 'flex flex-1 sm:flex-none items-center justify-center gap-2 rounded-md px-4 py-2 text-sm font-medium transition-colors',\n activeSection === tab.id\n ? 'bg-bg-surface text-text-primary shadow-sm'\n : 'text-text-secondary hover:text-text-primary'\n )}\n >\n <TabIcon className=\"h-4 w-4\" />\n <span>{tab.label}</span>\n {tab.id === 'tickets' && ticketStats.open > 0 && (\n <span className=\"flex h-5 min-w-[20px] items-center justify-center rounded-full bg-action-primary-bg px-1.5 text-xs font-medium text-action-primary-text\">\n {ticketStats.open}\n </span>\n )}\n </button>\n );\n })}\n </div>\n </section>\n\n {/* ================================================================ */}\n {/* FAQ Section */}\n {/* ================================================================ */}\n {activeSection === 'faq' && (\n <div>\n {/* Category filter dropdown */}\n <div className=\"mb-4 flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between\">\n <p className=\"text-sm text-text-secondary\">\n {filteredFaqs.length} question{filteredFaqs.length !== 1 ? 's' : ''} found\n {selectedCategory && (\n <span>\n {' '}\n in <span className=\"font-medium text-text-primary\">{selectedCategory}</span>\n <button\n type=\"button\"\n onClick={() => setSelectedCategory('')}\n className=\"ml-1 text-primary hover:underline\"\n >\n (clear)\n </button>\n </span>\n )}\n </p>\n <select\n value={selectedCategory}\n onChange={(e) => setSelectedCategory(e.target.value)}\n className=\"rounded-lg border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n >\n <option value=\"\">All Categories</option>\n {FAQ_CATEGORIES.map((cat) => (\n <option key={cat} value={cat}>\n {cat}\n </option>\n ))}\n </select>\n </div>\n\n {/* FAQ Accordion */}\n {filteredFaqs.length > 0 ? (\n <div className=\"space-y-3\">\n {filteredFaqs.map((faq) => {\n const isExpanded = expandedFaq === faq.id;\n return (\n <div\n key={faq.id}\n className=\"rounded-lg border border-border-subtle bg-bg-surface overflow-hidden\"\n >\n <button\n type=\"button\"\n onClick={() => toggleFaq(faq.id)}\n className=\"flex w-full items-start justify-between gap-3 px-4 py-4 text-left hover:bg-accent/50 transition-colors\"\n >\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex flex-wrap items-center gap-2 mb-1\">\n <span className=\"inline-flex items-center rounded-full bg-bg-sunken px-2 py-0.5 text-xs font-medium text-text-secondary\">\n {faq.category}\n </span>\n </div>\n <span\n className={cn(\n 'text-sm',\n isExpanded\n ? 'font-semibold text-text-primary'\n : 'font-medium text-text-primary'\n )}\n >\n {faq.question}\n </span>\n </div>\n {isExpanded ? (\n <ChevronUp className=\"h-4 w-4 text-text-secondary shrink-0 mt-1\" />\n ) : (\n <ChevronDown className=\"h-4 w-4 text-text-secondary shrink-0 mt-1\" />\n )}\n </button>\n {isExpanded && (\n <div className=\"border-t border-border-subtle px-4 pb-4 pt-3\">\n <p className=\"text-sm text-text-secondary leading-relaxed mb-3\">\n {faq.answer}\n </p>\n <div className=\"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between\">\n <div className=\"flex flex-wrap gap-1.5\">\n {faq.tags.map((tag) => (\n <span\n key={tag}\n className=\"inline-flex items-center gap-1 rounded-full bg-bg-sunken px-2 py-0.5 text-xs text-text-secondary\"\n >\n <Tag className=\"h-2.5 w-2.5\" />\n {tag}\n </span>\n ))}\n </div>\n {helpfulVotes.has(faq.id) ? (\n <span className=\"flex items-center gap-1.5 rounded-lg border border-status-success-text/30 bg-status-success-bg-subtle px-3 py-1.5 text-xs font-medium text-status-success-text\">\n <ThumbsUp className=\"h-3.5 w-3.5\" />\n Thanks for your feedback\n </span>\n ) : (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n handleMarkHelpful(faq.id);\n }}\n className=\"flex items-center gap-1.5 rounded-lg border border-border-subtle px-3 py-1.5 text-xs font-medium text-text-secondary hover:bg-accent hover:text-text-primary transition-colors\"\n >\n <ThumbsUp className=\"h-3.5 w-3.5\" />\n Was this helpful?\n </button>\n )}\n </div>\n </div>\n )}\n </div>\n );\n })}\n </div>\n ) : (\n <EmptyState\n illustration=\"empty-search\"\n title=\"No FAQs found\"\n description=\"Try adjusting your search or browse different categories. If you still can't find an answer, contact support.\"\n action={\n <button\n type=\"button\"\n onClick={() => {\n setSearchQuery('');\n setSelectedCategory('');\n }}\n className=\"rounded-lg border border-border-subtle px-4 py-2 text-sm font-medium text-text-primary hover:bg-accent transition-colors\"\n >\n Clear all filters\n </button>\n }\n />\n )}\n </div>\n )}\n\n {/* ================================================================ */}\n {/* Contact Section */}\n {/* ================================================================ */}\n {activeSection === 'contact' && (\n <div className=\"space-y-6\">\n {/* Contact Methods Grid */}\n <div>\n <h2 className=\"text-base font-semibold text-text-primary mb-3\">Get in Touch</h2>\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2\">\n {CONTACT_METHODS.map((method) => {\n const MethodIcon = method.icon;\n return (\n <div\n key={method.type}\n className=\"rounded-lg border border-border-subtle bg-bg-surface p-5\"\n >\n <div className=\"flex items-start gap-4\">\n <div className=\"flex h-12 w-12 shrink-0 items-center justify-center rounded-lg bg-bg-sunken\">\n <MethodIcon className=\"h-6 w-6 text-text-secondary\" />\n </div>\n <div className=\"flex-1 min-w-0\">\n <h3 className=\"text-sm font-semibold text-text-primary\">{method.label}</h3>\n <p className=\"text-sm text-text-primary mt-0.5 break-words\">\n {method.value}\n </p>\n <div className=\"flex items-center gap-1 mt-1 text-xs text-text-secondary\">\n <Clock className=\"h-3 w-3\" />\n {method.responseTime}\n </div>\n <button\n type=\"button\"\n onClick={() => handleContactMethod(method)}\n disabled={!method.available}\n className={cn(\n 'mt-3 flex items-center gap-1.5 rounded-lg px-4 py-2 text-sm font-medium transition-colors',\n method.available\n ? 'bg-action-primary-bg text-action-primary-text hover:bg-action-primary-bg/90'\n : 'bg-bg-sunken text-text-secondary cursor-not-allowed'\n )}\n >\n {method.type === 'chat'\n ? 'Coming soon'\n : method.type === 'email'\n ? 'Send Email'\n : 'Contact'}\n {method.available && <ExternalLink className=\"h-3.5 w-3.5\" />}\n </button>\n </div>\n </div>\n </div>\n );\n })}\n </div>\n </div>\n\n {/* Submit Ticket Section */}\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface\">\n <div className=\"flex items-center justify-between border-b border-border-subtle px-5 py-4\">\n <div>\n <h2 className=\"text-base font-semibold text-text-primary\">\n Submit a Support Ticket\n </h2>\n <p className=\"text-xs text-text-secondary mt-0.5\">\n Can't find your answer? Create a ticket and our team will help.\n </p>\n </div>\n <button\n type=\"button\"\n onClick={() => setShowTicketForm(!showTicketForm)}\n className=\"flex items-center gap-1.5 rounded-lg bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90 transition-colors\"\n >\n <Ticket className=\"h-4 w-4\" />\n {showTicketForm ? 'Close' : 'New Ticket'}\n </button>\n </div>\n\n {showTicketForm && (\n <div className=\"p-5 space-y-4\">\n {/* Error message */}\n {ticketError && (\n <div className=\"flex items-center gap-2 rounded-lg border border-status-error-text/30 bg-status-error-bg-subtle px-3 py-2 text-sm text-status-error-text\">\n <AlertCircle className=\"h-4 w-4 shrink-0\" />\n {ticketError}\n </div>\n )}\n\n {/* Subject */}\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1.5\">\n Subject <span className=\"text-status-error-text\">*</span>\n </label>\n <input\n type=\"text\"\n value={ticketForm.subject}\n onChange={(e) =>\n setTicketForm((prev) => ({ ...prev, subject: e.target.value }))\n }\n placeholder=\"Brief description of your issue\"\n className=\"w-full rounded-lg border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n </div>\n\n {/* Category & Priority */}\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2\">\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1.5\">\n Category <span className=\"text-status-error-text\">*</span>\n </label>\n <select\n value={ticketForm.category}\n onChange={(e) =>\n setTicketForm((prev) => ({ ...prev, category: e.target.value }))\n }\n className=\"w-full rounded-lg border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n >\n <option value=\"\">Select category</option>\n {FAQ_CATEGORIES.map((cat) => (\n <option key={cat} value={cat}>\n {cat}\n </option>\n ))}\n </select>\n </div>\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1.5\">\n Priority\n </label>\n <select\n value={ticketForm.priority}\n onChange={(e) =>\n setTicketForm((prev) => ({\n ...prev,\n priority: e.target.value as SupportTicket['priority'],\n }))\n }\n className=\"w-full rounded-lg border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n >\n <option value=\"low\">Low</option>\n <option value=\"medium\">Medium</option>\n <option value=\"high\">High</option>\n <option value=\"urgent\">Urgent</option>\n </select>\n </div>\n </div>\n\n {/* Description */}\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1.5\">\n Description <span className=\"text-status-error-text\">*</span>\n </label>\n <textarea\n rows={5}\n value={ticketForm.description}\n onChange={(e) =>\n setTicketForm((prev) => ({ ...prev, description: e.target.value }))\n }\n placeholder=\"Please describe your issue in detail...\"\n className=\"w-full rounded-lg border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)] resize-none\"\n />\n </div>\n\n {/* Tips */}\n <div className=\"rounded-lg bg-[var(--color-accent-soft)] border border-border-focus/20 p-4\">\n <div className=\"flex items-center gap-2 mb-2\">\n <Lightbulb className=\"h-4 w-4 text-text-primary\" />\n <h4 className=\"text-sm font-medium text-text-primary\">\n Tips for faster resolution\n </h4>\n </div>\n <ul className=\"text-xs text-text-primary space-y-1 ml-6 list-disc\">\n <li>Be specific about the issue and include steps to reproduce it</li>\n <li>Include relevant order IDs, transaction IDs, or error messages</li>\n <li>Mention your device type and app version for technical issues</li>\n <li>Attach screenshots if they help illustrate the problem</li>\n </ul>\n </div>\n\n {/* Submit buttons */}\n <div className=\"flex items-center gap-3 pt-1\">\n <button\n type=\"button\"\n onClick={handleSubmitTicket}\n className=\"flex items-center gap-2 rounded-lg bg-action-primary-bg px-5 py-2.5 text-sm font-medium text-action-primary-text transition-colors hover:bg-action-primary-bg/90\"\n >\n <Send className=\"h-4 w-4\" />\n Email Support\n </button>\n <button\n type=\"button\"\n onClick={() => {\n setShowTicketForm(false);\n setTicketError('');\n }}\n className=\"rounded-lg border border-border-subtle px-4 py-2.5 text-sm font-medium text-text-primary hover:bg-accent transition-colors\"\n >\n Cancel\n </button>\n </div>\n </div>\n )}\n </div>\n\n {/* Support Hours & Emergency */}\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2\">\n {/* Support Hours */}\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-5\">\n <div className=\"flex items-center gap-2 mb-3\">\n <Clock className=\"h-5 w-5 text-text-secondary\" />\n <h3 className=\"text-sm font-semibold text-text-primary\">Support Hours</h3>\n </div>\n <div className=\"space-y-2 text-sm\">\n <div className=\"flex justify-between\">\n <span className=\"text-text-secondary\">Monday - Friday</span>\n <span className=\"font-medium text-text-primary\">9:00 AM - 9:00 PM IST</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-text-secondary\">Saturday</span>\n <span className=\"font-medium text-text-primary\">10:00 AM - 6:00 PM IST</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-text-secondary\">Sunday</span>\n <span className=\"font-medium text-text-primary\">Closed</span>\n </div>\n <div className=\"flex justify-between pt-2 border-t border-border-subtle\">\n <span className=\"text-text-secondary\">Email Support</span>\n <span className=\"font-medium text-text-primary\">24/7</span>\n </div>\n </div>\n </div>\n\n {/* Emergency Contact */}\n <div className=\"rounded-lg border border-status-error-text/20 bg-status-error-bg-subtle p-5\">\n <div className=\"flex items-center gap-2 mb-3\">\n <AlertTriangle className=\"h-5 w-5 text-status-error-text\" />\n <h3 className=\"text-sm font-semibold text-status-error-text\">Emergency Contact</h3>\n </div>\n <p className=\"text-sm text-status-error-text mb-3\">\n For urgent issues like safety concerns, fraud, or account compromise:\n </p>\n <div className=\"space-y-2\">\n <div className=\"flex items-center gap-2 text-sm\">\n <Phone className=\"h-4 w-4 text-status-error-text\" />\n <span className=\"font-medium text-status-error-text\">+91 80-4012-9999</span>\n <span className=\"text-xs text-status-error-text\">(24/7)</span>\n </div>\n <div className=\"flex items-center gap-2 text-sm\">\n <Mail className=\"h-4 w-4 text-status-error-text\" />\n <span className=\"font-medium text-status-error-text\">\n emergency@kadaikodi.com\n </span>\n </div>\n </div>\n </div>\n </div>\n\n {/* Popular Articles */}\n <div>\n <h2 className=\"text-base font-semibold text-text-primary mb-3\">Popular Articles</h2>\n <div className=\"grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-3\">\n {POPULAR_ARTICLES.map((article) => (\n <button\n key={article.id}\n type=\"button\"\n onClick={() => openArticleFaq(article.faqCategory)}\n className=\"flex items-start gap-3 rounded-lg border border-border-subtle bg-bg-surface p-4 text-left hover:bg-accent/50 transition-colors\"\n >\n <FileText className=\"h-5 w-5 text-text-secondary shrink-0 mt-0.5\" />\n <div className=\"min-w-0\">\n <p className=\"text-sm font-medium text-text-primary truncate\">\n {article.title}\n </p>\n <div className=\"flex items-center gap-2 mt-1\">\n <span className=\"text-xs text-text-secondary\">{article.category}</span>\n </div>\n </div>\n </button>\n ))}\n </div>\n </div>\n </div>\n )}\n\n {/* ================================================================ */}\n {/* My Tickets Section */}\n {/* ================================================================ */}\n {activeSection === 'tickets' && (\n <div className=\"space-y-4\">\n {/* Ticket Stats */}\n <div className=\"grid grid-cols-2 gap-3 sm:grid-cols-4\">\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-3 text-center\">\n <p className=\"text-2xl font-bold text-text-primary\">{ticketStats.total}</p>\n <p className=\"text-xs text-text-secondary\">Total</p>\n </div>\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-3 text-center\">\n <p className=\"text-2xl font-bold text-text-primary\">{ticketStats.open}</p>\n <p className=\"text-xs text-text-secondary\">Open</p>\n </div>\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-3 text-center\">\n <p className=\"text-2xl font-bold text-status-warning-text\">\n {ticketStats.inProgress}\n </p>\n <p className=\"text-xs text-text-secondary\">In Progress</p>\n </div>\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-3 text-center\">\n <p className=\"text-2xl font-bold text-status-success-text\">{ticketStats.resolved}</p>\n <p className=\"text-xs text-text-secondary\">Resolved</p>\n </div>\n </div>\n\n {/* Header with New Ticket button */}\n <div className=\"flex items-center justify-between\">\n <p className=\"text-sm text-text-secondary\">\n {tickets.length} ticket{tickets.length !== 1 ? 's' : ''}\n </p>\n <button\n type=\"button\"\n onClick={() => {\n setShowTicketForm(true);\n setActiveSection('contact');\n }}\n className=\"flex items-center gap-1.5 rounded-lg bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90 transition-colors\"\n >\n <Ticket className=\"h-4 w-4\" />\n New Ticket\n </button>\n </div>\n\n {/* Ticket List */}\n {tickets.length === 0 ? (\n <EmptyState\n illustration=\"empty-notifications\"\n title=\"No support tickets\"\n description=\"You haven't created any support tickets yet. If something needs a human, open one and we'll follow up here.\"\n action={\n <button\n type=\"button\"\n onClick={() => {\n setShowTicketForm(true);\n setActiveSection('contact');\n }}\n className=\"inline-flex items-center gap-1.5 rounded-lg bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90 transition-colors\"\n >\n <Ticket className=\"h-4 w-4\" />\n Create Your First Ticket\n </button>\n }\n />\n ) : (\n <div className=\"space-y-4\">\n {tickets.map((ticket) => {\n const StatusIcon = getStatusIcon(ticket.status);\n const lastResponse =\n ticket.responses.length > 0\n ? ticket.responses[ticket.responses.length - 1]\n : null;\n\n return (\n <div\n key={ticket.id}\n className=\"rounded-lg border border-border-subtle bg-bg-surface overflow-hidden\"\n >\n {/* Ticket Header */}\n <div className=\"p-4 sm:p-5\">\n <div className=\"flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between\">\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center gap-2 mb-1\">\n <StatusIcon\n className={cn(\n 'h-4 w-4',\n getStatusColor(ticket.status).split(' ').slice(1).join(' ')\n )}\n />\n <h3 className=\"text-sm font-semibold text-text-primary truncate\">\n {ticket.subject}\n </h3>\n </div>\n <p className=\"text-xs text-text-secondary\">\n {ticket.category} &middot; {ticket.id}\n </p>\n </div>\n <div className=\"flex flex-wrap gap-2\">\n <span\n className={cn(\n 'inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium',\n getPriorityColor(ticket.priority)\n )}\n >\n {ticket.priority.toUpperCase()}\n </span>\n <span\n className={cn(\n 'inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium',\n getStatusColor(ticket.status)\n )}\n >\n {formatStatusLabel(ticket.status)}\n </span>\n </div>\n </div>\n\n <p className=\"text-sm text-text-secondary mt-2 leading-relaxed\">\n {ticket.description}\n </p>\n\n {/* Latest Response */}\n {lastResponse && (\n <div className=\"mt-3 rounded-lg bg-bg-sunken/50 border border-border-subtle p-3\">\n <div className=\"flex items-center gap-1.5 mb-1\">\n <MessageSquare className=\"h-3.5 w-3.5 text-text-secondary\" />\n <span className=\"text-xs font-medium text-text-primary\">\n {lastResponse.sender === 'support' ? 'Support Team' : 'You'}\n </span>\n <span className=\"text-xs text-text-secondary\">\n &middot; {formatDate(lastResponse.timestamp)}\n </span>\n </div>\n <p className=\"text-sm text-text-secondary\">{lastResponse.message}</p>\n </div>\n )}\n\n {/* No responses yet */}\n {ticket.responses.length === 0 && ticket.status === 'open' && (\n <div className=\"mt-3 flex items-center gap-2 text-xs text-text-secondary\">\n <Info className=\"h-3.5 w-3.5\" />\n Awaiting response from support team\n </div>\n )}\n </div>\n\n {/* Ticket Footer */}\n <div className=\"flex flex-col gap-1 border-t border-border-subtle bg-bg-sunken/30 px-4 py-2.5 sm:flex-row sm:items-center sm:justify-between text-xs text-text-secondary\">\n <span>Created: {formatDate(ticket.createdAt)}</span>\n <span>Updated: {formatDate(ticket.updatedAt)}</span>\n <span>\n {ticket.responses.length} response{ticket.responses.length !== 1 ? 's' : ''}\n </span>\n </div>\n </div>\n );\n })}\n </div>\n )}\n </div>\n )}\n\n {/* ================================================================ */}\n {/* Footer Info */}\n {/* ================================================================ */}\n <section className=\"mt-8 rounded-lg border border-border-subtle bg-bg-sunken/30 p-5\">\n <div className=\"flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between\">\n <div>\n <h3 className=\"text-sm font-semibold text-text-primary mb-1\">Still need help?</h3>\n <p className=\"text-xs text-text-secondary\">\n Our support team is available Monday to Saturday. Average response time is under 4\n hours.\n </p>\n </div>\n <div className=\"flex flex-wrap gap-2\">\n <button\n type=\"button\"\n onClick={() => handleContactMethod(CONTACT_METHODS[0])}\n className=\"flex items-center gap-1.5 rounded-lg border border-border-subtle bg-bg-surface px-3 py-2 text-xs font-medium text-text-primary hover:bg-accent transition-colors\"\n >\n <Mail className=\"h-3.5 w-3.5\" />\n Email Us\n </button>\n <button\n type=\"button\"\n onClick={() => handleContactMethod(CONTACT_METHODS[1])}\n className=\"flex items-center gap-1.5 rounded-lg border border-border-subtle bg-bg-surface px-3 py-2 text-xs font-medium text-text-primary hover:bg-accent transition-colors\"\n >\n <Phone className=\"h-3.5 w-3.5\" />\n Call Us\n </button>\n <button\n type=\"button\"\n onClick={() => {\n setShowTicketForm(true);\n setActiveSection('contact');\n }}\n className=\"flex items-center gap-1.5 rounded-lg bg-action-primary-bg px-3 py-2 text-xs font-medium text-action-primary-text hover:bg-action-primary-bg/90 transition-colors\"\n >\n <Ticket className=\"h-3.5 w-3.5\" />\n Submit Ticket\n </button>\n </div>\n </div>\n </section>\n </PageLayout>\n );\n}\n"],"mappings":";;;;;;;;;AA2GA,IAAM,IAAiB;CACrB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,EAEK,IAAkB;CACtB;EACE,OAAO;EACP,MAAM;EACN,aAAa;EACb,OAAO;EACR;CACD;EACE,OAAO;EACP,MAAM;EACN,aAAa;EACb,OAAO;EACR;CACD;EACE,OAAO;EACP,MAAM;EACN,aAAa;EACb,OAAO;EACR;CACD;EACE,OAAO;EACP,MAAM;EACN,aAAa;EACb,OAAO;EACR;CACD;EACE,OAAO;EACP,MAAM;EACN,aAAa;EACb,OAAO;EACR;CACD;EACE,OAAO;EACP,MAAM;EACN,aAAa;EACb,OAAO;EACR;CACD;EACE,OAAO;EACP,MAAM;EACN,aAAa;EACb,OAAO;EACR;CACD;EACE,OAAO;EACP,MAAM;EACN,aAAa;EACb,OAAO;EACR;CACD;EACE,OAAO;EACP,MAAM;EACN,aAAa;EACb,OAAO;EACR;CACF,EAEK,IAAmC;CACvC;EACE,MAAM;EACN,OAAO;EACP,OAAO;EACP,WAAW;EACX,cAAc;EACd,MAAM;EACP;CACD;EACE,MAAM;EACN,OAAO;EACP,OAAO;EACP,WAAW;EACX,cAAc;EACd,MAAM;EACP;CACD;EACE,MAAM;EACN,OAAO;EACP,OAAO;EACP,WAAW;EACX,cAAc;EACd,MAAM;EACP;CACD;EACE,MAAM;EACN,OAAO;EACP,OAAO;EACP,WAAW;EACX,cAAc;EACd,MAAM;EACP;CACF,EAEK,IAAuB;CAC3B;EACE,IAAI;EACJ,UAAU;EACV,UAAU;EACV,QACE;EACF,SAAS;EACT,MAAM;GAAC;GAAW;GAAU;GAAe;EAC5C;CACD;EACE,IAAI;EACJ,UAAU;EACV,UAAU;EACV,QACE;EACF,SAAS;EACT,MAAM;GAAC;GAAY;GAAY;GAAU;EAC1C;CACD;EACE,IAAI;EACJ,UAAU;EACV,UAAU;EACV,QACE;EACF,SAAS;EACT,MAAM;GAAC;GAAQ;GAAW;GAAS;EACpC;CACD;EACE,IAAI;EACJ,UAAU;EACV,UAAU;EACV,QACE;EACF,SAAS;EACT,MAAM;GAAC;GAAW;GAAO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"}
1
+ {"version":3,"file":"HelpSupportPage.js","names":[],"sources":["../../../../src/kadaikodi/pages/common/HelpSupportPage.tsx"],"sourcesContent":["/**\n * Help & Support Page\n * @module kadaikodi/pages/common\n *\n * Full-featured help center with FAQ accordion (8 categories, search, helpful votes, tags),\n * contact support channels (email, phone, live chat, WhatsApp with response times),\n * submit ticket form with validation, my tickets section with status/priority badges,\n * popular articles, support hours, and emergency contact info.\n */\n\nimport { useState, useMemo } from 'react';\nimport {\n HelpCircle,\n ChevronDown,\n ChevronUp,\n MessageSquare,\n Phone,\n Mail,\n ShoppingBag,\n TrendingUp,\n CreditCard,\n User,\n Shield,\n Send,\n Search,\n X,\n Clock,\n ThumbsUp,\n Tag,\n Ticket,\n AlertTriangle,\n BookOpen,\n Wrench,\n Truck,\n BarChart3,\n Lock,\n FileText,\n CheckCircle2,\n CircleDot,\n Circle,\n XCircle,\n MessageCircle,\n PhoneCall,\n AlertCircle,\n Info,\n Lightbulb,\n ExternalLink,\n} from 'lucide-react';\nimport { EmphasisPanel, PagePurpose } from '@burdenoff/fe-libs/ui';\nimport { PageLayout } from '../../components/PageLayout';\nimport { EmptyState } from '../../components/EmptyState';\nimport { cn } from '../../utils/cn';\nimport { formatDate } from '../../utils/formatters';\n\n// ============================================================================\n// Types\n// ============================================================================\n\ninterface FAQItem {\n id: string;\n category: string;\n question: string;\n answer: string;\n helpful: number;\n tags: string[];\n}\n\ninterface SupportTicket {\n id: string;\n subject: string;\n category: string;\n priority: 'low' | 'medium' | 'high' | 'urgent';\n status: 'open' | 'in-progress' | 'resolved' | 'closed';\n description: string;\n createdAt: string;\n updatedAt: string;\n responses: Array<{\n id: string;\n message: string;\n sender: 'user' | 'support';\n timestamp: string;\n }>;\n}\n\ninterface ContactMethod {\n type: 'email' | 'phone' | 'chat' | 'whatsapp';\n label: string;\n value: string;\n available: boolean;\n responseTime: string;\n icon: typeof Mail;\n}\n\ninterface PopularArticle {\n id: string;\n title: string;\n category: string;\n /** FAQ category this article opens when clicked. */\n faqCategory: (typeof FAQ_CATEGORIES)[number];\n}\n\ntype ActiveSection = 'faq' | 'contact' | 'tickets';\n\n// ============================================================================\n// Constants\n// ============================================================================\n\nconst FAQ_CATEGORIES = [\n 'Account & Profile',\n 'Orders & Payments',\n 'Cart Owners',\n 'Delivery & Workers',\n 'Investors',\n 'Technical Issues',\n 'Billing & Refunds',\n 'Privacy & Security',\n] as const;\n\nconst HELP_CATEGORIES = [\n {\n label: 'Getting Started',\n icon: BookOpen,\n description: 'New to Kadaikodi? Start here',\n color: 'bg-[var(--color-accent-soft)] text-text-primary',\n },\n {\n label: 'Orders & Delivery',\n icon: ShoppingBag,\n description: 'Placing, tracking, and cancelling orders',\n color: 'bg-status-success-bg-subtle text-status-success-text',\n },\n {\n label: 'Payments & Billing',\n icon: CreditCard,\n description: 'Payment methods, refunds, and invoices',\n color: 'bg-accent-purple-subtle text-text-primary',\n },\n {\n label: 'Account & Profile',\n icon: User,\n description: 'Manage your account and settings',\n color: 'bg-status-warning-bg-subtle text-status-warning-text',\n },\n {\n label: 'Cart Owners',\n icon: Wrench,\n description: 'Running your cart business',\n color: 'bg-status-success-bg-subtle text-status-success-text',\n },\n {\n label: 'Workers & Delivery',\n icon: Truck,\n description: 'Delivery partner information',\n color: 'bg-[var(--color-accent-soft)] text-text-primary',\n },\n {\n label: 'Investments',\n icon: TrendingUp,\n description: 'Investment opportunities and returns',\n color: 'bg-status-success-bg-subtle text-status-success-text',\n },\n {\n label: 'Security & Privacy',\n icon: Shield,\n description: 'Data protection and safety',\n color: 'bg-status-error-bg-subtle text-status-error-text',\n },\n {\n label: 'Technical Issues',\n icon: AlertTriangle,\n description: 'App issues and troubleshooting',\n color: 'bg-status-warning-bg-subtle text-status-warning-text',\n },\n] as const;\n\nconst CONTACT_METHODS: ContactMethod[] = [\n {\n type: 'email',\n label: 'Email Support',\n value: 'support@kadaikodi.com',\n available: true,\n responseTime: 'Within 24 hours',\n icon: Mail,\n },\n {\n type: 'phone',\n label: 'Phone Support',\n value: '+91 80-4012-3456',\n available: true,\n responseTime: '9 AM - 9 PM IST',\n icon: PhoneCall,\n },\n {\n type: 'chat',\n label: 'Live Chat',\n value: 'Coming soon',\n available: false,\n responseTime: 'Not available yet',\n icon: MessageCircle,\n },\n {\n type: 'whatsapp',\n label: 'WhatsApp',\n value: '+91 98765-43210',\n available: true,\n responseTime: '2-4 hours',\n icon: MessageSquare,\n },\n];\n\nconst MOCK_FAQS: FAQItem[] = [\n {\n id: 'faq-001',\n category: 'Account & Profile',\n question: 'How do I create an account on Kadaikodi?',\n answer:\n 'You can create an account by clicking the \"Sign Up\" button on the homepage. You\\'ll need to provide your name, email address, phone number, and choose your role (Customer, Cart Owner, Worker, or Investor). After verification via OTP, your account will be activated immediately.',\n helpful: 0,\n tags: ['account', 'signup', 'registration'],\n },\n {\n id: 'faq-002',\n category: 'Account & Profile',\n question: 'How can I change my password?',\n answer:\n \"Go to Settings > Security > Change Password. You'll need to enter your current password and then your new password twice to confirm. Make sure your new password is at least 8 characters long and includes a mix of letters, numbers, and symbols for better security.\",\n helpful: 0,\n tags: ['password', 'security', 'account'],\n },\n {\n id: 'faq-003',\n category: 'Account & Profile',\n question: 'Can I switch my account role?',\n answer:\n 'Yes, you can request a role change from Settings > Profile > Account Role. Switching from Customer to Cart Owner or Worker requires additional verification. The process typically takes 2-3 business days. You can hold multiple roles simultaneously.',\n helpful: 0,\n tags: ['role', 'account', 'switch'],\n },\n {\n id: 'faq-004',\n category: 'Orders & Payments',\n question: 'What payment methods are accepted?',\n answer:\n 'We accept various payment methods including UPI (Google Pay, PhonePe, Paytm), credit/debit cards (Visa, Mastercard, RuPay), net banking from all major banks, and digital wallets. Some cart owners also accept cash on delivery for orders under a certain amount.',\n helpful: 0,\n tags: ['payment', 'upi', 'cards', 'wallet'],\n },\n {\n id: 'faq-005',\n category: 'Orders & Payments',\n question: 'How can I track my order in real-time?',\n answer:\n \"After placing an order, you'll receive a tracking link via SMS and email. You can also track your order in real-time through the app under \\\"My Orders\\\" section. The live map shows your delivery partner's location. You'll get push notifications at each stage: confirmed, preparing, picked up, and delivered.\",\n helpful: 0,\n tags: ['tracking', 'orders', 'delivery', 'real-time'],\n },\n {\n id: 'faq-006',\n category: 'Orders & Payments',\n question: 'How do I cancel or modify an order?',\n answer:\n \"You can cancel your order from the Order Details page if it hasn't been picked up yet. Go to My Orders > Select Order > Cancel Order. For modifications, contact the cart owner directly through the chat feature. Cancellation before preparation gets a full refund; after preparation, a partial refund may apply.\",\n helpful: 0,\n tags: ['cancel', 'modify', 'refund', 'orders'],\n },\n {\n id: 'faq-007',\n category: 'Cart Owners',\n question: 'How do I register my cart on Kadaikodi?',\n answer:\n \"To register your cart, sign up as a Cart Owner and complete the verification process. You'll need to provide business details, license documents (FSSAI for food carts, GST if applicable), photos of your cart, and your preferred operating location. Our team will review and approve your application within 2-3 business days.\",\n helpful: 0,\n tags: ['cart', 'registration', 'business', 'verification'],\n },\n {\n id: 'faq-008',\n category: 'Cart Owners',\n question: 'What commission does Kadaikodi charge?',\n answer:\n 'Kadaikodi charges an order commission that depends on your plan: 5% per completed order on Free, 4% on Starter, 2.5% on Growth and 1.5% on Business. Higher plans trade a monthly fee for a lower commission, so the cheapest plan is the one where the fee plus commission is lowest at your order volume; Enterprise rates are agreed individually. Charges levied by your payment provider are separate from this commission. Current rates for every plan are published on the Kadaikodi pricing page.',\n helpful: 0,\n tags: ['commission', 'fees', 'business', 'pricing'],\n },\n {\n id: 'faq-009',\n category: 'Cart Owners',\n question: 'How do I manage my menu and pricing?',\n answer:\n 'Go to your Cart Dashboard > Menu Management to add, edit, or remove items. You can set prices, mark items as available/unavailable, add photos and descriptions, create categories, and set up combo offers. Changes are reflected instantly on the platform.',\n helpful: 0,\n tags: ['menu', 'pricing', 'cart', 'management'],\n },\n {\n id: 'faq-010',\n category: 'Delivery & Workers',\n question: 'How do I become a delivery worker?',\n answer:\n 'Apply through the \"Join as Worker\" section on the app. You\\'ll need a valid driving license, vehicle registration (bike/scooter), Aadhaar card, PAN card, and a smartphone with GPS. After document verification and background check (3-5 days), you\\'ll receive online training and can start accepting delivery requests.',\n helpful: 0,\n tags: ['worker', 'delivery', 'application', 'requirements'],\n },\n {\n id: 'faq-011',\n category: 'Delivery & Workers',\n question: 'How is delivery worker pay calculated?',\n answer:\n 'Delivery pay includes a base fee per delivery (varies by distance), surge pricing during peak hours, and tips from customers. You also earn bonuses for completing a certain number of deliveries per day/week. Payments are settled daily to your registered bank account.',\n helpful: 0,\n tags: ['pay', 'earnings', 'delivery', 'worker'],\n },\n {\n id: 'faq-012',\n category: 'Investors',\n question: 'What are the minimum investment requirements?',\n answer:\n \"The minimum investment amount varies by cart and investment type, typically starting from ₹50,000. You can invest in individual carts or diversified portfolios. Expected annual returns range from 12-18%, depending on the cart's performance. All investments are subject to market risk.\",\n helpful: 0,\n tags: ['investment', 'minimum', 'returns', 'portfolio'],\n },\n {\n id: 'faq-013',\n category: 'Investors',\n question: 'How are returns distributed?',\n answer:\n \"Returns are distributed monthly based on the cart's revenue performance. You can view detailed performance reports, revenue breakdowns, and ROI analytics in your Investor Dashboard. Funds can be withdrawn to your bank account with a 3-day processing time.\",\n helpful: 0,\n tags: ['returns', 'distribution', 'revenue', 'investor'],\n },\n {\n id: 'faq-014',\n category: 'Technical Issues',\n question: 'The app is not working properly. What should I do?',\n answer:\n 'Try these steps: 1) Close and restart the app, 2) Check your internet connection (try switching between WiFi and mobile data), 3) Update to the latest app version from the app store, 4) Clear app cache from your phone settings, 5) Restart your device. If the issue persists, create a support ticket with details about the problem, your device model, and app version.',\n helpful: 0,\n tags: ['technical', 'app', 'troubleshooting', 'bug'],\n },\n {\n id: 'faq-015',\n category: 'Technical Issues',\n question: 'Why am I not receiving notifications?',\n answer:\n 'Ensure notifications are enabled in both your phone settings and the app settings. Go to Phone Settings > Apps > Kadaikodi > Notifications and enable all categories. Also check the app: Settings > Preferences > Notification Settings. If using battery optimization, add Kadaikodi to the exception list.',\n helpful: 0,\n tags: ['notifications', 'technical', 'settings'],\n },\n {\n id: 'faq-016',\n category: 'Billing & Refunds',\n question: 'How do I request a refund?',\n answer:\n 'Refunds can be requested within 24 hours of order placement if the order hasn\\'t been prepared. Go to \"My Orders\" > Select the order > \"Request Refund\". You\\'ll need to select a reason. Refunds for quality issues can be raised within 2 hours of delivery. Refunds are processed within 3-5 business days to your original payment method.',\n helpful: 0,\n tags: ['refund', 'cancellation', 'billing', 'money'],\n },\n {\n id: 'faq-017',\n category: 'Billing & Refunds',\n question: 'Where can I find my payment receipts?',\n answer:\n 'All payment receipts are available under My Orders > Select Order > View Receipt. You can also find consolidated billing statements under Settings > Billing > Invoice History. Receipts can be downloaded as PDF or emailed to your registered address.',\n helpful: 0,\n tags: ['receipt', 'invoice', 'billing', 'download'],\n },\n {\n id: 'faq-018',\n category: 'Privacy & Security',\n question: 'How is my personal data protected?',\n answer:\n \"We follow industry-standard encryption (AES-256) for all personal data at rest and TLS 1.3 for data in transit. We are compliant with India's DPDP Act. You can control your data sharing preferences in Settings > Privacy. We never sell your personal information to third parties.\",\n helpful: 0,\n tags: ['privacy', 'data', 'encryption', 'security'],\n },\n {\n id: 'faq-019',\n category: 'Privacy & Security',\n question: 'How do I enable two-factor authentication?',\n answer:\n 'Go to Settings > Security > Two-Factor Authentication and toggle it on. You can choose between SMS OTP or an authenticator app (Google Authenticator, Authy). We strongly recommend enabling 2FA for enhanced account security, especially for Cart Owners and Investors.',\n helpful: 0,\n tags: ['2fa', 'authentication', 'security', 'account'],\n },\n {\n id: 'faq-020',\n category: 'Privacy & Security',\n question: 'How can I delete my account?',\n answer:\n 'You can request account deletion from Settings > Privacy > Delete Account. Please note: this action is irreversible. All your data, order history, and wallet balance will be permanently removed after a 30-day cooling period. Pending orders or investments must be settled before deletion.',\n helpful: 0,\n tags: ['delete', 'account', 'privacy', 'data'],\n },\n];\n\nconst POPULAR_ARTICLES: PopularArticle[] = [\n {\n id: 'art-1',\n title: 'Getting Started with Kadaikodi',\n category: 'Getting Started',\n faqCategory: 'Account & Profile',\n },\n {\n id: 'art-2',\n title: 'How to Place Your First Order',\n category: 'Orders',\n faqCategory: 'Orders & Payments',\n },\n {\n id: 'art-3',\n title: 'Understanding Investment Returns',\n category: 'Investors',\n faqCategory: 'Investors',\n },\n {\n id: 'art-4',\n title: 'Setting Up Your Cart Business',\n category: 'Cart Owners',\n faqCategory: 'Cart Owners',\n },\n {\n id: 'art-5',\n title: 'Payment Troubleshooting Guide',\n category: 'Payments',\n faqCategory: 'Orders & Payments',\n },\n {\n id: 'art-6',\n title: 'Delivery Partner Onboarding Guide',\n category: 'Workers',\n faqCategory: 'Delivery & Workers',\n },\n];\n\n// ============================================================================\n// Helper functions\n// ============================================================================\n\nfunction getStatusIcon(status: SupportTicket['status']) {\n switch (status) {\n case 'open':\n return Circle;\n case 'in-progress':\n return CircleDot;\n case 'resolved':\n return CheckCircle2;\n case 'closed':\n return XCircle;\n }\n}\n\nfunction getStatusColor(status: SupportTicket['status']): string {\n switch (status) {\n case 'open':\n return 'bg-[var(--color-accent-soft)] text-text-primary';\n case 'in-progress':\n return 'bg-status-warning-bg-subtle text-status-warning-text';\n case 'resolved':\n return 'bg-status-success-bg-subtle text-status-success-text';\n case 'closed':\n return 'bg-bg-sunken text-text-secondary';\n }\n}\n\nfunction getPriorityColor(priority: SupportTicket['priority']): string {\n switch (priority) {\n case 'urgent':\n return 'bg-status-error-bg-subtle text-status-error-text';\n case 'high':\n return 'bg-status-warning-bg-subtle text-status-warning-text';\n case 'medium':\n return 'bg-[var(--color-accent-soft)] text-text-primary';\n case 'low':\n return 'bg-bg-sunken text-text-secondary';\n }\n}\n\nfunction formatStatusLabel(status: string): string {\n return status.replace('-', ' ').replace(/\\b\\w/g, (c) => c.toUpperCase());\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport function HelpSupportPage() {\n // Section & navigation\n const [activeSection, setActiveSection] = useState<ActiveSection>('faq');\n\n // FAQ state\n const [searchQuery, setSearchQuery] = useState('');\n const [selectedCategory, setSelectedCategory] = useState('');\n const [expandedFaq, setExpandedFaq] = useState<string | null>(null);\n const faqs = MOCK_FAQS;\n // Local-only \"was this helpful\" acknowledgement. Not persisted anywhere and\n // deliberately shows no vote tally so it never implies a global count.\n const [helpfulVotes, setHelpfulVotes] = useState<Set<string>>(() => new Set());\n\n // Ticket state — there is no kadaikodi support-ticket backend for this\n // pre-launch product, so \"My Tickets\" stays an honest empty state and the\n // submit form composes a real email to support instead of fabricating one.\n const [tickets] = useState<SupportTicket[]>([]);\n const [showTicketForm, setShowTicketForm] = useState(false);\n const [ticketSuccess, setTicketSuccess] = useState('');\n const [ticketError, setTicketError] = useState('');\n const [ticketForm, setTicketForm] = useState({\n subject: '',\n category: '',\n priority: 'medium' as SupportTicket['priority'],\n description: '',\n });\n\n // FAQ filtering\n const filteredFaqs = useMemo(() => {\n return faqs.filter((faq) => {\n const matchesSearch =\n !searchQuery ||\n faq.question.toLowerCase().includes(searchQuery.toLowerCase()) ||\n faq.answer.toLowerCase().includes(searchQuery.toLowerCase()) ||\n faq.tags.some((tag) => tag.toLowerCase().includes(searchQuery.toLowerCase()));\n const matchesCategory = !selectedCategory || faq.category === selectedCategory;\n return matchesSearch && matchesCategory;\n });\n }, [faqs, searchQuery, selectedCategory]);\n\n // Ticket stats\n const ticketStats = useMemo(() => {\n const open = tickets.filter((t) => t.status === 'open').length;\n const inProgress = tickets.filter((t) => t.status === 'in-progress').length;\n const resolved = tickets.filter((t) => t.status === 'resolved').length;\n const closed = tickets.filter((t) => t.status === 'closed').length;\n return { open, inProgress, resolved, closed, total: tickets.length };\n }, [tickets]);\n\n // Handlers\n const toggleFaq = (id: string) => {\n setExpandedFaq((prev) => (prev === id ? null : id));\n };\n\n const handleMarkHelpful = (faqId: string) => {\n setHelpfulVotes((prev) => {\n if (prev.has(faqId)) return prev;\n const next = new Set(prev);\n next.add(faqId);\n return next;\n });\n };\n\n const openArticleFaq = (faqCategory: (typeof FAQ_CATEGORIES)[number]) => {\n setSearchQuery('');\n setSelectedCategory(faqCategory);\n setActiveSection('faq');\n window.scrollTo({ top: 0, behavior: 'smooth' });\n };\n\n const handleContactMethod = (method: ContactMethod) => {\n switch (method.type) {\n case 'email':\n window.location.href = `mailto:${method.value}`;\n break;\n case 'phone':\n window.location.href = `tel:${method.value.replace(/[^0-9+]/g, '')}`;\n break;\n case 'whatsapp':\n window.open(`https://wa.me/${method.value.replace(/[^0-9]/g, '')}`, '_blank');\n break;\n case 'chat':\n // Live chat is not available yet; the button is disabled, so this is a no-op.\n break;\n }\n };\n\n // No kadaikodi ticketing backend — send the request as a real email to support\n // rather than fabricating a ticket. Honest and functional.\n const handleSubmitTicket = () => {\n setTicketError('');\n setTicketSuccess('');\n\n if (!ticketForm.subject.trim()) {\n setTicketError('Please enter a subject for your ticket.');\n return;\n }\n if (!ticketForm.description.trim()) {\n setTicketError('Please describe your issue in the description field.');\n return;\n }\n if (!ticketForm.category) {\n setTicketError('Please select a category.');\n return;\n }\n\n const subject = encodeURIComponent(\n `[${ticketForm.priority.toUpperCase()}] ${ticketForm.subject}`\n );\n const body = encodeURIComponent(\n `Category: ${ticketForm.category}\\nPriority: ${ticketForm.priority}\\n\\n${ticketForm.description}`\n );\n window.location.href = `mailto:support@kadaikodi.com?subject=${subject}&body=${body}`;\n\n setTicketForm({ subject: '', category: '', priority: 'medium', description: '' });\n setShowTicketForm(false);\n setTicketSuccess(\n 'Opening your email app to send this to support@kadaikodi.com. Our team replies within 24 hours.'\n );\n window.setTimeout(() => setTicketSuccess(''), 6000);\n };\n\n // Navigation tabs\n const sectionTabs: Array<{ id: ActiveSection; label: string; icon: typeof HelpCircle }> = [\n { id: 'faq', label: 'FAQ', icon: HelpCircle },\n { id: 'contact', label: 'Contact Us', icon: Phone },\n { id: 'tickets', label: 'My Tickets', icon: Ticket },\n ];\n\n return (\n <PageLayout\n title=\"Help & Support\"\n description=\"Find answers, contact support, or track your requests\"\n >\n {/* Success message */}\n {ticketSuccess && (\n <div className=\"mb-4 flex items-center gap-2 rounded-lg border border-status-success-text/30 bg-status-success-bg-subtle px-4 py-3 text-sm text-status-success-text\">\n <CheckCircle2 className=\"h-4 w-4 shrink-0\" />\n {ticketSuccess}\n <button type=\"button\" onClick={() => setTicketSuccess('')} className=\"ml-auto\">\n <X className=\"h-4 w-4\" />\n </button>\n </div>\n )}\n\n <PagePurpose className=\"mb-6\">\n Stuck or have a question? Start here. Use this page to search FAQs and help articles, browse\n topics by category, reach our support team, and track any requests you&apos;ve raised — so\n you can get unblocked fast without leaving the app. Search first; if you still need a human,\n open a ticket and follow it under your requests.\n </PagePurpose>\n\n {/* Search Bar — the one emphasis zone for this page */}\n <EmphasisPanel className=\"mb-6\">\n <h2 className=\"mb-3 text-base font-semibold text-text-primary\">How can we help?</h2>\n <div className=\"relative\">\n <Search className=\"absolute left-3 top-1/2 h-5 w-5 -translate-y-1/2 text-text-secondary\" />\n <input\n type=\"text\"\n value={searchQuery}\n onChange={(e) => {\n setSearchQuery(e.target.value);\n if (activeSection !== 'faq') setActiveSection('faq');\n }}\n placeholder=\"Search help articles, FAQs, and more...\"\n className=\"w-full rounded-lg border border-border-subtle bg-bg-surface py-3 pl-10 pr-10 text-sm text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n {searchQuery && (\n <button\n type=\"button\"\n onClick={() => setSearchQuery('')}\n className=\"absolute right-3 top-1/2 -translate-y-1/2 text-text-secondary hover:text-text-primary\"\n >\n <X className=\"h-4 w-4\" />\n </button>\n )}\n </div>\n </EmphasisPanel>\n\n {/* Help Category Cards */}\n <section className=\"mb-6\">\n <h2 className=\"text-lg font-semibold text-text-primary mb-3\">Browse Help Topics</h2>\n <div className=\"grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-3\">\n {HELP_CATEGORIES.map((cat) => {\n const CatIcon = cat.icon;\n return (\n <button\n key={cat.label}\n type=\"button\"\n onClick={() => {\n setSelectedCategory(cat.label === selectedCategory ? '' : cat.label);\n setActiveSection('faq');\n }}\n className={cn(\n 'flex items-start gap-3 rounded-lg border bg-bg-surface p-4 text-left transition-all hover:shadow-sm',\n selectedCategory === cat.label\n ? 'border-primary ring-1 ring-primary'\n : 'border-border-subtle'\n )}\n >\n <div\n className={cn(\n 'flex h-10 w-10 shrink-0 items-center justify-center rounded-lg',\n cat.color\n )}\n >\n <CatIcon className=\"h-5 w-5\" />\n </div>\n <div>\n <p className=\"text-sm font-semibold text-text-primary\">{cat.label}</p>\n <p className=\"text-xs text-text-secondary\">{cat.description}</p>\n </div>\n </button>\n );\n })}\n </div>\n </section>\n\n {/* Navigation Tabs */}\n <section className=\"mb-6\">\n <div className=\"flex space-x-1 bg-bg-sunken p-1 rounded-lg w-full sm:w-fit\">\n {sectionTabs.map((tab) => {\n const TabIcon = tab.icon;\n return (\n <button\n key={tab.id}\n type=\"button\"\n onClick={() => setActiveSection(tab.id)}\n className={cn(\n 'flex flex-1 sm:flex-none items-center justify-center gap-2 rounded-md px-4 py-2 text-sm font-medium transition-colors',\n activeSection === tab.id\n ? 'bg-bg-surface text-text-primary shadow-sm'\n : 'text-text-secondary hover:text-text-primary'\n )}\n >\n <TabIcon className=\"h-4 w-4\" />\n <span>{tab.label}</span>\n {tab.id === 'tickets' && ticketStats.open > 0 && (\n <span className=\"flex h-5 min-w-[20px] items-center justify-center rounded-full bg-action-primary-bg px-1.5 text-xs font-medium text-action-primary-text\">\n {ticketStats.open}\n </span>\n )}\n </button>\n );\n })}\n </div>\n </section>\n\n {/* ================================================================ */}\n {/* FAQ Section */}\n {/* ================================================================ */}\n {activeSection === 'faq' && (\n <div>\n {/* Category filter dropdown */}\n <div className=\"mb-4 flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between\">\n <p className=\"text-sm text-text-secondary\">\n {filteredFaqs.length} question{filteredFaqs.length !== 1 ? 's' : ''} found\n {selectedCategory && (\n <span>\n {' '}\n in <span className=\"font-medium text-text-primary\">{selectedCategory}</span>\n <button\n type=\"button\"\n onClick={() => setSelectedCategory('')}\n className=\"ml-1 text-primary hover:underline\"\n >\n (clear)\n </button>\n </span>\n )}\n </p>\n <select\n value={selectedCategory}\n onChange={(e) => setSelectedCategory(e.target.value)}\n className=\"rounded-lg border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n >\n <option value=\"\">All Categories</option>\n {FAQ_CATEGORIES.map((cat) => (\n <option key={cat} value={cat}>\n {cat}\n </option>\n ))}\n </select>\n </div>\n\n {/* FAQ Accordion */}\n {filteredFaqs.length > 0 ? (\n <div className=\"space-y-3\">\n {filteredFaqs.map((faq) => {\n const isExpanded = expandedFaq === faq.id;\n return (\n <div\n key={faq.id}\n className=\"rounded-lg border border-border-subtle bg-bg-surface overflow-hidden\"\n >\n <button\n type=\"button\"\n onClick={() => toggleFaq(faq.id)}\n className=\"flex w-full items-start justify-between gap-3 px-4 py-4 text-left hover:bg-accent/50 transition-colors\"\n >\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex flex-wrap items-center gap-2 mb-1\">\n <span className=\"inline-flex items-center rounded-full bg-bg-sunken px-2 py-0.5 text-xs font-medium text-text-secondary\">\n {faq.category}\n </span>\n </div>\n <span\n className={cn(\n 'text-sm',\n isExpanded\n ? 'font-semibold text-text-primary'\n : 'font-medium text-text-primary'\n )}\n >\n {faq.question}\n </span>\n </div>\n {isExpanded ? (\n <ChevronUp className=\"h-4 w-4 text-text-secondary shrink-0 mt-1\" />\n ) : (\n <ChevronDown className=\"h-4 w-4 text-text-secondary shrink-0 mt-1\" />\n )}\n </button>\n {isExpanded && (\n <div className=\"border-t border-border-subtle px-4 pb-4 pt-3\">\n <p className=\"text-sm text-text-secondary leading-relaxed mb-3\">\n {faq.answer}\n </p>\n <div className=\"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between\">\n <div className=\"flex flex-wrap gap-1.5\">\n {faq.tags.map((tag) => (\n <span\n key={tag}\n className=\"inline-flex items-center gap-1 rounded-full bg-bg-sunken px-2 py-0.5 text-xs text-text-secondary\"\n >\n <Tag className=\"h-2.5 w-2.5\" />\n {tag}\n </span>\n ))}\n </div>\n {helpfulVotes.has(faq.id) ? (\n <span className=\"flex items-center gap-1.5 rounded-lg border border-status-success-text/30 bg-status-success-bg-subtle px-3 py-1.5 text-xs font-medium text-status-success-text\">\n <ThumbsUp className=\"h-3.5 w-3.5\" />\n Thanks for your feedback\n </span>\n ) : (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n handleMarkHelpful(faq.id);\n }}\n className=\"flex items-center gap-1.5 rounded-lg border border-border-subtle px-3 py-1.5 text-xs font-medium text-text-secondary hover:bg-accent hover:text-text-primary transition-colors\"\n >\n <ThumbsUp className=\"h-3.5 w-3.5\" />\n Was this helpful?\n </button>\n )}\n </div>\n </div>\n )}\n </div>\n );\n })}\n </div>\n ) : (\n <EmptyState\n illustration=\"empty-search\"\n title=\"No FAQs found\"\n description=\"Try adjusting your search or browse different categories. If you still can't find an answer, contact support.\"\n action={\n <button\n type=\"button\"\n onClick={() => {\n setSearchQuery('');\n setSelectedCategory('');\n }}\n className=\"rounded-lg border border-border-subtle px-4 py-2 text-sm font-medium text-text-primary hover:bg-accent transition-colors\"\n >\n Clear all filters\n </button>\n }\n />\n )}\n </div>\n )}\n\n {/* ================================================================ */}\n {/* Contact Section */}\n {/* ================================================================ */}\n {activeSection === 'contact' && (\n <div className=\"space-y-6\">\n {/* Contact Methods Grid */}\n <div>\n <h2 className=\"text-base font-semibold text-text-primary mb-3\">Get in Touch</h2>\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2\">\n {CONTACT_METHODS.map((method) => {\n const MethodIcon = method.icon;\n return (\n <div\n key={method.type}\n className=\"rounded-lg border border-border-subtle bg-bg-surface p-5\"\n >\n <div className=\"flex items-start gap-4\">\n <div className=\"flex h-12 w-12 shrink-0 items-center justify-center rounded-lg bg-bg-sunken\">\n <MethodIcon className=\"h-6 w-6 text-text-secondary\" />\n </div>\n <div className=\"flex-1 min-w-0\">\n <h3 className=\"text-sm font-semibold text-text-primary\">{method.label}</h3>\n <p className=\"text-sm text-text-primary mt-0.5 break-words\">\n {method.value}\n </p>\n <div className=\"flex items-center gap-1 mt-1 text-xs text-text-secondary\">\n <Clock className=\"h-3 w-3\" />\n {method.responseTime}\n </div>\n <button\n type=\"button\"\n onClick={() => handleContactMethod(method)}\n disabled={!method.available}\n className={cn(\n 'mt-3 flex items-center gap-1.5 rounded-lg px-4 py-2 text-sm font-medium transition-colors',\n method.available\n ? 'bg-action-primary-bg text-action-primary-text hover:bg-action-primary-bg/90'\n : 'bg-bg-sunken text-text-secondary cursor-not-allowed'\n )}\n >\n {method.type === 'chat'\n ? 'Coming soon'\n : method.type === 'email'\n ? 'Send Email'\n : 'Contact'}\n {method.available && <ExternalLink className=\"h-3.5 w-3.5\" />}\n </button>\n </div>\n </div>\n </div>\n );\n })}\n </div>\n </div>\n\n {/* Submit Ticket Section */}\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface\">\n <div className=\"flex items-center justify-between border-b border-border-subtle px-5 py-4\">\n <div>\n <h2 className=\"text-base font-semibold text-text-primary\">\n Submit a Support Ticket\n </h2>\n <p className=\"text-xs text-text-secondary mt-0.5\">\n Can't find your answer? Create a ticket and our team will help.\n </p>\n </div>\n <button\n type=\"button\"\n onClick={() => setShowTicketForm(!showTicketForm)}\n className=\"flex items-center gap-1.5 rounded-lg bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90 transition-colors\"\n >\n <Ticket className=\"h-4 w-4\" />\n {showTicketForm ? 'Close' : 'New Ticket'}\n </button>\n </div>\n\n {showTicketForm && (\n <div className=\"p-5 space-y-4\">\n {/* Error message */}\n {ticketError && (\n <div className=\"flex items-center gap-2 rounded-lg border border-status-error-text/30 bg-status-error-bg-subtle px-3 py-2 text-sm text-status-error-text\">\n <AlertCircle className=\"h-4 w-4 shrink-0\" />\n {ticketError}\n </div>\n )}\n\n {/* Subject */}\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1.5\">\n Subject <span className=\"text-status-error-text\">*</span>\n </label>\n <input\n type=\"text\"\n value={ticketForm.subject}\n onChange={(e) =>\n setTicketForm((prev) => ({ ...prev, subject: e.target.value }))\n }\n placeholder=\"Brief description of your issue\"\n className=\"w-full rounded-lg border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n />\n </div>\n\n {/* Category & Priority */}\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2\">\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1.5\">\n Category <span className=\"text-status-error-text\">*</span>\n </label>\n <select\n value={ticketForm.category}\n onChange={(e) =>\n setTicketForm((prev) => ({ ...prev, category: e.target.value }))\n }\n className=\"w-full rounded-lg border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n >\n <option value=\"\">Select category</option>\n {FAQ_CATEGORIES.map((cat) => (\n <option key={cat} value={cat}>\n {cat}\n </option>\n ))}\n </select>\n </div>\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1.5\">\n Priority\n </label>\n <select\n value={ticketForm.priority}\n onChange={(e) =>\n setTicketForm((prev) => ({\n ...prev,\n priority: e.target.value as SupportTicket['priority'],\n }))\n }\n className=\"w-full rounded-lg border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)]\"\n >\n <option value=\"low\">Low</option>\n <option value=\"medium\">Medium</option>\n <option value=\"high\">High</option>\n <option value=\"urgent\">Urgent</option>\n </select>\n </div>\n </div>\n\n {/* Description */}\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1.5\">\n Description <span className=\"text-status-error-text\">*</span>\n </label>\n <textarea\n rows={5}\n value={ticketForm.description}\n onChange={(e) =>\n setTicketForm((prev) => ({ ...prev, description: e.target.value }))\n }\n placeholder=\"Please describe your issue in detail...\"\n className=\"w-full rounded-lg border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary placeholder:text-text-secondary focus:outline-none focus:ring-2 focus:ring-[var(--color-focus-ring)] resize-none\"\n />\n </div>\n\n {/* Tips */}\n <div className=\"rounded-lg bg-[var(--color-accent-soft)] border border-border-focus/20 p-4\">\n <div className=\"flex items-center gap-2 mb-2\">\n <Lightbulb className=\"h-4 w-4 text-text-primary\" />\n <h4 className=\"text-sm font-medium text-text-primary\">\n Tips for faster resolution\n </h4>\n </div>\n <ul className=\"text-xs text-text-primary space-y-1 ml-6 list-disc\">\n <li>Be specific about the issue and include steps to reproduce it</li>\n <li>Include relevant order IDs, transaction IDs, or error messages</li>\n <li>Mention your device type and app version for technical issues</li>\n <li>Attach screenshots if they help illustrate the problem</li>\n </ul>\n </div>\n\n {/* Submit buttons */}\n <div className=\"flex items-center gap-3 pt-1\">\n <button\n type=\"button\"\n onClick={handleSubmitTicket}\n className=\"flex items-center gap-2 rounded-lg bg-action-primary-bg px-5 py-2.5 text-sm font-medium text-action-primary-text transition-colors hover:bg-action-primary-bg/90\"\n >\n <Send className=\"h-4 w-4\" />\n Email Support\n </button>\n <button\n type=\"button\"\n onClick={() => {\n setShowTicketForm(false);\n setTicketError('');\n }}\n className=\"rounded-lg border border-border-subtle px-4 py-2.5 text-sm font-medium text-text-primary hover:bg-accent transition-colors\"\n >\n Cancel\n </button>\n </div>\n </div>\n )}\n </div>\n\n {/* Support Hours & Emergency */}\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2\">\n {/* Support Hours */}\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-5\">\n <div className=\"flex items-center gap-2 mb-3\">\n <Clock className=\"h-5 w-5 text-text-secondary\" />\n <h3 className=\"text-sm font-semibold text-text-primary\">Support Hours</h3>\n </div>\n <div className=\"space-y-2 text-sm\">\n <div className=\"flex justify-between\">\n <span className=\"text-text-secondary\">Monday - Friday</span>\n <span className=\"font-medium text-text-primary\">9:00 AM - 9:00 PM IST</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-text-secondary\">Saturday</span>\n <span className=\"font-medium text-text-primary\">10:00 AM - 6:00 PM IST</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-text-secondary\">Sunday</span>\n <span className=\"font-medium text-text-primary\">Closed</span>\n </div>\n <div className=\"flex justify-between pt-2 border-t border-border-subtle\">\n <span className=\"text-text-secondary\">Email Support</span>\n <span className=\"font-medium text-text-primary\">24/7</span>\n </div>\n </div>\n </div>\n\n {/* Emergency Contact */}\n <div className=\"rounded-lg border border-status-error-text/20 bg-status-error-bg-subtle p-5\">\n <div className=\"flex items-center gap-2 mb-3\">\n <AlertTriangle className=\"h-5 w-5 text-status-error-text\" />\n <h3 className=\"text-sm font-semibold text-status-error-text\">Emergency Contact</h3>\n </div>\n <p className=\"text-sm text-status-error-text mb-3\">\n For urgent issues like safety concerns, fraud, or account compromise:\n </p>\n <div className=\"space-y-2\">\n <div className=\"flex items-center gap-2 text-sm\">\n <Phone className=\"h-4 w-4 text-status-error-text\" />\n <span className=\"font-medium text-status-error-text\">+91 80-4012-9999</span>\n <span className=\"text-xs text-status-error-text\">(24/7)</span>\n </div>\n <div className=\"flex items-center gap-2 text-sm\">\n <Mail className=\"h-4 w-4 text-status-error-text\" />\n <span className=\"font-medium text-status-error-text\">\n emergency@kadaikodi.com\n </span>\n </div>\n </div>\n </div>\n </div>\n\n {/* Popular Articles */}\n <div>\n <h2 className=\"text-base font-semibold text-text-primary mb-3\">Popular Articles</h2>\n <div className=\"grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-3\">\n {POPULAR_ARTICLES.map((article) => (\n <button\n key={article.id}\n type=\"button\"\n onClick={() => openArticleFaq(article.faqCategory)}\n className=\"flex items-start gap-3 rounded-lg border border-border-subtle bg-bg-surface p-4 text-left hover:bg-accent/50 transition-colors\"\n >\n <FileText className=\"h-5 w-5 text-text-secondary shrink-0 mt-0.5\" />\n <div className=\"min-w-0\">\n <p className=\"text-sm font-medium text-text-primary truncate\">\n {article.title}\n </p>\n <div className=\"flex items-center gap-2 mt-1\">\n <span className=\"text-xs text-text-secondary\">{article.category}</span>\n </div>\n </div>\n </button>\n ))}\n </div>\n </div>\n </div>\n )}\n\n {/* ================================================================ */}\n {/* My Tickets Section */}\n {/* ================================================================ */}\n {activeSection === 'tickets' && (\n <div className=\"space-y-4\">\n {/* Ticket Stats */}\n <div className=\"grid grid-cols-2 gap-3 sm:grid-cols-4\">\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-3 text-center\">\n <p className=\"text-2xl font-bold text-text-primary\">{ticketStats.total}</p>\n <p className=\"text-xs text-text-secondary\">Total</p>\n </div>\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-3 text-center\">\n <p className=\"text-2xl font-bold text-text-primary\">{ticketStats.open}</p>\n <p className=\"text-xs text-text-secondary\">Open</p>\n </div>\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-3 text-center\">\n <p className=\"text-2xl font-bold text-status-warning-text\">\n {ticketStats.inProgress}\n </p>\n <p className=\"text-xs text-text-secondary\">In Progress</p>\n </div>\n <div className=\"rounded-lg border border-border-subtle bg-bg-surface p-3 text-center\">\n <p className=\"text-2xl font-bold text-status-success-text\">{ticketStats.resolved}</p>\n <p className=\"text-xs text-text-secondary\">Resolved</p>\n </div>\n </div>\n\n {/* Header with New Ticket button */}\n <div className=\"flex items-center justify-between\">\n <p className=\"text-sm text-text-secondary\">\n {tickets.length} ticket{tickets.length !== 1 ? 's' : ''}\n </p>\n <button\n type=\"button\"\n onClick={() => {\n setShowTicketForm(true);\n setActiveSection('contact');\n }}\n className=\"flex items-center gap-1.5 rounded-lg bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90 transition-colors\"\n >\n <Ticket className=\"h-4 w-4\" />\n New Ticket\n </button>\n </div>\n\n {/* Ticket List */}\n {tickets.length === 0 ? (\n <EmptyState\n illustration=\"empty-notifications\"\n title=\"No support tickets\"\n description=\"You haven't created any support tickets yet. If something needs a human, open one and we'll follow up here.\"\n action={\n <button\n type=\"button\"\n onClick={() => {\n setShowTicketForm(true);\n setActiveSection('contact');\n }}\n className=\"inline-flex items-center gap-1.5 rounded-lg bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90 transition-colors\"\n >\n <Ticket className=\"h-4 w-4\" />\n Create Your First Ticket\n </button>\n }\n />\n ) : (\n <div className=\"space-y-4\">\n {tickets.map((ticket) => {\n const StatusIcon = getStatusIcon(ticket.status);\n const lastResponse =\n ticket.responses.length > 0\n ? ticket.responses[ticket.responses.length - 1]\n : null;\n\n return (\n <div\n key={ticket.id}\n className=\"rounded-lg border border-border-subtle bg-bg-surface overflow-hidden\"\n >\n {/* Ticket Header */}\n <div className=\"p-4 sm:p-5\">\n <div className=\"flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between\">\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center gap-2 mb-1\">\n <StatusIcon\n className={cn(\n 'h-4 w-4',\n getStatusColor(ticket.status).split(' ').slice(1).join(' ')\n )}\n />\n <h3 className=\"text-sm font-semibold text-text-primary truncate\">\n {ticket.subject}\n </h3>\n </div>\n <p className=\"text-xs text-text-secondary\">\n {ticket.category} &middot; {ticket.id}\n </p>\n </div>\n <div className=\"flex flex-wrap gap-2\">\n <span\n className={cn(\n 'inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium',\n getPriorityColor(ticket.priority)\n )}\n >\n {ticket.priority.toUpperCase()}\n </span>\n <span\n className={cn(\n 'inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium',\n getStatusColor(ticket.status)\n )}\n >\n {formatStatusLabel(ticket.status)}\n </span>\n </div>\n </div>\n\n <p className=\"text-sm text-text-secondary mt-2 leading-relaxed\">\n {ticket.description}\n </p>\n\n {/* Latest Response */}\n {lastResponse && (\n <div className=\"mt-3 rounded-lg bg-bg-sunken/50 border border-border-subtle p-3\">\n <div className=\"flex items-center gap-1.5 mb-1\">\n <MessageSquare className=\"h-3.5 w-3.5 text-text-secondary\" />\n <span className=\"text-xs font-medium text-text-primary\">\n {lastResponse.sender === 'support' ? 'Support Team' : 'You'}\n </span>\n <span className=\"text-xs text-text-secondary\">\n &middot; {formatDate(lastResponse.timestamp)}\n </span>\n </div>\n <p className=\"text-sm text-text-secondary\">{lastResponse.message}</p>\n </div>\n )}\n\n {/* No responses yet */}\n {ticket.responses.length === 0 && ticket.status === 'open' && (\n <div className=\"mt-3 flex items-center gap-2 text-xs text-text-secondary\">\n <Info className=\"h-3.5 w-3.5\" />\n Awaiting response from support team\n </div>\n )}\n </div>\n\n {/* Ticket Footer */}\n <div className=\"flex flex-col gap-1 border-t border-border-subtle bg-bg-sunken/30 px-4 py-2.5 sm:flex-row sm:items-center sm:justify-between text-xs text-text-secondary\">\n <span>Created: {formatDate(ticket.createdAt)}</span>\n <span>Updated: {formatDate(ticket.updatedAt)}</span>\n <span>\n {ticket.responses.length} response{ticket.responses.length !== 1 ? 's' : ''}\n </span>\n </div>\n </div>\n );\n })}\n </div>\n )}\n </div>\n )}\n\n {/* ================================================================ */}\n {/* Footer Info */}\n {/* ================================================================ */}\n <section className=\"mt-8 rounded-lg border border-border-subtle bg-bg-sunken/30 p-5\">\n <div className=\"flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between\">\n <div>\n <h3 className=\"text-sm font-semibold text-text-primary mb-1\">Still need help?</h3>\n <p className=\"text-xs text-text-secondary\">\n Our support team is available Monday to Saturday. Average response time is under 4\n hours.\n </p>\n </div>\n <div className=\"flex flex-wrap gap-2\">\n <button\n type=\"button\"\n onClick={() => handleContactMethod(CONTACT_METHODS[0])}\n className=\"flex items-center gap-1.5 rounded-lg border border-border-subtle bg-bg-surface px-3 py-2 text-xs font-medium text-text-primary hover:bg-accent transition-colors\"\n >\n <Mail className=\"h-3.5 w-3.5\" />\n Email Us\n </button>\n <button\n type=\"button\"\n onClick={() => handleContactMethod(CONTACT_METHODS[1])}\n className=\"flex items-center gap-1.5 rounded-lg border border-border-subtle bg-bg-surface px-3 py-2 text-xs font-medium text-text-primary hover:bg-accent transition-colors\"\n >\n <Phone className=\"h-3.5 w-3.5\" />\n Call Us\n </button>\n <button\n type=\"button\"\n onClick={() => {\n setShowTicketForm(true);\n setActiveSection('contact');\n }}\n className=\"flex items-center gap-1.5 rounded-lg bg-action-primary-bg px-3 py-2 text-xs font-medium text-action-primary-text hover:bg-action-primary-bg/90 transition-colors\"\n >\n <Ticket className=\"h-3.5 w-3.5\" />\n Submit Ticket\n </button>\n </div>\n </div>\n </section>\n </PageLayout>\n );\n}\n"],"mappings":";;;;;;;;;AA2GA,IAAM,IAAiB;CACrB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,EAEK,IAAkB;CACtB;EACE,OAAO;EACP,MAAM;EACN,aAAa;EACb,OAAO;EACR;CACD;EACE,OAAO;EACP,MAAM;EACN,aAAa;EACb,OAAO;EACR;CACD;EACE,OAAO;EACP,MAAM;EACN,aAAa;EACb,OAAO;EACR;CACD;EACE,OAAO;EACP,MAAM;EACN,aAAa;EACb,OAAO;EACR;CACD;EACE,OAAO;EACP,MAAM;EACN,aAAa;EACb,OAAO;EACR;CACD;EACE,OAAO;EACP,MAAM;EACN,aAAa;EACb,OAAO;EACR;CACD;EACE,OAAO;EACP,MAAM;EACN,aAAa;EACb,OAAO;EACR;CACD;EACE,OAAO;EACP,MAAM;EACN,aAAa;EACb,OAAO;EACR;CACD;EACE,OAAO;EACP,MAAM;EACN,aAAa;EACb,OAAO;EACR;CACF,EAEK,IAAmC;CACvC;EACE,MAAM;EACN,OAAO;EACP,OAAO;EACP,WAAW;EACX,cAAc;EACd,MAAM;EACP;CACD;EACE,MAAM;EACN,OAAO;EACP,OAAO;EACP,WAAW;EACX,cAAc;EACd,MAAM;EACP;CACD;EACE,MAAM;EACN,OAAO;EACP,OAAO;EACP,WAAW;EACX,cAAc;EACd,MAAM;EACP;CACD;EACE,MAAM;EACN,OAAO;EACP,OAAO;EACP,WAAW;EACX,cAAc;EACd,MAAM;EACP;CACF,EAEK,IAAuB;CAC3B;EACE,IAAI;EACJ,UAAU;EACV,UAAU;EACV,QACE;EACF,SAAS;EACT,MAAM;GAAC;GAAW;GAAU;GAAe;EAC5C;CACD;EACE,IAAI;EACJ,UAAU;EACV,UAAU;EACV,QACE;EACF,SAAS;EACT,MAAM;GAAC;GAAY;GAAY;GAAU;EAC1C;CACD;EACE,IAAI;EACJ,UAAU;EACV,UAAU;EACV,QACE;EACF,SAAS;EACT,MAAM;GAAC;GAAQ;GAAW;GAAS;EACpC;CACD;EACE,IAAI;EACJ,UAAU;EACV,UAAU;EACV,QACE;EACF,SAAS;EACT,MAAM;GAAC;GAAW;GAAO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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@burdenoff/microfe-kadaikodi",
3
- "version": "2026.830.1",
3
+ "version": "2026.928.1",
4
4
  "description": "Burdenoff Kadaikodi Microfrontend - Mobile services marketplace platform for connecting service providers with customers",
5
5
  "type": "module",
6
6
  "files": [