Compare commits

...
25 Commits
Author SHA1 Message Date
tiennm99 5730302515 build: move from pnpm to npm
Replace pnpm-lock.yaml with package-lock.json. There was no pnpm-workspace.yaml
and no packageManager field, so the lockfile was the only pnpm-specific config.

Add package.json#allowScripts for sharp and unrs-resolver. pnpm 11 refuses to
install this branch at all without that approval (ERR_PNPM_IGNORED_BUILDS), so
recording it under npm keeps the branch installable; sharp backs next/image and
unrs-resolver backs eslint module resolution.

Update CLAUDE.md to describe npm commands and drop the stale pnpm permission
from the tracked local settings. next-env.d.ts and tsconfig.tsbuildinfo are
regenerated by the build.

Type-check, lint, test, and build fail on this branch exactly as they did on the
pnpm lockfile: six TS errors, an unresolvable @typescript-eslint/recommended
config, and a jest.config.ts that imports next/jest instead of next/jest.js.
Verified against the pre-change tree; none of it is caused by this commit.
2026-08-17 15:19:40 +07:00
tiennm99 7b62155973 feat: stash 2025-08-04 00:23:56 +07:00
tiennm99 925a890a1a feat: update deps 2025-08-03 22:01:48 +07:00
tiennm99 403dc78743 feat: migrate to ts 2025-08-03 21:55:07 +07:00
tiennm99 f8e1d992a2 feat: migrate to ts 2025-08-03 21:28:57 +07:00
tiennm99 1b17821b15 feat: plan to migrate to ts 2025-08-03 21:11:29 +07:00
tiennm99 4b53a4029e feat: stash 2025-08-03 18:56:13 +07:00
tiennm99 e387961c59 feat: temp 2025-08-03 18:21:30 +07:00
tiennm99 2db93c38b9 feat: temp 2025-08-03 16:15:46 +07:00
tiennm99 730e9a157a Update CLAUDE.md 2025-08-03 14:31:56 +07:00
tiennm99 7b6e71dfbb feat: username and point 2025-08-03 14:15:37 +07:00
tiennm99 0eb450166a feat: change dependency versions 2025-08-03 14:04:07 +07:00
tiennm99 b92d8535b5 Update CLAUDE.md 2025-08-03 02:17:39 +07:00
tiennm99 06f5598315 Replace Leaflet with MapLibre in ResultModal
Migrated the map implementation in ResultModal from Leaflet to MapLibre GL. Updated map initialization, marker, and line rendering logic to use MapLibre APIs, and included the required MapLibre CSS import.
2025-08-03 02:13:39 +07:00
tiennm99 c8f1ebc7af Replace Leaflet with MapLibre GL JS for map interface
Migrates the interactive map from Leaflet to MapLibre GL JS for native coordinate synchronization with MapillaryJS, improving precision and performance. Updates dependencies, removes Leaflet imports, refactors GameMap to use MapLibre GL JS, and enhances PanoViewer to extract and propagate precise MapillaryJS coordinates. Updates documentation to reflect the new architecture and rationale for the change.
2025-08-03 02:09:55 +07:00
tiennm99 2049a0591b feat: use mapillary to view image 2025-08-03 01:34:37 +07:00
tiennm99 a2a757c846 feat: use MapillaryJS to view image 2025-08-03 01:17:58 +07:00
tiennm99 9b279b53d3 feat: remove imgs 2025-08-03 00:31:35 +07:00
tiennm99 e682373ff8 refactor 2025-08-03 00:26:17 +07:00
tiennm99 6219fc0d83 feat: clean up assets 2025-08-03 00:18:01 +07:00
tiennm99 1832144ba9 Add CLAUDE.md with project guidance and architecture
Introduces a CLAUDE.md file providing instructions for Claude Code, an overview of the VIGEOGUESSR project, development commands, architectural details, key components, data structures, dependencies, state management, and important implementation notes.
2025-08-03 00:03:55 +07:00
tiennm99 6020084a7d feat: refactor to js, fix bug reload map 2025-08-02 21:08:10 +07:00
tiennm99 fc88471e05 feat(nextjs): stash 2025-08-02 16:43:14 +07:00
tiennm99 3b70f29005 feat: rename some vars 2025-08-02 12:09:45 +07:00
tiennm99 4aaac2f8d6 feat: deobfuscation 2025-08-02 11:35:53 +07:00
79 changed files with 15973 additions and 3356 deletions

No files matched your search

+19
View File
@@ -0,0 +1,19 @@
{
"permissions": {
"allow": [
"Bash(npx:*)",
"Bash(mkdir:*)",
"Bash(mv:*)",
"Bash(rm:*)",
"Bash(npm:*)",
"Bash(find:*)",
"Bash(pkill:*)",
"Bash(cp:*)",
"Bash(curl:*)",
"WebFetch",
"Bash(grep:*)",
"Bash(cat:*)"
],
"deny": []
}
}
+19
View File
@@ -0,0 +1,19 @@
{
"extends": [
"next/core-web-vitals",
"@typescript-eslint/recommended"
],
"parser": "@typescript-eslint/parser",
"plugins": ["@typescript-eslint"],
"parserOptions": {
"ecmaVersion": "latest",
"sourceType": "module",
"project": "./tsconfig.json"
},
"rules": {
"@typescript-eslint/no-unused-vars": "error",
"@typescript-eslint/no-explicit-any": "warn",
"@typescript-eslint/prefer-const": "error",
"prefer-const": "off"
}
}
+35 -1
View File
@@ -1 +1,35 @@
default.js
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# dependencies
/node_modules
/.pnp
.pnp.js
.yarn/install-state.gz
# testing
/coverage
# next.js
/.next/
/out/
# production
/build
# misc
.DS_Store
*.pem
# debug
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# local env files
.env*.local
# vercel
.vercel
# legacy files
default.js
+362
View File
@@ -0,0 +1,362 @@
# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## Important Instructions
**ALWAYS update this CLAUDE.md file after completing tasks that the user marks as done.** Add relevant information about new features, architectural changes, or important implementation details that future Claude instances should know about.
## Project Overview
VIGEOGUESSR is a Vietnamese geography guessing game built with Next.js 15 and React 19. Players view 360° panoramic street images from Vietnamese cities and guess the location on an interactive map. The game uses Mapillary Graph API for panoramic images and calculates distance-based scoring.
## 🛠️ Development Environment
- **Language**: TypeScript (`^5.0.0`)
- **Framework**: Next.js 15 (App Router)
- **React**: React 19
- **Styling**: Tailwind CSS
- **Component Library**: shadcn/ui (for generic UI components)
- **Specialized Libraries**: MapLibre GL JS + MapillaryJS (for mapping/street view)
- **Data Fetching**: React Query (TanStack) for API calls
- **Testing**: Jest + React Testing Library
- **Linting**: ESLint with `@typescript-eslint`
- **Formatting**: Prettier
- **Package Manager**: npm
## 📂 Project Structure
```
src/
├── app/ # Next.js App Router
│ ├── layout.tsx
│ ├── page.tsx
│ ├── game/
│ └── api/ # Server-side API routes
├── components/ # UI components (shadcn/ui + game-specific)
│ ├── features/ # Game-specific components
│ │ ├── GameMap.tsx # MapLibre GL JS integration
│ │ ├── PanoViewer.tsx # MapillaryJS integration
│ │ └── ResultModal.tsx # Result display with map + street view
│ └── ui/ # shadcn/ui components
├── services/ # Service layer for external APIs and business logic
│ ├── geography.service.ts # Coordinate validation and distance calculations
│ ├── scoring.service.ts # Game scoring and point calculations
│ ├── mapillary.service.ts # Mapillary API integration
│ └── game-image.service.ts # Game image fetching logic
├── hooks/ # Custom React hooks
│ ├── useMapillary.ts # Image fetching with React Query
│ └── useScoring.ts # Scoring API with React Query
├── lib/ # Client helpers, API wrappers, utilities
├── constants/ # Game constants (cities, locations)
├── styles/ # Tailwind customizations
├── tests/ # Unit and integration tests
└── public/
```
## 📁 Configuration Files
Key configuration files in the project root:
- `tsconfig.json` - TypeScript configuration with strict settings and path mapping
- `tailwind.config.ts` - Tailwind CSS customization with TypeScript
- `.eslintrc.json` - ESLint with TypeScript rules
- `postcss.config.ts` - PostCSS configuration with TypeScript
- `next.config.ts` - Next.js configuration with TypeScript
- `jest.config.ts` - Jest testing configuration with TypeScript
- `jest.setup.ts` - Jest setup and mocks with TypeScript
- `package.json` - Dependencies and scripts
- `next-env.d.ts` - Next.js TypeScript environment types
## 📦 Installation & Setup
- Tailwind CSS with PostCSS configuration
- shadcn/ui: `npx shadcn-ui@latest init`
- React Query: `<QueryClientProvider>` in app/layout.tsx
- MapLibre GL JS: `npm install maplibre-gl`
- MapillaryJS: `npm install mapillary-js`
- TypeScript configuration with `tsconfig.json`
- ESLint with TypeScript support
## ⚙️ Development Commands
- **Dev server**: `npm run dev` - Start development server on localhost:3000
- **Build**: `npm run build` - Build for production
- **Start**: `npm start` - Start production server
- **Lint**: `npm run lint` - Run ESLint to check code quality
- **Test**: `npm test` - Run Jest + RTL tests
- **Format**: `npm run format` - Format code with Prettier
## 🧠 React Query Architecture
### API Data Fetching (Option A - Recommended)
```typescript
// hooks/useMapillary.ts
const { data: imageData, isLoading } = useQuery({
queryKey: ["mapillary", city],
queryFn: () =>
fetch(`/api/mapillary?location=${city}`).then((res) => res.json()),
staleTime: 5 * 60 * 1000, // 5 minutes
});
// hooks/useScoring.ts
const scoreMutation = useMutation({
mutationFn: (scoreData: ScoreData) =>
fetch("/api/scoring", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(scoreData),
}).then((res) => res.json()),
});
```
**Benefits:**
- Automatic caching of API responses
- Built-in loading/error states
- Retry logic for failed requests
- Server APIs unchanged
## 🎨 Styling Architecture
### Tailwind + Specialized Libraries
```typescript
// GameMap component with MapLibre GL JS
import "maplibre-gl/dist/maplibre-gl.css";
interface GameMapProps {
choiceLocation: string;
onLocationSelect: (coords: [number, number]) => void;
}
export default function GameMap({ choiceLocation, onLocationSelect }: GameMapProps) {
return (
<div className="w-full h-96 rounded-lg border border-gray-200 overflow-hidden">
<div ref={mapRef} className="w-full h-full" />
</div>
);
}
```
**Integration Strategy:**
- Keep required CSS imports for MapLibre GL JS and MapillaryJS
- Wrap components with Tailwind utility classes
- Create custom Tailwind components for consistent styling
- Remove custom CSS in favor of Tailwind utilities
## 🧩 Component Guidelines
### shadcn/ui Integration
- **Replace**: Header, DonateModal, UsernameModal → Button, Dialog, Input components
- **Keep**: GameMap, PanoViewer, ResultModal (specialized functionality)
- **Mixing**: Game components use shadcn/ui internally for buttons, forms, etc.
### Game-Specific Components
```typescript
// PanoViewer.tsx - Keep (MapillaryJS integration)
// GameMap.tsx - Keep (MapLibre GL JS integration)
// ResultModal.tsx - Keep but use shadcn/ui Button, Dialog internally
```
## 🧪 Testing Strategy
### Jest + React Testing Library
```typescript
// tests/GameMap.test.tsx
import { render, screen } from "@testing-library/react";
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
import GameMap from "@/components/features/GameMap";
// Mock MapLibre GL JS
jest.mock("maplibre-gl", () => ({
Map: jest.fn(() => ({
on: jest.fn(),
remove: jest.fn(),
})),
}));
test("renders game map container", () => {
const queryClient = new QueryClient();
render(
<QueryClientProvider client={queryClient}>
<GameMap choiceLocation="HN" onLocationSelect={jest.fn()} />
</QueryClientProvider>
);
expect(screen.getByRole("application")).toBeInTheDocument();
});
```
### Testing Considerations
- **Mock specialized libraries**: MapLibre GL JS, MapillaryJS
- **Test React Query hooks**: Use `QueryClient` wrapper
- **Focus on user interactions**: Button clicks, form submissions
- **Skip complex map/street view rendering**: Test props and callbacks
## 📝 Code Style Standards
- **TypeScript**: Use strict typing, prefer arrow functions, annotate return types
- **Imports**: Group React → Next.js → libraries → local components
- **Components**: Always destructure props, use meaningful names, define interfaces
- **Types**: Avoid `any` type, use `unknown` or strict generics
- **Styling**: Prefer Tailwind utilities over custom CSS
- **API**: Keep server logic in `/api` routes, client logic in hooks
## 🔍 Migration Guidelines
### From Custom CSS to Tailwind
1. Replace custom CSS classes with Tailwind utilities
2. Keep required CSS imports for MapLibre/MapillaryJS
3. Use Tailwind components for consistent styling
4. Remove `globals.css` custom styles gradually
### Adding shadcn/ui Components
1. Install: `npx shadcn-ui@latest add button dialog input`
2. Replace existing UI components with shadcn/ui equivalents
3. Maintain game-specific component functionality
4. Use shadcn/ui components within specialized components
## Architecture
**Multi-Library Approach: Each Tool for Its Optimal Purpose**
This project uses a carefully chosen combination of specialized libraries rather than trying to force a single library to handle all use cases. This approach provides superior user experience, maintainability, and performance.
### Core Game Flow
**Multi-User Gameplay Experience:**
1. **User Entry**: Home page checks localStorage for cached username, displays popup if not found
2. **City Selection**: User selects from available Vietnamese cities on home page
3. **Game Initialization**: Navigate to game scene with selected city parameter
4. **Image Loading**: Server provides random panoramic image from city bounds via `src/app/api/mapillary/route.ts`
5. **Gameplay**:
- Display raw panoramic image without location metadata
- Show city overview map for location guessing
- User submits guess location with username
6. **Scoring System**: Server calculates distance-based points (0-5 scale) per user session:
- 0-50m = 5 points
- 50m-100m = 4 points
- 100m-200m = 3 points
- 200m-500m = 2 points
- 500m-1km = 1 point
- > 1km = 0 points
7. **Results**:
- Show guess location, actual location, distance, and points
- Enable MapillaryJS navigation around actual location
- "Next" button continues to next round
**Technical Implementation:**
- **Image Fetching**: `src/services/game-image.service.ts` handles client-side image fetching with retry logic
- **API Integration**: `src/services/mapillary.service.ts` provides server-side Mapillary API integration
- **Display**: `src/components/features/PanoViewer.tsx` renders raw 360° images using MapillaryJS npm module
- **Interaction**: `src/components/features/GameMap.tsx` provides MapLibre GL JS-based interactive map for location guessing
- **Scoring**: `src/services/scoring.service.ts` handles point calculation with configurable thresholds
- **Geography**: `src/services/geography.service.ts` provides distance calculation with OpenStreetMap validation
- **Session Management**: Per-user session tracking for concurrent multi-player support
### Key Components
- **GameMap**: MapLibre GL JS integration with click-based location selection, automatic centering based on city choice, and native coordinate synchronization
- **PanoViewer**: MapillaryJS npm module integration with precise coordinate extraction, error handling and fallback display
- **ResultModal**: MapLibre GL JS result map showing true location (green), guess location (red), and connecting line with distance calculation
- **Game Page**: Main game orchestration with state management for loading, guessing, and results
### Data Structure
- City boundaries defined in `src/constants/locations.ts:LOCATION_BOUNDS` object with coordinates and delta values for API queries
- Location codes: HN (Hanoi), TPHCM (Ho Chi Minh City), HP (Hai Phong), ND (Nam Dinh), DN (Da Nang), DL (Dalat), DHLA (Duc Hoa)
- Constants organized with enums: `LOCATION_CODES`, `LOCATION_BOUNDS`, `LOCATION_NAMES`
### External Dependencies
- **MapLibre GL JS**: Interactive map rendering (npm module with CSS import) - provides native coordinate synchronization with MapillaryJS
- **MapillaryJS**: 360° street imagery display (npm module with CSS import)
- **Mapillary Graph API**: Street view image source with server-side access token security
### State Management
Game state managed at page level with React hooks:
- Image loading states and error handling
- Location selection and guess submission
- Distance calculation and result display
## Recent Implementation Updates
### Modern Tech Stack Migration (Latest)
- **Language**: TypeScript (`^5.7.3`) with strict typing, interfaces, and complete migration
- **Package Manager**: npm, with scripts dev, build, start, lint, format, test, type-check
- **Tailwind CSS**: Complete migration from custom CSS to Tailwind utilities with custom design tokens matching game theme
- **shadcn/ui**: Installed and configured with utility functions, ready for UI component replacements
- **React Query**: Added TanStack Query with QueryClientProvider in layout and custom hooks (`useMapillary`, `useScoring`)
- **Testing Setup**: Configured Jest + React Testing Library with specialized mocks for MapLibre/MapillaryJS libraries
- **Project Structure**: Added modern hooks/, lib/, types/ directories following TypeScript architectural guidelines
- **Development Environment**: Updated to modern toolchain with TypeScript, ESLint, Prettier formatting and enhanced DX
- **File Migration**: All 25+ JavaScript files converted to TypeScript with proper typing
- **Type Safety**: Custom type definitions for external libraries (MapLibre GL JS, MapillaryJS)
- **Zero JavaScript**: Complete elimination of ALL `.js` files from entire project (src/ + root config files)
### Current Architecture Status
- ✅ **Framework**: Next.js 15 + React 19
- ✅ **Language**: TypeScript with strict configuration - **COMPLETE MIGRATION**
- ✅ **Styling**: Tailwind CSS with custom game design tokens
- ✅ **Data Fetching**: React Query hooks for API management
- ✅ **Testing**: Jest + RTL with TypeScript and library mocks
- ✅ **Package Management**: npm with modern scripts
- ✅ **App Router**: All app router files migrated to TypeScript (.tsx)
- ✅ **API Routes**: All API routes migrated to TypeScript (.ts)
- ✅ **Service Layer**: All service files migrated with proper TypeScript interfaces
- ✅ **Components**: All components migrated to TypeScript (GameMap, PanoViewer, ResultModal, Header, DonateModal, UsernameModal)
- ✅ **Hooks**: All hooks migrated with proper TypeScript return types
- ✅ **Lib Files**: React Query provider and utilities migrated to TypeScript
- ✅ **Constants**: Location constants migrated with TypeScript interfaces and enums
- ✅ **Type Definitions**: Custom type definitions created for MapLibre GL JS and MapillaryJS
- ✅ **Index Files**: All index files migrated and JavaScript files removed
- ✅ **Config Files**: All root configuration files migrated (next.config.ts, jest.config.ts, postcss.config.ts, tailwind.config.ts)
- 🚧 **UI Components**: Ready for shadcn/ui migration (existing components are TypeScript-ready)
**🎉 COMPLETE TYPESCRIPT MIGRATION ACHIEVED** - Zero JavaScript files remaining in entire project. All source code AND configuration files are now TypeScript-enabled with modern tooling and industry-standard development practices.
## 🏗️ Service Layer Architecture
### Service Organization
The project now uses a clean service layer architecture with specialized services:
```typescript
// Geography service for coordinate operations
import { calculateDistance, isValidCoordinate } from '@/services/geography.service';
// Scoring service for game mechanics
import { calculatePoints, getScoreDescription, formatDistance } from '@/services/scoring.service';
// Mapillary service for street view integration
import { getRandomMapillaryImage, validateMapillaryImage } from '@/services/mapillary.service';
// Game image service for client-side image fetching
import { fetchRandomGameImage } from '@/services/game-image.service';
```
### Service Benefits
- **Separation of Concerns**: Each service handles a specific domain
- **Testability**: Services can be tested in isolation
- **Reusability**: Services can be imported across components
- **Type Safety**: JSDoc documentation provides IDE autocomplete
- **Error Handling**: Consistent error patterns across services
- **Configuration**: Centralized configuration objects
### Migration from Legacy Utils
The legacy `src/utils/` directory has been completely removed. All functionality has been migrated to the service layer with improved error handling, validation, and documentation.
+86 -3
View File
@@ -1,6 +1,89 @@
# vigeoguessr
# VIGEOGUESSR
A Next.js-based Vietnamese geography guessing game where players guess the location of panoramic street view images from various Vietnamese cities.
## Features
- 🗺️ Multiple Vietnamese cities: Hanoi, Ho Chi Minh City, Hai Phong, Nam Dinh, Da Lat, and Duc Hoa
- 📱 Responsive design that works on desktop and mobile
- 🎯 Interactive map for location guessing
- 📊 Distance-based scoring system
- 🖼️ 360° panoramic street view images using Photo Sphere Viewer
- ⚡ Built with Next.js 15 and TypeScript for performance and type safety
## Tech Stack
- **Framework**: Next.js 15 with App Router
- **Language**: TypeScript with strict type checking
- **Styling**: Tailwind CSS with custom design tokens
- **Maps**: MapLibre GL JS
- **360° Images**: MapillaryJS
- **Image API**: Mapillary Graph API
## Getting Started
### Prerequisites
- Node.js 18+
- npm or yarn
### Installation
1. Clone the repository:
```bash
git clone <repository-url>
cd vigeoguessr
```
2. Install dependencies:
```bash
npm install
```
3. Run the development server:
```bash
npm run dev
```
4. Open [http://localhost:3000](http://localhost:3000) in your browser.
### Building for Production
```bash
npm run build
npm start
```
## Project Structure
```
├── app/ # Next.js app directory
│ ├── game/ # Game page
│ ├── globals.css # Global styles
│ ├── layout.tsx # Root layout
│ └── page.tsx # Home page
├── components/ # Reusable React components
│ ├── DonateModal.tsx
│ ├── GameMap.tsx
│ ├── Header.tsx
│ ├── PanoViewer.tsx
│ └── ResultModal.tsx
├── lib/ # Utility functions
│ └── utils.ts # Utility functions
└── public/ # Static assets
```
## Key Improvements from Original
- **Modern Framework**: Migrated from vanilla HTML/JS to Next.js with TypeScript
- **Component-Based Architecture**: Modular, reusable React components
- **Clean Code**: Well-structured TypeScript with proper type safety and organization
- **Code Deduplication**: Eliminated duplicate code and consolidated utilities
- **Performance**: Optimized with Next.js built-in optimizations
- **Maintainability**: Cleaner code structure and separation of concerns
- **Responsive Design**: Better mobile experience
## Credit
- [viguessr](https://github.com/luuvanduc1999/viguessr)
- [geoguessr](https://github.com/bensizelove/geoguessr)
- [viguessr](https://github.com/luuvanduc1999/viguessr) - Original implementation
- [geoguessr](https://github.com/bensizelove/geoguessr) - Inspiration
-816
View File
@@ -1,816 +0,0 @@
/* Reset and base styles */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
.bar-icon {
height: 20px;
}
body {
font-family: 'Courier', monospace;
background-color: #1a1a1a;
color: #e6f4e6;
min-height: 100vh;
position: relative;
}
/* Modal styles */
.modal {
display: none;
position: fixed;
z-index: 9999;
left: 0;
top: 0;
width: 100%;
height: 100%;
overflow: auto;
background-color: rgba(0, 0, 0, 0.6);
}
.modal-content {
background-color: #24453D;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%); padding: 20px;
border-radius: 12px;
width: 90%;
max-width: 600px;
text-align: center;
color: #e6f4e6;
position: relative;
border: #05A38C 5px solid;
font-family: 'Jersey 15', cursive;
font-size: 20px;
line-height: 20px;
}
.modal-donate {
background-color: #24453D;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%); padding: 20px;
border-radius: 12px;
width: 90%;
max-width: 300px;
text-align: center;
color: #e6f4e6;
position: relative;
border: #05A38C 5px solid;
font-family: 'Jersey 15', cursive;
font-size: 20px;
line-height: 20px;
}
.back-btn {
background: linear-gradient(135deg, #057f6d, #024d42);
border: none;
border-radius: 12px;
padding: 8px;
cursor: pointer;
transition: all 0.3s ease;
text-align: center;
}
.next-btn {
margin-top: 10px;
background: linear-gradient(135deg, #057f6d, #024d42);
border: #05A38C 5px solid;
border-radius: 12px;
padding: 12px 12px;
cursor: pointer;
transition: all 0.3s ease;
text-align: center;
min-width: 200px;
width: 100%;
}
.next-text {
font-family: 'Jersey 15', cursive;
font-size: 16px;
line-height: 16px;
color: #e6f4e6;
}
.close-button:hover {
color: #000;
}
#result {
width: 100%;
height: 300px;
margin: 20px 0;
border-radius: 8px;
border: 2px solid #ddd;
}
/* Main container and background */
.main-container {
width: 100%;
min-height: 100vh;
background-color: #1a1a1a;
position: relative;
display: flex;
flex-direction: column;
justify-content: center;
}
.background-layer {
position: absolute;
bottom: 0;
width: 100%;
height: 410px;
background-image: url('../images/img_layer_1.png');
background-size: cover;
background-position: center;
z-index: 1;
}
.content-wrapper {
position: relative;
z-index: 2;
width: 100%;
display: flex;
flex-direction: column;
}
.gradient-overlay {
background: linear-gradient(0deg, #1a1a1a00 0%, #1a1a1a 50%, #1a1a1a00 100%);
width: 100%;
display: flex;
flex-direction: column;
gap: 32px;
align-items: center;
padding: 16px;
}
/* Header styles */
.header {
width: 100%;
max-width: 1440px;
margin: 0 auto;
display: flex;
justify-content: space-between;
align-items: center;
padding: 12px 16px;
background: rgba(26, 26, 26, 0.8);
backdrop-filter: blur(10px);
}
.header-left {
display: flex;
gap: 6px;
align-items: center;
}
.header-icon {
width: 32px;
height: 24px;
background-size: contain;
background-repeat: no-repeat;
}
.header-center {
display: flex;
gap: 8px;
align-items: center;
}
.logo-icon {
width: 32px;
height: 32px;
background-size: contain;
background-repeat: no-repeat;
}
.logo-text {
width: 80px;
height: 36px;
background-size: contain;
background-repeat: no-repeat;
}
.header-right {
display: flex;
gap: 16px;
align-items: center;
}
.balance-text {
font-family: 'Jersey 15', cursive;
font-size: 16px;
line-height: 16px;
color: #e6f4e6;
}
.connect-wallet {
display: flex;
align-items: center;
padding: 8px 12px;
background: rgba(93, 213, 162, 0.2);
border: 2px solid #5dd5a2;
border-radius: 8px;
cursor: pointer;
transition: all 0.3s ease;
}
.connect-wallet:hover {
background: rgba(93, 213, 162, 0.3);
transform: scale(1.05);
}
.wallet-text {
font-family: 'Jersey 15', cursive;
font-size: 16px;
line-height: 16px;
color: #e6f4e6;
margin-left: 8px;
}
/* Game section */
.game-section {
width: 100%;
max-width: 1564px;
margin: 0 auto;
background-color: #1d2c29;
border: 8px solid #24453a;
border-radius: 24px;
padding: 16px;
margin-bottom: 100px;
}
.score-header {
display: flex;
justify-content: space-between;
align-items: center;
background-color: #1d2c29;
border: 8px solid #24453a;
border-radius: 24px 24px 0px 0px;
padding: 12px 16px;
margin: -24px -24px 0 -24px;
}
.score-text {
font-family: 'Jersey 15', cursive;
font-size: 20px;
line-height: 20px;
color: #5dd5a2;
}
.play-section {
text-align: center;
margin: 24px 0;
}
.play-title-row {
display: flex;
gap: 16px;
justify-content: center;
align-items: center;
margin-bottom: 8px;
}
.diamond-icon {
width: 48px;
height: 32px;
background-size: contain;
background-repeat: no-repeat;
background-position: center;
}
.play-title,
.logo-title {
font-family: 'Jersey 15', cursive;
font-size: 48px;
line-height: 48px;
color: #e6f4e6;
text-align: center;
}
.entry-fee {
font-family: 'Jersey 15', cursive;
font-size: 20px;
line-height: 20px;
color: #5dd5a2;
margin-top: 8px;
}
.game-content {
display: flex;
gap: 24px;
margin-top: 24px;
flex-direction: column;
}
.pano {
background-color: #1a1a1a;
border-radius: 8px;
flex: 1;
}
.how-title {
font-family: 'Jersey 15', cursive;
font-size: 20px;
line-height: 20px;
color: #e6f4e6;
margin-bottom: 16px;
}
.instruction-list {
display: flex;
flex-direction: column;
gap: 12px;
margin-bottom: 16px;
}
.instruction {
font-size: 12px;
font-family: 'Courier', monospace;
line-height: 14px;
color: #5dd5a2;
}
.controls-section {
display: flex;
gap: 16px;
align-items: center;
margin-bottom: 12px;
}
.controls-grid {
display: flex;
flex-direction: column;
gap: 4px;
align-items: center;
}
.control-row {
display: flex;
gap: 4px;
}
.control-key {
width: 32px;
height: 24px;
background: rgba(93, 213, 162, 0.2);
border: 1px solid #5dd5a2;
border-radius: 4px;
display: flex;
align-items: center;
justify-content: center;
font-family: 'Jersey 15', cursive;
font-size: 16px;
color: #e6f4e6;
}
.game-preview {
width: 120px;
height: 80px;
background-size: contain;
background-repeat: no-repeat;
border-radius: 8px;
}
.right-panel {
display: flex;
flex-direction: column;
gap: 16px;
align-items: flex-end;
min-width: 30%;
}
.disclaimer {
background-color: #1a1a1a;
border-radius: 8px;
padding: 16px;
display: flex;
gap: 12px;
align-items: flex-start;
width: 100%;
aspect-ratio: 1 / 1;
}
.checkbox {
width: 24px;
height: 24px;
background-size: contain;
background-repeat: no-repeat;
flex-shrink: 0;
margin-top: 4px;
}
.disclaimer-text {
font-size: 12px;
font-family: 'Courier', monospace;
line-height: 16px;
color: #5dd5a2;
}
.action-buttons {
display: flex;
flex-direction: column;
gap: 12px;
}
.start-game-btn {
background: linear-gradient(135deg, #5dd5a2, #057f6d);
border: none;
border-radius: 12px;
padding: 16px 24px;
cursor: pointer;
transition: all 0.3s ease;
text-align: center;
min-width: 200px;
}
.start-game-btn:hover {
transform: scale(1.05);
box-shadow: 0 8px 20px rgba(93, 213, 162, 0.3);
}
.btn-title {
font-family: 'Jersey 15', cursive;
font-size: 24px;
line-height: 24px;
color: #e6f4e6;
margin-bottom: 4px;
}
.btn-subtitle {
font-family: 'Jersey 15', cursive;
font-size: 18px;
line-height: 18px;
color: #e6f4e6;
}
.distance-text {
color: #A59EFA;
font-size: 64px;
line-height: 64px;
}
.check-btn {
background: linear-gradient(135deg,#705BD6, #341caa);
border: none;
border-radius: 12px;
padding: 12px 24px;
cursor: pointer;
transition: all 0.3s ease;
text-align: center;
min-width: 200px;
width: 100%;
}
.check-btn:hover {
transform: scale(1.05);
background: linear-gradient(135deg, #705BD6, #432fa8);
}
.check-btn:disabled {
background: linear-gradient(135deg, #7a797c, #6d6a71);
cursor: not-allowed;
}
.check-text {
font-family: 'Jersey 15', cursive;
font-size: 16px;
line-height: 16px;
color: #E6F4E6;
}
/* Footer */
.footer {
width: 100%;
background-color: #05a38c;
border-top: 14px solid #5dd5a2;
padding: 16px 20px 20px;
margin-top: auto;
}
.footer-content {
width: 100%;
max-width: 1376px;
margin: 0 auto;
display: flex;
flex-direction: column;
gap: 16px;
align-items: center;
}
.footer-main {
width: 100%;
display: flex;
justify-content: space-between;
align-items: center;
flex-wrap: wrap;
gap: 16px;
}
.footer-logo {
display: flex;
align-items: center;
gap: 8px;
}
.footer-nav {
display: flex;
gap: 8px;
align-items: center;
flex-wrap: wrap;
}
.nav-btn {
background-color: #057f6d;
border: none;
border-radius: 18px;
padding: 8px 16px;
font-size: 12px;
font-family: 'Courier', monospace;
color: #e6f4e6;
cursor: pointer;
transition: all 0.3s ease;
}
.nav-btn:hover {
background-color: #068a75;
transform: scale(1.05);
}
.footer-social {
display: flex;
align-items: center;
gap: 8px;
}
.social-icons {
display: flex;
gap: 8px;
}
.social-btn {
width: 36px;
height: 36px;
background-color: #e6f4e6;
border: none;
border-radius: 18px;
cursor: pointer;
transition: all 0.3s ease;
background-size: 20px;
background-position: center;
background-repeat: no-repeat;
}
.social-btn:hover {
transform: scale(1.1);
background-color: #f0f9f0;
}
.join-text {
font-family: 'Jersey 15', cursive;
font-size: 16px;
line-height: 16px;
color: #e6f4e6;
}
.footer-divider {
width: 100%;
height: 1px;
background-color: rgba(93, 213, 162, 0.5);
}
.footer-bottom {
width: 100%;
display: flex;
justify-content: space-between;
align-items: center;
}
.footer-link {
font-size: 12px;
font-family: 'Courier', monospace;
color: rgba(230, 244, 230, 0.7);
text-decoration: none;
cursor: pointer;
transition: color 0.3s ease;
}
.footer-link:hover {
color: #e6f4e6;
}
/* Responsive design */
@media (min-width: 640px) {
.header {
padding: 16px 24px;
}
.header-icon {
width: 48px;
height: 32px;
}
.logo-icon {
height: 40px;
width: 40px;
}
.logo-text {
width: 96px;
height: 42px;
}
.balance-text, .wallet-text {
font-size: 20px;
line-height: 20px;
}
.score-text {
font-size: 24px;
line-height: 24px;
}
.play-title {
font-size: 64px;
line-height: 64px;
}
.entry-fee {
font-size: 24px;
line-height: 24px;
}
.game-content {
flex-direction: row;
}
.how-title {
font-size: 24px;
line-height: 24px;
}
.instruction {
font-size: 14px;
line-height: 16px;
}
.disclaimer-text {
font-size: 14px;
line-height: 18px;
}
.control-key {
width: 40px;
height: 32px;
font-size: 20px;
}
.game-preview {
width: 180px;
height: 108px;
}
}
@media (min-width: 768px) {
.score-header {
padding: 16px 24px;
}
.score-text {
font-size: 28px;
line-height: 28px;
}
.play-title {
font-size: 80px;
line-height: 80px;
}
.entry-fee {
font-size: 28px;
line-height: 28px;
}
.how-title {
font-size: 28px;
line-height: 28px;
}
.instruction {
font-size: 15px;
line-height: 18px;
}
.btn-title {
font-size: 32px;
line-height: 32px;
}
.btn-subtitle {
font-size: 22px;
line-height: 22px;
}
.check-text {
font-size: 20px;
line-height: 20px;
}
.next-text {
font-size: 20px;
line-height: 20px;
}
.nav-btn {
font-size: 14px;
}
.join-text {
font-size: 20px;
line-height: 20px;
}
}
@media (min-width: 1024px) {
.header {
padding: 20px 22px;
}
.header-icon {
width: 62px;
height: 42px;
}
.logo-icon {
height: 48px;
width: 48px;
}
.logo-text {
width: 112px;
height: 50px;
}
.balance-text, .wallet-text {
font-size: 24px;
line-height: 24px;
}
.game-section {
padding: 32px;
margin-left: 188px;
margin-right: 188px;
margin-bottom: 156px;
}
.score-header {
margin: -40px -40px 0 -40px;
}
.score-text {
font-size: 32px;
line-height: 32px;
}
.play-title {
font-size: 96px;
line-height: 96px;
}
.entry-fee {
font-size: 32px;
line-height: 32px;
}
.how-title {
font-size: 32px;
line-height: 32px;
}
.btn-title {
font-size: 40px;
line-height: 40px;
}
.btn-subtitle {
font-size: 28px;
line-height: 28px;
}
.check-text {
font-size: 24px;
line-height: 24px;
}
.next-text {
font-size: 24px;
line-height: 24px;
}
.nav-btn {
font-size: 15px;
}
.social-btn {
width: 52px;
height: 52px;
}
.join-text {
font-size: 24px;
line-height: 24px;
}
.game-preview {
width: 218px;
height: 128px;
}
}
/* Hide elements on mobile */
@media (max-width: 639px) {
.header-left {
display: none;
}
.balance-text {
display: none;
}
.controls-section {
flex-direction: column;
align-items: center;
gap: 8px;
}
.game-preview {
width: 100px;
height: 64px;
}
.psv-container {
aspect-ratio: 1 / 1;
}
}
-796
View File
@@ -1,796 +0,0 @@
/* Reset and base styles */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
.bar-icon {
height: 20px;
}
.next-btn {
margin-top: 10px;
background: linear-gradient(135deg, #057f6d, #024d42);
border: #05A38C 5px solid;
border-radius: 12px;
padding: 12px 12px;
cursor: pointer;
transition: all 0.3s ease;
text-align: center;
min-width: 200px;
width: 100%;
}
.next-text {
font-family: 'Jersey 15', cursive;
font-size: 16px;
line-height: 16px;
color: #e6f4e6;
}
.modal {
display: none;
position: fixed;
z-index: 9999;
left: 0;
top: 0;
width: 100%;
height: 100%;
overflow: auto;
background-color: rgba(0, 0, 0, 0.6);
}
.modal-donate {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
background-color: #1a1a1a;
padding: 20px;
border-radius: 12px;
text-align: center;
z-index: 10000;
}
body {
font-family: 'Courier', monospace;
background-color: #1a1a1a;
color: #e6f4e6;
min-height: 100vh;
position: relative;
}
.main-container {
width: 100%;
min-height: 100vh;
background-color: #1a1a1a;
position: relative;
display: flex;
flex-direction: column;
justify-content: center;
}
.background-layer {
position: absolute;
bottom: 0;
width: 100%;
height: 410px;
background-image: url('../images/img_layer_1.png');
background-size: cover;
background-position: center;
z-index: 1;
}
.content-wrapper {
position: relative;
z-index: 2;
width: 100%;
display: flex;
flex-direction: column;
}
.gradient-overlay {
background: linear-gradient(0deg, #1a1a1a00 0%, #1a1a1a 50%, #1a1a1a00 100%);
width: 100%;
display: flex;
flex-direction: column;
gap: 32px;
align-items: center;
padding: 16px;
}
/* Header styles */
.header {
width: 100%;
max-width: 1440px;
margin: 0 auto;
display: flex;
justify-content: space-between;
align-items: center;
padding: 12px 16px;
background: rgba(26, 26, 26, 0.8);
backdrop-filter: blur(10px);
}
.header-left {
display: flex;
gap: 6px;
align-items: center;
}
.header-icon {
width: 32px;
height: 24px;
background-size: contain;
background-repeat: no-repeat;
}
.header-center {
display: flex;
gap: 8px;
align-items: center;
}
.logo-icon {
width: 32px;
height: 32px;
background-size: contain;
background-repeat: no-repeat;
}
.logo-text {
width: 80px;
height: 36px;
background-size: contain;
background-repeat: no-repeat;
}
.header-right {
display: flex;
gap: 16px;
align-items: center;
}
.balance-text {
font-family: 'Jersey 15', cursive;
font-size: 16px;
line-height: 16px;
color: #e6f4e6;
}
.connect-wallet {
display: flex;
align-items: center;
padding: 8px 12px;
background: rgba(93, 213, 162, 0.2);
border: 2px solid #5dd5a2;
border-radius: 8px;
cursor: pointer;
transition: all 0.3s ease;
}
.connect-wallet:hover {
background: rgba(93, 213, 162, 0.3);
transform: scale(1.05);
}
.wallet-text {
font-family: 'Jersey 15', cursive;
font-size: 16px;
line-height: 16px;
color: #e6f4e6;
margin-left: 8px;
}
/* Game section */
.game-section {
width: 100%;
max-width: 1064px;
margin: 0 auto;
background-color: #1d2c29;
border: 8px solid #24453a;
border-radius: 24px;
padding: 16px;
margin-bottom: 100px;
}
.score-header {
display: flex;
justify-content: space-between;
align-items: center;
background-color: #1d2c29;
border: 8px solid #24453a;
border-radius: 24px 24px 0px 0px;
padding: 12px 16px;
margin: -24px -24px 0 -24px;
}
.score-text {
font-family: 'Jersey 15', cursive;
font-size: 20px;
line-height: 20px;
color: #5dd5a2;
}
.play-section {
text-align: center;
margin: 24px 0;
}
.play-title-row {
display: flex;
gap: 16px;
justify-content: center;
align-items: center;
margin-bottom: 8px;
}
.diamond-icon {
width: 12px;
height: 20px;
background-size: contain;
background-repeat: no-repeat;
}
.play-title {
font-family: 'Jersey 15', cursive;
font-size: 48px;
line-height: 48px;
color: #e6f4e6;
text-align: center;
}
.logo-title {
font-family: 'Jersey 15', cursive;
font-size: 48px;
line-height: 48px;
color: #e6f4e6;
text-align: center;
}
.entry-fee {
font-family: 'Jersey 15', cursive;
font-size: 20px;
line-height: 20px;
color: #5dd5a2;
margin-top: 8px;
}
.game-content {
display: flex;
gap: 24px;
margin-top: 24px;
flex-direction: column;
}
.pano, .how-to-play {
background-color: #1a1a1a;
border-radius: 8px;
padding: 16px;
flex: 1;
}
.how-title {
font-family: 'Jersey 15', cursive;
font-size: 20px;
line-height: 20px;
color: #e6f4e6;
margin-bottom: 16px;
}
.instruction-list {
display: flex;
flex-direction: column;
gap: 12px;
margin-bottom: 16px;
}
.instruction {
font-size: 12px;
font-family: 'Courier', monospace;
line-height: 14px;
color: #5dd5a2;
}
.controls-section {
display: flex;
gap: 16px;
align-items: center;
margin-bottom: 12px;
}
.controls-grid {
display: flex;
flex-direction: column;
gap: 4px;
align-items: center;
}
.control-row {
display: flex;
gap: 4px;
}
.control-key {
width: 32px;
height: 24px;
background: rgba(93, 213, 162, 0.2);
border: 1px solid #5dd5a2;
border-radius: 4px;
display: flex;
align-items: center;
justify-content: center;
font-family: 'Jersey 15', cursive;
font-size: 16px;
color: #e6f4e6;
}
.game-preview {
width: 120px;
height: 80px;
background-size: contain;
background-repeat: no-repeat;
border-radius: 8px;
}
.right-panel {
display: flex;
flex-direction: column;
gap: 16px;
align-items: flex-end;
min-width: 50%;
}
.disclaimer {
background-color: #1a1a1a;
border-radius: 8px;
padding: 16px;
display: flex;
gap: 12px;
align-items: flex-start;
max-width: 400px;
}
.checkbox {
width: 24px;
height: 24px;
background-size: contain;
background-repeat: no-repeat;
flex-shrink: 0;
margin-top: 4px;
}
.disclaimer-text {
font-size: 12px;
font-family: 'Courier', monospace;
line-height: 16px;
color: #5dd5a2;
}
.action-buttons {
display: flex;
flex-direction: column;
gap: 12px;
}
.start-game-btn {
background: linear-gradient(135deg, #5dd5a2, #057f6d);
border: none;
border-radius: 12px;
padding: 16px 24px;
cursor: pointer;
transition: all 0.3s ease;
text-align: center;
min-width: 200px;
}
.start-game-btn:hover {
transform: scale(1.05);
box-shadow: 0 8px 20px rgba(93, 213, 162, 0.3);
}
.btn-title {
font-family: 'Jersey 15', cursive;
font-size: 24px;
line-height: 24px;
color: #e6f4e6;
margin-bottom: 4px;
}
.btn-subtitle {
font-family: 'Jersey 15', cursive;
font-size: 18px;
line-height: 18px;
color: #e6f4e6;
}
.bridge-btn {
background: linear-gradient(135deg, #057f6d, #024d42);
border: none;
border-radius: 12px;
padding: 12px 24px;
cursor: pointer;
transition: all 0.3s ease;
text-align: center;
min-width: 200px;
width: 100%;
}
.bridge-btn:hover {
transform: scale(1.05);
background: linear-gradient(135deg, #068a75, #025a4a);
}
.bridge-text {
font-family: 'Jersey 15', cursive;
font-size: 16px;
line-height: 16px;
color: #e6f4e6;
}
/* Footer */
.footer {
width: 100%;
background-color: #05a38c;
border-top: 14px solid #5dd5a2;
padding: 16px 20px 20px;
margin-top: auto;
}
.footer-content {
width: 100%;
max-width: 1376px;
margin: 0 auto;
display: flex;
flex-direction: column;
gap: 16px;
align-items: center;
}
.footer-main {
width: 100%;
display: flex;
justify-content: space-between;
align-items: center;
flex-wrap: wrap;
gap: 16px;
}
.footer-logo {
display: flex;
align-items: center;
gap: 8px;
}
.footer-nav {
display: flex;
gap: 8px;
align-items: center;
flex-wrap: wrap;
}
.nav-btn {
background-color: #057f6d;
border: none;
border-radius: 18px;
padding: 8px 16px;
font-size: 12px;
font-family: 'Courier', monospace;
color: #e6f4e6;
cursor: pointer;
transition: all 0.3s ease;
}
.nav-btn:hover {
background-color: #068a75;
transform: scale(1.05);
}
.footer-social {
display: flex;
align-items: center;
gap: 8px;
}
.social-icons {
display: flex;
gap: 8px;
}
.social-btn {
width: 36px;
height: 36px;
background-color: #e6f4e6;
border: none;
border-radius: 18px;
cursor: pointer;
transition: all 0.3s ease;
background-size: 20px;
background-position: center;
background-repeat: no-repeat;
}
.social-btn:hover {
transform: scale(1.1);
background-color: #f0f9f0;
}
.join-text {
font-family: 'Jersey 15', cursive;
font-size: 16px;
line-height: 16px;
color: #e6f4e6;
}
.footer-divider {
width: 100%;
height: 1px;
background-color: rgba(93, 213, 162, 0.5);
}
.footer-bottom {
width: 100%;
display: flex;
justify-content: space-between;
align-items: center;
}
.footer-link {
font-size: 12px;
font-family: 'Courier', monospace;
color: rgba(230, 244, 230, 0.7);
text-decoration: none;
cursor: pointer;
transition: color 0.3s ease;
}
.footer-link:hover {
color: #e6f4e6;
}
/* Responsive design */
@media (min-width: 640px) {
.header {
padding: 16px 24px;
}
.header-icon {
width: 48px;
height: 32px;
}
.logo-icon {
height: 40px;
width: 40px;
}
.logo-text {
width: 96px;
height: 42px;
}
.balance-text, .wallet-text {
font-size: 20px;
line-height: 20px;
}
.score-text {
font-size: 24px;
line-height: 24px;
}
.play-title {
font-size: 64px;
line-height: 64px;
}
.entry-fee {
font-size: 24px;
line-height: 24px;
}
.game-content {
flex-direction: row;
}
.how-title {
font-size: 24px;
line-height: 24px;
}
.instruction {
font-size: 14px;
line-height: 16px;
}
.disclaimer-text {
font-size: 14px;
line-height: 18px;
}
.control-key {
width: 40px;
height: 32px;
font-size: 20px;
}
.game-preview {
width: 180px;
height: 108px;
}
}
@media (min-width: 768px) {
.score-header {
padding: 16px 24px;
}
.score-text {
font-size: 28px;
line-height: 28px;
}
.play-title {
font-size: 80px;
line-height: 80px;
}
.entry-fee {
font-size: 28px;
line-height: 28px;
}
.how-title {
font-size: 28px;
line-height: 28px;
}
.instruction {
font-size: 15px;
line-height: 18px;
}
.btn-title {
font-size: 32px;
line-height: 32px;
}
.btn-subtitle {
font-size: 22px;
line-height: 22px;
}
.bridge-text {
font-size: 20px;
line-height: 20px;
}
.nav-btn {
font-size: 14px;
}
.join-text {
font-size: 20px;
line-height: 20px;
}
}
@media (min-width: 1024px) {
.header {
padding: 20px 22px;
}
.header-icon {
width: 62px;
height: 42px;
}
.logo-icon {
height: 48px;
width: 48px;
}
.logo-text {
width: 112px;
height: 50px;
}
.balance-text, .wallet-text {
font-size: 24px;
line-height: 24px;
}
.game-section {
padding: 32px;
margin-left: 188px;
margin-right: 188px;
margin-bottom: 156px;
}
.score-header {
margin: -40px -40px 0 -40px;
}
.score-text {
font-size: 32px;
line-height: 32px;
}
.play-title {
font-size: 96px;
line-height: 96px;
}
.entry-fee {
font-size: 32px;
line-height: 32px;
}
.how-title {
font-size: 32px;
line-height: 32px;
}
.btn-title {
font-size: 40px;
line-height: 40px;
}
.btn-subtitle {
font-size: 28px;
line-height: 28px;
}
.bridge-text {
font-size: 24px;
line-height: 24px;
}
.nav-btn {
font-size: 15px;
}
.social-btn {
width: 52px;
height: 52px;
}
.join-text {
font-size: 24px;
line-height: 24px;
}
.game-preview {
width: 218px;
height: 128px;
}
}
/* Hide elements on mobile */
@media (max-width: 639px) {
.header-left {
display: none;
}
.balance-text {
display: none;
}
.controls-section {
flex-direction: column;
align-items: center;
gap: 8px;
}
.game-preview {
width: 100px;
height: 64px;
}
}
-117
View File
@@ -1,117 +0,0 @@
<svg width="37" height="32" viewBox="0 0 37 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_47_42159)">
<path d="M21.4213 26.1836L23.368 26.1836L23.368 23.2754L21.4213 23.2754L21.4213 26.1836Z" fill="#E6F4E6"/>
<path d="M21.4213 29.0918L23.368 29.0918L23.368 26.1837L21.4213 26.1837L21.4213 29.0918Z" fill="#E6F4E6"/>
<path d="M21.4213 32L23.368 32L23.368 29.0919L21.4213 29.0919L21.4213 32Z" fill="#E6F4E6"/>
<path d="M21.4213 23.2722L23.368 23.2722L23.368 20.3641L21.4213 20.3641L21.4213 23.2722Z" fill="#E6F4E6"/>
<path d="M21.4213 8.72803L23.368 8.72803L23.368 5.81988L21.4213 5.81988L21.4213 8.72803Z" fill="#E6F4E6"/>
<path d="M21.4213 5.81982L23.368 5.81982L23.368 2.91168L21.4213 2.91168L21.4213 5.81982Z" fill="#E6F4E6"/>
<path d="M21.4213 2.9082L23.368 2.9082L23.368 6.00815e-05L21.4213 5.99113e-05L21.4213 2.9082Z" fill="#E6F4E6"/>
<path d="M19.4746 2.9082L21.4213 2.9082L21.4213 6.00815e-05L19.4746 5.99113e-05L19.4746 2.9082Z" fill="#E6F4E6"/>
<path d="M19.4746 5.81982L21.4213 5.81982L21.4213 2.91168L19.4746 2.91168L19.4746 5.81982Z" fill="#E6F4E6"/>
<path d="M19.4746 29.0918L21.4213 29.0918L21.4213 26.1837L19.4746 26.1837L19.4746 29.0918Z" fill="#E6F4E6"/>
<path d="M19.4746 32L21.4213 32L21.4213 29.0919L19.4746 29.0919L19.4746 32Z" fill="#E6F4E6"/>
<path d="M17.5278 29.0918L19.4745 29.0918L19.4745 26.1837L17.5278 26.1837L17.5278 29.0918Z" fill="#E6F4E6"/>
<path d="M17.5278 5.81982L19.4745 5.81982L19.4745 2.91168L17.5278 2.91168L17.5278 5.81982Z" fill="#E6F4E6"/>
<path d="M15.5787 5.81982L17.5255 5.81982L17.5255 2.91168L15.5787 2.91168L15.5787 5.81982Z" fill="#E6F4E6"/>
<path d="M13.6319 20.364L15.5787 20.364L15.5787 17.4559L13.6319 17.4559L13.6319 20.364Z" fill="#E6F4E6"/>
<path d="M11.6852 20.364L13.632 20.364L13.632 17.4559L11.6852 17.4559L11.6852 20.364Z" fill="#E6F4E6"/>
<path d="M9.73842 20.364L11.6852 20.364L11.6852 17.4559L9.73842 17.4559L9.73842 20.364Z" fill="#E6F4E6"/>
<path d="M7.78933 20.364L9.73608 20.364L9.73608 17.4559L7.78933 17.4559L7.78933 20.364Z" fill="#E6F4E6"/>
<path d="M7.78933 23.2722L9.73608 23.2722L9.73608 20.3641L7.78933 20.3641L7.78933 23.2722Z" fill="#E6F4E6"/>
<path d="M5.84261 20.364L7.78937 20.364L7.78937 17.4559L5.84261 17.4559L5.84261 20.364Z" fill="#E6F4E6"/>
<path d="M7.78933 14.5476L9.73608 14.5476L9.73608 11.6395L7.78933 11.6395L7.78933 14.5476Z" fill="#E6F4E6"/>
<path d="M5.84261 14.5476L7.78937 14.5476L7.78937 11.6395L5.84261 11.6395L5.84261 14.5476Z" fill="#E6F4E6"/>
<path d="M3.89583 14.5476L5.84259 14.5476L5.84259 11.6395L3.89583 11.6395L3.89583 14.5476Z" fill="#E6F4E6"/>
<path d="M11.6852 17.4558L13.632 17.4558L13.632 14.5477L11.6852 14.5477L11.6852 17.4558Z" fill="#E6F4E6"/>
<path d="M9.73842 17.4558L11.6852 17.4558L11.6852 14.5477L9.73842 14.5477L9.73842 17.4558Z" fill="#E6F4E6"/>
<path d="M7.78933 17.4558L9.73608 17.4558L9.73608 14.5477L7.78933 14.5477L7.78933 17.4558Z" fill="#E6F4E6"/>
<path d="M5.84261 17.4558L7.78937 17.4558L7.78937 14.5477L5.84261 14.5477L5.84261 17.4558Z" fill="#E6F4E6"/>
<path d="M3.89583 17.4558L5.84259 17.4558L5.84259 14.5477L3.89583 14.5477L3.89583 17.4558Z" fill="#E6F4E6"/>
<path d="M3.89583 20.364L5.84259 20.364L5.84259 17.4559L3.89583 17.4559L3.89583 20.364Z" fill="#E6F4E6"/>
<path d="M1.94905 17.4558L3.89581 17.4558L3.89581 14.5477L1.94905 14.5477L1.94905 17.4558Z" fill="#E6F4E6"/>
<path d="M1.89543e-05 17.4558L1.94678 17.4558L1.94678 14.5477L1.92085e-05 14.5477L1.89543e-05 17.4558Z" fill="#E6F4E6"/>
<path d="M13.6319 17.4558L15.5787 17.4558L15.5787 14.5477L13.6319 14.5477L13.6319 17.4558Z" fill="#E6F4E6"/>
<path d="M17.5278 8.72803L19.4745 8.72803L19.4745 5.81988L17.5278 5.81988L17.5278 8.72803Z" fill="#E6F4E6"/>
<path d="M13.6319 14.5476L15.5787 14.5476L15.5787 11.6395L13.6319 11.6395L13.6319 14.5476Z" fill="#E6F4E6"/>
<path d="M11.6852 14.5476L13.632 14.5476L13.632 11.6395L11.6852 11.6395L11.6852 14.5476Z" fill="#E6F4E6"/>
<path d="M9.73842 14.5476L11.6852 14.5476L11.6852 11.6395L9.73842 11.6395L9.73842 14.5476Z" fill="#E6F4E6"/>
<path d="M15.5787 20.364L17.5255 20.364L17.5255 17.4559L15.5787 17.4559L15.5787 20.364Z" fill="#E6F4E6"/>
<path d="M15.5787 17.4558L17.5255 17.4558L17.5255 14.5477L15.5787 14.5477L15.5787 17.4558Z" fill="#E6F4E6"/>
<path d="M15.5787 14.5476L17.5255 14.5476L17.5255 11.6395L15.5787 11.6395L15.5787 14.5476Z" fill="#E6F4E6"/>
<path d="M15.5787 11.636L17.5255 11.636L17.5255 8.72784L15.5787 8.72784L15.5787 11.636Z" fill="#E6F4E6"/>
<path d="M13.6319 11.636L15.5787 11.636L15.5787 8.72784L13.6319 8.72784L13.6319 11.636Z" fill="#E6F4E6"/>
<path d="M21.4213 11.636L23.368 11.636L23.368 8.72784L21.4213 8.72784L21.4213 11.636Z" fill="#E6F4E6"/>
<path d="M23.3704 11.636L25.3171 11.636L25.3171 8.72784L23.3704 8.72784L23.3704 11.636Z" fill="#E6F4E6"/>
<path d="M25.3172 11.636L27.2639 11.636L27.2639 8.72784L25.3172 8.72784L25.3172 11.636Z" fill="#E6F4E6"/>
<path d="M23.3704 23.2722L25.3171 23.2722L25.3171 20.3641L23.3704 20.3641L23.3704 23.2722Z" fill="#E6F4E6"/>
<path d="M27.2639 11.636L29.2106 11.636L29.2106 8.72784L27.2639 8.72784L27.2639 11.636Z" fill="#E6F4E6"/>
<path d="M29.2107 11.636L31.1574 11.636L31.1574 8.72784L29.2107 8.72784L29.2107 11.636Z" fill="#E6F4E6"/>
<path d="M31.1574 17.4558L33.1042 17.4558L33.1042 14.5477L31.1574 14.5477L31.1574 17.4558Z" fill="#E6F4E6"/>
<path d="M31.1574 14.5476L33.1042 14.5476L33.1042 11.6395L31.1574 11.6395L31.1574 14.5476Z" fill="#E6F4E6"/>
<path d="M31.1574 11.636L33.1042 11.636L33.1042 8.72784L31.1574 8.72784L31.1574 11.636Z" fill="#E6F4E6"/>
<path d="M27.2639 23.2722L29.2106 23.2722L29.2106 20.3641L27.2639 20.3641L27.2639 23.2722Z" fill="#E6F4E6"/>
<path d="M15.5787 23.2722L17.5255 23.2722L17.5255 20.3641L15.5787 20.3641L15.5787 23.2722Z" fill="#E6F4E6"/>
<path d="M13.6319 23.2722L15.5787 23.2722L15.5787 20.3641L13.6319 20.3641L13.6319 23.2722Z" fill="#E6F4E6"/>
<path d="M11.6852 23.2722L13.632 23.2722L13.632 20.3641L11.6852 20.3641L11.6852 23.2722Z" fill="#E6F4E6"/>
<path d="M11.6852 26.1836L13.632 26.1836L13.632 23.2754L11.6852 23.2754L11.6852 26.1836Z" fill="#E6F4E6"/>
<path d="M9.73842 23.2722L11.6852 23.2722L11.6852 20.3641L9.73842 20.3641L9.73842 23.2722Z" fill="#E6F4E6"/>
<path d="M11.6852 11.636L13.632 11.636L13.632 8.72784L11.6852 8.72784L11.6852 11.636Z" fill="#E6F4E6"/>
<path d="M9.73842 11.636L11.6852 11.636L11.6852 8.72784L9.73842 8.72784L9.73842 11.636Z" fill="#E6F4E6"/>
<path d="M7.78933 11.636L9.73608 11.636L9.73608 8.72784L7.78933 8.72784L7.78933 11.636Z" fill="#E6F4E6"/>
<path d="M19.4746 20.364L21.4213 20.364L21.4213 17.4559L19.4746 17.4559L19.4746 20.364Z" fill="#E6F4E6"/>
<path d="M19.4746 17.4558L21.4213 17.4558L21.4213 14.5477L19.4746 14.5477L19.4746 17.4558Z" fill="#E6F4E6"/>
<path d="M19.4746 14.5476L21.4213 14.5476L21.4213 11.6395L19.4746 11.6395L19.4746 14.5476Z" fill="#E6F4E6"/>
<path d="M21.4213 20.364L23.368 20.364L23.368 17.4559L21.4213 17.4559L21.4213 20.364Z" fill="#E6F4E6"/>
<path d="M21.4213 17.4558L23.368 17.4558L23.368 14.5477L21.4213 14.5477L21.4213 17.4558Z" fill="#E6F4E6"/>
<path d="M21.4213 14.5476L23.368 14.5476L23.368 11.6395L21.4213 11.6395L21.4213 14.5476Z" fill="#E6F4E6"/>
<path d="M23.3704 20.364L25.3171 20.364L25.3171 17.4559L23.3704 17.4559L23.3704 20.364Z" fill="#E6F4E6"/>
<path d="M23.3704 17.4558L25.3171 17.4558L25.3171 14.5477L23.3704 14.5477L23.3704 17.4558Z" fill="#E6F4E6"/>
<path d="M23.3704 14.5476L25.3171 14.5476L25.3171 11.6395L23.3704 11.6395L23.3704 14.5476Z" fill="#E6F4E6"/>
<path d="M25.3172 20.364L27.2639 20.364L27.2639 17.4559L25.3172 17.4559L25.3172 20.364Z" fill="#E6F4E6"/>
<path d="M25.3172 17.4558L27.2639 17.4558L27.2639 14.5477L25.3172 14.5477L25.3172 17.4558Z" fill="#E6F4E6"/>
<path d="M25.3172 14.5476L27.2639 14.5476L27.2639 11.6395L25.3172 11.6395L25.3172 14.5476Z" fill="#E6F4E6"/>
<path d="M27.2639 20.364L29.2106 20.364L29.2106 17.4559L27.2639 17.4559L27.2639 20.364Z" fill="#E6F4E6"/>
<path d="M27.2639 17.4558L29.2106 17.4558L29.2106 14.5477L27.2639 14.5477L27.2639 17.4558Z" fill="#E6F4E6"/>
<path d="M27.2639 14.5476L29.2106 14.5476L29.2106 11.6395L27.2639 11.6395L27.2639 14.5476Z" fill="#E6F4E6"/>
<path d="M29.2107 20.364L31.1574 20.364L31.1574 17.4559L29.2107 17.4559L29.2107 20.364Z" fill="#E6F4E6"/>
<path d="M29.2107 17.4558L31.1574 17.4558L31.1574 14.5477L29.2107 14.5477L29.2107 17.4558Z" fill="#E6F4E6"/>
<path d="M29.2107 14.5476L31.1574 14.5476L31.1574 11.6395L29.2107 11.6395L29.2107 14.5476Z" fill="#E6F4E6"/>
<path d="M19.4746 11.636L21.4213 11.636L21.4213 8.72784L19.4746 8.72784L19.4746 11.636Z" fill="#E6F4E6"/>
<path d="M19.4746 8.72803L21.4213 8.72803L21.4213 5.81988L19.4746 5.81988L19.4746 8.72803Z" fill="#E6F4E6"/>
<path d="M19.4746 23.2722L21.4213 23.2722L21.4213 20.3641L19.4746 20.3641L19.4746 23.2722Z" fill="#E6F4E6"/>
<path d="M17.5278 20.364L19.4745 20.364L19.4745 17.4559L17.5278 17.4559L17.5278 20.364Z" fill="#E6F4E6"/>
<path d="M17.5278 17.4558L19.4745 17.4558L19.4745 14.5477L17.5278 14.5477L17.5278 17.4558Z" fill="#E6F4E6"/>
<path d="M17.5278 14.5476L19.4745 14.5476L19.4745 11.6395L17.5278 11.6395L17.5278 14.5476Z" fill="#E6F4E6"/>
<path d="M17.5278 11.636L19.4745 11.636L19.4745 8.72784L17.5278 8.72784L17.5278 11.636Z" fill="#E6F4E6"/>
<path d="M17.5278 23.2722L19.4745 23.2722L19.4745 20.3641L17.5278 20.3641L17.5278 23.2722Z" fill="#E6F4E6"/>
<path d="M19.4746 26.1836L21.4213 26.1836L21.4213 23.2754L19.4746 23.2754L19.4746 26.1836Z" fill="#E6F4E6"/>
<path d="M17.5278 26.1836L19.4745 26.1836L19.4745 23.2754L17.5278 23.2754L17.5278 26.1836Z" fill="#E6F4E6"/>
<path d="M15.5787 26.1836L17.5255 26.1836L17.5255 23.2754L15.5787 23.2754L15.5787 26.1836Z" fill="#E6F4E6"/>
<path d="M15.5787 29.0918L17.5255 29.0918L17.5255 26.1837L15.5787 26.1837L15.5787 29.0918Z" fill="#E6F4E6"/>
<path d="M13.6319 26.1836L15.5787 26.1836L15.5787 23.2754L13.6319 23.2754L13.6319 26.1836Z" fill="#E6F4E6"/>
<path d="M15.5787 8.72803L17.5255 8.72803L17.5255 5.81988L15.5787 5.81988L15.5787 8.72803Z" fill="#E6F4E6"/>
<path d="M13.632 8.72803L15.5787 8.72803L15.5787 5.81988L13.632 5.81988L13.632 8.72803Z" fill="#E6F4E6"/>
<path d="M11.6852 8.72778L13.632 8.72778L13.632 5.81964L11.6852 5.81964L11.6852 8.72778Z" fill="#E6F4E6"/>
<path d="M29.2107 23.2722L31.1574 23.2722L31.1574 20.3641L29.2107 20.3641L29.2107 23.2722Z" fill="#E6F4E6"/>
<path d="M29.2107 23.2722L31.1574 23.2722L31.1574 20.3641L29.2107 20.3641L29.2107 23.2722Z" fill="#E6F4E6"/>
<path d="M31.1574 23.2722L33.1042 23.2722L33.1042 20.3641L31.1574 20.3641L31.1574 23.2722Z" fill="#E6F4E6"/>
<path d="M31.1574 20.364L33.1042 20.364L33.1042 17.4559L31.1574 17.4559L31.1574 20.364Z" fill="#E6F4E6"/>
<path d="M33.1065 17.4558L35.0532 17.4558L35.0532 14.5477L33.1065 14.5477L33.1065 17.4558Z" fill="#E6F4E6"/>
<path d="M33.1065 14.5476L35.0532 14.5476L35.0532 11.6395L33.1065 11.6395L33.1065 14.5476Z" fill="#E6F4E6"/>
<path d="M33.1065 11.636L35.0532 11.636L35.0532 8.72784L33.1065 8.72784L33.1065 11.636Z" fill="#E6F4E6"/>
<path d="M33.1065 23.2722L35.0532 23.2722L35.0532 20.3641L33.1065 20.3641L33.1065 23.2722Z" fill="#E6F4E6"/>
<path d="M33.1065 20.364L35.0532 20.364L35.0532 17.4559L33.1065 17.4559L33.1065 20.364Z" fill="#E6F4E6"/>
<path d="M35.0532 17.4558L37 17.4558L37 14.5477L35.0532 14.5477L35.0532 17.4558Z" fill="#E6F4E6"/>
<path d="M35.0532 14.5476L37 14.5476L37 11.6395L35.0532 11.6395L35.0532 14.5476Z" fill="#E6F4E6"/>
<path d="M35.0532 11.636L37 11.636L37 8.72784L35.0532 8.72784L35.0532 11.636Z" fill="#E6F4E6"/>
<path d="M35.0532 23.2722L37 23.2722L37 20.3641L35.0532 20.3641L35.0532 23.2722Z" fill="#E6F4E6"/>
<path d="M35.0532 20.364L37 20.364L37 17.4559L35.0532 17.4559L35.0532 20.364Z" fill="#E6F4E6"/>
<path d="M25.3172 23.2722L27.2639 23.2722L27.2639 20.3641L25.3172 20.3641L25.3172 23.2722Z" fill="#E6F4E6"/>
</g>
<defs>
<clipPath id="clip0_47_42159">
<rect width="37" height="32" fill="white" transform="translate(37 32) rotate(-180)"/>
</clipPath>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 12 KiB

-4
View File
@@ -1,4 +0,0 @@
<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M32.7298 12H30.4V14.3876H28.0549V16.8708H25.8V19.3539H23.4549V21.7416H21.2938H18.8549V19.3539H16.6V16.8708H14.3505H12V19.3511V21.7416H14.2549V24.1292H16.6V26.7079H18.8549V29H21.2938H23.4549V26.7079H25.8V24.1292H28.0549V21.7416H30.4V19.3539H32.6549V16.8708H35V14.4211V12H32.7298Z" fill="#ADA0D6"/>
<path d="M31.591 28.6819V31.591H28.8353H25.8512H23.0728H20.0875H17.2057H14.325H11.4432H8.40914V28.6819V25.9035V22.9194V20.0375V17.1557V14.2739V11.25H11.4432H14.325H17.2057H20.0875H23.0728H25.8512H28.75V8.40914H31.591V5.45459H28.8353H25.8512H23.0728H20.0875H17.2057H14.325H11.4432H8.458H5.45459V8.408V11.2898V14.2739V17.1557V20.0375V22.9194V25.9035V28.6819V31.6671V34.5455H8.458H11.4432H14.325H17.2057H20.0875H23.0728H25.8512H28.8353H31.7171H34.5455V31.6671V28.6819V25.9091H31.591V28.6819Z" fill="#E6F4E6"/>
</svg>

Before

Width:  |  Height:  |  Size: 916 B

-122
View File
@@ -1,122 +0,0 @@
<svg width="219" height="129" viewBox="0 0 219 129" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_47_33355)">
<rect width="219" height="129" rx="8" fill="#1D2C29"/>
<g clip-path="url(#clip1_47_33355)">
<path d="M52.8353 1.84229H38.7499C38.2084 1.84229 37.7695 2.28119 37.7695 2.82262V16.91C37.7695 17.4514 38.2084 17.8903 38.7499 17.8903H52.8353C53.3767 17.8903 53.8156 17.4514 53.8156 16.91V2.82262C53.8156 2.28119 53.3767 1.84229 52.8353 1.84229Z" fill="#24453A"/>
<path d="M34.7188 1.84229H20.6334C20.092 1.84229 19.6531 2.28119 19.6531 2.82262V16.91C19.6531 17.4514 20.092 17.8903 20.6334 17.8903H34.7188C35.2603 17.8903 35.6992 17.4514 35.6992 16.91V2.82262C35.6992 2.28119 35.2603 1.84229 34.7188 1.84229Z" fill="#1D2C29"/>
<path d="M16.6024 1.84229H2.51695C1.97553 1.84229 1.53662 2.28119 1.53662 2.82262V16.91C1.53662 17.4514 1.97553 17.8903 2.51695 17.8903H16.6024C17.1438 17.8903 17.5827 17.4514 17.5827 16.91V2.82262C17.5827 2.28119 17.1438 1.84229 16.6024 1.84229Z" fill="#24453A"/>
<path d="M70.9538 1.84229H56.8664C56.325 1.84229 55.8861 2.28119 55.8861 2.82262V16.91C55.8861 17.4514 56.325 17.8903 56.8664 17.8903H70.9538C71.4952 17.8903 71.9341 17.4514 71.9341 16.91V2.82262C71.9341 2.28119 71.4952 1.84229 70.9538 1.84229Z" fill="#1D2C29"/>
<path d="M125.303 1.84229H111.218C110.677 1.84229 110.238 2.28119 110.238 2.82262V16.91C110.238 17.4514 110.677 17.8903 111.218 17.8903H125.303C125.845 17.8903 126.284 17.4514 126.284 16.91V2.82262C126.284 2.28119 125.845 1.84229 125.303 1.84229Z" fill="#24453A"/>
<path d="M107.187 1.84229H93.1014C92.56 1.84229 92.1211 2.28119 92.1211 2.82262V16.91C92.1211 17.4514 92.56 17.8903 93.1014 17.8903H107.187C107.728 17.8903 108.167 17.4514 108.167 16.91V2.82262C108.167 2.28119 107.728 1.84229 107.187 1.84229Z" fill="#1D2C29"/>
<path d="M89.0704 1.84229H74.983C74.4416 1.84229 74.0027 2.28119 74.0027 2.82262V16.91C74.0027 17.4514 74.4416 17.8903 74.983 17.8903H89.0704C89.6118 17.8903 90.0507 17.4514 90.0507 16.91V2.82262C90.0507 2.28119 89.6118 1.84229 89.0704 1.84229Z" fill="#24453A"/>
<path d="M143.422 1.84229H129.335C128.793 1.84229 128.354 2.28119 128.354 2.82262V16.91C128.354 17.4514 128.793 17.8903 129.335 17.8903H143.422C143.963 17.8903 144.402 17.4514 144.402 16.91V2.82262C144.402 2.28119 143.963 1.84229 143.422 1.84229Z" fill="#1D2C29"/>
<path d="M197.772 1.84229H183.684C183.143 1.84229 182.704 2.28119 182.704 2.82262V16.91C182.704 17.4514 183.143 17.8903 183.684 17.8903H197.772C198.313 17.8903 198.752 17.4514 198.752 16.91V2.82262C198.752 2.28119 198.313 1.84229 197.772 1.84229Z" fill="#24453A"/>
<path d="M179.655 1.84229H165.568C165.026 1.84229 164.587 2.28119 164.587 2.82262V16.91C164.587 17.4514 165.026 17.8903 165.568 17.8903H179.655C180.196 17.8903 180.635 17.4514 180.635 16.91V2.82262C180.635 2.28119 180.196 1.84229 179.655 1.84229Z" fill="#1D2C29"/>
<path d="M161.536 1.84229H147.451C146.91 1.84229 146.471 2.28119 146.471 2.82262V16.91C146.471 17.4514 146.91 17.8903 147.451 17.8903H161.536C162.078 17.8903 162.517 17.4514 162.517 16.91V2.82262C162.517 2.28119 162.078 1.84229 161.536 1.84229Z" fill="#24453A"/>
<path d="M215.89 1.84229H201.803C201.261 1.84229 200.822 2.28119 200.822 2.82262V16.91C200.822 17.4514 201.261 17.8903 201.803 17.8903H215.89C216.431 17.8903 216.87 17.4514 216.87 16.91V2.82262C216.87 2.28119 216.431 1.84229 215.89 1.84229Z" fill="#1D2C29"/>
<path d="M234.007 1.84229H219.919C219.378 1.84229 218.939 2.28119 218.939 2.82262V16.91C218.939 17.4514 219.378 17.8903 219.919 17.8903H234.007C234.548 17.8903 234.987 17.4514 234.987 16.91V2.82262C234.987 2.28119 234.548 1.84229 234.007 1.84229Z" fill="#24453A"/>
<path d="M16.6024 19.9824H2.51695C1.97553 19.9824 1.53662 20.4213 1.53662 20.9628V35.0501C1.53662 35.5915 1.97553 36.0305 2.51695 36.0305H16.6024C17.1438 36.0305 17.5827 35.5915 17.5827 35.0501V20.9628C17.5827 20.4213 17.1438 19.9824 16.6024 19.9824Z" fill="#1D2C29"/>
<path d="M70.9538 19.9824H56.8664C56.325 19.9824 55.8861 20.4213 55.8861 20.9628V35.0501C55.8861 35.5915 56.325 36.0305 56.8664 36.0305H70.9538C71.4952 36.0305 71.9341 35.5915 71.9341 35.0501V20.9628C71.9341 20.4213 71.4952 19.9824 70.9538 19.9824Z" fill="#24453A"/>
<path d="M52.8353 19.9824H38.7499C38.2084 19.9824 37.7695 20.4213 37.7695 20.9628V35.0501C37.7695 35.5915 38.2084 36.0305 38.7499 36.0305H52.8353C53.3767 36.0305 53.8156 35.5915 53.8156 35.0501V20.9628C53.8156 20.4213 53.3767 19.9824 52.8353 19.9824Z" fill="#1D2C29"/>
<path d="M34.7188 19.9824H20.6334C20.092 19.9824 19.6531 20.4213 19.6531 20.9628V35.0501C19.6531 35.5915 20.092 36.0305 20.6334 36.0305H34.7188C35.2603 36.0305 35.6992 35.5915 35.6992 35.0501V20.9628C35.6992 20.4213 35.2603 19.9824 34.7188 19.9824Z" fill="#24453A"/>
<path d="M161.536 19.9824H147.451C146.91 19.9824 146.471 20.4213 146.471 20.9628V35.0501C146.471 35.5915 146.91 36.0305 147.451 36.0305H161.536C162.078 36.0305 162.517 35.5915 162.517 35.0501V20.9628C162.517 20.4213 162.078 19.9824 161.536 19.9824Z" fill="#1D2C29"/>
<path d="M215.89 19.9824H201.803C201.261 19.9824 200.822 20.4213 200.822 20.9628V35.0501C200.822 35.5915 201.261 36.0305 201.803 36.0305H215.89C216.431 36.0305 216.87 35.5915 216.87 35.0501V20.9628C216.87 20.4213 216.431 19.9824 215.89 19.9824Z" fill="#24453A"/>
<path d="M197.772 19.9824H183.684C183.143 19.9824 182.704 20.4213 182.704 20.9628V35.0501C182.704 35.5915 183.143 36.0305 183.684 36.0305H197.772C198.313 36.0305 198.752 35.5915 198.752 35.0501V20.9628C198.752 20.4213 198.313 19.9824 197.772 19.9824Z" fill="#1D2C29"/>
<path d="M179.655 19.9824H165.568C165.026 19.9824 164.587 20.4213 164.587 20.9628V35.0501C164.587 35.5915 165.026 36.0305 165.568 36.0305H179.655C180.196 36.0305 180.635 35.5915 180.635 35.0501V20.9628C180.635 20.4213 180.196 19.9824 179.655 19.9824Z" fill="#24453A"/>
<path d="M234.007 19.9824H219.919C219.378 19.9824 218.939 20.4213 218.939 20.9628V35.0501C218.939 35.5915 219.378 36.0305 219.919 36.0305H234.007C234.548 36.0305 234.987 35.5915 234.987 35.0501V20.9628C234.987 20.4213 234.548 19.9824 234.007 19.9824Z" fill="#1D2C29"/>
<path d="M52.8353 38.0989H38.7499C38.2084 38.0989 37.7695 38.5378 37.7695 39.0792V53.1646C37.7695 53.706 38.2084 54.145 38.7499 54.145H52.8353C53.3767 54.145 53.8156 53.706 53.8156 53.1646V39.0792C53.8156 38.5378 53.3767 38.0989 52.8353 38.0989Z" fill="#24453A"/>
<path d="M34.7188 38.0989H20.6334C20.092 38.0989 19.6531 38.5378 19.6531 39.0792V53.1646C19.6531 53.706 20.092 54.145 20.6334 54.145H34.7188C35.2603 54.145 35.6992 53.706 35.6992 53.1646V39.0792C35.6992 38.5378 35.2603 38.0989 34.7188 38.0989Z" fill="#1D2C29"/>
<path d="M16.6024 38.0989H2.51695C1.97553 38.0989 1.53662 38.5378 1.53662 39.0792V53.1646C1.53662 53.706 1.97553 54.145 2.51695 54.145H16.6024C17.1438 54.145 17.5827 53.706 17.5827 53.1646V39.0792C17.5827 38.5378 17.1438 38.0989 16.6024 38.0989Z" fill="#24453A"/>
<path d="M70.9538 38.0989H56.8664C56.325 38.0989 55.8861 38.5378 55.8861 39.0792V53.1646C55.8861 53.706 56.325 54.145 56.8664 54.145H70.9538C71.4952 54.145 71.9341 53.706 71.9341 53.1646V39.0792C71.9341 38.5378 71.4952 38.0989 70.9538 38.0989Z" fill="#1D2C29"/>
<path d="M125.303 38.0989H111.218C110.677 38.0989 110.238 38.5378 110.238 39.0792V53.1646C110.238 53.706 110.677 54.145 111.218 54.145H125.303C125.845 54.145 126.284 53.706 126.284 53.1646V39.0792C126.284 38.5378 125.845 38.0989 125.303 38.0989Z" fill="#24453A"/>
<path d="M107.187 38.0989H93.1014C92.56 38.0989 92.1211 38.5378 92.1211 39.0792V53.1646C92.1211 53.706 92.56 54.145 93.1014 54.145H107.187C107.728 54.145 108.167 53.706 108.167 53.1646V39.0792C108.167 38.5378 107.728 38.0989 107.187 38.0989Z" fill="#1D2C29"/>
<path d="M197.772 38.0989H183.684C183.143 38.0989 182.704 38.5378 182.704 39.0792V53.1646C182.704 53.706 183.143 54.145 183.684 54.145H197.772C198.313 54.145 198.752 53.706 198.752 53.1646V39.0792C198.752 38.5378 198.313 38.0989 197.772 38.0989Z" fill="#24453A"/>
<path d="M179.655 38.0989H165.568C165.026 38.0989 164.587 38.5378 164.587 39.0792V53.1646C164.587 53.706 165.026 54.145 165.568 54.145H179.655C180.196 54.145 180.635 53.706 180.635 53.1646V39.0792C180.635 38.5378 180.196 38.0989 179.655 38.0989Z" fill="#1D2C29"/>
<path d="M161.536 38.0989H147.451C146.91 38.0989 146.471 38.5378 146.471 39.0792V53.1646C146.471 53.706 146.91 54.145 147.451 54.145H161.536C162.078 54.145 162.517 53.706 162.517 53.1646V39.0792C162.517 38.5378 162.078 38.0989 161.536 38.0989Z" fill="#24453A"/>
<path d="M215.89 38.0989H201.803C201.261 38.0989 200.822 38.5378 200.822 39.0792V53.1646C200.822 53.706 201.261 54.145 201.803 54.145H215.89C216.431 54.145 216.87 53.706 216.87 53.1646V39.0792C216.87 38.5378 216.431 38.0989 215.89 38.0989Z" fill="#1D2C29"/>
<path d="M234.007 38.0989H219.919C219.378 38.0989 218.939 38.5378 218.939 39.0792V53.1646C218.939 53.706 219.378 54.145 219.919 54.145H234.007C234.548 54.145 234.987 53.706 234.987 53.1646V39.0792C234.987 38.5378 234.548 38.0989 234.007 38.0989Z" fill="#24453A"/>
<path d="M16.6024 56.2368H2.51695C1.97553 56.2368 1.53662 56.6757 1.53662 57.2171V71.3026C1.53662 71.844 1.97553 72.2829 2.51695 72.2829H16.6024C17.1438 72.2829 17.5827 71.844 17.5827 71.3026V57.2171C17.5827 56.6757 17.1438 56.2368 16.6024 56.2368Z" fill="#1D2C29"/>
<path d="M70.9538 56.2368H56.8664C56.325 56.2368 55.8861 56.6757 55.8861 57.2171V71.3026C55.8861 71.844 56.325 72.2829 56.8664 72.2829H70.9538C71.4952 72.2829 71.9341 71.844 71.9341 71.3026V57.2171C71.9341 56.6757 71.4952 56.2368 70.9538 56.2368Z" fill="#24453A"/>
<path d="M52.8353 56.2368H38.7499C38.2084 56.2368 37.7695 56.6757 37.7695 57.2171V71.3026C37.7695 71.844 38.2084 72.2829 38.7499 72.2829H52.8353C53.3767 72.2829 53.8156 71.844 53.8156 71.3026V57.2171C53.8156 56.6757 53.3767 56.2368 52.8353 56.2368Z" fill="#1D2C29"/>
<path d="M34.7188 56.2368H20.6334C20.092 56.2368 19.6531 56.6757 19.6531 57.2171V71.3026C19.6531 71.844 20.092 72.2829 20.6334 72.2829H34.7188C35.2603 72.2829 35.6992 71.844 35.6992 71.3026V57.2171C35.6992 56.6757 35.2603 56.2368 34.7188 56.2368Z" fill="#24453A"/>
<path d="M125.303 56.2368H111.218C110.677 56.2368 110.238 56.6757 110.238 57.2171V71.3026C110.238 71.844 110.677 72.2829 111.218 72.2829H125.303C125.845 72.2829 126.284 71.844 126.284 71.3026V57.2171C126.284 56.6757 125.845 56.2368 125.303 56.2368Z" fill="#1D2C29"/>
<path d="M107.187 56.2368H93.1014C92.56 56.2368 92.1211 56.6757 92.1211 57.2171V71.3026C92.1211 71.844 92.56 72.2829 93.1014 72.2829H107.187C107.728 72.2829 108.167 71.844 108.167 71.3026V57.2171C108.167 56.6757 107.728 56.2368 107.187 56.2368Z" fill="#24453A"/>
<path d="M215.89 56.2368H201.803C201.261 56.2368 200.822 56.6757 200.822 57.2171V71.3026C200.822 71.844 201.261 72.2829 201.803 72.2829H215.89C216.431 72.2829 216.87 71.844 216.87 71.3026V57.2171C216.87 56.6757 216.431 56.2368 215.89 56.2368Z" fill="#24453A"/>
<path d="M197.772 56.2368H183.684C183.143 56.2368 182.704 56.6757 182.704 57.2171V71.3026C182.704 71.844 183.143 72.2829 183.684 72.2829H197.772C198.313 72.2829 198.752 71.844 198.752 71.3026V57.2171C198.752 56.6757 198.313 56.2368 197.772 56.2368Z" fill="#1D2C29"/>
<path d="M234.007 56.2368H219.919C219.378 56.2368 218.939 56.6757 218.939 57.2171V71.3026C218.939 71.844 219.378 72.2829 219.919 72.2829H234.007C234.548 72.2829 234.987 71.844 234.987 71.3026V57.2171C234.987 56.6757 234.548 56.2368 234.007 56.2368Z" fill="#1D2C29"/>
<path d="M52.8353 74.3672H38.7499C38.2084 74.3672 37.7695 74.8061 37.7695 75.3475V89.4329C37.7695 89.9744 38.2084 90.4133 38.7499 90.4133H52.8353C53.3767 90.4133 53.8156 89.9744 53.8156 89.4329V75.3475C53.8156 74.8061 53.3767 74.3672 52.8353 74.3672Z" fill="#24453A"/>
<path d="M34.7188 74.3672H20.6334C20.092 74.3672 19.6531 74.8061 19.6531 75.3475V89.4329C19.6531 89.9744 20.092 90.4133 20.6334 90.4133H34.7188C35.2603 90.4133 35.6992 89.9744 35.6992 89.4329V75.3475C35.6992 74.8061 35.2603 74.3672 34.7188 74.3672Z" fill="#1D2C29"/>
<path d="M16.6024 74.3672H2.51695C1.97553 74.3672 1.53662 74.8061 1.53662 75.3475V89.4329C1.53662 89.9744 1.97553 90.4133 2.51695 90.4133H16.6024C17.1438 90.4133 17.5827 89.9744 17.5827 89.4329V75.3475C17.5827 74.8061 17.1438 74.3672 16.6024 74.3672Z" fill="#24453A"/>
<path d="M70.9538 74.3672H56.8664C56.325 74.3672 55.8861 74.8061 55.8861 75.3475V89.4329C55.8861 89.9744 56.325 90.4133 56.8664 90.4133H70.9538C71.4952 90.4133 71.9341 89.9744 71.9341 89.4329V75.3475C71.9341 74.8061 71.4952 74.3672 70.9538 74.3672Z" fill="#1D2C29"/>
<path d="M125.303 74.3672H111.218C110.677 74.3672 110.238 74.8061 110.238 75.3475V89.4329C110.238 89.9744 110.677 90.4133 111.218 90.4133H125.303C125.845 90.4133 126.284 89.9744 126.284 89.4329V75.3475C126.284 74.8061 125.845 74.3672 125.303 74.3672Z" fill="#24453A"/>
<path d="M107.187 74.3672H93.1014C92.56 74.3672 92.1211 74.8061 92.1211 75.3475V89.4329C92.1211 89.9744 92.56 90.4133 93.1014 90.4133H107.187C107.728 90.4133 108.167 89.9744 108.167 89.4329V75.3475C108.167 74.8061 107.728 74.3672 107.187 74.3672Z" fill="#1D2C29"/>
<path d="M143.422 74.3672H129.335C128.793 74.3672 128.354 74.8061 128.354 75.3475V89.4329C128.354 89.9744 128.793 90.4133 129.335 90.4133H143.422C143.963 90.4133 144.402 89.9744 144.402 89.4329V75.3475C144.402 74.8061 143.963 74.3672 143.422 74.3672Z" fill="#1D2C29"/>
<path d="M197.772 74.3672H183.684C183.143 74.3672 182.704 74.8061 182.704 75.3475V89.4329C182.704 89.9744 183.143 90.4133 183.684 90.4133H197.772C198.313 90.4133 198.752 89.9744 198.752 89.4329V75.3475C198.752 74.8061 198.313 74.3672 197.772 74.3672Z" fill="#24453A"/>
<path d="M179.655 74.3672H165.568C165.026 74.3672 164.587 74.8061 164.587 75.3475V89.4329C164.587 89.9744 165.026 90.4133 165.568 90.4133H179.655C180.196 90.4133 180.635 89.9744 180.635 89.4329V75.3475C180.635 74.8061 180.196 74.3672 179.655 74.3672Z" fill="#1D2C29"/>
<path d="M161.536 74.3672H147.451C146.91 74.3672 146.471 74.8061 146.471 75.3475V89.4329C146.471 89.9744 146.91 90.4133 147.451 90.4133H161.536C162.078 90.4133 162.517 89.9744 162.517 89.4329V75.3475C162.517 74.8061 162.078 74.3672 161.536 74.3672Z" fill="#24453A"/>
<path d="M215.89 74.3672H201.803C201.261 74.3672 200.822 74.8061 200.822 75.3475V89.4329C200.822 89.9744 201.261 90.4133 201.803 90.4133H215.89C216.431 90.4133 216.87 89.9744 216.87 89.4329V75.3475C216.87 74.8061 216.431 74.3672 215.89 74.3672Z" fill="#1D2C29"/>
<path d="M234.007 74.3672H219.919C219.378 74.3672 218.939 74.8061 218.939 75.3475V89.4329C218.939 89.9744 219.378 90.4133 219.919 90.4133H234.007C234.548 90.4133 234.987 89.9744 234.987 89.4329V75.3475C234.987 74.8061 234.548 74.3672 234.007 74.3672Z" fill="#24453A"/>
<path d="M143.422 92.4858H129.335C128.793 92.4858 128.354 92.9247 128.354 93.4662V107.552C128.354 108.093 128.793 108.532 129.335 108.532H143.422C143.963 108.532 144.402 108.093 144.402 107.552V93.4662C144.402 92.9247 143.963 92.4858 143.422 92.4858Z" fill="#24453A"/>
<path d="M125.303 92.4858H111.218C110.677 92.4858 110.238 92.9247 110.238 93.4662V107.552C110.238 108.093 110.677 108.532 111.218 108.532H125.303C125.845 108.532 126.284 108.093 126.284 107.552V93.4662C126.284 92.9247 125.845 92.4858 125.303 92.4858Z" fill="#1D2C29"/>
<path d="M107.187 92.4858H93.1014C92.56 92.4858 92.1211 92.9247 92.1211 93.4662V107.552C92.1211 108.093 92.56 108.532 93.1014 108.532H107.187C107.728 108.532 108.167 108.093 108.167 107.552V93.4662C108.167 92.9247 107.728 92.4858 107.187 92.4858Z" fill="#24453A"/>
<path d="M161.536 92.4858H147.451C146.91 92.4858 146.471 92.9247 146.471 93.4662V107.552C146.471 108.093 146.91 108.532 147.451 108.532H161.536C162.078 108.532 162.517 108.093 162.517 107.552V93.4662C162.517 92.9247 162.078 92.4858 161.536 92.4858Z" fill="#1D2C29"/>
<path d="M215.89 92.4858H201.803C201.261 92.4858 200.822 92.9247 200.822 93.4662V107.552C200.822 108.093 201.261 108.532 201.803 108.532H215.89C216.431 108.532 216.87 108.093 216.87 107.552V93.4662C216.87 92.9247 216.431 92.4858 215.89 92.4858Z" fill="#24453A"/>
<path d="M197.772 92.4858H183.684C183.143 92.4858 182.704 92.9247 182.704 93.4662V107.552C182.704 108.093 183.143 108.532 183.684 108.532H197.772C198.313 108.532 198.752 108.093 198.752 107.552V93.4662C198.752 92.9247 198.313 92.4858 197.772 92.4858Z" fill="#1D2C29"/>
<path d="M179.655 92.4858H165.568C165.026 92.4858 164.587 92.9247 164.587 93.4662V107.552C164.587 108.093 165.026 108.532 165.568 108.532H179.655C180.196 108.532 180.635 108.093 180.635 107.552V93.4662C180.635 92.9247 180.196 92.4858 179.655 92.4858Z" fill="#24453A"/>
<path d="M234.007 92.4858H219.919C219.378 92.4858 218.939 92.9247 218.939 93.4662V107.552C218.939 108.093 219.378 108.532 219.919 108.532H234.007C234.548 108.532 234.987 108.093 234.987 107.552V93.4662C234.987 92.9247 234.548 92.4858 234.007 92.4858Z" fill="#1D2C29"/>
<path d="M52.8353 110.602H38.7499C38.2084 110.602 37.7695 111.041 37.7695 111.583V125.668C37.7695 126.209 38.2084 126.648 38.7499 126.648H52.8353C53.3767 126.648 53.8156 126.209 53.8156 125.668V111.583C53.8156 111.041 53.3767 110.602 52.8353 110.602Z" fill="#24453A"/>
<path d="M34.7188 110.602H20.6334C20.092 110.602 19.6531 111.041 19.6531 111.583V125.668C19.6531 126.209 20.092 126.648 20.6334 126.648H34.7188C35.2603 126.648 35.6992 126.209 35.6992 125.668V111.583C35.6992 111.041 35.2603 110.602 34.7188 110.602Z" fill="#1D2C29"/>
<path d="M16.6024 110.602H2.51695C1.97553 110.602 1.53662 111.041 1.53662 111.583V125.668C1.53662 126.209 1.97553 126.648 2.51695 126.648H16.6024C17.1438 126.648 17.5827 126.209 17.5827 125.668V111.583C17.5827 111.041 17.1438 110.602 16.6024 110.602Z" fill="#24453A"/>
<path d="M70.9538 110.602H56.8664C56.325 110.602 55.8861 111.041 55.8861 111.583V125.668C55.8861 126.209 56.325 126.648 56.8664 126.648H70.9538C71.4952 126.648 71.9341 126.209 71.9341 125.668V111.583C71.9341 111.041 71.4952 110.602 70.9538 110.602Z" fill="#1D2C29"/>
<path d="M125.303 110.602H111.218C110.677 110.602 110.238 111.041 110.238 111.583V125.668C110.238 126.209 110.677 126.648 111.218 126.648H125.303C125.845 126.648 126.284 126.209 126.284 125.668V111.583C126.284 111.041 125.845 110.602 125.303 110.602Z" fill="#24453A"/>
<path d="M107.187 110.602H93.1014C92.56 110.602 92.1211 111.041 92.1211 111.583V125.668C92.1211 126.209 92.56 126.648 93.1014 126.648H107.187C107.728 126.648 108.167 126.209 108.167 125.668V111.583C108.167 111.041 107.728 110.602 107.187 110.602Z" fill="#1D2C29"/>
<path d="M89.0704 110.602H74.983C74.4416 110.602 74.0027 111.041 74.0027 111.583V125.668C74.0027 126.209 74.4416 126.648 74.983 126.648H89.0704C89.6118 126.648 90.0507 126.209 90.0507 125.668V111.583C90.0507 111.041 89.6118 110.602 89.0704 110.602Z" fill="#24453A"/>
<path d="M143.422 110.602H129.335C128.793 110.602 128.354 111.041 128.354 111.583V125.668C128.354 126.209 128.793 126.648 129.335 126.648H143.422C143.963 126.648 144.402 126.209 144.402 125.668V111.583C144.402 111.041 143.963 110.602 143.422 110.602Z" fill="#1D2C29"/>
<path d="M197.772 110.602H183.684C183.143 110.602 182.704 111.041 182.704 111.583V125.668C182.704 126.209 183.143 126.648 183.684 126.648H197.772C198.313 126.648 198.752 126.209 198.752 125.668V111.583C198.752 111.041 198.313 110.602 197.772 110.602Z" fill="#24453A"/>
<path d="M179.655 110.602H165.568C165.026 110.602 164.587 111.041 164.587 111.583V125.668C164.587 126.209 165.026 126.648 165.568 126.648H179.655C180.196 126.648 180.635 126.209 180.635 125.668V111.583C180.635 111.041 180.196 110.602 179.655 110.602Z" fill="#1D2C29"/>
<path d="M161.536 110.602H147.451C146.91 110.602 146.471 111.041 146.471 111.583V125.668C146.471 126.209 146.91 126.648 147.451 126.648H161.536C162.078 126.648 162.517 126.209 162.517 125.668V111.583C162.517 111.041 162.078 110.602 161.536 110.602Z" fill="#24453A"/>
<path d="M215.89 110.602H201.803C201.261 110.602 200.822 111.041 200.822 111.583V125.668C200.822 126.209 201.261 126.648 201.803 126.648H215.89C216.431 126.648 216.87 126.209 216.87 125.668V111.583C216.87 111.041 216.431 110.602 215.89 110.602Z" fill="#1D2C29"/>
<path d="M234.007 110.602H219.919C219.378 110.602 218.939 111.041 218.939 111.583V125.668C218.939 126.209 219.378 126.648 219.919 126.648H234.007C234.548 126.648 234.987 126.209 234.987 125.668V111.583C234.987 111.041 234.548 110.602 234.007 110.602Z" fill="#24453A"/>
<path d="M16.6024 128.725H2.51695C1.97553 128.725 1.53662 129.164 1.53662 129.705V143.792C1.53662 144.334 1.97553 144.773 2.51695 144.773H16.6024C17.1438 144.773 17.5827 144.334 17.5827 143.792V129.705C17.5827 129.164 17.1438 128.725 16.6024 128.725Z" fill="#1D2C29"/>
<path d="M70.9538 128.725H56.8664C56.325 128.725 55.8861 129.164 55.8861 129.705V143.792C55.8861 144.334 56.325 144.773 56.8664 144.773H70.9538C71.4952 144.773 71.9341 144.334 71.9341 143.792V129.705C71.9341 129.164 71.4952 128.725 70.9538 128.725Z" fill="#24453A"/>
<path d="M52.8353 128.725H38.7499C38.2084 128.725 37.7695 129.164 37.7695 129.705V143.792C37.7695 144.334 38.2084 144.773 38.7499 144.773H52.8353C53.3767 144.773 53.8156 144.334 53.8156 143.792V129.705C53.8156 129.164 53.3767 128.725 52.8353 128.725Z" fill="#1D2C29"/>
<path d="M34.7188 128.725H20.6334C20.092 128.725 19.6531 129.164 19.6531 129.705V143.792C19.6531 144.334 20.092 144.773 20.6334 144.773H34.7188C35.2603 144.773 35.6992 144.334 35.6992 143.792V129.705C35.6992 129.164 35.2603 128.725 34.7188 128.725Z" fill="#24453A"/>
<path d="M89.0704 128.725H74.983C74.4416 128.725 74.0027 129.164 74.0027 129.705V143.792C74.0027 144.334 74.4416 144.773 74.983 144.773H89.0704C89.6118 144.773 90.0507 144.334 90.0507 143.792V129.705C90.0507 129.164 89.6118 128.725 89.0704 128.725Z" fill="#1D2C29"/>
<path d="M143.422 128.725H129.335C128.793 128.725 128.354 129.164 128.354 129.705V143.792C128.354 144.334 128.793 144.773 129.335 144.773H143.422C143.963 144.773 144.402 144.334 144.402 143.792V129.705C144.402 129.164 143.963 128.725 143.422 128.725Z" fill="#24453A"/>
<path d="M125.303 128.725H111.218C110.677 128.725 110.238 129.164 110.238 129.705V143.792C110.238 144.334 110.677 144.773 111.218 144.773H125.303C125.845 144.773 126.284 144.334 126.284 143.792V129.705C126.284 129.164 125.845 128.725 125.303 128.725Z" fill="#1D2C29"/>
<path d="M107.187 128.725H93.1014C92.56 128.725 92.1211 129.164 92.1211 129.705V143.792C92.1211 144.334 92.56 144.773 93.1014 144.773H107.187C107.728 144.773 108.167 144.334 108.167 143.792V129.705C108.167 129.164 107.728 128.725 107.187 128.725Z" fill="#24453A"/>
<path d="M161.536 128.725H147.451C146.91 128.725 146.471 129.164 146.471 129.705V143.792C146.471 144.334 146.91 144.773 147.451 144.773H161.536C162.078 144.773 162.517 144.334 162.517 143.792V129.705C162.517 129.164 162.078 128.725 161.536 128.725Z" fill="#1D2C29"/>
<path d="M215.89 128.725H201.803C201.261 128.725 200.822 129.164 200.822 129.705V143.792C200.822 144.334 201.261 144.773 201.803 144.773H215.89C216.431 144.773 216.87 144.334 216.87 143.792V129.705C216.87 129.164 216.431 128.725 215.89 128.725Z" fill="#24453A"/>
<path d="M197.772 128.725H183.684C183.143 128.725 182.704 129.164 182.704 129.705V143.792C182.704 144.334 183.143 144.773 183.684 144.773H197.772C198.313 144.773 198.752 144.334 198.752 143.792V129.705C198.752 129.164 198.313 128.725 197.772 128.725Z" fill="#1D2C29"/>
<path d="M179.655 128.725H165.568C165.026 128.725 164.587 129.164 164.587 129.705V143.792C164.587 144.334 165.026 144.773 165.568 144.773H179.655C180.196 144.773 180.635 144.334 180.635 143.792V129.705C180.635 129.164 180.196 128.725 179.655 128.725Z" fill="#24453A"/>
<path d="M234.007 128.725H219.919C219.378 128.725 218.939 129.164 218.939 129.705V143.792C218.939 144.334 219.378 144.773 219.919 144.773H234.007C234.548 144.773 234.987 144.334 234.987 143.792V129.705C234.987 129.164 234.548 128.725 234.007 128.725Z" fill="#1D2C29"/>
<path d="M89.0704 19.9824H74.983C74.4416 19.9824 74.0027 20.4213 74.0027 20.9628V35.0501C74.0027 35.5915 74.4416 36.0305 74.983 36.0305H89.0704C89.6118 36.0305 90.0507 35.5915 90.0507 35.0501V20.9628C90.0507 20.4213 89.6118 19.9824 89.0704 19.9824Z" fill="#5DD5A2"/>
<path d="M143.422 19.9824H129.335C128.793 19.9824 128.354 20.4213 128.354 20.9628V35.0501C128.354 35.5915 128.793 36.0305 129.335 36.0305H143.422C143.963 36.0305 144.402 35.5915 144.402 35.0501V20.9628C144.402 20.4213 143.963 19.9824 143.422 19.9824Z" fill="#5DD5A2"/>
<path d="M125.304 19.9824H111.218C110.677 19.9824 110.238 20.4213 110.238 20.9628V35.0501C110.238 35.5915 110.677 36.0305 111.218 36.0305H125.304C125.845 36.0305 126.284 35.5915 126.284 35.0501V20.9628C126.284 20.4213 125.845 19.9824 125.304 19.9824Z" fill="#5DD5A2"/>
<path d="M107.187 19.9824H93.1015C92.5601 19.9824 92.1212 20.4213 92.1212 20.9628V35.0501C92.1212 35.5915 92.5601 36.0305 93.1015 36.0305H107.187C107.728 36.0305 108.167 35.5915 108.167 35.0501V20.9628C108.167 20.4213 107.728 19.9824 107.187 19.9824Z" fill="#5DD5A2"/>
<path d="M89.0704 38.0991H74.983C74.4416 38.0991 74.0027 38.538 74.0027 39.0795V53.1649C74.0027 53.7063 74.4416 54.1452 74.983 54.1452H89.0704C89.6118 54.1452 90.0507 53.7063 90.0507 53.1649V39.0795C90.0507 38.538 89.6118 38.0991 89.0704 38.0991Z" fill="#5DD5A2"/>
<path d="M143.422 38.0991H129.335C128.793 38.0991 128.354 38.538 128.354 39.0795V53.1649C128.354 53.7063 128.793 54.1452 129.335 54.1452H143.422C143.963 54.1452 144.402 53.7063 144.402 53.1649V39.0795C144.402 38.538 143.963 38.0991 143.422 38.0991Z" fill="#5DD5A2"/>
<path d="M89.0704 56.2371H74.983C74.4416 56.2371 74.0027 56.676 74.0027 57.2174V71.3028C74.0027 71.8442 74.4416 72.2831 74.983 72.2831H89.0704C89.6118 72.2831 90.0507 71.8442 90.0507 71.3028V57.2174C90.0507 56.676 89.6118 56.2371 89.0704 56.2371Z" fill="#5DD5A2"/>
<path d="M143.422 56.2371H129.335C128.793 56.2371 128.354 56.676 128.354 57.2174V71.3028C128.354 71.8442 128.793 72.2831 129.335 72.2831H143.422C143.963 72.2831 144.402 71.8442 144.402 71.3028V57.2174C144.402 56.676 143.963 56.2371 143.422 56.2371Z" fill="#5DD5A2"/>
<path d="M161.537 56.2371H147.451C146.91 56.2371 146.471 56.676 146.471 57.2174V71.3028C146.471 71.8442 146.91 72.2831 147.451 72.2831H161.537C162.078 72.2831 162.517 71.8442 162.517 71.3028V57.2174C162.517 56.676 162.078 56.2371 161.537 56.2371Z" fill="#5DD5A2"/>
<path d="M179.655 56.2371H165.568C165.026 56.2371 164.587 56.676 164.587 57.2174V71.3028C164.587 71.8442 165.026 72.2831 165.568 72.2831H179.655C180.197 72.2831 180.635 71.8442 180.635 71.3028V57.2174C180.635 56.676 180.197 56.2371 179.655 56.2371Z" fill="#5DD5A2"/>
<path d="M89.0704 74.3674H74.983C74.4416 74.3674 74.0027 74.8063 74.0027 75.3478V89.4332C74.0027 89.9746 74.4416 90.4135 74.983 90.4135H89.0704C89.6118 90.4135 90.0507 89.9746 90.0507 89.4332V75.3478C90.0507 74.8063 89.6118 74.3674 89.0704 74.3674Z" fill="#5DD5A2"/>
<path d="M16.6024 92.4858H2.51695C1.97553 92.4858 1.53662 92.9247 1.53662 93.4662V107.552C1.53662 108.093 1.97553 108.532 2.51695 108.532H16.6024C17.1438 108.532 17.5827 108.093 17.5827 107.552V93.4662C17.5827 92.9247 17.1438 92.4858 16.6024 92.4858Z" fill="#1D2C29"/>
<path d="M70.9539 92.4858H56.8666C56.3251 92.4858 55.8862 92.9247 55.8862 93.4662V107.552C55.8862 108.093 56.3251 108.532 56.8666 108.532H70.9539C71.4954 108.532 71.9343 108.093 71.9343 107.552V93.4662C71.9343 92.9247 71.4954 92.4858 70.9539 92.4858Z" fill="#5DD5A2"/>
<path d="M52.8354 92.4858H38.75C38.2086 92.4858 37.7697 92.9247 37.7697 93.4662V107.552C37.7697 108.093 38.2086 108.532 38.75 108.532H52.8354C53.3768 108.532 53.8157 108.093 53.8157 107.552V93.4662C53.8157 92.9247 53.3768 92.4858 52.8354 92.4858Z" fill="#5DD5A2"/>
<path d="M34.7188 92.4858H20.6334C20.092 92.4858 19.6531 92.9247 19.6531 93.4662V107.552C19.6531 108.093 20.092 108.532 20.6334 108.532H34.7188C35.2603 108.532 35.6992 108.093 35.6992 107.552V93.4662C35.6992 92.9247 35.2603 92.4858 34.7188 92.4858Z" fill="#24453A"/>
<path d="M89.0704 92.4858H74.983C74.4416 92.4858 74.0027 92.9247 74.0027 93.4662V107.552C74.0027 108.093 74.4416 108.532 74.983 108.532H89.0704C89.6118 108.532 90.0507 108.093 90.0507 107.552V93.4662C90.0507 92.9247 89.6118 92.4858 89.0704 92.4858Z" fill="#5DD5A2"/>
<path d="M178.845 60.1702H176.587V62.4289H178.845V60.1702Z" fill="#1A1A1A"/>
<path d="M178.845 66.1738H176.587V68.4325H178.845V66.1738Z" fill="#1A1A1A"/>
</g>
<path d="M185 64.1702L191 56L197 64.1702L191 72L185 64.1702Z" fill="#ADA0D6"/>
</g>
<defs>
<clipPath id="clip0_47_33355">
<rect width="219" height="129" rx="8" fill="white"/>
</clipPath>
<clipPath id="clip1_47_33355">
<rect width="505.22" height="197.292" fill="white" transform="translate(-234 -52.521)"/>
</clipPath>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 28 KiB

-125
View File
@@ -1,125 +0,0 @@
<svg width="63" height="42" viewBox="0 0 63 42" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M11.2177 2.81262L50.9999 2.81268V5.6164L53.789 5.61767V8.42267L56.5768 8.42394V11.2277H59.3979V30.794L56.5768 30.7788V33.5825H53.789V36.3888H50.9999V39.1938L11.2177 39.1937V36.39H8.42863V33.585H5.64081V30.7787H2.81976V11.2276H5.64081V8.42389H8.42863V5.61762H11.2177V2.81262Z" fill="#8475FA"/>
<path d="M14.0363 0.00634766H11.2165V2.81008H14.0363V0.00634766Z" fill="#ABA5F9"/>
<path d="M11.2165 2.81262H8.39673V5.61635H11.2165V2.81262Z" fill="#ABA5F9"/>
<path d="M8.42866 5.61768H5.60889V8.4214H8.42866V5.61768Z" fill="#ABA5F9"/>
<path d="M5.63953 8.42383H2.81976V11.2276H5.63953V8.42383Z" fill="#ABA5F9"/>
<path d="M2.81977 11.2277H0V14.0314H2.81977V11.2277Z" fill="#ABA5F9"/>
<path d="M2.81977 14.0187H0V16.8224H2.81977V14.0187Z" fill="#ABA5F9"/>
<path d="M2.81977 16.8097H0V19.6134H2.81977V16.8097Z" fill="#ABA5F9"/>
<path d="M2.81977 19.6021H0V22.4058H2.81977V19.6021Z" fill="#ABA5F9"/>
<path d="M14.0363 39.1963H11.2165V42H14.0363V39.1963Z" fill="#ABA5F9"/>
<path d="M16.856 39.1963H14.0363V42H16.856V39.1963Z" fill="#ABA5F9"/>
<path d="M19.677 39.1963H16.8572V42H19.677V39.1963Z" fill="#ABA5F9"/>
<path d="M22.4968 39.1963H19.677V42H22.4968V39.1963Z" fill="#ABA5F9"/>
<path d="M25.3166 39.1963H22.4968V42H25.3166V39.1963Z" fill="#ABA5F9"/>
<path d="M28.1364 39.1963H25.3166V42H28.1364V39.1963Z" fill="#ABA5F9"/>
<path d="M30.9574 39.1963H28.1376V42H30.9574V39.1963Z" fill="#ABA5F9"/>
<path d="M33.7772 39.1963H30.9574V42H33.7772V39.1963Z" fill="#ABA5F9"/>
<path d="M36.5969 39.1963H33.7772V42H36.5969V39.1963Z" fill="#ABA5F9"/>
<path d="M39.418 39.1963H36.5983V42H39.418V39.1963Z" fill="#ABA5F9"/>
<path d="M42.2377 39.1963H39.418V42H42.2377V39.1963Z" fill="#ABA5F9"/>
<path d="M45.0575 39.1963H42.2377V42H45.0575V39.1963Z" fill="#ABA5F9"/>
<path d="M47.8773 39.1963H45.0575V42H47.8773V39.1963Z" fill="#ABA5F9"/>
<path d="M50.9999 39.1963H47.8785V42H50.9999V39.1963Z" fill="#ABA5F9"/>
<path d="M16.856 0H14.0363V2.80373H16.856V0Z" fill="#ABA5F9"/>
<path d="M19.677 0H16.8572V2.80373H19.677V0Z" fill="#ABA5F9"/>
<path d="M22.4968 0H19.677V2.80373H22.4968V0Z" fill="#ABA5F9"/>
<path d="M25.3166 0H22.4968V2.80373H25.3166V0Z" fill="#ABA5F9"/>
<path d="M28.1364 0H25.3166V2.80373H28.1364V0Z" fill="#ABA5F9"/>
<path d="M30.9574 0H28.1376V2.80373H30.9574V0Z" fill="#ABA5F9"/>
<path d="M33.7772 0H30.9574V2.80373H33.7772V0Z" fill="#ABA5F9"/>
<path d="M36.5969 0H33.7772V2.80373H36.5969V0Z" fill="#ABA5F9"/>
<path d="M39.418 0H36.5983V2.80373H39.418V0Z" fill="#ABA5F9"/>
<path d="M42.2377 0H39.418V2.80373H42.2377V0Z" fill="#ABA5F9"/>
<path d="M45.0575 0H42.2377V2.80373H45.0575V0Z" fill="#ABA5F9"/>
<path d="M47.8773 0H45.0575V2.80373H47.8773V0Z" fill="#ABA5F9"/>
<path d="M50.9999 0H47.8785V2.80373H50.9999V0Z" fill="#ABA5F9"/>
<path d="M11.2165 36.39H8.39673V39.1937H11.2165V36.39Z" fill="#ABA5F9"/>
<path d="M8.42866 33.585H5.60889V36.3887H8.42866V33.585Z" fill="#ABA5F9"/>
<path d="M5.63953 30.7788H2.81976V33.5825H5.63953V30.7788Z" fill="#ABA5F9"/>
<path d="M2.81977 27.9902H0V30.794H2.81977V27.9902Z" fill="#ABA5F9"/>
<path d="M2.81977 25.1992H0V28.0029H2.81977V25.1992Z" fill="#ABA5F9"/>
<path d="M2.81977 22.407H0V25.2107H2.81977V22.407Z" fill="#ABA5F9"/>
<path d="M53.8197 2.81262H50.9999V5.61635H53.8197V2.81262Z" fill="#ABA5F9"/>
<path d="M56.6089 5.61768H53.7891V8.4214H56.6089V5.61768Z" fill="#ABA5F9"/>
<path d="M59.3967 8.42383H56.5769V11.2276H59.3967V8.42383Z" fill="#ABA5F9"/>
<path d="M62.2177 11.2277H59.3979V14.0314H62.2177V11.2277Z" fill="#ABA5F9"/>
<path d="M62.2177 14.0187H59.3979V16.8224H62.2177V14.0187Z" fill="#ABA5F9"/>
<path d="M62.2177 16.8097H59.3979V19.6134H62.2177V16.8097Z" fill="#ABA5F9"/>
<path d="M62.2177 19.6021H59.3979V22.4058H62.2177V19.6021Z" fill="#ABA5F9"/>
<path d="M53.8197 36.39H50.9999V39.1937H53.8197V36.39Z" fill="#ABA5F9"/>
<path d="M56.6089 33.585H53.7891V36.3887H56.6089V33.585Z" fill="#ABA5F9"/>
<path d="M59.3967 30.7788H56.5769V33.5825H59.3967V30.7788Z" fill="#ABA5F9"/>
<path d="M62.2177 27.9902H59.3979V30.794H62.2177V27.9902Z" fill="#ABA5F9"/>
<path d="M62.2177 25.1992H59.3979V28.0029H62.2177V25.1992Z" fill="#ABA5F9"/>
<path d="M62.2177 22.407H59.3979V25.2107H62.2177V22.407Z" fill="#ABA5F9"/>
<g clip-path="url(#clip0_0_158)">
<path d="M35.8553 9.78516H34.0702V11.5703H35.8553V9.78516Z" fill="#E6F4E6"/>
<path d="M37.6425 8H35.8574V9.78511H37.6425V8Z" fill="#E6F4E6"/>
<path d="M39.4277 8H37.6426V9.78511H39.4277V8Z" fill="#E6F4E6"/>
<path d="M41.2128 8H39.4277V9.78511H41.2128V8Z" fill="#E6F4E6"/>
<path d="M42.9979 11.5702H41.2128V13.3553H42.9979V11.5702Z" fill="#E6F4E6"/>
<path d="M42.9979 9.78516H41.2128V11.5703H42.9979V9.78516Z" fill="#E6F4E6"/>
<path d="M42.9979 13.3574H41.2128V15.1425H42.9979V13.3574Z" fill="#E6F4E6"/>
<path d="M41.2128 15.1426H39.4277V16.9277H41.2128V15.1426Z" fill="#E6F4E6"/>
<path d="M34.0702 11.5702H32.2851V13.3553H34.0702V11.5702Z" fill="#E6F4E6"/>
<path d="M39.4277 16.9276H37.6426V18.7127H39.4277V16.9276Z" fill="#E6F4E6"/>
<path d="M32.2851 13.3574H30.5V15.1425H32.2851V13.3574Z" fill="#E6F4E6"/>
<path d="M37.6425 18.7148H35.8574V20.4999H37.6425V18.7148Z" fill="#E6F4E6"/>
<path d="M30.4979 15.1426H28.7128V16.9277H30.4979V15.1426Z" fill="#E6F4E6"/>
<path d="M35.8553 20.5H34.0702V22.2851H35.8553V20.5Z" fill="#E6F4E6"/>
<path d="M28.7128 16.9276H26.9277V18.7127H28.7128V16.9276Z" fill="#E6F4E6"/>
<path d="M34.0702 22.2852H32.2851V24.0703H34.0702V22.2852Z" fill="#E6F4E6"/>
<path d="M26.9277 18.7148H25.1426V20.4999H26.9277V18.7148Z" fill="#E6F4E6"/>
<path d="M32.2851 24.0702H30.5V25.8553H32.2851V24.0702Z" fill="#E6F4E6"/>
<path d="M26.9277 24.0702H25.1426V25.8553H26.9277V24.0702Z" fill="#E6F4E6"/>
<path d="M25.1425 20.5H23.3574V22.2851H25.1425V20.5Z" fill="#E6F4E6"/>
<path d="M23.3553 20.5H21.5702V22.2851H23.3553V20.5Z" fill="#E6F4E6"/>
<path d="M23.3553 22.2852H21.5702V24.0703H23.3553V22.2852Z" fill="#E6F4E6"/>
<path d="M23.3553 18.7148H21.5702V20.4999H23.3553V18.7148Z" fill="#E6F4E6"/>
<path d="M21.5702 18.7148H19.7851V20.4999H21.5702V18.7148Z" fill="#E6F4E6"/>
<path d="M21.5702 20.5H19.7851V22.2851H21.5702V20.5Z" fill="#E6F4E6"/>
<path d="M25.1425 22.2852H23.3574V24.0703H25.1425V22.2852Z" fill="#E6F4E6"/>
<path d="M30.4979 25.8574H28.7128V27.6425H30.4979V25.8574Z" fill="#E6F4E6"/>
<path d="M30.4979 27.6426H28.7128V29.4277H30.4979V27.6426Z" fill="#E6F4E6"/>
<path d="M30.4979 29.4276H28.7128V31.2127H30.4979V29.4276Z" fill="#E6F4E6"/>
<path d="M32.2851 27.6426H30.5V29.4277H32.2851V27.6426Z" fill="#E6F4E6"/>
<path d="M32.2851 29.4276H30.5V31.2127H32.2851V29.4276Z" fill="#E6F4E6"/>
<path d="M28.7128 25.8574H26.9277V27.6425H28.7128V25.8574Z" fill="#E6F4E6"/>
<path d="M28.7128 27.6426H26.9277V29.4277H28.7128V27.6426Z" fill="#E6F4E6"/>
<path d="M25.1425 29.4276H23.3574V31.2127H25.1425V29.4276Z" fill="#E6F4E6"/>
<path d="M19.7851 29.4276H18V31.2127H19.7851V29.4276Z" fill="#E6F4E6"/>
<path d="M23.3553 24.0702H21.5702V25.8553H23.3553V24.0702Z" fill="#E6F4E6"/>
<path d="M19.7851 31.2128H18V32.9979H19.7851V31.2128Z" fill="#E6F4E6"/>
<path d="M26.9277 27.6426H25.1426V29.4277H26.9277V27.6426Z" fill="#E6F4E6"/>
<path d="M21.5702 25.8574H19.7851V27.6425H21.5702V25.8574Z" fill="#E6F4E6"/>
<path d="M21.5702 29.4276H19.7851V31.2127H21.5702V29.4276Z" fill="#E6F4E6"/>
<path d="M23.3553 27.6426H21.5702V29.4277H23.3553V27.6426Z" fill="#E6F4E6"/>
<path d="M25.1425 25.8574H23.3574V27.6425H25.1425V25.8574Z" fill="#E6F4E6"/>
<path d="M25.1425 24.0702H23.3574V25.8553H25.1425V24.0702Z" fill="#E6F4E6"/>
<path d="M26.9277 24.0702H25.1426V25.8553H26.9277V24.0702Z" fill="#E6F4E6"/>
<path d="M19.7851 27.6426H18V29.4277H19.7851V27.6426Z" fill="#E6F4E6"/>
<path d="M23.3553 31.2128H21.5702V32.9979H23.3553V31.2128Z" fill="#E6F4E6"/>
<path d="M23.3553 29.4276H21.5702V31.2127H23.3553V29.4276Z" fill="#E6F4E6"/>
<path d="M25.1425 27.6426H23.3574V29.4277H25.1425V27.6426Z" fill="#E6F4E6"/>
<path d="M26.9277 25.8574H25.1426V27.6425H26.9277V25.8574Z" fill="#E6F4E6"/>
<path d="M21.5702 31.2128H19.7851V32.9979H21.5702V31.2128Z" fill="#E6F4E6"/>
<path d="M26.9277 22.2852H25.1426V24.0703H26.9277V22.2852Z" fill="#E6F4E6"/>
<path d="M28.7128 24.0702H26.9277V25.8553H28.7128V24.0702Z" fill="#E6F4E6"/>
<path d="M30.4979 20.5H28.7128V22.2851H30.4979V20.5Z" fill="#E6F4E6"/>
<path d="M28.7128 22.2852H26.9277V24.0703H28.7128V22.2852Z" fill="#E6F4E6"/>
<path d="M32.2851 18.7148H30.5V20.4999H32.2851V18.7148Z" fill="#E6F4E6"/>
<path d="M34.0702 16.9276H32.2851V18.7127H34.0702V16.9276Z" fill="#E6F4E6"/>
<path d="M35.8553 15.1426H34.0702V16.9277H35.8553V15.1426Z" fill="#E6F4E6"/>
<path d="M37.6425 13.3574H35.8574V15.1425H37.6425V13.3574Z" fill="#E6F4E6"/>
<path d="M39.4277 11.5702H37.6426V13.3553H39.4277V11.5702Z" fill="#E6F4E6"/>
<path d="M41.2128 9.78516H39.4277V11.5703H41.2128V9.78516Z" fill="#E6F4E6"/>
<path d="M42.9979 8H41.2128V9.78511H42.9979V8Z" fill="#E6F4E6"/>
</g>
<defs>
<clipPath id="clip0_0_158">
<rect width="25" height="25" fill="white" transform="translate(18 8)"/>
</clipPath>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 8.8 KiB

-3
View File
@@ -1,3 +0,0 @@
<svg width="24" height="22" viewBox="0 0 24 22" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M18.9014 0H22.5816L14.5415 9.18926L24 21.6938H16.5941L10.7935 14.1099L4.15631 21.6938H0.473926L9.07356 11.8648L0 0H7.59394L12.8372 6.932L18.9014 0ZM17.6098 19.491H19.649L6.48589 2.08705H4.29759L17.6098 19.491Z" fill="#05A38C"/>
</svg>

Before

Width:  |  Height:  |  Size: 340 B

-3
View File
@@ -1,3 +0,0 @@
<svg width="27" height="23" viewBox="0 0 27 23" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M1.85611 9.63259C9.10385 6.47486 13.9368 4.3931 16.355 3.38729C23.2594 0.515507 24.6941 0.0166483 25.6292 0.000175635C25.8349 -0.00344734 26.2947 0.047523 26.5926 0.289228C26.8441 0.49332 26.9133 0.769018 26.9464 0.962519C26.9795 1.15602 27.0208 1.59682 26.988 1.94125C26.6138 5.8725 24.9949 15.4126 24.1713 19.8157C23.8228 21.6788 23.1365 22.3035 22.4722 22.3646C21.0284 22.4975 19.9321 21.4105 18.5337 20.4938C16.3455 19.0594 15.1094 18.1665 12.9854 16.7669C10.5307 15.1493 12.122 14.2602 13.5209 12.8073C13.887 12.427 20.2483 6.64093 20.3714 6.11604C20.3868 6.05039 20.4011 5.80569 20.2557 5.67649C20.1103 5.54728 19.8958 5.59146 19.7409 5.6266C19.5215 5.67641 16.0259 7.98689 9.25407 12.558C8.26184 13.2394 7.36312 13.5713 6.55789 13.554C5.6702 13.5348 3.96262 13.052 2.69322 12.6394C1.13624 12.1333 -0.101214 11.8657 0.006541 11.0062C0.0626662 10.5585 0.679189 10.1006 1.85611 9.63259Z" fill="#05A38C"/>
</svg>

Before

Width:  |  Height:  |  Size: 1.0 KiB

-121
View File
@@ -1,121 +0,0 @@
<svg width="63" height="42" viewBox="0 0 63 42" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M11.2177 2.81262L50.9999 2.81268V5.6164L53.789 5.61767V8.42267L56.5768 8.42394V11.2277H59.3979V30.794L56.5768 30.7788V33.5825H53.789V36.3888H50.9999V39.1938L11.2177 39.1937V36.39H8.42863V33.585H5.64081V30.7787H2.81976V11.2276H5.64081V8.42389H8.42863V5.61762H11.2177V2.81262Z" fill="#05A38C"/>
<path d="M14.0363 0.00634766H11.2165V2.81008H14.0363V0.00634766Z" fill="#5DD5A2"/>
<path d="M11.2165 2.81262H8.39673V5.61635H11.2165V2.81262Z" fill="#5DD5A2"/>
<path d="M8.42866 5.61768H5.60889V8.4214H8.42866V5.61768Z" fill="#5DD5A2"/>
<path d="M5.63953 8.42383H2.81976V11.2276H5.63953V8.42383Z" fill="#5DD5A2"/>
<path d="M2.81977 11.2277H0V14.0314H2.81977V11.2277Z" fill="#5DD5A2"/>
<path d="M2.81977 14.0187H0V16.8224H2.81977V14.0187Z" fill="#5DD5A2"/>
<path d="M2.81977 16.8097H0V19.6134H2.81977V16.8097Z" fill="#5DD5A2"/>
<path d="M2.81977 19.6021H0V22.4058H2.81977V19.6021Z" fill="#5DD5A2"/>
<path d="M14.0363 39.1963H11.2165V42H14.0363V39.1963Z" fill="#5DD5A2"/>
<path d="M16.856 39.1963H14.0363V42H16.856V39.1963Z" fill="#5DD5A2"/>
<path d="M19.677 39.1963H16.8572V42H19.677V39.1963Z" fill="#5DD5A2"/>
<path d="M22.4968 39.1963H19.677V42H22.4968V39.1963Z" fill="#5DD5A2"/>
<path d="M25.3166 39.1963H22.4968V42H25.3166V39.1963Z" fill="#5DD5A2"/>
<path d="M28.1364 39.1963H25.3166V42H28.1364V39.1963Z" fill="#5DD5A2"/>
<path d="M30.9574 39.1963H28.1376V42H30.9574V39.1963Z" fill="#5DD5A2"/>
<path d="M33.7772 39.1963H30.9574V42H33.7772V39.1963Z" fill="#5DD5A2"/>
<path d="M36.5969 39.1963H33.7772V42H36.5969V39.1963Z" fill="#5DD5A2"/>
<path d="M39.418 39.1963H36.5983V42H39.418V39.1963Z" fill="#5DD5A2"/>
<path d="M42.2377 39.1963H39.418V42H42.2377V39.1963Z" fill="#5DD5A2"/>
<path d="M45.0575 39.1963H42.2377V42H45.0575V39.1963Z" fill="#5DD5A2"/>
<path d="M47.8773 39.1963H45.0575V42H47.8773V39.1963Z" fill="#5DD5A2"/>
<path d="M50.9999 39.1963H47.8785V42H50.9999V39.1963Z" fill="#5DD5A2"/>
<path d="M16.856 0H14.0363V2.80373H16.856V0Z" fill="#5DD5A2"/>
<path d="M19.677 0H16.8572V2.80373H19.677V0Z" fill="#5DD5A2"/>
<path d="M22.4968 0H19.677V2.80373H22.4968V0Z" fill="#5DD5A2"/>
<path d="M25.3166 0H22.4968V2.80373H25.3166V0Z" fill="#5DD5A2"/>
<path d="M28.1364 0H25.3166V2.80373H28.1364V0Z" fill="#5DD5A2"/>
<path d="M30.9574 0H28.1376V2.80373H30.9574V0Z" fill="#5DD5A2"/>
<path d="M33.7772 0H30.9574V2.80373H33.7772V0Z" fill="#5DD5A2"/>
<path d="M36.5969 0H33.7772V2.80373H36.5969V0Z" fill="#5DD5A2"/>
<path d="M39.418 0H36.5983V2.80373H39.418V0Z" fill="#5DD5A2"/>
<path d="M42.2377 0H39.418V2.80373H42.2377V0Z" fill="#5DD5A2"/>
<path d="M45.0575 0H42.2377V2.80373H45.0575V0Z" fill="#5DD5A2"/>
<path d="M47.8773 0H45.0575V2.80373H47.8773V0Z" fill="#5DD5A2"/>
<path d="M50.9999 0H47.8785V2.80373H50.9999V0Z" fill="#5DD5A2"/>
<path d="M11.2165 36.39H8.39673V39.1937H11.2165V36.39Z" fill="#5DD5A2"/>
<path d="M8.42866 33.585H5.60889V36.3887H8.42866V33.585Z" fill="#5DD5A2"/>
<path d="M5.63953 30.7788H2.81976V33.5825H5.63953V30.7788Z" fill="#5DD5A2"/>
<path d="M2.81977 27.9902H0V30.794H2.81977V27.9902Z" fill="#5DD5A2"/>
<path d="M2.81977 25.1992H0V28.0029H2.81977V25.1992Z" fill="#5DD5A2"/>
<path d="M2.81977 22.407H0V25.2107H2.81977V22.407Z" fill="#5DD5A2"/>
<path d="M53.8197 2.81262H50.9999V5.61635H53.8197V2.81262Z" fill="#5DD5A2"/>
<path d="M56.6089 5.61768H53.7891V8.4214H56.6089V5.61768Z" fill="#5DD5A2"/>
<path d="M59.3967 8.42383H56.5769V11.2276H59.3967V8.42383Z" fill="#5DD5A2"/>
<path d="M62.2177 11.2277H59.3979V14.0314H62.2177V11.2277Z" fill="#5DD5A2"/>
<path d="M62.2177 14.0187H59.3979V16.8224H62.2177V14.0187Z" fill="#5DD5A2"/>
<path d="M62.2177 16.8097H59.3979V19.6134H62.2177V16.8097Z" fill="#5DD5A2"/>
<path d="M62.2177 19.6021H59.3979V22.4058H62.2177V19.6021Z" fill="#5DD5A2"/>
<path d="M53.8197 36.39H50.9999V39.1937H53.8197V36.39Z" fill="#5DD5A2"/>
<path d="M56.6089 33.585H53.7891V36.3887H56.6089V33.585Z" fill="#5DD5A2"/>
<path d="M59.3967 30.7788H56.5769V33.5825H59.3967V30.7788Z" fill="#5DD5A2"/>
<path d="M62.2177 27.9902H59.3979V30.794H62.2177V27.9902Z" fill="#5DD5A2"/>
<path d="M62.2177 25.1992H59.3979V28.0029H62.2177V25.1992Z" fill="#5DD5A2"/>
<path d="M62.2177 22.407H59.3979V25.2107H62.2177V22.407Z" fill="#5DD5A2"/>
<g clip-path="url(#clip0_0_277)">
<path d="M24.6452 8H22.0631V10.5821H24.6452V8Z" fill="#E6F4E6"/>
<path d="M24.6452 10.582H22.0631V13.1641H24.6452V10.582Z" fill="#E6F4E6"/>
<path d="M24.6452 13.1672H22.0631V15.7493H24.6452V13.1672Z" fill="#E6F4E6"/>
<path d="M24.6452 15.7493H22.0631V18.3313H24.6452V15.7493Z" fill="#E6F4E6"/>
<path d="M22.0631 18.3314H19.481V20.9135H22.0631V18.3314Z" fill="#E6F4E6"/>
<path d="M19.4811 13.1672H16.899V15.7493H19.4811V13.1672Z" fill="#E6F4E6"/>
<path d="M19.4811 15.7493H16.899V18.3313H19.4811V15.7493Z" fill="#E6F4E6"/>
<path d="M19.4811 10.582H16.899V13.1641H19.4811V10.582Z" fill="#E6F4E6"/>
<path d="M45.311 13.1672H42.7289V15.7493H45.311V13.1672Z" fill="#E6F4E6"/>
<path d="M45.311 15.7493H42.7289V18.3313H45.311V15.7493Z" fill="#E6F4E6"/>
<path d="M42.7259 18.3314H40.1438V20.9135H42.7259V18.3314Z" fill="#E6F4E6"/>
<path d="M45.311 10.582H42.7289V13.1641H45.311V10.582Z" fill="#E6F4E6"/>
<path d="M42.7259 10.582H40.1438V13.1641H42.7259V10.582Z" fill="#E6F4E6"/>
<path d="M22.0631 10.582H19.481V13.1641H22.0631V10.582Z" fill="#E6F4E6"/>
<path d="M24.6452 18.3314H22.0631V20.9135H24.6452V18.3314Z" fill="#E6F4E6"/>
<path d="M29.8124 23.4987H27.2303V26.0807H29.8124V23.4987Z" fill="#E6F4E6"/>
<path d="M32.3945 23.4987H29.8124V26.0807H32.3945V23.4987Z" fill="#E6F4E6"/>
<path d="M27.2303 20.9135H24.6483V23.4955H27.2303V20.9135Z" fill="#E6F4E6"/>
<path d="M29.8124 20.9135H27.2303V23.4955H29.8124V20.9135Z" fill="#E6F4E6"/>
<path d="M32.3945 20.9135H29.8124V23.4955H32.3945V20.9135Z" fill="#E6F4E6"/>
<path d="M27.2303 18.3314H24.6483V20.9135H27.2303V18.3314Z" fill="#E6F4E6"/>
<path d="M29.8124 18.3314H27.2303V20.9135H29.8124V18.3314Z" fill="#E6F4E6"/>
<path d="M32.3945 18.3314H29.8124V20.9135H32.3945V18.3314Z" fill="#E6F4E6"/>
<path d="M27.2303 15.7493H24.6483V18.3313H27.2303V15.7493Z" fill="#E6F4E6"/>
<path d="M29.8124 15.7493H27.2303V18.3313H29.8124V15.7493Z" fill="#E6F4E6"/>
<path d="M32.3945 15.7493H29.8124V18.3313H32.3945V15.7493Z" fill="#E6F4E6"/>
<path d="M27.2303 13.1672H24.6483V15.7493H27.2303V13.1672Z" fill="#E6F4E6"/>
<path d="M29.8124 13.1672H27.2303V15.7493H29.8124V13.1672Z" fill="#E6F4E6"/>
<path d="M32.3945 13.1672H29.8124V15.7493H32.3945V13.1672Z" fill="#E6F4E6"/>
<path d="M27.2303 10.582H24.6483V13.1641H27.2303V10.582Z" fill="#E6F4E6"/>
<path d="M29.8124 10.582H27.2303V13.1641H29.8124V10.582Z" fill="#E6F4E6"/>
<path d="M32.3945 10.582H29.8124V13.1641H32.3945V10.582Z" fill="#E6F4E6"/>
<path d="M34.9797 23.4987H32.3976V26.0807H34.9797V23.4987Z" fill="#E6F4E6"/>
<path d="M34.9797 20.9135H32.3976V23.4955H34.9797V20.9135Z" fill="#E6F4E6"/>
<path d="M34.9797 18.3314H32.3976V20.9135H34.9797V18.3314Z" fill="#E6F4E6"/>
<path d="M34.9797 15.7493H32.3976V18.3313H34.9797V15.7493Z" fill="#E6F4E6"/>
<path d="M34.9797 13.1672H32.3976V15.7493H34.9797V13.1672Z" fill="#E6F4E6"/>
<path d="M32.3945 26.0807H29.8124V28.6628H32.3945V26.0807Z" fill="#E6F4E6"/>
<path d="M32.3945 28.6627H29.8124V31.2448H32.3945V28.6627Z" fill="#E6F4E6"/>
<path d="M29.8124 28.6627H27.2303V31.2448H29.8124V28.6627Z" fill="#E6F4E6"/>
<path d="M34.9797 28.6627H32.3976V31.2448H34.9797V28.6627Z" fill="#E6F4E6"/>
<path d="M29.8124 31.2449H27.2303V33.8269H29.8124V31.2449Z" fill="#E6F4E6"/>
<path d="M27.2303 31.2449H24.6483V33.8269H27.2303V31.2449Z" fill="#E6F4E6"/>
<path d="M32.3945 31.2449H29.8124V33.8269H32.3945V31.2449Z" fill="#E6F4E6"/>
<path d="M34.9797 31.2449H32.3976V33.8269H34.9797V31.2449Z" fill="#E6F4E6"/>
<path d="M37.5618 31.2449H34.9797V33.8269H37.5618V31.2449Z" fill="#E6F4E6"/>
<path d="M37.5618 20.9135H34.9797V23.4955H37.5618V20.9135Z" fill="#E6F4E6"/>
<path d="M40.1438 18.3314H37.5617V20.9135H40.1438V18.3314Z" fill="#E6F4E6"/>
<path d="M40.1438 15.7493H37.5617V18.3313H40.1438V15.7493Z" fill="#E6F4E6"/>
<path d="M40.1438 13.1672H37.5617V15.7493H40.1438V13.1672Z" fill="#E6F4E6"/>
<path d="M40.1438 10.582H37.5617V13.1641H40.1438V10.582Z" fill="#E6F4E6"/>
<path d="M27.2303 8H24.6483V10.5821H27.2303V8Z" fill="#E6F4E6"/>
<path d="M29.8124 8H27.2303V10.5821H29.8124V8Z" fill="#E6F4E6"/>
<path d="M32.3945 8H29.8124V10.5821H32.3945V8Z" fill="#E6F4E6"/>
<path d="M34.9797 8H32.3976V10.5821H34.9797V8Z" fill="#E6F4E6"/>
<path d="M37.5618 8H34.9797V10.5821H37.5618V8Z" fill="#E6F4E6"/>
<path d="M40.1438 8H37.5617V10.5821H40.1438V8Z" fill="#E6F4E6"/>
</g>
<defs>
<clipPath id="clip0_0_277">
<rect width="28.4121" height="25.83" fill="white" transform="translate(16.899 8)"/>
</clipPath>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 8.5 KiB

-65
View File
@@ -1,65 +0,0 @@
<svg width="63" height="42" viewBox="0 0 63 42" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M11.2177 2.81262L50.9999 2.81268V5.6164L53.789 5.61767V8.42267L56.5768 8.42394V11.2277H59.3979V30.794L56.5768 30.7788V33.5825H53.789V36.3888H50.9999V39.1938L11.2177 39.1937V36.39H8.42863V33.585H5.64081V30.7787H2.81976V11.2276H5.64081V8.42389H8.42863V5.61762H11.2177V2.81262Z" fill="#05A38C"/>
<path d="M14.0363 0.00634766H11.2166V2.81008H14.0363V0.00634766Z" fill="#5DD5A2"/>
<path d="M11.2165 2.81262H8.39673V5.61635H11.2165V2.81262Z" fill="#5DD5A2"/>
<path d="M8.42866 5.61768H5.60889V8.4214H8.42866V5.61768Z" fill="#5DD5A2"/>
<path d="M5.63953 8.42383H2.81976V11.2276H5.63953V8.42383Z" fill="#5DD5A2"/>
<path d="M2.81977 11.2277H0V14.0314H2.81977V11.2277Z" fill="#5DD5A2"/>
<path d="M2.81977 14.0187H0V16.8224H2.81977V14.0187Z" fill="#5DD5A2"/>
<path d="M2.81977 16.8097H0V19.6134H2.81977V16.8097Z" fill="#5DD5A2"/>
<path d="M2.81977 19.6021H0V22.4058H2.81977V19.6021Z" fill="#5DD5A2"/>
<path d="M14.0363 39.1963H11.2166V42H14.0363V39.1963Z" fill="#5DD5A2"/>
<path d="M16.856 39.1963H14.0363V42H16.856V39.1963Z" fill="#5DD5A2"/>
<path d="M19.6769 39.1963H16.8572V42H19.6769V39.1963Z" fill="#5DD5A2"/>
<path d="M22.4968 39.1963H19.677V42H22.4968V39.1963Z" fill="#5DD5A2"/>
<path d="M25.3166 39.1963H22.4968V42H25.3166V39.1963Z" fill="#5DD5A2"/>
<path d="M28.1364 39.1963H25.3167V42H28.1364V39.1963Z" fill="#5DD5A2"/>
<path d="M30.9575 39.1963H28.1377V42H30.9575V39.1963Z" fill="#5DD5A2"/>
<path d="M33.7772 39.1963H30.9574V42H33.7772V39.1963Z" fill="#5DD5A2"/>
<path d="M36.5969 39.1963H33.7771V42H36.5969V39.1963Z" fill="#5DD5A2"/>
<path d="M39.418 39.1963H36.5983V42H39.418V39.1963Z" fill="#5DD5A2"/>
<path d="M42.2377 39.1963H39.418V42H42.2377V39.1963Z" fill="#5DD5A2"/>
<path d="M45.0576 39.1963H42.2378V42H45.0576V39.1963Z" fill="#5DD5A2"/>
<path d="M47.8773 39.1963H45.0575V42H47.8773V39.1963Z" fill="#5DD5A2"/>
<path d="M50.9999 39.1963H47.8785V42H50.9999V39.1963Z" fill="#5DD5A2"/>
<path d="M16.856 0H14.0363V2.80373H16.856V0Z" fill="#5DD5A2"/>
<path d="M19.6769 0H16.8572V2.80373H19.6769V0Z" fill="#5DD5A2"/>
<path d="M22.4968 0H19.677V2.80373H22.4968V0Z" fill="#5DD5A2"/>
<path d="M25.3166 0H22.4968V2.80373H25.3166V0Z" fill="#5DD5A2"/>
<path d="M28.1364 0H25.3167V2.80373H28.1364V0Z" fill="#5DD5A2"/>
<path d="M30.9575 0H28.1377V2.80373H30.9575V0Z" fill="#5DD5A2"/>
<path d="M33.7772 0H30.9574V2.80373H33.7772V0Z" fill="#5DD5A2"/>
<path d="M36.5969 0H33.7771V2.80373H36.5969V0Z" fill="#5DD5A2"/>
<path d="M39.418 0H36.5983V2.80373H39.418V0Z" fill="#5DD5A2"/>
<path d="M42.2377 0H39.418V2.80373H42.2377V0Z" fill="#5DD5A2"/>
<path d="M45.0576 0H42.2378V2.80373H45.0576V0Z" fill="#5DD5A2"/>
<path d="M47.8773 0H45.0575V2.80373H47.8773V0Z" fill="#5DD5A2"/>
<path d="M50.9999 0H47.8785V2.80373H50.9999V0Z" fill="#5DD5A2"/>
<path d="M11.2165 36.39H8.39673V39.1937H11.2165V36.39Z" fill="#5DD5A2"/>
<path d="M8.42866 33.585H5.60889V36.3887H8.42866V33.585Z" fill="#5DD5A2"/>
<path d="M5.63953 30.7788H2.81976V33.5825H5.63953V30.7788Z" fill="#5DD5A2"/>
<path d="M2.81977 27.9902H0V30.794H2.81977V27.9902Z" fill="#5DD5A2"/>
<path d="M2.81977 25.1992H0V28.0029H2.81977V25.1992Z" fill="#5DD5A2"/>
<path d="M2.81977 22.407H0V25.2107H2.81977V22.407Z" fill="#5DD5A2"/>
<path d="M53.8198 2.81262H51V5.61635H53.8198V2.81262Z" fill="#5DD5A2"/>
<path d="M56.6088 5.61768H53.7891V8.4214H56.6088V5.61768Z" fill="#5DD5A2"/>
<path d="M59.3967 8.42383H56.5769V11.2276H59.3967V8.42383Z" fill="#5DD5A2"/>
<path d="M62.2177 11.2277H59.3979V14.0314H62.2177V11.2277Z" fill="#5DD5A2"/>
<path d="M62.2177 14.0187H59.3979V16.8224H62.2177V14.0187Z" fill="#5DD5A2"/>
<path d="M62.2177 16.8097H59.3979V19.6134H62.2177V16.8097Z" fill="#5DD5A2"/>
<path d="M62.2177 19.6021H59.3979V22.4058H62.2177V19.6021Z" fill="#5DD5A2"/>
<path d="M53.8198 36.39H51V39.1937H53.8198V36.39Z" fill="#5DD5A2"/>
<path d="M56.6088 33.585H53.7891V36.3887H56.6088V33.585Z" fill="#5DD5A2"/>
<path d="M59.3967 30.7788H56.5769V33.5825H59.3967V30.7788Z" fill="#5DD5A2"/>
<path d="M62.2177 27.9902H59.3979V30.794H62.2177V27.9902Z" fill="#5DD5A2"/>
<path d="M62.2177 25.1992H59.3979V28.0029H62.2177V25.1992Z" fill="#5DD5A2"/>
<path d="M62.2177 22.407H59.3979V25.2107H62.2177V22.407Z" fill="#5DD5A2"/>
<g clip-path="url(#clip0_0_392)">
<path d="M18 33.3534V31.7066H19.6941V35H18V33.3534ZM43.3192 33.3534V31.7066H45.0002V35H43.3192V33.3534ZM19.6972 30.0696L19.7006 28.4454H21.3815L21.3848 30.0696L21.3882 31.6938H19.6939L19.6972 30.0696ZM41.6252 30.0663V28.4389H43.3061V31.6938H41.6252V30.0663ZM21.3882 27.6061V26.7858L22.2292 26.789L23.0702 26.7924L23.0696 27.6061L23.0691 28.4199L22.2285 28.4233L21.3878 28.4266L21.3883 27.6063L21.3882 27.6061ZM39.9311 27.6061V26.786H41.612V28.4262H39.9311V27.6061ZM23.0884 26.7699C23.0849 26.761 23.0837 26.3906 23.0854 25.9465L23.0887 25.1392L23.926 25.1359L24.7634 25.1327L24.7599 25.9561L24.7565 26.7795L23.9255 26.7827C23.2677 26.7853 23.0931 26.7827 23.0882 26.7699H23.0884ZM28.1207 26.7772C28.116 26.7726 28.1119 26.4005 28.1119 25.9506V25.1325H24.7763V23.4794H28.1119V25.1325H34.8883V23.4794L36.5594 23.4827L38.2305 23.4859V25.1262L36.5594 25.1294L34.8884 25.1327L34.8851 25.9559L34.8818 26.7793L31.5057 26.7825C29.6488 26.7844 28.1258 26.7818 28.1209 26.7772H28.1207ZM38.2458 26.7774C38.2408 26.7726 38.2368 26.4007 38.2368 25.9508V25.1327H39.9179L39.9144 25.9561L39.9111 26.7795L39.0827 26.7827C38.6271 26.7846 38.2503 26.782 38.2456 26.7774H38.2458ZM23.091 23.4712C23.0861 23.4664 23.0822 22.7225 23.0822 21.8179V20.1732L23.926 20.1766L24.7698 20.1799V23.4732L23.935 23.4765C23.4758 23.4784 23.0961 23.476 23.0912 23.4712H23.091ZM38.2401 21.8297L38.2435 20.1799L39.0806 20.1766L39.9178 20.1732V23.4796H38.2366L38.24 21.8297H38.2401ZM21.3969 20.1648C21.392 20.1602 21.3882 18.6839 21.3882 16.8843V13.6121L22.2288 13.6155L23.0695 13.6187V20.1638C23.0695 20.1756 21.4094 20.1768 21.3973 20.1648H21.3969ZM39.9311 16.8928V13.6122H41.612V20.1734H39.9311V16.8928ZM23.0822 11.9528V10.3062H24.7632V13.5996H23.0822V11.953V11.9528ZM38.2368 11.9528V10.3062H39.9178V13.5996H38.2368V11.953V11.9528ZM24.7851 10.2977C24.7802 10.293 24.7763 9.92093 24.7763 9.47102V8.6531H28.1121L28.1086 9.47649L28.1053 10.2999L26.4496 10.3031C25.539 10.3048 24.7898 10.3026 24.7851 10.2978V10.2977ZM34.8968 10.2977C34.8921 10.2929 34.8881 9.92093 34.8881 9.47102V8.6531H36.5548C37.6526 8.6531 38.223 8.65755 38.226 8.66593C38.2282 8.67294 38.2288 9.04488 38.2268 9.4924L38.2233 10.3062H36.5645C35.6521 10.3062 34.9016 10.3023 34.8968 10.2977ZM28.1251 7.82664V7H34.8884L34.8851 7.82339L34.8818 8.64678L31.5034 8.65003L28.1252 8.65328V7.82681L28.1251 7.82664Z" fill="#E6F4E6"/>
</g>
<defs>
<clipPath id="clip0_0_392">
<rect width="27" height="28" fill="white" transform="translate(18 7)"/>
</clipPath>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 6.6 KiB

-106
View File
@@ -1,106 +0,0 @@
<svg width="63" height="42" viewBox="0 0 63 42" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M11.2178 2.81262L51 2.81268V5.6164L53.7891 5.61767V8.42267L56.5769 8.42394V11.2277H59.3979V30.794L56.5769 30.7788V33.5825H53.7891V36.3888H51V39.1938L11.2178 39.1937V36.39H8.42869V33.585H5.64087V30.7787H2.81982V11.2276H5.64087V8.42389H8.42869V5.61762H11.2178V2.81262Z" fill="#05A38C"/>
<path d="M14.0363 0.00634766H11.2166V2.81008H14.0363V0.00634766Z" fill="#5DD5A2"/>
<path d="M11.2165 2.81262H8.39673V5.61635H11.2165V2.81262Z" fill="#5DD5A2"/>
<path d="M8.42866 5.61768H5.60889V8.4214H8.42866V5.61768Z" fill="#5DD5A2"/>
<path d="M5.63959 8.42383H2.81982V11.2276H5.63959V8.42383Z" fill="#5DD5A2"/>
<path d="M2.81977 11.2277H0V14.0314H2.81977V11.2277Z" fill="#5DD5A2"/>
<path d="M2.81977 14.0187H0V16.8224H2.81977V14.0187Z" fill="#5DD5A2"/>
<path d="M2.81977 16.8097H0V19.6134H2.81977V16.8097Z" fill="#5DD5A2"/>
<path d="M2.81977 19.6021H0V22.4058H2.81977V19.6021Z" fill="#5DD5A2"/>
<path d="M14.0363 39.1963H11.2166V42H14.0363V39.1963Z" fill="#5DD5A2"/>
<path d="M16.856 39.1963H14.0363V42H16.856V39.1963Z" fill="#5DD5A2"/>
<path d="M19.6771 39.1963H16.8573V42H19.6771V39.1963Z" fill="#5DD5A2"/>
<path d="M22.4968 39.1963H19.677V42H22.4968V39.1963Z" fill="#5DD5A2"/>
<path d="M25.3166 39.1963H22.4968V42H25.3166V39.1963Z" fill="#5DD5A2"/>
<path d="M28.1363 39.1963H25.3165V42H28.1363V39.1963Z" fill="#5DD5A2"/>
<path d="M30.9575 39.1963H28.1377V42H30.9575V39.1963Z" fill="#5DD5A2"/>
<path d="M33.7772 39.1963H30.9574V42H33.7772V39.1963Z" fill="#5DD5A2"/>
<path d="M36.597 39.1963H33.7772V42H36.597V39.1963Z" fill="#5DD5A2"/>
<path d="M39.418 39.1963H36.5983V42H39.418V39.1963Z" fill="#5DD5A2"/>
<path d="M42.2377 39.1963H39.418V42H42.2377V39.1963Z" fill="#5DD5A2"/>
<path d="M45.0574 39.1963H42.2377V42H45.0574V39.1963Z" fill="#5DD5A2"/>
<path d="M47.8773 39.1963H45.0575V42H47.8773V39.1963Z" fill="#5DD5A2"/>
<path d="M50.9999 39.1963H47.8785V42H50.9999V39.1963Z" fill="#5DD5A2"/>
<path d="M16.856 0H14.0363V2.80373H16.856V0Z" fill="#5DD5A2"/>
<path d="M19.6771 0H16.8573V2.80373H19.6771V0Z" fill="#5DD5A2"/>
<path d="M22.4968 0H19.677V2.80373H22.4968V0Z" fill="#5DD5A2"/>
<path d="M25.3166 0H22.4968V2.80373H25.3166V0Z" fill="#5DD5A2"/>
<path d="M28.1363 0H25.3165V2.80373H28.1363V0Z" fill="#5DD5A2"/>
<path d="M30.9575 0H28.1377V2.80373H30.9575V0Z" fill="#5DD5A2"/>
<path d="M33.7772 0H30.9574V2.80373H33.7772V0Z" fill="#5DD5A2"/>
<path d="M36.597 0H33.7772V2.80373H36.597V0Z" fill="#5DD5A2"/>
<path d="M39.418 0H36.5983V2.80373H39.418V0Z" fill="#5DD5A2"/>
<path d="M42.2377 0H39.418V2.80373H42.2377V0Z" fill="#5DD5A2"/>
<path d="M45.0574 0H42.2377V2.80373H45.0574V0Z" fill="#5DD5A2"/>
<path d="M47.8773 0H45.0575V2.80373H47.8773V0Z" fill="#5DD5A2"/>
<path d="M50.9999 0H47.8785V2.80373H50.9999V0Z" fill="#5DD5A2"/>
<path d="M11.2165 36.39H8.39673V39.1937H11.2165V36.39Z" fill="#5DD5A2"/>
<path d="M8.42866 33.585H5.60889V36.3887H8.42866V33.585Z" fill="#5DD5A2"/>
<path d="M5.63959 30.7788H2.81982V33.5825H5.63959V30.7788Z" fill="#5DD5A2"/>
<path d="M2.81977 27.9902H0V30.794H2.81977V27.9902Z" fill="#5DD5A2"/>
<path d="M2.81977 25.1992H0V28.0029H2.81977V25.1992Z" fill="#5DD5A2"/>
<path d="M2.81977 22.407H0V25.2107H2.81977V22.407Z" fill="#5DD5A2"/>
<path d="M53.8198 2.81262H51V5.61635H53.8198V2.81262Z" fill="#5DD5A2"/>
<path d="M56.6088 5.61768H53.7891V8.4214H56.6088V5.61768Z" fill="#5DD5A2"/>
<path d="M59.3967 8.42383H56.5769V11.2276H59.3967V8.42383Z" fill="#5DD5A2"/>
<path d="M62.2177 11.2277H59.3979V14.0314H62.2177V11.2277Z" fill="#5DD5A2"/>
<path d="M62.2177 14.0187H59.3979V16.8224H62.2177V14.0187Z" fill="#5DD5A2"/>
<path d="M62.2177 16.8097H59.3979V19.6134H62.2177V16.8097Z" fill="#5DD5A2"/>
<path d="M62.2177 19.6021H59.3979V22.4058H62.2177V19.6021Z" fill="#5DD5A2"/>
<path d="M53.8198 36.39H51V39.1937H53.8198V36.39Z" fill="#5DD5A2"/>
<path d="M56.6088 33.585H53.7891V36.3887H56.6088V33.585Z" fill="#5DD5A2"/>
<path d="M59.3967 30.7788H56.5769V33.5825H59.3967V30.7788Z" fill="#5DD5A2"/>
<path d="M62.2177 27.9902H59.3979V30.794H62.2177V27.9902Z" fill="#5DD5A2"/>
<path d="M62.2177 25.1992H59.3979V28.0029H62.2177V25.1992Z" fill="#5DD5A2"/>
<path d="M62.2177 22.407H59.3979V25.2107H62.2177V22.407Z" fill="#5DD5A2"/>
<g clip-path="url(#clip0_0_451)">
<path d="M24.5006 29.668H22.3346V31.834H24.5006V29.668Z" fill="#E6F4E6"/>
<path d="M26.6666 29.668H24.5006V31.834H26.6666V29.668Z" fill="#E6F4E6"/>
<path d="M24.5006 10.166H22.3346V12.332H24.5006V10.166Z" fill="#E6F4E6"/>
<path d="M22.332 12.3346H20.166V14.5006H22.332V12.3346Z" fill="#E6F4E6"/>
<path d="M22.332 14.5006H20.166V16.6666H22.332V14.5006Z" fill="#E6F4E6"/>
<path d="M20.166 16.6666H18V18.8326H20.166V16.6666Z" fill="#E6F4E6"/>
<path d="M20.166 18.8326H18V20.9987H20.166V18.8326Z" fill="#E6F4E6"/>
<path d="M20.166 20.9987H18V23.1647H20.166V20.9987Z" fill="#E6F4E6"/>
<path d="M30.9987 16.6666H28.8326V18.8326H30.9987V16.6666Z" fill="#E6F4E6"/>
<path d="M30.9987 18.8326H28.8326V20.9987H30.9987V18.8326Z" fill="#E6F4E6"/>
<path d="M30.9987 20.9987H28.8326V23.1647H30.9987V20.9987Z" fill="#E6F4E6"/>
<path d="M33.1674 16.6666H31.0013V18.8326H33.1674V16.6666Z" fill="#E6F4E6"/>
<path d="M30.9987 14.5006H28.8326V16.6666H30.9987V14.5006Z" fill="#E6F4E6"/>
<path d="M33.1674 14.5006H31.0013V16.6666H33.1674V14.5006Z" fill="#E6F4E6"/>
<path d="M33.1674 18.8326H31.0013V20.9987H33.1674V18.8326Z" fill="#E6F4E6"/>
<path d="M33.1674 20.9987H31.0013V23.1647H33.1674V20.9987Z" fill="#E6F4E6"/>
<path d="M30.9987 25.3334H28.8326V27.4994H30.9987V25.3334Z" fill="#E6F4E6"/>
<path d="M33.1674 25.3334H31.0013V27.4994H33.1674V25.3334Z" fill="#E6F4E6"/>
<path d="M20.166 23.1674H18V25.3334H20.166V23.1674Z" fill="#E6F4E6"/>
<path d="M22.332 25.3334H20.166V27.4994H22.332V25.3334Z" fill="#E6F4E6"/>
<path d="M22.332 27.4994H20.166V29.6654H22.332V27.4994Z" fill="#E6F4E6"/>
<path d="M41.834 12.3346H39.668V14.5006H41.834V12.3346Z" fill="#E6F4E6"/>
<path d="M39.6654 10.166H37.4994V12.332H39.6654V10.166Z" fill="#E6F4E6"/>
<path d="M37.4994 10.166H35.3334V12.332H37.4994V10.166Z" fill="#E6F4E6"/>
<path d="M35.3334 8H33.1674V10.166H35.3334V8Z" fill="#E6F4E6"/>
<path d="M33.1674 8H31.0013V10.166H33.1674V8Z" fill="#E6F4E6"/>
<path d="M30.9987 8H28.8326V10.166H30.9987V8Z" fill="#E6F4E6"/>
<path d="M26.6666 10.166H24.5006V12.332H26.6666V10.166Z" fill="#E6F4E6"/>
<path d="M28.8326 8H26.6666V10.166H28.8326V8Z" fill="#E6F4E6"/>
<path d="M39.6654 29.668H37.4994V31.834H39.6654V29.668Z" fill="#E6F4E6"/>
<path d="M37.4994 29.668H35.3334V31.834H37.4994V29.668Z" fill="#E6F4E6"/>
<path d="M35.3334 31.834H33.1674V34H35.3334V31.834Z" fill="#E6F4E6"/>
<path d="M33.1674 31.834H31.0013V34H33.1674V31.834Z" fill="#E6F4E6"/>
<path d="M30.9987 31.834H28.8326V34H30.9987V31.834Z" fill="#E6F4E6"/>
<path d="M28.8326 31.834H26.6666V34H28.8326V31.834Z" fill="#E6F4E6"/>
<path d="M41.834 27.4994H39.668V29.6654H41.834V27.4994Z" fill="#E6F4E6"/>
<path d="M41.834 25.3334H39.668V27.4994H41.834V25.3334Z" fill="#E6F4E6"/>
<path d="M44 23.1674H41.834V25.3334H44V23.1674Z" fill="#E6F4E6"/>
<path d="M44 20.9987H41.834V23.1647H44V20.9987Z" fill="#E6F4E6"/>
<path d="M44 18.8326H41.834V20.9987H44V18.8326Z" fill="#E6F4E6"/>
<path d="M44 16.6666H41.834V18.8326H44V16.6666Z" fill="#E6F4E6"/>
<path d="M41.834 14.5006H39.668V16.6666H41.834V14.5006Z" fill="#E6F4E6"/>
</g>
<defs>
<clipPath id="clip0_0_451">
<rect width="26" height="26" fill="white" transform="translate(18 8)"/>
</clipPath>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 7.3 KiB

-65
View File
@@ -1,65 +0,0 @@
<svg width="74" height="50" viewBox="0 0 74 50" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M13.3263 3.34832L60.5865 3.34838V6.68615L63.8999 6.68766V10.0269L67.2118 10.0285V13.3662H70.5631V36.6595L67.2118 36.6413V39.9791H63.8999V43.3199H60.5865V46.6592L13.3263 46.6591V43.3214H10.013V39.9821H6.70112V36.6413H3.34979V13.3662H6.70112V10.0284H10.013V6.6876H13.3263V3.34832Z" fill="#05A38C"/>
<path d="M16.6747 0.00762323H13.3249V3.34539H16.6747V0.00762323Z" fill="#5DD5A2"/>
<path d="M13.3249 3.34832H9.97511V6.68609H13.3249V3.34832Z" fill="#5DD5A2"/>
<path d="M10.013 6.68766H6.66319V10.0254H10.013V6.68766Z" fill="#5DD5A2"/>
<path d="M6.6996 10.0285H3.34979V13.3662H6.6996V10.0285Z" fill="#5DD5A2"/>
<path d="M3.34981 13.3663H0V16.7041H3.34981V13.3663Z" fill="#5DD5A2"/>
<path d="M3.34981 16.6888H0V20.0266H3.34981V16.6888Z" fill="#5DD5A2"/>
<path d="M3.34981 20.0116H0V23.3494H3.34981V20.0116Z" fill="#5DD5A2"/>
<path d="M3.34981 23.3357H0V26.6734H3.34981V23.3357Z" fill="#5DD5A2"/>
<path d="M16.6747 46.6621H13.3249V49.9999H16.6747V46.6621Z" fill="#5DD5A2"/>
<path d="M20.0245 46.6621H16.6747V49.9999H20.0245V46.6621Z" fill="#5DD5A2"/>
<path d="M23.3758 46.6621H20.026V49.9999H23.3758V46.6621Z" fill="#5DD5A2"/>
<path d="M26.7256 46.6621H23.3758V49.9999H26.7256V46.6621Z" fill="#5DD5A2"/>
<path d="M30.0754 46.6621H26.7256V49.9999H30.0754V46.6621Z" fill="#5DD5A2"/>
<path d="M33.4253 46.6621H30.0755V49.9999H33.4253V46.6621Z" fill="#5DD5A2"/>
<path d="M36.7767 46.6621H33.4269V49.9999H36.7767V46.6621Z" fill="#5DD5A2"/>
<path d="M40.1263 46.6621H36.7765V49.9999H40.1263V46.6621Z" fill="#5DD5A2"/>
<path d="M43.4761 46.6621H40.1263V49.9999H43.4761V46.6621Z" fill="#5DD5A2"/>
<path d="M46.8275 46.6621H43.4777V49.9999H46.8275V46.6621Z" fill="#5DD5A2"/>
<path d="M50.1773 46.6621H46.8275V49.9999H50.1773V46.6621Z" fill="#5DD5A2"/>
<path d="M53.527 46.6621H50.1772V49.9999H53.527V46.6621Z" fill="#5DD5A2"/>
<path d="M56.8769 46.6621H53.5271V49.9999H56.8769V46.6621Z" fill="#5DD5A2"/>
<path d="M60.5866 46.6621H56.8785V49.9999H60.5866V46.6621Z" fill="#5DD5A2"/>
<path d="M20.0245 0H16.6747V3.33777H20.0245V0Z" fill="#5DD5A2"/>
<path d="M23.3758 0H20.026V3.33777H23.3758V0Z" fill="#5DD5A2"/>
<path d="M26.7256 0H23.3758V3.33777H26.7256V0Z" fill="#5DD5A2"/>
<path d="M30.0754 0H26.7256V3.33777H30.0754V0Z" fill="#5DD5A2"/>
<path d="M33.4253 0H30.0755V3.33777H33.4253V0Z" fill="#5DD5A2"/>
<path d="M36.7767 0H33.4269V3.33777H36.7767V0Z" fill="#5DD5A2"/>
<path d="M40.1263 0H36.7765V3.33777H40.1263V0Z" fill="#5DD5A2"/>
<path d="M43.4761 0H40.1263V3.33777H43.4761V0Z" fill="#5DD5A2"/>
<path d="M46.8275 0H43.4777V3.33777H46.8275V0Z" fill="#5DD5A2"/>
<path d="M50.1773 0H46.8275V3.33777H50.1773V0Z" fill="#5DD5A2"/>
<path d="M53.527 0H50.1772V3.33777H53.527V0Z" fill="#5DD5A2"/>
<path d="M56.8769 0H53.5271V3.33777H56.8769V0Z" fill="#5DD5A2"/>
<path d="M60.5866 0H56.8785V3.33777H60.5866V0Z" fill="#5DD5A2"/>
<path d="M13.3249 43.3214H9.97511V46.6592H13.3249V43.3214Z" fill="#5DD5A2"/>
<path d="M10.013 39.9821H6.66319V43.3199H10.013V39.9821Z" fill="#5DD5A2"/>
<path d="M6.6996 36.6414H3.34979V39.9792H6.6996V36.6414Z" fill="#5DD5A2"/>
<path d="M3.34981 33.3217H0V36.6595H3.34981V33.3217Z" fill="#5DD5A2"/>
<path d="M3.34981 29.9991H0V33.3369H3.34981V29.9991Z" fill="#5DD5A2"/>
<path d="M3.34981 26.675H0V30.0128H3.34981V26.675Z" fill="#5DD5A2"/>
<path d="M63.9362 3.34832H60.5864V6.68609H63.9362V3.34832Z" fill="#5DD5A2"/>
<path d="M67.2499 6.68766H63.9001V10.0254H67.2499V6.68766Z" fill="#5DD5A2"/>
<path d="M70.5617 10.0285H67.2119V13.3662H70.5617V10.0285Z" fill="#5DD5A2"/>
<path d="M73.9131 13.3663H70.5633V16.7041H73.9131V13.3663Z" fill="#5DD5A2"/>
<path d="M73.9131 16.6888H70.5633V20.0266H73.9131V16.6888Z" fill="#5DD5A2"/>
<path d="M73.9131 20.0116H70.5633V23.3494H73.9131V20.0116Z" fill="#5DD5A2"/>
<path d="M73.9131 23.3357H70.5633V26.6734H73.9131V23.3357Z" fill="#5DD5A2"/>
<path d="M63.9362 43.3214H60.5864V46.6592H63.9362V43.3214Z" fill="#5DD5A2"/>
<path d="M67.2499 39.9821H63.9001V43.3199H67.2499V39.9821Z" fill="#5DD5A2"/>
<path d="M70.5617 36.6414H67.2119V39.9792H70.5617V36.6414Z" fill="#5DD5A2"/>
<path d="M73.9131 33.3217H70.5633V36.6595H73.9131V33.3217Z" fill="#5DD5A2"/>
<path d="M73.9131 29.9991H70.5633V33.3369H73.9131V29.9991Z" fill="#5DD5A2"/>
<path d="M73.9131 26.675H70.5633V30.0128H73.9131V26.675Z" fill="#5DD5A2"/>
<path d="M50.3609 10.0284H45.6522V14.7371H50.3609V10.0284Z" fill="#E6F4E6"/>
<path d="M50.3609 14.737H45.6522V19.4458H50.3609V14.737Z" fill="#E6F4E6"/>
<path d="M55.0754 10.0284H50.3667V14.7371H55.0754V10.0284Z" fill="#E6F4E6"/>
<path d="M55.0754 14.737H50.3667V19.4458H55.0754V14.737Z" fill="#E6F4E6"/>
<path d="M50.3609 30.616H45.6522V35.3247H50.3609V30.616Z" fill="#E6F4E6"/>
<path d="M50.3609 35.3248H45.6522V40.0335H50.3609V35.3248Z" fill="#E6F4E6"/>
<path d="M55.0754 30.616H50.3667V35.3247H55.0754V30.616Z" fill="#E6F4E6"/>
<path d="M55.0754 35.3248H50.3667V40.0335H55.0754V35.3248Z" fill="#E6F4E6"/>
</svg>

Before

Width:  |  Height:  |  Size: 4.8 KiB

-65
View File
@@ -1,65 +0,0 @@
<svg width="74" height="50" viewBox="0 0 74 50" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M13.3263 3.34832L60.5865 3.34838V6.68615L63.8998 6.68766V10.0269L67.2117 10.0285V13.3662H70.563V36.6595L67.2117 36.6413V39.9791H63.8998V43.3199H60.5865V46.6592L13.3263 46.6591V43.3214H10.0129V39.9821H6.70106V36.6413H3.34973V13.3662H6.70106V10.0284H10.0129V6.6876H13.3263V3.34832Z" fill="white"/>
<path d="M16.6747 0.00762323H13.3249V3.34539H16.6747V0.00762323Z" fill="#5DD5A2"/>
<path d="M13.3249 3.34832H9.97511V6.68609H13.3249V3.34832Z" fill="#5DD5A2"/>
<path d="M10.013 6.68754H6.66319V10.0253H10.013V6.68754Z" fill="#5DD5A2"/>
<path d="M6.69954 10.0285H3.34973V13.3662H6.69954V10.0285Z" fill="#5DD5A2"/>
<path d="M3.34981 13.3662H0V16.704H3.34981V13.3662Z" fill="#5DD5A2"/>
<path d="M3.34981 16.689H0V20.0267H3.34981V16.689Z" fill="#5DD5A2"/>
<path d="M3.34981 20.0115H0V23.3492H3.34981V20.0115Z" fill="#5DD5A2"/>
<path d="M3.34981 23.3357H0V26.6734H3.34981V23.3357Z" fill="#5DD5A2"/>
<path d="M16.6747 46.6623H13.3249V50H16.6747V46.6623Z" fill="#5DD5A2"/>
<path d="M20.0244 46.6623H16.6746V50H20.0244V46.6623Z" fill="#5DD5A2"/>
<path d="M23.3758 46.6623H20.026V50H23.3758V46.6623Z" fill="#5DD5A2"/>
<path d="M26.7256 46.6623H23.3758V50H26.7256V46.6623Z" fill="#5DD5A2"/>
<path d="M30.0754 46.6623H26.7256V50H30.0754V46.6623Z" fill="#5DD5A2"/>
<path d="M33.4253 46.6623H30.0755V50H33.4253V46.6623Z" fill="#5DD5A2"/>
<path d="M36.7766 46.6623H33.4268V50H36.7766V46.6623Z" fill="#5DD5A2"/>
<path d="M40.1264 46.6623H36.7766V50H40.1264V46.6623Z" fill="#5DD5A2"/>
<path d="M43.4761 46.6623H40.1263V50H43.4761V46.6623Z" fill="#5DD5A2"/>
<path d="M46.8275 46.6623H43.4777V50H46.8275V46.6623Z" fill="#5DD5A2"/>
<path d="M50.1773 46.6623H46.8274V50H50.1773V46.6623Z" fill="#5DD5A2"/>
<path d="M53.5271 46.6623H50.1772V50H53.5271V46.6623Z" fill="#5DD5A2"/>
<path d="M56.877 46.6623H53.5272V50H56.877V46.6623Z" fill="#5DD5A2"/>
<path d="M60.5866 46.6623H56.8785V50H60.5866V46.6623Z" fill="#5DD5A2"/>
<path d="M20.0244 0H16.6746V3.33777H20.0244V0Z" fill="#5DD5A2"/>
<path d="M23.3758 0H20.026V3.33777H23.3758V0Z" fill="#5DD5A2"/>
<path d="M26.7256 0H23.3758V3.33777H26.7256V0Z" fill="#5DD5A2"/>
<path d="M30.0754 0H26.7256V3.33777H30.0754V0Z" fill="#5DD5A2"/>
<path d="M33.4253 0H30.0755V3.33777H33.4253V0Z" fill="#5DD5A2"/>
<path d="M36.7766 0H33.4268V3.33777H36.7766V0Z" fill="#5DD5A2"/>
<path d="M40.1264 0H36.7766V3.33777H40.1264V0Z" fill="#5DD5A2"/>
<path d="M43.4761 0H40.1263V3.33777H43.4761V0Z" fill="#5DD5A2"/>
<path d="M46.8275 0H43.4777V3.33777H46.8275V0Z" fill="#5DD5A2"/>
<path d="M50.1773 0H46.8274V3.33777H50.1773V0Z" fill="#5DD5A2"/>
<path d="M53.5271 0H50.1772V3.33777H53.5271V0Z" fill="#5DD5A2"/>
<path d="M56.877 0H53.5272V3.33777H56.877V0Z" fill="#5DD5A2"/>
<path d="M60.5866 0H56.8785V3.33777H60.5866V0Z" fill="#5DD5A2"/>
<path d="M13.3249 43.3213H9.97511V46.6591H13.3249V43.3213Z" fill="#5DD5A2"/>
<path d="M10.013 39.9821H6.66319V43.3199H10.013V39.9821Z" fill="#5DD5A2"/>
<path d="M6.69954 36.6414H3.34973V39.9792H6.69954V36.6414Z" fill="#5DD5A2"/>
<path d="M3.34981 33.3219H0V36.6596H3.34981V33.3219Z" fill="#5DD5A2"/>
<path d="M3.34981 29.9991H0V33.3369H3.34981V29.9991Z" fill="#5DD5A2"/>
<path d="M3.34981 26.6749H0V30.0127H3.34981V26.6749Z" fill="#5DD5A2"/>
<path d="M63.9363 3.34832H60.5865V6.68609H63.9363V3.34832Z" fill="#5DD5A2"/>
<path d="M67.2498 6.68754H63.9V10.0253H67.2498V6.68754Z" fill="#5DD5A2"/>
<path d="M70.5617 10.0285H67.2119V13.3662H70.5617V10.0285Z" fill="#5DD5A2"/>
<path d="M73.913 13.3662H70.5632V16.704H73.913V13.3662Z" fill="#5DD5A2"/>
<path d="M73.913 16.689H70.5632V20.0267H73.913V16.689Z" fill="#5DD5A2"/>
<path d="M73.913 20.0115H70.5632V23.3492H73.913V20.0115Z" fill="#5DD5A2"/>
<path d="M73.913 23.3357H70.5632V26.6734H73.913V23.3357Z" fill="#5DD5A2"/>
<path d="M63.9363 43.3213H60.5865V46.6591H63.9363V43.3213Z" fill="#5DD5A2"/>
<path d="M67.2498 39.9821H63.9V43.3199H67.2498V39.9821Z" fill="#5DD5A2"/>
<path d="M70.5617 36.6414H67.2119V39.9792H70.5617V36.6414Z" fill="#5DD5A2"/>
<path d="M73.913 33.3219H70.5632V36.6596H73.913V33.3219Z" fill="#5DD5A2"/>
<path d="M73.913 29.9991H70.5632V33.3369H73.913V29.9991Z" fill="#5DD5A2"/>
<path d="M73.913 26.6749H70.5632V30.0127H73.913V26.6749Z" fill="#5DD5A2"/>
<path d="M50.3609 10.0282H45.6521V14.737H50.3609V10.0282Z" fill="#05A38C"/>
<path d="M50.3609 14.7372H45.6521V19.4459H50.3609V14.7372Z" fill="#05A38C"/>
<path d="M55.0755 10.0282H50.3667V14.737H55.0755V10.0282Z" fill="#05A38C"/>
<path d="M55.0755 14.7372H50.3667V19.4459H55.0755V14.7372Z" fill="#05A38C"/>
<path d="M50.3609 30.6161H45.6521V35.3248H50.3609V30.6161Z" fill="#05A38C"/>
<path d="M50.3609 35.3248H45.6521V40.0335H50.3609V35.3248Z" fill="#05A38C"/>
<path d="M55.0755 30.6161H50.3667V35.3248H55.0755V30.6161Z" fill="#05A38C"/>
<path d="M55.0755 35.3248H50.3667V40.0335H55.0755V35.3248Z" fill="#05A38C"/>
</svg>

Before

Width:  |  Height:  |  Size: 4.8 KiB

-144
View File
@@ -1,144 +0,0 @@
<svg width="186" height="42" viewBox="0 0 186 42" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M14.0363 0.00634766H11.2166V2.81008H14.0363V0.00634766Z" fill="#5DD5A2"/>
<path d="M11.2165 2.81262H8.39673V5.61635H11.2165V2.81262Z" fill="#5DD5A2"/>
<path d="M8.42866 5.61768H5.60889V8.4214H8.42866V5.61768Z" fill="#5DD5A2"/>
<path d="M5.63959 8.42395H2.81982V11.2277H5.63959V8.42395Z" fill="#5DD5A2"/>
<path d="M2.81977 11.2277H0V14.0314H2.81977V11.2277Z" fill="#5DD5A2"/>
<path d="M2.81977 14.0187H0V16.8224H2.81977V14.0187Z" fill="#5DD5A2"/>
<path d="M2.81977 16.8097H0V19.6134H2.81977V16.8097Z" fill="#5DD5A2"/>
<path d="M2.81977 19.6019H0V22.4057H2.81977V19.6019Z" fill="#5DD5A2"/>
<path d="M14.0363 39.1963H11.2166V42H14.0363V39.1963Z" fill="#5DD5A2"/>
<path d="M16.8561 39.1963H14.0364V42H16.8561V39.1963Z" fill="#5DD5A2"/>
<path d="M19.6772 39.1963H16.8574V42H19.6772V39.1963Z" fill="#5DD5A2"/>
<path d="M22.4968 39.1963H19.677V42H22.4968V39.1963Z" fill="#5DD5A2"/>
<path d="M25.3166 39.1963H22.4968V42H25.3166V39.1963Z" fill="#5DD5A2"/>
<path d="M28.1364 39.1963H25.3167V42H28.1364V39.1963Z" fill="#5DD5A2"/>
<path d="M30.9575 39.1963H28.1377V42H30.9575V39.1963Z" fill="#5DD5A2"/>
<path d="M33.7773 39.1963H30.9575V42H33.7773V39.1963Z" fill="#5DD5A2"/>
<path d="M36.5971 39.1963H33.7773V42H36.5971V39.1963Z" fill="#5DD5A2"/>
<path d="M39.4182 39.1963H36.5984V42H39.4182V39.1963Z" fill="#5DD5A2"/>
<path d="M42.2377 39.1963H39.418V42H42.2377V39.1963Z" fill="#5DD5A2"/>
<path d="M45.0576 39.1963H42.2378V42H45.0576V39.1963Z" fill="#5DD5A2"/>
<path d="M47.8774 39.1963H45.0576V42H47.8774V39.1963Z" fill="#5DD5A2"/>
<path d="M50.6984 39.1963H47.8787V42H50.6984V39.1963Z" fill="#5DD5A2"/>
<path d="M53.5183 39.1963H50.6985V42H53.5183V39.1963Z" fill="#5DD5A2"/>
<path d="M56.3378 39.1963H53.5181V42H56.3378V39.1963Z" fill="#5DD5A2"/>
<path d="M59.1577 39.1963H56.3379V42H59.1577V39.1963Z" fill="#5DD5A2"/>
<path d="M61.9787 39.1963H59.1589V42H61.9787V39.1963Z" fill="#5DD5A2"/>
<path d="M64.7985 39.1963H61.9788V42H64.7985V39.1963Z" fill="#5DD5A2"/>
<path d="M67.6184 39.1963H64.7986V42H67.6184V39.1963Z" fill="#5DD5A2"/>
<path d="M70.4394 39.1963H67.6196V42H70.4394V39.1963Z" fill="#5DD5A2"/>
<path d="M73.259 39.1963H70.4392V42H73.259V39.1963Z" fill="#5DD5A2"/>
<path d="M76.0788 39.1963H73.259V42H76.0788V39.1963Z" fill="#5DD5A2"/>
<path d="M78.8986 39.1963H76.0789V42H78.8986V39.1963Z" fill="#5DD5A2"/>
<path d="M81.7197 39.1963H78.8999V42H81.7197V39.1963Z" fill="#5DD5A2"/>
<path d="M84.5395 39.1963H81.7197V42H84.5395V39.1963Z" fill="#5DD5A2"/>
<path d="M87.3593 39.1963H84.5396V42H87.3593V39.1963Z" fill="#5DD5A2"/>
<path d="M90.1791 39.1963H87.3594V42H90.1791V39.1963Z" fill="#5DD5A2"/>
<path d="M92.9999 39.1963H90.1802V42H92.9999V39.1963Z" fill="#5DD5A2"/>
<path d="M95.8198 39.1963H93V42H95.8198V39.1963Z" fill="#5DD5A2"/>
<path d="M98.6396 39.1963H95.8198V42H98.6396V39.1963Z" fill="#5DD5A2"/>
<path d="M101.461 39.1963H98.6409V42H101.461V39.1963Z" fill="#5DD5A2"/>
<path d="M104.28 39.1963H101.461V42H104.28V39.1963Z" fill="#5DD5A2"/>
<path d="M107.1 39.1963H104.281V42H107.1V39.1963Z" fill="#5DD5A2"/>
<path d="M109.92 39.1963H107.1V42H109.92V39.1963Z" fill="#5DD5A2"/>
<path d="M112.741 39.1963H109.921V42H112.741V39.1963Z" fill="#5DD5A2"/>
<path d="M115.561 39.1963H112.741V42H115.561V39.1963Z" fill="#5DD5A2"/>
<path d="M118.381 39.1963H115.561V42H118.381V39.1963Z" fill="#5DD5A2"/>
<path d="M121.2 39.1963H118.381V42H121.2V39.1963Z" fill="#5DD5A2"/>
<path d="M124.021 39.1963H121.202V42H124.021V39.1963Z" fill="#5DD5A2"/>
<path d="M126.841 39.1963H124.021V42H126.841V39.1963Z" fill="#5DD5A2"/>
<path d="M129.661 39.1963H126.841V42H129.661V39.1963Z" fill="#5DD5A2"/>
<path d="M132.482 39.1963H129.662V42H132.482V39.1963Z" fill="#5DD5A2"/>
<path d="M135.302 39.1963H132.482V42H135.302V39.1963Z" fill="#5DD5A2"/>
<path d="M138.122 39.1963H135.302V42H138.122V39.1963Z" fill="#5DD5A2"/>
<path d="M140.941 39.1963H138.122V42H140.941V39.1963Z" fill="#5DD5A2"/>
<path d="M143.762 39.1963H140.943V42H143.762V39.1963Z" fill="#5DD5A2"/>
<path d="M146.582 39.1963H143.762V42H146.582V39.1963Z" fill="#5DD5A2"/>
<path d="M149.402 39.1963H146.582V42H149.402V39.1963Z" fill="#5DD5A2"/>
<path d="M152.222 39.1963H149.402V42H152.222V39.1963Z" fill="#5DD5A2"/>
<path d="M155.043 39.1963H152.223V42H155.043V39.1963Z" fill="#5DD5A2"/>
<path d="M157.863 39.1963H155.043V42H157.863V39.1963Z" fill="#5DD5A2"/>
<path d="M160.682 39.1963H157.862V42H160.682V39.1963Z" fill="#5DD5A2"/>
<path d="M163.503 39.1963H160.684V42H163.503V39.1963Z" fill="#5DD5A2"/>
<path d="M166.323 39.1963H163.503V42H166.323V39.1963Z" fill="#5DD5A2"/>
<path d="M169.143 39.1963H166.323V42H169.143V39.1963Z" fill="#5DD5A2"/>
<path d="M171.963 39.1963H169.143V42H171.963V39.1963Z" fill="#5DD5A2"/>
<path d="M16.8561 0H14.0364V2.80373H16.8561V0Z" fill="#5DD5A2"/>
<path d="M19.6772 0H16.8574V2.80373H19.6772V0Z" fill="#5DD5A2"/>
<path d="M22.4968 0H19.677V2.80373H22.4968V0Z" fill="#5DD5A2"/>
<path d="M25.3166 0H22.4968V2.80373H25.3166V0Z" fill="#5DD5A2"/>
<path d="M28.1364 0H25.3167V2.80373H28.1364V0Z" fill="#5DD5A2"/>
<path d="M30.9575 0H28.1377V2.80373H30.9575V0Z" fill="#5DD5A2"/>
<path d="M33.7773 0H30.9575V2.80373H33.7773V0Z" fill="#5DD5A2"/>
<path d="M36.5971 0H33.7773V2.80373H36.5971V0Z" fill="#5DD5A2"/>
<path d="M39.4182 0H36.5984V2.80373H39.4182V0Z" fill="#5DD5A2"/>
<path d="M42.2377 0H39.418V2.80373H42.2377V0Z" fill="#5DD5A2"/>
<path d="M45.0576 0H42.2378V2.80373H45.0576V0Z" fill="#5DD5A2"/>
<path d="M47.8774 0H45.0576V2.80373H47.8774V0Z" fill="#5DD5A2"/>
<path d="M50.6984 0H47.8787V2.80373H50.6984V0Z" fill="#5DD5A2"/>
<path d="M53.5183 0H50.6985V2.80373H53.5183V0Z" fill="#5DD5A2"/>
<path d="M56.3378 0H53.5181V2.80373H56.3378V0Z" fill="#5DD5A2"/>
<path d="M59.1577 0H56.3379V2.80373H59.1577V0Z" fill="#5DD5A2"/>
<path d="M61.9787 0H59.1589V2.80373H61.9787V0Z" fill="#5DD5A2"/>
<path d="M64.7985 0H61.9788V2.80373H64.7985V0Z" fill="#5DD5A2"/>
<path d="M67.6184 0H64.7986V2.80373H67.6184V0Z" fill="#5DD5A2"/>
<path d="M70.4394 0H67.6196V2.80373H70.4394V0Z" fill="#5DD5A2"/>
<path d="M73.259 0H70.4392V2.80373H73.259V0Z" fill="#5DD5A2"/>
<path d="M76.0788 0H73.259V2.80373H76.0788V0Z" fill="#5DD5A2"/>
<path d="M78.8986 0H76.0789V2.80373H78.8986V0Z" fill="#5DD5A2"/>
<path d="M81.7197 0H78.8999V2.80373H81.7197V0Z" fill="#5DD5A2"/>
<path d="M84.5395 0H81.7197V2.80373H84.5395V0Z" fill="#5DD5A2"/>
<path d="M87.3593 0H84.5396V2.80373H87.3593V0Z" fill="#5DD5A2"/>
<path d="M90.1791 0H87.3594V2.80373H90.1791V0Z" fill="#5DD5A2"/>
<path d="M92.9999 0H90.1802V2.80373H92.9999V0Z" fill="#5DD5A2"/>
<path d="M95.8198 0H93V2.80373H95.8198V0Z" fill="#5DD5A2"/>
<path d="M98.6396 0H95.8198V2.80373H98.6396V0Z" fill="#5DD5A2"/>
<path d="M101.461 0H98.6409V2.80373H101.461V0Z" fill="#5DD5A2"/>
<path d="M104.28 0H101.461V2.80373H104.28V0Z" fill="#5DD5A2"/>
<path d="M107.1 0H104.281V2.80373H107.1V0Z" fill="#5DD5A2"/>
<path d="M109.92 0H107.1V2.80373H109.92V0Z" fill="#5DD5A2"/>
<path d="M112.741 0H109.921V2.80373H112.741V0Z" fill="#5DD5A2"/>
<path d="M115.561 0H112.741V2.80373H115.561V0Z" fill="#5DD5A2"/>
<path d="M118.381 0H115.561V2.80373H118.381V0Z" fill="#5DD5A2"/>
<path d="M121.2 0H118.381V2.80373H121.2V0Z" fill="#5DD5A2"/>
<path d="M124.021 0H121.202V2.80373H124.021V0Z" fill="#5DD5A2"/>
<path d="M126.841 0H124.021V2.80373H126.841V0Z" fill="#5DD5A2"/>
<path d="M129.661 0H126.841V2.80373H129.661V0Z" fill="#5DD5A2"/>
<path d="M132.482 0H129.662V2.80373H132.482V0Z" fill="#5DD5A2"/>
<path d="M135.302 0H132.482V2.80373H135.302V0Z" fill="#5DD5A2"/>
<path d="M138.122 0H135.302V2.80373H138.122V0Z" fill="#5DD5A2"/>
<path d="M140.941 0H138.122V2.80373H140.941V0Z" fill="#5DD5A2"/>
<path d="M143.762 0H140.943V2.80373H143.762V0Z" fill="#5DD5A2"/>
<path d="M146.582 0H143.762V2.80373H146.582V0Z" fill="#5DD5A2"/>
<path d="M149.402 0H146.582V2.80373H149.402V0Z" fill="#5DD5A2"/>
<path d="M152.222 0H149.402V2.80373H152.222V0Z" fill="#5DD5A2"/>
<path d="M155.043 0H152.223V2.80373H155.043V0Z" fill="#5DD5A2"/>
<path d="M157.863 0H155.043V2.80373H157.863V0Z" fill="#5DD5A2"/>
<path d="M160.682 0H157.862V2.80373H160.682V0Z" fill="#5DD5A2"/>
<path d="M163.503 0H160.684V2.80373H163.503V0Z" fill="#5DD5A2"/>
<path d="M166.323 0H163.503V2.80373H166.323V0Z" fill="#5DD5A2"/>
<path d="M169.143 0H166.323V2.80373H169.143V0Z" fill="#5DD5A2"/>
<path d="M171.963 0H169.143V2.80373H171.963V0Z" fill="#5DD5A2"/>
<path d="M11.2165 36.39H8.39673V39.1937H11.2165V36.39Z" fill="#5DD5A2"/>
<path d="M8.42866 33.5851H5.60889V36.3888H8.42866V33.5851Z" fill="#5DD5A2"/>
<path d="M5.63959 30.7788H2.81982V33.5825H5.63959V30.7788Z" fill="#5DD5A2"/>
<path d="M2.81977 27.9902H0V30.794H2.81977V27.9902Z" fill="#5DD5A2"/>
<path d="M2.81977 25.1992H0V28.0029H2.81977V25.1992Z" fill="#5DD5A2"/>
<path d="M2.81977 22.407H0V25.2107H2.81977V22.407Z" fill="#5DD5A2"/>
<path d="M174.784 0.00634766H171.964V2.81008H174.784V0.00634766Z" fill="#5DD5A2"/>
<path d="M177.602 2.81262H174.782V5.61635H177.602V2.81262Z" fill="#5DD5A2"/>
<path d="M180.391 5.61768H177.572V8.4214H180.391V5.61768Z" fill="#5DD5A2"/>
<path d="M183.179 8.42395H180.359V11.2277H183.179V8.42395Z" fill="#5DD5A2"/>
<path d="M186 11.2277H183.18V14.0314H186V11.2277Z" fill="#5DD5A2"/>
<path d="M186 14.0187H183.18V16.8224H186V14.0187Z" fill="#5DD5A2"/>
<path d="M186 16.8097H183.18V19.6134H186V16.8097Z" fill="#5DD5A2"/>
<path d="M186 19.6019H183.18V22.4057H186V19.6019Z" fill="#5DD5A2"/>
<path d="M174.784 39.1963H171.964V42H174.784V39.1963Z" fill="#5DD5A2"/>
<path d="M177.602 36.39H174.782V39.1937H177.602V36.39Z" fill="#5DD5A2"/>
<path d="M180.391 33.5851H177.572V36.3888H180.391V33.5851Z" fill="#5DD5A2"/>
<path d="M183.179 30.7788H180.359V33.5825H183.179V30.7788Z" fill="#5DD5A2"/>
<path d="M186 27.9902H183.18V30.794H186V27.9902Z" fill="#5DD5A2"/>
<path d="M186 25.1992H183.18V28.0029H186V25.1992Z" fill="#5DD5A2"/>
<path d="M186 22.407H183.18V25.2107H186V22.407Z" fill="#5DD5A2"/>
</svg>

Before

Width:  |  Height:  |  Size: 9.7 KiB

-152
View File
@@ -1,152 +0,0 @@
<svg width="333" height="54" viewBox="0 0 333 54" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M14.4229 3.61621H318.203V7.221L321.789 7.22264V10.8291L325.373 10.8307V14.4355H329V39.5922L325.373 39.5726V43.1774H321.789V46.7855H318.203V50.3919L14.4229 50.3919V46.7871H10.8369V43.1807H7.25255V39.5726H3.62549V14.4355H7.25255V10.8307H10.8369V7.22264H14.4229V3.61621Z" fill="#006758"/>
<path d="M18.0468 0.00805664H14.4214V3.61285H18.0468V0.00805664Z" fill="#05A38C"/>
<path d="M14.4213 3.61621H10.7959V7.221H14.4213V3.61621Z" fill="#05A38C"/>
<path d="M10.8368 7.22266H7.21143V10.8274H10.8368V7.22266Z" fill="#05A38C"/>
<path d="M7.25091 10.8308H3.62549V14.4356H7.25091V10.8308Z" fill="#05A38C"/>
<path d="M3.62542 14.4355H0V18.0403H3.62542V14.4355Z" fill="#05A38C"/>
<path d="M3.62542 18.0239H0V21.6287H3.62542V18.0239Z" fill="#05A38C"/>
<path d="M3.62542 21.6125H0V25.2173H3.62542V21.6125Z" fill="#05A38C"/>
<path d="M3.62542 25.2024H0V28.8072H3.62542V25.2024Z" fill="#05A38C"/>
<path d="M18.0468 50.3953H14.4214V54.0001H18.0468V50.3953Z" fill="#05A38C"/>
<path d="M21.6723 50.3953H18.0469V54.0001H21.6723V50.3953Z" fill="#05A38C"/>
<path d="M25.2992 50.3953H21.6738V54.0001H25.2992V50.3953Z" fill="#05A38C"/>
<path d="M28.9247 50.3953H25.2993V54.0001H28.9247V50.3953Z" fill="#05A38C"/>
<path d="M32.5502 50.3953H28.9248V54.0001H32.5502V50.3953Z" fill="#05A38C"/>
<path d="M36.1757 50.3953H32.5503V54.0001H36.1757V50.3953Z" fill="#05A38C"/>
<path d="M39.8027 50.3953H36.1772V54.0001H39.8027V50.3953Z" fill="#05A38C"/>
<path d="M43.4282 50.3953H39.8027V54.0001H43.4282V50.3953Z" fill="#05A38C"/>
<path d="M47.0536 50.3953H43.4282V54.0001H47.0536V50.3953Z" fill="#05A38C"/>
<path d="M50.6806 50.3953H47.0552V54.0001H50.6806V50.3953Z" fill="#05A38C"/>
<path d="M54.3058 50.3953H50.6804V54.0001H54.3058V50.3953Z" fill="#05A38C"/>
<path d="M57.9313 50.3953H54.3059V54.0001H57.9313V50.3953Z" fill="#05A38C"/>
<path d="M61.5568 50.3953H57.9314V54.0001H61.5568V50.3953Z" fill="#05A38C"/>
<path d="M65.1838 50.3953H61.5583V54.0001H65.1838V50.3953Z" fill="#05A38C"/>
<path d="M68.8093 50.3953H65.1838V54.0001H68.8093V50.3953Z" fill="#05A38C"/>
<path d="M72.4345 50.3953H68.8091V54.0001H72.4345V50.3953Z" fill="#05A38C"/>
<path d="M76.06 50.3953H72.4346V54.0001H76.06V50.3953Z" fill="#05A38C"/>
<path d="M79.6869 50.3953H76.0615V54.0001H79.6869V50.3953Z" fill="#05A38C"/>
<path d="M83.3124 50.3953H79.687V54.0001H83.3124V50.3953Z" fill="#05A38C"/>
<path d="M86.9379 50.3953H83.3125V54.0001H86.9379V50.3953Z" fill="#05A38C"/>
<path d="M90.5649 50.3953H86.9395V54.0001H90.5649V50.3953Z" fill="#05A38C"/>
<path d="M94.1904 50.3953H90.5649V54.0001H94.1904V50.3953Z" fill="#05A38C"/>
<path d="M97.8158 50.3953H94.1904V54.0001H97.8158V50.3953Z" fill="#05A38C"/>
<path d="M101.441 50.3953H97.8159V54.0001H101.441V50.3953Z" fill="#05A38C"/>
<path d="M105.068 50.3953H101.443V54.0001H105.068V50.3953Z" fill="#05A38C"/>
<path d="M108.694 50.3953H105.068V54.0001H108.694V50.3953Z" fill="#05A38C"/>
<path d="M112.319 50.3953H108.694V54.0001H112.319V50.3953Z" fill="#05A38C"/>
<path d="M115.945 50.3953H112.319V54.0001H115.945V50.3953Z" fill="#05A38C"/>
<path d="M119.571 50.3953H115.946V54.0001H119.571V50.3953Z" fill="#05A38C"/>
<path d="M123.197 50.3953H119.572V54.0001H123.197V50.3953Z" fill="#05A38C"/>
<path d="M126.822 50.3953H123.197V54.0001H126.822V50.3953Z" fill="#05A38C"/>
<path d="M130.449 50.3953H126.824V54.0001H130.449V50.3953Z" fill="#05A38C"/>
<path d="M134.075 50.3953H130.449V54.0001H134.075V50.3953Z" fill="#05A38C"/>
<path d="M137.7 50.3953H134.075V54.0001H137.7V50.3953Z" fill="#05A38C"/>
<path d="M141.326 50.3953H137.7V54.0001H141.326V50.3953Z" fill="#05A38C"/>
<path d="M144.953 50.3953H141.327V54.0001H144.953V50.3953Z" fill="#05A38C"/>
<path d="M148.578 50.3953H144.953V54.0001H148.578V50.3953Z" fill="#05A38C"/>
<path d="M152.204 50.3953H148.578V54.0001H152.204V50.3953Z" fill="#05A38C"/>
<path d="M155.829 50.3953H152.204V54.0001H155.829V50.3953Z" fill="#05A38C"/>
<path d="M159.456 50.3953H155.831V54.0001H159.456V50.3953Z" fill="#05A38C"/>
<path d="M163.081 50.3953H159.456V54.0001H163.081V50.3953Z" fill="#05A38C"/>
<path d="M166.707 50.3953H163.082V54.0001H166.707V50.3953Z" fill="#05A38C"/>
<path d="M170.334 50.3953H166.708V54.0001H170.334V50.3953Z" fill="#05A38C"/>
<path d="M173.959 50.3953H170.334V54.0001H173.959V50.3953Z" fill="#05A38C"/>
<path d="M177.585 50.3953H173.959V54.0001H177.585V50.3953Z" fill="#05A38C"/>
<path d="M181.21 50.3953H177.585V54.0001H181.21V50.3953Z" fill="#05A38C"/>
<path d="M184.838 50.3953H181.212V54.0001H184.838V50.3953Z" fill="#05A38C"/>
<path d="M188.463 50.3953H184.837V54.0001H188.463V50.3953Z" fill="#05A38C"/>
<path d="M192.088 50.3953H188.463V54.0001H192.088V50.3953Z" fill="#05A38C"/>
<path d="M195.714 50.3953H192.088V54.0001H195.714V50.3953Z" fill="#05A38C"/>
<path d="M199.341 50.3953H195.715V54.0001H199.341V50.3953Z" fill="#05A38C"/>
<path d="M202.966 50.3953H199.341V54.0001H202.966V50.3953Z" fill="#05A38C"/>
<path d="M206.591 50.3953H202.966V54.0001H206.591V50.3953Z" fill="#05A38C"/>
<path d="M210.219 50.3953H206.593V54.0001H210.219V50.3953Z" fill="#05A38C"/>
<path d="M213.844 50.3953H210.219V54.0001H213.844V50.3953Z" fill="#05A38C"/>
<path d="M217.47 50.3953H213.844V54.0001H217.47V50.3953Z" fill="#05A38C"/>
<path d="M221.095 50.3953H217.47V54.0001H221.095V50.3953Z" fill="#05A38C"/>
<path d="M21.6723 0H18.0469V3.60479H21.6723V0Z" fill="#05A38C"/>
<path d="M25.2992 0H21.6738V3.60479H25.2992V0Z" fill="#05A38C"/>
<path d="M28.9247 0H25.2993V3.60479H28.9247V0Z" fill="#05A38C"/>
<path d="M32.5502 0H28.9248V3.60479H32.5502V0Z" fill="#05A38C"/>
<path d="M36.1757 0H32.5503V3.60479H36.1757V0Z" fill="#05A38C"/>
<path d="M39.8027 0H36.1772V3.60479H39.8027V0Z" fill="#05A38C"/>
<path d="M43.4282 0H39.8027V3.60479H43.4282V0Z" fill="#05A38C"/>
<path d="M47.0536 0H43.4282V3.60479H47.0536V0Z" fill="#05A38C"/>
<path d="M50.6806 0H47.0552V3.60479H50.6806V0Z" fill="#05A38C"/>
<path d="M54.3058 0H50.6804V3.60479H54.3058V0Z" fill="#05A38C"/>
<path d="M57.9313 0H54.3059V3.60479H57.9313V0Z" fill="#05A38C"/>
<path d="M61.5568 0H57.9314V3.60479H61.5568V0Z" fill="#05A38C"/>
<path d="M65.1838 0H61.5583V3.60479H65.1838V0Z" fill="#05A38C"/>
<path d="M68.8093 0H65.1838V3.60479H68.8093V0Z" fill="#05A38C"/>
<path d="M72.4345 0H68.8091V3.60479H72.4345V0Z" fill="#05A38C"/>
<path d="M76.06 0H72.4346V3.60479H76.06V0Z" fill="#05A38C"/>
<path d="M79.6869 0H76.0615V3.60479H79.6869V0Z" fill="#05A38C"/>
<path d="M83.3124 0H79.687V3.60479H83.3124V0Z" fill="#05A38C"/>
<path d="M86.9379 0H83.3125V3.60479H86.9379V0Z" fill="#05A38C"/>
<path d="M90.5649 0H86.9395V3.60479H90.5649V0Z" fill="#05A38C"/>
<path d="M94.1904 0H90.5649V3.60479H94.1904V0Z" fill="#05A38C"/>
<path d="M97.8158 0H94.1904V3.60479H97.8158V0Z" fill="#05A38C"/>
<path d="M101.441 0H97.8159V3.60479H101.441V0Z" fill="#05A38C"/>
<path d="M105.068 0H101.443V3.60479H105.068V0Z" fill="#05A38C"/>
<path d="M108.694 0H105.068V3.60479H108.694V0Z" fill="#05A38C"/>
<path d="M112.319 0H108.694V3.60479H112.319V0Z" fill="#05A38C"/>
<path d="M115.945 0H112.319V3.60479H115.945V0Z" fill="#05A38C"/>
<path d="M119.571 0H115.946V3.60479H119.571V0Z" fill="#05A38C"/>
<path d="M123.197 0H119.572V3.60479H123.197V0Z" fill="#05A38C"/>
<path d="M126.822 0H123.197V3.60479H126.822V0Z" fill="#05A38C"/>
<path d="M130.449 0H126.824V3.60479H130.449V0Z" fill="#05A38C"/>
<path d="M134.075 0H130.449V3.60479H134.075V0Z" fill="#05A38C"/>
<path d="M137.7 0H134.075V3.60479H137.7V0Z" fill="#05A38C"/>
<path d="M141.326 0H137.7V3.60479H141.326V0Z" fill="#05A38C"/>
<path d="M144.953 0H141.327V3.60479H144.953V0Z" fill="#05A38C"/>
<path d="M148.578 0H144.953V3.60479H148.578V0Z" fill="#05A38C"/>
<path d="M152.204 0H148.578V3.60479H152.204V0Z" fill="#05A38C"/>
<path d="M155.829 0H152.204V3.60479H155.829V0Z" fill="#05A38C"/>
<path d="M159.456 0H155.831V3.60479H159.456V0Z" fill="#05A38C"/>
<path d="M163.081 0H159.456V3.60479H163.081V0Z" fill="#05A38C"/>
<path d="M166.707 0H163.082V3.60479H166.707V0Z" fill="#05A38C"/>
<path d="M170.334 0H166.708V3.60479H170.334V0Z" fill="#05A38C"/>
<path d="M173.959 0H170.334V3.60479H173.959V0Z" fill="#05A38C"/>
<path d="M177.585 0H173.959V3.60479H177.585V0Z" fill="#05A38C"/>
<path d="M181.21 0H177.585V3.60479H181.21V0Z" fill="#05A38C"/>
<path d="M184.838 0H181.212V3.60479H184.838V0Z" fill="#05A38C"/>
<path d="M188.463 0H184.837V3.60479H188.463V0Z" fill="#05A38C"/>
<path d="M192.088 0H188.463V3.60479H192.088V0Z" fill="#05A38C"/>
<path d="M195.714 0H192.088V3.60479H195.714V0Z" fill="#05A38C"/>
<path d="M199.341 0H195.715V3.60479H199.341V0Z" fill="#05A38C"/>
<path d="M202.966 0H199.341V3.60479H202.966V0Z" fill="#05A38C"/>
<path d="M206.591 0H202.966V3.60479H206.591V0Z" fill="#05A38C"/>
<path d="M210.219 0H206.593V3.60479H210.219V0Z" fill="#05A38C"/>
<path d="M213.844 0H210.219V3.60479H213.844V0Z" fill="#05A38C"/>
<path d="M217.47 0H213.844V3.60479H217.47V0Z" fill="#05A38C"/>
<path d="M221.095 0H217.47V3.60479H221.095V0Z" fill="#05A38C"/>
<path d="M14.4213 46.7871H10.7959V50.3919H14.4213V46.7871Z" fill="#05A38C"/>
<path d="M10.8368 43.1809H7.21143V46.7857H10.8368V43.1809Z" fill="#05A38C"/>
<path d="M7.25091 39.5728H3.62549V43.1775H7.25091V39.5728Z" fill="#05A38C"/>
<path d="M3.62542 35.9873H0V39.5921H3.62542V35.9873Z" fill="#05A38C"/>
<path d="M3.62542 32.3989H0V36.0037H3.62542V32.3989Z" fill="#05A38C"/>
<path d="M3.62542 28.8091H0V32.4139H3.62542V28.8091Z" fill="#05A38C"/>
<path d="M318 0H221V4H318V0Z" fill="#05A38C"/>
<path d="M321.625 3.61621H318V7.221H321.625V3.61621Z" fill="#05A38C"/>
<path d="M325.212 7.22266H321.586V10.8274H325.212V7.22266Z" fill="#05A38C"/>
<path d="M328.796 10.8308H325.17V14.4356H328.796V10.8308Z" fill="#05A38C"/>
<path d="M332.423 14.4355H328.797V18.0403H332.423V14.4355Z" fill="#05A38C"/>
<path d="M332.423 18.0239H328.797V21.6287H332.423V18.0239Z" fill="#05A38C"/>
<path d="M332.423 21.6125H328.797V25.2173H332.423V21.6125Z" fill="#05A38C"/>
<path d="M332.423 25.2024H328.797V28.8072H332.423V25.2024Z" fill="#05A38C"/>
<path d="M318 50H221V54H318V50Z" fill="#05A38C"/>
<path d="M321.625 46.7871H318V50.3919H321.625V46.7871Z" fill="#05A38C"/>
<path d="M325.212 43.1809H321.586V46.7857H325.212V43.1809Z" fill="#05A38C"/>
<path d="M328.796 39.5728H325.17V43.1775H328.796V39.5728Z" fill="#05A38C"/>
<path d="M332.423 35.9873H328.797V39.5921H332.423V35.9873Z" fill="#05A38C"/>
<path d="M332.423 32.3989H328.797V36.0037H332.423V32.3989Z" fill="#05A38C"/>
<path d="M332.423 28.8091H328.797V32.4139H332.423V28.8091Z" fill="#05A38C"/>
<path d="M14.4213 14.4373H10.7959V18.042H14.4213V14.4373Z" fill="#E6F4E6"/>
<path d="M10.8058 18.0337H7.18042V21.6385H10.8058V18.0337Z" fill="#E6F4E6"/>
<path d="M10.8058 21.6289H7.18042V25.2337H10.8058V21.6289Z" fill="#E6F4E6"/>
<path d="M18.0468 10.8291H14.4214V14.4339H18.0468V10.8291Z" fill="#E6F4E6"/>
<path d="M21.6723 7.22266H18.0469V10.8274H21.6723V7.22266Z" fill="#E6F4E6"/>
<path d="M25.2992 7.22266H21.6738V10.8274H25.2992V7.22266Z" fill="#E6F4E6"/>
<path d="M28.9247 7.22266H25.2993V10.8274H28.9247V7.22266Z" fill="#E6F4E6"/>
</svg>

Before

Width:  |  Height:  |  Size: 11 KiB

-57
View File
@@ -1,57 +0,0 @@
<svg width="55" height="37" viewBox="0 0 55 37" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M9.88227 2.47782L44.9284 2.47787V4.94781L47.3854 4.94893V7.42L49.8414 7.42112V9.89106H52.3266V27.128L49.8414 27.1146V29.5846H47.3854V32.0567H44.9284V34.5278L9.88227 34.5278V32.0578H7.42522V29.5867H4.96929V27.1146H2.48409V9.89101H4.96929V7.42107H7.42522V4.94889H9.88227V2.47782Z" fill="#05A38C"/>
<path d="M12.3653 0.00565208H9.88119V2.4756H12.3653V0.00565208Z" fill="#5DD5A2"/>
<path d="M9.88118 2.47782H7.3971V4.94777H9.88118V2.47782Z" fill="#5DD5A2"/>
<path d="M7.42522 4.94877H4.94115V7.41871H7.42522V4.94877Z" fill="#5DD5A2"/>
<path d="M4.96817 7.42094H2.48409V9.89088H4.96817V7.42094Z" fill="#5DD5A2"/>
<path d="M2.48408 9.8909H0V12.3608H2.48408V9.8909Z" fill="#5DD5A2"/>
<path d="M2.48408 12.3498H0V14.8197H2.48408V12.3498Z" fill="#5DD5A2"/>
<path d="M2.48408 14.8085H0V17.2784H2.48408V14.8085Z" fill="#5DD5A2"/>
<path d="M2.48408 17.2683H0V19.7383H2.48408V17.2683Z" fill="#5DD5A2"/>
<path d="M12.3653 34.53H9.88119V37H12.3653V34.53Z" fill="#5DD5A2"/>
<path d="M14.8494 34.53H12.3653V37H14.8494V34.53Z" fill="#5DD5A2"/>
<path d="M17.3344 34.53H14.8504V37H17.3344V34.53Z" fill="#5DD5A2"/>
<path d="M19.8185 34.53H17.3344V37H19.8185V34.53Z" fill="#5DD5A2"/>
<path d="M22.3027 34.53H19.8187V37H22.3027V34.53Z" fill="#5DD5A2"/>
<path d="M24.7867 34.53H22.3026V37H24.7867V34.53Z" fill="#5DD5A2"/>
<path d="M27.2719 34.53H24.7878V37H27.2719V34.53Z" fill="#5DD5A2"/>
<path d="M29.756 34.53H27.2719V37H29.756V34.53Z" fill="#5DD5A2"/>
<path d="M32.2401 34.53H29.756V37H32.2401V34.53Z" fill="#5DD5A2"/>
<path d="M34.7254 34.53H32.2413V37H34.7254V34.53Z" fill="#5DD5A2"/>
<path d="M37.2094 34.53H34.7253V37H37.2094V34.53Z" fill="#5DD5A2"/>
<path d="M39.6934 34.53H37.2094V37H39.6934V34.53Z" fill="#5DD5A2"/>
<path d="M42.1775 34.53H39.6935V37H42.1775V34.53Z" fill="#5DD5A2"/>
<path d="M44.9285 34.53H42.1787V37H44.9285V34.53Z" fill="#5DD5A2"/>
<path d="M14.8494 0H12.3653V2.46994H14.8494V0Z" fill="#5DD5A2"/>
<path d="M17.3344 0H14.8504V2.46994H17.3344V0Z" fill="#5DD5A2"/>
<path d="M19.8185 0H17.3344V2.46994H19.8185V0Z" fill="#5DD5A2"/>
<path d="M22.3027 0H19.8187V2.46994H22.3027V0Z" fill="#5DD5A2"/>
<path d="M24.7867 0H22.3026V2.46994H24.7867V0Z" fill="#5DD5A2"/>
<path d="M27.2719 0H24.7878V2.46994H27.2719V0Z" fill="#5DD5A2"/>
<path d="M29.756 0H27.2719V2.46994H29.756V0Z" fill="#5DD5A2"/>
<path d="M32.2401 0H29.756V2.46994H32.2401V0Z" fill="#5DD5A2"/>
<path d="M34.7254 0H32.2413V2.46994H34.7254V0Z" fill="#5DD5A2"/>
<path d="M37.2094 0H34.7253V2.46994H37.2094V0Z" fill="#5DD5A2"/>
<path d="M39.6934 0H37.2094V2.46994H39.6934V0Z" fill="#5DD5A2"/>
<path d="M42.1775 0H39.6935V2.46994H42.1775V0Z" fill="#5DD5A2"/>
<path d="M44.9285 0H42.1787V2.46994H44.9285V0Z" fill="#5DD5A2"/>
<path d="M9.88118 32.0579H7.3971V34.5278H9.88118V32.0579Z" fill="#5DD5A2"/>
<path d="M7.42522 29.5867H4.94115V32.0566H7.42522V29.5867Z" fill="#5DD5A2"/>
<path d="M4.96817 27.1145H2.48409V29.5845H4.96817V27.1145Z" fill="#5DD5A2"/>
<path d="M2.48408 24.6581H0V27.128H2.48408V24.6581Z" fill="#5DD5A2"/>
<path d="M2.48408 22.1992H0V24.6691H2.48408V22.1992Z" fill="#5DD5A2"/>
<path d="M2.48408 19.7393H0V22.2092H2.48408V19.7393Z" fill="#5DD5A2"/>
<path d="M47.4125 2.47782H44.9284V4.94777H47.4125V2.47782Z" fill="#5DD5A2"/>
<path d="M49.8697 4.94877H47.3856V7.41871H49.8697V4.94877Z" fill="#5DD5A2"/>
<path d="M52.3255 7.42094H49.8414V9.89088H52.3255V7.42094Z" fill="#5DD5A2"/>
<path d="M54.8107 9.8909H52.3266V12.3608H54.8107V9.8909Z" fill="#5DD5A2"/>
<path d="M54.8107 12.3498H52.3266V14.8197H54.8107V12.3498Z" fill="#5DD5A2"/>
<path d="M54.8107 14.8085H52.3266V17.2784H54.8107V14.8085Z" fill="#5DD5A2"/>
<path d="M54.8107 17.2683H52.3266V19.7383H54.8107V17.2683Z" fill="#5DD5A2"/>
<path d="M47.4125 32.0579H44.9284V34.5278H47.4125V32.0579Z" fill="#5DD5A2"/>
<path d="M49.8697 29.5867H47.3856V32.0566H49.8697V29.5867Z" fill="#5DD5A2"/>
<path d="M52.3255 27.1145H49.8414V29.5845H52.3255V27.1145Z" fill="#5DD5A2"/>
<path d="M54.8107 24.6581H52.3266V27.128H54.8107V24.6581Z" fill="#5DD5A2"/>
<path d="M54.8107 22.1992H52.3266V24.6691H54.8107V22.1992Z" fill="#5DD5A2"/>
<path d="M54.8107 19.7393H52.3266V22.2092H54.8107V19.7393Z" fill="#5DD5A2"/>
</svg>

Before

Width:  |  Height:  |  Size: 4.1 KiB

-15
View File
@@ -1,15 +0,0 @@
<svg width="113" height="50" viewBox="0 0 113 50" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M94.9637 32.7339H96.1148V33.885H94.9637V32.7339ZM96.1148 32.7339H97.2659V33.885H96.1148V32.7339ZM96.1148 33.885H97.2659V35.036H96.1148V33.885ZM96.1148 35.036H97.2659V36.1871H96.1148V35.036ZM96.1148 36.1871H97.2659V37.3382H96.1148V36.1871ZM96.1148 37.3382H97.2659V38.4893H96.1148V37.3382ZM97.2659 36.1871H98.417V37.3382H97.2659V36.1871ZM97.2659 35.036H98.417V36.1871H97.2659V35.036ZM97.2659 33.885H98.417V35.036H97.2659V33.885ZM97.2659 32.7339H98.417V33.885H97.2659V32.7339ZM94.9637 35.036H96.1148V36.1871H94.9637V35.036ZM94.9637 33.885H96.1148V35.036H94.9637V33.885ZM94.9637 36.1871H96.1148V37.3382H94.9637V36.1871ZM94.9637 37.3382H96.1148V38.4893H94.9637V37.3382ZM94.9637 38.4893H96.1148V39.6403H94.9637V38.4893ZM94.9637 39.6403H96.1148V40.7914H94.9637V39.6403ZM94.9637 40.7914H96.1148V41.9425H94.9637V40.7914ZM94.9637 41.9425H96.1148V43.0936H94.9637V41.9425ZM94.9637 43.0936H96.1148V44.2446H94.9637V43.0936ZM94.9637 44.2446H96.1148V45.3957H94.9637V44.2446ZM94.9637 45.3957H96.1148V46.5468H94.9637V45.3957ZM94.9637 46.5468H96.1148V47.6979H94.9637V46.5468ZM96.1148 46.5468H97.2659V47.6979H96.1148V46.5468ZM96.1148 47.6979H97.2659V48.8489H96.1148V47.6979ZM96.1148 48.8489H97.2659V50H96.1148V48.8489ZM94.9637 48.8489H96.1148V50H94.9637V48.8489ZM94.9637 47.6979H96.1148V48.8489H94.9637V47.6979ZM97.2659 48.8489H98.417V50H97.2659V48.8489ZM97.2659 47.6979H98.417V48.8489H97.2659V47.6979ZM97.2659 46.5468H98.417V47.6979H97.2659V46.5468ZM97.2659 45.3957H98.417V46.5468H97.2659V45.3957ZM97.2659 44.2446H98.417V45.3957H97.2659V44.2446ZM97.2659 43.0936H98.417V44.2446H97.2659V43.0936ZM97.2659 41.9425H98.417V43.0936H97.2659V41.9425ZM96.1148 41.9425H97.2659V43.0936H96.1148V41.9425ZM96.1148 40.7914H97.2659V41.9425H96.1148V40.7914ZM96.1148 39.6403H97.2659V40.7914H96.1148V39.6403ZM96.1148 38.4893H97.2659V39.6403H96.1148V38.4893ZM97.2659 37.3382H98.417V38.4893H97.2659V37.3382ZM97.2659 38.4893H98.417V39.6403H97.2659V38.4893ZM97.2659 39.6403H98.417V40.7914H97.2659V39.6403ZM97.2659 40.7914H98.417V41.9425H97.2659V40.7914ZM96.1148 43.0936H97.2659V44.2446H96.1148V43.0936ZM96.1148 44.2446H97.2659V45.3957H96.1148V44.2446ZM96.1148 45.3957H97.2659V46.5468H96.1148V45.3957ZM111.079 32.7339H112.23V33.885H111.079V32.7339ZM111.079 33.885H112.23V35.036H111.079V33.885ZM111.079 35.036H112.23V36.1871H111.079V35.036ZM111.079 36.1871H112.23V37.3382H111.079V36.1871ZM111.079 37.3382H112.23V38.4893H111.079V37.3382ZM111.079 38.4893H112.23V39.6403H111.079V38.4893ZM111.079 39.6403H112.23V40.7914H111.079V39.6403ZM111.079 40.7914H112.23V41.9425H111.079V40.7914ZM111.079 41.9425H112.23V43.0936H111.079V41.9425ZM111.079 43.0936H112.23V44.2446H111.079V43.0936ZM111.079 44.2446H112.23V45.3957H111.079V44.2446ZM111.079 45.3957H112.23V46.5468H111.079V45.3957ZM111.079 46.5468H112.23V47.6979H111.079V46.5468ZM111.079 47.6979H112.23V48.8489H111.079V47.6979ZM111.079 48.8489H112.23V50H111.079V48.8489ZM109.928 48.8489H111.079V50H109.928V48.8489ZM108.777 47.6979H109.928V48.8489H108.777V47.6979ZM108.777 46.5468H109.928V47.6979H108.777V46.5468ZM108.777 48.8489H109.928V50H108.777V48.8489ZM109.928 47.6979H111.079V48.8489H109.928V47.6979ZM109.928 46.5468H111.079V47.6979H109.928V46.5468ZM109.928 45.3957H111.079V46.5468H109.928V45.3957ZM109.928 44.2446H111.079V45.3957H109.928V44.2446ZM109.928 43.0936H111.079V44.2446H109.928V43.0936ZM109.928 41.9425H111.079V43.0936H109.928V41.9425ZM109.928 40.7914H111.079V41.9425H109.928V40.7914ZM109.928 39.6403H111.079V40.7914H109.928V39.6403ZM109.928 38.4893H111.079V39.6403H109.928V38.4893ZM109.928 37.3382H111.079V38.4893H109.928V37.3382ZM109.928 36.1871H111.079V37.3382H109.928V36.1871ZM109.928 35.036H111.079V36.1871H109.928V35.036ZM109.928 33.885H111.079V35.036H109.928V33.885ZM109.928 32.7339H111.079V33.885H109.928V32.7339ZM108.777 32.7339H109.928V33.885H108.777V32.7339ZM108.777 33.885H109.928V35.036H108.777V33.885ZM108.777 35.036H109.928V36.1871H108.777V35.036ZM108.777 36.1871H109.928V37.3382H108.777V36.1871ZM108.777 38.4893H109.928V39.6403H108.777V38.4893ZM108.777 39.6403H109.928V40.7914H108.777V39.6403ZM108.777 40.7914H109.928V41.9425H108.777V40.7914ZM108.777 41.9425H109.928V43.0936H108.777V41.9425ZM108.777 45.3957H109.928V46.5468H108.777V45.3957ZM108.777 44.2446H109.928V45.3957H108.777V44.2446ZM108.777 43.0936H109.928V44.2446H108.777V43.0936ZM108.777 37.3382H109.928V38.4893H108.777V37.3382ZM98.417 33.885H99.568V35.036H98.417V33.885ZM98.417 35.036H99.568V36.1871H98.417V35.036ZM98.417 36.1871H99.568V37.3382H98.417V36.1871ZM98.417 37.3382H99.568V38.4893H98.417V37.3382ZM98.417 38.4893H99.568V39.6403H98.417V38.4893ZM99.568 35.036H100.719V36.1871H99.568V35.036ZM99.568 36.1871H100.719V37.3382H99.568V36.1871ZM99.568 37.3382H100.719V38.4893H99.568V37.3382ZM99.568 38.4893H100.719V39.6403H99.568V38.4893ZM99.568 39.6403H100.719V40.7914H99.568V39.6403ZM100.719 36.1871H101.87V37.3382H100.719V36.1871ZM100.719 37.3382H101.87V38.4893H100.719V37.3382ZM100.719 38.4893H101.87V39.6403H100.719V38.4893ZM100.719 39.6403H101.87V40.7914H100.719V39.6403ZM100.719 40.7914H101.87V41Line truncated
<path d="M82.4458 32.7339H83.7407V33.885H82.4458V32.7339ZM88.9206 32.7339H90.2155V33.885H88.9206V32.7339ZM88.9206 33.885H90.2155V35.036H88.9206V33.885ZM90.2155 33.885H91.5105V35.036H90.2155V33.885ZM82.4458 33.885H83.7407V35.036H82.4458V33.885ZM81.1508 35.036H82.4458V36.1871H81.1508V35.036ZM81.1508 33.885H82.4458V35.036H81.1508V33.885ZM79.8558 35.036H81.1508V36.1871H79.8558V35.036ZM82.4458 35.036H83.7407V36.1871H82.4458V35.036ZM88.9206 35.036H90.2155V36.1871H88.9206V35.036ZM90.2155 35.036H91.5105V36.1871H90.2155V35.036ZM91.5105 35.036H92.8054V36.1871H91.5105V35.036ZM91.5105 36.1871H92.8054V37.3382H91.5105V36.1871ZM90.2155 36.1871H91.5105V37.3382H90.2155V36.1871ZM88.9206 36.1871H90.2155V37.3382H88.9206V36.1871ZM88.9206 37.3382H90.2155V38.4893H88.9206V37.3382ZM88.9206 38.4893H90.2155V39.6403H88.9206V38.4893ZM88.9206 39.6403H90.2155V40.7914H88.9206V39.6403ZM88.9206 40.7914H90.2155V41.9425H88.9206V40.7914ZM88.9206 41.9425H90.2155V43.0936H88.9206V41.9425ZM90.2155 40.7914H91.5105V41.9425H90.2155V40.7914ZM91.5105 40.7914H92.8054V41.9425H91.5105V40.7914ZM91.5105 39.6403H92.8054V40.7914H91.5105V39.6403ZM91.5105 38.4893H92.8054V39.6403H91.5105V38.4893ZM91.5105 37.3382H92.8054V38.4893H91.5105V37.3382ZM90.2155 37.3382H91.5105V38.4893H90.2155V37.3382ZM90.2155 38.4893H91.5105V39.6403H90.2155V38.4893ZM90.2155 39.6403H91.5105V40.7914H90.2155V39.6403ZM90.2155 41.9425H91.5105V43.0936H90.2155V41.9425ZM90.2155 43.0936H91.5105V44.2446H90.2155V43.0936ZM91.5105 43.0936H92.8054V44.2446H91.5105V43.0936ZM91.5105 41.9425H92.8054V43.0936H91.5105V41.9425ZM91.5105 44.2446H92.8054V45.3957H91.5105V44.2446ZM91.5105 45.3957H92.8054V46.5468H91.5105V45.3957ZM91.5105 46.5468H92.8054V47.6979H91.5105V46.5468ZM90.2155 46.5468H91.5105V47.6979H90.2155V46.5468ZM90.2155 45.3957H91.5105V46.5468H90.2155V45.3957ZM90.2155 44.2446H91.5105V45.3957H90.2155V44.2446ZM88.9206 43.0936H90.2155V44.2446H88.9206V43.0936ZM88.9206 44.2446H90.2155V45.3957H88.9206V44.2446ZM88.9206 45.3957H90.2155V46.5468H88.9206V45.3957ZM87.6256 45.3957H88.9206V46.5468H87.6256V45.3957ZM88.9206 46.5468H90.2155V47.6979H88.9206V46.5468ZM90.2155 47.6979H91.5105V48.8489H90.2155V47.6979ZM88.9206 47.6979H90.2155V48.8489H88.9206V47.6979ZM87.6256 46.5468H88.9206V47.6979H87.6256V46.5468ZM87.6256 47.6979H88.9206V48.8489H87.6256V47.6979ZM88.9206 48.8489H90.2155V50H88.9206V48.8489ZM87.6256 48.8489H88.9206V50H87.6256V48.8489ZM86.3306 48.8489H87.6256V50H86.3306V48.8489ZM85.0357 48.8489H86.3306V50H85.0357V48.8489ZM83.7407 48.8489H85.0357V50H83.7407V48.8489ZM82.4458 48.8489H83.7407V50H82.4458V48.8489ZM82.4458 47.6979H83.7407V48.8489H82.4458V47.6979ZM83.7407 47.6979H85.0357V48.8489H83.7407V47.6979ZM83.7407 46.5468H85.0357V47.6979H83.7407V46.5468ZM85.0357 46.5468H86.3306V47.6979H85.0357V46.5468ZM86.3306 46.5468H87.6256V47.6979H86.3306V46.5468ZM86.3306 47.6979H87.6256V48.8489H86.3306V47.6979ZM85.0357 47.6979H86.3306V48.8489H85.0357V47.6979ZM81.1508 47.6979H82.4458V48.8489H81.1508V47.6979ZM82.4458 46.5468H83.7407V47.6979H82.4458V46.5468ZM83.7407 45.3957H85.0357V46.5468H83.7407V45.3957ZM82.4458 45.3957H83.7407V46.5468H82.4458V45.3957ZM81.1508 45.3957H82.4458V46.5468H81.1508V45.3957ZM81.1508 46.5468H82.4458V47.6979H81.1508V46.5468ZM79.8558 46.5468H81.1508V47.6979H79.8558V46.5468ZM79.8558 45.3957H81.1508V46.5468H79.8558V45.3957ZM79.8558 44.2446H81.1508V45.3957H79.8558V44.2446ZM79.8558 43.0936H81.1508V44.2446H79.8558V43.0936ZM79.8558 41.9425H81.1508V43.0936H79.8558V41.9425ZM79.8558 40.7914H81.1508V41.9425H79.8558V40.7914ZM79.8558 39.6403H81.1508V40.7914H79.8558V39.6403ZM79.8558 38.4893H81.1508V39.6403H79.8558V38.4893ZM79.8558 37.3382H81.1508V38.4893H79.8558V37.3382ZM79.8558 36.1871H81.1508V37.3382H79.8558V36.1871ZM81.1508 36.1871H82.4458V37.3382H81.1508V36.1871ZM82.4458 36.1871H83.7407V37.3382H82.4458V36.1871ZM82.4458 37.3382H83.7407V38.4893H82.4458V37.3382ZM82.4458 38.4893H83.7407V39.6403H82.4458V38.4893ZM82.4458 39.6403H83.7407V40.7914H82.4458V39.6403ZM82.4458 40.7914H83.7407V41.9425H82.4458V40.7914ZM82.4458 41.9425H83.7407V43.0936H82.4458V41.9425ZM82.4458 43.0936H83.7407V44.2446H82.4458V43.0936ZM82.4458 44.2446H83.7407V45.3957H82.4458V44.2446ZM81.1508 44.2446H82.4458V45.3957H81.1508V44.2446ZM81.1508 43.0936H82.4458V44.2446H81.1508V43.0936ZM81.1508 41.9425H82.4458V43.0936H81.1508V41.9425ZM81.1508 40.7914H82.4458V41.9425H81.1508V40.7914ZM81.1508 39.6403H82.4458V40.7914H81.1508V39.6403ZM81.1508 38.4893H82.4458V39.6403H81.1508V38.4893ZM81.1508 37.3382H82.4458V38.4893H81.1508V37.3382ZM81.1508 32.7339H82.4458V33.885H81.1508V32.7339ZM79.8558 32.7339H81.1508V33.885H79.8558V32.7339ZM79.8558 33.885H81.1508V35.036H79.8558V33.885ZM90.2155 32.7339H91.5105V33.885H90.2155V32.7339ZM91.5105 32.7339H92.8054V33.885H91.5105V32.7339ZM91.5105 33.885H92.8054V35.036H91.5105V33.885Z" fill="white"/>
<path d="M70.0237 32.7339H70.9829V33.885H70.0237V32.7339ZM70.0237 33.885H70.9829V35.036H70.0237V33.885ZM70.0237 35.036H70.9829V36.1871H70.0237V35.036ZM70.0237 36.1871H70.9829V37.3382H70.0237V36.1871ZM70.0237 37.3382H70.9829V38.4893H70.0237V37.3382ZM70.0237 38.4893H70.9829V39.6403H70.0237V38.4893ZM70.0237 39.6403H70.9829V40.7914H70.0237V39.6403ZM70.0237 40.7914H70.9829V41.9425H70.0237V40.7914ZM70.0237 41.9425H70.9829V43.0936H70.0237V41.9425ZM70.0237 43.0936H70.9829V44.2446H70.0237V43.0936ZM70.0237 44.2446H70.9829V45.3957H70.0237V44.2446ZM70.0237 45.3957H70.9829V46.5468H70.0237V45.3957ZM70.0237 46.5468H70.9829V47.6979H70.0237V46.5468ZM70.0237 47.6979H70.9829V48.8489H70.0237V47.6979ZM70.0237 48.8489H70.9829V50H70.0237V48.8489ZM69.0645 48.8489H70.0237V50H69.0645V48.8489ZM69.0645 47.6979H70.0237V48.8489H69.0645V47.6979ZM69.0645 46.5468H70.0237V47.6979H69.0645V46.5468ZM69.0645 33.885H70.0237V35.036H69.0645V33.885ZM69.0645 32.7339H70.0237V33.885H69.0645V32.7339ZM69.0645 35.036H70.0237V36.1871H69.0645V35.036ZM69.0645 36.1871H70.0237V37.3382H69.0645V36.1871ZM69.0645 37.3382H70.0237V38.4893H69.0645V37.3382ZM69.0645 38.4893H70.0237V39.6403H69.0645V38.4893ZM69.0645 39.6403H70.0237V40.7914H69.0645V39.6403ZM69.0645 40.7914H70.0237V41.9425H69.0645V40.7914ZM69.0645 41.9425H70.0237V43.0936H69.0645V41.9425ZM69.0645 43.0936H70.0237V44.2446H69.0645V43.0936ZM69.0645 44.2446H70.0237V45.3957H69.0645V44.2446ZM69.0645 45.3957H70.0237V46.5468H69.0645V45.3957ZM70.9829 48.8489H71.9421V50H70.9829V48.8489ZM70.9829 47.6979H71.9421V48.8489H70.9829V47.6979ZM70.9829 46.5468H71.9421V47.6979H70.9829V46.5468ZM70.9829 45.3957H71.9421V46.5468H70.9829V45.3957ZM70.9829 43.0936H71.9421V44.2446H70.9829V43.0936ZM70.9829 41.9425H71.9421V43.0936H70.9829V41.9425ZM70.9829 40.7914H71.9421V41.9425H70.9829V40.7914ZM70.9829 39.6403H71.9421V40.7914H70.9829V39.6403ZM70.9829 38.4893H71.9421V39.6403H70.9829V38.4893ZM70.9829 37.3382H71.9421V38.4893H70.9829V37.3382ZM70.9829 32.7339H71.9421V33.885H70.9829V32.7339ZM70.9829 33.885H71.9421V35.036H70.9829V33.885ZM70.9829 35.036H71.9421V36.1871H70.9829V35.036ZM70.9829 36.1871H71.9421V37.3382H70.9829V36.1871ZM70.9829 44.2446H71.9421V45.3957H70.9829V44.2446ZM71.9421 48.8489H72.9014V50H71.9421V48.8489ZM72.9014 48.8489H73.8606V50H72.9014V48.8489ZM73.8606 48.8489H74.8198V50H73.8606V48.8489ZM73.8606 47.6979H74.8198V48.8489H73.8606V47.6979ZM73.8606 46.5468H74.8198V47.6979H73.8606V46.5468ZM72.9014 46.5468H73.8606V47.6979H72.9014V46.5468ZM72.9014 47.6979H73.8606V48.8489H72.9014V47.6979ZM71.9421 47.6979H72.9014V48.8489H71.9421V47.6979ZM71.9421 46.5468H72.9014V47.6979H71.9421V46.5468ZM74.8198 46.5468H75.7791V47.6979H74.8198V46.5468ZM74.8198 47.6979H75.7791V48.8489H74.8198V47.6979ZM74.8198 48.8489H75.7791V50H74.8198V48.8489ZM75.7791 48.8489H76.7383V50H75.7791V48.8489ZM75.7791 47.6979H76.7383V48.8489H75.7791V47.6979ZM75.7791 46.5468H76.7383V47.6979H75.7791V46.5468ZM76.7383 46.5468H77.6975V47.6979H76.7383V46.5468ZM76.7383 47.6979H77.6975V48.8489H76.7383V47.6979ZM76.7383 48.8489H77.6975V50H76.7383V48.8489ZM71.9421 32.7339H72.9014V33.885H71.9421V32.7339ZM72.9014 32.7339H73.8606V33.885H72.9014V32.7339ZM73.8606 32.7339H74.8198V33.885H73.8606V32.7339ZM74.8198 32.7339H75.7791V33.885H74.8198V32.7339ZM75.7791 32.7339H76.7383V33.885H75.7791V32.7339ZM76.7383 32.7339H77.6975V33.885H76.7383V32.7339ZM76.7383 33.885H77.6975V35.036H76.7383V33.885ZM76.7383 35.036H77.6975V36.1871H76.7383V35.036ZM75.7791 35.036H76.7383V36.1871H75.7791V35.036ZM74.8198 35.036H75.7791V36.1871H74.8198V35.036ZM73.8606 35.036H74.8198V36.1871H73.8606V35.036ZM72.9014 35.036H73.8606V36.1871H72.9014V35.036ZM72.9014 33.885H73.8606V35.036H72.9014V33.885ZM71.9421 33.885H72.9014V35.036H71.9421V33.885ZM71.9421 35.036H72.9014V36.1871H71.9421V35.036ZM73.8606 33.885H74.8198V35.036H73.8606V33.885ZM74.8198 33.885H75.7791V35.036H74.8198V33.885ZM75.7791 33.885H76.7383V35.036H75.7791V33.885ZM71.9421 39.6403H72.9014V40.7914H71.9421V39.6403ZM71.9421 40.7914H72.9014V41.9425H71.9421V40.7914ZM71.9421 41.9425H72.9014V43.0936H71.9421V41.9425ZM72.9014 41.9425H73.8606V43.0936H72.9014V41.9425ZM72.9014 40.7914H73.8606V41.9425H72.9014V40.7914ZM72.9014 39.6403H73.8606V40.7914H72.9014V39.6403ZM73.8606 39.6403H74.8198V40.7914H73.8606V39.6403ZM73.8606 40.7914H74.8198V41.9425H73.8606V40.7914ZM74.8198 40.7914H75.7791V41.9425H74.8198V40.7914ZM74.8198 39.6403H75.7791V40.7914H74.8198V39.6403ZM74.8198 41.9425H75.7791V43.0936H74.8198V41.9425ZM73.8606 41.9425H74.8198V43.0936H73.8606V41.9425ZM75.7791 39.6403H76.7383V40.7914H75.7791V39.6403ZM75.7791 40.7914H76.7383V41.9425H75.7791V40.7914ZM75.7791 41.9425H76.7383V43.0936H75.7791V41.9425Z" fill="white"/>
<path d="M51.7983 32.7339H53.0933V33.885H51.7983V32.7339ZM53.0933 32.7339H54.3883V33.885H53.0933V32.7339ZM54.3883 32.7339H55.6832V33.885H54.3883V32.7339ZM55.6832 32.7339H56.9782V33.885H55.6832V32.7339ZM56.9782 32.7339H58.2731V33.885H56.9782V32.7339ZM58.2731 32.7339H59.5681V33.885H58.2731V32.7339ZM59.5681 32.7339H60.8631V33.885H59.5681V32.7339ZM60.8631 32.7339H62.158V33.885H60.8631V32.7339ZM60.8631 33.885H62.158V35.036H60.8631V33.885ZM62.158 33.885H63.453V35.036H62.158V33.885ZM59.5681 33.885H60.8631V35.036H59.5681V33.885ZM58.2731 33.885H59.5681V35.036H58.2731V33.885ZM56.9782 33.885H58.2731V35.036H56.9782V33.885ZM55.6832 33.885H56.9782V35.036H55.6832V33.885ZM54.3883 33.885H55.6832V35.036H54.3883V33.885ZM53.0933 33.885H54.3883V35.036H53.0933V33.885ZM51.7983 33.885H53.0933V35.036H51.7983V33.885ZM51.7983 35.036H53.0933V36.1871H51.7983V35.036ZM53.0933 35.036H54.3883V36.1871H53.0933V35.036ZM54.3883 35.036H55.6832V36.1871H54.3883V35.036ZM55.6832 35.036H56.9782V36.1871H55.6832V35.036ZM58.2731 35.036H59.5681V36.1871H58.2731V35.036ZM59.5681 35.036H60.8631V36.1871H59.5681V35.036ZM60.8631 35.036H62.158V36.1871H60.8631V35.036ZM62.158 35.036H63.453V36.1871H62.158V35.036ZM63.453 35.036H64.7479V36.1871H63.453V35.036ZM56.9782 35.036H58.2731V36.1871H56.9782V35.036ZM59.5681 36.1871H60.8631V37.3382H59.5681V36.1871ZM60.8631 36.1871H62.158V37.3382H60.8631V36.1871ZM63.453 36.1871H64.7479V37.3382H63.453V36.1871ZM62.158 36.1871H63.453V37.3382H62.158V36.1871ZM62.158 37.3382H63.453V38.4893H62.158V37.3382ZM62.158 39.6403H63.453V40.7914H62.158V39.6403ZM63.453 39.6403H64.7479V40.7914H63.453V39.6403ZM63.453 40.7914H64.7479V41.9425H63.453V40.7914ZM63.453 37.3382H64.7479V38.4893H63.453V37.3382ZM60.8631 39.6403H62.158V40.7914H60.8631V39.6403ZM60.8631 37.3382H62.158V38.4893H60.8631V37.3382ZM59.5681 39.6403H60.8631V40.7914H59.5681V39.6403ZM60.8631 40.7914H62.158V41.9425H60.8631V40.7914ZM62.158 40.7914H63.453V41.9425H62.158V40.7914ZM62.158 41.9425H63.453V43.0936H62.158V41.9425ZM59.5681 43.0936H60.8631V44.2446H59.5681V43.0936ZM60.8631 43.0936H62.158V44.2446H60.8631V43.0936ZM60.8631 41.9425H62.158V43.0936H60.8631V41.9425ZM59.5681 41.9425H60.8631V43.0936H59.5681V41.9425ZM59.5681 40.7914H60.8631V41.9425H59.5681V40.7914ZM58.2731 43.0936H59.5681V44.2446H58.2731V43.0936ZM56.9782 43.0936H58.2731V44.2446H56.9782V43.0936ZM55.6832 43.0936H56.9782V44.2446H55.6832V43.0936ZM55.6832 41.9425H56.9782V43.0936H55.6832V41.9425ZM56.9782 41.9425H58.2731V43.0936H56.9782V41.9425ZM56.9782 40.7914H58.2731V41.9425H56.9782V40.7914ZM58.2731 40.7914H59.5681V41.9425H58.2731V40.7914ZM55.6832 40.7914H56.9782V41.9425H55.6832V40.7914ZM58.2731 41.9425H59.5681V43.0936H58.2731V41.9425ZM53.0933 36.1871H54.3883V37.3382H53.0933V36.1871ZM54.3883 36.1871H55.6832V37.3382H54.3883V36.1871ZM54.3883 37.3382H55.6832V38.4893H54.3883V37.3382ZM54.3883 38.4893H55.6832V39.6403H54.3883V38.4893ZM54.3883 39.6403H55.6832V40.7914H54.3883V39.6403ZM53.0933 39.6403H54.3883V40.7914H53.0933V39.6403ZM51.7983 39.6403H53.0933V40.7914H51.7983V39.6403ZM51.7983 38.4893H53.0933V39.6403H51.7983V38.4893ZM51.7983 37.3382H53.0933V38.4893H51.7983V37.3382ZM51.7983 36.1871H53.0933V37.3382H51.7983V36.1871ZM53.0933 38.4893H54.3883V39.6403H53.0933V38.4893ZM53.0933 40.7914H54.3883V41.9425H53.0933V40.7914ZM53.0933 37.3382H54.3883V38.4893H53.0933V37.3382ZM51.7983 40.7914H53.0933V41.9425H51.7983V40.7914ZM51.7983 41.9425H53.0933V43.0936H51.7983V41.9425ZM53.0933 41.9425H54.3883V43.0936H53.0933V41.9425ZM54.3883 40.7914H55.6832V41.9425H54.3883V40.7914ZM54.3883 41.9425H55.6832V43.0936H54.3883V41.9425ZM54.3883 43.0936H55.6832V44.2446H54.3883V43.0936ZM54.3883 44.2446H55.6832V45.3957H54.3883V44.2446ZM54.3883 45.3957H55.6832V46.5468H54.3883V45.3957ZM54.3883 46.5468H55.6832V47.6979H54.3883V46.5468ZM54.3883 48.8489H55.6832V50H54.3883V48.8489ZM53.0933 48.8489H54.3883V50H53.0933V48.8489ZM51.7983 48.8489H53.0933V50H51.7983V48.8489ZM51.7983 47.6979H53.0933V48.8489H51.7983V47.6979ZM51.7983 46.5468H53.0933V47.6979H51.7983V46.5468ZM51.7983 45.3957H53.0933V46.5468H51.7983V45.3957ZM51.7983 44.2446H53.0933V45.3957H51.7983V44.2446ZM51.7983 43.0936H53.0933V44.2446H51.7983V43.0936ZM53.0933 43.0936H54.3883V44.2446H53.0933V43.0936ZM53.0933 44.2446H54.3883V45.3957H53.0933V44.2446ZM53.0933 45.3957H54.3883V46.5468H53.0933V45.3957ZM53.0933 46.5468H54.3883V47.6979H53.0933V46.5468ZM53.0933 47.6979H54.3883V48.8489H53.0933V47.6979ZM54.3883 47.6979H55.6832V48.8489H54.3883V47.6979ZM63.453 38.4893H64.7479V39.6403H63.453V38.4893ZM62.158 38.4893H63.453V39.6403H62.158V38.4893ZM60.8631 38.4893H62.158V39.6403H60.8631V38.4893ZM63.453 48.8489H64.7479V50H63.453V48.8489ZM63.453 47.6979H64.7479V48.8489H63.453V47.6979ZM63.453 46.5468H64.7479V47.6979H63.453V46.5468ZM62.158 46.5468H63.453V47.6979H62.158V46.5468ZM60.8631 46.5468H62.158V47.6979H60.8631V46.5468ZM60.8631 47.6979H62.158V48.8489H60.8631V47.6979ZM60.8631 48.8489H62.158V50H60.8631V48.8489ZM62.158 48.8489H63.453V50H62.158V48.8489ZM62.158 47.6979H63.453V48.8489H62.158V47.6979ZM60.8631 45.3957H62.158V46.5468H60.8631V45.Line truncated
<path d="M40.0478 32.7339H41.2468V33.885H40.0478V32.7339ZM40.0478 33.885H41.2468V35.036H40.0478V33.885ZM40.0478 35.036H41.2468V36.1871H40.0478V35.036ZM40.0478 36.1871H41.2468V37.3382H40.0478V36.1871ZM40.0478 37.3382H41.2468V38.4893H40.0478V37.3382ZM40.0478 38.4893H41.2468V39.6403H40.0478V38.4893ZM40.0478 39.6403H41.2468V40.7914H40.0478V39.6403ZM40.0478 40.7914H41.2468V41.9425H40.0478V40.7914ZM40.0478 41.9425H41.2468V43.0936H40.0478V41.9425ZM40.0478 43.0936H41.2468V44.2446H40.0478V43.0936ZM40.0478 44.2446H41.2468V45.3957H40.0478V44.2446ZM40.0478 45.3957H41.2468V46.5468H40.0478V45.3957ZM40.0478 46.5468H41.2468V47.6979H40.0478V46.5468ZM40.0478 47.6979H41.2468V48.8489H40.0478V47.6979ZM40.0478 48.8489H41.2468V50H40.0478V48.8489ZM38.8488 48.8489H40.0478V50H38.8488V48.8489ZM38.8488 47.6979H40.0478V48.8489H38.8488V47.6979ZM38.8488 46.5468H40.0478V47.6979H38.8488V46.5468ZM38.8488 33.885H40.0478V35.036H38.8488V33.885ZM38.8488 32.7339H40.0478V33.885H38.8488V32.7339ZM38.8488 35.036H40.0478V36.1871H38.8488V35.036ZM38.8488 36.1871H40.0478V37.3382H38.8488V36.1871ZM38.8488 37.3382H40.0478V38.4893H38.8488V37.3382ZM38.8488 38.4893H40.0478V39.6403H38.8488V38.4893ZM38.8488 39.6403H40.0478V40.7914H38.8488V39.6403ZM38.8488 40.7914H40.0478V41.9425H38.8488V40.7914ZM38.8488 41.9425H40.0478V43.0936H38.8488V41.9425ZM38.8488 43.0936H40.0478V44.2446H38.8488V43.0936ZM38.8488 44.2446H40.0478V45.3957H38.8488V44.2446ZM38.8488 45.3957H40.0478V46.5468H38.8488V45.3957ZM41.2468 48.8489H42.4459V50H41.2468V48.8489ZM41.2468 47.6979H42.4459V48.8489H41.2468V47.6979ZM41.2468 46.5468H42.4459V47.6979H41.2468V46.5468ZM41.2468 45.3957H42.4459V46.5468H41.2468V45.3957ZM41.2468 43.0936H42.4459V44.2446H41.2468V43.0936ZM41.2468 41.9425H42.4459V43.0936H41.2468V41.9425ZM41.2468 40.7914H42.4459V41.9425H41.2468V40.7914ZM41.2468 39.6403H42.4459V40.7914H41.2468V39.6403ZM41.2468 38.4893H42.4459V39.6403H41.2468V38.4893ZM41.2468 37.3382H42.4459V38.4893H41.2468V37.3382ZM41.2468 32.7339H42.4459V33.885H41.2468V32.7339ZM41.2468 33.885H42.4459V35.036H41.2468V33.885ZM41.2468 35.036H42.4459V36.1871H41.2468V35.036ZM41.2468 36.1871H42.4459V37.3382H41.2468V36.1871ZM41.2468 44.2446H42.4459V45.3957H41.2468V44.2446ZM42.4459 48.8489H43.6449V50H42.4459V48.8489ZM43.6449 48.8489H44.8439V50H43.6449V48.8489ZM44.8439 48.8489H46.043V50H44.8439V48.8489ZM44.8439 47.6979H46.043V48.8489H44.8439V47.6979ZM44.8439 46.5468H46.043V47.6979H44.8439V46.5468ZM43.6449 46.5468H44.8439V47.6979H43.6449V46.5468ZM43.6449 47.6979H44.8439V48.8489H43.6449V47.6979ZM42.4459 47.6979H43.6449V48.8489H42.4459V47.6979ZM42.4459 46.5468H43.6449V47.6979H42.4459V46.5468ZM46.043 46.5468H47.242V47.6979H46.043V46.5468ZM46.043 47.6979H47.242V48.8489H46.043V47.6979ZM46.043 48.8489H47.242V50H46.043V48.8489ZM47.242 48.8489H48.441V50H47.242V48.8489ZM47.242 47.6979H48.441V48.8489H47.242V47.6979ZM47.242 46.5468H48.441V47.6979H47.242V46.5468ZM48.441 46.5468H49.6401V47.6979H48.441V46.5468ZM48.441 47.6979H49.6401V48.8489H48.441V47.6979ZM48.441 48.8489H49.6401V50H48.441V48.8489ZM42.4459 32.7339H43.6449V33.885H42.4459V32.7339ZM43.6449 32.7339H44.8439V33.885H43.6449V32.7339ZM44.8439 32.7339H46.043V33.885H44.8439V32.7339ZM46.043 32.7339H47.242V33.885H46.043V32.7339ZM47.242 32.7339H48.441V33.885H47.242V32.7339ZM48.441 32.7339H49.6401V33.885H48.441V32.7339ZM48.441 33.885H49.6401V35.036H48.441V33.885ZM48.441 35.036H49.6401V36.1871H48.441V35.036ZM47.242 35.036H48.441V36.1871H47.242V35.036ZM46.043 35.036H47.242V36.1871H46.043V35.036ZM44.8439 35.036H46.043V36.1871H44.8439V35.036ZM43.6449 35.036H44.8439V36.1871H43.6449V35.036ZM43.6449 33.885H44.8439V35.036H43.6449V33.885ZM42.4459 33.885H43.6449V35.036H42.4459V33.885ZM42.4459 35.036H43.6449V36.1871H42.4459V35.036ZM44.8439 33.885H46.043V35.036H44.8439V33.885ZM46.043 33.885H47.242V35.036H46.043V33.885ZM47.242 33.885H48.441V35.036H47.242V33.885ZM42.4459 39.6403H43.6449V40.7914H42.4459V39.6403ZM42.4459 40.7914H43.6449V41.9425H42.4459V40.7914ZM42.4459 41.9425H43.6449V43.0936H42.4459V41.9425ZM43.6449 41.9425H44.8439V43.0936H43.6449V41.9425ZM43.6449 40.7914H44.8439V41.9425H43.6449V40.7914ZM43.6449 39.6403H44.8439V40.7914H43.6449V39.6403ZM44.8439 39.6403H46.043V40.7914H44.8439V39.6403ZM44.8439 40.7914H46.043V41.9425H44.8439V40.7914ZM46.043 40.7914H47.242V41.9425H46.043V40.7914ZM46.043 39.6403H47.242V40.7914H46.043V39.6403ZM46.043 41.9425H47.242V43.0936H46.043V41.9425ZM44.8439 41.9425H46.043V43.0936H44.8439V41.9425ZM47.242 39.6403H48.441V40.7914H47.242V39.6403ZM47.242 40.7914H48.441V41.9425H47.242V40.7914ZM47.242 41.9425H48.441V43.0936H47.242V41.9425Z" fill="white"/>
<path d="M29.1366 39.6403H30.2157V40.7914H29.1366V39.6403ZM30.2157 39.6403H31.2948V40.7914H30.2157V39.6403ZM31.2948 39.6403H32.374V40.7914H31.2948V39.6403ZM32.374 39.6403H33.4531V40.7914H32.374V39.6403ZM33.4531 39.6403H34.5322V40.7914H33.4531V39.6403ZM33.4531 40.7914H34.5322V41.9425H33.4531V40.7914ZM33.4531 41.9425H34.5322V43.0936H33.4531V41.9425ZM32.374 41.9425H33.4531V43.0936H32.374V41.9425ZM31.2948 41.9425H32.374V43.0936H31.2948V41.9425ZM30.2157 41.9425H31.2948V43.0936H30.2157V41.9425ZM29.1366 41.9425H30.2157V43.0936H29.1366V41.9425ZM28.0574 41.9425H29.1366V43.0936H28.0574V41.9425ZM26.9783 41.9425H28.0574V43.0936H26.9783V41.9425ZM28.0574 40.7914H29.1366V41.9425H28.0574V40.7914ZM29.1366 40.7914H30.2157V41.9425H29.1366V40.7914ZM30.2157 40.7914H31.2948V41.9425H30.2157V40.7914ZM31.2948 40.7914H32.374V41.9425H31.2948V40.7914ZM32.374 40.7914H33.4531V41.9425H32.374V40.7914ZM28.0574 39.6403H29.1366V40.7914H28.0574V39.6403ZM28.0574 38.4893H29.1366V39.6403H28.0574V38.4893ZM28.0574 37.3382H29.1366V38.4893H28.0574V37.3382ZM28.0574 36.1871H29.1366V37.3382H28.0574V36.1871ZM28.0574 35.036H29.1366V36.1871H28.0574V35.036ZM26.9783 33.885H28.0574V35.036H26.9783V33.885ZM26.9783 32.7339H28.0574V33.885H26.9783V32.7339ZM28.0574 32.7339H29.1366V33.885H28.0574V32.7339ZM28.0574 33.885H29.1366V35.036H28.0574V33.885ZM25.8992 32.7339H26.9783V33.885H25.8992V32.7339ZM25.8992 33.885H26.9783V35.036H25.8992V33.885ZM25.8992 35.036H26.9783V36.1871H25.8992V35.036ZM25.8992 36.1871H26.9783V37.3382H25.8992V36.1871ZM25.8992 37.3382H26.9783V38.4893H25.8992V37.3382ZM25.8992 38.4893H26.9783V39.6403H25.8992V38.4893ZM25.8992 39.6403H26.9783V40.7914H25.8992V39.6403ZM25.8992 40.7914H26.9783V41.9425H25.8992V40.7914ZM25.8992 41.9425H26.9783V43.0936H25.8992V41.9425ZM26.9783 40.7914H28.0574V41.9425H26.9783V40.7914ZM26.9783 39.6403H28.0574V40.7914H26.9783V39.6403ZM26.9783 38.4893H28.0574V39.6403H26.9783V38.4893ZM26.9783 37.3382H28.0574V38.4893H26.9783V37.3382ZM26.9783 36.1871H28.0574V37.3382H26.9783V36.1871ZM26.9783 35.036H28.0574V36.1871H26.9783V35.036ZM26.9783 43.0936H28.0574V44.2446H26.9783V43.0936ZM26.9783 44.2446H28.0574V45.3957H26.9783V44.2446ZM26.9783 45.3957H28.0574V46.5468H26.9783V45.3957ZM26.9783 46.5468H28.0574V47.6979H26.9783V46.5468ZM25.8992 45.3957H26.9783V46.5468H25.8992V45.3957ZM25.8992 44.2446H26.9783V45.3957H25.8992V44.2446ZM25.8992 43.0936H26.9783V44.2446H25.8992V43.0936ZM28.0574 45.3957H29.1366V46.5468H28.0574V45.3957ZM28.0574 46.5468H29.1366V47.6979H28.0574V46.5468ZM28.0574 44.2446H29.1366V45.3957H28.0574V44.2446ZM28.0574 43.0936H29.1366V44.2446H28.0574V43.0936ZM28.0574 47.6979H29.1366V48.8489H28.0574V47.6979ZM28.0574 48.8489H29.1366V50H28.0574V48.8489ZM26.9783 48.8489H28.0574V50H26.9783V48.8489ZM26.9783 47.6979H28.0574V48.8489H26.9783V47.6979ZM25.8992 47.6979H26.9783V48.8489H25.8992V47.6979ZM25.8992 46.5468H26.9783V47.6979H25.8992V46.5468ZM25.8992 48.8489H26.9783V50H25.8992V48.8489ZM33.4531 32.7339H34.5322V33.885H33.4531V32.7339ZM34.5322 32.7339H35.6114V33.885H34.5322V32.7339ZM35.6114 32.7339H36.6905V33.885H35.6114V32.7339ZM35.6114 33.885H36.6905V35.036H35.6114V33.885ZM35.6114 35.036H36.6905V36.1871H35.6114V35.036ZM35.6114 36.1871H36.6905V37.3382H35.6114V36.1871ZM35.6114 37.3382H36.6905V38.4893H35.6114V37.3382ZM35.6114 38.4893H36.6905V39.6403H35.6114V38.4893ZM34.5322 38.4893H35.6114V39.6403H34.5322V38.4893ZM34.5322 37.3382H35.6114V38.4893H34.5322V37.3382ZM34.5322 36.1871H35.6114V37.3382H34.5322V36.1871ZM34.5322 35.036H35.6114V36.1871H34.5322V35.036ZM34.5322 33.885H35.6114V35.036H34.5322V33.885ZM33.4531 33.885H34.5322V35.036H33.4531V33.885ZM33.4531 35.036H34.5322V36.1871H33.4531V35.036ZM33.4531 36.1871H34.5322V37.3382H33.4531V36.1871ZM33.4531 37.3382H34.5322V38.4893H33.4531V37.3382ZM33.4531 38.4893H34.5322V39.6403H33.4531V38.4893ZM33.4531 43.0936H34.5322V44.2446H33.4531V43.0936ZM34.5322 43.0936H35.6114V44.2446H34.5322V43.0936ZM34.5322 44.2446H35.6114V45.3957H34.5322V44.2446ZM34.5322 45.3957H35.6114V46.5468H34.5322V45.3957ZM34.5322 46.5468H35.6114V47.6979H34.5322V46.5468ZM33.4531 46.5468H34.5322V47.6979H33.4531V46.5468ZM33.4531 45.3957H34.5322V46.5468H33.4531V45.3957ZM33.4531 44.2446H34.5322V45.3957H33.4531V44.2446ZM33.4531 47.6979H34.5322V48.8489H33.4531V47.6979ZM33.4531 48.8489H34.5322V50H33.4531V48.8489ZM34.5322 48.8489H35.6114V50H34.5322V48.8489ZM35.6114 48.8489H36.6905V50H35.6114V48.8489ZM35.6114 47.6979H36.6905V48.8489H35.6114V47.6979ZM35.6114 46.5468H36.6905V47.6979H35.6114V46.5468ZM35.6114 45.3957H36.6905V46.5468H35.6114V45.3957ZM35.6114 44.2446H36.6905V45.3957H35.6114V44.2446ZM35.6114 43.0936H36.6905V44.2446H35.6114V43.0936ZM35.6114 41.9425H36.6905V43.0936H35.6114V41.9425ZM35.6114 40.7914H36.6905V41.9425H35.6114V40.7914ZM34.5322 40.7914H35.6114V41.9425H34.5322V40.7914ZM34.5322 39.6403H35.6114V40.7914H34.5322V39.6403ZM35.6114 39.6403H36.6905V40.7914H35.6114V39.6403ZM34.5322 41.9425H35.6114V43.0936H34.5322V41.9425ZM34.5322 47.6979H35.6114V48.8489H34.5322V47.6979Z" fill="white"/>
<path d="M16.5467 48.8489H17.7457V50H16.5467V48.8489ZM17.7457 48.8489H18.9448V50H17.7457V48.8489ZM18.9448 48.8489H20.1438V50H18.9448V48.8489ZM18.9448 47.6979H20.1438V48.8489H18.9448V47.6979ZM18.9448 46.5468H20.1438V47.6979H18.9448V46.5468ZM18.9448 45.3957H20.1438V46.5468H18.9448V45.3957ZM18.9448 44.2446H20.1438V45.3957H18.9448V44.2446ZM18.9448 43.0936H20.1438V44.2446H18.9448V43.0936ZM18.9448 41.9425H20.1438V43.0936H18.9448V41.9425ZM18.9448 40.7914H20.1438V41.9425H18.9448V40.7914ZM18.9448 39.6403H20.1438V40.7914H18.9448V39.6403ZM18.9448 38.4893H20.1438V39.6403H18.9448V38.4893ZM18.9448 37.3382H20.1438V38.4893H18.9448V37.3382ZM18.9448 36.1871H20.1438V37.3382H18.9448V36.1871ZM17.7457 36.1871H18.9448V37.3382H17.7457V36.1871ZM17.7457 35.036H18.9448V36.1871H17.7457V35.036ZM18.9448 35.036H20.1438V36.1871H18.9448V35.036ZM16.5467 35.036H17.7457V36.1871H16.5467V35.036ZM16.5467 39.6403H17.7457V40.7914H16.5467V39.6403ZM16.5467 40.7914H17.7457V41.9425H16.5467V40.7914ZM16.5467 41.9425H17.7457V43.0936H16.5467V41.9425ZM16.5467 43.0936H17.7457V44.2446H16.5467V43.0936ZM16.5467 44.2446H17.7457V45.3957H16.5467V44.2446ZM17.7457 45.3957H18.9448V46.5468H17.7457V45.3957ZM17.7457 46.5468H18.9448V47.6979H17.7457V46.5468ZM17.7457 47.6979H18.9448V48.8489H17.7457V47.6979ZM16.5467 47.6979H17.7457V48.8489H16.5467V47.6979ZM16.5467 46.5468H17.7457V47.6979H16.5467V46.5468ZM16.5467 45.3957H17.7457V46.5468H16.5467V45.3957ZM17.7457 40.7914H18.9448V41.9425H17.7457V40.7914ZM17.7457 39.6403H18.9448V40.7914H17.7457V39.6403ZM17.7457 38.4893H18.9448V39.6403H17.7457V38.4893ZM17.7457 37.3382H18.9448V38.4893H17.7457V37.3382ZM16.5467 37.3382H17.7457V38.4893H16.5467V37.3382ZM16.5467 38.4893H17.7457V39.6403H16.5467V38.4893ZM17.7457 44.2446H18.9448V45.3957H17.7457V44.2446ZM17.7457 43.0936H18.9448V44.2446H17.7457V43.0936ZM17.7457 41.9425H18.9448V43.0936H17.7457V41.9425ZM16.5467 36.1871H17.7457V37.3382H16.5467V36.1871ZM16.5467 33.885H17.7457V35.036H16.5467V33.885ZM17.7457 33.885H18.9448V35.036H17.7457V33.885ZM18.9448 33.885H20.1438V35.036H18.9448V33.885ZM18.9448 32.7339H20.1438V33.885H18.9448V32.7339ZM17.7457 32.7339H18.9448V33.885H17.7457V32.7339ZM16.5467 32.7339H17.7457V33.885H16.5467V32.7339ZM15.3477 32.7339H16.5467V33.885H15.3477V32.7339ZM14.1486 32.7339H15.3477V33.885H14.1486V32.7339ZM14.1486 33.885H15.3477V35.036H14.1486V33.885ZM14.1486 35.036H15.3477V36.1871H14.1486V35.036ZM15.3477 33.885H16.5467V35.036H15.3477V33.885ZM15.3477 35.036H16.5467V36.1871H15.3477V35.036ZM20.1438 32.7339H21.3428V33.885H20.1438V32.7339ZM21.3428 32.7339H22.5419V33.885H21.3428V32.7339ZM21.3428 33.885H22.5419V35.036H21.3428V33.885ZM21.3428 35.036H22.5419V36.1871H21.3428V35.036ZM20.1438 35.036H21.3428V36.1871H20.1438V35.036ZM20.1438 33.885H21.3428V35.036H20.1438V33.885ZM22.5419 32.7339H23.7409V33.885H22.5419V32.7339ZM22.5419 33.885H23.7409V35.036H22.5419V33.885ZM22.5419 35.036H23.7409V36.1871H22.5419V35.036ZM12.9496 32.7339H14.1486V33.885H12.9496V32.7339ZM12.9496 33.885H14.1486V35.036H12.9496V33.885ZM12.9496 35.036H14.1486V36.1871H12.9496V35.036Z" fill="white"/>
<path d="M1.19904 32.7339H2.39807V33.885H1.19904V32.7339ZM1.19904 33.885H2.39807V35.036H1.19904V33.885ZM1.19904 35.036H2.39807V36.1871H1.19904V35.036ZM1.19904 36.1871H2.39807V37.3382H1.19904V36.1871ZM1.19904 37.3382H2.39807V38.4893H1.19904V37.3382ZM1.19904 38.4893H2.39807V39.6403H1.19904V38.4893ZM1.19904 39.6403H2.39807V40.7914H1.19904V39.6403ZM1.19904 40.7914H2.39807V41.9425H1.19904V40.7914ZM1.19904 41.9425H2.39807V43.0936H1.19904V41.9425ZM1.19904 43.0936H2.39807V44.2446H1.19904V43.0936ZM1.19904 44.2446H2.39807V45.3957H1.19904V44.2446ZM1.19904 45.3957H2.39807V46.5468H1.19904V45.3957ZM1.19904 46.5468H2.39807V47.6979H1.19904V46.5468ZM1.19904 47.6979H2.39807V48.8489H1.19904V47.6979ZM1.19904 48.8489H2.39807V50H1.19904V48.8489ZM0 48.8489H1.19904V50H0V48.8489ZM0 47.6979H1.19904V48.8489H0V47.6979ZM0 46.5468H1.19904V47.6979H0V46.5468ZM0 33.885H1.19904V35.036H0V33.885ZM0 32.7339H1.19904V33.885H0V32.7339ZM0 35.036H1.19904V36.1871H0V35.036ZM0 36.1871H1.19904V37.3382H0V36.1871ZM0 37.3382H1.19904V38.4893H0V37.3382ZM0 38.4893H1.19904V39.6403H0V38.4893ZM0 39.6403H1.19904V40.7914H0V39.6403ZM0 40.7914H1.19904V41.9425H0V40.7914ZM0 41.9425H1.19904V43.0936H0V41.9425ZM0 43.0936H1.19904V44.2446H0V43.0936ZM0 44.2446H1.19904V45.3957H0V44.2446ZM0 45.3957H1.19904V46.5468H0V45.3957ZM2.39807 48.8489H3.59711V50H2.39807V48.8489ZM2.39807 47.6979H3.59711V48.8489H2.39807V47.6979ZM2.39807 46.5468H3.59711V47.6979H2.39807V46.5468ZM2.39807 45.3957H3.59711V46.5468H2.39807V45.3957ZM2.39807 43.0936H3.59711V44.2446H2.39807V43.0936ZM2.39807 41.9425H3.59711V43.0936H2.39807V41.9425ZM2.39807 40.7914H3.59711V41.9425H2.39807V40.7914ZM2.39807 39.6403H3.59711V40.7914H2.39807V39.6403ZM2.39807 38.4893H3.59711V39.6403H2.39807V38.4893ZM2.39807 37.3382H3.59711V38.4893H2.39807V37.3382ZM2.39807 32.7339H3.59711V33.885H2.39807V32.7339ZM2.39807 33.885H3.59711V35.036H2.39807V33.885ZM2.39807 35.036H3.59711V36.1871H2.39807V35.036ZM2.39807 36.1871H3.59711V37.3382H2.39807V36.1871ZM2.39807 44.2446H3.59711V45.3957H2.39807V44.2446ZM3.59711 48.8489H4.79615V50H3.59711V48.8489ZM4.79615 48.8489H5.99518V50H4.79615V48.8489ZM5.99518 48.8489H7.19422V50H5.99518V48.8489ZM5.99518 47.6979H7.19422V48.8489H5.99518V47.6979ZM5.99518 46.5468H7.19422V47.6979H5.99518V46.5468ZM4.79615 46.5468H5.99518V47.6979H4.79615V46.5468ZM4.79615 47.6979H5.99518V48.8489H4.79615V47.6979ZM3.59711 47.6979H4.79615V48.8489H3.59711V47.6979ZM3.59711 46.5468H4.79615V47.6979H3.59711V46.5468ZM7.19422 46.5468H8.39326V47.6979H7.19422V46.5468ZM7.19422 47.6979H8.39326V48.8489H7.19422V47.6979ZM7.19422 48.8489H8.39326V50H7.19422V48.8489ZM8.39326 48.8489H9.59229V50H8.39326V48.8489ZM8.39326 47.6979H9.59229V48.8489H8.39326V47.6979ZM8.39326 46.5468H9.59229V47.6979H8.39326V46.5468ZM9.59229 46.5468H10.7913V47.6979H9.59229V46.5468ZM9.59229 47.6979H10.7913V48.8489H9.59229V47.6979ZM9.59229 48.8489H10.7913V50H9.59229V48.8489ZM3.59711 32.7339H4.79615V33.885H3.59711V32.7339ZM4.79615 32.7339H5.99518V33.885H4.79615V32.7339ZM5.99518 32.7339H7.19422V33.885H5.99518V32.7339ZM7.19422 32.7339H8.39326V33.885H7.19422V32.7339ZM8.39326 32.7339H9.59229V33.885H8.39326V32.7339ZM9.59229 32.7339H10.7913V33.885H9.59229V32.7339ZM9.59229 33.885H10.7913V35.036H9.59229V33.885ZM9.59229 35.036H10.7913V36.1871H9.59229V35.036ZM8.39326 35.036H9.59229V36.1871H8.39326V35.036ZM7.19422 35.036H8.39326V36.1871H7.19422V35.036ZM5.99518 35.036H7.19422V36.1871H5.99518V35.036ZM4.79615 35.036H5.99518V36.1871H4.79615V35.036ZM4.79615 33.885H5.99518V35.036H4.79615V33.885ZM3.59711 33.885H4.79615V35.036H3.59711V33.885ZM3.59711 35.036H4.79615V36.1871H3.59711V35.036ZM5.99518 33.885H7.19422V35.036H5.99518V33.885ZM7.19422 33.885H8.39326V35.036H7.19422V33.885ZM8.39326 33.885H9.59229V35.036H8.39326V33.885ZM3.59711 39.6403H4.79615V40.7914H3.59711V39.6403ZM3.59711 40.7914H4.79615V41.9425H3.59711V40.7914ZM3.59711 41.9425H4.79615V43.0936H3.59711V41.9425ZM4.79615 41.9425H5.99518V43.0936H4.79615V41.9425ZM4.79615 40.7914H5.99518V41.9425H4.79615V40.7914ZM4.79615 39.6403H5.99518V40.7914H4.79615V39.6403ZM5.99518 39.6403H7.19422V40.7914H5.99518V39.6403ZM5.99518 40.7914H7.19422V41.9425H5.99518V40.7914ZM7.19422 40.7914H8.39326V41.9425H7.19422V40.7914ZM7.19422 39.6403H8.39326V40.7914H7.19422V39.6403ZM7.19422 41.9425H8.39326V43.0936H7.19422V41.9425ZM5.99518 41.9425H7.19422V43.0936H5.99518V41.9425ZM8.39326 39.6403H9.59229V40.7914H8.39326V39.6403ZM8.39326 40.7914H9.59229V41.9425H8.39326V40.7914ZM8.39326 41.9425H9.59229V43.0936H8.39326V41.9425Z" fill="white"/>
<path d="M96.8822 0H98.8007V1.8705H96.8822V0ZM96.8822 1.8705H98.8007V3.74099H96.8822V1.8705ZM96.8822 3.74099H98.8007V5.61149H96.8822V3.74099ZM96.8822 5.61149H98.8007V7.48199H96.8822V5.61149ZM96.8822 7.48199H98.8007V9.35249H96.8822V7.48199ZM96.8822 9.35249H98.8007V11.223H96.8822V9.35249ZM96.8822 11.223H98.8007V13.0935H96.8822V11.223ZM96.8822 13.0935H98.8007V14.964H96.8822V13.0935ZM96.8822 14.964H98.8007V16.8345H96.8822V14.964ZM96.8822 16.8345H98.8007V18.705H96.8822V16.8345ZM96.8822 18.705H98.8007V20.5755H96.8822V18.705ZM96.8822 20.5755H98.8007V22.446H96.8822V20.5755ZM96.8822 22.446H98.8007V24.3165H96.8822V22.446ZM96.8822 24.3165H98.8007V26.187H96.8822V24.3165ZM96.8822 26.187H98.8007V28.0575H96.8822V26.187ZM94.9637 26.187H96.8822V28.0575H94.9637V26.187ZM94.9637 24.3165H96.8822V26.187H94.9637V24.3165ZM94.9637 22.446H96.8822V24.3165H94.9637V22.446ZM94.9637 1.8705H96.8822V3.74099H94.9637V1.8705ZM94.9637 0H96.8822V1.8705H94.9637V0ZM94.9637 3.74099H96.8822V5.61149H94.9637V3.74099ZM94.9637 5.61149H96.8822V7.48199H94.9637V5.61149ZM94.9637 7.48199H96.8822V9.35249H94.9637V7.48199ZM94.9637 9.35249H96.8822V11.223H94.9637V9.35249ZM94.9637 11.223H96.8822V13.0935H94.9637V11.223ZM94.9637 13.0935H96.8822V14.964H94.9637V13.0935ZM94.9637 14.964H96.8822V16.8345H94.9637V14.964ZM94.9637 16.8345H96.8822V18.705H94.9637V16.8345ZM94.9637 18.705H96.8822V20.5755H94.9637V18.705ZM94.9637 20.5755H96.8822V22.446H94.9637V20.5755ZM98.8007 26.187H100.719V28.0575H98.8007V26.187ZM98.8007 24.3165H100.719V26.187H98.8007V24.3165ZM98.8007 22.446H100.719V24.3165H98.8007V22.446ZM98.8007 20.5755H100.719V22.446H98.8007V20.5755ZM98.8007 16.8345H100.719V18.705H98.8007V16.8345ZM98.8007 14.964H100.719V16.8345H98.8007V14.964ZM98.8007 13.0935H100.719V14.964H98.8007V13.0935ZM98.8007 11.223H100.719V13.0935H98.8007V11.223ZM98.8007 9.35249H100.719V11.223H98.8007V9.35249ZM98.8007 7.48199H100.719V9.35249H98.8007V7.48199ZM98.8007 0H100.719V1.8705H98.8007V0ZM98.8007 1.8705H100.719V3.74099H98.8007V1.8705ZM98.8007 3.74099H100.719V5.61149H98.8007V3.74099ZM98.8007 5.61149H100.719V7.48199H98.8007V5.61149ZM98.8007 18.705H100.719V20.5755H98.8007V18.705ZM100.719 26.187H102.638V28.0575H100.719V26.187ZM102.638 26.187H104.556V28.0575H102.638V26.187ZM104.556 26.187H106.474V28.0575H104.556V26.187ZM104.556 24.3165H106.474V26.187H104.556V24.3165ZM104.556 22.446H106.474V24.3165H104.556V22.446ZM102.638 22.446H104.556V24.3165H102.638V22.446ZM102.638 24.3165H104.556V26.187H102.638V24.3165ZM100.719 24.3165H102.638V26.187H100.719V24.3165ZM100.719 22.446H102.638V24.3165H100.719V22.446ZM106.474 22.446H108.393V24.3165H106.474V22.446ZM106.474 24.3165H108.393V26.187H106.474V24.3165ZM106.474 26.187H108.393V28.0575H106.474V26.187ZM108.393 26.187H110.311V28.0575H108.393V26.187ZM108.393 24.3165H110.311V26.187H108.393V24.3165ZM108.393 22.446H110.311V24.3165H108.393V22.446ZM110.311 22.446H112.23V24.3165H110.311V22.446ZM110.311 24.3165H112.23V26.187H110.311V24.3165ZM110.311 26.187H112.23V28.0575H110.311V26.187ZM100.719 0H102.638V1.8705H100.719V0ZM102.638 0H104.556V1.8705H102.638V0ZM104.556 0H106.474V1.8705H104.556V0ZM106.474 0H108.393V1.8705H106.474V0ZM108.393 0H110.311V1.8705H108.393V0ZM110.311 0H112.23V1.8705H110.311V0ZM110.311 1.8705H112.23V3.74099H110.311V1.8705ZM110.311 3.74099H112.23V5.61149H110.311V3.74099ZM108.393 3.74099H110.311V5.61149H108.393V3.74099ZM106.474 3.74099H108.393V5.61149H106.474V3.74099ZM104.556 3.74099H106.474V5.61149H104.556V3.74099ZM102.638 3.74099H104.556V5.61149H102.638V3.74099ZM102.638 1.8705H104.556V3.74099H102.638V1.8705ZM100.719 1.8705H102.638V3.74099H100.719V1.8705ZM100.719 3.74099H102.638V5.61149H100.719V3.74099ZM104.556 1.8705H106.474V3.74099H104.556V1.8705ZM106.474 1.8705H108.393V3.74099H106.474V1.8705ZM108.393 1.8705H110.311V3.74099H108.393V1.8705ZM100.719 11.223H102.638V13.0935H100.719V11.223ZM100.719 13.0935H102.638V14.964H100.719V13.0935ZM100.719 14.964H102.638V16.8345H100.719V14.964ZM102.638 14.964H104.556V16.8345H102.638V14.964ZM102.638 13.0935H104.556V14.964H102.638V13.0935ZM102.638 11.223H104.556V13.0935H102.638V11.223ZM104.556 11.223H106.474V13.0935H104.556V11.223ZM104.556 13.0935H106.474V14.964H104.556V13.0935ZM106.474 13.0935H108.393V14.964H106.474V13.0935ZM106.474 11.223H108.393V13.0935H106.474V11.223ZM106.474 14.964H108.393V16.8345H106.474V14.964ZM104.556 14.964H106.474V16.8345H104.556V14.964ZM108.393 11.223H110.311V13.0935H108.393V11.223ZM108.393 13.0935H110.311V14.964H108.393V13.0935ZM108.393 14.964H110.311V16.8345H108.393V14.964Z" fill="white"/>
<path d="M73.381 0H75.2994V1.8705H73.381V0ZM75.2994 0H77.2179V1.8705H75.2994V0ZM75.2994 1.8705H77.2179V3.74099H75.2994V1.8705ZM77.2179 1.8705H79.1364V3.74099H77.2179V1.8705ZM77.2179 3.74099H79.1364V5.61149H77.2179V3.74099ZM77.2179 0H79.1364V1.8705H77.2179V0ZM73.381 1.8705H75.2994V3.74099H73.381V1.8705ZM73.381 3.74099H75.2994V5.61149H73.381V3.74099ZM73.381 5.61149H75.2994V7.48199H73.381V5.61149ZM73.381 7.48199H75.2994V9.35249H73.381V7.48199ZM75.2994 7.48199H77.2179V9.35249H75.2994V7.48199ZM75.2994 5.61149H77.2179V7.48199H75.2994V5.61149ZM77.2179 5.61149H79.1364V7.48199H77.2179V5.61149ZM75.2994 3.74099H77.2179V5.61149H75.2994V3.74099ZM77.2179 7.48199H79.1364V9.35249H77.2179V7.48199ZM77.2179 9.35249H79.1364V11.223H77.2179V9.35249ZM75.2994 9.35249H77.2179V11.223H75.2994V9.35249ZM75.2994 11.223H77.2179V13.0935H75.2994V11.223ZM73.381 9.35249H75.2994V11.223H73.381V9.35249ZM73.381 11.223H75.2994V13.0935H73.381V11.223ZM73.381 13.0935H75.2994V14.964H73.381V13.0935ZM73.381 14.964H75.2994V16.8345H73.381V14.964ZM73.381 16.8345H75.2994V18.705H73.381V16.8345ZM73.381 18.705H75.2994V20.5755H73.381V18.705ZM73.381 20.5755H75.2994V22.446H73.381V20.5755ZM73.381 26.187H75.2994V28.0575H73.381V26.187ZM73.381 24.3165H75.2994V26.187H73.381V24.3165ZM73.381 22.446H75.2994V24.3165H73.381V22.446ZM75.2994 22.446H77.2179V24.3165H75.2994V22.446ZM77.2179 22.446H79.1364V24.3165H77.2179V22.446ZM77.2179 24.3165H79.1364V26.187H77.2179V24.3165ZM77.2179 26.187H79.1364V28.0575H77.2179V26.187ZM75.2994 26.187H77.2179V28.0575H75.2994V26.187ZM75.2994 24.3165H77.2179V26.187H75.2994V24.3165ZM84.8917 20.5755H86.8102V22.446H84.8917V20.5755ZM84.8917 22.446H86.8102V24.3165H84.8917V22.446ZM84.8917 24.3165H86.8102V26.187H84.8917V24.3165ZM84.8917 26.187H86.8102V28.0575H84.8917V26.187ZM86.8102 26.187H88.7286V28.0575H86.8102V26.187ZM88.7286 26.187H90.6471V28.0575H88.7286V26.187ZM88.7286 24.3165H90.6471V26.187H88.7286V24.3165ZM88.7286 22.446H90.6471V24.3165H88.7286V22.446ZM86.8102 22.446H88.7286V24.3165H86.8102V22.446ZM86.8102 24.3165H88.7286V26.187H86.8102V24.3165ZM86.8102 20.5755H88.7286V22.446H86.8102V20.5755ZM88.7286 20.5755H90.6471V22.446H88.7286V20.5755ZM88.7286 18.705H90.6471V20.5755H88.7286V18.705ZM88.7286 16.8345H90.6471V18.705H88.7286V16.8345ZM86.8102 16.8345H88.7286V18.705H86.8102V16.8345ZM86.8102 18.705H88.7286V20.5755H86.8102V18.705ZM84.8917 18.705H86.8102V20.5755H84.8917V18.705ZM84.8917 16.8345H86.8102V18.705H84.8917V16.8345ZM82.9733 16.8345H84.8917V18.705H82.9733V16.8345ZM84.8917 14.964H86.8102V16.8345H84.8917V14.964ZM86.8102 14.964H88.7286V16.8345H86.8102V14.964ZM82.9733 14.964H84.8917V16.8345H82.9733V14.964ZM81.0548 14.964H82.9733V16.8345H81.0548V14.964ZM79.1364 14.964H81.0548V16.8345H79.1364V14.964ZM77.2179 20.5755H79.1364V22.446H77.2179V20.5755ZM77.2179 18.705H79.1364V20.5755H77.2179V18.705ZM77.2179 16.8345H79.1364V18.705H77.2179V16.8345ZM77.2179 14.964H79.1364V16.8345H77.2179V14.964ZM75.2994 14.964H77.2179V16.8345H75.2994V14.964ZM75.2994 16.8345H77.2179V18.705H75.2994V16.8345ZM75.2994 18.705H77.2179V20.5755H75.2994V18.705ZM75.2994 20.5755H77.2179V22.446H75.2994V20.5755ZM75.2994 13.0935H77.2179V14.964H75.2994V13.0935ZM77.2179 13.0935H79.1364V14.964H77.2179V13.0935ZM79.1364 13.0935H81.0548V14.964H79.1364V13.0935ZM81.0548 13.0935H82.9733V14.964H81.0548V13.0935ZM82.9733 13.0935H84.8917V14.964H82.9733V13.0935ZM84.8917 13.0935H86.8102V14.964H84.8917V13.0935ZM82.9733 11.223H84.8917V13.0935H82.9733V11.223ZM81.0548 11.223H82.9733V13.0935H81.0548V11.223ZM79.1364 11.223H81.0548V13.0935H79.1364V11.223ZM77.2179 11.223H79.1364V13.0935H77.2179V11.223ZM84.8917 11.223H86.8102V13.0935H84.8917V11.223ZM86.8102 11.223H88.7286V13.0935H86.8102V11.223ZM84.8917 9.35249H86.8102V11.223H84.8917V9.35249ZM82.9733 9.35249H84.8917V11.223H82.9733V9.35249ZM86.8102 9.35249H88.7286V11.223H86.8102V9.35249ZM88.7286 9.35249H90.6471V11.223H88.7286V9.35249ZM88.7286 7.48199H90.6471V9.35249H88.7286V7.48199ZM88.7286 5.61149H90.6471V7.48199H88.7286V5.61149ZM88.7286 3.74099H90.6471V5.61149H88.7286V3.74099ZM84.8917 0H86.8102V1.8705H84.8917V0ZM86.8102 0H88.7286V1.8705H86.8102V0ZM88.7286 0H90.6471V1.8705H88.7286V0ZM88.7286 1.8705H90.6471V3.74099H88.7286V1.8705ZM86.8102 1.8705H88.7286V3.74099H86.8102V1.8705ZM84.8917 1.8705H86.8102V3.74099H84.8917V1.8705ZM84.8917 3.74099H86.8102V5.61149H84.8917V3.74099ZM84.8917 5.61149H86.8102V7.48199H84.8917V5.61149ZM84.8917 7.48199H86.8102V9.35249H84.8917V7.48199ZM86.8102 7.48199H88.7286V9.35249H86.8102V7.48199ZM86.8102 5.61149H88.7286V7.48199H86.8102V5.61149ZM86.8102 3.74099H88.7286V5.61149H86.8102V3.74099Z" fill="white"/>
<path d="M57.4099 0H59.3523V1.8705H57.4099V0ZM59.3523 0H61.2948V1.8705H59.3523V0ZM59.3523 1.8705H61.2948V3.74099H59.3523V1.8705ZM61.2948 1.8705H63.2372V3.74099H61.2948V1.8705ZM57.4099 1.8705H59.3523V3.74099H57.4099V1.8705ZM55.4675 1.8705H57.4099V3.74099H55.4675V1.8705ZM55.4675 3.74099H57.4099V5.61149H55.4675V3.74099ZM53.525 3.74099H55.4675V5.61149H53.525V3.74099ZM57.4099 3.74099H59.3523V5.61149H57.4099V3.74099ZM59.3523 3.74099H61.2948V5.61149H59.3523V3.74099ZM61.2948 3.74099H63.2372V5.61149H61.2948V3.74099ZM63.2372 3.74099H65.1796V5.61149H63.2372V3.74099ZM63.2372 5.61149H65.1796V7.48199H63.2372V5.61149ZM65.1796 5.61149H67.1221V7.48199H65.1796V5.61149ZM61.2948 5.61149H63.2372V7.48199H61.2948V5.61149ZM59.3523 5.61149H61.2948V7.48199H59.3523V5.61149ZM57.4099 5.61149H59.3523V7.48199H57.4099V5.61149ZM55.4675 5.61149H57.4099V7.48199H55.4675V5.61149ZM53.525 5.61149H55.4675V7.48199H53.525V5.61149ZM51.5826 5.61149H53.525V7.48199H51.5826V5.61149ZM55.4675 7.48199H57.4099V9.35249H55.4675V7.48199ZM53.525 7.48199H55.4675V9.35249H53.525V7.48199ZM51.5826 7.48199H53.525V9.35249H51.5826V7.48199ZM49.6401 7.48199H51.5826V9.35249H49.6401V7.48199ZM49.6401 9.35249H51.5826V11.223H49.6401V9.35249ZM49.6401 11.223H51.5826V13.0935H49.6401V11.223ZM51.5826 11.223H53.525V13.0935H51.5826V11.223ZM51.5826 9.35249H53.525V11.223H51.5826V9.35249ZM53.525 9.35249H55.4675V11.223H53.525V9.35249ZM53.525 11.223H55.4675V13.0935H53.525V11.223ZM53.525 13.0935H55.4675V14.964H53.525V13.0935ZM51.5826 13.0935H53.525V14.964H51.5826V13.0935ZM49.6401 13.0935H51.5826V14.964H49.6401V13.0935ZM49.6401 14.964H51.5826V16.8345H49.6401V14.964ZM51.5826 14.964H53.525V16.8345H51.5826V14.964ZM53.525 14.964H55.4675V16.8345H53.525V14.964ZM55.4675 14.964H57.4099V16.8345H55.4675V14.964ZM57.4099 14.964H59.3523V16.8345H57.4099V14.964ZM59.3523 14.964H61.2948V16.8345H59.3523V14.964ZM61.2948 14.964H63.2372V16.8345H61.2948V14.964ZM63.2372 13.0935H65.1796V14.964H63.2372V13.0935ZM65.1796 13.0935H67.1221V14.964H65.1796V13.0935ZM65.1796 14.964H67.1221V16.8345H65.1796V14.964ZM63.2372 14.964H65.1796V16.8345H63.2372V14.964ZM67.1221 14.964H69.0645V16.8345H67.1221V14.964ZM67.1221 13.0935H69.0645V14.964H67.1221V13.0935ZM67.1221 11.223H69.0645V13.0935H67.1221V11.223ZM67.1221 9.35249H69.0645V11.223H67.1221V9.35249ZM67.1221 7.48199H69.0645V9.35249H67.1221V7.48199ZM65.1796 7.48199H67.1221V9.35249H65.1796V7.48199ZM63.2372 7.48199H65.1796V9.35249H63.2372V7.48199ZM61.2948 7.48199H63.2372V9.35249H61.2948V7.48199ZM65.1796 9.35249H67.1221V11.223H65.1796V9.35249ZM65.1796 11.223H67.1221V13.0935H65.1796V11.223ZM63.2372 11.223H65.1796V13.0935H63.2372V11.223ZM63.2372 9.35249H65.1796V11.223H63.2372V9.35249ZM49.6401 16.8345H51.5826V18.705H49.6401V16.8345ZM51.5826 16.8345H53.525V18.705H51.5826V16.8345ZM53.525 16.8345H55.4675V18.705H53.525V16.8345ZM55.4675 16.8345H57.4099V18.705H55.4675V16.8345ZM57.4099 16.8345H59.3523V18.705H57.4099V16.8345ZM59.3523 16.8345H61.2948V18.705H59.3523V16.8345ZM61.2948 16.8345H63.2372V18.705H61.2948V16.8345ZM63.2372 16.8345H65.1796V18.705H63.2372V16.8345ZM65.1796 16.8345H67.1221V18.705H65.1796V16.8345ZM67.1221 16.8345H69.0645V18.705H67.1221V16.8345ZM67.1221 18.705H69.0645V20.5755H67.1221V18.705ZM65.1796 18.705H67.1221V20.5755H65.1796V18.705ZM63.2372 18.705H65.1796V20.5755H63.2372V18.705ZM61.2948 18.705H63.2372V20.5755H61.2948V18.705ZM59.3523 18.705H61.2948V20.5755H59.3523V18.705ZM57.4099 18.705H59.3523V20.5755H57.4099V18.705ZM55.4675 18.705H57.4099V20.5755H55.4675V18.705ZM51.5826 18.705H53.525V20.5755H51.5826V18.705ZM49.6401 18.705H51.5826V20.5755H49.6401V18.705ZM53.525 18.705H55.4675V20.5755H53.525V18.705ZM53.525 20.5755H55.4675V22.446H53.525V20.5755ZM53.525 22.446H55.4675V24.3165H53.525V22.446ZM53.525 24.3165H55.4675V26.187H53.525V24.3165ZM53.525 26.187H55.4675V28.0575H53.525V26.187ZM51.5826 26.187H53.525V28.0575H51.5826V26.187ZM49.6401 26.187H51.5826V28.0575H49.6401V26.187ZM49.6401 24.3165H51.5826V26.187H49.6401V24.3165ZM49.6401 22.446H51.5826V24.3165H49.6401V22.446ZM49.6401 20.5755H51.5826V22.446H49.6401V20.5755ZM51.5826 20.5755H53.525V22.446H51.5826V20.5755ZM51.5826 22.446H53.525V24.3165H51.5826V22.446ZM51.5826 24.3165H53.525V26.187H51.5826V24.3165ZM63.2372 20.5755H65.1796V22.446H63.2372V20.5755ZM63.2372 22.446H65.1796V24.3165H63.2372V22.446ZM63.2372 24.3165H65.1796V26.187H63.2372V24.3165ZM63.2372 26.187H65.1796V28.0575H63.2372V26.187ZM65.1796 26.187H67.1221V28.0575H65.1796V26.187ZM67.1221 26.187H69.0645V28.0575H67.1221V26.187ZM67.1221 24.3165H69.0645V26.187H67.1221V24.3165ZM67.1221 22.446H69.0645V24.3165H67.1221V22.446ZM67.1221 20.5755H69.0645V22.446H67.1221V20.5755ZM65.1796 20.5755H67.1221V22.446H65.1796V20.5755ZM65.1796 22.446H67.1221V24.3165H65.1796V22.446ZM65.1796 24.3165H67.1221V26.187H65.1796V24.3165Z" fill="white"/>
<path d="M25.8992 0H27.665V1.8705H25.8992V0ZM27.665 0H29.4309V1.8705H27.665V0ZM29.4309 0H31.1967V1.8705H29.4309V0ZM31.1967 0H32.9626V1.8705H31.1967V0ZM31.1967 1.8705H32.9626V3.74099H31.1967V1.8705ZM31.1967 3.74099H32.9626V5.61149H31.1967V3.74099ZM31.1967 5.61149H32.9626V7.48199H31.1967V5.61149ZM25.8992 1.8705H27.665V3.74099H25.8992V1.8705ZM25.8992 3.74099H27.665V5.61149H25.8992V3.74099ZM25.8992 5.61149H27.665V7.48199H25.8992V5.61149ZM25.8992 9.35249H27.665V11.223H25.8992V9.35249ZM25.8992 11.223H27.665V13.0935H25.8992V11.223ZM25.8992 13.0935H27.665V14.964H25.8992V13.0935ZM25.8992 14.964H27.665V16.8345H25.8992V14.964ZM25.8992 16.8345H27.665V18.705H25.8992V16.8345ZM27.665 18.705H29.4309V20.5755H27.665V18.705ZM27.665 20.5755H29.4309V22.446H27.665V20.5755ZM27.665 22.446H29.4309V24.3165H27.665V22.446ZM27.665 24.3165H29.4309V26.187H27.665V24.3165ZM27.665 26.187H29.4309V28.0575H27.665V26.187ZM25.8992 7.48199H27.665V9.35249H25.8992V7.48199ZM25.8992 18.705H27.665V20.5755H25.8992V18.705ZM25.8992 20.5755H27.665V22.446H25.8992V20.5755ZM25.8992 22.446H27.665V24.3165H25.8992V22.446ZM25.8992 24.3165H27.665V26.187H25.8992V24.3165ZM25.8992 26.187H27.665V28.0575H25.8992V26.187ZM29.4309 26.187H31.1967V28.0575H29.4309V26.187ZM29.4309 24.3165H31.1967V26.187H29.4309V24.3165ZM29.4309 22.446H31.1967V24.3165H29.4309V22.446ZM29.4309 20.5755H31.1967V22.446H29.4309V20.5755ZM29.4309 16.8345H31.1967V18.705H29.4309V16.8345ZM29.4309 14.964H31.1967V16.8345H29.4309V14.964ZM29.4309 11.223H31.1967V13.0935H29.4309V11.223ZM29.4309 9.35249H31.1967V11.223H29.4309V9.35249ZM29.4309 7.48199H31.1967V9.35249H29.4309V7.48199ZM29.4309 13.0935H31.1967V14.964H29.4309V13.0935ZM29.4309 18.705H31.1967V20.5755H29.4309V18.705ZM27.665 16.8345H29.4309V18.705H27.665V16.8345ZM27.665 14.964H29.4309V16.8345H27.665V14.964ZM27.665 13.0935H29.4309V14.964H27.665V13.0935ZM27.665 11.223H29.4309V13.0935H27.665V11.223ZM27.665 9.35249H29.4309V11.223H27.665V9.35249ZM27.665 7.48199H29.4309V9.35249H27.665V7.48199ZM27.665 5.61149H29.4309V7.48199H27.665V5.61149ZM27.665 3.74099H29.4309V5.61149H27.665V3.74099ZM27.665 1.8705H29.4309V3.74099H27.665V1.8705ZM29.4309 1.8705H31.1967V3.74099H29.4309V1.8705ZM29.4309 3.74099H31.1967V5.61149H29.4309V3.74099ZM29.4309 5.61149H31.1967V7.48199H29.4309V5.61149ZM31.1967 7.48199H32.9626V9.35249H31.1967V7.48199ZM31.1967 9.35249H32.9626V11.223H31.1967V9.35249ZM32.9626 9.35249H34.7284V11.223H32.9626V9.35249ZM32.9626 11.223H34.7284V13.0935H32.9626V11.223ZM31.1967 11.223H32.9626V13.0935H31.1967V11.223ZM32.9626 7.48199H34.7284V9.35249H32.9626V7.48199ZM32.9626 5.61149H34.7284V7.48199H32.9626V5.61149ZM32.9626 3.74099H34.7284V5.61149H32.9626V3.74099ZM32.9626 13.0935H34.7284V14.964H32.9626V13.0935ZM34.7284 13.0935H36.4943V14.964H34.7284V13.0935ZM34.7284 11.223H36.4943V13.0935H34.7284V11.223ZM34.7284 9.35249H36.4943V11.223H34.7284V9.35249ZM34.7284 7.48199H36.4943V9.35249H34.7284V7.48199ZM32.9626 14.964H34.7284V16.8345H32.9626V14.964ZM34.7284 14.964H36.4943V16.8345H34.7284V14.964ZM36.4943 14.964H38.2601V16.8345H36.4943V14.964ZM36.4943 13.0935H38.2601V14.964H36.4943V13.0935ZM36.4943 11.223H38.2601V13.0935H36.4943V11.223ZM34.7284 18.705H36.4943V20.5755H34.7284V18.705ZM34.7284 16.8345H36.4943V18.705H34.7284V16.8345ZM36.4943 16.8345H38.2601V18.705H36.4943V16.8345ZM36.4943 18.705H38.2601V20.5755H36.4943V18.705ZM38.2601 16.8345H40.026V18.705H38.2601V16.8345ZM38.2601 14.964H40.026V16.8345H38.2601V14.964ZM38.2601 18.705H40.026V20.5755H38.2601V18.705ZM38.2601 20.5755H40.026V22.446H38.2601V20.5755ZM36.4943 20.5755H38.2601V22.446H36.4943V20.5755ZM36.4943 22.446H38.2601V24.3165H36.4943V22.446ZM38.2601 22.446H40.026V24.3165H38.2601V22.446ZM38.2601 24.3165H40.026V26.187H38.2601V24.3165ZM38.2601 26.187H40.026V28.0575H38.2601V26.187ZM40.026 26.187H41.7919V28.0575H40.026V26.187ZM41.7919 26.187H43.5577V28.0575H41.7919V26.187ZM43.5577 26.187H45.3236V28.0575H43.5577V26.187ZM43.5577 24.3165H45.3236V26.187H43.5577V24.3165ZM41.7919 22.446H43.5577V24.3165H41.7919V22.446ZM41.7919 20.5755H43.5577V22.446H41.7919V20.5755ZM41.7919 18.705H43.5577V20.5755H41.7919V18.705ZM41.7919 16.8345H43.5577V18.705H41.7919V16.8345ZM41.7919 14.964H43.5577V16.8345H41.7919V14.964ZM43.5577 18.705H45.3236V20.5755H43.5577V18.705ZM43.5577 20.5755H45.3236V22.446H43.5577V20.5755ZM43.5577 22.446H45.3236V24.3165H43.5577V22.446ZM41.7919 24.3165H43.5577V26.187H41.7919V24.3165ZM40.026 24.3165H41.7919V26.187H40.026V24.3165ZM40.026 22.446H41.7919V24.3165H40.026V22.446ZM40.026 20.5755H41.7919V22.446H40.026V20.5755ZM40.026 18.705H41.7919V20.5755H40.026V18.705ZM40.026 16.8345H41.7919V18.705H40.026V16.8345ZM40.026 14.964H41.7919V16.8345H40.026V14.964ZM40.026 13.0935H41.7919V14.964H40.026V13.0935ZM41.7919 13.0935H43.5577V14.964H41.7919V13.0935ZM43.5577 16.8345H45.3236V18.705H43.5577V16.8345ZM43.5577 14.964H45.3236V16.8345H43.5577V14.964ZM43.5577 13.0935H45.3236V14.964H43.5577V13.0935ZM43.5577 11.223H45.3236V13.0935H43.5577V11.223ZM43.5577 9.35249H45.3236V11.223H43.5577V9.35249ZM43.5577 7.48199H45.3236V9.35249H43.5577V7.48199Line truncated
<path d="M15.6965 0H17.6585V1.8705H15.6965V0ZM13.7344 0H15.6965V1.8705H13.7344V0ZM11.7724 0H13.7344V1.8705H11.7724V0ZM7.84824 0H9.8103V1.8705H7.84824V0ZM5.88618 0H7.84824V1.8705H5.88618V0ZM3.92412 0H5.88618V1.8705H3.92412V0ZM9.8103 0H11.7724V1.8705H9.8103V0ZM9.8103 1.8705H11.7724V3.74099H9.8103V1.8705ZM11.7724 1.8705H13.7344V3.74099H11.7724V1.8705ZM13.7344 1.8705H15.6965V3.74099H13.7344V1.8705ZM15.6965 1.8705H17.6585V3.74099H15.6965V1.8705ZM17.6585 1.8705H19.6206V3.74099H17.6585V1.8705ZM7.84824 1.8705H9.8103V3.74099H7.84824V1.8705ZM5.88618 1.8705H7.84824V3.74099H5.88618V1.8705ZM3.92412 1.8705H5.88618V3.74099H3.92412V1.8705ZM1.96206 1.8705H3.92412V3.74099H1.96206V1.8705ZM0 3.74099H1.96206V5.61149H0V3.74099ZM1.96206 3.74099H3.92412V5.61149H1.96206V3.74099ZM3.92412 3.74099H5.88618V5.61149H3.92412V3.74099ZM5.88618 3.74099H7.84824V5.61149H5.88618V3.74099ZM7.84824 3.74099H9.8103V5.61149H7.84824V3.74099ZM9.8103 3.74099H11.7724V5.61149H9.8103V3.74099ZM11.7724 3.74099H13.7344V5.61149H11.7724V3.74099ZM13.7344 3.74099H15.6965V5.61149H13.7344V3.74099ZM15.6965 3.74099H17.6585V5.61149H15.6965V3.74099ZM17.6585 3.74099H19.6206V5.61149H17.6585V3.74099ZM19.6206 3.74099H21.5827V5.61149H19.6206V3.74099ZM19.6206 5.61149H21.5827V7.48199H19.6206V5.61149ZM19.6206 7.48199H21.5827V9.35249H19.6206V7.48199ZM17.6585 7.48199H19.6206V9.35249H17.6585V7.48199ZM17.6585 5.61149H19.6206V7.48199H17.6585V5.61149ZM15.6965 7.48199H17.6585V9.35249H15.6965V7.48199ZM15.6965 5.61149H17.6585V7.48199H15.6965V5.61149ZM13.7344 5.61149H15.6965V7.48199H13.7344V5.61149ZM5.88618 5.61149H7.84824V7.48199H5.88618V5.61149ZM3.92412 5.61149H5.88618V7.48199H3.92412V5.61149ZM1.96206 5.61149H3.92412V7.48199H1.96206V5.61149ZM0 5.61149H1.96206V7.48199H0V5.61149ZM0 7.48199H1.96206V9.35249H0V7.48199ZM1.96206 7.48199H3.92412V9.35249H1.96206V7.48199ZM1.96206 9.35249H3.92412V11.223H1.96206V9.35249ZM3.92412 7.48199H5.88618V9.35249H3.92412V7.48199ZM3.92412 9.35249H5.88618V11.223H3.92412V9.35249ZM5.88618 9.35249H7.84824V11.223H5.88618V9.35249ZM0 9.35249H1.96206V11.223H0V9.35249ZM0 11.223H1.96206V13.0935H0V11.223ZM1.96206 11.223H3.92412V13.0935H1.96206V11.223ZM1.96206 13.0935H3.92412V14.964H1.96206V13.0935ZM3.92412 13.0935H5.88618V14.964H3.92412V13.0935ZM3.92412 11.223H5.88618V13.0935H3.92412V11.223ZM5.88618 11.223H7.84824V13.0935H5.88618V11.223ZM5.88618 13.0935H7.84824V14.964H5.88618V13.0935ZM3.92412 14.964H5.88618V16.8345H3.92412V14.964ZM5.88618 14.964H7.84824V16.8345H5.88618V14.964ZM7.84824 14.964H9.8103V16.8345H7.84824V14.964ZM9.8103 14.964H11.7724V16.8345H9.8103V14.964ZM11.7724 14.964H13.7344V16.8345H11.7724V14.964ZM11.7724 13.0935H13.7344V14.964H11.7724V13.0935ZM13.7344 13.0935H15.6965V14.964H13.7344V13.0935ZM15.6965 13.0935H17.6585V14.964H15.6965V13.0935ZM15.6965 11.223H17.6585V13.0935H15.6965V11.223ZM13.7344 11.223H15.6965V13.0935H13.7344V11.223ZM11.7724 11.223H13.7344V13.0935H11.7724V11.223ZM9.8103 11.223H11.7724V13.0935H9.8103V11.223ZM9.8103 13.0935H11.7724V14.964H9.8103V13.0935ZM7.84824 13.0935H9.8103V14.964H7.84824V13.0935ZM7.84824 11.223H9.8103V13.0935H7.84824V11.223ZM17.6585 13.0935H19.6206V14.964H17.6585V13.0935ZM17.6585 14.964H19.6206V16.8345H17.6585V14.964ZM15.6965 14.964H17.6585V16.8345H15.6965V14.964ZM15.6965 16.8345H17.6585V18.705H15.6965V16.8345ZM13.7344 16.8345H15.6965V18.705H13.7344V16.8345ZM13.7344 14.964H15.6965V16.8345H13.7344V14.964ZM17.6585 16.8345H19.6206V18.705H17.6585V16.8345ZM19.6206 16.8345H21.5827V18.705H19.6206V16.8345ZM19.6206 14.964H21.5827V16.8345H19.6206V14.964ZM19.6206 18.705H21.5827V20.5755H19.6206V18.705ZM19.6206 20.5755H21.5827V22.446H19.6206V20.5755ZM19.6206 22.446H21.5827V24.3165H19.6206V22.446ZM17.6585 22.446H19.6206V24.3165H17.6585V22.446ZM17.6585 24.3165H19.6206V26.187H17.6585V24.3165ZM15.6965 24.3165H17.6585V26.187H15.6965V24.3165ZM15.6965 22.446H17.6585V24.3165H15.6965V22.446ZM13.7344 22.446H15.6965V24.3165H13.7344V22.446ZM13.7344 20.5755H15.6965V22.446H13.7344V20.5755ZM15.6965 20.5755H17.6585V22.446H15.6965V20.5755ZM15.6965 18.705H17.6585V20.5755H15.6965V18.705ZM17.6585 18.705H19.6206V20.5755H17.6585V18.705ZM17.6585 20.5755H19.6206V22.446H17.6585V20.5755ZM0 18.705H1.96206V20.5755H0V18.705ZM0 20.5755H1.96206V22.446H0V20.5755ZM1.96206 20.5755H3.92412V22.446H1.96206V20.5755ZM1.96206 18.705H3.92412V20.5755H1.96206V18.705ZM3.92412 18.705H5.88618V20.5755H3.92412V18.705ZM3.92412 20.5755H5.88618V22.446H3.92412V20.5755ZM0 22.446H1.96206V24.3165H0V22.446ZM1.96206 22.446H3.92412V24.3165H1.96206V22.446ZM5.88618 20.5755H7.84824V22.446H5.88618V20.5755ZM5.88618 22.446H7.84824V24.3165H5.88618V22.446ZM3.92412 22.446H5.88618V24.3165H3.92412V22.446ZM3.92412 24.3165H5.88618V26.187H3.92412V24.3165ZM1.96206 24.3165H3.92412V26.187H1.96206V24.3165ZM3.92412 26.187H5.88618V28.0575H3.92412V26.187ZM5.88618 26.187H7.84824V28.0575H5.88618V26.187ZM7.84824 26.187H9.8103V28.0575H7.84824V26.187ZM9.8103 26.187H11.7724V28.0575H9.8103V26.187ZM11.7724 26.187H13.7344V28.0575H11.7724V26.187ZM13.7344 26.187H15.6965V28.0575H13.7344V26.187ZM15.6965 26.187H17.6585V28.05Line truncated
</svg>

Before

Width:  |  Height:  |  Size: 62 KiB

-152
View File
@@ -1,152 +0,0 @@
<svg width="333" height="112" viewBox="0 0 333 112" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M20.0834 5.03542H312.917V10.055L317.91 10.0573V15.0791L322.901 15.0814V20.101H327.952V91.7364L322.901 91.7091V96.7287H317.91V101.753H312.917V106.775H20.0834V101.755H15.0901V96.7333H10.099V91.7091H5.04839V20.101H10.099V15.0814H15.0901V10.0573H20.0834V5.03542Z" fill="#05A38C"/>
<path d="M25.1295 0.0112594H20.0812V5.03084H25.1295V0.0112594Z" fill="#5DD5A2"/>
<path d="M20.0811 5.03542H15.0328V10.055H20.0811V5.03542Z" fill="#5DD5A2"/>
<path d="M15.09 10.0576H10.0417V15.0772H15.09V10.0576Z" fill="#5DD5A2"/>
<path d="M10.0967 15.0815H5.04839V20.1011H10.0967V15.0815Z" fill="#5DD5A2"/>
<path d="M5.0483 20.1011H0V25.1206H5.0483V20.1011Z" fill="#5DD5A2"/>
<path d="M5.0483 25.0978H0V30.1174H5.0483V25.0978Z" fill="#5DD5A2"/>
<path d="M5.0483 30.0948H0V35.1144H5.0483V30.0948Z" fill="#5DD5A2"/>
<path d="M5.0483 35.0937H0V40.1133H5.0483V35.0937Z" fill="#5DD5A2"/>
<path d="M25.1295 106.305H20.0812V111.324H25.1295V106.305Z" fill="#5DD5A2"/>
<path d="M30.1777 106.305H25.1294V111.324H30.1777V106.305Z" fill="#5DD5A2"/>
<path d="M35.2283 106.305H30.18V111.324H35.2283V106.305Z" fill="#5DD5A2"/>
<path d="M40.2767 106.305H35.2284V111.324H40.2767V106.305Z" fill="#5DD5A2"/>
<path d="M45.3248 106.305H40.2765V111.324H45.3248V106.305Z" fill="#5DD5A2"/>
<path d="M50.3732 106.305H45.3249V111.324H50.3732V106.305Z" fill="#5DD5A2"/>
<path d="M55.4238 106.305H50.3755V111.324H55.4238V106.305Z" fill="#5DD5A2"/>
<path d="M60.4722 106.305H55.4239V111.324H60.4722V106.305Z" fill="#5DD5A2"/>
<path d="M65.5203 106.305H60.472V111.324H65.5203V106.305Z" fill="#5DD5A2"/>
<path d="M70.5709 106.305H65.5226V111.324H70.5709V106.305Z" fill="#5DD5A2"/>
<path d="M75.6191 106.305H70.5708V111.324H75.6191V106.305Z" fill="#5DD5A2"/>
<path d="M80.6675 106.305H75.6192V111.324H80.6675V106.305Z" fill="#5DD5A2"/>
<path d="M85.7156 106.305H80.6673V111.324H85.7156V106.305Z" fill="#5DD5A2"/>
<path d="M90.7665 106.305H85.7182V111.324H90.7665V106.305Z" fill="#5DD5A2"/>
<path d="M95.8146 106.305H90.7663V111.324H95.8146V106.305Z" fill="#5DD5A2"/>
<path d="M100.863 106.305H95.8147V111.324H100.863V106.305Z" fill="#5DD5A2"/>
<path d="M105.911 106.305H100.863V111.324H105.911V106.305Z" fill="#5DD5A2"/>
<path d="M110.962 106.305H105.914V111.324H110.962V106.305Z" fill="#5DD5A2"/>
<path d="M116.01 106.305H110.962V111.324H116.01V106.305Z" fill="#5DD5A2"/>
<path d="M121.059 106.305H116.01V111.324H121.059V106.305Z" fill="#5DD5A2"/>
<path d="M126.109 106.305H121.061V111.324H126.109V106.305Z" fill="#5DD5A2"/>
<path d="M131.157 106.305H126.109V111.324H131.157V106.305Z" fill="#5DD5A2"/>
<path d="M136.205 106.305H131.157V111.324H136.205V106.305Z" fill="#5DD5A2"/>
<path d="M141.254 106.305H136.206V111.324H141.254V106.305Z" fill="#5DD5A2"/>
<path d="M146.304 106.305H141.256V111.324H146.304V106.305Z" fill="#5DD5A2"/>
<path d="M151.353 106.305H146.305V111.324H151.353V106.305Z" fill="#5DD5A2"/>
<path d="M156.401 106.305H151.353V111.324H156.401V106.305Z" fill="#5DD5A2"/>
<path d="M161.449 106.305H156.401V111.324H161.449V106.305Z" fill="#5DD5A2"/>
<path d="M166.5 106.305H161.452V111.324H166.5V106.305Z" fill="#5DD5A2"/>
<path d="M171.548 106.305H166.5V111.324H171.548V106.305Z" fill="#5DD5A2"/>
<path d="M176.597 106.305H171.548V111.324H176.597V106.305Z" fill="#5DD5A2"/>
<path d="M181.647 106.305H176.599V111.324H181.647V106.305Z" fill="#5DD5A2"/>
<path d="M186.695 106.305H181.647V111.324H186.695V106.305Z" fill="#5DD5A2"/>
<path d="M191.744 106.305H186.696V111.324H191.744V106.305Z" fill="#5DD5A2"/>
<path d="M196.792 106.305H191.744V111.324H196.792V106.305Z" fill="#5DD5A2"/>
<path d="M201.843 106.305H196.794V111.324H201.843V106.305Z" fill="#5DD5A2"/>
<path d="M206.891 106.305H201.843V111.324H206.891V106.305Z" fill="#5DD5A2"/>
<path d="M211.939 106.305H206.891V111.324H211.939V106.305Z" fill="#5DD5A2"/>
<path d="M216.988 106.305H211.94V111.324H216.988V106.305Z" fill="#5DD5A2"/>
<path d="M222.038 106.305H216.99V111.324H222.038V106.305Z" fill="#5DD5A2"/>
<path d="M227.087 106.305H222.038V111.324H227.087V106.305Z" fill="#5DD5A2"/>
<path d="M232.135 106.305H227.086V111.324H232.135V106.305Z" fill="#5DD5A2"/>
<path d="M237.186 106.305H232.137V111.324H237.186V106.305Z" fill="#5DD5A2"/>
<path d="M242.234 106.305H237.185V111.324H242.234V106.305Z" fill="#5DD5A2"/>
<path d="M247.282 106.305H242.234V111.324H247.282V106.305Z" fill="#5DD5A2"/>
<path d="M252.33 106.305H247.282V111.324H252.33V106.305Z" fill="#5DD5A2"/>
<path d="M257.381 106.305H252.333V111.324H257.381V106.305Z" fill="#5DD5A2"/>
<path d="M262.429 106.305H257.381V111.324H262.429V106.305Z" fill="#5DD5A2"/>
<path d="M267.478 106.305H262.429V111.324H267.478V106.305Z" fill="#5DD5A2"/>
<path d="M272.526 106.305H267.477V111.324H272.526V106.305Z" fill="#5DD5A2"/>
<path d="M277.576 106.305H272.528V111.324H277.576V106.305Z" fill="#5DD5A2"/>
<path d="M282.625 106.305H277.576V111.324H282.625V106.305Z" fill="#5DD5A2"/>
<path d="M287.673 106.305H282.625V111.324H287.673V106.305Z" fill="#5DD5A2"/>
<path d="M292.724 106.305H287.675V111.324H292.724V106.305Z" fill="#5DD5A2"/>
<path d="M297.772 106.305H292.724V111.324H297.772V106.305Z" fill="#5DD5A2"/>
<path d="M302.82 106.305H297.772V111.324H302.82V106.305Z" fill="#5DD5A2"/>
<path d="M307.868 106.305H302.82V111.324H307.868V106.305Z" fill="#5DD5A2"/>
<path d="M30.1777 0H25.1294V5.01958H30.1777V0Z" fill="#5DD5A2"/>
<path d="M35.2283 0H30.18V5.01958H35.2283V0Z" fill="#5DD5A2"/>
<path d="M40.2767 0H35.2284V5.01958H40.2767V0Z" fill="#5DD5A2"/>
<path d="M45.3248 0H40.2765V5.01958H45.3248V0Z" fill="#5DD5A2"/>
<path d="M50.3732 0H45.3249V5.01958H50.3732V0Z" fill="#5DD5A2"/>
<path d="M55.4238 0H50.3755V5.01958H55.4238V0Z" fill="#5DD5A2"/>
<path d="M60.4722 0H55.4239V5.01958H60.4722V0Z" fill="#5DD5A2"/>
<path d="M65.5203 0H60.472V5.01958H65.5203V0Z" fill="#5DD5A2"/>
<path d="M70.5709 0H65.5226V5.01958H70.5709V0Z" fill="#5DD5A2"/>
<path d="M75.6191 0H70.5708V5.01958H75.6191V0Z" fill="#5DD5A2"/>
<path d="M80.6675 0H75.6192V5.01958H80.6675V0Z" fill="#5DD5A2"/>
<path d="M85.7156 0H80.6673V5.01958H85.7156V0Z" fill="#5DD5A2"/>
<path d="M90.7665 0H85.7182V5.01958H90.7665V0Z" fill="#5DD5A2"/>
<path d="M95.8146 0H90.7663V5.01958H95.8146V0Z" fill="#5DD5A2"/>
<path d="M100.863 0H95.8147V5.01958H100.863V0Z" fill="#5DD5A2"/>
<path d="M105.911 0H100.863V5.01958H105.911V0Z" fill="#5DD5A2"/>
<path d="M110.962 0H105.914V5.01958H110.962V0Z" fill="#5DD5A2"/>
<path d="M116.01 0H110.962V5.01958H116.01V0Z" fill="#5DD5A2"/>
<path d="M121.059 0H116.01V5.01958H121.059V0Z" fill="#5DD5A2"/>
<path d="M126.109 0H121.061V5.01958H126.109V0Z" fill="#5DD5A2"/>
<path d="M131.157 0H126.109V5.01958H131.157V0Z" fill="#5DD5A2"/>
<path d="M136.205 0H131.157V5.01958H136.205V0Z" fill="#5DD5A2"/>
<path d="M141.254 0H136.206V5.01958H141.254V0Z" fill="#5DD5A2"/>
<path d="M146.304 0H141.256V5.01958H146.304V0Z" fill="#5DD5A2"/>
<path d="M151.353 0H146.305V5.01958H151.353V0Z" fill="#5DD5A2"/>
<path d="M156.401 0H151.353V5.01958H156.401V0Z" fill="#5DD5A2"/>
<path d="M161.449 0H156.401V5.01958H161.449V0Z" fill="#5DD5A2"/>
<path d="M166.5 0H161.452V5.01958H166.5V0Z" fill="#5DD5A2"/>
<path d="M171.548 0H166.5V5.01958H171.548V0Z" fill="#5DD5A2"/>
<path d="M176.597 0H171.548V5.01958H176.597V0Z" fill="#5DD5A2"/>
<path d="M181.647 0H176.599V5.01958H181.647V0Z" fill="#5DD5A2"/>
<path d="M186.695 0H181.647V5.01958H186.695V0Z" fill="#5DD5A2"/>
<path d="M191.744 0H186.696V5.01958H191.744V0Z" fill="#5DD5A2"/>
<path d="M196.792 0H191.744V5.01958H196.792V0Z" fill="#5DD5A2"/>
<path d="M201.843 0H196.794V5.01958H201.843V0Z" fill="#5DD5A2"/>
<path d="M206.891 0H201.843V5.01958H206.891V0Z" fill="#5DD5A2"/>
<path d="M211.939 0H206.891V5.01958H211.939V0Z" fill="#5DD5A2"/>
<path d="M216.988 0H211.94V5.01958H216.988V0Z" fill="#5DD5A2"/>
<path d="M222.038 0H216.99V5.01958H222.038V0Z" fill="#5DD5A2"/>
<path d="M227.087 0H222.038V5.01958H227.087V0Z" fill="#5DD5A2"/>
<path d="M232.135 0H227.086V5.01958H232.135V0Z" fill="#5DD5A2"/>
<path d="M237.186 0H232.137V5.01958H237.186V0Z" fill="#5DD5A2"/>
<path d="M242.234 0H237.185V5.01958H242.234V0Z" fill="#5DD5A2"/>
<path d="M247.282 0H242.234V5.01958H247.282V0Z" fill="#5DD5A2"/>
<path d="M252.33 0H247.282V5.01958H252.33V0Z" fill="#5DD5A2"/>
<path d="M257.381 0H252.333V5.01958H257.381V0Z" fill="#5DD5A2"/>
<path d="M262.429 0H257.381V5.01958H262.429V0Z" fill="#5DD5A2"/>
<path d="M267.478 0H262.429V5.01958H267.478V0Z" fill="#5DD5A2"/>
<path d="M272.526 0H267.477V5.01958H272.526V0Z" fill="#5DD5A2"/>
<path d="M277.576 0H272.528V5.01958H277.576V0Z" fill="#5DD5A2"/>
<path d="M282.625 0H277.576V5.01958H282.625V0Z" fill="#5DD5A2"/>
<path d="M287.673 0H282.625V5.01958H287.673V0Z" fill="#5DD5A2"/>
<path d="M292.724 0H287.675V5.01958H292.724V0Z" fill="#5DD5A2"/>
<path d="M297.772 0H292.724V5.01958H297.772V0Z" fill="#5DD5A2"/>
<path d="M302.82 0H297.772V5.01958H302.82V0Z" fill="#5DD5A2"/>
<path d="M307.868 0H302.82V5.01958H307.868V0Z" fill="#5DD5A2"/>
<path d="M20.0811 101.281H15.0328V106.3H20.0811V101.281Z" fill="#5DD5A2"/>
<path d="M15.09 96.259H10.0417V101.279H15.09V96.259Z" fill="#5DD5A2"/>
<path d="M10.0967 91.2348H5.04839V96.2544H10.0967V91.2348Z" fill="#5DD5A2"/>
<path d="M5.0129 50.129H0V91.2348H5.0129V50.129Z" fill="#5DD5A2"/>
<path d="M5.0483 45.1146H0V50.1342H5.0483V45.1146Z" fill="#5DD5A2"/>
<path d="M5.0483 40.1157H0V45.1353H5.0483V40.1157Z" fill="#5DD5A2"/>
<path d="M312.919 0.0112594H307.871V5.03084H312.919V0.0112594Z" fill="#5DD5A2"/>
<path d="M317.965 5.03542H312.916V10.055H317.965V5.03542Z" fill="#5DD5A2"/>
<path d="M322.958 10.0576H317.91V15.0772H322.958V10.0576Z" fill="#5DD5A2"/>
<path d="M327.949 15.0815H322.901V20.1011H327.949V15.0815Z" fill="#5DD5A2"/>
<path d="M333 20.1011H327.952V25.1206H333V20.1011Z" fill="#5DD5A2"/>
<path d="M333 25.0978H327.952V30.1174H333V25.0978Z" fill="#5DD5A2"/>
<path d="M333 30.0948H327.952V35.1144H333V30.0948Z" fill="#5DD5A2"/>
<path d="M333 35.0937H327.952V40.1133H333V35.0937Z" fill="#5DD5A2"/>
<path d="M312.919 106.305H307.871V111.324H312.919V106.305Z" fill="#5DD5A2"/>
<path d="M317.965 101.281H312.916V106.3H317.965V101.281Z" fill="#5DD5A2"/>
<path d="M322.958 96.259H317.91V101.279H322.958V96.259Z" fill="#5DD5A2"/>
<path d="M327.949 91.2348H322.901V96.2544H327.949V91.2348Z" fill="#5DD5A2"/>
<path d="M332.857 50.129H327.844V91.2348H332.857V50.129Z" fill="#5DD5A2"/>
<path d="M333 45.1146H327.952V50.1342H333V45.1146Z" fill="#5DD5A2"/>
<path d="M333 40.1157H327.952V45.1353H333V40.1157Z" fill="#5DD5A2"/>
<path d="M20.0811 20.1033H15.0328V25.1228H20.0811V20.1033Z" fill="#E6F4E6"/>
<path d="M15.0464 25.1115H9.99814V30.1311H15.0464V25.1115Z" fill="#E6F4E6"/>
<path d="M15.0464 30.1176H9.99814V35.1371H15.0464V30.1176Z" fill="#E6F4E6"/>
<path d="M25.1295 15.0793H20.0812V20.0989H25.1295V15.0793Z" fill="#E6F4E6"/>
<path d="M30.1777 10.0576H25.1294V15.0772H30.1777V10.0576Z" fill="#E6F4E6"/>
<path d="M35.2283 10.0576H30.18V15.0772H35.2283V10.0576Z" fill="#E6F4E6"/>
<path d="M40.2767 10.0576H35.2284V15.0772H40.2767V10.0576Z" fill="#E6F4E6"/>
</svg>

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

-3
View File
@@ -1,3 +0,0 @@
<svg width="3" height="3" viewBox="0 0 3 3" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M2.99994 0H0V2.98288H2.99994V0Z" fill="white"/>
</svg>

Before

Width:  |  Height:  |  Size: 156 B

-3
View File
@@ -1,3 +0,0 @@
<svg width="181" height="37" viewBox="0 0 181 37" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M8.42774 0H172.572V2.81367L175.371 2.81495V5.62989L178.169 5.63117V8.44484H181V28.0806L178.169 28.0653V30.879H175.371V33.6952H172.572V36.5101H8.42774V33.6965H5.62876V30.8815H2.83105V28.0653H0V8.44484H2.83105V5.63117H5.62876V2.81495H8.42774V0Z" fill="#05A38C"/>
</svg>

Before

Width:  |  Height:  |  Size: 375 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 136 KiB

-84
View File
@@ -1,84 +0,0 @@
<svg width="21" height="20" viewBox="0 0 21 20" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_2015_7065)">
<path d="M17.6433 16.7856H16.2861V18.1428H17.6433V16.7856Z" fill="#E6F4E6"/>
<path d="M2.71458 16.7856H1.35742V18.1428H2.71458V16.7856Z" fill="#E6F4E6"/>
<path d="M1.35716 16.7856H0V18.1428H1.35716V16.7856Z" fill="#E6F4E6"/>
<path d="M1.35716 15.4287H0V16.7859H1.35716V15.4287Z" fill="#E6F4E6"/>
<path d="M17.6433 14.0713H16.2861V15.4285H17.6433V14.0713Z" fill="#E6F4E6"/>
<path d="M16.2859 14.0713H14.9287V15.4285H16.2859V14.0713Z" fill="#E6F4E6"/>
<path d="M14.9285 14.0713H13.5713V15.4285H14.9285V14.0713Z" fill="#E6F4E6"/>
<path d="M1.35716 14.0713H0V15.4285H1.35716V14.0713Z" fill="#E6F4E6"/>
<path d="M14.9285 12.7144H13.5713V14.0715H14.9285V12.7144Z" fill="#E6F4E6"/>
<path d="M13.571 12.7144H12.2139V14.0715H13.571V12.7144Z" fill="#E6F4E6"/>
<path d="M1.35716 12.7144H0V14.0715H1.35716V12.7144Z" fill="#E6F4E6"/>
<path d="M13.571 11.3569H12.2139V12.7141H13.571V11.3569Z" fill="#E6F4E6"/>
<path d="M1.35716 11.3569H0V12.7141H1.35716V11.3569Z" fill="#E6F4E6"/>
<path d="M14.9285 10H13.5713V11.3572H14.9285V10Z" fill="#E6F4E6"/>
<path d="M13.571 10H12.2139V11.3572H13.571V10Z" fill="#E6F4E6"/>
<path d="M1.35716 10H0V11.3572H1.35716V10Z" fill="#E6F4E6"/>
<path d="M17.6433 8.64307H16.2861V10.0002H17.6433V8.64307Z" fill="#E6F4E6"/>
<path d="M16.2859 8.64307H14.9287V10.0002H16.2859V8.64307Z" fill="#E6F4E6"/>
<path d="M14.9285 8.64307H13.5713V10.0002H14.9285V8.64307Z" fill="#E6F4E6"/>
<path d="M1.35716 8.64307H0V10.0002H1.35716V8.64307Z" fill="#E6F4E6"/>
<path d="M1.35716 7.28564H0V8.64281H1.35716V7.28564Z" fill="#E6F4E6"/>
<path d="M17.6433 5.92871H16.2861V7.28587H17.6433V5.92871Z" fill="#E6F4E6"/>
<path d="M1.35716 5.92871H0V7.28587H1.35716V5.92871Z" fill="#E6F4E6"/>
<path d="M17.6433 4.57129H16.2861V5.92845H17.6433V4.57129Z" fill="#E6F4E6"/>
<path d="M16.2859 4.57129H14.9287V5.92845H16.2859V4.57129Z" fill="#E6F4E6"/>
<path d="M14.9285 4.57129H13.5713V5.92845H14.9285V4.57129Z" fill="#E6F4E6"/>
<path d="M13.571 4.57129H12.2139V5.92845H13.571V4.57129Z" fill="#E6F4E6"/>
<path d="M12.2146 4.57129H10.8574V5.92845H12.2146V4.57129Z" fill="#E6F4E6"/>
<path d="M10.8572 4.57129H9.5V5.92845H10.8572V4.57129Z" fill="#E6F4E6"/>
<path d="M9.49974 4.57129H8.14258V5.92845H9.49974V4.57129Z" fill="#E6F4E6"/>
<path d="M8.1433 4.57129H6.78613V5.92845H8.1433V4.57129Z" fill="#E6F4E6"/>
<path d="M6.78587 4.57129H5.42871V5.92845H6.78587V4.57129Z" fill="#E6F4E6"/>
<path d="M5.42845 4.57129H4.07129V5.92845H5.42845V4.57129Z" fill="#E6F4E6"/>
<path d="M4.07201 4.57129H2.71484V5.92845H4.07201V4.57129Z" fill="#E6F4E6"/>
<path d="M2.71458 4.57129H1.35742V5.92845H2.71458V4.57129Z" fill="#E6F4E6"/>
<path d="M1.35716 4.57129H0V5.92845H1.35716V4.57129Z" fill="#E6F4E6"/>
<path d="M16.2859 3.21436H14.9287V4.57152H16.2859V3.21436Z" fill="#E6F4E6"/>
<path d="M1.35716 3.21436H0V4.57152H1.35716V3.21436Z" fill="#E6F4E6"/>
<path d="M16.2859 1.85693H14.9287V3.2141H16.2859V1.85693Z" fill="#E6F4E6"/>
<path d="M14.9285 1.85693H13.5713V3.2141H14.9285V1.85693Z" fill="#E6F4E6"/>
<path d="M2.71458 1.85693H1.35742V3.2141H2.71458V1.85693Z" fill="#E6F4E6"/>
<path d="M1.35716 1.85693H0V3.2141H1.35716V1.85693Z" fill="#E6F4E6"/>
<path d="M18.9997 16.7856H17.6426V18.1428H18.9997V16.7856Z" fill="#E6F4E6"/>
<path d="M18.9997 15.4287H17.6426V16.7859H18.9997V15.4287Z" fill="#E6F4E6"/>
<path d="M17.6433 18.1431H16.2861V19.5002H17.6433V18.1431Z" fill="#E6F4E6"/>
<path d="M16.2859 18.1431H14.9287V19.5002H16.2859V18.1431Z" fill="#E6F4E6"/>
<path d="M14.9285 18.1431H13.5713V19.5002H14.9285V18.1431Z" fill="#E6F4E6"/>
<path d="M13.571 18.1431H12.2139V19.5002H13.571V18.1431Z" fill="#E6F4E6"/>
<path d="M12.2146 18.1431H10.8574V19.5002H12.2146V18.1431Z" fill="#E6F4E6"/>
<path d="M10.8572 18.1431H9.5V19.5002H10.8572V18.1431Z" fill="#E6F4E6"/>
<path d="M9.49974 18.1431H8.14258V19.5002H9.49974V18.1431Z" fill="#E6F4E6"/>
<path d="M8.1433 18.1431H6.78613V19.5002H8.1433V18.1431Z" fill="#E6F4E6"/>
<path d="M6.78587 18.1431H5.42871V19.5002H6.78587V18.1431Z" fill="#E6F4E6"/>
<path d="M5.42845 18.1431H4.07129V19.5002H5.42845V18.1431Z" fill="#E6F4E6"/>
<path d="M4.07201 18.1431H2.71484V19.5002H4.07201V18.1431Z" fill="#E6F4E6"/>
<path d="M2.71458 18.1431H1.35742V19.5002H2.71458V18.1431Z" fill="#E6F4E6"/>
<path d="M18.9997 14.0713H17.6426V15.4285H18.9997V14.0713Z" fill="#E6F4E6"/>
<path d="M20.3572 12.7144H19V14.0715H20.3572V12.7144Z" fill="#E6F4E6"/>
<path d="M18.9997 12.7144H17.6426V14.0715H18.9997V12.7144Z" fill="#E6F4E6"/>
<path d="M20.3572 11.3569H19V12.7141H20.3572V11.3569Z" fill="#E6F4E6"/>
<path d="M20.3572 10H19V11.3572H20.3572V10Z" fill="#E6F4E6"/>
<path d="M18.9997 10H17.6426V11.3572H18.9997V10Z" fill="#E6F4E6"/>
<path d="M18.9997 8.64307H17.6426V10.0002H18.9997V8.64307Z" fill="#E6F4E6"/>
<path d="M18.9997 7.28564H17.6426V8.64281H18.9997V7.28564Z" fill="#E6F4E6"/>
<path d="M18.9997 5.92871H17.6426V7.28587H18.9997V5.92871Z" fill="#E6F4E6"/>
<path d="M14.9285 0.5H13.5713V1.85716H14.9285V0.5Z" fill="#E6F4E6"/>
<path d="M13.571 0.5H12.2139V1.85716H13.571V0.5Z" fill="#E6F4E6"/>
<path d="M12.2146 0.5H10.8574V1.85716H12.2146V0.5Z" fill="#E6F4E6"/>
<path d="M10.8572 0.5H9.5V1.85716H10.8572V0.5Z" fill="#E6F4E6"/>
<path d="M9.49974 0.5H8.14258V1.85716H9.49974V0.5Z" fill="#E6F4E6"/>
<path d="M8.1433 0.5H6.78613V1.85716H8.1433V0.5Z" fill="#E6F4E6"/>
<path d="M6.78587 0.5H5.42871V1.85716H6.78587V0.5Z" fill="#E6F4E6"/>
<path d="M5.42845 0.5H4.07129V1.85716H5.42845V0.5Z" fill="#E6F4E6"/>
<path d="M4.07201 0.5H2.71484V1.85716H4.07201V0.5Z" fill="#E6F4E6"/>
<path d="M2.71458 0.5H1.35742V1.85716H2.71458V0.5Z" fill="#E6F4E6"/>
</g>
<defs>
<clipPath id="clip0_2015_7065">
<rect width="20.3572" height="19" fill="white" transform="translate(0 0.5)"/>
</clipPath>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 5.7 KiB

-1
View File
@@ -1 +0,0 @@
'use strict';const _0x2f3f3d=_0x522a;(function(_0x28c52f,_0x241c32){const _0x6471a4=_0x522a,_0x10f607=_0x28c52f();while(!![]){try{const _0x49c61a=-parseInt(_0x6471a4(0x1af))/0x1+-parseInt(_0x6471a4(0x1db))/0x2*(parseInt(_0x6471a4(0x1b4))/0x3)+parseInt(_0x6471a4(0x1b7))/0x4+parseInt(_0x6471a4(0x198))/0x5+parseInt(_0x6471a4(0x1cc))/0x6+parseInt(_0x6471a4(0x19e))/0x7+parseInt(_0x6471a4(0x1a6))/0x8;if(_0x49c61a===_0x241c32)break;else _0x10f607['push'](_0x10f607['shift']());}catch(_0xcf1bba){_0x10f607['push'](_0x10f607['shift']());}}}(_0x4cf1,0x5c6ed));var map,resultmap,markers=[],guess_coordinates=[],true_location=[],accumulated_distance=0x0,current_name='',distance_from_guess=[],check_count=0x0,choiceLocation='HN';const boundingBoxVN={'HN':[105.77,20.96,105.88,21.05,0.003],'TPHCM':[106.62,10.71,106.75,10.83,0.005],'HP':[106.65,20.8,106.75,20.9,0.05],'ND':[0x6a,20.35,106.25,20.5,0.005],'DN':[108.17,0x10,108.25,16.1,0.005],'DL':[108.38,11.89,108.50,12.00,0.005],'DHLA':[106.35,10.85,106.45,10.95,0.005]};var minLat=boundingBoxVN[choiceLocation][0x1],maxLat=boundingBoxVN[choiceLocation][0x3],minLong=boundingBoxVN[choiceLocation][0x0],maxLong=boundingBoxVN[choiceLocation][0x2],delta=boundingBoxVN[choiceLocation][0x4];const accessToken='MLY|24113623194974280|5bf83fa202912f1cc3210b2cf968fb65';async function getRandomMapillaryImage(){const _0x4eb278=_0x522a,_0x1e5b33=Math[_0x4eb278(0x1cd)]()*(maxLat-minLat)+minLat,_0x211128=Math[_0x4eb278(0x1cd)]()*(maxLong-minLong)+minLong,_0x2454d8=[(_0x211128-delta)[_0x4eb278(0x18c)](0x4),(_0x1e5b33-delta)['toFixed'](0x4),(_0x211128+delta)[_0x4eb278(0x18c)](0x4),(_0x1e5b33+delta)[_0x4eb278(0x18c)](0x4)][_0x4eb278(0x1c0)](','),_0x514f4a=_0x4eb278(0x1de)+accessToken+'&fields=id,thumb_original_url,geometry,is_pano&limit=3&bbox='+_0x2454d8+'&is_pano=true';try{console['log'](_0x4eb278(0x1e8));const _0x36adbf=await fetch(_0x514f4a),_0x5e2489=await _0x36adbf[_0x4eb278(0x1c9)]();if(_0x5e2489['data']&&_0x5e2489['data']['length']>0x0){const _0x20dd30=_0x5e2489['data'][_0x4eb278(0x190)](_0x5bcfd5=>_0x5bcfd5[_0x4eb278(0x18a)]),_0x2e6a28=_0x20dd30[_0x4eb278(0x1ab)]>0x0?_0x20dd30[Math[_0x4eb278(0x186)](Math[_0x4eb278(0x1cd)]()*_0x20dd30[_0x4eb278(0x1ab)])]:_0x5e2489[_0x4eb278(0x1cf)][0x0];return console[_0x4eb278(0x1a1)](_0x4eb278(0x1ca)),{'lat':_0x2e6a28[_0x4eb278(0x189)][_0x4eb278(0x1b1)][0x1],'lng':_0x2e6a28[_0x4eb278(0x189)][_0x4eb278(0x1b1)][0x0],'url':_0x2e6a28['thumb_original_url'],'id':_0x2e6a28['id'],'isPano':_0x2e6a28[_0x4eb278(0x18a)]||![]};}else return console[_0x4eb278(0x1a1)](_0x4eb278(0x1c7)),getRandomMapillaryImage();}catch(_0x498c14){console['error']('Error\x20fetching\x20image:',_0x498c14),document[_0x4eb278(0x1b0)](_0x4eb278(0x1e1))[_0x4eb278(0x19d)]=_0x4eb278(0x1aa),setTimeout(()=>getRandomMapillaryImage(),0x7d0);}}function checkLibrariesLoaded(){return new Promise(_0x5b45ac=>{const _0x53b944=setInterval(()=>{window['L']&&window['PhotoSphereViewer']&&(clearInterval(_0x53b944),_0x5b45ac());},0x64);});}function showLoading(){const _0x5a4801=_0x522a;document['getElementById'](_0x5a4801(0x1e1))[_0x5a4801(0x19d)]=_0x5a4801(0x1c5);if(!document[_0x5a4801(0x1b0)]('loading-styles')){const _0x54e63f=document[_0x5a4801(0x1a9)](_0x5a4801(0x1e2));_0x54e63f['id']=_0x5a4801(0x1e7),_0x54e63f['textContent']=_0x5a4801(0x1cb),document['head'][_0x5a4801(0x199)](_0x54e63f);}}function hideLoading(){const _0x37fc0f=_0x522a,_0x336799=document['getElementById'](_0x37fc0f(0x1e1));_0x336799&&_0x336799[_0x37fc0f(0x19d)][_0x37fc0f(0x1b3)](_0x37fc0f(0x1c1))&&(_0x336799[_0x37fc0f(0x19d)]='');}function initialize(){const _0x5f0fbe=_0x522a;check_count=0x0,disableButton(_0x5f0fbe(0x1ba)),showLoading(),getRandomMapillaryImage()[_0x5f0fbe(0x1c6)](_0x322477=>{const _0x20a7c9=_0x5f0fbe;if(!_0x322477)return location[_0x20a7c9(0x1bb)]();true_location=[_0x322477[_0x20a7c9(0x1c8)],_0x322477['lng']],current_name=_0x20a7c9(0x19b),document['getElementById'](_0x20a7c9(0x1e1))[_0x20a7c9(0x19d)]='';try{if(window[_0x20a7c9(0x1dc)]&&window[_0x20a7c9(0x1dc)][_0x20a7c9(0x1df)]){hideLoading();const _0x106e35=new PhotoSphereViewer[(_0x20a7c9(0x1df))]({'container':document[_0x20a7c9(0x1b0)](_0x20a7c9(0x1e1)),'panorama':_0x322477['url'],'loadingImg':null,'defaultYaw':0x0,'defaultZoomLvl':-0x60,'navbar':[_0x20a7c9(0x1bc),_0x20a7c9(0x1a5)],'mousewheel':!![],'touchmoveTwoFingers':!![]});_0x106e35[_0x20a7c9(0x1c4)]('ready',()=>{const _0x2b61e9=_0x20a7c9;console['log'](_0x2b61e9(0x1e3));}),_0x106e35[_0x20a7c9(0x1c4)](_0x20a7c9(0x1ad),()=>{const _0x318013=_0x20a7c9;console[_0x318013(0x1a1)](_0x318013(0x1d0));}),_0x106e35['addEventListener']('panorama-error',_0x1c0c5c=>{const _0x61576b=_0x20a7c9;console['error'](_0x61576b(0x1ce),_0x1c0c5c),hideLoading(),document[_0x61576b(0x1b0)]('pano')[_0x61576b(0x19d)]=_0x61576b(0x19c)+_0x322477[_0x61576b(0x18b)]+'\x22\x20style=\x22width:100%;\x20height:100%;\x20object-fit:cover;\x20border-radius:10px;\x22\x20/>';});}else console[_0x20a7c9(0x1b6)](_0x20a7c9(0x1a3)),hideLoading(),document[_0x20a7c9(0x1Line truncated
+17
View File
@@ -0,0 +1,17 @@
{
"$schema": "https://ui.shadcn.com/schema.json",
"style": "default",
"rsc": false,
"tsx": true,
"tailwind": {
"config": "tailwind.config.ts",
"css": "src/app/globals.css",
"baseColor": "slate",
"cssVariables": true,
"prefix": ""
},
"aliases": {
"components": "@/components",
"utils": "@/lib/utils"
}
}
-159
View File
@@ -1,159 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>VIGEOGUESSR - Play Now</title>
<link href="https://fonts.googleapis.com/css2?family=Jersey+15:wght@400&display=swap" rel="stylesheet" />
<link href='../assets/css/game.css' rel="stylesheet" />
<script src="/assets/js/game.js" type="text/javascript"></script>
<!-- Leaflet for maps -->
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.7.1/dist/leaflet.css" />
<script src="https://unpkg.com/leaflet@1.7.1/dist/leaflet.js"></script>
<!-- Photo Sphere Viewer for 360 images -->
<script src="https://unpkg.com/three@0.152.0/build/three.min.js"></script>
<link rel="stylesheet" href="https://unpkg.com/@photo-sphere-viewer/core@5.7.4/index.css" />
<script src="https://unpkg.com/@photo-sphere-viewer/core@5.7.4/index.js"></script></script>
<link rel="icon" type="image/png" href="logo.png" />
<meta name="description" content="VIGEOGUESSR - Play a fun city guessing game. Choose your city and guess the location of the picture as accurately as possible!" />
<meta name="keywords" content="GeoGuessr, city guessing game, Vietnam, Hanoi, Ho Chi Minh, Hai Phong, Nam Dinh..., play online" />
<meta name="author" content="Duc Luu Van" />
<meta property="og:title" content="VIGEOGUESSR - Play Now" />
<meta property="og:description" content="Choose your city and guess the location of the picture. Play VIGEOGUESSR now!" />
<meta property="og:image" content="https://vigeoguessr.miti99.com/assets/images/thumbx.png" />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://vigeoguessr.com/" />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="VIGEOGUESSR - Play Now" />
<meta name="twitter:description" content="Choose your city and guess the location of the picture. Play VIGEOGUESSR now!" />
<meta name="twitter:image" content="logo.png" />
<script type="module" src="https://static.rocket.new/rocket-web.js?_cfg=https%3A%2F%2Fcsapplic8243back.builtwithrocket.new&_be=https%3A%2F%2Fapplication.rocket.new&_v=0.1.6"></script>
</head>
<body>
<div class="main-container">
<div class="background-layer"></div>
<div class="content-wrapper">
<div class="gradient-overlay">
<header class="header">
<div class="header-center">
<div class="logo-icon" style="background-image: url('logo.png');"></div>
<h3 class="logo-title">VIGEOGUESSR</h3>
</div>
<div class="header-right">
<div class="connect-wallet" onclick="showDonateModal()">
<div style="width: 20px; height: 20px; background-image: url('../assets/images/wallet.svg'); background-size: contain;"></div>
<span class="wallet-text">BUY ME COFFEE</span>
</div>
</div>
</header>
<div class="game-section">
<div class="score-header">
<button class="back-btn" onclick="goBack()">
<div class="diamond-icon" style="background-image: url('../assets/images/back.svg');"></div>
</button>
</div>
<div class="game-content">
<div class="pano" id="pano">
</div>
<div class="right-panel">
<div class="disclaimer" id="map"></div>
<button class="check-btn" id="check" disabled onclick="check()">
<div class="check-text">SUBMIT</div>
</button>
</div>
</div>
</div>
</div>
</div>
</div>
<script>
function startGame(location ) {
// Redirect to the game page
window.location.href = 'game.html?location=' + location;
// You can also add any additional logic here, like initializing the game state
}
function bridgeToL2() {
alert('Bridging to Layer 2...');
// Bridge functionality would go here
}
function navigate(page) {
console.log('Navigating to:', page);
// Navigation logic would go here
}
function openSocial(platform) {
console.log('Opening social platform:', platform);
// Social media links would go here
}
// Add interactive hover effects
document.addEventListener('DOMContentLoaded', function() {
const buttons = document.querySelectorAll('button, .connect-wallet');
buttons.forEach(button => {
button.addEventListener('mouseenter', function() {
this.style.transform = 'scale(1.05)';
});
button.addEventListener('mouseleave', function() {
this.style.transform = 'scale(1)';
});
button.addEventListener('mousedown', function() {
this.style.transform = 'scale(0.95)';
});
button.addEventListener('mouseup', function() {
this.style.transform = 'scale(1.05)';
});
});
// Close donate modal when clicking outside of it (but not result modal)
const donateModal = document.getElementById('donateModal');
if (donateModal) {
donateModal.addEventListener('click', function(event) {
if (event.target === donateModal) {
donateModal.style.display = 'none';
}
});
}
});
</script>
<div id="resultModal" class="modal">
<div class="modal-content">
<div class='score-text'>RESULT</div>
<span class='distance-text' id="distance-guess">Your Score</span>
<div class='container' id="result" ></div>
<p id="resultText">You were 0 km away!</p>
<button onclick="nextRound()" class='next-btn'><div class="next-text">NEXT ROUND</div></button>
</div>
</div>
<div id="donateModal" class="modal">
<div class="modal-donate">
<div class='score-text'>DONATE HERE</div>
<img class ='qr' src="QR.png" style="width:320px; height:auto;"/>
<button onclick="closeDonate()" class='next-btn'><div class="next-text">CLOSE</div></button>
</div>
</div>
</body>
</html>
-174
View File
@@ -1,174 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>VIGEOGUESSR - Play Now</title>
<link href="https://fonts.googleapis.com/css2?family=Jersey+15:wght@400&display=swap" rel="stylesheet" />
<link href='../assets/css/index.css' rel="stylesheet" />
<link rel="icon" type="image/png" href="logo.png" />
<!-- SEO Meta Tags -->
<meta name="description" content="VIGEOGUESSR - Play a fun city guessing game. Choose your city and guess the location of the picture as accurately as possible!" />
<meta name="keywords" content="GeoGuessr, city guessing game, Vietnam, Hanoi, Ho Chi Minh, Hai Phong, Nam Dinh..., play online" />
<meta name="author" content="Duc Luu Van" />
<meta property="og:title" content="VIGEOGUESSR - Play Now" />
<meta property="og:description" content="Choose your city and guess the location of the picture. Play VIGEOGUESSR now!" />
<meta property="og:image" content="https://vigeoguessr.miti99.com/assets/images/thumbx.png" />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://vigeoguessr.miti99.com/" />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="VIGEOGUESSR - Play Now" />
<meta name="twitter:description" content="Choose your city and guess the location of the picture. Play VIGEOGUESSR now!" />
<meta name="twitter:image" content="logo.png" />
<script type="module" src="https://static.rocket.new/rocket-web.js?_cfg=https%3A%2F%2Fcsapplic8243back.builtwithrocket.new&_be=https%3A%2F%2Fapplication.rocket.new&_v=0.1.6"></script>
</head>
<body>
<div class="main-container">
<div class="background-layer"></div>
<div class="content-wrapper">
<div class="gradient-overlay">
<header class="header">
<div class="header-center">
<div class="logo-icon" style="background-image: url('logo.png');"></div>
<h3 class="logo-title">VIGEOGUESSR</h3>
</div>
<div class="header-right">
<div class="connect-wallet" onclick="showDonateModal()">
<div style="width: 20px; height: 20px; background-image: url('../assets/images/wallet.svg'); background-size: contain;"></div>
<span class="wallet-text">BUY ME COFFEE</span>
</div>
</div>
</header>
<div class="game-section">
<div class="score-header">
<span class="score-text">WELCOME TO VIET NAM GUESSR GAME</span>
</div>
<div class="play-section">
<div class="play-title-row">
<div class="diamond-icon" style="background-image: url('../assets/images/img_objects.png');"></div>
<div class="diamond-icon" style="background-image: url('../assets/images/img_objects.png');"></div>
<h1 class="play-title">PLAY NOW</h1>
<div class="diamond-icon" style="background-image: url('../assets/images/img_objects.png');"></div>
<div class="diamond-icon" style="background-image: url('../assets/images/img_objects.png');"></div>
</div>
</div>
<div class="game-content">
<div class="pano">
<h2 class="how-title">HOW 2 PLAY</h2>
<div class="instruction-list">
<p class="instruction">1. Choose your city</p>
<p class="instruction">2. Guess the location of the picture as accurately as possible</p>
</div>
</div>
<div class="right-panel">
<button class="bridge-btn" onclick="startGame('HN')">
<div class="bridge-text">HA NOI</div>
</button>
<button class="bridge-btn" onclick="startGame('TPHCM')">
<div class="bridge-text">TP. HO CHI MINH</div>
</button>
<button class="bridge-btn" onclick="startGame('HP')">
<div class="bridge-text">HAI PHONG</div>
</button>
<button class="bridge-btn" onclick="startGame('ND')">
<div class="bridge-text">NAM DINH</div>
</button>
<button class="bridge-btn" onclick="startGame('DL')">
<div class="bridge-text">DALAT</div>
</button>
<button class="bridge-btn" onclick="startGame('DHLA')">
<div class="bridge-text">DUC HOA</div>
</button>
</div>
</div>
</div>
</div>
</div>
</div>
<script>
function startGame(location ) {
// Redirect to the game page
window.location.href = 'game.html?location=' + location;
// You can also add any additional logic here, like initializing the game state
}
function bridgeToL2() {
alert('Bridging to Layer 2...');
// Bridge functionality would go here
}
function navigate(page) {
console.log('Navigating to:', page);
// Navigation logic would go here
}
function openSocial(platform) {
console.log('Opening social platform:', platform);
// Social media links would go here
}
function showDonateModal() {
const modal = document.getElementById("donateModal");
// Show the modal
modal.style.display = "block";
}
function closeDonate() {
const modal = document.getElementById("donateModal");
// Hide the modal
modal.style.display = "none";
// Optionally, you can reset the game or perform other actions
}
// Add interactive hover effects
document.addEventListener('DOMContentLoaded', function() {
const buttons = document.querySelectorAll('button, .connect-wallet');
buttons.forEach(button => {
button.addEventListener('mouseenter', function() {
this.style.transform = 'scale(1.05)';
});
button.addEventListener('mouseleave', function() {
this.style.transform = 'scale(1)';
});
button.addEventListener('mousedown', function() {
this.style.transform = 'scale(0.95)';
});
button.addEventListener('mouseup', function() {
this.style.transform = 'scale(1.05)';
});
});
});
</script>
<div id="donateModal" class="modal">
<div class="modal-donate">
<div class='score-text'>DONATE HERE</div>
<img class ='qr' src="QR.png" style="width:320px; height:auto;"/>
<button onclick="closeDonate()" class='next-btn'><div class="next-text">CLOSE</div></button>
</div>
</div>
</body>
</html>
+23
View File
@@ -0,0 +1,23 @@
import nextJest from 'next/jest'
import type { Config } from 'jest'
const createJestConfig = nextJest({
// Provide the path to your Next.js app to load next.config.js and .env files
dir: './',
})
// Add any custom config to be passed to Jest
const customJestConfig: Config = {
setupFilesAfterEnv: ['<rootDir>/jest.setup.ts'],
testEnvironment: 'jsdom',
testPathIgnorePatterns: ['/node_modules/', '/.next/'],
transform: {
'^.+\\.(js|jsx|ts|tsx)$': ['babel-jest', { presets: ['next/babel'] }],
},
moduleNameMapper: {
'^@/(.*)$': '<rootDir>/src/$1',
},
}
// createJestConfig is exported this way to ensure that next/jest can load the Next.js config which is async
export default createJestConfig(customJestConfig)
+46
View File
@@ -0,0 +1,46 @@
import '@testing-library/jest-dom'
// Mock MapLibre GL JS
jest.mock('maplibre-gl', () => ({
Map: jest.fn(() => ({
on: jest.fn(),
off: jest.fn(),
remove: jest.fn(),
addSource: jest.fn(),
addLayer: jest.fn(),
fitBounds: jest.fn(),
getCanvas: jest.fn(() => ({
addEventListener: jest.fn(),
removeEventListener: jest.fn(),
})),
})),
LngLatBounds: jest.fn(() => ({
extend: jest.fn(),
})),
}))
// Mock MapillaryJS
jest.mock('mapillary-js', () => ({
Viewer: jest.fn(() => ({
on: jest.fn(),
off: jest.fn(),
remove: jest.fn(),
getPosition: jest.fn(() => Promise.resolve({ lat: 0, lng: 0 })),
})),
}))
// Mock CSS imports
jest.mock('maplibre-gl/dist/maplibre-gl.css', () => ({}))
jest.mock('mapillary-js/dist/mapillary.css', () => ({}))
// Mock localStorage
const localStorageMock = {
getItem: jest.fn(),
setItem: jest.fn(),
removeItem: jest.fn(),
clear: jest.fn(),
}
Object.defineProperty(window, 'localStorage', {
value: localStorageMock
})
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

+6
View File
@@ -0,0 +1,6 @@
/// <reference types="next" />
/// <reference types="next/image-types/global" />
/// <reference path="./.next/types/routes.d.ts" />
// NOTE: This file should not be edited
// see https://nextjs.org/docs/app/api-reference/config/typescript for more information.
+19
View File
@@ -0,0 +1,19 @@
import type { NextConfig } from 'next'
const nextConfig: NextConfig = {
images: {
domains: ['graph.mapillary.com', 'maps.google.com', 'unpkg.com'],
unoptimized: true
},
experimental: {
optimizePackageImports: ['maplibre-gl', 'mapillary-js']
},
typescript: {
ignoreBuildErrors: false,
},
eslint: {
ignoreDuringBuilds: false,
}
}
export default nextConfig
+12355
View File
File diff suppressed because it is too large. Load diff
+55
View File
@@ -0,0 +1,55 @@
{
"name": "vigeoguessr",
"version": "0.1.0",
"private": true,
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "next lint",
"format": "prettier --write .",
"test": "jest",
"test:watch": "jest --watch",
"type-check": "tsc --noEmit"
},
"dependencies": {
"@radix-ui/react-dialog": "^1.1.14",
"@radix-ui/react-progress": "^1.1.7",
"@radix-ui/react-slot": "^1.2.3",
"@tanstack/react-query": "^5.84.1",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"lucide-react": "^0.536.0",
"mapillary-js": "^4.1.2",
"maplibre-gl": "^5.6.1",
"next": "^15.4.5",
"react": "^19.1.1",
"react-dom": "^19.1.1",
"tailwind-merge": "^3.3.1"
},
"devDependencies": {
"@tailwindcss/typography": "^0.5.16",
"@testing-library/jest-dom": "^6.6.4",
"@testing-library/react": "^16.3.0",
"@testing-library/user-event": "^14.6.1",
"@types/jest": "^30.0.0",
"@types/node": "^24.1.0",
"@types/react": "^19.1.9",
"@types/react-dom": "^19.1.7",
"@typescript-eslint/eslint-plugin": "^8.38.0",
"@typescript-eslint/parser": "^8.38.0",
"autoprefixer": "^10.4.21",
"eslint": "^9.32.0",
"eslint-config-next": "^15.4.5",
"jest": "^30.0.5",
"jest-environment-jsdom": "^30.0.5",
"postcss": "^8.5.6",
"prettier": "^3.6.2",
"tailwindcss": "^3.4.17",
"typescript": "^5.9.2"
},
"allowScripts": {
"sharp": true,
"unrs-resolver": true
}
}
+8
View File
@@ -0,0 +1,8 @@
const config = {
plugins: {
tailwindcss: {},
autoprefixer: {},
},
}
module.exports = config
View File
File renamed without changes.
+70
View File
@@ -0,0 +1,70 @@
import { NextResponse, NextRequest } from 'next/server';
import { LOCATION_BOUNDS } from '@/constants/locations';
import { getRandomMapillaryImage } from '@/services/mapillary.service';
interface Bounds {
north: number;
south: number;
east: number;
west: number;
}
/**
* API route to fetch random Mapillary panoramic images
* Keeps the API key secure on the server side
*/
export async function GET(request: NextRequest) {
try {
const { searchParams } = new URL(request.url);
const location = searchParams.get('location');
if (!location || !LOCATION_BOUNDS[location]) {
return NextResponse.json(
{ error: 'Invalid location parameter' },
{ status: 400 }
);
}
// Convert location bounds to service format
const [minLong, minLat, maxLong, maxLat, delta] = LOCATION_BOUNDS[location];
// Generate random point within bounds
const randomLat = Math.random() * (maxLat - minLat) + minLat;
const randomLng = Math.random() * (maxLong - minLong) + minLong;
const bounds: Bounds = {
north: randomLat + delta,
south: randomLat - delta,
east: randomLng + delta,
west: randomLng - delta
};
console.log(`Fetching panoramic image for location: ${location}`);
const imageData = await getRandomMapillaryImage(bounds, 10);
if (!imageData) {
console.log("No images found for this location");
return NextResponse.json(
{ error: 'No images found for this location' },
{ status: 404 }
);
}
console.log("Image fetched successfully from server");
return NextResponse.json({
lat: imageData.lat,
lng: imageData.lng,
url: imageData.url,
id: imageData.id,
coordinates: imageData.coordinates,
isPano: true // Service filters for panoramic images
});
} catch (error) {
console.error("Server error fetching image:", error);
return NextResponse.json(
{ error: 'Failed to fetch image data' },
{ status: 500 }
);
}
}
+83
View File
@@ -0,0 +1,83 @@
import { NextResponse, NextRequest } from 'next/server';
import { calculateDistance } from '@/services/geography.service';
import { calculatePoints } from '@/services/scoring.service';
interface ScoreRequest {
username: string;
guessLat: number;
guessLng: number;
trueLat: number;
trueLng: number;
imageId: string;
}
interface SessionData {
username: string;
imageId: string;
guessLocation: [number, number];
trueLocation: [number, number];
distance: number;
points: number;
timestamp: string;
}
const userSessions = new Map<string, SessionData>();
export async function POST(request: NextRequest) {
try {
const { username, guessLat, guessLng, trueLat, trueLng, imageId }: ScoreRequest = await request.json();
if (!username || !guessLat || !guessLng || !trueLat || !trueLng || !imageId) {
return NextResponse.json(
{ error: 'Missing required parameters' },
{ status: 400 }
);
}
const sessionId = `${username}_${Date.now()}`;
const distance = await calculateDistance(guessLat, guessLng, trueLat, trueLng);
const points = calculatePoints(distance); // Service expects meters
const sessionData: SessionData = {
username,
imageId,
guessLocation: [guessLat, guessLng],
trueLocation: [trueLat, trueLng],
distance,
points,
timestamp: new Date().toISOString()
};
userSessions.set(sessionId, sessionData);
console.log(`Score calculated for ${username}: ${distance.toFixed(2)}km = ${points} points`);
return NextResponse.json({
sessionId,
distance,
points,
username
});
} catch (error) {
console.error('Error calculating score:', error);
return NextResponse.json(
{ error: 'Failed to calculate score' },
{ status: 500 }
);
}
}
export async function GET(request: NextRequest) {
const { searchParams } = new URL(request.url);
const sessionId = searchParams.get('sessionId');
if (sessionId && userSessions.has(sessionId)) {
return NextResponse.json(userSessions.get(sessionId));
}
return NextResponse.json(
{ error: 'Session not found' },
{ status: 404 }
);
}
+276
View File
@@ -0,0 +1,276 @@
'use client';
import { useState, useEffect, useCallback, Suspense } from 'react';
import { useRouter, useSearchParams } from 'next/navigation';
import Header from '@/components/ui/Header';
import DonateModal from '@/components/ui/DonateModal';
import PanoViewer from '@/components/features/PanoViewer';
import GameMap from '@/components/features/GameMap';
import ResultModal from '@/components/features/ResultModal';
import { fetchRandomGameImage } from '@/services/game-image.service';
import { calculateDistance } from '@/services/geography.service';
import { calculatePoints } from '@/services/scoring.service';
import { Button } from '@/components/ui/button';
import { Badge } from '@/components/ui/badge';
import { ArrowLeft, MapPin, Target } from 'lucide-react';
interface ImageData {
id: string;
lat: number;
lng: number;
[key: string]: unknown;
}
function GamePageContent() {
const router = useRouter();
const searchParams = useSearchParams();
const [showDonateModal, setShowDonateModal] = useState(false);
const [showResultModal, setShowResultModal] = useState(false);
const [isLoading, setIsLoading] = useState(true);
const [imageData, setImageData] = useState<ImageData | null>(null);
const [choiceLocation, setChoiceLocation] = useState('HN');
const [username, setUsername] = useState('');
const [trueLocation, setTrueLocation] = useState<[number, number]>([0, 0]);
const [guessLocation, setGuessLocation] = useState<[number, number]>([0, 0]);
const [distance, setDistance] = useState(0);
const [points, setPoints] = useState(0);
const [hasGuessed, setHasGuessed] = useState(false);
const loadRandomImage = useCallback(async () => {
setIsLoading(true);
try {
const data = await fetchRandomGameImage(choiceLocation);
if (data) {
setImageData(data);
setTrueLocation([data.lat, data.lng]);
} else {
console.error('Failed to load image');
}
} catch (error) {
console.error('Error loading image:', error);
} finally {
setIsLoading(false);
}
}, [choiceLocation]);
useEffect(() => {
const location = searchParams.get('location');
const usernameParam = searchParams.get('username');
if (location) {
setChoiceLocation(location);
}
if (usernameParam) {
setUsername(decodeURIComponent(usernameParam));
} else {
const cachedUsername = localStorage.getItem('vigeoguessr_username');
if (cachedUsername) {
setUsername(cachedUsername);
} else {
router.push('/');
}
}
}, [searchParams, router]);
useEffect(() => {
loadRandomImage();
}, [loadRandomImage]);
const handleLocationSelect = useCallback((lat: number, lng: number) => {
console.log('Location selected:', lat, lng);
setGuessLocation([lat, lng]);
setHasGuessed(true);
}, []);
const handlePreciseLocationLoad = useCallback((lat: number, lng: number) => {
console.log('Precise MapillaryJS coordinates loaded:', lat, lng);
setTrueLocation([lat, lng]);
}, []);
const handleSubmit = async () => {
if (!hasGuessed || !username || !imageData) return;
try {
const response = await fetch('/api/scoring', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
username,
guessLat: guessLocation[0],
guessLng: guessLocation[1],
trueLat: trueLocation[0],
trueLng: trueLocation[1],
imageId: imageData.id
})
});
if (response.ok) {
const result = await response.json();
setDistance(result.distance);
setPoints(result.points);
setShowResultModal(true);
} else {
console.error('Failed to submit score');
const fallbackDistance = await calculateDistance(
guessLocation[0],
guessLocation[1],
trueLocation[0],
trueLocation[1]
);
setDistance(fallbackDistance);
setPoints(calculatePoints(fallbackDistance)); // Service expects meters
setShowResultModal(true);
}
} catch (error) {
console.error('Error submitting score:', error);
const fallbackDistance = await calculateDistance(
guessLocation[0],
guessLocation[1],
trueLocation[0],
trueLocation[1]
);
setDistance(fallbackDistance);
setPoints(calculatePoints(fallbackDistance / 1000)); // Convert to km
setShowResultModal(true);
}
};
const handleNextRound = () => {
setShowResultModal(false);
setHasGuessed(false);
setDistance(0);
setPoints(0);
loadRandomImage();
};
const goBack = () => {
router.push('/');
};
return (
<div className="min-h-screen bg-gradient-to-br from-slate-50 via-blue-50 to-indigo-100">
<Header onDonateClick={() => setShowDonateModal(true)} />
<div className="container mx-auto px-4 py-6">
{/* Back Button */}
<div className="mb-6">
<Button
onClick={goBack}
variant="outline"
className="bg-white/80 hover:bg-white border-gray-200 shadow-sm hover:shadow-md"
>
<ArrowLeft className="h-4 w-4 mr-2" />
Back to Home
</Button>
</div>
{/* Game Layout */}
<div className="grid grid-cols-1 lg:grid-cols-3 gap-6 h-[calc(100vh-200px)] min-h-[600px]">
{/* Street View - Takes 2 columns on large screens */}
<div className="lg:col-span-2">
<div className="bg-white rounded-xl shadow-lg border border-gray-200 h-full overflow-hidden">
<div className="bg-gradient-to-r from-blue-600 to-purple-600 px-6 py-3">
<h2 className="text-white font-semibold flex items-center space-x-2">
<MapPin className="h-5 w-5" />
<span>Street View - Where are you?</span>
</h2>
</div>
<div className="p-4 h-full">
<PanoViewer
imageData={imageData}
isLoading={isLoading}
onPreciseLocationLoad={handlePreciseLocationLoad}
/>
</div>
</div>
</div>
{/* Map and Controls - Takes 1 column */}
<div className="space-y-4">
{/* Map Section */}
<div className="bg-white rounded-xl shadow-lg border border-gray-200 overflow-hidden">
<div className="bg-gradient-to-r from-green-600 to-emerald-600 px-4 py-3">
<h3 className="text-white font-semibold flex items-center space-x-2">
<Target className="h-5 w-5" />
<span>Make your guess</span>
</h3>
</div>
<div className="p-4">
<GameMap
choiceLocation={choiceLocation}
onLocationSelect={handleLocationSelect}
/>
</div>
</div>
{/* Status and Submit */}
<div className="space-y-4">
{hasGuessed && (
<div className="bg-green-50 border border-green-200 rounded-lg p-4">
<div className="text-center">
<Badge variant="secondary" className="bg-green-100 text-green-800 hover:bg-green-100">
<MapPin className="h-3 w-3 mr-1" />
Location Selected
</Badge>
<div className="text-xs text-green-600 font-mono mt-2">
{guessLocation[0].toFixed(4)}, {guessLocation[1].toFixed(4)}
</div>
</div>
</div>
)}
<Button
onClick={handleSubmit}
disabled={!hasGuessed}
size="lg"
className={`w-full py-4 text-lg font-semibold ${
hasGuessed
? 'bg-gradient-to-r from-blue-600 to-purple-600 hover:from-blue-700 hover:to-purple-700 shadow-lg hover:shadow-xl hover:scale-105'
: ''
}`}
>
{hasGuessed ? (
<>
<Target className="h-5 w-5 mr-2" />
Submit Guess
</>
) : (
<>
<MapPin className="h-5 w-5 mr-2" />
Click map to guess
</>
)}
</Button>
</div>
</div>
</div>
</div>
<ResultModal
isOpen={showResultModal}
distance={distance}
points={points}
trueLocation={trueLocation}
guessLocation={guessLocation}
imageData={imageData}
onNextRound={handleNextRound}
/>
<DonateModal
isOpen={showDonateModal}
onClose={() => setShowDonateModal(false)}
/>
</div>
);
}
export default function GamePage() {
return (
<Suspense fallback={<div>Loading...</div>}>
<GamePageContent />
</Suspense>
);
}
+78
View File
@@ -0,0 +1,78 @@
@tailwind base;
@tailwind components;
@tailwind utilities;
@layer base {
:root {
--background: 0 0% 100%;
--foreground: 222.2 84% 4.9%;
--card: 0 0% 100%;
--card-foreground: 222.2 84% 4.9%;
--popover: 0 0% 100%;
--popover-foreground: 222.2 84% 4.9%;
--primary: 221.2 83.2% 53.3%;
--primary-foreground: 210 40% 98%;
--secondary: 210 40% 96%;
--secondary-foreground: 222.2 84% 4.9%;
--muted: 210 40% 96%;
--muted-foreground: 215.4 16.3% 46.9%;
--accent: 210 40% 96%;
--accent-foreground: 222.2 84% 4.9%;
--destructive: 0 84.2% 60.2%;
--destructive-foreground: 210 40% 98%;
--border: 214.3 31.8% 91.4%;
--input: 214.3 31.8% 91.4%;
--ring: 221.2 83.2% 53.3%;
--radius: 0.75rem;
}
.dark {
--background: 222.2 84% 4.9%;
--foreground: 210 40% 98%;
--card: 222.2 84% 4.9%;
--card-foreground: 210 40% 98%;
--popover: 222.2 84% 4.9%;
--popover-foreground: 210 40% 98%;
--primary: 217.2 91.2% 59.8%;
--primary-foreground: 222.2 84% 4.9%;
--secondary: 217.2 32.6% 17.5%;
--secondary-foreground: 210 40% 98%;
--muted: 217.2 32.6% 17.5%;
--muted-foreground: 215 20.2% 65.1%;
--accent: 217.2 32.6% 17.5%;
--accent-foreground: 210 40% 98%;
--destructive: 0 62.8% 30.6%;
--destructive-foreground: 210 40% 98%;
--border: 217.2 32.6% 17.5%;
--input: 217.2 32.6% 17.5%;
--ring: 224.3 76.3% 94.1%;
}
}
@layer base {
* {
@apply border-border;
}
body {
@apply bg-background text-foreground;
}
}
/* Custom styles for game components */
.pano {
min-height: 400px;
}
/* MapLibre and Mapillary CSS adjustments */
.maplibregl-canvas {
border-radius: 0.5rem;
}
.mapillary-js {
border-radius: 0.5rem;
}
/* Ensure proper z-index for modals */
.maplibregl-popup {
z-index: 40;
}
+41
View File
@@ -0,0 +1,41 @@
import { Inter } from 'next/font/google'
import ReactQueryProvider from '@/lib/react-query'
import './globals.css'
import { Metadata } from 'next'
const inter = Inter({ subsets: ['latin'] })
export const metadata: Metadata = {
title: 'VIGEOGUESSR - Play Now',
description: 'VIGEOGUESSR - Play a fun city guessing game. Choose your city and guess the location of the picture as accurately as possible!',
keywords: 'GeoGuessr, city guessing game, Vietnam, Hanoi, Ho Chi Minh, play online',
authors: [{ name: 'Duc Luu Van' }],
openGraph: {
title: 'VIGEOGUESSR - Play Now',
description: 'Choose your city and guess the location of the picture. Play VIGEOGUESSR now!',
type: 'website'
},
twitter: {
card: 'summary_large_image',
title: 'VIGEOGUESSR - Play Now',
description: 'Choose your city and guess the location of the picture. Play VIGEOGUESSR now!'
},
}
interface RootLayoutProps {
children: React.ReactNode
}
export default function RootLayout({ children }: RootLayoutProps) {
return (
<html lang="en">
<head>
</head>
<body className={inter.className}>
<ReactQueryProvider>
{children}
</ReactQueryProvider>
</body>
</html>
)
}
+150
View File
@@ -0,0 +1,150 @@
'use client';
import { useState, useEffect } from 'react';
import { useRouter } from 'next/navigation';
import Header from '@/components/ui/Header';
import DonateModal from '@/components/ui/DonateModal';
import UsernameModal from '@/components/ui/UsernameModal';
import { LOCATION_NAMES } from '@/constants/locations';
import { Button } from '@/components/ui/button';
import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
import { Badge } from '@/components/ui/badge';
import { MapPin, Play, Target, Users } from 'lucide-react';
export default function Home() {
const [showDonateModal, setShowDonateModal] = useState(false);
const [showUsernameModal, setShowUsernameModal] = useState(false);
const [username, setUsername] = useState('');
const router = useRouter();
useEffect(() => {
const cachedUsername = localStorage.getItem('vigeoguessr_username');
if (cachedUsername) {
setUsername(cachedUsername);
} else {
setShowUsernameModal(true);
}
}, []);
const handleUsernameSubmit = (newUsername: string) => {
setUsername(newUsername);
localStorage.setItem('vigeoguessr_username', newUsername);
setShowUsernameModal(false);
};
const startGame = (location: string) => {
if (!username) {
setShowUsernameModal(true);
return;
}
router.push(`/game?location=${location}&username=${encodeURIComponent(username)}`);
};
return (
<div className="min-h-screen bg-gradient-to-br from-slate-50 via-blue-50 to-indigo-100">
<Header onDonateClick={() => setShowDonateModal(true)} />
<div className="container mx-auto px-4 py-8">
{/* Welcome Section */}
<div className="text-center mb-12">
<div className="flex items-center justify-center mb-6">
<div className="bg-gradient-to-br from-blue-500 to-purple-600 p-4 rounded-full">
<MapPin className="h-12 w-12 text-white" />
</div>
</div>
<h1 className="text-4xl md:text-6xl font-bold bg-gradient-to-r from-blue-600 to-purple-600 bg-clip-text text-transparent mb-4">
VIGEOGUESSR
</h1>
<Badge variant="secondary" className="text-lg px-6 py-2 mb-6">
<MapPin className="h-4 w-4 mr-2" />
Welcome to Vietnam Geography Game
</Badge>
{username && (
<div className="flex items-center justify-center space-x-2 text-muted-foreground">
<Users className="h-4 w-4" />
<span>Playing as: <strong>{username}</strong></span>
</div>
)}
</div>
<div className="grid grid-cols-1 lg:grid-cols-2 gap-8 max-w-6xl mx-auto">
{/* How to Play Section */}
<Card className="bg-white/90 backdrop-blur-sm shadow-lg">
<CardHeader>
<CardTitle className="flex items-center space-x-2 text-2xl">
<Target className="h-6 w-6" />
<span>How to Play</span>
</CardTitle>
</CardHeader>
<CardContent className="space-y-4">
<div className="space-y-4">
<div className="flex items-start space-x-3 p-4 bg-blue-50 rounded-lg border border-blue-200">
<Badge variant="default" className="bg-blue-600 text-white">1</Badge>
<div>
<h3 className="font-semibold text-blue-900">Choose your city</h3>
<p className="text-sm text-blue-700">Select from Vietnamese cities to explore</p>
</div>
</div>
<div className="flex items-start space-x-3 p-4 bg-green-50 rounded-lg border border-green-200">
<Badge variant="default" className="bg-green-600 text-white">2</Badge>
<div>
<h3 className="font-semibold text-green-900">Guess the location</h3>
<p className="text-sm text-green-700">View street images and guess where you are on the map</p>
</div>
</div>
</div>
</CardContent>
</Card>
{/* City Selection Section */}
<Card className="bg-white/90 backdrop-blur-sm shadow-lg">
<CardHeader>
<CardTitle className="flex items-center space-x-2 text-2xl">
<Play className="h-6 w-6" />
<span>Choose Your City</span>
</CardTitle>
</CardHeader>
<CardContent>
<div className="grid grid-cols-1 gap-3">
{Object.entries(LOCATION_NAMES).map(([key, name]) => (
<Button
key={key}
onClick={() => startGame(key)}
size="lg"
className="bg-gradient-to-r from-blue-600 to-purple-600 hover:from-blue-700 hover:to-purple-700 text-white py-4 text-lg font-semibold shadow-lg hover:shadow-xl hover:scale-105 transition-all duration-200"
>
<MapPin className="h-5 w-5 mr-3" />
{name}
<Play className="h-4 w-4 ml-auto" />
</Button>
))}
</div>
</CardContent>
</Card>
</div>
{/* Stats or Additional Info */}
<div className="mt-12 text-center">
<Card className="max-w-2xl mx-auto bg-white/80 backdrop-blur-sm">
<CardContent className="pt-6">
<p className="text-muted-foreground">
Test your geography knowledge by exploring Vietnam through street view images.
Earn points based on how close your guesses are to the actual locations!
</p>
</CardContent>
</Card>
</div>
</div>
<DonateModal
isOpen={showDonateModal}
onClose={() => setShowDonateModal(false)}
/>
<UsernameModal
isOpen={showUsernameModal}
onSubmit={handleUsernameSubmit}
/>
</div>
);
}
+201
View File
@@ -0,0 +1,201 @@
'use client';
import { useEffect, useRef, useState } from 'react';
import maplibregl from 'maplibre-gl';
import 'maplibre-gl/dist/maplibre-gl.css';
import { LOCATION_BOUNDS } from '@/constants/locations';
interface GameMapProps {
choiceLocation: string;
onLocationSelect: (lat: number, lng: number) => void;
}
export default function GameMap({ choiceLocation, onLocationSelect }: GameMapProps) {
const mapRef = useRef<HTMLDivElement>(null);
const mapInstanceRef = useRef<maplibregl.Map | null>(null);
const markersRef = useRef<string[]>([]);
const onLocationSelectRef = useRef(onLocationSelect);
const [isMapReady, setIsMapReady] = useState(false);
const [isInitialized, setIsInitialized] = useState(false);
// Update the ref when the callback changes
useEffect(() => {
onLocationSelectRef.current = onLocationSelect;
}, [onLocationSelect]);
// Initialize map only once
useEffect(() => {
if (!mapRef.current || isInitialized) return;
const initMap = () => {
try {
const [minLong, minLat, maxLong, maxLat] = LOCATION_BOUNDS[choiceLocation];
const centerLat = (minLat + maxLat) / 2;
const centerLng = (minLong + maxLong) / 2;
console.log('Initializing MapLibre map for location:', choiceLocation);
// Create new MapLibre map
mapInstanceRef.current = new maplibregl.Map({
container: mapRef.current!,
style: {
version: 8,
sources: {
'osm-tiles': {
type: 'raster',
tiles: ['https://tile.openstreetmap.org/{z}/{x}/{y}.png'],
tileSize: 256,
attribution: '© OpenStreetMap contributors'
}
},
layers: [
{
id: 'osm-tiles-layer',
type: 'raster',
source: 'osm-tiles'
}
]
},
center: [centerLng, centerLat],
zoom: 9
});
// Add click event listener
mapInstanceRef.current.on('click', (event: maplibregl.MapMouseEvent) => {
const { lng, lat } = event.lngLat;
console.log('MapLibre map clicked at:', { lat, lng });
// Clear existing markers
markersRef.current.forEach(markerId => {
if (mapInstanceRef.current?.getLayer(markerId)) {
mapInstanceRef.current.removeLayer(markerId);
}
if (mapInstanceRef.current?.getSource(markerId)) {
mapInstanceRef.current.removeSource(markerId);
}
});
markersRef.current = [];
// Add new marker
const markerId = `marker-${Date.now()}`;
markersRef.current.push(markerId);
mapInstanceRef.current?.addSource(markerId, {
type: 'geojson',
data: {
type: 'Feature',
geometry: {
type: 'Point',
coordinates: [lng, lat]
},
properties: {}
}
});
mapInstanceRef.current?.addLayer({
id: markerId,
type: 'circle',
source: markerId,
paint: {
'circle-radius': 8,
'circle-color': '#ff4444',
'circle-stroke-color': '#ffffff',
'circle-stroke-width': 2
}
});
// Call the callback using the ref
if (onLocationSelectRef.current) {
onLocationSelectRef.current(lat, lng);
}
});
mapInstanceRef.current.on('load', () => {
setIsMapReady(true);
setIsInitialized(true);
console.log('MapLibre map initialized successfully');
});
} catch (error) {
console.error('Error initializing MapLibre map:', error);
setTimeout(initMap, 500);
}
};
const timer = setTimeout(initMap, 100);
return () => {
clearTimeout(timer);
};
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []); // Empty dependency array - only run once
// Update map center when location changes
useEffect(() => {
if (!mapInstanceRef.current || !isInitialized) return;
const [minLong, minLat, maxLong, maxLat] = LOCATION_BOUNDS[choiceLocation];
const centerLat = (minLat + maxLat) / 2;
const centerLng = (minLong + maxLong) / 2;
console.log('Updating MapLibre map center for location:', choiceLocation);
mapInstanceRef.current.flyTo({
center: [centerLng, centerLat],
zoom: 9
});
// Clear existing markers when location changes
markersRef.current.forEach(markerId => {
if (mapInstanceRef.current?.getLayer(markerId)) {
mapInstanceRef.current.removeLayer(markerId);
}
if (mapInstanceRef.current?.getSource(markerId)) {
mapInstanceRef.current.removeSource(markerId);
}
});
markersRef.current = [];
}, [choiceLocation, isInitialized]);
// Cleanup on unmount
useEffect(() => {
return () => {
if (mapInstanceRef.current) {
try {
mapInstanceRef.current.remove();
} catch (e) {
console.warn('Error removing MapLibre map:', e);
}
mapInstanceRef.current = null;
}
markersRef.current = [];
setIsMapReady(false);
setIsInitialized(false);
};
}, []);
return (
<div style={{ position: 'relative' }}>
<div
ref={mapRef}
className="disclaimer"
style={{
height: '300px',
width: '100%',
cursor: 'crosshair'
}}
/>
{!isMapReady && (
<div style={{
position: 'absolute',
top: '50%',
left: '50%',
transform: 'translate(-50%, -50%)',
color: '#666',
fontSize: '14px'
}}>
Loading map...
</div>
)}
</div>
);
}
+241
View File
@@ -0,0 +1,241 @@
'use client';
import { useEffect, useRef } from 'react';
import { Viewer } from 'mapillary-js';
import 'mapillary-js/dist/mapillary.css';
interface ImageData {
id: string;
url: string;
lat: number;
lng: number;
[key: string]: unknown;
}
interface PanoViewerProps {
imageData: ImageData | null;
isLoading: boolean;
onPreciseLocationLoad?: (lat: number, lng: number) => void;
}
declare global {
interface Window {
mapillaryViewer?: Viewer;
}
}
export default function PanoViewer({ imageData, isLoading, onPreciseLocationLoad }: PanoViewerProps) {
const panoRef = useRef<HTMLDivElement>(null);
const viewerRef = useRef<Viewer | null>(null);
const currentImageIdRef = useRef<string | null>(null);
const isInitializingRef = useRef(false);
// Clean up viewer on unmount only
useEffect(() => {
return () => {
if (viewerRef.current) {
try {
// Only remove if navigable to avoid the error
if (viewerRef.current.isNavigable) {
viewerRef.current.remove();
} else {
// If not navigable, just clear the reference
console.log('Viewer not navigable during cleanup, skipping remove()');
}
} catch (error) {
// Ignore cleanup errors on unmount
}
viewerRef.current = null;
}
};
}, []);
// Handle image changes
useEffect(() => {
if (!panoRef.current || !imageData || isLoading) return;
// Skip if same image
if (currentImageIdRef.current === imageData.id) return;
// Skip if already initializing
if (isInitializingRef.current) return;
const initOrUpdateViewer = async () => {
isInitializingRef.current = true;
currentImageIdRef.current = imageData.id;
try {
// If viewer exists, try to navigate to new image instead of recreating
if (viewerRef.current) {
try {
// Check if viewer is navigable before attempting moveTo
if (viewerRef.current.isNavigable) {
await viewerRef.current.moveTo(imageData.id);
isInitializingRef.current = false;
return;
} else {
console.log('Viewer is not navigable, will recreate');
// Wait for navigation to be possible or recreate
const checkNavigable = () => {
if (viewerRef.current && viewerRef.current.isNavigable) {
viewerRef.current.moveTo(imageData.id).then(() => {
isInitializingRef.current = false;
}).catch(() => {
// If moveTo fails, recreate viewer
if (viewerRef.current) {
viewerRef.current.remove();
viewerRef.current = null;
initOrUpdateViewer(); // Recreate
}
});
} else {
// Viewer still not navigable, recreate immediately
if (viewerRef.current) {
viewerRef.current.remove();
viewerRef.current = null;
}
// Continue with new viewer creation below
}
};
// Give it a brief moment to become navigable
setTimeout(checkNavigable, 100);
return;
}
} catch (error) {
console.log('Navigation failed, will recreate viewer:', error instanceof Error ? error.message : 'Unknown error');
// Only remove if viewer is navigable or wait for it to be
if (viewerRef.current && viewerRef.current.isNavigable) {
viewerRef.current.remove();
viewerRef.current = null;
} else {
console.log('Cannot remove non-navigable viewer, will replace');
viewerRef.current = null;
}
}
}
// Create new viewer
const newViewer = new Viewer({
accessToken: process.env.NEXT_PUBLIC_MAPILLARY_ACCESS_TOKEN || 'MLY|24113623194974280|5bf83fa202912f1cc3210b2cf968fb65',
container: panoRef.current!,
imageId: imageData.id,
component: {
attribution: false,
bearing: false,
cache: false,
cover: false,
direction: false,
image: true,
keyboard: false,
loading: true,
marker: false,
mouse: true,
pointer: false,
popup: false,
sequence: false,
spatial: false,
tag: false,
zoom: true
}
});
viewerRef.current = newViewer;
newViewer.on('image', async (image) => {
console.log('MapillaryJS image loaded successfully:', image.id);
try {
// Get precise position from MapillaryJS
const precisePosition = await newViewer.getPosition();
console.log('Precise MapillaryJS coordinates:', precisePosition);
// Notify parent component of precise coordinates
if (onPreciseLocationLoad) {
onPreciseLocationLoad(precisePosition.lat, precisePosition.lng);
}
} catch (error) {
console.warn('Could not get precise position from MapillaryJS:', error);
// Fall back to original coordinates if precise coordinates fail
if (onPreciseLocationLoad) {
onPreciseLocationLoad(imageData.lat, imageData.lng);
}
}
});
newViewer.on('error', (error) => {
console.error('Error loading MapillaryJS image:', error);
// Fallback to regular image
if (panoRef.current) {
panoRef.current.innerHTML = `
<img src="${imageData.url}"
style="width:100%; height:100%; object-fit:cover; border-radius:10px;"
alt="Street view" />
`;
}
// Use original coordinates if MapillaryJS fails
if (onPreciseLocationLoad) {
onPreciseLocationLoad(imageData.lat, imageData.lng);
}
});
} catch (error) {
console.error('Error initializing MapillaryJS:', error);
// Fallback to regular image
if (panoRef.current) {
panoRef.current.innerHTML = `
<img src="${imageData.url}"
style="width:100%; height:100%; object-fit:cover; border-radius:10px;"
alt="Street view" />
`;
}
// Use original coordinates if MapillaryJS initialization fails
if (onPreciseLocationLoad) {
onPreciseLocationLoad(imageData.lat, imageData.lng);
}
} finally {
isInitializingRef.current = false;
}
};
initOrUpdateViewer();
}, [imageData, onPreciseLocationLoad, isLoading]);
// Expose viewer instance for potential coordinate synchronization
useEffect(() => {
if (viewerRef.current && typeof window !== 'undefined') {
window.mapillaryViewer = viewerRef.current;
}
return () => {
if (typeof window !== 'undefined') {
delete window.mapillaryViewer;
}
};
}, []);
if (isLoading) {
return (
<div className="pano flex items-center justify-center bg-muted/50 rounded-lg border-2 border-dashed border-muted-foreground/25">
<div className="text-center space-y-4">
<div className="animate-spin rounded-full h-12 w-12 border-b-2 border-primary mx-auto"></div>
<div className="text-muted-foreground font-medium">Loading street view...</div>
<div className="text-sm text-muted-foreground">Getting the perfect angle for you</div>
</div>
</div>
);
}
if (!imageData) {
return (
<div className="pano flex items-center justify-center bg-destructive/10 rounded-lg border-2 border-dashed border-destructive/25">
<div className="text-center space-y-2">
<div className="text-4xl">⚠️</div>
<div className="text-lg font-semibold text-destructive">Error loading image</div>
<div className="text-sm text-muted-foreground">Please try again or select a different location</div>
</div>
</div>
);
}
return <div ref={panoRef} className="pano" style={{ minHeight: '400px' }} />;
}
+366
View File
@@ -0,0 +1,366 @@
'use client';
import { useEffect, useRef } from 'react';
import maplibregl from 'maplibre-gl';
import { Viewer } from 'mapillary-js';
import 'maplibre-gl/dist/maplibre-gl.css';
import 'mapillary-js/dist/mapillary.css';
import { Button } from '@/components/ui/button';
import { Badge } from '@/components/ui/badge';
import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
import { ArrowRight, Trophy, MapPin, Target } from 'lucide-react';
interface ImageData {
id: string;
url: string;
lat: number;
lng: number;
[key: string]: unknown;
}
interface ResultModalProps {
isOpen: boolean;
distance: number;
points: number;
trueLocation: [number, number];
guessLocation: [number, number];
imageData: ImageData | null;
onNextRound: () => void;
}
export default function ResultModal({
isOpen,
distance,
points,
trueLocation,
guessLocation,
imageData,
onNextRound
}: ResultModalProps) {
const mapRef = useRef<HTMLDivElement>(null);
const mapInstanceRef = useRef<maplibregl.Map | null>(null);
const panoRef = useRef<HTMLDivElement>(null);
const viewerRef = useRef<Viewer | null>(null);
const markersRef = useRef<string[]>([]);
useEffect(() => {
if (!isOpen || !mapRef.current) return;
const initResultMap = () => {
try {
if (mapInstanceRef.current) {
mapInstanceRef.current.remove();
}
// Clear previous markers
markersRef.current = [];
const [trueLat, trueLng] = trueLocation;
const [guessLat, guessLng] = guessLocation;
// Create MapLibre map
mapInstanceRef.current = new maplibregl.Map({
container: mapRef.current!,
style: {
version: 8,
sources: {
'osm-tiles': {
type: 'raster',
tiles: ['https://tile.openstreetmap.org/{z}/{x}/{y}.png'],
tileSize: 256,
attribution: '© OpenStreetMap contributors'
}
},
layers: [
{
id: 'osm-tiles-layer',
type: 'raster',
source: 'osm-tiles'
}
]
},
center: [trueLng, trueLat],
zoom: 12
});
mapInstanceRef.current.on('load', () => {
if (!mapInstanceRef.current) return;
// Add true location marker (green)
mapInstanceRef.current.addSource('true-location', {
type: 'geojson',
data: {
type: 'Feature',
geometry: {
type: 'Point',
coordinates: [trueLng, trueLat]
},
properties: {}
}
});
mapInstanceRef.current.addLayer({
id: 'true-location-marker',
type: 'circle',
source: 'true-location',
paint: {
'circle-radius': 12,
'circle-color': '#00ff00',
'circle-stroke-color': '#ffffff',
'circle-stroke-width': 3
}
});
// Add guess location marker (red)
mapInstanceRef.current.addSource('guess-location', {
type: 'geojson',
data: {
type: 'Feature',
geometry: {
type: 'Point',
coordinates: [guessLng, guessLat]
},
properties: {}
}
});
mapInstanceRef.current.addLayer({
id: 'guess-location-marker',
type: 'circle',
source: 'guess-location',
paint: {
'circle-radius': 12,
'circle-color': '#ff0000',
'circle-stroke-color': '#ffffff',
'circle-stroke-width': 3
}
});
// Add line between markers
mapInstanceRef.current.addSource('connection-line', {
type: 'geojson',
data: {
type: 'Feature',
geometry: {
type: 'LineString',
coordinates: [[trueLng, trueLat], [guessLng, guessLat]]
},
properties: {}
}
});
mapInstanceRef.current.addLayer({
id: 'connection-line-layer',
type: 'line',
source: 'connection-line',
paint: {
'line-color': '#0066ff',
'line-width': 3,
'line-opacity': 0.8
}
});
// Fit map to show both markers
const bounds = new maplibregl.LngLatBounds();
bounds.extend([trueLng, trueLat]);
bounds.extend([guessLng, guessLat]);
mapInstanceRef.current.fitBounds(bounds, {
padding: 50,
maxZoom: 15
});
});
} catch (error) {
console.error('Error initializing result map:', error);
}
};
const timer = setTimeout(initResultMap, 100);
return () => {
clearTimeout(timer);
if (mapInstanceRef.current) {
mapInstanceRef.current.remove();
mapInstanceRef.current = null;
}
markersRef.current = [];
};
}, [isOpen, trueLocation, guessLocation]);
// Initialize MapillaryJS viewer in result phase with navigation enabled
useEffect(() => {
if (!isOpen || !panoRef.current || !imageData) return;
const initResultViewer = async () => {
try {
if (viewerRef.current) {
viewerRef.current.remove();
}
viewerRef.current = new Viewer({
accessToken: process.env.NEXT_PUBLIC_MAPILLARY_ACCESS_TOKEN || 'MLY|24113623194974280|5bf83fa202912f1cc3210b2cf968fb65',
container: panoRef.current!,
imageId: imageData.id,
component: {
attribution: false,
bearing: true,
cache: false,
cover: false,
direction: true,
image: true,
keyboard: true,
loading: true,
marker: false,
mouse: true,
pointer: true,
popup: false,
sequence: true,
spatial: false,
tag: false,
zoom: true
}
});
viewerRef.current.on('image', (image) => {
console.log('Result phase MapillaryJS loaded with navigation:', image.id);
});
} catch (error) {
console.error('Error initializing result MapillaryJS viewer:', error);
}
};
const timer = setTimeout(initResultViewer, 200);
return () => {
clearTimeout(timer);
if (viewerRef.current) {
viewerRef.current.remove();
viewerRef.current = null;
}
};
}, [isOpen, imageData]);
if (!isOpen) return null;
const formatDistance = (dist: number): string => {
if (dist > 1000) {
return `${(dist / 1000).toFixed(2)} km`;
}
return `${Math.round(dist)} m`;
};
const getResultMessage = (dist: number, pts: number): string => {
if (pts >= 5) return "Perfect! 🎯";
if (pts >= 4) return "Excellent! 🎉";
if (pts >= 3) return "Great job! 👍";
if (pts >= 2) return "Good guess! 👌";
if (pts >= 1) return "Nice try! 🎯";
return "Keep practicing! 💪";
};
const getScoreColor = (pts: number): string => {
if (pts >= 5) return "bg-green-500";
if (pts >= 4) return "bg-blue-500";
if (pts >= 3) return "bg-yellow-500";
if (pts >= 2) return "bg-orange-500";
if (pts >= 1) return "bg-red-400";
return "bg-gray-500";
};
return (
<div className="fixed inset-0 z-50 bg-black/80 backdrop-blur-sm">
<div className="fixed left-[50%] top-[50%] z-50 grid w-full max-w-4xl translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 sm:rounded-lg">
<div className="flex flex-col space-y-6">
{/* Header */}
<Card>
<CardHeader className="text-center">
<div className="flex items-center justify-center mb-2">
<div className="bg-gradient-to-br from-blue-500 to-purple-600 p-3 rounded-full">
<Trophy className="h-8 w-8 text-white" />
</div>
</div>
<CardTitle className="text-3xl font-bold bg-gradient-to-r from-blue-600 to-purple-600 bg-clip-text text-transparent">
Game Result
</CardTitle>
</CardHeader>
<CardContent>
<div className="flex items-center justify-center space-x-8">
<div className="text-center">
<div className="text-sm font-medium text-muted-foreground mb-2">Distance</div>
<Badge variant="outline" className="text-lg px-4 py-2">
<MapPin className="h-4 w-4 mr-2" />
{formatDistance(distance)}
</Badge>
</div>
<div className="text-center">
<div className="text-sm font-medium text-muted-foreground mb-2">Score</div>
<Badge className={`text-lg px-4 py-2 text-white ${getScoreColor(points)}`}>
<Target className="h-4 w-4 mr-2" />
{points} POINTS
</Badge>
</div>
</div>
<div className="mt-6 text-center">
<Badge variant="secondary" className="text-lg px-6 py-2">
{getResultMessage(distance, points)}
</Badge>
</div>
</CardContent>
</Card>
{/* Maps Container */}
<div className="grid grid-cols-1 lg:grid-cols-2 gap-4 h-80">
<Card className="overflow-hidden">
<CardHeader className="py-3">
<CardTitle className="text-sm flex items-center space-x-2">
<MapPin className="h-4 w-4" />
<span>Result Map</span>
</CardTitle>
</CardHeader>
<CardContent className="p-0 h-full">
<div ref={mapRef} className="h-full w-full" />
</CardContent>
</Card>
<Card className="overflow-hidden">
<CardHeader className="py-3">
<CardTitle className="text-sm flex items-center space-x-2">
<Target className="h-4 w-4" />
<span>Explore Location</span>
</CardTitle>
</CardHeader>
<CardContent className="p-0 h-full">
<div ref={panoRef} className="h-full w-full" />
</CardContent>
</Card>
</div>
{/* Instructions */}
<Card className="bg-muted/50">
<CardContent className="pt-6">
<p className="text-center text-sm text-muted-foreground">
You can now explore around the actual location using the street view! Use your mouse to look around and navigate.
</p>
</CardContent>
</Card>
{/* Action Button */}
<div className="flex justify-center">
<Button
onClick={onNextRound}
size="lg"
className="bg-gradient-to-r from-blue-600 to-purple-600 hover:from-blue-700 hover:to-purple-700 text-white px-8 py-3 text-lg font-semibold hover:scale-105"
>
Next Round
<ArrowRight className="h-5 w-5 ml-2" />
</Button>
</div>
</div>
</div>
</div>
);
}
+3
View File
@@ -0,0 +1,3 @@
export { default as GameMap } from './GameMap';
export { default as PanoViewer } from './PanoViewer';
export { default as ResultModal } from './ResultModal';
+62
View File
@@ -0,0 +1,62 @@
'use client';
import Image from 'next/image';
import { Dialog, DialogContent, DialogHeader, DialogTitle } from './dialog';
import { Button } from './button';
import { Card, CardContent } from './card';
import { Coffee, Heart, X } from 'lucide-react';
interface DonateModalProps {
isOpen: boolean;
onClose: () => void;
}
export default function DonateModal({ isOpen, onClose }: DonateModalProps) {
return (
<Dialog open={isOpen} onOpenChange={onClose}>
<DialogContent className="sm:max-w-md">
<DialogHeader>
<DialogTitle className="flex items-center space-x-2 text-center justify-center">
<Coffee className="h-5 w-5 text-orange-500" />
<span>Support VIGEOGUESSR</span>
<Heart className="h-4 w-4 text-red-500" />
</DialogTitle>
</DialogHeader>
<div className="flex flex-col items-center space-y-6 py-4">
<Card className="p-4 bg-gradient-to-br from-orange-50 to-yellow-50 border-orange-200">
<CardContent className="p-0 text-center">
<p className="text-sm text-muted-foreground mb-4">
If you enjoy playing VIGEOGUESSR, consider buying me a coffee!
Your support helps keep this project running and free for everyone.
</p>
<div className="bg-white p-4 rounded-lg shadow-sm">
<Image
src="/QR.png"
width={200}
height={200}
alt="Donation QR Code"
className="mx-auto rounded-md"
/>
</div>
<p className="text-xs text-muted-foreground mt-2">
Scan QR code to donate
</p>
</CardContent>
</Card>
<Button
onClick={onClose}
variant="outline"
className="w-full"
>
<X className="h-4 w-4 mr-2" />
Close
</Button>
</div>
</DialogContent>
</Dialog>
);
}
+33
View File
@@ -0,0 +1,33 @@
'use client';
import { Button } from './button';
import { Coffee, MapPin } from 'lucide-react';
interface HeaderProps {
onDonateClick: () => void;
}
export default function Header({ onDonateClick }: HeaderProps) {
return (
<header className="sticky top-0 z-50 w-full border-b bg-background/95 backdrop-blur supports-[backdrop-filter]:bg-background/60">
<div className="container flex h-16 items-center justify-between px-4">
<div className="flex items-center space-x-2">
<MapPin className="h-6 w-6 text-primary" />
<h1 className="text-xl font-bold bg-gradient-to-r from-primary to-blue-600 bg-clip-text text-transparent">
VIGEOGUESSR
</h1>
</div>
<Button
variant="outline"
size="sm"
onClick={onDonateClick}
className="flex items-center space-x-2 hover:bg-orange-50 hover:border-orange-200 transition-colors"
>
<Coffee className="h-4 w-4" />
<span>Buy me coffee</span>
</Button>
</div>
</header>
);
}
+83
View File
@@ -0,0 +1,83 @@
'use client';
import { useState, FormEvent, ChangeEvent } from 'react';
import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription } from './dialog';
import { Button } from './button';
import { Input } from './input';
import { Card, CardContent } from './card';
import { User, Play, MapPin } from 'lucide-react';
interface UsernameModalProps {
isOpen: boolean;
onSubmit: (username: string) => void;
}
export default function UsernameModal({ isOpen, onSubmit }: UsernameModalProps) {
const [username, setUsername] = useState('');
const handleSubmit = (e: FormEvent<HTMLFormElement>) => {
e.preventDefault();
if (username.trim()) {
onSubmit(username.trim());
}
};
const handleInputChange = (e: ChangeEvent<HTMLInputElement>) => {
setUsername(e.target.value);
};
return (
<Dialog open={isOpen} onOpenChange={() => {}}>
<DialogContent className="sm:max-w-lg">
<DialogHeader className="text-center">
<div className="flex items-center justify-center mb-4">
<div className="bg-gradient-to-br from-blue-500 to-purple-600 p-3 rounded-full">
<MapPin className="h-8 w-8 text-white" />
</div>
</div>
<DialogTitle className="text-2xl font-bold bg-gradient-to-r from-blue-600 to-purple-600 bg-clip-text text-transparent">
Welcome to VIGEOGUESSR!
</DialogTitle>
<DialogDescription className="text-base mt-2">
Test your geography knowledge by guessing locations from street view images across Vietnam
</DialogDescription>
</DialogHeader>
<Card className="bg-gradient-to-br from-blue-50 to-purple-50 border-blue-200">
<CardContent className="p-6">
<form onSubmit={handleSubmit} className="space-y-6">
<div className="space-y-2">
<label htmlFor="username" className="text-sm font-medium flex items-center space-x-2">
<User className="h-4 w-4" />
<span>Choose your username</span>
</label>
<Input
id="username"
type="text"
value={username}
onChange={handleInputChange}
placeholder="Enter your username"
maxLength={20}
autoFocus
className="text-center text-lg py-3"
/>
<p className="text-xs text-muted-foreground text-center">
{username.length}/20 characters
</p>
</div>
<Button
type="submit"
disabled={!username.trim()}
className="w-full bg-gradient-to-r from-blue-600 to-purple-600 hover:from-blue-700 hover:to-purple-700 text-white py-3 text-lg font-semibold"
>
<Play className="h-5 w-5 mr-2" />
Start Playing
</Button>
</form>
</CardContent>
</Card>
</DialogContent>
</Dialog>
);
}
+46
View File
@@ -0,0 +1,46 @@
import * as React from "react"
import { Slot } from "@radix-ui/react-slot"
import { cva, type VariantProps } from "class-variance-authority"
import { cn } from "@/lib/utils"
const badgeVariants = cva(
"inline-flex items-center justify-center rounded-md border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden",
{
variants: {
variant: {
default:
"border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90",
secondary:
"border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90",
destructive:
"border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",
outline:
"text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground",
},
},
defaultVariants: {
variant: "default",
},
}
)
function Badge({
className,
variant,
asChild = false,
...props
}: React.ComponentProps<"span"> &
VariantProps<typeof badgeVariants> & { asChild?: boolean }) {
const Comp = asChild ? Slot : "span"
return (
<Comp
data-slot="badge"
className={cn(badgeVariants({ variant }), className)}
{...props}
/>
)
}
export { Badge, badgeVariants }
+59
View File
@@ -0,0 +1,59 @@
import * as React from "react"
import { Slot } from "@radix-ui/react-slot"
import { cva, type VariantProps } from "class-variance-authority"
import { cn } from "@/lib/utils"
const buttonVariants = cva(
"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",
{
variants: {
variant: {
default:
"bg-primary text-primary-foreground shadow-xs hover:bg-primary/90",
destructive:
"bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",
outline:
"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50",
secondary:
"bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80",
ghost:
"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",
link: "text-primary underline-offset-4 hover:underline",
},
size: {
default: "h-9 px-4 py-2 has-[>svg]:px-3",
sm: "h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5",
lg: "h-10 rounded-md px-6 has-[>svg]:px-4",
icon: "size-9",
},
},
defaultVariants: {
variant: "default",
size: "default",
},
}
)
function Button({
className,
variant,
size,
asChild = false,
...props
}: React.ComponentProps<"button"> &
VariantProps<typeof buttonVariants> & {
asChild?: boolean
}) {
const Comp = asChild ? Slot : "button"
return (
<Comp
data-slot="button"
className={cn(buttonVariants({ variant, size, className }))}
{...props}
/>
)
}
export { Button, buttonVariants }
+92
View File
@@ -0,0 +1,92 @@
import * as React from "react"
import { cn } from "@/lib/utils"
function Card({ className, ...props }: React.ComponentProps<"div">) {
return (
<div
data-slot="card"
className={cn(
"bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm",
className
)}
{...props}
/>
)
}
function CardHeader({ className, ...props }: React.ComponentProps<"div">) {
return (
<div
data-slot="card-header"
className={cn(
"@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-1.5 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6",
className
)}
{...props}
/>
)
}
function CardTitle({ className, ...props }: React.ComponentProps<"div">) {
return (
<div
data-slot="card-title"
className={cn("leading-none font-semibold", className)}
{...props}
/>
)
}
function CardDescription({ className, ...props }: React.ComponentProps<"div">) {
return (
<div
data-slot="card-description"
className={cn("text-muted-foreground text-sm", className)}
{...props}
/>
)
}
function CardAction({ className, ...props }: React.ComponentProps<"div">) {
return (
<div
data-slot="card-action"
className={cn(
"col-start-2 row-span-2 row-start-1 self-start justify-self-end",
className
)}
{...props}
/>
)
}
function CardContent({ className, ...props }: React.ComponentProps<"div">) {
return (
<div
data-slot="card-content"
className={cn("px-6", className)}
{...props}
/>
)
}
function CardFooter({ className, ...props }: React.ComponentProps<"div">) {
return (
<div
data-slot="card-footer"
className={cn("flex items-center px-6 [.border-t]:pt-6", className)}
{...props}
/>
)
}
export {
Card,
CardHeader,
CardFooter,
CardTitle,
CardAction,
CardDescription,
CardContent,
}
+141
View File
@@ -0,0 +1,141 @@
import * as React from "react"
import * as DialogPrimitive from "@radix-ui/react-dialog"
import { XIcon } from "lucide-react"
import { cn } from "@/lib/utils"
function Dialog({
...props
}: React.ComponentProps<typeof DialogPrimitive.Root>) {
return <DialogPrimitive.Root data-slot="dialog" {...props} />
}
function DialogTrigger({
...props
}: React.ComponentProps<typeof DialogPrimitive.Trigger>) {
return <DialogPrimitive.Trigger data-slot="dialog-trigger" {...props} />
}
function DialogPortal({
...props
}: React.ComponentProps<typeof DialogPrimitive.Portal>) {
return <DialogPrimitive.Portal data-slot="dialog-portal" {...props} />
}
function DialogClose({
...props
}: React.ComponentProps<typeof DialogPrimitive.Close>) {
return <DialogPrimitive.Close data-slot="dialog-close" {...props} />
}
function DialogOverlay({
className,
...props
}: React.ComponentProps<typeof DialogPrimitive.Overlay>) {
return (
<DialogPrimitive.Overlay
data-slot="dialog-overlay"
className={cn(
"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",
className
)}
{...props}
/>
)
}
function DialogContent({
className,
children,
showCloseButton = true,
...props
}: React.ComponentProps<typeof DialogPrimitive.Content> & {
showCloseButton?: boolean
}) {
return (
<DialogPortal data-slot="dialog-portal">
<DialogOverlay />
<DialogPrimitive.Content
data-slot="dialog-content"
className={cn(
"bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 sm:max-w-lg",
className
)}
{...props}
>
{children}
{showCloseButton && (
<DialogPrimitive.Close
data-slot="dialog-close"
className="ring-offset-background focus:ring-ring data-[state=open]:bg-accent data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4"
>
<XIcon />
<span className="sr-only">Close</span>
</DialogPrimitive.Close>
)}
</DialogPrimitive.Content>
</DialogPortal>
)
}
function DialogHeader({ className, ...props }: React.ComponentProps<"div">) {
return (
<div
data-slot="dialog-header"
className={cn("flex flex-col gap-2 text-center sm:text-left", className)}
{...props}
/>
)
}
function DialogFooter({ className, ...props }: React.ComponentProps<"div">) {
return (
<div
data-slot="dialog-footer"
className={cn(
"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",
className
)}
{...props}
/>
)
}
function DialogTitle({
className,
...props
}: React.ComponentProps<typeof DialogPrimitive.Title>) {
return (
<DialogPrimitive.Title
data-slot="dialog-title"
className={cn("text-lg leading-none font-semibold", className)}
{...props}
/>
)
}
function DialogDescription({
className,
...props
}: React.ComponentProps<typeof DialogPrimitive.Description>) {
return (
<DialogPrimitive.Description
data-slot="dialog-description"
className={cn("text-muted-foreground text-sm", className)}
{...props}
/>
)
}
export {
Dialog,
DialogClose,
DialogContent,
DialogDescription,
DialogFooter,
DialogHeader,
DialogOverlay,
DialogPortal,
DialogTitle,
DialogTrigger,
}
+3
View File
@@ -0,0 +1,3 @@
export { default as Header } from './Header';
export { default as DonateModal } from './DonateModal';
export { default as UsernameModal } from './UsernameModal';
+21
View File
@@ -0,0 +1,21 @@
import * as React from "react"
import { cn } from "@/lib/utils"
function Input({ className, type, ...props }: React.ComponentProps<"input">) {
return (
<input
type={type}
data-slot="input"
className={cn(
"file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input flex h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
"focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]",
"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",
className
)}
{...props}
/>
)
}
export { Input }
+31
View File
@@ -0,0 +1,31 @@
"use client"
import * as React from "react"
import * as ProgressPrimitive from "@radix-ui/react-progress"
import { cn } from "@/lib/utils"
function Progress({
className,
value,
...props
}: React.ComponentProps<typeof ProgressPrimitive.Root>) {
return (
<ProgressPrimitive.Root
data-slot="progress"
className={cn(
"bg-primary/20 relative h-2 w-full overflow-hidden rounded-full",
className
)}
{...props}
>
<ProgressPrimitive.Indicator
data-slot="progress-indicator"
className="bg-primary h-full w-full flex-1 transition-all"
style={{ transform: `translateX(-${100 - (value || 0)}%)` }}
/>
</ProgressPrimitive.Root>
)
}
export { Progress }
+13
View File
@@ -0,0 +1,13 @@
import { cn } from "@/lib/utils"
function Skeleton({ className, ...props }: React.ComponentProps<"div">) {
return (
<div
data-slot="skeleton"
className={cn("bg-accent animate-pulse rounded-md", className)}
{...props}
/>
)
}
export { Skeleton }
+74
View File
@@ -0,0 +1,74 @@
/**
* Game location constants for Vietnamese cities
*/
/**
* Location codes enum
*/
export const LOCATION_CODES = {
HANOI: 'HN',
HO_CHI_MINH: 'TPHCM',
HAI_PHONG: 'HP',
NAM_DINH: 'ND',
DA_NANG: 'DN',
DALAT: 'DL',
DUC_HOA: 'DHLA'
} as const;
/**
* Location code types
*/
export type LocationCode = typeof LOCATION_CODES[keyof typeof LOCATION_CODES];
/**
* Location bounds format: [minLongitude, minLatitude, maxLongitude, maxLatitude, deltaRadius]
*/
export type LocationBounds = [number, number, number, number, number];
/**
* Vietnamese city boundaries for the geography guessing game
* Format: [minLongitude, minLatitude, maxLongitude, maxLatitude, deltaRadius]
*/
export const LOCATION_BOUNDS: Record<LocationCode, LocationBounds> = {
[LOCATION_CODES.HANOI]: [105.77, 20.96, 105.88, 21.05, 0.003],
[LOCATION_CODES.HO_CHI_MINH]: [106.62, 10.71, 106.75, 10.83, 0.005],
[LOCATION_CODES.HAI_PHONG]: [106.65, 20.8, 106.75, 20.9, 0.05],
[LOCATION_CODES.NAM_DINH]: [106, 20.35, 106.25, 20.5, 0.005],
[LOCATION_CODES.DA_NANG]: [108.17, 16, 108.25, 16.1, 0.005],
[LOCATION_CODES.DALAT]: [108.38, 11.89, 108.50, 12.00, 0.005],
[LOCATION_CODES.DUC_HOA]: [106.35, 10.85, 106.45, 10.95, 0.005]
};
/**
* Display names for Vietnamese cities
*/
export const LOCATION_NAMES: Record<LocationCode, string> = {
[LOCATION_CODES.HANOI]: 'HA NOI',
[LOCATION_CODES.HO_CHI_MINH]: 'TP. HO CHI MINH',
[LOCATION_CODES.HAI_PHONG]: 'HAI PHONG',
[LOCATION_CODES.NAM_DINH]: 'NAM DINH',
[LOCATION_CODES.DA_NANG]: 'DA NANG',
[LOCATION_CODES.DALAT]: 'DALAT',
[LOCATION_CODES.DUC_HOA]: 'DUC HOA'
};
/**
* Get all available location codes
*/
export function getAvailableLocations(): LocationCode[] {
return Object.values(LOCATION_CODES);
}
/**
* Get display name for location code
*/
export function getLocationDisplayName(locationCode: string): string {
return LOCATION_NAMES[locationCode as LocationCode] || '';
}
/**
* Get bounds for location code
*/
export function getLocationBounds(locationCode: string): LocationBounds | null {
return LOCATION_BOUNDS[locationCode as LocationCode] || null;
}
+3
View File
@@ -0,0 +1,3 @@
export { useMapillaryImage } from './useMapillary';
export { useScoring } from './useScoring';
export type { ScoreSubmission, ScoreResponse } from './useScoring';
+21
View File
@@ -0,0 +1,21 @@
import { useQuery, UseQueryResult } from '@tanstack/react-query';
import { fetchRandomGameImage, GameImageData } from '@/services/game-image.service';
/**
* React Query hook for fetching Mapillary images
*/
export function useMapillaryImage(locationCode: string): UseQueryResult<GameImageData | null, Error> {
return useQuery({
queryKey: ['mapillary-image', locationCode],
queryFn: () => fetchRandomGameImage(locationCode),
enabled: !!locationCode,
staleTime: 5 * 60 * 1000, // 5 minutes
retry: 3,
retryDelay: (attemptIndex: number) => Math.min(1000 * 2 ** attemptIndex, 30000),
});
}
/**
* @deprecated Use useMapillaryImage instead
*/
export const useGameImage = useMapillaryImage;
+72
View File
@@ -0,0 +1,72 @@
import { useMutation, UseMutationResult } from '@tanstack/react-query';
/**
* Scoring data type definition
*/
export interface ScoreSubmission {
username: string;
guessLat: number;
guessLng: number;
trueLat: number;
trueLng: number;
imageId: string;
}
/**
* Score submission response type
*/
export interface ScoreResponse {
sessionId: string;
distance: number;
points: number;
username: string;
}
/**
* React Query mutation hook for submitting game scores
*/
export function useScoring(): UseMutationResult<ScoreResponse, Error, ScoreSubmission> {
return useMutation({
mutationFn: async (scoreData: ScoreSubmission): Promise<ScoreResponse> => {
// Validate score data before sending
if (!isValidScoreData(scoreData)) {
throw new Error('Invalid score data provided');
}
const response = await fetch('/api/scoring', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(scoreData),
});
if (!response.ok) {
const errorData = await response.json().catch(() => ({}));
throw new Error(errorData.error || 'Failed to submit score');
}
return response.json();
},
retry: 2,
retryDelay: (attemptIndex: number) => Math.min(1000 * 2 ** attemptIndex, 10000),
});
}
/**
* Validates score submission data
*/
function isValidScoreData(scoreData: unknown): scoreData is ScoreSubmission {
if (typeof scoreData !== 'object' || scoreData === null) {
return false;
}
const data = scoreData as Record<string, unknown>;
return typeof data.username === 'string' &&
data.username.trim().length > 0 &&
typeof data.guessLat === 'number' &&
typeof data.guessLng === 'number' &&
typeof data.trueLat === 'number' &&
typeof data.trueLng === 'number' &&
typeof data.imageId === 'string' &&
data.imageId.trim().length > 0;
}
+26
View File
@@ -0,0 +1,26 @@
'use client';
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
import { useState, ReactNode } from 'react';
interface ReactQueryProviderProps {
children: ReactNode;
}
export default function ReactQueryProvider({ children }: ReactQueryProviderProps) {
const [queryClient] = useState(() => new QueryClient({
defaultOptions: {
queries: {
staleTime: 5 * 60 * 1000, // 5 minutes
retry: 2,
retryDelay: (attemptIndex: number) => Math.min(1000 * 2 ** attemptIndex, 30000),
},
},
}));
return (
<QueryClientProvider client={queryClient}>
{children}
</QueryClientProvider>
);
}
+6
View File
@@ -0,0 +1,6 @@
import { clsx, type ClassValue } from "clsx";
import { twMerge } from "tailwind-merge";
export function cn(...inputs: ClassValue[]) {
return twMerge(clsx(inputs));
}
+103
View File
@@ -0,0 +1,103 @@
/**
* Game image service for fetching panoramic images
*/
/**
* Image fetching configuration
*/
const IMAGE_CONFIG = {
MAX_RETRIES: 3,
RETRY_DELAY: 1000,
TIMEOUT: 10000
} as const;
export interface GameImageData {
id: string;
url: string;
lat: number;
lng: number;
coordinates: [number, number];
isPano?: boolean;
}
/**
* Fetches a random panoramic image from server-side Mapillary API
*/
export async function fetchRandomGameImage(
locationCode: string,
maxRetries: number = IMAGE_CONFIG.MAX_RETRIES
): Promise<GameImageData | null> {
for (let attempt = 1; attempt <= maxRetries; attempt++) {
try {
console.log(`Fetching panoramic image for ${locationCode} (attempt ${attempt}/${maxRetries})...`);
const controller = new AbortController();
const timeoutId = setTimeout(() => controller.abort(), IMAGE_CONFIG.TIMEOUT);
const response = await fetch(`/api/mapillary?location=${locationCode}`, {
signal: controller.signal
});
clearTimeout(timeoutId);
if (!response.ok) {
if (response.status === 404 && attempt < maxRetries) {
console.log("No images found, retrying...");
await delay(IMAGE_CONFIG.RETRY_DELAY);
continue;
}
throw new Error(`Server responded with status: ${response.status}`);
}
const imageData = await response.json();
console.log("Image fetched successfully from server");
// Validate image data structure
if (!isValidImageData(imageData)) {
throw new Error('Invalid image data received from server');
}
return imageData;
} catch (error) {
console.error(`Error fetching image (attempt ${attempt}/${maxRetries}):`, error);
if (attempt === maxRetries) {
console.error("Max retries reached, returning null");
return null;
}
// Wait before retrying
if (attempt < maxRetries) {
await delay(IMAGE_CONFIG.RETRY_DELAY * attempt); // Exponential backoff
}
}
}
return null;
}
/**
* Validates image data structure
*/
function isValidImageData(imageData: unknown): imageData is GameImageData {
if (typeof imageData !== 'object' || imageData === null) {
return false;
}
const data = imageData as Record<string, unknown>;
return typeof data.id === 'string' &&
typeof data.url === 'string' &&
typeof data.lat === 'number' &&
typeof data.lng === 'number' &&
Array.isArray(data.coordinates) &&
data.coordinates.length === 2;
}
/**
* Creates a delay for retry logic
*/
function delay(ms: number): Promise<void> {
return new Promise(resolve => setTimeout(resolve, ms));
}
+132
View File
@@ -0,0 +1,132 @@
/**
* Geography service for coordinate validation and distance calculations
*/
/**
* Earth's radius in meters (WGS84)
*/
const EARTH_RADIUS_METERS = 6371000;
/**
* OpenStreetMap Nominatim API configuration
*/
const OSM_CONFIG = {
BASE_URL: 'https://nominatim.openstreetmap.org',
USER_AGENT: 'VIGEOGUESSR/1.0 (https://vigeoguessr.com)',
TIMEOUT: 5000
} as const;
interface OSMResponse {
display_name?: string;
error?: string;
}
/**
* Validates if coordinates are within valid ranges
*/
export function isValidCoordinate(latitude: number, longitude: number): boolean {
return typeof latitude === 'number' &&
typeof longitude === 'number' &&
latitude >= -90 && latitude <= 90 &&
longitude >= -180 && longitude <= 180 &&
!isNaN(latitude) && !isNaN(longitude);
}
/**
* Calculates straight-line distance between two coordinates using Haversine formula
*/
export function calculateHaversineDistance(
lat1: number,
lon1: number,
lat2: number,
lon2: number
): number {
if (lat1 === lat2 && lon1 === lon2) {
return 0;
}
const φ1 = lat1 * Math.PI / 180;
const φ2 = lat2 * Math.PI / 180;
const Δφ = (lat2 - lat1) * Math.PI / 180;
const Δλ = (lon2 - lon1) * Math.PI / 180;
const a = Math.sin(Δφ / 2) * Math.sin(Δφ / 2) +
Math.cos(φ1) * Math.cos(φ2) *
Math.sin(Δλ / 2) * Math.sin(Δλ / 2);
const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
const distance = EARTH_RADIUS_METERS * c;
return parseFloat(distance.toFixed(1));
}
/**
* Validates coordinates using OpenStreetMap Nominatim API
*/
export async function validateCoordinateWithOSM(
latitude: number,
longitude: number
): Promise<boolean> {
try {
const url = `${OSM_CONFIG.BASE_URL}/reverse?format=json&lat=${latitude}&lon=${longitude}&zoom=10&addressdetails=0`;
const controller = new AbortController();
const timeoutId = setTimeout(() => controller.abort(), OSM_CONFIG.TIMEOUT);
const response = await fetch(url, {
headers: {
'User-Agent': OSM_CONFIG.USER_AGENT
},
signal: controller.signal
});
clearTimeout(timeoutId);
if (!response.ok) {
return false;
}
const data: OSMResponse = await response.json();
return data && data.display_name && !data.error;
} catch (error) {
console.warn('OSM validation failed:', error);
return true; // Assume valid if validation fails
}
}
/**
* Calculates distance between two geographic coordinates with validation
*/
export async function calculateDistance(
lat1: number,
lon1: number,
lat2: number,
lon2: number
): Promise<number> {
// Validate input coordinates
if (!isValidCoordinate(lat1, lon1) || !isValidCoordinate(lat2, lon2)) {
throw new Error('Invalid coordinates provided');
}
if (lat1 === lat2 && lon1 === lon2) {
return 0;
}
try {
// Validate coordinates with OpenStreetMap (parallel requests)
const [valid1, valid2] = await Promise.all([
validateCoordinateWithOSM(lat1, lon1),
validateCoordinateWithOSM(lat2, lon2)
]);
if (!valid1 || !valid2) {
console.warn('One or both coordinates may be invalid (water/empty area)');
}
} catch (error) {
console.warn('OSM validation failed, proceeding with calculation:', error);
}
// Calculate straight-line distance using Haversine formula
return calculateHaversineDistance(lat1, lon1, lat2, lon2);
}
+128
View File
@@ -0,0 +1,128 @@
/**
* Mapillary service for street view image operations
*/
/**
* Mapillary API configuration
*/
const MAPILLARY_CONFIG = {
BASE_URL: 'https://graph.mapillary.com',
DEFAULT_ACCESS_TOKEN: 'MLY|24113623194974280|5bf83fa202912f1cc3210b2cf968fb65',
IMAGE_SIZE: 2048,
TIMEOUT: 10000
} as const;
interface Bounds {
north: number;
south: number;
east: number;
west: number;
}
interface Geometry {
coordinates: [number, number];
}
interface MapillaryImage {
id: string;
thumb_2048_url: string;
geometry: Geometry;
computed_geometry?: Geometry;
}
interface MapillaryResponse {
data: MapillaryImage[];
}
export interface MapillaryImageData {
id: string;
url: string;
lat: number;
lng: number;
coordinates: [number, number];
}
/**
* Gets Mapillary access token from environment or default
*/
function getAccessToken(): string {
return process.env.MAPILLARY_ACCESS_TOKEN ||
process.env.NEXT_PUBLIC_MAPILLARY_ACCESS_TOKEN ||
MAPILLARY_CONFIG.DEFAULT_ACCESS_TOKEN;
}
/**
* Fetches random Mapillary image within specified bounds
*/
export async function getRandomMapillaryImage(
bounds: Bounds,
limit: number = 50
): Promise<MapillaryImageData | null> {
try {
const accessToken = getAccessToken();
const { north, south, east, west } = bounds;
// Construct Mapillary Graph API URL for images
const url = new URL(`${MAPILLARY_CONFIG.BASE_URL}/images`);
url.searchParams.set('access_token', accessToken);
url.searchParams.set('bbox', `${west},${south},${east},${north}`);
url.searchParams.set('limit', limit.toString());
url.searchParams.set('fields', 'id,thumb_2048_url,geometry,computed_geometry');
const controller = new AbortController();
const timeoutId = setTimeout(() => controller.abort(), MAPILLARY_CONFIG.TIMEOUT);
const response = await fetch(url, {
signal: controller.signal
});
clearTimeout(timeoutId);
if (!response.ok) {
throw new Error(`Mapillary API error: ${response.status} ${response.statusText}`);
}
const data: MapillaryResponse = await response.json();
if (!data.data || data.data.length === 0) {
console.warn('No Mapillary images found in bounds:', bounds);
return null;
}
// Select random image
const randomImage = data.data[Math.floor(Math.random() * data.data.length)];
// Extract coordinates - prefer computed_geometry, fallback to geometry
const geometry = randomImage.computed_geometry || randomImage.geometry;
const [lng, lat] = geometry.coordinates;
return {
id: randomImage.id,
url: randomImage.thumb_2048_url,
lat: lat,
lng: lng,
coordinates: [lat, lng]
};
} catch (error) {
console.error('Error fetching Mapillary image:', error);
throw new Error(`Failed to fetch street view image: ${error instanceof Error ? error.message : 'Unknown error'}`);
}
}
/**
* Validates Mapillary image exists and is accessible
*/
export async function validateMapillaryImage(imageId: string): Promise<boolean> {
try {
const accessToken = getAccessToken();
const url = `${MAPILLARY_CONFIG.BASE_URL}/${imageId}?access_token=${accessToken}&fields=id`;
const response = await fetch(url);
return response.ok;
} catch (error) {
console.warn('Mapillary image validation failed:', error);
return false;
}
}
+66
View File
@@ -0,0 +1,66 @@
/**
* Scoring service for game mechanics
*/
/**
* Game scoring configuration
*/
export const SCORING_CONFIG = {
DISTANCE_THRESHOLDS: {
PERFECT: 0.05, // 50m
EXCELLENT: 0.1, // 100m
GOOD: 0.2, // 200m
FAIR: 0.5, // 500m
POOR: 1.0 // 1km
},
POINTS: {
PERFECT: 5,
EXCELLENT: 4,
GOOD: 3,
FAIR: 2,
POOR: 1,
NONE: 0
}
} as const;
/**
* Calculates points based on distance in meters
*/
export function calculatePoints(distanceMeters: number): number {
const distanceKm = distanceMeters / 1000;
const { DISTANCE_THRESHOLDS, POINTS } = SCORING_CONFIG;
if (distanceKm <= DISTANCE_THRESHOLDS.PERFECT) return POINTS.PERFECT;
if (distanceKm <= DISTANCE_THRESHOLDS.EXCELLENT) return POINTS.EXCELLENT;
if (distanceKm <= DISTANCE_THRESHOLDS.GOOD) return POINTS.GOOD;
if (distanceKm <= DISTANCE_THRESHOLDS.FAIR) return POINTS.FAIR;
if (distanceKm <= DISTANCE_THRESHOLDS.POOR) return POINTS.POOR;
return POINTS.NONE;
}
/**
* Gets score description based on points
*/
export function getScoreDescription(points: number): string {
const { POINTS } = SCORING_CONFIG;
switch (points) {
case POINTS.PERFECT: return 'Perfect!';
case POINTS.EXCELLENT: return 'Excellent!';
case POINTS.GOOD: return 'Good!';
case POINTS.FAIR: return 'Fair';
case POINTS.POOR: return 'Poor';
default: return 'Try again';
}
}
/**
* Formats distance for display
*/
export function formatDistance(distanceMeters: number): string {
if (distanceMeters >= 1000) {
return `${(distanceMeters / 1000).toFixed(1)} km`;
}
return `${Math.round(distanceMeters)} m`;
}
+43
View File
@@ -0,0 +1,43 @@
declare module 'mapillary-js' {
export interface ViewerOptions {
accessToken: string;
container: HTMLElement;
imageId: string;
component?: {
attribution?: boolean;
bearing?: boolean;
cache?: boolean;
cover?: boolean;
direction?: boolean;
image?: boolean;
keyboard?: boolean;
loading?: boolean;
marker?: boolean;
mouse?: boolean;
pointer?: boolean;
popup?: boolean;
sequence?: boolean;
spatial?: boolean;
tag?: boolean;
zoom?: boolean;
};
}
export interface Position {
lat: number;
lng: number;
}
export class Viewer {
constructor(options: ViewerOptions);
isNavigable: boolean;
on(event: 'image', callback: (image: { id: string }) => void): void;
on(event: 'error', callback: (error: Error) => void): void;
moveTo(imageId: string): Promise<void>;
getPosition(): Promise<Position>;
remove(): void;
}
}
+36
View File
@@ -0,0 +1,36 @@
declare module 'maplibre-gl' {
export interface LngLat {
lng: number;
lat: number;
}
export interface MapMouseEvent {
lngLat: LngLat;
point: { x: number; y: number };
}
export interface MapOptions {
container: HTMLElement;
style: any;
center: [number, number];
zoom: number;
}
export class Map {
constructor(options: MapOptions);
on(event: 'click', callback: (event: MapMouseEvent) => void): void;
on(event: 'load', callback: () => void): void;
flyTo(options: { center: [number, number]; zoom: number }): void;
addSource(id: string, source: any): void;
addLayer(layer: any): void;
removeLayer(id: string): void;
removeSource(id: string): void;
getLayer(id: string): any;
getSource(id: string): any;
remove(): void;
}
export default Map;
}
+79
View File
@@ -0,0 +1,79 @@
import type { Config } from 'tailwindcss'
const config: Config = {
darkMode: ["class"],
content: [
'./src/pages/**/*.{js,ts,jsx,tsx,mdx}',
'./src/components/**/*.{js,ts,jsx,tsx,mdx}',
'./src/app/**/*.{js,ts,jsx,tsx,mdx}',
],
prefix: "",
theme: {
container: {
center: true,
padding: "2rem",
screens: {
"2xl": "1400px",
},
},
extend: {
colors: {
border: "hsl(var(--border))",
input: "hsl(var(--input))",
ring: "hsl(var(--ring))",
background: "hsl(var(--background))",
foreground: "hsl(var(--foreground))",
primary: {
DEFAULT: "hsl(var(--primary))",
foreground: "hsl(var(--primary-foreground))",
},
secondary: {
DEFAULT: "hsl(var(--secondary))",
foreground: "hsl(var(--secondary-foreground))",
},
destructive: {
DEFAULT: "hsl(var(--destructive))",
foreground: "hsl(var(--destructive-foreground))",
},
muted: {
DEFAULT: "hsl(var(--muted))",
foreground: "hsl(var(--muted-foreground))",
},
accent: {
DEFAULT: "hsl(var(--accent))",
foreground: "hsl(var(--accent-foreground))",
},
popover: {
DEFAULT: "hsl(var(--popover))",
foreground: "hsl(var(--popover-foreground))",
},
card: {
DEFAULT: "hsl(var(--card))",
foreground: "hsl(var(--card-foreground))",
},
},
borderRadius: {
lg: "var(--radius)",
md: "calc(var(--radius) - 2px)",
sm: "calc(var(--radius) - 4px)",
},
keyframes: {
"accordion-down": {
from: { height: "0" },
to: { height: "var(--radix-accordion-content-height)" },
},
"accordion-up": {
from: { height: "var(--radix-accordion-content-height)" },
to: { height: "0" },
},
},
animation: {
"accordion-down": "accordion-down 0.2s ease-out",
"accordion-up": "accordion-up 0.2s ease-out",
},
},
},
plugins: [require('@tailwindcss/typography')],
}
export default config
+40
View File
@@ -0,0 +1,40 @@
{
"compilerOptions": {
"lib": ["dom", "dom.iterable", "ES2022"],
"allowJs": false,
"skipLibCheck": true,
"strict": false,
"noEmit": true,
"esModuleInterop": true,
"module": "esnext",
"moduleResolution": "bundler",
"resolveJsonModule": true,
"isolatedModules": true,
"jsx": "preserve",
"incremental": true,
"plugins": [
{
"name": "next"
}
],
"baseUrl": ".",
"paths": {
"@/*": ["./src/*"]
},
"target": "ES2022",
"forceConsistentCasingInFileNames": true,
"noUncheckedIndexedAccess": false,
"exactOptionalPropertyTypes": false
},
"include": [
"next-env.d.ts",
"**/*.ts",
"**/*.tsx",
".next/types/**/*.ts"
],
"exclude": [
"node_modules",
"**/*.js",
"**/*.jsx"
]
}
+1
View File
@@ -0,0 +1 @@
{"fileNames":["./node_modules/typescript/lib/lib.es5.d.ts","./node_modules/typescript/lib/lib.es2015.d.ts","./node_modules/typescript/lib/lib.es2016.d.ts","./node_modules/typescript/lib/lib.es2017.d.ts","./node_modules/typescript/lib/lib.es2018.d.ts","./node_modules/typescript/lib/lib.es2019.d.ts","./node_modules/typescript/lib/lib.es2020.d.ts","./node_modules/typescript/lib/lib.es2021.d.ts","./node_modules/typescript/lib/lib.es2022.d.ts","./node_modules/typescript/lib/lib.dom.d.ts","./node_modules/typescript/lib/lib.dom.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.core.d.ts","./node_modules/typescript/lib/lib.es2015.collection.d.ts","./node_modules/typescript/lib/lib.es2015.generator.d.ts","./node_modules/typescript/lib/lib.es2015.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.promise.d.ts","./node_modules/typescript/lib/lib.es2015.proxy.d.ts","./node_modules/typescript/lib/lib.es2015.reflect.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2016.array.include.d.ts","./node_modules/typescript/lib/lib.es2016.intl.d.ts","./node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","./node_modules/typescript/lib/lib.es2017.date.d.ts","./node_modules/typescript/lib/lib.es2017.object.d.ts","./node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2017.string.d.ts","./node_modules/typescript/lib/lib.es2017.intl.d.ts","./node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","./node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","./node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","./node_modules/typescript/lib/lib.es2018.intl.d.ts","./node_modules/typescript/lib/lib.es2018.promise.d.ts","./node_modules/typescript/lib/lib.es2018.regexp.d.ts","./node_modules/typescript/lib/lib.es2019.array.d.ts","./node_modules/typescript/lib/lib.es2019.object.d.ts","./node_modules/typescript/lib/lib.es2019.string.d.ts","./node_modules/typescript/lib/lib.es2019.symbol.d.ts","./node_modules/typescript/lib/lib.es2019.intl.d.ts","./node_modules/typescript/lib/lib.es2020.bigint.d.ts","./node_modules/typescript/lib/lib.es2020.date.d.ts","./node_modules/typescript/lib/lib.es2020.promise.d.ts","./node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2020.string.d.ts","./node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2020.intl.d.ts","./node_modules/typescript/lib/lib.es2020.number.d.ts","./node_modules/typescript/lib/lib.es2021.promise.d.ts","./node_modules/typescript/lib/lib.es2021.string.d.ts","./node_modules/typescript/lib/lib.es2021.weakref.d.ts","./node_modules/typescript/lib/lib.es2021.intl.d.ts","./node_modules/typescript/lib/lib.es2022.array.d.ts","./node_modules/typescript/lib/lib.es2022.error.d.ts","./node_modules/typescript/lib/lib.es2022.intl.d.ts","./node_modules/typescript/lib/lib.es2022.object.d.ts","./node_modules/typescript/lib/lib.es2022.string.d.ts","./node_modules/typescript/lib/lib.es2022.regexp.d.ts","./node_modules/typescript/lib/lib.esnext.disposable.d.ts","./node_modules/typescript/lib/lib.esnext.float16.d.ts","./node_modules/typescript/lib/lib.decorators.d.ts","./node_modules/typescript/lib/lib.decorators.legacy.d.ts","./node_modules/@types/react/global.d.ts","./node_modules/csstype/index.d.ts","./node_modules/@types/react/index.d.ts","./node_modules/next/dist/styled-jsx/types/css.d.ts","./node_modules/next/dist/styled-jsx/types/macro.d.ts","./node_modules/next/dist/styled-jsx/types/style.d.ts","./node_modules/next/dist/styled-jsx/types/global.d.ts","./node_modules/next/dist/styled-jsx/types/index.d.ts","./node_modules/next/dist/shared/lib/amp.d.ts","./node_modules/next/amp.d.ts","./node_modules/next/dist/server/get-page-files.d.ts","./node_modules/@types/node/compatibility/iterators.d.ts","./node_modules/@types/node/globals.typedarray.d.ts","./node_modules/@types/node/buffer.buffer.d.ts","./node_modules/@types/node/globals.d.ts","./node_modules/@types/node/web-globals/abortcontroller.d.ts","./node_modules/@types/node/web-globals/crypto.d.ts","./node_modules/@types/node/web-globals/domexception.d.ts","./node_modules/@types/node/web-globals/events.d.ts","./node_modules/undici-types/utility.d.ts","./node_modules/undici-types/header.d.ts","./node_modules/undici-types/readable.d.ts","./node_modules/undici-types/fetch.d.ts","./node_modules/undici-types/formdata.d.ts","./node_modules/undici-types/connector.d.ts","./node_modules/undici-types/client-stats.d.ts","./node_modules/undici-types/client.d.ts","./node_modules/undici-types/errors.d.ts","./node_modules/undici-types/dispatcher.d.ts","./node_modules/undici-types/global-dispatcher.d.ts","./node_modules/undici-types/global-origin.d.ts","./node_modules/undici-types/pool-stats.d.ts","./node_modules/undici-types/pool.d.ts","./node_modules/undici-types/handlers.d.ts","./node_modules/undici-tLine truncated