#
tokens: 35555/50000 41/45 files (page 1/5)
lines: on (toggle) GitHub
raw markdown copy reset
This is page 1 of 5. Use http://codebase.md/Xyborg/ChatGPT-Product-Info?lines=true&page={x} to view the full context.

# Directory Structure

```
├── .gitignore
├── assets
│   ├── chatgpt-product-info-reviews.png
│   └── chatgpt-product-info.png
├── chatgpt-product-info.js
├── chrome-extension
│   ├── assets
│   │   ├── flags
│   │   │   ├── all.svg
│   │   │   ├── ar.svg
│   │   │   ├── at.svg
│   │   │   ├── be.svg
│   │   │   ├── br.svg
│   │   │   ├── ch.svg
│   │   │   ├── de.svg
│   │   │   ├── es.svg
│   │   │   ├── fr.svg
│   │   │   ├── gb.svg
│   │   │   ├── it.svg
│   │   │   ├── mx.svg
│   │   │   ├── nl.svg
│   │   │   ├── pt.svg
│   │   │   ├── se.svg
│   │   │   └── us.svg
│   │   └── icons-ui
│   │       ├── analysis.svg
│   │       ├── check.svg
│   │       ├── database.svg
│   │       ├── down-arrow.svg
│   │       ├── edit.svg
│   │       ├── error.svg
│   │       ├── github.svg
│   │       ├── history.svg
│   │       ├── linkedin.svg
│   │       ├── negative.svg
│   │       ├── neutral.svg
│   │       ├── positive.svg
│   │       ├── project.svg
│   │       ├── search.svg
│   │       ├── settings.svg
│   │       ├── tag.svg
│   │       ├── up-arrow.svg
│   │       ├── warning.svg
│   │       └── x.svg
│   ├── content-script.js
│   ├── icons
│   │   ├── icon128.png
│   │   ├── icon16.png
│   │   ├── icon19.png
│   │   ├── icon32.png
│   │   ├── icon48.png
│   │   └── logobubble.svg
│   ├── manifest.json
│   ├── popup.html
│   ├── popup.js
│   ├── README.md
│   └── styles.css
├── LICENSE
└── README.md
```

# Files

--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------

```
 1 | # macOS
 2 | .DS_Store
 3 | .DS_Store?
 4 | ._*
 5 | .Spotlight-V100
 6 | .Trashes
 7 | ehthumbs.db
 8 | Thumbs.db
 9 | 
10 | # Editor directories and files
11 | .vscode/
12 | .idea/
13 | *.swp
14 | *.swo
15 | 
16 | # Logs
17 | logs
18 | *.log
19 | npm-debug.log*
20 | yarn-debug.log*
21 | yarn-error.log*
22 | 
23 | # Runtime data
24 | pids
25 | *.pid
26 | *.seed
27 | *.pid.lock
28 | 
29 | # Coverage directory used by tools like istanbul
30 | coverage/
31 | 
32 | # nyc test coverage
33 | .nyc_output
34 | 
35 | # Dependency directories
36 | node_modules/
37 | 
38 | # Optional npm cache directory
39 | .npm
40 | 
41 | # Optional REPL history
42 | .node_repl_history
43 | 
44 | # Output of 'npm pack'
45 | *.tgz
46 | 
47 | # Yarn Integrity file
48 | .yarn-integrity
49 | 
50 | # dotenv environment variables file
51 | .env
52 | 
53 | # Temporary folders
54 | tmp/
55 | temp/
56 | 
57 | # Chrome extension
58 | *.crx
59 | *.pem
60 | *.zip
61 | IMPLEMENTATION_PLAN.md
62 | store-assets/
63 | modal-prototype.html
```

--------------------------------------------------------------------------------
/chrome-extension/README.md:
--------------------------------------------------------------------------------

