Merge branch 'cloud-cards' into feat-git-integration

This commit is contained in:
Matej Bačo
2023-05-27 14:12:33 +02:00
103 changed files with 7887 additions and 8297 deletions
+3 -7
View File
@@ -17,9 +17,9 @@ jobs:
- name: Use Node.js
uses: actions/setup-node@v2
with:
node-version: 16
- name: Audit dependencies
run: npm audit --audit-level high
node-version: 18
# - name: Audit dependencies
# run: npm audit --audit-level low
- name: Install dependencies
run: npm ci
- name: Build Console
@@ -30,7 +30,3 @@ jobs:
run: npm run lint
- name: Unit Tests
run: npm test
# - name: E2E Tests
# run: |
# npx playwright install
# npm run e2e
+48 -29
View File
@@ -1,10 +1,10 @@
# Contributing
We would ❤️ for you to contribute to Appwrite and help make it better! We want contributing to Appwrite to be fun, enjoyable, and educational for anyone and everyone. All contributions are welcome, including issues, new docs as well as updates and tweaks, blog posts, workshops, and more.
We would ❤️ for you to contribute to Appwrite and help make it better! We want your experience while contributing to Appwrite to be fun, enjoyable, and educational for anyone and everyone. All contributions are welcome, including issues, and new docs, as well as updates and tweaks, blog posts, workshops, and more.
## How to Start?
If you are worried or dont know where to start, check out our next section explaining what kind of help is needed and where you can get involved. You can reach out with questions on our [Discord](https://appwrite.io/discord) server. You can also submit an issue and a maintainer can guide you!
If you are worried about or dont know where to start, check out the next section that explains what kind of help is needed and how you can get involved. You can reach out with any questions on our [Discord](https://appwrite.io/discord) server. You can also submit an issue and a maintainer can guide you!
## Repo Structure
@@ -33,12 +33,31 @@ If you are worried or dont know where to start, check out our next section ex
## Development
Once you've created a project and installed dependencies with `npm install`, start a development server:
### 1. Clone the repository with git
```bash
git clone https://github.com/appwrite/console.git appwrite-console
```
### 2. Install dependencies with npm
```bash
npm install
```
### 3. Setup environment variables
Add a `.env` file by copying the `.env.example` file as a template in the project's root directory.
Finally, start a development server:
```bash
npm run dev
```
> **Note**
> If http://localhost:3000 is blank and the browser console logs have a `TypeError: Failed to fetch dynamically imported module: http://localhost:3000/.svelte-kit/generated/nodes/0.js` error, try to turn off any ad blocker you have and reload the page ([reference](https://github.com/sveltejs/kit/issues/3308#issuecomment-1149942109)).
### Build
```bash
@@ -57,7 +76,7 @@ This will run tests in the `tests/` directory.
### Format
Code should like everywhere the same, for this reason a code-formatter is mandatory.
Code should be consistently formatted everywhere. Before committing code, run the code-formatter.
```bash
npm run format
@@ -71,7 +90,7 @@ npm run lint
### Diagnostics
Diagnostic tool that checks for following:
Diagnostic tool that checks for the following:
- Unused CSS
- Svelte A11y hints
@@ -83,7 +102,7 @@ npm run check
## Submit a Pull Request 🚀
Branch naming convention is as follows
The branch naming convention is as follows
`TYPE-ISSUE_ID-DESCRIPTION`
@@ -101,11 +120,11 @@ When `TYPE` can be:
- **fix** - a bug fix
- **refactor** - code change that neither fixes a bug nor adds a feature
**All PRs must include a commit message with the description of the changes made!**
**All PRs must include a commit message with a description of the changes made!**
Start by forking the project and use the `git clone` command to download the repository to your computer. A standard procedure for working on an issue would be to:
1. Before creating a new branch, pull the changes from upstream to make sure your default branch is be up to date.
1. Before creating a new branch, pull the changes from upstream to make sure your default branch is up to date.
```
$ git pull
@@ -138,7 +157,7 @@ $ git push origin [name_of_your_new_branch]
### Consistency
Before commiting always make sure to run all available tools to improve the codebase:
Before committing always make sure to run all available tools to improve the codebase:
- Formatter
- `npm run format`
@@ -153,21 +172,21 @@ Page load times are a key consideration for users of all browsers and device typ
There are some general things we can do in front-end development:
- Minimise HTTP requests
- Minimise blocking content should be readable before client side processing
- Lazy load 'supplementary' content (especially images)
- Minimize HTTP requests
- Minimize blocking content should be readable before client-side processing
- Lazy load "supplementary" content, especially images
### Don't Repeat Yourself (DRY)
If you repeat anything that has already been defined in code, refactor it so that it only ever has one representation in the codebase.
If you stick to this principle, you will ensure that you will only ever need to change one implementation of a feature without worrying about needing to change any other part of the code.
If you stick to this principle, you will ensure that you will only ever need to change one implementation of a feature without worrying about the need to change any other part of the code.
### Separation of concerns
Separate _structure_ from _presentation_ from _behaviour_ to aid maintainability and understanding.
Separate _structure_ from _presentation_ from _behavior_ to aid maintainability and understanding.
- Keep CSS (presentation), JS (behaviour) and HTML (structure) in the same respective Svelte component
- Keep CSS (presentation), JS (behavior) and HTML (structure) in the same respective Svelte component
- Avoid writing inline CSS or Javascript in HTML
- Avoid writing CSS or HTML in Javascript
- Don't choose HTML elements to imply style
@@ -176,29 +195,29 @@ Separate _structure_ from _presentation_ from _behaviour_ to aid maintainability
### Write code to be read
Follow the principles of ['Keep It Simple, Stupid'](http://en.wikipedia.org/wiki/KISS_principle) (KISS); hard to read or obfuscated code is difficult to maintain and debug. Don't be too clever; write code to be read.
Follow the principles of ['Keep It Simple, Stupid'](http://en.wikipedia.org/wiki/KISS_principle) (KISS); hard-to-read or obfuscated code is difficult to maintain and debug. Don't be too clever; write code to be read.
### Identify technical debt
Use code comment annotations (`@todo`) to mark parts of your code that require further work. This will allow the measurement and management of technical debt.
Don't use `@fixme` (which defines things that are broken) - you shouldn't be committing broken code to the repo.
Don't use `@fixme`, which defines things that are broken. Don't commit broken code in to the repo.
### Dependencies
Please avoid introducing new dependencies to Appwrite without consulting the team. New dependencies can be very helpful but also introduce new security and privacy issues, complexity, and impact total docker image size.
Please avoid introducing new dependencies to Appwrite without consulting the team. New dependencies can be very helpful, but they also introduce new security and privacy issues, complexity, and impact total docker image size.
Adding a new dependency should have vital value on the product with minimum possible risk.
Adding a new dependency should contribute vital value to the product with minimum possible risk.
## Introducing New Features
We would 💖 you to contribute to Appwrite, but we would also like to make sure Appwrite is as great as possible and loyal to its vision and mission statement 🙏.
We would 💖 you to contribute to Appwrite, but we also want to ensure Appwrite is loyal to its vision and mission statement 🙏.
For us to find the right balance, please open an issue explaining your ideas before introducing a new pull request.
This will allow the Appwrite community to have sufficient discussion about the new feature value and how it fits in the product roadmap and vision.
This will allow the Appwrite community to sufficiently discuss the new feature value and how it fits within the product roadmap and vision.
This is also important for Appwrite maintainers to discuss the feature's design and architecture to help the contribution fit in organically in the Appwrite codebase. Some bigger features might need to go through our [RFC process](https://github.com/appwrite/rfc).
This is also important for the Appwrite lead developers to be able to provide technical input and potentially a different emphasis regarding the feature design and architecture. Some bigger features might need to go through our [RFC process](https://github.com/appwrite/rfc).
## Other Ways to Help
@@ -206,27 +225,27 @@ Pull requests are great, but there are many other areas where you can help Appwr
### Blogging & Speaking
Blogging, speaking about, or creating tutorials about one of Appwrites many features. Mention [@appwrite](https://twitter.com/appwrite) on Twitter and/or email [team@appwrite.io](mailto:team@appwrite.io) so we can give pointers and tips and help you spread the word by promoting your content on the different Appwrite communication channels. Please add your blog posts and videos of talks to our [Awesome Appwrite](https://github.com/appwrite/awesome-appwrite) repo on GitHub.
When blogging, speaking about, or creating tutorials about one of Appwrite's many features, mention [@appwrite](https://twitter.com/appwrite) on Twitter and/or email [team@appwrite.io](mailto:team@appwrite.io) so we can give pointers and tips and help you spread the word by promoting your content on the different Appwrite communication channels. Please add your blog posts and videos of talks to our [Awesome Appwrite](https://github.com/appwrite/awesome-appwrite) repo on GitHub.
### Presenting at Meetups
Presenting at meetups and conferences about your Appwrite projects. Your unique challenges and successes in building things with Appwrite can provide great speaking material. Wed love to review your talk abstract/CFP, so get in touch with us if youd like some help!
Presenting at meetups and conferences about your Appwrite projects is another excellent way to get the word out about Appwrite. Your unique challenges and successes in building things with Appwrite can provide great speaking material. Wed love to review your talk abstract/CFP, so get in touch with us if youd like some help!
### Sending Feedbacks & Reporting Bugs
### Sending Feedback & Reporting Bugs
Sending feedback is a great way for us to understand your different use cases of Appwrite better. If you had any issues, bugs, or want to share about your experience, feel free to do so on our GitHub issues page or at our [Discord channel](https://discord.gg/GSeTUeA).
Sending feedback is an excellent way for us to understand different use cases for Appwrite. If you have any issues or want to share your experience, feel free to do so on our GitHub issues page or our [Discord channel](https://discord.gg/GSeTUeA).
### Submitting New Ideas
If you think Appwrite could use a new feature, please open an issue on our GitHub repository, stating as much information as you can think about your new idea and it's implications. We would also use this issue to gather more information, get more feedback from the community, and have a proper discussion about the new feature.
If you think Appwrite could use a new feature, please open an issue on our GitHub repository, stating as much information as you can think about your new idea and its implications. We would also use this issue to gather more information, get more feedback from the community, and have a proper discussion about the new feature.
### Improving Documentation
Submitting documentation updates, enhancements, designs, or bug fixes. Spelling or grammar fixes will be very much appreciated.
Submitting documentation updates, enhancements, designs, or bug fixes help us to improve our documentation. Spelling or grammar fixes are also very much appreciated.
### Helping Someone
Searching for Appwrite on Discord, GitHub, or StackOverflow and helping someone else who needs help. You can also help by teaching others how to contribute to Appwrite's repo!
You can also help by teaching others how to contribute to Appwrite's repo! Please consider searching for Appwrite on Discord, GitHub, or StackOverflow and helping someone else who needs help.
## Code of Conduct
+3012 -7505
View File
File diff suppressed because it is too large Load Diff
+33 -30
View File
@@ -5,7 +5,7 @@
"node": ">=16"
},
"scripts": {
"dev": "vite dev --host 0.0.0.0",
"dev": "vite dev",
"build": "vite build",
"preview": "vite preview",
"sync": "svelte-kit sync",
@@ -20,47 +20,50 @@
},
"dependencies": {
"@analytics/google-analytics": "^1.0.5",
"analytics": "^0.8.1",
"@aw-labs/appwrite-console": "npm:matej-appwrite-console@7.1.63",
"@aw-labs/icons": "0.0.0-77",
"@aw-labs/ui": "0.0.0-77",
"@analytics/google-tag-manager": "^0.5.3",
"@appwrite.io/pink": "^0.0.4",
"@aw-labs/appwrite-console": "^13.1.0",
"@popperjs/core": "^2.11.6",
"@sentry/svelte": "^7.19.0",
"@sentry/tracing": "^7.19.0",
"echarts": "^5.4.0",
"pretty-bytes": "^6.0.0",
"@sentry/svelte": "^7.36.0",
"@sentry/tracing": "^7.36.0",
"analytics": "^0.8.1",
"echarts": "^5.4.1",
"logrocket": "^3.0.1",
"pretty-bytes": "^6.1.0",
"prismjs": "^1.29.0",
"svelte-confetti": "^1.2.2",
"tippy.js": "^6.3.7",
"web-vitals": "^3.0.3"
"web-vitals": "^3.1.1"
},
"devDependencies": {
"@playwright/test": "^1.27.1",
"@sveltejs/adapter-static": "1.0.0-next.46",
"@sveltejs/kit": "1.0.0-next.525",
"@sveltejs/vite-plugin-svelte": "^1.1.0",
"@testing-library/dom": "^8.19.0",
"@playwright/test": "^1.30.0",
"@sveltejs/adapter-static": "1.0.6",
"@sveltejs/kit": "^1.3.10",
"@sveltejs/vite-plugin-svelte": "^2.0.2",
"@testing-library/dom": "^8.20.0",
"@testing-library/jest-dom": "^5.16.5",
"@testing-library/svelte": "^3.2.2",
"@testing-library/user-event": "^14.4.3",
"@types/prismjs": "^1.26.0",
"@typescript-eslint/eslint-plugin": "^5.41.0",
"@typescript-eslint/parser": "^5.41.0",
"@vitest/ui": "^0.24.3",
"eslint": "^8.26.0",
"eslint-config-prettier": "^8.5.0",
"@typescript-eslint/eslint-plugin": "^5.50.0",
"@typescript-eslint/parser": "^5.50.0",
"@vitest/ui": "^0.28.5",
"eslint": "^8.33.0",
"eslint-config-prettier": "^8.6.0",
"eslint-plugin-svelte3": "^4.0.0",
"jsdom": "^21.1.0",
"pre-commit": "^1.2.2",
"prettier": "^2.7.1",
"prettier-plugin-svelte": "^2.8.0",
"sass": "^1.55.0",
"svelte": "^3.52.0",
"svelte-check": "^2.9.2",
"prettier": "^2.8.3",
"prettier-plugin-svelte": "^2.9.0",
"sass": "^1.58.0",
"svelte": "^3.55.1",
"svelte-check": "^3.0.3",
"svelte-jester": "^2.3.2",
"svelte-preprocess": "^4.10.7",
"tslib": "^2.4.0",
"typescript": "^4.8.4",
"vite": "^3.2.1",
"vitest": "^0.24.3"
"svelte-preprocess": "^5.0.1",
"tslib": "^2.5.0",
"typescript": "^4.9.5",
"vite": "^4.1.1",
"vitest": "^0.28.5"
},
"type": "module",
"pre-commit": [
+2
View File
@@ -5,6 +5,8 @@
<meta name="description" content="" />
<link rel="icon" href="/favicon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<!-- {{CLOUD_OG}} -->
%sveltekit.head%
</head>
<body>
+162 -16
View File
@@ -1,16 +1,25 @@
import Analytics from 'analytics';
import googleAnalytics from '@analytics/google-analytics';
import { get } from 'svelte/store';
import { page } from '$app/stores';
import { user } from '$lib/stores/user';
import { growthEndpoint, Mode } from '$lib/constants';
import { ENV, MODE, VARS, isCloud } from '$lib/system';
import googleAnalytics from '@analytics/google-analytics';
import googleTagManager from '@analytics/google-tag-manager';
import { AppwriteException } from '@aw-labs/appwrite-console';
import Analytics from 'analytics';
import { get } from 'svelte/store';
const analytics = Analytics({
app: 'appwrite',
plugins: [
googleAnalytics({
measurementIds: [import.meta.env.VITE_GA_PROJECT?.toString() || 'G-R4YJ9JN8L4']
})
measurementIds: [VARS.GOOGLE_ANALYTICS || 'G-R4YJ9JN8L4']
}),
...(isCloud
? [
googleTagManager({
containerId: [VARS.GOOGLE_TAG || 'GTM-P3T9TBV']
})
]
: [])
]
});
@@ -18,9 +27,32 @@ export function trackEvent(name: string, data: object = null): void {
if (!isTrackingAllowed()) {
return;
}
const path = get(page).routeId;
analytics.track(name, { ...data, path });
sendEventToGrowth(name, path, data);
const currentPage = get(page);
const path = currentPage.route.id;
if (currentPage.params?.project) {
data = {
...data,
project: currentPage.params.project
};
}
if (ENV.DEV || ENV.PREVIEW) {
console.debug(`[Analytics] Event ${name} ${path}`, data);
} else {
analytics.track(name, { ...data, path });
sendEventToGrowth(name, path, data);
}
}
export function trackError(exception: Error, event: Submit): void {
if (exception instanceof AppwriteException && exception.type) {
trackEvent(Submit.Error, {
type: exception.type,
form: event
});
}
}
export function trackPageView(path: string) {
@@ -28,19 +60,24 @@ export function trackPageView(path: string) {
return;
}
analytics.page({
path
});
if (ENV.DEV || ENV.PREVIEW) {
console.debug(`[Analytics] Pageview ${path}`);
} else {
analytics.page({
path
});
}
}
function sendEventToGrowth(event: string, path: string, data: object = null): void {
let email: string, name: string;
if (!VARS.GROWTH_ENDPOINT) return;
const userStore = get(user);
let email: string, name: string;
if (userStore) {
email = userStore.email;
name = userStore.name;
}
fetch(`${growthEndpoint}/analytics`, {
fetch(`${VARS.GROWTH_ENDPOINT}/analytics`, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
@@ -49,7 +86,7 @@ function sendEventToGrowth(event: string, path: string, data: object = null): vo
action: event,
label: event,
url: window.location.origin + path,
account: import.meta.env.VITE_CONSOLE_MODE?.toString() || Mode.SELF_HOSTED,
account: MODE,
data: {
email,
name,
@@ -59,7 +96,10 @@ function sendEventToGrowth(event: string, path: string, data: object = null): vo
});
}
function isTrackingAllowed() {
export function isTrackingAllowed() {
if (ENV.TEST) {
return;
}
if (window.navigator?.doNotTrack) {
if (navigator.doNotTrack === '1' || navigator.doNotTrack === 'yes') {
return false;
@@ -70,3 +110,109 @@ function isTrackingAllowed() {
return true;
}
}
export enum Submit {
Error = 'submit_error',
AccountCreate = 'submit_account_create',
AccountLogin = 'submit_account_login',
AccountLogout = 'submit_account_logout',
AccountRecover = 'submit_account_recover',
AccountUpdateName = 'submit_account_update_name',
AccountUpdateEmail = 'submit_account_update_email',
AccountUpdatePassword = 'submit_account_update_password',
AccountDelete = 'submit_account_delete',
AccountDeleteSession = 'submit_account_delete_session',
AccountDeleteAllSessions = 'submit_account_delete_all_sessions',
UserCreate = 'submit_user_create',
UserDelete = 'submit_user_delete',
UserUpdateEmail = 'submit_user_update_email',
UserUpdateName = 'submit_user_update_name',
UserUpdatePassword = 'submit_user_update_password',
UserUpdatePhone = 'submit_user_update_phone',
UserUpdatePreferences = 'submit_user_update_preferences',
UserUpdateStatus = 'submit_user_update_status',
UserUpdateVerificationEmail = 'submit_user_update_verification_email',
UserUpdateVerificationPhone = 'submit_user_update_verification_phone',
OrganizationCreate = 'submit_organization_create',
OrganizationDelete = 'submit_organization_delete',
OrganizationUpdateName = 'submit_organization_update_name',
ProjectCreate = 'submit_project_create',
ProjectDelete = 'submit_project_delete',
ProjectUpdateName = 'submit_project_update_name',
ProjectService = 'submit_project_service',
MemberCreate = 'submit_member_create',
MemberDelete = 'submit_member_delete',
MembershipUpdateStatus = 'submit_membership_update_status',
ProviderUpdate = 'submit_provider_update',
TeamCreate = 'submit_team_create',
TeamDelete = 'submit_team_delete',
TeamUpdateName = 'submit_team_update_name',
AuthLimitUpdate = 'submit_auth_limit_update',
AuthStatusUpdate = 'submit_auth_status_update',
SessionsLengthUpdate = 'submit_sessions_length_update',
SessionsLimitUpdate = 'submit_sessions_limit_update',
SessionDelete = 'submit_session_delete',
SessionDeleteAll = 'submit_session_delete_all',
DatabaseCreate = 'submit_database_create',
DatabaseDelete = 'submit_database_delete',
DatabaseUpdateName = 'submit_database_update_name',
AttributeCreate = 'submit_attribute_create',
AttributeDelete = 'submit_attribute_delete',
DocumentCreate = 'submit_document_create',
DocumentDelete = 'submit_document_delete',
DocumentUpdate = 'submit_document_update',
DocumentUpdatePermissions = 'submit_document_update_permissions',
IndexCreate = 'submit_index_create',
IndexDelete = 'submit_index_delete',
CollectionCreate = 'submit_collection_create',
CollectionDelete = 'submit_collection_delete',
CollectionUpdateName = 'submit_collection_update_name',
CollectionUpdatePermissions = 'submit_collection_update_permissions',
CollectionUpdateSecurity = 'submit_collection_update_security',
CollectionUpdateEnabled = 'submit_collection_update_enabled',
FunctionCreate = 'submit_function_create',
FunctionDelete = 'submit_function_delete',
FunctionUpdateName = 'submit_function_update_name',
FunctionUpdatePermissions = 'submit_function_update_permissions',
FunctionUpdateSchedule = 'submit_function_update_schedule',
FunctionUpdateTimeout = 'submit_function_update_timeout',
FunctionUpdateEvents = 'submit_function_update_events',
DeploymentCreate = 'submit_deployment_create',
DeploymentDelete = 'submit_deployment_delete',
DeploymentUpdate = 'submit_deployment_update',
ExecutionCreate = 'submit_execution_create',
VariableCreate = 'submit_variable_create',
VariableDelete = 'submit_variable_delete',
VariableUpdate = 'submit_variable_update',
KeyCreate = 'submit_key_create',
KeyDelete = 'submit_key_delete',
KeyUpdateName = 'submit_key_update_name',
KeyUpdateScopes = 'submit_key_update_scopes',
KeyUpdateExpire = 'submit_key_update_expire',
PlatformCreate = 'submit_platform_create',
PlatformDelete = 'submit_platform_delete',
PlatformUpdate = 'submit_platform_update',
DomainCreate = 'submit_domain_create',
DomainDelete = 'submit_domain_delete',
DomainUpdateVerification = 'submit_domain_update_verification',
WebhookCreate = 'submit_webhook_create',
WebhookDelete = 'submit_webhook_delete',
WebhookUpdateSignature = 'submit_webhook_update_signature',
WebhookUpdateUrl = 'submit_webhook_update_url',
WebhookUpdateEvents = 'submit_webhook_update_events',
WebhookUpdateName = 'submit_webhook_update_name',
WebhookUpdateSecurity = 'submit_webhook_update_security',
BucketCreate = 'submit_bucket_create',
BucketDelete = 'submit_bucket_delete',
BucketUpdateEnabled = 'submit_bucket_update_enabled',
BucketUpdateName = 'submit_bucket_update_name',
BucketUpdatePermissions = 'submit_bucket_update_permissions',
BucketUpdateSecurity = 'submit_bucket_update_security',
BucketUpdateFileSecurity = 'submit_bucket_update_file_security',
BucketUpdateSize = 'submit_bucket_update_size',
BucketUpdateCompression = 'submit_bucket_update_compression',
BucketUpdateExtensions = 'submit_bucket_update_extensions',
FileCreate = 'submit_file_create',
FileDelete = 'submit_file_delete',
FileUpdatePermissions = 'submit_file_update_permissions'
}
+6 -5
View File
@@ -19,7 +19,8 @@
{#if dismissible}
<button
type="button"
class="x-button"
class="button is-text is-only-icon"
style="--button-size:1.5rem;"
aria-label="close alert box"
on:click={() => dispatch('dismiss')}>
<span class="icon-x" aria-hidden="true" />
@@ -31,15 +32,15 @@
class:icon-exclamation={type === 'warning'}
class:icon-exclamation-circle={type === 'error'}
aria-hidden="true" />
<div class="content">
<div class="alert-content" data-private>
{#if $$slots.title}
<h6 class="title">
<h6 class="alert-title">
<slot name="title" />
</h6>
{/if}
<p class="message"><slot /></p>
<p class="alert-message"><slot /></p>
{#if buttons?.length}
<div class="buttons u-flex">
<div class="alert-buttons u-flex">
{#each buttons as button}
<button class="button is-text" on:click={button.method}>
<span class="text">{button.name}</span>
+2 -1
View File
@@ -10,7 +10,8 @@
<ul
class="grid-box common-section u-margin-block-start-32"
style={`--grid-gap:1.5rem; --grid-item-size:${total > 3 ? '22rem' : '25rem'};`}>
style={`--grid-gap:1.5rem; --grid-item-size:${total > 3 ? '22rem' : '25rem'};`}
data-private>
<slot />
{#if total > 3 ? total < limit + offset : total % 2 !== 0}
+6 -1
View File
@@ -10,6 +10,7 @@
export let showDelete = false;
export let selectedRule: Models.ProxyRule = null;
export let project: Models.Project = null;
const handleSubmit = async () => {
try {
@@ -32,7 +33,11 @@
<Modal bind:show={showDelete} on:submit={handleSubmit} warning>
<svelte:fragment slot="header">Delete Domain</svelte:fragment>
<p>Are you sure you want to delete this domain?</p>
{#if selectedRule}
<p data-private>
Are you sure you want to delete <b>{selectedRule.domain}</b> from '{project.name}'?
</p>
{/if}
<svelte:fragment slot="footer">
<Button text on:click={() => (showDelete = false)}>Cancel</Button>
<Button secondary submit>Delete</Button>
+1 -1
View File
@@ -81,7 +81,7 @@
<form class="modal-form" role="form" on:submit|preventDefault>
<header class="modal-header">
{#if warning}
<div class="avatar is-color-orange is-medium">
<div class="avatar is-warning is-medium">
<span class="icon-exclamation" aria-hidden="true" />
</div>
{/if}
+1 -1
View File
@@ -5,7 +5,7 @@
export let value: string;
</script>
<div class="interactive-text-output" class:is-textarea={show}>
<div class="interactive-text-output" class:is-textarea={show} data-private>
{#if show}
<span class="text u-line-height-1-5 u-break-all">{value}</span>
{:else}
+1 -1
View File
@@ -1,3 +1,3 @@
<ul class="grid-box common-section" style="--grid-item-size:25rem;">
<ul class="grid-box common-section" style="--grid-item-size:25rem;" data-private>
<slot />
</ul>
+17
View File
@@ -3,6 +3,7 @@
export let submit = false;
export let secondary = false;
export let github = false;
export let text = false;
export let danger = false;
export let disabled = false;
@@ -35,6 +36,7 @@
class="button"
class:is-only-icon={round}
class:is-secondary={secondary}
class:is-github={github}
class:is-text={text}
class:is-danger={danger}
class:is-full-width={fullWidth}
@@ -50,6 +52,7 @@
class="button"
class:is-only-icon={round}
class:is-secondary={secondary}
class:is-github={github}
class:is-danger={danger}
class:is-text={text}
class:is-full-width={fullWidth}
@@ -59,3 +62,17 @@
<slot />
</button>
{/if}
<style lang="scss">
.is-github {
background-color: #373b4d;
&:hover {
background-color: lighten($color: #373b4d, $amount: 2.5);
}
&:active {
background-color: darken($color: #373b4d, $amount: 5);
}
}
</style>
+87 -27
View File
@@ -1,21 +1,24 @@
<script lang="ts">
import { Trim } from '$lib/components';
import { Button } from '.';
import { humanFileSize } from '$lib/helpers/sizeConvertion';
import { Helper } from '.';
export let label: string = null;
export let files: FileList;
export let list = new DataTransfer();
export let allowedFileExtensions: string[] = [];
export let maxSize: number = null;
export let required = false;
export let error: string = null;
let input: HTMLInputElement;
let hovering = false;
function dropHandler(ev: DragEvent) {
ev.dataTransfer.dropEffect = 'move';
hovering = false;
if (ev.dataTransfer.items) {
// Use DataTransferItemList interface to access the file(s)
for (let i = 0; i < ev.dataTransfer.items.length; i++) {
// If dropped items aren't files, reject them
if (ev.dataTransfer.items[i].kind === 'file') {
list.items.clear();
list.items.add(ev.dataTransfer.items[i].getAsFile());
@@ -28,6 +31,22 @@
function dragOverHandler() {
hovering = true;
}
const handleInvalid = (event: Event) => {
event.preventDefault();
if (input.validity.valueMissing) {
error = 'This field is required';
return;
}
error = input.validationMessage;
};
$: if (files) {
error = null;
}
$: fileArray = files?.length ? Array.from(files) : [];
</script>
<input
@@ -35,48 +54,89 @@
bind:this={input}
accept={allowedFileExtensions.map((n) => `.${n}`).join(',')}
type="file"
style="display: none" />
style="display: none"
{required}
on:invalid={handleInvalid} />
<div>
{#if label}
<p class="text">{label}</p>
{/if}
<div
class="card is-border-dashed is-no-shadow"
class="box is-no-shadow u-padding-24"
style="--box-border-radius:var(--border-radius-xsmall); z-index: 1"
class:is-border-dashed={!hovering}
class:is-hover-with-file={hovering}
on:drop|preventDefault={dropHandler}
on:dragover|preventDefault={dragOverHandler}
on:dragenter|preventDefault
on:dragleave|preventDefault={() => (hovering = false)}>
<div class="u-flex u-main-center u-cross-center u-gap-32">
<div class="avatar is-size-large u-min-width-0">
<span class="icon-folder" aria-hidden="true" />
<div class="upload-file-box">
<div class="upload-file-box-image">
<span class="icon-upload" aria-hidden="true" />
</div>
<div class="u-min-width-0 u-text-center">
<h5 class="upload-file-box-title heading-level-7 u-inline">
<span class="is-only-desktop">Drag and drop a file here to upload</span>
<span class="is-not-desktop">Upload a File</span>
</h5>
{#if allowedFileExtensions?.length}
<button
class="tooltip u-inline u-margin-inline-start-4"
aria-label="variables info">
<span class="icon-info" aria-hidden="true" />
<span class="tooltip-popup" role="tooltip"
>Only {allowedFileExtensions.join(', ')} accepted.</span>
</button>
{/if}
</div>
<div class="u-flex u-main-center u-cross-center u-gap-16 u-flex-vertical-mobile">
{#if maxSize}
{@const readableMaxSize = humanFileSize(maxSize)}
<p class="upload-file-box-info body-text-2 u-normal">
Max file size: {readableMaxSize.value + readableMaxSize.unit}
</p>
{/if}
<button
class="button is-secondary is-full-width-mobile"
type="button"
on:click={() => input.click()}>
<span class="text">Choose a file</span>
</button>
</div>
<div class="u-grid u-gap-16 u-min-width-0">
<p>Drag and drop files here to upload</p>
<div class="u-flex u-gap-8 u-min-width-0">
<Button secondary on:click={() => input.click()}>
<span class="icon-upload" aria-hidden="true" />
<span class="text">Choose File</span>
</Button>
{#if files?.length}
{@const fileName = files.item(0).name.split('.')}
<div class="u-flex u-cross-center u-min-width-0">
<Trim>{fileName[0]}</Trim>
<span class="u-min-width-0 u-flex-shrink-0 u-margin-inline-end-16"
>.{fileName[1]}</span>
{#if files?.length}
<ul class="upload-file-box-list u-min-width-0">
{#each fileArray as file}
{@const fileName = file.name.split('.')}
{@const fileSize = humanFileSize(file.size)}
<li class="u-flex u-cross-center u-min-width-0">
<span class="icon-document" aria-hidden="true" />
<span class="upload-file-box-name u-trim u-min-width-0">
<Trim>{fileName[0]}</Trim>
</span>
<span class="upload-file-box-name u-min-width-0 u-flex-shrink-0">
.{fileName[1]}
</span>
<span
class="upload-file-box-size u-margin-inline-start-4 u-margin-inline-end-16">
{fileSize.value + fileSize.unit}
</span>
<button
on:click={() => (files = null)}
type="button"
class="x-button"
class="button is-text is-only-icon u-margin-inline-start-auto"
aria-label="remove file"
title="Remove file">
style="--button-size:1.5rem;">
<span class="icon-x" aria-hidden="true" />
</button>
</div>
{/if}
</div>
</div>
</li>
{/each}
</ul>
{/if}
</div>
</div>
{#if error}
<Helper type="warning">{error}</Helper>
{/if}
</div>
+1 -1
View File
@@ -3,6 +3,6 @@
export let title: string;
</script>
<div class="table-col" data-title={title} role="cell">
<div class="table-col" data-title={title} role="cell" data-private>
<a role="button" tabindex="0" class="link" {href}><slot /></a>
</div>
+2 -1
View File
@@ -10,6 +10,7 @@
class:is-only-desktop={onlyDesktop}
class:u-overflow-visible={showOverflow}
data-title={title}
role="cell">
role="cell"
data-private>
<Trim><slot /></Trim>
</div>
+2 -1
View File
@@ -7,6 +7,7 @@
class="table is-selected-columns-mobile"
class:u-margin-block-start-32={!noMargin}
class:is-remove-outer-styles={noStyles}
role="table">
role="table"
data-private>
<slot />
</div>
+1 -1
View File
@@ -1,5 +1,5 @@
<!-- TODO: is 100% height needed? -->
<div class="table-with-scroll">
<div class="table-with-scroll" data-private>
<div class="table-wrapper">
<div class="table is-remove-outer-styles">
<ul class="table-thead">
+1 -1
View File
@@ -2,7 +2,7 @@
export let isSticky = false;
</script>
<div class="table-with-scroll u-margin-block-start-32">
<div class="table-with-scroll u-margin-block-start-32" data-private>
<div class="table-wrapper">
<table class="table" class:is-sticky-scroll={isSticky}>
<slot />
+22
View File
@@ -0,0 +1,22 @@
<svg width="215" height="19" viewBox="0 0 215 19" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M7.82529 15.1522H2.60847L1.64748 17.8121H6.10352e-05L4.32453 5.9198H6.12639L10.4337 17.8121H8.78628L7.82529 15.1522ZM7.37911 13.8823L5.21688 7.84179L3.05464 13.8823H7.37911Z" fill="white"/>
<path d="M23.7474 9.35192C23.7474 10.3472 23.4041 11.1767 22.7177 11.8402C22.0427 12.4923 21.0074 12.8184 19.6117 12.8184H17.3121V17.8121H15.7505V5.85116H19.6117C20.9616 5.85116 21.9855 6.17721 22.6834 6.82931C23.3927 7.48141 23.7474 8.32228 23.7474 9.35192ZM19.6117 11.5313C20.4811 11.5313 21.1218 11.3425 21.5336 10.965C21.9455 10.5875 22.1514 10.0498 22.1514 9.35192C22.1514 7.87611 21.3048 7.1382 19.6117 7.1382H17.3121V11.5313H19.6117Z" fill="white"/>
<path d="M37.1172 9.35192C37.1172 10.3472 36.774 11.1767 36.0876 11.8402C35.4126 12.4923 34.3772 12.8184 32.9815 12.8184H30.682V17.8121H29.1204V5.85116H32.9815C34.3315 5.85116 35.3554 6.17721 36.0532 6.82931C36.7625 7.48141 37.1172 8.32228 37.1172 9.35192ZM32.9815 11.5313C33.851 11.5313 34.4916 11.3425 34.9035 10.965C35.3153 10.5875 35.5213 10.0498 35.5213 9.35192C35.5213 7.87611 34.6747 7.1382 32.9815 7.1382H30.682V11.5313H32.9815Z" fill="white"/>
<path d="M57.5229 5.85116L54.0564 17.8121H52.306L49.526 8.185L46.6431 17.8121L44.9098 17.8292L41.5635 5.85116H43.2281L45.8365 15.9931L48.7195 5.85116H50.4699L53.2156 15.9587L55.8411 5.85116H57.5229Z" fill="white"/>
<path d="M68.9619 17.8121L66.1132 12.9213H64.2255V17.8121H62.6639V5.85116H66.5251C67.4288 5.85116 68.1896 6.0056 68.8074 6.31449C69.4366 6.62338 69.9057 7.04096 70.2146 7.56722C70.5235 8.09347 70.6779 8.69409 70.6779 9.36908C70.6779 10.1928 70.4377 10.9192 69.9572 11.5485C69.4881 12.1777 68.7788 12.5953 67.8293 12.8012L70.8324 17.8121H68.9619ZM64.2255 11.6686H66.5251C67.3717 11.6686 68.0066 11.4627 68.4299 11.0508C68.8532 10.6275 69.0648 10.0669 69.0648 9.36908C69.0648 8.65977 68.8532 8.11063 68.4299 7.72166C68.018 7.33269 67.3831 7.1382 66.5251 7.1382H64.2255V11.6686Z" fill="white"/>
<path d="M78.0981 5.85116V17.8121H76.5365V5.85116H78.0981Z" fill="white"/>
<path d="M91.5536 5.85116V7.12104H88.2931V17.8121H86.7315V7.12104H83.4538V5.85116H91.5536Z" fill="white"/>
<path d="M98.4696 7.12104V11.1195H102.828V12.4065H98.4696V16.525H103.343V17.8121H96.908V5.834H103.343V7.12104H98.4696Z" fill="white"/>
<path d="M108.383 11.7716C108.383 10.5818 108.641 9.52352 109.155 8.59685C109.67 7.65874 110.385 6.93228 111.3 6.41746C112.227 5.8912 113.274 5.62807 114.441 5.62807C115.871 5.62807 117.095 6.0056 118.113 6.76067C119.131 7.51573 119.812 8.54537 120.155 9.84957H116.929C116.689 9.3462 116.346 8.96294 115.9 8.69981C115.465 8.43669 114.967 8.30512 114.407 8.30512C113.503 8.30512 112.771 8.61973 112.21 9.24895C111.649 9.87817 111.369 10.719 111.369 11.7716C111.369 12.8241 111.649 13.6649 112.21 14.2942C112.771 14.9234 113.503 15.238 114.407 15.238C114.967 15.238 115.465 15.1064 115.9 14.8433C116.346 14.5802 116.689 14.1969 116.929 13.6935H120.155C119.812 14.9977 119.131 16.0274 118.113 16.7824C117.095 17.5261 115.871 17.8979 114.441 17.8979C113.274 17.8979 112.227 17.6405 111.3 17.1257C110.385 16.5994 109.67 15.8729 109.155 14.9463C108.641 14.0196 108.383 12.9614 108.383 11.7716Z" fill="white"/>
<path d="M128.319 15.5469H132.163V17.8121H125.385V5.76536H128.319V15.5469Z" fill="white"/>
<path d="M142.692 17.9322C141.559 17.9322 140.518 17.6691 139.569 17.1428C138.631 16.6166 137.881 15.8844 137.321 14.9463C136.772 13.9967 136.497 12.9328 136.497 11.7544C136.497 10.576 136.772 9.5178 137.321 8.57969C137.881 7.64158 138.631 6.90939 139.569 6.38314C140.518 5.85688 141.559 5.59375 142.692 5.59375C143.825 5.59375 144.86 5.85688 145.798 6.38314C146.748 6.90939 147.491 7.64158 148.029 8.57969C148.578 9.5178 148.853 10.576 148.853 11.7544C148.853 12.9328 148.578 13.9967 148.029 14.9463C147.48 15.8844 146.736 16.6166 145.798 17.1428C144.86 17.6691 143.825 17.9322 142.692 17.9322ZM142.692 15.2552C143.653 15.2552 144.42 14.9348 144.992 14.2942C145.575 13.6535 145.867 12.8069 145.867 11.7544C145.867 10.6904 145.575 9.84385 144.992 9.21463C144.42 8.57397 143.653 8.25364 142.692 8.25364C141.72 8.25364 140.942 8.56825 140.358 9.19747C139.786 9.82669 139.5 10.679 139.5 11.7544C139.5 12.8184 139.786 13.6707 140.358 14.3113C140.942 14.9405 141.72 15.2552 142.692 15.2552Z" fill="white"/>
<path d="M156.8 5.76536V12.9728C156.8 13.6935 156.978 14.2484 157.332 14.6374C157.687 15.0263 158.207 15.2208 158.894 15.2208C159.58 15.2208 160.107 15.0263 160.473 14.6374C160.839 14.2484 161.022 13.6935 161.022 12.9728V5.76536H163.956V12.9556C163.956 14.031 163.727 14.9405 163.27 15.6842C162.812 16.4278 162.194 16.9884 161.416 17.3659C160.65 17.7434 159.792 17.9322 158.842 17.9322C157.893 17.9322 157.041 17.7492 156.285 17.3831C155.542 17.0055 154.953 16.445 154.518 15.7013C154.083 14.9463 153.866 14.031 153.866 12.9556V5.76536H156.8Z" fill="white"/>
<path d="M173.962 5.76536C175.232 5.76536 176.342 6.01704 177.291 6.52042C178.241 7.0238 178.973 7.7331 179.488 8.64833C180.014 9.55212 180.277 10.5989 180.277 11.7887C180.277 12.9671 180.014 14.0139 179.488 14.9291C178.973 15.8443 178.235 16.5536 177.274 17.057C176.325 17.5604 175.221 17.8121 173.962 17.8121H169.449V5.76536H173.962ZM173.773 15.2723C174.883 15.2723 175.747 14.9691 176.365 14.3628C176.982 13.7565 177.291 12.8984 177.291 11.7887C177.291 10.679 176.982 9.81525 176.365 9.19747C175.747 8.57969 174.883 8.2708 173.773 8.2708H172.383V15.2723H173.773Z" fill="white"/>
<path d="M195.974 18.1164C193.085 18.1164 190.743 15.7507 190.743 12.8325C190.743 10.1024 192.792 7.85585 195.422 7.57752C195.294 7.08627 195.226 6.57056 195.226 6.03881C195.226 2.70367 197.903 0 201.205 0C204.013 0 206.369 1.95563 207.011 4.59213C207.311 4.55057 207.618 4.5291 207.931 4.5291C211.645 4.5291 214.656 7.57073 214.656 11.3228C214.656 15.0748 211.645 18.1164 207.931 18.1164H195.974Z" fill="url(#paint0_linear_511_23621)"/>
<defs>
<linearGradient id="paint0_linear_511_23621" x1="202.699" y1="0" x2="202.699" y2="23.7487" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0.7"/>
</linearGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 6.0 KiB

+12
View File
@@ -0,0 +1,12 @@
<svg width="79" height="58" viewBox="0 0 79 58" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M55.0709 16.202C50.359 6.60814 40.4551 0 29 0C12.9837 0 0 12.9182 0 28.8535C0 44.7889 12.9837 57.7071 29 57.7071C34.828 57.7071 40.2545 55.9966 44.8 53.0527C48.4035 55.963 52.997 57.7071 58 57.7071C69.5756 57.7071 78.9594 48.3706 78.9594 36.8535C78.9594 25.3364 69.5756 16 58 16C57.006 16 56.0281 16.0689 55.0709 16.202Z" fill="url(#paint0_linear_23_6393)"/>
<defs>
<linearGradient id="paint0_linear_23_6393" x1="56.5" y1="-7" x2="58" y2="57.7071" gradientUnits="userSpaceOnUse">
<stop stop-color="#FF6893"/>
<stop offset="0.29541" stop-color="#F02E65"/>
<stop offset="0.351472" stop-color="#F02E65" stop-opacity="0.86"/>
<stop offset="0.526441" stop-color="#F02E65" stop-opacity="0.22"/>
<stop offset="1" stop-color="#F02E65" stop-opacity="0"/>
</linearGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 924 B

+11
View File
@@ -0,0 +1,11 @@
<svg width="191" height="100" viewBox="0 0 191 100" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M126.696 19.8455C117.599 7.79137 103.154 -6.10352e-05 86.8893 -6.10352e-05C69.103 -6.10352e-05 53.4929 9.31726 44.6736 23.3373C42.1709 22.8017 39.5741 22.5198 36.9115 22.5198C16.5258 22.5198 0 39.0456 0 59.4313C0 79.8169 16.5258 96.3428 36.9115 96.3428C44.529 96.3428 51.6075 94.0353 57.4862 90.0812C65.7285 96.1135 75.893 99.6748 86.8893 99.6748C96.8339 99.6748 106.098 96.7621 113.876 91.7432C117.567 92.9821 121.519 93.6533 125.627 93.6533C134.693 93.6533 142.996 90.385 149.421 84.9623C153.51 87.3486 158.266 88.7158 163.342 88.7158C178.617 88.7158 191 76.3327 191 61.0574C191 45.782 178.617 33.3989 163.342 33.3989C160.501 33.3989 157.76 33.8272 155.18 34.6227C148.646 25.9069 138.347 20.1766 126.696 19.8455Z" fill="url(#paint0_linear_23_6387)"/>
<defs>
<linearGradient id="paint0_linear_23_6387" x1="81.5" y1="4.5" x2="81.5" y2="78.5" gradientUnits="userSpaceOnUse">
<stop stop-color="#FF6893"/>
<stop offset="0.278871" stop-color="#F02E65" stop-opacity="0.99"/>
<stop offset="0.657422" stop-color="#EC2E65" stop-opacity="0.29"/>
<stop offset="1" stop-color="#EC2E65" stop-opacity="0"/>
</linearGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

+626
View File
@@ -0,0 +1,626 @@
<svg width="390" height="499" viewBox="0 0 390 499" fill="none" xmlns="http://www.w3.org/2000/svg">
<g filter="url(#filter0_f_50_2588)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M404.589 174.588C404.996 171.711 405.206 168.771 405.206 165.783C405.206 131.109 376.91 103 342.006 103C316.927 103 295.26 117.511 285.048 138.543C279.481 140.709 274.298 143.638 269.63 147.2C265.573 131.641 251.343 120.151 234.412 120.151C216.796 120.151 202.104 132.59 198.751 149.108C189.115 143.548 177.917 140.364 165.971 140.364C157.066 140.364 148.577 142.133 140.84 145.337C131.125 121.585 107.664 104.837 80.2655 104.837C52.7894 104.837 29.2733 121.68 19.6085 145.539C12.2104 141.088 3.53231 138.526 -5.7481 138.526C-32.8203 138.526 -54.7666 160.328 -54.7666 187.221C-54.7666 201.495 -48.5846 214.334 -38.7354 223.241V438.658H404.589V174.588Z" fill="url(#paint0_linear_50_2588)" fill-opacity="0.28"/>
</g>
<path fill-rule="evenodd" clip-rule="evenodd" d="M402.739 170.875C396.943 142.142 371.402 120.496 340.772 120.496C319.043 120.496 299.875 131.39 288.5 147.98C281.446 150.722 274.945 154.556 269.209 159.273C262.68 147.368 249.959 139.288 235.336 139.288C223.724 139.288 213.311 144.383 206.246 152.443C196.008 146.945 184.285 143.824 171.828 143.824C158.398 143.824 145.822 147.452 135.039 153.775C123.599 134.933 102.797 122.333 79.0321 122.333C51.556 122.333 28.0399 139.176 18.3751 163.035C10.977 158.584 2.29892 156.022 -6.9815 156.022C-34.0537 156.022 -56 177.824 -56 204.718C-56 218.991 -49.818 231.83 -39.9688 240.737V456.155H403.356V456.154H402.739V170.875Z" fill="url(#paint1_linear_50_2588)"/>
<path d="M42.5201 -28.4292C42.5201 -28.2052 42.3663 -28.0236 42.1767 -28.0236C41.987 -28.0236 41.8332 -28.2052 41.8332 -28.4292C41.8332 -28.6532 41.987 -28.8349 42.1767 -28.8349C42.3663 -28.8349 42.5201 -28.6532 42.5201 -28.4292Z" fill="url(#paint2_linear_50_2588)" fill-opacity="0.7"/>
<path d="M60.6145 9.2556C60.6145 9.47964 60.4608 9.66125 60.2711 9.66125C60.0814 9.66125 59.9276 9.47964 59.9276 9.2556C59.9276 9.03157 60.0814 8.84995 60.2711 8.84995C60.4608 8.84995 60.6145 9.03157 60.6145 9.2556Z" fill="url(#paint3_linear_50_2588)" fill-opacity="0.7"/>
<path d="M68.3998 17.3687C68.3998 17.5927 68.246 17.7744 68.0564 17.7744C67.8667 17.7744 67.7129 17.5927 67.7129 17.3687C67.7129 17.1447 67.8667 16.963 68.0564 16.963C68.246 16.963 68.3998 17.1447 68.3998 17.3687Z" fill="url(#paint4_linear_50_2588)" fill-opacity="0.7"/>
<path d="M68.3998 1.02262C68.3998 1.24666 68.246 1.42828 68.0564 1.42828C67.8667 1.42828 67.7129 1.24666 67.7129 1.02262C67.7129 0.798585 67.8667 0.616971 68.0564 0.616971C68.246 0.616971 68.3998 0.798585 68.3998 1.02262Z" fill="url(#paint5_linear_50_2588)" fill-opacity="0.7"/>
<path d="M68.3998 1.02262C68.3998 1.24666 68.246 1.42828 68.0564 1.42828C67.8667 1.42828 67.7129 1.24666 67.7129 1.02262C67.7129 0.798585 67.8667 0.616971 68.0564 0.616971C68.246 0.616971 68.3998 0.798585 68.3998 1.02262Z" fill="url(#paint6_linear_50_2588)" fill-opacity="0.7"/>
<path d="M124.958 -22.0817C124.958 -21.8577 124.804 -21.6761 124.614 -21.6761C124.425 -21.6761 124.271 -21.8577 124.271 -22.0817C124.271 -22.3058 124.425 -22.4874 124.614 -22.4874C124.804 -22.4874 124.958 -22.3058 124.958 -22.0817Z" fill="url(#paint7_linear_50_2588)" fill-opacity="0.7"/>
<path d="M78.9329 -6.97061C78.9329 -6.74657 78.7791 -6.56495 78.5894 -6.56495C78.3997 -6.56495 78.246 -6.74657 78.246 -6.97061C78.246 -7.19464 78.3997 -7.37627 78.5894 -7.37627C78.7791 -7.37627 78.9329 -7.19464 78.9329 -6.97061Z" fill="url(#paint8_linear_50_2588)" fill-opacity="0.7"/>
<path d="M83.5125 -9.79486C83.5125 -9.57082 83.3587 -9.3892 83.169 -9.3892C82.9793 -9.3892 82.8256 -9.57082 82.8256 -9.79486C82.8256 -10.0189 82.9793 -10.2005 83.169 -10.2005C83.3587 -10.2005 83.5125 -10.0189 83.5125 -9.79486Z" fill="url(#paint9_linear_50_2588)" fill-opacity="0.7"/>
<path d="M97.2513 -18.5994C97.2513 -18.3754 97.0975 -18.1937 96.9078 -18.1937C96.7181 -18.1937 96.5643 -18.3754 96.5643 -18.5994C96.5643 -18.8234 96.7181 -19.005 96.9078 -19.005C97.0975 -19.005 97.2513 -18.8234 97.2513 -18.5994Z" fill="url(#paint10_linear_50_2588)" fill-opacity="0.7"/>
<path d="M101.831 -15.895C101.831 -15.671 101.677 -15.4894 101.487 -15.4894C101.298 -15.4894 101.144 -15.671 101.144 -15.895C101.144 -16.1191 101.298 -16.3007 101.487 -16.3007C101.677 -16.3007 101.831 -16.1191 101.831 -15.895Z" fill="url(#paint11_linear_50_2588)" fill-opacity="0.7"/>
<path d="M108.7 -24.0081C108.7 -23.7841 108.546 -23.6025 108.357 -23.6025C108.167 -23.6025 108.013 -23.7841 108.013 -24.0081C108.013 -24.2322 108.167 -24.4138 108.357 -24.4138C108.546 -24.4138 108.7 -24.2322 108.7 -24.0081Z" fill="url(#paint12_linear_50_2588)" fill-opacity="0.7"/>
<path d="M90.3819 17.3687C90.3819 17.5927 90.2281 17.7744 90.0384 17.7744C89.8487 17.7744 89.6949 17.5927 89.6949 17.3687C89.6949 17.1447 89.8487 16.963 90.0384 16.963C90.2281 16.963 90.3819 17.1447 90.3819 17.3687Z" fill="url(#paint13_linear_50_2588)" fill-opacity="0.7"/>
<path d="M17.1084 17.3687C17.1084 17.5927 16.9546 17.7744 16.7649 17.7744C16.5752 17.7744 16.4214 17.5927 16.4214 17.3687C16.4214 17.1447 16.5752 16.963 16.7649 16.963C16.9546 16.963 17.1084 17.1447 17.1084 17.3687Z" fill="url(#paint14_linear_50_2588)" fill-opacity="0.7"/>
<path d="M33.2385 8.84395C33.2385 9.06799 33.0847 9.24961 32.895 9.24961C32.7053 9.24961 32.5515 9.06799 32.5515 8.84395C32.5515 8.61992 32.7053 8.4383 32.895 8.4383C33.0847 8.4383 33.2385 8.61992 33.2385 8.84395Z" fill="url(#paint15_linear_50_2588)" fill-opacity="0.7"/>
<path d="M-36.2674 -27.3133C-36.2674 -27.0893 -36.4212 -26.9077 -36.6109 -26.9077C-36.8006 -26.9077 -36.9544 -27.0893 -36.9544 -27.3133C-36.9544 -27.5373 -36.8006 -27.719 -36.6109 -27.719C-36.4212 -27.719 -36.2674 -27.5373 -36.2674 -27.3133Z" fill="url(#paint16_linear_50_2588)" fill-opacity="0.7"/>
<path d="M388.284 -12.3793C388.284 -12.1553 388.438 -11.9737 388.628 -11.9737C388.818 -11.9737 388.971 -12.1553 388.971 -12.3793C388.971 -12.6034 388.818 -12.785 388.628 -12.785C388.438 -12.785 388.284 -12.6034 388.284 -12.3793Z" fill="url(#paint17_linear_50_2588)" fill-opacity="0.7"/>
<path d="M376.835 -1.56188C376.835 -1.33784 376.989 -1.15621 377.179 -1.15621C377.369 -1.15621 377.522 -1.33784 377.522 -1.56188C377.522 -1.78591 377.369 -1.96753 377.179 -1.96753C376.989 -1.96753 376.835 -1.78591 376.835 -1.56188Z" fill="url(#paint18_linear_50_2588)" fill-opacity="0.7"/>
<path d="M360.807 -17.7881C360.807 -17.564 360.961 -17.3824 361.15 -17.3824C361.34 -17.3824 361.494 -17.564 361.494 -17.7881C361.494 -18.0121 361.34 -18.1937 361.15 -18.1937C360.961 -18.1937 360.807 -18.0121 360.807 -17.7881Z" fill="url(#paint19_linear_50_2588)" fill-opacity="0.7"/>
<path d="M352.742 5.13911C352.742 5.36315 352.896 5.54477 353.085 5.54477C353.275 5.54477 353.429 5.36315 353.429 5.13911C353.429 4.91507 353.275 4.73346 353.085 4.73346C352.896 4.73346 352.742 4.91507 352.742 5.13911Z" fill="url(#paint20_linear_50_2588)" fill-opacity="0.7"/>
<path d="M344.957 13.2522C344.957 13.4763 345.11 13.6579 345.3 13.6579C345.49 13.6579 345.643 13.4763 345.643 13.2522C345.643 13.0282 345.49 12.8466 345.3 12.8466C345.11 12.8466 344.957 13.0282 344.957 13.2522Z" fill="url(#paint21_linear_50_2588)" fill-opacity="0.7"/>
<path d="M344.957 5.13911C344.957 5.36315 345.11 5.54477 345.3 5.54477C345.49 5.54477 345.643 5.36315 345.643 5.13911C345.643 4.91507 345.49 4.73346 345.3 4.73346C345.11 4.73346 344.957 4.91507 344.957 5.13911Z" fill="url(#paint22_linear_50_2588)" fill-opacity="0.7"/>
<path d="M344.957 5.13911C344.957 5.36315 345.11 5.54477 345.3 5.54477C345.49 5.54477 345.643 5.36315 345.643 5.13911C345.643 4.91507 345.49 4.73346 345.3 4.73346C345.11 4.73346 344.957 4.91507 344.957 5.13911Z" fill="url(#paint23_linear_50_2588)" fill-opacity="0.7"/>
<path d="M291.884 -15.0837C291.884 -14.8597 292.038 -14.6781 292.227 -14.6781C292.417 -14.6781 292.571 -14.8597 292.571 -15.0837C292.571 -15.3078 292.417 -15.4894 292.227 -15.4894C292.038 -15.4894 291.884 -15.3078 291.884 -15.0837Z" fill="url(#paint24_linear_50_2588)" fill-opacity="0.7"/>
<path d="M280.634 -23.4366C280.634 -23.2125 280.787 -23.0309 280.977 -23.0309C281.167 -23.0309 281.32 -23.2125 281.32 -23.4366C281.32 -23.6606 281.167 -23.8422 280.977 -23.8422C280.787 -23.8422 280.634 -23.6606 280.634 -23.4366Z" fill="url(#paint25_linear_50_2588)" fill-opacity="0.7"/>
<path d="M296.464 1.1425C296.464 1.36653 296.617 1.54815 296.807 1.54815C296.997 1.54815 297.151 1.36653 297.151 1.1425C297.151 0.918459 296.997 0.736841 296.807 0.736841C296.617 0.736841 296.464 0.918459 296.464 1.1425Z" fill="url(#paint26_linear_50_2588)" fill-opacity="0.7"/>
<path d="M337.909 -6.97061C337.909 -6.74657 338.063 -6.56495 338.252 -6.56495C338.442 -6.56495 338.596 -6.74657 338.596 -6.97061C338.596 -7.19464 338.442 -7.37627 338.252 -7.37627C338.063 -7.37627 337.909 -7.19464 337.909 -6.97061Z" fill="url(#paint27_linear_50_2588)" fill-opacity="0.7"/>
<path d="M333.329 -1.56188C333.329 -1.33784 333.483 -1.15621 333.673 -1.15621C333.862 -1.15621 334.016 -1.33784 334.016 -1.56188C334.016 -1.78591 333.862 -1.96753 333.673 -1.96753C333.483 -1.96753 333.329 -1.78591 333.329 -1.56188Z" fill="url(#paint28_linear_50_2588)" fill-opacity="0.7"/>
<path d="M313.637 3.84687C313.637 4.0709 313.791 4.25252 313.981 4.25252C314.17 4.25252 314.324 4.0709 314.324 3.84687C314.324 3.62283 314.17 3.44121 313.981 3.44121C313.791 3.44121 313.637 3.62283 313.637 3.84687Z" fill="url(#paint29_linear_50_2588)" fill-opacity="0.7"/>
<path d="M336.535 -22.9264C336.535 -22.7023 336.689 -22.5207 336.879 -22.5207C337.068 -22.5207 337.222 -22.7023 337.222 -22.9264C337.222 -23.1504 337.068 -23.332 336.879 -23.332C336.689 -23.332 336.535 -23.1504 336.535 -22.9264Z" fill="url(#paint30_linear_50_2588)" fill-opacity="0.7"/>
<path d="M319.591 -18.5994C319.591 -18.3754 319.744 -18.1937 319.934 -18.1937C320.124 -18.1937 320.277 -18.3754 320.277 -18.5994C320.277 -18.8234 320.124 -19.005 319.934 -19.005C319.744 -19.005 319.591 -18.8234 319.591 -18.5994Z" fill="url(#paint31_linear_50_2588)" fill-opacity="0.7"/>
<path d="M315.011 -15.895C315.011 -15.671 315.165 -15.4894 315.354 -15.4894C315.544 -15.4894 315.698 -15.671 315.698 -15.895C315.698 -16.1191 315.544 -16.3007 315.354 -16.3007C315.165 -16.3007 315.011 -16.1191 315.011 -15.895Z" fill="url(#paint32_linear_50_2588)" fill-opacity="0.7"/>
<path d="M315.011 -21.3038C315.011 -21.0797 315.165 -20.8981 315.354 -20.8981C315.544 -20.8981 315.698 -21.0797 315.698 -21.3038C315.698 -21.5278 315.544 -21.7094 315.354 -21.7094C315.165 -21.7094 315.011 -21.5278 315.011 -21.3038Z" fill="url(#paint33_linear_50_2588)" fill-opacity="0.7"/>
<path d="M268.528 -21.3038C268.528 -21.0797 268.682 -20.8981 268.872 -20.8981C269.061 -20.8981 269.215 -21.0797 269.215 -21.3038C269.215 -21.5278 269.061 -21.7094 268.872 -21.7094C268.682 -21.7094 268.528 -21.5278 268.528 -21.3038Z" fill="url(#paint34_linear_50_2588)" fill-opacity="0.7"/>
<path d="M326.46 17.3687C326.46 17.5927 326.614 17.7744 326.803 17.7744C326.993 17.7744 327.147 17.5927 327.147 17.3687C327.147 17.1447 326.993 16.963 326.803 16.963C326.614 16.963 326.46 17.1447 326.46 17.3687Z" fill="url(#paint35_linear_50_2588)" fill-opacity="0.7"/>
<path d="M399.733 17.3687C399.733 17.5927 399.887 17.7744 400.077 17.7744C400.267 17.7744 400.42 17.5927 400.42 17.3687C400.42 17.1447 400.267 16.963 400.077 16.963C399.887 16.963 399.733 17.1447 399.733 17.3687Z" fill="url(#paint36_linear_50_2588)" fill-opacity="0.7"/>
<path d="M390.574 9.2556C390.574 9.47964 390.728 9.66125 390.918 9.66125C391.107 9.66125 391.261 9.47964 391.261 9.2556C391.261 9.03157 391.107 8.84995 390.918 8.84995C390.728 8.84995 390.574 9.03157 390.574 9.2556Z" fill="url(#paint37_linear_50_2588)" fill-opacity="0.7"/>
<path d="M404.313 -23.1968C404.313 -22.9728 404.467 -22.7912 404.657 -22.7912C404.846 -22.7912 405 -22.9728 405 -23.1968C405 -23.4209 404.846 -23.6025 404.657 -23.6025C404.467 -23.6025 404.313 -23.4209 404.313 -23.1968Z" fill="url(#paint38_linear_50_2588)" fill-opacity="0.7"/>
<path d="M401.794 -17.7881C401.794 -17.564 401.948 -17.3824 402.138 -17.3824C402.327 -17.3824 402.481 -17.564 402.481 -17.7881C402.481 -18.0121 402.327 -18.1937 402.138 -18.1937C401.948 -18.1937 401.794 -18.0121 401.794 -17.7881Z" fill="url(#paint39_linear_50_2588)" fill-opacity="0.7"/>
<path d="M72.4165 -27.4618C72.4165 -27.2378 72.2627 -27.0562 72.0731 -27.0562C71.8834 -27.0562 71.7296 -27.2378 71.7296 -27.4618C71.7296 -27.6859 71.8834 -27.8675 72.0731 -27.8675C72.2627 -27.8675 72.4165 -27.6859 72.4165 -27.4618Z" fill="url(#paint40_linear_50_2588)" fill-opacity="0.7"/>
<path d="M292.703 -29.5943C292.703 -29.3703 292.857 -29.1887 293.047 -29.1887C293.236 -29.1887 293.39 -29.3703 293.39 -29.5943C293.39 -29.8184 293.236 -30 293.047 -30C292.857 -30 292.703 -29.8184 292.703 -29.5943Z" fill="url(#paint41_linear_50_2588)" fill-opacity="0.7"/>
<path d="M48.1971 8.11188C48.1971 8.33592 48.0434 8.51754 47.8537 8.51754C47.664 8.51754 47.5102 8.33592 47.5102 8.11188C47.5102 7.88784 47.664 7.70622 47.8537 7.70622C48.0434 7.70622 48.1971 7.88784 48.1971 8.11188Z" fill="url(#paint42_linear_50_2588)" fill-opacity="0.7"/>
<path d="M35.5492 -24.3127C35.5492 -24.0887 35.3955 -23.9071 35.2058 -23.9071C35.0161 -23.9071 34.8623 -24.0887 34.8623 -24.3127C34.8623 -24.5368 35.0161 -24.7184 35.2058 -24.7184C35.3955 -24.7184 35.5492 -24.5368 35.5492 -24.3127Z" fill="url(#paint43_linear_50_2588)" fill-opacity="0.7"/>
<path d="M22.7821 4.31581C22.7821 4.53985 22.6284 4.72147 22.4387 4.72147C22.249 4.72147 22.0952 4.53985 22.0952 4.31581C22.0952 4.09178 22.249 3.91016 22.4387 3.91016C22.6284 3.91016 22.7821 4.09178 22.7821 4.31581Z" fill="url(#paint44_linear_50_2588)" fill-opacity="0.7"/>
<path d="M98.3454 -3.54555C98.3454 -3.32152 98.1917 -3.1399 98.002 -3.1399C97.8123 -3.1399 97.6585 -3.32152 97.6585 -3.54555C97.6585 -3.76959 97.8123 -3.95121 98.002 -3.95121C98.1917 -3.95121 98.3454 -3.76959 98.3454 -3.54555Z" fill="url(#paint45_linear_50_2588)" fill-opacity="0.7"/>
<path d="M149.356 -17.9653C149.356 -17.7412 149.202 -17.5596 149.012 -17.5596C148.823 -17.5596 148.669 -17.7412 148.669 -17.9653C148.669 -18.1893 148.823 -18.3709 149.012 -18.3709C149.202 -18.3709 149.356 -18.1893 149.356 -17.9653Z" fill="url(#paint46_linear_50_2588)" fill-opacity="0.7"/>
<path d="M152.841 -22.0817C152.841 -21.8577 152.688 -21.6761 152.498 -21.6761C152.308 -21.6761 152.154 -21.8577 152.154 -22.0817C152.154 -22.3058 152.308 -22.4874 152.498 -22.4874C152.688 -22.4874 152.841 -22.3058 152.841 -22.0817Z" fill="url(#paint47_linear_50_2588)" fill-opacity="0.7"/>
<path d="M201.638 -22.0817C201.638 -21.8577 201.484 -21.6761 201.294 -21.6761C201.104 -21.6761 200.951 -21.8577 200.951 -22.0817C200.951 -22.3058 201.104 -22.4874 201.294 -22.4874C201.484 -22.4874 201.638 -22.3058 201.638 -22.0817Z" fill="url(#paint48_linear_50_2588)" fill-opacity="0.7"/>
<path d="M226.036 -26.1982C226.036 -25.9742 225.882 -25.7926 225.692 -25.7926C225.503 -25.7926 225.349 -25.9742 225.349 -26.1982C225.349 -26.4223 225.503 -26.6039 225.692 -26.6039C225.882 -26.6039 226.036 -26.4223 226.036 -26.1982Z" fill="url(#paint49_linear_50_2588)" fill-opacity="0.7"/>
<path d="M233.007 -22.0817C233.007 -21.8577 232.853 -21.6761 232.663 -21.6761C232.473 -21.6761 232.32 -21.8577 232.32 -22.0817C232.32 -22.3058 232.473 -22.4874 232.663 -22.4874C232.853 -22.4874 233.007 -22.3058 233.007 -22.0817Z" fill="url(#paint50_linear_50_2588)" fill-opacity="0.7"/>
<path d="M-32.782 -23.1968C-32.782 -22.9728 -32.9358 -22.7912 -33.1255 -22.7912C-33.3151 -22.7912 -33.4689 -22.9728 -33.4689 -23.1968C-33.4689 -23.4209 -33.3151 -23.6025 -33.1255 -23.6025C-32.9358 -23.6025 -32.782 -23.4209 -32.782 -23.1968Z" fill="url(#paint51_linear_50_2588)" fill-opacity="0.7"/>
<path d="M-37.3131 9.32345C-37.3131 9.54749 -37.4668 9.7291 -37.6565 9.7291C-37.8462 9.7291 -38 9.54749 -38 9.32345C-38 9.09941 -37.8462 8.9178 -37.6565 8.9178C-37.4668 8.9178 -37.3131 9.09941 -37.3131 9.32345Z" fill="url(#paint52_linear_50_2588)" fill-opacity="0.7"/>
<path d="M140.532 4.4873C140.532 4.71134 140.378 4.89295 140.189 4.89295C139.999 4.89295 139.845 4.71134 139.845 4.4873C139.845 4.26326 139.999 4.08165 140.189 4.08165C140.378 4.08165 140.532 4.26326 140.532 4.4873Z" fill="url(#paint53_linear_50_2588)" fill-opacity="0.7"/>
<path d="M164.93 8.60379C164.93 8.82783 164.776 9.00944 164.587 9.00944C164.397 9.00944 164.243 8.82783 164.243 8.60379C164.243 8.37975 164.397 8.19813 164.587 8.19813C164.776 8.19813 164.93 8.37975 164.93 8.60379Z" fill="url(#paint54_linear_50_2588)" fill-opacity="0.7"/>
<path d="M168.416 4.4873C168.416 4.71134 168.262 4.89295 168.072 4.89295C167.882 4.89295 167.729 4.71134 167.729 4.4873C167.729 4.26326 167.882 4.08164 168.072 4.08164C168.262 4.08164 168.416 4.26326 168.416 4.4873Z" fill="url(#paint55_linear_50_2588)" fill-opacity="0.7"/>
<path d="M217.212 4.4873C217.212 4.71134 217.058 4.89295 216.868 4.89295C216.679 4.89295 216.525 4.71134 216.525 4.4873C216.525 4.26326 216.679 4.08164 216.868 4.08164C217.058 4.08164 217.212 4.26326 217.212 4.4873Z" fill="url(#paint56_linear_50_2588)" fill-opacity="0.7"/>
<path d="M241.61 0.370808C241.61 0.594845 241.456 0.776466 241.266 0.776466C241.077 0.776466 240.923 0.594845 240.923 0.370808C240.923 0.146771 241.077 -0.0348468 241.266 -0.0348468C241.456 -0.0348468 241.61 0.146771 241.61 0.370808Z" fill="url(#paint57_linear_50_2588)" fill-opacity="0.7"/>
<path d="M248.581 4.4873C248.581 4.71134 248.427 4.89295 248.237 4.89295C248.048 4.89295 247.894 4.71134 247.894 4.4873C247.894 4.26326 248.048 4.08164 248.237 4.08164C248.427 4.08164 248.581 4.26326 248.581 4.4873Z" fill="url(#paint58_linear_50_2588)" fill-opacity="0.7"/>
<path d="M180.872 -17.9942C180.872 -17.7702 180.718 -17.5885 180.528 -17.5885C180.339 -17.5885 180.185 -17.7702 180.185 -17.9942C180.185 -18.2182 180.339 -18.3999 180.528 -18.3999C180.718 -18.3999 180.872 -18.2182 180.872 -17.9942Z" fill="url(#paint59_linear_50_2588)" fill-opacity="0.7"/>
<path d="M-5.3877 -1.02525C-5.3877 -0.801211 -5.54148 -0.61959 -5.73117 -0.61959C-5.92087 -0.61959 -6.07465 -0.801211 -6.07465 -1.02525C-6.07465 -1.24929 -5.92087 -1.43091 -5.73117 -1.43091C-5.54148 -1.43091 -5.3877 -1.24929 -5.3877 -1.02525Z" fill="url(#paint60_linear_50_2588)" fill-opacity="0.7"/>
<path d="M0.286034 -14.0781C0.286034 -13.8541 0.132263 -13.6725 -0.0574296 -13.6725C-0.247123 -13.6725 -0.400899 -13.8541 -0.400899 -14.0781C-0.400899 -14.3022 -0.247123 -14.4838 -0.0574296 -14.4838C0.132263 -14.4838 0.286034 -14.3022 0.286034 -14.0781Z" fill="url(#paint61_linear_50_2588)" fill-opacity="0.7"/>
<path d="M42.5201 28.7964C42.5201 29.0205 42.3663 29.2021 42.1767 29.2021C41.987 29.2021 41.8332 29.0205 41.8332 28.7964C41.8332 28.5724 41.987 28.3908 42.1767 28.3908C42.3663 28.3908 42.5201 28.5724 42.5201 28.7964Z" fill="url(#paint62_linear_50_2588)" fill-opacity="0.7"/>
<path d="M60.6145 66.4812C60.6145 66.7053 60.4608 66.8869 60.2711 66.8869C60.0814 66.8869 59.9276 66.7053 59.9276 66.4812C59.9276 66.2572 60.0814 66.0756 60.2711 66.0756C60.4608 66.0756 60.6145 66.2572 60.6145 66.4812Z" fill="url(#paint63_linear_50_2588)" fill-opacity="0.7"/>
<path d="M68.3998 74.5943C68.3998 74.8184 68.246 75 68.0564 75C67.8667 75 67.7129 74.8184 67.7129 74.5943C67.7129 74.3703 67.8667 74.1887 68.0564 74.1887C68.246 74.1887 68.3998 74.3703 68.3998 74.5943Z" fill="url(#paint64_linear_50_2588)" fill-opacity="0.7"/>
<path d="M68.3998 58.2483C68.3998 58.4723 68.246 58.6539 68.0564 58.6539C67.8667 58.6539 67.7129 58.4723 67.7129 58.2483C67.7129 58.0242 67.8667 57.8426 68.0564 57.8426C68.246 57.8426 68.3998 58.0242 68.3998 58.2483Z" fill="url(#paint65_linear_50_2588)" fill-opacity="0.7"/>
<path d="M68.3998 58.2483C68.3998 58.4723 68.246 58.6539 68.0564 58.6539C67.8667 58.6539 67.7129 58.4723 67.7129 58.2483C67.7129 58.0242 67.8667 57.8426 68.0564 57.8426C68.246 57.8426 68.3998 58.0242 68.3998 58.2483Z" fill="url(#paint66_linear_50_2588)" fill-opacity="0.7"/>
<path d="M124.958 35.1439C124.958 35.3679 124.804 35.5495 124.614 35.5495C124.425 35.5495 124.271 35.3679 124.271 35.1439C124.271 34.9199 124.425 34.7382 124.614 34.7382C124.804 34.7382 124.958 34.9199 124.958 35.1439Z" fill="url(#paint67_linear_50_2588)" fill-opacity="0.7"/>
<path d="M78.9329 50.255C78.9329 50.4791 78.7791 50.6607 78.5894 50.6607C78.3997 50.6607 78.246 50.4791 78.246 50.255C78.246 50.031 78.3997 49.8494 78.5894 49.8494C78.7791 49.8494 78.9329 50.031 78.9329 50.255Z" fill="url(#paint68_linear_50_2588)" fill-opacity="0.7"/>
<path d="M83.5125 47.4308C83.5125 47.6548 83.3587 47.8364 83.169 47.8364C82.9793 47.8364 82.8256 47.6548 82.8256 47.4308C82.8256 47.2067 82.9793 47.0251 83.169 47.0251C83.3587 47.0251 83.5125 47.2067 83.5125 47.4308Z" fill="url(#paint69_linear_50_2588)" fill-opacity="0.7"/>
<path d="M97.2513 38.6262C97.2513 38.8503 97.0975 39.0319 96.9078 39.0319C96.7181 39.0319 96.5643 38.8503 96.5643 38.6262C96.5643 38.4022 96.7181 38.2206 96.9078 38.2206C97.0975 38.2206 97.2513 38.4022 97.2513 38.6262Z" fill="url(#paint70_linear_50_2588)" fill-opacity="0.7"/>
<path d="M101.831 41.3306C101.831 41.5547 101.677 41.7363 101.487 41.7363C101.298 41.7363 101.144 41.5547 101.144 41.3306C101.144 41.1066 101.298 40.925 101.487 40.925C101.677 40.925 101.831 41.1066 101.831 41.3306Z" fill="url(#paint71_linear_50_2588)" fill-opacity="0.7"/>
<path d="M108.7 33.2175C108.7 33.4415 108.546 33.6232 108.357 33.6232C108.167 33.6232 108.013 33.4415 108.013 33.2175C108.013 32.9935 108.167 32.8119 108.357 32.8119C108.546 32.8119 108.7 32.9935 108.7 33.2175Z" fill="url(#paint72_linear_50_2588)" fill-opacity="0.7"/>
<path d="M90.3819 74.5943C90.3819 74.8184 90.2281 75 90.0384 75C89.8487 75 89.6949 74.8184 89.6949 74.5943C89.6949 74.3703 89.8487 74.1887 90.0384 74.1887C90.2281 74.1887 90.3819 74.3703 90.3819 74.5943Z" fill="url(#paint73_linear_50_2588)" fill-opacity="0.7"/>
<path d="M17.1084 74.5943C17.1084 74.8184 16.9546 75 16.7649 75C16.5752 75 16.4214 74.8184 16.4214 74.5943C16.4214 74.3703 16.5752 74.1887 16.7649 74.1887C16.9546 74.1887 17.1084 74.3703 17.1084 74.5943Z" fill="url(#paint74_linear_50_2588)" fill-opacity="0.7"/>
<path d="M33.2385 66.0696C33.2385 66.2936 33.0847 66.4752 32.895 66.4752C32.7053 66.4752 32.5515 66.2936 32.5515 66.0696C32.5515 65.8456 32.7053 65.6639 32.895 65.6639C33.0847 65.6639 33.2385 65.8456 33.2385 66.0696Z" fill="url(#paint75_linear_50_2588)" fill-opacity="0.7"/>
<path d="M-36.2674 29.9123C-36.2674 30.1364 -36.4212 30.318 -36.6109 30.318C-36.8006 30.318 -36.9544 30.1364 -36.9544 29.9123C-36.9544 29.6883 -36.8006 29.5067 -36.6109 29.5067C-36.4212 29.5067 -36.2674 29.6883 -36.2674 29.9123Z" fill="url(#paint76_linear_50_2588)" fill-opacity="0.7"/>
<path d="M388.284 44.8463C388.284 45.0703 388.438 45.2519 388.628 45.2519C388.818 45.2519 388.971 45.0703 388.971 44.8463C388.971 44.6223 388.818 44.4406 388.628 44.4406C388.438 44.4406 388.284 44.6223 388.284 44.8463Z" fill="url(#paint77_linear_50_2588)" fill-opacity="0.7"/>
<path d="M376.835 55.6638C376.835 55.8878 376.989 56.0694 377.179 56.0694C377.369 56.0694 377.522 55.8878 377.522 55.6638C377.522 55.4397 377.369 55.2581 377.179 55.2581C376.989 55.2581 376.835 55.4397 376.835 55.6638Z" fill="url(#paint78_linear_50_2588)" fill-opacity="0.7"/>
<path d="M360.807 39.4376C360.807 39.6616 360.961 39.8432 361.15 39.8432C361.34 39.8432 361.494 39.6616 361.494 39.4376C361.494 39.2135 361.34 39.0319 361.15 39.0319C360.961 39.0319 360.807 39.2135 360.807 39.4376Z" fill="url(#paint79_linear_50_2588)" fill-opacity="0.7"/>
<path d="M352.742 62.3647C352.742 62.5888 352.896 62.7704 353.085 62.7704C353.275 62.7704 353.429 62.5888 353.429 62.3647C353.429 62.1407 353.275 61.9591 353.085 61.9591C352.896 61.9591 352.742 62.1407 352.742 62.3647Z" fill="url(#paint80_linear_50_2588)" fill-opacity="0.7"/>
<path d="M344.957 70.4779C344.957 70.7019 345.11 70.8835 345.3 70.8835C345.49 70.8835 345.643 70.7019 345.643 70.4779C345.643 70.2538 345.49 70.0722 345.3 70.0722C345.11 70.0722 344.957 70.2538 344.957 70.4779Z" fill="url(#paint81_linear_50_2588)" fill-opacity="0.7"/>
<path d="M344.957 62.3647C344.957 62.5888 345.11 62.7704 345.3 62.7704C345.49 62.7704 345.643 62.5888 345.643 62.3647C345.643 62.1407 345.49 61.9591 345.3 61.9591C345.11 61.9591 344.957 62.1407 344.957 62.3647Z" fill="url(#paint82_linear_50_2588)" fill-opacity="0.7"/>
<path d="M344.957 62.3647C344.957 62.5888 345.11 62.7704 345.3 62.7704C345.49 62.7704 345.643 62.5888 345.643 62.3647C345.643 62.1407 345.49 61.9591 345.3 61.9591C345.11 61.9591 344.957 62.1407 344.957 62.3647Z" fill="url(#paint83_linear_50_2588)" fill-opacity="0.7"/>
<path d="M291.884 42.1419C291.884 42.366 292.038 42.5476 292.227 42.5476C292.417 42.5476 292.571 42.366 292.571 42.1419C292.571 41.9179 292.417 41.7363 292.227 41.7363C292.038 41.7363 291.884 41.9179 291.884 42.1419Z" fill="url(#paint84_linear_50_2588)" fill-opacity="0.7"/>
<path d="M280.634 33.7891C280.634 34.0131 280.787 34.1947 280.977 34.1947C281.167 34.1947 281.32 34.0131 281.32 33.7891C281.32 33.565 281.167 33.3834 280.977 33.3834C280.787 33.3834 280.634 33.565 280.634 33.7891Z" fill="url(#paint85_linear_50_2588)" fill-opacity="0.7"/>
<path d="M296.464 58.3681C296.464 58.5922 296.617 58.7738 296.807 58.7738C296.997 58.7738 297.151 58.5922 297.151 58.3681C297.151 58.1441 296.997 57.9625 296.807 57.9625C296.617 57.9625 296.464 58.1441 296.464 58.3681Z" fill="url(#paint86_linear_50_2588)" fill-opacity="0.7"/>
<path d="M337.909 50.255C337.909 50.4791 338.063 50.6607 338.252 50.6607C338.442 50.6607 338.596 50.4791 338.596 50.255C338.596 50.031 338.442 49.8494 338.252 49.8494C338.063 49.8494 337.909 50.031 337.909 50.255Z" fill="url(#paint87_linear_50_2588)" fill-opacity="0.7"/>
<path d="M333.329 55.6638C333.329 55.8878 333.483 56.0694 333.673 56.0694C333.862 56.0694 334.016 55.8878 334.016 55.6638C334.016 55.4397 333.862 55.2581 333.673 55.2581C333.483 55.2581 333.329 55.4397 333.329 55.6638Z" fill="url(#paint88_linear_50_2588)" fill-opacity="0.7"/>
<path d="M313.637 61.0725C313.637 61.2965 313.791 61.4782 313.981 61.4782C314.17 61.4782 314.324 61.2965 314.324 61.0725C314.324 60.8485 314.17 60.6668 313.981 60.6668C313.791 60.6668 313.637 60.8485 313.637 61.0725Z" fill="url(#paint89_linear_50_2588)" fill-opacity="0.7"/>
<path d="M336.535 34.2993C336.535 34.5233 336.689 34.7049 336.879 34.7049C337.068 34.7049 337.222 34.5233 337.222 34.2993C337.222 34.0752 337.068 33.8936 336.879 33.8936C336.689 33.8936 336.535 34.0752 336.535 34.2993Z" fill="url(#paint90_linear_50_2588)" fill-opacity="0.7"/>
<path d="M319.591 38.6262C319.591 38.8503 319.744 39.0319 319.934 39.0319C320.124 39.0319 320.277 38.8503 320.277 38.6262C320.277 38.4022 320.124 38.2206 319.934 38.2206C319.744 38.2206 319.591 38.4022 319.591 38.6262Z" fill="url(#paint91_linear_50_2588)" fill-opacity="0.7"/>
<path d="M315.011 41.3306C315.011 41.5547 315.165 41.7363 315.354 41.7363C315.544 41.7363 315.698 41.5547 315.698 41.3306C315.698 41.1066 315.544 40.925 315.354 40.925C315.165 40.925 315.011 41.1066 315.011 41.3306Z" fill="url(#paint92_linear_50_2588)" fill-opacity="0.7"/>
<path d="M315.011 35.9219C315.011 36.1459 315.165 36.3275 315.354 36.3275C315.544 36.3275 315.698 36.1459 315.698 35.9219C315.698 35.6978 315.544 35.5162 315.354 35.5162C315.165 35.5162 315.011 35.6978 315.011 35.9219Z" fill="url(#paint93_linear_50_2588)" fill-opacity="0.7"/>
<path d="M268.528 35.9219C268.528 36.1459 268.682 36.3275 268.872 36.3275C269.061 36.3275 269.215 36.1459 269.215 35.9219C269.215 35.6978 269.061 35.5162 268.872 35.5162C268.682 35.5162 268.528 35.6978 268.528 35.9219Z" fill="url(#paint94_linear_50_2588)" fill-opacity="0.7"/>
<path d="M326.46 74.5943C326.46 74.8184 326.614 75 326.803 75C326.993 75 327.147 74.8184 327.147 74.5943C327.147 74.3703 326.993 74.1887 326.803 74.1887C326.614 74.1887 326.46 74.3703 326.46 74.5943Z" fill="url(#paint95_linear_50_2588)" fill-opacity="0.7"/>
<path d="M399.733 74.5943C399.733 74.8184 399.887 75 400.077 75C400.267 75 400.42 74.8184 400.42 74.5943C400.42 74.3703 400.267 74.1887 400.077 74.1887C399.887 74.1887 399.733 74.3703 399.733 74.5943Z" fill="url(#paint96_linear_50_2588)" fill-opacity="0.7"/>
<path d="M390.574 66.4812C390.574 66.7053 390.728 66.8869 390.918 66.8869C391.107 66.8869 391.261 66.7053 391.261 66.4812C391.261 66.2572 391.107 66.0756 390.918 66.0756C390.728 66.0756 390.574 66.2572 390.574 66.4812Z" fill="url(#paint97_linear_50_2588)" fill-opacity="0.7"/>
<path d="M404.313 34.0288C404.313 34.2529 404.467 34.4345 404.657 34.4345C404.846 34.4345 405 34.2529 405 34.0288C405 33.8048 404.846 33.6232 404.657 33.6232C404.467 33.6232 404.313 33.8048 404.313 34.0288Z" fill="url(#paint98_linear_50_2588)" fill-opacity="0.7"/>
<path d="M401.794 39.4376C401.794 39.6616 401.948 39.8432 402.138 39.8432C402.327 39.8432 402.481 39.6616 402.481 39.4376C402.481 39.2135 402.327 39.0319 402.138 39.0319C401.948 39.0319 401.794 39.2135 401.794 39.4376Z" fill="url(#paint99_linear_50_2588)" fill-opacity="0.7"/>
<path d="M72.4165 29.7638C72.4165 29.9879 72.2627 30.1695 72.0731 30.1695C71.8834 30.1695 71.7296 29.9879 71.7296 29.7638C71.7296 29.5398 71.8834 29.3582 72.0731 29.3582C72.2627 29.3582 72.4165 29.5398 72.4165 29.7638Z" fill="url(#paint100_linear_50_2588)" fill-opacity="0.7"/>
<path d="M292.703 27.6313C292.703 27.8553 292.857 28.0369 293.047 28.0369C293.236 28.0369 293.39 27.8553 293.39 27.6313C293.39 27.4073 293.236 27.2256 293.047 27.2256C292.857 27.2256 292.703 27.4073 292.703 27.6313Z" fill="url(#paint101_linear_50_2588)" fill-opacity="0.7"/>
<path d="M48.1971 65.3375C48.1971 65.5616 48.0434 65.7432 47.8537 65.7432C47.664 65.7432 47.5102 65.5616 47.5102 65.3375C47.5102 65.1135 47.664 64.9319 47.8537 64.9319C48.0434 64.9319 48.1971 65.1135 48.1971 65.3375Z" fill="url(#paint102_linear_50_2588)" fill-opacity="0.7"/>
<path d="M35.5492 32.9129C35.5492 33.137 35.3955 33.3186 35.2058 33.3186C35.0161 33.3186 34.8623 33.137 34.8623 32.9129C34.8623 32.6889 35.0161 32.5073 35.2058 32.5073C35.3955 32.5073 35.5492 32.6889 35.5492 32.9129Z" fill="url(#paint103_linear_50_2588)" fill-opacity="0.7"/>
<path d="M22.7821 61.5414C22.7821 61.7655 22.6284 61.9471 22.4387 61.9471C22.249 61.9471 22.0952 61.7655 22.0952 61.5414C22.0952 61.3174 22.249 61.1358 22.4387 61.1358C22.6284 61.1358 22.7821 61.3174 22.7821 61.5414Z" fill="url(#paint104_linear_50_2588)" fill-opacity="0.7"/>
<path d="M98.3454 53.6801C98.3454 53.9041 98.1917 54.0857 98.002 54.0857C97.8123 54.0857 97.6585 53.9041 97.6585 53.6801C97.6585 53.456 97.8123 53.2744 98.002 53.2744C98.1917 53.2744 98.3454 53.456 98.3454 53.6801Z" fill="url(#paint105_linear_50_2588)" fill-opacity="0.7"/>
<path d="M149.356 39.2604C149.356 39.4844 149.202 39.666 149.012 39.666C148.823 39.666 148.669 39.4844 148.669 39.2604C148.669 39.0363 148.823 38.8547 149.012 38.8547C149.202 38.8547 149.356 39.0363 149.356 39.2604Z" fill="url(#paint106_linear_50_2588)" fill-opacity="0.7"/>
<path d="M152.841 35.1439C152.841 35.3679 152.688 35.5495 152.498 35.5495C152.308 35.5495 152.154 35.3679 152.154 35.1439C152.154 34.9199 152.308 34.7382 152.498 34.7382C152.688 34.7382 152.841 34.9199 152.841 35.1439Z" fill="url(#paint107_linear_50_2588)" fill-opacity="0.7"/>
<path d="M201.638 35.1439C201.638 35.3679 201.484 35.5495 201.294 35.5495C201.104 35.5495 200.951 35.3679 200.951 35.1439C200.951 34.9199 201.104 34.7382 201.294 34.7382C201.484 34.7382 201.638 34.9199 201.638 35.1439Z" fill="url(#paint108_linear_50_2588)" fill-opacity="0.7"/>
<path d="M226.036 31.0274C226.036 31.2514 225.882 31.4331 225.692 31.4331C225.503 31.4331 225.349 31.2514 225.349 31.0274C225.349 30.8034 225.503 30.6217 225.692 30.6217C225.882 30.6217 226.036 30.8034 226.036 31.0274Z" fill="url(#paint109_linear_50_2588)" fill-opacity="0.7"/>
<path d="M233.007 35.1439C233.007 35.3679 232.853 35.5495 232.663 35.5495C232.473 35.5495 232.32 35.3679 232.32 35.1439C232.32 34.9199 232.473 34.7382 232.663 34.7382C232.853 34.7382 233.007 34.9199 233.007 35.1439Z" fill="url(#paint110_linear_50_2588)" fill-opacity="0.7"/>
<path d="M-32.782 34.0288C-32.782 34.2529 -32.9358 34.4345 -33.1255 34.4345C-33.3151 34.4345 -33.4689 34.2529 -33.4689 34.0288C-33.4689 33.8048 -33.3151 33.6232 -33.1255 33.6232C-32.9358 33.6232 -32.782 33.8048 -32.782 34.0288Z" fill="url(#paint111_linear_50_2588)" fill-opacity="0.7"/>
<path d="M-37.3131 66.5491C-37.3131 66.7731 -37.4668 66.9547 -37.6565 66.9547C-37.8462 66.9547 -38 66.7731 -38 66.5491C-38 66.3251 -37.8462 66.1434 -37.6565 66.1434C-37.4668 66.1434 -37.3131 66.3251 -37.3131 66.5491Z" fill="url(#paint112_linear_50_2588)" fill-opacity="0.7"/>
<path d="M140.532 61.7129C140.532 61.937 140.378 62.1186 140.189 62.1186C139.999 62.1186 139.845 61.937 139.845 61.7129C139.845 61.4889 139.999 61.3073 140.189 61.3073C140.378 61.3073 140.532 61.4889 140.532 61.7129Z" fill="url(#paint113_linear_50_2588)" fill-opacity="0.7"/>
<path d="M164.93 65.8294C164.93 66.0535 164.776 66.2351 164.587 66.2351C164.397 66.2351 164.243 66.0535 164.243 65.8294C164.243 65.6054 164.397 65.4238 164.587 65.4238C164.776 65.4238 164.93 65.6054 164.93 65.8294Z" fill="url(#paint114_linear_50_2588)" fill-opacity="0.7"/>
<path d="M168.416 61.7129C168.416 61.937 168.262 62.1186 168.072 62.1186C167.882 62.1186 167.729 61.937 167.729 61.7129C167.729 61.4889 167.882 61.3073 168.072 61.3073C168.262 61.3073 168.416 61.4889 168.416 61.7129Z" fill="url(#paint115_linear_50_2588)" fill-opacity="0.7"/>
<path d="M217.212 61.7129C217.212 61.937 217.058 62.1186 216.868 62.1186C216.679 62.1186 216.525 61.937 216.525 61.7129C216.525 61.4889 216.679 61.3073 216.868 61.3073C217.058 61.3073 217.212 61.4889 217.212 61.7129Z" fill="url(#paint116_linear_50_2588)" fill-opacity="0.7"/>
<path d="M241.61 57.5964C241.61 57.8205 241.456 58.0021 241.266 58.0021C241.077 58.0021 240.923 57.8205 240.923 57.5964C240.923 57.3724 241.077 57.1908 241.266 57.1908C241.456 57.1908 241.61 57.3724 241.61 57.5964Z" fill="url(#paint117_linear_50_2588)" fill-opacity="0.7"/>
<path d="M248.581 61.7129C248.581 61.937 248.427 62.1186 248.237 62.1186C248.048 62.1186 247.894 61.937 247.894 61.7129C247.894 61.4889 248.048 61.3073 248.237 61.3073C248.427 61.3073 248.581 61.4889 248.581 61.7129Z" fill="url(#paint118_linear_50_2588)" fill-opacity="0.7"/>
<path d="M180.872 39.2314C180.872 39.4555 180.718 39.6371 180.528 39.6371C180.339 39.6371 180.185 39.4555 180.185 39.2314C180.185 39.0074 180.339 38.8258 180.528 38.8258C180.718 38.8258 180.872 39.0074 180.872 39.2314Z" fill="url(#paint119_linear_50_2588)" fill-opacity="0.7"/>
<path d="M-5.3877 56.2004C-5.3877 56.4244 -5.54148 56.606 -5.73117 56.606C-5.92087 56.606 -6.07465 56.4244 -6.07465 56.2004C-6.07465 55.9764 -5.92087 55.7947 -5.73117 55.7947C-5.54148 55.7947 -5.3877 55.9764 -5.3877 56.2004Z" fill="url(#paint120_linear_50_2588)" fill-opacity="0.7"/>
<path d="M0.286034 43.1475C0.286034 43.3715 0.132263 43.5532 -0.0574296 43.5532C-0.247123 43.5532 -0.400899 43.3715 -0.400899 43.1475C-0.400899 42.9235 -0.247123 42.7418 -0.0574296 42.7418C0.132263 42.7418 0.286034 42.9235 0.286034 43.1475Z" fill="url(#paint121_linear_50_2588)" fill-opacity="0.7"/>
<defs>
<filter id="filter0_f_50_2588" x="-114.767" y="43" width="579.973" height="455.658" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="30" result="effect1_foregroundBlur_50_2588"/>
</filter>
<linearGradient id="paint0_linear_50_2588" x1="175.22" y1="103" x2="175.22" y2="438.658" gradientUnits="userSpaceOnUse">
<stop stop-color="#F02E65"/>
<stop offset="0.653751" stop-color="#F02E65" stop-opacity="0.2"/>
<stop offset="0.699927" stop-color="#F02E65" stop-opacity="0.2"/>
<stop offset="1" stop-color="#F02E65" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint1_linear_50_2588" x1="174.295" y1="120.496" x2="174.295" y2="456.155" gradientUnits="userSpaceOnUse">
<stop stop-color="#FF6893"/>
<stop offset="0.0582362" stop-color="#F02E65"/>
<stop offset="0.485307" stop-color="#F02E65" stop-opacity="0.2"/>
<stop offset="0.619552" stop-color="#F02E65" stop-opacity="0.2"/>
<stop offset="0.918726" stop-color="#F02E65" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint2_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint3_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint4_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint5_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint6_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint7_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint8_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint9_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint10_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint11_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint12_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint13_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint14_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint15_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint16_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint17_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint18_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint19_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint20_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint21_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint22_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint23_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint24_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint25_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint26_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint27_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint28_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint29_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint30_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint31_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint32_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint33_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint34_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint35_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint36_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint37_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint38_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint39_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint40_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint41_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint42_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint43_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint44_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint45_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint46_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint47_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint48_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint49_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint50_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint51_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint52_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint53_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint54_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint55_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint56_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint57_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint58_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint59_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint60_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint61_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint62_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint63_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint64_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint65_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint66_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint67_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint68_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint69_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint70_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint71_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint72_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint73_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint74_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint75_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint76_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint77_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint78_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint79_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint80_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint81_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint82_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint83_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint84_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint85_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint86_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint87_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint88_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint89_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint90_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint91_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint92_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint93_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint94_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint95_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint96_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint97_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint98_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint99_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint100_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint101_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint102_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint103_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint104_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint105_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint106_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint107_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint108_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint109_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint110_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint111_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint112_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint113_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint114_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint115_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint116_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint117_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint118_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint119_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint120_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint121_linear_50_2588" x1="208.421" y1="-23.6025" x2="208.421" y2="181.53" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 62 KiB

+632
View File
@@ -0,0 +1,632 @@
<svg width="722" height="821" viewBox="0 0 722 821" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_23_6705)">
<rect width="719" height="821" fill="#1B1B28"/>
<g filter="url(#filter0_f_23_6705)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M721 386.476C721.659 382.037 722 377.5 722 372.889C722 319.379 676.109 276 619.5 276C578.826 276 543.685 298.395 527.124 330.851C518.094 334.195 509.689 338.715 502.119 344.212C495.538 320.2 472.46 302.467 445 302.467C416.429 302.467 392.602 321.663 387.165 347.155C371.536 338.574 353.375 333.661 334 333.661C319.557 333.661 305.789 336.391 293.242 341.335C277.485 304.681 239.435 278.836 195 278.836C150.439 278.836 112.3 304.828 96.6246 341.647C84.626 334.779 70.5515 330.825 55.5 330.825C11.5934 330.825 -24 364.47 -24 405.973C-24 428 -13.9739 447.814 2 461.559V794H721V386.476Z" fill="url(#paint0_linear_23_6705)" fill-opacity="0.28"/>
</g>
<path fill-rule="evenodd" clip-rule="evenodd" d="M718 380.747C708.6 336.405 667.177 303 617.5 303C582.258 303 551.17 319.812 532.723 345.414C521.282 349.645 510.739 355.563 501.436 362.842C490.847 344.47 470.216 332 446.5 332C427.667 332 410.78 339.863 399.321 352.302C382.716 343.817 363.704 339 343.5 339C321.718 339 301.321 344.599 283.833 354.356C265.279 325.28 231.542 305.836 193 305.836C148.439 305.836 110.3 331.828 94.6246 368.647C82.626 361.779 68.5515 357.825 53.5 357.825C9.59336 357.825 -26 391.47 -26 432.973C-26 455 -15.9739 474.814 0 488.559V821H718V380.747Z" fill="url(#paint1_linear_23_6705)"/>
<path d="M130.686 17.4235C130.686 17.7692 130.437 18.0494 130.129 18.0494C129.821 18.0494 129.571 17.7692 129.571 17.4235C129.571 17.0779 129.821 16.7976 130.129 16.7976C130.437 16.7976 130.686 17.0779 130.686 17.4235Z" fill="url(#paint2_linear_23_6705)" fill-opacity="0.7"/>
<path d="M160.054 75.5658C160.054 75.9114 159.804 76.1916 159.496 76.1916C159.189 76.1916 158.939 75.9114 158.939 75.5658C158.939 75.2201 159.189 74.9399 159.496 74.9399C159.804 74.9399 160.054 75.2201 160.054 75.5658Z" fill="url(#paint3_linear_23_6705)" fill-opacity="0.7"/>
<path d="M172.69 88.0831C172.69 88.4288 172.44 88.709 172.132 88.709C171.824 88.709 171.575 88.4288 171.575 88.0831C171.575 87.7375 171.824 87.4573 172.132 87.4573C172.44 87.4573 172.69 87.7375 172.69 88.0831Z" fill="url(#paint4_linear_23_6705)" fill-opacity="0.7"/>
<path d="M172.69 62.8635C172.69 63.2091 172.44 63.4893 172.132 63.4893C171.824 63.4893 171.575 63.2091 171.575 62.8635C171.575 62.5178 171.824 62.2376 172.132 62.2376C172.44 62.2376 172.69 62.5178 172.69 62.8635Z" fill="url(#paint5_linear_23_6705)" fill-opacity="0.7"/>
<path d="M172.69 62.8635C172.69 63.2091 172.44 63.4893 172.132 63.4893C171.824 63.4893 171.575 63.2091 171.575 62.8635C171.575 62.5178 171.824 62.2376 172.132 62.2376C172.44 62.2376 172.69 62.5178 172.69 62.8635Z" fill="url(#paint6_linear_23_6705)" fill-opacity="0.7"/>
<path d="M264.485 27.2167C264.485 27.5624 264.235 27.8426 263.927 27.8426C263.619 27.8426 263.37 27.5624 263.37 27.2167C263.37 26.8711 263.619 26.5909 263.927 26.5909C264.235 26.5909 264.485 26.8711 264.485 27.2167Z" fill="url(#paint7_linear_23_6705)" fill-opacity="0.7"/>
<path d="M189.785 50.5311C189.785 50.8767 189.535 51.1569 189.228 51.1569C188.92 51.1569 188.67 50.8767 188.67 50.5311C188.67 50.1854 188.92 49.9052 189.228 49.9052C189.535 49.9052 189.785 50.1854 189.785 50.5311Z" fill="url(#paint8_linear_23_6705)" fill-opacity="0.7"/>
<path d="M197.218 46.1737C197.218 46.5193 196.968 46.7995 196.66 46.7995C196.352 46.7995 196.103 46.5193 196.103 46.1737C196.103 45.828 196.352 45.5478 196.66 45.5478C196.968 45.5478 197.218 45.828 197.218 46.1737Z" fill="url(#paint9_linear_23_6705)" fill-opacity="0.7"/>
<path d="M219.516 32.5895C219.516 32.9352 219.267 33.2154 218.959 33.2154C218.651 33.2154 218.401 32.9352 218.401 32.5895C218.401 32.2439 218.651 31.9636 218.959 31.9636C219.267 31.9636 219.516 32.2439 219.516 32.5895Z" fill="url(#paint10_linear_23_6705)" fill-opacity="0.7"/>
<path d="M226.949 36.762C226.949 37.1076 226.699 37.3878 226.392 37.3878C226.084 37.3878 225.834 37.1076 225.834 36.762C225.834 36.4163 226.084 36.1361 226.392 36.1361C226.699 36.1361 226.949 36.4163 226.949 36.762Z" fill="url(#paint11_linear_23_6705)" fill-opacity="0.7"/>
<path d="M238.098 24.2446C238.098 24.5903 237.849 24.8705 237.541 24.8705C237.233 24.8705 236.983 24.5903 236.983 24.2446C236.983 23.8989 237.233 23.6187 237.541 23.6187C237.849 23.6187 238.098 23.8989 238.098 24.2446Z" fill="url(#paint12_linear_23_6705)" fill-opacity="0.7"/>
<path d="M208.367 88.0831C208.367 88.4288 208.117 88.709 207.81 88.709C207.502 88.709 207.252 88.4288 207.252 88.0831C207.252 87.7375 207.502 87.4573 207.81 87.4573C208.117 87.4573 208.367 87.7375 208.367 88.0831Z" fill="url(#paint13_linear_23_6705)" fill-opacity="0.7"/>
<path d="M89.4423 88.0831C89.4423 88.4288 89.1927 88.709 88.8848 88.709C88.577 88.709 88.3274 88.4288 88.3274 88.0831C88.3274 87.7375 88.577 87.4573 88.8848 87.4573C89.1927 87.4573 89.4423 87.7375 89.4423 88.0831Z" fill="url(#paint14_linear_23_6705)" fill-opacity="0.7"/>
<path d="M115.622 74.9307C115.622 75.2763 115.372 75.5565 115.064 75.5565C114.756 75.5565 114.507 75.2763 114.507 74.9307C114.507 74.585 114.756 74.3048 115.064 74.3048C115.372 74.3048 115.622 74.585 115.622 74.9307Z" fill="url(#paint15_linear_23_6705)" fill-opacity="0.7"/>
<path d="M2.81201 19.1452C2.81201 19.4908 2.56242 19.7711 2.25455 19.7711C1.94667 19.7711 1.69709 19.4908 1.69709 19.1452C1.69709 18.7995 1.94667 18.5193 2.25455 18.5193C2.56242 18.5193 2.81201 18.7995 2.81201 19.1452Z" fill="url(#paint16_linear_23_6705)" fill-opacity="0.7"/>
<path d="M691.87 42.1862C691.87 42.5318 692.12 42.812 692.428 42.812C692.736 42.812 692.985 42.5318 692.985 42.1862C692.985 41.8405 692.736 41.5603 692.428 41.5603C692.12 41.5603 691.87 41.8405 691.87 42.1862Z" fill="url(#paint17_linear_23_6705)" fill-opacity="0.7"/>
<path d="M673.288 58.876C673.288 59.2216 673.538 59.5018 673.846 59.5018C674.154 59.5018 674.403 59.2216 674.403 58.876C674.403 58.5303 674.154 58.2501 673.846 58.2501C673.538 58.2501 673.288 58.5303 673.288 58.876Z" fill="url(#paint18_linear_23_6705)" fill-opacity="0.7"/>
<path d="M647.273 33.8412C647.273 34.1869 647.523 34.4671 647.831 34.4671C648.139 34.4671 648.388 34.1869 648.388 33.8412C648.388 33.4956 648.139 33.2154 647.831 33.2154C647.523 33.2154 647.273 33.4956 647.273 33.8412Z" fill="url(#paint19_linear_23_6705)" fill-opacity="0.7"/>
<path d="M634.184 69.2146C634.184 69.5603 634.433 69.8405 634.741 69.8405C635.049 69.8405 635.299 69.5603 635.299 69.2146C635.299 68.869 635.049 68.5888 634.741 68.5888C634.433 68.5888 634.184 68.869 634.184 69.2146Z" fill="url(#paint20_linear_23_6705)" fill-opacity="0.7"/>
<path d="M621.548 81.732C621.548 82.0776 621.798 82.3579 622.105 82.3579C622.413 82.3579 622.663 82.0776 622.663 81.732C622.663 81.3863 622.413 81.1061 622.105 81.1061C621.798 81.1061 621.548 81.3863 621.548 81.732Z" fill="url(#paint21_linear_23_6705)" fill-opacity="0.7"/>
<path d="M621.548 69.2146C621.548 69.5603 621.798 69.8405 622.105 69.8405C622.413 69.8405 622.663 69.5603 622.663 69.2146C622.663 68.869 622.413 68.5888 622.105 68.5888C621.798 68.5888 621.548 68.869 621.548 69.2146Z" fill="url(#paint22_linear_23_6705)" fill-opacity="0.7"/>
<path d="M621.548 69.2146C621.548 69.5603 621.798 69.8405 622.105 69.8405C622.413 69.8405 622.663 69.5603 622.663 69.2146C622.663 68.869 622.413 68.5888 622.105 68.5888C621.798 68.5888 621.548 68.869 621.548 69.2146Z" fill="url(#paint23_linear_23_6705)" fill-opacity="0.7"/>
<path d="M535.41 38.0137C535.41 38.3594 535.66 38.6396 535.967 38.6396C536.275 38.6396 536.525 38.3594 536.525 38.0137C536.525 37.668 536.275 37.3878 535.967 37.3878C535.66 37.3878 535.41 37.668 535.41 38.0137Z" fill="url(#paint24_linear_23_6705)" fill-opacity="0.7"/>
<path d="M517.15 25.1264C517.15 25.4721 517.4 25.7523 517.708 25.7523C518.016 25.7523 518.265 25.4721 518.265 25.1264C518.265 24.7808 518.016 24.5006 517.708 24.5006C517.4 24.5006 517.15 24.7808 517.15 25.1264Z" fill="url(#paint25_linear_23_6705)" fill-opacity="0.7"/>
<path d="M542.843 63.0484C542.843 63.3941 543.092 63.6743 543.4 63.6743C543.708 63.6743 543.958 63.3941 543.958 63.0484C543.958 62.7028 543.708 62.4226 543.4 62.4226C543.092 62.4226 542.843 62.7028 542.843 63.0484Z" fill="url(#paint26_linear_23_6705)" fill-opacity="0.7"/>
<path d="M610.11 50.5311C610.11 50.8767 610.359 51.1569 610.667 51.1569C610.975 51.1569 611.224 50.8767 611.224 50.5311C611.224 50.1854 610.975 49.9052 610.667 49.9052C610.359 49.9052 610.11 50.1854 610.11 50.5311Z" fill="url(#paint27_linear_23_6705)" fill-opacity="0.7"/>
<path d="M602.677 58.876C602.677 59.2216 602.926 59.5018 603.234 59.5018C603.542 59.5018 603.792 59.2216 603.792 58.876C603.792 58.5303 603.542 58.2501 603.234 58.2501C602.926 58.2501 602.677 58.5303 602.677 58.876Z" fill="url(#paint28_linear_23_6705)" fill-opacity="0.7"/>
<path d="M570.716 67.2209C570.716 67.5665 570.965 67.8467 571.273 67.8467C571.581 67.8467 571.831 67.5665 571.831 67.2209C571.831 66.8752 571.581 66.595 571.273 66.595C570.965 66.595 570.716 66.8752 570.716 67.2209Z" fill="url(#paint29_linear_23_6705)" fill-opacity="0.7"/>
<path d="M607.88 25.9136C607.88 26.2592 608.129 26.5395 608.437 26.5395C608.745 26.5395 608.995 26.2592 608.995 25.9136C608.995 25.5679 608.745 25.2877 608.437 25.2877C608.129 25.2877 607.88 25.5679 607.88 25.9136Z" fill="url(#paint30_linear_23_6705)" fill-opacity="0.7"/>
<path d="M580.378 32.5895C580.378 32.9352 580.628 33.2154 580.936 33.2154C581.244 33.2154 581.493 32.9352 581.493 32.5895C581.493 32.2439 581.244 31.9636 580.936 31.9636C580.628 31.9636 580.378 32.2439 580.378 32.5895Z" fill="url(#paint31_linear_23_6705)" fill-opacity="0.7"/>
<path d="M572.946 36.762C572.946 37.1076 573.195 37.3878 573.503 37.3878C573.811 37.3878 574.06 37.1076 574.06 36.762C574.06 36.4163 573.811 36.1361 573.503 36.1361C573.195 36.1361 572.946 36.4163 572.946 36.762Z" fill="url(#paint32_linear_23_6705)" fill-opacity="0.7"/>
<path d="M572.946 28.4171C572.946 28.7627 573.195 29.0429 573.503 29.0429C573.811 29.0429 574.06 28.7627 574.06 28.4171C574.06 28.0714 573.811 27.7912 573.503 27.7912C573.195 27.7912 572.946 28.0714 572.946 28.4171Z" fill="url(#paint33_linear_23_6705)" fill-opacity="0.7"/>
<path d="M497.503 28.4171C497.503 28.7627 497.752 29.0429 498.06 29.0429C498.368 29.0429 498.618 28.7627 498.618 28.4171C498.618 28.0714 498.368 27.7912 498.06 27.7912C497.752 27.7912 497.503 28.0714 497.503 28.4171Z" fill="url(#paint34_linear_23_6705)" fill-opacity="0.7"/>
<path d="M591.528 88.0831C591.528 88.4288 591.777 88.709 592.085 88.709C592.393 88.709 592.642 88.4288 592.642 88.0831C592.642 87.7375 592.393 87.4573 592.085 87.4573C591.777 87.4573 591.528 87.7375 591.528 88.0831Z" fill="url(#paint35_linear_23_6705)" fill-opacity="0.7"/>
<path d="M710.452 88.0831C710.452 88.4288 710.702 88.709 711.01 88.709C711.318 88.709 711.567 88.4288 711.567 88.0831C711.567 87.7375 711.318 87.4573 711.01 87.4573C710.702 87.4573 710.452 87.7375 710.452 88.0831Z" fill="url(#paint36_linear_23_6705)" fill-opacity="0.7"/>
<path d="M695.587 75.5658C695.587 75.9114 695.836 76.1916 696.144 76.1916C696.452 76.1916 696.702 75.9114 696.702 75.5658C696.702 75.2201 696.452 74.9399 696.144 74.9399C695.836 74.9399 695.587 75.2201 695.587 75.5658Z" fill="url(#paint37_linear_23_6705)" fill-opacity="0.7"/>
<path d="M717.885 25.4963C717.885 25.842 718.135 26.1222 718.443 26.1222C718.75 26.1222 719 25.842 719 25.4963C719 25.1507 718.75 24.8705 718.443 24.8705C718.135 24.8705 717.885 25.1507 717.885 25.4963Z" fill="url(#paint38_linear_23_6705)" fill-opacity="0.7"/>
<path d="M713.797 33.8412C713.797 34.1869 714.047 34.4671 714.355 34.4671C714.662 34.4671 714.912 34.1869 714.912 33.8412C714.912 33.4956 714.662 33.2154 714.355 33.2154C714.047 33.2154 713.797 33.4956 713.797 33.8412Z" fill="url(#paint39_linear_23_6705)" fill-opacity="0.7"/>
<path d="M179.209 18.916C179.209 19.2617 178.959 19.5419 178.651 19.5419C178.343 19.5419 178.094 19.2617 178.094 18.916C178.094 18.5704 178.343 18.2902 178.651 18.2902C178.959 18.2902 179.209 18.5704 179.209 18.916Z" fill="url(#paint40_linear_23_6705)" fill-opacity="0.7"/>
<path d="M536.739 15.6259C536.739 15.9715 536.989 16.2517 537.297 16.2517C537.605 16.2517 537.854 15.9715 537.854 15.6259C537.854 15.2802 537.605 15 537.297 15C536.989 15 536.739 15.2802 536.739 15.6259Z" fill="url(#paint41_linear_23_6705)" fill-opacity="0.7"/>
<path d="M139.9 73.8012C139.9 74.1468 139.651 74.4271 139.343 74.4271C139.035 74.4271 138.785 74.1468 138.785 73.8012C138.785 73.4555 139.035 73.1753 139.343 73.1753C139.651 73.1753 139.9 73.4555 139.9 73.8012Z" fill="url(#paint42_linear_23_6705)" fill-opacity="0.7"/>
<path d="M119.372 23.7747C119.372 24.1203 119.123 24.4005 118.815 24.4005C118.507 24.4005 118.257 24.1203 118.257 23.7747C118.257 23.429 118.507 23.1488 118.815 23.1488C119.123 23.1488 119.372 23.429 119.372 23.7747Z" fill="url(#paint43_linear_23_6705)" fill-opacity="0.7"/>
<path d="M98.6509 67.9444C98.6509 68.2901 98.4013 68.5703 98.0935 68.5703C97.7856 68.5703 97.536 68.2901 97.536 67.9444C97.536 67.5987 97.7856 67.3185 98.0935 67.3185C98.4013 67.3185 98.6509 67.5987 98.6509 67.9444Z" fill="url(#paint44_linear_23_6705)" fill-opacity="0.7"/>
<path d="M221.292 55.8154C221.292 56.1611 221.042 56.4413 220.735 56.4413C220.427 56.4413 220.177 56.1611 220.177 55.8154C220.177 55.4698 220.427 55.1896 220.735 55.1896C221.042 55.1896 221.292 55.4698 221.292 55.8154Z" fill="url(#paint45_linear_23_6705)" fill-opacity="0.7"/>
<path d="M304.083 33.5679C304.083 33.9135 303.834 34.1938 303.526 34.1938C303.218 34.1938 302.968 33.9135 302.968 33.5679C302.968 33.2222 303.218 32.942 303.526 32.942C303.834 32.942 304.083 33.2222 304.083 33.5679Z" fill="url(#paint46_linear_23_6705)" fill-opacity="0.7"/>
<path d="M309.74 27.2167C309.74 27.5624 309.491 27.8426 309.183 27.8426C308.875 27.8426 308.625 27.5624 308.625 27.2167C308.625 26.8711 308.875 26.5909 309.183 26.5909C309.491 26.5909 309.74 26.8711 309.74 27.2167Z" fill="url(#paint47_linear_23_6705)" fill-opacity="0.7"/>
<path d="M388.938 27.2167C388.938 27.5624 388.688 27.8426 388.38 27.8426C388.072 27.8426 387.823 27.5624 387.823 27.2167C387.823 26.8711 388.072 26.5909 388.38 26.5909C388.688 26.5909 388.938 26.8711 388.938 27.2167Z" fill="url(#paint48_linear_23_6705)" fill-opacity="0.7"/>
<path d="M428.536 20.8656C428.536 21.2112 428.287 21.4914 427.979 21.4914C427.671 21.4914 427.422 21.2112 427.422 20.8656C427.422 20.5199 427.671 20.2397 427.979 20.2397C428.287 20.2397 428.536 20.5199 428.536 20.8656Z" fill="url(#paint49_linear_23_6705)" fill-opacity="0.7"/>
<path d="M439.85 27.2167C439.85 27.5624 439.601 27.8426 439.293 27.8426C438.985 27.8426 438.736 27.5624 438.736 27.2167C438.736 26.8711 438.985 26.5909 439.293 26.5909C439.601 26.5909 439.85 26.8711 439.85 27.2167Z" fill="url(#paint50_linear_23_6705)" fill-opacity="0.7"/>
<path d="M8.46897 25.4963C8.46897 25.842 8.21939 26.1222 7.91151 26.1222C7.60364 26.1222 7.35405 25.842 7.35405 25.4963C7.35405 25.1507 7.60364 24.8705 7.91151 24.8705C8.21939 24.8705 8.46897 25.1507 8.46897 25.4963Z" fill="url(#paint51_linear_23_6705)" fill-opacity="0.7"/>
<path d="M1.11492 75.6705C1.11492 76.0161 0.865336 76.2963 0.557459 76.2963C0.249583 76.2963 0 76.0161 0 75.6705C0 75.3248 0.249583 75.0446 0.557459 75.0446C0.865336 75.0446 1.11492 75.3248 1.11492 75.6705Z" fill="url(#paint52_linear_23_6705)" fill-opacity="0.7"/>
<path d="M289.762 68.209C289.762 68.5546 289.512 68.8348 289.204 68.8348C288.897 68.8348 288.647 68.5546 288.647 68.209C288.647 67.8633 288.897 67.5831 289.204 67.5831C289.512 67.5831 289.762 67.8633 289.762 68.209Z" fill="url(#paint53_linear_23_6705)" fill-opacity="0.7"/>
<path d="M329.361 74.5601C329.361 74.9058 329.111 75.186 328.803 75.186C328.495 75.186 328.246 74.9058 328.246 74.5601C328.246 74.2145 328.495 73.9343 328.803 73.9343C329.111 73.9343 329.361 74.2145 329.361 74.5601Z" fill="url(#paint54_linear_23_6705)" fill-opacity="0.7"/>
<path d="M335.018 68.209C335.018 68.5546 334.768 68.8348 334.46 68.8348C334.152 68.8348 333.903 68.5546 333.903 68.209C333.903 67.8633 334.152 67.5831 334.46 67.5831C334.768 67.5831 335.018 67.8633 335.018 68.209Z" fill="url(#paint55_linear_23_6705)" fill-opacity="0.7"/>
<path d="M414.215 68.209C414.215 68.5546 413.966 68.8348 413.658 68.8348C413.35 68.8348 413.1 68.5546 413.1 68.209C413.1 67.8633 413.35 67.5831 413.658 67.5831C413.966 67.5831 414.215 67.8633 414.215 68.209Z" fill="url(#paint56_linear_23_6705)" fill-opacity="0.7"/>
<path d="M453.814 61.8578C453.814 62.2035 453.564 62.4837 453.256 62.4837C452.949 62.4837 452.699 62.2035 452.699 61.8578C452.699 61.5122 452.949 61.2319 453.256 61.2319C453.564 61.2319 453.814 61.5122 453.814 61.8578Z" fill="url(#paint57_linear_23_6705)" fill-opacity="0.7"/>
<path d="M465.128 68.209C465.128 68.5546 464.878 68.8348 464.57 68.8348C464.262 68.8348 464.013 68.5546 464.013 68.209C464.013 67.8633 464.262 67.5831 464.57 67.5831C464.878 67.5831 465.128 67.8633 465.128 68.209Z" fill="url(#paint58_linear_23_6705)" fill-opacity="0.7"/>
<path d="M355.235 33.5232C355.235 33.8689 354.985 34.1491 354.677 34.1491C354.369 34.1491 354.12 33.8689 354.12 33.5232C354.12 33.1776 354.369 32.8974 354.677 32.8974C354.985 32.8974 355.235 33.1776 355.235 33.5232Z" fill="url(#paint59_linear_23_6705)" fill-opacity="0.7"/>
<path d="M52.9306 59.7039C52.9306 60.0496 52.681 60.3298 52.3731 60.3298C52.0652 60.3298 51.8156 60.0496 51.8156 59.7039C51.8156 59.3582 52.0652 59.078 52.3731 59.078C52.681 59.078 52.9306 59.3582 52.9306 59.7039Z" fill="url(#paint60_linear_23_6705)" fill-opacity="0.7"/>
<path d="M62.1392 39.5652C62.1392 39.9108 61.8896 40.191 61.5817 40.191C61.2739 40.191 61.0243 39.9108 61.0243 39.5652C61.0243 39.2195 61.2739 38.9393 61.5817 38.9393C61.8896 38.9393 62.1392 39.2195 62.1392 39.5652Z" fill="url(#paint61_linear_23_6705)" fill-opacity="0.7"/>
<path d="M130.686 105.714C130.686 106.06 130.437 106.34 130.129 106.34C129.821 106.34 129.571 106.06 129.571 105.714C129.571 105.369 129.821 105.089 130.129 105.089C130.437 105.089 130.686 105.369 130.686 105.714Z" fill="url(#paint62_linear_23_6705)" fill-opacity="0.7"/>
<path d="M160.054 163.857C160.054 164.202 159.804 164.483 159.496 164.483C159.189 164.483 158.939 164.202 158.939 163.857C158.939 163.511 159.189 163.231 159.496 163.231C159.804 163.231 160.054 163.511 160.054 163.857Z" fill="url(#paint63_linear_23_6705)" fill-opacity="0.7"/>
<path d="M172.69 176.374C172.69 176.72 172.44 177 172.132 177C171.824 177 171.575 176.72 171.575 176.374C171.575 176.028 171.824 175.748 172.132 175.748C172.44 175.748 172.69 176.028 172.69 176.374Z" fill="url(#paint64_linear_23_6705)" fill-opacity="0.7"/>
<path d="M172.69 151.154C172.69 151.5 172.44 151.78 172.132 151.78C171.824 151.78 171.575 151.5 171.575 151.154C171.575 150.809 171.824 150.529 172.132 150.529C172.44 150.529 172.69 150.809 172.69 151.154Z" fill="url(#paint65_linear_23_6705)" fill-opacity="0.7"/>
<path d="M172.69 151.154C172.69 151.5 172.44 151.78 172.132 151.78C171.824 151.78 171.575 151.5 171.575 151.154C171.575 150.809 171.824 150.529 172.132 150.529C172.44 150.529 172.69 150.809 172.69 151.154Z" fill="url(#paint66_linear_23_6705)" fill-opacity="0.7"/>
<path d="M264.485 115.508C264.485 115.853 264.235 116.134 263.927 116.134C263.619 116.134 263.37 115.853 263.37 115.508C263.37 115.162 263.619 114.882 263.927 114.882C264.235 114.882 264.485 115.162 264.485 115.508Z" fill="url(#paint67_linear_23_6705)" fill-opacity="0.7"/>
<path d="M189.785 138.822C189.785 139.168 189.535 139.448 189.228 139.448C188.92 139.448 188.67 139.168 188.67 138.822C188.67 138.476 188.92 138.196 189.228 138.196C189.535 138.196 189.785 138.476 189.785 138.822Z" fill="url(#paint68_linear_23_6705)" fill-opacity="0.7"/>
<path d="M197.218 134.465C197.218 134.81 196.968 135.091 196.66 135.091C196.352 135.091 196.103 134.81 196.103 134.465C196.103 134.119 196.352 133.839 196.66 133.839C196.968 133.839 197.218 134.119 197.218 134.465Z" fill="url(#paint69_linear_23_6705)" fill-opacity="0.7"/>
<path d="M219.516 120.88C219.516 121.226 219.267 121.506 218.959 121.506C218.651 121.506 218.401 121.226 218.401 120.88C218.401 120.535 218.651 120.255 218.959 120.255C219.267 120.255 219.516 120.535 219.516 120.88Z" fill="url(#paint70_linear_23_6705)" fill-opacity="0.7"/>
<path d="M226.949 125.053C226.949 125.399 226.699 125.679 226.392 125.679C226.084 125.679 225.834 125.399 225.834 125.053C225.834 124.707 226.084 124.427 226.392 124.427C226.699 124.427 226.949 124.707 226.949 125.053Z" fill="url(#paint71_linear_23_6705)" fill-opacity="0.7"/>
<path d="M238.098 112.536C238.098 112.881 237.849 113.161 237.541 113.161C237.233 113.161 236.983 112.881 236.983 112.536C236.983 112.19 237.233 111.91 237.541 111.91C237.849 111.91 238.098 112.19 238.098 112.536Z" fill="url(#paint72_linear_23_6705)" fill-opacity="0.7"/>
<path d="M208.367 176.374C208.367 176.72 208.117 177 207.81 177C207.502 177 207.252 176.72 207.252 176.374C207.252 176.028 207.502 175.748 207.81 175.748C208.117 175.748 208.367 176.028 208.367 176.374Z" fill="url(#paint73_linear_23_6705)" fill-opacity="0.7"/>
<path d="M89.4423 176.374C89.4423 176.72 89.1927 177 88.8848 177C88.577 177 88.3274 176.72 88.3274 176.374C88.3274 176.028 88.577 175.748 88.8848 175.748C89.1927 175.748 89.4423 176.028 89.4423 176.374Z" fill="url(#paint74_linear_23_6705)" fill-opacity="0.7"/>
<path d="M115.622 163.222C115.622 163.567 115.372 163.848 115.064 163.848C114.756 163.848 114.507 163.567 114.507 163.222C114.507 162.876 114.756 162.596 115.064 162.596C115.372 162.596 115.622 162.876 115.622 163.222Z" fill="url(#paint75_linear_23_6705)" fill-opacity="0.7"/>
<path d="M2.81201 107.436C2.81201 107.782 2.56242 108.062 2.25455 108.062C1.94667 108.062 1.69709 107.782 1.69709 107.436C1.69709 107.091 1.94667 106.81 2.25455 106.81C2.56242 106.81 2.81201 107.091 2.81201 107.436Z" fill="url(#paint76_linear_23_6705)" fill-opacity="0.7"/>
<path d="M691.87 130.477C691.87 130.823 692.12 131.103 692.428 131.103C692.736 131.103 692.985 130.823 692.985 130.477C692.985 130.131 692.736 129.851 692.428 129.851C692.12 129.851 691.87 130.131 691.87 130.477Z" fill="url(#paint77_linear_23_6705)" fill-opacity="0.7"/>
<path d="M673.288 147.167C673.288 147.513 673.538 147.793 673.846 147.793C674.154 147.793 674.403 147.513 674.403 147.167C674.403 146.821 674.154 146.541 673.846 146.541C673.538 146.541 673.288 146.821 673.288 147.167Z" fill="url(#paint78_linear_23_6705)" fill-opacity="0.7"/>
<path d="M647.273 122.132C647.273 122.478 647.523 122.758 647.831 122.758C648.139 122.758 648.388 122.478 648.388 122.132C648.388 121.787 648.139 121.506 647.831 121.506C647.523 121.506 647.273 121.787 647.273 122.132Z" fill="url(#paint79_linear_23_6705)" fill-opacity="0.7"/>
<path d="M634.184 157.506C634.184 157.851 634.433 158.131 634.741 158.131C635.049 158.131 635.299 157.851 635.299 157.506C635.299 157.16 635.049 156.88 634.741 156.88C634.433 156.88 634.184 157.16 634.184 157.506Z" fill="url(#paint80_linear_23_6705)" fill-opacity="0.7"/>
<path d="M621.548 170.023C621.548 170.369 621.798 170.649 622.105 170.649C622.413 170.649 622.663 170.369 622.663 170.023C622.663 169.677 622.413 169.397 622.105 169.397C621.798 169.397 621.548 169.677 621.548 170.023Z" fill="url(#paint81_linear_23_6705)" fill-opacity="0.7"/>
<path d="M621.548 157.506C621.548 157.851 621.798 158.131 622.105 158.131C622.413 158.131 622.663 157.851 622.663 157.506C622.663 157.16 622.413 156.88 622.105 156.88C621.798 156.88 621.548 157.16 621.548 157.506Z" fill="url(#paint82_linear_23_6705)" fill-opacity="0.7"/>
<path d="M621.548 157.506C621.548 157.851 621.798 158.131 622.105 158.131C622.413 158.131 622.663 157.851 622.663 157.506C622.663 157.16 622.413 156.88 622.105 156.88C621.798 156.88 621.548 157.16 621.548 157.506Z" fill="url(#paint83_linear_23_6705)" fill-opacity="0.7"/>
<path d="M535.41 126.305C535.41 126.65 535.66 126.931 535.967 126.931C536.275 126.931 536.525 126.65 536.525 126.305C536.525 125.959 536.275 125.679 535.967 125.679C535.66 125.679 535.41 125.959 535.41 126.305Z" fill="url(#paint84_linear_23_6705)" fill-opacity="0.7"/>
<path d="M517.15 113.417C517.15 113.763 517.4 114.043 517.708 114.043C518.016 114.043 518.265 113.763 518.265 113.417C518.265 113.072 518.016 112.792 517.708 112.792C517.4 112.792 517.15 113.072 517.15 113.417Z" fill="url(#paint85_linear_23_6705)" fill-opacity="0.7"/>
<path d="M542.843 151.339C542.843 151.685 543.092 151.965 543.4 151.965C543.708 151.965 543.958 151.685 543.958 151.339C543.958 150.994 543.708 150.714 543.4 150.714C543.092 150.714 542.843 150.994 542.843 151.339Z" fill="url(#paint86_linear_23_6705)" fill-opacity="0.7"/>
<path d="M610.11 138.822C610.11 139.168 610.359 139.448 610.667 139.448C610.975 139.448 611.224 139.168 611.224 138.822C611.224 138.476 610.975 138.196 610.667 138.196C610.359 138.196 610.11 138.476 610.11 138.822Z" fill="url(#paint87_linear_23_6705)" fill-opacity="0.7"/>
<path d="M602.677 147.167C602.677 147.513 602.926 147.793 603.234 147.793C603.542 147.793 603.792 147.513 603.792 147.167C603.792 146.821 603.542 146.541 603.234 146.541C602.926 146.541 602.677 146.821 602.677 147.167Z" fill="url(#paint88_linear_23_6705)" fill-opacity="0.7"/>
<path d="M570.716 155.512C570.716 155.858 570.965 156.138 571.273 156.138C571.581 156.138 571.831 155.858 571.831 155.512C571.831 155.166 571.581 154.886 571.273 154.886C570.965 154.886 570.716 155.166 570.716 155.512Z" fill="url(#paint89_linear_23_6705)" fill-opacity="0.7"/>
<path d="M607.88 114.205C607.88 114.55 608.129 114.83 608.437 114.83C608.745 114.83 608.995 114.55 608.995 114.205C608.995 113.859 608.745 113.579 608.437 113.579C608.129 113.579 607.88 113.859 607.88 114.205Z" fill="url(#paint90_linear_23_6705)" fill-opacity="0.7"/>
<path d="M580.378 120.88C580.378 121.226 580.628 121.506 580.936 121.506C581.244 121.506 581.493 121.226 581.493 120.88C581.493 120.535 581.244 120.255 580.936 120.255C580.628 120.255 580.378 120.535 580.378 120.88Z" fill="url(#paint91_linear_23_6705)" fill-opacity="0.7"/>
<path d="M572.946 125.053C572.946 125.399 573.195 125.679 573.503 125.679C573.811 125.679 574.06 125.399 574.06 125.053C574.06 124.707 573.811 124.427 573.503 124.427C573.195 124.427 572.946 124.707 572.946 125.053Z" fill="url(#paint92_linear_23_6705)" fill-opacity="0.7"/>
<path d="M572.946 116.708C572.946 117.054 573.195 117.334 573.503 117.334C573.811 117.334 574.06 117.054 574.06 116.708C574.06 116.362 573.811 116.082 573.503 116.082C573.195 116.082 572.946 116.362 572.946 116.708Z" fill="url(#paint93_linear_23_6705)" fill-opacity="0.7"/>
<path d="M497.503 116.708C497.503 117.054 497.752 117.334 498.06 117.334C498.368 117.334 498.618 117.054 498.618 116.708C498.618 116.362 498.368 116.082 498.06 116.082C497.752 116.082 497.503 116.362 497.503 116.708Z" fill="url(#paint94_linear_23_6705)" fill-opacity="0.7"/>
<path d="M591.528 176.374C591.528 176.72 591.777 177 592.085 177C592.393 177 592.642 176.72 592.642 176.374C592.642 176.028 592.393 175.748 592.085 175.748C591.777 175.748 591.528 176.028 591.528 176.374Z" fill="url(#paint95_linear_23_6705)" fill-opacity="0.7"/>
<path d="M710.452 176.374C710.452 176.72 710.702 177 711.01 177C711.318 177 711.567 176.72 711.567 176.374C711.567 176.028 711.318 175.748 711.01 175.748C710.702 175.748 710.452 176.028 710.452 176.374Z" fill="url(#paint96_linear_23_6705)" fill-opacity="0.7"/>
<path d="M695.587 163.857C695.587 164.202 695.836 164.483 696.144 164.483C696.452 164.483 696.702 164.202 696.702 163.857C696.702 163.511 696.452 163.231 696.144 163.231C695.836 163.231 695.587 163.511 695.587 163.857Z" fill="url(#paint97_linear_23_6705)" fill-opacity="0.7"/>
<path d="M717.885 113.787C717.885 114.133 718.135 114.413 718.443 114.413C718.75 114.413 719 114.133 719 113.787C719 113.442 718.75 113.161 718.443 113.161C718.135 113.161 717.885 113.442 717.885 113.787Z" fill="url(#paint98_linear_23_6705)" fill-opacity="0.7"/>
<path d="M713.797 122.132C713.797 122.478 714.047 122.758 714.355 122.758C714.662 122.758 714.912 122.478 714.912 122.132C714.912 121.787 714.662 121.506 714.355 121.506C714.047 121.506 713.797 121.787 713.797 122.132Z" fill="url(#paint99_linear_23_6705)" fill-opacity="0.7"/>
<path d="M179.209 107.207C179.209 107.553 178.959 107.833 178.651 107.833C178.343 107.833 178.094 107.553 178.094 107.207C178.094 106.861 178.343 106.581 178.651 106.581C178.959 106.581 179.209 106.861 179.209 107.207Z" fill="url(#paint100_linear_23_6705)" fill-opacity="0.7"/>
<path d="M536.739 103.917C536.739 104.263 536.989 104.543 537.297 104.543C537.605 104.543 537.854 104.263 537.854 103.917C537.854 103.571 537.605 103.291 537.297 103.291C536.989 103.291 536.739 103.571 536.739 103.917Z" fill="url(#paint101_linear_23_6705)" fill-opacity="0.7"/>
<path d="M139.9 162.092C139.9 162.438 139.651 162.718 139.343 162.718C139.035 162.718 138.785 162.438 138.785 162.092C138.785 161.747 139.035 161.466 139.343 161.466C139.651 161.466 139.9 161.747 139.9 162.092Z" fill="url(#paint102_linear_23_6705)" fill-opacity="0.7"/>
<path d="M119.372 112.066C119.372 112.411 119.123 112.692 118.815 112.692C118.507 112.692 118.257 112.411 118.257 112.066C118.257 111.72 118.507 111.44 118.815 111.44C119.123 111.44 119.372 111.72 119.372 112.066Z" fill="url(#paint103_linear_23_6705)" fill-opacity="0.7"/>
<path d="M98.6509 156.235C98.6509 156.581 98.4013 156.861 98.0935 156.861C97.7856 156.861 97.536 156.581 97.536 156.235C97.536 155.89 97.7856 155.61 98.0935 155.61C98.4013 155.61 98.6509 155.89 98.6509 156.235Z" fill="url(#paint104_linear_23_6705)" fill-opacity="0.7"/>
<path d="M221.292 144.106C221.292 144.452 221.042 144.732 220.735 144.732C220.427 144.732 220.177 144.452 220.177 144.106C220.177 143.761 220.427 143.481 220.735 143.481C221.042 143.481 221.292 143.761 221.292 144.106Z" fill="url(#paint105_linear_23_6705)" fill-opacity="0.7"/>
<path d="M304.083 121.859C304.083 122.205 303.834 122.485 303.526 122.485C303.218 122.485 302.968 122.205 302.968 121.859C302.968 121.513 303.218 121.233 303.526 121.233C303.834 121.233 304.083 121.513 304.083 121.859Z" fill="url(#paint106_linear_23_6705)" fill-opacity="0.7"/>
<path d="M309.74 115.508C309.74 115.853 309.491 116.134 309.183 116.134C308.875 116.134 308.625 115.853 308.625 115.508C308.625 115.162 308.875 114.882 309.183 114.882C309.491 114.882 309.74 115.162 309.74 115.508Z" fill="url(#paint107_linear_23_6705)" fill-opacity="0.7"/>
<path d="M388.938 115.508C388.938 115.853 388.688 116.134 388.38 116.134C388.072 116.134 387.823 115.853 387.823 115.508C387.823 115.162 388.072 114.882 388.38 114.882C388.688 114.882 388.938 115.162 388.938 115.508Z" fill="url(#paint108_linear_23_6705)" fill-opacity="0.7"/>
<path d="M428.536 109.157C428.536 109.502 428.287 109.782 427.979 109.782C427.671 109.782 427.422 109.502 427.422 109.157C427.422 108.811 427.671 108.531 427.979 108.531C428.287 108.531 428.536 108.811 428.536 109.157Z" fill="url(#paint109_linear_23_6705)" fill-opacity="0.7"/>
<path d="M439.85 115.508C439.85 115.853 439.601 116.134 439.293 116.134C438.985 116.134 438.736 115.853 438.736 115.508C438.736 115.162 438.985 114.882 439.293 114.882C439.601 114.882 439.85 115.162 439.85 115.508Z" fill="url(#paint110_linear_23_6705)" fill-opacity="0.7"/>
<path d="M8.46897 113.787C8.46897 114.133 8.21939 114.413 7.91151 114.413C7.60364 114.413 7.35405 114.133 7.35405 113.787C7.35405 113.442 7.60364 113.161 7.91151 113.161C8.21939 113.161 8.46897 113.442 8.46897 113.787Z" fill="url(#paint111_linear_23_6705)" fill-opacity="0.7"/>
<path d="M1.11492 163.961C1.11492 164.307 0.865336 164.587 0.557459 164.587C0.249583 164.587 0 164.307 0 163.961C0 163.616 0.249583 163.336 0.557459 163.336C0.865336 163.336 1.11492 163.616 1.11492 163.961Z" fill="url(#paint112_linear_23_6705)" fill-opacity="0.7"/>
<path d="M289.762 156.5C289.762 156.846 289.512 157.126 289.204 157.126C288.897 157.126 288.647 156.846 288.647 156.5C288.647 156.154 288.897 155.874 289.204 155.874C289.512 155.874 289.762 156.154 289.762 156.5Z" fill="url(#paint113_linear_23_6705)" fill-opacity="0.7"/>
<path d="M329.361 162.851C329.361 163.197 329.111 163.477 328.803 163.477C328.495 163.477 328.246 163.197 328.246 162.851C328.246 162.505 328.495 162.225 328.803 162.225C329.111 162.225 329.361 162.505 329.361 162.851Z" fill="url(#paint114_linear_23_6705)" fill-opacity="0.7"/>
<path d="M335.018 156.5C335.018 156.846 334.768 157.126 334.46 157.126C334.152 157.126 333.903 156.846 333.903 156.5C333.903 156.154 334.152 155.874 334.46 155.874C334.768 155.874 335.018 156.154 335.018 156.5Z" fill="url(#paint115_linear_23_6705)" fill-opacity="0.7"/>
<path d="M414.215 156.5C414.215 156.846 413.966 157.126 413.658 157.126C413.35 157.126 413.1 156.846 413.1 156.5C413.1 156.154 413.35 155.874 413.658 155.874C413.966 155.874 414.215 156.154 414.215 156.5Z" fill="url(#paint116_linear_23_6705)" fill-opacity="0.7"/>
<path d="M453.814 150.149C453.814 150.494 453.564 150.775 453.256 150.775C452.949 150.775 452.699 150.494 452.699 150.149C452.699 149.803 452.949 149.523 453.256 149.523C453.564 149.523 453.814 149.803 453.814 150.149Z" fill="url(#paint117_linear_23_6705)" fill-opacity="0.7"/>
<path d="M465.128 156.5C465.128 156.846 464.878 157.126 464.57 157.126C464.262 157.126 464.013 156.846 464.013 156.5C464.013 156.154 464.262 155.874 464.57 155.874C464.878 155.874 465.128 156.154 465.128 156.5Z" fill="url(#paint118_linear_23_6705)" fill-opacity="0.7"/>
<path d="M355.235 121.814C355.235 122.16 354.985 122.44 354.677 122.44C354.369 122.44 354.12 122.16 354.12 121.814C354.12 121.469 354.369 121.188 354.677 121.188C354.985 121.188 355.235 121.469 355.235 121.814Z" fill="url(#paint119_linear_23_6705)" fill-opacity="0.7"/>
<path d="M52.9306 147.995C52.9306 148.341 52.681 148.621 52.3731 148.621C52.0652 148.621 51.8156 148.341 51.8156 147.995C51.8156 147.649 52.0652 147.369 52.3731 147.369C52.681 147.369 52.9306 147.649 52.9306 147.995Z" fill="url(#paint120_linear_23_6705)" fill-opacity="0.7"/>
<path d="M62.1392 127.856C62.1392 128.202 61.8896 128.482 61.5817 128.482C61.2739 128.482 61.0243 128.202 61.0243 127.856C61.0243 127.51 61.2739 127.23 61.5817 127.23C61.8896 127.23 62.1392 127.51 62.1392 127.856Z" fill="url(#paint121_linear_23_6705)" fill-opacity="0.7"/>
</g>
<defs>
<filter id="filter0_f_23_6705" x="-84" y="216" width="866" height="638" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feBlend mode="normal" in="SourceGraphic" in2="BackgroundImageFix" result="shape"/>
<feGaussianBlur stdDeviation="30" result="effect1_foregroundBlur_23_6705"/>
</filter>
<linearGradient id="paint0_linear_23_6705" x1="349" y1="276" x2="349" y2="794" gradientUnits="userSpaceOnUse">
<stop stop-color="#F02E65"/>
<stop offset="0.653751" stop-color="#F02E65" stop-opacity="0.2"/>
<stop offset="0.699927" stop-color="#F02E65" stop-opacity="0.2"/>
<stop offset="1" stop-color="#F02E65" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint1_linear_23_6705" x1="347" y1="303" x2="347" y2="821" gradientUnits="userSpaceOnUse">
<stop stop-color="#FF6893"/>
<stop offset="0.0582362" stop-color="#F02E65"/>
<stop offset="0.653751" stop-color="#F02E65" stop-opacity="0.2"/>
<stop offset="0.699927" stop-color="#F02E65" stop-opacity="0.2"/>
<stop offset="1" stop-color="#F02E65" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint2_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint3_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint4_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint5_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint6_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint7_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint8_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint9_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint10_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint11_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint12_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint13_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint14_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint15_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint16_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint17_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint18_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint19_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint20_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint21_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint22_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint23_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint24_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint25_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint26_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint27_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint28_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint29_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint30_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint31_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint32_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint33_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint34_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint35_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint36_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint37_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint38_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint39_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint40_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint41_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint42_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint43_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint44_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint45_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint46_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint47_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint48_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint49_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint50_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint51_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint52_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint53_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint54_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint55_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint56_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint57_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint58_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint59_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint60_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint61_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint62_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint63_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint64_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint65_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint66_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint67_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint68_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint69_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint70_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint71_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint72_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint73_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint74_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint75_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint76_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint77_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint78_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint79_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint80_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint81_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint82_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint83_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint84_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint85_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint86_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint87_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint88_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint89_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint90_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint91_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint92_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint93_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint94_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint95_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint96_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint97_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint98_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint99_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint100_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint101_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint102_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint103_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint104_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint105_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint106_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint107_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint108_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint109_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint110_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint111_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint112_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint113_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint114_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint115_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint116_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint117_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint118_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint119_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint120_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint121_linear_23_6705" x1="399.947" y1="24.8705" x2="399.947" y2="341.361" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<clipPath id="clip0_23_6705">
<rect width="722" height="821" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 61 KiB

+1 -1
View File
@@ -18,7 +18,7 @@
<nav class="breadcrumbs is-only-desktop" aria-label="breadcrumb">
<ol class="breadcrumbs-list">
{#each breadcrumbs as breadcrumb}
<li class="breadcrumbs-item">
<li class="breadcrumbs-item" data-private>
{#if breadcrumb.href}
<a href={breadcrumb.href} title={breadcrumb.title} on:click={track}>
{breadcrumb.title}
+1 -1
View File
@@ -10,7 +10,7 @@
<span class="icon-cheveron-left" aria-hidden="true" />
</a>
{/if}
<span class="text u-trim-1">
<span class="text u-trim-1" data-private>
<slot />
</span>
</Heading>
+55 -34
View File
@@ -1,47 +1,68 @@
<footer class="main-footer">
<div class="container">
<ul class="inline-links is-center">
<script>
import { Mode, MODE } from '$lib/system';
import { version } from '$routes/console/store';
const currentYear = new Date().getFullYear();
</script>
<footer class="main-footer u-cross-center">
<div class="main-footer-start">
<ul class="inline-links is-no-padding-first-and-last u-x-small">
<li class="inline-links-item">
<a
class="link"
href="https://github.com/appwrite/appwrite"
target="_blank"
rel="noopener noreferrer">
<span class="icon-github-circled" aria-hidden="true" />
<span class="text">GitHub</span>
<div class="u-flex u-cross-center u-gap-8">
{#if MODE === Mode.CLOUD}
<span class="icon-cloud" />
{/if}
{#if $version}
<a
class="text"
href="https://github.com/appwrite/appwrite/blob/master/CHANGES.md"
target="_blank"
rel="noreferrer">
Version {$version}
</a>
{/if}
</div>
</li>
<li class="inline-links-item">
<a href="https://appwrite.io/policy/terms" target="_blank" rel="noreferrer">
<span class="text">Terms</span>
</a>
</li>
<li class="inline-links-item">
<a
class="link"
href="https://appwrite.io/discord"
target="_blank"
rel="noopener noreferrer">
<span class="icon-discord" aria-hidden="true" />
<span class="text">Discord</span>
<a href="https://appwrite.io/policy/privacy" target="_blank" rel="noreferrer">
<span class="text">Privacy</span>
</a>
</li>
</ul>
</div>
<div class="main-footer-end">
<ul class="inline-links is-no-padding-first-and-last u-x-small">
<li class="inline-links-item">
<a
class="link"
href="https://github.com/appwrite/appwrite/issues/new"
target="_blank"
rel="noopener noreferrer">
<span class="text">Open an Issue</span>
</a>
<span class="text">{currentYear} Appwrite. All rights reserved.</span>
</li>
<li class="inline-links-item">
<a
class="link"
href="https://appwrite.io/docs"
target="_blank"
rel="noopener noreferrer">
<span class="text">Docs</span>
<li class="inline-links-item u-flex u-gap-8">
<a href="https://github.com/appwrite/appwrite" target="_blank" rel="noreferrer">
<span class="icon-github" aria-hidden="true" aria-label="Appwrite on Github" />
</a>
<a href="https://appwrite.io/discord" target="_blank" rel="noreferrer">
<span
class="icon-discord"
aria-hidden="true"
aria-label="Appwrite on Discord" />
</a>
</li>
<li class="inline-links-item">
<span class="text">API:0.13.2</span>
</li>
</ul>
</div>
</footer>
<style lang="scss">
.main-footer {
margin-block-start: auto;
}
[class^='icon-']:not(:hover) {
color: hsl(var(--color-neutral-50));
}
</style>
+118 -18
View File
@@ -5,22 +5,25 @@
DropList,
DropListItem,
DropListLink,
FeedbackGeneral
FeedbackGeneral,
FeedbackNPS
} from '$lib/components';
import { app, feedback } from '$lib/stores/app';
import { user } from '$lib/stores/user';
import { organizationList, organization, newOrgModal } from '$lib/stores/organization';
import AppwriteLogo from '$lib/images/appwrite-gray-light.svg';
import LightMode from '$lib/images/mode/light-mode.svg';
import DarkMode from '$lib/images/mode/dark-mode.svg';
import LightMode from '$lib/images/mode/light-mode.svg';
import SystemMode from '$lib/images/mode/system-mode.svg';
import { FeedbackNPS } from '$lib/components';
import { app, feedback } from '$lib/stores/app';
import { newOrgModal, organization, organizationList } from '$lib/stores/organization';
import { user } from '$lib/stores/user';
import { goto } from '$app/navigation';
import { page } from '$app/stores';
import { Submit, trackEvent } from '$lib/actions/analytics';
import { sdkForConsole } from '$lib/stores/sdk';
import { slide } from 'svelte/transition';
import { isCloud } from '$lib/system';
let showFeedback = false;
import { slide } from 'svelte/transition';
import { page } from '$app/stores';
import { trackEvent } from '$lib/actions/analytics';
let showDropdown = false;
let droplistElement: HTMLDivElement;
@@ -32,6 +35,12 @@
}
}
async function logout() {
await sdkForConsole.account.deleteSession('current');
trackEvent(Submit.AccountLogout);
await goto(`${base}/login`);
}
function onBlur(event: MouseEvent) {
if (
showDropdown &&
@@ -44,6 +53,17 @@
$: if (showDropdown) {
trackEvent('click_menu_dropdown');
}
const slideFade: typeof slide = (node, options) => {
const slideTrans = slide(node, options);
return {
...slideTrans,
css: (t, u) => `
${slideTrans.css(t, u)};
opacity: ${t};
`
};
};
</script>
<svelte:window on:click={onBlur} />
@@ -85,7 +105,7 @@
<span class="text">Support</span>
</a>
</nav>
<nav class="u-flex u-height-100-percents u-sep-inline-start">
<nav class="u-flex u-height-100-percent u-sep-inline-start">
{#if $user}
<div class="drop-wrapper" class:is-open={showDropdown} bind:this={droplistElement}>
<button class="user-profile-button" on:click={() => (showDropdown = !showDropdown)}>
@@ -105,10 +125,10 @@
{#if showDropdown}
<div
class="drop is-no-arrow is-block-end is-inline-end"
transition:slide={{ duration: 100 }}>
<section class="drop-section u-overflow-y-auto u-max-height-200">
<ul class="drop-list">
{#if $organizationList?.total}
transition:slideFade={{ duration: 150 }}>
{#if $organizationList?.total}
<section class="drop-section u-overflow-y-auto u-max-height-200">
<ul class="drop-list">
{#each $organizationList.teams as org}
<DropListLink
href={`${base}/console/organization-${org.$id}`}
@@ -116,9 +136,9 @@
showDropdown = false;
}}>{org.name}</DropListLink>
{/each}
{/if}
</ul>
</section>
</ul>
</section>
{/if}
<section class="drop-section">
<ul class="drop-list">
<DropListItem
@@ -134,6 +154,14 @@
on:click={() => (showDropdown = false)}>
Your Account
</DropListLink>
<DropListItem
icon="logout-right"
on:click={() => {
showDropdown = false;
logout();
}}>
Sign Out
</DropListItem>
</ul>
</section>
<section class="drop-section">
@@ -185,9 +213,81 @@
</li>
</ul>
</section>
{#if isCloud}
<section class="drop-section">
<a
class="claim"
title="Gradient Border"
href="/card"
data-sveltekit-reload>
Claim your Cloud card
</a>
</section>
{/if}
</div>
{/if}
</div>
{/if}
</nav>
</div>
<style lang="scss">
.claim {
display: block;
background-image: linear-gradient(90deg, #fd7f34, #bd155b);
padding: 0.6875rem 0.625rem;
position: relative;
z-index: 0;
border-radius: 0.5rem;
text-align: center;
width: 100%;
font-family: 'Inter';
font-style: normal;
font-weight: 500;
font-size: 12px;
line-height: 150%;
letter-spacing: 0.12em;
text-transform: uppercase;
color: #ffffff;
transition: 150ms ease;
&::before {
content: '';
position: absolute;
left: -1px;
top: -1px;
width: calc(100% + 2px);
height: calc(100% + 2px);
background: linear-gradient(
113.48deg,
#3b3b4eaa -15.8%,
rgba(255, 255, 255, 0.7) 27.72%,
#3b3b4eaa 109.47%
);
z-index: -2;
border-radius: 0.3125rem;
}
&::after {
content: '';
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
background: linear-gradient(180deg, #1b1b28 0%, #272739 62.73%, #c81b4c 136.87%);
z-index: -1;
border-radius: 0.25rem;
}
&:hover {
opacity: 0.75;
}
}
</style>
+1 -1
View File
@@ -51,7 +51,7 @@
<svelte:window on:keydown={handleKeydown} />
{#if $log.data}
<section class="cover-frame">
<section class="cover-frame" data-private>
<header class="cover-frame-header u-flex u-gap-16 u-main-space-between u-cross-center">
<h1 class="body-text-1" name="title">Function ID: {$log.func.$id}</h1>
<button on:click={() => ($log.show = false)} class="x-button" aria-label="close popup">
+8
View File
@@ -26,4 +26,12 @@
right: 24px;
z-index: 1000;
}
@media (max-width: 512px) {
section {
top: calc(var(--main-header-height) + 16px);
right: 16px;
left: 16px;
}
}
</style>
+13 -6
View File
@@ -41,7 +41,6 @@
<main
class:grid-with-side={showSideNavigation}
class:grid={!showSideNavigation}
class:is-open={isOpen}
class:u-hide={$wizard.show || $log.show}>
<header class="main-header u-padding-inline-end-0">
@@ -54,9 +53,11 @@
</button>
<slot name="header" />
</header>
<nav class="main-side">
<slot name="side" />
</nav>
{#if showSideNavigation}
<nav class="main-side">
<slot name="side" />
</nav>
{/if}
<section class="main-content">
{#if $page.data?.header}
<svelte:component this={$page.data.header} />
@@ -64,11 +65,17 @@
<slot />
</section>
<slot name="footer" />
</main>
<style>
.grid-with-side {
<style lang="scss">
main {
min-height: 100vh;
&:not(.grid-with-side) {
display: flex;
flex-direction: column;
}
}
.main-side {
+318 -54
View File
@@ -1,10 +1,17 @@
<script lang="ts">
import AppwriteLogo from '$lib/images/appwrite.svg';
import { app } from '$lib/stores/app';
import { base } from '$app/paths';
import { user } from '$lib/stores/user';
import LoginLight from '$lib/images/login/login-light-mode.svg';
import AppwriteCloudLogo from '$lib/images/appwrite-cloud.svg';
import AppwriteLogo from '$lib/images/appwrite.svg';
import Cloud1 from '$lib/images/login/cloud-1.svg';
import Cloud2 from '$lib/images/login/cloud-2.svg';
import AppwriteCloudBg from '$lib/images/login/cloud-bg.svg';
import AppwriteCloudBgMobile from '$lib/images/login/cloud-bg-mobile.svg';
import LoginDark from '$lib/images/login/login-dark-mode.svg';
import LoginLight from '$lib/images/login/login-light-mode.svg';
import { app } from '$lib/stores/app';
import { user } from '$lib/stores/user';
import { isCloud } from '$lib/system';
import { onDestroy } from 'svelte';
export let imgLight = LoginLight;
export let imgDark = LoginDark;
@@ -22,60 +29,148 @@
'kotlin',
'swift'
];
let innerWidth = 0;
$: isMobile = innerWidth < 768;
const prevTheme = $app.theme;
$: if (isMobile && isCloud) {
$app.theme = 'dark';
} else {
$app.theme = prevTheme;
}
onDestroy(() => {
$app.theme = prevTheme;
});
</script>
<main class="grid-1-1 is-full-page" id="main">
<section class="grid-1-1-col-1 u-flex u-flex-vertical">
<div
class="container u-margin-block-start-20"
style="--p-container-max-size: var(--container-size-medium);">
<a href={user ? '/console' : '/'}>
<img src={AppwriteLogo} width="196" height="47" class="u-block" alt="Appwrite" />
<svelte:window bind:innerWidth />
<main class="grid-1-1 is-full-page" class:main-cloud={isCloud} id="main">
{#if isCloud}
<section
class="cloud-section grid-1-1-col-1 u-flex u-flex-vertical u-overflow-hidden"
style:--url={`url(${AppwriteCloudBg})`}>
<a class="logo" href={user ? '/console' : '/'}>
<img
src={AppwriteCloudLogo}
width="196"
height="47"
class="u-block"
alt="Appwrite" />
</a>
</div>
<div class="u-margin-block-start-auto" />
<div class="header">
<p>Cloud is Live</p>
<img src={Cloud1} alt="" class="cloud-1" />
<img src={Cloud2} alt="" class="cloud-2" />
</div>
<div class="u-margin-block-start-auto is-no-mobile" />
<div
class="container u-margin-block-start-20 is-no-mobile u-flex u-main-center"
style="--p-container-max-size: var(--container-size-large);">
{#if $app.themeInUse === 'dark'}
<img src={imgDark} alt="" class="u-only-dark" />
{:else}
<img src={imgLight} alt="" class="u-only-light" />
{/if}
</div>
<p class="beta">Now in public <span>beta</span></p>
<div class="u-margin-block-start-auto" />
<div class="u-margin-block-start-auto is-no-mobile" />
<div
class="container u-text-color-light-gray is-no-mobile"
style="--p-container-max-size:var(--container-size-small); --p-container-padding-inline:1rem;">
<p>Integrate with your favourite technologies</p>
<ul
class="u-flex u-main-center u-flex-wrap u-gap-16 u-margin-block-start-32 u-line-height-1 u-opacity-0-5">
{#each technologies as tech}
<li>
<img
src={`${base}/icons/dark/grayscale/${tech}.svg`}
alt={tech}
aria-hidden="true"
aria-label={tech} />
</li>
{/each}
</ul>
</div>
<div class="u-margin-block-start-40" />
</section>
{:else}
<section class="grid-1-1-col-1 u-flex u-flex-vertical">
<div
class="container u-margin-block-start-20"
style="--p-container-max-size: var(--container-size-medium);">
<a href={user ? '/console' : '/'}>
<img
src={AppwriteLogo}
width="196"
height="47"
class="u-block"
alt="Appwrite" />
</a>
</div>
<div class="u-margin-block-start-auto is-no-mobile" />
<div
class="container u-text-color-light-gray is-no-mobile"
style="--p-container-max-size:var(--container-size-small); --p-container-padding-inline:1rem;">
<p>Integrate with your favourite technologies</p>
<ul
class="u-flex u-main-center u-flex-wrap u-gap-16 u-margin-block-start-32 u-line-height-1 u-opacity-0-5">
{#each technologies as tech}
<li>
<img
src={`${base}/icons/${$app.themeInUse}/grayscale/${tech}.svg`}
alt={tech}
aria-hidden="true"
aria-label={tech} />
</li>
{/each}
</ul>
</div>
<div class="u-margin-block-start-40" />
</section>
<section class="grid-1-1-col-2 u-flex u-main-center u-cross-center">
<div class="container u-flex u-flex-vertical u-cross-center u-height-100-percents">
<div class="u-margin-block-start-auto" />
<div class="u-margin-block-start-auto is-no-mobile" />
<div
class="container u-margin-block-start-20 is-no-mobile u-flex u-main-center"
style="--p-container-max-size: var(--container-size-large);">
{#if $app.themeInUse === 'dark'}
<img src={imgDark} alt="" class="u-only-dark" />
{:else}
<img src={imgLight} alt="" class="u-only-light" />
{/if}
</div>
<div class="u-margin-block-start-auto" />
<div class="u-margin-block-start-auto is-no-mobile" />
<div
class="container u-text-color-light-gray is-no-mobile"
style="--p-container-max-size:var(--container-size-small); --p-container-padding-inline:1rem;">
<p>Integrate with your favourite technologies</p>
<ul
class="u-flex u-main-center u-flex-wrap u-gap-16 u-margin-block-start-32 u-line-height-1 u-opacity-0-5">
{#each technologies as tech}
<li>
<img
src={`${base}/icons/${$app.themeInUse}/grayscale/${tech}.svg`}
alt={tech}
aria-hidden="true"
aria-label={tech} />
</li>
{/each}
</ul>
</div>
<div class="u-margin-block-start-40" />
</section>
{/if}
<section
class="grid-1-1-col-2 u-flex u-main-center u-cross-center"
class:is-cloud={isCloud}
style:--url={`url(${AppwriteCloudBg})`}
style:--url-mobile={`url(${AppwriteCloudBgMobile})`}>
<div class="container u-flex u-flex-vertical u-cross-center" class:cloud-contents={isCloud}>
{#if isCloud}
<a class="mobile-logo is-only-mobile" href={user ? '/console' : '/'}>
<img
src={AppwriteCloudLogo}
width="196"
height="47"
class="u-block"
alt="Appwrite" />
</a>
<div class="is-only-mobile theme-dark">
<div class="mobile-beta">Public <span>beta</span></div>
</div>
{/if}
<div class="u-max-width-500 u-width-full-line">
<h1 class="heading-level-3 u-margin-block-start-auto"><slot name="title" /></h1>
<div class="u-margin-block-start-40">
<h1 class="heading-level-2 u-margin-block-start-auto">
{#if isCloud}
<img src={Cloud1} alt="" class="cloud-1" />
<img src={Cloud2} alt="" class="cloud-2" />
{/if}
<slot name="title" />
</h1>
<div class="u-margin-block-start-24">
<slot />
</div>
@@ -83,12 +178,181 @@
<slot name="links" />
</ul>
</div>
<div class="u-margin-block-start-auto" />
<p class="u-max-width-500 u-width-full-line u-margin-block-start-24">
<!-- version 0.15.2.402 -->
</p>
<div class="u-margin-block-start-20" />
</div>
</section>
</main>
<style lang="scss">
@media (prefers-reduced-motion: reduce) {
main * {
animation: none !important;
}
}
@keyframes float {
0% {
transform: translatey(0px);
}
50% {
transform: translatey(-8px);
}
100% {
transform: translatey(0px);
}
}
.cloud-section {
background: var(--url);
background-repeat: no-repeat;
background-position: center;
background-size: cover;
color: hsl(var(--color-neutral-5));
.logo {
display: block;
align-self: center;
margin-block-start: 32.5vh;
margin-block-start: 32.5lvh;
}
.header {
text-align: center;
align-self: center;
position: relative;
p {
font-family: 'Poppins';
font-size: clamp(3.5rem, 7vw, 5.25rem);
font-weight: 700;
}
.cloud-1 {
position: absolute;
top: 95%;
left: 0;
translate: 15% -50%;
animation: float 6s ease-in-out infinite;
}
.cloud-2 {
position: absolute;
top: 110%;
right: 0;
translate: 20% -50%;
animation: float 7s ease-in-out infinite;
animation-delay: 3s;
}
}
}
.beta,
.mobile-beta {
text-align: center;
align-self: center;
font-family: 'Poppins';
font-size: 1.125rem;
font-weight: 700;
text-transform: uppercase;
line-height: 130%;
letter-spacing: 0.25em;
color: hsl(var(--color-neutral-0));
> span {
background: linear-gradient(
180deg,
rgba(252, 252, 255, 0.5) 0%,
rgba(252, 252, 255, 0.25) 100%
);
border-radius: 5.38636px;
text-align: center;
padding: 0.5rem 0.5rem 0.5rem 0.75rem;
}
}
.beta {
margin-block-start: 4rem;
}
.mobile-logo {
margin-block-start: 1rem;
margin-block-end: 0.5rem;
}
.mobile-beta {
font-size: 0.75rem;
margin-block-end: 6rem;
> span {
background: hsl(var(--color-neutral-120));
padding: 0.25rem 0.375rem 0.25rem 0.5rem;
}
}
.cloud-contents {
justify-content: center;
}
.heading-level-2 {
.cloud-1,
.cloud-2 {
display: none;
}
}
@media (max-width: 767px) {
.heading-level-2 {
position: relative;
.cloud-1,
.cloud-2 {
display: block;
position: absolute;
}
.cloud-1 {
left: 32px;
top: -40px;
}
.cloud-2 {
right: 0;
top: 10px;
}
}
.main-cloud {
background-color: hsl(var(--color-neutral-500));
}
.cloud-contents {
justify-content: initial;
}
.is-cloud {
background: var(--url-mobile);
background-position: 0px calc(30px - 5vw);
background-size: 100vw;
background-repeat: no-repeat;
}
.cloud-section {
display: none;
}
section:last-child {
padding-block-end: 32px;
}
}
@media (min-width: 530px) and (max-width: 767px) {
.heading-level-2 {
.cloud-1 {
display: none;
}
}
.is-cloud {
background-position: 0px calc(30px - 15vw);
}
}
</style>
+31
View File
@@ -0,0 +1,31 @@
import type { Models, Payload } from '@aw-labs/appwrite-console';
import { Service } from './service';
export class Project extends Service {
/**
* Get usage stats for a project
*
*
* @param {string} range
* @throws {AppwriteException}
* @returns {Promise}
*/
async getUsage(range?: string): Promise<Models.UsageProject> {
const path = '/project/usage';
const payload: Payload = {};
if (typeof range !== 'undefined') {
payload['range'] = range;
}
const uri = new URL(this.client.config.endpoint + path);
return await this.client.call(
'get',
uri,
{
'content-type': 'application/json'
},
payload
);
}
}
+28
View File
@@ -0,0 +1,28 @@
import type { Client, Payload } from '@aw-labs/appwrite-console';
export class Service {
static CHUNK_SIZE = 5 * 1024 * 1024; // 5MB
client: Client;
constructor(client: Client) {
this.client = client;
}
static flatten(data: Payload, prefix = ''): Payload {
let output: Payload = {};
for (const key in data) {
const value = data[key];
const finalKey = prefix ? `${prefix}[${key}]` : key;
if (Array.isArray(value)) {
output = Object.assign(output, this.flatten(value, finalKey));
} else {
output[finalKey] = value;
}
}
return output;
}
}
+8 -13
View File
@@ -1,3 +1,5 @@
import { Project } from '$lib/sdk/project';
import { VARS } from '$lib/system';
import {
Account,
Avatars,
@@ -7,16 +9,13 @@ import {
Health,
Locale,
Projects,
Project,
Proxy,
Storage,
Teams,
Users,
Vcs
Users
} from '@aw-labs/appwrite-console';
const endpoint =
import.meta.env.VITE_APPWRITE_ENDPOINT?.toString() ?? `${window?.location?.origin}/v1`;
const endpoint = VARS.APPWRITE_ENDPOINT ?? `${globalThis?.location?.origin}/v1`;
const clientConsole = new Client();
clientConsole.setEndpoint(endpoint).setProject('console');
@@ -34,8 +33,7 @@ const sdkForConsole = {
locale: new Locale(clientConsole),
projects: new Projects(clientConsole),
teams: new Teams(clientConsole),
users: new Users(clientConsole),
proxy: new Proxy(clientConsole)
users: new Users(clientConsole)
};
const sdkForProject = {
@@ -47,12 +45,9 @@ const sdkForProject = {
health: new Health(clientProject),
locale: new Locale(clientProject),
project: new Project(clientProject),
projects: new Projects(clientProject),
storage: new Storage(clientProject),
teams: new Teams(clientProject),
users: new Users(clientProject),
proxy: new Proxy(clientProject),
vcs: new Vcs(clientProject)
users: new Users(clientProject)
};
export { sdkForConsole, sdkForProject, setProject, endpoint };
export { sdkForConsole, sdkForProject, setProject };
+29
View File
@@ -0,0 +1,29 @@
import { readable, type Readable } from 'svelte/store';
function isCurrentWindowFocused(): boolean {
if (!window) return false;
if (!window.document) return false;
if (typeof window.document.hasFocus !== 'function') return false;
return window.document.hasFocus();
}
export function windowFocusStore(): Readable<boolean> {
const visibility = readable(isCurrentWindowFocused(), (set) => {
function handler() {
set(isCurrentWindowFocused());
}
if (window) {
window.addEventListener('focus', handler);
window.addEventListener('blur', handler);
return () => {
window.removeEventListener('focus', handler);
window.removeEventListener('blur', handler);
};
}
});
return visibility;
}
+26
View File
@@ -0,0 +1,26 @@
export enum Mode {
CLOUD = 'cloud',
SELF_HOSTED = 'self-hosted'
}
export const VARS = {
APPWRITE_ENDPOINT: import.meta.env?.VITE_APPWRITE_ENDPOINT?.toString() as string | undefined,
GROWTH_ENDPOINT: import.meta.env?.VITE_APPWRITE_GROWTH_ENDPOINT?.toString() as
| string
| undefined,
CONSOLE_MODE: import.meta.env?.VITE_CONSOLE_MODE?.toString() as string | undefined,
VERCEL_ENV: import.meta.env?.VITE_VERCEL_ENV?.toString() as string | undefined,
GOOGLE_ANALYTICS: import.meta.env?.VITE_GA_PROJECT?.toString() as string | undefined,
GOOGLE_TAG: import.meta.env?.VITE_GTM_PROJECT?.toString() as string | undefined
};
export const ENV = {
DEV: import.meta.env.DEV,
PROD: import.meta.env.PROD,
PREVIEW: VARS.VERCEL_ENV === 'preview',
TEST: !!import.meta.env?.VITEST
};
export const MODE = VARS.CONSOLE_MODE === Mode.CLOUD ? Mode.CLOUD : Mode.SELF_HOSTED;
export const isCloud = MODE === Mode.CLOUD;
export const isSelfHosted = MODE === Mode.SELF_HOSTED;
+12
View File
@@ -0,0 +1,12 @@
<script>
import { page } from '$app/stores';
import { Heading } from '$lib/components';
import { Button } from '$lib/elements/forms';
import { Unauthenticated } from '$lib/layout';
</script>
<Unauthenticated>
<Heading size="1" tag="h3">{$page.status}</Heading>
<Heading size="3" tag="h4">{$page.error.message}</Heading>
<Button href="/">Back to the console</Button>
</Unauthenticated>
+76 -22
View File
@@ -1,19 +1,21 @@
<script lang="ts">
import { browser } from '$app/environment';
import { afterNavigate, goto } from '$app/navigation';
import { page } from '$app/stores';
import { user } from '$lib/stores/user';
import { onCLS, onFID, onLCP, onFCP, onINP, onTTFB } from 'web-vitals';
import { reportWebVitals } from '$lib/helpers/vitals';
import { onMount } from 'svelte';
import { base } from '$app/paths';
import { browser, dev } from '$app/environment';
import { page } from '$app/stores';
import { isTrackingAllowed, trackPageView } from '$lib/actions/analytics';
import { reportWebVitals } from '$lib/helpers/vitals';
import { Notifications, Progress } from '$lib/layout';
import { app } from '$lib/stores/app';
import { Progress, Notifications } from '$lib/layout';
import { loading } from './store';
import Loading from './loading.svelte';
import { trackPageView } from '$lib/actions/analytics';
import { user } from '$lib/stores/user';
import { ENV, isCloud } from '$lib/system';
import * as Sentry from '@sentry/svelte';
import LogRocket from 'logrocket';
import { BrowserTracing } from '@sentry/tracing';
import { onMount } from 'svelte';
import { onCLS, onFCP, onFID, onINP, onLCP, onTTFB } from 'web-vitals';
import Loading from './loading.svelte';
import { loading } from './store';
if (browser) {
window.VERCEL_ANALYTICS_ID = import.meta.env.VERCEL_ANALYTICS_ID?.toString() ?? false;
@@ -23,7 +25,7 @@
/**
* Reporting Web Vitals.
*/
if (!dev && window.VERCEL_ANALYTICS_ID) {
if (ENV.PROD && window.VERCEL_ANALYTICS_ID) {
onCLS(reportWebVitals);
onFID(reportWebVitals);
onLCP(reportWebVitals);
@@ -32,26 +34,46 @@
onTTFB(reportWebVitals);
}
/**
* Sentry Error Logging
*/
if (!dev) {
if (ENV.PROD) {
/**
* Sentry Error Logging
*/
Sentry.init({
dsn: 'https://c7ce178bdedd486480317b72f282fd39@o1063647.ingest.sentry.io/4504158071422976',
integrations: [new BrowserTracing()],
tracesSampleRate: 1.0
});
/**
* LogRocket
*/
if (isCloud && isTrackingAllowed()) {
LogRocket.init('rgthvf/appwrite', {
dom: {
inputSanitizer: true
}
});
}
}
/**
* Handle initial load.
*/
if (!$page.url.pathname.startsWith('/auth')) {
const acceptedRoutes = ['/login', '/register', '/recover', '/invite'];
const acceptedRoutes = [
'/login',
'/register',
'/recover',
'/invite',
'/card',
'/hackathon'
];
if ($user) {
if (
!$page.url.pathname.startsWith('/console') &&
!$page.url.pathname.startsWith('/invite')
!$page.url.pathname.startsWith('/invite') &&
!$page.url.pathname.startsWith('/card') &&
!$page.url.pathname.startsWith('/hackathon')
) {
await goto(`${base}/console`, {
replaceState: true
@@ -59,10 +81,7 @@
}
loading.set(false);
} else {
if (
acceptedRoutes.includes($page.url.pathname) ||
$page.url.pathname.startsWith('/register/invite')
) {
if (acceptedRoutes.some((n) => $page.url.pathname.startsWith(n))) {
await goto(`${base}${$page.url.pathname}${$page.url.search}`);
} else {
await goto(`${base}/login`, {
@@ -75,7 +94,9 @@
});
afterNavigate((navigation) => {
trackPageView(navigation.to.routeId);
if (navigation.type !== 'enter' && navigation.from?.route?.id !== navigation.to.route.id) {
trackPageView(navigation.to.route.id);
}
});
$: {
@@ -130,4 +151,37 @@
border-right-color: hsl(var(--p-tooltip--bg-color));
}
}
.theme-dark .with-separators {
--separator-color: hsl(var(--color-neutral-200));
--separator-text: hsl(var(--color-neutral-100));
}
.with-separators {
--separator-color: hsl(var(--color-neutral-5));
--separator-text: hsl(var(--color-neutral-50));
}
.with-separators {
display: flex;
align-items: center;
gap: 1rem;
text-transform: uppercase;
width: 100%;
color: var(--separator-text);
&::before,
&::after {
content: '';
flex: 1;
height: 1px;
background: var(--separator-color);
}
}
[type='checkbox']:where(:checked)::before {
content: '\ea38';
}
</style>
+12 -6
View File
@@ -1,5 +1,7 @@
import '@aw-labs/ui/src/_index.scss';
import '@appwrite.io/pink';
import '@appwrite.io/pink-icons';
import 'tippy.js/dist/tippy.css';
import LogRocket from 'logrocket';
import { sdkForConsole } from '$lib/stores/sdk';
import { redirect } from '@sveltejs/kit';
import { Dependencies } from '$lib/constants';
@@ -12,6 +14,11 @@ export const load: LayoutLoad = async ({ depends, url }) => {
try {
const account = await sdkForConsole.account.get();
LogRocket.identify(account.$id, {
name: account.name,
email: account.email
});
return {
account,
organizations: sdkForConsole.teams.list()
@@ -24,13 +31,12 @@ export const load: LayoutLoad = async ({ depends, url }) => {
'/invite',
'/auth/magic-url',
'/auth/oauth2/success',
'/auth/oauth2/failure'
'/auth/oauth2/failure',
'/card',
'/hackathon'
];
if (
!acceptedRoutes.includes(url.pathname) &&
!url.pathname.startsWith('/register/invite')
) {
if (!acceptedRoutes.some((n) => url.pathname.startsWith(n))) {
throw redirect(303, '/login');
}
}
+13
View File
@@ -0,0 +1,13 @@
<script>
import { Shell } from '$lib/layout';
import AppwriteLogo from '$lib/images/appwrite-gray-light.svg';
import Footer from '$lib/layout/footer.svelte';
</script>
<Shell>
<a class="logo" slot="header" href={`/console`}>
<img src={AppwriteLogo} width="132" height="34" alt="Appwrite" />
</a>
<slot />
<Footer slot="footer" />
</Shell>
+10
View File
@@ -0,0 +1,10 @@
import { isCloud } from '$lib/system';
import { redirect } from '@sveltejs/kit';
export async function load({ parent }) {
if (!isCloud) throw redirect(303, '/');
const { account } = await parent();
if (!account) throw redirect(303, '/login');
throw redirect(303, `/card/${account.$id}`);
}
+458
View File
@@ -0,0 +1,458 @@
<script lang="ts" context="module">
// Helpers
const round = (num: number, fix = 3) => parseFloat(num.toFixed(fix));
const clamp = (num: number, min = -20, max = 20) => Math.min(Math.max(num, min), max);
function isTouchEvent(e: MouseEvent | TouchEvent): e is TouchEvent {
return e.type === 'touchmove';
}
</script>
<script lang="ts">
import { windowFocusStore } from '$lib/stores/windowFocus';
import { spring } from 'svelte/motion';
let cardEl: HTMLDivElement | undefined;
export let active = false;
export let isFlipped = false;
export let base64: { front: string; back: string };
let interacting = false;
const springR = { stiffness: 0.066, damping: 0.25 };
const springD = { stiffness: 0.03, damping: 0.45 };
const THICKNESS = 3;
let springRotate = spring({ x: 0, y: 0 }, springR);
let springGlare = spring({ x: 50, y: 50, o: 0.25 }, springR);
let springBackground = spring({ x: 50, y: 50 }, springR);
let springRotateDelta = spring({ x: 0, y: 0 }, springD);
let springTranslate = spring({ x: 0, y: 0 }, springD);
let springScale = spring(1, springD);
let angle = 0;
let centerProximity = spring(0, springR);
let springRotateZ = spring(-15, springD);
// Events
const interact = (e: MouseEvent | TouchEvent) => {
if (!active) return;
interacting = true;
const clientX = isTouchEvent(e) ? e.touches[0].clientX : e.clientX;
const clientY = isTouchEvent(e) ? e.touches[0].clientY : e.clientY;
const el = e.target as HTMLElement;
const rect = el.getBoundingClientRect(); // get element's current size/position
const absolute = {
x: clientX - rect.left, // get mouse position from left
y: clientY - rect.top // get mouse position from right
};
const percent = {
x: round((100 / rect.width) * absolute.x),
y: round((100 / rect.height) * absolute.y)
};
const center = {
x: percent.x - 50,
y: (percent.y - 50) * (isFlipped ? -1 : 1)
};
springBackground.stiffness = springR.stiffness;
springBackground.damping = springR.damping;
springBackground.set({
x: round(50 + percent.x / 4 - 12.5),
y: round(50 + percent.y / 3 - 16.67)
});
springRotate.stiffness = springR.stiffness;
springRotate.damping = springR.damping;
springRotate.set({
x: round(-(center.x / 3.5)),
y: round(center.y / 2)
});
springGlare.stiffness = springR.stiffness;
springGlare.damping = springR.damping;
springGlare.set({
x: percent.x,
y: percent.y,
o: 1
});
// get angle of mouse position relative to center of element
angle = Math.atan2(center.y, center.x) * (180 / Math.PI);
// get proximity to center of element. 0 = center, 1 = edge
$centerProximity = Math.sqrt(center.x * center.x + center.y * center.y) / 50 - 0.1;
};
const interactEnd = (_: unknown, delay = 500) => {
if (!active) return;
setTimeout(function () {
const snapStiff = 0.01;
const snapDamp = 0.06;
interacting = false;
springRotate.stiffness = snapStiff;
springRotate.damping = snapDamp;
springRotate.set({ x: 0, y: 0 });
springGlare.stiffness = snapStiff;
springGlare.damping = snapDamp;
springGlare.set({ x: 50, y: 50, o: 0 });
springBackground.stiffness = snapStiff;
springBackground.damping = snapDamp;
springBackground.set({ x: 50, y: 50 });
$centerProximity = 0;
}, delay);
};
const setCenter = () => {
if (!cardEl) return;
const rect = cardEl.getBoundingClientRect(); // get element's size/position
const view = document.documentElement; // get window/viewport size
const delta = {
x: round(view.clientWidth / 2 - rect.x - rect.width / 2),
y: round(view.clientHeight / 2 - rect.y - rect.height / 2)
};
springTranslate.set({
x: delta.x,
y: delta.y
});
};
const popover = () => {
if (!cardEl) return;
const rect = cardEl.getBoundingClientRect(); // get element's size/position
let delay = 100;
let scaleW = (window.innerWidth / rect.width) * 0.65;
let scaleH = (window.innerHeight / rect.height) * 0.65;
let scaleF = 1.5;
setCenter();
delay = 1000;
springRotateDelta.set({
x: 360,
y: 0
});
springRotateZ.set(0);
springScale.set(Math.min(scaleW, scaleH, scaleF));
interactEnd(null, delay);
};
const retreat = () => {
springScale.set(1);
springTranslate.set({ x: 0, y: 0 });
springRotateDelta.set({ x: 0, y: 0 });
springRotate.set({ x: 0, y: 0 });
springGlare.set({ x: 50, y: 50, o: 0 });
$centerProximity = 0;
springRotateZ.set(-15);
};
const handleClick = () => {
active = !active;
};
const windowKeyDown = (e: KeyboardEvent) => {
if (e.key === 'q') {
springRotateDelta.update((old) => {
return {
...old,
x: old.x + 360
};
});
}
if (!active) return;
if (e.key === 'q') {
isFlipped = !isFlipped;
} else if (e.key === 'Escape') {
active = false;
}
};
$: if (!active) {
isFlipped = false;
} else {
springRotateDelta.update((old) => ({
x: isFlipped ? 180 : 360,
y: old.y
}));
}
// Reactive
$: if (active) {
popover();
interacting = true;
} else {
retreat();
}
windowFocusStore().subscribe((focused) => {
if (focused) {
active = false;
springScale.set(1, { hard: true });
springTranslate.set({ x: 0, y: 0 }, { hard: true });
springRotateDelta.set({ x: 0, y: 0 }, { hard: true });
springRotate.set({ x: 0, y: 0 }, { hard: true });
springRotateZ.set(-15, { hard: true });
centerProximity.set(0, { hard: true });
}
});
$: styles = `
--mx: ${$springGlare.x}%;
--my: ${$springGlare.y}%;
--tx: ${$springTranslate.x}px;
--ty: ${$springTranslate.y}px;
--s: ${$springScale};
--o: ${$springGlare.o};
--rx: ${$springRotate.x + $springRotateDelta.x}deg;
--ry: ${$springRotate.y + $springRotateDelta.y}deg;
--rz: ${$springRotateZ}deg;
--pos: ${$springBackground.x}% ${$springBackground.y}%;
--posx: ${$springBackground.x}%;
--posy: ${$springBackground.y}%;
--hyp: ${clamp(
Math.sqrt(
($springGlare.y - 50) * ($springGlare.y - 50) +
($springGlare.x - 50) * ($springGlare.x - 50)
) / 50,
0,
1
)};
--angle: ${angle}deg;
--center: ${$centerProximity};
`;
</script>
<svelte:window on:keydown={windowKeyDown} />
<div class="cb-card" class:active class:interacting style={styles} bind:this={cardEl}>
<div class="card__translater">
<button
class="card__rotator"
aria-label="Expand the Card"
tabindex="0"
on:pointermove={interact}
on:mouseout={interactEnd}
on:click={handleClick}
on:blur={() => {
/* noop */
}}>
<div class="card__back">
<img
class="invisible"
src={base64.back}
alt="The back of the Card"
loading="lazy"
width="450"
height="274" />
<img
class="abs"
src={base64.back}
alt="The back of the Card"
loading="lazy"
width="450"
height="274" />
<div class="card__glare" />
</div>
{#each new Array(THICKNESS) as _, i (i)}
<div class="card__thick" style:--i={i + 1} />
{/each}
<div class="card__front" style:--thickness={THICKNESS}>
<img class="invisible" src={base64.front} alt="" />
<img class="abs" src={base64.front} alt="The front of the card" />
<div class="card__glare" />
</div>
</button>
</div>
</div>
<style lang="scss">
.invisible {
opacity: 0;
}
@media (prefers-reduced-motion: reduce) {
.cb-card,
.cb-card * {
transition: none !important;
animation: none !important;
pointer-events: none !important;
}
}
:root {
--mx: 50%;
--my: 50%;
--s: 1;
--o: 0;
--tx: 0px;
--ty: 0px;
--rx: 0deg;
--ry: 0deg;
--pos: 50% 50%;
--posx: 50%;
--posy: 50%;
--hyp: 0;
}
:global(.theme-dark) .cb-card {
--shadow-clr: transparent;
}
.cb-card {
--radius: 12px;
--shadow-clr: hsl(var(--color-neutral-30));
z-index: calc(var(--s) * 100);
transform: translate3d(0, 0, 0.1px);
-webkit-transform: translate3d(0, 0, 0.1px);
will-change: transform, visibility;
transform-style: preserve-3d;
-webkit-transform-style: preserve-3d;
&.interacting {
z-index: calc(var(--s) * 120);
}
}
.cb-card.active .card__translater,
.cb-card.active .card__rotator {
touch-action: none;
}
.card__translater,
.card__rotator {
display: grid;
perspective: 600px;
transform-origin: center;
-webkit-transform-origin: center;
will-change: transform;
}
.card__translater {
width: auto;
position: relative;
transform: translate3d(var(--tx), var(--ty), 0) scale(var(--s));
-webkit-transform: translate3d(var(--tx), var(--ty), 0) scale(var(--s));
}
.card__rotator {
-webkit-transform: rotateY(var(--rx)) rotateX(var(--ry)) rotateZ(var(--rz));
-webkit-transform-style: preserve-3d;
transform: rotateY(var(--rx)) rotateX(var(--ry)) rotateZ(var(--rz));
transform-style: preserve-3d;
box-shadow: 0px 10px 20px -5px var(--shadow-clr);
border-radius: var(--radius);
outline: none;
appearance: none;
-webkit-appearance: none;
border: none;
background: top;
padding: 0;
:global(*) {
width: 100%;
display: grid;
grid-area: 1/1;
border-radius: var(--radius);
image-rendering: optimizeQuality;
transform-style: preserve-3d;
-webkit-transform-style: preserve-3d;
}
img {
outline: 1px solid transparent;
height: auto;
}
}
.card__thick {
background-color: transparent;
position: absolute;
width: 100%;
height: 100%;
transform: translateZ(calc(var(--i) * 1px));
}
.card__back {
transform: rotateY(180deg) translateZ(0px);
-webkit-transform: rotateY(180deg) translateZ(0px);
backface-visibility: hidden;
&::before {
--resolved-angle: calc(calc(var(--angle) * -1) + 60deg);
}
}
.card__front {
opacity: 1;
transition: opacity 0.33s ease-out;
transform: translateZ(calc(var(--thickness) * 1px));
position: relative;
backface-visibility: hidden;
* {
backface-visibility: hidden;
}
&::before {
--resolved-angle: calc(var(--angle) + 65deg);
}
}
.card__front,
.card__back {
.abs {
display: block;
position: absolute;
left: 50%;
top: 50%;
translate: -50% -50%;
width: 200%;
scale: calc(100 / 200);
max-inline-size: initial;
max-block-size: initial;
}
}
.card__front::before,
.card__back::before {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: conic-gradient(
from var(--resolved-angle),
rgba(255, 255, 255, 0) 0%,
rgba(255, 255, 255, 1) 7.5%,
rgba(255, 255, 255, 0) 15%
);
scale: 1.01;
border-radius: calc(var(--radius) * 1.2);
opacity: var(--center);
}
.card__glare {
border-radius: calc(var(--radius) + 3px);
transform: translateZ(1px);
z-index: 4;
background: radial-gradient(
farthest-corner circle at var(--mx) var(--my),
rgba(255, 255, 255, 0.8) 10%,
rgba(255, 255, 255, 0.65) 20%,
rgba(0, 0, 0, 0.5) 90%
);
mix-blend-mode: overlay;
opacity: calc(var(--o) * 0.5);
}
</style>
+430
View File
@@ -0,0 +1,430 @@
<script lang="ts">
import { browser } from '$app/environment';
import { Modal } from '$lib/components';
import Code from '$lib/components/code.svelte';
import Button from '$lib/elements/forms/button.svelte';
import { copy } from '$lib/helpers/copy';
import { addNotification } from '$lib/stores/notifications';
import { Confetti } from 'svelte-confetti';
import { fade } from 'svelte/transition';
import Card from '../Card.svelte';
export let data;
const base64 = data.base64;
const variant = data.isOwner ? 'owner' : 'external';
const userId = data.userId;
const { frontImg } = data.imgUrls;
let triggerConfettiKey = 1;
const confettiColors = [
'hsl(var(--color-primary-100))',
'hsl(var(--color-primary-200))',
'hsl(var(--color-primary-300))',
'#F05088',
'#FF86BB',
'#FFFFFF80'
];
let cardActive = false;
let cardIsFlipped = false;
let showEmbedCode = false;
$: title =
variant === 'owner' ? 'Welcome to Cloud Public Beta' : 'Join Appwrite Cloud Public Beta';
$: shareableLink =
typeof window !== 'undefined' ? `${window.location.origin}/card/${userId}` : '';
$: embedCode = [
`<a href="${shareableLink}">`,
`\t<img width="350" src="${frontImg}" alt="Appwrite Cloud Card" />`,
`</a>`
].join('\n');
$: twitterText = encodeURIComponent(
[
`Guess what I just received? 💳 My personalized Cloud card from @appwrite! 🚀`,
``,
`Appwrite Cloud just announced their Public Beta!`,
``,
`🌥️ Sign up now and claim your own card at ${shareableLink}`,
``,
`#AppwriteCloud`
].join('\n')
);
function copyShareableLink() {
copy(shareableLink);
addNotification({
message: 'The link has been copied',
type: 'success'
});
}
function copyEmbedCode() {
copy(embedCode);
addNotification({
message: 'Embed code has been copied',
type: 'success'
});
showEmbedCode = false;
}
const seo = {
title: 'Appwrite Cloud Card',
description:
'Cloud is live in public beta, create your Cloud account and unlock your exclusive card!'
};
</script>
<svelte:head>
<!-- HTML Meta Tags -->
<title>{seo.title}</title>
<meta name="description" content={seo.description} />
</svelte:head>
<div class="wrapper">
<div class="card">
<h3 class="heading-level-3 no-text-select">
{title}
<button class="confetti-btn" on:click={() => triggerConfettiKey++}>
🎉
{#each Array(triggerConfettiKey) as _, i (i)}
<Confetti
delay={i === 0 ? [500, 500] : [0, 100]}
x={[0.5, 2]}
y={[0, 1.5]}
amount="30"
fallDistance="50px"
colorArray={confettiColors} />
{/each}
</button>
</h3>
<div class="content">
<div>
{#if variant === 'owner'}
<h4 class="eyebrow-heading-3 is-only-desktop">Share your card</h4>
{:else if variant === 'external'}
<h4 class="eyebrow-heading-3 is-only-desktop">Share card</h4>
{/if}
{#if variant === 'external'}
<a
href="/register"
class="button u-width-full-line u-main-center u-margin-block-start-16 external-btn-top"
data-sveltekit-reload>Claim your card</a>
{/if}
</div>
</div>
<img class="card-preview" src={base64.front} alt="The front of the card" />
<ul class="buttons-list u-margin-block-start-16">
<li class="buttons-list-item">
<a
class="button is-text"
href="https://twitter.com/intent/tweet?text={twitterText}"
target="_blank"
rel="noreferrer">
<span class="icon-twitter" aria-hidden="true" />
<span class="text">Tweet it</span>
</a>
</li>
{#if variant === 'owner'}
<li class="buttons-list-item embed-btn">
<button class="button is-text" on:click={() => (showEmbedCode = true)}>
<span class="icon-code" aria-hidden="true" />
<span class="text">Get embed code</span>
</button>
</li>
{/if}
<li class="buttons-list-item">
<button class="button is-text" on:click={copyShareableLink}>
<span class="icon-link" aria-hidden="true" />
<span class="text">Get a link</span>
</button>
</li>
</ul>
<div class="card-footer">
{#if variant === 'owner'}
<a data-sveltekit-reload href="/console" class="button">Go to console</a>
{:else}
<a data-sveltekit-reload href="/card" class="button external-btn-bottom"
>Claim your card</a>
{/if}
</div>
</div>
<div class="cbc-wrapper">
{#if !cardActive}
<div class="cbc-confetti" transition:fade|local>
<Confetti
x={[-1.75, 1.85]}
y={[-1.875, 1]}
amount={100}
size="10"
infinite
delay={[2000, 7000]}
colorArray={confettiColors}
fallDistance="50px" />
</div>
{/if}
{#if browser}
<Card bind:active={cardActive} bind:isFlipped={cardIsFlipped} {base64} />
{/if}
</div>
{#if cardActive}
<div
class="overlay"
on:click={() => (cardActive = false)}
on:keydown={() => {
/* no-op */
}}
transition:fade|local />
{/if}
<div class="controls" class:invisible={!cardActive}>
<button
class="button is-text"
on:click={() => (cardIsFlipped = !cardIsFlipped)}
aria-label="Rotate card">
<svg
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
xmlns="http://www.w3.org/2000/svg"
aria-hidden="true">
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M2 11C2 8.2 6.5 6 12 6C17.5 6 22 8.2 22 11C22 12.8414 20.0779 14.3752 17.2449 15.2644C16.615 15.4621 16 14.9707 16 14.3105C16 13.8351 16.3283 13.4267 16.7816 13.2837C18.8093 12.6442 20 11.6237 20 11C20 9.9 17 8 12 8C7 8 4 9.9 4 11C4 11.7821 6.79551 13.1137 9.91054 13.7336C10.0265 13.7566 10.1405 13.7886 10.2509 13.8305C10.308 13.8187 10.3669 13.8125 10.4273 13.8125L9.26357 12.6004C8.9121 12.2343 8.9121 11.6407 9.26357 11.2746C9.61504 10.9085 10.1849 10.9085 10.5364 11.2746L13.2364 14.0871C13.4051 14.2629 13.5 14.5013 13.5 14.75C13.5 14.9986 13.4051 15.2371 13.2364 15.4129L10.5364 18.2254C10.1849 18.5915 9.61504 18.5915 9.26357 18.2254C8.9121 17.8593 8.9121 17.2657 9.26357 16.8996L10.2838 15.8369C6.24683 15.1056 2 13.1614 2 11Z"
fill="currentColor" />
</svg>
<span class="text">Spin</span>
</button>
</div>
</div>
<Modal bind:show={showEmbedCode}>
<svelte:fragment slot="header">Get Embed Code</svelte:fragment>
<div class="u-overflow-hidden">
<Code language="html" code={embedCode} noMargin />
</div>
<svelte:fragment slot="footer">
<Button on:click={copyEmbedCode}>Copy</Button>
</svelte:fragment>
</Modal>
<style lang="scss">
:global(.theme-dark) .wrapper {
--glow: hsl(var(--color-primary-100));
--beta-bg: hsl(var(--color-neutral-120));
--beta-fg: hsl(var(--color-neutral-0));
--sep-clr: hsl(var(--color-neutral-150));
}
:global(.main-content) {
display: flex;
flex-direction: column;
align-items: stretch;
flex-grow: 1;
}
.wrapper {
--glow: transparent;
--beta-bg: rgba(240, 46, 101, 0.16);
--beta-fg: rgba(240, 46, 101, 0.8);
--sep-clr: hsl(var(--color-neutral-10));
display: grid;
place-items: center;
justify-content: center;
flex-grow: 1;
position: relative;
grid-template-columns: 620px 400px;
padding-block: 4rem;
gap: max(4rem, 10vw);
overflow: hidden;
}
.card {
max-width: 660px;
.content {
display: flex;
align-items: center;
gap: 1.5rem;
margin-block-start: 2.5rem;
}
.card-preview {
display: none;
}
.card-footer {
display: flex;
justify-content: flex-end;
border-top: 1px solid var(--sep-clr);
margin-block-start: 2rem;
padding-block-start: 2rem;
margin-inline: -2rem;
padding-inline: 2rem;
}
}
.cbc-wrapper {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
width: 100%;
height: 500px;
position: relative;
}
.cbc-confetti {
position: absolute;
top: 30%;
left: 50%;
translate: -50% -50%;
}
@keyframes shake {
0% {
translate: 0;
}
25% {
translate: 0 -4px;
}
50% {
translate: 0 0px;
}
75% {
translate: 0 0px;
}
100% {
translate: 0 0px;
}
}
.confetti-btn {
animation: shake 2000ms ease infinite;
user-select: none;
display: inline-flex;
place-items: center;
position: relative;
:global(.confetti-holder) {
position: absolute !important;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
}
.controls {
display: flex;
align-items: center;
gap: 0.5rem;
position: absolute;
bottom: 5vh;
left: 50%;
translate: -50%;
transition: opacity 250ms ease;
&.invisible {
opacity: 0;
}
}
.buttons-list-item:first-child .button {
padding-inline-start: 0;
}
.overlay {
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: hsl(var(--p-body-bg-color));
backdrop-filter: blur(80px);
opacity: 0.5;
}
.external-btn-top {
display: none;
}
.no-text-select {
user-select: none;
}
@media (max-width: 1024px) {
.external-btn-top {
display: flex;
}
.external-btn-bottom {
display: none !important;
}
.embed-btn {
order: 2;
border: none !important;
}
.wrapper {
display: block;
padding-block: 2rem;
max-width: min(100%, 500px);
margin: 0 auto;
}
.card {
background-color: transparent;
border: none;
padding-inline: 1rem;
padding-block: 0;
.content {
flex-direction: column;
align-items: stretch;
margin-block-start: 1rem;
padding-block-end: 2rem;
// border-block-end: 1px solid var(--sep-clr);
}
.card-preview {
display: block;
margin-block-start: 2rem;
}
.buttons-list {
flex-wrap: wrap;
justify-content: center;
.buttons-list-item:last-child {
border: none !important;
}
}
.card-footer {
border: none;
padding-block-start: 0;
.button {
display: grid;
place-items: center;
text-align: center;
width: 100%;
}
}
}
.cbc-wrapper {
display: none;
}
}
</style>
+53
View File
@@ -0,0 +1,53 @@
import { VARS } from '$lib/system.js';
import { redirect } from '@sveltejs/kit';
function getCardImgUrls(userId: string, endpoint: string) {
const resolved = endpoint;
const frontImg = `${resolved}/cards/cloud?userId=${userId}`;
const backImg = `${resolved}/cards/cloud-back?userId=${userId}`;
const ogImg = `${resolved}/cards/cloud-og?userId=${userId}`;
return { frontImg, backImg, ogImg };
}
async function urlContentToDataUri(url: string): Promise<string> {
const res = await fetch(url);
const blob = await res.blob();
return await new Promise((callback) => {
const reader = new FileReader();
reader.onload = function () {
if (typeof this.result !== 'string') return '';
callback(this.result);
};
reader.readAsDataURL(blob);
});
}
export async function load({ params, url, parent }) {
const { account } = await parent();
const userId = params.uid;
const endpoint = VARS.APPWRITE_ENDPOINT ?? `${url.origin}/v1`;
const { frontImg, backImg } = getCardImgUrls(userId, endpoint);
const res = await fetch(frontImg);
if (!res.ok) {
throw redirect(303, '/');
}
return {
userId: params.uid,
base64: {
front: await urlContentToDataUri(frontImg),
back: await urlContentToDataUri(backImg)
},
isOwner: account && account.$id === userId,
imgUrls: {
frontImg,
backImg
}
};
}
+26 -16
View File
@@ -1,22 +1,35 @@
<script lang="ts">
import Shell from '$lib/layout/shell.svelte';
import SideNavigation from '$lib/layout/navigation.svelte';
import Header from '$lib/layout/header.svelte';
import { newOrgModal } from '$lib/stores/organization';
import Create from './createOrganization.svelte';
import { beforeNavigate, goto } from '$app/navigation';
import { page } from '$app/stores';
import { beforeNavigate } from '$app/navigation';
import { wizard } from '$lib/stores/wizard';
import { INTERVAL } from '$lib/constants';
import { Logs } from '$lib/layout';
import Footer from '$lib/layout/footer.svelte';
import Header from '$lib/layout/header.svelte';
import SideNavigation from '$lib/layout/navigation.svelte';
import Shell from '$lib/layout/shell.svelte';
import { feedback } from '$lib/stores/app';
import { log } from '$lib/stores/logs';
import { newOrgModal } from '$lib/stores/organization';
import { wizard } from '$lib/stores/wizard';
import { onMount } from 'svelte';
import { loading } from '../store';
import { feedback } from '$lib/stores/app';
import { INTERVAL } from '$lib/constants';
import Create from './createOrganization.svelte';
import { isCloud } from '$lib/system';
export let data;
onMount(() => {
loading.set(false);
// Check if user already viewed cloud hackathon page
if (isCloud) {
const viewed = localStorage.getItem('cloud-hackathon-viewed');
if (viewed !== data.account.$id) {
localStorage.setItem('cloud-hackathon-viewed', data.account.$id);
goto('/hackathon');
}
}
setInterval(() => {
checkForFeedback(INTERVAL);
}, INTERVAL);
@@ -49,15 +62,12 @@
showSideNavigation={$page.url.pathname !== '/console' &&
!$page?.params.organization &&
!$page.url.pathname.includes('/console/account') &&
!$page.url.pathname.includes('/console/card') &&
!$page.url.pathname.includes('/console/onboarding')}>
<svelte:fragment slot="header">
<Header />
</svelte:fragment>
<svelte:fragment slot="side">
<SideNavigation />
</svelte:fragment>
<Header slot="header" />
<SideNavigation slot="side" />
<slot />
<footer class="main-footer" />
<Footer slot="footer" />
</Shell>
{#if $wizard.show && $wizard.component}
+11
View File
@@ -0,0 +1,11 @@
import { sdkForConsole } from '$lib/stores/sdk';
import type { LayoutLoad } from './$types';
export const load: LayoutLoad = async () => {
const response = await fetch(`${sdkForConsole.client.config.endpoint}/health/version`);
const data = await response.json();
return {
version: data?.version ?? null
};
};
@@ -46,7 +46,7 @@
<svelte:fragment slot="header">
{isUser ? 'Leave Organization' : 'Delete Member'}
</svelte:fragment>
<p>
<p data-private>
{isUser
? `Are you sure you want to leave '${selectedMember?.teamName}'?`
: `Are you sure you want to delete ${selectedMember?.userName} from '${selectedMember?.teamName}'?`}
@@ -38,7 +38,7 @@
<Modal bind:show={showDelete} on:submit={deleteMembership} warning>
<svelte:fragment slot="header">Delete Member</svelte:fragment>
<p>
<p data-private>
Are you sure you want to delete <b>{selectedMembership.userName}</b> from '{selectedMembership.teamName}'?
</p>
<svelte:fragment slot="footer">
@@ -29,8 +29,7 @@
<Modal bind:show={showDelete} on:submit={deleteTeam} warning>
<svelte:fragment slot="header">Delete Team</svelte:fragment>
<p>
<p data-private>
Are you sure you want to delete <b>{team.name}</b>?
</p>
<svelte:fragment slot="footer">
@@ -33,11 +33,11 @@
{/if}
</svelte:fragment>
<svelte:fragment slot="title">
<h6 class="u-bold u-trim-1">
<h6 class="u-bold u-trim-1" data-private>
{$user.name || $user.email || $user.phone || 'Anonymous'}
</h6>
</svelte:fragment>
<p class="u-trim-1">
<p class="u-trim-1" data-private>
{$user.email && $user.phone
? [$user.email, $user.phone].join(',')
: $user.email || $user.phone}
@@ -32,7 +32,7 @@
<Modal bind:show={showDeleteAll} on:submit={deleteAllSessions} warning>
<svelte:fragment slot="header">Delete All Sessions</svelte:fragment>
<p>
<p data-private>
Are you sure you want to delete <b>all of {$user.name}'s sessions?</b>
</p>
<svelte:fragment slot="footer">
@@ -42,7 +42,7 @@
<Modal bind:show={showDelete} on:submit={deleteMembership} warning>
<svelte:fragment slot="header">Delete Member</svelte:fragment>
{#if selectedMembership}
<p>
<p data-private>
Are you sure you want to delete <b>{selectedMembership.userName}</b> from '{selectedMembership.teamName}'?
</p>
{/if}
@@ -33,7 +33,7 @@
<Modal bind:show={showDelete} on:submit={deleteUser} warning>
<svelte:fragment slot="header">Delete User</svelte:fragment>
<p>Are you sure you want to delete <b>{$user.name}</b> from '{$project.name}'?</p>
<p data-private>Are you sure you want to delete <b>{$user.name}</b> from '{$project.name}'?</p>
<svelte:fragment slot="footer">
<Button text on:click={() => (showDelete = false)}>Cancel</Button>
<Button secondary submit>Delete</Button>
@@ -1,7 +1,7 @@
<script lang="ts">
import { page } from '$app/stores';
import { base } from '$app/paths';
import { Empty, AvatarInitials } from '$lib/components';
import { AvatarInitials, EmptySearch } from '$lib/components';
import {
Table,
TableHeader,
@@ -41,7 +41,7 @@
<TableRowLink
href={`${base}/console/project-${project}/auth/teams/team-${membership.teamId}`}>
<TableCellText title="Name">
<div class="u-flex u-gap-12">
<div class="u-flex u-cross-center u-gap-12">
<AvatarInitials size={32} name={membership.teamName} />
<span>{membership.teamName ? membership.teamName : 'n/a'}</span>
</div>
@@ -67,19 +67,15 @@
</TableBody>
</Table>
{:else}
<Empty single>
<p>No memberships available</p>
<Button
external
secondary
href="https://appwrite.io/docs/server/users?sdk=nodejs-default#usersListMemberships">
Documentation
</Button>
</Empty>
<EmptySearch>
<div class="u-flex u-flex-vertical u-cross-center u-gap-24">
<p class="text u-line-height-1-5">No memberships available</p>
<Button external secondary href="https://appwrite.io/docs/client/teams">
Documentation
</Button>
</div>
</EmptySearch>
{/if}
<div class="u-flex u-margin-block-start-32 u-main-space-between">
<p class="text">Total results: {data.memberships.total}</p>
</div>
</Container>
<DeleteMembership {selectedMembership} bind:showDelete />
@@ -1,5 +1,5 @@
<script lang="ts">
import { Empty } from '$lib/components';
import { EmptySearch } from '$lib/components';
import {
Table,
TableBody,
@@ -67,35 +67,35 @@
<TableCellText title="Session">{session.clientType}</TableCellText>
<TableCellText title="Location">{session.countryName}</TableCellText>
<TableCellText title="IP">{session.ip}</TableCellText>
<TableCellText title="">
<button
class="button is-only-icon is-text"
aria-label="Delete item"
<TableCell>
<Button
text
round
ariaLabel="Delete item"
on:click={() => {
selectedSessionId = session.$id;
showDelete = true;
}}>
<span class="icon-trash" aria-hidden="true" />
</button>
</TableCellText>
</Button>
</TableCell>
</TableRow>
{/each}
</TableBody>
</Table>
{:else}
<Empty single>
<p>No session available</p>
<Button
external
secondary
href="https://appwrite.io/docs/server/auth?sdk=nodejs-default#usersGetSessions">
Documentation
</Button>
</Empty>
<EmptySearch>
<div class="u-flex u-flex-vertical u-cross-center u-gap-24">
<p class="text u-line-height-1-5">No sessions available</p>
<Button
external
secondary
href="https://appwrite.io/docs/server/auth?sdk=nodejs-default#usersGetSessions">
Documentation
</Button>
</div>
</EmptySearch>
{/if}
<div class="u-flex u-margin-block-start-32 u-main-space-between">
<p class="text">Total results: {data.sessions.total}</p>
</div>
</Container>
<DeleteSessions {selectedSessionId} bind:showDelete />
@@ -37,7 +37,7 @@
<Heading tag="h6" size="7">Update Name</Heading>
<svelte:fragment slot="aside">
<ul>
<ul data-private>
<InputText
id="name"
label="Name"
@@ -71,7 +71,7 @@
</script>
<CardGrid>
<div class="grid-1-2-col-1 u-flex u-cross-center u-gap-16">
<div class="grid-1-2-col-1 u-flex u-cross-center u-gap-16" data-private>
{#if $user.email || $user.phone}
{#if $user.name}
<AvatarInitials size={48} name={$user.name} />
@@ -89,7 +89,7 @@
</div>
<svelte:fragment slot="aside">
<div class="u-flex u-main-space-between">
<div>
<div data-private>
{#if $user.email}
<p class="title">{$user.email}</p>
{/if}
@@ -19,6 +19,7 @@
import { page } from '$app/stores';
import { PAGE_LIMIT } from '$lib/constants';
import CreateAttribute from '../createAttribute.svelte';
import { tooltip } from '$lib/actions/tooltip';
export let data: PageData;
let showCreateAttribute = false;
@@ -33,6 +34,44 @@
title: attribute.key
}))
];
function formatArray(array: unknown[]) {
if (array.length === 0) return '[ ]';
let formattedFields: string[] = [];
for (const item of array) {
if (typeof item === 'string') {
formattedFields.push(`"${item}"`);
} else {
formattedFields.push(`${item}`);
}
}
return `[${formattedFields.join(', ')}]`;
}
function formatColumn(column: unknown) {
let formattedColumn: string;
if (typeof column === 'string') {
formattedColumn = column;
} else if (Array.isArray(column)) {
formattedColumn = formatArray(column);
} else if (column === null) {
formattedColumn = 'n/a';
} else {
formattedColumn = `${column}`;
}
return {
value:
formattedColumn.length > 20
? `${formattedColumn.slice(0, 20)}...`
: formattedColumn,
truncated: formattedColumn.length > 20,
whole: formattedColumn
};
}
</script>
<Container>
@@ -52,9 +91,9 @@
{#if data.documents.total}
<TableScroll isSticky>
<TableHeader>
<TableCellHead>Document ID</TableCellHead>
<TableCellHead eyebrow={false}>Document ID</TableCellHead>
{#each columns as column}
<TableCellHead>{column.title}</TableCellHead>
<TableCellHead eyebrow={false}>{column.title}</TableCellHead>
{/each}
</TableHeader>
<TableBody>
@@ -70,8 +109,15 @@
</Copy>
</TableCell>
{#each columns as column}
{@const formatted = formatColumn(document[column.key])}
<TableCell>
{document[column.key] ?? 'n/a'}
<div
use:tooltip={{
content: formatted.whole,
disabled: !formatted.truncated
}}>
{formatted.value}
</div>
</TableCell>
{/each}
</TableRowLink>
@@ -43,7 +43,7 @@
<Modal warning={true} bind:show={showDelete} on:submit={handleDelete}>
<svelte:fragment slot="header">Delete Attribute</svelte:fragment>
<p>
<p data-private>
Are you sure you want to delete <b>'{selectedAttribute?.key}' from {$collection?.name}</b>?
</p>
<svelte:fragment slot="footer">
@@ -53,6 +53,11 @@
key = null;
selectedOption = null;
$option = null;
data = {
required: false,
array: false,
default: null
};
}
</script>
@@ -41,7 +41,7 @@
<Modal warning={true} on:submit={handleDelete} bind:show={showDelete}>
<svelte:fragment slot="header">Delete Document</svelte:fragment>
<p>
<p data-private>
Are you sure you want to delete <b>the document from {$collection.name}</b>?
</p>
<svelte:fragment slot="footer">
@@ -41,7 +41,7 @@
<Modal warning={true} on:submit={handleDelete} bind:show={showDelete}>
<svelte:fragment slot="header">Delete Index</svelte:fragment>
<p>
<p data-private>
Are you sure you want to delete <b>'{selectedIndex.key}' from {$collection.name}</b>?
</p>
<svelte:fragment slot="footer">
@@ -37,7 +37,7 @@
<Modal warning={true} bind:show={showDelete} on:submit={handleDelete}>
<svelte:fragment slot="header">Delete Collection</svelte:fragment>
<p>
<p data-private>
Are you sure you want to delete <b>{$collection.name}</b>?
</p>
<svelte:fragment slot="footer">
@@ -33,7 +33,7 @@
<Modal warning={true} bind:show={showDelete} on:submit={handleDelete}>
<svelte:fragment slot="header">Delete Database</svelte:fragment>
<p class="text">
<p class="text" data-private>
Are you sure you want to delete <b>{$database.name}</b>?
</p>
<svelte:fragment slot="footer">
@@ -1,17 +1,17 @@
<script lang="ts">
import { page } from '$app/stores';
import { Card, CardGrid, Box, Heading, AvatarInitials } from '$lib/components';
import { Container } from '$lib/layout';
import { Button, InputText, Helper } from '$lib/elements/forms';
import { sdkForProject } from '$lib/stores/sdk';
import { addNotification } from '$lib/stores/notifications';
import { database } from '../store';
import { onMount } from 'svelte';
import { toLocaleDateTime } from '$lib/helpers/date';
import { invalidate } from '$app/navigation';
import { page } from '$app/stores';
import { Submit, trackError, trackEvent } from '$lib/actions/analytics';
import { Box, Card, CardGrid, Heading } from '$lib/components';
import { Dependencies } from '$lib/constants';
import { Button, Helper, InputText } from '$lib/elements/forms';
import { toLocaleDateTime } from '$lib/helpers/date';
import { Container } from '$lib/layout';
import { addNotification } from '$lib/stores/notifications';
import { sdkForProject } from '$lib/stores/sdk';
import { onMount } from 'svelte';
import Delete from '../delete.svelte';
import { trackEvent } from '$lib/actions/analytics';
import { database } from '../store';
let showDelete = false;
let showError: false | 'name' | 'email' | 'password' = false;
@@ -37,9 +37,10 @@
message: 'Name has been updated',
type: 'success'
});
trackEvent('submit_database_update_name');
trackEvent(Submit.DatabaseUpdateName);
} catch (error) {
addError('name', error.message, 'error');
trackError(error, Submit.DatabaseUpdateName);
}
}
</script>
@@ -50,7 +51,6 @@
<div class="common-section grid-1-2">
<div class="grid-1-2-col-1">
<div class="grid-1-2-col-1 u-flex u-cross-center u-gap-16">
<AvatarInitials size={48} name={$database.name} />
<Heading tag="h6" size="7">{$database.name}</Heading>
</div>
</div>
@@ -98,9 +98,6 @@
</p>
<svelte:fragment slot="aside">
<Box>
<svelte:fragment slot="image">
<AvatarInitials size={48} name={$database.name} />
</svelte:fragment>
<svelte:fragment slot="title">
<h6 class="u-bold u-trim-1">{$database.name}</h6>
<span>Last Updated: {toLocaleDateTime($database.$updatedAt)}</span>
@@ -35,7 +35,7 @@
<Modal bind:show={showDelete} on:submit={handleSubmit} warning>
<svelte:fragment slot="header">Delete Deployment</svelte:fragment>
<p>Are you sure you want to delete this deployment?</p>
<p data-private>Are you sure you want to delete this deployment?</p>
<svelte:fragment slot="footer">
<Button text on:click={() => (showDelete = false)}>Cancel</Button>
<Button secondary submit>Delete</Button>
@@ -32,7 +32,7 @@
<Modal bind:show={showDelete} on:submit={handleSubmit} warning>
<svelte:fragment slot="header">Delete Function</svelte:fragment>
<p>
<p data-private>
Are you sure you want to delete this function and all associated deployments from your
project?
</p>
@@ -1,6 +1,6 @@
<script lang="ts">
import { Container } from '$lib/layout';
import { Card, DropListLink, DropTabs, Heading } from '$lib/components';
import { Card, SecondaryTabsItem, SecondaryTabs, Heading } from '$lib/components';
import { total } from '$lib/layout/usage.svelte';
import { BarChart } from '$lib/charts';
import { page } from '$app/stores';
@@ -15,23 +15,23 @@
<Container>
<div class="u-flex u-main-space-between common-section">
<Heading tag="h2" size="5">Functions</Heading>
<DropTabs>
<DropListLink
<SecondaryTabs>
<SecondaryTabsItem
href={`/console/project-${data.project.$id}/functions/function-${data.function.$id}/usage/24h`}
disabled={($page.params.period ?? '24h') === '24h'}>
24h
</DropListLink>
<DropListLink
</SecondaryTabsItem>
<SecondaryTabsItem
href={`/console/project-${data.project.$id}/functions/function-${data.function.$id}/usage/30d`}
disabled={$page.params.period === '30d'}>
30d
</DropListLink>
<DropListLink
</SecondaryTabsItem>
<SecondaryTabsItem
href={`/console/project-${data.project.$id}/functions/function-${data.function.$id}/usage/90d`}
disabled={$page.params.period === '90d'}>
90d
</DropListLink>
</DropTabs>
</SecondaryTabsItem>
</SecondaryTabs>
</div>
{#if count}
<Card>
@@ -5,11 +5,13 @@
// TODO: metric type is wrong
export function last(set: Array<unknown>): Models.Metric | null {
if (!set) return null;
return (set as Models.Metric[]).slice(-1)[0] ?? null;
}
// TODO: metric type is wrong
export function total(set: Array<unknown>): number {
if (!set) return 0;
return (set as Models.Metric[]).reduce((prev, curr) => prev + curr.value, 0);
}
@@ -26,7 +28,7 @@
import { usage } from './store';
import { onMount } from 'svelte';
import { afterNavigate } from '$app/navigation';
import { Heading } from '$lib/components';
import { Heading, Tab } from '$lib/components';
import { humanFileSize } from '$lib/helpers/sizeConvertion';
import { base } from '$app/paths';
import Realtime from './realtime.svelte';
@@ -42,7 +44,7 @@
afterNavigate(handle);
async function handle() {
const promise = usage.load(period);
const promise = usage.load(projectId, period);
if ($usage) {
await promise;
@@ -51,7 +53,7 @@
function changePeriod(newPeriod: UsagePeriods) {
period = newPeriod;
usage.load(period);
usage.load(projectId, period);
}
</script>
@@ -65,7 +67,7 @@
<Onboard {projectId} />
{:else}
{#if $usage}
{@const storage = humanFileSize(total($usage.storage))}
{@const storage = humanFileSize(total($usage.storage) ?? 0)}
<section class="common-section">
<div class="grid-dashboard-1s-2m-6l">
<div class="card is-2-columns-medium-screen is-3-columns-large-screen">
@@ -89,14 +91,14 @@
<div class="grid-item-1-end-start">
<div class="heading-level-4">
{format(total($usage.documents))}
{format(total($usage.documents) ?? 0)}
</div>
<div>Documents</div>
</div>
<div class="grid-item-1-end-end">
<div class="text">
Databases: {format(total($usage.databases))}
Databases: {format(total($usage.databases) ?? 0)}
</div>
</div>
</div>
@@ -124,7 +126,7 @@
<div class="grid-item-1-end-end">
<div class="text">
Buckets: {format(total($usage.buckets))}
Buckets: {format(total($usage.buckets) ?? 0)}
</div>
</div>
</div>
@@ -144,7 +146,7 @@
<div class="grid-item-1-end-start">
<div class="heading-level-4">
{format(total($usage.users))}
{format(total($usage.users) ?? 0)}
</div>
<div>Users</div>
</div>
@@ -165,7 +167,7 @@
<div class="grid-item-1-end-start">
<div class="heading-level-4">
{format(total($usage.executions))}
{format(total($usage.executions) ?? 0)}
</div>
<div>Executions</div>
</div>
@@ -197,22 +199,14 @@
<span class="icon-cheveron-right" aria-hidden="true" />
</button>
<ul class="tabs-list" data-sveltekit-noscroll>
<li class="tabs-item">
<a
class="tabs-button"
href={`${path}/platforms`}
class:is-selected={$page.url.pathname === `${path}/platforms`}>
<span class="text">Platforms</span>
</a>
</li>
<li class="tabs-item">
<a
class="tabs-button"
href={`${path}/keys`}
class:is-selected={$page.url.pathname === `${path}/keys`}>
<span class="text">API Keys</span>
</a>
</li>
<Tab
href={`${path}/platforms`}
selected={$page.url.pathname === `${path}/platforms`}
event="platforms">Platforms</Tab>
<Tab
href={`${path}/keys`}
selected={$page.url.pathname === `${path}/keys`}
event="keys">API Keys</Tab>
</ul>
</div>
@@ -0,0 +1,85 @@
<script lang="ts">
import { Helper, InputDateTime, InputSelect } from '$lib/elements/forms';
import { isSameDay, isValidDate, toLocaleDate } from '$lib/helpers/date';
function incrementToday(value: number, type: 'day' | 'month' | 'year'): string {
const date = new Date();
switch (type) {
case 'day':
date.setDate(date.getDate() + value);
break;
case 'month':
date.setMonth(date.getMonth() + value);
break;
case 'year':
date.setMonth(date.getMonth() + value * 12);
break;
}
return date.toISOString();
}
const options = [
{
label: 'Never',
value: null
},
{
label: '7 Days',
value: incrementToday(7, 'day')
},
{
label: '30 days',
value: incrementToday(30, 'day')
},
{
label: '90 days',
value: incrementToday(90, 'day')
},
{
label: '1 Year',
value: incrementToday(1, 'year')
},
{
label: 'Custom Date',
value: 'custom'
}
];
export let value: string | null = null;
function initExpirationSelect() {
if (value === null || !isValidDate(value)) return null;
let result = 'custom';
for (const option of options) {
if (!isValidDate(option.value)) continue;
if (isSameDay(new Date(option.value), new Date(value))) {
result = option.value;
break;
}
}
return result;
}
let expirationSelect = initExpirationSelect();
let expirationCustom: string | null = value ?? null;
$: {
if (!isSameDay(new Date(expirationSelect), new Date(value))) {
value = expirationSelect === 'custom' ? expirationCustom : expirationSelect;
}
}
</script>
<InputSelect bind:value={expirationSelect} {options} id="preset" label="Expiration Date">
<svelte:fragment slot="helper">
{#if expirationSelect !== 'custom' && expirationSelect !== null}
<Helper type="neutral">Your key will expire in {toLocaleDate(value)}</Helper>
{/if}
</svelte:fragment>
</InputSelect>
{#if expirationSelect === 'custom'}
<InputDateTime required id="expire" label="" bind:value={expirationCustom} showLabel={false} />
{/if}
@@ -83,7 +83,8 @@
{#if data.platforms.platforms.length}
<div
class="grid-box u-margin-block-start-32"
style="--grid-gap:1.5rem; --grid-item-size:20rem;">
style="--grid-gap:1.5rem; --grid-item-size:20rem;"
data-private>
{#each data.platforms.platforms as platform}
<a class="card" href={`${path}/${platform.$id}`}>
<div class="grid-item-1" style="min-block-size: calc(182 / 16 * 1rem)">
@@ -132,7 +132,7 @@
button
on:click={() => (platform = Platform.Macos)}
selected={platform === Platform.Macos}>
Mac OS
macOS
</Pill>
<Pill
button
@@ -54,7 +54,7 @@
series={[
{
name: 'Requests',
data: [...requests.map((e) => [e.date, e.value])]
data: [...(requests?.map((e) => [e.date, e.value]) ?? [])]
}
]} />
</div>
@@ -1,17 +1,23 @@
import { sdkForProject } from '$lib/stores/sdk';
import { sdkForConsole, sdkForProject } from '$lib/stores/sdk';
import { cachedStore } from '$lib/helpers/cache';
import type { Models } from '@aw-labs/appwrite-console';
import { writable, type Writable } from 'svelte/store';
import { isCloud } from '$lib/system';
export const usage = cachedStore<
Models.UsageProject,
{
load: (range: string) => Promise<void>;
load: (projectId: string, range: string) => Promise<void>;
}
>('projectUsage', function ({ set }) {
return {
load: async (range) => {
const usages = await sdkForProject.project.getUsage(range);
load: async (projectId, range) => {
const usages = isCloud
? await sdkForProject.project.getUsage(range)
: await sdkForConsole.projects.getUsage(projectId, range);
set(usages);
}
};
});
export const selectedTab: Writable<'platforms' | 'keys'> = writable('platforms');
@@ -34,7 +34,9 @@
<Modal bind:show={showDelete} on:submit={handleDelete} warning>
<svelte:fragment slot="header">Delete Webhook</svelte:fragment>
<p>Are you sure you want to delete <b>{$webhook.name}</b> from '{$project.name}'?</p>
<p data-private>
Are you sure you want to delete <b>{$webhook.name}</b> from '{$project.name}'?
</p>
<svelte:fragment slot="footer">
<Button text on:click={() => (showDelete = false)}>Cancel</Button>
<Button secondary submit>Delete</Button>
@@ -96,7 +96,7 @@
{#if file.chunksTotal / file.chunksUploaded !== 1}
<TableRow>
<TableCell title="Name">
<div class="u-flex u-gap-12 u-main-space-between">
<div class="u-flex u-gap-12 u-main-space-between u-cross-center">
<span class="avatar is-size-small is-color-empty" />
<span class="text u-trim">{file.name}</span>
@@ -135,7 +135,7 @@
<TableRowLink
href={`${base}/console/project-${projectId}/storage/bucket-${bucketId}/file-${file.$id}`}>
<TableCell title="Name">
<div class="u-flex u-gap-12">
<div class="u-flex u-gap-12 u-cross-center">
<Avatar size={32} src={getPreview(file.$id)} name={file.name} />
<span class="text u-trim">{file.name}</span>
</div>
@@ -32,7 +32,7 @@
<Modal bind:show={showDelete} on:submit={deleteUser} warning>
<svelte:fragment slot="header">Delete Bucket</svelte:fragment>
<p>Are you sure you want to delete <b>{$bucket.name}</b>?</p>
<p data-private>Are you sure you want to delete <b>{$bucket.name}</b>?</p>
<svelte:fragment slot="footer">
<Button text on:click={() => (showDelete = false)}>Cancel</Button>
<Button secondary submit>Delete</Button>
@@ -33,7 +33,7 @@
<Modal bind:show={showDelete} on:submit={deleteFile} warning>
<svelte:fragment slot="header">Delete File</svelte:fragment>
<p>Are you sure you want to delete <b>{file.name}</b>?</p>
<p data-private>Are you sure you want to delete <b>{file.name}</b>?</p>
<svelte:fragment slot="footer">
<Button text on:click={() => (showDelete = false)}>Cancel</Button>
<Button secondary submit>Delete</Button>
@@ -67,7 +67,7 @@
<Container>
{#if $file}
<CardGrid>
<div class="u-flex u-gap-16">
<div class="u-flex u-gap-16" data-private>
<a
href={downloadFile()}
class="file-preview is-with-image"
@@ -159,7 +159,7 @@
<svelte:fragment slot="aside">
<Box>
<svelte:fragment slot="title">
<h6 class="u-bold u-trim-1">{$file.name}</h6>
<h6 class="u-bold u-trim-1" data-private>{$file.name}</h6>
</svelte:fragment>
<p>
Last Updated: {toLocaleDateTime($file.$updatedAt)}
@@ -34,7 +34,7 @@
<Modal bind:show={showDelete} on:submit={deleteFile} warning>
<svelte:fragment slot="header">Delete File</svelte:fragment>
<p>Are you sure you want to delete <b>{$file.name}</b>?</p>
<p data-private>Are you sure you want to delete <b>{$file.name}</b>?</p>
<svelte:fragment slot="footer">
<Button text on:click={() => (showDelete = false)}>Cancel</Button>
<Button secondary submit>Delete</Button>
+4
View File
@@ -0,0 +1,4 @@
import { page } from '$app/stores';
import { derived } from 'svelte/store';
export const version = derived(page, ($page) => $page.data.version as string | null);
+13
View File
@@ -0,0 +1,13 @@
<script>
import { Shell } from '$lib/layout';
import AppwriteLogo from '$lib/images/appwrite-gray-light.svg';
import Footer from '$lib/layout/footer.svelte';
</script>
<Shell>
<a class="logo" slot="header" href={`/console`}>
<img src={AppwriteLogo} width="132" height="34" alt="Appwrite" />
</a>
<slot />
<Footer slot="footer" />
</Shell>
+260
View File
@@ -0,0 +1,260 @@
<script lang="ts">
import Button from '$lib/elements/forms/button.svelte';
import CloudDark from './cloud-dark.svg';
import CloudLight from './cloud-light.svg';
import HashnodeDark from './hashnode-dark.svg';
import HashnodeLight from './hashnode-light.svg';
import Badge from './hackathon-badge.svg';
import { tooltip } from '$lib/actions/tooltip';
import { base } from '$app/paths';
</script>
<svelte:head>
<!-- HTML Meta Tags -->
<title>Appwrite Cloud - Join Our Hackathon</title>
</svelte:head>
<div class="wrapper">
<section class="ht-cta">
<h1 class="heading-level-1 ht-title text">
Join Our
<br />
<span class="ht-title-primary">Cloud Hackathon</span>
</h1>
<ol class="numeric-list ">
<li class="numeric-list-item">
<span class="text"> Build an open-source app using Appwrite Cloud</span>
</li>
<li class="numeric-list-item">
<span class="text"> Publish an article on your Hashnode blog </span>
</li>
<li class="numeric-list-item">
<span class="text">
Submit your project on <a
class="link"
href="https://builtwith.appwrite.io"
target="_blank"
rel="noopener noreferrer">Built with Appwrite</a>
</span>
</li>
</ol>
<div class="u-margin-block-start-32 u-flex u-gap-16">
<Button external href={`${base}/console`}>Go to console</Button>
<Button
secondary
external
href="https://hashnode.com/hackathons/appwrite?utm_campaign=Cloud%20public%20Beta&utm_content=248635813&utm_medium=social&utm_source=twitter&hss_channel=tw-806598100764807170#participate">
More details
</Button>
</div>
<div class="ht-logos">
<div class="u-only-light buttons-list" />
<ul class="inline-links">
<li class="inline-links-item" style="padding-inline-start: 0;">
<div class="u-only-light">
<img src={CloudLight} alt="Appwrite Cloud" height="15" width="170" />
</div>
<div class="u-only-dark">
<img src={CloudDark} alt="Appwrite Cloud" height="15" width="170" />
</div>
</li>
<li class="inline-links-item">
<div class="u-only-light">
<img src={HashnodeLight} alt="Hashnode" height="17" width="99" />
</div>
<div class="u-only-dark">
<img src={HashnodeDark} alt="Hashnode" height="17" width="99" />
</div>
</li>
</ul>
</div>
</section>
<section class="ht-img">
<div class="card ht-card ht-card-main u-flex u-cross-center u-main-center">
<img
height="200"
width="200"
src={Badge}
alt="hackathon-badge"
use:tooltip={{
content: 'Join the hackathon to unlock this badge'
}} />
</div>
<div class="card ht-card u-flex u-flex-vertical">
<div class="ht-tag ht-tag-primary u-cross-child-center">
<span class=" u-uppercase eyebrow-heading-3">Grand winner</span>
</div>
<h4 class="u-flex u-cross-center u-gap-4 u-margin-block-start-20">
<span class="heading-level-4">5,000</span><span class="heading-level-7">USD</span>
</h4>
<div class="u-flex u-flex-vertical u-gap-8 u-margin-block-start-16">
<p class="ht-text">+ Appwrite swag</p>
<p class="ht-text">+ Hashnode T-shirt & mug</p>
</div>
</div>
<div class="card ht-card u-flex u-flex-vertical">
<div class="ht-tag u-cross-child-center">
<span class=" u-uppercase eyebrow-heading-3 u-bold">5 Runner-ups Each</span>
</div>
<h4 class="u-flex u-cross-center u-gap-4 u-margin-block-start-20">
<span class="heading-level-4">1,000</span><span class="heading-level-7">USD</span>
</h4>
<div class="u-flex u-flex-vertical u-gap-8 u-margin-block-start-16">
<p class="ht-text">+ Appwrite swag</p>
<p class="ht-text">+ Hashnode T-shirt</p>
</div>
</div>
</section>
</div>
<style lang="scss">
:global(.main-content) {
display: flex;
flex-direction: column;
align-items: stretch;
flex-grow: 1;
}
.wrapper {
display: grid;
place-items: center;
justify-content: center;
align-items: center;
flex-grow: 1;
position: relative;
grid-template-columns: 1fr 1fr;
padding-block: 4rem;
gap: max(4rem, 10vw);
overflow: hidden;
}
.ht-cta {
padding-inline-start: 4rem;
}
.ht-img {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 0.5rem;
padding-inline: 1rem;
}
.ht-card {
&-main {
grid-column: 1/ -1;
aspect-ratio: 1;
width: 33rem;
height: 16.5rem;
}
}
.ht-title {
font-size: 3.5rem;
font-weight: 700;
line-height: 1.2;
margin-block-end: 2.5rem;
&-primary {
color: hsl(var(--color-primary-100));
}
}
.ht-tag {
padding: 0.125rem 0.5rem;
border-radius: 0.25rem;
background-color: hsl(var(--color-neutral-70));
text-align: center;
&-primary {
background-color: hsl(var(--color-primary-100));
}
span {
color: hsl(var(--color-neutral-0));
}
}
.ht-logos {
margin-block-start: 5rem;
}
@media (max-width: 1068px) {
.wrapper {
display: block;
padding-block: 1rem;
max-width: min(100%, 500px);
margin: 0 auto;
}
.ht-title {
font-size: 2.5rem;
margin-block-end: 2rem;
}
.ht-cta {
padding-inline: 1rem;
}
.ht-img {
grid-template-columns: 1fr;
padding: 0 1rem;
h4,
div {
justify-content: center;
align-items: center;
}
}
.ht-card {
width: 100%;
}
.ht-logos {
margin-block: 2.5rem;
}
}
.numeric-list {
--p-numeric-border-color: var(--color-neutral-30);
--p-numeric-bg-color: var(--color-neutral-10);
--p-numeric-text-color: var(--color-neutral-100);
counter-reset: number;
display: grid;
row-gap: 1.5rem;
&-item {
counter-increment: number;
display: flex;
align-items: baseline;
column-gap: 1.5rem;
&::before {
content: counter(number);
flex-shrink: 0;
display: grid;
place-content: center;
inline-size: 2rem;
block-size: 2rem;
background-color: hsl(var(--p-numeric-bg-color));
color: hsl(var(--p-numeric-text-color));
border: 1px solid hsl(var(--p-numeric-border-color));
border-radius: var(--border-radius-circular);
}
}
}
:global(.theme-dark) {
.ht-text {
color: hsl(var(--color-neutral-0));
}
.ht-tag {
background-color: hsl(var(--color-neutral-150));
&-primary {
background-color: hsl(var(--color-primary-100));
}
}
.card {
background-color: hsl(var(--color-neutral-300));
}
.numeric-list {
--p-numeric-border-color: var(--color-neutral-150);
--p-numeric-bg-color: var(--color-neutral-200);
--p-numeric-text-color: var(--color-neutral-50);
&-item {
color: hsl(var(--color-neutral-30));
}
}
}
</style>
+8
View File
@@ -0,0 +1,8 @@
import { isCloud } from '$lib/system';
import { redirect } from '@sveltejs/kit';
export async function load({ parent }) {
if (!isCloud) throw redirect(303, '/');
const { account } = await parent();
if (!account) throw redirect(303, '/login');
}
+22
View File
@@ -0,0 +1,22 @@
<svg width="168" height="15" viewBox="0 0 168 15" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M6.09214 12.3824H2.03071L1.28256 14.4532H0L3.36671 5.19476H4.76951L8.12286 14.4532H6.8403L6.09214 12.3824ZM5.74478 11.3938L4.06143 6.69107L2.37807 11.3938H5.74478Z" fill="white"/>
<path d="M18.4879 7.86675C18.4879 8.64163 18.2207 9.28736 17.6863 9.80394C17.1608 10.3116 16.3547 10.5655 15.2681 10.5655H13.4779V14.4532H12.2621V5.14132H15.2681C16.3191 5.14132 17.1163 5.39516 17.6596 5.90283C18.2118 6.41051 18.4879 7.06515 18.4879 7.86675ZM15.2681 9.56346C15.945 9.56346 16.4438 9.4165 16.7645 9.12259C17.0851 8.82867 17.2454 8.41005 17.2454 7.86675C17.2454 6.71779 16.5863 6.14331 15.2681 6.14331H13.4779V9.56346H15.2681Z" fill="white"/>
<path d="M28.8967 7.86675C28.8967 8.64163 28.6295 9.28736 28.0951 9.80394C27.5696 10.3116 26.7635 10.5655 25.6769 10.5655H23.8867V14.4532H22.6709V5.14132H25.6769C26.7279 5.14132 27.525 5.39516 28.0683 5.90283C28.6206 6.41051 28.8967 7.06515 28.8967 7.86675ZM25.6769 9.56346C26.3538 9.56346 26.8526 9.4165 27.1732 9.12259C27.4939 8.82867 27.6542 8.41005 27.6542 7.86675C27.6542 6.71779 26.9951 6.14331 25.6769 6.14331H23.8867V9.56346H25.6769Z" fill="white"/>
<path d="M44.783 5.14132L42.0843 14.4532H40.7216L38.5573 6.95827L36.3128 14.4532L34.9634 14.4666L32.3582 5.14132H33.6542L35.6849 13.0371L37.9293 5.14132H39.2921L41.4297 13.0103L43.4737 5.14132H44.783Z" fill="white"/>
<path d="M53.6886 14.4532L51.4708 10.6456H50.0012V14.4532H48.7855V5.14132H51.7915C52.4951 5.14132 53.0874 5.26156 53.5683 5.50204C54.0582 5.74252 54.4234 6.06761 54.6638 6.47731C54.9043 6.88702 55.0246 7.35462 55.0246 7.88011C55.0246 8.52139 54.8375 9.08696 54.4634 9.57682C54.0983 10.0667 53.5461 10.3918 52.8068 10.5521L55.1448 14.4532H53.6886ZM50.0012 9.67034H51.7915C52.4505 9.67034 52.9449 9.51003 53.2744 9.18939C53.604 8.85984 53.7687 8.42341 53.7687 7.88011C53.7687 7.3279 53.604 6.90038 53.2744 6.59755C52.9538 6.29473 52.4594 6.14331 51.7915 6.14331H50.0012V9.67034Z" fill="white"/>
<path d="M60.8014 5.14132V14.4532H59.5856V5.14132H60.8014Z" fill="white"/>
<path d="M71.2768 5.14132V6.12995H68.7385V14.4532H67.5227V6.12995H64.9709V5.14132H71.2768Z" fill="white"/>
<path d="M76.6611 6.12995V9.24283H80.0546V10.2448H76.6611V13.4512H80.4553V14.4532H75.4454V5.12796H80.4553V6.12995H76.6611Z" fill="white"/>
<path d="M84.3791 9.7505C84.3791 8.82421 84.5795 8.00035 84.9803 7.27891C85.3811 6.54857 85.9378 5.983 86.6503 5.5822C87.3717 5.17249 88.1867 4.96764 89.0952 4.96764C90.2085 4.96764 91.1615 5.26156 91.9542 5.8494C92.7469 6.43723 93.2768 7.23883 93.544 8.25419H91.0324C90.8453 7.8623 90.5781 7.56392 90.2308 7.35907C89.8923 7.15422 89.5049 7.05179 89.0684 7.05179C88.3648 7.05179 87.7948 7.29672 87.3584 7.78659C86.922 8.27645 86.7037 8.93109 86.7037 9.7505C86.7037 10.5699 86.922 11.2246 87.3584 11.7144C87.7948 12.2043 88.3648 12.4492 89.0684 12.4492C89.5049 12.4492 89.8923 12.3468 90.2308 12.1419C90.5781 11.9371 90.8453 11.6387 91.0324 11.2468H93.544C93.2768 12.2622 92.7469 13.0638 91.9542 13.6516C91.1615 14.2305 90.2085 14.52 89.0952 14.52C88.1867 14.52 87.3717 14.3196 86.6503 13.9188C85.9378 13.5091 85.3811 12.9435 84.9803 12.2221C84.5795 11.5007 84.3791 10.6768 84.3791 9.7505Z" fill="white"/>
<path d="M99.8996 12.6897H102.892V14.4532H97.6151V5.07452H99.8996V12.6897Z" fill="white"/>
<path d="M111.089 14.5467C110.208 14.5467 109.397 14.3419 108.658 13.9322C107.928 13.5225 107.344 12.9524 106.908 12.2221C106.48 11.4828 106.266 10.6545 106.266 9.73714C106.266 8.81976 106.48 7.9959 106.908 7.26555C107.344 6.53521 107.928 5.96518 108.658 5.55548C109.397 5.14577 110.208 4.94092 111.089 4.94092C111.971 4.94092 112.777 5.14577 113.508 5.55548C114.247 5.96518 114.826 6.53521 115.244 7.26555C115.672 7.9959 115.886 8.81976 115.886 9.73714C115.886 10.6545 115.672 11.4828 115.244 12.2221C114.817 12.9524 114.238 13.5225 113.508 13.9322C112.777 14.3419 111.971 14.5467 111.089 14.5467ZM111.089 12.4626C111.838 12.4626 112.434 12.2132 112.88 11.7144C113.334 11.2156 113.561 10.5566 113.561 9.73714C113.561 8.90883 113.334 8.24974 112.88 7.75987C112.434 7.2611 111.838 7.01171 111.089 7.01171C110.332 7.01171 109.727 7.25664 109.272 7.74651C108.827 8.23638 108.604 8.89992 108.604 9.73714C108.604 10.5655 108.827 11.229 109.272 11.7278C109.727 12.2176 110.332 12.4626 111.089 12.4626Z" fill="white"/>
<path d="M122.073 5.07452V10.6857C122.073 11.2468 122.211 11.6788 122.487 11.9816C122.763 12.2844 123.169 12.4359 123.703 12.4359C124.237 12.4359 124.647 12.2844 124.932 11.9816C125.217 11.6788 125.36 11.2468 125.36 10.6857V5.07452H127.644V10.6723C127.644 11.5096 127.466 12.2176 127.11 12.7966C126.754 13.3755 126.273 13.8119 125.667 14.1059C125.07 14.3998 124.402 14.5467 123.663 14.5467C122.924 14.5467 122.26 14.4042 121.672 14.1192C121.093 13.8253 120.635 13.3889 120.296 12.8099C119.958 12.2221 119.789 11.5096 119.789 10.6723V5.07452H122.073Z" fill="white"/>
<path d="M135.434 5.07452C136.423 5.07452 137.287 5.27046 138.026 5.66236C138.765 6.05425 139.335 6.60646 139.736 7.31899C140.146 8.02262 140.351 8.83757 140.351 9.76386C140.351 10.6812 140.146 11.4962 139.736 12.2087C139.335 12.9213 138.761 13.4735 138.013 13.8654C137.273 14.2573 136.414 14.4532 135.434 14.4532H131.92V5.07452H135.434ZM135.287 12.4759C136.151 12.4759 136.824 12.2399 137.304 11.7679C137.785 11.2958 138.026 10.6278 138.026 9.76386C138.026 8.89992 137.785 8.22747 137.304 7.74651C136.824 7.26555 136.151 7.02507 135.287 7.02507H134.205V12.4759H135.287Z" fill="white"/>
<path d="M152.571 14.6905C150.322 14.6905 148.498 12.8488 148.498 10.5768C148.498 8.45138 150.094 6.70241 152.141 6.48572C152.042 6.10327 151.989 5.70178 151.989 5.28779C151.989 2.6913 154.073 0.586426 156.643 0.586426C158.829 0.586426 160.664 2.10894 161.163 4.16152C161.397 4.12917 161.636 4.11245 161.879 4.11245C164.771 4.11245 167.116 6.48043 167.116 9.40149C167.116 12.3225 164.771 14.6905 161.879 14.6905H152.571Z" fill="url(#paint0_linear_1024_23937)"/>
<defs>
<linearGradient id="paint0_linear_1024_23937" x1="157.807" y1="0.586426" x2="157.807" y2="19.0754" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0.7"/>
</linearGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 6.1 KiB

+22
View File
@@ -0,0 +1,22 @@
<svg width="168" height="15" viewBox="0 0 168 15" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M6.09214 12.3824H2.03071L1.28256 14.4532H0L3.36671 5.19476H4.76951L8.12286 14.4532H6.8403L6.09214 12.3824ZM5.74478 11.3938L4.06143 6.69107L2.37807 11.3938H5.74478Z" fill="#F02E65"/>
<path d="M18.4879 7.86675C18.4879 8.64163 18.2207 9.28736 17.6863 9.80394C17.1608 10.3116 16.3547 10.5655 15.2681 10.5655H13.4779V14.4532H12.2621V5.14132H15.2681C16.3191 5.14132 17.1163 5.39516 17.6596 5.90283C18.2118 6.41051 18.4879 7.06515 18.4879 7.86675ZM15.2681 9.56346C15.945 9.56346 16.4438 9.4165 16.7645 9.12259C17.0851 8.82867 17.2454 8.41005 17.2454 7.86675C17.2454 6.71779 16.5863 6.14331 15.2681 6.14331H13.4779V9.56346H15.2681Z" fill="#F02E65"/>
<path d="M28.8967 7.86675C28.8967 8.64163 28.6295 9.28736 28.0951 9.80394C27.5696 10.3116 26.7635 10.5655 25.6769 10.5655H23.8867V14.4532H22.6709V5.14132H25.6769C26.7279 5.14132 27.525 5.39516 28.0683 5.90283C28.6206 6.41051 28.8967 7.06515 28.8967 7.86675ZM25.6769 9.56346C26.3538 9.56346 26.8526 9.4165 27.1732 9.12259C27.4939 8.82867 27.6542 8.41005 27.6542 7.86675C27.6542 6.71779 26.9951 6.14331 25.6769 6.14331H23.8867V9.56346H25.6769Z" fill="#F02E65"/>
<path d="M44.783 5.14132L42.0843 14.4532H40.7216L38.5573 6.95827L36.3128 14.4532L34.9634 14.4666L32.3582 5.14132H33.6542L35.6849 13.0371L37.9293 5.14132H39.2921L41.4297 13.0103L43.4737 5.14132H44.783Z" fill="#F02E65"/>
<path d="M53.6886 14.4532L51.4708 10.6456H50.0012V14.4532H48.7855V5.14132H51.7915C52.4951 5.14132 53.0874 5.26156 53.5683 5.50204C54.0582 5.74252 54.4234 6.06761 54.6638 6.47731C54.9043 6.88702 55.0246 7.35462 55.0246 7.88011C55.0246 8.52139 54.8375 9.08696 54.4634 9.57682C54.0983 10.0667 53.5461 10.3918 52.8068 10.5521L55.1448 14.4532H53.6886ZM50.0012 9.67034H51.7915C52.4505 9.67034 52.9449 9.51003 53.2744 9.18939C53.604 8.85984 53.7687 8.42341 53.7687 7.88011C53.7687 7.3279 53.604 6.90038 53.2744 6.59755C52.9538 6.29473 52.4594 6.14331 51.7915 6.14331H50.0012V9.67034Z" fill="#F02E65"/>
<path d="M60.8014 5.14132V14.4532H59.5856V5.14132H60.8014Z" fill="#F02E65"/>
<path d="M71.2768 5.14132V6.12995H68.7385V14.4532H67.5227V6.12995H64.9709V5.14132H71.2768Z" fill="#F02E65"/>
<path d="M76.6611 6.12995V9.24283H80.0546V10.2448H76.6611V13.4512H80.4553V14.4532H75.4454V5.12796H80.4553V6.12995H76.6611Z" fill="#F02E65"/>
<path d="M84.3791 9.7505C84.3791 8.82421 84.5795 8.00035 84.9803 7.27891C85.3811 6.54857 85.9378 5.983 86.6503 5.5822C87.3717 5.17249 88.1867 4.96764 89.0952 4.96764C90.2085 4.96764 91.1615 5.26156 91.9542 5.8494C92.7469 6.43723 93.2768 7.23883 93.544 8.25419H91.0324C90.8453 7.8623 90.5781 7.56392 90.2308 7.35907C89.8923 7.15422 89.5049 7.05179 89.0684 7.05179C88.3648 7.05179 87.7948 7.29672 87.3584 7.78659C86.922 8.27645 86.7037 8.93109 86.7037 9.7505C86.7037 10.5699 86.922 11.2246 87.3584 11.7144C87.7948 12.2043 88.3648 12.4492 89.0684 12.4492C89.5049 12.4492 89.8923 12.3468 90.2308 12.1419C90.5781 11.9371 90.8453 11.6387 91.0324 11.2468H93.544C93.2768 12.2622 92.7469 13.0638 91.9542 13.6516C91.1615 14.2305 90.2085 14.52 89.0952 14.52C88.1867 14.52 87.3717 14.3196 86.6503 13.9188C85.9378 13.5091 85.3811 12.9435 84.9803 12.2221C84.5795 11.5007 84.3791 10.6768 84.3791 9.7505Z" fill="#F02E65"/>
<path d="M99.8996 12.6897H102.892V14.4532H97.6151V5.07452H99.8996V12.6897Z" fill="#F02E65"/>
<path d="M111.089 14.5467C110.208 14.5467 109.397 14.3419 108.658 13.9322C107.928 13.5225 107.344 12.9524 106.908 12.2221C106.48 11.4828 106.266 10.6545 106.266 9.73714C106.266 8.81976 106.48 7.9959 106.908 7.26555C107.344 6.53521 107.928 5.96518 108.658 5.55548C109.397 5.14577 110.208 4.94092 111.089 4.94092C111.971 4.94092 112.777 5.14577 113.508 5.55548C114.247 5.96518 114.826 6.53521 115.244 7.26555C115.672 7.9959 115.886 8.81976 115.886 9.73714C115.886 10.6545 115.672 11.4828 115.244 12.2221C114.817 12.9524 114.238 13.5225 113.508 13.9322C112.777 14.3419 111.971 14.5467 111.089 14.5467ZM111.089 12.4626C111.838 12.4626 112.434 12.2132 112.88 11.7144C113.334 11.2156 113.561 10.5566 113.561 9.73714C113.561 8.90883 113.334 8.24974 112.88 7.75987C112.434 7.2611 111.838 7.01171 111.089 7.01171C110.332 7.01171 109.727 7.25664 109.272 7.74651C108.827 8.23638 108.604 8.89992 108.604 9.73714C108.604 10.5655 108.827 11.229 109.272 11.7278C109.727 12.2176 110.332 12.4626 111.089 12.4626Z" fill="#F02E65"/>
<path d="M122.073 5.07452V10.6857C122.073 11.2468 122.211 11.6788 122.487 11.9816C122.763 12.2844 123.169 12.4359 123.703 12.4359C124.237 12.4359 124.647 12.2844 124.932 11.9816C125.217 11.6788 125.36 11.2468 125.36 10.6857V5.07452H127.644V10.6723C127.644 11.5096 127.466 12.2176 127.11 12.7966C126.754 13.3755 126.273 13.8119 125.667 14.1059C125.07 14.3998 124.402 14.5467 123.663 14.5467C122.924 14.5467 122.26 14.4042 121.672 14.1192C121.093 13.8253 120.635 13.3889 120.296 12.8099C119.958 12.2221 119.789 11.5096 119.789 10.6723V5.07452H122.073Z" fill="#F02E65"/>
<path d="M135.434 5.07452C136.423 5.07452 137.287 5.27046 138.026 5.66236C138.765 6.05425 139.335 6.60646 139.736 7.31899C140.146 8.02262 140.351 8.83757 140.351 9.76386C140.351 10.6812 140.146 11.4962 139.736 12.2087C139.335 12.9213 138.761 13.4735 138.013 13.8654C137.273 14.2573 136.414 14.4532 135.434 14.4532H131.92V5.07452H135.434ZM135.287 12.4759C136.151 12.4759 136.824 12.2399 137.304 11.7679C137.785 11.2958 138.026 10.6278 138.026 9.76386C138.026 8.89992 137.785 8.22747 137.304 7.74651C136.824 7.26555 136.151 7.02507 135.287 7.02507H134.205V12.4759H135.287Z" fill="#F02E65"/>
<path d="M152.571 14.6905C150.321 14.6905 148.498 12.8488 148.498 10.5768C148.498 8.45138 150.094 6.70241 152.141 6.48572C152.042 6.10327 151.989 5.70178 151.989 5.28779C151.989 2.6913 154.073 0.586426 156.643 0.586426C158.829 0.586426 160.664 2.10894 161.163 4.16152C161.397 4.12917 161.636 4.11245 161.879 4.11245C164.771 4.11245 167.115 6.48043 167.115 9.40149C167.115 12.3225 164.771 14.6905 161.879 14.6905H152.571Z" fill="url(#paint0_linear_1041_25461)"/>
<defs>
<linearGradient id="paint0_linear_1041_25461" x1="157.807" y1="0.586426" x2="157.807" y2="19.0754" gradientUnits="userSpaceOnUse">
<stop stop-color="#F02E65"/>
<stop offset="1" stop-color="#F02E65" stop-opacity="0"/>
</linearGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 6.1 KiB

+154
View File
@@ -0,0 +1,154 @@
<svg width="200" height="200" viewBox="0 0 200 200" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="100" cy="100" r="98.5" fill="url(#paint0_linear_1103_26203)" stroke="white" stroke-width="3"/>
<path d="M39.8226 156.243L46.5542 148.604L47.7068 149.62L44.7814 152.94L48.5898 156.295L51.5151 152.976L52.6714 153.995L45.9399 161.634L44.7836 160.615L47.7188 157.284L43.9104 153.928L40.9752 157.259L39.8226 156.243Z" fill="white"/>
<path d="M53.3154 166.951L51.9182 166.11L60.3077 159.275L61.8284 160.19L59.7177 170.804L58.3205 169.963L60.1506 161.339L60.0824 161.298L53.3154 166.951ZM55.6056 163.675L60.1379 166.403L59.4714 167.51L54.9391 164.783L55.6056 163.675Z" fill="white"/>
<path d="M76.4139 170.44L74.9628 169.891C75.0241 169.56 75.0233 169.248 74.9604 168.955C74.8975 168.662 74.787 168.392 74.6289 168.144C74.4709 167.897 74.2712 167.68 74.03 167.493C73.7919 167.307 73.5209 167.157 73.217 167.042C72.6682 166.835 72.1247 166.788 71.5864 166.9C71.0511 167.013 70.5572 167.288 70.1046 167.727C69.6552 168.166 69.2852 168.771 68.9947 169.54C68.7019 170.315 68.5788 171.016 68.6254 171.643C68.6751 172.271 68.8655 172.804 69.1965 173.24C69.5275 173.677 69.9643 173.998 70.5069 174.203C70.8077 174.317 71.1082 174.384 71.4084 174.405C71.7128 174.425 72.0056 174.395 72.2866 174.317C72.5677 174.239 72.8281 174.113 73.0678 173.937C73.3119 173.76 73.5208 173.531 73.6944 173.249L75.1437 173.802C74.8894 174.241 74.5762 174.615 74.2042 174.925C73.8365 175.232 73.4252 175.463 72.9701 175.617C72.5194 175.769 72.0431 175.839 71.5411 175.827C71.0392 175.814 70.5262 175.709 70.0022 175.511C69.1775 175.2 68.5164 174.727 68.0191 174.092C67.5229 173.455 67.227 172.7 67.1313 171.828C67.0387 170.957 67.1839 170.014 67.5669 169C67.9511 167.983 68.4668 167.181 69.1141 166.593C69.7626 166.002 70.483 165.632 71.2755 165.485C72.0692 165.335 72.8768 165.415 73.6985 165.726C74.2039 165.917 74.6476 166.167 75.0298 166.478C75.4162 166.787 75.7319 167.147 75.9768 167.559C76.223 167.967 76.3852 168.415 76.4636 168.901C76.5431 169.385 76.5265 169.898 76.4139 170.44Z" fill="white"/>
<path d="M81.6348 178.973L83.4635 168.957L84.9747 169.232L84.1015 174.016L84.2237 174.038L89.2982 170.022L91.2007 170.369L86.3376 174.141L89.3866 180.388L87.5673 180.056L85.1466 174.99L83.7148 176.133L83.1461 179.249L81.6348 178.973Z" fill="white"/>
<path d="M97.7125 181.081L96.0819 181.071L99.8052 170.911L101.58 170.921L105.185 181.124L103.554 181.115L100.724 172.766L100.645 172.765L97.7125 181.081ZM98.0092 177.095L103.299 177.126L103.291 178.418L98.0017 178.388L98.0092 177.095Z" fill="white"/>
<path d="M110.219 171.852L109.997 170.548L117.765 169.224L117.987 170.527L114.855 171.061L116.345 179.795L114.835 180.052L113.346 171.319L110.219 171.852Z" fill="white"/>
<path d="M127.242 177.284L123.755 167.717L125.198 167.191L126.714 171.349L131.483 169.61L129.967 165.453L131.415 164.925L134.902 174.492L133.454 175.019L131.934 170.848L127.165 172.586L128.685 176.758L127.242 177.284Z" fill="white"/>
<path d="M147.385 162.116C147.94 163.05 148.246 163.955 148.304 164.831C148.36 165.704 148.197 166.498 147.817 167.214C147.437 167.925 146.87 168.504 146.115 168.953C145.357 169.403 144.573 169.626 143.764 169.62C142.957 169.61 142.182 169.371 141.441 168.901C140.699 168.432 140.052 167.731 139.498 166.799C138.943 165.865 138.638 164.961 138.582 164.088C138.525 163.212 138.686 162.419 139.065 161.708C139.446 160.992 140.015 160.41 140.773 159.959C141.528 159.511 142.31 159.292 143.118 159.301C143.926 159.307 144.701 159.544 145.443 160.014C146.183 160.48 146.83 161.181 147.385 162.116ZM146.077 162.892C145.654 162.18 145.182 161.649 144.662 161.298C144.143 160.944 143.609 160.759 143.062 160.745C142.515 160.727 141.991 160.867 141.489 161.165C140.985 161.464 140.61 161.859 140.364 162.347C140.117 162.833 140.024 163.39 140.084 164.017C140.145 164.64 140.388 165.308 140.811 166.02C141.234 166.732 141.705 167.266 142.224 167.621C142.744 167.971 143.278 168.155 143.825 168.174C144.37 168.189 144.894 168.047 145.399 167.748C145.9 167.45 146.275 167.058 146.522 166.572C146.77 166.081 146.864 165.525 146.802 164.902C146.742 164.275 146.5 163.605 146.077 162.892Z" fill="white"/>
<path d="M155.528 148.964L162.26 156.603L161.201 157.537L152.381 155.356L152.31 155.419L157.247 161.021L156.094 162.037L149.363 154.398L150.429 153.458L159.26 155.643L159.33 155.58L154.387 149.97L155.528 148.964Z" fill="white"/>
<path d="M78.1516 131.8C67.9067 131.8 59.6016 123.495 59.6016 113.25C59.6016 103.666 66.8703 95.7791 76.1959 94.8021C75.7429 93.0774 75.5016 91.267 75.5016 89.4002C75.5016 77.6918 84.9931 68.2002 96.7016 68.2002C106.659 68.2002 115.014 75.0657 117.289 84.3214C118.356 84.1756 119.445 84.1002 120.552 84.1002C133.724 84.1002 144.402 94.7782 144.402 107.95C144.402 121.122 133.724 131.8 120.552 131.8H78.1516Z" fill="url(#paint1_linear_1103_26203)"/>
<path d="M86.2752 30.8798C86.2752 31.1252 86.0982 31.3241 85.8798 31.3241C85.6614 31.3241 85.4844 31.1252 85.4844 30.8798C85.4844 30.6345 85.6614 30.4355 85.8798 30.4355C86.0982 30.4355 86.2752 30.6345 86.2752 30.8798Z" fill="url(#paint2_linear_1103_26203)"/>
<path d="M111.582 30.8798C111.582 31.1252 111.405 31.3241 111.186 31.3241C110.968 31.3241 110.791 31.1252 110.791 30.8798C110.791 30.6345 110.968 30.4355 111.186 30.4355C111.405 30.4355 111.582 30.6345 111.582 30.8798Z" fill="url(#paint3_linear_1103_26203)"/>
<path d="M56.4814 43.3959C56.4814 43.6413 56.3044 43.8402 56.086 43.8402C55.8676 43.8402 55.6906 43.6413 55.6906 43.3959C55.6906 43.1505 55.8676 42.9516 56.086 42.9516C56.3044 42.9516 56.4814 43.1505 56.4814 43.3959Z" fill="url(#paint4_linear_1103_26203)"/>
<path d="M77.3125 84.6698C77.3125 84.9151 77.1354 85.114 76.9171 85.114C76.6987 85.114 76.5216 84.9151 76.5216 84.6698C76.5216 84.4244 76.6987 84.2255 76.9171 84.2255C77.1354 84.2255 77.3125 84.4244 77.3125 84.6698Z" fill="url(#paint5_linear_1103_26203)"/>
<path d="M86.2752 93.5555C86.2752 93.8009 86.0982 93.9998 85.8798 93.9998C85.6614 93.9998 85.4844 93.8009 85.4844 93.5555C85.4844 93.3102 85.6614 93.1113 85.8798 93.1113C86.0982 93.1113 86.2752 93.3102 86.2752 93.5555Z" fill="url(#paint6_linear_1103_26203)"/>
<path d="M86.2752 75.6527C86.2752 75.8981 86.0982 76.097 85.8798 76.097C85.6614 76.097 85.4844 75.8981 85.4844 75.6527C85.4844 75.4073 85.6614 75.2084 85.8798 75.2084C86.0982 75.2084 86.2752 75.4073 86.2752 75.6527Z" fill="url(#paint7_linear_1103_26203)"/>
<path d="M86.2752 75.6527C86.2752 75.8981 86.0982 76.097 85.8798 76.097C85.6614 76.097 85.4844 75.8981 85.4844 75.6527C85.4844 75.4073 85.6614 75.2084 85.8798 75.2084C86.0982 75.2084 86.2752 75.4073 86.2752 75.6527Z" fill="url(#paint8_linear_1103_26203)"/>
<path d="M151.387 50.3479C151.387 50.5933 151.21 50.7922 150.992 50.7922C150.773 50.7922 150.596 50.5933 150.596 50.3479C150.596 50.1025 150.773 49.9036 150.992 49.9036C151.21 49.9036 151.387 50.1025 151.387 50.3479Z" fill="url(#paint9_linear_1103_26203)"/>
<path d="M98.4013 66.8982C98.4013 67.1436 98.2243 67.3425 98.0059 67.3425C97.7875 67.3425 97.6105 67.1436 97.6105 66.8982C97.6105 66.6528 97.7875 66.4539 98.0059 66.4539C98.2243 66.4539 98.4013 66.6528 98.4013 66.8982Z" fill="url(#paint10_linear_1103_26203)"/>
<path d="M103.674 63.805C103.674 64.0503 103.497 64.2493 103.278 64.2493C103.06 64.2493 102.883 64.0503 102.883 63.805C102.883 63.5596 103.06 63.3607 103.278 63.3607C103.497 63.3607 103.674 63.5596 103.674 63.805Z" fill="url(#paint11_linear_1103_26203)"/>
<path d="M119.49 54.1619C119.49 54.4073 119.313 54.6062 119.095 54.6062C118.876 54.6062 118.699 54.4073 118.699 54.1619C118.699 53.9165 118.876 53.7176 119.095 53.7176C119.313 53.7176 119.49 53.9165 119.49 54.1619Z" fill="url(#paint12_linear_1103_26203)"/>
<path d="M124.762 57.1238C124.762 57.3692 124.585 57.5681 124.367 57.5681C124.149 57.5681 123.972 57.3692 123.972 57.1238C123.972 56.8785 124.149 56.6795 124.367 56.6795C124.585 56.6795 124.762 56.8785 124.762 57.1238Z" fill="url(#paint13_linear_1103_26203)"/>
<path d="M132.671 48.238C132.671 48.4834 132.494 48.6823 132.275 48.6823C132.057 48.6823 131.88 48.4834 131.88 48.238C131.88 47.9927 132.057 47.7938 132.275 47.7938C132.494 47.7938 132.671 47.9927 132.671 48.238Z" fill="url(#paint14_linear_1103_26203)"/>
<path d="M111.582 93.5555C111.582 93.8009 111.405 93.9998 111.186 93.9998C110.968 93.9998 110.791 93.8009 110.791 93.5555C110.791 93.3102 110.968 93.1113 111.186 93.1113C111.405 93.1113 111.582 93.3102 111.582 93.5555Z" fill="url(#paint15_linear_1103_26203)"/>
<path d="M27.2264 93.5555C27.2264 93.8009 27.0494 93.9998 26.831 93.9998C26.6126 93.9998 26.4355 93.8009 26.4355 93.5555C26.4355 93.3102 26.6126 93.1113 26.831 93.1113C27.0494 93.1113 27.2264 93.3102 27.2264 93.5555Z" fill="url(#paint16_linear_1103_26203)"/>
<path d="M45.796 84.2189C45.796 84.4643 45.619 84.6632 45.4006 84.6632C45.1822 84.6632 45.0052 84.4643 45.0052 84.2189C45.0052 83.9735 45.1822 83.7746 45.4006 83.7746C45.619 83.7746 45.796 83.9735 45.796 84.2189Z" fill="url(#paint17_linear_1103_26203)"/>
<path d="M90.8994 44.4554C90.8994 44.7008 90.7224 44.8997 90.504 44.8997C90.2856 44.8997 90.1086 44.7008 90.1086 44.4554C90.1086 44.2101 90.2856 44.0111 90.504 44.0111C90.7224 44.0111 90.8994 44.2101 90.8994 44.4554Z" fill="url(#paint18_linear_1103_26203)"/>
<path d="M63.017 83.4171C63.017 83.6625 62.84 83.8614 62.6216 83.8614C62.4033 83.8614 62.2262 83.6625 62.2262 83.4171C62.2262 83.1717 62.4033 82.9728 62.6216 82.9728C62.84 82.9728 63.017 83.1717 63.017 83.4171Z" fill="url(#paint19_linear_1103_26203)"/>
<path d="M48.4563 47.9044C48.4563 48.1498 48.2792 48.3487 48.0608 48.3487C47.8425 48.3487 47.6654 48.1498 47.6654 47.9044C47.6654 47.6591 47.8425 47.4602 48.0608 47.4602C48.2792 47.4602 48.4563 47.6591 48.4563 47.9044Z" fill="url(#paint20_linear_1103_26203)"/>
<path d="M33.7582 79.2595C33.7582 79.5049 33.5812 79.7038 33.3628 79.7038C33.1444 79.7038 32.9674 79.5049 32.9674 79.2595C32.9674 79.0141 33.1444 78.8152 33.3628 78.8152C33.5812 78.8152 33.7582 79.0141 33.7582 79.2595Z" fill="url(#paint21_linear_1103_26203)"/>
<path d="M120.75 70.6494C120.75 70.8948 120.573 71.0937 120.354 71.0937C120.136 71.0937 119.959 70.8948 119.959 70.6494C119.959 70.4041 120.136 70.2052 120.354 70.2052C120.573 70.2052 120.75 70.4041 120.75 70.6494Z" fill="url(#paint22_linear_1103_26203)"/>
<path d="M179.475 54.8564C179.475 55.1018 179.298 55.3007 179.08 55.3007C178.861 55.3007 178.684 55.1018 178.684 54.8564C178.684 54.6111 178.861 54.4121 179.08 54.4121C179.298 54.4121 179.475 54.6111 179.475 54.8564Z" fill="url(#paint23_linear_1103_26203)"/>
<path d="M169.317 79.4473C169.317 79.6927 169.14 79.8916 168.921 79.8916C168.703 79.8916 168.526 79.6927 168.526 79.4473C168.526 79.202 168.703 79.003 168.921 79.003C169.14 79.003 169.317 79.202 169.317 79.4473Z" fill="url(#paint24_linear_1103_26203)"/>
<path d="M33.6121 72.8925L33.0285 74.1626L26.4096 67.6649L27.0448 66.2826L36.2863 67.0726L35.7027 68.3427L28.1828 67.6027L28.1543 67.6647L33.6121 72.8925ZM30.6045 71.2526L32.4976 67.1326L33.5044 67.5952L31.6113 71.7152L30.6045 71.2526Z" fill="white"/>
<path d="M39.6176 61.3814L32.4786 56.3614L34.268 53.8167C34.6585 53.2613 35.0832 52.8723 35.5419 52.6496C36.0007 52.4269 36.4692 52.3483 36.9476 52.4138C37.4236 52.4777 37.8801 52.6632 38.317 52.9704C38.7562 53.2793 39.0867 53.6488 39.3085 54.0792C39.5296 54.5056 39.6133 54.9742 39.5597 55.4852C39.5053 55.9922 39.2836 56.5223 38.8947 57.0754L37.6642 58.8253L36.7509 58.183L37.9128 56.5308C38.1595 56.1799 38.2993 55.8527 38.3321 55.5493C38.3625 55.2442 38.3079 54.9662 38.1684 54.7153C38.0288 54.4643 37.8242 54.2441 37.5547 54.0545C37.2851 53.8649 37.0098 53.7478 36.7287 53.7029C36.4477 53.6581 36.1703 53.7044 35.8965 53.8418C35.6244 53.9769 35.3625 54.2234 35.1108 54.5813L34.1598 55.9338L40.375 60.3043L39.6176 61.3814Z" fill="white"/>
<path d="M47.4104 51.3134L41.257 45.1247L43.4629 42.9313C43.9444 42.4526 44.4304 42.1436 44.921 42.0044C45.4115 41.8652 45.8866 41.8696 46.3462 42.0175C46.8038 42.1635 47.2209 42.4258 47.5975 42.8046C47.9761 43.1853 48.237 43.6069 48.3803 44.0693C48.5236 44.5278 48.5243 45.0039 48.3823 45.4976C48.2402 45.9874 47.9295 46.4706 47.45 46.9474L45.9331 48.4557L45.1459 47.6639L46.5782 46.2398C46.8824 45.9373 47.0771 45.6395 47.1623 45.3465C47.2455 45.0514 47.2403 44.7682 47.1467 44.4967C47.053 44.2253 46.89 43.9727 46.6577 43.739C46.4253 43.5053 46.1747 43.3419 45.9058 43.2487C45.6369 43.1555 45.3556 43.1527 45.0621 43.2403C44.7706 43.3258 44.4697 43.5228 44.1594 43.8313L42.987 44.9971L48.3442 50.385L47.4104 51.3134Z" fill="white"/>
<path d="M58.1752 41.7549L51.3669 35.7824L52.5252 35.0232L57.652 39.7439L57.7198 39.6995L55.4941 33.0774L56.6418 32.3253L61.8279 37.0121L61.8957 36.9677L59.6071 30.3818L60.769 29.6203L63.5249 38.2487L62.4165 38.9752L57.2971 34.5146L57.2401 34.552L59.2872 41.0261L58.1752 41.7549Z" fill="white"/>
<path d="M71.1554 34.2885L67.9363 26.1766L70.8277 25.0291C71.4562 24.7797 72.0206 24.6811 72.5211 24.7331C73.0243 24.784 73.4548 24.9601 73.8127 25.2612C74.1696 25.5597 74.447 25.9585 74.6451 26.4576C74.8421 26.954 74.9112 27.4324 74.8524 27.8928C74.7953 28.3495 74.5995 28.765 74.265 29.1391C73.9333 29.5123 73.4531 29.8235 72.8247 30.0729L70.6343 30.9421L70.2162 29.8885L72.2957 29.0633C72.6918 28.9061 72.9914 28.7215 73.1945 28.5095C73.4003 28.2964 73.5184 28.0585 73.5486 27.7959C73.5789 27.5333 73.5337 27.2501 73.4132 26.9464C73.2917 26.6401 73.127 26.3983 72.9191 26.221C72.7138 26.0427 72.4622 25.9439 72.1642 25.9246C71.8677 25.9016 71.5175 25.9703 71.1135 26.1306L69.5767 26.7405L72.3793 33.8028L71.1554 34.2885ZM73.7074 29.0395L77.164 31.904L75.7698 32.4573L72.3528 29.5771L73.7074 29.0395Z" fill="white"/>
<path d="M82.5421 21.3869L84.5263 29.8856L83.244 30.185L81.2598 21.6863L82.5421 21.3869Z" fill="white"/>
<path d="M90.8215 20.9961L90.7298 19.8663L97.4619 19.3201L97.5536 20.4499L94.8395 20.6701L95.4536 28.239L94.1454 28.3451L93.5313 20.7762L90.8215 20.9961Z" fill="white"/>
<path d="M104.589 28.0833L105.412 19.3949L110.859 19.9109L110.752 21.0394L106.616 20.6476L106.365 23.2948L110.217 23.6597L110.11 24.784L106.258 24.4191L106.006 27.079L110.194 27.4757L110.087 28.6041L104.589 28.0833Z" fill="white"/>
<path d="M134.613 29.7307L133.388 29.2154C133.451 28.9337 133.46 28.6664 133.415 28.4134C133.371 28.1604 133.284 27.9254 133.157 27.7084C133.029 27.4915 132.865 27.2992 132.664 27.1316C132.466 26.9651 132.239 26.8278 131.982 26.7199C131.519 26.525 131.055 26.4671 130.59 26.546C130.128 26.626 129.696 26.8466 129.295 27.2079C128.896 27.5702 128.56 28.0761 128.287 28.7256C128.012 29.3803 127.884 29.977 127.904 30.5155C127.927 31.0551 128.073 31.5172 128.343 31.9018C128.613 32.2865 128.977 32.5751 129.435 32.7678C129.689 32.8746 129.944 32.9419 130.201 32.9696C130.461 32.9958 130.712 32.9799 130.956 32.9219C131.199 32.8639 131.426 32.7636 131.637 32.6212C131.851 32.4772 132.038 32.2873 132.195 32.0516L133.419 32.5709C133.187 32.9388 132.907 33.2494 132.579 33.5027C132.254 33.7545 131.895 33.9392 131.5 34.0568C131.109 34.1729 130.699 34.2177 130.269 34.1912C129.84 34.1647 129.404 34.0584 128.961 33.8723C128.265 33.5794 127.713 33.1534 127.307 32.5944C126.902 32.0328 126.673 31.3769 126.618 30.6267C126.567 29.8776 126.721 29.0749 127.081 28.2186C127.442 27.3596 127.909 26.6884 128.482 26.2051C129.056 25.7192 129.685 25.4258 130.368 25.3249C131.053 25.2213 131.742 25.3154 132.436 25.6072C132.863 25.7867 133.235 26.0156 133.553 26.2939C133.874 26.5708 134.133 26.8892 134.33 27.2494C134.528 27.6069 134.653 27.9953 134.704 28.4146C134.757 28.8313 134.727 29.27 134.613 29.7307Z" fill="white"/>
<path d="M138.028 38.2824L142.762 30.9511L143.869 31.6654L139.749 38.0446L143.071 40.1899L142.456 41.1421L138.028 38.2824Z" fill="white"/>
<path d="M156.13 47.0572C155.491 47.7354 154.818 48.2017 154.11 48.4559C153.404 48.7081 152.711 48.762 152.032 48.6175C151.356 48.4728 150.744 48.1424 150.196 47.6262C149.646 47.108 149.278 46.5151 149.091 45.8474C148.909 45.1796 148.923 44.4848 149.135 43.7631C149.346 43.0413 149.77 42.3423 150.407 41.6661C151.046 40.9878 151.719 40.5226 152.425 40.2704C153.133 40.0162 153.824 39.9613 154.5 40.106C155.179 40.2505 155.794 40.5818 156.344 41.1C156.892 41.6162 157.258 42.2082 157.44 42.876C157.627 43.5437 157.615 44.2384 157.403 44.9602C157.193 45.6799 156.769 46.3789 156.13 47.0572ZM155.181 46.163C155.668 45.6461 155.994 45.1319 156.16 44.6205C156.33 44.109 156.355 43.6259 156.237 43.1712C156.123 42.7164 155.884 42.3176 155.52 41.9747C155.154 41.6299 154.741 41.4141 154.28 41.3274C153.821 41.2386 153.34 41.2932 152.838 41.491C152.339 41.6888 151.847 42.0462 151.36 42.5632C150.873 43.0801 150.544 43.5944 150.375 44.1059C150.209 44.6173 150.183 45.1004 150.297 45.5552C150.413 46.0079 150.654 46.4067 151.02 46.7515C151.384 47.0943 151.796 47.3102 152.255 47.399C152.717 47.4876 153.198 47.4331 153.697 47.2353C154.199 47.0374 154.694 46.68 155.181 46.163Z" fill="white"/>
<path d="M168.195 55.1119L168.962 56.1873L164.289 59.5206C163.791 59.8753 163.267 60.0728 162.717 60.1131C162.169 60.1517 161.634 60.0378 161.112 59.7712C160.593 59.5031 160.13 59.0845 159.724 58.5156C159.32 57.9489 159.076 57.3764 158.991 56.7981C158.909 56.2182 158.976 55.6753 159.191 55.1695C159.408 54.662 159.765 54.2309 160.262 53.8762L164.935 50.5429L165.7 51.6149L161.114 54.8864C160.792 55.1157 160.557 55.39 160.408 55.7092C160.26 56.0308 160.208 56.3734 160.251 56.737C160.296 57.099 160.447 57.4592 160.703 57.8177C160.96 58.1785 161.253 58.4393 161.58 58.6C161.911 58.7614 162.252 58.8223 162.6 58.7829C162.951 58.7458 163.287 58.6126 163.608 58.3833L168.195 55.1119Z" fill="white"/>
<path d="M166.454 69.6939L165.275 67.1266L173.205 63.4828L174.422 66.1313C174.779 66.9084 174.927 67.6486 174.865 68.3521C174.807 69.0544 174.55 69.6898 174.095 70.2583C173.644 70.8282 173.007 71.3023 172.183 71.6807C171.357 72.0603 170.578 72.2354 169.846 72.2062C169.114 72.1796 168.458 71.9558 167.877 71.535C167.299 71.113 166.824 70.4993 166.454 69.6939ZM166.87 67.8427L167.47 69.1476C167.747 69.7517 168.091 70.2016 168.502 70.4973C168.916 70.7919 169.385 70.9389 169.91 70.9384C170.438 70.9367 171.015 70.7918 171.643 70.5035C172.265 70.2177 172.747 69.8757 173.089 69.4777C173.433 69.0822 173.627 68.638 173.673 68.145C173.718 67.652 173.608 67.1164 173.343 66.5382L172.709 65.1597L166.87 67.8427Z" fill="white"/>
<defs>
<linearGradient id="paint0_linear_1103_26203" x1="100" y1="0" x2="100" y2="233.5" gradientUnits="userSpaceOnUse">
<stop stop-color="#1B1B28"/>
<stop offset="0.260417" stop-color="#272739"/>
<stop offset="1" stop-color="#C81B4C"/>
</linearGradient>
<linearGradient id="paint1_linear_1103_26203" x1="102.002" y1="68.2002" x2="102.002" y2="142.5" gradientUnits="userSpaceOnUse">
<stop stop-color="#FF6993"/>
<stop offset="0.206489" stop-color="#F02E65"/>
<stop offset="0.651581" stop-color="#F02E65" stop-opacity="0.33"/>
<stop offset="1" stop-color="#F02E65" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint2_linear_1103_26203" x1="220.891" y1="-21.0002" x2="220.891" y2="129.5" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint3_linear_1103_26203" x1="220.891" y1="-21.0002" x2="220.891" y2="129.5" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint4_linear_1103_26203" x1="220.891" y1="-21.0002" x2="220.891" y2="129.5" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint5_linear_1103_26203" x1="220.891" y1="-21.0002" x2="220.891" y2="129.5" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint6_linear_1103_26203" x1="220.891" y1="-21.0002" x2="220.891" y2="129.5" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint7_linear_1103_26203" x1="220.891" y1="-21.0002" x2="220.891" y2="129.5" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint8_linear_1103_26203" x1="220.891" y1="-21.0002" x2="220.891" y2="129.5" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint9_linear_1103_26203" x1="220.891" y1="-21.0002" x2="220.891" y2="129.5" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint10_linear_1103_26203" x1="220.891" y1="-21.0002" x2="220.891" y2="129.5" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint11_linear_1103_26203" x1="220.891" y1="-21.0002" x2="220.891" y2="129.5" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint12_linear_1103_26203" x1="220.891" y1="-21.0002" x2="220.891" y2="129.5" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint13_linear_1103_26203" x1="220.891" y1="-21.0002" x2="220.891" y2="129.5" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint14_linear_1103_26203" x1="220.891" y1="-21.0002" x2="220.891" y2="129.5" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint15_linear_1103_26203" x1="220.891" y1="-21.0002" x2="220.891" y2="129.5" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint16_linear_1103_26203" x1="220.891" y1="-21.0002" x2="220.891" y2="129.5" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint17_linear_1103_26203" x1="220.891" y1="-21.0002" x2="220.891" y2="129.5" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint18_linear_1103_26203" x1="220.891" y1="-21.0002" x2="220.891" y2="129.5" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint19_linear_1103_26203" x1="220.891" y1="-21.0002" x2="220.891" y2="129.5" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint20_linear_1103_26203" x1="220.891" y1="-21.0002" x2="220.891" y2="129.5" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint21_linear_1103_26203" x1="220.891" y1="-21.0002" x2="220.891" y2="129.5" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint22_linear_1103_26203" x1="220.891" y1="-21.0002" x2="220.891" y2="129.5" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint23_linear_1103_26203" x1="220.891" y1="-21.0002" x2="220.891" y2="129.5" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
<linearGradient id="paint24_linear_1103_26203" x1="220.891" y1="-21.0002" x2="220.891" y2="129.5" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="white" stop-opacity="0"/>
</linearGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 24 KiB

+11
View File
@@ -0,0 +1,11 @@
<svg width="100" height="17" viewBox="0 0 100 17" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M2.10869 5.65421C0.579492 7.20474 0.579492 9.71836 2.10869 11.2687L6.53833 15.7603C8.06753 17.3107 10.5466 17.3107 12.0756 15.7603L16.5054 11.2687C18.0345 9.71821 18.0345 7.2046 16.5054 5.65421L12.0756 1.16279C10.5464 -0.387596 8.06739 -0.387596 6.53833 1.16279L2.10869 5.65421ZM11.245 10.4266C12.3154 9.34126 12.3154 7.5817 11.245 6.49647C10.1747 5.4111 8.4393 5.4111 7.369 6.49647C6.29856 7.58184 6.29856 9.34126 7.369 10.4266C8.43944 11.5119 10.1747 11.5119 11.2451 10.4266H11.245Z" fill="white"/>
<path d="M21.4213 14.9122V1.80273H23.9832V7.32707L23.6758 6.91145C23.8921 6.34574 24.2394 5.93011 24.7176 5.66457C25.2072 5.38749 25.7765 5.24895 26.4255 5.24895C27.1315 5.24895 27.7464 5.39904 28.2701 5.69921C28.8053 5.99938 29.2209 6.42078 29.5169 6.9634C29.813 7.49448 29.961 8.11791 29.961 8.83371V14.9122H27.3991V9.38788C27.3991 9.01843 27.3251 8.70094 27.177 8.4354C27.0404 8.16987 26.8411 7.96205 26.5793 7.81197C26.3288 7.66188 26.0327 7.58684 25.6911 7.58684C25.3609 7.58684 25.0649 7.66188 24.803 7.81197C24.5411 7.96205 24.3362 8.16987 24.1881 8.4354C24.0515 8.70094 23.9832 9.01843 23.9832 9.38788V14.9122H21.4213Z" fill="white"/>
<path d="M34.1904 15.12C33.5186 15.12 32.9379 15.0103 32.4483 14.791C31.9587 14.5716 31.583 14.2599 31.3211 13.8558C31.0592 13.4402 30.9282 12.9495 30.9282 12.3838C30.9282 11.8528 31.0478 11.3852 31.2869 10.9811C31.526 10.5655 31.8904 10.2191 32.38 9.94204C32.881 9.66496 33.5015 9.46869 34.2417 9.35324L37.0939 8.88566V10.7906L34.7028 11.2235C34.3384 11.2928 34.0595 11.414 33.8659 11.5872C33.6723 11.7489 33.5756 11.9855 33.5756 12.2972C33.5756 12.5859 33.6837 12.811 33.9001 12.9726C34.1164 13.1343 34.384 13.2151 34.7028 13.2151C35.1241 13.2151 35.4941 13.1227 35.813 12.938C36.1318 12.7533 36.3766 12.5051 36.5474 12.1933C36.7296 11.8701 36.8207 11.5179 36.8207 11.137V8.67785C36.8207 8.31995 36.6783 8.01978 36.3937 7.77733C36.1204 7.53488 35.7446 7.41366 35.2664 7.41366C34.811 7.41366 34.4068 7.54066 34.0538 7.79465C33.7122 8.04864 33.4617 8.38345 33.3023 8.79907L31.2528 7.81197C31.4349 7.28089 31.7253 6.82486 32.1238 6.44387C32.5223 6.06288 33.0005 5.76848 33.5585 5.56067C34.1164 5.35286 34.7256 5.24895 35.386 5.24895C36.1716 5.24895 36.8662 5.39326 37.4697 5.68189C38.0731 5.97052 38.54 6.3746 38.8702 6.89413C39.2118 7.40212 39.3826 7.99669 39.3826 8.67785V14.9122H36.9914V13.3883L37.5721 13.2844C37.2989 13.7 36.9971 14.0463 36.6669 14.3234C36.3367 14.5889 35.9667 14.7852 35.5568 14.9122C35.1469 15.0508 34.6914 15.12 34.1904 15.12Z" fill="white"/>
<path d="M44.5749 15.12C43.5501 15.12 42.6563 14.8776 41.8934 14.3927C41.1419 13.8962 40.6295 13.2324 40.3562 12.4011L42.235 11.5006C42.4741 12.0086 42.7986 12.4069 43.2085 12.6955C43.6184 12.9842 44.0739 13.1285 44.5749 13.1285C44.9392 13.1285 45.2182 13.0534 45.4117 12.9034C45.6053 12.7533 45.7021 12.5455 45.7021 12.2799C45.7021 12.1414 45.6679 12.0259 45.5996 11.9336C45.5313 11.8297 45.4288 11.7373 45.2922 11.6565C45.1556 11.5757 44.9848 11.5064 44.7798 11.4487L43.1914 10.9984C42.4285 10.7791 41.8421 10.4269 41.4322 9.94204C41.0223 9.4456 40.8174 8.86257 40.8174 8.19296C40.8174 7.60415 40.9654 7.0904 41.2614 6.65168C41.5575 6.21297 41.9731 5.87239 42.5082 5.62994C43.0434 5.37595 43.6583 5.24895 44.3528 5.24895C45.2637 5.24895 46.0608 5.46831 46.7439 5.90702C47.4385 6.33419 47.9281 6.94031 48.2128 7.72538L46.317 8.6259C46.1803 8.23336 45.9298 7.92165 45.5655 7.69074C45.2125 7.4483 44.8083 7.32707 44.3528 7.32707C44.0226 7.32707 43.7607 7.39634 43.5672 7.53488C43.385 7.67342 43.2939 7.86392 43.2939 8.10637C43.2939 8.23336 43.3281 8.34881 43.3964 8.45272C43.4647 8.55663 43.5729 8.64899 43.7209 8.7298C43.8803 8.81062 44.0739 8.88566 44.3016 8.95493L45.7875 9.40519C46.5618 9.63609 47.1538 9.98822 47.5638 10.4616C47.9737 10.9234 48.1786 11.4949 48.1786 12.176C48.1786 12.7648 48.0249 13.2786 47.7175 13.7173C47.4214 14.156 47.0058 14.5024 46.4707 14.7564C45.9355 14.9988 45.3036 15.12 44.5749 15.12Z" fill="white"/>
<path d="M49.3682 14.9122V1.80273H51.9301V7.32707L51.6227 6.91145C51.839 6.34574 52.1863 5.93011 52.6645 5.66457C53.1541 5.38749 53.7234 5.24895 54.3724 5.24895C55.0784 5.24895 55.6933 5.39904 56.217 5.69921C56.7522 5.99938 57.1678 6.42078 57.4638 6.9634C57.7599 7.49448 57.9079 8.11791 57.9079 8.83371V14.9122H55.346V9.38788C55.346 9.01843 55.272 8.70094 55.1239 8.4354C54.9873 8.16987 54.788 7.96205 54.5262 7.81197C54.2757 7.66188 53.9796 7.58684 53.638 7.58684C53.3078 7.58684 53.0118 7.66188 52.7499 7.81197C52.488 7.96205 52.2831 8.16987 52.135 8.4354C51.9984 8.70094 51.9301 9.01843 51.9301 9.38788V14.9122H49.3682Z" fill="white"/>
<path d="M59.2509 14.9122V5.45676H61.642V7.32707L61.5054 6.91145C61.7217 6.34574 62.069 5.93011 62.5472 5.66457C63.0368 5.38749 63.6062 5.24895 64.2552 5.24895C64.9611 5.24895 65.576 5.39904 66.0998 5.69921C66.6349 5.99938 67.0505 6.42078 67.3465 6.9634C67.6426 7.49448 67.7906 8.11791 67.7906 8.83371V14.9122H65.2287V9.38788C65.2287 9.01843 65.1547 8.70094 65.0067 8.4354C64.87 8.16987 64.6708 7.96205 64.4089 7.81197C64.1584 7.66188 63.8623 7.58684 63.5208 7.58684C63.1906 7.58684 62.8945 7.66188 62.6326 7.81197C62.3707 7.96205 62.1658 8.16987 62.0178 8.4354C61.8811 8.70094 61.8128 9.01843 61.8128 9.38788V14.9122H59.2509Z" fill="white"/>
<path d="M73.7621 15.12C72.8399 15.12 71.9973 14.9064 71.2344 14.4793C70.4829 14.0521 69.8794 13.4691 69.424 12.7302C68.9799 11.9798 68.7579 11.1312 68.7579 10.1845C68.7579 9.22624 68.9799 8.37768 69.424 7.63879C69.8794 6.8999 70.4829 6.31687 71.2344 5.88971C71.9973 5.46254 72.8399 5.24895 73.7621 5.24895C74.6844 5.24895 75.5213 5.46254 76.2728 5.88971C77.0243 6.31687 77.6221 6.8999 78.0662 7.63879C78.5216 8.37768 78.7493 9.22624 78.7493 10.1845C78.7493 11.1312 78.5216 11.9798 78.0662 12.7302C77.6221 13.4691 77.0243 14.0521 76.2728 14.4793C75.5213 14.9064 74.6844 15.12 73.7621 15.12ZM73.7621 12.7821C74.229 12.7821 74.6332 12.6725 74.9748 12.4531C75.3278 12.2337 75.601 11.9278 75.7946 11.5353C75.9996 11.1427 76.102 10.6925 76.102 10.1845C76.102 9.6765 75.9996 9.23202 75.7946 8.85103C75.601 8.45849 75.3278 8.15255 74.9748 7.93319C74.6332 7.70229 74.229 7.58684 73.7621 7.58684C73.2953 7.58684 72.8854 7.70229 72.5324 7.93319C72.1795 8.15255 71.9005 8.45849 71.6955 8.85103C71.502 9.23202 71.4052 9.6765 71.4052 10.1845C71.4052 10.6925 71.502 11.1427 71.6955 11.5353C71.9005 11.9278 72.1795 12.2337 72.5324 12.4531C72.8854 12.6725 73.2953 12.7821 73.7621 12.7821Z" fill="white"/>
<path d="M84.3064 15.12C83.3955 15.12 82.5814 14.9007 81.8641 14.462C81.1467 14.0232 80.5774 13.4287 80.1561 12.6782C79.7462 11.9278 79.5413 11.0966 79.5413 10.1845C79.5413 9.26088 79.7519 8.42963 80.1732 7.69074C80.5945 6.94031 81.1638 6.34574 81.8812 5.90702C82.5985 5.46831 83.4012 5.24895 84.2894 5.24895C84.9725 5.24895 85.576 5.38172 86.0998 5.64726C86.6349 5.90125 87.0562 6.26492 87.3637 6.73827L86.9708 7.2578V1.80273H89.5328V14.9122H87.1416V13.1804L87.3807 13.7173C87.0619 14.1791 86.6292 14.5312 86.0827 14.7737C85.5362 15.0046 84.9441 15.12 84.3064 15.12ZM84.6139 12.7821C85.0807 12.7821 85.4906 12.6725 85.8436 12.4531C86.1966 12.2337 86.4698 11.9278 86.6634 11.5353C86.8684 11.1427 86.9708 10.6925 86.9708 10.1845C86.9708 9.6765 86.8684 9.22624 86.6634 8.83371C86.4698 8.44117 86.1966 8.13523 85.8436 7.91587C85.4906 7.69652 85.0807 7.58684 84.6139 7.58684C84.147 7.58684 83.7257 7.70229 83.35 7.93319C82.9856 8.15255 82.701 8.45849 82.496 8.85103C82.2911 9.23202 82.1886 9.6765 82.1886 10.1845C82.1886 10.6925 82.2911 11.1427 82.496 11.5353C82.701 11.9278 82.9856 12.2337 83.35 12.4531C83.7257 12.6725 84.147 12.7821 84.6139 12.7821Z" fill="white"/>
<path d="M95.5593 15.12C94.5686 15.12 93.709 14.9007 92.9803 14.462C92.2515 14.0117 91.6879 13.4113 91.2894 12.6609C90.8909 11.9105 90.6916 11.0792 90.6916 10.1672C90.6916 9.22047 90.8966 8.37768 91.3065 7.63879C91.7278 6.8999 92.2914 6.31687 92.9973 5.88971C93.7033 5.46254 94.5003 5.24895 95.3885 5.24895C96.1286 5.24895 96.7833 5.37018 97.3526 5.61262C97.9219 5.84352 98.4001 6.17256 98.7873 6.59973C99.1858 7.0269 99.4875 7.52334 99.6925 8.08905C99.8974 8.64321 99.9999 9.24933 99.9999 9.9074C99.9999 10.0921 99.9885 10.2768 99.9658 10.4616C99.9544 10.6347 99.9259 10.7848 99.8804 10.9118H92.8949V9.00689H98.4286L97.216 9.9074C97.3298 9.41096 97.3241 8.97225 97.1989 8.59126C97.0736 8.19873 96.8516 7.89278 96.5328 7.67343C96.2254 7.44252 95.8439 7.32707 95.3885 7.32707C94.9444 7.32707 94.563 7.43675 94.2441 7.65611C93.9253 7.87546 93.6862 8.19873 93.5268 8.6259C93.3674 9.05307 93.3048 9.5726 93.3389 10.1845C93.2934 10.7156 93.356 11.1831 93.5268 11.5872C93.6976 11.9913 93.9595 12.3088 94.3125 12.5397C94.6654 12.759 95.0924 12.8687 95.5934 12.8687C96.0489 12.8687 96.436 12.7764 96.7548 12.5916C97.085 12.4069 97.3412 12.1529 97.5234 11.8297L99.5729 12.8168C99.3907 13.2786 99.1004 13.6827 98.7019 14.029C98.3147 14.3754 97.8536 14.6467 97.3184 14.8429C96.7833 15.0277 96.1969 15.12 95.5593 15.12Z" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 8.8 KiB

+11
View File
@@ -0,0 +1,11 @@
<svg width="100" height="17" viewBox="0 0 100 17" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M2.10882 5.65421C0.579614 7.20474 0.579614 9.71836 2.10882 11.2687L6.53845 15.7603C8.06765 17.3107 10.5467 17.3107 12.0757 15.7603L16.5055 11.2687C18.0346 9.71821 18.0346 7.2046 16.5055 5.65421L12.0757 1.16279C10.5465 -0.387596 8.06751 -0.387596 6.53845 1.16279L2.10882 5.65421ZM11.2451 10.4266C12.3155 9.34126 12.3155 7.5817 11.2451 6.49647C10.1748 5.4111 8.43942 5.4111 7.36913 6.49647C6.29868 7.58184 6.29868 9.34126 7.36913 10.4266C8.43957 11.5119 10.1748 11.5119 11.2452 10.4266H11.2451Z" fill="#F02E65"/>
<path d="M21.4214 14.9122V1.80273H23.9833V7.32707L23.6759 6.91145C23.8922 6.34574 24.2395 5.93011 24.7177 5.66457C25.2073 5.38749 25.7766 5.24895 26.4257 5.24895C27.1316 5.24895 27.7465 5.39904 28.2702 5.69921C28.8054 5.99938 29.221 6.42078 29.517 6.9634C29.8131 7.49448 29.9611 8.11791 29.9611 8.83371V14.9122H27.3992V9.38788C27.3992 9.01843 27.3252 8.70094 27.1772 8.4354C27.0405 8.16987 26.8413 7.96205 26.5794 7.81197C26.3289 7.66188 26.0328 7.58684 25.6912 7.58684C25.361 7.58684 25.065 7.66188 24.8031 7.81197C24.5412 7.96205 24.3363 8.16987 24.1883 8.4354C24.0516 8.70094 23.9833 9.01843 23.9833 9.38788V14.9122H21.4214Z" fill="#F02E65"/>
<path d="M34.1905 15.12C33.5187 15.12 32.938 15.0103 32.4484 14.791C31.9588 14.5716 31.5831 14.2599 31.3212 13.8558C31.0593 13.4402 30.9284 12.9495 30.9284 12.3838C30.9284 11.8528 31.0479 11.3852 31.287 10.9811C31.5261 10.5655 31.8905 10.2191 32.3801 9.94204C32.8811 9.66496 33.5017 9.46869 34.2418 9.35324L37.094 8.88566V10.7906L34.7029 11.2235C34.3386 11.2928 34.0596 11.414 33.866 11.5872C33.6725 11.7489 33.5757 11.9855 33.5757 12.2972C33.5757 12.5859 33.6838 12.811 33.9002 12.9726C34.1165 13.1343 34.3841 13.2151 34.7029 13.2151C35.1242 13.2151 35.4943 13.1227 35.8131 12.938C36.1319 12.7533 36.3767 12.5051 36.5475 12.1933C36.7297 11.8701 36.8208 11.5179 36.8208 11.137V8.67785C36.8208 8.31995 36.6784 8.01978 36.3938 7.77733C36.1205 7.53488 35.7448 7.41366 35.2665 7.41366C34.8111 7.41366 34.4069 7.54066 34.0539 7.79465C33.7123 8.04864 33.4618 8.38345 33.3024 8.79907L31.2529 7.81197C31.4351 7.28089 31.7254 6.82486 32.1239 6.44387C32.5224 6.06288 33.0007 5.76848 33.5586 5.56067C34.1165 5.35286 34.7257 5.24895 35.3861 5.24895C36.1718 5.24895 36.8663 5.39326 37.4698 5.68189C38.0733 5.97052 38.5401 6.3746 38.8703 6.89413C39.2119 7.40212 39.3827 7.99669 39.3827 8.67785V14.9122H36.9916V13.3883L37.5723 13.2844C37.299 13.7 36.9973 14.0463 36.6671 14.3234C36.3369 14.5889 35.9668 14.7852 35.5569 14.9122C35.147 15.0508 34.6915 15.12 34.1905 15.12Z" fill="#F02E65"/>
<path d="M44.575 15.12C43.5502 15.12 42.6564 14.8776 41.8935 14.3927C41.142 13.8962 40.6296 13.2324 40.3564 12.4011L42.2351 11.5006C42.4742 12.0086 42.7987 12.4069 43.2086 12.6955C43.6185 12.9842 44.074 13.1285 44.575 13.1285C44.9393 13.1285 45.2183 13.0534 45.4119 12.9034C45.6054 12.7533 45.7022 12.5455 45.7022 12.2799C45.7022 12.1414 45.6681 12.0259 45.5997 11.9336C45.5314 11.8297 45.4289 11.7373 45.2923 11.6565C45.1557 11.5757 44.9849 11.5064 44.7799 11.4487L43.1915 10.9984C42.4287 10.7791 41.8423 10.4269 41.4324 9.94204C41.0224 9.4456 40.8175 8.86257 40.8175 8.19296C40.8175 7.60415 40.9655 7.0904 41.2616 6.65168C41.5576 6.21297 41.9732 5.87239 42.5084 5.62994C43.0435 5.37595 43.6584 5.24895 44.3529 5.24895C45.2638 5.24895 46.0609 5.46831 46.7441 5.90702C47.4386 6.33419 47.9282 6.94031 48.2129 7.72538L46.3171 8.6259C46.1804 8.23336 45.9299 7.92165 45.5656 7.69074C45.2126 7.4483 44.8084 7.32707 44.3529 7.32707C44.0227 7.32707 43.7609 7.39634 43.5673 7.53488C43.3851 7.67342 43.294 7.86392 43.294 8.10637C43.294 8.23336 43.3282 8.34881 43.3965 8.45272C43.4648 8.55663 43.573 8.64899 43.721 8.7298C43.8804 8.81062 44.074 8.88566 44.3017 8.95493L45.7876 9.40519C46.5619 9.63609 47.154 9.98822 47.5639 10.4616C47.9738 10.9234 48.1787 11.4949 48.1787 12.176C48.1787 12.7648 48.025 13.2786 47.7176 13.7173C47.4215 14.156 47.0059 14.5024 46.4708 14.7564C45.9356 14.9988 45.3037 15.12 44.575 15.12Z" fill="#F02E65"/>
<path d="M49.3683 14.9122V1.80273H51.9302V7.32707L51.6228 6.91145C51.8391 6.34574 52.1864 5.93011 52.6646 5.66457C53.1542 5.38749 53.7235 5.24895 54.3726 5.24895C55.0785 5.24895 55.6934 5.39904 56.2171 5.69921C56.7523 5.99938 57.1679 6.42078 57.4639 6.9634C57.76 7.49448 57.908 8.11791 57.908 8.83371V14.9122H55.3461V9.38788C55.3461 9.01843 55.2721 8.70094 55.1241 8.4354C54.9874 8.16987 54.7882 7.96205 54.5263 7.81197C54.2758 7.66188 53.9797 7.58684 53.6382 7.58684C53.308 7.58684 53.0119 7.66188 52.75 7.81197C52.4881 7.96205 52.2832 8.16987 52.1352 8.4354C51.9985 8.70094 51.9302 9.01843 51.9302 9.38788V14.9122H49.3683Z" fill="#F02E65"/>
<path d="M59.251 14.9122V5.45676H61.6421V7.32707L61.5055 6.91145C61.7218 6.34574 62.0691 5.93011 62.5474 5.66457C63.037 5.38749 63.6063 5.24895 64.2553 5.24895C64.9612 5.24895 65.5761 5.39904 66.0999 5.69921C66.635 5.99938 67.0506 6.42078 67.3467 6.9634C67.6427 7.49448 67.7907 8.11791 67.7907 8.83371V14.9122H65.2288V9.38788C65.2288 9.01843 65.1548 8.70094 65.0068 8.4354C64.8702 8.16987 64.6709 7.96205 64.409 7.81197C64.1585 7.66188 63.8625 7.58684 63.5209 7.58684C63.1907 7.58684 62.8946 7.66188 62.6327 7.81197C62.3709 7.96205 62.1659 8.16987 62.0179 8.4354C61.8813 8.70094 61.8129 9.01843 61.8129 9.38788V14.9122H59.251Z" fill="#F02E65"/>
<path d="M73.7623 15.12C72.84 15.12 71.9974 14.9064 71.2345 14.4793C70.483 14.0521 69.8795 13.4691 69.4241 12.7302C68.98 11.9798 68.758 11.1312 68.758 10.1845C68.758 9.22624 68.98 8.37768 69.4241 7.63879C69.8795 6.8999 70.483 6.31687 71.2345 5.88971C71.9974 5.46254 72.84 5.24895 73.7623 5.24895C74.6846 5.24895 75.5215 5.46254 76.273 5.88971C77.0244 6.31687 77.6222 6.8999 78.0663 7.63879C78.5217 8.37768 78.7495 9.22624 78.7495 10.1845C78.7495 11.1312 78.5217 11.9798 78.0663 12.7302C77.6222 13.4691 77.0244 14.0521 76.273 14.4793C75.5215 14.9064 74.6846 15.12 73.7623 15.12ZM73.7623 12.7821C74.2291 12.7821 74.6333 12.6725 74.9749 12.4531C75.3279 12.2337 75.6012 11.9278 75.7947 11.5353C75.9997 11.1427 76.1022 10.6925 76.1022 10.1845C76.1022 9.6765 75.9997 9.23202 75.7947 8.85103C75.6012 8.45849 75.3279 8.15255 74.9749 7.93319C74.6333 7.70229 74.2291 7.58684 73.7623 7.58684C73.2954 7.58684 72.8855 7.70229 72.5326 7.93319C72.1796 8.15255 71.9006 8.45849 71.6957 8.85103C71.5021 9.23202 71.4053 9.6765 71.4053 10.1845C71.4053 10.6925 71.5021 11.1427 71.6957 11.5353C71.9006 11.9278 72.1796 12.2337 72.5326 12.4531C72.8855 12.6725 73.2954 12.7821 73.7623 12.7821Z" fill="#F02E65"/>
<path d="M84.3066 15.12C83.3957 15.12 82.5815 14.9007 81.8642 14.462C81.1469 14.0232 80.5775 13.4287 80.1563 12.6782C79.7463 11.9278 79.5414 11.0966 79.5414 10.1845C79.5414 9.26088 79.752 8.42963 80.1733 7.69074C80.5946 6.94031 81.1639 6.34574 81.8813 5.90702C82.5986 5.46831 83.4013 5.24895 84.2895 5.24895C84.9727 5.24895 85.5761 5.38172 86.0999 5.64726C86.6351 5.90125 87.0564 6.26492 87.3638 6.73827L86.9709 7.2578V1.80273H89.5329V14.9122H87.1417V13.1804L87.3809 13.7173C87.062 14.1791 86.6294 14.5312 86.0828 14.7737C85.5363 15.0046 84.9442 15.12 84.3066 15.12ZM84.614 12.7821C85.0808 12.7821 85.4907 12.6725 85.8437 12.4531C86.1967 12.2337 86.47 11.9278 86.6635 11.5353C86.8685 11.1427 86.9709 10.6925 86.9709 10.1845C86.9709 9.6765 86.8685 9.22624 86.6635 8.83371C86.47 8.44117 86.1967 8.13523 85.8437 7.91587C85.4907 7.69652 85.0808 7.58684 84.614 7.58684C84.1472 7.58684 83.7259 7.70229 83.3501 7.93319C82.9858 8.15255 82.7011 8.45849 82.4961 8.85103C82.2912 9.23202 82.1887 9.6765 82.1887 10.1845C82.1887 10.6925 82.2912 11.1427 82.4961 11.5353C82.7011 11.9278 82.9858 12.2337 83.3501 12.4531C83.7259 12.6725 84.1472 12.7821 84.614 12.7821Z" fill="#F02E65"/>
<path d="M95.5594 15.12C94.5688 15.12 93.7091 14.9007 92.9804 14.462C92.2517 14.0117 91.688 13.4113 91.2895 12.6609C90.891 11.9105 90.6917 11.0792 90.6917 10.1672C90.6917 9.22047 90.8967 8.37768 91.3066 7.63879C91.7279 6.8999 92.2915 6.31687 92.9975 5.88971C93.7034 5.46254 94.5005 5.24895 95.3886 5.24895C96.1287 5.24895 96.7834 5.37018 97.3527 5.61262C97.922 5.84352 98.4003 6.17256 98.7874 6.59973C99.1859 7.0269 99.4877 7.52334 99.6926 8.08905C99.8976 8.64321 100 9.24933 100 9.9074C100 10.0921 99.9886 10.2768 99.9659 10.4616C99.9545 10.6347 99.926 10.7848 99.8805 10.9118H92.895V9.00689H98.4287L97.2161 9.9074C97.3299 9.41096 97.3243 8.97225 97.199 8.59126C97.0738 8.19873 96.8517 7.89278 96.5329 7.67343C96.2255 7.44252 95.844 7.32707 95.3886 7.32707C94.9445 7.32707 94.5631 7.43675 94.2443 7.65611C93.9254 7.87546 93.6863 8.19873 93.5269 8.6259C93.3675 9.05307 93.3049 9.5726 93.3391 10.1845C93.2935 10.7156 93.3561 11.1831 93.5269 11.5872C93.6977 11.9913 93.9596 12.3088 94.3126 12.5397C94.6656 12.759 95.0925 12.8687 95.5935 12.8687C96.049 12.8687 96.4361 12.7764 96.7549 12.5916C97.0851 12.4069 97.3413 12.1529 97.5235 11.8297L99.573 12.8168C99.3909 13.2786 99.1005 13.6827 98.702 14.029C98.3149 14.3754 97.8537 14.6467 97.3186 14.8429C96.7834 15.0277 96.197 15.12 95.5594 15.12Z" fill="#F02E65"/>
</svg>

After

Width:  |  Height:  |  Size: 8.9 KiB

+16
View File
@@ -36,6 +36,15 @@
});
}
}
function onGithubLogin() {
sdkForConsole.account.createOAuth2Session(
'github',
window.location.origin,
window.location.origin,
['read:user', 'user:email']
);
}
</script>
<svelte:head>
@@ -65,6 +74,13 @@
<FormItem>
<Button fullWidth submit {disabled}>Sign in</Button>
</FormItem>
<span class="with-separators eyebrow-heading-3">or</span>
<FormItem>
<Button github fullWidth on:click={onGithubLogin} {disabled}>
<span class="icon-github" aria-hidden="true" />
<span class="text">Sign in with GitHub</span>
</Button>
</FormItem>
</FormList>
</Form>
</svelte:fragment>
+27 -13
View File
@@ -15,12 +15,8 @@
import { Unauthenticated } from '$lib/layout';
import FormList from '$lib/elements/forms/formList.svelte';
import { Dependencies } from '$lib/constants';
import { trackEvent } from '$lib/actions/analytics';
import LoginLight from '$lib/images/login/login-light-mode.svg';
import LoginDark from '$lib/images/login/login-dark-mode.svg';
let imgLight = LoginLight;
let imgDark = LoginDark;
import { Submit, trackError, trackEvent } from '$lib/actions/analytics';
import { ID } from '@aw-labs/appwrite-console';
let name: string, mail: string, pass: string, disabled: boolean;
let terms = false;
@@ -28,26 +24,36 @@
async function register() {
try {
disabled = true;
await sdkForConsole.account.create('unique()', mail, pass, name ?? '');
await sdkForConsole.account.create(ID.unique(), mail, pass, name ?? '');
await sdkForConsole.account.createEmailSession(mail, pass);
await invalidate(Dependencies.ACCOUNT);
await goto(`${base}/console`);
trackEvent('submit_account_create');
trackEvent(Submit.AccountCreate);
} catch (error) {
disabled = false;
addNotification({
type: 'error',
message: error.message
});
trackError(error, Submit.AccountCreate);
}
}
function onGithubLogin() {
sdkForConsole.account.createOAuth2Session(
'github',
window.location.origin,
window.location.origin,
['read:user', 'user:email']
);
}
</script>
<svelte:head>
<title>Sign up - Appwrite</title>
</svelte:head>
<Unauthenticated {imgLight} {imgDark}>
<Unauthenticated>
<svelte:fragment slot="title">Sign up</svelte:fragment>
<svelte:fragment>
<Form on:submit={register}>
@@ -56,20 +62,21 @@
id="name"
label="Name"
placeholder="Your name"
autofocus={true}
autofocus
required
bind:value={name} />
<InputEmail
id="email"
label="Email"
placeholder="Your email"
required={true}
required
bind:value={mail} />
<InputPassword
id="password"
label="Password"
placeholder="Your password"
required={true}
showPasswordButton={true}
required
showPasswordButton
bind:value={pass} />
<InputChoice required value={terms} id="terms" label="terms" showLabel={false}>
By registering, you agree that you have read, understand, and acknowledge our <a
@@ -88,6 +95,13 @@
<FormItem>
<Button fullWidth submit {disabled}>Sign up</Button>
</FormItem>
<span class="with-separators eyebrow-heading-3">or</span>
<FormItem>
<Button github fullWidth on:click={onGithubLogin} {disabled}>
<span class="icon-github" aria-hidden="true" />
<span class="text">Sign up with GitHub</span>
</Button>
</FormItem>
</FormList>
</Form>
</svelte:fragment>
+9
View File
@@ -0,0 +1,9 @@
import { isSelfHosted } from '$lib/system';
import { error } from '@sveltejs/kit';
import type { LayoutLoad } from './$types';
export const load: LayoutLoad = async () => {
if (isSelfHosted) {
throw error(501, 'Not available in self hosted.');
}
};
@@ -11,16 +11,16 @@
InputText
} from '$lib/elements/forms';
import { addNotification } from '$lib/stores/notifications';
import { endpoint, sdkForConsole } from '$lib/stores/sdk';
import { sdkForConsole } from '$lib/stores/sdk';
import { Unauthenticated } from '$lib/layout';
import FormList from '$lib/elements/forms/formList.svelte';
import { Dependencies } from '$lib/constants';
import { trackEvent } from '$lib/actions/analytics';
import { onMount } from 'svelte';
import { page } from '$app/stores';
import { isCloud } from '$lib/stores/app';
import LoginLight from '$lib/images/login/login-light-mode.svg';
import LoginDark from '$lib/images/login/login-dark-mode.svg';
import { isCloud } from '$lib/system';
let slug = $page.params.slug;
let imgLight = LoginLight;
@@ -28,6 +28,7 @@
onMount(async () => {
if (isCloud) {
code = slug;
switch (slug) {
case 'mlh':
imgDark = (await import('./mlh-dark.svg')).default;
@@ -38,8 +39,11 @@
imgDark = (await import('$lib/images/appwrite.svg')).default;
imgLight = (await import('$lib/images/appwrite.svg')).default;
title = 'Welcome Appwriters!';
break;
case 'cloud_beta':
break;
default:
code = '';
}
}
});
@@ -51,7 +55,7 @@
async function invite() {
try {
disabled = true;
const res = await fetch(`${endpoint}/account/invite`, {
const res = await fetch(`${sdkForConsole.client.config.endpoint}/account/invite`, {
method: 'POST',
headers: {
'Content-Type': 'application/json'
File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 63 KiB

After

Width:  |  Height:  |  Size: 66 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 63 KiB

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 204 KiB

Some files were not shown because too many files have changed in this diff Show More