{"version":3,"sources":["../src/constants.ts","../src/utils/anonymous.ts","../src/api/client.ts","../src/utils/deepMerge.ts","../src/theme/tokens.ts","../src/theme/resolveTheme.ts","../src/theme/styles.ts","../src/components/GotchaProvider.tsx","../src/hooks/useSubmit.ts","../src/utils/cn.ts","../src/utils/device.ts","../src/components/GotchaButton.tsx","../src/components/Spinner.tsx","../src/components/modes/FeedbackMode.tsx","../src/components/modes/VoteMode.tsx","../src/components/modes/PollMode.tsx","../src/components/modes/NpsMode.tsx","../src/components/GotchaModal.tsx","../src/components/Gotcha.tsx","../src/hooks/useScore.ts","../src/components/GotchaScore.tsx","../src/hooks/useGotcha.ts"],"names":["API_BASE_URL","STORAGE_KEYS","DEFAULTS","RETRY_CONFIG","getAnonymousId","stored","id","DEFAULT_RETRY_CONFIG","fetchWithRetry","url","options","config","debug","lastError","attempt","response","error","delay","resolve","createApiClient","apiKey","baseUrl","headers","request","method","endpoint","body","idempotencyKey","data","payload","user","fullPayload","elementId","userId","responseId","UNSAFE_KEYS","deepMerge","base","override","result","key","val","NPS_COLORS","LIGHT_TOKENS","DARK_TOKENS","createTheme","overrides","resolveTheme","theme","systemTheme","providerConfig","resolved","STYLE_ID","FONT_ID","FONT_FACE_ID","CARTER_ONE_FONT_FACE","injectFontFace","style","sanitizeCSS","value","generateStyleTag","easing","duration","fontFamily","textDisabled","borderColor","injectStyles","preconnect","preconnectStatic","link","styleEl","GotchaContext","createContext","EMPTY_USER","GotchaProvider","children","disabled","defaultUser","themeConfig","activeModalId","setActiveModalId","useState","client","useMemo","stableDefaultUser","useEffect","openModal","useCallback","closeModal","jsx","useGotchaContext","context","useContext","useSubmit","isLoading","setIsLoading","isCheckingExisting","setIsCheckingExisting","setError","existingResponse","setExistingResponse","cancelled","existing","err","errorMessage","cn","classes","isTouchDevice","getResponsiveSize","size","isTouch","sizes","getInitialSystemTheme","GotchaButton","customStyles","showOnHover","touchBehavior","onClick","isOpen","isParentHovered","animated","setIsTouch","tapRevealed","setTapRevealed","setSystemTheme","isHovered","setIsHovered","isPressed","setIsPressed","hasPopped","setHasPopped","darkQuery","handler","e","shouldShow","timer","handleClick","buttonSize","t","getTransform","baseStyles","GotchaIcon","mounted","setMounted","Spinner","color","jsxs","FeedbackMode","placeholder","submitText","onSubmit","initialValues","isEditing","showText","showRating","enableBugFlag","bugFlagLabel","content","setContent","rating","setRating","isBug","setIsBug","canSubmit","handleSubmit","inputStyles","buttonStyles","StarRating","onChange","large","hovered","setHovered","pulsing","setPulsing","pulseTimerRef","useRef","starSize","buttonPadding","star","isFilled","VoteMode","initialVote","labels","activeVote","setActiveVote","previousVote","setPreviousVote","handleVote","vote","getButtonStyles","voteType","isSelected","surface","border","iconSize","Fragment","ThumbsUpIcon","ThumbsDownIcon","PollMode","allowMultiple","initialSelected","selected","setSelected","handleToggle","option","prev","o","getOptionStyles","index","NpsMode","showFollowUp","followUpPlaceholder","lowLabel","highLabel","score","setScore","hoveredScore","setHoveredScore","npsColors","_","i","GotchaModal","mode","promptText","thankYouMessage","isSubmitted","voteLabels","npsQuestion","npsFollowUp","npsFollowUpPlaceholder","npsLowLabel","npsHighLabel","onClose","anchorRect","useFixedPosition","modalRef","firstFocusableRef","onCloseRef","isMobile","setIsMobile","showAbove","modal","handleKeyDown","focusableElements","firstElement","lastElement","defaultPrompt","modalPadding","modalWidth","animationClass","viewportHeight","modalStyles","fadeUpStyle","isDefaultThankYou","Gotcha","onePerUser","position","visible","onOpen","onError","setIsSubmitted","setIsParentHovered","setAnchorRect","hasMounted","setHasMounted","containerRef","autoCloseTimerRef","container","parent","handleMouseEnter","handleMouseLeave","submit","handleOpen","handleClose","effectiveSubmitText","positionStyles","modalProps","createPortal","useScore","refreshInterval","fetchScore","intervalId","SIZE_MAP","Stars","filledColor","emptyColor","clipId","stars","fill","PositiveBar","rate","height","trackColor","ThumbIcon","GotchaScore","variant","showCount","mq","s","ratingColor","mutedColor","starFilled","starEmpty","positiveColor","positiveTrack","baseStyle","countText","n","singular","label","voteCount","positiveRate","total","averageRating","totalResponses","displayRating","useGotcha"],"mappings":"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","file":"index.mjs","sourcesContent":["// API URL\nexport const API_BASE_URL = 'https://gotcha.cx/api/v1';\n\n// Error codes\nexport const ERROR_CODES = {\n  INVALID_API_KEY: 'INVALID_API_KEY',\n  ORIGIN_NOT_ALLOWED: 'ORIGIN_NOT_ALLOWED',\n  RATE_LIMITED: 'RATE_LIMITED',\n  QUOTA_EXCEEDED: 'QUOTA_EXCEEDED',\n  INVALID_REQUEST: 'INVALID_REQUEST',\n  USER_NOT_FOUND: 'USER_NOT_FOUND',\n  INTERNAL_ERROR: 'INTERNAL_ERROR',\n} as const;\n\n// Local storage keys\nexport const STORAGE_KEYS = {\n  ANONYMOUS_ID: 'gotcha_anonymous_id',\n  OFFLINE_QUEUE: 'gotcha_offline_queue',\n} as const;\n\n// Default values\nexport const DEFAULTS = {\n  POSITION: 'top-right' as const,\n  SIZE: 'md' as const,\n  THEME: 'light' as const,\n  SHOW_ON_HOVER: true,\n  TOUCH_BEHAVIOR: 'always-visible' as const,\n  SUBMIT_TEXT: 'Submit',\n  THANK_YOU_MESSAGE: 'Gotcha!',\n} as const;\n\n// Retry config\nexport const RETRY_CONFIG = {\n  MAX_RETRIES: 2,\n  BASE_DELAY_MS: 500,\n  MAX_DELAY_MS: 5000,\n} as const;\n","import { STORAGE_KEYS } from '../constants';\n\n/**\n * Get or create an anonymous user ID\n * Stored in localStorage for consistency across sessions\n */\nexport function getAnonymousId(): string {\n  if (typeof window === 'undefined') {\n    // SSR fallback - generate but don't persist\n    return `anon_${crypto.randomUUID()}`;\n  }\n\n  try {\n    const stored = localStorage.getItem(STORAGE_KEYS.ANONYMOUS_ID);\n    if (stored) return stored;\n\n    const id = `anon_${crypto.randomUUID()}`;\n    localStorage.setItem(STORAGE_KEYS.ANONYMOUS_ID, id);\n    return id;\n  } catch {\n    // localStorage unavailable (incognito Safari, sandboxed iframes)\n    return `anon_${crypto.randomUUID()}`;\n  }\n}\n\n/**\n * Clear the anonymous ID (useful for testing)\n */\nexport function clearAnonymousId(): void {\n  if (typeof window !== 'undefined') {\n    localStorage.removeItem(STORAGE_KEYS.ANONYMOUS_ID);\n  }\n}\n","import { API_BASE_URL, RETRY_CONFIG } from '../constants';\nimport { SubmitResponsePayload, GotchaResponse, GotchaError, ExistingResponse, VoteType, ScoreData } from '../types';\nimport { getAnonymousId } from '../utils/anonymous';\n\ninterface ApiClientConfig {\n  apiKey: string;\n  baseUrl?: string;\n  debug?: boolean;\n}\n\ninterface RetryConfig {\n  maxRetries: number;\n  baseDelayMs: number;\n  maxDelayMs: number;\n}\n\nconst DEFAULT_RETRY_CONFIG: RetryConfig = {\n  maxRetries: RETRY_CONFIG.MAX_RETRIES,\n  baseDelayMs: RETRY_CONFIG.BASE_DELAY_MS,\n  maxDelayMs: RETRY_CONFIG.MAX_DELAY_MS,\n};\n\n/**\n * Fetch with automatic retry and exponential backoff\n */\nasync function fetchWithRetry(\n  url: string,\n  options: RequestInit,\n  config: RetryConfig = DEFAULT_RETRY_CONFIG,\n  debug: boolean = false\n): Promise<Response> {\n  let lastError: Error | null = null;\n\n  for (let attempt = 0; attempt <= config.maxRetries; attempt++) {\n    try {\n      if (debug && attempt > 0) {\n        console.log(`[Gotcha] Retry attempt ${attempt}/${config.maxRetries}`);\n      }\n\n      const response = await fetch(url, options);\n\n      // Don't retry client errors (4xx) except 429 (rate limit)\n      if (response.status >= 400 && response.status < 500 && response.status !== 429) {\n        return response;\n      }\n\n      // Success - return immediately\n      if (response.ok) {\n        return response;\n      }\n\n      lastError = new Error(`HTTP ${response.status}`);\n    } catch (error) {\n      // Network error - retry\n      lastError = error as Error;\n      if (debug) {\n        console.log(`[Gotcha] Network error: ${lastError.message}`);\n      }\n    }\n\n    // Don't delay after last attempt\n    if (attempt < config.maxRetries) {\n      const delay = Math.min(\n        config.baseDelayMs * Math.pow(2, attempt),\n        config.maxDelayMs\n      );\n      await new Promise((resolve) => setTimeout(resolve, delay));\n    }\n  }\n\n  throw lastError;\n}\n\nexport function createApiClient(config: ApiClientConfig) {\n  const { apiKey, baseUrl = API_BASE_URL, debug = false } = config;\n\n  const headers = {\n    'Content-Type': 'application/json',\n    Authorization: `Bearer ${apiKey}`,\n  };\n\n  async function request<T>(\n    method: string,\n    endpoint: string,\n    body?: unknown\n  ): Promise<T> {\n    const url = `${baseUrl}${endpoint}`;\n    const idempotencyKey = crypto.randomUUID();\n\n    if (debug) {\n      console.log(`[Gotcha] ${method} ${endpoint}`, body);\n    }\n\n    const response = await fetchWithRetry(\n      url,\n      {\n        method,\n        headers: {\n          ...headers,\n          'Idempotency-Key': idempotencyKey,\n        },\n        body: body ? JSON.stringify(body) : undefined,\n      },\n      DEFAULT_RETRY_CONFIG,\n      debug\n    );\n\n    let data: Record<string, unknown>;\n    try {\n      data = await response.json();\n    } catch {\n      throw { code: 'PARSE_ERROR', message: 'Invalid response from server', status: response.status } as GotchaError;\n    }\n\n    if (!response.ok) {\n      const error = data.error as GotchaError;\n      if (debug) {\n        console.error(`[Gotcha] Error: ${error.code} - ${error.message}`);\n      }\n      throw error;\n    }\n\n    if (debug) {\n      console.log(`[Gotcha] Response:`, data);\n    }\n\n    return data as T;\n  }\n\n  return {\n    /**\n     * Submit a response (feedback, vote, etc.)\n     */\n    async submitResponse(\n      payload: Omit<SubmitResponsePayload, 'context'>\n    ): Promise<GotchaResponse> {\n      // Ensure user has an ID (anonymous if not provided)\n      const user = payload.user || {};\n      if (!user.id) {\n        user.id = getAnonymousId();\n      }\n\n      const fullPayload: SubmitResponsePayload = {\n        ...payload,\n        user,\n        context: {\n          url: typeof window !== 'undefined' ? window.location.origin + window.location.pathname : undefined,\n          userAgent: typeof navigator !== 'undefined' ? navigator.userAgent : undefined,\n        },\n        // Only include isBug if true\n        ...(payload.isBug ? { isBug: true } : {}),\n      };\n\n      return request<GotchaResponse>('POST', '/responses', fullPayload);\n    },\n\n    /**\n     * Check if a user has an existing response for an element\n     */\n    async checkExistingResponse(\n      elementId: string,\n      userId: string\n    ): Promise<ExistingResponse | null> {\n      const url = `${baseUrl}/responses/check?elementId=${encodeURIComponent(elementId)}&userId=${encodeURIComponent(userId)}`;\n\n      if (debug) {\n        console.log(`[Gotcha] GET /responses/check`);\n      }\n\n      const response = await fetchWithRetry(\n        url,\n        {\n          method: 'GET',\n          headers,\n        },\n        DEFAULT_RETRY_CONFIG,\n        debug\n      );\n\n      const data = await response.json();\n\n      if (!response.ok) {\n        const error = data.error as GotchaError;\n        if (debug) {\n          console.error(`[Gotcha] Error: ${error.code} - ${error.message}`);\n        }\n        throw error;\n      }\n\n      if (data.exists) {\n        if (debug) {\n          console.log(`[Gotcha] Found existing response:`, data.response);\n        }\n        return data.response as ExistingResponse;\n      }\n\n      return null;\n    },\n\n    /**\n     * Update an existing response\n     */\n    async updateResponse(\n      id: string,\n      payload: {\n        content?: string;\n        title?: string;\n        rating?: number;\n        vote?: VoteType;\n        pollSelected?: string[];\n      },\n      userId?: string\n    ): Promise<GotchaResponse> {\n      const url = `${baseUrl}/responses/${id}${userId ? `?userId=${encodeURIComponent(userId)}` : ''}`;\n\n      if (debug) {\n        console.log(`[Gotcha] PATCH /responses/${id}`, payload);\n      }\n\n      const response = await fetchWithRetry(\n        url,\n        {\n          method: 'PATCH',\n          headers,\n          body: JSON.stringify(payload),\n        },\n        DEFAULT_RETRY_CONFIG,\n        debug\n      );\n\n      const data = await response.json();\n\n      if (!response.ok) {\n        const error = data.error as GotchaError;\n        if (debug) {\n          console.error(`[Gotcha] Error: ${error.code} - ${error.message}`);\n        }\n        throw error;\n      }\n\n      if (debug) {\n        console.log(`[Gotcha] Response updated:`, data);\n      }\n\n      return data as GotchaResponse;\n    },\n\n    /**\n     * Get aggregate score data for an element\n     */\n    async getScore(elementId: string): Promise<ScoreData> {\n      const url = `${baseUrl}/scores/${encodeURIComponent(elementId)}`;\n\n      if (debug) {\n        console.log(`[Gotcha] GET /scores/${elementId}`);\n      }\n\n      const response = await fetchWithRetry(\n        url,\n        {\n          method: 'GET',\n          headers,\n        },\n        DEFAULT_RETRY_CONFIG,\n        debug\n      );\n\n      const data = await response.json();\n\n      if (!response.ok) {\n        const error = data.error as GotchaError;\n        if (debug) {\n          console.error(`[Gotcha] Error: ${error.code} - ${error.message}`);\n        }\n        throw error;\n      }\n\n      if (debug) {\n        console.log(`[Gotcha] Score:`, data);\n      }\n\n      return data as ScoreData;\n    },\n\n    /**\n     * Flag a response as a bug report\n     */\n    async flagAsBug(responseId: string): Promise<{ ticketId: string; status: string }> {\n      const url = `${baseUrl}/responses/${encodeURIComponent(responseId)}/bug`;\n\n      if (debug) {\n        console.log(`[Gotcha] POST /responses/${responseId}/bug`);\n      }\n\n      const response = await fetchWithRetry(\n        url,\n        {\n          method: 'POST',\n          headers,\n        },\n        DEFAULT_RETRY_CONFIG,\n        debug\n      );\n\n      const data = await response.json();\n\n      if (!response.ok) {\n        const error = data.error as GotchaError;\n        if (debug) {\n          console.error(`[Gotcha] Error: ${error.code} - ${error.message}`);\n        }\n        throw error;\n      }\n\n      if (debug) {\n        console.log(`[Gotcha] Bug flagged:`, data);\n      }\n\n      return data as { ticketId: string; status: string };\n    },\n\n    /**\n     * Get the base URL (for debugging)\n     */\n    getBaseUrl(): string {\n      return baseUrl;\n    },\n  };\n}\n\nexport type ApiClient = ReturnType<typeof createApiClient>;\n","const UNSAFE_KEYS = new Set(['__proto__', 'constructor', 'prototype']);\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function deepMerge(base: any, override: any): any {\n  const result = { ...base };\n  for (const key of Object.keys(override)) {\n    if (UNSAFE_KEYS.has(key)) continue;\n    const val = override[key];\n    if (val !== undefined && val !== null && typeof val === 'object' && !Array.isArray(val)) {\n      result[key] = deepMerge(base[key] ?? {}, val);\n    } else if (val !== undefined) {\n      result[key] = val;\n    }\n  }\n  return result;\n}\n","// ============================================\n// THEME TOKEN SYSTEM\n// ============================================\n\nexport interface GotchaThemeColors {\n  primary: string;\n  primaryHover: string;\n  primaryText: string;\n  background: string;\n  backgroundGradient: string;\n  surface: string;\n  surfaceHover: string;\n  text: string;\n  textSecondary: string;\n  textDisabled: string;\n  border: string;\n  borderFocus: string;\n  success: string;\n  successSurface: string;\n  error: string;\n  errorSurface: string;\n  errorBorder: string;\n  warning: string;\n  warningActive: string;\n  warningSurface: string;\n  warningBorder: string;\n  starFilled: string;\n  starEmpty: string;\n  voteUp: string;\n  voteUpSurface: string;\n  voteUpBorder: string;\n  voteDown: string;\n  voteDownSurface: string;\n  voteDownBorder: string;\n  npsColors: string[];\n  buttonBackground: string;\n  buttonBackgroundHover: string;\n  buttonBackgroundDisabled: string;\n  buttonColor: string;\n  buttonColorDisabled: string;\n  buttonBorder: string;\n  buttonShadow: string;\n  backdropColor: string;\n  closeButton: string;\n  closeButtonHover: string;\n  closeButtonBg: string;\n  // Glass button\n  glassBackground: string;\n  glassBorder: string;\n  glassColor: string;\n  glassShadow: string;\n  glassHoverShadow: string;\n  // Input\n  inputBackground: string;\n  inputBackgroundFocus: string;\n  inputBorder: string;\n  inputBorderFocus: string;\n  inputFocusRing: string;\n  // Poll\n  pollBorder: string;\n  pollSelectedBorder: string;\n  pollBackground: string;\n  pollSelectedBackground: string;\n  pollColor: string;\n  pollSelectedColor: string;\n  pollCheckBorder: string;\n  pollCheckSelectedBorder: string;\n  pollCheckSelectedBg: string;\n}\n\nexport interface GotchaThemeTypography {\n  fontFamily: string;\n  fontSize: {\n    xs: number;\n    sm: number;\n    md: number;\n    lg: number;\n  };\n  fontWeight: {\n    normal: number;\n    medium: number;\n    semibold: number;\n    bold: number;\n  };\n}\n\nexport interface GotchaThemeBorders {\n  radius: {\n    sm: number;\n    md: number;\n    lg: number;\n    full: string;\n  };\n  width: number;\n}\n\nexport interface GotchaThemeShadows {\n  sm: string;\n  md: string;\n  lg: string;\n  modal: string;\n  button: string;\n}\n\nexport interface GotchaThemeAnimation {\n  duration: {\n    fast: string;\n    normal: string;\n    slow: string;\n  };\n  easing: {\n    default: string;\n    spring: string;\n  };\n}\n\nexport interface GotchaThemeConfig {\n  colors?: Partial<GotchaThemeColors>;\n  typography?: Partial<GotchaThemeTypography>;\n  borders?: Partial<GotchaThemeBorders>;\n  shadows?: Partial<GotchaThemeShadows>;\n  animation?: Partial<GotchaThemeAnimation>;\n}\n\nexport interface ResolvedTheme {\n  colors: GotchaThemeColors;\n  typography: GotchaThemeTypography;\n  borders: GotchaThemeBorders;\n  shadows: GotchaThemeShadows;\n  animation: GotchaThemeAnimation;\n}\n\n// ── NPS score colors ─────────────────────────────────────────\nconst NPS_COLORS = [\n  '#ef4444', '#f05540', '#f1663c', '#f27738', '#f38834',\n  '#f59e0b', '#d4a30e', '#b3a812', '#79b841', '#45c870', '#10b981',\n];\n\n// ── Light preset ─────────────────────────────────────────────\nexport const LIGHT_TOKENS: ResolvedTheme = {\n  colors: {\n    primary: '#1e293b',\n    primaryHover: '#334155',\n    primaryText: '#ffffff',\n    background: '#ffffff',\n    backgroundGradient: 'linear-gradient(180deg, #ffffff 0%, #f8fafc 100%)',\n    surface: '#fafbfc',\n    surfaceHover: '#ffffff',\n    text: '#111827',\n    textSecondary: '#374151',\n    textDisabled: '#94a3b8',\n    border: '#e2e8f0',\n    borderFocus: '#1e293b',\n    success: '#059669',\n    successSurface: 'rgba(5,150,105,0.08)',\n    error: '#dc2626',\n    errorSurface: '#fef2f2',\n    errorBorder: 'rgba(220,38,38,0.1)',\n    warning: '#d97706',\n    warningActive: '#b45309',\n    warningSurface: 'rgba(251,191,36,0.08)',\n    warningBorder: 'rgba(217,119,6,0.25)',\n    starFilled: '#f59e0b',\n    starEmpty: '#e2e8f0',\n    voteUp: '#10b981',\n    voteUpSurface: 'rgba(16,185,129,0.06)',\n    voteUpBorder: 'rgba(16,185,129,0.25)',\n    voteDown: '#ef4444',\n    voteDownSurface: 'rgba(239,68,68,0.06)',\n    voteDownBorder: 'rgba(239,68,68,0.25)',\n    npsColors: NPS_COLORS,\n    buttonBackground: '#1e293b',\n    buttonBackgroundHover: '#334155',\n    buttonBackgroundDisabled: '#e2e8f0',\n    buttonColor: '#ffffff',\n    buttonColorDisabled: '#94a3b8',\n    buttonBorder: 'none',\n    buttonShadow: 'none',\n    backdropColor: 'rgba(0,0,0,0.4)',\n    closeButton: '#9ca3af',\n    closeButtonHover: '#6b7280',\n    closeButtonBg: 'rgba(0,0,0,0.04)',\n    glassBackground: 'linear-gradient(160deg, rgba(255,255,255,0.7) 0%, rgba(200,210,230,0.4) 40%, rgba(180,192,220,0.5) 100%)',\n    glassBorder: 'none',\n    glassColor: 'rgba(0,0,0,0.75)',\n    glassShadow: '0 3px 12px rgba(0,0,0,0.12), 0 0 1px rgba(0,0,0,0.2)',\n    glassHoverShadow: '0 6px 20px rgba(0,0,0,0.18), 0 0 1px rgba(0,0,0,0.25)',\n    inputBackground: '#fafbfc',\n    inputBackgroundFocus: '#ffffff',\n    inputBorder: '#e2e8f0',\n    inputBorderFocus: '#1e293b',\n    inputFocusRing: 'rgba(30,41,59,0.15)',\n    pollBorder: '#e2e8f0',\n    pollSelectedBorder: 'rgba(30,41,59,0.25)',\n    pollBackground: '#fafbfc',\n    pollSelectedBackground: 'rgba(30,41,59,0.05)',\n    pollColor: '#374151',\n    pollSelectedColor: '#1e293b',\n    pollCheckBorder: '#cbd5e1',\n    pollCheckSelectedBorder: '#1e293b',\n    pollCheckSelectedBg: '#1e293b',\n  },\n  typography: {\n    fontFamily: \"'DM Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif\",\n    fontSize: { xs: 11, sm: 13, md: 14, lg: 16 },\n    fontWeight: { normal: 400, medium: 500, semibold: 600, bold: 700 },\n  },\n  borders: {\n    radius: { sm: 8, md: 10, lg: 14, full: '50%' },\n    width: 1,\n  },\n  shadows: {\n    sm: '0 1px 2px rgba(0,0,0,0.04)',\n    md: '0 4px 12px rgba(0,0,0,0.06)',\n    lg: '0 12px 32px rgba(0,0,0,0.06)',\n    modal: '0 1px 2px rgba(0,0,0,0.04), 0 4px 12px rgba(0,0,0,0.06), 0 12px 32px rgba(0,0,0,0.06), 0 24px 48px rgba(0,0,0,0.04)',\n    button: '0 2px 8px rgba(0,0,0,0.06)',\n  },\n  animation: {\n    duration: { fast: '0.15s', normal: '0.25s', slow: '0.4s' },\n    easing: {\n      default: 'cubic-bezier(0.4, 0, 0.2, 1)',\n      spring: 'cubic-bezier(0.34, 1.56, 0.64, 1)',\n    },\n  },\n};\n\n// ── Dark preset ──────────────────────────────────────────────\nexport const DARK_TOKENS: ResolvedTheme = {\n  colors: {\n    primary: '#e2e8f0',\n    primaryHover: '#cbd5e1',\n    primaryText: '#1e293b',\n    background: '#1a1f2e',\n    backgroundGradient: 'linear-gradient(180deg, #1a1f2e 0%, #151925 100%)',\n    surface: 'rgba(55,65,81,0.5)',\n    surfaceHover: 'rgba(55,65,81,0.7)',\n    text: '#f9fafb',\n    textSecondary: '#d1d5db',\n    textDisabled: '#6b7280',\n    border: 'rgba(255,255,255,0.08)',\n    borderFocus: 'rgba(255,255,255,0.2)',\n    success: '#10b981',\n    successSurface: 'rgba(16,185,129,0.1)',\n    error: '#fecaca',\n    errorSurface: 'rgba(127,29,29,0.3)',\n    errorBorder: 'rgba(254,202,202,0.1)',\n    warning: '#fbbf24',\n    warningActive: '#fbbf24',\n    warningSurface: 'rgba(245,158,11,0.08)',\n    warningBorder: 'rgba(245,158,11,0.3)',\n    starFilled: '#f59e0b',\n    starEmpty: 'rgba(255,255,255,0.12)',\n    voteUp: '#10b981',\n    voteUpSurface: 'rgba(16,185,129,0.08)',\n    voteUpBorder: 'rgba(16,185,129,0.3)',\n    voteDown: '#ef4444',\n    voteDownSurface: 'rgba(239,68,68,0.08)',\n    voteDownBorder: 'rgba(239,68,68,0.3)',\n    npsColors: NPS_COLORS,\n    buttonBackground: '#e2e8f0',\n    buttonBackgroundHover: '#cbd5e1',\n    buttonBackgroundDisabled: '#374151',\n    buttonColor: '#1e293b',\n    buttonColorDisabled: '#6b7280',\n    buttonBorder: 'none',\n    buttonShadow: 'none',\n    backdropColor: 'rgba(0,0,0,0.5)',\n    closeButton: '#6b7280',\n    closeButtonHover: '#9ca3af',\n    closeButtonBg: 'rgba(255,255,255,0.06)',\n    glassBackground: 'linear-gradient(180deg, rgba(255,255,255,0.16) 0%, rgba(255,255,255,0.04) 60%, rgba(0,0,0,0.05) 100%)',\n    glassBorder: '1px solid rgba(255,255,255,0.15)',\n    glassColor: 'rgba(255,255,255,0.88)',\n    glassShadow: '0 4px 14px rgba(0,0,0,0.45), 0 1px 3px rgba(0,0,0,0.35)',\n    glassHoverShadow: '0 8px 24px rgba(0,0,0,0.55), 0 1px 3px rgba(0,0,0,0.4)',\n    inputBackground: 'rgba(55,65,81,0.5)',\n    inputBackgroundFocus: 'rgba(55,65,81,0.7)',\n    inputBorder: 'rgba(255,255,255,0.08)',\n    inputBorderFocus: 'rgba(255,255,255,0.2)',\n    inputFocusRing: 'rgba(255,255,255,0.06)',\n    pollBorder: 'rgba(255,255,255,0.08)',\n    pollSelectedBorder: 'rgba(226,232,240,0.25)',\n    pollBackground: 'rgba(55,65,81,0.5)',\n    pollSelectedBackground: 'rgba(226,232,240,0.08)',\n    pollColor: '#d1d5db',\n    pollSelectedColor: '#e2e8f0',\n    pollCheckBorder: 'rgba(255,255,255,0.2)',\n    pollCheckSelectedBorder: '#e2e8f0',\n    pollCheckSelectedBg: '#e2e8f0',\n  },\n  typography: {\n    fontFamily: \"'DM Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif\",\n    fontSize: { xs: 11, sm: 13, md: 14, lg: 16 },\n    fontWeight: { normal: 400, medium: 500, semibold: 600, bold: 700 },\n  },\n  borders: {\n    radius: { sm: 8, md: 10, lg: 14, full: '50%' },\n    width: 1,\n  },\n  shadows: {\n    sm: '0 1px 2px rgba(0,0,0,0.2)',\n    md: '0 4px 12px rgba(0,0,0,0.3)',\n    lg: '0 12px 32px rgba(0,0,0,0.2)',\n    modal: '0 1px 2px rgba(0,0,0,0.2), 0 4px 12px rgba(0,0,0,0.3), 0 12px 32px rgba(0,0,0,0.2), 0 24px 48px rgba(0,0,0,0.15)',\n    button: '0 2px 8px rgba(0,0,0,0.15)',\n  },\n  animation: {\n    duration: { fast: '0.15s', normal: '0.25s', slow: '0.4s' },\n    easing: {\n      default: 'cubic-bezier(0.4, 0, 0.2, 1)',\n      spring: 'cubic-bezier(0.34, 1.56, 0.64, 1)',\n    },\n  },\n};\n\n// ── Helper ───────────────────────────────────────────────────\n\nimport { deepMerge } from '../utils/deepMerge';\n\n/** Create a custom theme by merging partial overrides onto a preset */\nexport function createTheme(\n  base: 'light' | 'dark',\n  overrides: GotchaThemeConfig,\n): GotchaThemeConfig {\n  const preset = base === 'dark' ? DARK_TOKENS : LIGHT_TOKENS;\n  return deepMerge(preset, overrides) as GotchaThemeConfig;\n}\n","import { LIGHT_TOKENS, DARK_TOKENS, GotchaThemeConfig, ResolvedTheme } from './tokens';\nimport { deepMerge } from '../utils/deepMerge';\n\n/**\n * Resolve a complete theme from the base preset + optional provider & instance overrides.\n * Returns a fully-resolved object with no undefined values.\n */\nexport function resolveTheme(\n  theme: 'light' | 'dark' | 'auto' | 'custom',\n  systemTheme: 'light' | 'dark',\n  providerConfig?: GotchaThemeConfig,\n): ResolvedTheme {\n  const effectiveTheme = theme === 'auto' || theme === 'custom' ? systemTheme : theme;\n  let resolved: ResolvedTheme = effectiveTheme === 'dark'\n    ? deepMerge({}, DARK_TOKENS) as ResolvedTheme\n    : deepMerge({}, LIGHT_TOKENS) as ResolvedTheme;\n\n  if (providerConfig) {\n    resolved = deepMerge(resolved, providerConfig) as ResolvedTheme;\n  }\n\n  return resolved;\n}\n","import { ResolvedTheme } from './tokens';\n\nconst STYLE_ID = 'gotcha-styles';\nconst FONT_ID = 'gotcha-dm-sans';\nconst FONT_FACE_ID = 'gotcha-carter-one';\n\n/**\n * The Carter One @font-face CSS with base64-embedded woff2.\n * Uses font-display: block to prevent any fallback font from showing.\n * Since the font is base64-encoded (instant decode), the block period is negligible.\n */\nconst CARTER_ONE_FONT_FACE = `\n@font-face {\n  font-family: 'Carter One';\n  font-style: normal;\n  font-weight: 400;\n  font-display: block;\n  src: url(data:font/woff2;base64,d09GMgABAAAAAAK4AA4AAAAABOwAAAJlAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhQbXhwaBmAANBEICoFUgW8BNgIkAwgLBgAEIAWCUgcgGwoEUVQMHgC+OLCNaQVfBAoIrXGAIhjLIIM0CxavPfqMrzmLh6/9fufu20XEQyQzNNPOUEmimUZJpKLdIu3RKOU3O1hXc5D3YTdAbu+mRHU5AAIwC231R25qGGbpnwecyr34QQKM3gHMKMzOM4ogDSwQSreJE9bjISamQdCMwAAgeI0+S7qoy5j8TCDK8Ff4Fwm5+ecJhCwh9EgmsJiTo6S+/WkCPCU8DpCqr+hWKM/FBMRyfLPqV2LSlzBEIhqLxeGhIADg+rwoHxx58Oipm4301FUpgID4K8fAChoJFSYwAhNYKyDLAjudDimd9wA18hGDDvNkBE6AByBJiLpXVM2jgyht94hWK9yPQD+5lb948fAQKnfCK1PjBQWRayfW+hltCzAs9B8eX54Xd5g7vrzpiTswCeXB/VG5PNObmFr711KPrLKC6/mxys5avigCA+uFj8HGq+ErmaRDt/31k1XtfRtcI0pNluOCFEOOmVEOTg5eYn77Hq9Y0SJxu+bSBW5skqWS0VLXOvNJxgyRhVECycL7u2cb2pmOGdolPK+ORsLma1IHQCAY6I5NjWKsNzQVPeDnvzc7Pth+aTYMKHpqoEcCwSM4A6sVYPt/AIoeTckToLx4hELyieAj16Z4TKDbKYzIJOAW2JNhIptMhjyRlbXedjaymDv75i5jb1xkyVYiV4okyfIhmnG0EGNDIyMkVgmkUIJcmbJkQmLEi5Ehjz7iJF06pJeel1ETYiCBP/+OePouYuTKlyAX4iVTAl8JkhRIFyN3UpqAdTHa1nfVAy3Kk3LL2Ejf0Gch0McAqJNIAwAA) format('woff2');\n  unicode-range: U+0047;\n}`.trim();\n\n/**\n * Inject Carter One @font-face at module load time (top-level side effect).\n * This ensures the font is registered with the browser BEFORE any React\n * component renders, eliminating FOUT completely.\n */\nfunction injectFontFace(): void {\n  if (typeof document === 'undefined') return;\n  if (document.getElementById(FONT_FACE_ID)) return;\n\n  const style = document.createElement('style');\n  style.id = FONT_FACE_ID;\n  style.textContent = CARTER_ONE_FONT_FACE;\n  document.head.appendChild(style);\n}\n\n// Execute immediately when this module is imported\ninjectFontFace();\n\n/** Strip characters that could break out of a CSS value context */\nfunction sanitizeCSS(value: string): string {\n  return value.replace(/[{}<>;@\\\\]/g, '');\n}\n\n/**\n * Generate the full CSS string for all Gotcha animations, fonts, and base styles.\n */\nexport function generateStyleTag(theme: ResolvedTheme): string {\n  const easing = {\n    default: sanitizeCSS(theme.animation.easing.default),\n    spring: sanitizeCSS(theme.animation.easing.spring),\n  };\n  const duration = {\n    normal: sanitizeCSS(theme.animation.duration.normal),\n  };\n  const fontFamily = sanitizeCSS(theme.typography.fontFamily);\n  const textDisabled = sanitizeCSS(theme.colors.textDisabled);\n  const borderColor = sanitizeCSS(theme.colors.border);\n\n  return `\n/* ── Gotcha Keyframe Animations ────────────────────────────── */\n\n@keyframes gotcha-modal-in {\n  from { opacity: 0; transform: translateX(-50%) scale(0.92) translateY(-6px); }\n  to { opacity: 1; transform: translateX(-50%) scale(1) translateY(0); }\n}\n\n@keyframes gotcha-modal-in-above {\n  from { opacity: 0; transform: translateX(-50%) scale(0.92) translateY(6px); }\n  to { opacity: 1; transform: translateX(-50%) scale(1) translateY(0); }\n}\n\n@keyframes gotcha-modal-in-center {\n  from { opacity: 0; transform: translate(-50%, -50%) scale(0.92); }\n  to { opacity: 1; transform: translate(-50%, -50%) scale(1); }\n}\n\n@keyframes gotcha-success-pop {\n  0% { transform: scale(0); opacity: 0; }\n  50% { transform: scale(1.15); }\n  100% { transform: scale(1); opacity: 1; }\n}\n\n@keyframes gotcha-success-text {\n  from { opacity: 0; transform: translateY(6px); }\n  to { opacity: 1; transform: translateY(0); }\n}\n\n@keyframes gotcha-check-draw {\n  from { stroke-dashoffset: 24; }\n  to { stroke-dashoffset: 0; }\n}\n\n@keyframes gotcha-glow-pulse {\n  0%, 100% { box-shadow: 0 0 0 0 rgba(16,185,129,0.3); }\n  50% { box-shadow: 0 0 0 8px rgba(16,185,129,0); }\n}\n\n@keyframes gotcha-star-pulse {\n  0% { transform: scale(1); }\n  40% { transform: scale(1.3); }\n  100% { transform: scale(1); }\n}\n\n@keyframes gotcha-shimmer {\n  0% { background-position: -200% 0; }\n  100% { background-position: 200% 0; }\n}\n\n@keyframes gotcha-fade-up {\n  from { opacity: 0; }\n  to { opacity: 1; }\n}\n\n@keyframes gotcha-overlay-in {\n  from { opacity: 0; }\n  to { opacity: 1; }\n}\n\n@keyframes gotcha-expand-in {\n  from { opacity: 0; max-height: 0; margin-top: 0; }\n  to { opacity: 1; max-height: 200px; margin-top: 12px; }\n}\n\n@keyframes gotcha-bubble-pop {\n  0% { transform: scale(0); opacity: 0; filter: blur(4px); }\n  40% { opacity: 1; filter: blur(0px); }\n  65% { transform: scale(1.08); }\n  82% { transform: scale(0.97); }\n  100% { transform: scale(1); opacity: 1; filter: blur(0px); }\n}\n\n@keyframes gotcha-letter-in {\n  0% { opacity: 0; transform: scale(0.6) translateY(2px); filter: blur(3px); }\n  100% { opacity: 1; transform: scale(1) translateY(0); filter: blur(0px); }\n}\n\n@keyframes gotcha-arrive-glow {\n  0%, 100% { box-shadow: 0 3px 12px rgba(0,0,0,0.12), 0 0 1px rgba(0,0,0,0.2); }\n  50% { box-shadow: 0 4px 16px rgba(0,0,0,0.18), 0 0 1px rgba(0,0,0,0.25); }\n}\n\n@keyframes gotcha-spin {\n  from { transform: rotate(0deg); }\n  to { transform: rotate(360deg); }\n}\n\n@keyframes gotcha-dash {\n  0% { stroke-dasharray: 1, 62; stroke-dashoffset: 0; }\n  50% { stroke-dasharray: 40, 62; stroke-dashoffset: -12; }\n  100% { stroke-dasharray: 1, 62; stroke-dashoffset: -62; }\n}\n\n/* ── Base Styles ───────────────────────────────────────────── */\n\n[data-gotcha] {\n  font-family: ${fontFamily};\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\n[data-gotcha] *, [data-gotcha] *::before, [data-gotcha] *::after {\n  box-sizing: border-box;\n}\n\n[data-gotcha] button {\n  outline: none;\n}\n\n[data-gotcha] button:focus-visible {\n  outline: none;\n  box-shadow: 0 0 0 2px ${borderColor};\n}\n\n.gotcha-root textarea::placeholder {\n  color: ${textDisabled};\n}\n\n/* ── Animation Utilities ───────────────────────────────────── */\n\n.gotcha-fade-up {\n  animation: gotcha-fade-up ${duration.normal} ${easing.default} both;\n}\n\n.gotcha-modal-enter {\n  animation: gotcha-modal-in 0.3s ${easing.spring} both;\n}\n\n.gotcha-modal-enter-above {\n  animation: gotcha-modal-in-above 0.3s ${easing.spring} both;\n}\n\n.gotcha-modal-enter-center {\n  animation: gotcha-modal-in-center 0.3s ${easing.spring} both;\n}\n\n.gotcha-overlay-enter {\n  animation: gotcha-overlay-in 0.2s ${easing.default} both;\n}\n\n/* ── Reduced Motion ────────────────────────────────────────── */\n\n@media (prefers-reduced-motion: reduce) {\n  [data-gotcha] *, [data-gotcha] *::before, [data-gotcha] *::after {\n    animation-duration: 0.01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: 0.01ms !important;\n  }\n}\n`.trim();\n}\n\n/**\n * Inject the style tag into the document head (idempotent).\n */\nexport function injectStyles(theme: ResolvedTheme): void {\n  if (typeof document === 'undefined') return;\n\n  // Inject DM Sans from Google Fonts with preconnect\n  if (!document.getElementById(FONT_ID)) {\n    // Preconnect to Google Fonts\n    const preconnect = document.createElement('link');\n    preconnect.rel = 'preconnect';\n    preconnect.href = 'https://fonts.googleapis.com';\n    document.head.appendChild(preconnect);\n\n    const preconnectStatic = document.createElement('link');\n    preconnectStatic.rel = 'preconnect';\n    preconnectStatic.href = 'https://fonts.gstatic.com';\n    preconnectStatic.crossOrigin = 'anonymous';\n    document.head.appendChild(preconnectStatic);\n\n    // Load DM Sans from Google Fonts (Carter One is base64-embedded above)\n    const link = document.createElement('link');\n    link.id = FONT_ID;\n    link.rel = 'stylesheet';\n    link.href = 'https://fonts.googleapis.com/css2?family=Carter+One&family=DM+Sans:wght@400;500;600;700&display=swap';\n    document.head.appendChild(link);\n  }\n\n  // Inject or update style tag\n  let styleEl = document.getElementById(STYLE_ID) as HTMLStyleElement | null;\n  if (!styleEl) {\n    styleEl = document.createElement('style');\n    styleEl.id = STYLE_ID;\n    document.head.appendChild(styleEl);\n  }\n  styleEl.textContent = generateStyleTag(theme);\n}\n","import React, { createContext, useContext, useMemo, useState, useCallback, useEffect } from 'react';\nimport { createApiClient, ApiClient } from '../api/client';\nimport { GotchaUser } from '../types';\nimport { GotchaThemeConfig } from '../theme/tokens';\nimport { resolveTheme } from '../theme/resolveTheme';\nimport { injectStyles } from '../theme/styles';\n\nexport interface GotchaProviderProps {\n  /** Your Gotcha API key */\n  apiKey: string;\n  /** React children */\n  children: React.ReactNode;\n  /** Override the API base URL (for testing/staging) */\n  baseUrl?: string;\n  /** Enable debug logging */\n  debug?: boolean;\n  /** Disable all Gotcha buttons globally */\n  disabled?: boolean;\n  /** Default user metadata applied to all submissions */\n  defaultUser?: GotchaUser;\n  /** Theme configuration overrides applied to all instances */\n  themeConfig?: GotchaThemeConfig;\n}\n\nexport interface GotchaContextValue {\n  client: ApiClient;\n  disabled: boolean;\n  defaultUser: GotchaUser;\n  debug: boolean;\n  // Modal management - only one open at a time\n  activeModalId: string | null;\n  openModal: (elementId: string) => void;\n  closeModal: () => void;\n  // Theme\n  themeConfig?: GotchaThemeConfig;\n}\n\nconst GotchaContext = createContext<GotchaContextValue | null>(null);\n\nconst EMPTY_USER: GotchaUser = {};\n\nexport function GotchaProvider({\n  apiKey,\n  children,\n  baseUrl,\n  debug = false,\n  disabled = false,\n  defaultUser,\n  themeConfig,\n}: GotchaProviderProps) {\n  const [activeModalId, setActiveModalId] = useState<string | null>(null);\n\n  if (baseUrl && !baseUrl.startsWith('https://') && !baseUrl.startsWith('/') && !baseUrl.includes('localhost')) {\n    console.warn('[Gotcha] baseUrl should use HTTPS in production:', baseUrl);\n  }\n\n  const client = useMemo(\n    () => createApiClient({ apiKey, baseUrl, debug }),\n    [apiKey, baseUrl, debug]\n  );\n\n  // Stabilize defaultUser reference\n  const stableDefaultUser = useMemo(\n    () => defaultUser ?? EMPTY_USER,\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [JSON.stringify(defaultUser)]\n  );\n\n  // Inject styles on mount. Carter One @font-face is injected at module-load time\n  // (styles.ts:37) so it's already available before this runs.\n  useEffect(() => {\n    const resolved = resolveTheme('light', 'light', themeConfig);\n    injectStyles(resolved);\n  }, [themeConfig]);\n\n  const openModal = useCallback((elementId: string) => {\n    setActiveModalId(elementId);\n  }, []);\n\n  const closeModal = useCallback(() => {\n    setActiveModalId(null);\n  }, []);\n\n  const value: GotchaContextValue = useMemo(\n    () => ({\n      client,\n      disabled,\n      defaultUser: stableDefaultUser,\n      debug,\n      activeModalId,\n      openModal,\n      closeModal,\n      themeConfig,\n    }),\n    [client, disabled, stableDefaultUser, debug, activeModalId, openModal, closeModal, themeConfig]\n  );\n\n  return (\n    <GotchaContext.Provider value={value}>{children}</GotchaContext.Provider>\n  );\n}\n\nexport function useGotchaContext(): GotchaContextValue {\n  const context = useContext(GotchaContext);\n  if (!context) {\n    throw new Error('useGotchaContext must be used within a GotchaProvider');\n  }\n  return context;\n}\n","import { useState, useCallback, useEffect } from 'react';\nimport { useGotchaContext } from '../components/GotchaProvider';\nimport { ResponseMode, GotchaUser, GotchaResponse, VoteType, ExistingResponse } from '../types';\n\ninterface UseSubmitOptions {\n  elementId: string;\n  mode: ResponseMode;\n  pollOptions?: string[];\n  user?: GotchaUser;\n  onSuccess?: (response: GotchaResponse) => void;\n  onError?: (error: Error) => void;\n}\n\ninterface SubmitData {\n  content?: string;\n  title?: string;\n  rating?: number;\n  vote?: VoteType;\n  pollSelected?: string[];\n  isBug?: boolean;\n}\n\nexport function useSubmit(options: UseSubmitOptions) {\n  const { client, defaultUser } = useGotchaContext();\n  const [isLoading, setIsLoading] = useState(false);\n  const [isCheckingExisting, setIsCheckingExisting] = useState(false);\n  const [error, setError] = useState<string | null>(null);\n  const [existingResponse, setExistingResponse] = useState<ExistingResponse | null>(null);\n\n  // Check for existing response when user ID is provided\n  useEffect(() => {\n    const userId = options.user?.id || defaultUser?.id;\n    if (!userId) {\n      setExistingResponse(null);\n      return;\n    }\n\n    let cancelled = false;\n\n    const checkExisting = async () => {\n      setIsCheckingExisting(true);\n      try {\n        const existing = await client.checkExistingResponse(options.elementId, userId);\n        if (!cancelled) {\n          setExistingResponse(existing);\n        }\n      } catch {\n        // Ignore errors - just means no existing response found\n        if (!cancelled) {\n          setExistingResponse(null);\n        }\n      } finally {\n        if (!cancelled) {\n          setIsCheckingExisting(false);\n        }\n      }\n    };\n\n    checkExisting();\n\n    return () => {\n      cancelled = true;\n    };\n  }, [client, options.elementId, options.user?.id, defaultUser?.id]);\n\n  const submit = useCallback(\n    async (data: SubmitData) => {\n      setIsLoading(true);\n      setError(null);\n\n      try {\n        const userId = options.user?.id || defaultUser?.id;\n        let response: GotchaResponse;\n\n        // If we have an existing response and a user ID, update instead of create\n        if (existingResponse && userId) {\n          response = await client.updateResponse(\n            existingResponse.id,\n            {\n              content: data.content,\n              title: data.title,\n              rating: data.rating,\n              vote: data.vote,\n              pollSelected: data.pollSelected,\n            },\n            userId\n          );\n        } else {\n          response = await client.submitResponse({\n            elementId: options.elementId,\n            mode: options.mode,\n            content: data.content,\n            title: data.title,\n            rating: data.rating,\n            vote: data.vote,\n            pollOptions: options.pollOptions,\n            pollSelected: data.pollSelected,\n            isBug: data.isBug,\n            user: { ...defaultUser, ...options.user },\n          });\n        }\n\n        // Update existingResponse so isEditing flips to true after first submit\n        setExistingResponse({\n          id: response.id,\n          mode: options.mode,\n          content: data.content ?? null,\n          title: data.title ?? null,\n          rating: data.rating ?? null,\n          vote: data.vote ?? null,\n          pollSelected: data.pollSelected ?? null,\n          createdAt: response.createdAt,\n        });\n\n        options.onSuccess?.(response);\n        return response;\n      } catch (err) {\n        const errorMessage = err instanceof Error ? err.message : 'Something went wrong';\n        setError(errorMessage);\n        options.onError?.(err instanceof Error ? err : new Error(errorMessage));\n        throw err;\n      } finally {\n        setIsLoading(false);\n      }\n    },\n    [client, defaultUser, options, existingResponse]\n  );\n\n  return {\n    submit,\n    isLoading,\n    isCheckingExisting,\n    error,\n    existingResponse,\n    isEditing: !!existingResponse,\n    clearError: () => setError(null),\n  };\n}\n","/**\n * Simple class name utility\n * Combines class names, filtering out falsy values\n */\nexport function cn(...classes: (string | undefined | null | false)[]): string {\n  return classes.filter(Boolean).join(' ');\n}\n","/**\n * Detect if the device supports touch\n */\nexport const isTouchDevice = (): boolean => {\n  if (typeof window === 'undefined') return false;\n  return 'ontouchstart' in window || navigator.maxTouchPoints > 0;\n};\n\n/**\n * Get the appropriate size based on device type\n */\nexport const getResponsiveSize = (\n  size: 'sm' | 'md' | 'lg',\n  isTouch: boolean\n): number => {\n  const sizes = {\n    sm: { desktop: 24, mobile: 28 },\n    md: { desktop: 32, mobile: 34 },\n    lg: { desktop: 40, mobile: 40 },\n  };\n\n  return isTouch ? sizes[size].mobile : sizes[size].desktop;\n};\n","import React, { useState, useEffect, useMemo } from 'react';\nimport { Size, Theme, GotchaStyles } from '../types';\nimport { cn } from '../utils/cn';\nimport { isTouchDevice, getResponsiveSize } from '../utils/device';\nimport { resolveTheme } from '../theme/resolveTheme';\nimport { useGotchaContext } from './GotchaProvider';\n\nexport interface GotchaButtonProps {\n  size: Size;\n  theme: Theme;\n  customStyles?: GotchaStyles;\n  showOnHover: boolean;\n  touchBehavior: 'always-visible' | 'tap-to-reveal';\n  onClick: () => void;\n  isOpen: boolean;\n  isParentHovered?: boolean;\n  /** Enable entrance animations (default: true) */\n  animated?: boolean;\n}\n\nfunction getInitialSystemTheme(): 'light' | 'dark' {\n  if (typeof window === 'undefined') return 'light';\n  return window.matchMedia('(prefers-color-scheme: dark)').matches\n    ? 'dark'\n    : 'light';\n}\n\nexport function GotchaButton({\n  size,\n  theme,\n  customStyles,\n  showOnHover,\n  touchBehavior,\n  onClick,\n  isOpen,\n  isParentHovered = false,\n  animated = true,\n}: GotchaButtonProps) {\n  const [isTouch, setIsTouch] = useState(false);\n  const [tapRevealed, setTapRevealed] = useState(false);\n  const [systemTheme, setSystemTheme] = useState<'light' | 'dark'>(getInitialSystemTheme);\n  const [isHovered, setIsHovered] = useState(false);\n  const [isPressed, setIsPressed] = useState(false);\n  const [hasPopped, setHasPopped] = useState(false);\n\n  const { themeConfig } = useGotchaContext();\n\n  useEffect(() => {\n    setIsTouch(isTouchDevice());\n\n    if (typeof window === 'undefined') return;\n    const darkQuery = window.matchMedia('(prefers-color-scheme: dark)');\n    const handler = (e: MediaQueryListEvent) =>\n      setSystemTheme(e.matches ? 'dark' : 'light');\n    darkQuery.addEventListener('change', handler);\n    return () => darkQuery.removeEventListener('change', handler);\n  }, []);\n\n  // Determine visibility\n  const shouldShow = (() => {\n    if (isOpen) return true;\n    if (!isTouch && showOnHover) return isParentHovered;\n    if (isTouch && touchBehavior === 'tap-to-reveal') return tapRevealed;\n    return true;\n  })();\n\n  // Mark bubble pop as done after first appearance\n  useEffect(() => {\n    if (shouldShow && !hasPopped) {\n      const timer = setTimeout(() => setHasPopped(true), 600);\n      return () => clearTimeout(timer);\n    }\n  }, [shouldShow, hasPopped]);\n\n  const handleClick = () => {\n    if (isTouch && touchBehavior === 'tap-to-reveal' && !tapRevealed) {\n      setTapRevealed(true);\n      return;\n    }\n    onClick();\n  };\n\n  const buttonSize = getResponsiveSize(size, isTouch);\n  const t = useMemo(\n    () => resolveTheme(theme, systemTheme, themeConfig),\n    [theme, systemTheme, themeConfig]\n  );\n\n  // Compute transform based on state\n  const getTransform = () => {\n    if (!shouldShow) return 'scale(0.6)';\n    if (isPressed) return 'scale(0.95)';\n    if (isHovered) return 'scale(1.08)';\n    return 'scale(1)';\n  };\n\n  const baseStyles: React.CSSProperties = {\n    width: buttonSize,\n    height: buttonSize,\n    borderRadius: '50%',\n    border: t.colors.glassBorder,\n    cursor: 'pointer',\n    display: 'flex',\n    alignItems: 'center',\n    justifyContent: 'center',\n    background: t.colors.glassBackground,\n    backdropFilter: 'blur(20px) saturate(180%)',\n    WebkitBackdropFilter: 'blur(20px) saturate(180%)',\n    color: t.colors.glassColor,\n    boxShadow: isHovered ? t.colors.glassHoverShadow : t.colors.glassShadow,\n    transition: hasPopped ? `all 0.3s ${t.animation.easing.spring}` : 'none',\n    opacity: shouldShow ? 1 : 0,\n    transform: getTransform(),\n    filter: isPressed ? 'brightness(0.95)' : 'brightness(1)',\n    pointerEvents: shouldShow ? 'auto' : 'none',\n    ...(animated && shouldShow && !hasPopped ? {\n      animation: 'gotcha-bubble-pop 500ms cubic-bezier(0.175, 0.885, 0.32, 1.275) both, gotcha-arrive-glow 1200ms ease-in-out 600ms both',\n    } : {}),\n    ...customStyles?.button,\n  };\n\n  return (\n    <button\n      type=\"button\"\n      onClick={handleClick}\n      onMouseEnter={() => setIsHovered(true)}\n      onMouseLeave={() => { setIsHovered(false); setIsPressed(false); }}\n      onMouseDown={() => setIsPressed(true)}\n      onMouseUp={() => setIsPressed(false)}\n      onTouchStart={() => setIsPressed(true)}\n      onTouchEnd={() => setIsPressed(false)}\n      style={baseStyles}\n      className={cn('gotcha-button', isOpen && 'gotcha-button--open')}\n      aria-label=\"Give feedback on this feature\"\n      aria-expanded={isOpen}\n      aria-haspopup=\"dialog\"\n    >\n      <GotchaIcon size={buttonSize * 0.65} animated={animated} />\n    </button>\n  );\n}\n\nfunction GotchaIcon({ size, animated = true }: { size: number; animated?: boolean }) {\n  const [mounted, setMounted] = useState(false);\n  useEffect(() => { setMounted(true); }, []);\n\n  return (\n    <span\n      aria-hidden=\"true\"\n      style={{\n        fontFamily: \"'Carter One', cursive\",\n        fontSize: size,\n        lineHeight: 1,\n        display: 'flex',\n        alignItems: 'center',\n        justifyContent: 'center',\n        marginTop: size * 0.05,\n        marginRight: size * 0.05,\n        userSelect: 'none',\n        opacity: animated ? 0 : (mounted ? 1 : 0),\n        ...(animated && mounted ? {\n          animation: 'gotcha-letter-in 350ms cubic-bezier(0.25, 0.46, 0.45, 0.94) 200ms both',\n        } : {}),\n      }}\n    >\n      G\n    </span>\n  );\n}\n","import React from 'react';\n\ninterface SpinnerProps {\n  size?: number;\n  color?: string;\n}\n\nexport function Spinner({ size = 16, color = 'currentColor' }: SpinnerProps) {\n  return (\n    <svg\n      width={size}\n      height={size}\n      viewBox=\"0 0 24 24\"\n      fill=\"none\"\n      style={{\n        animation: 'gotcha-spin 0.8s linear infinite',\n      }}\n    >\n      <circle\n        cx=\"12\"\n        cy=\"12\"\n        r=\"10\"\n        stroke={color}\n        strokeWidth=\"2\"\n        strokeOpacity=\"0.12\"\n      />\n      <circle\n        cx=\"12\"\n        cy=\"12\"\n        r=\"10\"\n        stroke={color}\n        strokeWidth=\"2\"\n        strokeLinecap=\"round\"\n        style={{\n          animation: 'gotcha-dash 1.2s ease-in-out infinite',\n        }}\n      />\n    </svg>\n  );\n}\n","import React, { useState, useEffect, useRef } from 'react';\nimport { GotchaStyles } from '../../types';\nimport { ResolvedTheme } from '../../theme/tokens';\nimport { isTouchDevice } from '../../utils/device';\nimport { Spinner } from '../Spinner';\n\ninterface FeedbackModeProps {\n  resolvedTheme: ResolvedTheme;\n  placeholder?: string;\n  submitText: string;\n  isLoading: boolean;\n  onSubmit: (data: { content?: string; rating?: number; isBug?: boolean }) => void;\n  customStyles?: GotchaStyles;\n  initialValues?: {\n    content?: string | null;\n    rating?: number | null;\n  };\n  isEditing?: boolean;\n  showText?: boolean;\n  showRating?: boolean;\n  enableBugFlag?: boolean;\n  bugFlagLabel?: string;\n}\n\nexport function FeedbackMode({\n  resolvedTheme: t,\n  placeholder,\n  submitText,\n  isLoading,\n  onSubmit,\n  customStyles,\n  initialValues,\n  isEditing = false,\n  showText = true,\n  showRating = true,\n  enableBugFlag = false,\n  bugFlagLabel,\n}: FeedbackModeProps) {\n  const [content, setContent] = useState(initialValues?.content || '');\n  const [rating, setRating] = useState<number | null>(initialValues?.rating ?? null);\n  const [isBug, setIsBug] = useState(false);\n  const [isTouch, setIsTouch] = useState(false);\n\n  useEffect(() => {\n    setIsTouch(isTouchDevice());\n  }, []);\n\n  useEffect(() => {\n    if (initialValues?.content !== undefined) {\n      setContent(initialValues.content || '');\n    }\n    if (initialValues?.rating !== undefined) {\n      setRating(initialValues.rating ?? null);\n    }\n  }, [initialValues?.content, initialValues?.rating]);\n\n  const canSubmit = (() => {\n    if (showText && showRating) return content.trim().length > 0 || rating !== null;\n    if (showText) return content.trim().length > 0;\n    if (showRating) return rating !== null;\n    return false;\n  })();\n\n  const handleSubmit = (e: React.FormEvent) => {\n    e.preventDefault();\n    if (!canSubmit) return;\n    onSubmit({\n      content: showText && content.trim() ? content.trim() : undefined,\n      rating: showRating && rating !== null ? rating : undefined,\n      isBug: isBug || undefined,\n    });\n  };\n\n  const inputStyles: React.CSSProperties = {\n    width: '100%',\n    padding: isTouch ? '12px 14px' : '10px 12px',\n    border: `1px solid ${t.colors.inputBorder}`,\n    borderRadius: t.borders.radius.md,\n    backgroundColor: t.colors.inputBackground,\n    color: t.colors.text,\n    fontSize: isTouch ? t.typography.fontSize.lg : t.typography.fontSize.md,\n    resize: 'none',\n    minHeight: isTouch ? 100 : 80,\n    fontFamily: t.typography.fontFamily,\n    outline: 'none',\n    transition: `border-color ${t.animation.duration.fast} ${t.animation.easing.default}, box-shadow ${t.animation.duration.fast} ${t.animation.easing.default}`,\n    lineHeight: 1.5,\n    boxShadow: `inset 0 1px 2px rgba(0,0,0,0.04)`,\n    ...customStyles?.input,\n  };\n\n  const buttonStyles: React.CSSProperties = {\n    width: '100%',\n    padding: isTouch ? '14px 16px' : '10px 16px',\n    border: t.colors.buttonBorder,\n    borderRadius: t.borders.radius.md,\n    backgroundColor: t.colors.buttonBackground,\n    color: t.colors.buttonColor,\n    fontSize: isTouch ? t.typography.fontSize.lg : t.typography.fontSize.md,\n    fontWeight: t.typography.fontWeight.medium,\n    fontFamily: t.typography.fontFamily,\n    cursor: isLoading ? 'not-allowed' : 'pointer',\n    transition: `all ${t.animation.duration.fast} ${t.animation.easing.default}`,\n    letterSpacing: '0.01em',\n    ...customStyles?.submitButton,\n  };\n\n  return (\n    <form onSubmit={handleSubmit}>\n      {/* Rating */}\n      {showRating && (\n        <div style={{\n          marginBottom: showText ? (isTouch ? 16 : 12) : 0,\n          ...(!showText ? { display: 'flex', justifyContent: 'center', padding: '8px 0' } : {}),\n        }}>\n          <StarRating value={rating} onChange={setRating} theme={t} isTouch={isTouch} large={!showText} />\n        </div>\n      )}\n\n      {/* Text input */}\n      {showText && (\n        <textarea\n          value={content}\n          onChange={(e) => setContent(e.target.value)}\n          placeholder={placeholder || 'Share your thoughts...'}\n          maxLength={5000}\n          style={inputStyles}\n          disabled={isLoading}\n          aria-label=\"Your feedback\"\n          onFocus={(e) => {\n            e.currentTarget.style.borderColor = t.colors.inputBorderFocus;\n            e.currentTarget.style.boxShadow = `0 0 0 3px ${t.colors.inputFocusRing}`;\n            e.currentTarget.style.backgroundColor = t.colors.inputBackgroundFocus;\n          }}\n          onBlur={(e) => {\n            e.currentTarget.style.borderColor = t.colors.inputBorder;\n            e.currentTarget.style.boxShadow = 'inset 0 1px 2px rgba(0,0,0,0.04)';\n            e.currentTarget.style.backgroundColor = t.colors.inputBackground;\n          }}\n        />\n      )}\n\n      {/* Bug flag toggle */}\n      {enableBugFlag && (\n        <button\n          type=\"button\"\n          role=\"switch\"\n          aria-checked={isBug}\n          onClick={() => setIsBug(!isBug)}\n          style={{\n            display: 'flex',\n            alignItems: 'center',\n            gap: 7,\n            width: '100%',\n            marginTop: 10,\n            padding: '7px 10px',\n            border: `1px solid ${\n              isBug ? t.colors.warningBorder : t.colors.border\n            }`,\n            borderRadius: 7,\n            backgroundColor: isBug ? t.colors.warningSurface : 'transparent',\n            cursor: 'pointer',\n            transition: `all ${t.animation.duration.fast} ${t.animation.easing.default}`,\n            fontFamily: t.typography.fontFamily,\n            ...customStyles?.bugFlag,\n          }}\n          onMouseEnter={(e) => {\n            if (!isBug) {\n              e.currentTarget.style.backgroundColor = t.colors.surfaceHover === t.colors.inputBackgroundFocus\n                ? 'rgba(0,0,0,0.02)' : t.colors.surfaceHover;\n            }\n          }}\n          onMouseLeave={(e) => {\n            if (!isBug) {\n              e.currentTarget.style.backgroundColor = 'transparent';\n            }\n          }}\n        >\n          <svg\n            width={14}\n            height={14}\n            viewBox=\"0 0 24 24\"\n            fill=\"none\"\n            stroke={isBug ? t.colors.warningActive : t.colors.textDisabled}\n            strokeWidth={1.75}\n            strokeLinecap=\"round\"\n            strokeLinejoin=\"round\"\n            style={{ flexShrink: 0, transition: `stroke ${t.animation.duration.fast}` }}\n          >\n            <path d=\"M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0L2.697 16.126zM12 15.75h.007v.008H12v-.008z\" />\n          </svg>\n          <span\n            style={{\n              fontSize: 12,\n              fontWeight: isBug ? t.typography.fontWeight.medium : t.typography.fontWeight.normal,\n              color: isBug ? t.colors.warningActive : t.colors.textDisabled,\n              transition: `color ${t.animation.duration.fast}`,\n              letterSpacing: '0.01em',\n            }}\n          >\n            {isBug ? 'Issue reported' : (bugFlagLabel || 'Report an issue')}\n          </span>\n          <div\n            style={{\n              marginLeft: 'auto',\n              width: 28,\n              height: 16,\n              borderRadius: 8,\n              backgroundColor: isBug ? t.colors.warning : t.colors.border,\n              position: 'relative',\n              transition: `background-color ${t.animation.duration.fast} ${t.animation.easing.default}`,\n              flexShrink: 0,\n            }}\n          >\n            <div\n              style={{\n                position: 'absolute',\n                top: 2,\n                left: isBug ? 14 : 2,\n                width: 12,\n                height: 12,\n                borderRadius: '50%',\n                backgroundColor: isBug ? '#ffffff' : t.colors.textDisabled,\n                transition: `left ${t.animation.duration.fast} ${t.animation.easing.default}, background-color ${t.animation.duration.fast}`,\n                boxShadow: '0 1px 2px rgba(0,0,0,0.15)',\n              }}\n            />\n          </div>\n        </button>\n      )}\n\n      {/* Submit button */}\n      <button\n        type=\"submit\"\n        disabled={isLoading || !canSubmit}\n        style={{\n          ...buttonStyles,\n          marginTop: 12,\n          opacity: isLoading ? 0.8 : 1,\n          backgroundColor: !canSubmit ? t.colors.buttonBackgroundDisabled : t.colors.buttonBackground,\n          color: !canSubmit ? t.colors.buttonColorDisabled : t.colors.buttonColor,\n          display: 'flex',\n          alignItems: 'center',\n          justifyContent: 'center',\n          gap: 8,\n          ...(isLoading ? {\n            backgroundImage: `linear-gradient(90deg, transparent 0%, rgba(255,255,255,0.1) 50%, transparent 100%)`,\n            backgroundSize: '200% 100%',\n            animation: 'gotcha-shimmer 1.5s ease infinite',\n          } : {}),\n        }}\n        onMouseEnter={(e) => {\n          if (!e.currentTarget.disabled) {\n            e.currentTarget.style.backgroundColor = t.colors.buttonBackgroundHover;\n            e.currentTarget.style.transform = 'translateY(-1px)';\n            e.currentTarget.style.boxShadow = t.shadows.button;\n          }\n        }}\n        onMouseLeave={(e) => {\n          if (!e.currentTarget.disabled) {\n            e.currentTarget.style.backgroundColor = t.colors.buttonBackground;\n            e.currentTarget.style.transform = 'translateY(0)';\n            e.currentTarget.style.boxShadow = 'none';\n          }\n        }}\n      >\n        {isLoading && <Spinner size={isTouch ? 18 : 16} color={t.colors.buttonColor} />}\n        {isLoading ? (isEditing ? 'Updating...' : 'Submitting...') : (isEditing ? 'Update' : submitText)}\n      </button>\n    </form>\n  );\n}\n\ninterface StarRatingProps {\n  value: number | null;\n  onChange: (rating: number) => void;\n  theme: ResolvedTheme;\n  isTouch: boolean;\n  large?: boolean;\n}\n\nfunction StarRating({ value, onChange, theme: t, isTouch, large = false }: StarRatingProps) {\n  const [hovered, setHovered] = useState<number | null>(null);\n  const [pulsing, setPulsing] = useState<number | null>(null);\n  const pulseTimerRef = useRef<ReturnType<typeof setTimeout>>();\n  const starSize = large ? (isTouch ? 36 : 28) : (isTouch ? 28 : 18);\n  const buttonPadding = large ? (isTouch ? 8 : 5) : (isTouch ? 8 : 3);\n\n  useEffect(() => {\n    return () => { clearTimeout(pulseTimerRef.current); };\n  }, []);\n\n  const handleClick = (star: number) => {\n    setPulsing(star);\n    onChange(star);\n    clearTimeout(pulseTimerRef.current);\n    pulseTimerRef.current = setTimeout(() => setPulsing(null), 300);\n  };\n\n  return (\n    <div\n      style={{\n        display: 'flex',\n        gap: large ? (isTouch ? 8 : 6) : (isTouch ? 6 : 2),\n      }}\n      role=\"group\"\n      aria-label=\"Rating\"\n    >\n      {[1, 2, 3, 4, 5].map((star) => {\n        const isFilled = (hovered ?? value ?? 0) >= star;\n        return (\n          <button\n            key={star}\n            type=\"button\"\n            onClick={() => handleClick(star)}\n            onMouseEnter={() => setHovered(star)}\n            onMouseLeave={() => setHovered(null)}\n            aria-label={`Rate ${star} out of 5`}\n            aria-pressed={value === star}\n            style={{\n              background: 'none',\n              border: 'none',\n              cursor: 'pointer',\n              padding: buttonPadding,\n              color: isFilled ? t.colors.starFilled : t.colors.starEmpty,\n              transition: `color 0.15s ${t.animation.easing.default}`,\n              transform: pulsing === star ? 'scale(1)' : ((hovered !== null && hovered >= star) ? 'scale(1.1)' : 'scale(1)'),\n              animation: pulsing === star ? `gotcha-star-pulse 0.3s ${t.animation.easing.spring}` : 'none',\n              filter: isFilled ? `drop-shadow(0 0 3px ${t.colors.starFilled}40)` : 'none',\n              transitionDelay: `${(star - 1) * 30}ms`,\n            }}\n          >\n            <svg width={starSize} height={starSize} viewBox=\"0 0 24 24\" fill=\"currentColor\">\n              <path d=\"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z\" />\n            </svg>\n          </button>\n        );\n      })}\n    </div>\n  );\n}\n","import React, { useEffect, useState } from 'react';\nimport { ResolvedTheme } from '../../theme/tokens';\nimport { isTouchDevice } from '../../utils/device';\nimport { Spinner } from '../Spinner';\n\ninterface VoteModeProps {\n  resolvedTheme: ResolvedTheme;\n  isLoading: boolean;\n  onSubmit: (data: { vote: 'up' | 'down' }) => void;\n  initialVote?: 'up' | 'down' | null;\n  isEditing?: boolean;\n  labels?: { up: string; down: string };\n}\n\nexport function VoteMode({ resolvedTheme: t, isLoading, onSubmit, initialVote, isEditing = false, labels }: VoteModeProps) {\n  const [isTouch, setIsTouch] = useState(false);\n  const [activeVote, setActiveVote] = useState<'up' | 'down' | null>(initialVote || null);\n  const [previousVote, setPreviousVote] = useState<'up' | 'down' | null>(initialVote || null);\n\n  useEffect(() => {\n    setIsTouch(isTouchDevice());\n  }, []);\n\n  useEffect(() => {\n    if (initialVote !== undefined) {\n      setPreviousVote(initialVote);\n      setActiveVote(initialVote);\n    }\n  }, [initialVote]);\n\n  useEffect(() => {\n    if (!isLoading && !isEditing) {\n      setActiveVote(null);\n    }\n  }, [isLoading, isEditing]);\n\n  const handleVote = (vote: 'up' | 'down') => {\n    setActiveVote(vote);\n    onSubmit({ vote });\n  };\n\n  const getButtonStyles = (voteType: 'up' | 'down'): React.CSSProperties => {\n    const isSelected = previousVote === voteType;\n    const color = voteType === 'up' ? t.colors.voteUp : t.colors.voteDown;\n    const surface = voteType === 'up' ? t.colors.voteUpSurface : t.colors.voteDownSurface;\n    const border = voteType === 'up' ? t.colors.voteUpBorder : t.colors.voteDownBorder;\n\n    return {\n      flex: 1,\n      minWidth: 0,\n      overflow: 'hidden' as const,\n      padding: isTouch ? '14px 18px' : '10px 14px',\n      border: isSelected\n        ? `2px solid ${border}`\n        : `1px solid ${t.colors.border}`,\n      borderRadius: t.borders.radius.lg - 2,\n      background: isSelected\n        ? `linear-gradient(135deg, ${surface}, ${surface})`\n        : t.colors.surface,\n      color: isSelected ? color : t.colors.textSecondary,\n      fontSize: isTouch ? 28 : 24,\n      fontFamily: t.typography.fontFamily,\n      cursor: isLoading ? 'not-allowed' : 'pointer',\n      transition: `all 0.2s ${t.animation.easing.default}`,\n      display: 'flex',\n      alignItems: 'center',\n      justifyContent: 'center',\n      gap: isTouch ? 10 : 8,\n    };\n  };\n\n  const iconSize = isTouch ? 24 : 20;\n\n  return (\n    <div\n      style={{\n        display: 'flex',\n        gap: isTouch ? 12 : 10,\n      }}\n      role=\"group\"\n      aria-label=\"Vote\"\n    >\n      <button\n        type=\"button\"\n        onClick={() => handleVote('up')}\n        disabled={isLoading}\n        style={getButtonStyles('up')}\n        aria-label=\"Vote up - I like this\"\n        aria-pressed={previousVote === 'up'}\n        onMouseEnter={(e) => {\n          if (!isLoading) {\n            e.currentTarget.style.transform = 'translateY(-2px) scale(1.02)';\n            e.currentTarget.style.boxShadow = t.shadows.button;\n          }\n        }}\n        onMouseLeave={(e) => {\n          e.currentTarget.style.transform = 'translateY(0) scale(1)';\n          e.currentTarget.style.boxShadow = 'none';\n        }}\n      >\n        {isLoading && activeVote === 'up' ? (\n          <>\n            <Spinner size={iconSize} color={t.colors.text} />\n            <span style={{ fontSize: isTouch ? 15 : 13, fontWeight: t.typography.fontWeight.medium, letterSpacing: '0.01em' }}>\n              {isEditing ? 'Updating...' : 'Sending...'}\n            </span>\n          </>\n        ) : (\n          <>\n            <ThumbsUpIcon size={iconSize} />\n            <span style={{ fontSize: isTouch ? 15 : 13, fontWeight: t.typography.fontWeight.medium, letterSpacing: '0.01em' }}>\n              {labels?.up || (previousVote === 'up' ? 'Liked' : 'Like')}\n            </span>\n          </>\n        )}\n      </button>\n\n      <button\n        type=\"button\"\n        onClick={() => handleVote('down')}\n        disabled={isLoading}\n        style={getButtonStyles('down')}\n        aria-label=\"Vote down - I don't like this\"\n        aria-pressed={previousVote === 'down'}\n        onMouseEnter={(e) => {\n          if (!isLoading) {\n            e.currentTarget.style.transform = 'translateY(-2px) scale(1.02)';\n            e.currentTarget.style.boxShadow = t.shadows.button;\n          }\n        }}\n        onMouseLeave={(e) => {\n          e.currentTarget.style.transform = 'translateY(0) scale(1)';\n          e.currentTarget.style.boxShadow = 'none';\n        }}\n      >\n        {isLoading && activeVote === 'down' ? (\n          <>\n            <Spinner size={iconSize} color={t.colors.text} />\n            <span style={{ fontSize: isTouch ? 15 : 13, fontWeight: t.typography.fontWeight.medium, letterSpacing: '0.01em' }}>\n              {isEditing ? 'Updating...' : 'Sending...'}\n            </span>\n          </>\n        ) : (\n          <>\n            <ThumbsDownIcon size={iconSize} />\n            <span style={{ fontSize: isTouch ? 15 : 13, fontWeight: t.typography.fontWeight.medium, letterSpacing: '0.01em' }}>\n              {labels?.down || (previousVote === 'down' ? 'Disliked' : 'Dislike')}\n            </span>\n          </>\n        )}\n      </button>\n    </div>\n  );\n}\n\nfunction ThumbsUpIcon({ size = 24 }: { size?: number }) {\n  return (\n    <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n      <path d=\"M14 9V5a3 3 0 0 0-3-3l-4 9v11h11.28a2 2 0 0 0 2-1.7l1.38-9a2 2 0 0 0-2-2.3zM7 22H4a2 2 0 0 1-2-2v-7a2 2 0 0 1 2-2h3\" />\n    </svg>\n  );\n}\n\nfunction ThumbsDownIcon({ size = 24 }: { size?: number }) {\n  return (\n    <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.75\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n      <path d=\"M10 15v4a3 3 0 0 0 3 3l4-9V2H5.72a2 2 0 0 0-2 1.7l-1.38 9a2 2 0 0 0 2 2.3zm7-13h2.67A2.31 2.31 0 0 1 22 4v7a2.31 2.31 0 0 1-2.33 2H17\" />\n    </svg>\n  );\n}\n","import React, { useState, useEffect } from 'react';\nimport { ResolvedTheme } from '../../theme/tokens';\nimport { isTouchDevice } from '../../utils/device';\nimport { Spinner } from '../Spinner';\n\ninterface PollModeProps {\n  resolvedTheme: ResolvedTheme;\n  options: string[];\n  allowMultiple: boolean;\n  isLoading: boolean;\n  onSubmit: (data: { pollSelected: string[] }) => void;\n  initialSelected?: string[] | null;\n  isEditing?: boolean;\n}\n\nexport function PollMode({\n  resolvedTheme: t,\n  options,\n  allowMultiple,\n  isLoading,\n  onSubmit,\n  initialSelected,\n  isEditing = false,\n}: PollModeProps) {\n  const [selected, setSelected] = useState<string[]>(initialSelected || []);\n  const [isTouch, setIsTouch] = useState(false);\n\n  useEffect(() => {\n    setIsTouch(isTouchDevice());\n  }, []);\n\n  useEffect(() => {\n    if (initialSelected) {\n      setSelected(initialSelected);\n    }\n  }, [initialSelected]);\n\n  const handleToggle = (option: string) => {\n    if (allowMultiple) {\n      setSelected((prev) =>\n        prev.includes(option) ? prev.filter((o) => o !== option) : [...prev, option]\n      );\n    } else {\n      setSelected((prev) => (prev.includes(option) ? [] : [option]));\n    }\n  };\n\n  const handleSubmit = () => {\n    if (selected.length === 0) return;\n    onSubmit({ pollSelected: selected });\n  };\n\n  const getOptionStyles = (option: string, index: number): React.CSSProperties => {\n    const isSelected = selected.includes(option);\n    return {\n      width: '100%',\n      padding: isTouch ? '12px 14px' : '9px 12px',\n      border: `1px solid ${isSelected ? t.colors.pollSelectedBorder : t.colors.pollBorder}`,\n      borderRadius: t.borders.radius.lg - 2,\n      backgroundColor: isSelected ? t.colors.pollSelectedBackground : t.colors.pollBackground,\n      color: isSelected ? t.colors.pollSelectedColor : t.colors.pollColor,\n      fontSize: isTouch ? 15 : t.typography.fontSize.sm,\n      fontWeight: isSelected ? t.typography.fontWeight.semibold : t.typography.fontWeight.medium,\n      fontFamily: t.typography.fontFamily,\n      cursor: isLoading ? 'not-allowed' : 'pointer',\n      transition: `all 0.2s ${t.animation.easing.default}`,\n      textAlign: 'left' as const,\n      letterSpacing: '0.01em',\n      display: 'flex',\n      alignItems: 'center',\n      gap: 8,\n      animation: `gotcha-fade-up ${t.animation.duration.normal} ${t.animation.easing.default} both`,\n      animationDelay: `${index * 0.05}s`,\n    };\n  };\n\n  return (\n    <div>\n      <div\n        style={{\n          display: 'flex',\n          flexDirection: 'column',\n          gap: isTouch ? 8 : 6,\n        }}\n        role=\"group\"\n        aria-label={allowMultiple ? 'Select one or more options' : 'Select an option'}\n      >\n        {options.map((option, index) => {\n          const isSelected = selected.includes(option);\n          return (\n            <button\n              key={option}\n              type=\"button\"\n              onClick={() => handleToggle(option)}\n              disabled={isLoading}\n              style={getOptionStyles(option, index)}\n              aria-pressed={isSelected}\n              onMouseEnter={(e) => {\n                if (!isLoading) {\n                  e.currentTarget.style.transform = 'translateX(2px)';\n                }\n              }}\n              onMouseLeave={(e) => {\n                e.currentTarget.style.transform = 'translateX(0)';\n              }}\n            >\n              <span\n                style={{\n                  width: 16,\n                  height: 16,\n                  borderRadius: allowMultiple ? 4 : '50%',\n                  border: `2px solid ${isSelected ? t.colors.pollCheckSelectedBorder : t.colors.pollCheckBorder}`,\n                  backgroundColor: isSelected ? t.colors.pollCheckSelectedBg : 'transparent',\n                  display: 'flex',\n                  alignItems: 'center',\n                  justifyContent: 'center',\n                  flexShrink: 0,\n                  transition: `all ${t.animation.duration.fast}`,\n                }}\n              >\n                {isSelected && (\n                  <svg width={10} height={10} viewBox=\"0 0 12 12\" fill=\"none\">\n                    <path\n                      d=\"M2 6l3 3 5-5\"\n                      stroke=\"#fff\"\n                      strokeWidth=\"2\"\n                      strokeLinecap=\"round\"\n                      strokeLinejoin=\"round\"\n                    />\n                  </svg>\n                )}\n              </span>\n              {option}\n            </button>\n          );\n        })}\n      </div>\n\n      <button\n        type=\"button\"\n        onClick={handleSubmit}\n        disabled={isLoading || selected.length === 0}\n        style={{\n          width: '100%',\n          marginTop: 12,\n          padding: isTouch ? '14px 16px' : '10px 16px',\n          border: t.colors.buttonBorder,\n          borderRadius: t.borders.radius.md,\n          backgroundColor: selected.length === 0 ? t.colors.buttonBackgroundDisabled : t.colors.buttonBackground,\n          color: selected.length === 0 ? t.colors.buttonColorDisabled : t.colors.buttonColor,\n          fontSize: isTouch ? t.typography.fontSize.lg : t.typography.fontSize.md,\n          fontWeight: t.typography.fontWeight.medium,\n          fontFamily: t.typography.fontFamily,\n          cursor: isLoading || selected.length === 0 ? 'not-allowed' : 'pointer',\n          transition: `all ${t.animation.duration.fast} ${t.animation.easing.default}`,\n          letterSpacing: '0.01em',\n          display: 'flex',\n          alignItems: 'center',\n          justifyContent: 'center',\n          gap: 8,\n          opacity: isLoading ? 0.8 : 1,\n          ...(isLoading ? {\n            backgroundImage: `linear-gradient(90deg, transparent 0%, rgba(255,255,255,0.1) 50%, transparent 100%)`,\n            backgroundSize: '200% 100%',\n            animation: 'gotcha-shimmer 1.5s ease infinite',\n          } : {}),\n        }}\n        onMouseEnter={(e) => {\n          if (!e.currentTarget.disabled) {\n            e.currentTarget.style.backgroundColor = t.colors.buttonBackgroundHover;\n            e.currentTarget.style.transform = 'translateY(-1px)';\n            e.currentTarget.style.boxShadow = t.shadows.button;\n          }\n        }}\n        onMouseLeave={(e) => {\n          if (!e.currentTarget.disabled) {\n            e.currentTarget.style.backgroundColor = selected.length === 0\n              ? t.colors.buttonBackgroundDisabled\n              : t.colors.buttonBackground;\n            e.currentTarget.style.transform = 'translateY(0)';\n            e.currentTarget.style.boxShadow = 'none';\n          }\n        }}\n      >\n        {isLoading && <Spinner size={isTouch ? 18 : 16} color={t.colors.buttonColor} />}\n        {isLoading ? (isEditing ? 'Updating...' : 'Submitting...') : (isEditing ? 'Update' : 'Submit')}\n      </button>\n    </div>\n  );\n}\n","import React, { useState, useEffect } from 'react';\nimport { GotchaStyles } from '../../types';\nimport { ResolvedTheme } from '../../theme/tokens';\nimport { isTouchDevice } from '../../utils/device';\nimport { Spinner } from '../Spinner';\n\ninterface NpsModeProps {\n  resolvedTheme: ResolvedTheme;\n  submitText: string;\n  isLoading: boolean;\n  onSubmit: (data: { rating?: number; content?: string }) => void;\n  customStyles?: GotchaStyles;\n  showFollowUp?: boolean;\n  followUpPlaceholder?: string;\n  lowLabel?: string;\n  highLabel?: string;\n  initialValues?: {\n    rating?: number | null;\n    content?: string | null;\n  };\n  isEditing?: boolean;\n}\n\nexport function NpsMode({\n  resolvedTheme: t,\n  submitText,\n  isLoading,\n  onSubmit,\n  customStyles,\n  showFollowUp = true,\n  followUpPlaceholder,\n  lowLabel = 'Not likely',\n  highLabel = 'Very likely',\n  initialValues,\n  isEditing = false,\n}: NpsModeProps) {\n  const [score, setScore] = useState<number | null>(initialValues?.rating ?? null);\n  const [content, setContent] = useState(initialValues?.content || '');\n  const [isTouch, setIsTouch] = useState(false);\n  const [hoveredScore, setHoveredScore] = useState<number | null>(null);\n\n  useEffect(() => {\n    setIsTouch(isTouchDevice());\n  }, []);\n\n  useEffect(() => {\n    if (initialValues?.rating !== undefined) {\n      setScore(initialValues.rating ?? null);\n    }\n    if (initialValues?.content !== undefined) {\n      setContent(initialValues.content || '');\n    }\n  }, [initialValues?.rating, initialValues?.content]);\n\n  const canSubmit = score !== null;\n  const npsColors = t.colors.npsColors;\n\n  const handleSubmit = (e: React.FormEvent) => {\n    e.preventDefault();\n    if (!canSubmit) return;\n    onSubmit({\n      rating: score ?? undefined,\n      content: showFollowUp && content.trim() ? content.trim() : undefined,\n    });\n  };\n\n  return (\n    <form onSubmit={handleSubmit}>\n      {/* Score scale */}\n      <div>\n        {/* Number buttons — always single row */}\n        <div\n          style={{\n            display: 'flex',\n            gap: isTouch ? 4 : 6,\n            justifyContent: 'center',\n          }}\n          role=\"group\"\n          aria-label=\"NPS Score\"\n        >\n          {Array.from({ length: 11 }, (_, i) => {\n            const selected = score === i;\n            const hovered = hoveredScore === i;\n            const color = npsColors[i];\n\n            return (\n              <button\n                key={i}\n                type=\"button\"\n                onClick={() => setScore(i)}\n                onMouseEnter={() => setHoveredScore(i)}\n                onMouseLeave={() => setHoveredScore(null)}\n                aria-label={`Score ${i} out of 10`}\n                aria-pressed={selected}\n                style={{\n                  flex: 1,\n                  minWidth: 0,\n                  height: isTouch ? 34 : 32,\n                  borderRadius: t.borders.radius.sm,\n                  border: selected\n                    ? `2px solid ${color}`\n                    : `1.5px solid ${color}25`,\n                  backgroundColor: selected\n                    ? color\n                    : hovered\n                      ? `${color}25`\n                      : `${color}0c`,\n                  color: selected\n                    ? '#fff'\n                    : hovered\n                      ? color\n                      : `${color}bb`,\n                  fontSize: 12,\n                  fontWeight: selected ? t.typography.fontWeight.bold : t.typography.fontWeight.semibold,\n                  fontFamily: t.typography.fontFamily,\n                  fontVariantNumeric: 'tabular-nums',\n                  cursor: 'pointer',\n                  padding: 0,\n                  display: 'flex',\n                  alignItems: 'center',\n                  justifyContent: 'center',\n                  transition: `all 0.2s ${t.animation.easing.spring}`,\n                  transform: selected ? 'scale(1.08)' : hovered ? 'scale(1.04)' : 'scale(1)',\n                  boxShadow: selected\n                    ? `0 0 12px ${color}40`\n                    : 'none',\n                  ...customStyles?.npsButton,\n                  ...(selected ? customStyles?.npsButtonSelected : {}),\n                }}\n              >\n                {i}\n              </button>\n            );\n          })}\n        </div>\n\n        {/* Labels */}\n        <div\n          style={{\n            display: 'flex',\n            justifyContent: 'space-between',\n            alignItems: 'center',\n            marginTop: 6,\n            padding: '0 2px',\n            ...customStyles?.npsLabels,\n          }}\n        >\n          <span style={{\n            fontSize: t.typography.fontSize.xs,\n            color: t.colors.textDisabled,\n            fontWeight: t.typography.fontWeight.medium,\n            letterSpacing: '0.02em',\n          }}>\n            {lowLabel}\n          </span>\n          <span style={{\n            fontSize: t.typography.fontSize.xs,\n            color: t.colors.textDisabled,\n            fontWeight: t.typography.fontWeight.medium,\n            letterSpacing: '0.02em',\n          }}>\n            {highLabel}\n          </span>\n        </div>\n      </div>\n\n      {/* Follow-up textarea — animated reveal */}\n      {showFollowUp && score !== null && (\n        <textarea\n          value={content}\n          onChange={(e) => setContent(e.target.value)}\n          placeholder={followUpPlaceholder || 'What\\'s the main reason for your score?'}\n          maxLength={5000}\n          style={{\n            width: '100%',\n            padding: isTouch ? '12px 14px' : '10px 12px',\n            border: `1px solid ${t.colors.inputBorder}`,\n            borderRadius: t.borders.radius.md,\n            backgroundColor: t.colors.inputBackground,\n            color: t.colors.text,\n            fontSize: isTouch ? t.typography.fontSize.lg : t.typography.fontSize.md,\n            resize: 'vertical' as const,\n            minHeight: isTouch ? 80 : 60,\n            fontFamily: t.typography.fontFamily,\n            outline: 'none',\n            transition: `border-color ${t.animation.duration.fast} ${t.animation.easing.default}, box-shadow ${t.animation.duration.fast} ${t.animation.easing.default}`,\n            lineHeight: 1.5,\n            animation: `gotcha-expand-in 0.3s ${t.animation.easing.default} both`,\n            overflow: 'hidden',\n            ...customStyles?.input,\n          }}\n          disabled={isLoading}\n          aria-label=\"Follow-up feedback\"\n          onFocus={(e) => {\n            e.currentTarget.style.borderColor = t.colors.inputBorderFocus;\n            e.currentTarget.style.boxShadow = `0 0 0 3px ${t.colors.inputFocusRing}`;\n            e.currentTarget.style.backgroundColor = t.colors.inputBackgroundFocus;\n          }}\n          onBlur={(e) => {\n            e.currentTarget.style.borderColor = t.colors.inputBorder;\n            e.currentTarget.style.boxShadow = 'none';\n            e.currentTarget.style.backgroundColor = t.colors.inputBackground;\n          }}\n        />\n      )}\n\n      {/* Submit button */}\n      <button\n        type=\"submit\"\n        disabled={isLoading || !canSubmit}\n        style={{\n          width: '100%',\n          padding: isTouch ? '14px 16px' : '10px 16px',\n          border: t.colors.buttonBorder,\n          borderRadius: t.borders.radius.md,\n          backgroundColor: !canSubmit ? t.colors.buttonBackgroundDisabled : t.colors.buttonBackground,\n          color: !canSubmit ? t.colors.buttonColorDisabled : t.colors.buttonColor,\n          fontSize: isTouch ? t.typography.fontSize.lg : t.typography.fontSize.md,\n          fontWeight: t.typography.fontWeight.medium,\n          fontFamily: t.typography.fontFamily,\n          cursor: isLoading ? 'not-allowed' : 'pointer',\n          transition: `all ${t.animation.duration.fast} ${t.animation.easing.default}`,\n          letterSpacing: '0.01em',\n          opacity: isLoading ? 0.8 : 1,\n          display: 'flex',\n          alignItems: 'center',\n          justifyContent: 'center',\n          gap: 8,\n          marginTop: 12,\n          ...(isLoading ? {\n            backgroundImage: `linear-gradient(90deg, transparent 0%, rgba(255,255,255,0.1) 50%, transparent 100%)`,\n            backgroundSize: '200% 100%',\n            animation: 'gotcha-shimmer 1.5s ease infinite',\n          } : {}),\n          ...customStyles?.submitButton,\n        }}\n        onMouseEnter={(e) => {\n          if (!e.currentTarget.disabled) {\n            e.currentTarget.style.backgroundColor = t.colors.buttonBackgroundHover;\n            e.currentTarget.style.transform = 'translateY(-1px)';\n            e.currentTarget.style.boxShadow = t.shadows.button;\n          }\n        }}\n        onMouseLeave={(e) => {\n          if (!e.currentTarget.disabled) {\n            e.currentTarget.style.backgroundColor = !canSubmit ? t.colors.buttonBackgroundDisabled : t.colors.buttonBackground;\n            e.currentTarget.style.transform = 'translateY(0)';\n            e.currentTarget.style.boxShadow = 'none';\n          }\n        }}\n      >\n        {isLoading && <Spinner size={isTouch ? 18 : 16} color={t.colors.buttonColor} />}\n        {isLoading ? (isEditing ? 'Updating...' : 'Submitting...') : (isEditing ? 'Update' : submitText)}\n      </button>\n    </form>\n  );\n}\n","import React, { useRef, useEffect, useState, useMemo } from 'react';\nimport { Theme, GotchaStyles, ResponseMode, ExistingResponse } from '../types';\nimport { ResolvedTheme } from '../theme/tokens';\nimport { resolveTheme } from '../theme/resolveTheme';\nimport { injectStyles } from '../theme/styles';\nimport { cn } from '../utils/cn';\nimport { useGotchaContext } from './GotchaProvider';\nimport { FeedbackMode } from './modes/FeedbackMode';\nimport { VoteMode } from './modes/VoteMode';\nimport { PollMode } from './modes/PollMode';\nimport { NpsMode } from './modes/NpsMode';\n\nexport interface GotchaModalProps {\n  mode: ResponseMode;\n  theme: Theme;\n  customStyles?: GotchaStyles;\n  promptText?: string;\n  placeholder?: string;\n  submitText: string;\n  thankYouMessage: string;\n  // State\n  isLoading: boolean;\n  isSubmitted: boolean;\n  error: string | null;\n  // Edit mode\n  existingResponse?: ExistingResponse | null;\n  isEditing?: boolean;\n  // Vote mode\n  voteLabels?: { up: string; down: string };\n  // Feedback mode field visibility\n  showText?: boolean;\n  showRating?: boolean;\n  // Poll mode\n  options?: string[];\n  allowMultiple?: boolean;\n  // NPS mode\n  npsQuestion?: string;\n  npsFollowUp?: boolean;\n  npsFollowUpPlaceholder?: string;\n  npsLowLabel?: string;\n  npsHighLabel?: string;\n  // Bug flagging\n  enableBugFlag?: boolean;\n  bugFlagLabel?: string;\n  // Handlers\n  onSubmit: (data: { content?: string; rating?: number; vote?: 'up' | 'down'; pollSelected?: string[]; isBug?: boolean }) => void;\n  onClose: () => void;\n  // Position info from parent\n  anchorRect?: DOMRect;\n  /**\n   * When true (desktop portal), use fixed positioning relative to the viewport\n   * instead of absolute positioning relative to the container.\n   */\n  useFixedPosition?: boolean;\n}\n\nexport function GotchaModal({\n  mode,\n  theme,\n  customStyles,\n  promptText,\n  placeholder,\n  submitText,\n  thankYouMessage,\n  isLoading,\n  isSubmitted,\n  error,\n  existingResponse,\n  isEditing = false,\n  showText = true,\n  showRating = true,\n  voteLabels,\n  options,\n  allowMultiple = false,\n  npsQuestion,\n  npsFollowUp = true,\n  npsFollowUpPlaceholder,\n  npsLowLabel,\n  npsHighLabel,\n  enableBugFlag = false,\n  bugFlagLabel,\n  onSubmit,\n  onClose,\n  anchorRect,\n  useFixedPosition = false,\n}: GotchaModalProps) {\n  const modalRef = useRef<HTMLDivElement>(null);\n  const firstFocusableRef = useRef<HTMLButtonElement>(null);\n  const onCloseRef = useRef(onClose);\n  onCloseRef.current = onClose;\n\n  const [isMobile, setIsMobile] = useState(false);\n  const [systemTheme, setSystemTheme] = useState<'light' | 'dark'>('light');\n\n  const { themeConfig } = useGotchaContext();\n\n  // Detect mobile and system theme after mount (SSR-safe)\n  useEffect(() => {\n    setIsMobile(window.innerWidth < 640);\n\n    const darkQuery = window.matchMedia('(prefers-color-scheme: dark)');\n    setSystemTheme(darkQuery.matches ? 'dark' : 'light');\n\n    const handler = (e: MediaQueryListEvent) => setSystemTheme(e.matches ? 'dark' : 'light');\n    darkQuery.addEventListener('change', handler);\n    return () => darkQuery.removeEventListener('change', handler);\n  }, []);\n\n  // Resolve theme with provider config\n  const t: ResolvedTheme = useMemo(\n    () => resolveTheme(theme, systemTheme, themeConfig),\n    [theme, systemTheme, themeConfig]\n  );\n\n  // Re-inject styles when theme changes\n  useEffect(() => {\n    injectStyles(t);\n  }, [t]);\n\n  // Determine if modal should appear above or below\n  // Only compute on client after mount (anchorRect is only set on client)\n  const showAbove = (() => {\n    if (typeof window === 'undefined' || !anchorRect) return false;\n    const spaceBelow = window.innerHeight - anchorRect.bottom;\n    return spaceBelow < 300;\n  })();\n\n  // Focus trap — use ref for onClose so effect runs once\n  useEffect(() => {\n    const modal = modalRef.current;\n    if (!modal) return;\n\n    firstFocusableRef.current?.focus();\n\n    const handleKeyDown = (e: KeyboardEvent) => {\n      if (e.key === 'Escape') {\n        onCloseRef.current();\n        return;\n      }\n\n      if (e.key === 'Tab') {\n        const focusableElements = modal.querySelectorAll<HTMLElement>(\n          'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n        );\n        const firstElement = focusableElements[0];\n        const lastElement = focusableElements[focusableElements.length - 1];\n\n        if (e.shiftKey && document.activeElement === firstElement) {\n          e.preventDefault();\n          lastElement?.focus();\n        } else if (!e.shiftKey && document.activeElement === lastElement) {\n          e.preventDefault();\n          firstElement?.focus();\n        }\n      }\n    };\n\n    document.addEventListener('keydown', handleKeyDown);\n    return () => document.removeEventListener('keydown', handleKeyDown);\n  }, []);\n\n  const defaultPrompt = mode === 'vote'\n    ? 'What do you think?'\n    : mode === 'poll'\n    ? 'Cast your vote'\n    : mode === 'nps'\n    ? (npsQuestion || 'How likely are you to recommend us?')\n    : 'What do you think of this feature?';\n\n  const modalPadding = isMobile ? 24 : 20;\n  const modalWidth = mode === 'nps' ? 420 : 340;\n\n  // Animation class\n  const animationClass = isMobile\n    ? 'gotcha-modal-enter-center'\n    : showAbove\n    ? 'gotcha-modal-enter-above'\n    : 'gotcha-modal-enter';\n\n  const viewportHeight = typeof window !== 'undefined' ? window.innerHeight : 0;\n\n  const modalStyles: React.CSSProperties = isMobile\n    ? {\n        position: 'fixed',\n        left: '50%',\n        top: '50%',\n        transform: 'translate(-50%, -50%)',\n        width: 'calc(100vw - 32px)',\n        maxWidth: modalWidth,\n        padding: modalPadding,\n        borderRadius: t.borders.radius.lg + 2,\n        background: t.colors.backgroundGradient,\n        color: t.colors.text,\n        boxShadow: t.shadows.modal,\n        border: `${t.borders.width}px solid ${t.colors.border}`,\n        zIndex: 9999,\n        fontFamily: t.typography.fontFamily,\n        ...customStyles?.modal,\n        textAlign: 'left' as const,\n      }\n    : useFixedPosition && anchorRect && viewportHeight\n    ? {\n        position: 'fixed',\n        left: anchorRect.left + anchorRect.width / 2,\n        width: modalWidth,\n        padding: modalPadding,\n        borderRadius: t.borders.radius.lg,\n        background: t.colors.backgroundGradient,\n        color: t.colors.text,\n        boxShadow: t.shadows.modal,\n        border: `${t.borders.width}px solid ${t.colors.border}`,\n        zIndex: 99999,\n        fontFamily: t.typography.fontFamily,\n        ...(showAbove\n          ? { bottom: viewportHeight - anchorRect.top + 8, transform: 'translateX(-50%)' }\n          : { top: anchorRect.bottom + 8, transform: 'translateX(-50%)' }),\n        ...customStyles?.modal,\n        textAlign: 'left' as const,\n      }\n    : {\n        position: 'absolute' as const,\n        left: '50%',\n        width: modalWidth,\n        padding: modalPadding,\n        borderRadius: t.borders.radius.lg,\n        background: t.colors.backgroundGradient,\n        color: t.colors.text,\n        boxShadow: t.shadows.modal,\n        border: `${t.borders.width}px solid ${t.colors.border}`,\n        zIndex: 9999,\n        fontFamily: t.typography.fontFamily,\n        ...(showAbove\n          ? { bottom: '100%', marginBottom: 8, transform: 'translateX(-50%)' }\n          : { top: '100%', marginTop: 8, transform: 'translateX(-50%)' }),\n        ...customStyles?.modal,\n        textAlign: 'left' as const,\n      };\n\n  // Stagger delay for form elements (desktop only — mobile centering is disrupted by staggered opacity)\n  const fadeUpStyle = (index: number): React.CSSProperties =>\n    isMobile\n      ? {}\n      : {\n          animation: `gotcha-fade-up ${t.animation.duration.normal} ${t.animation.easing.default} both`,\n          animationDelay: `${index * 0.05}s`,\n        };\n\n  // \"Gotcha!\" success branding\n  const isDefaultThankYou = thankYouMessage === 'Gotcha!' || thankYouMessage === 'Thanks for your feedback!';\n\n  return (\n    <div\n      ref={modalRef}\n      role=\"dialog\"\n      aria-modal=\"true\"\n      aria-label={isSubmitted ? 'Feedback submitted' : undefined}\n      aria-labelledby={isSubmitted ? undefined : 'gotcha-modal-title'}\n      data-gotcha\n      style={modalStyles}\n      className={cn('gotcha-modal', animationClass)}\n    >\n      {/* Close button */}\n      <button\n        ref={firstFocusableRef}\n        type=\"button\"\n        onClick={onClose}\n        aria-label=\"Close feedback form\"\n        style={{\n          position: 'absolute',\n          top: isMobile ? 10 : 6,\n          right: isMobile ? 10 : 6,\n          width: isMobile ? 40 : 36,\n          height: isMobile ? 40 : 36,\n          border: 'none',\n          background: 'transparent',\n          outline: 'none',\n          cursor: 'pointer',\n          zIndex: 10,\n          color: t.colors.closeButton,\n          display: 'flex',\n          alignItems: 'center',\n          justifyContent: 'center',\n          borderRadius: t.borders.radius.sm,\n          transition: `all ${t.animation.duration.fast} ${t.animation.easing.default}`,\n          ...customStyles?.closeButton,\n        }}\n        onMouseEnter={(e) => {\n          e.currentTarget.style.backgroundColor = t.colors.closeButtonBg;\n          e.currentTarget.style.color = t.colors.closeButtonHover;\n        }}\n        onMouseLeave={(e) => {\n          e.currentTarget.style.backgroundColor = 'transparent';\n          e.currentTarget.style.color = t.colors.closeButton;\n        }}\n      >\n        <svg width={isMobile ? 16 : 14} height={isMobile ? 16 : 14} viewBox=\"0 0 14 14\" fill=\"none\">\n          <path\n            d=\"M1 1L13 13M1 13L13 1\"\n            stroke=\"currentColor\"\n            strokeWidth=\"1.5\"\n            strokeLinecap=\"round\"\n          />\n        </svg>\n      </button>\n\n      {/* Title */}\n      {!isSubmitted && (\n        <h2\n          id=\"gotcha-modal-title\"\n          style={{\n            margin: '0 0 16px 0',\n            fontSize: isMobile ? t.typography.fontSize.lg : t.typography.fontSize.md,\n            fontWeight: t.typography.fontWeight.semibold,\n            paddingRight: isMobile ? 44 : 38,\n            letterSpacing: '-0.02em',\n            lineHeight: 1.4,\n            textAlign: 'left',\n            fontFamily: t.typography.fontFamily,\n            ...fadeUpStyle(0),\n            ...customStyles?.title,\n          }}\n        >\n          {promptText || defaultPrompt}\n        </h2>\n      )}\n\n      {/* Success state — \"Gotcha!\" branding moment */}\n      {isSubmitted && (\n        <div\n          style={{\n            textAlign: 'center',\n            padding: '28px 0 20px',\n          }}\n        >\n          {/* Animated checkmark circle */}\n          <div\n            style={{\n              width: 52,\n              height: 52,\n              borderRadius: '50%',\n              backgroundColor: t.colors.successSurface,\n              display: 'flex',\n              alignItems: 'center',\n              justifyContent: 'center',\n              margin: '0 auto 16px',\n              animation: `gotcha-success-pop 0.4s ${t.animation.easing.spring} both, gotcha-glow-pulse 0.8s ease 0.4s`,\n              ...customStyles?.successIcon,\n            }}\n          >\n            <svg\n              width=\"26\"\n              height=\"26\"\n              viewBox=\"0 0 24 24\"\n              fill=\"none\"\n            >\n              <path\n                d=\"M20 6L9 17L4 12\"\n                stroke={t.colors.success}\n                strokeWidth=\"2.5\"\n                strokeLinecap=\"round\"\n                strokeLinejoin=\"round\"\n                style={{\n                  strokeDasharray: 24,\n                  strokeDashoffset: 0,\n                  animation: `gotcha-check-draw 0.4s ease 0.2s both`,\n                }}\n              />\n            </svg>\n          </div>\n\n          {/* Primary message */}\n          <p\n            style={{\n              margin: 0,\n              fontSize: isDefaultThankYou ? 22 : t.typography.fontSize.md,\n              fontWeight: isDefaultThankYou ? t.typography.fontWeight.bold : t.typography.fontWeight.medium,\n              color: t.colors.text,\n              fontFamily: isDefaultThankYou ? \"'Carter One', cursive\" : t.typography.fontFamily,\n              animation: `gotcha-success-text 0.3s ease 0.3s both`,\n              ...customStyles?.successMessage,\n            }}\n          >\n            {isDefaultThankYou ? 'Gotcha!' : thankYouMessage}\n          </p>\n\n          {/* Subtitle (only for default message) */}\n          {isDefaultThankYou && (\n            <p\n              style={{\n                margin: '6px 0 0',\n                fontSize: t.typography.fontSize.sm,\n                fontWeight: t.typography.fontWeight.normal,\n                color: t.colors.textSecondary,\n                animation: `gotcha-success-text 0.3s ease 0.45s both`,\n              }}\n            >\n              Thanks for your feedback!\n            </p>\n          )}\n        </div>\n      )}\n\n      {/* Error state */}\n      {error && !isSubmitted && (\n        <div\n          style={{\n            padding: '8px 10px',\n            marginBottom: 12,\n            borderRadius: t.borders.radius.sm,\n            backgroundColor: t.colors.errorSurface,\n            border: `1px solid ${t.colors.errorBorder}`,\n            color: t.colors.error,\n            fontSize: t.typography.fontSize.sm,\n            lineHeight: 1.4,\n            display: 'flex',\n            alignItems: 'center',\n            gap: 8,\n            ...fadeUpStyle(1),\n            ...customStyles?.errorMessage,\n          }}\n        >\n          <svg width={14} height={14} viewBox=\"0 0 24 24\" fill=\"none\" style={{ flexShrink: 0 }}>\n            <path d=\"M12 9v3.75m-9.303 3.376c-.866 1.5.217 3.374 1.948 3.374h14.71c1.73 0 2.813-1.874 1.948-3.374L13.949 3.378c-.866-1.5-3.032-1.5-3.898 0L2.697 16.126zM12 15.75h.007v.008H12v-.008z\" stroke=\"currentColor\" strokeWidth={1.5} strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n          </svg>\n          {error}\n        </div>\n      )}\n\n      {/* Form content based on mode */}\n      {!isSubmitted && (\n        <div style={fadeUpStyle(1)}>\n          {mode === 'feedback' && (\n            <FeedbackMode\n              resolvedTheme={t}\n              placeholder={placeholder}\n              submitText={submitText}\n              isLoading={isLoading}\n              onSubmit={onSubmit}\n              customStyles={customStyles}\n              initialValues={existingResponse ? {\n                content: existingResponse.content,\n                rating: existingResponse.rating,\n              } : undefined}\n              isEditing={isEditing}\n              showText={showText}\n              showRating={showRating}\n              enableBugFlag={enableBugFlag}\n              bugFlagLabel={bugFlagLabel}\n            />\n          )}\n          {mode === 'vote' && (\n            <VoteMode\n              resolvedTheme={t}\n              isLoading={isLoading}\n              onSubmit={onSubmit}\n              initialVote={existingResponse?.vote || undefined}\n              isEditing={isEditing}\n              labels={voteLabels}\n            />\n          )}\n          {mode === 'nps' && (\n            <NpsMode\n              resolvedTheme={t}\n              submitText={submitText}\n              isLoading={isLoading}\n              onSubmit={onSubmit}\n              showFollowUp={npsFollowUp}\n              followUpPlaceholder={npsFollowUpPlaceholder}\n              lowLabel={npsLowLabel}\n              highLabel={npsHighLabel}\n              customStyles={customStyles}\n              initialValues={existingResponse ? {\n                rating: existingResponse.rating,\n                content: existingResponse.content,\n              } : undefined}\n              isEditing={isEditing}\n            />\n          )}\n          {mode === 'poll' && options && options.length > 0 && (\n            <PollMode\n              resolvedTheme={t}\n              options={options}\n              allowMultiple={allowMultiple}\n              isLoading={isLoading}\n              onSubmit={onSubmit}\n              initialSelected={existingResponse?.pollSelected || undefined}\n              isEditing={isEditing}\n            />\n          )}\n        </div>\n      )}\n\n      {/* Screen reader announcement */}\n      <div aria-live=\"polite\" className=\"sr-only\" style={{ position: 'absolute', left: -9999 }}>\n        {isSubmitted && 'Thank you! Your feedback has been submitted.'}\n        {error && `Error: ${error}`}\n      </div>\n    </div>\n  );\n}\n","import React, { useState, useCallback, useEffect, useRef } from 'react';\nimport { createPortal } from 'react-dom';\nimport {\n  ResponseMode,\n  GotchaUser,\n  Position,\n  Size,\n  Theme,\n  TouchBehavior,\n  GotchaStyles,\n  GotchaResponse,\n  GotchaError,\n} from '../types';\nimport { DEFAULTS } from '../constants';\nimport { useGotchaContext } from './GotchaProvider';\nimport { useSubmit } from '../hooks/useSubmit';\nimport { GotchaButton } from './GotchaButton';\nimport { GotchaModal } from './GotchaModal';\n\nexport interface GotchaProps {\n  /** Unique identifier for this element */\n  elementId: string;\n\n  // User data\n  /** User metadata for segmentation */\n  user?: GotchaUser;\n\n  // Behavior\n  /** Feedback mode */\n  mode?: ResponseMode;\n\n  // Feedback mode field visibility\n  /** Show the text input in feedback mode (default: true) */\n  showText?: boolean;\n  /** Show the star rating in feedback mode (default: true) */\n  showRating?: boolean;\n\n  // Vote mode specific\n  /** Custom labels for vote buttons (default: Like/Dislike) */\n  voteLabels?: { up: string; down: string };\n\n  // Poll mode specific\n  /** Required if mode is 'poll' (2-6 options) */\n  options?: string[];\n  /** Allow selecting multiple options */\n  allowMultiple?: boolean;\n\n  // NPS mode specific\n  /** Custom NPS question (default: \"How likely are you to recommend us?\") */\n  npsQuestion?: string;\n  /** Show follow-up textarea after score selection (default: true) */\n  npsFollowUp?: boolean;\n  /** Placeholder for NPS follow-up textarea */\n  npsFollowUpPlaceholder?: string;\n  /** Label for low end of NPS scale (default: \"Not likely\") */\n  npsLowLabel?: string;\n  /** Label for high end of NPS scale (default: \"Very likely\") */\n  npsHighLabel?: string;\n\n  // Appearance\n  /** Button position relative to parent */\n  position?: Position;\n  /** Button size */\n  size?: Size;\n  /** Color theme */\n  theme?: Theme;\n  /** Custom style overrides */\n  customStyles?: GotchaStyles;\n  /** Control visibility programmatically */\n  visible?: boolean;\n  /** Only show when parent is hovered (default: true) */\n  showOnHover?: boolean;\n  /** Mobile behavior (default: 'always-visible') */\n  touchBehavior?: TouchBehavior;\n\n  // Content\n  /** Custom prompt text */\n  promptText?: string;\n  /** Input placeholder text */\n  placeholder?: string;\n  /** Submit button text */\n  submitText?: string;\n  /** Post-submission message */\n  thankYouMessage?: string;\n\n  // Bug flagging\n  /** Show \"Report an issue\" toggle in feedback form (default: false) */\n  enableBugFlag?: boolean;\n  /** Custom label for the bug flag toggle (default: \"Report an issue\") */\n  bugFlagLabel?: string;\n\n  // Deduplication\n  /** When true and user has already responded, show submitted state and allow review/edit instead of new submission */\n  onePerUser?: boolean;\n\n  // Animation\n  /** Enable entrance animations on the button and modal (default: true) */\n  animated?: boolean;\n\n  // Callbacks\n  /** Called after successful submission */\n  onSubmit?: (response: GotchaResponse) => void;\n  /** Called when modal opens */\n  onOpen?: () => void;\n  /** Called when modal closes */\n  onClose?: () => void;\n  /** Called on error */\n  onError?: (error: GotchaError) => void;\n}\n\nexport function Gotcha({\n  elementId,\n  user,\n  mode = 'feedback',\n  showText = true,\n  showRating = true,\n  voteLabels,\n  options,\n  allowMultiple = false,\n  npsQuestion,\n  npsFollowUp = true,\n  npsFollowUpPlaceholder,\n  npsLowLabel,\n  npsHighLabel,\n  enableBugFlag = false,\n  bugFlagLabel,\n  onePerUser = false,\n  animated = true,\n  position = DEFAULTS.POSITION,\n  size = DEFAULTS.SIZE,\n  theme = DEFAULTS.THEME,\n  customStyles,\n  visible = true,\n  showOnHover = DEFAULTS.SHOW_ON_HOVER,\n  touchBehavior = DEFAULTS.TOUCH_BEHAVIOR,\n  promptText,\n  placeholder,\n  submitText = DEFAULTS.SUBMIT_TEXT,\n  thankYouMessage = DEFAULTS.THANK_YOU_MESSAGE,\n  onSubmit,\n  onOpen,\n  onClose,\n  onError,\n}: GotchaProps) {\n  const { disabled, activeModalId, openModal, closeModal } = useGotchaContext();\n  const [isSubmitted, setIsSubmitted] = useState(false);\n  const [isParentHovered, setIsParentHovered] = useState(false);\n  const [anchorRect, setAnchorRect] = useState<DOMRect | null>(null);\n  const [isMobile, setIsMobile] = useState(false);\n  const [hasMounted, setHasMounted] = useState(false);\n  const containerRef = useRef<HTMLDivElement>(null);\n  const autoCloseTimerRef = useRef<ReturnType<typeof setTimeout>>();\n\n  // SSR-safe mount detection\n  useEffect(() => {\n    setHasMounted(true);\n    setIsMobile(window.innerWidth < 640);\n    return () => {\n      clearTimeout(autoCloseTimerRef.current);\n    };\n  }, []);\n\n  const isOpen = activeModalId === elementId;\n\n  // Scroll lock on mobile when modal is open\n  useEffect(() => {\n    if (!isOpen || !isMobile) return;\n    const prev = document.body.style.overflow;\n    document.body.style.overflow = 'hidden';\n    return () => { document.body.style.overflow = prev; };\n  }, [isOpen, isMobile]);\n\n  // Attach hover listeners to the parent element\n  useEffect(() => {\n    if (!showOnHover) return;\n\n    const container = containerRef.current;\n    if (!container) return;\n\n    const parent = container.parentElement;\n    if (!parent) return;\n\n    const handleMouseEnter = () => setIsParentHovered(true);\n    const handleMouseLeave = () => setIsParentHovered(false);\n\n    parent.addEventListener('mouseenter', handleMouseEnter);\n    parent.addEventListener('mouseleave', handleMouseLeave);\n\n    return () => {\n      parent.removeEventListener('mouseenter', handleMouseEnter);\n      parent.removeEventListener('mouseleave', handleMouseLeave);\n    };\n  }, [showOnHover]);\n\n  const { submit, isLoading, error, existingResponse, isEditing } = useSubmit({\n    elementId,\n    mode,\n    pollOptions: options,\n    user,\n    onSuccess: (response) => {\n      setIsSubmitted(true);\n      onSubmit?.(response);\n      autoCloseTimerRef.current = setTimeout(() => {\n        closeModal();\n        setIsSubmitted(false);\n      }, 3000);\n    },\n    onError: (err) => {\n      console.warn('[Gotcha] Submission failed:', err instanceof Error ? err.message : err);\n      onError?.(err as unknown as GotchaError);\n    },\n  });\n\n  const handleOpen = useCallback(() => {\n    if (containerRef.current) {\n      setAnchorRect(containerRef.current.getBoundingClientRect());\n    }\n    openModal(elementId);\n    onOpen?.();\n  }, [elementId, openModal, onOpen]);\n\n  const handleClose = useCallback(() => {\n    clearTimeout(autoCloseTimerRef.current);\n    closeModal();\n    setIsSubmitted(false);\n    onClose?.();\n  }, [closeModal, onClose]);\n\n  const handleSubmit = useCallback(\n    (data: { content?: string; rating?: number; vote?: 'up' | 'down'; pollSelected?: string[]; isBug?: boolean }) => {\n      submit(data);\n    },\n    [submit]\n  );\n\n  const effectiveSubmitText = isEditing ? 'Update' : submitText;\n\n  if (disabled || !visible) return null;\n\n  const positionStyles: Record<Position, React.CSSProperties> = {\n    'top-right': { position: 'absolute', top: 0, right: 0, transform: 'translate(50%, -50%)' },\n    'top-left': { position: 'absolute', top: 0, left: 0, transform: 'translate(-50%, -50%)' },\n    'bottom-right': { position: 'absolute', bottom: 0, right: 0, transform: 'translate(50%, 50%)' },\n    'bottom-left': { position: 'absolute', bottom: 0, left: 0, transform: 'translate(-50%, 50%)' },\n    'inline': { position: 'relative', display: 'inline-flex' },\n  };\n\n  const modalProps = {\n    mode,\n    theme,\n    customStyles,\n    promptText,\n    placeholder,\n    submitText: effectiveSubmitText,\n    thankYouMessage,\n    isLoading,\n    isSubmitted,\n    error,\n    existingResponse,\n    isEditing,\n    showText,\n    showRating,\n    voteLabels,\n    options,\n    allowMultiple,\n    npsQuestion,\n    npsFollowUp,\n    npsFollowUpPlaceholder,\n    npsLowLabel,\n    npsHighLabel,\n    enableBugFlag,\n    bugFlagLabel,\n    onSubmit: handleSubmit,\n    onClose: handleClose,\n    anchorRect: anchorRect || undefined,\n    useFixedPosition: !isMobile,\n  };\n\n  return (\n    <div\n      ref={containerRef}\n      style={{\n        ...positionStyles[position],\n        zIndex: isOpen ? 10000 : 'auto',\n      }}\n      className=\"gotcha-container\"\n      data-gotcha-element={elementId}\n    >\n      <GotchaButton\n        size={size}\n        theme={theme}\n        customStyles={customStyles}\n        showOnHover={showOnHover}\n        touchBehavior={touchBehavior}\n        onClick={handleOpen}\n        isOpen={isOpen}\n        isParentHovered={isParentHovered}\n        animated={animated}\n      />\n\n      {/* Desktop: portal without backdrop, anchored via fixed positioning */}\n      {isOpen && !isMobile && hasMounted && createPortal(\n        <GotchaModal {...modalProps} />,\n        document.body\n      )}\n\n      {/* Mobile: frosted glass backdrop portal */}\n      {isOpen && isMobile && hasMounted && createPortal(\n        <div\n          role=\"presentation\"\n          style={{\n            position: 'fixed',\n            inset: 0,\n            zIndex: 99999,\n            backgroundColor: 'rgba(0,0,0,0.4)',\n            backdropFilter: 'blur(8px)',\n            WebkitBackdropFilter: 'blur(8px)',\n          }}\n          className=\"gotcha-overlay-enter\"\n          onClick={handleClose}\n        >\n          <div onClick={(e) => e.stopPropagation()}>\n            <GotchaModal {...modalProps} />\n          </div>\n        </div>,\n        document.body\n      )}\n    </div>\n  );\n}\n","import { useState, useEffect } from 'react';\nimport { useGotchaContext } from '../components/GotchaProvider';\nimport { ScoreData } from '../types';\n\ninterface UseScoreOptions {\n  elementId: string;\n  refreshInterval?: number;\n}\n\ninterface UseScoreResult {\n  score: ScoreData | null;\n  isLoading: boolean;\n  error: string | null;\n}\n\nexport function useScore({ elementId, refreshInterval }: UseScoreOptions): UseScoreResult {\n  const { client } = useGotchaContext();\n  const [score, setScore] = useState<ScoreData | null>(null);\n  const [isLoading, setIsLoading] = useState(true);\n  const [error, setError] = useState<string | null>(null);\n\n  useEffect(() => {\n    let cancelled = false;\n\n    const fetchScore = async () => {\n      try {\n        const data = await client.getScore(elementId);\n        if (!cancelled) {\n          setScore(data);\n          setError(null);\n        }\n      } catch (err) {\n        if (!cancelled) {\n          setError(err instanceof Error ? err.message : 'Failed to load score');\n        }\n      } finally {\n        if (!cancelled) {\n          setIsLoading(false);\n        }\n      }\n    };\n\n    fetchScore();\n\n    let intervalId: ReturnType<typeof setInterval> | undefined;\n    if (refreshInterval && refreshInterval > 0) {\n      intervalId = setInterval(fetchScore, refreshInterval);\n    }\n\n    return () => {\n      cancelled = true;\n      if (intervalId) clearInterval(intervalId);\n    };\n  }, [client, elementId, refreshInterval]);\n\n  return { score, isLoading, error };\n}\n","import React, { useState, useEffect, useMemo } from 'react';\nimport { Theme, Size } from '../types';\nimport { useScore } from '../hooks/useScore';\nimport { resolveTheme } from '../theme/resolveTheme';\nimport { useGotchaContext } from './GotchaProvider';\n\nexport type ScoreVariant = 'stars' | 'number' | 'compact' | 'votes';\n\nexport interface GotchaScoreProps {\n  elementId: string;\n  variant?: ScoreVariant;\n  showCount?: boolean;\n  size?: Size;\n  theme?: Theme;\n  refreshInterval?: number;\n  style?: React.CSSProperties;\n}\n\nconst SIZE_MAP: Record<Size, {\n  fontSize: number;\n  ratingFontSize: number;\n  starSize: number;\n  gap: number;\n  pillPx: number;\n  pillPy: number;\n  barHeight: number;\n  iconSize: number;\n}> = {\n  sm: { fontSize: 11, ratingFontSize: 13, starSize: 13, gap: 5, pillPx: 8, pillPy: 4, barHeight: 3, iconSize: 12 },\n  md: { fontSize: 12.5, ratingFontSize: 15, starSize: 15, gap: 6, pillPx: 10, pillPy: 5, barHeight: 4, iconSize: 14 },\n  lg: { fontSize: 14, ratingFontSize: 18, starSize: 18, gap: 8, pillPx: 12, pillPy: 6, barHeight: 5, iconSize: 16 },\n};\n\n/** Crisp, rounded 5-point star SVG with partial fill via clipPath */\nfunction Stars({ rating, size, filledColor, emptyColor }: {\n  rating: number;\n  size: number;\n  filledColor: string;\n  emptyColor: string;\n}) {\n  const clipId = `gotcha-star-clip-${Math.random().toString(36).slice(2, 8)}`;\n  const stars = [];\n  for (let i = 1; i <= 5; i++) {\n    const fill = Math.min(1, Math.max(0, rating - (i - 1)));\n    const id = `${clipId}-${i}`;\n    stars.push(\n      <svg key={i} width={size} height={size} viewBox=\"0 0 24 24\" style={{ display: 'block' }}>\n        <defs>\n          <clipPath id={id}>\n            <rect x=\"0\" y=\"0\" width={24 * fill} height=\"24\" />\n          </clipPath>\n        </defs>\n        <path\n          d=\"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z\"\n          fill={emptyColor}\n        />\n        <path\n          d=\"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z\"\n          fill={filledColor}\n          clipPath={`url(#${id})`}\n        />\n      </svg>\n    );\n  }\n  return <span style={{ display: 'inline-flex', gap: Math.max(1, size * 0.08), alignItems: 'center' }}>{stars}</span>;\n}\n\n/** Compact positive rate bar */\nfunction PositiveBar({ rate, height, filledColor, trackColor }: {\n  rate: number;\n  height: number;\n  filledColor: string;\n  trackColor: string;\n}) {\n  return (\n    <span style={{\n      display: 'inline-block',\n      width: 48,\n      height,\n      borderRadius: height,\n      backgroundColor: trackColor,\n      overflow: 'hidden',\n      verticalAlign: 'middle',\n    }}>\n      <span style={{\n        display: 'block',\n        width: `${rate}%`,\n        height: '100%',\n        borderRadius: height,\n        background: filledColor,\n        transition: 'width 0.6s cubic-bezier(0.4, 0, 0.2, 1)',\n      }} />\n    </span>\n  );\n}\n\n/** Thumbs up SVG icon */\nfunction ThumbIcon({ size, color }: { size: number; color: string }) {\n  return (\n    <svg width={size} height={size} viewBox=\"0 0 24 24\" fill={color} style={{ display: 'block' }}>\n      <path d=\"M2 20h2c.55 0 1-.45 1-1v-9c0-.55-.45-1-1-1H2v11zm19.83-7.12c.11-.25.17-.52.17-.8V11c0-1.1-.9-2-2-2h-5.5l.92-4.65c.05-.22.02-.46-.08-.66a4.8 4.8 0 00-.88-1.12L14 2 7.59 8.41C7.21 8.79 7 9.3 7 9.83v7.84C7 18.95 8.05 20 9.34 20h8.11c.7 0 1.36-.37 1.72-.97l2.66-6.15z\" />\n    </svg>\n  );\n}\n\nexport function GotchaScore({\n  elementId,\n  variant = 'stars',\n  showCount = true,\n  size = 'md',\n  theme = 'auto',\n  refreshInterval,\n  style,\n}: GotchaScoreProps) {\n  const { score, isLoading } = useScore({ elementId, refreshInterval });\n  const [systemTheme, setSystemTheme] = useState<'light' | 'dark'>('light');\n\n  useEffect(() => {\n    if (typeof window === 'undefined') return;\n    const mq = window.matchMedia('(prefers-color-scheme: dark)');\n    setSystemTheme(mq.matches ? 'dark' : 'light');\n    const handler = (e: MediaQueryListEvent) => setSystemTheme(e.matches ? 'dark' : 'light');\n    mq.addEventListener('change', handler);\n    return () => mq.removeEventListener('change', handler);\n  }, []);\n\n  const { themeConfig } = useGotchaContext();\n  const t = useMemo(() => resolveTheme(theme, systemTheme, themeConfig), [theme, systemTheme, themeConfig]);\n\n  if (isLoading || !score) return null;\n  const s = SIZE_MAP[size];\n\n  // Color tokens from resolved theme\n  const ratingColor = t.colors.text;\n  const mutedColor = t.colors.textDisabled;\n  const starFilled = t.colors.starFilled;\n  const starEmpty = t.colors.starEmpty;\n  const positiveColor = t.colors.voteUp;\n  const positiveTrack = t.colors.starEmpty;\n\n  const baseStyle: React.CSSProperties = {\n    display: 'inline-flex',\n    alignItems: 'center',\n    gap: s.gap,\n    fontFamily: t.typography.fontFamily,\n    lineHeight: 1,\n    letterSpacing: '-0.01em',\n    WebkitFontSmoothing: 'antialiased',\n    ...style,\n  };\n\n  const countText = (n: number, singular: string) => {\n    const label = n === 1 ? singular : `${singular}s`;\n    return `${n.toLocaleString()} ${label}`;\n  };\n\n  // ── Votes variant ──────────────────────────────────────────────\n  if (variant === 'votes') {\n    const { voteCount, positiveRate } = score;\n    const total = voteCount.up + voteCount.down;\n    if (total === 0) return null;\n\n    return (\n      <span style={baseStyle}>\n        <ThumbIcon size={s.iconSize} color={positiveColor} />\n        <span style={{ fontSize: s.ratingFontSize, fontWeight: 600, color: positiveColor, fontVariantNumeric: 'tabular-nums' }}>\n          {positiveRate}%\n        </span>\n        <PositiveBar rate={positiveRate ?? 0} height={s.barHeight} filledColor={positiveColor} trackColor={positiveTrack} />\n        {showCount && (\n          <span style={{ fontSize: s.fontSize, color: mutedColor, fontWeight: 400 }}>\n            {countText(total, 'vote')}\n          </span>\n        )}\n      </span>\n    );\n  }\n\n  // ── Rating-based variants ──────────────────────────────────────\n  const { averageRating, totalResponses } = score;\n  if (averageRating === null || totalResponses === 0) return null;\n\n  const displayRating = averageRating.toFixed(1);\n\n  // ── Compact ────────────────────────────────────────────────────\n  if (variant === 'compact') {\n    return (\n      <span style={baseStyle}>\n        <svg width={s.starSize} height={s.starSize} viewBox=\"0 0 24 24\" style={{ display: 'block', flexShrink: 0 }}>\n          <path\n            d=\"M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z\"\n            fill={starFilled}\n          />\n        </svg>\n        <span style={{ fontSize: s.ratingFontSize, fontWeight: 700, color: ratingColor, fontVariantNumeric: 'tabular-nums' }}>\n          {displayRating}\n        </span>\n        {showCount && (\n          <span style={{ fontSize: s.fontSize, color: mutedColor, fontWeight: 400 }}>\n            ({totalResponses.toLocaleString()})\n          </span>\n        )}\n      </span>\n    );\n  }\n\n  // ── Number ─────────────────────────────────────────────────────\n  if (variant === 'number') {\n    return (\n      <span style={baseStyle}>\n        <span style={{ fontSize: s.ratingFontSize, fontWeight: 700, color: ratingColor, fontVariantNumeric: 'tabular-nums' }}>\n          {displayRating}\n        </span>\n        <span style={{ fontSize: s.fontSize, color: mutedColor, fontWeight: 400 }}>/ 5</span>\n        {showCount && (\n          <span style={{\n            fontSize: s.fontSize,\n            color: mutedColor,\n            fontWeight: 400,\n            marginLeft: 2,\n          }}>\n            ({countText(totalResponses, 'response')})\n          </span>\n        )}\n      </span>\n    );\n  }\n\n  // ── Stars (default) ────────────────────────────────────────────\n  return (\n    <span style={baseStyle}>\n      <Stars rating={averageRating} size={s.starSize} filledColor={starFilled} emptyColor={starEmpty} />\n      <span style={{ fontSize: s.ratingFontSize, fontWeight: 700, color: ratingColor, fontVariantNumeric: 'tabular-nums' }}>\n        {displayRating}\n      </span>\n      {showCount && (\n        <span style={{ fontSize: s.fontSize, color: mutedColor, fontWeight: 400 }}>\n          ({countText(totalResponses, 'response')})\n        </span>\n      )}\n    </span>\n  );\n}\n","import { useGotchaContext } from '../components/GotchaProvider';\n\n/**\n * Hook to access Gotcha context\n * Must be used within a GotchaProvider\n */\nexport function useGotcha() {\n  const { client, disabled, defaultUser, debug } = useGotchaContext();\n\n  return {\n    /** The API client for manual submissions */\n    client,\n    /** Whether Gotcha is globally disabled */\n    disabled,\n    /** Default user metadata */\n    defaultUser,\n    /** Whether debug mode is enabled */\n    debug,\n    /** Submit feedback programmatically */\n    submitFeedback: client.submitResponse.bind(client),\n  };\n}\n"]}