```markdown
  1 | # ChatGPT Product Info Search - Chrome Extension
  2 | 
  3 | A Chrome extension that adds product search functionality directly to ChatGPT, allowing you to search for product reviews, comparisons, and detailed information without leaving the page.
  4 | 
  5 | ## Features
  6 | 
  7 | ### Core Search Features
  8 | - **Single Product Search**: Search for individual products and get detailed reviews
  9 | - **Multi-Product Comparison**: Compare multiple products side-by-side in a table format
 10 | - **Multi-Market Support**: Supports multiple countries and languages, so you can receive the same answers as users in your target market.
 11 | - **Sentiment Analysis**: Visual sentiment breakdown of reviews (positive/neutral/negative)
 12 | - **Citation Links**: Direct links to source websites for more information
 13 | - **Review Themes**: Categorized review themes for easy browsing
 14 | - **Projects & Tags**: Organize every search with project assignments and tag labels for richer filtering
 15 | - **Backup & Restore**: Export your search history, projects, and tags to a JSON file for backup or transfer between devices
 16 | 
 17 | 
 18 | ### Chrome Extension Features
 19 | - **First-Time Tutorial**: Interactive walkthrough on first use to help you get started quickly
 20 | - **Search History**: Automatically save searches (up to 50) and reopen them instantly
 21 | - **Filter-Aware Reports**: Review/citation source reports that respect your active filters
 22 | - **Floating Product Bubble**: Always-visible light-yellow button with the extension logo in the bottom-right corner
 23 | - **Popup Interface**: Quick access and status checking from the Chrome toolbar
 24 | - **Responsive UI**: Clean, modern interface that works seamlessly with ChatGPT
 25 | - **Auto-Save**: All successful searches automatically saved to local history
 26 | - **Unified Project & Tag Filters**: Combine projects and tags, and have those selections stay in sync across History, Analysis, and Reports
 27 | - **History Filtering**: Text search plus synced project/tag filters to drill into past work
 28 | 
 29 | ## Installation
 30 | 
 31 | ### From Source (Developer Mode)
 32 | 
 33 | 1. **Download/Clone** this repository
 34 | 2. **Open Chrome** and navigate to `chrome://extensions/`
 35 | 3. **Enable Developer Mode** (toggle in top-right corner)
 36 | 4. **Click "Load unpacked"** and select the `chrome-extension` folder
 37 | 5. **Navigate to ChatGPT** (https://chatgpt.com) and log in
 38 | 6. **Click the extension icon** in your toolbar or look for the floating Product Info bubble on ChatGPT
 39 | 
 40 | ### From Chrome Web Store
 41 | 
 42 | *Coming soon - extension will be submitted to the Chrome Web Store*
 43 | 
 44 | ## How to Use
 45 | 
 46 | ### Getting Started
 47 | 1. **Make sure you're logged in** to ChatGPT (https://chatgpt.com)
 48 | 2. **Access the search interface** using either:
 49 |    - Click the extension icon in your Chrome toolbar → "Open Product Search"
 50 |    - Click the floating Product Info bubble in the bottom-right corner of any ChatGPT page
 51 | 3. **First-time users**: An interactive tutorial will automatically appear to guide you through the key features
 52 | 4. **Start searching** for products using natural language queries
 53 | 
 54 | ### Tutorial
 55 | - **First launch**: The tutorial automatically appears when you first open the extension
 56 | - **Re-watch anytime**: Click the **?** (help) icon in the left sidebar next to the Settings icon
 57 | - **Quick overview**: Learn about the Search tab, History, Analysis, and how to organize with Projects & Tags
 58 | 
 59 | ### Search Examples
 60 | Try searching for:
 61 | - "iPhone 17 Pro camera quality"
 62 | - "Nike Air Max running shoes" 
 63 | - "MacBook Air M3 performance"
 64 | - "Tesla Model 3 reviews"
 65 | - "best wireless headphones 2024"
 66 | 
 67 | ### Single Product Search
 68 | - Enter any product name or specific query
 69 | - Get detailed reviews, sentiment analysis, and citation links
 70 | - View product overview and review summaries
 71 | 
 72 | ### Multi-Product Search
 73 | - Toggle "Multi-product search" mode
 74 | - Enter multiple product names (one per line)
 75 | - Compare products in a convenient table format
 76 | - Click "View" to see detailed information for any product
 77 | 
 78 | ### Search History
 79 | - All successful searches are automatically saved to your history
 80 | - Click the "📋 History" tab to view your search history
 81 | - **Reopen** any previous search to view the results again
 82 | - **Filter** your history using the search box plus shared project/tag filters
 83 | - **Delete** individual searches or clear all history
 84 | - History is stored locally in your browser (up to 50 most recent searches)
 85 | - **Organize** each search with project assignments and tag labels directly from the sidebar or post-search workflow
 86 | 
 87 | ### Basic Reports
 88 | - Click the "📊 Reports" tab to view simple analytics from your search history
 89 | - **Review Sources Report**: See which websites have provided reviews in your searches
 90 | - **Citation Sources Report**: View the sources that have been cited across your searches
 91 | - Reports are generated from your local search history, processed locally, and reflect the same project/tag filters you have applied
 92 | 
 93 | ## Why This Works as a Chrome Extension
 94 | 
 95 | Unlike the original bookmarklet, this Chrome extension has several advantages:
 96 | 
 97 | ### **No CORS Issues**
 98 | - Extensions can make cross-origin requests to ChatGPT's API without restrictions
 99 | - No browser security blocks or CORS errors
100 | 
101 | ### **Better Security & Reliability**
102 | - No need to paste code into the console repeatedly
103 | - Proper extension sandboxing and permissions
104 | - Always available on ChatGPT pages
105 | - Auto-updates through Chrome's extension system
106 | - No need to re-inject code manually
107 | 
108 | ### **Enhanced User Experience**
109 | - Floating Product Info bubble (with branded icon) for instant access in the lower-right corner
110 | - Proper toolbar icon and popup interface with status checking
111 | - Persistent search history with powerful filtering and management
112 | - Filter-aware reports on search sources
113 | - Unified project/tag filters that seamlessly sync between History and Analysis views
114 | - Better error handling, status indicators, and seamless integration with ChatGPT's interface
115 | 
116 | ## Technical Details
117 | 
118 | ### Permissions Required
119 | - `activeTab`: To interact with the current ChatGPT tab
120 | - `storage`: To save search history and user preferences locally
121 | - `https://chatgpt.com/*`: To access ChatGPT's API and inject content
122 | 
123 | ### Architecture
124 | - **Content Script**: Injects the search interface and floating button into ChatGPT pages
125 | - **Popup**: Provides status checking and quick access controls from the extension toolbar
126 | - **Local Storage**: Manages search history and user data locally (no external servers)
127 | - **Manifest V3**: Uses the latest Chrome extension standards for security and performance
128 | 
129 | ### API Access
130 | The extension uses ChatGPT's internal product search API:
131 | - Automatically fetches authentication tokens from your existing session
132 | - Makes requests to `https://chatgpt.com/backend-api/search/product_info`
133 | - Parses streaming responses for real-time results
134 | - Handles authentication errors gracefully with user feedback
135 | 
136 | ## Privacy & Security
137 | 
138 | - **No data collection**: The extension doesn't collect or store any personal data externally
139 | - **Local processing**: All searches and history are processed and stored locally in your browser
140 | - **Secure authentication**: Uses your existing ChatGPT session tokens (no passwords stored)
141 | - **No external servers**: Communicates only with ChatGPT's official API
142 | - **Local storage only**: Search history and preferences stored in browser's local storage
143 | - **No tracking**: No analytics, telemetry, or user behavior tracking
144 | - **Open source**: Full code available for security review and transparency
145 | 
146 | ## Development
147 | 
148 | ### File Structure
149 | ```
150 | chrome-extension/
151 | ├── manifest.json          # Extension configuration
152 | ├── content-script.js      # Main functionality injected into ChatGPT
153 | ├── popup.html            # Extension popup interface
154 | ├── popup.js              # Popup logic and controls
155 | ├── styles.css            # Extension styles
156 | ├── assets/               # Static assets and resources
157 | └── icons/                # Extension icons (16x16 to 128x128)
158 | ```
159 | 
160 | ### Building from Source
161 | 1. Clone the repository
162 | 2. The extension is ready to load - no build process required
163 | 3. Load in Chrome developer mode for testing
164 | 
165 | ## Troubleshooting
166 | 
167 | ### Extension Not Working
168 | - Make sure you're on https://chatgpt.com (not chat.openai.com)
169 | - Refresh the ChatGPT page after installing the extension
170 | - Check that you're logged in to ChatGPT
171 | 
172 | ### Search Errors
173 | - Verify you're logged in to ChatGPT
174 | - Try refreshing the page if you get authentication errors
175 | - Check Chrome's console for detailed error messages
176 | 
177 | ### Popup Shows "Not Ready"
178 | - Navigate to ChatGPT first
179 | - Refresh the ChatGPT page
180 | - Make sure the extension is enabled in chrome://extensions/
181 | 
182 | ## Contributing
183 | 
184 | Contributions are welcome! Please feel free to submit issues or pull requests.
185 | 
186 | ## License
187 | 
188 | This project is licensed under the MIT License - see the LICENSE file for details.
189 | 
190 | ## Credits
191 | 
192 | Created by [Martin Aberastegue (@Xyborg)](https://www.martinaberastegue.com/)
193 | 
194 | Based on the original ChatGPT Product Info bookmarklet, converted to a Chrome extension for better reliability and user experience.
195 | 
```

--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------

```markdown
  1 | # ChatGPT Product Info Search 🔍
  2 | 
  3 | A powerful **Chrome extension** and browser script that **unlocks ChatGPT's internal product search API** to **fetch detailed product information, reviews, and comparisons** directly within ChatGPT's interface.
  4 | 
  5 | ![ChatGPT Product Info Search Interface](assets/chatgpt-product-info.png)
  6 | 
  7 | ## Table of Contents
  8 | 
  9 | - [Overview](#overview)
 10 | - [Installation](#installation)
 11 |   - [Chrome Extension (Recommended)](#chrome-extension-recommended)
 12 |   - [Browser Script](#browser-script)
 13 | - [Demo](#demo)
 14 | - [Features](#features)
 15 | - [How to Use](#how-to-use)
 16 | - [Search Examples](#search-examples)
 17 | - [What You'll Get](#what-youll-get)
 18 | - [Technical Details](#technical-details)
 19 | - [Browser Compatibility](#browser-compatibility)
 20 | - [Requirements](#requirements)
 21 | - [Troubleshooting](#troubleshooting)
 22 | - [Privacy & Security](#privacy--security)
 23 | - [Want to Improve Your AI Visibility?](#want-to-improve-your-ai-visibility)
 24 | - [Additional Resources](#additional-resources)
 25 | - [Contributing](#contributing)
 26 | - [Author](#author)
 27 | - [License](#license)
 28 | 
 29 | ## Overview
 30 | 
 31 | This project provides two ways to access ChatGPT's internal product search API: a Chrome extension (recommended) and a browser script. Both create a modal interface within ChatGPT that allows you to search for product information, reviews, and detailed comparisons. They automatically handle authentication and present results in an organized, easy-to-read format.
 32 | 
 33 | ## Installation
 34 | 
 35 | ### Chrome Extension (Recommended)
 36 | 
 37 | The Chrome extension provides the best experience with enhanced features and reliability.
 38 | 
 39 | #### From Source (Developer Mode)
 40 | 1. **Download/Clone** this repository
 41 | 2. **Open Chrome** and navigate to `chrome://extensions/`
 42 | 3. **Enable Developer Mode** (toggle in top-right corner)
 43 | 4. **Click "Load unpacked"** and select the `chrome-extension` folder
 44 | 5. **Navigate to ChatGPT** (https://chatgpt.com) and log in
 45 | 6. **Click the extension icon** in your toolbar or look for the floating 🛍️ button on ChatGPT
 46 | 
 47 | #### From Chrome Web Store
 48 | *Coming soon - extension will be submitted to the Chrome Web Store*
 49 | 
 50 | #### Chrome Extension Features
 51 | - ✅ **No CORS Issues**: Extensions can make cross-origin requests without restrictions
 52 | - ✅ **Floating Button**: Always visible 🛍️ button on ChatGPT pages
 53 | - ✅ **Popup Interface**: Clean status indicator and quick access controls
 54 | - ✅ **Search History**: Persistent search history with filtering and management
 55 | - ✅ **Auto-Updates**: Automatic updates through Chrome's extension system
 56 | - ✅ **Better Security**: No need to paste code into console repeatedly
 57 | - ✅ **Enhanced UX**: Proper error handling and status indicators
 58 | 
 59 | ### Browser Script
 60 | 
 61 | For users who prefer not to install extensions or use other browsers.
 62 | 
 63 | ## Demo
 64 | 
 65 | ### Single Product Search
 66 | 
 67 | https://github.com/user-attachments/assets/b5472c48-1cd9-496b-b120-3fd548582f9f
 68 | 
 69 | ### Multi-Product Search
 70 | 
 71 | https://github.com/user-attachments/assets/9e661765-098e-48c6-ac1b-dc3f4c3e725e
 72 | 
 73 | ## Features
 74 | 
 75 | ### Core Features
 76 | - 🔍 **Single Product Search**: Search for individual products and get detailed reviews
 77 | - 📊 **Multi-Product Comparison**: Compare multiple products side-by-side in a table format
 78 | - 📋 **Search History**: Automatically save all your searches and easily reopen them later (Chrome extension)
 79 | - 🎯 **Sentiment Analysis**: Visual sentiment breakdown of reviews (positive/neutral/negative)
 80 | - 🔗 **Citation Links**: Direct links to source websites for more information
 81 | - 🏷️ **Review Themes**: Categorized review themes for easy browsing
 82 | - 📱 **Responsive UI**: Clean, modern interface that works seamlessly with ChatGPT
 83 | 
 84 | ### Advanced Features
 85 | - **Auto Authentication**: Automatically fetches your ChatGPT session token
 86 | - **Real-time Results**: Live streaming of search results as they come in
 87 | - **Comprehensive Results**: Get product details, reviews, ratings, and merchant offers
 88 | - **Review Analysis**: AI-generated summaries with sentiment breakdown
 89 | 
 90 | ## How to Use
 91 | 
 92 | ### Chrome Extension (Recommended)
 93 | 
 94 | 1. **Make sure you're logged in** to ChatGPT (https://chatgpt.com)
 95 | 2. **Click the extension icon** in your Chrome toolbar to check status
 96 | 3. **Click "Open Product Search"** or use the floating 🛍️ button on ChatGPT
 97 | 4. **Search for products** using natural language queries
 98 | 5. **Use tabs** to switch between Search, History, and Reports
 99 | 
100 | #### Single Product Search
101 | - Enter any product name or specific query
102 | - Get detailed reviews, sentiment analysis, and citation links
103 | - View product overview and review summaries
104 | 
105 | #### Multi-Product Search
106 | - Toggle "Multi-product search" mode
107 | - Enter multiple product names (one per line)
108 | - Compare products in a convenient table format
109 | - Click "View" to see detailed information for any product
110 | 
111 | #### Search History
112 | - All successful searches are automatically saved to your history
113 | - Click the "📋 History" tab to view your search history
114 | - **Reopen** any previous search to view the results again
115 | - **Filter** your history using the search box
116 | - **Delete** individual searches or clear all history
117 | - History is stored locally in your browser (up to 50 most recent searches)
118 | 
119 | ### Browser Script
120 | 
121 | #### Method 1: Browser Console
122 | 
123 | 1. **Open ChatGPT** in your browser and make sure you're logged in
124 | 2. **Open Developer Tools**:
125 |    - **Chrome/Edge**: Press `F12` or `Ctrl+Shift+I` (Windows) / `Cmd+Option+I` (Mac)
126 |    - **Firefox**: Press `F12` or `Ctrl+Shift+I` (Windows) / `Cmd+Option+I` (Mac)
127 |    - **Safari**: Press `Cmd+Option+I` (Mac) - you may need to enable Developer Tools first
128 | 3. **Go to Console tab** in the Developer Tools
129 | 4. **Copy the entire content of the script** from `chatgpt-product-info.js`
130 | 5. **Paste and press Enter** - the modal will appear immediately
131 | 6. **Start searching** for products!
132 | 
133 | #### Method 2: Bookmarklet
134 | 
135 | Due to CORS restrictions, you'll need to create a proper bookmarklet using a bookmarklet generator:
136 | 
137 | 1. **Copy the entire script** from `chatgpt-product-info.js`
138 | 2. **Go to a bookmarklet generator**:
139 |    - [Bookmarkleter](https://chriszarate.github.io/bookmarkleter) (Recommended)
140 |    - [Bookmarklet Maker](https://caiorss.github.io/bookmarklet-maker)
141 | 3. **Paste the script** into the generator
142 | 4. **Generate the bookmarklet** - it will create a `javascript:` URL
143 | 5. **Create a new bookmark** in your browser with:
144 |    - **Name**: "ChatGPT Product Search" 
145 |    - **URL**: The generated `javascript:` code
146 | 6. **Visit ChatGPT** and click the bookmark to launch the search tool
147 | 
148 | **Note**: The bookmarklet will be quite long due to the script size, but it will work properly without CORS issues.
149 | 
150 | ## Search Examples
151 | 
152 | Try these search queries to see the power of the tool:
153 | 
154 | - `"iPhone 17 Pro camera quality"`
155 | - `"Nike Air Max running shoes"`
156 | - `"MacBook Air M3 performance"`
157 | - `"Tesla Model 3 reviews"`
158 | - `"Pets Deli Hundefutter"`
159 | 
160 | ## What You'll Get
161 | 
162 | ### Product Information
163 | - **Product Details**: Title, price, description, ratings when available.
164 | 
165 | ### Review Analysis
166 | - **Review Summary**: AI-generated overview of all reviews
167 | - **Sentiment Breakdown**: Visual representation of positive/negative/neutral reviews
168 | - **Review Themes**: Common topics mentioned across reviews
169 | - **Source Citations**: Direct links to original review sources
170 | 
171 | ![ChatGPT Product Info Search Reviews Interface](assets/chatgpt-product-info-reviews.png)
172 | 
173 | ### Additional Data
174 | - **Product Overview**: AI rationale explaining the product category
175 | - **Citation Links**: All source websites with favicons and snippets
176 | 
177 | ## Technical Details
178 | 
179 | ### How It Works
180 | 
181 | The script leverages ChatGPT's internal `/backend-api/search/product_info` endpoint, which is the same API that powers ChatGPT's built-in product search functionality. It:
182 | 
183 | 1. **Authenticates** using your existing ChatGPT session
184 | 2. **Sends search queries** to ChatGPT's product API
185 | 3. **Parses streaming responses** in real-time
186 | 4. **Extracts structured data** including products, reviews, and citations
187 | 5. **Renders results** in a beautiful, organized interface
188 | 
189 | ### API Endpoint
190 | ```
191 | POST https://chatgpt.com/backend-api/search/product_info
192 | ```
193 | 
194 | ### Authentication
195 | The script automatically fetches your session token from `/api/auth/session` - no manual token input required!
196 | 
197 | ### Data Structure
198 | The API returns structured data including:
199 | - Product entities with pricing and merchant information
200 | - Review summaries with sentiment analysis
201 | - Citation links to source websites
202 | - Rationale and summary text
203 | 
204 | ## Browser Compatibility
205 | 
206 | - ✅ **Chrome** (Recommended)
207 | - ✅ **Firefox**
208 | - ✅ **Safari**
209 | - ✅ **Opera**
210 | 
211 | ## Requirements
212 | 
213 | - Active ChatGPT account (free or paid)
214 | - Modern web browser with JavaScript enabled
215 | - Must be used on chatgpt.com domain
216 | 
217 | ## Troubleshooting
218 | 
219 | ### Chrome Extension Issues
220 | 
221 | #### Extension Not Working
222 | - Make sure you're on https://chatgpt.com (not chat.openai.com)
223 | - Refresh the ChatGPT page after installing the extension
224 | - Check that you're logged in to ChatGPT
225 | - Verify the extension is enabled in chrome://extensions/
226 | 
227 | #### Popup Shows "Not Ready"
228 | - Navigate to ChatGPT first
229 | - Refresh the ChatGPT page
230 | - Make sure the extension is enabled in chrome://extensions/
231 | 
232 | #### Floating Button Not Visible
233 | - Check if you're on the correct ChatGPT domain
234 | - Refresh the page
235 | - Look for the 🛍️ button in the bottom-right area of the page
236 | 
237 | ### General Issues
238 | 
239 | #### "Failed to get authentication token"
240 | - Make sure you're logged in to ChatGPT
241 | - Refresh the ChatGPT page and try again
242 | - Check that you're on the correct chatgpt.com domain
243 | 
244 | #### "No results found"
245 | - Try different search terms
246 | - Use more specific product names
247 | - Include brand or product names in your search
248 | 
249 | #### Modal doesn't appear (Browser Script)
250 | - Make sure JavaScript is enabled
251 | - Check browser console for errors
252 | - Try refreshing the page and running the script again
253 | 
254 | ## Privacy & Security
255 | 
256 | ### Chrome Extension
257 | - **No data collection**: The extension doesn't collect or store any personal data
258 | - **Local processing**: All searches are processed locally in your browser
259 | - **Secure authentication**: Uses your existing ChatGPT session tokens
260 | - **No external servers**: Communicates only with ChatGPT's official API
261 | - **Local storage only**: Search history is stored locally in your browser
262 | 
263 | ### Browser Script
264 | - **No data collection**: The script runs entirely in your browser
265 | - **Uses your session**: Leverages your existing ChatGPT authentication
266 | - **No external servers**: All requests go directly to ChatGPT's API
267 | - **No chat history impact**: This won't create new chats, so you won't see it in your history
268 | 
269 | ### Both Methods
270 | - **Open source**: Full code is available for inspection
271 | - **Secure by design**: No third-party data sharing or analytics
272 | 
273 | ## Want to Improve Your AI Visibility?
274 | 
275 | If you're a business owner or marketer, you might be wondering: **"How do I get MY products to show up in ChatGPT search results?"**
276 | 
277 | [**Try Finseo**](https://www.finseo.ai/?ref=gptproductsearch) - The next-gen AI SEO platform that helps you:
278 | - **Track your brand visibility** across ChatGPT, Claude, Perplexity, and other AI platforms
279 | - **Monitor what AI says** about your business and products
280 | - **Get actionable recommendations** to improve your presence in AI search results
281 | - **Stay ahead of competitors** in the AI search landscape
282 | 
283 | *Perfect complement to this product search tool - see what others are finding, then optimize your own products to be discovered!*
284 | 
285 | ## Additional Resources
286 | 
287 | Learn more about ChatGPT's product discovery capabilities:
288 | 
289 | - **[Help ChatGPT discover your products](https://openai.com/chatgpt/search-product-discovery)** - Official guide for businesses on how to make their products discoverable in ChatGPT Search
290 | - **[Improved Shopping Results from ChatGPT Search, and How Product Results are Selected](https://help.openai.com/en/articles/11128490-improved-shopping-results-from-chatgpt-search)** - Detailed explanation of how ChatGPT selects and ranks product results
291 | 
292 | ## Contributing
293 | 
294 | Feel free to submit issues, feature requests, or pull requests on GitHub!
295 | 
296 | ## Author
297 | 
298 | Created by [Martin Aberastegue (@Xyborg)](https://www.martinaberastegue.com/)
299 | 
300 | *Originally developed as a browser script, now enhanced with a full-featured Chrome extension for better reliability and user experience.*
301 | 
302 | ## License
303 | 
304 | MIT License - feel free to modify and use as needed!
305 | 
306 | ---
307 | 
308 | **Note**: This tool uses ChatGPT's internal API and is intended for educational and personal use. Please respect ChatGPT's terms of service.
309 | 
310 | **Recommendation**: Use the Chrome extension for the best experience with persistent history, enhanced UI, and automatic updates.
```

--------------------------------------------------------------------------------
/chrome-extension/assets/flags/at.svg:
--------------------------------------------------------------------------------

```
1 | <svg xmlns="http://www.w3.org/2000/svg" id="flag-icons-at" viewBox="0 0 640 480">
2 |   <path fill="#fff" d="M0 160h640v160H0z"/>
3 |   <path fill="#c8102e" d="M0 0h640v160H0zm0 320h640v160H0z"/>
4 | </svg>
5 | 
```

--------------------------------------------------------------------------------
/chrome-extension/assets/flags/se.svg:
--------------------------------------------------------------------------------

```
1 | <svg xmlns="http://www.w3.org/2000/svg" id="flag-icons-se" viewBox="0 0 640 480">
2 |   <path fill="#005293" d="M0 0h640v480H0z"/>
3 |   <path fill="#fecb00" d="M176 0v192H0v96h176v192h96V288h368v-96H272V0z"/>
4 | </svg>
5 | 
```

--------------------------------------------------------------------------------
/chrome-extension/assets/flags/de.svg:
--------------------------------------------------------------------------------

```
1 | <svg xmlns="http://www.w3.org/2000/svg" id="flag-icons-de" viewBox="0 0 640 480">
2 |   <path fill="#fc0" d="M0 320h640v160H0z"/>
3 |   <path fill="#000001" d="M0 0h640v160H0z"/>
4 |   <path fill="red" d="M0 160h640v160H0z"/>
5 | </svg>
6 | 
```

--------------------------------------------------------------------------------
/chrome-extension/assets/flags/nl.svg:
--------------------------------------------------------------------------------

```
1 | <svg xmlns="http://www.w3.org/2000/svg" id="flag-icons-nl" viewBox="0 0 640 480">
2 |   <path fill="#ae1c28" d="M0 0h640v160H0z"/>
3 |   <path fill="#fff" d="M0 160h640v160H0z"/>
4 |   <path fill="#21468b" d="M0 320h640v160H0z"/>
5 | </svg>
6 | 
```

--------------------------------------------------------------------------------
/chrome-extension/assets/flags/fr.svg:
--------------------------------------------------------------------------------

```
1 | <svg xmlns="http://www.w3.org/2000/svg" id="flag-icons-fr" viewBox="0 0 640 480">
2 |   <path fill="#fff" d="M0 0h640v480H0z"/>
3 |   <path fill="#000091" d="M0 0h213.3v480H0z"/>
4 |   <path fill="#e1000f" d="M426.7 0H640v480H426.7z"/>
5 | </svg>
6 | 
```

--------------------------------------------------------------------------------
/chrome-extension/assets/icons-ui/search.svg:
--------------------------------------------------------------------------------

```
1 | <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M229.66,218.34l-50.07-50.06a88.11,88.11,0,1,0-11.31,11.31l50.06,50.07a8,8,0,0,0,11.32-11.32ZM40,112a72,72,0,1,1,72,72A72.08,72.08,0,0,1,40,112Z"></path></svg>
```

--------------------------------------------------------------------------------
/chrome-extension/assets/flags/it.svg:
--------------------------------------------------------------------------------

```
1 | <svg xmlns="http://www.w3.org/2000/svg" id="flag-icons-it" viewBox="0 0 640 480">
2 |   <g fill-rule="evenodd" stroke-width="1pt">
3 |     <path fill="#fff" d="M0 0h640v480H0z"/>
4 |     <path fill="#009246" d="M0 0h213.3v480H0z"/>
5 |     <path fill="#ce2b37" d="M426.7 0H640v480H426.7z"/>
6 |   </g>
7 | </svg>
8 | 
```

--------------------------------------------------------------------------------
/chrome-extension/assets/flags/ch.svg:
--------------------------------------------------------------------------------

```
 1 | <svg xmlns="http://www.w3.org/2000/svg" id="flag-icons-ch" viewBox="0 0 640 480">
 2 |   <g fill-rule="evenodd" stroke-width="1pt">
 3 |     <path fill="red" d="M0 0h640v480H0z"/>
 4 |     <g fill="#fff">
 5 |       <path d="M170 195h300v90H170z"/>
 6 |       <path d="M275 90h90v300h-90z"/>
 7 |     </g>
 8 |   </g>
 9 | </svg>
10 | 
```

--------------------------------------------------------------------------------
/chrome-extension/assets/flags/be.svg:
--------------------------------------------------------------------------------

```
1 | <svg xmlns="http://www.w3.org/2000/svg" id="flag-icons-be" viewBox="0 0 640 480">
2 |   <g fill-rule="evenodd" stroke-width="1pt">
3 |     <path fill="#000001" d="M0 0h213.3v480H0z"/>
4 |     <path fill="#ffd90c" d="M213.3 0h213.4v480H213.3z"/>
5 |     <path fill="#f31830" d="M426.7 0H640v480H426.7z"/>
6 |   </g>
7 | </svg>
8 | 
```

--------------------------------------------------------------------------------
/chrome-extension/assets/icons-ui/project.svg:
--------------------------------------------------------------------------------

```
1 | <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M216,72H131.31L104,44.69A15.86,15.86,0,0,0,92.69,40H40A16,16,0,0,0,24,56V200.62A15.4,15.4,0,0,0,39.38,216H216.89A15.13,15.13,0,0,0,232,200.89V88A16,16,0,0,0,216,72ZM40,56H92.69l16,16H40ZM216,200H40V88H216Z"></path></svg>
```

--------------------------------------------------------------------------------
/chrome-extension/assets/icons-ui/tag.svg:
--------------------------------------------------------------------------------

```
1 | <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M243.31,136,144,36.69A15.86,15.86,0,0,0,132.69,32H40a8,8,0,0,0-8,8v92.69A15.86,15.86,0,0,0,36.69,144L136,243.31a16,16,0,0,0,22.63,0l84.68-84.68a16,16,0,0,0,0-22.63Zm-96,96L48,132.69V48h84.69L232,147.31ZM96,84A12,12,0,1,1,84,72,12,12,0,0,1,96,84Z"></path></svg>
```

--------------------------------------------------------------------------------
/chrome-extension/assets/icons-ui/neutral.svg:
--------------------------------------------------------------------------------

```
1 | <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm0,192a88,88,0,1,1,88-88A88.1,88.1,0,0,1,128,216Zm48-56a8,8,0,0,1-8,8H88a8,8,0,0,1,0-16h80A8,8,0,0,1,176,160ZM80,108a12,12,0,1,1,12,12A12,12,0,0,1,80,108Zm96,0a12,12,0,1,1-12-12A12,12,0,0,1,176,108Z"></path></svg>
```

--------------------------------------------------------------------------------
/chrome-extension/assets/icons-ui/up-arrow.svg:
--------------------------------------------------------------------------------

```
1 | <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M229.66,114.34l-96-96a8,8,0,0,0-11.32,0l-96,96A8,8,0,0,0,32,128H72v56a8,8,0,0,0,8,8h96a8,8,0,0,0,8-8V128h40a8,8,0,0,0,5.66-13.66ZM176,112a8,8,0,0,0-8,8v56H88V120a8,8,0,0,0-8-8H51.31L128,35.31,204.69,112Zm8,104a8,8,0,0,1-8,8H80a8,8,0,0,1,0-16h96A8,8,0,0,1,184,216Z"></path></svg>
```

--------------------------------------------------------------------------------
/chrome-extension/assets/icons-ui/x.svg:
--------------------------------------------------------------------------------

```
1 | <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M214.75,211.71l-62.6-98.38,61.77-67.95a8,8,0,0,0-11.84-10.76L143.24,99.34,102.75,35.71A8,8,0,0,0,96,32H48a8,8,0,0,0-6.75,12.3l62.6,98.37-61.77,68a8,8,0,1,0,11.84,10.76l58.84-64.72,40.49,63.63A8,8,0,0,0,160,224h48a8,8,0,0,0,6.75-12.29ZM164.39,208,62.57,48h29L193.43,208Z"></path></svg>
```

--------------------------------------------------------------------------------
/chrome-extension/assets/icons-ui/check.svg:
--------------------------------------------------------------------------------

```
1 | <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M243.28,68.24l-24-23.56a16,16,0,0,0-22.59,0L104,136.23l-36.69-35.6a16,16,0,0,0-22.58.05l-24,24a16,16,0,0,0,0,22.61l71.62,72a16,16,0,0,0,22.63,0L243.33,90.91A16,16,0,0,0,243.28,68.24ZM103.62,208,32,136l24-24a.6.6,0,0,1,.08.08l42.35,41.09a8,8,0,0,0,11.19,0L208.06,56,232,79.6Z"></path></svg>
```

--------------------------------------------------------------------------------
/chrome-extension/assets/icons-ui/down-arrow.svg:
--------------------------------------------------------------------------------

```
1 | <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M231.39,132.94A8,8,0,0,0,224,128H184V72a8,8,0,0,0-8-8H80a8,8,0,0,0-8,8v56H32a8,8,0,0,0-5.66,13.66l96,96a8,8,0,0,0,11.32,0l96-96A8,8,0,0,0,231.39,132.94ZM128,220.69,51.31,144H80a8,8,0,0,0,8-8V80h80v56a8,8,0,0,0,8,8h28.69ZM72,40a8,8,0,0,1,8-8h96a8,8,0,0,1,0,16H80A8,8,0,0,1,72,40Z"></path></svg>
```

--------------------------------------------------------------------------------
/chrome-extension/assets/icons-ui/error.svg:
--------------------------------------------------------------------------------

```
1 | <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M165.66,101.66,139.31,128l26.35,26.34a8,8,0,0,1-11.32,11.32L128,139.31l-26.34,26.35a8,8,0,0,1-11.32-11.32L116.69,128,90.34,101.66a8,8,0,0,1,11.32-11.32L128,116.69l26.34-26.35a8,8,0,0,1,11.32,11.32ZM232,128A104,104,0,1,1,128,24,104.11,104.11,0,0,1,232,128Zm-16,0a88,88,0,1,0-88,88A88.1,88.1,0,0,0,216,128Z"></path></svg>
```

--------------------------------------------------------------------------------
/chrome-extension/assets/icons-ui/history.svg:
--------------------------------------------------------------------------------

```
1 | <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M136,80v43.47l36.12,21.67a8,8,0,0,1-8.24,13.72l-40-24A8,8,0,0,1,120,128V80a8,8,0,0,1,16,0Zm-8-48A95.44,95.44,0,0,0,60.08,60.15C52.81,67.51,46.35,74.59,40,82V64a8,8,0,0,0-16,0v40a8,8,0,0,0,8,8H72a8,8,0,0,0,0-16H49c7.15-8.42,14.27-16.35,22.39-24.57a80,80,0,1,1,1.66,114.75,8,8,0,1,0-11,11.64A96,96,0,1,0,128,32Z"></path></svg>
```

--------------------------------------------------------------------------------
/chrome-extension/assets/icons-ui/edit.svg:
--------------------------------------------------------------------------------

```
1 | <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M227.31,73.37,182.63,28.68a16,16,0,0,0-22.63,0L36.69,152A15.86,15.86,0,0,0,32,163.31V208a16,16,0,0,0,16,16H92.69A15.86,15.86,0,0,0,104,219.31L227.31,96a16,16,0,0,0,0-22.63ZM51.31,160,136,75.31,152.69,92,68,176.68ZM48,179.31,76.69,208H48Zm48,25.38L79.31,188,164,103.31,180.69,120Zm96-96L147.31,64l24-24L216,84.68Z"></path></svg>
```

--------------------------------------------------------------------------------
/chrome-extension/assets/icons-ui/linkedin.svg:
--------------------------------------------------------------------------------

```
1 | <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M216,24H40A16,16,0,0,0,24,40V216a16,16,0,0,0,16,16H216a16,16,0,0,0,16-16V40A16,16,0,0,0,216,24Zm0,192H40V40H216V216ZM96,112v64a8,8,0,0,1-16,0V112a8,8,0,0,1,16,0Zm88,28v36a8,8,0,0,1-16,0V140a20,20,0,0,0-40,0v36a8,8,0,0,1-16,0V112a8,8,0,0,1,15.79-1.78A36,36,0,0,1,184,140ZM100,84A12,12,0,1,1,88,72,12,12,0,0,1,100,84Z"></path></svg>
```

--------------------------------------------------------------------------------
/chrome-extension/assets/icons-ui/positive.svg:
--------------------------------------------------------------------------------

```
1 | <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm0,192a88,88,0,1,1,88-88A88.1,88.1,0,0,1,128,216ZM80,108a12,12,0,1,1,12,12A12,12,0,0,1,80,108Zm96,0a12,12,0,1,1-12-12A12,12,0,0,1,176,108Zm-1.07,48c-10.29,17.79-27.4,28-46.93,28s-36.63-10.2-46.92-28a8,8,0,1,1,13.84-8c7.47,12.91,19.21,20,33.08,20s25.61-7.1,33.07-20a8,8,0,0,1,13.86,8Z"></path></svg>
```

--------------------------------------------------------------------------------
/chrome-extension/assets/icons-ui/analysis.svg:
--------------------------------------------------------------------------------

```
1 | <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M232,208a8,8,0,0,1-8,8H32a8,8,0,0,1-8-8V48a8,8,0,0,1,16,0V200H224A8,8,0,0,1,232,208ZM132,160a12,12,0,1,0-12-12A12,12,0,0,0,132,160Zm-24-56A12,12,0,1,0,96,92,12,12,0,0,0,108,104ZM76,176a12,12,0,1,0-12-12A12,12,0,0,0,76,176Zm96-48a12,12,0,1,0-12-12A12,12,0,0,0,172,128Zm24-40a12,12,0,1,0-12-12A12,12,0,0,0,196,88Zm-20,76a12,12,0,1,0,12-12A12,12,0,0,0,176,164Z"></path></svg>
```

--------------------------------------------------------------------------------
/chrome-extension/assets/flags/gb.svg:
--------------------------------------------------------------------------------

```
1 | <svg xmlns="http://www.w3.org/2000/svg" id="flag-icons-gb" viewBox="0 0 640 480">
2 |   <path fill="#012169" d="M0 0h640v480H0z"/>
3 |   <path fill="#FFF" d="m75 0 244 181L562 0h78v62L400 241l240 178v61h-80L320 301 81 480H0v-60l239-178L0 64V0z"/>
4 |   <path fill="#C8102E" d="m424 281 216 159v40L369 281zm-184 20 6 35L54 480H0zM640 0v3L391 191l2-44L590 0zM0 0l239 176h-60L0 42z"/>
5 |   <path fill="#FFF" d="M241 0v480h160V0zM0 160v160h640V160z"/>
6 |   <path fill="#C8102E" d="M0 193v96h640v-96zM273 0v480h96V0z"/>
7 | </svg>
8 | 
```

--------------------------------------------------------------------------------
/chrome-extension/assets/icons-ui/warning.svg:
--------------------------------------------------------------------------------

```
1 | <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M236.8,188.09,149.35,36.22h0a24.76,24.76,0,0,0-42.7,0L19.2,188.09a23.51,23.51,0,0,0,0,23.72A24.35,24.35,0,0,0,40.55,224h174.9a24.35,24.35,0,0,0,21.33-12.19A23.51,23.51,0,0,0,236.8,188.09ZM222.93,203.8a8.5,8.5,0,0,1-7.48,4.2H40.55a8.5,8.5,0,0,1-7.48-4.2,7.59,7.59,0,0,1,0-7.72L120.52,44.21a8.75,8.75,0,0,1,15,0l87.45,151.87A7.59,7.59,0,0,1,222.93,203.8ZM120,144V104a8,8,0,0,1,16,0v40a8,8,0,0,1-16,0Zm20,36a12,12,0,1,1-12-12A12,12,0,0,1,140,180Z"></path></svg>
```

--------------------------------------------------------------------------------
/chrome-extension/assets/icons-ui/negative.svg:
--------------------------------------------------------------------------------

```
1 | <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M92,152a12,12,0,1,1,12-12A12,12,0,0,1,92,152Zm72-24a12,12,0,1,0,12,12A12,12,0,0,0,164,128Zm68,0A104,104,0,1,1,128,24,104.11,104.11,0,0,1,232,128Zm-16,0a88,88,0,1,0-88,88A88.1,88.1,0,0,0,216,128ZM171.56,81.34,128,110.39l-43.56-29a8,8,0,1,0-8.88,13.32l48,32a8,8,0,0,0,8.88,0l48-32a8,8,0,0,0-8.88-13.32Zm-15.13,96C148,171.73,139.94,168,128,168s-20,3.73-28.43,9.34a8,8,0,0,0,8.86,13.32C114.93,186.34,120,184,128,184s13.07,2.34,19.57,6.66a8,8,0,1,0,8.86-13.32Z"></path></svg>
```

--------------------------------------------------------------------------------
/chrome-extension/icons/logobubble.svg:
--------------------------------------------------------------------------------

```
1 | <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M232,48V88a8,8,0,0,1-16,0V56H184a8,8,0,0,1,0-16h40A8,8,0,0,1,232,48ZM72,200H40V168a8,8,0,0,0-16,0v40a8,8,0,0,0,8,8H72a8,8,0,0,0,0-16Zm152-40a8,8,0,0,0-8,8v32H184a8,8,0,0,0,0,16h40a8,8,0,0,0,8-8V168A8,8,0,0,0,224,160ZM32,96a8,8,0,0,0,8-8V56H72a8,8,0,0,0,0-16H32a8,8,0,0,0-8,8V88A8,8,0,0,0,32,96ZM80,80a8,8,0,0,0-8,8v80a8,8,0,0,0,16,0V88A8,8,0,0,0,80,80Zm104,88V88a8,8,0,0,0-16,0v80a8,8,0,0,0,16,0ZM144,80a8,8,0,0,0-8,8v80a8,8,0,0,0,16,0V88A8,8,0,0,0,144,80Zm-32,0a8,8,0,0,0-8,8v80a8,8,0,0,0,16,0V88A8,8,0,0,0,112,80Z"></path></svg>
```

--------------------------------------------------------------------------------
/chrome-extension/assets/flags/us.svg:
--------------------------------------------------------------------------------

```
 1 | <svg xmlns="http://www.w3.org/2000/svg" id="flag-icons-us" viewBox="0 0 640 480">
 2 |   <path fill="#bd3d44" d="M0 0h640v480H0"/>
 3 |   <path stroke="#fff" stroke-width="37" d="M0 55.3h640M0 129h640M0 203h640M0 277h640M0 351h640M0 425h640"/>
 4 |   <path fill="#192f5d" d="M0 0h364.8v258.5H0"/>
 5 |   <marker id="us-a" markerHeight="30" markerWidth="30">
 6 |     <path fill="#fff" d="m14 0 9 27L0 10h28L5 27z"/>
 7 |   </marker>
 8 |   <path fill="none" marker-mid="url(#us-a)" d="m0 0 16 11h61 61 61 61 60L47 37h61 61 60 61L16 63h61 61 61 61 60L47 89h61 61 60 61L16 115h61 61 61 61 60L47 141h61 61 60 61L16 166h61 61 61 61 60L47 192h61 61 60 61L16 218h61 61 61 61 60z"/>
 9 | </svg>
10 | 
```

--------------------------------------------------------------------------------
/chrome-extension/assets/icons-ui/database.svg:
--------------------------------------------------------------------------------

```
1 | <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M128,24C74.17,24,32,48.6,32,80v96c0,31.4,42.17,56,96,56s96-24.6,96-56V80C224,48.6,181.83,24,128,24Zm80,104c0,9.62-7.88,19.43-21.61,26.92C170.93,163.35,150.19,168,128,168s-42.93-4.65-58.39-13.08C55.88,147.43,48,137.62,48,128V111.36c17.06,15,46.23,24.64,80,24.64s62.94-9.68,80-24.64ZM69.61,53.08C85.07,44.65,105.81,40,128,40s42.93,4.65,58.39,13.08C200.12,60.57,208,70.38,208,80s-7.88,19.43-21.61,26.92C170.93,115.35,150.19,120,128,120s-42.93-4.65-58.39-13.08C55.88,99.43,48,89.62,48,80S55.88,60.57,69.61,53.08ZM186.39,202.92C170.93,211.35,150.19,216,128,216s-42.93-4.65-58.39-13.08C55.88,195.43,48,185.62,48,176V159.36c17.06,15,46.23,24.64,80,24.64s62.94-9.68,80-24.64V176C208,185.62,200.12,195.43,186.39,202.92Z"></path></svg>
```

--------------------------------------------------------------------------------
/chrome-extension/assets/icons-ui/github.svg:
--------------------------------------------------------------------------------

```
1 | <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M208.31,75.68A59.78,59.78,0,0,0,202.93,28,8,8,0,0,0,196,24a59.75,59.75,0,0,0-48,24H124A59.75,59.75,0,0,0,76,24a8,8,0,0,0-6.93,4,59.78,59.78,0,0,0-5.38,47.68A58.14,58.14,0,0,0,56,104v8a56.06,56.06,0,0,0,48.44,55.47A39.8,39.8,0,0,0,96,192v8H72a24,24,0,0,1-24-24A40,40,0,0,0,8,136a8,8,0,0,0,0,16,24,24,0,0,1,24,24,40,40,0,0,0,40,40H96v16a8,8,0,0,0,16,0V192a24,24,0,0,1,48,0v40a8,8,0,0,0,16,0V192a39.8,39.8,0,0,0-8.44-24.53A56.06,56.06,0,0,0,216,112v-8A58.14,58.14,0,0,0,208.31,75.68ZM200,112a40,40,0,0,1-40,40H112a40,40,0,0,1-40-40v-8a41.74,41.74,0,0,1,6.9-22.48A8,8,0,0,0,80,73.83a43.81,43.81,0,0,1,.79-33.58,43.88,43.88,0,0,1,32.32,20.06A8,8,0,0,0,119.82,64h32.35a8,8,0,0,0,6.74-3.69,43.87,43.87,0,0,1,32.32-20.06A43.81,43.81,0,0,1,192,73.83a8.09,8.09,0,0,0,1,7.65A41.72,41.72,0,0,1,200,104Z"></path></svg>
```

--------------------------------------------------------------------------------
/chrome-extension/styles.css:
--------------------------------------------------------------------------------

```css
 1 | /* ChatGPT Product Info Research Extension Styles */
 2 | 
 3 | #openProductSearchModalBtn {
 4 |     position: fixed;
 5 |     right: 30px;
 6 |     bottom: 100px;
 7 |     transform: none;
 8 |     background-color: #fef3c7;
 9 |     color: #b45309;
10 |     border: none;
11 |     border-radius: 50%;
12 |     width: 60px;
13 |     height: 60px;
14 |     font-size: 0;
15 |     box-shadow: 0 3px 10px rgba(0,0,0,0.2);
16 |     cursor: pointer;
17 |     z-index: 9990;
18 |     display: flex;
19 |     align-items: center;
20 |     justify-content: center;
21 |     transition: all 0.3s ease;
22 | }
23 | 
24 | #openProductSearchModalBtn img {
25 |     width: 32px;
26 |     height: 32px;
27 |     pointer-events: none;
28 | }
29 | 
30 | #openProductSearchModalBtn.icon-fallback {
31 |     font-size: 24px;
32 | }
33 | 
34 | #openProductSearchModalBtn:hover {
35 |     background-color: #fde68a;
36 |     box-shadow: 0 5px 15px rgba(0,0,0,0.3);
37 | }
38 | 
39 | /* Spinning animation for loading states */
40 | @keyframes cpr-spin {
41 |     0% { transform: rotate(0deg); }
42 |     100% { transform: rotate(360deg); }
43 | }
44 | 
45 | .cpr-loading-spinner {
46 |     display: inline-block;
47 |     width: 32px;
48 |     height: 32px;
49 |     border: 3px solid #f3f3f3;
50 |     border-top: 3px solid #667eea;
51 |     border-radius: 50%;
52 |     animation: cpr-spin 1s linear infinite;
53 |     margin-bottom: 10px;
54 | }
55 | 
```

--------------------------------------------------------------------------------
/chrome-extension/manifest.json:
--------------------------------------------------------------------------------

```json
 1 | {
 2 |   "manifest_version": 3,
 3 |   "name": "ChatGPT E-commerce Product Research",
 4 |   "version": "1.3.8",
 5 |   "description": "Research e-commerce product reviews, comparisons, and detailed information directly within ChatGPT",
 6 |   "permissions": [
 7 |     "activeTab"
 8 |   ],
 9 |   "host_permissions": [
10 |     "https://chatgpt.com/*",
11 |     "https://*.chatgpt.com/*"
12 |   ],
13 |   "content_scripts": [
14 |     {
15 |       "matches": ["https://chatgpt.com/*", "https://*.chatgpt.com/*"],
16 |       "js": ["content-script.js"],
17 |       "css": ["styles.css"],
18 |       "run_at": "document_end"
19 |     }
20 |   ],
21 |   "action": {
22 |     "default_popup": "popup.html",
23 |     "default_title": "ChatGPT E-commerce Product Research",
24 |     "default_icon": {
25 |       "16": "icons/icon16.png",
26 |       "19": "icons/icon19.png",
27 |       "32": "icons/icon32.png",
28 |       "48": "icons/icon48.png",
29 |       "128": "icons/icon128.png"
30 |     }
31 |   },
32 |   "icons": {
33 |     "16": "icons/icon16.png",
34 |     "19": "icons/icon19.png",
35 |     "32": "icons/icon32.png",
36 |     "48": "icons/icon48.png",
37 |     "128": "icons/icon128.png"
38 |   },
39 |   "content_security_policy": {
40 |     "extension_pages": "script-src 'self'; object-src 'self';"
41 |   },
42 |   "web_accessible_resources": [
43 |     {
44 |       "resources": ["icons/*", "assets/flags/*", "assets/icons-ui/*"],
45 |       "matches": ["https://chatgpt.com/*", "https://*.chatgpt.com/*"]
46 |     }
47 |   ]
48 | }
49 | 
```

--------------------------------------------------------------------------------
/chrome-extension/assets/flags/all.svg:
--------------------------------------------------------------------------------

```
1 | <svg xmlns="http://www.w3.org/2000/svg" width="1000" height="600" viewBox="0 0 264.583 158.75"><path d="M-138.415-1245.822h2645.833v1587.5H-138.415z" style="opacity:1;fill:#00c;fill-opacity:1;stroke:#fff;stroke-width:0;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" transform="matrix(.1 0 0 .1 13.841 124.582)"/><g transform="matrix(.1 0 0 .1 13.841 124.582)"><circle cx="1184.502" cy="-452.072" r="502.708" style="opacity:1;fill:none;fill-opacity:1;stroke:#fff;stroke-width:52.91666412;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"/><path d="M855.062-112.445a658.88 658.88 0 0 1 658.88 0M1513.942-791.7a658.88 658.88 0 0 1-658.88 0" style="opacity:1;fill:none;fill-opacity:1;stroke:#fff;stroke-width:52.91666412;stroke-linecap:square;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"/><path d="M1183.361 49.779a628.39 628.39 0 0 1-250.213-501.851 628.39 628.39 0 0 1 250.213-501.85" style="opacity:1;fill:none;fill-opacity:1;stroke:#fff;stroke-width:52.91666412;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"/><path d="M1184.502-954.78V50.636M681.794-452.072H1687.21" style="opacity:1;fill:none;stroke:#fff;stroke-width:52.91664886;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"/><path d="M-1185.643 953.923a628.39 628.39 0 0 1-250.213-501.851A628.39 628.39 0 0 1-1185.643-49.78" style="opacity:1;fill:none;fill-opacity:1;stroke:#fff;stroke-width:52.91666412;stroke-linecap:butt;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" transform="scale(-1)"/></g></svg>
```

--------------------------------------------------------------------------------
/chrome-extension/assets/icons-ui/settings.svg:
--------------------------------------------------------------------------------

```
1 | <svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" fill="#000000" viewBox="0 0 256 256"><path d="M128,80a48,48,0,1,0,48,48A48.05,48.05,0,0,0,128,80Zm0,80a32,32,0,1,1,32-32A32,32,0,0,1,128,160Zm88-29.84q.06-2.16,0-4.32l14.92-18.64a8,8,0,0,0,1.48-7.06,107.21,107.21,0,0,0-10.88-26.25,8,8,0,0,0-6-3.93l-23.72-2.64q-1.48-1.56-3-3L186,40.54a8,8,0,0,0-3.94-6,107.71,107.71,0,0,0-26.25-10.87,8,8,0,0,0-7.06,1.49L130.16,40Q128,40,125.84,40L107.2,25.11a8,8,0,0,0-7.06-1.48A107.6,107.6,0,0,0,73.89,34.51a8,8,0,0,0-3.93,6L67.32,64.27q-1.56,1.49-3,3L40.54,70a8,8,0,0,0-6,3.94,107.71,107.71,0,0,0-10.87,26.25,8,8,0,0,0,1.49,7.06L40,125.84Q40,128,40,130.16L25.11,148.8a8,8,0,0,0-1.48,7.06,107.21,107.21,0,0,0,10.88,26.25,8,8,0,0,0,6,3.93l23.72,2.64q1.49,1.56,3,3L70,215.46a8,8,0,0,0,3.94,6,107.71,107.71,0,0,0,26.25,10.87,8,8,0,0,0,7.06-1.49L125.84,216q2.16.06,4.32,0l18.64,14.92a8,8,0,0,0,7.06,1.48,107.21,107.21,0,0,0,26.25-10.88,8,8,0,0,0,3.93-6l2.64-23.72q1.56-1.48,3-3L215.46,186a8,8,0,0,0,6-3.94,107.71,107.71,0,0,0,10.87-26.25,8,8,0,0,0-1.49-7.06Zm-16.1-6.5a73.93,73.93,0,0,1,0,8.68,8,8,0,0,0,1.74,5.48l14.19,17.73a91.57,91.57,0,0,1-6.23,15L187,173.11a8,8,0,0,0-5.1,2.64,74.11,74.11,0,0,1-6.14,6.14,8,8,0,0,0-2.64,5.1l-2.51,22.58a91.32,91.32,0,0,1-15,6.23l-17.74-14.19a8,8,0,0,0-5-1.75h-.48a73.93,73.93,0,0,1-8.68,0,8,8,0,0,0-5.48,1.74L100.45,215.8a91.57,91.57,0,0,1-15-6.23L82.89,187a8,8,0,0,0-2.64-5.1,74.11,74.11,0,0,1-6.14-6.14,8,8,0,0,0-5.1-2.64L46.43,170.6a91.32,91.32,0,0,1-6.23-15l14.19-17.74a8,8,0,0,0,1.74-5.48,73.93,73.93,0,0,1,0-8.68,8,8,0,0,0-1.74-5.48L40.2,100.45a91.57,91.57,0,0,1,6.23-15L69,82.89a8,8,0,0,0,5.1-2.64,74.11,74.11,0,0,1,6.14-6.14A8,8,0,0,0,82.89,69L85.4,46.43a91.32,91.32,0,0,1,15-6.23l17.74,14.19a8,8,0,0,0,5.48,1.74,73.93,73.93,0,0,1,8.68,0,8,8,0,0,0,5.48-1.74L155.55,40.2a91.57,91.57,0,0,1,15,6.23L173.11,69a8,8,0,0,0,2.64,5.1,74.11,74.11,0,0,1,6.14,6.14,8,8,0,0,0,5.1,2.64l22.58,2.51a91.32,91.32,0,0,1,6.23,15l-14.19,17.74A8,8,0,0,0,199.87,123.66Z"></path></svg>
```

--------------------------------------------------------------------------------
/chrome-extension/assets/flags/ar.svg:
--------------------------------------------------------------------------------

```
 1 | <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="flag-icons-ar" viewBox="0 0 640 480">
 2 |   <path fill="#74acdf" d="M0 0h640v480H0z"/>
 3 |   <path fill="#fff" d="M0 160h640v160H0z"/>
 4 |   <g id="ar-c" transform="translate(-64)scale(.96)">
 5 |     <path id="ar-a" fill="#f6b40e" stroke="#85340a" stroke-width="1.1" d="m396.8 251.3 28.5 62s.5 1.2 1.3.9c.8-.4.3-1.6.3-1.6l-23.7-64m-.7 24.2c-.4 9.4 5.4 14.6 4.7 23s3.8 13.2 5 16.5c1 3.3-1.2 5.2-.3 5.7 1 .5 3-2.1 2.4-6.8s-4.2-6-3.4-16.3-4.2-12.7-3-22"/>
 6 |     <use xlink:href="#ar-a" width="100%" height="100%" transform="rotate(22.5 400 250)"/>
 7 |     <use xlink:href="#ar-a" width="100%" height="100%" transform="rotate(45 400 250)"/>
 8 |     <use xlink:href="#ar-a" width="100%" height="100%" transform="rotate(67.5 400 250)"/>
 9 |     <path id="ar-b" fill="#85340a" d="M404.3 274.4c.5 9 5.6 13 4.6 21.3 2.2-6.5-3.1-11.6-2.8-21.2m-7.7-23.8 19.5 42.6-16.3-43.9"/>
10 |     <use xlink:href="#ar-b" width="100%" height="100%" transform="rotate(22.5 400 250)"/>
11 |     <use xlink:href="#ar-b" width="100%" height="100%" transform="rotate(45 400 250)"/>
12 |     <use xlink:href="#ar-b" width="100%" height="100%" transform="rotate(67.5 400 250)"/>
13 |   </g>
14 |   <use xlink:href="#ar-c" width="100%" height="100%" transform="rotate(90 320 240)"/>
15 |   <use xlink:href="#ar-c" width="100%" height="100%" transform="rotate(180 320 240)"/>
16 |   <use xlink:href="#ar-c" width="100%" height="100%" transform="rotate(-90 320 240)"/>
17 |   <circle cx="320" cy="240" r="26.7" fill="#f6b40e" stroke="#85340a" stroke-width="1.4"/>
18 |   <path id="ar-h" fill="#843511" stroke-width="1" d="M329 234.3c-1.7 0-3.5.8-4.5 2.4 2 1.9 6.6 2 9.7-.2a7 7 0 0 0-5.1-2.2zm0 .4c1.8 0 3.5.8 3.7 1.6-2 2.3-5.3 2-7.4.4q1.6-2 3.8-2z"/>
19 |   <use xlink:href="#ar-d" width="100%" height="100%" transform="matrix(-1 0 0 1 640.2 0)"/>
20 |   <use xlink:href="#ar-e" width="100%" height="100%" transform="matrix(-1 0 0 1 640.2 0)"/>
21 |   <use xlink:href="#ar-f" width="100%" height="100%" transform="translate(18.1)"/>
22 |   <use xlink:href="#ar-g" width="100%" height="100%" transform="matrix(-1 0 0 1 640.2 0)"/>
23 |   <path fill="#85340a" d="M316 243.7a1.8 1.8 0 1 0 1.8 2.9 4 4 0 0 0 2.2.6h.2q1 0 2.3-.6.5.7 1.5.7a1.8 1.8 0 0 0 .3-3.6q.8.3.8 1.2a1.2 1.2 0 0 1-2.4 0 3 3 0 0 1-2.6 1.7 3 3 0 0 1-2.5-1.7q-.1 1.1-1.3 1.2-1-.1-1.2-1.2c-.2-1.1.3-1 .8-1.2zm2 5.4c-2.1 0-3 2-4.8 3.1 1-.4 1.8-1.2 3.3-2s2.6.2 3.5.2 2-1 3.5-.2l3.3 2c-1.9-1.2-2.7-3-4.8-3q-.7 0-2 .6z"/>
24 |   <path fill="#85340a" d="M317.2 251.6q-1.1 0-3.4.6c3.7-.8 4.5.5 6.2.5 1.6 0 2.5-1.3 6.1-.5-4-1.2-4.9-.4-6.1-.4-.8 0-1.4-.3-2.8-.2"/>
25 |   <path fill="#85340a" d="M314 252.2h-.8c4.3.5 2.3 3 6.8 3s2.5-2.5 6.8-3c-4.5-.4-3.1 2.3-6.8 2.3-3.5 0-2.4-2.3-6-2.3"/>
26 |   <path fill="#85340a" d="M323.7 258.9a3.7 3.7 0 0 0-7.4 0 3.8 3.8 0 0 1 7.4 0"/>
27 |   <path id="ar-e" fill="#85340a" stroke-width="1" d="M303.4 234.3c4.7-4.1 10.7-4.8 14-1.7a8 8 0 0 1 1.5 3.4q.6 3.6-2.1 7.5l.8.4q2.4-4.7 1.6-9.4l-.6-2.3c-4.5-3.7-10.7-4-15.2 2z"/>
28 |   <path id="ar-d" fill="#85340a" stroke-width="1" d="M310.8 233c2.7 0 3.3.6 4.5 1.7 1.2 1 1.9.8 2 1 .3.2 0 .8-.3.6q-.7-.2-2.5-1.6c-1.8-1.4-2.5-1-3.7-1-3.7 0-5.7 3-6.1 2.8-.5-.2 2-3.5 6.1-3.5"/>
29 |   <use xlink:href="#ar-h" width="100%" height="100%" transform="translate(-18.4)"/>
30 |   <circle id="ar-f" cx="310.9" cy="236.3" r="1.8" fill="#85340a" stroke-width="1"/>
31 |   <path id="ar-g" fill="#85340a" stroke-width="1" d="M305.9 237.5c3.5 2.7 7 2.5 9 1.3 2-1.3 2-1.7 1.6-1.7s-.8.4-2.4 1.3c-1.7.8-4.1.8-8.2-.9"/>
32 | </svg>
33 | 
```

--------------------------------------------------------------------------------
/chrome-extension/popup.js:
--------------------------------------------------------------------------------

```javascript
 1 | // ChatGPT Product Info Research Extension - Popup Script
 2 | 
 3 | document.addEventListener('DOMContentLoaded', async () => {
 4 |     const statusEl = document.getElementById('status');
 5 |     const statusTextEl = document.getElementById('status-text');
 6 |     const openSearchBtn = document.getElementById('open-search');
 7 |     const goToChatGPTBtn = document.getElementById('go-to-chatgpt');
 8 | 
 9 |     const statusIcons = {
10 |         success: { modifier: 'status-icon--success', label: 'Success status' },
11 |         warning: { modifier: 'status-icon--warning', label: 'Warning status' },
12 |         error: { modifier: 'status-icon--error', label: 'Error status' },
13 |     };
14 | 
15 |     function setStatus(type, message) {
16 |         const icon = statusIcons[type];
17 |         if (!icon) {
18 |             statusTextEl.textContent = message;
19 |             return;
20 |         }
21 | 
22 |         statusTextEl.innerHTML = `<span class="status-icon ${icon.modifier}" role="img" aria-label="${icon.label}"></span> <span>${message}</span>`;
23 |     }
24 | 
25 |     // Check if we're on a ChatGPT tab
26 |     async function checkChatGPTStatus() {
27 |         try {
28 |             const [activeTab] = await chrome.tabs.query({ active: true, currentWindow: true });
29 |             
30 |             if (!activeTab.url.includes('chatgpt.com')) {
31 |                 statusEl.className = 'status status-bad';
32 |                 setStatus('error', 'Please navigate to ChatGPT first');
33 |                 openSearchBtn.disabled = true;
34 |                 return false;
35 |             }
36 | 
37 |             // Check if content script is ready by sending a message
38 |             try {
39 |                 await chrome.tabs.sendMessage(activeTab.id, { action: 'ping' });
40 |                 statusEl.className = 'status status-good';
41 |                 setStatus('success', 'Ready to search products');
42 |                 openSearchBtn.disabled = false;
43 |                 return true;
44 |             } catch (error) {
45 |                 statusEl.className = 'status status-warning';
46 |                 setStatus('warning', 'Please refresh the ChatGPT page');
47 |                 openSearchBtn.disabled = true;
48 |                 return false;
49 |             }
50 |         } catch (error) {
51 |             statusEl.className = 'status status-bad';
52 |             setStatus('error', 'Unable to check status');
53 |             openSearchBtn.disabled = true;
54 |             return false;
55 |         }
56 |     }
57 | 
58 |     // Open the product search modal
59 |     openSearchBtn.addEventListener('click', async () => {
60 |         try {
61 |             const [activeTab] = await chrome.tabs.query({ active: true, currentWindow: true });
62 |             await chrome.tabs.sendMessage(activeTab.id, { action: 'openSearch' });
63 |             window.close(); // Close the popup
64 |         } catch (error) {
65 |             console.error('Failed to open search:', error);
66 |             statusEl.className = 'status status-bad';
67 |             setStatus('error', 'Failed to open search. Please refresh the page.');
68 |         }
69 |     });
70 | 
71 |     // Navigate to ChatGPT
72 |     goToChatGPTBtn.addEventListener('click', async () => {
73 |         try {
74 |             const [activeTab] = await chrome.tabs.query({ active: true, currentWindow: true });
75 |             
76 |             if (activeTab.url.includes('chatgpt.com')) {
77 |                 // Already on ChatGPT, just refresh
78 |                 await chrome.tabs.reload(activeTab.id);
79 |             } else {
80 |                 // Navigate to ChatGPT
81 |                 await chrome.tabs.update(activeTab.id, { url: 'https://chatgpt.com' });
82 |             }
83 |             
84 |             window.close();
85 |         } catch (error) {
86 |             console.error('Failed to navigate to ChatGPT:', error);
87 |         }
88 |     });
89 | 
90 |     // Initial status check
91 |     await checkChatGPTStatus();
92 | 
93 |     // Recheck status every 2 seconds
94 |     setInterval(checkChatGPTStatus, 2000);
95 | });
96 | 
```

--------------------------------------------------------------------------------
/chrome-extension/popup.html:
--------------------------------------------------------------------------------

```html
  1 | <!DOCTYPE html>
  2 | <html lang="en">
  3 | <head>
  4 |     <meta charset="UTF-8">
  5 |     <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6 |     <title>ChatGPT E-commerce Product Research</title>
  7 |     <style>
  8 |         body {
  9 |             width: 340px;
 10 |             padding: 0;
 11 |             font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
 12 |             background: linear-gradient(140deg, #f5f8ff 0%, #ffffff 60%);
 13 |             margin: 0;
 14 |         }
 15 |         
 16 |         .container {
 17 |             padding: 20px;
 18 |         }
 19 |         
 20 |         .header {
 21 |             text-align: center;
 22 |             margin-bottom: 20px;
 23 |         }
 24 |         
 25 |         .header h1 {
 26 |             display: flex;
 27 |             align-items: center;
 28 |             justify-content: center;
 29 |             gap: 8px;
 30 |             font-size: 18px;
 31 |             font-weight: 600;
 32 |             color: #27325f;
 33 |             margin: 0 0 8px 0;
 34 |         }
 35 | 
 36 |         .header-icon {
 37 |             width: 20px;
 38 |             height: 20px;
 39 |         }
 40 |         
 41 |         .header p {
 42 |             font-size: 13px;
 43 |             color: #5e6f9b;
 44 |             margin: 0;
 45 |             line-height: 1.4;
 46 |         }
 47 |         
 48 |         .status {
 49 |             background: rgba(255, 255, 255, 0.95);
 50 |             backdrop-filter: blur(2px);
 51 |             border-radius: 12px;
 52 |             padding: 14px;
 53 |             margin-bottom: 16px;
 54 |             border: 1px solid rgba(74, 105, 183, 0.22);
 55 |             box-shadow: 0 2px 8px rgba(32, 42, 92, 0.08);
 56 |         }
 57 | 
 58 |         #status-text {
 59 |             display: flex;
 60 |             align-items: center;
 61 |             gap: 8px;
 62 |             font-size: 13px;
 63 |         }
 64 | 
 65 |         .status-icon {
 66 |             width: 18px;
 67 |             height: 18px;
 68 |             display: inline-flex;
 69 |             background-color: currentColor;
 70 |             -webkit-mask-size: contain;
 71 |             -webkit-mask-repeat: no-repeat;
 72 |             -webkit-mask-position: center;
 73 |             mask-size: contain;
 74 |             mask-repeat: no-repeat;
 75 |             mask-position: center;
 76 |             flex-shrink: 0;
 77 |         }
 78 | 
 79 |         .status-good {
 80 |             background: rgba(40, 167, 69, 0.1);
 81 |             border-color: rgba(40, 167, 69, 0.3);
 82 |             color: #1e7e34;
 83 |         }
 84 | 
 85 |         .status-warning {
 86 |             background: rgba(255, 193, 7, 0.1);
 87 |             border-color: rgba(255, 193, 7, 0.3);
 88 |             color: #856404;
 89 |         }
 90 | 
 91 |         .status-bad {
 92 |             background: rgba(220, 53, 69, 0.1);
 93 |             border-color: rgba(220, 53, 69, 0.3);
 94 |             color: #721c24;
 95 |         }
 96 | 
 97 |         .status-icon--success {
 98 |             -webkit-mask-image: url('assets/icons-ui/check.svg');
 99 |             mask-image: url('assets/icons-ui/check.svg');
100 |         }
101 | 
102 |         .status-icon--warning {
103 |             -webkit-mask-image: url('assets/icons-ui/warning.svg');
104 |             mask-image: url('assets/icons-ui/warning.svg');
105 |         }
106 | 
107 |         .status-icon--error {
108 |             -webkit-mask-image: url('assets/icons-ui/error.svg');
109 |             mask-image: url('assets/icons-ui/error.svg');
110 |         }
111 |         
112 |         .action-button {
113 |             width: 100%;
114 |             background: #5b8def;
115 |             color: white;
116 |             border: none;
117 |             padding: 12px 16px;
118 |             border-radius: 12px;
119 |             font-size: 14px;
120 |             font-weight: 500;
121 |             cursor: pointer;
122 |             transition: all 0.2s ease;
123 |             margin-bottom: 12px;
124 |             box-shadow: 0 4px 12px rgba(91, 141, 239, 0.25);
125 |         }
126 |         
127 |         .action-button:hover {
128 |             background: #4a7de8;
129 |             transform: translateY(-1px);
130 |             box-shadow: 0 6px 16px rgba(91, 141, 239, 0.35);
131 |         }
132 |         
133 |         .action-button:disabled {
134 |             background: #9ca3af;
135 |             cursor: not-allowed;
136 |             transform: none;
137 |             box-shadow: none;
138 |             opacity: 0.6;
139 |         }
140 |         
141 |         .secondary-button {
142 |             background: rgba(91, 141, 239, 0.12);
143 |             color: #2f4db5;
144 |             box-shadow: 0 2px 8px rgba(91, 141, 239, 0.12);
145 |         }
146 |         
147 |         .secondary-button:hover {
148 |             background: rgba(91, 141, 239, 0.18);
149 |             color: #27325f;
150 |         }
151 |         
152 |         .instructions {
153 |             background: rgba(255, 255, 255, 0.95);
154 |             backdrop-filter: blur(2px);
155 |             border-radius: 12px;
156 |             padding: 16px;
157 |             border: 1px solid rgba(74, 105, 183, 0.22);
158 |             font-size: 13px;
159 |             line-height: 1.5;
160 |             color: #35426b;
161 |             box-shadow: 0 2px 8px rgba(32, 42, 92, 0.08);
162 |         }
163 |         
164 |         .instructions h3 {
165 |             margin: 0 0 12px 0;
166 |             font-size: 14px;
167 |             font-weight: 600;
168 |             color: #27325f;
169 |         }
170 |         
171 |         .instructions ul {
172 |             margin: 8px 0;
173 |             padding-left: 20px;
174 |         }
175 |         
176 |         .instructions li {
177 |             margin-bottom: 6px;
178 |             color: #4b5976;
179 |         }
180 |         
181 |         .footer {
182 |             text-align: center;
183 |             margin-top: 16px;
184 |             padding-top: 16px;
185 |             border-top: 1px solid rgba(74, 105, 183, 0.18);
186 |             font-size: 12px;
187 |             color: #5e6f9b;
188 |         }
189 |         
190 |         .footer a {
191 |             color: #5b8def;
192 |             text-decoration: none;
193 |             transition: color 0.2s ease;
194 |         }
195 |         
196 |         .footer a:hover {
197 |             color: #4a7de8;
198 |             text-decoration: underline;
199 |         }
200 |     </style>
201 | </head>
202 | <body>
203 |     <div class="container">
204 |         <div class="header">
205 |             <h1>
206 |                 <img src="assets/icons-ui/search.svg" alt="Search icon" class="header-icon">
207 |                 E-commerce Product Research
208 |             </h1>
209 |             <p>Search for product reviews and information directly in ChatGPT</p>
210 |         </div>
211 | 
212 |         <div id="status" class="status">
213 |             <div id="status-text">Checking ChatGPT status...</div>
214 |         </div>
215 | 
216 |         <button id="open-search" class="action-button" disabled>
217 |             Open E-commerce Product Research
218 |         </button>
219 | 
220 |         <button id="go-to-chatgpt" class="action-button secondary-button">
221 |             Go to ChatGPT
222 |         </button>
223 | 
224 |         <div class="instructions">
225 |             <h3>How to use:</h3>
226 |             <ul>
227 |                 <li>Make sure you're logged in to ChatGPT</li>
228 |                 <li>Click "Open E-commerce Product Research" to show the search interface</li>
229 |                 <li>Search for any product to get reviews and information</li>
230 |                 <li>Use multi-product search to compare multiple items</li>
231 |             </ul>
232 |         </div>
233 | 
234 |         <div class="footer">
235 |             Created by <a href="https://www.martinaberastegue.com/?utm_source=chrome&utm_medium=extension&utm_campaign=ChatGPT_Ecom_Product_Research&utm_content=popup" target="_blank" rel="noopener noreferrer">Martin Aberastegue</a>
236 |         </div>
237 |     </div>
238 | 
239 |     <script src="popup.js"></script>
240 | </body>
241 | </html>
242 | 
```

--------------------------------------------------------------------------------
/chrome-extension/assets/flags/br.svg:
--------------------------------------------------------------------------------

```
 1 | <svg xmlns="http://www.w3.org/2000/svg" id="flag-icons-br" viewBox="0 0 640 480">
 2 |   <g stroke-width="1pt">
 3 |     <path fill="#229e45" fill-rule="evenodd" d="M0 0h640v480H0z"/>
 4 |     <path fill="#f8e509" fill-rule="evenodd" d="m321.4 436 301.5-195.7L319.6 44 17.1 240.7z"/>
 5 |     <path fill="#2b49a3" fill-rule="evenodd" d="M452.8 240c0 70.3-57.1 127.3-127.6 127.3A127.4 127.4 0 1 1 452.8 240"/>
 6 |     <path fill="#ffffef" fill-rule="evenodd" d="m283.3 316.3-4-2.3-4 2 .9-4.5-3.2-3.4 4.5-.5 2.2-4 1.9 4.2 4.4.8-3.3 3m86 26.3-3.9-2.3-4 2 .8-4.5-3.1-3.3 4.5-.5 2.1-4.1 2 4.2 4.4.8-3.4 3.1m-36.2-30-3.4-2-3.5 1.8.8-3.9-2.8-2.9 4-.4 1.8-3.6 1.6 3.7 3.9.7-3 2.7m87-8.5-3.4-2-3.5 1.8.8-3.9-2.7-2.8 3.9-.4 1.8-3.5 1.6 3.6 3.8.7-2.9 2.6m-87.3-22-4-2.2-4 2 .8-4.6-3.1-3.3 4.5-.5 2.1-4.1 2 4.2 4.4.8-3.4 3.2m-104.6-35-4-2.2-4 2 1-4.6-3.3-3.3 4.6-.5 2-4.1 2 4.2 4.4.8-3.3 3.1m13.3 57.2-4-2.3-4 2 .9-4.5-3.2-3.3 4.5-.6 2.1-4 2 4.2 4.4.8-3.3 3.1m132-67.3-3.6-2-3.6 1.8.8-4-2.8-3 4-.5 1.9-3.6 1.7 3.8 4 .7-3 2.7m-6.7 38.3-2.7-1.6-2.9 1.4.6-3.2-2.2-2.3 3.2-.4 1.5-2.8 1.3 3 3 .5-2.2 2.2m-142.2 50.4-2.7-1.5-2.7 1.3.6-3-2.1-2.2 3-.4 1.4-2.7 1.3 2.8 3 .6-2.3 2M419 299.8l-2.2-1.1-2.2 1 .5-2.3-1.7-1.6 2.4-.3 1.2-2 1 2 2.5.5-1.9 1.5"/>
 7 |     <path fill="#ffffef" fill-rule="evenodd" d="m219.3 287.6-2.7-1.5-2.7 1.3.6-3-2.1-2.2 3-.4 1.4-2.7 1.3 2.8 3 .6-2.3 2"/>
 8 |     <path fill="#ffffef" fill-rule="evenodd" d="m219.3 287.6-2.7-1.5-2.7 1.3.6-3-2.1-2.2 3-.4 1.4-2.7 1.3 2.8 3 .6-2.3 2m42.3 3-2.6-1.4-2.7 1.3.6-3-2.1-2.2 3-.4 1.4-2.7 1.3 2.8 3 .5-2.3 2.1m-4.8 17-2.6-1.5-2.7 1.4.6-3-2.1-2.3 3-.4 1.4-2.7 1.3 2.8 3 .6-2.3 2m87.4-22.2-2.6-1.6-2.8 1.4.6-3-2-2.3 3-.3 1.4-2.7 1.2 2.8 3 .5-2.2 2.1m-25.1 3-2.7-1.5-2.7 1.4.6-3-2-2.3 3-.3 1.4-2.8 1.2 2.9 3 .5-2.2 2.1m-68.8-5.8-1.7-1-1.7.8.4-1.9-1.3-1.4 1.9-.2.8-1.7.8 1.8 1.9.3-1.4 1.3m167.8 45.4-2.6-1.5-2.7 1.4.6-3-2.1-2.3 3-.4 1.4-2.7 1.3 2.8 3 .6-2.3 2m-20.8 6-2.2-1.4-2.3 1.2.5-2.6-1.7-1.8 2.5-.3 1.2-2.3 1 2.4 2.5.4-1.9 1.8m10.4 2.3-2-1.2-2.1 1 .4-2.3-1.6-1.7 2.3-.3 1.1-2 1 2 2.3.5-1.7 1.6m29.1-22.8-2-1-2 1 .5-2.3-1.6-1.7 2.3-.3 1-2 1 2.1 2.1.4-1.6 1.6m-38.8 41.8-2.5-1.4-2.7 1.2.6-2.8-2-2 3-.3 1.3-2.5 1.2 2.6 3 .5-2.3 1.9m.6 14.2-2.4-1.4-2.4 1.3.6-2.8-1.9-2 2.7-.4 1.2-2.5 1.1 2.6 2.7.5-2 2m-19-23.1-1.9-1.2-2 1 .4-2.2-1.5-1.7 2.2-.2 1-2 1 2 2.2.4-1.6 1.6m-17.8 2.3-2-1.2-2 1 .5-2.2-1.6-1.7 2.3-.2 1-2 1 2 2.1.4-1.6 1.6m-30.4-24.6-2-1.1-2 1 .5-2.3-1.6-1.6 2.2-.3 1-2 1 2 2.2.5-1.6 1.5m3.7 57-1.6-.9-1.8.9.4-2-1.3-1.4 1.9-.2.9-1.7.8 1.8 1.9.3-1.4 1.3m-46.2-86.6-4-2.3-4 2 .9-4.5-3.2-3.3 4.5-.6 2.2-4 1.9 4.2 4.4.8-3.3 3.1"/>
 9 |     <path fill="#fff" fill-rule="evenodd" d="M444.4 285.8a125 125 0 0 0 5.8-19.8c-67.8-59.5-143.3-90-238.7-83.7a125 125 0 0 0-8.5 20.9c113-10.8 196 39.2 241.4 82.6"/>
10 |     <path fill="#309e3a" d="m414 252.4 2.3 1.3a3 3 0 0 0-.3 2.2 3 3 0 0 0 1.4 1.7q1 .8 2 .7.9 0 1.3-.7l.2-.9-.5-1-1.5-1.8a8 8 0 0 1-1.8-3 4 4 0 0 1 2-4.4 4 4 0 0 1 2.3-.2 7 7 0 0 1 2.6 1.2q2.1 1.5 2.6 3.2a4 4 0 0 1-.6 3.3l-2.4-1.5q.5-1 .2-1.7-.2-.8-1.2-1.4a3 3 0 0 0-1.8-.7 1 1 0 0 0-.9.5q-.3.4-.1 1 .2.8 1.6 2.2t2 2.5a4 4 0 0 1-.3 4.2 4 4 0 0 1-1.9 1.5 4 4 0 0 1-2.4.3q-1.3-.3-2.8-1.3-2.2-1.5-2.7-3.3a5 5 0 0 1 .6-4zm-11.6-7.6 2.5 1.3a3 3 0 0 0-.2 2.2 3 3 0 0 0 1.4 1.6q1.1.8 2 .6.9 0 1.3-.8l.2-.8q0-.5-.5-1l-1.6-1.8q-1.7-1.6-2-2.8a4 4 0 0 1 .4-3.1 4 4 0 0 1 1.6-1.4 4 4 0 0 1 2.2-.3 7 7 0 0 1 2.6 1q2.3 1.5 2.7 3.1a4 4 0 0 1-.4 3.4l-2.5-1.4q.5-1 .2-1.7-.4-1-1.3-1.4a3 3 0 0 0-1.9-.6 1 1 0 0 0-.8.5q-.3.4-.1 1 .3.8 1.7 2.2 1.5 1.5 2 2.4a4 4 0 0 1 0 4.2 4 4 0 0 1-1.8 1.6 4 4 0 0 1-2.4.3 8 8 0 0 1-2.9-1.1 6 6 0 0 1-2.8-3.2 5 5 0 0 1 .4-4m-14.2-3.8 7.3-12 8.8 5.5-1.2 2-6.4-4-1.6 2.7 6 3.7-1.3 2-6-3.7-2 3.3 6.7 4-1.2 2zm-20.7-17 1.1-2 5.4 2.7-2.5 5q-1.2.3-3 .2a9 9 0 0 1-3.3-1 8 8 0 0 1-3-2.6 6 6 0 0 1-1-3.5 9 9 0 0 1 1-3.7 8 8 0 0 1 2.6-3 6 6 0 0 1 3.6-1.1q1.4 0 3.2 1 2.4 1.1 3.1 2.8a5 5 0 0 1 .3 3.5l-2.7-.8a3 3 0 0 0-.2-2q-.4-.9-1.6-1.4a4 4 0 0 0-3.1-.3q-1.5.5-2.6 2.6t-.7 3.8a4 4 0 0 0 2 2.4q.8.5 1.7.5h1.8l.8-1.6zm-90.2-22.3 2-14 4.2.7 1.1 9.8 3.9-9 4.2.6-2 13.8-2.7-.4 1.7-10.9-4.4 10.5-2.7-.4-1.1-11.3-1.6 11zm-14.1-1.7 1.3-14 10.3 1-.2 2.4-7.5-.7-.3 3 7 .7-.3 2.4-7-.7-.3 3.8 7.8.7-.2 2.4z"/>
11 |     <g stroke-opacity=".5">
12 |       <path fill="#309e3a" d="M216.5 191.3q0-2.2.7-3.6a7 7 0 0 1 1.4-1.9 5 5 0 0 1 1.8-1.2q1.5-.5 3-.5 3.1.1 5 2a7 7 0 0 1 1.6 5.5q0 3.3-2 5.3a7 7 0 0 1-5 1.7 7 7 0 0 1-4.8-2 7 7 0 0 1-1.7-5.3"/>
13 |       <path fill="#f7ffff" d="M219.4 191.3q0 2.3 1 3.6t2.8 1.3a4 4 0 0 0 2.8-1.1q1-1.2 1.1-3.7.1-2.4-1-3.6a4 4 0 0 0-2.7-1.3 4 4 0 0 0-2.8 1.2q-1.1 1.2-1.2 3.6"/>
14 |     </g>
15 |     <g stroke-opacity=".5">
16 |       <path fill="#309e3a" d="m233 198.5.2-14h6q2.2 0 3.2.5 1 .3 1.6 1.3c.6 1 .6 1.4.6 2.3a4 4 0 0 1-1 2.6 5 5 0 0 1-2.7 1.2l1.5 1.2q.6.6 1.5 2.3l1.7 2.8h-3.4l-2-3.2-1.4-2-.9-.6-1.4-.2h-.6v5.8z"/>
17 |       <path fill="#fff" d="M236 190.5h2q2.1 0 2.6-.2.5-.1.8-.5.4-.6.3-1 0-.9-.4-1.2-.3-.4-1-.6h-2l-2.3-.1z"/>
18 |     </g>
19 |     <g stroke-opacity=".5">
20 |       <path fill="#309e3a" d="m249 185.2 5.2.3q1.7 0 2.6.3a5 5 0 0 1 2 1.4 6 6 0 0 1 1.2 2.4q.4 1.4.3 3.3a9 9 0 0 1-.5 3q-.6 1.5-1.7 2.4a5 5 0 0 1-2 1q-1 .3-2.5.2l-5.3-.3z"/>
21 |       <path fill="#fff" d="m251.7 187.7-.5 9.3h3.8q.8 0 1.2-.5.5-.4.8-1.3t.4-2.6l-.1-2.5a3 3 0 0 0-.8-1.4l-1.2-.7-2.3-.3z"/>
22 |     </g>
23 |     <g stroke-opacity=".5">
24 |       <path fill="#309e3a" d="m317.6 210.2 3.3-13.6 4.4 1 3.2 1q1.1.6 1.6 1.9t.2 2.8q-.3 1.2-1 2a4 4 0 0 1-3 1.4q-1 0-3-.5l-1.7-.5-1.2 5.2z"/>
25 |       <path fill="#fff" d="m323 199.6-.8 3.8 1.5.4q1.6.4 2.2.3a2 2 0 0 0 1.6-1.5q0-.7-.2-1.3a2 2 0 0 0-1-.9l-1.9-.5-1.3-.3z"/>
26 |     </g>
27 |     <g stroke-opacity=".5">
28 |       <path fill="#309e3a" d="m330.6 214.1 4.7-13.2 5.5 2q2.2.8 3 1.4.8.7 1 1.8c.2 1.1.2 1.5 0 2.3q-.6 1.5-1.8 2.2-1.2.6-3 .3.6.7 1 1.6l.8 2.7.6 3.1-3.1-1.1-1-3.6-.7-2.4-.6-.8q-.3-.4-1.3-.7l-.5-.2-2 5.6z"/>
29 |       <path fill="#fff" d="m336 207.4 1.9.7q2 .7 2.5.7t.9-.3q.5-.3.6-.9.3-.6 0-1.2l-.8-.9-2-.7-2-.7-1.2 3.3z"/>
30 |     </g>
31 |     <g stroke-opacity=".5">
32 |       <path fill="#309e3a" d="M347 213.6a9 9 0 0 1 1.7-3.2l1.8-1.5 2-.7q1.5-.1 3.1.4a7 7 0 0 1 4.2 3.3q1.2 2.4.2 5.7a7 7 0 0 1-3.4 4.5q-2.3 1.3-5.2.4a7 7 0 0 1-4.2-3.3 7 7 0 0 1-.2-5.6"/>
33 |       <path fill="#fff" d="M349.8 214.4q-.7 2.3 0 3.8c.7 1.5 1.2 1.6 2.3 2q1.5.5 3-.4 1.4-.8 2.1-3.2.8-2.2 0-3.7a4 4 0 0 0-2.2-2 4 4 0 0 0-3 .3q-1.5.8-2.2 3.2"/>
34 |     </g>
35 |     <g stroke-opacity=".5">
36 |       <path fill="#309e3a" d="m374.3 233.1 6.4-12.4 5.3 2.7a10 10 0 0 1 2.7 1.9q.8.7.8 1.9c0 1.2 0 1.5-.4 2.2a4 4 0 0 1-2 2q-1.5.4-3.1-.2.6 1 .8 1.7.3.9.4 2.8l.2 3.2-3-1.5-.4-3.7-.3-2.5-.5-1-1.2-.7-.5-.3-2.7 5.2z"/>
37 |       <path fill="#fff" d="m380.5 227.2 1.9 1q1.8 1 2.3 1t1-.2q.4-.2.7-.8t.2-1.2l-.7-1-1.8-1-2-1z"/>
38 |     </g>
39 |     <g stroke-opacity=".5">
40 |       <path fill="#309e3a" d="M426.1 258.7a9 9 0 0 1 2.5-2.6 7 7 0 0 1 2.2-.9 6 6 0 0 1 2.2 0q1.5.3 2.8 1.2a7 7 0 0 1 3 4.4q.4 2.6-1.4 5.5a7 7 0 0 1-4.5 3.3 7 7 0 0 1-5.2-1.1 7 7 0 0 1-3-4.4q-.4-2.7 1.4-5.4"/>
41 |       <path fill="#fff" d="M428.6 260.3q-1.4 2-1.1 3.6a4 4 0 0 0 1.6 2.5q1.5 1 3 .6t2.9-2.4q1.4-2.1 1.1-3.6t-1.6-2.6c-1.4-1.1-2-.8-3-.5q-1.5.3-3 2.4z"/>
42 |     </g>
43 |     <path fill="#309e3a" d="m301.8 204.5 2.3-9.8 7.2 1.7-.3 1.6-5.3-1.2-.5 2.2 4.9 1.1-.4 1.7-4.9-1.2-.6 2.7 5.5 1.3-.4 1.6z"/>
44 |   </g>
45 | </svg>
46 | 
```

--------------------------------------------------------------------------------
/chrome-extension/assets/flags/pt.svg:
--------------------------------------------------------------------------------

```
 1 | <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="flag-icons-pt" viewBox="0 0 640 480">
 2 |   <path fill="red" d="M256 0h384v480H256z"/>
 3 |   <path fill="#060" d="M0 0h256v480H0z"/>
 4 |   <g fill="#ff0" fill-rule="evenodd" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width=".6">
 5 |     <path d="M339.5 306.2c-32.3-1-180-93.2-181-108l8.1-13.5c14.7 21.3 165.7 111 180.6 107.8z"/>
 6 |     <path d="M164.9 182.8c-2.9 7.8 38.6 33.4 88.4 63.8s92.9 49 96 46.4l1.5-2.8q-.9 1.6-4.3.6c-13.5-3.9-48.6-20-92.1-46.4-43.6-26.4-81.4-50.7-87.3-61a6 6 0 0 1-.6-3.1h-.2l-1.2 2.2zm175.3 123.8q-.7 1.3-3.5.8c-12-1.3-48.6-19.1-91.9-45-50.4-30.2-92-57.6-87.4-64.8l1.2-2.2.2.1c-4 12.2 82.1 61.4 87.2 64.6 49.8 30.8 91.8 48.9 95.5 44.2z"/>
 7 |     <path d="M256.2 207.2c32.2-.3 72-4.4 95-13.6l-5-8c-13.5 7.5-53.5 12.5-90.3 13.2-43.4-.4-74.1-4.5-89.5-14.8l-4.6 8.6c28.2 12 57.2 14.5 94.4 14.6"/>
 8 |     <path d="M352.5 193.8c-.8 1.3-15.8 6.4-37.8 10.2a381 381 0 0 1-58.6 4.3 416 416 0 0 1-56.2-3.6c-23.1-3.6-35-8.6-39.5-10.4l1.1-2.2c12.7 5 24.7 8 38.7 10.2A412 412 0 0 0 256 206a392 392 0 0 0 58.3-4.3c22.5-3.7 34.8-8.4 36.6-10.5zm-4.4-8.1c-2.4 2-14.6 6.3-36 9.7a388 388 0 0 1-55.8 4c-22 0-40.1-1.6-53.8-3.6-21.8-2.8-33.4-8-37.6-9.4l1.3-2.2c3.3 1.7 14.4 6.2 36.5 9.3a385 385 0 0 0 53.6 3.4 384 384 0 0 0 55.4-4c21.5-3 33.1-8.4 34.9-9.8zM150.3 246c19.8 10.7 63.9 16 105.6 16.4 38 .1 87.4-5.8 105.9-15.6l-.5-10.7c-5.8 9-58.8 17.7-105.8 17.4s-90.7-7.6-105.3-17v9.5"/>
 9 |     <path d="M362.8 244.5v2.5c-2.8 3.4-20.2 8.4-42 12a434 434 0 0 1-65.4 4.4 400 400 0 0 1-62-4.3 155 155 0 0 1-44.4-12v-2.9c9.7 6.4 35.9 11.2 44.7 12.6 15.8 2.4 36.1 4.2 61.7 4.2 26.9 0 48.4-1.9 65-4.4 15.7-2.3 38-8.2 42.4-12.1m0-9v2.5c-2.8 3.3-20.2 8.3-42 11.9a434 434 0 0 1-65.4 4.5 414 414 0 0 1-62-4.3 155 155 0 0 1-44.4-12v-3c9.7 6.5 36 11.2 44.7 12.6a408 408 0 0 0 61.7 4.3c26.9 0 48.5-2 65-4.5 15.7-2.2 38-8.1 42.4-12m-107 68.8c-45.6-.2-84.7-12.4-93-14.4l6 9.4a250 250 0 0 0 87.4 14.3c34.7-1 65-3.7 86.3-14.1l6.2-9.8c-14.5 6.9-64 14.6-93 14.6"/>
10 |     <path d="m344.9 297.3-2.8 4c-10 3.6-26 7.4-32.6 8.4a296 296 0 0 1-53.7 5c-40.4-.6-73.5-8.5-89-15.3l-1.3-2.1.2-.4 2.1.9a287 287 0 0 0 88.2 14.5c18.8 0 37.5-2.1 52.6-4.8 23.2-4.7 32.6-8.2 35.5-9.8l.7-.4zm5.3-8.8-2 3.5c-5.4 2-20 6.2-41.3 9.2-14 1.9-22.7 3.8-50.6 4.3a347 347 0 0 1-94.2-14L161 289a390 390 0 0 0 95.4 14c25.5-.5 36.4-2.4 50.3-4.3 24.8-3.8 37.3-8 41-9.1v-.2l2.6-1z"/>
11 |     <path d="M350.8 237.6c.1 30-15.3 57-27.6 68.8a99 99 0 0 1-67.8 28.2c-30.3.5-58.8-19.2-66.5-27.9a101 101 0 0 1-27.5-67.4c1.8-32.8 14.7-55.6 33.3-71.3a100 100 0 0 1 64.2-22.7 98 98 0 0 1 71 35.6c12.5 15.2 18 31.7 20.9 56.7M255.6 135a106 106 0 0 1 106 105.2 105.6 105.6 0 1 1-211.4 0c-.1-58 47.3-105.2 105.4-105.2"/>
12 |     <path d="M255.9 134.5c58.2 0 105.6 47.4 105.6 105.6S314.1 345.7 256 345.7s-105.6-47.4-105.6-105.6S197.8 134.5 256 134.5zM152.6 240c0 56.8 46.7 103.3 103.3 103.3S359.2 296.8 359.2 240s-46.7-103.3-103.3-103.3S152.6 183.2 152.6 240"/>
13 |     <path d="M256 143.3a97 97 0 0 1 96.7 96.7 97 97 0 0 1-96.7 96.8c-53 0-96.7-43.6-96.7-96.8a97 97 0 0 1 96.7-96.7M161.6 240c0 52 42.6 94.4 94.4 94.4s94.4-42.5 94.4-94.4-42.6-94.4-94.4-94.4a95 95 0 0 0-94.4 94.4"/>
14 |     <path d="M260.3 134h-9.1v212.3h9z"/>
15 |     <path d="M259.3 132.8h2.3v214.7h-2.2V132.8zm-9 0h2.4v214.7h-2.3z"/>
16 |     <path d="M361.6 244.2v-7.8l-6.4-6-36.3-9.6-52.2-5.3-63 3.2-44.8 10.6-9 6.7v7.9l22.9-10.3 54.4-8.5h52.3l38.4 4.2 26.6 6.4z"/>
17 |     <path d="M256 223.8c24.9 0 49 2.3 68.3 6 19.8 4 33.7 9 38.5 14.5v2.8c-5.8-7-24.5-12-39-15-19-3.6-43-6-67.9-6-26.1 0-50.5 2.6-69.3 6.2-15 3-35.1 9-37.6 14.8v-2.9c1.3-4 16.3-10 37.3-14.3 18.9-3.7 43.3-6.1 69.6-6.1zm0-9.1a383 383 0 0 1 68.3 6c19.8 4 33.7 9 38.5 14.6v2.7c-5.8-6.9-24.5-12-39-14.9-19-3.7-43-6-67.9-6a376 376 0 0 0-69.2 6.2c-14.5 2.7-35.4 8.9-37.7 14.7v-2.8c1.4-4 16.6-10.3 37.3-14.3 19-3.7 43.3-6.2 69.7-6.2m-.6-46.2c39.3-.2 73.6 5.5 89.3 13.5l5.7 10c-13.6-7.4-50.6-15-94.9-14-36.1.3-74.7 4-94 14.4l6.8-11.4c15.9-8.3 53.3-12.5 87.1-12.5"/>
18 |     <path d="M256 176.7a354 354 0 0 1 61.3 4.3c16 3 31.3 7.4 33.5 9.8l1.7 3c-5.3-3.4-18.6-7.3-35.6-10.5s-38.7-4.3-61-4.2c-25.3-.1-45 1.2-61.8 4.2a109 109 0 0 0-33.3 10.3l1.7-3.1c6-3 15.3-6.7 31.1-9.6 17.5-3.2 37.4-4.1 62.4-4.2m0-9c21.4-.2 42.6 1 59.1 4a96 96 0 0 1 30.6 10l2.5 4c-4.2-4.7-20-9.2-34.1-11.6-16.4-2.9-36.7-4-58.1-4.2a361 361 0 0 0-59.5 4.4 97 97 0 0 0-29.6 9.1l2.2-3.3c5.8-3 15.2-5.8 27-8.1a357 357 0 0 1 59.9-4.4zM308.4 284a276 276 0 0 0-52.5-4c-65.5.8-86.6 13.5-89.2 17.3l-5-8c16.8-12 52.4-18.8 94.6-18.2q32.9.5 56.6 5l-4.5 8"/>
19 |     <path d="M255.6 278.9c18.2.3 36 1 53.3 4.2l-1.2 2.2c-16-3-33.2-4-52-4-24.3-.2-48.7 2.1-70 8.2-6.7 1.9-17.8 6.2-19 9.8l-1.2-2c.4-2.2 7-6.6 19.6-10 24.4-7 47.2-8.3 70.5-8.4m.8-9.2a327 327 0 0 1 57.3 5l-1.3 2.3a299 299 0 0 0-56-4.9c-24.2 0-49.9 1.8-73.3 8.6-7.5 2.2-20.6 7-21 10.7l-1.2-2.2c.2-3.4 11.5-7.9 21.7-10.8 23.5-6.9 49.3-8.6 73.8-8.7"/>
20 |     <path d="m349.4 290.5-7.8 12.3-22.7-20.1-58.6-39.5-66.2-36.3-34.3-11.7 7.3-13.6 2.5-1.3 21.3 5.3 70.4 36.3 40.6 25.6L336 272l13.9 16z"/>
21 |     <path d="M158.6 195.5c6-4 50.2 15.6 96.6 43.6 46.1 28 90.3 59.6 86.3 65.5l-1.3 2.1-.6.5c.1-.1.8-1 0-3.1-2-6.5-33.4-31.5-85.3-62.9-50.7-30.1-92.9-48.3-97-43.1zM351 290.4c3.8-7.6-37.2-38.5-88.1-68.6-52-29.5-89.6-46.9-96.5-41.7L165 183l.4-.5c1.2-1 3.3-1 4.2-1 11.8.2 45.5 15.7 92.8 42.8 20.8 12 87.6 55 87.3 67 0 1 .1 1.2-.3 1.8l1.7-2.6z"/>
22 |   </g>
23 |   <g transform="translate(0 26.7)scale(1.06667)">
24 |     <path fill="#fff" stroke="#000" stroke-width=".7" d="M180.6 211a59 59 0 0 0 17.5 41.7 59 59 0 0 0 41.8 17.6 59 59 0 0 0 42-17.4 59 59 0 0 0 17.4-41.8v-79.2l-118.7-.2z"/>
25 |     <path fill="red" stroke="#000" stroke-width=".5" d="M183 211.1a56 56 0 0 0 16.8 40 57 57 0 0 0 40.2 16.8 57 57 0 0 0 40.2-16.6 56 56 0 0 0 16.7-40v-77H183v76.8m91-53.7v48.9l-.1 5.1a33 33 0 0 1-10 24 34 34 0 0 1-24 10c-9.4 0-17.7-4-23.9-10.2a34 34 0 0 1-10-24v-54z"/>
26 |     <g id="pt-e">
27 |       <g id="pt-d" fill="#ff0" stroke="#000" stroke-width=".5">
28 |         <path stroke="none" d="M190.2 154.4c.1-5.5 4-6.8 4-6.8.1 0 4.3 1.4 4.3 6.9z"/>
29 |         <path d="m186.8 147.7-.7 6.3h4.2c0-5.2 4-6 4-6 .1 0 4 1.1 4.1 6h4.2l-.8-6.4zm-1 6.4h17q.5 0 .6.7 0 .8-.6.8h-17q-.5 0-.6-.8 0-.7.7-.7z"/>
30 |         <path d="M192 154c0-3.3 2.3-4.2 2.3-4.2s2.3 1 2.3 4.2H192m-5.8-9h16.3q.5.1.6.8 0 .5-.6.6h-16.3q-.5 0-.6-.7 0-.5.6-.6zm.4 1.5H202q.5 0 .6.7t-.6.7h-15.5q-.6 0-.6-.7t.6-.7zm5-10.6h1.2v.8h.9v-.8h1.3v.9h.9v-1h1.2v2q0 .6-.5.6h-4.4q-.5 0-.6-.5zm4.6 2.7.3 6.4h-4.3l.3-6.5h3.7"/>
31 |         <path id="pt-a" d="M191 141.6v3.4h-4v-3.4z"/>
32 |         <use xlink:href="#pt-a" width="100%" height="100%" x="10.6"/>
33 |         <path id="pt-b" d="M186.3 139h1.2v1h.9v-1h1.2v1h.9v-1h1.2v2q0 .6-.5.6h-4.3l-.6-.6z"/>
34 |         <use xlink:href="#pt-b" width="100%" height="100%" x="10.6"/>
35 |         <path fill="#000001" stroke="none" d="M193.9 140.6c0-.6.9-.6.9 0v1.6h-.9z"/>
36 |         <path id="pt-c" fill="#000001" stroke="none" d="M188.6 142.8c0-.6.8-.6.8 0v1.2h-.8z"/>
37 |         <use xlink:href="#pt-c" width="100%" height="100%" x="10.6"/>
38 |       </g>
39 |       <use xlink:href="#pt-d" width="100%" height="100%" y="46.3"/>
40 |       <use xlink:href="#pt-d" width="100%" height="100%" transform="rotate(-45.2 312.8 180)"/>
41 |     </g>
42 |     <use xlink:href="#pt-d" width="100%" height="100%" x="45.7"/>
43 |     <use xlink:href="#pt-e" width="100%" height="100%" transform="matrix(-1 0 0 1 479.8 0)"/>
44 |     <g id="pt-f" fill="#fff">
45 |       <path fill="#039" d="M232.6 202.4a8 8 0 0 0 2.2 5.7 7 7 0 0 0 5.3 2.4q3.2-.2 5.3-2.4a8 8 0 0 0 2.2-5.7v-10.8h-15z"/>
46 |       <circle cx="236.1" cy="195.7" r="1.5"/>
47 |       <circle cx="244.4" cy="195.7" r="1.5"/>
48 |       <circle cx="240.2" cy="199.7" r="1.5"/>
49 |       <circle cx="236.1" cy="203.9" r="1.5"/>
50 |       <circle cx="244.4" cy="203.9" r="1.5"/>
51 |     </g>
52 |     <use xlink:href="#pt-f" width="100%" height="100%" y="-26"/>
53 |     <use xlink:href="#pt-f" width="100%" height="100%" x="-20.8"/>
54 |     <use xlink:href="#pt-f" width="100%" height="100%" x="20.8"/>
55 |     <use xlink:href="#pt-f" width="100%" height="100%" y="25.8"/>
56 |   </g>
57 | </svg>
58 | 
```
Page 1/5FirstPrevNextLast