Response:
```json
{
  "widgetConfig": {
    "version": "1.0.0",
    "industry": "concreting",
    "businessType": "trade_services"
  },

  "colorScheme": {
    "description": "Industrial concrete palette with warm orange accent - feels like a Aussie concreters' truck",
    "lightMode": {
      "primary": {
        "hex": "#2D3436",
        "name": "Concrete Grey",
        "usage": "Header backgrounds, primary text"
      },
      "secondary": {
        "hex": "#636E72",
        "name": "Steel Grey",
        "usage": "Secondary text, icons"
      },
      "accent": {
        "hex": "#E17055",
        "name": "Cement Truck Orange",
        "usage": "CTA buttons, highlights, notification badges"
      },
      "background": {
        "hex": "#FFFFFF",
        "name": "Fresh Pour White",
        "usage": "Widget body background"
      },
      "surface": {
        "hex": "#F5F6FA",
        "name": "Screed Light Grey",
        "usage": "Input fields, message bubbles"
      },
      "border": {
        "hex": "#DFE6E9",
        "name": "Expansion Joint Grey",
        "usage": "Dividers, borders"
      },
      "success": {
        "hex": "#00B894",
        "name": "Green Concrete",
        "usage": "Confirmation messages, success states"
      }
    },
    "darkMode": {
      "primary": {
        "hex": "#DFE6E9",
        "name": "Night Pour",
        "usage": "Primary text in dark mode"
      },
      "secondary": {
        "hex": "#B2BEC3",
        "name": "Dark Steel",
        "usage": "Secondary text in dark mode"
      },
      "accent": {
        "hex": "#FAB1A0",
        "name": "Sunset Orange",
        "usage": "CTA buttons in dark mode"
      },
      "background": {
        "hex": "#1E272E",
        "name": "Asphalt Dark",
        "usage": "Widget body background"
      },
      "surface": {
        "hex": "#2D3436",
        "name": "Dark Concrete",
        "usage": "Input fields, message bubbles"
      },
      "border": {
        "hex": "#3D4852",
        "name": "Joint Dark",
        "usage": "Dividers, borders"
      }
    }
  },

  "position": {
    "recommended": "bottom-right",
    "offset": {
      "desktop": { "bottom": "24px", "right": "24px" },
      "mobile": { "bottom": "16px", "right": "16px" }
    },
    "reasoning": "Bottom-right is the gold standard for chat widgets - users instinctively look there. For tradies on job sites, this position stays out of the way when they're trying to navigate quote pages or photo galleries of past work. Left side can feel awkward on RTL-aware devices.",
    "zIndex": "9999",
    "stackOrder": "above footer, below cookie banners"
  },

  "dimensions": {
    "desktop": {
      "width": "380px",
      "height": "auto",
      "maxHeight": "600px",
      "borderRadius": "16px"
    },
    "mobile": {
      "width": "calc(100vw - 32px)",
      "maxWidth": "380px",
      "height": "auto",
      "maxHeight": "calc(100vh - 100px)",
      "borderRadius": "12px"
    },
    "collapsed": {
      "width": "64px",
      "height": "64px",
      "borderRadius": "50%"
    }
  },

  "avatar": {
    "type": "icon",
    "iconName": "hard-hat",
    "style": "filled",
    "size": {
      "collapsed": "32px",
      "expanded": "40px"
    },
    "description": "A bold, simplified hard hat icon - instantly reads 'tradie' to any Australian visitor. The rounded shape feels friendly rather than corporate. We avoid a realistic face because it reminds people of bots, but the hard hat is universally recognised in the concreting game.",
    "fallbackColor": "#E17055",
    "animation": "subtle-bounce-on-hover"
  },

  "welcomeMessage": {
    "trigger": "on_open",
    "text": "G'day! I'm your concreting assistant. Need a quote for a driveway, shed slab, or patio? I can book you in for a free measure and quote — even if I'm handling your call outside hours.",
    "voiceGender": "male",
    "voiceStyle": "friendly aussie",
    "delay": 500,
    "typingIndicator": true
  },

  "fallbackMessages": [
    "No worries, take your time. I'm here when you're ready.",
    "Happy to help with any concreting questions — quotes, timelines, what we can do.",
    "Just say 'get a quote' when you're ready and I'll sort you out."
  ],

  "animations": {
    "entry": {
      "type": "slide-up-fade",
      "duration": "400ms",
      "easing": "cubic-bezier(0.34, 1.56, 0.64, 1)",
      "description": "A satisfying 'pop' that feels like concrete being poured — solid but with a bit of bounce. Not too bouncy, this isn't a kids' toy."
    },
    "exit": {
      "type": "fade-out",
      "duration": "200ms",
      "easing": "ease-out"
    },
    "idle": {
      "type": "none",
      "description": "No idle animation - it can be distracting and make the widget feel gimmicky. Tradies want practical, not entertaining."
    },
    "notification": {
      "type": "pulse-ring",
      "color": "#E17055",
      "duration": "2s",
      "iteration": "infinite",
      "description": "A subtle orange ring that pulses out from the collapsed widget when there's a new message or missed call notification. Like a tool flashing to get your attention, but not annoying."
    },
    "messageAppear": {
      "type": "slide-up",
      "duration": "300ms",
      "easing": "ease-out"
    },
    "buttonHover": {
      "type": "scale",
      "scale": "1.02",
      "duration": "150ms",
      "easing": "ease-out"
    }
  },

  "typography": {
    "fontFamily": "'DM Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif",
    "fallback": "system-ui, sans-serif",
    "description": "DM Sans is clean and modern without being cold. It reads well on mobile screens (crucial for tradies checking quotes on site) and has that slightly industrial feel without trying too hard. System fonts as fallback ensure fast loading.",
    "sizes": {
      "header": {
        "fontSize": "18px",
        "fontWeight": "700",
        "lineHeight": "1.3",
        "letterSpacing": "-0.01em"
      },
      "body": {
        "fontSize": "15px",
        "fontWeight": "400",
        "lineHeight": "1.5"
      },
      "caption": {
        "fontSize": "12px",
        "fontWeight": "500",
        "lineHeight": "1.4"
      },
      "button": {
        "fontSize": "15px",
        "fontWeight": "600",
        "lineHeight": "1"
      },
      "input": {
        "fontSize": "15px",
        "fontWeight": "400",
        "lineHeight": "1.5"
      }
    }
  },

  "buttons": {
    "primary": {
      "background": "#E17055",
      "color": "#FFFFFF",
      "border": "none",
      "borderRadius": "10px",
      "padding": "14px 24px",
      "fontWeight": "600",
      "hover": {
        "background": "#D65D40",
        "transform": "translateY(-1px)",
        "boxShadow": "0 4px 12px rgba(225, 112, 85, 0.3)"
      },
      "active": {
        "background": "#C44D32",
        "transform": "translateY(0)"
      },
      "transition": "all 200ms ease"
    },
    "secondary": {
      "background": "transparent",
      "color": "#2D3436",
      "border": "2px solid #DFE6E9",
      "borderRadius": "10px",
      "padding": "12px 22px",
      "fontWeight": "600",
      "hover": {
        "borderColor": "#B2BEC3",
        "background": "#F5F6FA"
      },
      "transition": "all 200ms ease"
    },
    "quickReply": {
      "background": "#F5F6FA",
      "color": "#2D3436",
      "border": "1px solid #DFE6E9",
      "borderRadius": "20px",
      "padding": "10px 16px",
      "fontSize": "14px",
      "fontWeight": "500",
      "hover": {
        "background": "#E17055",
        "color": "#FFFFFF",
        "borderColor": "#E17055"
      },
      "transition": "all 200ms ease"
    },
    "close": {
      "size": "32px",
      "iconSize": "20px",
      "background": "transparent",
      "color": "#636E72",
      "hover": {
        "background": "#F5F6FA",
        "color": "#2D3436"
      },
      "borderRadius": "8px"
    }
  },

  "darkMode": {
    "enabled": true,
    "trigger": "system_preference",
    "manualToggle": true,
    "togglePosition": "header",
    "toggleIcon": "sun-moon",
    "styles": {
      "autoDetect": "Uses prefers-color-scheme to match the user's OS setting. Tradies often work in dark environments (looking at plans on a tablet at night) so dark mode is genuinely useful.",
      "manualToggle": "A small sun/moon icon in the header lets users flip modes if they want.",
      "smoothTransition": "300ms ease transition between modes to avoid jarring flashes."
    }
  },

  "industrySpecificElements": {
    "concreting": {
      "description": "Design elements that scream 'concreting' without being cheesy",
      "decorative": {
        "type": "subtle-texture",
        "pattern": "concrete-screed",
        "opacity": "0.03",
        "description": "A barely-there concrete texture overlay on the widget background. It's so subtle most people won't consciously notice it, but it adds tactile depth. Like the finish on a polished concrete floor."
      },
      "quickReplyButtons": [
        "Get a quote",
        "How much for a driveway?",
        "Book a measure",
        "What areas do you service?"
      ],
      "serviceKeywords": [
        "driveways",
        "patios",
        "shed slabs",
        "footpaths",
        "exposed aggregate",
        "coloured concrete",
        "retaining walls",
        "decorative concrete"
      ],
      "localisedPhrases": [
        "no worries",
        "sort you out",
        "free measure and quote",
        "good to go",
        "keen to get the job done"
      ],
      "businessHours": {
        "display": true,
        "text": "Mon-Fri 7am-5pm, Sat 8am-12pm",
        "note": "Shows when real humans are available - builds trust"
      },
      "afterHoursMessage": "Thanks for reaching out! We're currently closed but I've saved your details. We'll call you back tomorrow to sort out your quote. If it's urgent, call [phone] directly."
    }
  },

  "cssCustomProperties": {
    "--widget-primary": "#2D3436",
    "--widget-secondary": "#636E72",
    "--widget-accent": "#E17055",
    "--widget-background": "#FFFFFF",
    "--widget-surface": "#F5F6FA",
    "--widget-border": "#DFE6E9",
    "--widget-success": "#00B894",
    "--widget-font-family": "'DM Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif",
    "--widget-radius": "16px",
    "--widget-shadow": "0 8px 32px rgba(0, 0, 0, 0.12)",
    "--widget-shadow-hover": "0 12px 40px rgba(0, 0, 0, 0.16)",
    "--widget-z-index": "9999",
    "--widget-transition": "all 200ms ease",
    "--widget-animation-duration": "400ms",
    "--widget-font-size-header": "18px",
    "--widget-font-size-body": "15px",
    "--widget-font-size-caption": "12px",
    "--widget-line-height": "1.5",
    "--widget-spacing-xs": "4px",
    "--widget-spacing-sm": "8px",
    "--widget-spacing-md": "16px",
    "--widget-spacing-lg": "24px",
    "--widget-spacing-xl": "32px"
  },

  "darkModeCssVariables": {
    "--widget-primary": "#DFE6E9",
    "--widget-secondary": "#B2BEC3",
    "--widget-accent": "#FAB1A0",
    "--widget-background": "#1E272E",
    "--widget-surface": "#2D3436",
    "--widget-border": "#3D4852",
    "--widget-shadow": "0 8px 32px rgba(0, 0, 0, 0.4)"
  },

  "accessibility": {
    "ariaLabel": "Chat with our concreting assistant",
    "role": "complementary",
    "focusTrap": true,
    "keyboardNavigation": {
      "open": "Enter or Space",
      "close": "Escape",
      "navigateMessages": "Arrow keys"
    },
    "screenReaderAnnouncements": true,
    "reducedMotion": {
      "respectPreference": true,
      "fallbackAnimation": "fade"
    }
  },

  "responsiveBehavior": {
    "breakpoint": "768px",
    "belowBreakpoint": {
      "position": "bottom-right",
      "fullWidth": true,
      "margin": "16px"
    },
    "aboveBreakpoint": {
      "position": "bottom-right",
      "width": "380px"
    }
  },

  "performance": {
    "lazyLoad": true,
    "preloadOnIdle": false,
    "cacheAvatars": true,
    "fontDisplay": "swap"
  }
}
```

