@thead-vantage/react 2.1.0 → 2.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,84 +1,429 @@
1
- # @thead-vantage/react
2
-
3
- React component library for TheAd Vantage advertising platform.
4
-
5
- ## Installation
6
-
7
- ```bash
8
- npm install @thead-vantage/react
9
- ```
10
-
11
- ## Usage
12
-
13
- ```tsx
14
- import { AdBanner } from "@thead-vantage/react"
15
-
16
- function App() {
17
- return (
18
- <AdBanner
19
- apiKey="your-api-key"
20
- platformId="your-platform-id"
21
- size="banner"
22
- userId="user123" // Optional: Platform-specific user ID
23
- userSegment="premium" // Optional: User segment/category
24
- viewabilityThreshold={50} // Optional: Percentage of ad that must be visible (default: 50%)
25
- viewabilityTimeThreshold={1000} // Optional: Time in ms that ad must be visible (default: 1000ms)
26
- onImpression={(data) => {
27
- console.log("Ad impression recorded:", data)
28
- // data.viewability contains detailed viewability metrics
29
- }}
30
- onClick={(data) => {
31
- console.log("Ad clicked:", data)
32
- }}
33
- />
34
- )
35
- }
36
- ```
37
-
38
- ## Props
39
-
40
- | Prop | Type | Required | Description |
41
- |------|------|----------|-------------|
42
- | `apiKey` | string | Yes | Your platform's API key |
43
- | `platformId` | string | No | Your platform ID (default: "1") |
44
- | `size` | "banner" \| "sidebar" \| "leaderboard" | No | Ad size (default: "banner") |
45
- | `className` | string | No | Additional CSS classes |
46
- | `userId` | string | No | Platform-specific user ID for tracking |
47
- | `userSegment` | string | No | User segment/category for targeting |
48
- | `viewabilityThreshold` | number | No | Percentage of ad that must be visible to count as viewed (default: 50) |
49
- | `viewabilityTimeThreshold` | number | No | Time in milliseconds that ad must be visible to count as viewed (default: 1000) |
50
- | `onImpression` | (data: { campaignId: string; platformId: string; userId?: string; viewability: ViewabilityMetrics }) => void | No | Callback when ad impression is recorded |
51
- | `onClick` | (data: { campaignId: string; platformId: string; userId?: string }) => void | No | Callback when ad is clicked |
52
-
53
- ## Viewability Tracking
54
-
55
- The component implements IAB/MRC viewability standards:
56
-
57
- - Tracks when the ad is visible in the viewport
58
- - Measures the percentage of the ad that is visible
59
- - Records the total time the ad is visible
60
- - Only counts impressions when both visibility percentage and time thresholds are met
61
- - Provides detailed viewability metrics in the impression callback
62
-
63
- ## Features
64
-
65
- - Multiple ad sizes (banner, sidebar, leaderboard)
66
- - User tracking and targeting
67
- - Impression and click tracking
68
- - Viewability tracking (IAB/MRC compliant)
69
- - Support for image and video ads
70
- - Responsive design
71
- - Loading and error states
72
- - Customizable styling
73
- - Lazy loading of images
74
- - Automatic cleanup of observers and timers
75
-
76
- ## Ad Sizes
77
-
78
- - Banner: Full width, 90px height
79
- - Sidebar: 300px width, 250px height
80
- - Leaderboard: Full width, 250px height
81
-
82
- ## License
83
-
84
- MIT
1
+ # TheAd Vantage React Library
2
+
3
+ This is a [Next.js](https://nextjs.org) project that integrates with TheAd Vantage platform for ad serving. The integration supports three distinct development modes to accommodate different development and production scenarios.
4
+
5
+ ## Getting Started
6
+
7
+ First, run the development server:
8
+
9
+ ```bash
10
+ npm run dev
11
+ # or
12
+ yarn dev
13
+ # or
14
+ pnpm dev
15
+ # or
16
+ bun dev
17
+ ```
18
+
19
+ Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
20
+
21
+ This project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load [Geist](https://vercel.com/font), a new font family for Vercel.
22
+
23
+ ---
24
+
25
+ ## TheAd Vantage Integration - Three Development Modes
26
+
27
+ The TheAd Vantage integration supports three distinct modes of operation:
28
+
29
+ ### 1. Production Mode (Default)
30
+
31
+ **Use Case**: Platform developers using the component in production or their own development environments.
32
+
33
+ **Behavior**:
34
+ - Connects to `https://thead-vantage.com/api/ads` by default
35
+ - Full tracking enabled (impressions and clicks are recorded)
36
+ - No configuration required
37
+
38
+ **Configuration**: None needed - this is the default behavior.
39
+
40
+ **Example Usage**:
41
+ ```tsx
42
+ import { AdBanner } from '@/components/AdBanner';
43
+
44
+ export default function MyPage() {
45
+ return (
46
+ <AdBanner
47
+ platformId="10"
48
+ apiKey="your-api-key-here"
49
+ size="leaderboard"
50
+ />
51
+ );
52
+ }
53
+ ```
54
+
55
+ ### 2. Platform Developer Dev Mode
56
+
57
+ **Use Case**: Platform developers testing locally with their own platform instance.
58
+
59
+ **Behavior**:
60
+ - Connects to a custom API URL (your platform's API endpoint)
61
+ - Full tracking enabled (impressions and clicks are recorded)
62
+ - Allows testing with your own platform without affecting production
63
+
64
+ **Configuration**: Set the `NEXT_PUBLIC_THEAD_VANTAGE_API_URL` environment variable in `.env.local`:
65
+
66
+ ```env
67
+ # .env.local
68
+ NEXT_PUBLIC_THEAD_VANTAGE_API_URL=https://your-platform.com/api/ads
69
+ ```
70
+
71
+ **Example Usage**:
72
+ ```tsx
73
+ // Option 1: Use environment variable (recommended)
74
+ <AdBanner
75
+ platformId="10"
76
+ apiKey="your-api-key"
77
+ size="leaderboard"
78
+ />
79
+
80
+ // Option 2: Override directly in component
81
+ <AdBanner
82
+ platformId="10"
83
+ apiKey="your-api-key"
84
+ size="leaderboard"
85
+ apiUrl="https://your-platform.com/api/ads"
86
+ />
87
+ ```
88
+
89
+ ### 3. TheAd Vantage Dev Mode
90
+
91
+ **Use Case**: TheAd Vantage developers testing the component with a local platform instance.
92
+
93
+ **Behavior**:
94
+ - Connects to `http://localhost:3001/api/ads`
95
+ - Tracking disabled (impressions and clicks are NOT recorded)
96
+ - Returns mock data if local platform is unavailable
97
+ - Shows dev mode indicators in the UI
98
+
99
+ **Configuration**: Set the `NEXT_PUBLIC_THEAD_VANTAGE_DEV_MODE` environment variable in `.env.local`:
100
+
101
+ ```env
102
+ # .env.local
103
+ NEXT_PUBLIC_THEAD_VANTAGE_DEV_MODE=true
104
+ ```
105
+
106
+ **Example Usage**:
107
+ ```tsx
108
+ // Automatically uses localhost:3001 when dev mode is enabled
109
+ <AdBanner
110
+ platformId="10"
111
+ apiKey="your-api-key"
112
+ size="leaderboard"
113
+ />
114
+ ```
115
+
116
+ ---
117
+
118
+ ## Component API
119
+
120
+ ### AdBanner Component
121
+
122
+ The main component for displaying ads from TheAd Vantage.
123
+
124
+ **Props**:
125
+
126
+ | Prop | Type | Required | Default | Description |
127
+ |------|------|----------|---------|-------------|
128
+ | `platformId` | `string` | Yes | - | Your platform ID from TheAd Vantage |
129
+ | `apiKey` | `string` | Yes | - | Your API key from TheAd Vantage |
130
+ | `size` | `'leaderboard' \| 'medium-rectangle' \| 'wide-skyscraper' \| 'banner'` | No | `'banner'` | Ad size specification |
131
+ | `apiUrl` | `string` | No | - | Override API endpoint URL (highest priority) |
132
+ | `userId` | `string \| null` | No | `null` | User ID for ad targeting |
133
+ | `userSegment` | `string \| null` | No | `null` | User segment for ad targeting |
134
+ | `className` | `string` | No | `''` | Additional CSS classes |
135
+
136
+ **Example**:
137
+ ```tsx
138
+ import { AdBanner } from '@/components/AdBanner';
139
+
140
+ export default function ArticlePage() {
141
+ return (
142
+ <div>
143
+ <article>
144
+ <h1>My Article</h1>
145
+ <p>Article content...</p>
146
+ </article>
147
+
148
+ <aside>
149
+ <AdBanner
150
+ platformId="10"
151
+ apiKey="abc123xyz"
152
+ size="medium-rectangle"
153
+ userId="user-123"
154
+ userSegment="premium"
155
+ className="my-4"
156
+ />
157
+ </aside>
158
+ </div>
159
+ );
160
+ }
161
+ ```
162
+
163
+ ### Utility Functions
164
+
165
+ You can also use the utility functions directly:
166
+
167
+ ```tsx
168
+ import { fetchAdBanner, trackImpression, trackClick } from '@/lib/ads';
169
+
170
+ // Fetch an ad
171
+ const response = await fetchAdBanner({
172
+ platformId: '10',
173
+ apiKey: 'your-api-key',
174
+ size: 'leaderboard',
175
+ userId: 'user-123',
176
+ userSegment: 'premium',
177
+ });
178
+
179
+ // Track events (automatically skipped in TheAd Vantage dev mode)
180
+ trackImpression(adId);
181
+ trackClick(adId);
182
+ ```
183
+
184
+ ---
185
+
186
+ ## Environment Variables
187
+
188
+ ### For Platform Developers
189
+
190
+ ```env
191
+ # .env.local
192
+ # Optional: Point to your own platform instance
193
+ NEXT_PUBLIC_THEAD_VANTAGE_API_URL=https://your-platform.com/api/ads
194
+ ```
195
+
196
+ ### For TheAd Vantage Developers
197
+
198
+ ```env
199
+ # .env.local
200
+ # Enable TheAd Vantage dev mode (uses localhost:3001, disables tracking)
201
+ NEXT_PUBLIC_THEAD_VANTAGE_DEV_MODE=true
202
+ ```
203
+
204
+ **Priority Order** (highest to lowest):
205
+ 1. Explicit `apiUrl` prop in component
206
+ 2. `NEXT_PUBLIC_THEAD_VANTAGE_API_URL` environment variable
207
+ 3. `NEXT_PUBLIC_THEAD_VANTAGE_DEV_MODE=true` (uses localhost:3001)
208
+ 4. Production mode (default: https://thead-vantage.com/api/ads)
209
+
210
+ ---
211
+
212
+ ## API Routes
213
+
214
+ The integration includes Next.js API routes that proxy requests to TheAd Vantage:
215
+
216
+ - **`GET /api/ads`** - Fetches ads from TheAd Vantage platform
217
+ - Automatically handles all three modes
218
+ - Adds `dev_mode`, `no_track`, and `no_click_track` parameters in dev mode
219
+ - Returns mock data if platform is unavailable in TheAd Vantage dev mode
220
+
221
+ - **`POST /api/ads`** - Tracks ad impressions/clicks
222
+ - Automatically skipped in TheAd Vantage dev mode
223
+ - Logs dev mode messages when tracking is skipped
224
+
225
+ ---
226
+
227
+ ## Development Mode Features
228
+
229
+ When in **TheAd Vantage Dev Mode** (`NEXT_PUBLIC_THEAD_VANTAGE_DEV_MODE=true`):
230
+
231
+ - ✅ **No Tracking**: Impressions and clicks are NOT recorded
232
+ - ✅ **Mock Fallback**: If localhost:3001 is unavailable, uses mock ad data
233
+ - ✅ **Dev Indicators**: UI shows "[DEV] No tracking active" message
234
+ - ✅ **Console Logging**: Dev mode actions are logged to console
235
+ - ✅ **Error Resilience**: Connection failures won't break your development workflow
236
+
237
+ ---
238
+
239
+ ## Learn More
240
+
241
+ To learn more about Next.js, take a look at the following resources:
242
+
243
+ - [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
244
+ - [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
245
+
246
+ You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome!
247
+
248
+ ---
249
+
250
+ ## Deploy on Vercel
251
+
252
+ The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.
253
+
254
+ Check out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details.
255
+
256
+ ---
257
+
258
+ # AI Agent Implementation Guide
259
+
260
+ > **For AI Agents (Cursor, GitHub Copilot, etc.)**: This section provides comprehensive instructions for implementing and using TheAd Vantage integration in this codebase.
261
+
262
+ ## System Architecture
263
+
264
+ The TheAd Vantage integration uses a three-mode system to support different development scenarios:
265
+
266
+ 1. **Production Mode**: Default behavior, connects to `https://thead-vantage.com/api/ads`
267
+ 2. **Platform Developer Dev Mode**: Custom API URL via `NEXT_PUBLIC_THEAD_VANTAGE_API_URL` env var
268
+ 3. **TheAd Vantage Dev Mode**: Local development via `NEXT_PUBLIC_THEAD_VANTAGE_DEV_MODE=true` env var
269
+
270
+ ## Key Files and Their Purposes
271
+
272
+ ### Configuration
273
+ - **`src/lib/thead-vantage-config.ts`**: Core configuration utility that determines API URL based on mode priority
274
+ - `getApiBaseUrl(explicitApiUrl?)`: Returns the appropriate API base URL
275
+ - `isTheadVantageDevMode()`: Checks if TheAd Vantage dev mode is active
276
+ - `setTheadVantageConfig(config)`: Runtime configuration for browser contexts
277
+
278
+ ### API Routes
279
+ - **`src/app/api/ads/route.ts`**: Next.js API route that proxies requests to TheAd Vantage
280
+ - `GET /api/ads`: Fetches ads, handles all three modes, adds dev flags when needed
281
+ - `POST /api/ads`: Tracks impressions/clicks, skips tracking in dev mode
282
+
283
+ ### Components
284
+ - **`src/components/AdBanner.tsx`**: Main React component for displaying ads
285
+ - Props: `platformId`, `apiKey`, `size`, `apiUrl?`, `userId?`, `userSegment?`, `className?`
286
+ - Automatically handles loading, error states, and dev mode indicators
287
+
288
+ ### Utilities
289
+ - **`src/lib/ads.ts`**: Utility functions for fetching and tracking ads
290
+ - `fetchAdBanner(params)`: Fetches ads with full parameter support
291
+ - `trackImpression(adId)`: Tracks ad impressions (skipped in dev mode)
292
+ - `trackClick(adId)`: Tracks ad clicks (skipped in dev mode)
293
+
294
+ ## Implementation Instructions for AI Agents
295
+
296
+ ### When Adding TheAd Vantage Integration to a New Component
297
+
298
+ 1. **Import the AdBanner component**:
299
+ ```tsx
300
+ import { AdBanner } from '@/components/AdBanner';
301
+ ```
302
+
303
+ 2. **Use the component with required props**:
304
+ ```tsx
305
+ <AdBanner
306
+ platformId="10"
307
+ apiKey="your-api-key"
308
+ size="leaderboard"
309
+ />
310
+ ```
311
+
312
+ 3. **For platform developers using custom API**: Ensure they set `NEXT_PUBLIC_THEAD_VANTAGE_API_URL` in `.env.local`
313
+
314
+ 4. **For TheAd Vantage developers**: Ensure they set `NEXT_PUBLIC_THEAD_VANTAGE_DEV_MODE=true` in `.env.local`
315
+
316
+ ### When Debugging Ad Loading Issues
317
+
318
+ 1. **Check environment variables**: Verify `.env.local` has correct configuration
319
+ 2. **Check console logs**: Look for `[AdBanner]` prefixed messages
320
+ 3. **Verify API URL resolution**: The `getApiBaseUrl()` function logs which mode is active
321
+ 4. **Check network tab**: Verify requests are going to the correct endpoint
322
+
323
+ ### When Implementing Custom Ad Fetching
324
+
325
+ 1. **Use `fetchAdBanner()` utility** instead of direct fetch calls
326
+ 2. **Pass `apiUrl` parameter** if you need to override the default
327
+ 3. **Handle `dev_mode` flag** in response to show appropriate UI indicators
328
+ 4. **Use `trackImpression()` and `trackClick()`** for tracking (automatically skipped in dev mode)
329
+
330
+ ### Mode Detection Priority (Important for AI Agents)
331
+
332
+ The system uses this priority order to determine which API URL to use:
333
+
334
+ 1. **Explicit `apiUrl` prop** (highest priority) - passed directly to component
335
+ 2. **`NEXT_PUBLIC_THEAD_VANTAGE_API_URL` env var** - for platform developers
336
+ 3. **`NEXT_PUBLIC_THEAD_VANTAGE_DEV_MODE=true`** - for TheAd Vantage developers (uses localhost:3001)
337
+ 4. **Production mode** (lowest priority) - default: https://thead-vantage.com/api/ads
338
+
339
+ ### Common Patterns
340
+
341
+ **Pattern 1: Basic Ad Display**
342
+ ```tsx
343
+ <AdBanner platformId="10" apiKey="key" size="banner" />
344
+ ```
345
+
346
+ **Pattern 2: Ad with User Targeting**
347
+ ```tsx
348
+ <AdBanner
349
+ platformId="10"
350
+ apiKey="key"
351
+ size="leaderboard"
352
+ userId={user?.id}
353
+ userSegment={user?.segment}
354
+ />
355
+ ```
356
+
357
+ **Pattern 3: Custom API URL Override**
358
+ ```tsx
359
+ <AdBanner
360
+ platformId="10"
361
+ apiKey="key"
362
+ size="banner"
363
+ apiUrl="https://custom-api.com/ads"
364
+ />
365
+ ```
366
+
367
+ **Pattern 4: Programmatic Ad Fetching**
368
+ ```tsx
369
+ const response = await fetchAdBanner({
370
+ platformId: '10',
371
+ apiKey: 'key',
372
+ size: 'medium-rectangle',
373
+ apiUrl: customUrl, // Optional override
374
+ });
375
+ ```
376
+
377
+ ### Error Handling
378
+
379
+ - The component automatically handles loading and error states
380
+ - In TheAd Vantage dev mode, connection failures return mock data instead of errors
381
+ - Tracking failures are logged but don't throw errors (non-blocking)
382
+
383
+ ### Testing Checklist for AI Agents
384
+
385
+ When implementing or modifying TheAd Vantage integration:
386
+
387
+ - [ ] Verify production mode connects to https://thead-vantage.com/api/ads
388
+ - [ ] Verify platform dev mode respects `NEXT_PUBLIC_THEAD_VANTAGE_API_URL`
389
+ - [ ] Verify TheAd Vantage dev mode uses localhost:3001 when flag is set
390
+ - [ ] Verify tracking is disabled in TheAd Vantage dev mode
391
+ - [ ] Verify mock data is returned when platform is unavailable in dev mode
392
+ - [ ] Verify explicit `apiUrl` prop overrides all other settings
393
+ - [ ] Verify component handles loading states correctly
394
+ - [ ] Verify component handles error states gracefully
395
+ - [ ] Verify dev mode indicators show in UI when appropriate
396
+
397
+ ### Environment Variable Reference
398
+
399
+ ```env
400
+ # Platform Developer Dev Mode
401
+ NEXT_PUBLIC_THEAD_VANTAGE_API_URL=https://your-platform.com/api/ads
402
+
403
+ # TheAd Vantage Dev Mode
404
+ NEXT_PUBLIC_THEAD_VANTAGE_DEV_MODE=true
405
+ ```
406
+
407
+ ### TypeScript Types
408
+
409
+ Key types for reference:
410
+ - `AdBannerProps`: Component props interface
411
+ - `Ad`: Ad data structure
412
+ - `AdsResponse`: API response structure
413
+ - `FetchAdBannerParams`: Parameters for `fetchAdBanner()` function
414
+
415
+ All types are exported from `@/lib/ads` and `@/components/AdBanner`.
416
+
417
+ ---
418
+
419
+ ## Quick Reference
420
+
421
+ **Default Behavior**: Connects to `https://thead-vantage.com/api/ads` (production)
422
+
423
+ **Platform Developer Setup**: Add `NEXT_PUBLIC_THEAD_VANTAGE_API_URL` to `.env.local`
424
+
425
+ **TheAd Vantage Developer Setup**: Add `NEXT_PUBLIC_THEAD_VANTAGE_DEV_MODE=true` to `.env.local`
426
+
427
+ **Component Import**: `import { AdBanner } from '@/components/AdBanner';`
428
+
429
+ **Utility Import**: `import { fetchAdBanner, trackImpression, trackClick } from '@/lib/ads';`
package/next.config.ts ADDED
@@ -0,0 +1,7 @@
1
+ import type { NextConfig } from "next";
2
+
3
+ const nextConfig: NextConfig = {
4
+ /* config options here */
5
+ };
6
+
7
+ export default nextConfig;
package/package.json CHANGED
@@ -1,49 +1,23 @@
1
- {
2
- "name": "@thead-vantage/react",
3
- "version": "2.1.0",
4
- "description": "React component library for TheAd Vantage advertising platform",
5
- "main": "dist/index.js",
6
- "module": "dist/index.esm.js",
7
- "types": "dist/index.d.ts",
8
- "files": [
9
- "dist"
10
- ],
11
- "exports": {
12
- ".": {
13
- "import": "./dist/index.esm.js",
14
- "require": "./dist/index.js",
15
- "types": "./dist/index.d.ts"
16
- }
17
- },
18
- "scripts": {
19
- "build": "rollup -c",
20
- "test": "jest",
21
- "prepublishOnly": "npm run build"
22
- },
23
- "keywords": [
24
- "react",
25
- "advertising",
26
- "ad",
27
- "banner",
28
- "thead-vantage"
29
- ],
30
- "author": "TheAd Vantage Team",
31
- "license": "MIT",
32
- "peerDependencies": {
33
- "react": "^17.0.0 || ^18.0.0 || ^19.0.0",
34
- "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0"
35
- },
36
- "devDependencies": {
37
- "@rollup/plugin-commonjs": "^22.0.2",
38
- "@rollup/plugin-node-resolve": "^13.3.0",
39
- "@rollup/plugin-typescript": "^8.5.0",
40
- "@types/react": "^19.0.0",
41
- "rollup": "^2.79.2",
42
- "rollup-plugin-peer-deps-external": "^2.2.4",
43
- "rollup-plugin-terser": "^7.0.2",
44
- "typescript": "^4.7.3"
45
- },
46
- "dependencies": {
47
- "@thead-vantage/react": "^1.9.0"
48
- }
49
- }
1
+ {
2
+ "name": "@thead-vantage/react",
3
+ "version": "2.1.1",
4
+ "scripts": {
5
+ "dev": "next dev --turbopack",
6
+ "build": "next build",
7
+ "start": "next start",
8
+ "lint": "next lint"
9
+ },
10
+ "dependencies": {
11
+ "react": "^19.0.0",
12
+ "react-dom": "^19.0.0",
13
+ "next": "15.3.1"
14
+ },
15
+ "devDependencies": {
16
+ "typescript": "^5",
17
+ "@types/node": "^20",
18
+ "@types/react": "^19",
19
+ "@types/react-dom": "^19",
20
+ "@tailwindcss/postcss": "^4",
21
+ "tailwindcss": "^4"
22
+ }
23
+ }
@@ -0,0 +1,5 @@
1
+ const config = {
2
+ plugins: ["@tailwindcss/postcss"],
3
+ };
4
+
5
+ export default config;
@@ -0,0 +1 @@
1
+ <svg fill="none" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M14.5 13.5V5.41a1 1 0 0 0-.3-.7L9.8.29A1 1 0 0 0 9.08 0H1.5v13.5A2.5 2.5 0 0 0 4 16h8a2.5 2.5 0 0 0 2.5-2.5m-1.5 0v-7H8v-5H3v12a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1M9.5 5V2.12L12.38 5zM5.13 5h-.62v1.25h2.12V5zm-.62 3h7.12v1.25H4.5zm.62 3h-.62v1.25h7.12V11z" clip-rule="evenodd" fill="#666" fill-rule="evenodd"/></svg>
@@ -0,0 +1 @@
1
+ <svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><g clip-path="url(#a)"><path fill-rule="evenodd" clip-rule="evenodd" d="M10.27 14.1a6.5 6.5 0 0 0 3.67-3.45q-1.24.21-2.7.34-.31 1.83-.97 3.1M8 16A8 8 0 1 0 8 0a8 8 0 0 0 0 16m.48-1.52a7 7 0 0 1-.96 0H7.5a4 4 0 0 1-.84-1.32q-.38-.89-.63-2.08a40 40 0 0 0 3.92 0q-.25 1.2-.63 2.08a4 4 0 0 1-.84 1.31zm2.94-4.76q1.66-.15 2.95-.43a7 7 0 0 0 0-2.58q-1.3-.27-2.95-.43a18 18 0 0 1 0 3.44m-1.27-3.54a17 17 0 0 1 0 3.64 39 39 0 0 1-4.3 0 17 17 0 0 1 0-3.64 39 39 0 0 1 4.3 0m1.1-1.17q1.45.13 2.69.34a6.5 6.5 0 0 0-3.67-3.44q.65 1.26.98 3.1M8.48 1.5l.01.02q.41.37.84 1.31.38.89.63 2.08a40 40 0 0 0-3.92 0q.25-1.2.63-2.08a4 4 0 0 1 .85-1.32 7 7 0 0 1 .96 0m-2.75.4a6.5 6.5 0 0 0-3.67 3.44 29 29 0 0 1 2.7-.34q.31-1.83.97-3.1M4.58 6.28q-1.66.16-2.95.43a7 7 0 0 0 0 2.58q1.3.27 2.95.43a18 18 0 0 1 0-3.44m.17 4.71q-1.45-.12-2.69-.34a6.5 6.5 0 0 0 3.67 3.44q-.65-1.27-.98-3.1" fill="#666"/></g><defs><clipPath id="a"><path fill="#fff" d="M0 0h16v16H0z"/></clipPath></defs></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 394 80"><path fill="#000" d="M262 0h68.5v12.7h-27.2v66.6h-13.6V12.7H262V0ZM149 0v12.7H94v20.4h44.3v12.6H94v21h55v12.6H80.5V0h68.7zm34.3 0h-17.8l63.8 79.4h17.9l-32-39.7 32-39.6h-17.9l-23 28.6-23-28.6zm18.3 56.7-9-11-27.1 33.7h17.8l18.3-22.7z"/><path fill="#000" d="M81 79.3 17 0H0v79.3h13.6V17l50.2 62.3H81Zm252.6-.4c-1 0-1.8-.4-2.5-1s-1.1-1.6-1.1-2.6.3-1.8 1-2.5 1.6-1 2.6-1 1.8.3 2.5 1a3.4 3.4 0 0 1 .6 4.3 3.7 3.7 0 0 1-3 1.8zm23.2-33.5h6v23.3c0 2.1-.4 4-1.3 5.5a9.1 9.1 0 0 1-3.8 3.5c-1.6.8-3.5 1.3-5.7 1.3-2 0-3.7-.4-5.3-1s-2.8-1.8-3.7-3.2c-.9-1.3-1.4-3-1.4-5h6c.1.8.3 1.6.7 2.2s1 1.2 1.6 1.5c.7.4 1.5.5 2.4.5 1 0 1.8-.2 2.4-.6a4 4 0 0 0 1.6-1.8c.3-.8.5-1.8.5-3V45.5zm30.9 9.1a4.4 4.4 0 0 0-2-3.3 7.5 7.5 0 0 0-4.3-1.1c-1.3 0-2.4.2-3.3.5-.9.4-1.6 1-2 1.6a3.5 3.5 0 0 0-.3 4c.3.5.7.9 1.3 1.2l1.8 1 2 .5 3.2.8c1.3.3 2.5.7 3.7 1.2a13 13 0 0 1 3.2 1.8 8.1 8.1 0 0 1 3 6.5c0 2-.5 3.7-1.5 5.1a10 10 0 0 1-4.4 3.5c-1.8.8-4.1 1.2-6.8 1.2-2.6 0-4.9-.4-6.8-1.2-2-.8-3.4-2-4.5-3.5a10 10 0 0 1-1.7-5.6h6a5 5 0 0 0 3.5 4.6c1 .4 2.2.6 3.4.6 1.3 0 2.5-.2 3.5-.6 1-.4 1.8-1 2.4-1.7a4 4 0 0 0 .8-2.4c0-.9-.2-1.6-.7-2.2a11 11 0 0 0-2.1-1.4l-3.2-1-3.8-1c-2.8-.7-5-1.7-6.6-3.2a7.2 7.2 0 0 1-2.4-5.7 8 8 0 0 1 1.7-5 10 10 0 0 1 4.3-3.5c2-.8 4-1.2 6.4-1.2 2.3 0 4.4.4 6.2 1.2 1.8.8 3.2 2 4.3 3.4 1 1.4 1.5 3 1.5 5h-5.8z"/></svg>
@@ -0,0 +1 @@
1
+ <svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1155 1000"><path d="m577.3 0 577.4 1000H0z" fill="#fff"/></svg>
@@ -0,0 +1 @@
1
+ <svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path fill-rule="evenodd" clip-rule="evenodd" d="M1.5 2.5h13v10a1 1 0 0 1-1 1h-11a1 1 0 0 1-1-1zM0 1h16v11.5a2.5 2.5 0 0 1-2.5 2.5h-11A2.5 2.5 0 0 1 0 12.5zm3.75 4.5a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5M7 4.75a.75.75 0 1 1-1.5 0 .75.75 0 0 1 1.5 0m1.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5" fill="#666"/></svg>