@aws505/sheetsite 1.0.0

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.
Files changed (57) hide show
  1. package/README.md +105 -0
  2. package/dist/components/index.js +1696 -0
  3. package/dist/components/index.js.map +1 -0
  4. package/dist/components/index.mjs +1630 -0
  5. package/dist/components/index.mjs.map +1 -0
  6. package/dist/config/index.js +1840 -0
  7. package/dist/config/index.js.map +1 -0
  8. package/dist/config/index.mjs +1793 -0
  9. package/dist/config/index.mjs.map +1 -0
  10. package/dist/data/index.js +1296 -0
  11. package/dist/data/index.js.map +1 -0
  12. package/dist/data/index.mjs +1220 -0
  13. package/dist/data/index.mjs.map +1 -0
  14. package/dist/index.js +5433 -0
  15. package/dist/index.js.map +1 -0
  16. package/dist/index.mjs +5285 -0
  17. package/dist/index.mjs.map +1 -0
  18. package/dist/seo/index.js +187 -0
  19. package/dist/seo/index.js.map +1 -0
  20. package/dist/seo/index.mjs +155 -0
  21. package/dist/seo/index.mjs.map +1 -0
  22. package/dist/theme/index.js +552 -0
  23. package/dist/theme/index.js.map +1 -0
  24. package/dist/theme/index.mjs +526 -0
  25. package/dist/theme/index.mjs.map +1 -0
  26. package/package.json +96 -0
  27. package/src/components/index.ts +41 -0
  28. package/src/components/layout/Footer.tsx +234 -0
  29. package/src/components/layout/Header.tsx +134 -0
  30. package/src/components/sections/FAQ.tsx +178 -0
  31. package/src/components/sections/Gallery.tsx +107 -0
  32. package/src/components/sections/Hero.tsx +202 -0
  33. package/src/components/sections/Hours.tsx +225 -0
  34. package/src/components/sections/Services.tsx +216 -0
  35. package/src/components/sections/Testimonials.tsx +184 -0
  36. package/src/components/ui/Button.tsx +158 -0
  37. package/src/components/ui/Card.tsx +162 -0
  38. package/src/components/ui/Icons.tsx +508 -0
  39. package/src/config/index.ts +207 -0
  40. package/src/config/presets/generic.ts +153 -0
  41. package/src/config/presets/home-kitchen.ts +154 -0
  42. package/src/config/presets/index.ts +708 -0
  43. package/src/config/presets/professional.ts +165 -0
  44. package/src/config/presets/repair.ts +160 -0
  45. package/src/config/presets/restaurant.ts +162 -0
  46. package/src/config/presets/salon.ts +178 -0
  47. package/src/config/presets/tailor.ts +159 -0
  48. package/src/config/types.ts +314 -0
  49. package/src/data/csv-parser.ts +154 -0
  50. package/src/data/defaults.ts +202 -0
  51. package/src/data/google-drive.ts +148 -0
  52. package/src/data/index.ts +535 -0
  53. package/src/data/sheets.ts +709 -0
  54. package/src/data/types.ts +379 -0
  55. package/src/seo/index.ts +272 -0
  56. package/src/theme/colors.ts +351 -0
  57. package/src/theme/index.ts +249 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/config/index.ts","../../src/config/presets/tailor.ts","../../src/config/presets/restaurant.ts","../../src/config/presets/home-kitchen.ts","../../src/config/presets/salon.ts","../../src/config/presets/repair.ts","../../src/config/presets/professional.ts","../../src/config/presets/generic.ts","../../src/config/presets/index.ts"],"sourcesContent":["/**\n * SheetSite Configuration Module\n *\n * Provides configuration types, business type presets, and utilities\n * for setting up and customizing websites.\n */\n\n// Types\nexport * from './types';\n\n// Presets\nexport {\n presets,\n getPreset,\n getSupportedBusinessTypes,\n businessCategories,\n recommendBusinessType,\n tailorPreset,\n restaurantPreset,\n homeKitchenPreset,\n salonPreset,\n repairPreset,\n professionalPreset,\n genericPreset,\n} from './presets';\n\n// =============================================================================\n// CONFIGURATION UTILITIES\n// =============================================================================\n\nimport type {\n SiteConfig,\n BusinessType,\n BusinessPreset,\n ThemePreset,\n PageConfig,\n HomeSectionType,\n} from './types';\nimport { getPreset } from './presets';\n\n/**\n * Create a site configuration from a business preset.\n * Allows overriding specific values.\n */\nexport function createSiteConfig(\n businessType: BusinessType | string,\n overrides?: Partial<SiteConfig>\n): SiteConfig {\n const preset = getPreset(businessType);\n const config = { ...preset.config };\n\n if (overrides) {\n // Merge theme\n if (overrides.theme) {\n config.theme = { ...config.theme, ...overrides.theme };\n }\n\n // Merge pages\n if (overrides.pages) {\n config.pages = { ...config.pages, ...overrides.pages } as SiteConfig['pages'];\n }\n\n // Merge SEO\n if (overrides.seo) {\n config.seo = { ...config.seo, ...overrides.seo };\n }\n\n // Merge contact form\n if (overrides.contactForm) {\n config.contactForm = { ...config.contactForm, ...overrides.contactForm };\n }\n\n // Merge features\n if (overrides.features) {\n config.features = { ...config.features, ...overrides.features };\n }\n\n // Simple overrides\n if (overrides.siteUrl) config.siteUrl = overrides.siteUrl;\n if (overrides.customClasses) {\n config.customClasses = { ...config.customClasses, ...overrides.customClasses };\n }\n }\n\n return config;\n}\n\n/**\n * Get the sheet template for a business type.\n * Useful for generating documentation or Google Sheet templates.\n */\nexport function getSheetTemplate(businessType: BusinessType | string): BusinessPreset['sheetTemplate'] {\n const preset = getPreset(businessType);\n return preset.sheetTemplate;\n}\n\n/**\n * Get default data for a business type.\n */\nexport function getDefaultData(businessType: BusinessType | string): BusinessPreset['defaults'] {\n const preset = getPreset(businessType);\n return preset.defaults;\n}\n\n/**\n * Get icon suggestions for a business type.\n */\nexport function getIconSuggestions(businessType: BusinessType | string): string[] {\n const preset = getPreset(businessType);\n return preset.iconSuggestions;\n}\n\n/**\n * Get image suggestions for a business type.\n */\nexport function getImageSuggestions(businessType: BusinessType | string): string[] {\n const preset = getPreset(businessType);\n return preset.imageSuggestions;\n}\n\n/**\n * Validate a site configuration.\n */\nexport function validateSiteConfig(config: SiteConfig): { valid: boolean; errors: string[] } {\n const errors: string[] = [];\n\n // Check required fields\n if (!config.businessType) {\n errors.push('businessType is required');\n }\n\n if (!config.pages?.home) {\n errors.push('pages.home configuration is required');\n }\n\n if (!config.theme) {\n errors.push('theme configuration is required');\n }\n\n // Check home page sections\n if (config.pages?.home?.sections) {\n const validSections: HomeSectionType[] = [\n 'hero', 'services', 'menu', 'products', 'gallery',\n 'testimonials', 'team', 'faq', 'hours', 'location',\n 'contact-form', 'cta', 'how-it-works', 'announcements', 'about-preview',\n ];\n\n for (const section of config.pages.home.sections) {\n if (!validSections.includes(section)) {\n errors.push(`Invalid home section: ${section}`);\n }\n }\n }\n\n return {\n valid: errors.length === 0,\n errors,\n };\n}\n\n// =============================================================================\n// THEME HELPERS\n// =============================================================================\n\n/**\n * Get available theme presets.\n */\nexport const themePresets: ThemePreset[] = [\n 'warm-brown',\n 'cool-blue',\n 'earth-green',\n 'warm-amber',\n 'elegant-gold',\n 'fresh-teal',\n 'bold-red',\n 'soft-pink',\n 'slate-gray',\n 'forest-green',\n];\n\n/**\n * Get a description for a theme preset.\n */\nexport function getThemeDescription(preset: ThemePreset): string {\n const descriptions: Record<ThemePreset, string> = {\n 'warm-brown': 'Warm, earthy tones perfect for tailoring, leather goods, and traditional crafts',\n 'cool-blue': 'Professional and trustworthy, ideal for professional services and tech',\n 'earth-green': 'Natural and organic, great for eco-friendly, outdoor, and health businesses',\n 'warm-amber': 'Welcoming and appetizing, perfect for food, hospitality, and home businesses',\n 'elegant-gold': 'Luxurious and sophisticated, suited for upscale and formal businesses',\n 'fresh-teal': 'Modern and creative, ideal for spas, creative studios, and wellness',\n 'bold-red': 'Energetic and urgent, great for automotive, sports, and action-oriented businesses',\n 'soft-pink': 'Gentle and feminine, perfect for beauty, weddings, and delicate services',\n 'slate-gray': 'Minimalist and industrial, suited for modern, urban businesses',\n 'forest-green': 'Deep and natural, ideal for outdoor, nature, and sustainability-focused businesses',\n };\n\n return descriptions[preset];\n}\n\n/**\n * Recommend a theme based on business type.\n */\nexport function recommendTheme(businessType: BusinessType | string): ThemePreset {\n const preset = getPreset(businessType);\n return preset.config.theme.preset || 'cool-blue';\n}\n","/**\n * Tailor / Alterations Business Preset\n */\n\nimport type { BusinessPreset } from '../types';\n\nexport const tailorPreset: BusinessPreset = {\n type: 'tailor',\n name: 'Tailor & Alterations',\n description: 'Configuration for tailoring, alterations, and custom clothing businesses',\n\n config: {\n businessType: 'tailor',\n theme: {\n preset: 'warm-brown',\n borderRadius: 'md',\n shadows: 'md',\n },\n pages: {\n home: {\n enabled: true,\n sections: [\n 'hero',\n 'services',\n 'gallery',\n 'testimonials',\n 'hours',\n 'location',\n 'faq',\n ],\n },\n about: { enabled: true },\n services: { enabled: true, title: 'Our Services' },\n gallery: { enabled: true, title: 'Our Work' },\n faq: { enabled: true },\n contact: { enabled: true },\n privacy: { enabled: true },\n },\n seo: {\n titleTemplate: '%s | Expert Tailoring & Alterations',\n keywords: ['tailor', 'alterations', 'seamstress', 'hemming', 'custom clothing', 'wedding dress alterations'],\n jsonLdType: 'LocalBusiness',\n },\n contactForm: {\n enabled: true,\n fields: {\n name: true,\n email: true,\n phone: true,\n service: true,\n message: true,\n },\n },\n features: {\n mobileCallBar: true,\n openStatus: true,\n mapEmbed: true,\n socialLinks: true,\n },\n },\n\n defaults: {\n business: {\n tagline: 'Expert Alterations & Custom Tailoring',\n description: 'Professional tailoring services with attention to detail and quality craftsmanship.',\n priceRange: '$$',\n },\n services: [\n { id: 's1', title: 'Alterations', description: 'Expert alterations for all garments including pants, shirts, dresses, and jackets', priceNote: 'Starting at $15', icon: 'scissors', sortOrder: 1 },\n { id: 's2', title: 'Hemming', description: 'Professional hemming for pants, skirts, dresses, and curtains', priceNote: 'From $12', icon: 'ruler', sortOrder: 2 },\n { id: 's3', title: 'Wedding & Formal', description: 'Specialized alterations for wedding dresses, bridesmaids gowns, and formal wear', priceNote: 'Custom quote', icon: 'heart', sortOrder: 3 },\n { id: 's4', title: 'Repairs & Restoration', description: 'Zipper replacement, button repair, seam repair, and garment restoration', priceNote: 'From $10', icon: 'wrench', sortOrder: 4 },\n { id: 's5', title: 'Custom Tailoring', description: 'Made-to-measure suits, shirts, and garments tailored to your exact specifications', priceNote: 'By consultation', icon: 'sparkles', sortOrder: 5 },\n { id: 's6', title: 'Leather & Specialty', description: 'Expert work on leather, suede, and delicate fabrics', priceNote: 'Call for pricing', icon: 'star', sortOrder: 6 },\n ],\n faq: [\n { id: 'f1', question: 'How long do alterations typically take?', answer: 'Most alterations are completed within 3-5 business days. Rush service is available for an additional fee. Wedding and formal wear may require more time for multiple fittings.', sortOrder: 1 },\n { id: 'f2', question: 'Do you work on leather and suede?', answer: 'Yes, we have extensive experience with leather and suede garments. These materials require specialized care and techniques, so pricing and timing may vary.', sortOrder: 2 },\n { id: 'f3', question: 'What should I bring to my fitting?', answer: 'Please bring the shoes you plan to wear with the garment, and any undergarments that might affect the fit. For formal wear, bring accessories like belts or jewelry.', sortOrder: 3 },\n { id: 'f4', question: 'Do you offer wedding dress alterations?', answer: 'Absolutely! We specialize in wedding dress alterations including hemming, bustling, taking in or letting out, and adding embellishments. We recommend scheduling your first fitting 2-3 months before the wedding.', sortOrder: 4 },\n { id: 'f5', question: 'Can you match fabric for repairs?', answer: 'We maintain an extensive fabric library and can often find close matches for repairs and patches. Bring your garment in for a free assessment.', sortOrder: 5 },\n ],\n },\n\n sheetTemplate: {\n tabs: [\n {\n name: 'business',\n required: true,\n columns: [\n { name: 'key', description: 'Setting name', example: 'name', required: true },\n { name: 'value', description: 'Setting value', example: 'Expert Tailoring', required: true },\n ],\n },\n {\n name: 'hours',\n required: true,\n columns: [\n { name: 'day', description: 'Day of week', example: 'Monday', required: true },\n { name: 'open', description: 'Opening time', example: '9:00 AM', required: false },\n { name: 'close', description: 'Closing time', example: '6:00 PM', required: false },\n { name: 'closed', description: 'Is closed?', example: 'FALSE', required: false },\n ],\n },\n {\n name: 'services',\n required: true,\n columns: [\n { name: 'title', description: 'Service name', example: 'Alterations', required: true },\n { name: 'description', description: 'Service description', example: 'Expert alterations for all garments', required: false },\n { name: 'price_note', description: 'Pricing info', example: 'Starting at $15', required: false },\n { name: 'icon', description: 'Icon name', example: 'scissors', required: false },\n { name: 'sort', description: 'Display order', example: '1', required: false },\n ],\n },\n {\n name: 'gallery',\n required: false,\n columns: [\n { name: 'image_url', description: 'Image URL (Google Drive or direct)', example: 'https://drive.google.com/...', required: true },\n { name: 'alt', description: 'Image description', example: 'Wedding dress alteration', required: false },\n { name: 'caption', description: 'Caption text', example: 'Custom bridal alterations', required: false },\n { name: 'sort', description: 'Display order', example: '1', required: false },\n ],\n },\n {\n name: 'testimonials',\n required: false,\n columns: [\n { name: 'quote', description: 'Customer review', example: 'Amazing work on my wedding dress!', required: true },\n { name: 'name', description: 'Customer name', example: 'Sarah M.', required: true },\n { name: 'context', description: 'Service context', example: 'Wedding alterations', required: false },\n { name: 'rating', description: 'Star rating (1-5)', example: '5', required: false },\n { name: 'sort', description: 'Display order', example: '1', required: false },\n ],\n },\n {\n name: 'faq',\n required: false,\n columns: [\n { name: 'question', description: 'Question text', example: 'How long do alterations take?', required: true },\n { name: 'answer', description: 'Answer text', example: '3-5 business days typically', required: true },\n { name: 'sort', description: 'Display order', example: '1', required: false },\n ],\n },\n ],\n },\n\n iconSuggestions: ['scissors', 'ruler', 'heart', 'sparkles', 'star', 'wrench', 'shirt', 'dress'],\n\n imageSuggestions: [\n 'Professional tailor measuring fabric',\n 'Close-up of precise stitching',\n 'Wedding dress on mannequin',\n 'Organized tailor workshop',\n 'Before and after alterations',\n 'Happy customer with altered garment',\n ],\n};\n","/**\n * Restaurant / Cafe Business Preset\n */\n\nimport type { BusinessPreset } from '../types';\n\nexport const restaurantPreset: BusinessPreset = {\n type: 'restaurant',\n name: 'Restaurant & Cafe',\n description: 'Configuration for restaurants, cafes, and dining establishments',\n\n config: {\n businessType: 'restaurant',\n theme: {\n preset: 'warm-amber',\n borderRadius: 'lg',\n shadows: 'md',\n },\n pages: {\n home: {\n enabled: true,\n sections: [\n 'hero',\n 'menu',\n 'gallery',\n 'testimonials',\n 'hours',\n 'location',\n ],\n },\n about: { enabled: true, title: 'Our Story' },\n menu: { enabled: true, title: 'Menu' },\n gallery: { enabled: true, title: 'Gallery' },\n contact: { enabled: true },\n privacy: { enabled: true },\n },\n seo: {\n titleTemplate: '%s | Delicious Dining Experience',\n keywords: ['restaurant', 'dining', 'food', 'cuisine', 'local restaurant', 'family dining'],\n jsonLdType: 'Restaurant',\n },\n contactForm: {\n enabled: true,\n fields: {\n name: true,\n email: true,\n phone: true,\n service: false,\n message: true,\n },\n successMessage: 'Thank you for your message! We\\'ll get back to you soon.',\n },\n features: {\n mobileCallBar: true,\n openStatus: true,\n mapEmbed: true,\n socialLinks: true,\n bookingButton: true,\n },\n },\n\n defaults: {\n business: {\n tagline: 'Fresh, Delicious, Made with Love',\n description: 'Experience exceptional cuisine in a warm and welcoming atmosphere.',\n priceRange: '$$',\n },\n menu: [\n { id: 'm1', name: 'House Salad', description: 'Fresh mixed greens with house vinaigrette', price: 9.99, category: 'Starters', sortOrder: 1 },\n { id: 'm2', name: 'Soup of the Day', description: 'Ask your server for today\\'s selection', priceNote: 'Cup $5 / Bowl $8', category: 'Starters', sortOrder: 2 },\n { id: 'm3', name: 'Signature Pasta', description: 'House-made pasta with seasonal vegetables', price: 18.99, category: 'Entrees', sortOrder: 3 },\n { id: 'm4', name: 'Grilled Salmon', description: 'Fresh Atlantic salmon with lemon herb butter', price: 24.99, category: 'Entrees', sortOrder: 4 },\n { id: 'm5', name: 'Classic Burger', description: 'Half-pound beef patty with all the fixings', price: 15.99, category: 'Entrees', sortOrder: 5 },\n { id: 'm6', name: 'Chocolate Cake', description: 'Rich chocolate layer cake', price: 8.99, category: 'Desserts', sortOrder: 6 },\n ],\n faq: [\n { id: 'f1', question: 'Do you take reservations?', answer: 'Yes! We recommend reservations for parties of 4 or more, especially on weekends. You can call us or book online.', sortOrder: 1 },\n { id: 'f2', question: 'Do you offer takeout or delivery?', answer: 'Yes, we offer both takeout and delivery. Order through our website or your favorite delivery app.', sortOrder: 2 },\n { id: 'f3', question: 'Can you accommodate dietary restrictions?', answer: 'Absolutely! We have vegetarian, vegan, and gluten-free options. Please inform your server of any allergies or dietary needs.', sortOrder: 3 },\n { id: 'f4', question: 'Do you have a private dining room?', answer: 'Yes, we have a private dining room that seats up to 20 guests. Contact us for reservations and special event menus.', sortOrder: 4 },\n { id: 'f5', question: 'Is there parking available?', answer: 'Yes, we have a parking lot behind the restaurant with free parking for guests.', sortOrder: 5 },\n ],\n },\n\n sheetTemplate: {\n tabs: [\n {\n name: 'business',\n required: true,\n columns: [\n { name: 'key', description: 'Setting name', example: 'name', required: true },\n { name: 'value', description: 'Setting value', example: 'The Local Kitchen', required: true },\n ],\n },\n {\n name: 'hours',\n required: true,\n columns: [\n { name: 'day', description: 'Day of week', example: 'Monday', required: true },\n { name: 'open', description: 'Opening time', example: '11:00 AM', required: false },\n { name: 'close', description: 'Closing time', example: '10:00 PM', required: false },\n { name: 'closed', description: 'Is closed?', example: 'FALSE', required: false },\n ],\n },\n {\n name: 'menu',\n required: true,\n columns: [\n { name: 'name', description: 'Item name', example: 'Grilled Salmon', required: true },\n { name: 'description', description: 'Item description', example: 'Fresh Atlantic salmon with herbs', required: false },\n { name: 'price', description: 'Price (number)', example: '24.99', required: false },\n { name: 'price_note', description: 'Price note', example: 'Market price', required: false },\n { name: 'category', description: 'Menu section', example: 'Entrees', required: false },\n { name: 'dietary', description: 'Dietary tags (comma-separated)', example: 'gluten-free, dairy-free', required: false },\n { name: 'featured', description: 'Is featured?', example: 'TRUE', required: false },\n { name: 'sort', description: 'Display order', example: '1', required: false },\n ],\n },\n {\n name: 'gallery',\n required: false,\n columns: [\n { name: 'image_url', description: 'Image URL', example: 'https://drive.google.com/...', required: true },\n { name: 'alt', description: 'Image description', example: 'Signature pasta dish', required: false },\n { name: 'caption', description: 'Caption text', example: 'Our famous house-made pasta', required: false },\n { name: 'sort', description: 'Display order', example: '1', required: false },\n ],\n },\n {\n name: 'testimonials',\n required: false,\n columns: [\n { name: 'quote', description: 'Customer review', example: 'Best pasta in town!', required: true },\n { name: 'name', description: 'Customer name', example: 'John D.', required: true },\n { name: 'rating', description: 'Star rating (1-5)', example: '5', required: false },\n { name: 'source', description: 'Review source', example: 'Yelp', required: false },\n { name: 'sort', description: 'Display order', example: '1', required: false },\n ],\n },\n {\n name: 'faq',\n required: false,\n columns: [\n { name: 'question', description: 'Question text', example: 'Do you take reservations?', required: true },\n { name: 'answer', description: 'Answer text', example: 'Yes, we recommend them for parties of 4+', required: true },\n { name: 'sort', description: 'Display order', example: '1', required: false },\n ],\n },\n ],\n },\n\n iconSuggestions: ['utensils', 'chef-hat', 'wine', 'coffee', 'pizza', 'salad', 'cake', 'soup'],\n\n imageSuggestions: [\n 'Beautiful plated dish',\n 'Cozy restaurant interior',\n 'Chef preparing food',\n 'Happy diners at table',\n 'Bar or drink selection',\n 'Outdoor patio seating',\n ],\n};\n","/**\n * Home Kitchen / Cottage Food Business Preset\n */\n\nimport type { BusinessPreset } from '../types';\n\nexport const homeKitchenPreset: BusinessPreset = {\n type: 'home-kitchen',\n name: 'Home Kitchen & Cottage Food',\n description: 'Configuration for home-based food businesses, cottage food producers, and bakers',\n\n config: {\n businessType: 'home-kitchen',\n theme: {\n preset: 'warm-amber',\n borderRadius: 'lg',\n shadows: 'sm',\n },\n pages: {\n home: {\n enabled: true,\n sections: [\n 'hero',\n 'products',\n 'how-it-works',\n 'gallery',\n 'testimonials',\n 'faq',\n 'contact-form',\n ],\n },\n about: { enabled: true, title: 'My Story' },\n products: { enabled: true, title: 'Products' },\n gallery: { enabled: true, title: 'Gallery' },\n faq: { enabled: true },\n contact: { enabled: true },\n privacy: { enabled: true },\n },\n seo: {\n titleTemplate: '%s | Homemade with Love',\n keywords: ['homemade', 'cottage food', 'baked goods', 'local', 'handmade', 'artisan'],\n jsonLdType: 'LocalBusiness',\n },\n contactForm: {\n enabled: true,\n fields: {\n name: true,\n email: true,\n phone: true,\n service: false,\n message: true,\n },\n successMessage: 'Thank you for your order inquiry! I\\'ll get back to you within 24 hours.',\n },\n features: {\n mobileCallBar: true,\n openStatus: false, // Often by appointment\n socialLinks: true,\n bookingButton: true,\n },\n },\n\n defaults: {\n business: {\n tagline: 'Homemade Goodness, Made with Love',\n description: 'Delicious homemade treats crafted with quality ingredients and care.',\n priceRange: '$$',\n },\n products: [\n { id: 'p1', name: 'Signature Cookies', description: 'Our famous chocolate chip cookies', price: 3.50, priceNote: 'per cookie or $18/dozen', category: 'Cookies', featured: true, sortOrder: 1 },\n { id: 'p2', name: 'Fresh Bread', description: 'Artisan sourdough baked fresh', price: 8, priceNote: 'per loaf', category: 'Bread', sortOrder: 2 },\n { id: 'p3', name: 'Seasonal Pie', description: 'Made with fresh, seasonal fruit', price: 25, priceNote: '9-inch pie', category: 'Pies', sortOrder: 3 },\n { id: 'p4', name: 'Custom Cake', description: 'Birthday, celebration, or special occasion cakes', priceNote: 'Starting at $45', category: 'Cakes', sortOrder: 4 },\n { id: 'p5', name: 'Homemade Jam', description: 'Small-batch preserves with local fruit', price: 8, priceNote: '8 oz jar', category: 'Preserves', sortOrder: 5 },\n ],\n faq: [\n { id: 'f1', question: 'How do I place an order?', answer: 'You can place an order through the contact form on this website, by texting or calling, or through our social media pages. I\\'ll confirm availability and arrange pickup or delivery.', sortOrder: 1 },\n { id: 'f2', question: 'How far in advance should I order?', answer: 'For standard items, 2-3 days notice is usually sufficient. For custom cakes or large orders, please give at least 1-2 weeks notice.', sortOrder: 2 },\n { id: 'f3', question: 'Do you accommodate dietary restrictions?', answer: 'Yes! I offer gluten-free, dairy-free, and vegan options for many items. Please mention any allergies or dietary needs when ordering.', sortOrder: 3 },\n { id: 'f4', question: 'Do you deliver?', answer: 'I offer local pickup from my home and delivery within a 10-mile radius for orders over $25. Delivery fees may apply.', sortOrder: 4 },\n { id: 'f5', question: 'What forms of payment do you accept?', answer: 'I accept cash, Venmo, PayPal, and Zelle. Payment is due at pickup or delivery.', sortOrder: 5 },\n { id: 'f6', question: 'Are you licensed?', answer: 'Yes! I operate under my state\\'s cottage food law, which allows me to produce and sell specific homemade food items directly to consumers.', sortOrder: 6 },\n ],\n },\n\n sheetTemplate: {\n tabs: [\n {\n name: 'business',\n required: true,\n columns: [\n { name: 'key', description: 'Setting name', example: 'name', required: true },\n { name: 'value', description: 'Setting value', example: 'Sweet Home Bakery', required: true },\n ],\n },\n {\n name: 'products',\n required: true,\n columns: [\n { name: 'name', description: 'Product name', example: 'Chocolate Chip Cookies', required: true },\n { name: 'description', description: 'Product description', example: 'Classic cookies with premium chocolate', required: false },\n { name: 'price', description: 'Price (number)', example: '18', required: false },\n { name: 'price_note', description: 'Price details', example: 'per dozen', required: false },\n { name: 'category', description: 'Product category', example: 'Cookies', required: false },\n { name: 'image_url', description: 'Product image', example: 'https://drive.google.com/...', required: false },\n { name: 'featured', description: 'Is featured?', example: 'TRUE', required: false },\n { name: 'in_stock', description: 'Currently available?', example: 'TRUE', required: false },\n { name: 'sort', description: 'Display order', example: '1', required: false },\n ],\n },\n {\n name: 'gallery',\n required: false,\n columns: [\n { name: 'image_url', description: 'Image URL', example: 'https://drive.google.com/...', required: true },\n { name: 'alt', description: 'Image description', example: 'Fresh baked cookies', required: false },\n { name: 'caption', description: 'Caption text', example: 'Straight from the oven', required: false },\n { name: 'sort', description: 'Display order', example: '1', required: false },\n ],\n },\n {\n name: 'testimonials',\n required: false,\n columns: [\n { name: 'quote', description: 'Customer review', example: 'The best cookies I\\'ve ever had!', required: true },\n { name: 'name', description: 'Customer name', example: 'Lisa M.', required: true },\n { name: 'context', description: 'Order context', example: 'Birthday party order', required: false },\n { name: 'rating', description: 'Star rating (1-5)', example: '5', required: false },\n { name: 'sort', description: 'Display order', example: '1', required: false },\n ],\n },\n {\n name: 'faq',\n required: false,\n columns: [\n { name: 'question', description: 'Question text', example: 'How do I order?', required: true },\n { name: 'answer', description: 'Answer text', example: 'Contact me through the form...', required: true },\n { name: 'sort', description: 'Display order', example: '1', required: false },\n ],\n },\n ],\n },\n\n iconSuggestions: ['cake', 'cookie', 'bread', 'heart', 'sparkles', 'star', 'gift', 'home'],\n\n imageSuggestions: [\n 'Beautifully decorated custom cake',\n 'Fresh-baked cookies cooling on rack',\n 'Artisan bread with golden crust',\n 'Colorful cupcake display',\n 'Homemade jam jars with labels',\n 'Kitchen workspace with ingredients',\n ],\n};\n","/**\n * Salon / Beauty Business Preset\n */\n\nimport type { BusinessPreset } from '../types';\n\nexport const salonPreset: BusinessPreset = {\n type: 'salon',\n name: 'Hair Salon & Beauty',\n description: 'Configuration for hair salons, beauty parlors, and styling businesses',\n\n config: {\n businessType: 'salon',\n theme: {\n preset: 'soft-pink',\n borderRadius: 'lg',\n shadows: 'md',\n },\n pages: {\n home: {\n enabled: true,\n sections: [\n 'hero',\n 'services',\n 'team',\n 'gallery',\n 'testimonials',\n 'hours',\n 'location',\n ],\n },\n about: { enabled: true },\n services: { enabled: true, title: 'Services & Pricing' },\n team: { enabled: true, title: 'Our Stylists' },\n gallery: { enabled: true, title: 'Our Work' },\n contact: { enabled: true },\n privacy: { enabled: true },\n },\n seo: {\n titleTemplate: '%s | Hair Salon & Beauty',\n keywords: ['hair salon', 'haircut', 'color', 'highlights', 'styling', 'beauty', 'blowout'],\n jsonLdType: 'HealthAndBeautyBusiness',\n },\n contactForm: {\n enabled: true,\n fields: {\n name: true,\n email: true,\n phone: true,\n service: true,\n message: true,\n },\n },\n features: {\n mobileCallBar: true,\n openStatus: true,\n mapEmbed: true,\n socialLinks: true,\n bookingButton: true,\n },\n },\n\n defaults: {\n business: {\n tagline: 'Where Style Meets Expertise',\n description: 'Experience the art of hair styling with our talented team of professionals.',\n priceRange: '$$',\n },\n services: [\n { id: 's1', title: 'Women\\'s Haircut', description: 'Cut, shampoo, and style', priceNote: 'From $45', icon: 'scissors', sortOrder: 1 },\n { id: 's2', title: 'Men\\'s Haircut', description: 'Precision cut and style', priceNote: 'From $30', icon: 'scissors', sortOrder: 2 },\n { id: 's3', title: 'Single Process Color', description: 'Full head single color application', priceNote: 'From $75', icon: 'palette', sortOrder: 3 },\n { id: 's4', title: 'Highlights', description: 'Partial or full highlights', priceNote: 'From $95', icon: 'sun', sortOrder: 4 },\n { id: 's5', title: 'Balayage', description: 'Hand-painted highlights for a natural look', priceNote: 'From $150', icon: 'paintbrush', sortOrder: 5 },\n { id: 's6', title: 'Blowout', description: 'Shampoo and professional blowout', priceNote: 'From $40', icon: 'wind', sortOrder: 6 },\n { id: 's7', title: 'Deep Conditioning', description: 'Intensive hair treatment', priceNote: 'From $25', icon: 'sparkles', sortOrder: 7 },\n { id: 's8', title: 'Special Occasion', description: 'Updos and formal styling', priceNote: 'From $65', icon: 'star', sortOrder: 8 },\n ],\n team: [\n { id: 't1', name: 'Stylist Name', role: 'Senior Stylist', bio: 'With over 10 years of experience, specializing in color and cutting.', sortOrder: 1 },\n { id: 't2', name: 'Stylist Name', role: 'Color Specialist', bio: 'Expert in balayage, highlights, and creative color techniques.', sortOrder: 2 },\n ],\n faq: [\n { id: 'f1', question: 'Do I need an appointment?', answer: 'Appointments are strongly recommended to ensure we can give you our full attention. Walk-ins are welcome based on availability.', sortOrder: 1 },\n { id: 'f2', question: 'What is your cancellation policy?', answer: 'We require 24-hour notice for cancellations or rescheduling. Late cancellations may incur a fee.', sortOrder: 2 },\n { id: 'f3', question: 'Do you offer consultations?', answer: 'Yes! We offer free consultations for color services and major transformations. This helps us understand your goals and create a plan.', sortOrder: 3 },\n { id: 'f4', question: 'What products do you use?', answer: 'We use professional-grade products from top brands. Ask your stylist about our current product lines.', sortOrder: 4 },\n { id: 'f5', question: 'How should I prepare for my appointment?', answer: 'Come with clean, dry hair unless otherwise instructed. Feel free to bring photos of styles you love!', sortOrder: 5 },\n ],\n },\n\n sheetTemplate: {\n tabs: [\n {\n name: 'business',\n required: true,\n columns: [\n { name: 'key', description: 'Setting name', example: 'name', required: true },\n { name: 'value', description: 'Setting value', example: 'Luxe Hair Studio', required: true },\n ],\n },\n {\n name: 'hours',\n required: true,\n columns: [\n { name: 'day', description: 'Day of week', example: 'Monday', required: true },\n { name: 'open', description: 'Opening time', example: '10:00 AM', required: false },\n { name: 'close', description: 'Closing time', example: '7:00 PM', required: false },\n { name: 'closed', description: 'Is closed?', example: 'FALSE', required: false },\n ],\n },\n {\n name: 'services',\n required: true,\n columns: [\n { name: 'title', description: 'Service name', example: 'Women\\'s Haircut', required: true },\n { name: 'description', description: 'Service description', example: 'Cut, shampoo, and style', required: false },\n { name: 'price_note', description: 'Pricing info', example: 'From $45', required: false },\n { name: 'duration', description: 'Service duration', example: '60 min', required: false },\n { name: 'icon', description: 'Icon name', example: 'scissors', required: false },\n { name: 'category', description: 'Service category', example: 'Cuts', required: false },\n { name: 'sort', description: 'Display order', example: '1', required: false },\n ],\n },\n {\n name: 'team',\n required: false,\n columns: [\n { name: 'name', description: 'Stylist name', example: 'Sarah Johnson', required: true },\n { name: 'role', description: 'Role/title', example: 'Senior Stylist', required: false },\n { name: 'bio', description: 'Short bio', example: 'Specializing in color for 10+ years', required: false },\n { name: 'image_url', description: 'Photo URL', example: 'https://drive.google.com/...', required: false },\n { name: 'sort', description: 'Display order', example: '1', required: false },\n ],\n },\n {\n name: 'gallery',\n required: false,\n columns: [\n { name: 'image_url', description: 'Image URL', example: 'https://drive.google.com/...', required: true },\n { name: 'alt', description: 'Image description', example: 'Balayage transformation', required: false },\n { name: 'caption', description: 'Caption text', example: 'Sun-kissed balayage', required: false },\n { name: 'sort', description: 'Display order', example: '1', required: false },\n ],\n },\n {\n name: 'testimonials',\n required: false,\n columns: [\n { name: 'quote', description: 'Customer review', example: 'Best haircut I\\'ve ever had!', required: true },\n { name: 'name', description: 'Customer name', example: 'Amanda R.', required: true },\n { name: 'rating', description: 'Star rating (1-5)', example: '5', required: false },\n { name: 'sort', description: 'Display order', example: '1', required: false },\n ],\n },\n {\n name: 'faq',\n required: false,\n columns: [\n { name: 'question', description: 'Question text', example: 'Do I need an appointment?', required: true },\n { name: 'answer', description: 'Answer text', example: 'Appointments are recommended...', required: true },\n { name: 'sort', description: 'Display order', example: '1', required: false },\n ],\n },\n ],\n },\n\n iconSuggestions: ['scissors', 'palette', 'sparkles', 'sun', 'wind', 'star', 'heart', 'user'],\n\n imageSuggestions: [\n 'Before and after hair transformation',\n 'Stylist working on client',\n 'Beautiful balayage result',\n 'Salon interior',\n 'Product display',\n 'Special occasion updo',\n ],\n};\n","/**\n * Repair Shop Business Preset\n * For shoe repair, electronics repair, watch repair, etc.\n */\n\nimport type { BusinessPreset } from '../types';\n\nexport const repairPreset: BusinessPreset = {\n type: 'shoe-repair',\n name: 'Repair Shop',\n description: 'Configuration for repair shops (shoe, electronics, watch, etc.)',\n\n config: {\n businessType: 'shoe-repair',\n theme: {\n preset: 'warm-brown',\n borderRadius: 'md',\n shadows: 'md',\n },\n pages: {\n home: {\n enabled: true,\n sections: [\n 'hero',\n 'services',\n 'how-it-works',\n 'gallery',\n 'testimonials',\n 'hours',\n 'location',\n 'faq',\n ],\n },\n about: { enabled: true },\n services: { enabled: true, title: 'Our Services' },\n gallery: { enabled: true, title: 'Our Work' },\n faq: { enabled: true },\n contact: { enabled: true },\n privacy: { enabled: true },\n },\n seo: {\n titleTemplate: '%s | Expert Repair Services',\n keywords: ['repair', 'restoration', 'fix', 'local repair shop', 'quality repairs'],\n jsonLdType: 'LocalBusiness',\n },\n contactForm: {\n enabled: true,\n fields: {\n name: true,\n email: true,\n phone: true,\n service: true,\n message: true,\n },\n },\n features: {\n mobileCallBar: true,\n openStatus: true,\n mapEmbed: true,\n socialLinks: true,\n },\n },\n\n defaults: {\n business: {\n tagline: 'Quality Repairs, Trusted Service',\n description: 'Expert repair services with attention to detail and fair pricing.',\n priceRange: '$$',\n },\n services: [\n { id: 's1', title: 'Basic Repair', description: 'Standard repairs and fixes', priceNote: 'From $20', icon: 'wrench', sortOrder: 1 },\n { id: 's2', title: 'Restoration', description: 'Full restoration to like-new condition', priceNote: 'By quote', icon: 'sparkles', sortOrder: 2 },\n { id: 's3', title: 'Cleaning & Care', description: 'Professional cleaning and maintenance', priceNote: 'From $15', icon: 'droplet', sortOrder: 3 },\n { id: 's4', title: 'Custom Work', description: 'Specialized modifications and custom requests', priceNote: 'By consultation', icon: 'star', sortOrder: 4 },\n { id: 's5', title: 'Rush Service', description: 'Same-day or next-day service', priceNote: '+50%', icon: 'clock', sortOrder: 5 },\n ],\n faq: [\n { id: 'f1', question: 'How long do repairs typically take?', answer: 'Standard repairs are usually completed within 3-5 business days. Rush service is available for urgent needs at an additional cost.', sortOrder: 1 },\n { id: 'f2', question: 'Do you provide free estimates?', answer: 'Yes! We provide free estimates for all repairs. Just bring in your item for an assessment.', sortOrder: 2 },\n { id: 'f3', question: 'Do you offer a warranty on repairs?', answer: 'Yes, all our repairs come with a 90-day warranty against workmanship defects.', sortOrder: 3 },\n { id: 'f4', question: 'What brands do you work with?', answer: 'We work with all major brands and have experience with both common and specialty items.', sortOrder: 4 },\n { id: 'f5', question: 'Can you match colors/materials?', answer: 'We maintain an extensive inventory and can often match colors and materials closely. Bring in your item for assessment.', sortOrder: 5 },\n ],\n },\n\n sheetTemplate: {\n tabs: [\n {\n name: 'business',\n required: true,\n columns: [\n { name: 'key', description: 'Setting name', example: 'name', required: true },\n { name: 'value', description: 'Setting value', example: 'Quality Repair Shop', required: true },\n ],\n },\n {\n name: 'hours',\n required: true,\n columns: [\n { name: 'day', description: 'Day of week', example: 'Monday', required: true },\n { name: 'open', description: 'Opening time', example: '9:00 AM', required: false },\n { name: 'close', description: 'Closing time', example: '6:00 PM', required: false },\n { name: 'closed', description: 'Is closed?', example: 'FALSE', required: false },\n ],\n },\n {\n name: 'services',\n required: true,\n columns: [\n { name: 'title', description: 'Service name', example: 'Basic Repair', required: true },\n { name: 'description', description: 'Service description', example: 'Standard repairs and fixes', required: false },\n { name: 'price_note', description: 'Pricing info', example: 'From $20', required: false },\n { name: 'icon', description: 'Icon name', example: 'wrench', required: false },\n { name: 'sort', description: 'Display order', example: '1', required: false },\n ],\n },\n {\n name: 'gallery',\n required: false,\n columns: [\n { name: 'image_url', description: 'Image URL', example: 'https://drive.google.com/...', required: true },\n { name: 'alt', description: 'Image description', example: 'Before and after repair', required: false },\n { name: 'caption', description: 'Caption text', example: 'Restored to like-new condition', required: false },\n { name: 'sort', description: 'Display order', example: '1', required: false },\n ],\n },\n {\n name: 'testimonials',\n required: false,\n columns: [\n { name: 'quote', description: 'Customer review', example: 'Amazing work! Like new again.', required: true },\n { name: 'name', description: 'Customer name', example: 'Mike T.', required: true },\n { name: 'context', description: 'Service context', example: 'Watch restoration', required: false },\n { name: 'rating', description: 'Star rating (1-5)', example: '5', required: false },\n { name: 'sort', description: 'Display order', example: '1', required: false },\n ],\n },\n {\n name: 'faq',\n required: false,\n columns: [\n { name: 'question', description: 'Question text', example: 'How long do repairs take?', required: true },\n { name: 'answer', description: 'Answer text', example: '3-5 business days typically', required: true },\n { name: 'sort', description: 'Display order', example: '1', required: false },\n ],\n },\n ],\n },\n\n iconSuggestions: ['wrench', 'hammer', 'sparkles', 'clock', 'star', 'shield', 'check', 'tool'],\n\n imageSuggestions: [\n 'Before and after repair shots',\n 'Craftsman at work',\n 'Organized workshop',\n 'Close-up of quality workmanship',\n 'Tools of the trade',\n 'Happy customer with repaired item',\n ],\n};\n","/**\n * Professional Services Business Preset\n * For accountants, lawyers, consultants, etc.\n */\n\nimport type { BusinessPreset } from '../types';\n\nexport const professionalPreset: BusinessPreset = {\n type: 'accountant',\n name: 'Professional Services',\n description: 'Configuration for accountants, lawyers, consultants, and other professional service providers',\n\n config: {\n businessType: 'accountant',\n theme: {\n preset: 'cool-blue',\n borderRadius: 'md',\n shadows: 'sm',\n },\n pages: {\n home: {\n enabled: true,\n sections: [\n 'hero',\n 'services',\n 'about-preview',\n 'testimonials',\n 'faq',\n 'contact-form',\n ],\n },\n about: { enabled: true },\n services: { enabled: true, title: 'Our Services' },\n team: { enabled: true, title: 'Our Team' },\n faq: { enabled: true },\n contact: { enabled: true },\n privacy: { enabled: true },\n },\n seo: {\n titleTemplate: '%s | Professional Services',\n keywords: ['professional services', 'consulting', 'expert advice', 'local business'],\n jsonLdType: 'ProfessionalService',\n },\n contactForm: {\n enabled: true,\n fields: {\n name: true,\n email: true,\n phone: true,\n service: true,\n message: true,\n },\n successMessage: 'Thank you for your inquiry. We\\'ll be in touch within one business day.',\n },\n features: {\n mobileCallBar: true,\n openStatus: true,\n mapEmbed: true,\n socialLinks: true,\n bookingButton: true,\n },\n },\n\n defaults: {\n business: {\n tagline: 'Expert Guidance You Can Trust',\n description: 'Professional services delivered with expertise, integrity, and a personal touch.',\n priceRange: '$$$',\n },\n services: [\n { id: 's1', title: 'Initial Consultation', description: 'Comprehensive assessment of your needs and goals', priceNote: 'Free', icon: 'chat', sortOrder: 1 },\n { id: 's2', title: 'Core Services', description: 'Our primary service offering tailored to your needs', priceNote: 'From $150/hour', icon: 'briefcase', sortOrder: 2 },\n { id: 's3', title: 'Comprehensive Package', description: 'Full-service solution with ongoing support', priceNote: 'Custom quote', icon: 'package', sortOrder: 3 },\n { id: 's4', title: 'Ongoing Support', description: 'Monthly retainer for continuous guidance', priceNote: 'From $500/month', icon: 'calendar', sortOrder: 4 },\n ],\n team: [\n { id: 't1', name: 'Principal Name', role: 'Principal / Founder', bio: 'Over 20 years of experience helping clients achieve their goals.', sortOrder: 1 },\n { id: 't2', name: 'Associate Name', role: 'Senior Associate', bio: 'Specialized expertise in key service areas.', sortOrder: 2 },\n ],\n faq: [\n { id: 'f1', question: 'What is your availability?', answer: 'We maintain flexible hours to accommodate our clients\\' schedules. Evening and weekend appointments are available upon request.', sortOrder: 1 },\n { id: 'f2', question: 'Do you offer remote consultations?', answer: 'Yes, we offer both in-person and virtual consultations via video conference for your convenience.', sortOrder: 2 },\n { id: 'f3', question: 'What are your fees?', answer: 'Fees vary based on the complexity of services required. We provide detailed fee estimates after our initial consultation.', sortOrder: 3 },\n { id: 'f4', question: 'What forms of payment do you accept?', answer: 'We accept checks, credit cards, and bank transfers. Payment plans may be available for certain services.', sortOrder: 4 },\n { id: 'f5', question: 'How do I get started?', answer: 'Contact us to schedule a free initial consultation. We\\'ll discuss your needs and how we can help.', sortOrder: 5 },\n ],\n },\n\n sheetTemplate: {\n tabs: [\n {\n name: 'business',\n required: true,\n columns: [\n { name: 'key', description: 'Setting name', example: 'name', required: true },\n { name: 'value', description: 'Setting value', example: 'Smith & Associates', required: true },\n ],\n },\n {\n name: 'hours',\n required: true,\n columns: [\n { name: 'day', description: 'Day of week', example: 'Monday', required: true },\n { name: 'open', description: 'Opening time', example: '9:00 AM', required: false },\n { name: 'close', description: 'Closing time', example: '5:00 PM', required: false },\n { name: 'closed', description: 'Is closed?', example: 'FALSE', required: false },\n ],\n },\n {\n name: 'services',\n required: true,\n columns: [\n { name: 'title', description: 'Service name', example: 'Tax Preparation', required: true },\n { name: 'description', description: 'Service description', example: 'Individual and business tax returns', required: false },\n { name: 'price_note', description: 'Pricing info', example: 'From $200', required: false },\n { name: 'icon', description: 'Icon name', example: 'calculator', required: false },\n { name: 'sort', description: 'Display order', example: '1', required: false },\n ],\n },\n {\n name: 'team',\n required: false,\n columns: [\n { name: 'name', description: 'Team member name', example: 'John Smith, CPA', required: true },\n { name: 'role', description: 'Role/title', example: 'Principal', required: false },\n { name: 'bio', description: 'Short bio', example: '20+ years of experience...', required: false },\n { name: 'image_url', description: 'Photo URL', example: 'https://drive.google.com/...', required: false },\n { name: 'email', description: 'Direct email', example: 'john@example.com', required: false },\n { name: 'sort', description: 'Display order', example: '1', required: false },\n ],\n },\n {\n name: 'testimonials',\n required: false,\n columns: [\n { name: 'quote', description: 'Client testimonial', example: 'Exceptional service and expertise.', required: true },\n { name: 'name', description: 'Client name', example: 'David L.', required: true },\n { name: 'context', description: 'Service context', example: 'Tax planning', required: false },\n { name: 'rating', description: 'Star rating (1-5)', example: '5', required: false },\n { name: 'sort', description: 'Display order', example: '1', required: false },\n ],\n },\n {\n name: 'faq',\n required: false,\n columns: [\n { name: 'question', description: 'Question text', example: 'What are your fees?', required: true },\n { name: 'answer', description: 'Answer text', example: 'Fees vary based on complexity...', required: true },\n { name: 'sort', description: 'Display order', example: '1', required: false },\n ],\n },\n ],\n },\n\n iconSuggestions: ['briefcase', 'calculator', 'scale', 'shield', 'document', 'chart', 'users', 'check'],\n\n imageSuggestions: [\n 'Professional headshots',\n 'Modern office interior',\n 'Team meeting',\n 'Client consultation',\n 'Professional at work',\n 'Office building exterior',\n ],\n};\n","/**\n * Generic Business Preset\n * A flexible starting point for any business type\n */\n\nimport type { BusinessPreset } from '../types';\n\nexport const genericPreset: BusinessPreset = {\n type: 'generic',\n name: 'Generic Business',\n description: 'A flexible configuration that works for most business types',\n\n config: {\n businessType: 'generic',\n theme: {\n preset: 'cool-blue',\n borderRadius: 'md',\n shadows: 'md',\n },\n pages: {\n home: {\n enabled: true,\n sections: [\n 'hero',\n 'services',\n 'testimonials',\n 'hours',\n 'location',\n 'faq',\n ],\n },\n about: { enabled: true },\n services: { enabled: true },\n gallery: { enabled: true },\n faq: { enabled: true },\n contact: { enabled: true },\n privacy: { enabled: true },\n },\n seo: {\n titleTemplate: '%s | Quality Service',\n keywords: ['local business', 'professional service', 'quality'],\n jsonLdType: 'LocalBusiness',\n },\n contactForm: {\n enabled: true,\n fields: {\n name: true,\n email: true,\n phone: true,\n service: true,\n message: true,\n },\n },\n features: {\n mobileCallBar: true,\n openStatus: true,\n mapEmbed: true,\n socialLinks: true,\n },\n },\n\n defaults: {\n business: {\n tagline: 'Quality Service You Can Trust',\n description: 'We are dedicated to providing exceptional service to our community.',\n priceRange: '$$',\n },\n services: [\n { id: 's1', title: 'Service One', description: 'Our primary service offering', priceNote: 'Contact for pricing', sortOrder: 1 },\n { id: 's2', title: 'Service Two', description: 'Another excellent option', priceNote: 'Contact for pricing', sortOrder: 2 },\n { id: 's3', title: 'Service Three', description: 'Specialized service for unique needs', priceNote: 'Contact for pricing', sortOrder: 3 },\n ],\n faq: [\n { id: 'f1', question: 'What are your hours?', answer: 'Please check our hours section above or contact us for current availability.', sortOrder: 1 },\n { id: 'f2', question: 'How can I contact you?', answer: 'You can reach us by phone, email, or through the contact form on this website.', sortOrder: 2 },\n { id: 'f3', question: 'Do you offer free estimates?', answer: 'Yes, we provide free estimates for most services. Contact us to schedule.', sortOrder: 3 },\n ],\n },\n\n sheetTemplate: {\n tabs: [\n {\n name: 'business',\n required: true,\n columns: [\n { name: 'key', description: 'Setting name', example: 'name', required: true },\n { name: 'value', description: 'Setting value', example: 'Your Business Name', required: true },\n ],\n },\n {\n name: 'hours',\n required: true,\n columns: [\n { name: 'day', description: 'Day of week', example: 'Monday', required: true },\n { name: 'open', description: 'Opening time', example: '9:00 AM', required: false },\n { name: 'close', description: 'Closing time', example: '5:00 PM', required: false },\n { name: 'closed', description: 'Is closed?', example: 'FALSE', required: false },\n ],\n },\n {\n name: 'services',\n required: true,\n columns: [\n { name: 'title', description: 'Service name', example: 'Main Service', required: true },\n { name: 'description', description: 'Service description', example: 'Description of the service', required: false },\n { name: 'price_note', description: 'Pricing info', example: 'From $50', required: false },\n { name: 'icon', description: 'Icon name', example: 'star', required: false },\n { name: 'sort', description: 'Display order', example: '1', required: false },\n ],\n },\n {\n name: 'gallery',\n required: false,\n columns: [\n { name: 'image_url', description: 'Image URL', example: 'https://drive.google.com/...', required: true },\n { name: 'alt', description: 'Image description', example: 'Image description', required: false },\n { name: 'caption', description: 'Caption text', example: 'Photo caption', required: false },\n { name: 'sort', description: 'Display order', example: '1', required: false },\n ],\n },\n {\n name: 'testimonials',\n required: false,\n columns: [\n { name: 'quote', description: 'Customer review', example: 'Great service!', required: true },\n { name: 'name', description: 'Customer name', example: 'John D.', required: true },\n { name: 'rating', description: 'Star rating (1-5)', example: '5', required: false },\n { name: 'sort', description: 'Display order', example: '1', required: false },\n ],\n },\n {\n name: 'faq',\n required: false,\n columns: [\n { name: 'question', description: 'Question text', example: 'Common question?', required: true },\n { name: 'answer', description: 'Answer text', example: 'The answer...', required: true },\n { name: 'sort', description: 'Display order', example: '1', required: false },\n ],\n },\n ],\n },\n\n iconSuggestions: ['star', 'check', 'heart', 'sparkles', 'shield', 'clock', 'phone', 'mail'],\n\n imageSuggestions: [\n 'Professional team photo',\n 'Service in action',\n 'Happy customers',\n 'Business storefront',\n 'Quality workmanship',\n 'Before and after results',\n ],\n};\n","/**\n * Business Type Presets\n *\n * Pre-configured setups for different business types.\n * Each preset includes theme, pages, SEO, and default content.\n */\n\nimport type { BusinessPreset, BusinessType } from '../types';\nimport { tailorPreset } from './tailor';\nimport { restaurantPreset } from './restaurant';\nimport { homeKitchenPreset } from './home-kitchen';\nimport { salonPreset } from './salon';\nimport { repairPreset } from './repair';\nimport { professionalPreset } from './professional';\nimport { genericPreset } from './generic';\n\n// Re-export individual presets\nexport { tailorPreset } from './tailor';\nexport { restaurantPreset } from './restaurant';\nexport { homeKitchenPreset } from './home-kitchen';\nexport { salonPreset } from './salon';\nexport { repairPreset } from './repair';\nexport { professionalPreset } from './professional';\nexport { genericPreset } from './generic';\n\n/**\n * Map of all available presets by business type.\n */\nexport const presets: Record<string, BusinessPreset> = {\n // Direct mappings\n 'tailor': tailorPreset,\n 'restaurant': restaurantPreset,\n 'home-kitchen': homeKitchenPreset,\n 'salon': salonPreset,\n 'shoe-repair': repairPreset,\n 'accountant': professionalPreset,\n 'generic': genericPreset,\n\n // Aliases - map similar business types to their closest preset\n 'alterations': tailorPreset,\n 'seamstress': tailorPreset,\n 'dry-cleaner': tailorPreset,\n\n 'cafe': restaurantPreset,\n 'bakery': homeKitchenPreset,\n 'food-truck': restaurantPreset,\n 'catering': restaurantPreset,\n\n 'barbershop': salonPreset,\n 'spa': salonPreset,\n 'nail-salon': salonPreset,\n 'pet-grooming': salonPreset,\n\n 'craft-seller': homeKitchenPreset,\n 'boutique': genericPreset,\n 'florist': genericPreset,\n 'gift-shop': genericPreset,\n\n 'cleaning': repairPreset,\n 'landscaping': repairPreset,\n 'handyman': repairPreset,\n 'plumber': repairPreset,\n 'electrician': repairPreset,\n 'hvac': repairPreset,\n 'moving': repairPreset,\n 'pest-control': repairPreset,\n\n 'auto-repair': repairPreset,\n 'auto-detail': repairPreset,\n 'tire-shop': repairPreset,\n\n 'lawyer': professionalPreset,\n 'real-estate': professionalPreset,\n 'insurance': professionalPreset,\n 'consulting': professionalPreset,\n\n 'personal-trainer': genericPreset,\n 'yoga-studio': genericPreset,\n 'martial-arts': genericPreset,\n 'chiropractor': professionalPreset,\n 'massage': salonPreset,\n\n 'tutoring': professionalPreset,\n 'music-lessons': genericPreset,\n 'photography': genericPreset,\n 'videography': genericPreset,\n 'event-planning': genericPreset,\n};\n\n/**\n * Get a preset by business type.\n * Falls back to generic preset if type is not found.\n */\nexport function getPreset(type: BusinessType | string): BusinessPreset {\n return presets[type] || genericPreset;\n}\n\n/**\n * Get a list of all supported business types with their display names.\n */\nexport function getSupportedBusinessTypes(): Array<{ type: BusinessType; name: string; description: string }> {\n const uniquePresets = new Map<string, BusinessPreset>();\n\n // Get unique presets (avoid duplicates from aliases)\n for (const preset of Object.values(presets)) {\n if (!uniquePresets.has(preset.type)) {\n uniquePresets.set(preset.type, preset);\n }\n }\n\n return Array.from(uniquePresets.values()).map((preset) => ({\n type: preset.type,\n name: preset.name,\n description: preset.description,\n }));\n}\n\n/**\n * Business type categories for organization.\n */\nexport const businessCategories = {\n 'Service Businesses': [\n 'tailor',\n 'shoe-repair',\n 'dry-cleaner',\n 'salon',\n 'barbershop',\n 'spa',\n 'nail-salon',\n 'pet-grooming',\n ],\n 'Food & Beverage': [\n 'restaurant',\n 'cafe',\n 'bakery',\n 'food-truck',\n 'home-kitchen',\n 'catering',\n ],\n 'Retail': [\n 'craft-seller',\n 'boutique',\n 'florist',\n 'gift-shop',\n ],\n 'Home Services': [\n 'cleaning',\n 'landscaping',\n 'handyman',\n 'plumber',\n 'electrician',\n 'hvac',\n 'moving',\n 'pest-control',\n ],\n 'Auto Services': [\n 'auto-repair',\n 'auto-detail',\n 'tire-shop',\n ],\n 'Professional Services': [\n 'accountant',\n 'lawyer',\n 'real-estate',\n 'insurance',\n 'consulting',\n ],\n 'Health & Wellness': [\n 'personal-trainer',\n 'yoga-studio',\n 'martial-arts',\n 'chiropractor',\n 'massage',\n ],\n 'Education & Creative': [\n 'tutoring',\n 'music-lessons',\n 'photography',\n 'videography',\n 'event-planning',\n ],\n};\n\n/**\n * Recommend a business type based on keywords.\n * Enhanced with comprehensive keyword mappings for common Google Maps categories\n * and variations found in scraped lead data.\n *\n * @param keywords - Array of keywords (business name, category, description)\n * @returns The recommended BusinessType\n *\n * @example\n * ```ts\n * recommendBusinessType(['tailor', 'alterations']) // => 'tailor'\n * recommendBusinessType(['Pizza Restaurant']) // => 'restaurant'\n * recommendBusinessType([\"Maria's Hair Salon\"]) // => 'salon'\n * ```\n */\nexport function recommendBusinessType(keywords: string[]): BusinessType {\n const lowerKeywords = keywords.map((k) => k.toLowerCase());\n\n // Comprehensive keyword mapping - ordered by specificity\n // More specific matches should come first\n const keywordMap: Record<string, BusinessType> = {\n // ==========================================================================\n // TAILOR / ALTERATIONS\n // ==========================================================================\n 'tailor': 'tailor',\n 'tailor shop': 'tailor',\n 'tailoring': 'tailor',\n 'alterations': 'tailor',\n 'alteration': 'tailor',\n 'seamstress': 'tailor',\n 'sewing': 'tailor',\n 'hemming': 'tailor',\n 'clothing repair': 'tailor',\n 'suit alterations': 'tailor',\n 'dress alterations': 'tailor',\n 'wedding dress': 'tailor',\n 'bridal alterations': 'tailor',\n 'custom suits': 'tailor',\n 'bespoke': 'tailor',\n\n // Dry cleaning (maps to tailor preset)\n 'dry cleaner': 'dry-cleaner',\n 'dry cleaning': 'dry-cleaner',\n 'laundry': 'dry-cleaner',\n 'laundromat': 'dry-cleaner',\n 'cleaners': 'dry-cleaner',\n\n // ==========================================================================\n // RESTAURANT / FOOD SERVICE\n // ==========================================================================\n 'restaurant': 'restaurant',\n 'dining': 'restaurant',\n 'eatery': 'restaurant',\n 'bistro': 'restaurant',\n 'brasserie': 'restaurant',\n 'trattoria': 'restaurant',\n 'pizzeria': 'restaurant',\n 'pizza': 'restaurant',\n 'mexican restaurant': 'restaurant',\n 'italian restaurant': 'restaurant',\n 'chinese restaurant': 'restaurant',\n 'thai restaurant': 'restaurant',\n 'indian restaurant': 'restaurant',\n 'japanese restaurant': 'restaurant',\n 'sushi': 'restaurant',\n 'ramen': 'restaurant',\n 'pho': 'restaurant',\n 'taqueria': 'restaurant',\n 'burrito': 'restaurant',\n 'burger': 'restaurant',\n 'steakhouse': 'restaurant',\n 'seafood': 'restaurant',\n 'grill': 'restaurant',\n 'bbq': 'restaurant',\n 'barbecue': 'restaurant',\n 'diner': 'restaurant',\n 'deli': 'restaurant',\n 'sandwich': 'restaurant',\n 'sub shop': 'restaurant',\n\n // Cafe / Coffee\n 'cafe': 'cafe',\n 'café': 'cafe',\n 'coffee shop': 'cafe',\n 'coffee house': 'cafe',\n 'coffeehouse': 'cafe',\n 'espresso': 'cafe',\n 'tea house': 'cafe',\n 'tea room': 'cafe',\n 'juice bar': 'cafe',\n 'smoothie': 'cafe',\n\n // Food truck\n 'food truck': 'food-truck',\n 'food cart': 'food-truck',\n 'mobile food': 'food-truck',\n\n // Catering\n 'catering': 'catering',\n 'caterer': 'catering',\n 'event catering': 'catering',\n\n // ==========================================================================\n // BAKERY / HOME KITCHEN\n // ==========================================================================\n 'bakery': 'bakery',\n 'baker': 'bakery',\n 'baking': 'bakery',\n 'bread': 'bakery',\n 'pastry': 'bakery',\n 'pastries': 'bakery',\n 'patisserie': 'bakery',\n 'donut': 'bakery',\n 'doughnut': 'bakery',\n 'bagel': 'bakery',\n\n // Home kitchen / Cottage food\n 'home kitchen': 'home-kitchen',\n 'cottage food': 'home-kitchen',\n 'homemade': 'home-kitchen',\n 'home baked': 'home-kitchen',\n 'cookies': 'home-kitchen',\n 'cakes': 'home-kitchen',\n 'cupcakes': 'home-kitchen',\n 'custom cakes': 'home-kitchen',\n 'wedding cakes': 'home-kitchen',\n 'desserts': 'home-kitchen',\n 'tamales': 'home-kitchen',\n 'empanadas': 'home-kitchen',\n 'meal prep': 'home-kitchen',\n\n // ==========================================================================\n // SALON / BEAUTY\n // ==========================================================================\n 'salon': 'salon',\n 'hair salon': 'salon',\n 'hair stylist': 'salon',\n 'hairdresser': 'salon',\n 'hairstylist': 'salon',\n 'beauty salon': 'salon',\n 'beauty parlor': 'salon',\n 'beautician': 'salon',\n 'cosmetologist': 'salon',\n 'hair cutting': 'salon',\n 'haircut': 'salon',\n 'hair coloring': 'salon',\n 'highlights': 'salon',\n 'blowout': 'salon',\n 'extensions': 'salon',\n 'braiding': 'salon',\n 'weave': 'salon',\n 'locs': 'salon',\n 'dreadlocks': 'salon',\n\n // Barbershop\n 'barber': 'barbershop',\n 'barbershop': 'barbershop',\n 'barber shop': 'barbershop',\n \"men's haircut\": 'barbershop',\n 'fade': 'barbershop',\n 'lineup': 'barbershop',\n\n // Spa\n 'spa': 'spa',\n 'day spa': 'spa',\n 'med spa': 'spa',\n 'medical spa': 'spa',\n 'facial': 'spa',\n 'facials': 'spa',\n 'skincare': 'spa',\n 'esthetician': 'spa',\n 'aesthetician': 'spa',\n 'waxing': 'spa',\n 'laser hair': 'spa',\n\n // Nail salon\n 'nail salon': 'nail-salon',\n 'nail': 'nail-salon',\n 'nails': 'nail-salon',\n 'manicure': 'nail-salon',\n 'pedicure': 'nail-salon',\n 'gel nails': 'nail-salon',\n 'acrylic nails': 'nail-salon',\n\n // Massage\n 'massage': 'massage',\n 'massage therapy': 'massage',\n 'massage therapist': 'massage',\n 'deep tissue': 'massage',\n 'swedish massage': 'massage',\n 'thai massage': 'massage',\n 'sports massage': 'massage',\n 'reflexology': 'massage',\n\n // Pet grooming\n 'pet grooming': 'pet-grooming',\n 'dog grooming': 'pet-grooming',\n 'pet groomer': 'pet-grooming',\n 'dog groomer': 'pet-grooming',\n 'cat grooming': 'pet-grooming',\n 'mobile grooming': 'pet-grooming',\n\n // ==========================================================================\n // REPAIR / SHOE REPAIR\n // ==========================================================================\n 'shoe repair': 'shoe-repair',\n 'shoe shop': 'shoe-repair',\n 'cobbler': 'shoe-repair',\n 'leather repair': 'shoe-repair',\n 'boot repair': 'shoe-repair',\n 'heel repair': 'shoe-repair',\n 'sole repair': 'shoe-repair',\n 'shoe shine': 'shoe-repair',\n 'luggage repair': 'shoe-repair',\n 'purse repair': 'shoe-repair',\n 'bag repair': 'shoe-repair',\n\n // ==========================================================================\n // HOME SERVICES\n // ==========================================================================\n // Cleaning\n 'cleaning': 'cleaning',\n 'cleaning service': 'cleaning',\n 'house cleaning': 'cleaning',\n 'home cleaning': 'cleaning',\n 'maid service': 'cleaning',\n 'maid': 'cleaning',\n 'janitorial': 'cleaning',\n 'carpet cleaning': 'cleaning',\n 'window cleaning': 'cleaning',\n 'pressure washing': 'cleaning',\n 'power washing': 'cleaning',\n\n // Landscaping\n 'landscaping': 'landscaping',\n 'landscaper': 'landscaping',\n 'lawn care': 'landscaping',\n 'lawn service': 'landscaping',\n 'lawn mowing': 'landscaping',\n 'gardening': 'landscaping',\n 'gardener': 'landscaping',\n 'tree service': 'landscaping',\n 'tree trimming': 'landscaping',\n 'irrigation': 'landscaping',\n 'sprinkler': 'landscaping',\n\n // Handyman\n 'handyman': 'handyman',\n 'handy man': 'handyman',\n 'home repair': 'handyman',\n 'home maintenance': 'handyman',\n 'general contractor': 'handyman',\n 'remodeling': 'handyman',\n 'renovation': 'handyman',\n\n // Plumber\n 'plumber': 'plumber',\n 'plumbing': 'plumber',\n 'plumber service': 'plumber',\n 'drain': 'plumber',\n 'sewer': 'plumber',\n 'water heater': 'plumber',\n\n // Electrician\n 'electrician': 'electrician',\n 'electrical': 'electrician',\n 'electric': 'electrician',\n 'electrical contractor': 'electrician',\n 'wiring': 'electrician',\n 'panel': 'electrician',\n\n // HVAC\n 'hvac': 'hvac',\n 'air conditioning': 'hvac',\n 'ac repair': 'hvac',\n 'heating': 'hvac',\n 'furnace': 'hvac',\n 'ventilation': 'hvac',\n\n // Moving\n 'moving': 'moving',\n 'movers': 'moving',\n 'moving company': 'moving',\n 'relocation': 'moving',\n 'hauling': 'moving',\n 'junk removal': 'moving',\n\n // Pest control\n 'pest control': 'pest-control',\n 'exterminator': 'pest-control',\n 'pest': 'pest-control',\n 'termite': 'pest-control',\n 'rodent': 'pest-control',\n 'bed bug': 'pest-control',\n\n // ==========================================================================\n // AUTO SERVICES\n // ==========================================================================\n 'auto repair': 'auto-repair',\n 'auto shop': 'auto-repair',\n 'car repair': 'auto-repair',\n 'mechanic': 'auto-repair',\n 'automotive': 'auto-repair',\n 'auto service': 'auto-repair',\n 'transmission': 'auto-repair',\n 'brake': 'auto-repair',\n 'oil change': 'auto-repair',\n 'tune up': 'auto-repair',\n 'smog': 'auto-repair',\n 'emissions': 'auto-repair',\n\n // Auto detail\n 'auto detail': 'auto-detail',\n 'car detail': 'auto-detail',\n 'auto detailing': 'auto-detail',\n 'car detailing': 'auto-detail',\n 'car wash': 'auto-detail',\n 'mobile detail': 'auto-detail',\n\n // Tire shop\n 'tire shop': 'tire-shop',\n 'tire': 'tire-shop',\n 'tires': 'tire-shop',\n 'tire service': 'tire-shop',\n 'wheel': 'tire-shop',\n 'alignment': 'tire-shop',\n\n // ==========================================================================\n // PROFESSIONAL SERVICES\n // ==========================================================================\n // Accountant\n 'accountant': 'accountant',\n 'accounting': 'accountant',\n 'bookkeeper': 'accountant',\n 'bookkeeping': 'accountant',\n 'tax': 'accountant',\n 'tax preparation': 'accountant',\n 'tax preparer': 'accountant',\n 'cpa': 'accountant',\n 'enrolled agent': 'accountant',\n\n // Lawyer\n 'lawyer': 'lawyer',\n 'attorney': 'lawyer',\n 'law firm': 'lawyer',\n 'law office': 'lawyer',\n 'legal': 'lawyer',\n 'legal services': 'lawyer',\n 'immigration': 'lawyer',\n 'divorce': 'lawyer',\n 'criminal defense': 'lawyer',\n 'personal injury': 'lawyer',\n 'bankruptcy': 'lawyer',\n 'estate planning': 'lawyer',\n 'notary': 'lawyer',\n\n // Real estate\n 'real estate': 'real-estate',\n 'realtor': 'real-estate',\n 'realty': 'real-estate',\n 'real estate agent': 'real-estate',\n 'real estate broker': 'real-estate',\n 'property management': 'real-estate',\n\n // Insurance\n 'insurance': 'insurance',\n 'insurance agent': 'insurance',\n 'insurance agency': 'insurance',\n 'insurance broker': 'insurance',\n 'life insurance': 'insurance',\n 'auto insurance': 'insurance',\n 'health insurance': 'insurance',\n 'medicare': 'insurance',\n\n // Consulting\n 'consultant': 'consulting',\n 'consulting': 'consulting',\n 'business consultant': 'consulting',\n 'management consultant': 'consulting',\n 'advisor': 'consulting',\n 'financial advisor': 'consulting',\n\n // ==========================================================================\n // HEALTH & WELLNESS\n // ==========================================================================\n // Personal trainer\n 'personal trainer': 'personal-trainer',\n 'personal training': 'personal-trainer',\n 'fitness trainer': 'personal-trainer',\n 'fitness': 'personal-trainer',\n 'gym': 'personal-trainer',\n 'crossfit': 'personal-trainer',\n 'boot camp': 'personal-trainer',\n\n // Yoga\n 'yoga': 'yoga-studio',\n 'yoga studio': 'yoga-studio',\n 'yoga instructor': 'yoga-studio',\n 'pilates': 'yoga-studio',\n 'meditation': 'yoga-studio',\n\n // Martial arts\n 'martial arts': 'martial-arts',\n 'karate': 'martial-arts',\n 'taekwondo': 'martial-arts',\n 'jiu jitsu': 'martial-arts',\n 'bjj': 'martial-arts',\n 'mma': 'martial-arts',\n 'boxing': 'martial-arts',\n 'kickboxing': 'martial-arts',\n 'kung fu': 'martial-arts',\n 'judo': 'martial-arts',\n 'self defense': 'martial-arts',\n\n // Chiropractor\n 'chiropractor': 'chiropractor',\n 'chiropractic': 'chiropractor',\n 'spine': 'chiropractor',\n 'back pain': 'chiropractor',\n\n // ==========================================================================\n // RETAIL\n // ==========================================================================\n // Craft seller\n 'craft': 'craft-seller',\n 'crafts': 'craft-seller',\n 'handmade': 'craft-seller',\n 'artisan': 'craft-seller',\n 'etsy': 'craft-seller',\n 'handcraft': 'craft-seller',\n 'jewelry maker': 'craft-seller',\n 'candle': 'craft-seller',\n 'soap maker': 'craft-seller',\n 'pottery': 'craft-seller',\n\n // Boutique\n 'boutique': 'boutique',\n 'clothing store': 'boutique',\n 'fashion': 'boutique',\n 'apparel': 'boutique',\n 'women clothing': 'boutique',\n 'consignment': 'boutique',\n 'thrift': 'boutique',\n 'vintage': 'boutique',\n\n // Florist\n 'florist': 'florist',\n 'flower shop': 'florist',\n 'flowers': 'florist',\n 'floral': 'florist',\n 'floral design': 'florist',\n\n // Gift shop\n 'gift shop': 'gift-shop',\n 'gift store': 'gift-shop',\n 'gifts': 'gift-shop',\n 'souvenir': 'gift-shop',\n 'novelty': 'gift-shop',\n\n // ==========================================================================\n // EDUCATION & CREATIVE\n // ==========================================================================\n // Tutoring\n 'tutor': 'tutoring',\n 'tutoring': 'tutoring',\n 'tutoring service': 'tutoring',\n 'learning center': 'tutoring',\n 'test prep': 'tutoring',\n 'sat prep': 'tutoring',\n 'math tutor': 'tutoring',\n 'english tutor': 'tutoring',\n 'homework help': 'tutoring',\n\n // Music lessons\n 'music lessons': 'music-lessons',\n 'music teacher': 'music-lessons',\n 'music school': 'music-lessons',\n 'piano lessons': 'music-lessons',\n 'guitar lessons': 'music-lessons',\n 'voice lessons': 'music-lessons',\n 'singing lessons': 'music-lessons',\n 'drum lessons': 'music-lessons',\n 'violin lessons': 'music-lessons',\n\n // Photography\n 'photographer': 'photography',\n 'photography': 'photography',\n 'photo studio': 'photography',\n 'portrait': 'photography',\n 'wedding photographer': 'photography',\n 'headshot': 'photography',\n\n // Videography\n 'videographer': 'videography',\n 'videography': 'videography',\n 'video production': 'videography',\n 'video editor': 'videography',\n 'filmmaker': 'videography',\n\n // Event planning\n 'event planner': 'event-planning',\n 'event planning': 'event-planning',\n 'wedding planner': 'event-planning',\n 'party planner': 'event-planning',\n 'event coordinator': 'event-planning',\n 'event venue': 'event-planning',\n };\n\n // Check each keyword against the map\n for (const keyword of lowerKeywords) {\n // First, try exact matches\n if (keywordMap[keyword]) {\n return keywordMap[keyword];\n }\n\n // Then, try partial matches (keyword contains key or key contains keyword)\n for (const [key, type] of Object.entries(keywordMap)) {\n if (keyword.includes(key) || key.includes(keyword)) {\n return type;\n }\n }\n }\n\n return 'generic';\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACMO,IAAM,eAA+B;AAAA,EAC1C,MAAM;AAAA,EACN,MAAM;AAAA,EACN,aAAa;AAAA,EAEb,QAAQ;AAAA,IACN,cAAc;AAAA,IACd,OAAO;AAAA,MACL,QAAQ;AAAA,MACR,cAAc;AAAA,MACd,SAAS;AAAA,IACX;AAAA,IACA,OAAO;AAAA,MACL,MAAM;AAAA,QACJ,SAAS;AAAA,QACT,UAAU;AAAA,UACR;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,MACA,OAAO,EAAE,SAAS,KAAK;AAAA,MACvB,UAAU,EAAE,SAAS,MAAM,OAAO,eAAe;AAAA,MACjD,SAAS,EAAE,SAAS,MAAM,OAAO,WAAW;AAAA,MAC5C,KAAK,EAAE,SAAS,KAAK;AAAA,MACrB,SAAS,EAAE,SAAS,KAAK;AAAA,MACzB,SAAS,EAAE,SAAS,KAAK;AAAA,IAC3B;AAAA,IACA,KAAK;AAAA,MACH,eAAe;AAAA,MACf,UAAU,CAAC,UAAU,eAAe,cAAc,WAAW,mBAAmB,2BAA2B;AAAA,MAC3G,YAAY;AAAA,IACd;AAAA,IACA,aAAa;AAAA,MACX,SAAS;AAAA,MACT,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,OAAO;AAAA,QACP,OAAO;AAAA,QACP,SAAS;AAAA,QACT,SAAS;AAAA,MACX;AAAA,IACF;AAAA,IACA,UAAU;AAAA,MACR,eAAe;AAAA,MACf,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,aAAa;AAAA,IACf;AAAA,EACF;AAAA,EAEA,UAAU;AAAA,IACR,UAAU;AAAA,MACR,SAAS;AAAA,MACT,aAAa;AAAA,MACb,YAAY;AAAA,IACd;AAAA,IACA,UAAU;AAAA,MACR,EAAE,IAAI,MAAM,OAAO,eAAe,aAAa,qFAAqF,WAAW,mBAAmB,MAAM,YAAY,WAAW,EAAE;AAAA,MACjM,EAAE,IAAI,MAAM,OAAO,WAAW,aAAa,iEAAiE,WAAW,YAAY,MAAM,SAAS,WAAW,EAAE;AAAA,MAC/J,EAAE,IAAI,MAAM,OAAO,oBAAoB,aAAa,mFAAmF,WAAW,gBAAgB,MAAM,SAAS,WAAW,EAAE;AAAA,MAC9L,EAAE,IAAI,MAAM,OAAO,yBAAyB,aAAa,2EAA2E,WAAW,YAAY,MAAM,UAAU,WAAW,EAAE;AAAA,MACxL,EAAE,IAAI,MAAM,OAAO,oBAAoB,aAAa,qFAAqF,WAAW,mBAAmB,MAAM,YAAY,WAAW,EAAE;AAAA,MACtM,EAAE,IAAI,MAAM,OAAO,uBAAuB,aAAa,uDAAuD,WAAW,oBAAoB,MAAM,QAAQ,WAAW,EAAE;AAAA,IAC1K;AAAA,IACA,KAAK;AAAA,MACH,EAAE,IAAI,MAAM,UAAU,2CAA2C,QAAQ,kLAAkL,WAAW,EAAE;AAAA,MACxQ,EAAE,IAAI,MAAM,UAAU,qCAAqC,QAAQ,+JAA+J,WAAW,EAAE;AAAA,MAC/O,EAAE,IAAI,MAAM,UAAU,sCAAsC,QAAQ,wKAAwK,WAAW,EAAE;AAAA,MACzP,EAAE,IAAI,MAAM,UAAU,2CAA2C,QAAQ,sNAAsN,WAAW,EAAE;AAAA,MAC5S,EAAE,IAAI,MAAM,UAAU,qCAAqC,QAAQ,kJAAkJ,WAAW,EAAE;AAAA,IACpO;AAAA,EACF;AAAA,EAEA,eAAe;AAAA,IACb,MAAM;AAAA,MACJ;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS;AAAA,UACP,EAAE,MAAM,OAAO,aAAa,gBAAgB,SAAS,QAAQ,UAAU,KAAK;AAAA,UAC5E,EAAE,MAAM,SAAS,aAAa,iBAAiB,SAAS,oBAAoB,UAAU,KAAK;AAAA,QAC7F;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS;AAAA,UACP,EAAE,MAAM,OAAO,aAAa,eAAe,SAAS,UAAU,UAAU,KAAK;AAAA,UAC7E,EAAE,MAAM,QAAQ,aAAa,gBAAgB,SAAS,WAAW,UAAU,MAAM;AAAA,UACjF,EAAE,MAAM,SAAS,aAAa,gBAAgB,SAAS,WAAW,UAAU,MAAM;AAAA,UAClF,EAAE,MAAM,UAAU,aAAa,cAAc,SAAS,SAAS,UAAU,MAAM;AAAA,QACjF;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS;AAAA,UACP,EAAE,MAAM,SAAS,aAAa,gBAAgB,SAAS,eAAe,UAAU,KAAK;AAAA,UACrF,EAAE,MAAM,eAAe,aAAa,uBAAuB,SAAS,uCAAuC,UAAU,MAAM;AAAA,UAC3H,EAAE,MAAM,cAAc,aAAa,gBAAgB,SAAS,mBAAmB,UAAU,MAAM;AAAA,UAC/F,EAAE,MAAM,QAAQ,aAAa,aAAa,SAAS,YAAY,UAAU,MAAM;AAAA,UAC/E,EAAE,MAAM,QAAQ,aAAa,iBAAiB,SAAS,KAAK,UAAU,MAAM;AAAA,QAC9E;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS;AAAA,UACP,EAAE,MAAM,aAAa,aAAa,sCAAsC,SAAS,gCAAgC,UAAU,KAAK;AAAA,UAChI,EAAE,MAAM,OAAO,aAAa,qBAAqB,SAAS,4BAA4B,UAAU,MAAM;AAAA,UACtG,EAAE,MAAM,WAAW,aAAa,gBAAgB,SAAS,6BAA6B,UAAU,MAAM;AAAA,UACtG,EAAE,MAAM,QAAQ,aAAa,iBAAiB,SAAS,KAAK,UAAU,MAAM;AAAA,QAC9E;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS;AAAA,UACP,EAAE,MAAM,SAAS,aAAa,mBAAmB,SAAS,qCAAqC,UAAU,KAAK;AAAA,UAC9G,EAAE,MAAM,QAAQ,aAAa,iBAAiB,SAAS,YAAY,UAAU,KAAK;AAAA,UAClF,EAAE,MAAM,WAAW,aAAa,mBAAmB,SAAS,uBAAuB,UAAU,MAAM;AAAA,UACnG,EAAE,MAAM,UAAU,aAAa,qBAAqB,SAAS,KAAK,UAAU,MAAM;AAAA,UAClF,EAAE,MAAM,QAAQ,aAAa,iBAAiB,SAAS,KAAK,UAAU,MAAM;AAAA,QAC9E;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS;AAAA,UACP,EAAE,MAAM,YAAY,aAAa,iBAAiB,SAAS,iCAAiC,UAAU,KAAK;AAAA,UAC3G,EAAE,MAAM,UAAU,aAAa,eAAe,SAAS,+BAA+B,UAAU,KAAK;AAAA,UACrG,EAAE,MAAM,QAAQ,aAAa,iBAAiB,SAAS,KAAK,UAAU,MAAM;AAAA,QAC9E;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,iBAAiB,CAAC,YAAY,SAAS,SAAS,YAAY,QAAQ,UAAU,SAAS,OAAO;AAAA,EAE9F,kBAAkB;AAAA,IAChB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;ACxJO,IAAM,mBAAmC;AAAA,EAC9C,MAAM;AAAA,EACN,MAAM;AAAA,EACN,aAAa;AAAA,EAEb,QAAQ;AAAA,IACN,cAAc;AAAA,IACd,OAAO;AAAA,MACL,QAAQ;AAAA,MACR,cAAc;AAAA,MACd,SAAS;AAAA,IACX;AAAA,IACA,OAAO;AAAA,MACL,MAAM;AAAA,QACJ,SAAS;AAAA,QACT,UAAU;AAAA,UACR;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,MACA,OAAO,EAAE,SAAS,MAAM,OAAO,YAAY;AAAA,MAC3C,MAAM,EAAE,SAAS,MAAM,OAAO,OAAO;AAAA,MACrC,SAAS,EAAE,SAAS,MAAM,OAAO,UAAU;AAAA,MAC3C,SAAS,EAAE,SAAS,KAAK;AAAA,MACzB,SAAS,EAAE,SAAS,KAAK;AAAA,IAC3B;AAAA,IACA,KAAK;AAAA,MACH,eAAe;AAAA,MACf,UAAU,CAAC,cAAc,UAAU,QAAQ,WAAW,oBAAoB,eAAe;AAAA,MACzF,YAAY;AAAA,IACd;AAAA,IACA,aAAa;AAAA,MACX,SAAS;AAAA,MACT,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,OAAO;AAAA,QACP,OAAO;AAAA,QACP,SAAS;AAAA,QACT,SAAS;AAAA,MACX;AAAA,MACA,gBAAgB;AAAA,IAClB;AAAA,IACA,UAAU;AAAA,MACR,eAAe;AAAA,MACf,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,aAAa;AAAA,MACb,eAAe;AAAA,IACjB;AAAA,EACF;AAAA,EAEA,UAAU;AAAA,IACR,UAAU;AAAA,MACR,SAAS;AAAA,MACT,aAAa;AAAA,MACb,YAAY;AAAA,IACd;AAAA,IACA,MAAM;AAAA,MACJ,EAAE,IAAI,MAAM,MAAM,eAAe,aAAa,6CAA6C,OAAO,MAAM,UAAU,YAAY,WAAW,EAAE;AAAA,MAC3I,EAAE,IAAI,MAAM,MAAM,mBAAmB,aAAa,yCAA0C,WAAW,oBAAoB,UAAU,YAAY,WAAW,EAAE;AAAA,MAC9J,EAAE,IAAI,MAAM,MAAM,mBAAmB,aAAa,6CAA6C,OAAO,OAAO,UAAU,WAAW,WAAW,EAAE;AAAA,MAC/I,EAAE,IAAI,MAAM,MAAM,kBAAkB,aAAa,gDAAgD,OAAO,OAAO,UAAU,WAAW,WAAW,EAAE;AAAA,MACjJ,EAAE,IAAI,MAAM,MAAM,kBAAkB,aAAa,8CAA8C,OAAO,OAAO,UAAU,WAAW,WAAW,EAAE;AAAA,MAC/I,EAAE,IAAI,MAAM,MAAM,kBAAkB,aAAa,6BAA6B,OAAO,MAAM,UAAU,YAAY,WAAW,EAAE;AAAA,IAChI;AAAA,IACA,KAAK;AAAA,MACH,EAAE,IAAI,MAAM,UAAU,6BAA6B,QAAQ,oHAAoH,WAAW,EAAE;AAAA,MAC5L,EAAE,IAAI,MAAM,UAAU,qCAAqC,QAAQ,qGAAqG,WAAW,EAAE;AAAA,MACrL,EAAE,IAAI,MAAM,UAAU,6CAA6C,QAAQ,gIAAgI,WAAW,EAAE;AAAA,MACxN,EAAE,IAAI,MAAM,UAAU,sCAAsC,QAAQ,uHAAuH,WAAW,EAAE;AAAA,MACxM,EAAE,IAAI,MAAM,UAAU,+BAA+B,QAAQ,kFAAkF,WAAW,EAAE;AAAA,IAC9J;AAAA,EACF;AAAA,EAEA,eAAe;AAAA,IACb,MAAM;AAAA,MACJ;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS;AAAA,UACP,EAAE,MAAM,OAAO,aAAa,gBAAgB,SAAS,QAAQ,UAAU,KAAK;AAAA,UAC5E,EAAE,MAAM,SAAS,aAAa,iBAAiB,SAAS,qBAAqB,UAAU,KAAK;AAAA,QAC9F;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS;AAAA,UACP,EAAE,MAAM,OAAO,aAAa,eAAe,SAAS,UAAU,UAAU,KAAK;AAAA,UAC7E,EAAE,MAAM,QAAQ,aAAa,gBAAgB,SAAS,YAAY,UAAU,MAAM;AAAA,UAClF,EAAE,MAAM,SAAS,aAAa,gBAAgB,SAAS,YAAY,UAAU,MAAM;AAAA,UACnF,EAAE,MAAM,UAAU,aAAa,cAAc,SAAS,SAAS,UAAU,MAAM;AAAA,QACjF;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS;AAAA,UACP,EAAE,MAAM,QAAQ,aAAa,aAAa,SAAS,kBAAkB,UAAU,KAAK;AAAA,UACpF,EAAE,MAAM,eAAe,aAAa,oBAAoB,SAAS,oCAAoC,UAAU,MAAM;AAAA,UACrH,EAAE,MAAM,SAAS,aAAa,kBAAkB,SAAS,SAAS,UAAU,MAAM;AAAA,UAClF,EAAE,MAAM,cAAc,aAAa,cAAc,SAAS,gBAAgB,UAAU,MAAM;AAAA,UAC1F,EAAE,MAAM,YAAY,aAAa,gBAAgB,SAAS,WAAW,UAAU,MAAM;AAAA,UACrF,EAAE,MAAM,WAAW,aAAa,kCAAkC,SAAS,2BAA2B,UAAU,MAAM;AAAA,UACtH,EAAE,MAAM,YAAY,aAAa,gBAAgB,SAAS,QAAQ,UAAU,MAAM;AAAA,UAClF,EAAE,MAAM,QAAQ,aAAa,iBAAiB,SAAS,KAAK,UAAU,MAAM;AAAA,QAC9E;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS;AAAA,UACP,EAAE,MAAM,aAAa,aAAa,aAAa,SAAS,gCAAgC,UAAU,KAAK;AAAA,UACvG,EAAE,MAAM,OAAO,aAAa,qBAAqB,SAAS,wBAAwB,UAAU,MAAM;AAAA,UAClG,EAAE,MAAM,WAAW,aAAa,gBAAgB,SAAS,+BAA+B,UAAU,MAAM;AAAA,UACxG,EAAE,MAAM,QAAQ,aAAa,iBAAiB,SAAS,KAAK,UAAU,MAAM;AAAA,QAC9E;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS;AAAA,UACP,EAAE,MAAM,SAAS,aAAa,mBAAmB,SAAS,uBAAuB,UAAU,KAAK;AAAA,UAChG,EAAE,MAAM,QAAQ,aAAa,iBAAiB,SAAS,WAAW,UAAU,KAAK;AAAA,UACjF,EAAE,MAAM,UAAU,aAAa,qBAAqB,SAAS,KAAK,UAAU,MAAM;AAAA,UAClF,EAAE,MAAM,UAAU,aAAa,iBAAiB,SAAS,QAAQ,UAAU,MAAM;AAAA,UACjF,EAAE,MAAM,QAAQ,aAAa,iBAAiB,SAAS,KAAK,UAAU,MAAM;AAAA,QAC9E;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS;AAAA,UACP,EAAE,MAAM,YAAY,aAAa,iBAAiB,SAAS,6BAA6B,UAAU,KAAK;AAAA,UACvG,EAAE,MAAM,UAAU,aAAa,eAAe,SAAS,4CAA4C,UAAU,KAAK;AAAA,UAClH,EAAE,MAAM,QAAQ,aAAa,iBAAiB,SAAS,KAAK,UAAU,MAAM;AAAA,QAC9E;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,iBAAiB,CAAC,YAAY,YAAY,QAAQ,UAAU,SAAS,SAAS,QAAQ,MAAM;AAAA,EAE5F,kBAAkB;AAAA,IAChB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;AC3JO,IAAM,oBAAoC;AAAA,EAC/C,MAAM;AAAA,EACN,MAAM;AAAA,EACN,aAAa;AAAA,EAEb,QAAQ;AAAA,IACN,cAAc;AAAA,IACd,OAAO;AAAA,MACL,QAAQ;AAAA,MACR,cAAc;AAAA,MACd,SAAS;AAAA,IACX;AAAA,IACA,OAAO;AAAA,MACL,MAAM;AAAA,QACJ,SAAS;AAAA,QACT,UAAU;AAAA,UACR;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,MACA,OAAO,EAAE,SAAS,MAAM,OAAO,WAAW;AAAA,MAC1C,UAAU,EAAE,SAAS,MAAM,OAAO,WAAW;AAAA,MAC7C,SAAS,EAAE,SAAS,MAAM,OAAO,UAAU;AAAA,MAC3C,KAAK,EAAE,SAAS,KAAK;AAAA,MACrB,SAAS,EAAE,SAAS,KAAK;AAAA,MACzB,SAAS,EAAE,SAAS,KAAK;AAAA,IAC3B;AAAA,IACA,KAAK;AAAA,MACH,eAAe;AAAA,MACf,UAAU,CAAC,YAAY,gBAAgB,eAAe,SAAS,YAAY,SAAS;AAAA,MACpF,YAAY;AAAA,IACd;AAAA,IACA,aAAa;AAAA,MACX,SAAS;AAAA,MACT,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,OAAO;AAAA,QACP,OAAO;AAAA,QACP,SAAS;AAAA,QACT,SAAS;AAAA,MACX;AAAA,MACA,gBAAgB;AAAA,IAClB;AAAA,IACA,UAAU;AAAA,MACR,eAAe;AAAA,MACf,YAAY;AAAA;AAAA,MACZ,aAAa;AAAA,MACb,eAAe;AAAA,IACjB;AAAA,EACF;AAAA,EAEA,UAAU;AAAA,IACR,UAAU;AAAA,MACR,SAAS;AAAA,MACT,aAAa;AAAA,MACb,YAAY;AAAA,IACd;AAAA,IACA,UAAU;AAAA,MACR,EAAE,IAAI,MAAM,MAAM,qBAAqB,aAAa,qCAAqC,OAAO,KAAM,WAAW,2BAA2B,UAAU,WAAW,UAAU,MAAM,WAAW,EAAE;AAAA,MAC9L,EAAE,IAAI,MAAM,MAAM,eAAe,aAAa,iCAAiC,OAAO,GAAG,WAAW,YAAY,UAAU,SAAS,WAAW,EAAE;AAAA,MAChJ,EAAE,IAAI,MAAM,MAAM,gBAAgB,aAAa,mCAAmC,OAAO,IAAI,WAAW,cAAc,UAAU,QAAQ,WAAW,EAAE;AAAA,MACrJ,EAAE,IAAI,MAAM,MAAM,eAAe,aAAa,oDAAoD,WAAW,mBAAmB,UAAU,SAAS,WAAW,EAAE;AAAA,MAChK,EAAE,IAAI,MAAM,MAAM,gBAAgB,aAAa,0CAA0C,OAAO,GAAG,WAAW,YAAY,UAAU,aAAa,WAAW,EAAE;AAAA,IAChK;AAAA,IACA,KAAK;AAAA,MACH,EAAE,IAAI,MAAM,UAAU,4BAA4B,QAAQ,wLAAyL,WAAW,EAAE;AAAA,MAChQ,EAAE,IAAI,MAAM,UAAU,sCAAsC,QAAQ,uIAAuI,WAAW,EAAE;AAAA,MACxN,EAAE,IAAI,MAAM,UAAU,4CAA4C,QAAQ,wIAAwI,WAAW,EAAE;AAAA,MAC/N,EAAE,IAAI,MAAM,UAAU,mBAAmB,QAAQ,wHAAwH,WAAW,EAAE;AAAA,MACtL,EAAE,IAAI,MAAM,UAAU,wCAAwC,QAAQ,kFAAkF,WAAW,EAAE;AAAA,MACrK,EAAE,IAAI,MAAM,UAAU,qBAAqB,QAAQ,6IAA8I,WAAW,EAAE;AAAA,IAChN;AAAA,EACF;AAAA,EAEA,eAAe;AAAA,IACb,MAAM;AAAA,MACJ;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS;AAAA,UACP,EAAE,MAAM,OAAO,aAAa,gBAAgB,SAAS,QAAQ,UAAU,KAAK;AAAA,UAC5E,EAAE,MAAM,SAAS,aAAa,iBAAiB,SAAS,qBAAqB,UAAU,KAAK;AAAA,QAC9F;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS;AAAA,UACP,EAAE,MAAM,QAAQ,aAAa,gBAAgB,SAAS,0BAA0B,UAAU,KAAK;AAAA,UAC/F,EAAE,MAAM,eAAe,aAAa,uBAAuB,SAAS,0CAA0C,UAAU,MAAM;AAAA,UAC9H,EAAE,MAAM,SAAS,aAAa,kBAAkB,SAAS,MAAM,UAAU,MAAM;AAAA,UAC/E,EAAE,MAAM,cAAc,aAAa,iBAAiB,SAAS,aAAa,UAAU,MAAM;AAAA,UAC1F,EAAE,MAAM,YAAY,aAAa,oBAAoB,SAAS,WAAW,UAAU,MAAM;AAAA,UACzF,EAAE,MAAM,aAAa,aAAa,iBAAiB,SAAS,gCAAgC,UAAU,MAAM;AAAA,UAC5G,EAAE,MAAM,YAAY,aAAa,gBAAgB,SAAS,QAAQ,UAAU,MAAM;AAAA,UAClF,EAAE,MAAM,YAAY,aAAa,wBAAwB,SAAS,QAAQ,UAAU,MAAM;AAAA,UAC1F,EAAE,MAAM,QAAQ,aAAa,iBAAiB,SAAS,KAAK,UAAU,MAAM;AAAA,QAC9E;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS;AAAA,UACP,EAAE,MAAM,aAAa,aAAa,aAAa,SAAS,gCAAgC,UAAU,KAAK;AAAA,UACvG,EAAE,MAAM,OAAO,aAAa,qBAAqB,SAAS,uBAAuB,UAAU,MAAM;AAAA,UACjG,EAAE,MAAM,WAAW,aAAa,gBAAgB,SAAS,0BAA0B,UAAU,MAAM;AAAA,UACnG,EAAE,MAAM,QAAQ,aAAa,iBAAiB,SAAS,KAAK,UAAU,MAAM;AAAA,QAC9E;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS;AAAA,UACP,EAAE,MAAM,SAAS,aAAa,mBAAmB,SAAS,mCAAoC,UAAU,KAAK;AAAA,UAC7G,EAAE,MAAM,QAAQ,aAAa,iBAAiB,SAAS,WAAW,UAAU,KAAK;AAAA,UACjF,EAAE,MAAM,WAAW,aAAa,iBAAiB,SAAS,wBAAwB,UAAU,MAAM;AAAA,UAClG,EAAE,MAAM,UAAU,aAAa,qBAAqB,SAAS,KAAK,UAAU,MAAM;AAAA,UAClF,EAAE,MAAM,QAAQ,aAAa,iBAAiB,SAAS,KAAK,UAAU,MAAM;AAAA,QAC9E;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS;AAAA,UACP,EAAE,MAAM,YAAY,aAAa,iBAAiB,SAAS,mBAAmB,UAAU,KAAK;AAAA,UAC7F,EAAE,MAAM,UAAU,aAAa,eAAe,SAAS,kCAAkC,UAAU,KAAK;AAAA,UACxG,EAAE,MAAM,QAAQ,aAAa,iBAAiB,SAAS,KAAK,UAAU,MAAM;AAAA,QAC9E;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,iBAAiB,CAAC,QAAQ,UAAU,SAAS,SAAS,YAAY,QAAQ,QAAQ,MAAM;AAAA,EAExF,kBAAkB;AAAA,IAChB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;ACnJO,IAAM,cAA8B;AAAA,EACzC,MAAM;AAAA,EACN,MAAM;AAAA,EACN,aAAa;AAAA,EAEb,QAAQ;AAAA,IACN,cAAc;AAAA,IACd,OAAO;AAAA,MACL,QAAQ;AAAA,MACR,cAAc;AAAA,MACd,SAAS;AAAA,IACX;AAAA,IACA,OAAO;AAAA,MACL,MAAM;AAAA,QACJ,SAAS;AAAA,QACT,UAAU;AAAA,UACR;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,MACA,OAAO,EAAE,SAAS,KAAK;AAAA,MACvB,UAAU,EAAE,SAAS,MAAM,OAAO,qBAAqB;AAAA,MACvD,MAAM,EAAE,SAAS,MAAM,OAAO,eAAe;AAAA,MAC7C,SAAS,EAAE,SAAS,MAAM,OAAO,WAAW;AAAA,MAC5C,SAAS,EAAE,SAAS,KAAK;AAAA,MACzB,SAAS,EAAE,SAAS,KAAK;AAAA,IAC3B;AAAA,IACA,KAAK;AAAA,MACH,eAAe;AAAA,MACf,UAAU,CAAC,cAAc,WAAW,SAAS,cAAc,WAAW,UAAU,SAAS;AAAA,MACzF,YAAY;AAAA,IACd;AAAA,IACA,aAAa;AAAA,MACX,SAAS;AAAA,MACT,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,OAAO;AAAA,QACP,OAAO;AAAA,QACP,SAAS;AAAA,QACT,SAAS;AAAA,MACX;AAAA,IACF;AAAA,IACA,UAAU;AAAA,MACR,eAAe;AAAA,MACf,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,aAAa;AAAA,MACb,eAAe;AAAA,IACjB;AAAA,EACF;AAAA,EAEA,UAAU;AAAA,IACR,UAAU;AAAA,MACR,SAAS;AAAA,MACT,aAAa;AAAA,MACb,YAAY;AAAA,IACd;AAAA,IACA,UAAU;AAAA,MACR,EAAE,IAAI,MAAM,OAAO,mBAAoB,aAAa,2BAA2B,WAAW,YAAY,MAAM,YAAY,WAAW,EAAE;AAAA,MACrI,EAAE,IAAI,MAAM,OAAO,iBAAkB,aAAa,2BAA2B,WAAW,YAAY,MAAM,YAAY,WAAW,EAAE;AAAA,MACnI,EAAE,IAAI,MAAM,OAAO,wBAAwB,aAAa,sCAAsC,WAAW,YAAY,MAAM,WAAW,WAAW,EAAE;AAAA,MACnJ,EAAE,IAAI,MAAM,OAAO,cAAc,aAAa,8BAA8B,WAAW,YAAY,MAAM,OAAO,WAAW,EAAE;AAAA,MAC7H,EAAE,IAAI,MAAM,OAAO,YAAY,aAAa,8CAA8C,WAAW,aAAa,MAAM,cAAc,WAAW,EAAE;AAAA,MACnJ,EAAE,IAAI,MAAM,OAAO,WAAW,aAAa,oCAAoC,WAAW,YAAY,MAAM,QAAQ,WAAW,EAAE;AAAA,MACjI,EAAE,IAAI,MAAM,OAAO,qBAAqB,aAAa,4BAA4B,WAAW,YAAY,MAAM,YAAY,WAAW,EAAE;AAAA,MACvI,EAAE,IAAI,MAAM,OAAO,oBAAoB,aAAa,4BAA4B,WAAW,YAAY,MAAM,QAAQ,WAAW,EAAE;AAAA,IACpI;AAAA,IACA,MAAM;AAAA,MACJ,EAAE,IAAI,MAAM,MAAM,gBAAgB,MAAM,kBAAkB,KAAK,wEAAwE,WAAW,EAAE;AAAA,MACpJ,EAAE,IAAI,MAAM,MAAM,gBAAgB,MAAM,oBAAoB,KAAK,kEAAkE,WAAW,EAAE;AAAA,IAClJ;AAAA,IACA,KAAK;AAAA,MACH,EAAE,IAAI,MAAM,UAAU,6BAA6B,QAAQ,mIAAmI,WAAW,EAAE;AAAA,MAC3M,EAAE,IAAI,MAAM,UAAU,qCAAqC,QAAQ,oGAAoG,WAAW,EAAE;AAAA,MACpL,EAAE,IAAI,MAAM,UAAU,+BAA+B,QAAQ,yIAAyI,WAAW,EAAE;AAAA,MACnN,EAAE,IAAI,MAAM,UAAU,6BAA6B,QAAQ,yGAAyG,WAAW,EAAE;AAAA,MACjL,EAAE,IAAI,MAAM,UAAU,4CAA4C,QAAQ,wGAAwG,WAAW,EAAE;AAAA,IACjM;AAAA,EACF;AAAA,EAEA,eAAe;AAAA,IACb,MAAM;AAAA,MACJ;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS;AAAA,UACP,EAAE,MAAM,OAAO,aAAa,gBAAgB,SAAS,QAAQ,UAAU,KAAK;AAAA,UAC5E,EAAE,MAAM,SAAS,aAAa,iBAAiB,SAAS,oBAAoB,UAAU,KAAK;AAAA,QAC7F;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS;AAAA,UACP,EAAE,MAAM,OAAO,aAAa,eAAe,SAAS,UAAU,UAAU,KAAK;AAAA,UAC7E,EAAE,MAAM,QAAQ,aAAa,gBAAgB,SAAS,YAAY,UAAU,MAAM;AAAA,UAClF,EAAE,MAAM,SAAS,aAAa,gBAAgB,SAAS,WAAW,UAAU,MAAM;AAAA,UAClF,EAAE,MAAM,UAAU,aAAa,cAAc,SAAS,SAAS,UAAU,MAAM;AAAA,QACjF;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS;AAAA,UACP,EAAE,MAAM,SAAS,aAAa,gBAAgB,SAAS,mBAAoB,UAAU,KAAK;AAAA,UAC1F,EAAE,MAAM,eAAe,aAAa,uBAAuB,SAAS,2BAA2B,UAAU,MAAM;AAAA,UAC/G,EAAE,MAAM,cAAc,aAAa,gBAAgB,SAAS,YAAY,UAAU,MAAM;AAAA,UACxF,EAAE,MAAM,YAAY,aAAa,oBAAoB,SAAS,UAAU,UAAU,MAAM;AAAA,UACxF,EAAE,MAAM,QAAQ,aAAa,aAAa,SAAS,YAAY,UAAU,MAAM;AAAA,UAC/E,EAAE,MAAM,YAAY,aAAa,oBAAoB,SAAS,QAAQ,UAAU,MAAM;AAAA,UACtF,EAAE,MAAM,QAAQ,aAAa,iBAAiB,SAAS,KAAK,UAAU,MAAM;AAAA,QAC9E;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS;AAAA,UACP,EAAE,MAAM,QAAQ,aAAa,gBAAgB,SAAS,iBAAiB,UAAU,KAAK;AAAA,UACtF,EAAE,MAAM,QAAQ,aAAa,cAAc,SAAS,kBAAkB,UAAU,MAAM;AAAA,UACtF,EAAE,MAAM,OAAO,aAAa,aAAa,SAAS,uCAAuC,UAAU,MAAM;AAAA,UACzG,EAAE,MAAM,aAAa,aAAa,aAAa,SAAS,gCAAgC,UAAU,MAAM;AAAA,UACxG,EAAE,MAAM,QAAQ,aAAa,iBAAiB,SAAS,KAAK,UAAU,MAAM;AAAA,QAC9E;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS;AAAA,UACP,EAAE,MAAM,aAAa,aAAa,aAAa,SAAS,gCAAgC,UAAU,KAAK;AAAA,UACvG,EAAE,MAAM,OAAO,aAAa,qBAAqB,SAAS,2BAA2B,UAAU,MAAM;AAAA,UACrG,EAAE,MAAM,WAAW,aAAa,gBAAgB,SAAS,uBAAuB,UAAU,MAAM;AAAA,UAChG,EAAE,MAAM,QAAQ,aAAa,iBAAiB,SAAS,KAAK,UAAU,MAAM;AAAA,QAC9E;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS;AAAA,UACP,EAAE,MAAM,SAAS,aAAa,mBAAmB,SAAS,+BAAgC,UAAU,KAAK;AAAA,UACzG,EAAE,MAAM,QAAQ,aAAa,iBAAiB,SAAS,aAAa,UAAU,KAAK;AAAA,UACnF,EAAE,MAAM,UAAU,aAAa,qBAAqB,SAAS,KAAK,UAAU,MAAM;AAAA,UAClF,EAAE,MAAM,QAAQ,aAAa,iBAAiB,SAAS,KAAK,UAAU,MAAM;AAAA,QAC9E;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS;AAAA,UACP,EAAE,MAAM,YAAY,aAAa,iBAAiB,SAAS,6BAA6B,UAAU,KAAK;AAAA,UACvG,EAAE,MAAM,UAAU,aAAa,eAAe,SAAS,mCAAmC,UAAU,KAAK;AAAA,UACzG,EAAE,MAAM,QAAQ,aAAa,iBAAiB,SAAS,KAAK,UAAU,MAAM;AAAA,QAC9E;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,iBAAiB,CAAC,YAAY,WAAW,YAAY,OAAO,QAAQ,QAAQ,SAAS,MAAM;AAAA,EAE3F,kBAAkB;AAAA,IAChB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;AC1KO,IAAM,eAA+B;AAAA,EAC1C,MAAM;AAAA,EACN,MAAM;AAAA,EACN,aAAa;AAAA,EAEb,QAAQ;AAAA,IACN,cAAc;AAAA,IACd,OAAO;AAAA,MACL,QAAQ;AAAA,MACR,cAAc;AAAA,MACd,SAAS;AAAA,IACX;AAAA,IACA,OAAO;AAAA,MACL,MAAM;AAAA,QACJ,SAAS;AAAA,QACT,UAAU;AAAA,UACR;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,MACA,OAAO,EAAE,SAAS,KAAK;AAAA,MACvB,UAAU,EAAE,SAAS,MAAM,OAAO,eAAe;AAAA,MACjD,SAAS,EAAE,SAAS,MAAM,OAAO,WAAW;AAAA,MAC5C,KAAK,EAAE,SAAS,KAAK;AAAA,MACrB,SAAS,EAAE,SAAS,KAAK;AAAA,MACzB,SAAS,EAAE,SAAS,KAAK;AAAA,IAC3B;AAAA,IACA,KAAK;AAAA,MACH,eAAe;AAAA,MACf,UAAU,CAAC,UAAU,eAAe,OAAO,qBAAqB,iBAAiB;AAAA,MACjF,YAAY;AAAA,IACd;AAAA,IACA,aAAa;AAAA,MACX,SAAS;AAAA,MACT,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,OAAO;AAAA,QACP,OAAO;AAAA,QACP,SAAS;AAAA,QACT,SAAS;AAAA,MACX;AAAA,IACF;AAAA,IACA,UAAU;AAAA,MACR,eAAe;AAAA,MACf,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,aAAa;AAAA,IACf;AAAA,EACF;AAAA,EAEA,UAAU;AAAA,IACR,UAAU;AAAA,MACR,SAAS;AAAA,MACT,aAAa;AAAA,MACb,YAAY;AAAA,IACd;AAAA,IACA,UAAU;AAAA,MACR,EAAE,IAAI,MAAM,OAAO,gBAAgB,aAAa,8BAA8B,WAAW,YAAY,MAAM,UAAU,WAAW,EAAE;AAAA,MAClI,EAAE,IAAI,MAAM,OAAO,eAAe,aAAa,0CAA0C,WAAW,YAAY,MAAM,YAAY,WAAW,EAAE;AAAA,MAC/I,EAAE,IAAI,MAAM,OAAO,mBAAmB,aAAa,yCAAyC,WAAW,YAAY,MAAM,WAAW,WAAW,EAAE;AAAA,MACjJ,EAAE,IAAI,MAAM,OAAO,eAAe,aAAa,iDAAiD,WAAW,mBAAmB,MAAM,QAAQ,WAAW,EAAE;AAAA,MACzJ,EAAE,IAAI,MAAM,OAAO,gBAAgB,aAAa,gCAAgC,WAAW,QAAQ,MAAM,SAAS,WAAW,EAAE;AAAA,IACjI;AAAA,IACA,KAAK;AAAA,MACH,EAAE,IAAI,MAAM,UAAU,uCAAuC,QAAQ,sIAAsI,WAAW,EAAE;AAAA,MACxN,EAAE,IAAI,MAAM,UAAU,kCAAkC,QAAQ,8FAA8F,WAAW,EAAE;AAAA,MAC3K,EAAE,IAAI,MAAM,UAAU,uCAAuC,QAAQ,iFAAiF,WAAW,EAAE;AAAA,MACnK,EAAE,IAAI,MAAM,UAAU,iCAAiC,QAAQ,2FAA2F,WAAW,EAAE;AAAA,MACvK,EAAE,IAAI,MAAM,UAAU,mCAAmC,QAAQ,2HAA2H,WAAW,EAAE;AAAA,IAC3M;AAAA,EACF;AAAA,EAEA,eAAe;AAAA,IACb,MAAM;AAAA,MACJ;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS;AAAA,UACP,EAAE,MAAM,OAAO,aAAa,gBAAgB,SAAS,QAAQ,UAAU,KAAK;AAAA,UAC5E,EAAE,MAAM,SAAS,aAAa,iBAAiB,SAAS,uBAAuB,UAAU,KAAK;AAAA,QAChG;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS;AAAA,UACP,EAAE,MAAM,OAAO,aAAa,eAAe,SAAS,UAAU,UAAU,KAAK;AAAA,UAC7E,EAAE,MAAM,QAAQ,aAAa,gBAAgB,SAAS,WAAW,UAAU,MAAM;AAAA,UACjF,EAAE,MAAM,SAAS,aAAa,gBAAgB,SAAS,WAAW,UAAU,MAAM;AAAA,UAClF,EAAE,MAAM,UAAU,aAAa,cAAc,SAAS,SAAS,UAAU,MAAM;AAAA,QACjF;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS;AAAA,UACP,EAAE,MAAM,SAAS,aAAa,gBAAgB,SAAS,gBAAgB,UAAU,KAAK;AAAA,UACtF,EAAE,MAAM,eAAe,aAAa,uBAAuB,SAAS,8BAA8B,UAAU,MAAM;AAAA,UAClH,EAAE,MAAM,cAAc,aAAa,gBAAgB,SAAS,YAAY,UAAU,MAAM;AAAA,UACxF,EAAE,MAAM,QAAQ,aAAa,aAAa,SAAS,UAAU,UAAU,MAAM;AAAA,UAC7E,EAAE,MAAM,QAAQ,aAAa,iBAAiB,SAAS,KAAK,UAAU,MAAM;AAAA,QAC9E;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS;AAAA,UACP,EAAE,MAAM,aAAa,aAAa,aAAa,SAAS,gCAAgC,UAAU,KAAK;AAAA,UACvG,EAAE,MAAM,OAAO,aAAa,qBAAqB,SAAS,2BAA2B,UAAU,MAAM;AAAA,UACrG,EAAE,MAAM,WAAW,aAAa,gBAAgB,SAAS,kCAAkC,UAAU,MAAM;AAAA,UAC3G,EAAE,MAAM,QAAQ,aAAa,iBAAiB,SAAS,KAAK,UAAU,MAAM;AAAA,QAC9E;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS;AAAA,UACP,EAAE,MAAM,SAAS,aAAa,mBAAmB,SAAS,iCAAiC,UAAU,KAAK;AAAA,UAC1G,EAAE,MAAM,QAAQ,aAAa,iBAAiB,SAAS,WAAW,UAAU,KAAK;AAAA,UACjF,EAAE,MAAM,WAAW,aAAa,mBAAmB,SAAS,qBAAqB,UAAU,MAAM;AAAA,UACjG,EAAE,MAAM,UAAU,aAAa,qBAAqB,SAAS,KAAK,UAAU,MAAM;AAAA,UAClF,EAAE,MAAM,QAAQ,aAAa,iBAAiB,SAAS,KAAK,UAAU,MAAM;AAAA,QAC9E;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS;AAAA,UACP,EAAE,MAAM,YAAY,aAAa,iBAAiB,SAAS,6BAA6B,UAAU,KAAK;AAAA,UACvG,EAAE,MAAM,UAAU,aAAa,eAAe,SAAS,+BAA+B,UAAU,KAAK;AAAA,UACrG,EAAE,MAAM,QAAQ,aAAa,iBAAiB,SAAS,KAAK,UAAU,MAAM;AAAA,QAC9E;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,iBAAiB,CAAC,UAAU,UAAU,YAAY,SAAS,QAAQ,UAAU,SAAS,MAAM;AAAA,EAE5F,kBAAkB;AAAA,IAChB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;ACxJO,IAAM,qBAAqC;AAAA,EAChD,MAAM;AAAA,EACN,MAAM;AAAA,EACN,aAAa;AAAA,EAEb,QAAQ;AAAA,IACN,cAAc;AAAA,IACd,OAAO;AAAA,MACL,QAAQ;AAAA,MACR,cAAc;AAAA,MACd,SAAS;AAAA,IACX;AAAA,IACA,OAAO;AAAA,MACL,MAAM;AAAA,QACJ,SAAS;AAAA,QACT,UAAU;AAAA,UACR;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,MACA,OAAO,EAAE,SAAS,KAAK;AAAA,MACvB,UAAU,EAAE,SAAS,MAAM,OAAO,eAAe;AAAA,MACjD,MAAM,EAAE,SAAS,MAAM,OAAO,WAAW;AAAA,MACzC,KAAK,EAAE,SAAS,KAAK;AAAA,MACrB,SAAS,EAAE,SAAS,KAAK;AAAA,MACzB,SAAS,EAAE,SAAS,KAAK;AAAA,IAC3B;AAAA,IACA,KAAK;AAAA,MACH,eAAe;AAAA,MACf,UAAU,CAAC,yBAAyB,cAAc,iBAAiB,gBAAgB;AAAA,MACnF,YAAY;AAAA,IACd;AAAA,IACA,aAAa;AAAA,MACX,SAAS;AAAA,MACT,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,OAAO;AAAA,QACP,OAAO;AAAA,QACP,SAAS;AAAA,QACT,SAAS;AAAA,MACX;AAAA,MACA,gBAAgB;AAAA,IAClB;AAAA,IACA,UAAU;AAAA,MACR,eAAe;AAAA,MACf,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,aAAa;AAAA,MACb,eAAe;AAAA,IACjB;AAAA,EACF;AAAA,EAEA,UAAU;AAAA,IACR,UAAU;AAAA,MACR,SAAS;AAAA,MACT,aAAa;AAAA,MACb,YAAY;AAAA,IACd;AAAA,IACA,UAAU;AAAA,MACR,EAAE,IAAI,MAAM,OAAO,wBAAwB,aAAa,oDAAoD,WAAW,QAAQ,MAAM,QAAQ,WAAW,EAAE;AAAA,MAC1J,EAAE,IAAI,MAAM,OAAO,iBAAiB,aAAa,uDAAuD,WAAW,kBAAkB,MAAM,aAAa,WAAW,EAAE;AAAA,MACrK,EAAE,IAAI,MAAM,OAAO,yBAAyB,aAAa,8CAA8C,WAAW,gBAAgB,MAAM,WAAW,WAAW,EAAE;AAAA,MAChK,EAAE,IAAI,MAAM,OAAO,mBAAmB,aAAa,4CAA4C,WAAW,mBAAmB,MAAM,YAAY,WAAW,EAAE;AAAA,IAC9J;AAAA,IACA,MAAM;AAAA,MACJ,EAAE,IAAI,MAAM,MAAM,kBAAkB,MAAM,uBAAuB,KAAK,oEAAoE,WAAW,EAAE;AAAA,MACvJ,EAAE,IAAI,MAAM,MAAM,kBAAkB,MAAM,oBAAoB,KAAK,+CAA+C,WAAW,EAAE;AAAA,IACjI;AAAA,IACA,KAAK;AAAA,MACH,EAAE,IAAI,MAAM,UAAU,8BAA8B,QAAQ,kIAAmI,WAAW,EAAE;AAAA,MAC5M,EAAE,IAAI,MAAM,UAAU,sCAAsC,QAAQ,qGAAqG,WAAW,EAAE;AAAA,MACtL,EAAE,IAAI,MAAM,UAAU,uBAAuB,QAAQ,6HAA6H,WAAW,EAAE;AAAA,MAC/L,EAAE,IAAI,MAAM,UAAU,wCAAwC,QAAQ,4GAA4G,WAAW,EAAE;AAAA,MAC/L,EAAE,IAAI,MAAM,UAAU,yBAAyB,QAAQ,qGAAsG,WAAW,EAAE;AAAA,IAC5K;AAAA,EACF;AAAA,EAEA,eAAe;AAAA,IACb,MAAM;AAAA,MACJ;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS;AAAA,UACP,EAAE,MAAM,OAAO,aAAa,gBAAgB,SAAS,QAAQ,UAAU,KAAK;AAAA,UAC5E,EAAE,MAAM,SAAS,aAAa,iBAAiB,SAAS,sBAAsB,UAAU,KAAK;AAAA,QAC/F;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS;AAAA,UACP,EAAE,MAAM,OAAO,aAAa,eAAe,SAAS,UAAU,UAAU,KAAK;AAAA,UAC7E,EAAE,MAAM,QAAQ,aAAa,gBAAgB,SAAS,WAAW,UAAU,MAAM;AAAA,UACjF,EAAE,MAAM,SAAS,aAAa,gBAAgB,SAAS,WAAW,UAAU,MAAM;AAAA,UAClF,EAAE,MAAM,UAAU,aAAa,cAAc,SAAS,SAAS,UAAU,MAAM;AAAA,QACjF;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS;AAAA,UACP,EAAE,MAAM,SAAS,aAAa,gBAAgB,SAAS,mBAAmB,UAAU,KAAK;AAAA,UACzF,EAAE,MAAM,eAAe,aAAa,uBAAuB,SAAS,uCAAuC,UAAU,MAAM;AAAA,UAC3H,EAAE,MAAM,cAAc,aAAa,gBAAgB,SAAS,aAAa,UAAU,MAAM;AAAA,UACzF,EAAE,MAAM,QAAQ,aAAa,aAAa,SAAS,cAAc,UAAU,MAAM;AAAA,UACjF,EAAE,MAAM,QAAQ,aAAa,iBAAiB,SAAS,KAAK,UAAU,MAAM;AAAA,QAC9E;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS;AAAA,UACP,EAAE,MAAM,QAAQ,aAAa,oBAAoB,SAAS,mBAAmB,UAAU,KAAK;AAAA,UAC5F,EAAE,MAAM,QAAQ,aAAa,cAAc,SAAS,aAAa,UAAU,MAAM;AAAA,UACjF,EAAE,MAAM,OAAO,aAAa,aAAa,SAAS,8BAA8B,UAAU,MAAM;AAAA,UAChG,EAAE,MAAM,aAAa,aAAa,aAAa,SAAS,gCAAgC,UAAU,MAAM;AAAA,UACxG,EAAE,MAAM,SAAS,aAAa,gBAAgB,SAAS,oBAAoB,UAAU,MAAM;AAAA,UAC3F,EAAE,MAAM,QAAQ,aAAa,iBAAiB,SAAS,KAAK,UAAU,MAAM;AAAA,QAC9E;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS;AAAA,UACP,EAAE,MAAM,SAAS,aAAa,sBAAsB,SAAS,sCAAsC,UAAU,KAAK;AAAA,UAClH,EAAE,MAAM,QAAQ,aAAa,eAAe,SAAS,YAAY,UAAU,KAAK;AAAA,UAChF,EAAE,MAAM,WAAW,aAAa,mBAAmB,SAAS,gBAAgB,UAAU,MAAM;AAAA,UAC5F,EAAE,MAAM,UAAU,aAAa,qBAAqB,SAAS,KAAK,UAAU,MAAM;AAAA,UAClF,EAAE,MAAM,QAAQ,aAAa,iBAAiB,SAAS,KAAK,UAAU,MAAM;AAAA,QAC9E;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS;AAAA,UACP,EAAE,MAAM,YAAY,aAAa,iBAAiB,SAAS,uBAAuB,UAAU,KAAK;AAAA,UACjG,EAAE,MAAM,UAAU,aAAa,eAAe,SAAS,oCAAoC,UAAU,KAAK;AAAA,UAC1G,EAAE,MAAM,QAAQ,aAAa,iBAAiB,SAAS,KAAK,UAAU,MAAM;AAAA,QAC9E;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,iBAAiB,CAAC,aAAa,cAAc,SAAS,UAAU,YAAY,SAAS,SAAS,OAAO;AAAA,EAErG,kBAAkB;AAAA,IAChB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;AC7JO,IAAM,gBAAgC;AAAA,EAC3C,MAAM;AAAA,EACN,MAAM;AAAA,EACN,aAAa;AAAA,EAEb,QAAQ;AAAA,IACN,cAAc;AAAA,IACd,OAAO;AAAA,MACL,QAAQ;AAAA,MACR,cAAc;AAAA,MACd,SAAS;AAAA,IACX;AAAA,IACA,OAAO;AAAA,MACL,MAAM;AAAA,QACJ,SAAS;AAAA,QACT,UAAU;AAAA,UACR;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,MACA,OAAO,EAAE,SAAS,KAAK;AAAA,MACvB,UAAU,EAAE,SAAS,KAAK;AAAA,MAC1B,SAAS,EAAE,SAAS,KAAK;AAAA,MACzB,KAAK,EAAE,SAAS,KAAK;AAAA,MACrB,SAAS,EAAE,SAAS,KAAK;AAAA,MACzB,SAAS,EAAE,SAAS,KAAK;AAAA,IAC3B;AAAA,IACA,KAAK;AAAA,MACH,eAAe;AAAA,MACf,UAAU,CAAC,kBAAkB,wBAAwB,SAAS;AAAA,MAC9D,YAAY;AAAA,IACd;AAAA,IACA,aAAa;AAAA,MACX,SAAS;AAAA,MACT,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,OAAO;AAAA,QACP,OAAO;AAAA,QACP,SAAS;AAAA,QACT,SAAS;AAAA,MACX;AAAA,IACF;AAAA,IACA,UAAU;AAAA,MACR,eAAe;AAAA,MACf,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,aAAa;AAAA,IACf;AAAA,EACF;AAAA,EAEA,UAAU;AAAA,IACR,UAAU;AAAA,MACR,SAAS;AAAA,MACT,aAAa;AAAA,MACb,YAAY;AAAA,IACd;AAAA,IACA,UAAU;AAAA,MACR,EAAE,IAAI,MAAM,OAAO,eAAe,aAAa,gCAAgC,WAAW,uBAAuB,WAAW,EAAE;AAAA,MAC9H,EAAE,IAAI,MAAM,OAAO,eAAe,aAAa,4BAA4B,WAAW,uBAAuB,WAAW,EAAE;AAAA,MAC1H,EAAE,IAAI,MAAM,OAAO,iBAAiB,aAAa,wCAAwC,WAAW,uBAAuB,WAAW,EAAE;AAAA,IAC1I;AAAA,IACA,KAAK;AAAA,MACH,EAAE,IAAI,MAAM,UAAU,wBAAwB,QAAQ,gFAAgF,WAAW,EAAE;AAAA,MACnJ,EAAE,IAAI,MAAM,UAAU,0BAA0B,QAAQ,kFAAkF,WAAW,EAAE;AAAA,MACvJ,EAAE,IAAI,MAAM,UAAU,gCAAgC,QAAQ,6EAA6E,WAAW,EAAE;AAAA,IAC1J;AAAA,EACF;AAAA,EAEA,eAAe;AAAA,IACb,MAAM;AAAA,MACJ;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS;AAAA,UACP,EAAE,MAAM,OAAO,aAAa,gBAAgB,SAAS,QAAQ,UAAU,KAAK;AAAA,UAC5E,EAAE,MAAM,SAAS,aAAa,iBAAiB,SAAS,sBAAsB,UAAU,KAAK;AAAA,QAC/F;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS;AAAA,UACP,EAAE,MAAM,OAAO,aAAa,eAAe,SAAS,UAAU,UAAU,KAAK;AAAA,UAC7E,EAAE,MAAM,QAAQ,aAAa,gBAAgB,SAAS,WAAW,UAAU,MAAM;AAAA,UACjF,EAAE,MAAM,SAAS,aAAa,gBAAgB,SAAS,WAAW,UAAU,MAAM;AAAA,UAClF,EAAE,MAAM,UAAU,aAAa,cAAc,SAAS,SAAS,UAAU,MAAM;AAAA,QACjF;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS;AAAA,UACP,EAAE,MAAM,SAAS,aAAa,gBAAgB,SAAS,gBAAgB,UAAU,KAAK;AAAA,UACtF,EAAE,MAAM,eAAe,aAAa,uBAAuB,SAAS,8BAA8B,UAAU,MAAM;AAAA,UAClH,EAAE,MAAM,cAAc,aAAa,gBAAgB,SAAS,YAAY,UAAU,MAAM;AAAA,UACxF,EAAE,MAAM,QAAQ,aAAa,aAAa,SAAS,QAAQ,UAAU,MAAM;AAAA,UAC3E,EAAE,MAAM,QAAQ,aAAa,iBAAiB,SAAS,KAAK,UAAU,MAAM;AAAA,QAC9E;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS;AAAA,UACP,EAAE,MAAM,aAAa,aAAa,aAAa,SAAS,gCAAgC,UAAU,KAAK;AAAA,UACvG,EAAE,MAAM,OAAO,aAAa,qBAAqB,SAAS,qBAAqB,UAAU,MAAM;AAAA,UAC/F,EAAE,MAAM,WAAW,aAAa,gBAAgB,SAAS,iBAAiB,UAAU,MAAM;AAAA,UAC1F,EAAE,MAAM,QAAQ,aAAa,iBAAiB,SAAS,KAAK,UAAU,MAAM;AAAA,QAC9E;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS;AAAA,UACP,EAAE,MAAM,SAAS,aAAa,mBAAmB,SAAS,kBAAkB,UAAU,KAAK;AAAA,UAC3F,EAAE,MAAM,QAAQ,aAAa,iBAAiB,SAAS,WAAW,UAAU,KAAK;AAAA,UACjF,EAAE,MAAM,UAAU,aAAa,qBAAqB,SAAS,KAAK,UAAU,MAAM;AAAA,UAClF,EAAE,MAAM,QAAQ,aAAa,iBAAiB,SAAS,KAAK,UAAU,MAAM;AAAA,QAC9E;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,UAAU;AAAA,QACV,SAAS;AAAA,UACP,EAAE,MAAM,YAAY,aAAa,iBAAiB,SAAS,oBAAoB,UAAU,KAAK;AAAA,UAC9F,EAAE,MAAM,UAAU,aAAa,eAAe,SAAS,iBAAiB,UAAU,KAAK;AAAA,UACvF,EAAE,MAAM,QAAQ,aAAa,iBAAiB,SAAS,KAAK,UAAU,MAAM;AAAA,QAC9E;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,iBAAiB,CAAC,QAAQ,SAAS,SAAS,YAAY,UAAU,SAAS,SAAS,MAAM;AAAA,EAE1F,kBAAkB;AAAA,IAChB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;AC5HO,IAAM,UAA0C;AAAA;AAAA,EAErD,UAAU;AAAA,EACV,cAAc;AAAA,EACd,gBAAgB;AAAA,EAChB,SAAS;AAAA,EACT,eAAe;AAAA,EACf,cAAc;AAAA,EACd,WAAW;AAAA;AAAA,EAGX,eAAe;AAAA,EACf,cAAc;AAAA,EACd,eAAe;AAAA,EAEf,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,cAAc;AAAA,EACd,YAAY;AAAA,EAEZ,cAAc;AAAA,EACd,OAAO;AAAA,EACP,cAAc;AAAA,EACd,gBAAgB;AAAA,EAEhB,gBAAgB;AAAA,EAChB,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,aAAa;AAAA,EAEb,YAAY;AAAA,EACZ,eAAe;AAAA,EACf,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,eAAe;AAAA,EACf,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,gBAAgB;AAAA,EAEhB,eAAe;AAAA,EACf,eAAe;AAAA,EACf,aAAa;AAAA,EAEb,UAAU;AAAA,EACV,eAAe;AAAA,EACf,aAAa;AAAA,EACb,cAAc;AAAA,EAEd,oBAAoB;AAAA,EACpB,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,WAAW;AAAA,EAEX,YAAY;AAAA,EACZ,iBAAiB;AAAA,EACjB,eAAe;AAAA,EACf,eAAe;AAAA,EACf,kBAAkB;AACpB;AAMO,SAAS,UAAU,MAA6C;AACrE,SAAO,QAAQ,IAAI,KAAK;AAC1B;AAKO,SAAS,4BAA8F;AAC5G,QAAM,gBAAgB,oBAAI,IAA4B;AAGtD,aAAW,UAAU,OAAO,OAAO,OAAO,GAAG;AAC3C,QAAI,CAAC,cAAc,IAAI,OAAO,IAAI,GAAG;AACnC,oBAAc,IAAI,OAAO,MAAM,MAAM;AAAA,IACvC;AAAA,EACF;AAEA,SAAO,MAAM,KAAK,cAAc,OAAO,CAAC,EAAE,IAAI,CAAC,YAAY;AAAA,IACzD,MAAM,OAAO;AAAA,IACb,MAAM,OAAO;AAAA,IACb,aAAa,OAAO;AAAA,EACtB,EAAE;AACJ;AAKO,IAAM,qBAAqB;AAAA,EAChC,sBAAsB;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,mBAAmB;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,UAAU;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,iBAAiB;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,iBAAiB;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,yBAAyB;AAAA,IACvB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,qBAAqB;AAAA,IACnB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,wBAAwB;AAAA,IACtB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAiBO,SAAS,sBAAsB,UAAkC;AACtE,QAAM,gBAAgB,SAAS,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC;AAIzD,QAAM,aAA2C;AAAA;AAAA;AAAA;AAAA,IAI/C,UAAU;AAAA,IACV,eAAe;AAAA,IACf,aAAa;AAAA,IACb,eAAe;AAAA,IACf,cAAc;AAAA,IACd,cAAc;AAAA,IACd,UAAU;AAAA,IACV,WAAW;AAAA,IACX,mBAAmB;AAAA,IACnB,oBAAoB;AAAA,IACpB,qBAAqB;AAAA,IACrB,iBAAiB;AAAA,IACjB,sBAAsB;AAAA,IACtB,gBAAgB;AAAA,IAChB,WAAW;AAAA;AAAA,IAGX,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,WAAW;AAAA,IACX,cAAc;AAAA,IACd,YAAY;AAAA;AAAA;AAAA;AAAA,IAKZ,cAAc;AAAA,IACd,UAAU;AAAA,IACV,UAAU;AAAA,IACV,UAAU;AAAA,IACV,aAAa;AAAA,IACb,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,SAAS;AAAA,IACT,sBAAsB;AAAA,IACtB,sBAAsB;AAAA,IACtB,sBAAsB;AAAA,IACtB,mBAAmB;AAAA,IACnB,qBAAqB;AAAA,IACrB,uBAAuB;AAAA,IACvB,SAAS;AAAA,IACT,SAAS;AAAA,IACT,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,UAAU;AAAA,IACV,cAAc;AAAA,IACd,WAAW;AAAA,IACX,SAAS;AAAA,IACT,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,YAAY;AAAA,IACZ,YAAY;AAAA;AAAA,IAGZ,QAAQ;AAAA,IACR,WAAQ;AAAA,IACR,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,YAAY;AAAA;AAAA,IAGZ,cAAc;AAAA,IACd,aAAa;AAAA,IACb,eAAe;AAAA;AAAA,IAGf,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,kBAAkB;AAAA;AAAA;AAAA;AAAA,IAKlB,UAAU;AAAA,IACV,SAAS;AAAA,IACT,UAAU;AAAA,IACV,SAAS;AAAA,IACT,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,SAAS;AAAA;AAAA,IAGT,gBAAgB;AAAA,IAChB,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,WAAW;AAAA,IACX,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,aAAa;AAAA,IACb,aAAa;AAAA;AAAA;AAAA;AAAA,IAKb,SAAS;AAAA,IACT,cAAc;AAAA,IACd,gBAAgB;AAAA,IAChB,eAAe;AAAA,IACf,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,iBAAiB;AAAA,IACjB,gBAAgB;AAAA,IAChB,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,WAAW;AAAA,IACX,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,cAAc;AAAA;AAAA,IAGd,UAAU;AAAA,IACV,cAAc;AAAA,IACd,eAAe;AAAA,IACf,iBAAiB;AAAA,IACjB,QAAQ;AAAA,IACR,UAAU;AAAA;AAAA,IAGV,OAAO;AAAA,IACP,WAAW;AAAA,IACX,WAAW;AAAA,IACX,eAAe;AAAA,IACf,UAAU;AAAA,IACV,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,cAAc;AAAA;AAAA,IAGd,cAAc;AAAA,IACd,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,iBAAiB;AAAA;AAAA,IAGjB,WAAW;AAAA,IACX,mBAAmB;AAAA,IACnB,qBAAqB;AAAA,IACrB,eAAe;AAAA,IACf,mBAAmB;AAAA,IACnB,gBAAgB;AAAA,IAChB,kBAAkB;AAAA,IAClB,eAAe;AAAA;AAAA,IAGf,gBAAgB;AAAA,IAChB,gBAAgB;AAAA,IAChB,eAAe;AAAA,IACf,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,mBAAmB;AAAA;AAAA;AAAA;AAAA,IAKnB,eAAe;AAAA,IACf,aAAa;AAAA,IACb,WAAW;AAAA,IACX,kBAAkB;AAAA,IAClB,eAAe;AAAA,IACf,eAAe;AAAA,IACf,eAAe;AAAA,IACf,cAAc;AAAA,IACd,kBAAkB;AAAA,IAClB,gBAAgB;AAAA,IAChB,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA,IAMd,YAAY;AAAA,IACZ,oBAAoB;AAAA,IACpB,kBAAkB;AAAA,IAClB,iBAAiB;AAAA,IACjB,gBAAgB;AAAA,IAChB,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,mBAAmB;AAAA,IACnB,mBAAmB;AAAA,IACnB,oBAAoB;AAAA,IACpB,iBAAiB;AAAA;AAAA,IAGjB,eAAe;AAAA,IACf,cAAc;AAAA,IACd,aAAa;AAAA,IACb,gBAAgB;AAAA,IAChB,eAAe;AAAA,IACf,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,cAAc;AAAA,IACd,aAAa;AAAA;AAAA,IAGb,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,eAAe;AAAA,IACf,oBAAoB;AAAA,IACpB,sBAAsB;AAAA,IACtB,cAAc;AAAA,IACd,cAAc;AAAA;AAAA,IAGd,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,mBAAmB;AAAA,IACnB,SAAS;AAAA,IACT,SAAS;AAAA,IACT,gBAAgB;AAAA;AAAA,IAGhB,eAAe;AAAA,IACf,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,yBAAyB;AAAA,IACzB,UAAU;AAAA,IACV,SAAS;AAAA;AAAA,IAGT,QAAQ;AAAA,IACR,oBAAoB;AAAA,IACpB,aAAa;AAAA,IACb,WAAW;AAAA,IACX,WAAW;AAAA,IACX,eAAe;AAAA;AAAA,IAGf,UAAU;AAAA,IACV,UAAU;AAAA,IACV,kBAAkB;AAAA,IAClB,cAAc;AAAA,IACd,WAAW;AAAA,IACX,gBAAgB;AAAA;AAAA,IAGhB,gBAAgB;AAAA,IAChB,gBAAgB;AAAA,IAChB,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,UAAU;AAAA,IACV,WAAW;AAAA;AAAA;AAAA;AAAA,IAKX,eAAe;AAAA,IACf,aAAa;AAAA,IACb,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,gBAAgB;AAAA,IAChB,gBAAgB;AAAA,IAChB,SAAS;AAAA,IACT,cAAc;AAAA,IACd,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,aAAa;AAAA;AAAA,IAGb,eAAe;AAAA,IACf,cAAc;AAAA,IACd,kBAAkB;AAAA,IAClB,iBAAiB;AAAA,IACjB,YAAY;AAAA,IACZ,iBAAiB;AAAA;AAAA,IAGjB,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,SAAS;AAAA,IACT,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA,IAMb,cAAc;AAAA,IACd,cAAc;AAAA,IACd,cAAc;AAAA,IACd,eAAe;AAAA,IACf,OAAO;AAAA,IACP,mBAAmB;AAAA,IACnB,gBAAgB;AAAA,IAChB,OAAO;AAAA,IACP,kBAAkB;AAAA;AAAA,IAGlB,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,SAAS;AAAA,IACT,kBAAkB;AAAA,IAClB,eAAe;AAAA,IACf,WAAW;AAAA,IACX,oBAAoB;AAAA,IACpB,mBAAmB;AAAA,IACnB,cAAc;AAAA,IACd,mBAAmB;AAAA,IACnB,UAAU;AAAA;AAAA,IAGV,eAAe;AAAA,IACf,WAAW;AAAA,IACX,UAAU;AAAA,IACV,qBAAqB;AAAA,IACrB,sBAAsB;AAAA,IACtB,uBAAuB;AAAA;AAAA,IAGvB,aAAa;AAAA,IACb,mBAAmB;AAAA,IACnB,oBAAoB;AAAA,IACpB,oBAAoB;AAAA,IACpB,kBAAkB;AAAA,IAClB,kBAAkB;AAAA,IAClB,oBAAoB;AAAA,IACpB,YAAY;AAAA;AAAA,IAGZ,cAAc;AAAA,IACd,cAAc;AAAA,IACd,uBAAuB;AAAA,IACvB,yBAAyB;AAAA,IACzB,WAAW;AAAA,IACX,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA,IAMrB,oBAAoB;AAAA,IACpB,qBAAqB;AAAA,IACrB,mBAAmB;AAAA,IACnB,WAAW;AAAA,IACX,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,aAAa;AAAA;AAAA,IAGb,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,mBAAmB;AAAA,IACnB,WAAW;AAAA,IACX,cAAc;AAAA;AAAA,IAGd,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,aAAa;AAAA,IACb,aAAa;AAAA,IACb,OAAO;AAAA,IACP,OAAO;AAAA,IACP,UAAU;AAAA,IACV,cAAc;AAAA,IACd,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,gBAAgB;AAAA;AAAA,IAGhB,gBAAgB;AAAA,IAChB,gBAAgB;AAAA,IAChB,SAAS;AAAA,IACT,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA,IAMb,SAAS;AAAA,IACT,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,UAAU;AAAA,IACV,cAAc;AAAA,IACd,WAAW;AAAA;AAAA,IAGX,YAAY;AAAA,IACZ,kBAAkB;AAAA,IAClB,WAAW;AAAA,IACX,WAAW;AAAA,IACX,kBAAkB;AAAA,IAClB,eAAe;AAAA,IACf,UAAU;AAAA,IACV,WAAW;AAAA;AAAA,IAGX,WAAW;AAAA,IACX,eAAe;AAAA,IACf,WAAW;AAAA,IACX,UAAU;AAAA,IACV,iBAAiB;AAAA;AAAA,IAGjB,aAAa;AAAA,IACb,cAAc;AAAA,IACd,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA,IAMX,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,oBAAoB;AAAA,IACpB,mBAAmB;AAAA,IACnB,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,cAAc;AAAA,IACd,iBAAiB;AAAA,IACjB,iBAAiB;AAAA;AAAA,IAGjB,iBAAiB;AAAA,IACjB,iBAAiB;AAAA,IACjB,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,IAClB,iBAAiB;AAAA,IACjB,mBAAmB;AAAA,IACnB,gBAAgB;AAAA,IAChB,kBAAkB;AAAA;AAAA,IAGlB,gBAAgB;AAAA,IAChB,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ,wBAAwB;AAAA,IACxB,YAAY;AAAA;AAAA,IAGZ,gBAAgB;AAAA,IAChB,eAAe;AAAA,IACf,oBAAoB;AAAA,IACpB,gBAAgB;AAAA,IAChB,aAAa;AAAA;AAAA,IAGb,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,IAClB,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,IACjB,qBAAqB;AAAA,IACrB,eAAe;AAAA,EACjB;AAGA,aAAW,WAAW,eAAe;AAEnC,QAAI,WAAW,OAAO,GAAG;AACvB,aAAO,WAAW,OAAO;AAAA,IAC3B;AAGA,eAAW,CAAC,KAAK,IAAI,KAAK,OAAO,QAAQ,UAAU,GAAG;AACpD,UAAI,QAAQ,SAAS,GAAG,KAAK,IAAI,SAAS,OAAO,GAAG;AAClD,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;;;ARvpBO,SAAS,iBACd,cACA,WACY;AACZ,QAAM,SAAS,UAAU,YAAY;AACrC,QAAM,SAAS,EAAE,GAAG,OAAO,OAAO;AAElC,MAAI,WAAW;AAEb,QAAI,UAAU,OAAO;AACnB,aAAO,QAAQ,EAAE,GAAG,OAAO,OAAO,GAAG,UAAU,MAAM;AAAA,IACvD;AAGA,QAAI,UAAU,OAAO;AACnB,aAAO,QAAQ,EAAE,GAAG,OAAO,OAAO,GAAG,UAAU,MAAM;AAAA,IACvD;AAGA,QAAI,UAAU,KAAK;AACjB,aAAO,MAAM,EAAE,GAAG,OAAO,KAAK,GAAG,UAAU,IAAI;AAAA,IACjD;AAGA,QAAI,UAAU,aAAa;AACzB,aAAO,cAAc,EAAE,GAAG,OAAO,aAAa,GAAG,UAAU,YAAY;AAAA,IACzE;AAGA,QAAI,UAAU,UAAU;AACtB,aAAO,WAAW,EAAE,GAAG,OAAO,UAAU,GAAG,UAAU,SAAS;AAAA,IAChE;AAGA,QAAI,UAAU,QAAS,QAAO,UAAU,UAAU;AAClD,QAAI,UAAU,eAAe;AAC3B,aAAO,gBAAgB,EAAE,GAAG,OAAO,eAAe,GAAG,UAAU,cAAc;AAAA,IAC/E;AAAA,EACF;AAEA,SAAO;AACT;AAMO,SAAS,iBAAiB,cAAsE;AACrG,QAAM,SAAS,UAAU,YAAY;AACrC,SAAO,OAAO;AAChB;AAKO,SAAS,eAAe,cAAiE;AAC9F,QAAM,SAAS,UAAU,YAAY;AACrC,SAAO,OAAO;AAChB;AAKO,SAAS,mBAAmB,cAA+C;AAChF,QAAM,SAAS,UAAU,YAAY;AACrC,SAAO,OAAO;AAChB;AAKO,SAAS,oBAAoB,cAA+C;AACjF,QAAM,SAAS,UAAU,YAAY;AACrC,SAAO,OAAO;AAChB;AAKO,SAAS,mBAAmB,QAA0D;AAC3F,QAAM,SAAmB,CAAC;AAG1B,MAAI,CAAC,OAAO,cAAc;AACxB,WAAO,KAAK,0BAA0B;AAAA,EACxC;AAEA,MAAI,CAAC,OAAO,OAAO,MAAM;AACvB,WAAO,KAAK,sCAAsC;AAAA,EACpD;AAEA,MAAI,CAAC,OAAO,OAAO;AACjB,WAAO,KAAK,iCAAiC;AAAA,EAC/C;AAGA,MAAI,OAAO,OAAO,MAAM,UAAU;AAChC,UAAM,gBAAmC;AAAA,MACvC;AAAA,MAAQ;AAAA,MAAY;AAAA,MAAQ;AAAA,MAAY;AAAA,MACxC;AAAA,MAAgB;AAAA,MAAQ;AAAA,MAAO;AAAA,MAAS;AAAA,MACxC;AAAA,MAAgB;AAAA,MAAO;AAAA,MAAgB;AAAA,MAAiB;AAAA,IAC1D;AAEA,eAAW,WAAW,OAAO,MAAM,KAAK,UAAU;AAChD,UAAI,CAAC,cAAc,SAAS,OAAO,GAAG;AACpC,eAAO,KAAK,yBAAyB,OAAO,EAAE;AAAA,MAChD;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL,OAAO,OAAO,WAAW;AAAA,IACzB;AAAA,EACF;AACF;AASO,IAAM,eAA8B;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAKO,SAAS,oBAAoB,QAA6B;AAC/D,QAAM,eAA4C;AAAA,IAChD,cAAc;AAAA,IACd,aAAa;AAAA,IACb,eAAe;AAAA,IACf,cAAc;AAAA,IACd,gBAAgB;AAAA,IAChB,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,cAAc;AAAA,IACd,gBAAgB;AAAA,EAClB;AAEA,SAAO,aAAa,MAAM;AAC5B;AAKO,SAAS,eAAe,cAAkD;AAC/E,QAAM,SAAS,UAAU,YAAY;AACrC,SAAO,OAAO,OAAO,MAAM,UAAU;AACvC;","names":[]}