## Usage Notes

This config is ready to drop into the Sunaiva widget renderer. The CSS custom properties can be injected into the page's `:root` to allow client-side theme adjustments.

**Key design decisions explained:**

- **Orange accent** — Matches cement truck colours, stands out against the grey palette, and feels warm/approachable without being corporate
- **DM Sans font** — Clean, industrial feel that works on mobile (tradies checking quotes on-site) and loads fast
- **Subtle concrete texture** — Industry recognition without being tacky; most users won't consciously notice but it adds polish
- **Quick replies** — Pre-built options for the most common concreting enquiries (quotes, driveways, areas)
- **No idle animation** — Tradies are practical; gimmicky animations detract from the tool's utility
- **Dark mode** — Genuinely useful for tradies working in low-light conditions or checking quotes in the evening

The JSON includes all hex codes, dimensions in pixels, animation timings with easing curves, and specific Australian phrasing that matches the target market's language.


Response:
```json
{
  "widgetConfig": {
    "version": "1.0.0",
    "industry": "fencing",
    "businessType": "trade_services"
  },

  "colors": {
    "primary": "#1E3A5F",
    "primaryHover": "#152C4A",
    "secondary": "#64748B",
    "accent": "#F97316",
    "accentHover": "#EA580C",
    "background": "#FFFFFF",
    "backgroundSecondary": "#F8FAFC",
    "textPrimary": "#1E293B",
    "textSecondary": "#475569",
    "textMuted": "#94A3B8",
    "border": "#E2E8F0",
    "success": "#22C55E",
    "error": "#EF4444",
    "chatBubbleUser": "#1E3A5F",
    "chatBubbleAI": "#F1F5F9"
  },

  "darkMode": {
    "primary": "#3B82F6",
    "primaryHover": "#60A5FA",
    "secondary": "#94A3B8",
    "accent": "#FB923C",
    "accentHover": "#FDBA74",
    "background": "#0F172A",
    "backgroundSecondary": "#1E293B",
    "textPrimary": "#F1F5F9",
    "textSecondary": "#CBD5E1",
    "textMuted": "#64748B",
    "border": "#334155",
    "chatBubbleUser": "#3B82F6",
    "chatBubbleAI": "#334155"
  },

  "positioning": {
    "placement": "bottom-right",
    "offsetX": "24px",
    "offsetY": "24px",
    "zIndex": "9999",
    "mobilePlacement": "bottom",
    "mobileOffsetY": "16px",
    "mobileOffsetX": "16px",
    "reasoning": "Bottom-right placement aligns with natural reading flow and F-patterns. It's non-intrusive but easily discoverable. For fencers, tradies often have cluttered landing pages with hero images - this position ensures the widget doesn't obscure quote forms or contact details."
  },

  "dimensions": {
    "desktop": {
      "width": "400px",
      "height": "600px",
      "collapsedWidth": "72px",
      "collapsedHeight": "72px",
      "borderRadius": "16px"
    },
    "mobile": {
      "width": "calc(100vw - 32px)",
      "height": "calc(100vh - 120px)",
      "maxHeight": "700px",
      "borderRadius": "20px",
      "collapsedWidth": "64px",
      "collapsedHeight": "64px"
    }
  },

  "avatar": {
    "type": "custom_icon",
    "iconName": "fencing_helmet",
    "description": "A friendly, simplified fencing helmet icon with a smiling face, representing the professional yet approachable nature of a fencer business. The helmet silhouette in primary color with a subtle metallic sheen effect.",
    "size": {
      "collapsed": "72px",
      "expanded": "48px"
    },
    "fallback": "A navy blue circle with white fencing mask silhouette"
  },

  "typography": {
    "fontFamily": "'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif",
    "fontFamilyDisplay": "'Inter', sans-serif",
    "headerSize": "18px",
    "headerWeight": "600",
    "bodySize": "15px",
    "bodyWeight": "400",
    "captionSize": "13px",
    "captionWeight": "400",
    "lineHeight": "1.5",
    "letterSpacing": "0"
  },

  "welcomeMessage": {
    "text": "G'day! 👋 Need a quote for your fence? I can sort you out right now — just tell me what you're after.",
    "voiceGreeting": "G'day mate! Need a quote for your fence? I can sort you out right now.",
    "quickReplies": [
      "Get a quote",
      "Colorbond fence",
      "Timber fence",
      "Pool fencing"
    ]
  },

  "animations": {
    "entry": {
      "type": "slide_fade",
      "direction": "up",
      "duration": "400ms",
      "easing": "cubic-bezier(0.16, 1, 0.3, 1)"
    },
    "idle": {
      "type": "subtle_bounce",
      "interval": "4000ms",
      "duration": "600ms",
      "trigger": "when_collapsed"
    },
    "notification": {
      "type": "pulse_glow",
      "color": "#F97316",
      "duration": "2000ms",
      "interval": "3000ms"
    },
    "transitions": {
      "expand": "300ms ease-out",
      "collapse": "250ms ease-in",
      "message_appear": "200ms ease-out"
    }
  },

  "buttons": {
    "primary": {
      "background": "#F97316",
      "backgroundHover": "#EA580C",
      "text": "#FFFFFF",
      "borderRadius": "10px",
      "padding": "12px 24px",
      "fontSize": "15px",
      "fontWeight": "600",
      "boxShadow": "0 2px 8px rgba(249, 115, 22, 0.25)",
      "boxShadowHover": "0 4px 12px rgba(249, 115, 22, 0.35)"
    },
    "secondary": {
      "background": "#F1F5F9",
      "backgroundHover": "#E2E8F0",
      "text": "#1E293B",
      "borderRadius": "10px",
      "padding": "12px 24px",
      "fontSize": "15px",
      "fontWeight": "500"
    },
    "quickReply": {
      "background": "#F8FAFC",
      "backgroundHover": "#E2E8F0",
      "text": "#1E3A5F",
      "border": "1px solid #E2E8F0",
      "borderRadius": "20px",
      "padding": "8px 16px",
      "fontSize": "14px",
      "fontWeight": "500"
    },
    "close": {
      "background": "transparent",
      "backgroundHover": "#F1F5F9",
      "text": "#64748B",
      "size": "32px",
      "borderRadius": "8px"
    },
    "callToAction": {
      "background": "#22C55E",
      "backgroundHover": "#16A34A",
      "text": "#FFFFFF",
      "icon": "phone",
      "pulse": true
    }
  },

  "industrySpecific": {
    "fencing": {
      "quickActionButtons": [
        {
          "label": "📏 Get a Quote",
          "action": "start_quote_flow",
          "icon": "calculator"
        },
        {
          "label": "🔩 Colorbond",
          "action": "show_colorbond_info",
          "icon": "fence_colorbond"
        },
        {
          "label": "🪵 Timber Fence",
          "action": "show_timber_info",
          "icon": "fence_timber"
        },
        {
          "label": "🏊 Pool Fence",
          "action": "show_pool_fence_info",
          "icon": "fence_pool"
        }
      ],
      "conversationStarters": [
        "I need a new colorbond fence",
        "Got a timber fence quote for me?",
        "Pool fence compliance check",
        "How much for front fence replacement?"
      ],
      "qualifyingQuestions": [
        "What type of fence are you after? (Colorbond, timber, glass, chainmesh)",
        "Roughly how long is the fence line?",
        "Any gates needed?",
        "Suburb you're in — we service most of Melbourne/Sydney/Brisbane"
      ],
      "servicesRecognized": [
        "colorbond fencing",
        "colorbond",
        "timber fencing",
        "timber fence",
        "glass pool fencing",
        "pool fence",
        "chainmesh fencing",
        "chainmesh",
        "wrought iron",
        "metal fencing",
        "fence repair",
        "fence replacement",
        "gate installation",
        "automated gate",
        "slat fencing",
        "aluminium fencing"
      ],
      "triggers": {
        "hours": "We typically quote within 24 hours. For urgent jobs, give us a ring.",
        "warranty": "We offer a 25-year structural warranty on Colorbond and 10-year on timber installations.",
        "areas": "We service most suburbs in Melbourne, Sydney, Brisbane, Perth and Adelaide. What suburb are you in?"
      }
    }
  },

  "cssCustomProperties": {
    "--widget-primary": "#1E3A5F",
    "--widget-primary-hover": "#152C4A",
    "--widget-secondary": "#64748B",
    "--widget-accent": "#F97316",
    "--widget-accent-hover": "#EA580C",
    "--widget-bg": "#FFFFFF",
    "--widget-bg-secondary": "#F8FAFC",
    "--widget-text": "#1E293B",
    "--widget-text-muted": "#94A3B8",
    "--widget-border": "#E2E8F0",
    "--widget-radius": "16px",
    "--widget-radius-mobile": "20px",
    "--widget-shadow": "0 8px 32px rgba(0, 0, 0, 0.12)",
    "--widget-shadow-hover": "0 12px 40px rgba(0, 0, 0, 0.16)",
    "--widget-font": "'Inter', -apple-system, BlinkMacSystemFont, sans-serif",
    "--widget-transition": "all 0.3s cubic-bezier(0.16, 1, 0.3, 1)",
    "--widget-z-index": "9999",

    "--chat-bubble-user": "#1E3A5F",
    "--chat-bubble-ai": "#F1F5F9",
    "--chat-bubble-user-text": "#FFFFFF",
    "--chat-bubble-ai-text": "#1E293B",

    "--input-bg": "#F8FAFC",
    "--input-border": "#E2E8F0",
    "--input-focus": "#3B82F6",

    "--scrollbar-track": "#F1F5F9",
    "--scrollbar-thumb": "#CBD5E1",
    "--scrollbar-thumb-hover": "#94A3B8"
  },

  "darkModeCssProperties": {
    "--widget-primary": "#3B82F6",
    "--widget-primary-hover": "#60A5FA",
    "--widget-bg": "#0F172A",
    "--widget-bg-secondary": "#1E293B",
    "--widget-text": "#F1F5F9",
    "--widget-text-muted": "#64748B",
    "--widget-border": "#334155",
    "--chat-bubble-user": "#3B82F6",
    "--chat-bubble-ai": "#334155",
    "--chat-bubble-user-text": "#FFFFFF",
    "--chat-bubble-ai-text": "#F1F5F9",
    "--input-bg": "#1E293B",
    "--input-border": "#334155",
    "--scrollbar-track": "#1E293B",
    "--scrollbar-thumb": "#475569"
  },

  "accessibility": {
    "ariaLabel": "Chat with our fencing quote assistant",
    "ariaExpanded": "true/false",
    "role": "button",
    "tabIndex": 0,
    "focusVisible": "2px solid #F97316",
    "skipLinkTarget": "widget-container"
  },

  "behavior": {
    "autoOpen": {
      "enabled": false,
      "delay": 5000,
      "triggerOnExitIntent": true,
      "maxPerSession": 2
    },
    "notificationBadge": {
      "enabled": true,
      "count": null,
      "showDot": true
    },
    "sound": {
      "enabled": false,
      "volume": 0.3,
      "messageSound": "subtle_chime"
    },
    "persistence": {
      "rememberConversation": true,
      "clearAfterDays": 30
    }
  }
}
```

