Merge branch 'master' into km/update-docs

This commit is contained in:
Kang Ming committed 2023-08-16 12:24:26 +08:00
commit dde3be82ba
267 files changed
+1050 -640

No files matched your search

@@ -26,7 +26,7 @@ interface Props {
*
* In tsx files, we can generate this tocList directly. For these files, we don't
* need to parse the <a> and generate anchors. Custom anchors are used in tsx files.
* (see: /pages/reference/cli/config.tsx)
* (see: /pages/guides/cli/config.tsx)
*/
const Heading: React.FC<Props> = ({ tag, customAnchor, children }) => {
const HeadingTag = `${tag}` as any
@@ -568,6 +568,7 @@ export const database: NavMenuConstant = {
{ name: 'Implementing Cascade Deletes', url: '/guides/database/postgres/cascade-deletes' },
{ name: 'Implementing column encryption', url: '/guides/database/column-encryption' },
{ name: 'Partitioning your tables', url: '/guides/database/partitions' },
{ name: 'Query Optimization', url: '/guides/database/query-optimization' },
{ name: 'Testing your database', url: '/guides/database/testing' },
{ name: 'Managing Timeouts', url: '/guides/database/timeouts' },
{ name: 'Managing Passwords', url: '/guides/database/managing-passwords' },
@@ -588,6 +589,10 @@ export const database: NavMenuConstant = {
url: '/guides/database/extensions/plv8',
},
{ name: 'http: RESTful Client', url: '/guides/database/extensions/http' },
{
name: 'index_advisor: Query optimization',
url: '/guides/database/extensions/index_advisor',
},
{
name: 'PGAudit: Postgres Auditing',
url: '/guides/database/extensions/pgaudit',
@@ -1037,6 +1042,10 @@ export const supabase_cli: NavMenuConstant = {
name: 'Testing and linting',
url: '/guides/cli/testing-and-linting',
},
{
name: 'Customizing email templates',
url: '/guides/cli/customizing-email-templates',
},
],
},
{
@@ -95,7 +95,7 @@ const menus: Menu[] = [
},
{
id: 'supabase_cli',
// TODO: Add path '/reference/cli/config'
// TODO: Add path '/guides/cli/config'
path: '/guides/cli',
type: 'guide',
},
+6
View File
@@ -113,6 +113,12 @@
"tags": ["Admin", "Utility"],
"link": "https://www.postgresql.org/docs/current/oldsnapshot.html"
},
{
"name": "index_advisor",
"comment": "optimize query performance with automatic index recommendation",
"tags": ["Utility"],
"link": "/guides/database/extensions/index_advisor"
},
{
"name": "intarray",
"comment": "functions, operators, and index support for 1-D arrays of integers",
+1 -1
View File
@@ -4,7 +4,7 @@ const Nav = [
items: [
{ name: 'Supabase CLI', url: '/reference/cli', items: [] },
{ name: 'Usage', url: '/reference/cli/usage', items: [] },
{ name: 'Configuration', url: '/reference/cli/config', items: [] },
{ name: 'Configuration', url: '/guides/cli/config', items: [] },
{ name: 'Release Notes', url: '/reference/cli/release-notes', items: [] },
],
},
@@ -20,92 +20,100 @@ When self-hosting the Analytics server, the full logging experience matching tha
However, it's important to note that certain [differences](#differences) may arise due to the platform's infrastructure.
<Admonition type="info" label="Logflare Technical Docs">
All logflare technical docs are available at
[https://docs.logflare.app](https://docs.logflare.app)
All Logflare technical documentation is available at https://docs.logflare.app.
</Admonition>
## Backends Supported
The Analytics server supports either **Postgres** or **BigQuery** as the backend. The `supabase-cli` experience uses the Postgres backend out-of-the-box. However, the Supabase Platform uses the BigQuery backend for storing all platform logs.
When using the BigQuery backend, a BigQuery dataset is created in the provided Google Cloud project, and tables are created for each source. Log events are streamed into each table, and all queries generated by Studio or by the Logs Explorer are executed against the BigQuery API. This backend requires internet access to work, and cannot be run fully locally.
When using the Postgres backend, tables are created for each source within the provided schema (for supabase-cli, this would be `_analytics`). Log events received by Logflare are inserted directly into the respective tables. All BigQuery-dialect SQL queries from Studio will be handled by a translation layer within the Analytics server. This translation layer translates the query to PostgreSQL dialect, and then executes it against the Postgres database.
The Postgres backend is not yet optimized for a high volume of inserts, or for heavy query usage. Today the translation layer only handles a limited subset of the BigQuery dialect. As such, the [Log Explorer](https://supabase.com/docs/guides/platform/logs#logs-explorer) may produce errors for more advanced queries when using the Postgres Backend.
## Getting Started
### Pre-requisites
The Postgres backend is recommended when familiarizing and experimenting with self-hosting Supabase. For production, we recommend using the BigQuery backend. See [production recommendations](#production-recommendations) for more information.
Currently the Analytics service supports two backends for ingestion:
To set up logging in self-hosted Supabase, see the [docker-compose example](https://github.com/supabase/supabase/tree/master/docker).
Two compose services are required: Logflare, and Vector. Logflare is the HTTP Analytics server, while Vector is the logging pipeline to route all compose services' syslog to the Logflare sever.
- Postgres ingestion
- Big Query ingestion
Regardless of the backend chosen, the following environment variables **must** be set for the `supabase/logflare` docker image:
### Postgres Ingestion Requirements
- `LOGFLARE_SINGLE_TENANT_MODE=true`: The feature flag for enabling single tenant mode for Logflare. Must be set to `true`
- `LOGFLARE_SUPABASE_MODE=true`: The feature flag for seeding Supabase-related data. Must be set to `true`
- Requires you to use supabase/logflare:1.3.26 or above
- Requires the following environment variables set:
- Required - POSTGRES_BACKEND_URL: `postgresql://{POSTGRES_USER}:{POSTGRES_PASSWORD}@{POSTGRES_HOST}:{POSTGRES_PORT}/{POSTGRES_DB}`
- Optional - POSTGRES_BACKEND_SCHEMA: `{SCHEMA_NAME}`
For all other configuration environment variables, please refer to the [Logflare self-hosting documentation](https://docs.logflare.app/self-hosting/#configuration).
### Big Query Ingestion Requirements
## Postgres Backend Setup
- Google Cloud Account with billing enabled
- Big Query enabled
The remainder of the instructions are specified in the [Setup Big Query ingestion](#setup-big-query-ingestion) section.
#### Setup Big Query ingestion
Logflare currently requires BigQuery usage. You will need to create a Google Cloud project with billing enabled.
The requirements are as follows after creating the project:
- Project ID
- Project number
- A service account key
##### Setting up BigQuery Service Account
To ensure that you have sufficient permissions to insert into your Google Cloud BigQuery, ensure that you have created a service account with either:
- BigQuery Admin role; or
- The following permissions:
- bigquery.datasets.create
- bigquery.datasets.get
- bigquery.datasets.getIamPolicy
- bigquery.datasets.update
- bigquery.jobs.create
- bigquery.routines.create
- bigquery.routines.update
- bigquery.tables.create
- bigquery.tables.delete
- bigquery.tables.get
- bigquery.tables.getData
- bigquery.tables.update
- bigquery.tables.updateData
You can create the service account via the web console or `gcloud`, as per the [Google Cloud documentation](https://cloud.google.com/iam/docs/keys-create-delete). In the web console, you can create the key by navigating to IAM > Service Accounts > Actions (dropdown) > Manage Keys
We recommend setting the BigQuery Admin role, as it simplifies permissions setup.
##### Downloading the Service Account key
After the service account is created, you will need to create a key for the service account. This key will sign the JWTs for API requests that the Analytics server makes with BigQuery.
### Docker Compose
For analytics to work we're adding two services: Logflare and Vector.
Logflare is the analytics server that will ingest your logs into your preferred backend while Vector is the log router that will route all the docker logs using syslog unto Logflare.
#### Using the Postgres Backend
You can simply startup using the following command
The [example docker-compose](https://github.com/supabase/supabase/tree/master/docker) uses the Postgres backend out of the box.
```bash
# assuming you clone the supabase/supabase repo.
# clone the supabase/supabase repo, and run the following
cd docker
docker compose -f docker-compose.yml up
```
> ⚠️ WARNING: Please be aware of the heavy consumption of analytics. For heavy usage you might want to consider the usage of a different database for analytics only by updating the `POSTGRES_BACKEND_URL` in the `analytics` service on the `docker-compose.yml` file.
### Configuration and Requirements
Also be aware that you won't be able to use [Log Explorer](https://supabase.com/docs/guides/platform/logs#logs-explorer) when using the Postgres Backend as some of the querying features are still not supported by our translation layer.
- `supabase/logflare:1.4.0` or above
- Relevant environment variables:
- `POSTGRES_BACKEND_URL` : Required. The connection string to the Postgres database.
- `POSTGRES_BACKEND_SCHEMA` : Optional. Allows customization of the schema used to scope all backend operations within the database.
#### Using the Big Query Backend
## BigQuery Backend Setup
The BigQuery backend is a more robust and scalable backend option that is battle-tested and production ready. Use this backend if you intend to have heavy logging usage and require advanced querying features such as the Logs Explorer.
### Configuration and Requirements
The requirements are as follows after creating the project:
- Google Cloud project with billing enabled
- Project ID
- Project number
- A service account key.
<Admonition>
You must enable billing on your Google Cloud project, as a valid billing account is required for streaming inserts.
</Admonition>
#### Setting up BigQuery Service Account
The service account used must have sufficient permissions to insert into your Google Cloud BigQuery. Ensure that the service account has either:
- BigQuery Admin role; or
- The following permissions:
- `bigquery.datasets.create`
- `bigquery.datasets.get`
- `bigquery.datasets.getIamPolicy`
- `bigquery.datasets.update`
- `bigquery.jobs.create`
- `bigquery.routines.create`
- `bigquery.routines.update`
- `bigquery.tables.create`
- `bigquery.tables.delete`
- `bigquery.tables.get`
- `bigquery.tables.getData`
- `bigquery.tables.update`
- `bigquery.tables.updateData`
You can create the service account via the web console or `gcloud` CLI, as per the [Google Cloud documentation](https://cloud.google.com/iam/docs/keys-create-delete). In the web console, you can create the key by navigating to IAM > Service Accounts > Actions (dropdown) > Manage Keys
We recommend setting the BigQuery Admin role, as it simplifies permissions setup.
#### Download the Service Account Keys
After the service account is created, you will need to create a key for the service account. This key will sign the JWTs for API requests that the Analytics server makes with BigQuery. This can be done through the IAM section in Google Cloud console.
#### Docker Image Configuration
Using the example [self-hosting stack based on docker-compose](https://github.com/supabase/supabase/tree/master/docker), you include the logging related services using the following command
@@ -118,7 +126,7 @@ Using the example [self-hosting stack based on docker-compose](https://github.co
3. On `docker-compose.yml`, uncomment the block section below the commentary `# Uncomment to use Big Query backend for analytics`
4. On `docker-compose.yml`, comment the block section below the commentary `# Comment variables to use Big Query backend for analytics`
Thereafter, you can simply startup using the following command
Thereafter, you can start the example stack using the following command:
```bash
# assuming you clone the supabase/supabase repo.
@@ -126,55 +134,25 @@ cd docker
docker compose -f docker-compose.yml
```
<Admonition type="info" label="Self-hosting">
Read more about [self-hosting Logflare](https://docs.logflare.app/self-hosting) as your analytics
server.
</Admonition>
#### BigQuery Datset Storage Location
#### Vector Usage
Currently, all BigQuery datasets stored and managed by Analytics, whether via CLI or self-hosted, will default to the US region.
In the Docker Compose example, we utilize vector to coordinate the logging pipeline between the services. However, if you peer into the [vector configuration file](https://github.com/supabase/supabase/blob/master/docker/volumes/logs/vector.yml), you will be able to see that Vector sends logs to the Analytics ingestion endpoint.
## Vector Usage
If you need to customize the logging pipeline for your own needs, you must ensure that the payloads matches the expected event schema structure. Without the correct structure, it would cause the Studio Logs UI features to break.
In the Docker Compose example, Vector is used for the logging pipieline, where log events are forwarded to the Analytics API for ingestion.
### Standalone Docker Container
Please refer to the [Vector configuration file](https://github.com/supabase/supabase/blob/master/docker/volumes/logs/vector.yml) when customizing your own setup.
Supplementary technical documentation on self-hosting and using the `supabase/logflare` image for a full Logflare experience is available at the [official Logflare documentation](https://docs.logflare.app/self-hosting/).
You **must** ensure that the payloads matches the expected event schema structure. Without the correct structure, it would cause the Studio Logs UI features to break.
## Differences
## Differences from Platform
API logs rely on Kong instead of the Supabase Cloud API Gateway. Logs from Kong are not enriched with platform-only data.
Within the self-hosted setup, all logs are routed to Logflare via Vector. As Kong routes API requests to PostgREST, self-hosted or local deployments will result in Kong request logs instead.
This would result in differences in the log event metadata between self-hosted API requests and Supabase Platform requests.
## Postgres
Log event data is stored and queried from a Postgres database.
Make sure to set the `POSTGRES_BACKEND_URL` environment variable.
### Storage
All data will be stored on the Postgres Database configured by setting `POSTGRES_BACKEND_URL`
## BigQuery
All log event data is stored in and queried from BigQuery. To use the Analytics server with Supabase you'll need a Google Cloud Platform account for access to BigQuery.
Make sure to set the `GOOGLE_DATASET_ID_APPEND`, `GOOGLE_PROJECT_ID` and `GOOGLE_PROJECT_NUMBER` environment variables.
Download your Google Cloud API JWT and store it under gcloud.json in your working directory.
<Admonition>
You must also enable billing on your Google Cloud project, as the streaming inserts feature is
required.
</Admonition>
### Storage Location
Currently, all BigQuery datasets stored and managed by Analytics, whether via CLI or self-hosted, will default to the US region.
## Production Recommendations
To self-host in a production setting, we recommend performing the following for a better experience.
@@ -194,6 +172,8 @@ The self-hosted example is only used as a minimal example on running the entire
The current Postgres Ingestion backend isn't optimized for production usage. We recommend using Big Query for more heavy use cases.
**We recommend using the BigQuery backend for production environments as it offers better scaling and querying/debugging experiences.**
</RefSubLayout.Details>
<RefSubLayout.Examples>
@@ -0,0 +1,124 @@
import Layout from '~/layouts/DefaultGuideLayout'
export const meta = {
id: 'customizing-email-templates',
title: 'Customizing email templates',
description: 'Customizing local email templates using config.toml.',
subtitle: 'Customizing local email templates using config.toml.',
}
You can customize the email templates for local development [using the `config.toml` settings](/docs/guides/cli/config#auth-config).
## Configuring Templates
You should provide a relative URL to the `content_path` parameter, pointing to an HTML file which contains the template. For example
<CH.Code>
```toml supabase/config.toml
[auth.email.template.invite]
subject = "You are invited to Acme Inc"
content_path = "./supabase/templates/invite.html"
```
```html supabase/templates/invite.html
<html>
<body>
<h2>Confirm your signup</h2>
<p><a href="{{ .ConfirmationURL }}">Confirm your email</a></p>
</body>
</html>
```
</CH.Code>
## Available email templates
There are several Auth email templates which can be configured:
- `auth.email.template.invite`
- `auth.email.template.confirmation`
- `auth.email.template.recovery`
- `auth.email.template.magic_link`
- `auth.email.template.email_change`
## Template variables
The templating system provides the following variables for use:
### ConfirmationURL
Contains the confirmation URL. For example, a signup confirmation URL would look like:
```
https://project-ref.supabase.co/auth/v1/verify?token={{ .TokenHash }}&type=signup&redirect_to=https://example.com/path
```
**Usage**
```html
<p>Click here to confirm: {{ .ConfirmationURL }}</p>
```
### Token
Contains a 6-digit One-Time-Password (OTP) that can be used instead of the `ConfirmationURL`.
**Usage**
```html
<p>Here is your one time password: {{ .Token }}</p>
```
### TokenHash
Contains a hashed version of the `Token`. This is useful for constructing your own email link in the email template.
**Usage**
```html
<p>Follow this link to confirm your user:</p>
<p>
<a href="{{ .SiteURL }}/auth/confirm?token_hash={{ .TokenHash }}&type=email"
>Confirm your email</a
>
</p>
```
### SiteURL
Contains your application's Site URL. This can be configured in your project's [authentication settings](/dashboard/project/_/auth/url-configuration).
**Usage**
```html
<p>Visit <a href="{{ .SiteURL }}">here</a> to log in.</p>
```
### Email
Contains the user's email address.
**Usage**
```html
<p>A recovery request was sent to {{ .Email }}.</p>
```
### NewEmail
Contains the new user's email address. This is only available in the `email_change` email template.
**Usage**
```html
<p>You are requesting to update your email address to {{ .NewEmail }}.</p>
```
## Deploying email templates
These settings are only for local development. To update your hosted project, please copy the templates into the [Email Templates](/dashboard/project/_/auth/templates) section of the Dashboard.
export const Page = ({ children }) => <Layout meta={meta} children={children} />
export default Page
@@ -364,12 +364,12 @@ Associate your project with your remote project using [`supabase link`](/docs/re
supabase link --project-ref <project-id>
# You can get <project-id> from your project's dashboard URL: https://supabase.com/dashboard/project/<project-id>
supabase db remote commit
supabase db pull
# Capture any changes that you have made to your remote database before you went through the steps above
# If you have not made any changes to the remote database, skip this step
```
`supabase/migrations` is now populated with a migration in `..._remote_commit.sql`.
`supabase/migrations` is now populated with a migration in `<timestamp>_remote_schema.sql`.
This migration captures any changes required for your local database to match the schema of your remote Supabase project.
<Admonition type="note">
@@ -420,7 +420,7 @@ For these changes to take effect, you need to run `supabase stop` and `supabase
If you have additional triggers or RLS policies defined on your `auth` schema, you can pull them as a migration file locally.
```bash
supabase db remote commit --schema auth
supabase db pull --schema auth
```
### Local Logging
@@ -12,7 +12,7 @@ The Supabase CLI uses a `config.toml` file to manage local configuration. This f
The `config.toml` file is automatically created when you run `supabase start`.
There are a wide variety of options available, which can be found in the [CLI Config Reference](/docs/reference/cli/config).
There are a wide variety of options available, which can be found in the [CLI Config Reference](/docs/guides/cli/config).
For example, to enable the "Apple" OAuth provider for local development, you can append the following information to `config.toml`:
@@ -38,10 +38,10 @@ If you're using an existing Supabase project, you might have made schema changes
Run the following command to pull these changes before making local schema changes from the CLI:
```sql
supabase db remote commit
supabase db pull
```
This command creates a new migration in `supabase/migrations/<timestamp>_remote_commit.sql` which reflects the schema changes you have made previously.
This command creates a new migration in `supabase/migrations/<timestamp>_remote_schema.sql` which reflects the schema changes you have made previously.
Now commit your local changes to Git and run the local development setup:
@@ -348,9 +348,9 @@ Once pushed, check that the migration version is up to date for both local and r
supabase migration list
```
### Permission denied on db remote commit
### Permission denied on db pull
If you have been using Supabase hosted projects for a long time, you might encounter the following permission error when executing `db remote commit`.
If you have been using Supabase hosted projects for a long time, you might encounter the following permission error when executing `db pull`.
```bash
Error: Error running pg_dump on remote database: pg_dump: error: query failed: ERROR: permission denied for table _type
@@ -0,0 +1,161 @@
import Layout from '~/layouts/DefaultGuideLayout'
export const meta = {
id: 'index-advisor',
title: 'index_advisor: query optimization',
description: 'Automatically optimize SQL queries',
}
[Index advisor](https://github.com/supabase/index_advisor) is a Postgres extension for recommending indexes to improve query performance.
For example:
```sql
select
*
from
index_advisor('select book.id from book where title = $1');
startup_cost_before | startup_cost_after | total_cost_before | total_cost_after | index_statements | errors
---------------------+--------------------+-------------------+------------------+-----------------------------------------------------+--------
0.00 | 1.17 | 25.88 | 6.40 | {"CREATE INDEX ON public.book USING btree (title)"},| {}
(1 row)
```
Features:
- Supports generic parameters e.g. `$1`, `$2`
- Supports materialized views
- Identifies tables/columns obfuscaed by views
- Skips duplicate indexes
## Installation
index_advisor is a trusted language extension, which means it is directly installable by users from the [database.dev](database.dev) SQL package repository.
To get started, enable the dbdev client by executing the [setup SQL script](https://database.dev/installer).
Then, install index_advisor by running
```sql
select dbdev.install('olirice-index_advisor');
create extension if not exists hypopg;
create extension "olirice-index_advisor";
```
## API
Index advisor exposes a single function `index_advisor(query text)` that accepts a query and searches for a set of SQL DDL `create index` statements that improve the query's execution time.
The function's signature is:
```sql
index_advisor(query text)
returns
table (
startup_cost_before jsonb,
startup_cost_after jsonb,
total_cost_before jsonb,
total_cost_after jsonb,
index_statements text[],
errors text[]
)
```
## Usage
As a minimal example, the `index_advisor` function can be given a single table query with a filter on an unindexed column.
```sql
create extension if not exists index_advisor cascade;
create table book(
id int primary key,
title text not null
);
select
*
from
index_advisor('select book.id from book where title = $1');
startup_cost_before | startup_cost_after | total_cost_before | total_cost_after | index_statements | errors
---------------------+--------------------+-------------------+------------------+-----------------------------------------------------+--------
0.00 | 1.17 | 25.88 | 6.40 | {"CREATE INDEX ON public.book USING btree (title)"},| {}
(1 row)
```
and will return a row recommending an index on the unindexed column.
More complex queries may generate additional suggested indexes:
```sql
create extension if not exists index_advisor cascade;
create table author(
id serial primary key,
name text not null
);
create table publisher(
id serial primary key,
name text not null,
corporate_address text
);
create table book(
id serial primary key,
author_id int not null references author(id),
publisher_id int not null references publisher(id),
title text
);
create table review(
id serial primary key,
book_id int references book(id),
body text not null
);
select
*
from
index_advisor('
select
book.id,
book.title,
publisher.name as publisher_name,
author.name as author_name,
review.body review_body
from
book
join publisher
on book.publisher_id = publisher.id
join author
on book.author_id = author.id
join review
on book.id = review.book_id
where
author.id = $1
and publisher.id = $2
');
startup_cost_before | startup_cost_after | total_cost_before | total_cost_after | index_statements | errors
---------------------+--------------------+-------------------+------------------+-----------------------------------------------------------+--------
27.26 | 12.77 | 68.48 | 42.37 | {"CREATE INDEX ON public.book USING btree (author_id)", | {}
"CREATE INDEX ON public.book USING btree (publisher_id)",
"CREATE INDEX ON public.review USING btree (book_id)"}
(3 rows)
```
## Limitations
- index_advisor will only recommend single column, B-tree indexes. More complex indexes will be supported in future releases.
- when a generic argument's type is not discernible from context, an error is returned in the `errors` field. To resolve those errors, add explicit type casting to the argument. e.g. `$1::int`.
## Resources
- Official [`index_advisor` GitHub Repository](https://github.com/supabase/index_advisor)
export const Page = ({ children }) => <Layout meta={meta} children={children} />
export default Page
@@ -0,0 +1,134 @@
import Layout from '~/layouts/DefaultGuideLayout'
export const meta = {
title: 'Query Optimization',
description: 'Choosing indexes',
footerHelpType: 'postgres',
}
When working with PostgreSQL, or any relational database, indexing is key to improving query performance.
Aligning indexes with common query patterns can speed up data retrieval by an order of magnitude.
This guide is intended to:
- help identify parts of a query that have the potential to be improved by indexes
- introduce tooling to help identify useful indexes
This is not a comprehensive resource, but rather a helpful starting point for your optimization journey.
If you're new to query optimization, you may be interested in [index_advisor](/docs/guides/database/extensions/index_advisor), our tool for automatically detecting indexes that improve performance on a given query.
## Example Query
Consider the following example query that retrieves customer names and purchase dates from two tables:
```sql
select
a.name,
b.date_of_purchase
from
customers a
join orders b
on a.id = b.customer_id
where
a.sign_up_date > '2023-01-01'
and b.status = 'shipped'
order by
b.date_of_purchase;
limit 10
```
In this query, there are several parts that indexes could likely help in optimizing the performance:
### `where` Clause:
The `where` clause filters rows based on certain conditions, and indexing the columns involved can improve this process:
- `a.sign_up_date`: If filtering by `sign_up_date` is common, indexing this column can speed up the query.
- `b.status`: Indexing the status may be beneficial if the column has diverse values.
```sql
create index idx_customers_sign_up_date on customers (sign_up_date);
create index idx_orders_status on orders (status);
```
### `join` Columns
Indexes on the columns used for joining tables can help Postgres avoid scanning tables in their entirety when connecting tables.
- Indexing and `b.customer_id` would likely improve the performance of the join in this query.
- Note that if `a.id` is the primary key of the `customers` table it is already indexed
```sql
create index idx_orders_customer_id on orders (customer_id);
```
### `order by` Clause
Sorting can also be optimized by indexing:
- An index on `b.date_of_purchase` wcan improve the sorting process, and is particularly beneficial when a subset of rows is being returned with a `limit` clause.
```sql
create index idx_orders_date_of_purchase on orders (date_of_purchase);
```
## Key Concepts
Here are some concepts and tools to keep in mind to help you identify the best index for the job, and measure the impact that your index had:
### Analyze the Query Plan
Use the `explain` command to understand the query's execution. Look for slow parts, such as Sequential Scans or high cost numbers. If creating an index does not reduce the cost of the query plan, remove it.
For example:
```sql
explain select * from customers where sign_up_date > 25;
```
### Use Appropriate Index Types
PostgreSQL offers various index types like [B-tree, Hash, GIN, etc](https://www.postgresql.org/docs/current/indexes-types.html). Select the type that best suits your data and query pattern. Using the right index type can make a significant difference. For example, using a BRIN index on a field that always increases and lives within a table that updates infrequently - like `created_at` on an `orders` table - routinely results in indexes that are +10x smaller than the equivalent default B-tree index. That translates into better scalability.
```sql
create index idx_orders_created_at ON customers using brin(created_at);
```
### Partial Indexes
For queries that frequently target a subset of data, a partial index could be faster and smaller than indexing the entire column. A partial index contains a `where` clause to filter the values included in the index. Note that a query's `where` clause must match the index for it to be used.
```sql
create index idx_orders_status on orders (status)
where status = 'shipped';
```
### Composite Indexes
If filtering or joining on multiple columns, a composite index prevents Postgres from referring to multiple indexes when identifying the relevant rows.
```sql
create index idx_customers_sign_up_date_priority on customers (sign_up_date, priority);
```
### Over-Indexing
Avoid the urge to index columns you operate on infrequently. While indexes can speed up reads, they also slow down writes, so it's important to balance those factors when making indexing decisions.
### Statistics
Postgres maintains a set of statistics about the contents of your tables. Those statistics are used by the query planner to decide when it's is more efficient to use an index vs scanning the entire table. If the collected statistics drift too far from reality, the query planner may make poor decisions. To avoid this risk, you can periodically `analyze` tables.
```sql
analyze customers;
```
---
By following this guide, you'll be able to discern where indexes can optimize queries and enhance your PostgreSQL performance. Remember that each database is unique, so always consider the specific context and use case of your queries.
export const Page = ({ children }) => <Layout meta={meta} children={children} />
export default Page
@@ -38,7 +38,7 @@ jobs:
Since Supabase CLI [v1.62.0](https://github.com/supabase/cli/releases/tag/v1.62.0) you can deploy all functions with a single command.
Individual function configuration like [JWT verification](/docs/reference/cli/config#functions.function_name.verify_jwt) and [import map location](/docs/reference/cli/config#functions.function_name.import_map) can be set via the `config.toml` file.
Individual function configuration like [JWT verification](/docs/guides/cli/config#functions.function_name.verify_jwt) and [import map location](/docs/guides/cli/config#functions.function_name.import_map) can be set via the `config.toml` file.
```toml
[functions.hello-world]
@@ -47,7 +47,7 @@ jobs:
Since Supabase CLI [v1.62.0](https://github.com/supabase/cli/releases/tag/v1.62.0) you can deploy all functions with a single command.
Individual function configuration like [JWT verification](/docs/reference/cli/config#functions.function_name.verify_jwt) and [import map location](/docs/reference/cli/config#functions.function_name.import_map) can be set via the `config.toml` file.
Individual function configuration like [JWT verification](/docs/guides/cli/config#functions.function_name.verify_jwt) and [import map location](/docs/guides/cli/config#functions.function_name.import_map) can be set via the `config.toml` file.
```toml
[functions.hello-world]
@@ -66,7 +66,7 @@ supabase functions deploy
Since Supabase CLI [v1.62.0](https://github.com/supabase/cli/releases/tag/v1.62.0) you can deploy all functions with a single command. This is useful for example when [deploying with GitHub Actions](/docs/guides/functions/cicd-workflow).
Individual function configuration like [JWT verification](/docs/reference/cli/config#functions.function_name.verify_jwt) and [import map location](/docs/reference/cli/config#functions.function_name.import_map) can be set via the `config.toml` file.
Individual function configuration like [JWT verification](/docs/guides/cli/config#functions.function_name.verify_jwt) and [import map location](/docs/guides/cli/config#functions.function_name.import_map) can be set via the `config.toml` file.
```toml
[functions.hello-world]
@@ -17,6 +17,7 @@ Out of scope vulnerabilities:
- Missing DNSSEC, CAA, CSP headers
- Lack of Secure or HTTP only flag on non-sensitive cookies
- Deadlinks
- User enumeration
Please do the following:
@@ -0,0 +1,27 @@
<svg width="815" height="162" viewBox="0 0 815 162" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_2993_107746)">
<path d="M78.033 6.95738C77.9338 0.333847 69.5817 -2.50871 65.4626 2.67912L3.30264 80.9655C-4.03421 90.2058 2.5462 103.833 14.345 103.833H78.7992L79.3812 154.281C79.4804 160.905 87.8324 163.747 91.9515 158.559L154.111 80.2729C161.448 71.0327 154.868 57.4053 143.069 57.4053H78.4769L78.033 6.95738Z" fill="url(#paint0_linear_2993_107746)"/>
<path d="M91.9671 158.572C87.848 163.759 79.4961 160.917 79.3969 154.294L78.3438 57.418H143.085C154.883 57.418 161.463 71.0453 154.127 80.2856L91.9671 158.572Z" fill="url(#paint1_linear_2993_107746)"/>
<path d="M214.303 98.5992C215.14 106.344 222.265 119.62 242.941 119.62C260.962 119.62 269.625 108.28 269.625 97.2164C269.625 87.2589 262.778 79.0995 249.228 76.3333L239.448 74.259C235.677 73.5676 233.162 71.4932 233.162 68.174C233.162 64.3016 237.074 61.3976 241.964 61.3976C249.786 61.3976 252.72 66.5144 253.279 70.5252L268.786 67.0677C267.948 59.738 261.381 47.4297 241.824 47.4297C227.015 47.4297 216.119 57.5253 216.119 69.6952C216.119 79.2376 222.125 87.1208 235.397 90.0248L244.478 92.0993C249.786 93.2056 251.882 95.6952 251.882 98.7376C251.882 102.333 248.949 105.514 242.801 105.514C234.699 105.514 230.647 100.535 230.229 95.1417L214.303 98.5992Z" fill="white"/>
<path d="M329.002 117.546H346.744C346.464 115.195 346.045 110.493 346.045 105.237V49.5039H327.463V89.0566C327.463 96.9397 322.714 102.471 314.473 102.471C305.811 102.471 301.898 96.3864 301.898 88.7801V49.5039H283.318V92.5142C283.318 107.312 292.817 119.344 309.443 119.344C316.706 119.344 324.672 116.578 328.444 110.216C328.444 112.982 328.722 116.163 329.002 117.546Z" fill="white"/>
<path d="M384.452 143.824V110.909C387.804 115.473 394.79 119.207 404.29 119.207C423.708 119.207 436.699 103.994 436.699 83.3882C436.699 63.1971 425.105 47.9844 404.988 47.9844C394.651 47.9844 386.967 52.548 383.894 57.8035V49.5056H365.873V143.824H384.452ZM418.398 83.5266C418.398 95.6969 410.856 102.75 401.355 102.75C391.857 102.75 384.173 95.5585 384.173 83.5266C384.173 71.4948 391.857 64.4416 401.355 64.4416C410.856 64.4416 418.398 71.4948 418.398 83.5266Z" fill="white"/>
<path d="M447.223 99.0142C447.223 109.663 456.162 119.482 470.833 119.482C481.028 119.482 487.595 114.78 491.087 109.386C491.087 112.014 491.366 115.748 491.786 117.546H508.829C508.409 115.195 507.993 110.354 507.993 106.759V73.2909C507.993 59.5996 499.889 47.4297 478.097 47.4297C459.656 47.4297 449.736 59.1846 448.62 69.8336L465.104 73.2909C465.663 67.3442 470.133 62.2273 478.234 62.2273C486.059 62.2273 489.831 66.2378 489.831 71.0782C489.831 73.4293 488.575 75.3656 484.662 75.9187L467.759 78.408C456.304 80.0676 447.223 86.844 447.223 99.0142ZM474.742 105.791C468.737 105.791 465.801 101.918 465.801 97.9079C465.801 92.6526 469.573 90.0248 474.324 89.3335L489.831 86.9824V90.0248C489.831 102.057 482.566 105.791 474.742 105.791Z" fill="white"/>
<path d="M544.745 117.545V109.247C548.375 115.056 555.639 119.204 565.14 119.204C584.7 119.204 597.553 103.853 597.553 83.2472C597.553 63.0558 585.956 47.705 565.839 47.705C555.639 47.705 548.097 52.1305 545.023 56.9706V17.418H526.723V117.545H544.745ZM578.97 83.3853C578.97 95.8322 571.427 102.747 561.926 102.747C552.567 102.747 544.745 95.694 544.745 83.3853C544.745 70.9386 552.567 64.1622 561.926 64.1622C571.427 64.1622 578.97 70.9386 578.97 83.3853Z" fill="white"/>
<path d="M608.072 99.0142C608.072 109.663 617.012 119.482 631.681 119.482C641.878 119.482 648.446 114.78 651.936 109.386C651.936 112.014 652.217 115.748 652.635 117.546H669.679C669.262 115.195 668.842 110.354 668.842 106.759V73.2909C668.842 59.5996 660.739 47.4297 638.945 47.4297C620.505 47.4297 610.587 59.1846 609.469 69.8336L625.952 73.2909C626.513 67.3442 630.983 62.2273 639.084 62.2273C646.909 62.2273 650.68 66.2378 650.68 71.0782C650.68 73.4293 649.423 75.3656 645.511 75.9187L628.609 78.408C617.153 80.0676 608.072 86.844 608.072 99.0142ZM635.593 105.791C629.586 105.791 626.651 101.918 626.651 97.9079C626.651 92.6526 630.422 90.0248 635.174 89.3335L650.68 86.9824V90.0248C650.68 102.057 643.416 105.791 635.593 105.791Z" fill="white"/>
<path d="M681.701 98.5992C682.537 106.344 689.663 119.62 710.338 119.62C728.36 119.62 737.021 108.28 737.021 97.2164C737.021 87.2589 730.177 79.0995 716.625 76.3333L706.845 74.259C703.074 73.5676 700.561 71.4932 700.561 68.174C700.561 64.3016 704.471 61.3976 709.361 61.3976C717.186 61.3976 720.118 66.5144 720.679 70.5252L736.184 67.0677C735.345 59.738 728.78 47.4297 709.222 47.4297C694.412 47.4297 683.518 57.5253 683.518 69.6952C683.518 79.2376 689.522 87.1208 702.796 90.0248L711.876 92.0993C717.186 93.2056 719.281 95.6952 719.281 98.7376C719.281 102.333 716.347 105.514 710.2 105.514C702.096 105.514 698.047 100.535 697.627 95.1417L681.701 98.5992Z" fill="white"/>
<path d="M765.241 75.7803C765.661 69.557 770.971 62.3654 780.609 62.3654C791.226 62.3654 795.698 69.0038 795.977 75.7803H765.241ZM797.794 93.4824C795.558 99.5672 790.808 103.855 782.146 103.855C772.925 103.855 765.241 97.3545 764.825 88.3655H813.998C813.998 88.0885 814.276 85.3228 814.276 82.6951C814.276 60.8442 801.565 47.4297 780.33 47.4297C762.729 47.4297 746.521 61.5357 746.521 83.2484C746.521 106.205 763.145 119.62 782.006 119.62C798.91 119.62 809.807 109.801 813.3 98.046L797.794 93.4824Z" fill="white"/>
</g>
<defs>
<linearGradient id="paint0_linear_2993_107746" x1="36.6621" y1="8.85717" x2="88.678" y2="51.9544" gradientUnits="userSpaceOnUse">
<stop stop-color="#763AFF"/>
<stop offset="1" stop-color="#5A099A"/>
</linearGradient>
<linearGradient id="paint1_linear_2993_107746" x1="53.6505" y1="51.8862" x2="138.597" y2="113.864" gradientUnits="userSpaceOnUse">
<stop stop-color="#5C00AA"/>
<stop offset="1" stop-color="#7156DA"/>
</linearGradient>
<clipPath id="clip0_2993_107746">
<rect width="814.056" height="161.238" fill="white" transform="translate(0.21875)"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 5.8 KiB

@@ -1,23 +0,0 @@
<svg width="581" height="113" viewBox="0 0 581 113" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M151.397 66.7608C151.996 72.3621 157.091 81.9642 171.877 81.9642C184.764 81.9642 190.959 73.7624 190.959 65.7607C190.959 58.559 186.063 52.6577 176.373 50.6571L169.379 49.1569C166.682 48.6568 164.884 47.1565 164.884 44.7559C164.884 41.9552 167.681 39.8549 171.178 39.8549C176.772 39.8549 178.87 43.5556 179.27 46.4564L190.359 43.9558C189.76 38.6546 185.064 29.7527 171.078 29.7527C160.488 29.7527 152.696 37.0543 152.696 45.8561C152.696 52.7576 156.991 58.4591 166.482 60.5594L172.976 62.0598C176.772 62.8599 178.271 64.6605 178.271 66.8609C178.271 69.4615 176.173 71.762 171.777 71.762C165.983 71.762 163.085 68.1611 162.786 64.2602L151.397 66.7608Z" fill="white"/>
<path d="M233.421 80.4639H246.109C245.909 78.7635 245.609 75.3628 245.609 71.5618V31.2529H232.321V59.8592C232.321 65.5606 228.925 69.5614 223.031 69.5614C216.837 69.5614 214.039 65.1604 214.039 59.6592V31.2529H200.752V62.3599C200.752 73.0622 207.545 81.7642 219.434 81.7642C224.628 81.7642 230.325 79.7638 233.022 75.1627C233.022 77.1631 233.221 79.4636 233.421 80.4639Z" fill="white"/>
<path d="M273.076 99.4682V75.663C275.473 78.9636 280.469 81.6644 287.263 81.6644C301.149 81.6644 310.439 70.6617 310.439 55.7584C310.439 41.1553 302.148 30.1528 287.762 30.1528C280.37 30.1528 274.875 33.4534 272.677 37.2544V31.253H259.79V99.4682H273.076ZM297.352 55.8585C297.352 64.6606 291.958 69.7616 285.164 69.7616C278.372 69.7616 272.877 64.5605 272.877 55.8585C272.877 47.1566 278.372 42.0554 285.164 42.0554C291.958 42.0554 297.352 47.1566 297.352 55.8585Z" fill="white"/>
<path d="M317.964 67.0609C317.964 74.7627 324.357 81.8643 334.848 81.8643C342.139 81.8643 346.835 78.4634 349.332 74.5625C349.332 76.463 349.532 79.1635 349.832 80.4639H362.02C361.72 78.7635 361.422 75.2627 361.422 72.6622V48.4567C361.422 38.5545 355.627 29.7527 340.043 29.7527C326.855 29.7527 319.761 38.2544 318.963 45.9562L330.751 48.4567C331.151 44.1558 334.348 40.455 340.141 40.455C345.737 40.455 348.434 43.3556 348.434 46.8564C348.434 48.5568 347.536 49.9572 344.738 50.3572L332.65 52.1576C324.458 53.3579 317.964 58.2589 317.964 67.0609ZM337.644 71.962C333.349 71.962 331.25 69.1614 331.25 66.2608C331.25 62.4599 333.947 60.5594 337.345 60.0594L348.434 58.359V60.5594C348.434 69.2615 343.239 71.962 337.644 71.962Z" fill="white"/>
<path d="M387.703 80.4641V74.4627C390.299 78.6637 395.494 81.6644 402.288 81.6644C416.276 81.6644 425.467 70.5618 425.467 55.6585C425.467 41.0552 417.174 29.9528 402.788 29.9528C395.494 29.9528 390.1 33.1535 387.902 36.6541V8.04785H374.815V80.4641H387.703ZM412.178 55.7584C412.178 64.7605 406.784 69.7616 399.99 69.7616C393.297 69.7616 387.703 64.6606 387.703 55.7584C387.703 46.7564 393.297 41.8554 399.99 41.8554C406.784 41.8554 412.178 46.7564 412.178 55.7584Z" fill="white"/>
<path d="M432.99 67.0609C432.99 74.7627 439.383 81.8643 449.873 81.8643C457.165 81.8643 461.862 78.4634 464.358 74.5625C464.358 76.463 464.559 79.1635 464.858 80.4639H477.046C476.748 78.7635 476.448 75.2627 476.448 72.6622V48.4567C476.448 38.5545 470.653 29.7527 455.068 29.7527C441.881 29.7527 434.788 38.2544 433.989 45.9562L445.776 48.4567C446.177 44.1558 449.374 40.455 455.167 40.455C460.763 40.455 463.46 43.3556 463.46 46.8564C463.46 48.5568 462.561 49.9572 459.763 50.3572L447.676 52.1576C439.484 53.3579 432.99 58.2589 432.99 67.0609ZM452.671 71.962C448.375 71.962 446.276 69.1614 446.276 66.2608C446.276 62.4599 448.973 60.5594 452.371 60.0594L463.46 58.359V60.5594C463.46 69.2615 458.265 71.962 452.671 71.962Z" fill="white"/>
<path d="M485.645 66.7608C486.243 72.3621 491.339 81.9642 506.124 81.9642C519.012 81.9642 525.205 73.7624 525.205 65.7607C525.205 58.559 520.311 52.6577 510.62 50.6571L503.626 49.1569C500.929 48.6568 499.132 47.1565 499.132 44.7559C499.132 41.9552 501.928 39.8549 505.425 39.8549C511.021 39.8549 513.118 43.5556 513.519 46.4564L524.607 43.9558C524.007 38.6546 519.312 29.7527 505.326 29.7527C494.735 29.7527 486.944 37.0543 486.944 45.8561C486.944 52.7576 491.238 58.4591 500.73 60.5594L507.224 62.0598C511.021 62.8599 512.519 64.6605 512.519 66.8609C512.519 69.4615 510.421 71.762 506.025 71.762C500.23 71.762 497.334 68.1611 497.034 64.2602L485.645 66.7608Z" fill="white"/>
<path d="M545.385 50.2571C545.685 45.7562 549.482 40.5549 556.375 40.5549C563.967 40.5549 567.165 45.3561 567.365 50.2571H545.385ZM568.664 63.0601C567.065 67.4609 563.668 70.5617 557.474 70.5617C550.88 70.5617 545.385 65.8606 545.087 59.3593H580.252C580.252 59.159 580.451 57.1587 580.451 55.2582C580.451 39.4547 571.361 29.7527 556.175 29.7527C543.588 29.7527 531.998 39.9548 531.998 55.6584C531.998 72.262 543.886 81.9642 557.374 81.9642C569.462 81.9642 577.255 74.8626 579.753 66.3607L568.664 63.0601Z" fill="white"/>
<path d="M63.7076 110.284C60.8481 113.885 55.0502 111.912 54.9813 107.314L53.9738 40.0627L99.1935 40.0627C107.384 40.0627 111.952 49.5228 106.859 55.9374L63.7076 110.284Z" fill="url(#paint0_linear)"/>
<path d="M63.7076 110.284C60.8481 113.885 55.0502 111.912 54.9813 107.314L53.9738 40.0627L99.1935 40.0627C107.384 40.0627 111.952 49.5228 106.859 55.9374L63.7076 110.284Z" fill="url(#paint1_linear)" fill-opacity="0.2"/>
<path d="M45.317 2.07103C48.1765 -1.53037 53.9745 0.442937 54.0434 5.041L54.4849 72.2922H9.83113C1.64038 72.2922 -2.92775 62.8321 2.1655 56.4175L45.317 2.07103Z" fill="#3ECF8E"/>
<defs>
<linearGradient id="paint0_linear" x1="53.9738" y1="54.974" x2="94.1635" y2="71.8295" gradientUnits="userSpaceOnUse">
<stop stop-color="#249361"/>
<stop offset="1" stop-color="#3ECF8E"/>
</linearGradient>
<linearGradient id="paint1_linear" x1="36.1558" y1="30.578" x2="54.4844" y2="65.0806" gradientUnits="userSpaceOnUse">
<stop/>
<stop offset="1" stop-opacity="0"/>
</linearGradient>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 5.7 KiB

@@ -0,0 +1,27 @@
<svg width="815" height="163" viewBox="0 0 815 163" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_2993_107784)">
<path d="M78.033 7.723C77.9338 1.09947 69.5817 -1.74309 65.4626 3.44475L3.30264 81.7311C-4.03421 90.9714 2.5462 104.599 14.345 104.599H78.7992L79.3812 155.047C79.4804 161.67 87.8324 164.512 91.9515 159.325L154.111 81.0385C161.448 71.7983 154.868 58.1709 143.069 58.1709H78.4769L78.033 7.723Z" fill="url(#paint0_linear_2993_107784)"/>
<path d="M91.9671 159.338C87.848 164.525 79.4961 161.683 79.3969 155.059L78.3438 58.1836H143.085C154.883 58.1836 161.463 71.8109 154.127 81.0512L91.9671 159.338Z" fill="url(#paint1_linear_2993_107784)"/>
<path d="M214.303 99.3648C215.14 107.11 222.265 120.386 242.941 120.386C260.962 120.386 269.625 109.046 269.625 97.982C269.625 88.0246 262.778 79.8651 249.228 77.0989L239.448 75.0247C235.677 74.3332 233.162 72.2588 233.162 68.9396C233.162 65.0672 237.074 62.1632 241.964 62.1632C249.786 62.1632 252.72 67.28 253.279 71.2908L268.786 67.8333C267.948 60.5036 261.381 48.1953 241.824 48.1953C227.015 48.1953 216.119 58.2909 216.119 70.4608C216.119 80.0032 222.125 87.8864 235.397 90.7904L244.478 92.865C249.786 93.9712 251.882 96.4608 251.882 99.5032C251.882 103.099 248.949 106.28 242.801 106.28C234.699 106.28 230.647 101.301 230.229 95.9074L214.303 99.3648Z" fill="black"/>
<path d="M329.002 118.311H346.744C346.464 115.96 346.045 111.258 346.045 106.003V50.2695H327.463V89.8223C327.463 97.7053 322.714 103.237 314.473 103.237C305.811 103.237 301.898 97.152 301.898 89.5457V50.2695H283.318V93.2799C283.318 108.077 292.817 120.109 309.443 120.109C316.706 120.109 324.672 117.343 328.444 110.982C328.444 113.748 328.722 116.928 329.002 118.311Z" fill="black"/>
<path d="M384.452 144.589V111.675C387.804 116.239 394.79 119.973 404.29 119.973C423.708 119.973 436.699 104.76 436.699 84.1538C436.699 63.9627 425.105 48.75 404.988 48.75C394.651 48.75 386.967 53.3136 383.894 58.5691V50.2712H365.873V144.589H384.452ZM418.398 84.2922C418.398 96.4625 410.856 103.515 401.355 103.515C391.857 103.515 384.173 96.3241 384.173 84.2922C384.173 72.2604 391.857 65.2072 401.355 65.2072C410.856 65.2072 418.398 72.2604 418.398 84.2922Z" fill="black"/>
<path d="M447.223 99.7798C447.223 110.429 456.162 120.248 470.833 120.248C481.028 120.248 487.595 115.546 491.087 110.152C491.087 112.78 491.366 116.514 491.786 118.312H508.829C508.409 115.96 507.993 111.12 507.993 107.524V74.0565C507.993 60.3652 499.889 48.1953 478.097 48.1953C459.656 48.1953 449.736 59.9503 448.62 70.5992L465.104 74.0565C465.663 68.1099 470.133 62.9929 478.234 62.9929C486.059 62.9929 489.831 67.0035 489.831 71.8439C489.831 74.1949 488.575 76.1312 484.662 76.6843L467.759 79.1736C456.304 80.8332 447.223 87.6096 447.223 99.7798ZM474.742 106.556C468.737 106.556 465.801 102.684 465.801 98.6735C465.801 93.4182 469.573 90.7904 474.324 90.0991L489.831 87.748V90.7904C489.831 102.822 482.566 106.556 474.742 106.556Z" fill="black"/>
<path d="M544.745 118.31V110.013C548.375 115.821 555.639 119.97 565.14 119.97C584.7 119.97 597.553 104.619 597.553 84.0128C597.553 63.8215 585.956 48.4706 565.839 48.4706C555.639 48.4706 548.097 52.8961 545.023 57.7362V18.1836H526.723V118.31H544.745ZM578.97 84.151C578.97 96.5978 571.427 103.513 561.926 103.513C552.567 103.513 544.745 96.4596 544.745 84.151C544.745 71.7043 552.567 64.9279 561.926 64.9279C571.427 64.9279 578.97 71.7043 578.97 84.151Z" fill="black"/>
<path d="M608.072 99.7798C608.072 110.429 617.012 120.248 631.681 120.248C641.878 120.248 648.446 115.546 651.936 110.152C651.936 112.78 652.217 116.514 652.635 118.312H669.679C669.262 115.96 668.842 111.12 668.842 107.524V74.0565C668.842 60.3652 660.739 48.1953 638.945 48.1953C620.505 48.1953 610.587 59.9503 609.469 70.5992L625.952 74.0565C626.513 68.1099 630.983 62.9929 639.084 62.9929C646.909 62.9929 650.68 67.0035 650.68 71.8439C650.68 74.1949 649.423 76.1312 645.511 76.6843L628.609 79.1736C617.153 80.8332 608.072 87.6096 608.072 99.7798ZM635.593 106.556C629.586 106.556 626.651 102.684 626.651 98.6735C626.651 93.4182 630.422 90.7904 635.174 90.0991L650.68 87.748V90.7904C650.68 102.822 643.416 106.556 635.593 106.556Z" fill="black"/>
<path d="M681.701 99.3648C682.537 107.11 689.663 120.386 710.338 120.386C728.36 120.386 737.021 109.046 737.021 97.982C737.021 88.0246 730.177 79.8651 716.625 77.0989L706.845 75.0247C703.074 74.3332 700.561 72.2588 700.561 68.9396C700.561 65.0672 704.471 62.1632 709.361 62.1632C717.186 62.1632 720.118 67.28 720.679 71.2908L736.184 67.8333C735.345 60.5036 728.78 48.1953 709.222 48.1953C694.412 48.1953 683.518 58.2909 683.518 70.4608C683.518 80.0032 689.522 87.8864 702.796 90.7904L711.876 92.865C717.186 93.9712 719.281 96.4608 719.281 99.5032C719.281 103.099 716.347 106.28 710.2 106.28C702.096 106.28 698.047 101.301 697.627 95.9074L681.701 99.3648Z" fill="black"/>
<path d="M765.241 76.5459C765.661 70.3227 770.971 63.1311 780.609 63.1311C791.226 63.1311 795.698 69.7695 795.977 76.5459H765.241ZM797.794 94.248C795.558 100.333 790.808 104.62 782.146 104.62C772.925 104.62 765.241 98.1202 764.825 89.1311H813.998C813.998 88.8542 814.276 86.0884 814.276 83.4607C814.276 61.6099 801.565 48.1953 780.33 48.1953C762.729 48.1953 746.521 62.3013 746.521 84.014C746.521 106.971 763.145 120.386 782.006 120.386C798.91 120.386 809.807 110.567 813.3 98.8116L797.794 94.248Z" fill="black"/>
</g>
<defs>
<linearGradient id="paint0_linear_2993_107784" x1="36.6621" y1="9.6228" x2="88.678" y2="52.7201" gradientUnits="userSpaceOnUse">
<stop stop-color="#763AFF"/>
<stop offset="1" stop-color="#5A099A"/>
</linearGradient>
<linearGradient id="paint1_linear_2993_107784" x1="53.6505" y1="52.6519" x2="138.597" y2="114.63" gradientUnits="userSpaceOnUse">
<stop stop-color="#5C00AA"/>
<stop offset="1" stop-color="#7156DA"/>
</linearGradient>
<clipPath id="clip0_2993_107784">
<rect width="814.056" height="161.238" fill="white" transform="translate(0.21875 0.765625)"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 5.8 KiB

@@ -1,23 +0,0 @@
<svg width="581" height="113" viewBox="0 0 581 113" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M151.397 66.7608C151.996 72.3621 157.091 81.9642 171.877 81.9642C184.764 81.9642 190.959 73.7624 190.959 65.7607C190.959 58.559 186.063 52.6577 176.373 50.6571L169.379 49.1569C166.682 48.6568 164.884 47.1565 164.884 44.7559C164.884 41.9552 167.681 39.8549 171.178 39.8549C176.772 39.8549 178.87 43.5556 179.27 46.4564L190.359 43.9558C189.76 38.6546 185.064 29.7527 171.078 29.7527C160.488 29.7527 152.696 37.0543 152.696 45.8561C152.696 52.7576 156.991 58.4591 166.482 60.5594L172.976 62.0598C176.772 62.8599 178.271 64.6605 178.271 66.8609C178.271 69.4615 176.173 71.762 171.777 71.762C165.983 71.762 163.085 68.1611 162.786 64.2602L151.397 66.7608Z" fill="#1F1F1F"/>
<path d="M233.421 80.4639H246.109C245.909 78.7635 245.609 75.3628 245.609 71.5618V31.2529H232.321V59.8592C232.321 65.5606 228.925 69.5614 223.031 69.5614C216.837 69.5614 214.039 65.1604 214.039 59.6592V31.2529H200.752V62.3599C200.752 73.0622 207.545 81.7642 219.434 81.7642C224.628 81.7642 230.325 79.7638 233.022 75.1627C233.022 77.1631 233.221 79.4636 233.421 80.4639Z" fill="#1F1F1F"/>
<path d="M273.076 99.4682V75.663C275.473 78.9636 280.469 81.6644 287.263 81.6644C301.149 81.6644 310.439 70.6617 310.439 55.7584C310.439 41.1553 302.148 30.1528 287.762 30.1528C280.37 30.1528 274.875 33.4534 272.677 37.2544V31.253H259.79V99.4682H273.076ZM297.352 55.8585C297.352 64.6606 291.958 69.7616 285.164 69.7616C278.372 69.7616 272.877 64.5605 272.877 55.8585C272.877 47.1566 278.372 42.0554 285.164 42.0554C291.958 42.0554 297.352 47.1566 297.352 55.8585Z" fill="#1F1F1F"/>
<path d="M317.964 67.0609C317.964 74.7627 324.357 81.8643 334.848 81.8643C342.139 81.8643 346.835 78.4634 349.332 74.5625C349.332 76.463 349.532 79.1635 349.832 80.4639H362.02C361.72 78.7635 361.422 75.2627 361.422 72.6622V48.4567C361.422 38.5545 355.627 29.7527 340.043 29.7527C326.855 29.7527 319.761 38.2544 318.963 45.9562L330.751 48.4567C331.151 44.1558 334.348 40.455 340.141 40.455C345.737 40.455 348.434 43.3556 348.434 46.8564C348.434 48.5568 347.536 49.9572 344.738 50.3572L332.65 52.1576C324.458 53.3579 317.964 58.2589 317.964 67.0609ZM337.644 71.962C333.349 71.962 331.25 69.1614 331.25 66.2608C331.25 62.4599 333.947 60.5594 337.345 60.0594L348.434 58.359V60.5594C348.434 69.2615 343.239 71.962 337.644 71.962Z" fill="#1F1F1F"/>
<path d="M387.703 80.4641V74.4627C390.299 78.6637 395.494 81.6644 402.288 81.6644C416.276 81.6644 425.467 70.5618 425.467 55.6585C425.467 41.0552 417.174 29.9528 402.788 29.9528C395.494 29.9528 390.1 33.1535 387.902 36.6541V8.04785H374.815V80.4641H387.703ZM412.178 55.7584C412.178 64.7605 406.784 69.7616 399.99 69.7616C393.297 69.7616 387.703 64.6606 387.703 55.7584C387.703 46.7564 393.297 41.8554 399.99 41.8554C406.784 41.8554 412.178 46.7564 412.178 55.7584Z" fill="#1F1F1F"/>
<path d="M432.99 67.0609C432.99 74.7627 439.383 81.8643 449.873 81.8643C457.165 81.8643 461.862 78.4634 464.358 74.5625C464.358 76.463 464.559 79.1635 464.858 80.4639H477.046C476.748 78.7635 476.448 75.2627 476.448 72.6622V48.4567C476.448 38.5545 470.653 29.7527 455.068 29.7527C441.881 29.7527 434.788 38.2544 433.989 45.9562L445.776 48.4567C446.177 44.1558 449.374 40.455 455.167 40.455C460.763 40.455 463.46 43.3556 463.46 46.8564C463.46 48.5568 462.561 49.9572 459.763 50.3572L447.676 52.1576C439.484 53.3579 432.99 58.2589 432.99 67.0609ZM452.671 71.962C448.375 71.962 446.276 69.1614 446.276 66.2608C446.276 62.4599 448.973 60.5594 452.371 60.0594L463.46 58.359V60.5594C463.46 69.2615 458.265 71.962 452.671 71.962Z" fill="#1F1F1F"/>
<path d="M485.645 66.7608C486.243 72.3621 491.339 81.9642 506.124 81.9642C519.012 81.9642 525.205 73.7624 525.205 65.7607C525.205 58.559 520.311 52.6577 510.62 50.6571L503.626 49.1569C500.929 48.6568 499.132 47.1565 499.132 44.7559C499.132 41.9552 501.928 39.8549 505.425 39.8549C511.021 39.8549 513.118 43.5556 513.519 46.4564L524.607 43.9558C524.007 38.6546 519.312 29.7527 505.326 29.7527C494.735 29.7527 486.944 37.0543 486.944 45.8561C486.944 52.7576 491.238 58.4591 500.73 60.5594L507.224 62.0598C511.021 62.8599 512.519 64.6605 512.519 66.8609C512.519 69.4615 510.421 71.762 506.025 71.762C500.23 71.762 497.334 68.1611 497.034 64.2602L485.645 66.7608Z" fill="#1F1F1F"/>
<path d="M545.385 50.2571C545.685 45.7562 549.482 40.5549 556.375 40.5549C563.967 40.5549 567.165 45.3561 567.365 50.2571H545.385ZM568.664 63.0601C567.065 67.4609 563.668 70.5617 557.474 70.5617C550.88 70.5617 545.385 65.8606 545.087 59.3593H580.252C580.252 59.159 580.451 57.1587 580.451 55.2582C580.451 39.4547 571.361 29.7527 556.175 29.7527C543.588 29.7527 531.998 39.9548 531.998 55.6584C531.998 72.262 543.886 81.9642 557.374 81.9642C569.462 81.9642 577.255 74.8626 579.753 66.3607L568.664 63.0601Z" fill="#1F1F1F"/>
<path d="M63.7076 110.284C60.8481 113.885 55.0502 111.912 54.9813 107.314L53.9738 40.0627L99.1935 40.0627C107.384 40.0627 111.952 49.5228 106.859 55.9374L63.7076 110.284Z" fill="url(#paint0_linear)"/>
<path d="M63.7076 110.284C60.8481 113.885 55.0502 111.912 54.9813 107.314L53.9738 40.0627L99.1935 40.0627C107.384 40.0627 111.952 49.5228 106.859 55.9374L63.7076 110.284Z" fill="url(#paint1_linear)" fill-opacity="0.2"/>
<path d="M45.317 2.07103C48.1765 -1.53037 53.9745 0.442937 54.0434 5.041L54.4849 72.2922H9.83113C1.64038 72.2922 -2.92775 62.8321 2.1655 56.4175L45.317 2.07103Z" fill="#3ECF8E"/>
<defs>
<linearGradient id="paint0_linear" x1="53.9738" y1="54.974" x2="94.1635" y2="71.8295" gradientUnits="userSpaceOnUse">
<stop stop-color="#249361"/>
<stop offset="1" stop-color="#3ECF8E"/>
</linearGradient>
<linearGradient id="paint1_linear" x1="36.1558" y1="30.578" x2="54.4844" y2="65.0806" gradientUnits="userSpaceOnUse">
<stop/>
<stop offset="1" stop-opacity="0"/>
</linearGradient>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.8 KiB

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 KiB

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.8 KiB

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.5 KiB

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 KiB

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.8 KiB

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.2 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 27 KiB

@@ -1,27 +1,23 @@
<svg width="815" height="162" viewBox="0 0 815 162" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_2993_107746)">
<path d="M78.033 6.95738C77.9338 0.333847 69.5817 -2.50871 65.4626 2.67912L3.30264 80.9655C-4.03421 90.2058 2.5462 103.833 14.345 103.833H78.7992L79.3812 154.281C79.4804 160.905 87.8324 163.747 91.9515 158.559L154.111 80.2729C161.448 71.0327 154.868 57.4053 143.069 57.4053H78.4769L78.033 6.95738Z" fill="url(#paint0_linear_2993_107746)"/>
<path d="M91.9671 158.572C87.848 163.759 79.4961 160.917 79.3969 154.294L78.3438 57.418H143.085C154.883 57.418 161.463 71.0453 154.127 80.2856L91.9671 158.572Z" fill="url(#paint1_linear_2993_107746)"/>
<path d="M214.303 98.5992C215.14 106.344 222.265 119.62 242.941 119.62C260.962 119.62 269.625 108.28 269.625 97.2164C269.625 87.2589 262.778 79.0995 249.228 76.3333L239.448 74.259C235.677 73.5676 233.162 71.4932 233.162 68.174C233.162 64.3016 237.074 61.3976 241.964 61.3976C249.786 61.3976 252.72 66.5144 253.279 70.5252L268.786 67.0677C267.948 59.738 261.381 47.4297 241.824 47.4297C227.015 47.4297 216.119 57.5253 216.119 69.6952C216.119 79.2376 222.125 87.1208 235.397 90.0248L244.478 92.0993C249.786 93.2056 251.882 95.6952 251.882 98.7376C251.882 102.333 248.949 105.514 242.801 105.514C234.699 105.514 230.647 100.535 230.229 95.1417L214.303 98.5992Z" fill="white"/>
<path d="M329.002 117.546H346.744C346.464 115.195 346.045 110.493 346.045 105.237V49.5039H327.463V89.0566C327.463 96.9397 322.714 102.471 314.473 102.471C305.811 102.471 301.898 96.3864 301.898 88.7801V49.5039H283.318V92.5142C283.318 107.312 292.817 119.344 309.443 119.344C316.706 119.344 324.672 116.578 328.444 110.216C328.444 112.982 328.722 116.163 329.002 117.546Z" fill="white"/>
<path d="M384.452 143.824V110.909C387.804 115.473 394.79 119.207 404.29 119.207C423.708 119.207 436.699 103.994 436.699 83.3882C436.699 63.1971 425.105 47.9844 404.988 47.9844C394.651 47.9844 386.967 52.548 383.894 57.8035V49.5056H365.873V143.824H384.452ZM418.398 83.5266C418.398 95.6969 410.856 102.75 401.355 102.75C391.857 102.75 384.173 95.5585 384.173 83.5266C384.173 71.4948 391.857 64.4416 401.355 64.4416C410.856 64.4416 418.398 71.4948 418.398 83.5266Z" fill="white"/>
<path d="M447.223 99.0142C447.223 109.663 456.162 119.482 470.833 119.482C481.028 119.482 487.595 114.78 491.087 109.386C491.087 112.014 491.366 115.748 491.786 117.546H508.829C508.409 115.195 507.993 110.354 507.993 106.759V73.2909C507.993 59.5996 499.889 47.4297 478.097 47.4297C459.656 47.4297 449.736 59.1846 448.62 69.8336L465.104 73.2909C465.663 67.3442 470.133 62.2273 478.234 62.2273C486.059 62.2273 489.831 66.2378 489.831 71.0782C489.831 73.4293 488.575 75.3656 484.662 75.9187L467.759 78.408C456.304 80.0676 447.223 86.844 447.223 99.0142ZM474.742 105.791C468.737 105.791 465.801 101.918 465.801 97.9079C465.801 92.6526 469.573 90.0248 474.324 89.3335L489.831 86.9824V90.0248C489.831 102.057 482.566 105.791 474.742 105.791Z" fill="white"/>
<path d="M544.745 117.545V109.247C548.375 115.056 555.639 119.204 565.14 119.204C584.7 119.204 597.553 103.853 597.553 83.2472C597.553 63.0558 585.956 47.705 565.839 47.705C555.639 47.705 548.097 52.1305 545.023 56.9706V17.418H526.723V117.545H544.745ZM578.97 83.3853C578.97 95.8322 571.427 102.747 561.926 102.747C552.567 102.747 544.745 95.694 544.745 83.3853C544.745 70.9386 552.567 64.1622 561.926 64.1622C571.427 64.1622 578.97 70.9386 578.97 83.3853Z" fill="white"/>
<path d="M608.072 99.0142C608.072 109.663 617.012 119.482 631.681 119.482C641.878 119.482 648.446 114.78 651.936 109.386C651.936 112.014 652.217 115.748 652.635 117.546H669.679C669.262 115.195 668.842 110.354 668.842 106.759V73.2909C668.842 59.5996 660.739 47.4297 638.945 47.4297C620.505 47.4297 610.587 59.1846 609.469 69.8336L625.952 73.2909C626.513 67.3442 630.983 62.2273 639.084 62.2273C646.909 62.2273 650.68 66.2378 650.68 71.0782C650.68 73.4293 649.423 75.3656 645.511 75.9187L628.609 78.408C617.153 80.0676 608.072 86.844 608.072 99.0142ZM635.593 105.791C629.586 105.791 626.651 101.918 626.651 97.9079C626.651 92.6526 630.422 90.0248 635.174 89.3335L650.68 86.9824V90.0248C650.68 102.057 643.416 105.791 635.593 105.791Z" fill="white"/>
<path d="M681.701 98.5992C682.537 106.344 689.663 119.62 710.338 119.62C728.36 119.62 737.021 108.28 737.021 97.2164C737.021 87.2589 730.177 79.0995 716.625 76.3333L706.845 74.259C703.074 73.5676 700.561 71.4932 700.561 68.174C700.561 64.3016 704.471 61.3976 709.361 61.3976C717.186 61.3976 720.118 66.5144 720.679 70.5252L736.184 67.0677C735.345 59.738 728.78 47.4297 709.222 47.4297C694.412 47.4297 683.518 57.5253 683.518 69.6952C683.518 79.2376 689.522 87.1208 702.796 90.0248L711.876 92.0993C717.186 93.2056 719.281 95.6952 719.281 98.7376C719.281 102.333 716.347 105.514 710.2 105.514C702.096 105.514 698.047 100.535 697.627 95.1417L681.701 98.5992Z" fill="white"/>
<path d="M765.241 75.7803C765.661 69.557 770.971 62.3654 780.609 62.3654C791.226 62.3654 795.698 69.0038 795.977 75.7803H765.241ZM797.794 93.4824C795.558 99.5672 790.808 103.855 782.146 103.855C772.925 103.855 765.241 97.3545 764.825 88.3655H813.998C813.998 88.0885 814.276 85.3228 814.276 82.6951C814.276 60.8442 801.565 47.4297 780.33 47.4297C762.729 47.4297 746.521 61.5357 746.521 83.2484C746.521 106.205 763.145 119.62 782.006 119.62C798.91 119.62 809.807 109.801 813.3 98.046L797.794 93.4824Z" fill="white"/>
</g>
<svg width="581" height="113" viewBox="0 0 581 113" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M151.397 66.7608C151.996 72.3621 157.091 81.9642 171.877 81.9642C184.764 81.9642 190.959 73.7624 190.959 65.7607C190.959 58.559 186.063 52.6577 176.373 50.6571L169.379 49.1569C166.682 48.6568 164.884 47.1565 164.884 44.7559C164.884 41.9552 167.681 39.8549 171.178 39.8549C176.772 39.8549 178.87 43.5556 179.27 46.4564L190.359 43.9558C189.76 38.6546 185.064 29.7527 171.078 29.7527C160.488 29.7527 152.696 37.0543 152.696 45.8561C152.696 52.7576 156.991 58.4591 166.482 60.5594L172.976 62.0598C176.772 62.8599 178.271 64.6605 178.271 66.8609C178.271 69.4615 176.173 71.762 171.777 71.762C165.983 71.762 163.085 68.1611 162.786 64.2602L151.397 66.7608Z" fill="white"/>
<path d="M233.421 80.4639H246.109C245.909 78.7635 245.609 75.3628 245.609 71.5618V31.2529H232.321V59.8592C232.321 65.5606 228.925 69.5614 223.031 69.5614C216.837 69.5614 214.039 65.1604 214.039 59.6592V31.2529H200.752V62.3599C200.752 73.0622 207.545 81.7642 219.434 81.7642C224.628 81.7642 230.325 79.7638 233.022 75.1627C233.022 77.1631 233.221 79.4636 233.421 80.4639Z" fill="white"/>
<path d="M273.076 99.4682V75.663C275.473 78.9636 280.469 81.6644 287.263 81.6644C301.149 81.6644 310.439 70.6617 310.439 55.7584C310.439 41.1553 302.148 30.1528 287.762 30.1528C280.37 30.1528 274.875 33.4534 272.677 37.2544V31.253H259.79V99.4682H273.076ZM297.352 55.8585C297.352 64.6606 291.958 69.7616 285.164 69.7616C278.372 69.7616 272.877 64.5605 272.877 55.8585C272.877 47.1566 278.372 42.0554 285.164 42.0554C291.958 42.0554 297.352 47.1566 297.352 55.8585Z" fill="white"/>
<path d="M317.964 67.0609C317.964 74.7627 324.357 81.8643 334.848 81.8643C342.139 81.8643 346.835 78.4634 349.332 74.5625C349.332 76.463 349.532 79.1635 349.832 80.4639H362.02C361.72 78.7635 361.422 75.2627 361.422 72.6622V48.4567C361.422 38.5545 355.627 29.7527 340.043 29.7527C326.855 29.7527 319.761 38.2544 318.963 45.9562L330.751 48.4567C331.151 44.1558 334.348 40.455 340.141 40.455C345.737 40.455 348.434 43.3556 348.434 46.8564C348.434 48.5568 347.536 49.9572 344.738 50.3572L332.65 52.1576C324.458 53.3579 317.964 58.2589 317.964 67.0609ZM337.644 71.962C333.349 71.962 331.25 69.1614 331.25 66.2608C331.25 62.4599 333.947 60.5594 337.345 60.0594L348.434 58.359V60.5594C348.434 69.2615 343.239 71.962 337.644 71.962Z" fill="white"/>
<path d="M387.703 80.4641V74.4627C390.299 78.6637 395.494 81.6644 402.288 81.6644C416.276 81.6644 425.467 70.5618 425.467 55.6585C425.467 41.0552 417.174 29.9528 402.788 29.9528C395.494 29.9528 390.1 33.1535 387.902 36.6541V8.04785H374.815V80.4641H387.703ZM412.178 55.7584C412.178 64.7605 406.784 69.7616 399.99 69.7616C393.297 69.7616 387.703 64.6606 387.703 55.7584C387.703 46.7564 393.297 41.8554 399.99 41.8554C406.784 41.8554 412.178 46.7564 412.178 55.7584Z" fill="white"/>
<path d="M432.99 67.0609C432.99 74.7627 439.383 81.8643 449.873 81.8643C457.165 81.8643 461.862 78.4634 464.358 74.5625C464.358 76.463 464.559 79.1635 464.858 80.4639H477.046C476.748 78.7635 476.448 75.2627 476.448 72.6622V48.4567C476.448 38.5545 470.653 29.7527 455.068 29.7527C441.881 29.7527 434.788 38.2544 433.989 45.9562L445.776 48.4567C446.177 44.1558 449.374 40.455 455.167 40.455C460.763 40.455 463.46 43.3556 463.46 46.8564C463.46 48.5568 462.561 49.9572 459.763 50.3572L447.676 52.1576C439.484 53.3579 432.99 58.2589 432.99 67.0609ZM452.671 71.962C448.375 71.962 446.276 69.1614 446.276 66.2608C446.276 62.4599 448.973 60.5594 452.371 60.0594L463.46 58.359V60.5594C463.46 69.2615 458.265 71.962 452.671 71.962Z" fill="white"/>
<path d="M485.645 66.7608C486.243 72.3621 491.339 81.9642 506.124 81.9642C519.012 81.9642 525.205 73.7624 525.205 65.7607C525.205 58.559 520.311 52.6577 510.62 50.6571L503.626 49.1569C500.929 48.6568 499.132 47.1565 499.132 44.7559C499.132 41.9552 501.928 39.8549 505.425 39.8549C511.021 39.8549 513.118 43.5556 513.519 46.4564L524.607 43.9558C524.007 38.6546 519.312 29.7527 505.326 29.7527C494.735 29.7527 486.944 37.0543 486.944 45.8561C486.944 52.7576 491.238 58.4591 500.73 60.5594L507.224 62.0598C511.021 62.8599 512.519 64.6605 512.519 66.8609C512.519 69.4615 510.421 71.762 506.025 71.762C500.23 71.762 497.334 68.1611 497.034 64.2602L485.645 66.7608Z" fill="white"/>
<path d="M545.385 50.2571C545.685 45.7562 549.482 40.5549 556.375 40.5549C563.967 40.5549 567.165 45.3561 567.365 50.2571H545.385ZM568.664 63.0601C567.065 67.4609 563.668 70.5617 557.474 70.5617C550.88 70.5617 545.385 65.8606 545.087 59.3593H580.252C580.252 59.159 580.451 57.1587 580.451 55.2582C580.451 39.4547 571.361 29.7527 556.175 29.7527C543.588 29.7527 531.998 39.9548 531.998 55.6584C531.998 72.262 543.886 81.9642 557.374 81.9642C569.462 81.9642 577.255 74.8626 579.753 66.3607L568.664 63.0601Z" fill="white"/>
<path d="M63.7076 110.284C60.8481 113.885 55.0502 111.912 54.9813 107.314L53.9738 40.0627L99.1935 40.0627C107.384 40.0627 111.952 49.5228 106.859 55.9374L63.7076 110.284Z" fill="url(#paint0_linear)"/>
<path d="M63.7076 110.284C60.8481 113.885 55.0502 111.912 54.9813 107.314L53.9738 40.0627L99.1935 40.0627C107.384 40.0627 111.952 49.5228 106.859 55.9374L63.7076 110.284Z" fill="url(#paint1_linear)" fill-opacity="0.2"/>
<path d="M45.317 2.07103C48.1765 -1.53037 53.9745 0.442937 54.0434 5.041L54.4849 72.2922H9.83113C1.64038 72.2922 -2.92775 62.8321 2.1655 56.4175L45.317 2.07103Z" fill="#3ECF8E"/>
<defs>
<linearGradient id="paint0_linear_2993_107746" x1="36.6621" y1="8.85717" x2="88.678" y2="51.9544" gradientUnits="userSpaceOnUse">
<stop stop-color="#763AFF"/>
<stop offset="1" stop-color="#5A099A"/>
<linearGradient id="paint0_linear" x1="53.9738" y1="54.974" x2="94.1635" y2="71.8295" gradientUnits="userSpaceOnUse">
<stop stop-color="#249361"/>
<stop offset="1" stop-color="#3ECF8E"/>
</linearGradient>
<linearGradient id="paint1_linear_2993_107746" x1="53.6505" y1="51.8862" x2="138.597" y2="113.864" gradientUnits="userSpaceOnUse">
<stop stop-color="#5C00AA"/>
<stop offset="1" stop-color="#7156DA"/>
<linearGradient id="paint1_linear" x1="36.1558" y1="30.578" x2="54.4844" y2="65.0806" gradientUnits="userSpaceOnUse">
<stop/>
<stop offset="1" stop-opacity="0"/>
</linearGradient>
<clipPath id="clip0_2993_107746">
<rect width="814.056" height="161.238" fill="white" transform="translate(0.21875)"/>
</clipPath>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 5.8 KiB

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 29 KiB

@@ -1,27 +1,23 @@
<svg width="815" height="163" viewBox="0 0 815 163" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_2993_107784)">
<path d="M78.033 7.723C77.9338 1.09947 69.5817 -1.74309 65.4626 3.44475L3.30264 81.7311C-4.03421 90.9714 2.5462 104.599 14.345 104.599H78.7992L79.3812 155.047C79.4804 161.67 87.8324 164.512 91.9515 159.325L154.111 81.0385C161.448 71.7983 154.868 58.1709 143.069 58.1709H78.4769L78.033 7.723Z" fill="url(#paint0_linear_2993_107784)"/>
<path d="M91.9671 159.338C87.848 164.525 79.4961 161.683 79.3969 155.059L78.3438 58.1836H143.085C154.883 58.1836 161.463 71.8109 154.127 81.0512L91.9671 159.338Z" fill="url(#paint1_linear_2993_107784)"/>
<path d="M214.303 99.3648C215.14 107.11 222.265 120.386 242.941 120.386C260.962 120.386 269.625 109.046 269.625 97.982C269.625 88.0246 262.778 79.8651 249.228 77.0989L239.448 75.0247C235.677 74.3332 233.162 72.2588 233.162 68.9396C233.162 65.0672 237.074 62.1632 241.964 62.1632C249.786 62.1632 252.72 67.28 253.279 71.2908L268.786 67.8333C267.948 60.5036 261.381 48.1953 241.824 48.1953C227.015 48.1953 216.119 58.2909 216.119 70.4608C216.119 80.0032 222.125 87.8864 235.397 90.7904L244.478 92.865C249.786 93.9712 251.882 96.4608 251.882 99.5032C251.882 103.099 248.949 106.28 242.801 106.28C234.699 106.28 230.647 101.301 230.229 95.9074L214.303 99.3648Z" fill="black"/>
<path d="M329.002 118.311H346.744C346.464 115.96 346.045 111.258 346.045 106.003V50.2695H327.463V89.8223C327.463 97.7053 322.714 103.237 314.473 103.237C305.811 103.237 301.898 97.152 301.898 89.5457V50.2695H283.318V93.2799C283.318 108.077 292.817 120.109 309.443 120.109C316.706 120.109 324.672 117.343 328.444 110.982C328.444 113.748 328.722 116.928 329.002 118.311Z" fill="black"/>
<path d="M384.452 144.589V111.675C387.804 116.239 394.79 119.973 404.29 119.973C423.708 119.973 436.699 104.76 436.699 84.1538C436.699 63.9627 425.105 48.75 404.988 48.75C394.651 48.75 386.967 53.3136 383.894 58.5691V50.2712H365.873V144.589H384.452ZM418.398 84.2922C418.398 96.4625 410.856 103.515 401.355 103.515C391.857 103.515 384.173 96.3241 384.173 84.2922C384.173 72.2604 391.857 65.2072 401.355 65.2072C410.856 65.2072 418.398 72.2604 418.398 84.2922Z" fill="black"/>
<path d="M447.223 99.7798C447.223 110.429 456.162 120.248 470.833 120.248C481.028 120.248 487.595 115.546 491.087 110.152C491.087 112.78 491.366 116.514 491.786 118.312H508.829C508.409 115.96 507.993 111.12 507.993 107.524V74.0565C507.993 60.3652 499.889 48.1953 478.097 48.1953C459.656 48.1953 449.736 59.9503 448.62 70.5992L465.104 74.0565C465.663 68.1099 470.133 62.9929 478.234 62.9929C486.059 62.9929 489.831 67.0035 489.831 71.8439C489.831 74.1949 488.575 76.1312 484.662 76.6843L467.759 79.1736C456.304 80.8332 447.223 87.6096 447.223 99.7798ZM474.742 106.556C468.737 106.556 465.801 102.684 465.801 98.6735C465.801 93.4182 469.573 90.7904 474.324 90.0991L489.831 87.748V90.7904C489.831 102.822 482.566 106.556 474.742 106.556Z" fill="black"/>
<path d="M544.745 118.31V110.013C548.375 115.821 555.639 119.97 565.14 119.97C584.7 119.97 597.553 104.619 597.553 84.0128C597.553 63.8215 585.956 48.4706 565.839 48.4706C555.639 48.4706 548.097 52.8961 545.023 57.7362V18.1836H526.723V118.31H544.745ZM578.97 84.151C578.97 96.5978 571.427 103.513 561.926 103.513C552.567 103.513 544.745 96.4596 544.745 84.151C544.745 71.7043 552.567 64.9279 561.926 64.9279C571.427 64.9279 578.97 71.7043 578.97 84.151Z" fill="black"/>
<path d="M608.072 99.7798C608.072 110.429 617.012 120.248 631.681 120.248C641.878 120.248 648.446 115.546 651.936 110.152C651.936 112.78 652.217 116.514 652.635 118.312H669.679C669.262 115.96 668.842 111.12 668.842 107.524V74.0565C668.842 60.3652 660.739 48.1953 638.945 48.1953C620.505 48.1953 610.587 59.9503 609.469 70.5992L625.952 74.0565C626.513 68.1099 630.983 62.9929 639.084 62.9929C646.909 62.9929 650.68 67.0035 650.68 71.8439C650.68 74.1949 649.423 76.1312 645.511 76.6843L628.609 79.1736C617.153 80.8332 608.072 87.6096 608.072 99.7798ZM635.593 106.556C629.586 106.556 626.651 102.684 626.651 98.6735C626.651 93.4182 630.422 90.7904 635.174 90.0991L650.68 87.748V90.7904C650.68 102.822 643.416 106.556 635.593 106.556Z" fill="black"/>
<path d="M681.701 99.3648C682.537 107.11 689.663 120.386 710.338 120.386C728.36 120.386 737.021 109.046 737.021 97.982C737.021 88.0246 730.177 79.8651 716.625 77.0989L706.845 75.0247C703.074 74.3332 700.561 72.2588 700.561 68.9396C700.561 65.0672 704.471 62.1632 709.361 62.1632C717.186 62.1632 720.118 67.28 720.679 71.2908L736.184 67.8333C735.345 60.5036 728.78 48.1953 709.222 48.1953C694.412 48.1953 683.518 58.2909 683.518 70.4608C683.518 80.0032 689.522 87.8864 702.796 90.7904L711.876 92.865C717.186 93.9712 719.281 96.4608 719.281 99.5032C719.281 103.099 716.347 106.28 710.2 106.28C702.096 106.28 698.047 101.301 697.627 95.9074L681.701 99.3648Z" fill="black"/>
<path d="M765.241 76.5459C765.661 70.3227 770.971 63.1311 780.609 63.1311C791.226 63.1311 795.698 69.7695 795.977 76.5459H765.241ZM797.794 94.248C795.558 100.333 790.808 104.62 782.146 104.62C772.925 104.62 765.241 98.1202 764.825 89.1311H813.998C813.998 88.8542 814.276 86.0884 814.276 83.4607C814.276 61.6099 801.565 48.1953 780.33 48.1953C762.729 48.1953 746.521 62.3013 746.521 84.014C746.521 106.971 763.145 120.386 782.006 120.386C798.91 120.386 809.807 110.567 813.3 98.8116L797.794 94.248Z" fill="black"/>
</g>
<svg width="581" height="113" viewBox="0 0 581 113" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M151.397 66.7608C151.996 72.3621 157.091 81.9642 171.877 81.9642C184.764 81.9642 190.959 73.7624 190.959 65.7607C190.959 58.559 186.063 52.6577 176.373 50.6571L169.379 49.1569C166.682 48.6568 164.884 47.1565 164.884 44.7559C164.884 41.9552 167.681 39.8549 171.178 39.8549C176.772 39.8549 178.87 43.5556 179.27 46.4564L190.359 43.9558C189.76 38.6546 185.064 29.7527 171.078 29.7527C160.488 29.7527 152.696 37.0543 152.696 45.8561C152.696 52.7576 156.991 58.4591 166.482 60.5594L172.976 62.0598C176.772 62.8599 178.271 64.6605 178.271 66.8609C178.271 69.4615 176.173 71.762 171.777 71.762C165.983 71.762 163.085 68.1611 162.786 64.2602L151.397 66.7608Z" fill="#1F1F1F"/>
<path d="M233.421 80.4639H246.109C245.909 78.7635 245.609 75.3628 245.609 71.5618V31.2529H232.321V59.8592C232.321 65.5606 228.925 69.5614 223.031 69.5614C216.837 69.5614 214.039 65.1604 214.039 59.6592V31.2529H200.752V62.3599C200.752 73.0622 207.545 81.7642 219.434 81.7642C224.628 81.7642 230.325 79.7638 233.022 75.1627C233.022 77.1631 233.221 79.4636 233.421 80.4639Z" fill="#1F1F1F"/>
<path d="M273.076 99.4682V75.663C275.473 78.9636 280.469 81.6644 287.263 81.6644C301.149 81.6644 310.439 70.6617 310.439 55.7584C310.439 41.1553 302.148 30.1528 287.762 30.1528C280.37 30.1528 274.875 33.4534 272.677 37.2544V31.253H259.79V99.4682H273.076ZM297.352 55.8585C297.352 64.6606 291.958 69.7616 285.164 69.7616C278.372 69.7616 272.877 64.5605 272.877 55.8585C272.877 47.1566 278.372 42.0554 285.164 42.0554C291.958 42.0554 297.352 47.1566 297.352 55.8585Z" fill="#1F1F1F"/>
<path d="M317.964 67.0609C317.964 74.7627 324.357 81.8643 334.848 81.8643C342.139 81.8643 346.835 78.4634 349.332 74.5625C349.332 76.463 349.532 79.1635 349.832 80.4639H362.02C361.72 78.7635 361.422 75.2627 361.422 72.6622V48.4567C361.422 38.5545 355.627 29.7527 340.043 29.7527C326.855 29.7527 319.761 38.2544 318.963 45.9562L330.751 48.4567C331.151 44.1558 334.348 40.455 340.141 40.455C345.737 40.455 348.434 43.3556 348.434 46.8564C348.434 48.5568 347.536 49.9572 344.738 50.3572L332.65 52.1576C324.458 53.3579 317.964 58.2589 317.964 67.0609ZM337.644 71.962C333.349 71.962 331.25 69.1614 331.25 66.2608C331.25 62.4599 333.947 60.5594 337.345 60.0594L348.434 58.359V60.5594C348.434 69.2615 343.239 71.962 337.644 71.962Z" fill="#1F1F1F"/>
<path d="M387.703 80.4641V74.4627C390.299 78.6637 395.494 81.6644 402.288 81.6644C416.276 81.6644 425.467 70.5618 425.467 55.6585C425.467 41.0552 417.174 29.9528 402.788 29.9528C395.494 29.9528 390.1 33.1535 387.902 36.6541V8.04785H374.815V80.4641H387.703ZM412.178 55.7584C412.178 64.7605 406.784 69.7616 399.99 69.7616C393.297 69.7616 387.703 64.6606 387.703 55.7584C387.703 46.7564 393.297 41.8554 399.99 41.8554C406.784 41.8554 412.178 46.7564 412.178 55.7584Z" fill="#1F1F1F"/>
<path d="M432.99 67.0609C432.99 74.7627 439.383 81.8643 449.873 81.8643C457.165 81.8643 461.862 78.4634 464.358 74.5625C464.358 76.463 464.559 79.1635 464.858 80.4639H477.046C476.748 78.7635 476.448 75.2627 476.448 72.6622V48.4567C476.448 38.5545 470.653 29.7527 455.068 29.7527C441.881 29.7527 434.788 38.2544 433.989 45.9562L445.776 48.4567C446.177 44.1558 449.374 40.455 455.167 40.455C460.763 40.455 463.46 43.3556 463.46 46.8564C463.46 48.5568 462.561 49.9572 459.763 50.3572L447.676 52.1576C439.484 53.3579 432.99 58.2589 432.99 67.0609ZM452.671 71.962C448.375 71.962 446.276 69.1614 446.276 66.2608C446.276 62.4599 448.973 60.5594 452.371 60.0594L463.46 58.359V60.5594C463.46 69.2615 458.265 71.962 452.671 71.962Z" fill="#1F1F1F"/>
<path d="M485.645 66.7608C486.243 72.3621 491.339 81.9642 506.124 81.9642C519.012 81.9642 525.205 73.7624 525.205 65.7607C525.205 58.559 520.311 52.6577 510.62 50.6571L503.626 49.1569C500.929 48.6568 499.132 47.1565 499.132 44.7559C499.132 41.9552 501.928 39.8549 505.425 39.8549C511.021 39.8549 513.118 43.5556 513.519 46.4564L524.607 43.9558C524.007 38.6546 519.312 29.7527 505.326 29.7527C494.735 29.7527 486.944 37.0543 486.944 45.8561C486.944 52.7576 491.238 58.4591 500.73 60.5594L507.224 62.0598C511.021 62.8599 512.519 64.6605 512.519 66.8609C512.519 69.4615 510.421 71.762 506.025 71.762C500.23 71.762 497.334 68.1611 497.034 64.2602L485.645 66.7608Z" fill="#1F1F1F"/>
<path d="M545.385 50.2571C545.685 45.7562 549.482 40.5549 556.375 40.5549C563.967 40.5549 567.165 45.3561 567.365 50.2571H545.385ZM568.664 63.0601C567.065 67.4609 563.668 70.5617 557.474 70.5617C550.88 70.5617 545.385 65.8606 545.087 59.3593H580.252C580.252 59.159 580.451 57.1587 580.451 55.2582C580.451 39.4547 571.361 29.7527 556.175 29.7527C543.588 29.7527 531.998 39.9548 531.998 55.6584C531.998 72.262 543.886 81.9642 557.374 81.9642C569.462 81.9642 577.255 74.8626 579.753 66.3607L568.664 63.0601Z" fill="#1F1F1F"/>
<path d="M63.7076 110.284C60.8481 113.885 55.0502 111.912 54.9813 107.314L53.9738 40.0627L99.1935 40.0627C107.384 40.0627 111.952 49.5228 106.859 55.9374L63.7076 110.284Z" fill="url(#paint0_linear)"/>
<path d="M63.7076 110.284C60.8481 113.885 55.0502 111.912 54.9813 107.314L53.9738 40.0627L99.1935 40.0627C107.384 40.0627 111.952 49.5228 106.859 55.9374L63.7076 110.284Z" fill="url(#paint1_linear)" fill-opacity="0.2"/>
<path d="M45.317 2.07103C48.1765 -1.53037 53.9745 0.442937 54.0434 5.041L54.4849 72.2922H9.83113C1.64038 72.2922 -2.92775 62.8321 2.1655 56.4175L45.317 2.07103Z" fill="#3ECF8E"/>
<defs>
<linearGradient id="paint0_linear_2993_107784" x1="36.6621" y1="9.6228" x2="88.678" y2="52.7201" gradientUnits="userSpaceOnUse">
<stop stop-color="#763AFF"/>
<stop offset="1" stop-color="#5A099A"/>
<linearGradient id="paint0_linear" x1="53.9738" y1="54.974" x2="94.1635" y2="71.8295" gradientUnits="userSpaceOnUse">
<stop stop-color="#249361"/>
<stop offset="1" stop-color="#3ECF8E"/>
</linearGradient>
<linearGradient id="paint1_linear_2993_107784" x1="53.6505" y1="52.6519" x2="138.597" y2="114.63" gradientUnits="userSpaceOnUse">
<stop stop-color="#5C00AA"/>
<stop offset="1" stop-color="#7156DA"/>
<linearGradient id="paint1_linear" x1="36.1558" y1="30.578" x2="54.4844" y2="65.0806" gradientUnits="userSpaceOnUse">
<stop/>
<stop offset="1" stop-opacity="0"/>
</linearGradient>
<clipPath id="clip0_2993_107784">
<rect width="814.056" height="161.238" fill="white" transform="translate(0.21875 0.765625)"/>
</clipPath>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 5.8 KiB

After

Width:  |  Height:  |  Size: 5.7 KiB

+18 -22
View File
@@ -1,27 +1,23 @@
<svg width="815" height="162" viewBox="0 0 815 162" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_2993_107746)">
<path d="M78.033 6.95738C77.9338 0.333847 69.5817 -2.50871 65.4626 2.67912L3.30264 80.9655C-4.03421 90.2058 2.5462 103.833 14.345 103.833H78.7992L79.3812 154.281C79.4804 160.905 87.8324 163.747 91.9515 158.559L154.111 80.2729C161.448 71.0327 154.868 57.4053 143.069 57.4053H78.4769L78.033 6.95738Z" fill="url(#paint0_linear_2993_107746)"/>
<path d="M91.9671 158.572C87.848 163.759 79.4961 160.917 79.3969 154.294L78.3438 57.418H143.085C154.883 57.418 161.463 71.0453 154.127 80.2856L91.9671 158.572Z" fill="url(#paint1_linear_2993_107746)"/>
<path d="M214.303 98.5992C215.14 106.344 222.265 119.62 242.941 119.62C260.962 119.62 269.625 108.28 269.625 97.2164C269.625 87.2589 262.778 79.0995 249.228 76.3333L239.448 74.259C235.677 73.5676 233.162 71.4932 233.162 68.174C233.162 64.3016 237.074 61.3976 241.964 61.3976C249.786 61.3976 252.72 66.5144 253.279 70.5252L268.786 67.0677C267.948 59.738 261.381 47.4297 241.824 47.4297C227.015 47.4297 216.119 57.5253 216.119 69.6952C216.119 79.2376 222.125 87.1208 235.397 90.0248L244.478 92.0993C249.786 93.2056 251.882 95.6952 251.882 98.7376C251.882 102.333 248.949 105.514 242.801 105.514C234.699 105.514 230.647 100.535 230.229 95.1417L214.303 98.5992Z" fill="white"/>
<path d="M329.002 117.546H346.744C346.464 115.195 346.045 110.493 346.045 105.237V49.5039H327.463V89.0566C327.463 96.9397 322.714 102.471 314.473 102.471C305.811 102.471 301.898 96.3864 301.898 88.7801V49.5039H283.318V92.5142C283.318 107.312 292.817 119.344 309.443 119.344C316.706 119.344 324.672 116.578 328.444 110.216C328.444 112.982 328.722 116.163 329.002 117.546Z" fill="white"/>
<path d="M384.452 143.824V110.909C387.804 115.473 394.79 119.207 404.29 119.207C423.708 119.207 436.699 103.994 436.699 83.3882C436.699 63.1971 425.105 47.9844 404.988 47.9844C394.651 47.9844 386.967 52.548 383.894 57.8035V49.5056H365.873V143.824H384.452ZM418.398 83.5266C418.398 95.6969 410.856 102.75 401.355 102.75C391.857 102.75 384.173 95.5585 384.173 83.5266C384.173 71.4948 391.857 64.4416 401.355 64.4416C410.856 64.4416 418.398 71.4948 418.398 83.5266Z" fill="white"/>
<path d="M447.223 99.0142C447.223 109.663 456.162 119.482 470.833 119.482C481.028 119.482 487.595 114.78 491.087 109.386C491.087 112.014 491.366 115.748 491.786 117.546H508.829C508.409 115.195 507.993 110.354 507.993 106.759V73.2909C507.993 59.5996 499.889 47.4297 478.097 47.4297C459.656 47.4297 449.736 59.1846 448.62 69.8336L465.104 73.2909C465.663 67.3442 470.133 62.2273 478.234 62.2273C486.059 62.2273 489.831 66.2378 489.831 71.0782C489.831 73.4293 488.575 75.3656 484.662 75.9187L467.759 78.408C456.304 80.0676 447.223 86.844 447.223 99.0142ZM474.742 105.791C468.737 105.791 465.801 101.918 465.801 97.9079C465.801 92.6526 469.573 90.0248 474.324 89.3335L489.831 86.9824V90.0248C489.831 102.057 482.566 105.791 474.742 105.791Z" fill="white"/>
<path d="M544.745 117.545V109.247C548.375 115.056 555.639 119.204 565.14 119.204C584.7 119.204 597.553 103.853 597.553 83.2472C597.553 63.0558 585.956 47.705 565.839 47.705C555.639 47.705 548.097 52.1305 545.023 56.9706V17.418H526.723V117.545H544.745ZM578.97 83.3853C578.97 95.8322 571.427 102.747 561.926 102.747C552.567 102.747 544.745 95.694 544.745 83.3853C544.745 70.9386 552.567 64.1622 561.926 64.1622C571.427 64.1622 578.97 70.9386 578.97 83.3853Z" fill="white"/>
<path d="M608.072 99.0142C608.072 109.663 617.012 119.482 631.681 119.482C641.878 119.482 648.446 114.78 651.936 109.386C651.936 112.014 652.217 115.748 652.635 117.546H669.679C669.262 115.195 668.842 110.354 668.842 106.759V73.2909C668.842 59.5996 660.739 47.4297 638.945 47.4297C620.505 47.4297 610.587 59.1846 609.469 69.8336L625.952 73.2909C626.513 67.3442 630.983 62.2273 639.084 62.2273C646.909 62.2273 650.68 66.2378 650.68 71.0782C650.68 73.4293 649.423 75.3656 645.511 75.9187L628.609 78.408C617.153 80.0676 608.072 86.844 608.072 99.0142ZM635.593 105.791C629.586 105.791 626.651 101.918 626.651 97.9079C626.651 92.6526 630.422 90.0248 635.174 89.3335L650.68 86.9824V90.0248C650.68 102.057 643.416 105.791 635.593 105.791Z" fill="white"/>
<path d="M681.701 98.5992C682.537 106.344 689.663 119.62 710.338 119.62C728.36 119.62 737.021 108.28 737.021 97.2164C737.021 87.2589 730.177 79.0995 716.625 76.3333L706.845 74.259C703.074 73.5676 700.561 71.4932 700.561 68.174C700.561 64.3016 704.471 61.3976 709.361 61.3976C717.186 61.3976 720.118 66.5144 720.679 70.5252L736.184 67.0677C735.345 59.738 728.78 47.4297 709.222 47.4297C694.412 47.4297 683.518 57.5253 683.518 69.6952C683.518 79.2376 689.522 87.1208 702.796 90.0248L711.876 92.0993C717.186 93.2056 719.281 95.6952 719.281 98.7376C719.281 102.333 716.347 105.514 710.2 105.514C702.096 105.514 698.047 100.535 697.627 95.1417L681.701 98.5992Z" fill="white"/>
<path d="M765.241 75.7803C765.661 69.557 770.971 62.3654 780.609 62.3654C791.226 62.3654 795.698 69.0038 795.977 75.7803H765.241ZM797.794 93.4824C795.558 99.5672 790.808 103.855 782.146 103.855C772.925 103.855 765.241 97.3545 764.825 88.3655H813.998C813.998 88.0885 814.276 85.3228 814.276 82.6951C814.276 60.8442 801.565 47.4297 780.33 47.4297C762.729 47.4297 746.521 61.5357 746.521 83.2484C746.521 106.205 763.145 119.62 782.006 119.62C798.91 119.62 809.807 109.801 813.3 98.046L797.794 93.4824Z" fill="white"/>
</g>
<svg width="581" height="113" viewBox="0 0 581 113" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M151.397 66.7608C151.996 72.3621 157.091 81.9642 171.877 81.9642C184.764 81.9642 190.959 73.7624 190.959 65.7607C190.959 58.559 186.063 52.6577 176.373 50.6571L169.379 49.1569C166.682 48.6568 164.884 47.1565 164.884 44.7559C164.884 41.9552 167.681 39.8549 171.178 39.8549C176.772 39.8549 178.87 43.5556 179.27 46.4564L190.359 43.9558C189.76 38.6546 185.064 29.7527 171.078 29.7527C160.488 29.7527 152.696 37.0543 152.696 45.8561C152.696 52.7576 156.991 58.4591 166.482 60.5594L172.976 62.0598C176.772 62.8599 178.271 64.6605 178.271 66.8609C178.271 69.4615 176.173 71.762 171.777 71.762C165.983 71.762 163.085 68.1611 162.786 64.2602L151.397 66.7608Z" fill="white"/>
<path d="M233.421 80.4639H246.109C245.909 78.7635 245.609 75.3628 245.609 71.5618V31.2529H232.321V59.8592C232.321 65.5606 228.925 69.5614 223.031 69.5614C216.837 69.5614 214.039 65.1604 214.039 59.6592V31.2529H200.752V62.3599C200.752 73.0622 207.545 81.7642 219.434 81.7642C224.628 81.7642 230.325 79.7638 233.022 75.1627C233.022 77.1631 233.221 79.4636 233.421 80.4639Z" fill="white"/>
<path d="M273.076 99.4682V75.663C275.473 78.9636 280.469 81.6644 287.263 81.6644C301.149 81.6644 310.439 70.6617 310.439 55.7584C310.439 41.1553 302.148 30.1528 287.762 30.1528C280.37 30.1528 274.875 33.4534 272.677 37.2544V31.253H259.79V99.4682H273.076ZM297.352 55.8585C297.352 64.6606 291.958 69.7616 285.164 69.7616C278.372 69.7616 272.877 64.5605 272.877 55.8585C272.877 47.1566 278.372 42.0554 285.164 42.0554C291.958 42.0554 297.352 47.1566 297.352 55.8585Z" fill="white"/>
<path d="M317.964 67.0609C317.964 74.7627 324.357 81.8643 334.848 81.8643C342.139 81.8643 346.835 78.4634 349.332 74.5625C349.332 76.463 349.532 79.1635 349.832 80.4639H362.02C361.72 78.7635 361.422 75.2627 361.422 72.6622V48.4567C361.422 38.5545 355.627 29.7527 340.043 29.7527C326.855 29.7527 319.761 38.2544 318.963 45.9562L330.751 48.4567C331.151 44.1558 334.348 40.455 340.141 40.455C345.737 40.455 348.434 43.3556 348.434 46.8564C348.434 48.5568 347.536 49.9572 344.738 50.3572L332.65 52.1576C324.458 53.3579 317.964 58.2589 317.964 67.0609ZM337.644 71.962C333.349 71.962 331.25 69.1614 331.25 66.2608C331.25 62.4599 333.947 60.5594 337.345 60.0594L348.434 58.359V60.5594C348.434 69.2615 343.239 71.962 337.644 71.962Z" fill="white"/>
<path d="M387.703 80.4641V74.4627C390.299 78.6637 395.494 81.6644 402.288 81.6644C416.276 81.6644 425.467 70.5618 425.467 55.6585C425.467 41.0552 417.174 29.9528 402.788 29.9528C395.494 29.9528 390.1 33.1535 387.902 36.6541V8.04785H374.815V80.4641H387.703ZM412.178 55.7584C412.178 64.7605 406.784 69.7616 399.99 69.7616C393.297 69.7616 387.703 64.6606 387.703 55.7584C387.703 46.7564 393.297 41.8554 399.99 41.8554C406.784 41.8554 412.178 46.7564 412.178 55.7584Z" fill="white"/>
<path d="M432.99 67.0609C432.99 74.7627 439.383 81.8643 449.873 81.8643C457.165 81.8643 461.862 78.4634 464.358 74.5625C464.358 76.463 464.559 79.1635 464.858 80.4639H477.046C476.748 78.7635 476.448 75.2627 476.448 72.6622V48.4567C476.448 38.5545 470.653 29.7527 455.068 29.7527C441.881 29.7527 434.788 38.2544 433.989 45.9562L445.776 48.4567C446.177 44.1558 449.374 40.455 455.167 40.455C460.763 40.455 463.46 43.3556 463.46 46.8564C463.46 48.5568 462.561 49.9572 459.763 50.3572L447.676 52.1576C439.484 53.3579 432.99 58.2589 432.99 67.0609ZM452.671 71.962C448.375 71.962 446.276 69.1614 446.276 66.2608C446.276 62.4599 448.973 60.5594 452.371 60.0594L463.46 58.359V60.5594C463.46 69.2615 458.265 71.962 452.671 71.962Z" fill="white"/>
<path d="M485.645 66.7608C486.243 72.3621 491.339 81.9642 506.124 81.9642C519.012 81.9642 525.205 73.7624 525.205 65.7607C525.205 58.559 520.311 52.6577 510.62 50.6571L503.626 49.1569C500.929 48.6568 499.132 47.1565 499.132 44.7559C499.132 41.9552 501.928 39.8549 505.425 39.8549C511.021 39.8549 513.118 43.5556 513.519 46.4564L524.607 43.9558C524.007 38.6546 519.312 29.7527 505.326 29.7527C494.735 29.7527 486.944 37.0543 486.944 45.8561C486.944 52.7576 491.238 58.4591 500.73 60.5594L507.224 62.0598C511.021 62.8599 512.519 64.6605 512.519 66.8609C512.519 69.4615 510.421 71.762 506.025 71.762C500.23 71.762 497.334 68.1611 497.034 64.2602L485.645 66.7608Z" fill="white"/>
<path d="M545.385 50.2571C545.685 45.7562 549.482 40.5549 556.375 40.5549C563.967 40.5549 567.165 45.3561 567.365 50.2571H545.385ZM568.664 63.0601C567.065 67.4609 563.668 70.5617 557.474 70.5617C550.88 70.5617 545.385 65.8606 545.087 59.3593H580.252C580.252 59.159 580.451 57.1587 580.451 55.2582C580.451 39.4547 571.361 29.7527 556.175 29.7527C543.588 29.7527 531.998 39.9548 531.998 55.6584C531.998 72.262 543.886 81.9642 557.374 81.9642C569.462 81.9642 577.255 74.8626 579.753 66.3607L568.664 63.0601Z" fill="white"/>
<path d="M63.7076 110.284C60.8481 113.885 55.0502 111.912 54.9813 107.314L53.9738 40.0627L99.1935 40.0627C107.384 40.0627 111.952 49.5228 106.859 55.9374L63.7076 110.284Z" fill="url(#paint0_linear)"/>
<path d="M63.7076 110.284C60.8481 113.885 55.0502 111.912 54.9813 107.314L53.9738 40.0627L99.1935 40.0627C107.384 40.0627 111.952 49.5228 106.859 55.9374L63.7076 110.284Z" fill="url(#paint1_linear)" fill-opacity="0.2"/>
<path d="M45.317 2.07103C48.1765 -1.53037 53.9745 0.442937 54.0434 5.041L54.4849 72.2922H9.83113C1.64038 72.2922 -2.92775 62.8321 2.1655 56.4175L45.317 2.07103Z" fill="#3ECF8E"/>
<defs>
<linearGradient id="paint0_linear_2993_107746" x1="36.6621" y1="8.85717" x2="88.678" y2="51.9544" gradientUnits="userSpaceOnUse">
<stop stop-color="#763AFF"/>
<stop offset="1" stop-color="#5A099A"/>
<linearGradient id="paint0_linear" x1="53.9738" y1="54.974" x2="94.1635" y2="71.8295" gradientUnits="userSpaceOnUse">
<stop stop-color="#249361"/>
<stop offset="1" stop-color="#3ECF8E"/>
</linearGradient>
<linearGradient id="paint1_linear_2993_107746" x1="53.6505" y1="51.8862" x2="138.597" y2="113.864" gradientUnits="userSpaceOnUse">
<stop stop-color="#5C00AA"/>
<stop offset="1" stop-color="#7156DA"/>
<linearGradient id="paint1_linear" x1="36.1558" y1="30.578" x2="54.4844" y2="65.0806" gradientUnits="userSpaceOnUse">
<stop/>
<stop offset="1" stop-opacity="0"/>
</linearGradient>
<clipPath id="clip0_2993_107746">
<rect width="814.056" height="161.238" fill="white" transform="translate(0.21875)"/>
</clipPath>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 5.8 KiB

After

Width:  |  Height:  |  Size: 5.7 KiB

+18 -22
View File
@@ -1,27 +1,23 @@
<svg width="815" height="163" viewBox="0 0 815 163" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_2993_107784)">
<path d="M78.033 7.723C77.9338 1.09947 69.5817 -1.74309 65.4626 3.44475L3.30264 81.7311C-4.03421 90.9714 2.5462 104.599 14.345 104.599H78.7992L79.3812 155.047C79.4804 161.67 87.8324 164.512 91.9515 159.325L154.111 81.0385C161.448 71.7983 154.868 58.1709 143.069 58.1709H78.4769L78.033 7.723Z" fill="url(#paint0_linear_2993_107784)"/>
<path d="M91.9671 159.338C87.848 164.525 79.4961 161.683 79.3969 155.059L78.3438 58.1836H143.085C154.883 58.1836 161.463 71.8109 154.127 81.0512L91.9671 159.338Z" fill="url(#paint1_linear_2993_107784)"/>
<path d="M214.303 99.3648C215.14 107.11 222.265 120.386 242.941 120.386C260.962 120.386 269.625 109.046 269.625 97.982C269.625 88.0246 262.778 79.8651 249.228 77.0989L239.448 75.0247C235.677 74.3332 233.162 72.2588 233.162 68.9396C233.162 65.0672 237.074 62.1632 241.964 62.1632C249.786 62.1632 252.72 67.28 253.279 71.2908L268.786 67.8333C267.948 60.5036 261.381 48.1953 241.824 48.1953C227.015 48.1953 216.119 58.2909 216.119 70.4608C216.119 80.0032 222.125 87.8864 235.397 90.7904L244.478 92.865C249.786 93.9712 251.882 96.4608 251.882 99.5032C251.882 103.099 248.949 106.28 242.801 106.28C234.699 106.28 230.647 101.301 230.229 95.9074L214.303 99.3648Z" fill="black"/>
<path d="M329.002 118.311H346.744C346.464 115.96 346.045 111.258 346.045 106.003V50.2695H327.463V89.8223C327.463 97.7053 322.714 103.237 314.473 103.237C305.811 103.237 301.898 97.152 301.898 89.5457V50.2695H283.318V93.2799C283.318 108.077 292.817 120.109 309.443 120.109C316.706 120.109 324.672 117.343 328.444 110.982C328.444 113.748 328.722 116.928 329.002 118.311Z" fill="black"/>
<path d="M384.452 144.589V111.675C387.804 116.239 394.79 119.973 404.29 119.973C423.708 119.973 436.699 104.76 436.699 84.1538C436.699 63.9627 425.105 48.75 404.988 48.75C394.651 48.75 386.967 53.3136 383.894 58.5691V50.2712H365.873V144.589H384.452ZM418.398 84.2922C418.398 96.4625 410.856 103.515 401.355 103.515C391.857 103.515 384.173 96.3241 384.173 84.2922C384.173 72.2604 391.857 65.2072 401.355 65.2072C410.856 65.2072 418.398 72.2604 418.398 84.2922Z" fill="black"/>
<path d="M447.223 99.7798C447.223 110.429 456.162 120.248 470.833 120.248C481.028 120.248 487.595 115.546 491.087 110.152C491.087 112.78 491.366 116.514 491.786 118.312H508.829C508.409 115.96 507.993 111.12 507.993 107.524V74.0565C507.993 60.3652 499.889 48.1953 478.097 48.1953C459.656 48.1953 449.736 59.9503 448.62 70.5992L465.104 74.0565C465.663 68.1099 470.133 62.9929 478.234 62.9929C486.059 62.9929 489.831 67.0035 489.831 71.8439C489.831 74.1949 488.575 76.1312 484.662 76.6843L467.759 79.1736C456.304 80.8332 447.223 87.6096 447.223 99.7798ZM474.742 106.556C468.737 106.556 465.801 102.684 465.801 98.6735C465.801 93.4182 469.573 90.7904 474.324 90.0991L489.831 87.748V90.7904C489.831 102.822 482.566 106.556 474.742 106.556Z" fill="black"/>
<path d="M544.745 118.31V110.013C548.375 115.821 555.639 119.97 565.14 119.97C584.7 119.97 597.553 104.619 597.553 84.0128C597.553 63.8215 585.956 48.4706 565.839 48.4706C555.639 48.4706 548.097 52.8961 545.023 57.7362V18.1836H526.723V118.31H544.745ZM578.97 84.151C578.97 96.5978 571.427 103.513 561.926 103.513C552.567 103.513 544.745 96.4596 544.745 84.151C544.745 71.7043 552.567 64.9279 561.926 64.9279C571.427 64.9279 578.97 71.7043 578.97 84.151Z" fill="black"/>
<path d="M608.072 99.7798C608.072 110.429 617.012 120.248 631.681 120.248C641.878 120.248 648.446 115.546 651.936 110.152C651.936 112.78 652.217 116.514 652.635 118.312H669.679C669.262 115.96 668.842 111.12 668.842 107.524V74.0565C668.842 60.3652 660.739 48.1953 638.945 48.1953C620.505 48.1953 610.587 59.9503 609.469 70.5992L625.952 74.0565C626.513 68.1099 630.983 62.9929 639.084 62.9929C646.909 62.9929 650.68 67.0035 650.68 71.8439C650.68 74.1949 649.423 76.1312 645.511 76.6843L628.609 79.1736C617.153 80.8332 608.072 87.6096 608.072 99.7798ZM635.593 106.556C629.586 106.556 626.651 102.684 626.651 98.6735C626.651 93.4182 630.422 90.7904 635.174 90.0991L650.68 87.748V90.7904C650.68 102.822 643.416 106.556 635.593 106.556Z" fill="black"/>
<path d="M681.701 99.3648C682.537 107.11 689.663 120.386 710.338 120.386C728.36 120.386 737.021 109.046 737.021 97.982C737.021 88.0246 730.177 79.8651 716.625 77.0989L706.845 75.0247C703.074 74.3332 700.561 72.2588 700.561 68.9396C700.561 65.0672 704.471 62.1632 709.361 62.1632C717.186 62.1632 720.118 67.28 720.679 71.2908L736.184 67.8333C735.345 60.5036 728.78 48.1953 709.222 48.1953C694.412 48.1953 683.518 58.2909 683.518 70.4608C683.518 80.0032 689.522 87.8864 702.796 90.7904L711.876 92.865C717.186 93.9712 719.281 96.4608 719.281 99.5032C719.281 103.099 716.347 106.28 710.2 106.28C702.096 106.28 698.047 101.301 697.627 95.9074L681.701 99.3648Z" fill="black"/>
<path d="M765.241 76.5459C765.661 70.3227 770.971 63.1311 780.609 63.1311C791.226 63.1311 795.698 69.7695 795.977 76.5459H765.241ZM797.794 94.248C795.558 100.333 790.808 104.62 782.146 104.62C772.925 104.62 765.241 98.1202 764.825 89.1311H813.998C813.998 88.8542 814.276 86.0884 814.276 83.4607C814.276 61.6099 801.565 48.1953 780.33 48.1953C762.729 48.1953 746.521 62.3013 746.521 84.014C746.521 106.971 763.145 120.386 782.006 120.386C798.91 120.386 809.807 110.567 813.3 98.8116L797.794 94.248Z" fill="black"/>
</g>
<svg width="581" height="113" viewBox="0 0 581 113" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M151.397 66.7608C151.996 72.3621 157.091 81.9642 171.877 81.9642C184.764 81.9642 190.959 73.7624 190.959 65.7607C190.959 58.559 186.063 52.6577 176.373 50.6571L169.379 49.1569C166.682 48.6568 164.884 47.1565 164.884 44.7559C164.884 41.9552 167.681 39.8549 171.178 39.8549C176.772 39.8549 178.87 43.5556 179.27 46.4564L190.359 43.9558C189.76 38.6546 185.064 29.7527 171.078 29.7527C160.488 29.7527 152.696 37.0543 152.696 45.8561C152.696 52.7576 156.991 58.4591 166.482 60.5594L172.976 62.0598C176.772 62.8599 178.271 64.6605 178.271 66.8609C178.271 69.4615 176.173 71.762 171.777 71.762C165.983 71.762 163.085 68.1611 162.786 64.2602L151.397 66.7608Z" fill="#1F1F1F"/>
<path d="M233.421 80.4639H246.109C245.909 78.7635 245.609 75.3628 245.609 71.5618V31.2529H232.321V59.8592C232.321 65.5606 228.925 69.5614 223.031 69.5614C216.837 69.5614 214.039 65.1604 214.039 59.6592V31.2529H200.752V62.3599C200.752 73.0622 207.545 81.7642 219.434 81.7642C224.628 81.7642 230.325 79.7638 233.022 75.1627C233.022 77.1631 233.221 79.4636 233.421 80.4639Z" fill="#1F1F1F"/>
<path d="M273.076 99.4682V75.663C275.473 78.9636 280.469 81.6644 287.263 81.6644C301.149 81.6644 310.439 70.6617 310.439 55.7584C310.439 41.1553 302.148 30.1528 287.762 30.1528C280.37 30.1528 274.875 33.4534 272.677 37.2544V31.253H259.79V99.4682H273.076ZM297.352 55.8585C297.352 64.6606 291.958 69.7616 285.164 69.7616C278.372 69.7616 272.877 64.5605 272.877 55.8585C272.877 47.1566 278.372 42.0554 285.164 42.0554C291.958 42.0554 297.352 47.1566 297.352 55.8585Z" fill="#1F1F1F"/>
<path d="M317.964 67.0609C317.964 74.7627 324.357 81.8643 334.848 81.8643C342.139 81.8643 346.835 78.4634 349.332 74.5625C349.332 76.463 349.532 79.1635 349.832 80.4639H362.02C361.72 78.7635 361.422 75.2627 361.422 72.6622V48.4567C361.422 38.5545 355.627 29.7527 340.043 29.7527C326.855 29.7527 319.761 38.2544 318.963 45.9562L330.751 48.4567C331.151 44.1558 334.348 40.455 340.141 40.455C345.737 40.455 348.434 43.3556 348.434 46.8564C348.434 48.5568 347.536 49.9572 344.738 50.3572L332.65 52.1576C324.458 53.3579 317.964 58.2589 317.964 67.0609ZM337.644 71.962C333.349 71.962 331.25 69.1614 331.25 66.2608C331.25 62.4599 333.947 60.5594 337.345 60.0594L348.434 58.359V60.5594C348.434 69.2615 343.239 71.962 337.644 71.962Z" fill="#1F1F1F"/>
<path d="M387.703 80.4641V74.4627C390.299 78.6637 395.494 81.6644 402.288 81.6644C416.276 81.6644 425.467 70.5618 425.467 55.6585C425.467 41.0552 417.174 29.9528 402.788 29.9528C395.494 29.9528 390.1 33.1535 387.902 36.6541V8.04785H374.815V80.4641H387.703ZM412.178 55.7584C412.178 64.7605 406.784 69.7616 399.99 69.7616C393.297 69.7616 387.703 64.6606 387.703 55.7584C387.703 46.7564 393.297 41.8554 399.99 41.8554C406.784 41.8554 412.178 46.7564 412.178 55.7584Z" fill="#1F1F1F"/>
<path d="M432.99 67.0609C432.99 74.7627 439.383 81.8643 449.873 81.8643C457.165 81.8643 461.862 78.4634 464.358 74.5625C464.358 76.463 464.559 79.1635 464.858 80.4639H477.046C476.748 78.7635 476.448 75.2627 476.448 72.6622V48.4567C476.448 38.5545 470.653 29.7527 455.068 29.7527C441.881 29.7527 434.788 38.2544 433.989 45.9562L445.776 48.4567C446.177 44.1558 449.374 40.455 455.167 40.455C460.763 40.455 463.46 43.3556 463.46 46.8564C463.46 48.5568 462.561 49.9572 459.763 50.3572L447.676 52.1576C439.484 53.3579 432.99 58.2589 432.99 67.0609ZM452.671 71.962C448.375 71.962 446.276 69.1614 446.276 66.2608C446.276 62.4599 448.973 60.5594 452.371 60.0594L463.46 58.359V60.5594C463.46 69.2615 458.265 71.962 452.671 71.962Z" fill="#1F1F1F"/>
<path d="M485.645 66.7608C486.243 72.3621 491.339 81.9642 506.124 81.9642C519.012 81.9642 525.205 73.7624 525.205 65.7607C525.205 58.559 520.311 52.6577 510.62 50.6571L503.626 49.1569C500.929 48.6568 499.132 47.1565 499.132 44.7559C499.132 41.9552 501.928 39.8549 505.425 39.8549C511.021 39.8549 513.118 43.5556 513.519 46.4564L524.607 43.9558C524.007 38.6546 519.312 29.7527 505.326 29.7527C494.735 29.7527 486.944 37.0543 486.944 45.8561C486.944 52.7576 491.238 58.4591 500.73 60.5594L507.224 62.0598C511.021 62.8599 512.519 64.6605 512.519 66.8609C512.519 69.4615 510.421 71.762 506.025 71.762C500.23 71.762 497.334 68.1611 497.034 64.2602L485.645 66.7608Z" fill="#1F1F1F"/>
<path d="M545.385 50.2571C545.685 45.7562 549.482 40.5549 556.375 40.5549C563.967 40.5549 567.165 45.3561 567.365 50.2571H545.385ZM568.664 63.0601C567.065 67.4609 563.668 70.5617 557.474 70.5617C550.88 70.5617 545.385 65.8606 545.087 59.3593H580.252C580.252 59.159 580.451 57.1587 580.451 55.2582C580.451 39.4547 571.361 29.7527 556.175 29.7527C543.588 29.7527 531.998 39.9548 531.998 55.6584C531.998 72.262 543.886 81.9642 557.374 81.9642C569.462 81.9642 577.255 74.8626 579.753 66.3607L568.664 63.0601Z" fill="#1F1F1F"/>
<path d="M63.7076 110.284C60.8481 113.885 55.0502 111.912 54.9813 107.314L53.9738 40.0627L99.1935 40.0627C107.384 40.0627 111.952 49.5228 106.859 55.9374L63.7076 110.284Z" fill="url(#paint0_linear)"/>
<path d="M63.7076 110.284C60.8481 113.885 55.0502 111.912 54.9813 107.314L53.9738 40.0627L99.1935 40.0627C107.384 40.0627 111.952 49.5228 106.859 55.9374L63.7076 110.284Z" fill="url(#paint1_linear)" fill-opacity="0.2"/>
<path d="M45.317 2.07103C48.1765 -1.53037 53.9745 0.442937 54.0434 5.041L54.4849 72.2922H9.83113C1.64038 72.2922 -2.92775 62.8321 2.1655 56.4175L45.317 2.07103Z" fill="#3ECF8E"/>
<defs>
<linearGradient id="paint0_linear_2993_107784" x1="36.6621" y1="9.6228" x2="88.678" y2="52.7201" gradientUnits="userSpaceOnUse">
<stop stop-color="#763AFF"/>
<stop offset="1" stop-color="#5A099A"/>
<linearGradient id="paint0_linear" x1="53.9738" y1="54.974" x2="94.1635" y2="71.8295" gradientUnits="userSpaceOnUse">
<stop stop-color="#249361"/>
<stop offset="1" stop-color="#3ECF8E"/>
</linearGradient>
<linearGradient id="paint1_linear_2993_107784" x1="53.6505" y1="52.6519" x2="138.597" y2="114.63" gradientUnits="userSpaceOnUse">
<stop stop-color="#5C00AA"/>
<stop offset="1" stop-color="#7156DA"/>
<linearGradient id="paint1_linear" x1="36.1558" y1="30.578" x2="54.4844" y2="65.0806" gradientUnits="userSpaceOnUse">
<stop/>
<stop offset="1" stop-opacity="0"/>
</linearGradient>
<clipPath id="clip0_2993_107784">
<rect width="814.056" height="161.238" fill="white" transform="translate(0.21875 0.765625)"/>
</clipPath>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 5.8 KiB

After

Width:  |  Height:  |  Size: 5.7 KiB

@@ -59,11 +59,19 @@ Today, we're releasing a huge improvement to our SQL Editor. First up, we've add
Supabase AI is aware of the SQL snippet in the editor and can modify it for you. You can ask it to change `customers` to `customer_orders`, for example. You can interact with the code the same way you would converse with ChatGPT until it's just right.
<Img src="/images/blog/launch-week-8/day-3/create-orders.png" alt="Create a table" />
<Img
src="/images/blog/launch-week-8/day-3/create-orders.png"
alt="Create a table"
zoomable={false}
/>
Next, we've added a diff view for changes that Supabase AI makes to your SQL snippet. You can tell Supabase AI what you want changed, and visualize it as you would a Git diff. From this view, you can accept or reject the diffs, and keep asking Supabase AI to make changes until you're satisfied.
<Img src="/images/blog/launch-week-8/day-3/create-orders-diff.png" alt="Create a table diff" />
<Img
src="/images/blog/launch-week-8/day-3/create-orders-diff.png"
alt="Create a table diff"
zoomable={false}
/>
We've wondered for a long time how to make it easier to teach developers how to use SQL. It's fortunate we didn't solve this problem too quickly, as it turns out that AI does a much better job than we could do ourselves.
@@ -110,7 +118,11 @@ Massive thanks to [HTMHell](https://github.com/HTMHell) (amazing handle btw) for
Speaking of commonly requested features, this one has to be in the all-time top 5. Your beautiful, hand-crafted SQL snippets used to be yours and yours alone. Now you can share them with team members and let them bask in your technical prowess.
<Img src="/images/blog/launch-week-8/day-3/share-query.png" alt="Share SQL Snippets" />
<Img
src="/images/blog/launch-week-8/day-3/share-query.png"
alt="Share SQL Snippets"
zoomable={false}
/>
You can create a set of project-wide snippets for doing common tasks, making it faster to collaborate and build. To share a snippet, just take a personal snippet that ~~Supabase AI~~ you wrote and share it with the project. It will show up in a new Project Snippets list that's visible to everyone on the team.
@@ -25,7 +25,10 @@ Our new [Vercel Integration](https://vercel.com/integrations/supabase-v2) stream
You can now [link multiple](https://app.supabase.com/org/_/integrations) Vercel projects to a single Supabase project:
![Vercel in the Supabase dashboard](/images/blog/launch-week-8/day-4/vercel-dashboard.png)
<Img
src="/images/blog/launch-week-8/day-4/vercel-dashboard.png"
alt="Vercel in the Supabase dashboard"
/>
Previously we mapped each Vercel project to a single Supabase project. With this release, we're introducing the concept of project 'Connections'. Supabase projects can have an unlimited number of Vercel Connections. This is especially useful for monorepos using [Turborepo](https://turbo.build/).
@@ -33,7 +36,7 @@ Previously we mapped each Vercel project to a single Supabase project. With this
We've improved the way we manage your Supabase environment variables.
![Vercel config](/images/blog/launch-week-8/day-4/vercel-config.png)
<Img src="/images/blog/launch-week-8/day-4/vercel-config.png" alt="Vercel config" />
Supabase keeps each of your Vercel Projects updated with Environment Variables, managing your secrets (like `service-role-key`) and public variables (like `supabase-url`).
@@ -76,7 +79,7 @@ After Vercel has deployed the app, it works without any additional configuration
We announced Database Branching on [Tuesday](/blog/supabase-local-dev#branching-and-preview-environments). We've designed this to work perfectly with Vercel's Preview Deployments.
![Vercel config](/images/blog/launch-week-8/day-4/supabase-vercel-branching.png)
<Img src="/images/blog/launch-week-8/day-4/supabase-vercel-branching.png" alt="Vercel branching" />
For now, Branching in Supabase is limited to development partners. We'll be rolling it out to everyone over the coming months. If you're interested in testing the new features, [sign up for early access](https://forms.supabase.com/branching-request).
@@ -72,7 +72,7 @@ const ParticlesCanvas = () => {
className="relative z-30"
>
<ambientLight intensity={config.lightIntensity} />
<group position={[0, 70, 0]} scale={[0.75, 0.75, 0.75]}>
<group position={[0, 0, 0]} scale={[1, 1, 1]}>
{particles?.map((user: any, index: number) => (
<Particle
key={`particle-${user.username ?? index}`}
@@ -16,8 +16,8 @@ const LW8CalloutsSection = () => {
>
<div className="relative flex-shrink flex items-center p-2 w-2/3 lg:w-1/2 md:w-auto">
<div className="flex flex-col gap-1 sm:pl-4">
<span className="text-white">Join us daily at Twitter Spaces</span>
<span className="">Friday – Day 5</span>
<span className="text-white">Twitter Spaces</span>
<span className="">Replay recordings</span>
</div>
</div>
<div className="relative flex !aspect-video h-[80px] md:h-[100px] gap-2 z-10 rounded overflow-hidden">
@@ -37,13 +37,9 @@ const LW8CalloutsSection = () => {
<div className="relative flex-shrink flex items-center p-2 w-2/3 lg:w-1/2 md:w-auto">
<div className="flex flex-col gap-1 sm:pl-4">
<div className="flex items-center gap-3">
<div className="relative w-2 h-2 flex items-center justify-center">
<div className="absolute w-2 h-2 rounded-full bg-white" />
<div className="absolute animate-pulse-radar w-6 h-6 rounded-full bg-white will-change-transform" />
</div>
<span className="text-white">LW8 Hackathon Aug 4 – Aug 13</span>
</div>
<span className="">Read more about rules and prizes on the blog</span>
<span className="">Finished</span>
</div>
</div>
<div className="relative flex !aspect-video h-[80px] md:h-[100px] gap-2 z-10 rounded overflow-hidden">
+34 -49
View File
@@ -3,62 +3,47 @@ import { StyledArticleBadge } from './Releases/components'
import Image from 'next/image'
import Link from 'next/link'
import { Swiper, SwiperSlide } from 'swiper/react'
import 'swiper/swiper.min.css'
const launchweeks = [
{ title: '7', link: '/launchweek/7' },
{ title: '6', link: '/launchweek/6' },
{ title: '5', link: '/blog/launch-week-5-hackathon' },
{ title: '4', link: '/blog/supabase-launch-week-four' },
{ title: '3', link: '/blog/supabase-launch-week-the-trilogy' },
{ title: '2', link: '/blog/supabase-launch-week-sql' },
{ title: '1', link: '/blog/launch-week' },
]
const LWArchive = () => {
return (
<div className="text-center relative z-10 text-white flex flex-col gap-8 lg:gap-16">
<div className="max-w-[38rem] mx-auto flex flex-col items-center gap-4 px-4">
<div className="w-full text-white flex flex-col lg:flex-row gap-8 lg:gap-16">
<div className="lg:basis-1/3 flex flex-col items-start gap-4">
<StyledArticleBadge>Throwback</StyledArticleBadge>
<h2 className="text-4xl">Previous Launch Weeks</h2>
<p className="text-[#9296AA]">
Explore what has been announced in the past and relive those moments.
Explore our past Launch Weeks, and check the progress we've made on our journey.
</p>
</div>
<div className="relative h-[200px] [&_.swiper-container]:h-full [&_.swiper-wrapper]:h-full [&_.swiper-slide]:h-full">
<Swiper
// centeredSlides={true}
spaceBetween={10}
slidesPerView={5.5}
// watchOverflow
threshold={2}
updateOnWindowResize
breakpoints={{
320: {
slidesPerView: 2.5,
},
720: {
slidesPerView: 3.5,
},
1440: {
slidesPerView: 5.5,
},
}}
>
{launchweeks.map((launchweek, i) => (
<SwiperSlide key={launchweek.title}>
<Link href={launchweek.link} key={launchweek.title}>
<a className="relative h-full rounded-md md:rounded-lg transition-transform bg-[#030A0C] flex items-center justify-center border border-[#111718] hover:border-brand-800">
<span className="stroke-text inline-block text-transparent bg-clip-text bg-gradient-to-b from-scale-1000 to-scale-200 text-7xl">
{launchweek.title}
</span>
</a>
</Link>
</SwiperSlide>
))}
</Swiper>
<div className="lg:basis-2/3 relative grid grid-cols-1 xl:grid-cols-2 gap-4">
<Link href="/launch-week/6">
<a className="relative h-[160px] group w-full rounded-md md:rounded-lg transition-transform bg-[#030A0C] flex items-center justify-center border border-[#111618] hover:border-brand-800 overflow-hidden">
<span className="relative z-10 stroke-text inline-block text-transparent bg-clip-text bg-gradient-to-b from-scale-1200 to-scale-1000 text-7xl drop-shadow-lg">
6
</span>
<div className="absolute inset-0 grayscale group-hover:grayscale-0">
<Image
src="/images/launchweek/archive/lw6.jpg"
alt="Launch Week 6"
layout="fill"
objectFit="cover"
/>
</div>
</a>
</Link>
<Link href="/launch-week/7">
<a className="relative h-[160px] group w-full rounded-md md:rounded-lg transition-transform bg-[#030A0C] flex items-center justify-center border border-[#111718] hover:border-brand-1200 overflow-hidden">
<span className="relative z-10 stroke-text inline-block text-transparent bg-clip-text bg-gradient-to-b from-scale-1200 to-scale-1000 text-7xl drop-shadow-lg">
7
</span>
<div className="absolute inset-0 grayscale group-hover:grayscale-0">
<Image
src="/images/launchweek/archive/lw7.jpg"
alt="Launch Week 7"
layout="fill"
objectFit="cover"
/>
</div>
</a>
</Link>
</div>
</div>
)
@@ -5,8 +5,11 @@ export function LaunchWeekLogoHeader() {
<h1 className="sr-only font-normal uppercase text-[28px] sm:text-[32px]">Launch week 8</h1>
<p className="text-white radial-gradient-text-scale-600 text-lg sm:text-2xl">
<span className="block">August 7th–11th, 2023</span>
<span>9:00 AM PT</span>
</p>
<div className="text-[#9296AA]">
<p>A week of announcing new features has come to an end.</p>
<p>Thanks to everyone who participated.</p>
</div>
</div>
</div>
)
@@ -37,12 +37,7 @@ export default function LaunchWeekPrizeSection({
quality={100}
/>
</div>
<h2 className="text-4xl">Get your winning ticket</h2>
<p className="text-[#9296AA]">
Join us on August 11th for Launch Week 8's final day
<br className="hidden md:inline-block" /> and find out if you are one of the lucky
winners. Get sharing!
</p>
<h2 className="text-4xl">Swag has been delivered</h2>
</div>
</div>
{ticket && <Ticket />}
Loaded 100 of 267 files, more files were not shown because too many files have changed in this diff. Show more