## CSS Implementation Guide

```css
/* Widget Container */
:root {
  --widget-primary: #1E3A5F;
  --widget-primary-hover: #152C4A;
  --widget-secondary: #64748B;
  --widget-accent: #F97316;
  --widget-accent-hover: #EA580C;
  --widget-bg: #FFFFFF;
  --widget-bg-secondary: #F8FAFC;
  --widget-text: #1E293B;
  --widget-text-muted: #94A3B8;
  --widget-border: #E2E8F0;
  --widget-radius: 16px;
  --widget-radius-mobile: 20px;
  --widget-shadow: 0 8px 32px rgba(0, 0, 0, 0.12);
  --widget-shadow-hover: 0 12px 40px rgba(0, 0, 0, 0.16);
  --widget-font: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
  --widget-transition: all 0.3s cubic-bezier(0.16, 1, 0.3, 1);
  --widget-z-index: 9999;

  --chat-bubble-user: #1E3A5F;
  --chat-bubble-ai: #F1F5F9;
  --chat-bubble-user-text: #FFFFFF;
  --chat-bubble-ai-text: #1E293B;

  --input-bg: #F8FAFC;
  --input-border: #E2E8F0;
  --input-focus: #3B82F6;

  --scrollbar-track: #F1F5F9;
  --scrollbar-thumb: #CBD5E1;
  --scrollbar-thumb-hover: #94A3B8;
}

/* Dark Mode */
@media (prefers-color-scheme: dark) {
  :root {
    --widget-primary: #3B82F6;
    --widget-primary-hover: #60A5FA;
    --widget-bg: #0F172A;
    --widget-bg-secondary: #1E293B;
    --widget-text: #F1F5F9;
    --widget-text-muted: #64748B;
    --widget-border: #334155;
    --chat-bubble-user: #3B82F6;
    --chat-bubble-ai: #334155;
    --chat-bubble-user-text: #FFFFFF;
    --chat-bubble-ai-text: #F1F5F9;
    --input-bg: #1E293B;
    --input-border: #334155;
    --scrollbar-track: #1E293B;
    --scrollbar-thumb: #475569;
  }
}

/* Widget Base */
.sunaiva-widget {
  font-family: var(--widget-font);
  color: var(--widget-text);
  background: var(--widget-bg);
  border-radius: var(--widget-radius);
  box-shadow: var(--widget-shadow);
  transition: var(--widget-transition);
  z-index: var(--widget-z-index);
}

.sunaiva-widget:hover {
  box-shadow: var(--widget-shadow-hover);
}

/* Quick Reply Buttons */
.quick-reply-btn {
  background: var(--widget-bg-secondary);
  border: 1px solid var(--widget-border);
  border-radius: 20px;
  padding: 8px 16


Response:
# Glass Repairer Widget Customization Specification

```json
{
  "widget": {
    "id": "sunaiva-glass-repairer-v1",
    "business_type": "glass_repairer",
    "version": "1.0.0"
  },
  "colors": {
    "primary": "#0A4D8C",
    "primary_dark": "#073A66",
    "primary_light": "#1A6DBF",
    "secondary": "#F4F5F7",
    "secondary_dark": "#E1E4E8",
    "accent": "#F59E0B",
    "accent_dark": "#D97706",
    "accent_light": "#FBBF24",
    "text_primary": "#1F2937",
    "text_secondary": "#6B7280",
    "text_on_primary": "#FFFFFF",
    "surface": "#FFFFFF",
    "surface_elevated": "#FFFFFF",
    "border": "#E5E7EB",
    "success": "#10B981",
    "error": "#EF4444",
    "overlay": "rgba(0, 0, 0, 0.5)"
  },
  "position": {
    "desktop": "bottom-right",
    "mobile": "bottom-center",
    "desktop_offset": { "x": 24, "y": 24 },
    "mobile_offset": { "x": 0, "y": 16 },
    "z_index": 9999,
    "reasoning": "Bottom-right placement avoids conflict with existing contact forms while remaining thumb-accessible on mobile. Offset ensures it doesn't obscure edge elements or brand logos."
  },
  "dimensions": {
    "launcher": {
      "desktop": { "width": 64, "height": 64 },
      "mobile": { "width": 56, "height": 56 }
    },
    "window": {
      "desktop": { "width": 400, "height": 600, "max_height": 720 },
      "mobile": { "width": "calc(100vw - 32px)", "height": "calc(100vh - 120px)", "max_height": 640 }
    },
    "border_radius": {
      "launcher": "50%",
      "window": "16px",
      "button": "8px",
      "input": "8px",
      "avatar": "50%"
    }
  },
  "avatar": {
    "type": "icon",
    "icon_name": "sparkle-glass",
    "icon_path": "/assets/icons/glass-sparkle.svg",
    "fallback": "A friendly illustrated glass shard with sparkle effect",
    "size": {
      "launcher": 32,
      "header": 48,
      "message": 36
    },
    "animation": "subtle-shimmer",
    "alt_text": "Glass Repair Assistant"
  },
  "welcome_message": {
    "text": "G'day! 👋 I'm your glazier assistant. Need a quote for new glass, or has something smashed?",
    "voice_greeting": "G'day, I'm your glazier assistant. Need a quote for new glass, or has something smashed?",
    "quick_replies": [
      "Get a quote",
      "Emergency repair",
      "Shower screens",
      "Window replacement"
    ]
  },
  "typography": {
    "font_family": "'DM Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif",
    "font_family_display": "'DM Sans', sans-serif",
    "sizes": {
      "header_title": "18px",
      "header_subtitle": "13px",
      "body": "15px",
      "body_small": "13px",
      "caption": "11px",
      "button": "15px",
      "input": "15px"
    },
    "weights": {
      "regular": 400,
      "medium": 500,
      "semibold": 600,
      "bold": 700
    },
    "line_heights": {
      "tight": 1.25,
      "normal": 1.5,
      "relaxed": 1.75
    }
  },
  "animations": {
    "entry": {
      "launcher": {
        "name": "slideUpFadeIn",
        "duration": "400ms",
        "easing": "cubic-bezier(0.16, 1, 0.3, 1)",
        "delay": "200ms"
      },
      "window": {
        "name": "scaleSlideUp",
        "duration": "350ms",
        "easing": "cubic-bezier(0.16, 1, 0.3, 1)",
        "delay": "0ms"
      }
    },
    "idle": {
      "launcher": {
        "type": "pulse",
        "duration": "2s",
        "easing": "ease-in-out",
        "scale_range": [1, 1.05],
        "delay": "3s",
        "repeat": true
      }
    },
    "notification": {
      "launcher": {
        "type": "bounce",
        "duration": "600ms",
        "easing": "cubic-bezier(0.68, -0.55, 0.265, 1.55)",
        "repeat": 2
      }
    },
    "micro": {
      "button_hover": { "duration": "150ms", "easing": "ease-out" },
      "message_appear": { "duration": "200ms", "easing": "ease-out" },
      "typing_indicator": { "duration": "1200ms", "easing": "linear", "repeat": true }
    }
  },
  "buttons": {
    "primary": {
      "background": "#0A4D8C",
      "background_hover": "#073A66",
      "background_active": "#052C4A",
      "text": "#FFFFFF",
      "text_hover": "#FFFFFF",
      "border": "none",
      "border_hover": "none",
      "shadow": "0 2px 8px rgba(10, 77, 140, 0.25)",
      "shadow_hover": "0 4px 12px rgba(10, 77, 140, 0.35)"
    },
    "secondary": {
      "background": "#F4F5F7",
      "background_hover": "#E1E4E8",
      "background_active": "#D1D5DB",
      "text": "#1F2937",
      "text_hover": "#1F2937",
      "border": "1px solid #E5E7EB",
      "border_hover": "1px solid #D1D5DB"
    },
    "accent": {
      "background": "#F59E0B",
      "background_hover": "#D97706",
      "background_active": "#B45309",
      "text": "#1F2937",
      "text_hover": "#1F2937",
      "border": "none",
      "shadow": "0 2px 8px rgba(245, 158, 11, 0.3)",
      "shadow_hover": "0 4px 12px rgba(245, 158, 11, 0.4)"
    },
    "cta": {
      "text": "Call now",
      "icon": "phone",
      "icon_position": "left"
    },
    "quick_reply": {
      "background": "#F0F7FF",
      "background_hover": "#E0EDFF",
      "text": "#0A4D8C",
      "border": "1px solid #0A4D8C",
      "border_radius": "20px",
      "padding": "8px 16px"
    }
  },
  "dark_mode": {
    "enabled": true,
    "colors": {
      "primary": "#3B82F6",
      "primary_dark": "#2563EB",
      "secondary": "#1F2937",
      "secondary_dark": "#111827",
      "accent": "#FBBF24",
      "text_primary": "#F9FAFB",
      "text_secondary": "#9CA3AF",
      "surface": "#1F2937",
      "surface_elevated": "#374151",
      "border": "#374151"
    },
    "typography": {
      "adjustments": {
        "text_primary": "#F9FAFB",
        "text_secondary": "#9CA3AF"
      }
    },
    "avatar": {
      "invert_for_contrast": false,
      "glow_effect": "0 0 20px rgba(59, 130, 246, 0.3)"
    }
  },
  "industry_specific": {
    "business_type": "glass_repairer",
    "iconography": {
      "category": "glass_glazing",
      "primary_icon": "window-frame",
      "secondary_icons": ["shower-screen", "mirror", "splashback", "window-pane"]
    },
    "vocabulary": {
      "terms": ["glazier", "double glazing", "toughened glass", "laminated glass", "safety glass", "window replacement", "emergency glass", "glass cut to size"],
      "phrases": {
        "greeting": ["G'day!", "Hi there!", "Hey mate!"],
        "closing": ["Cheers!", "No worries!", "Take care!"],
        "urgent": ["smashed", "broken", "shattered", "cracked", "urgent"]
      }
    },
    "quick_actions": [
      { "label": "⚡ Emergency Callout", "intent": "urgent_repair", "icon": "alert" },
      { "label": "📝 Get a Quote", "intent": "quote_request", "icon": "quote" },
      { "label": "🚿 Shower Screens", "intent": "shower_screen", "icon": "shower" },
      { "label": "🪟 Window Replacement", "intent": "window_replacement", "icon": "window" },
      { "label": "📞 Call the Team", "intent": "phone_transfer", "icon": "phone" }
    ],
    "common_queries": [
      "How much for double glazing?",
      "Can you do same-day repairs?",
      "Do you service [suburb]?",
      "Warranty on new windows?",
      "Smashed window - need emergency"
    ],
    "business_hours": {
      "display": true,
      "format": "7 days, 7am - 6pm",
      "out_of_hours_response": "We'll get back to you first thing tomorrow, or for emergencies tap 'Call now' to reach us directly."
    },
    "service_area": {
      "show_suburb_selector": true,
      "placeholder": "What's your suburb?",
      "common_areas": ["Parramatta", "Hornsby", "Castle Hill", "North Sydney", "Bondi", "Chatswood"]
    },
    "visual_elements": {
      "decorative": {
        "type": "glass-shimmer",
        "opacity": 0.08,
        "position": "header_background"
      },
      "badges": {
        "show_licence": true,
        "licence_label": "Licenced Glazier",
        "show_insurance": true,
        "insurance_label": "Fully Insured"
      }
    },
    "call_triggers": {
      "urgent_keywords": ["smashed", "broken", "emergency", "urgent", "now", " ASAP"],
      "transfer_on_urgency": true,
      "phone_number_prompt": "Want me to connect you straight away?"
    }
  },
  "css_custom_properties": {
    "--sunaiva-glass-primary": "#0A4D8C",
    "--sunaiva-glass-primary-dark": "#073A66",
    "--sunaiva-glass-primary-light": "#1A6DBF",
    "--sunaiva-glass-secondary": "#F4F5F7",
    "--sunaiva-glass-secondary-dark": "#E1E4E8",
    "--sunaiva-glass-accent": "#F59E0B",
    "--sunaiva-glass-accent-dark": "#D97706",
    "--sunaiva-glass-text-primary": "#1F2937",
    "--sunaiva-glass-text-secondary": "#6B7280",
    "--sunaiva-glass-text-on-primary": "#FFFFFF",
    "--sunaiva-glass-surface": "#FFFFFF",
    "--sunaiva-glass-border": "#E5E7EB",
    "--sunaiva-glass-success": "#10B981",
    "--sunaiva-glass-error": "#EF4444",
    "--sunaiva-glass-font-family": "'DM Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif",
    "--sunaiva-glass-border-radius-sm": "8px",
    "--sunaiva-glass-border-radius-md": "12px",
    "--sunaiva-glass-border-radius-lg": "16px",
    "--sunaiva-glass-border-radius-full": "9999px",
    "--sunaiva-glass-shadow-sm": "0 1px 3px rgba(0, 0, 0, 0.08)",
    "--sunaiva-glass-shadow-md": "0 4px 12px rgba(0, 0, 0, 0.12)",
    "--sunaiva-glass-shadow-lg": "0 8px 24px rgba(0, 0, 0, 0.16)",
    "--sunaiva-glass-shadow-primary": "0 2px 8px rgba(10, 77, 140, 0.25)",
    "--sunaiva-glass-shadow-accent": "0 2px 8px rgba(245, 158, 11, 0.3)",
    "--sunaiva-glass-transition-fast": "150ms ease-out",
    "--sunaiva-glass-transition-normal": "250ms ease-out",
    "--sunaiva-glass-transition-slow": "400ms cubic-bezier(0.16, 1, 0.3, 1)",
    "--sunaiva-glass-z-index": "9999",
    "--sunaiva-glass-launcher-size": "64px",
    "--sunaiva-glass-window-width-desktop": "400px",
    "--sunaiva-glass-window-height-desktop": "600px",
    "--sunaiva-glass-window-width-mobile": "calc(100vw - 32px)",
    "--sunaiva-glass-window-height-mobile": "calc(100vh - 120px)"
  },
  "accessibility": {
    "aria_labels": {
      "launcher": "Open chat with glass repair assistant",
      "close_button": "Close chat",
      "send_button": "Send message",
      "phone_button": "Call now"
    },
    "focus_management": {
      "trap_focus_in_modal": true,
      "return_focus_on_close": true,
      "initial_focus": "message_input"
    },
    "screen_reader": {
      "announce_new_messages": true,
      "polite_updates": true
    },
    "keyboard_navigation": {
      "toggle_key": "Escape",
      "submit_key": "Enter",
      "quick_reply_navigation": "Tab"
    },
    "reduced_motion": {
      "respect_prefers_reduced_motion": true,
      "fallback_animation": "opacity-fade-only"
    }
  },
  "fallback_config": {
    "voice_unavailable": {
      "show_text_input": true,
      "fallback_message": "Voice not available — typing works great too!"
    },
    "out_of_hours": {
      "enable_voicemail": true,
      "callback_request": true,
      "message_template": "Thanks for reaching out. We'll call you back within [timeframe]. Tap 'Call now' for emergencies."
    },
    "network_error": {
      "retry_enabled": true,
      "max_retries": 3,
      "offline_message": "No internet. Try calling us on [phone_number]."
    }
  }
}
```

---

## Design Rationale

### Color Palette Selection

The glass repairer palette draws from industry conventions:

- **Deep blue (#0A4D8C)** — Conveys trust, professionalism, reliability. Matches classic glazier/trade aesthetics.
- **Warm amber (#F59E0B)** — Emergency accent for


Response:
```json
{
  "widgetConfig": {
    "version": "1.0.0",
    "businessType": "Gutter Cleaning",
    "targetRegion": "Australia"
  },

  "colorScheme": {
    "primary": {
      "name": "Midnight Navy",
      "hex": "#1a3a52",
      "usage": "Header backgrounds, primary text, widget container"
    },
    "secondary": {
      "name": "Leaf Green",
      "hex": "#2d8c4e",
      "usage": "Success states, online indicator, secondary accents"
    },
    "accent": {
      "name": "Safety Orange",
      "hex": "#e85d04",
      "usage": "CTA buttons, call-to-action elements, notifications"
    },
    "surface": {
      "name": "Off White",
      "hex": "#f8f9fa",
      "usage": "Widget background, message bubbles (light mode)"
    },
    "surfaceDark": {
      "name": "Slate Grey",
      "hex": "#2d3748",
      "usage": "Widget background (dark mode)"
    },
    "textPrimary": {
      "name": "Charcoal",
      "hex": "#1f2937",
      "usage": "Main body text"
    },
    "textSecondary": {
      "name": "Cool Grey",
      "hex": "#6b7280",
      "usage": "Captions, timestamps, secondary info"
    },
    "textOnAccent": {
      "name": "Pure White",
      "hex": "#ffffff",
      "usage": "Text on accent-colored buttons"
    },
    "border": {
      "name": "Light Grey",
      "hex": "#e5e7eb",
      "usage": "Dividers, input borders"
    },
    "success": {
      "name": "Aussie Green",
      "hex": "#22c55e",
      "usage": "Booking confirmed, success states"
    },
    "error": {
      "name": "Reds",
      "hex": "#dc2626",
      "usage": "Error messages, failed states"
    }
  },

  "position": {
    "placement": "bottom-left",
    "offset": {
      "desktop": { "x": 24, "y": 24 },
      "mobile": { "x": 16, "y": 16 }
    },
    "reasoning": "Left placement aligns with natural reading direction (left-to-right), placing the CTA in the user's primary visual path. This positions the widget as a helpful assistant rather than an interrupting ad. Bottom corner keeps it visible without blocking content."
  },

  "dimensions": {
    "desktop": {
      "width": 380,
      "height": "auto",
      "maxHeight": 560,
      "borderRadius": 16
    },
    "mobile": {
      "width": "calc(100% - 32px)",
      "maxWidth": 380,
      "height": "auto",
      "maxHeight": "75vh",
      "borderRadius": 12
    },
    "collapsed": {
      "width": 64,
      "height": 64,
      "borderRadius": 32
    }
  },

  "avatar": {
    "type": "character",
    "style": "friendly_cartoon_tradie",
    "description": "A friendly, approachable cartoon avatar of an Australian tradie wearing a peaked cap (Aussie style), with a relaxed smile. The character has a casual, helpful vibe - like a mate who'd help you out. No hard hat needed for gutters - just a regular Aussie bloke.",
    "visualElements": [
      "Peaked cap in brand primary color (#1a3a52)",
      "Friendly open smile",
      "Slight stubble (classic tradie look)",
      "Casual t-shirt visible at shoulders",
      "Warm skin tone"
    ],
    "fallbackIcon": {
      "name": "water_drop_leaf",
      "description": "A stylized icon combining a water droplet with a small leaf, representing clean gutters and garden care"
    },
    "size": {
      "avatarDisplay": 48,
      "collapsedState": 40,
      "messageBubble": 32
    }
  },

  "welcomeMessage": {
    "text": "G'day! 👋 I'm your gutter assistant. Need a quote, want to book a clean, or just got a quick question? I'm here to help — even when you're on the tools.",
    "voiceGreeting": "G'day mate! Need your gutters cleaned? I can sort out a quote or book you in. Let's get it done.",
    "trigger": "on_open",
    "delay": 500
  },

  "animations": {
    "entry": {
      "type": "slide_fade",
      "direction": "up",
      "duration": 400,
      "easing": "cubic-bezier(0.34, 1.56, 0.64, 1)",
      "description": "Widget slides up from bottom with a slight overshoot for a friendly, springy feel"
    },
    "exit": {
      "type": "fade_scale",
      "direction": "out",
      "duration": 200,
      "easing": "ease-out"
    },
    "idle": {
      "type": "subtle_breathe",
      "scaleRange": [1, 1.02],
      "duration": 3000,
      "easing": "ease-in-out",
      "description": "Gentle scaling pulse on the collapsed button to draw attention without being annoying"
    },
    "notification": {
      "type": "ring_pulse",
      "rings": 2,
      "duration": 1500,
      "color": "accent",
      "description": "Expanding ring pulse effect for new messages or missed call notifications"
    },
    "typing": {
      "type": "dot_bounce",
      "dotCount": 3,
      "duration": 1200,
      "description": "Three bouncing dots animation during AI response generation"
    },
    "messageAppear": {
      "type": "slide_up_fade",
      "duration": 250,
      "stagger": 50,
      "description": "New messages slide up with fade for smooth conversation flow"
    }
  },

  "typography": {
    "fontFamily": "'Nunito', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif",
    "fontWeights": {
      "regular": 400,
      "semibold": 600,
      "bold": 700
    },
    "sizes": {
      "header": {
        "size": 18,
        "lineHeight": 1.3,
        "weight": 700
      },
      "subheader": {
        "size": 14,
        "lineHeight": 1.4,
        "weight": 600
      },
      "body": {
        "size": 15,
        "lineHeight": 1.5,
        "weight": 400
      },
      "caption": {
        "size": 12,
        "lineHeight": 1.4,
        "weight": 400
      },
      "button": {
        "size": 15,
        "lineHeight": 1,
        "weight": 600
      },
      "input": {
        "size": 15,
        "lineHeight": 1.5,
        "weight": 400
      }
    }
  },

  "buttonStyles": {
    "primary": {
      "background": "accent",
      "color": "textOnAccent",
      "border": "none",
      "borderRadius": 10,
      "padding": "12px 24px",
      "fontWeight": 600,
      "fontSize": 15,
      "transition": "all 0.2s ease",
      "hover": {
        "transform": "translateY(-2px)",
        "boxShadow": "0 6px 20px rgba(232, 93, 4, 0.35)",
        "filter": "brightness(1.1)"
      },
      "active": {
        "transform": "translateY(0)",
        "boxShadow": "none"
      }
    },
    "secondary": {
      "background": "transparent",
      "color": "primary",
      "border": "2px solid primary",
      "borderRadius": 10,
      "padding": "10px 22px",
      "fontWeight": 600,
      "fontSize": 15,
      "transition": "all 0.2s ease",
      "hover": {
        "background": "primary",
        "color": "textOnAccent"
      }
    },
    "ghost": {
      "background": "transparent",
      "color": "textSecondary",
      "border": "none",
      "borderRadius": 8,
      "padding": "8px 16px",
      "fontWeight": 500,
      "fontSize": 14,
      "hover": {
        "background": "rgba(0,0,0,0.05)",
        "color": "textPrimary"
      }
    },
    "iconButton": {
      "background": "surface",
      "color": "textPrimary",
      "border": "1px solid border",
      "borderRadius": 12,
      "size": 44,
      "transition": "all 0.2s ease",
      "hover": {
        "background": "primary",
        "color": "textOnAccent",
        "borderColor": "primary"
      }
    }
  },

  "darkMode": {
    "enabled": true,
    "detection": "system_preference",
    "overrides": {
      "surface": "#1f2937",
      "surfaceHover": "#374151",
      "textPrimary": "#f9fafb",
      "textSecondary": "#9ca3af",
      "border": "#4b5563",
      "headerBackground": "#111827",
      "messageBubbleUser": "#1a3a52",
      "messageBubbleAI": "#374151"
    },
    "shadow": "0 25px 50px -12px rgba(0, 0, 0, 0.5)",
    "avatarBorder": "#4b5563"
  },

  "industrySpecific": {
    "gutterCleaning": {
      "quickReplyButtons": [
        {
          "label": "Get a Quote",
          "action": "quote_flow",
          "icon": "calculator"
        },
        {
          "label": "Book a Clean",
          "action": "booking_flow",
          "icon": "calendar"
        },
        {
          "label": "How Much?",
          "action": "pricing_info",
          "icon": "dollar"
        },
        {
          "label": "Our Services",
          "action": "services_list",
          "icon": "list"
        }
      ],
      "contextualPrompts": [
        "Do you offer downpipe repairs?",
        "How long does a typical clean take?",
        "Do you bring your own ladder?",
        "What areas do you service?",
        "Got any before/after photos?",
        "Are you licensed and insured?"
      ],
      "seasonalMessages": {
        "autumn": "🍂 Leaves blocking your gutters? Time to get them sorted before the heavy rains!",
        "spring": "🌸 Spring clean including your gutters! Get ready for the storm season.",
        "before_storm": "⛈ Storms on the way — make sure your gutters are clear!",
        "after_storm": "🌧 Recent storms? We check for damage and blockages."
      },
      "visualDecorations": {
        "headerPattern": "subtle_leaf_grain",
        "seasonalEmoji": true,
        "accentIcons": ["water_drop", "leaf", "rain", "sun"]
      },
      "serviceTags": [
        "Gutter Cleaning",
        "Downpipe Clearing",
        "Gutter Repairs",
        "Leaf Guard Installation",
        "Storm Damage",
        "Solar Panel Cleaning",
        "Pressure Washing"
      ],
      "pricingContext": {
        "typicalJob": "$150 - $400",
        "factors": ["Property size", "Gutter length", "Blockage severity", "Two-story access"],
        "currency": "AUD"
      }
    }
  },

  "cssVariables": {
    "--widget-primary": "#1a3a52",
    "--widget-secondary": "#2d8c4e",
    "--widget-accent": "#e85d04",
    "--widget-surface": "#f8f9fa",
    "--widget-surface-dark": "#2d3748",
    "--widget-text-primary": "#1f2937",
    "--widget-text-secondary": "#6b7280",
    "--widget-text-on-accent": "#ffffff",
    "--widget-border": "#e5e7eb",
    "--widget-success": "#22c55e",
    "--widget-error": "#dc2626",

    "--widget-font-family": "'Nunito', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif",
    "--widget-radius": "16px",
    "--widget-radius-mobile": "12px",
    "--widget-radius-button": "10px",

    "--widget-shadow": "0 25px 50px -12px rgba(26, 58, 82, 0.25)",
    "--widget-shadow-hover": "0 25px 50px -12px rgba(26, 58, 82, 0.35)",

    "--widget-z-index": "9999",
    "--widget-transition": "all 0.2s ease",

    "--widget-avatar-size": "48px",
    "--widget-avatar-size-collapsed": "40px",
    "--widget-avatar-size-message": "32px",

    "--widget-space-xs": "4px",
    "--widget-space-sm": "8px",
    "--widget-space-md": "16px",
    "--widget-space-lg": "24px",
    "--widget-space-xl": "32px"
  }
}
```


Response:
```json
{
  "widgetConfig": {
    "version": "1.0.0",
    "businessType": "pool_builder",
    "theme": "splashtek_pools",
    "generated": "2025-01-15"
  },
  "colorScheme": {
    "primary": {
      "name": "Pool Blue",
      "hex": "#0EA5E9",
      "usage": "Main brand color, header backgrounds, primary buttons"
    },
    "secondary": {
      "name": "Deep Ocean",
      "hex": "#0369A1",
      "usage": "Hover states, active elements, borders"
    },
    "accent": {
      "name": "Summer Gold",
      "hex": "#F59E0B",
      "usage": "Call-to-action buttons, notification badges, highlights"
    },
    "background": {
      "light": "#FFFFFF",
      "dark": "#0F172A"
    },
    "surface": {
      "light": "#F8FAFC",
      "dark": "#1E293B"
    },
    "text": {
      "primary": {
        "light": "#1E293B",
        "dark": "#F1F5F9"
      },
      "secondary": {
        "light": "#64748B",
        "dark": "#94A3B8"
      }
    },
    "success": "#10B981",
    "error": "#EF4444",
    "warning": "#F59E0B"
  },
  "widgetPosition": {
    "desktop": {
      "position": "bottom-right",
      "offset": {
        "x": 24,
        "y": 24
      },
      "reasoning": "Bottom-right follows natural eye flow for Western readers. Keeps widget visible without interfering with main navigation or hero content. Matches industry standard for chat widgets."
    },
    "mobile": {
      "position": "bottom-right",
      "offset": {
        "x": 16,
        "y": 16
      },
      "reasoning": "Bottom-right position works well with thumb-zone reach. Large enough to tap but avoids conflicting with mobile navigation menus typically placed at bottom of screen."
    },
    "alternative": {
      "position": "bottom-left",
      "useCase": "Websites with right-side CTAs, booking calculators, or prominent phone numbers in header"
    }
  },
  "widgetDimensions": {
    "desktop": {
      "collapsed": {
        "width": 64,
        "height": 64,
        "borderRadius": 32
      },
      "expanded": {
        "width": 400,
        "height": 600,
        "maxHeight": "80vh",
        "borderRadius": 16
      },
      "header": {
        "height": 72
      }
    },
    "mobile": {
      "collapsed": {
        "width": 56,
        "height": 56,
        "borderRadius": 28
      },
      "expanded": {
        "width": "calc(100vw - 32px)",
        "height": "calc(100vh - 100px)",
        "maxHeight": "85vh",
        "borderRadius": 16
      },
      "header": {
        "height": 64
      }
    }
  },
  "avatar": {
    "type": "custom_character",
    "name": "Splashtek Assistant",
    "description": "A friendly, professional avatar representing a pool consultant",
    "visual": {
      "style": "illustrated",
      "gender": "female",
      "appearance": {
        "age": "30-35",
        "hair": "shoulder-length, wavy, dark brown",
        "clothing": "smart casual polo shirt in primary blue (#0EA5E9)",
        "accessories": "subtle smile, welcoming expression"
      },
      "icon": {
        "containerBg": "#0EA5E9",
        "iconType": "water_droplet",
        "iconColor": "#FFFFFF",
        "showRing": true,
        "ringColor": "#0EA5E9"
      }
    },
    "animation": {
      "idle": "subtle_floating",
      "speaking": "gentle_bounce",
      "listening": "pulsing_glow"
    }
  },
  "welcomeMessage": {
    "text": "G'day! 👋 I'm your pool assistant. I can help you with quotes, fibreglass pool options, installation timelines, or book a time for us to chat. What are you looking for today?",
    "voiceGreeting": "G'day! Welcome to Splashtek Pools. I'm here to help you with quotes, pool options, or booking a consultation. What can I do for you?",
    "quickReplies": [
      "Get a quote",
      "Pool sizes & prices",
      "Installation time",
      "Book a showroom visit"
    ],
    "localisation": {
      "language": "en-AU",
      "spelling": "colour/timing/referral",
      "idioms": true,
      "emoji": "wave"
    }
  },
  "animations": {
    "entry": {
      "type": "slide_fade",
      "direction": "scale_up",
      "duration": 400,
      "easing": "cubic-bezier(0.34, 1.56, 0.64, 1)",
      "stagger": 100
    },
    "exit": {
      "type": "fade_shrink",
      "duration": 200,
      "easing": "ease-out"
    },
    "idle": {
      "type": "floating",
      "amplitude": 6,
      "duration": 3000,
      "pause": 2000
    },
    "notification": {
      "type": "pulse",
      "color": "#F59E0B",
      "duration": 1500,
      "repeat": 3,
      "interval": 1000
    },
    "messageAppear": {
      "type": "slide_up_fade",
      "duration": 300,
      "delay": 50
    },
    "typing": {
      "type": "bouncing_dots",
      "dots": 3,
      "color": "#0EA5E9"
    },
    "transition": {
      "type": "cross_fade",
      "duration": 200
    }
  },
  "typography": {
    "fontFamily": {
      "primary": "'DM Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif",
      "monospace": "'JetBrains Mono', 'Fira Code', monospace"
    },
    "sizes": {
      "header": {
        "desktop": 20,
        "mobile": 18,
        "weight": 600,
        "lineHeight": 1.3
      },
      "body": {
        "desktop": 15,
        "mobile": 14,
        "weight": 400,
        "lineHeight": 1.5
      },
      "caption": {
        "desktop": 12,
        "mobile": 11,
        "weight": 400,
        "lineHeight": 1.4
      },
      "button": {
        "desktop": 15,
        "mobile": 14,
        "weight": 500
      },
      "input": {
        "desktop": 15,
        "mobile": 16
      }
    },
    "letterSpacing": {
      "tight": "-0.01em",
      "normal": "0",
      "wide": "0.02em"
    }
  },
  "buttonStyles": {
    "primary": {
      "background": "#0EA5E9",
      "color": "#FFFFFF",
      "border": "none",
      "borderRadius": 10,
      "padding": {
        "desktop": "12px 24px",
        "mobile": "14px 20px"
      },
      "fontWeight": 500,
      "transition": "all 0.2s ease",
      "hover": {
        "background": "#0369A1",
        "transform": "translateY(-1px)",
        "boxShadow": "0 4px 12px rgba(14, 165, 233, 0.35)"
      },
      "active": {
        "background": "#075985",
        "transform": "translateY(0)"
      }
    },
    "secondary": {
      "background": "#F1F5F9",
      "color": "#1E293B",
      "border": "1px solid #E2E8F0",
      "borderRadius": 10,
      "padding": {
        "desktop": "12px 24px",
        "mobile": "14px 20px"
      },
      "fontWeight": 500,
      "transition": "all 0.2s ease",
      "hover": {
        "background": "#E2E8F0",
        "borderColor": "#CBD5E1"
      },
      "active": {
        "background": "#CBD5E1"
      }
    },
    "accent": {
      "background": "#F59E0B",
      "color": "#FFFFFF",
      "border": "none",
      "borderRadius": 10,
      "padding": {
        "desktop": "14px 28px",
        "mobile": "16px 24px"
      },
      "fontWeight": 600,
      "boxShadow": "0 4px 14px rgba(245, 158, 11, 0.4)",
      "transition": "all 0.2s ease",
      "hover": {
        "background": "#D97706",
        "transform": "translateY(-2px)",
        "boxShadow": "0 6px 20px rgba(245, 158, 11, 0.5)"
      },
      "active": {
        "background": "#B45309",
        "transform": "translateY(0)"
      }
    },
    "quickReply": {
      "background": "transparent",
      "color": "#0EA5E9",
      "border": "1.5px solid #0EA5E9",
      "borderRadius": 20,
      "padding": {
        "desktop": "8px 16px",
        "mobile": "10px 18px"
      },
      "fontSize": 13,
      "fontWeight": 500,
      "transition": "all 0.2s ease",
      "hover": {
        "background": "#0EA5E9",
        "color": "#FFFFFF"
      }
    },
    "icon": {
      "size": 24,
      "borderRadius": "50%",
      "background": "#0EA5E9",
      "color": "#FFFFFF",
      "transition": "all 0.2s ease",
      "hover": {
        "background": "#0369A1",
        "transform": "scale(1.05)"
      }
    },
    "close": {
      "size": 32,
      "borderRadius": 8,
      "background": "transparent",
      "color": "#64748B",
      "transition": "all 0.2s ease",
      "hover": {
        "background": "#F1F5F9",
        "color": "#1E293B"
      }
    }
  },
  "darkMode": {
    "enabled": true,
    "trigger": "system_preference",
    "override": "manual_toggle",
    "variants": {
      "background": {
        "value": "#0F172A"
      },
      "surface": {
        "value": "#1E293B"
      },
      "header": {
        "background": "#1E293B",
        "borderBottom": "1px solid #334155"
      },
      "text": {
        "primary": "#F1F5F9",
        "secondary": "#94A3B8"
      },
      "bubbleUser": {
        "background": "#0EA5E9",
        "text": "#FFFFFF"
      },
      "bubbleAI": {
        "background": "#334155",
        "text": "#F1F5F9"
      },
      "input": {
        "background": "#1E293B",
        "border": "1px solid #334155",
        "text": "#F1F5F9",
        "placeholder": "#64748B"
      },
      "quickReply": {
        "border": "1.5px solid #0EA5E9",
        "hover": {
          "background": "#0EA5E9"
        }
      },
      "iconButton": {
        "background": "#334155",
        "color": "#F1F5F9",
        "hover": {
          "background": "#475569"
        }
      }
    },
    "transition": "0.3s ease"
  },
  "industrySpecific": {
    "poolBuilder": {
      "visualElements": {
        "waterEffect": {
          "enabled": true,
          "type": "subtle_gradient",
          "colors": ["#0EA5E9", "#06B6D4"],
          "animation": "slow_flow",
          "opacity": 0.1
        },
        "iconography": {
          "primary": "water_droplet",
          "secondary": "pool_outline",
          "cta": "phone_handset"
        }
      },
      "quickActionFlows": [
        {
          "name": "Get Quote",
          "trigger": "user requests quote",
          "questions": [
            "What pool type are you interested in? (fibreglass/concrete/saline)",
            "What's your approximate budget?",
            "What's your location/suburb?",
            "Best time to call?"
          ],
          "output": "Lead captured, sent to CRM"
        },
        {
          "name": "Pool Sizes",
          "trigger": "user asks about sizes/prices",
          "display": "Carousel of pool models with pricing",
          "pools": [
            { "name": "Midi", "size": "6m x 3.5m", "price": "$28,500" },
            { "name": "Maxi", "size": "7.5m x 4m", "price": "$34,900" },
            { "name": "Family", "size": "9m x 4.5m", "price": "$42,500" }
          ]
        },
        {
          "name": "Timeline",
          "trigger": "user asks about installation time",
          "response": "Fibreglass pools typically take 2-3 weeks from council approval to first swim. We'll walk you through the full process."
        }
      ],
      "knowledgeBase": {
        "poolTypes": [
          "Fibreglass - low maintenance, quick install, 25-year warranty",
          "Concrete - fully custom, longer build, premium finish",
          "Saline - softer water, gentler on skin, salt chlorinator"
        ],
        "typicalPrices": {
          "fibreglass": "$25,000 - $55,000 installed",
          "concrete": "$45,000 - $100,000+",
          "accessories": "$3,000 - $8,000 for pumps, filters, cleaning systems"
        },
        "councilInfo": "Most fibreglass pools qualify for fast-track approval. We handle the paperwork."
      },
      "triggers": {
        "outOfHours": {
          "message": "Thanks for reaching out outside our hours (Mon-Fri 7am-5pm). I can still take your details and we'll call you tomorrow. Or if it's urgent, call 000 for emergencies.",
          "voice": "Thanks for contacting Splashtek Pools. We're currently closed but leave your details and we'll be in touch tomorrow."
        },
        "locationBased": {
          "detect": "customer suburb/region",
          "response": "We service the greater {region} area. Our team can be with you in {travel_time}."
        },
        "emergency": {
          "keywords": ["leak", "flood", "broken", "emergency", "urgent"],
          "response": "For pool emergencies, please call our emergency line on {phone}. Our team is available for urgent repairs."
        }
      },
      "seasonalAdjustments": {
        "spring": {
          "banner": "Get ready for summer! Book now for Christmas swimming.",
          "promotion": "10% deposit, rest on completion"
        },
        "summer": {
          "banner": "Beat the rush! Book your 2025 install now.",
          "urgency": "Current lead time: 4-6 weeks"
        },
        "autumn": {
          "banner": "Perfect conditions for pool installation. Best pricing until December."
        },
        "winter": {
          "banner": "Best time to install! Shorter wait times, competitive pricing."
        }
      },
      "brandPersonality": {
        "tone": "friendly_expert",
        "traits": [
          "Knowledgeable but not condescending",
          "Honest about costs and timelines",
          "Uses Australian slang appropriately",
          "Emphasises local presence and warranties"
        ],
        "avoid": [
          "Overly technical jargon",
          "High-pressure sales tactics",
          "Vague pricing",
          "Unrealistic timelines"
        ]
      }
    }
  },
  "cssCustomProperties": {
    "--sw-widget-primary": "#0EA5