feat: redesign homepage and early access page

This commit introduces a comprehensive redesign of the homepage and refactors the "Contact Us" page into a dedicated "Get Early Access" page.

Key changes include:
- **Homepage:** A complete overhaul with new sections, including a hero, feature highlights, and a problem/solution section to better communicate the product's value proposition.
- **Early Access Page:** The former "Contact Us" page is now repurposed for early access sign-ups, with updated copy and a more focused call-to-action.
- **Component Refactoring:**
    - The `InputGroup` component has been extracted from the form into a reusable component (`app/_components/InputGroup.tsx`) for better modularity.
    - The `CenterFrame` component has been updated to support images and new props (`src`, `title`, `alt`) to fit the new homepage design.
- **Layout Improvements:** The early access form now uses a two-column grid layout on larger screens for improved user experience.
This commit is contained in:
AmirReza Jamali
2025-10-18 20:44:30 +03:30
parent 31d03b57d6
commit aad539e1a6
25 changed files with 775 additions and 263 deletions
+1 -1
View File
@@ -10,7 +10,7 @@ RUN npm i
COPY . .
RUN npm run build
RUN docker build .
#---
+106
View File
@@ -0,0 +1,106 @@
"use client";
import dynamic from "next/dynamic";
import { useEffect, useState } from "react";
import { ApexOptions } from "apexcharts";
const ReactApexChart = dynamic(() => import("react-apexcharts"), { ssr: false });
interface ChartState {
series: {
name: string;
data: number[];
}[];
options: ApexOptions;
}
const ApexChart = () => {
const [state, setState] = useState<ChartState | null>(null);
useEffect(() => {
const initialState: ChartState = {
series: [
{
name: "Sales",
data: [
182, 192, 230, 198, 243, 234, 244, 210, 274, 220, 225, 289, 265,
304,
],
},
],
options: {
chart: {
toolbar: { show: false },
height: 350,
type: "line",
},
forecastDataPoints: {
count: 0,
},
stroke: {
width: 6,
curve: "smooth",
},
fill: {
type: "gradient",
gradient: {
shade: "dark",
type: "horizontal",
shadeIntensity: 0.5,
gradientToColors: ["#99DDE5"],
inverseColors: false,
opacityFrom: 1,
opacityTo: 1,
stops: [0, 100],
},
},
colors: ["#0164FF"],
xaxis: {
type: "datetime",
categories: [
"1/11/2024",
"2/11/2024",
"3/11/2024",
"5/11/2024",
"6/11/2024",
"7/11/2024",
"8/11/2024",
"9/11/2024",
"10/11/2024",
"11/11/2024",
"12/11/2024",
"1/11/2025",
"2/11/2025",
"3/11/2025",
],
tickAmount: 0,
labels: {
formatter: function (value: any, timestamp: any, opts: any) {
return opts.dateFormatter(new Date(timestamp), "dd MMM");
},
},
},
},
};
setState(initialState);
}, []);
if (!state) {
return <div>Loading...</div>;
}
return (
<div>
<div id="chart">
<ReactApexChart
options={state.options}
series={state.series}
type="line"
height={350}
/>
</div>
<div id="html-dist"></div>
</div>
);
};
export default ApexChart;
+64
View File
@@ -0,0 +1,64 @@
"use client";
import { HTMLInputTypeAttribute, useState } from "react";
import { RegisterOptions, UseFormRegister } from "react-hook-form";
function InputGroup({
id,
label,
register,
type,
validation,
error,
}: {
label: string;
id: string;
register: UseFormRegister<any>;
type: HTMLInputTypeAttribute;
validation?: RegisterOptions;
error?: string;
}) {
const [isFocused, setIsFocused] = useState(false);
const [hasValue, setHasValue] = useState(false);
const { onChange, ...rest } = register(id, validation);
const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
setHasValue(e.target.value !== "");
onChange(e);
};
return (
<div>
<div className="relative w-full my-3">
<input
type={type}
className={`border ${
error
? "border-red-500"
: isFocused
? "border-(--primary)"
: "border-gray-200"
} p-2 rounded-lg w-full outline-none`}
id={id}
{...rest}
onChange={handleChange}
onFocus={() => setIsFocused(true)}
onBlur={() => setIsFocused(false)}
/>
<label
htmlFor={id}
className={`absolute left-3 transition-all duration-200 pointer-events-none bg-white px-1 ${
isFocused || hasValue
? "-top-2 text-xs text-gray-600"
: "top-1/2 -translate-y-1/2 text-base text-gray-400"
}`}>
{label}
<span className="text-red-400">*</span>
</label>
</div>
{error && <p className="text-red-500 text-sm my-3">{error}</p>}
</div>
);
}
export default InputGroup;
+7 -68
View File
@@ -1,8 +1,8 @@
"use client";
import api from "@/service/api";
import { HTMLInputTypeAttribute } from "react";
import { RegisterOptions, useForm, UseFormRegister } from "react-hook-form";
import { useForm } from "react-hook-form";
import { toast } from "react-toastify";
import InputGroup from "../_components/InputGroup";
type TContactUsForm = {
full_name: string;
company_name: string;
@@ -27,37 +27,29 @@ const ContactUsForm = () => {
};
return (
<form
className="w-full px-4 md:px-60 py-10"
className="w-full px-4 md:px-16 py-10 grid md:grid-cols-2 gap-4 "
onSubmit={handleSubmit(onSubmit)}>
<InputGroup
icon={UserIcon}
id="full_name"
label="Full name"
placeholder="Enter Full name"
register={register}
type="text"
/>
<InputGroup
icon={UserIcon}
id="company_name"
label="Company name"
placeholder="Enter Company Name"
register={register}
type="text"
/>
<InputGroup
icon={UserIcon}
id="work_email"
label="Work email"
placeholder="Enter Work Email"
register={register}
type="email"
/>
<InputGroup
icon={UserIcon}
id="phone_number"
label="Phone number"
placeholder="Enter Phone Number"
register={register}
type="text"
error={errors.phone_number?.message}
@@ -68,66 +60,13 @@ const ContactUsForm = () => {
},
}}
/>
<button className="bg-(--primary) w-full text-white rounded-full py-4">
Submit
<div className="md:col-span-2 flex justify-end">
<button className="bg-(--primary) w-fit text-white rounded-full py-4 px-6">
Register Now
</button>
</div>
</form>
);
};
export default ContactUsForm;
function InputGroup({
icon,
id,
label,
placeholder,
register,
type,
validation,
error,
}: {
label: string;
id: string;
icon: () => React.JSX.Element;
placeholder: string;
register: UseFormRegister<any>;
type: HTMLInputTypeAttribute;
validation?: RegisterOptions;
error?: string;
}) {
return (
<>
<label htmlFor={id}>{label}</label>
<div className="relative w-full my-3">
<input
type={type}
className={`border ${
error ? "border-red-500" : "border-gray-200"
} p-2 px-10 rounded-lg w-full`}
id={id}
{...register(id, validation)}
placeholder={placeholder}
/>
<span className="absolute left-0 bottom-0 top-0 flex items-center pl-2">
{icon()}
</span>
</div>
{error && <p className="text-red-500 text-sm my-3">{error}</p>}
</>
);
}
function UserIcon() {
return (
<svg
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
xmlns="http://www.w3.org/2000/svg">
<path
d="M16 6H15.25C15.25 7.79493 13.7949 9.25 12 9.25V10V10.75C14.6234 10.75 16.75 8.62335 16.75 6H16ZM12 10V9.25C10.2051 9.25 8.75 7.79493 8.75 6H8H7.25C7.25 8.62335 9.37665 10.75 12 10.75V10ZM8 6H8.75C8.75 4.20507 10.2051 2.75 12 2.75V2V1.25C9.37665 1.25 7.25 3.37665 7.25 6H8ZM12 2V2.75C13.7949 2.75 15.25 4.20507 15.25 6H16H16.75C16.75 3.37665 14.6234 1.25 12 1.25V2ZM9 13V13.75H15V13V12.25H9V13ZM15 21V20.25H9V21V21.75H15V21ZM9 21V20.25C7.20507 20.25 5.75 18.7949 5.75 17H5H4.25C4.25 19.6234 6.37665 21.75 9 21.75V21ZM19 17H18.25C18.25 18.7949 16.7949 20.25 15 20.25V21V21.75C17.6234 21.75 19.75 19.6234 19.75 17H19ZM15 13V13.75C16.7949 13.75 18.25 15.2051 18.25 17H19H19.75C19.75 14.3766 17.6234 12.25 15 12.25V13ZM9 13V12.25C6.37665 12.25 4.25 14.3766 4.25 17H5H5.75C5.75 15.2051 7.20507 13.75 9 13.75V13Z"
fill="#9E9E9E"
/>
</svg>
);
}
+2 -19
View File
@@ -2,25 +2,8 @@ import ContactUsForm from "./form";
const ContactUs = () => {
return (
<div className="flex flex-col items-center mt-20">
<div className="flex flex-col items-center mb-16">
<h6 className="text-lg w-fit font-semibold text-(--primary) bg-(--primary)/20 opacity-80 p-2 rounded-full">
Contact Us
</h6>
<h1 className="font-extrabold my-6 text-4xl">Let's get in touch</h1>
<div className=" text-center block md:flex gap-1">
<p className="font-extralight text-xl">
Or just reach out manually to
</p>
<a
href="mailto:info@opples.com"
className="text-(--primary) font-extralight text-xl">
info@opplens.com
</a>
</div>
</div>
<section className="border border-gray-300 rounded-4xl w-10/12 flex flex-col items-center">
<div className="flex flex-col items-center mt-20 px-4">
<section className="border border-gray-300 rounded-4xl w-full max-w-4xl flex flex-col items-center bg-white">
<ContactUsForm />
</section>
</div>
+34 -64
View File
@@ -3,7 +3,7 @@ import { Geist, Geist_Mono } from "next/font/google";
import Image from "next/image";
import Link from "next/link";
import { ToastContainer, Zoom } from "react-toastify";
import HeaderButtons from "./_components/HeaderButtons";
import ContactUs from "./contact-us/page";
import "./globals.css";
const geistSans = Geist({
variable: "--font-geist-sans",
@@ -32,7 +32,7 @@ function ContactInfo({
ariaLabel: string;
}) {
return (
<div className="flex gap-3 my-3">
<div className="flex gap-3 my-3 text-white">
<Image
src={icon}
width={24}
@@ -82,9 +82,8 @@ export default async function RootLayout({
return (
<html lang="en">
<body
className={`${geistSans.variable} ${geistMono.variable} antialiased`}>
<div className="container px-4 py-4 m-auto">
<header className="flex justify-between items-center border-b md:border-none border-gray-300 pb-4">
className={`${geistSans.variable} ${geistMono.variable} antialiased flex flex-col min-h-screen bg-[url('/main-bg.svg')] bg-cover bg-no-repeat`}>
<header className="flex justify-between items-center pb-4 container px-4 py-4 m-auto">
<Link
href="/"
aria-label="Opp lens home">
@@ -96,38 +95,8 @@ export default async function RootLayout({
priority
/>
</Link>
<div className="flex gap-5 items-center">
<nav
className="hidden md:flex"
aria-label="Main navigation">
<HeaderButtons />
</nav>
<label
htmlFor="language"
className="sr-only">
Select language
</label>
<select
name="language"
id="language"
aria-label="Language selector">
<option value="en">English</option>
</select>
</div>
</header>
<nav
className="block md:hidden"
aria-label="Mobile navigation">
<HeaderButtons />
</nav>
<div className="hidden absolute -z-20 left-0 md:block">
<Image
src={"/side-shallow.svg"}
alt="Shallow"
width={235}
height={235}
/>
</div>
<ToastContainer
position="top-right"
autoClose={2500}
@@ -140,43 +109,44 @@ export default async function RootLayout({
draggable
pauseOnHover
/>
{children}
<div className="hidden absolute -z-20 right-0 rotate-y-180 md:block">
<Image
src={"/side-shallow.svg"}
alt="Shallow"
width={235}
height={235}
/>
<main className="container px-4 py-4 m-auto flex-grow">{children}</main>
<footer className="relative h-full bg-[url('/footer-bg.svg')] bg-cover bg-no-repeat mt-96">
<div className="absolute w-full -top-[420px] md:-top-72">
<ContactUs />
</div>
<footer className="mt-14">
<div className="flex justify-center items-center border-t pt-5 border-gray-300">
<div className="container px-4 py-4 m-auto flex flex-col justify-center items-center mt-72 ">
<div className="flex justify-between flex-col md:flex-row gap-14 w-full md:w-1/2">
<div>
<Image
src="/main-logo.svg"
src={"/footer-logo.svg"}
alt="Opp lens logo"
width={180}
height={30}
priority
/>
</div>
<address className="md:flex md:justify-evenly w-full mt-14 px-5 not-italic">
{contactInfo.map((item) => (
<ContactInfo
key={item.contact}
contact={item.contact}
href={item.href}
icon={item.icon}
ariaLabel={item.ariaLabel}
/>
))}
</address>
<div className="flex justify-center items-center">
<p className="text-center text-(--gray-primary) mt-5 leading-10">
Stockholm, Sweden © 2025 Opplens.com by PBL Partners AB. All
Rights Reserved. Democratizing Tender Access for SMEs.
<p className="text-white my-2">
Democratizing Tender Access for SMEs.
</p>
<p className="text-white my-2">
© 2025 Opplens.com by PBL Partners AB. All Rights Reserved.
</p>
</div>
</footer>
<div>
{contactInfo.map((contact, index) => (
<ContactInfo
key={index}
icon={contact.icon}
contact={contact.contact}
href={contact.href}
ariaLabel={contact.ariaLabel}
/>
))}
</div>
</div>
</div>
</footer>
</body>
</html>
);
+178 -79
View File
@@ -1,6 +1,6 @@
import { Metadata } from "next";
import Image from "next/image";
import ApexChart from "./_components/ApexChart";
export const metadata: Metadata = {
title: "Opp lens - AI-Powered Tender Management for SMEs | Win More Tenders",
description:
@@ -21,109 +21,208 @@ export const metadata: Metadata = {
};
export default function Home() {
const centerFrameItems = [
const centerFrames = [
{
header: 200,
text: "Users",
description: `Lacking the time, dedicated staff, and
expertise to constantly monitor the market
and prepare high-quality bids.`,
src: "/magnifier.svg",
title: "Discover with AI",
alt: "Magnifier",
description:
"Our intelligent platform scours thousands of sources to find the perfect, most relevant tender opportunities for your specific business and expertise",
},
{
header: 520,
text: "Contracts",
description: `Navigating complex requirements and
processes designed for large corporations
with dedicated tender departments.`,
src: "/clipboard.svg",
title: "Prepare with Experts",
alt: "Clipboard",
description:
"Gain access to expert support and powerful tools to craft compelling, competitive, and high-quality bids that stand out from the competition.",
},
{
header: 1500,
text: "Tenders",
description: `Did you know 68% of SMEs in Sweden
rarely or never win public tenders? It's time
to change that.`,
src: "/thumbs-up.svg",
title: "Win with a Partner",
alt: "thumbs-up",
description:
"We operate on a partnership model. We only succeed when you win. This aligns our goals and makes us a true partner in your growth.",
},
];
return (
<main className="mt-8 flex flex-col justify-center items-center gap-14">
<section
className="flex"
aria-labelledby="hero-heading">
<div className="flex flex-col">
<h1
className="gradient-text md:!text-left md:!text-8xl md:mb-10"
id="hero-heading">
AI-Powered
</h1>
<Image
className="block md:hidden"
src={"/images/mobile.png"}
alt="Opp lens platform interface on mobile device"
width={520}
height={280}
priority
/>
<div className="w-full flex flex-col gap-6 text-xl">
<h2 className="text-(--primary) font-bold text-5xl md:!mb-10">
Tender Management
<>
<section className="block md:flex justify-around items-center">
<div className="flex gap-4 w-full md:w-1/2 font-bold text-4xl text-center flex-col bg-gray-800/5 p-10 rounded-[40px] h-[500px] mb-16">
<h2>
<span>$</span>
<span>12,345,678</span>
</h2>
<h3 className="font-bold">Win more tenders, automatically!</h3>
<p className="text-(--gray-primary)">
Our platform finds tenders tailored to your business, automates
document handling, and sends real-time alerts. Win more
opportunities with less effort and zero manual search.
</p>
</div>
<h2 className="capitalize">total tender amount you missed today</h2>
<ApexChart />
</div>
<div className="mr-8">
<Image
className="hidden md:block"
src={"/images/mobile.png"}
alt="Opp lens platform interface on desktop"
width={550}
height={480}
priority
className="-z-10"
src="/mobile.svg"
width={300}
height={820}
alt="phone"
/>
</div>
</section>
<section
className="flex flex-col gap-4 text-center md:flex-row"
aria-labelledby="statistics-heading">
<h2
id="statistics-heading"
className="sr-only">
Platform Statistics
</h2>
{centerFrameItems.map((item, index) => (
<div className="text-left flex flex-col gap-6 bg-gradient-to-b from-[#011132] to-[#012B80] text-white rounded-[56px] p-6 md:p-14 -mt-16 z-10 md:ml-28">
<h1 className="capitalize font-extrabold text-5xl ">
democratizing the world of tenders
</h1>
<p className="text-xs">
Opplens is your dedicated AI-powered partner, leveling the playing
field so you can win the public and private contracts you deserve.
Compete on your true strengths.
</p>
<div className="flex justify-end">
<button className="bg-(--primary) rounded-4xl py-4 px-6">
Get early access
</button>
</div>
</div>
<article className="mt-40">
<h4 className="capitalize font-bold text-4xl">
your in-house tender department, powered by
<span className="uppercase">ai</span>
</h4>
<small className="text-gray-600 mt-3">
Opplens is the end-to-end solution that gives you the power to compete
and win.
</small>
</article>
<section className="flex flex-col gap-4 md:flex-row">
{centerFrames.map((frame, index) => (
<CenterFrame
key={index}
header={item.header}
text={item.text}
description={item.description}
key={frame.description}
src={frame.src}
title={frame.title}
description={frame.description}
alt={frame.alt}
/>
))}
</section>
</main>
<section className="mt-36 bg-[#F7FAFF] px-4 py-6 rounded-4xl flex flex-col gap-9 md:p-16">
<div className="flex flex-col gap-4">
<h2 className=" font-bold text-4xl">
Tired of Complex Tenders & Lost Opportunities?
</h2>
<p className="font-normal text-sm">
The procurement market is tough for SMEs. We get it. You're facing
an uphill battle.
</p>
</div>
<div className="flex flex-col gap-4 md:flex-row md:justify-between">
<div className="flex flex-col gap-4 md:w-80">
<div className="p-4">
<Image
src={"/clock.svg"}
alt="clock icon"
width={36}
height={36}
/>
</div>
<h2 className="font-bold">Resource Drain</h2>
<p>
Lacking the time, dedicated staff, and expertise to constantly
monitor the market and prepare high-quality bids.
</p>
</div>
<div className="flex flex-col gap-4 md:w-80">
<div className="p-4">
<Image
src={"/clipboard.svg"}
alt="clipboard icon"
width={36}
height={36}
/>
</div>
<h2 className="font-bold">Overwhelming Complexity</h2>
<p>
Navigating complex requirements and processes designed for large
corporations with dedicated tender departments.
</p>
</div>
<div className="flex flex-col gap-4 md:w-80">
<div className="p-4">
<Image
src={"/arrow-up.svg"}
alt="arrow-up icon"
width={36}
height={36}
/>
</div>
<h2 className="font-bold">Low Win Rates</h2>
<p>
Did you know 68% of SMEs in Sweden rarely or never win public
tenders? It's time to change that.
</p>
</div>
</div>
</section>
<section className="flex flex-col mt-36 gap-10 w-3/4 m-auto">
<div>
<h2 className="font-bold text-4xl">The Opplens Advantage</h2>
</div>
<div className="flex flex-col gap-10 md:flex-row">
<div className="flex flex-col gap-7 md:flex-row bg-[#FFF7EB] p-10 rounded-3xl md:pb-20">
<Image
src={"people.svg"}
width={48}
height={48}
alt="people icon"
/>
<div className="flex flex-col gap-4">
<h2 className="font-bold text-xl">A True Partnership Model</h2>
<p>
Lower your risk with our performance-based options. Our success
is directly tied to yours, making us a dedicated partner
invested in your growth, not just a software provider.
</p>
</div>
</div>
<div className="flex flex-col gap-7 md:flex-row bg-[#E5EFFF] p-10 rounded-3xl md:pb-20">
<Image
src={"shield-tick.svg"}
width={48}
height={48}
alt="shield icon"
/>
<div className="flex flex-col gap-4">
<h2 className="font-bold text-xl">Unmatched Data Security</h2>
<p>
Your business data is critical. Our unique on premise AI engine
ensures your information remains 100% private and secure, unlike
cloud based services. Fully GDPR compliant by design.
</p>
</div>
</div>
</div>
</section>
</>
);
}
function CenterFrame({
header,
text,
src,
title,
description,
alt,
}: {
header: number;
text: string;
src: string;
title: string;
description: string;
alt: string;
}) {
return (
<article className="flex flex-col justify-center items-center gap-4">
<p
className="gradient-text"
aria-label={`${header} ${text}`}>
<strong>{header}</strong>
</p>
<h3 className="text-2xl font-semibold">{text}</h3>
<p className="text-(--gray-primary)">{description}</p>
</article>
<div className="bg-[#F7FAFF] border border-(--primary)/30 rounded-3xl my-4 py-10 px-6">
<Image
src={src}
alt={alt}
width={36}
height={36}
/>
<h3 className="text-2xl font-bold">{title}</h3>
<p className="text-gray-600">{description}</p>
</div>
);
}
+135
View File
@@ -8,9 +8,11 @@
"name": "tm-landing",
"version": "0.1.0",
"dependencies": {
"apexcharts": "^5.3.5",
"axios": "^1.12.2",
"next": "15.5.5",
"react": "19.1.0",
"react-apexcharts": "^1.8.0",
"react-dom": "19.1.0",
"react-hook-form": "^7.65.0",
"react-toastify": "^11.0.5"
@@ -672,6 +674,62 @@
"node": ">= 10"
}
},
"node_modules/@svgdotjs/svg.draggable.js": {
"version": "3.0.6",
"resolved": "https://registry.npmmirror.com/@svgdotjs/svg.draggable.js/-/svg.draggable.js-3.0.6.tgz",
"integrity": "sha512-7iJFm9lL3C40HQcqzEfezK2l+dW2CpoVY3b77KQGqc8GXWa6LhhmX5Ckv7alQfUXBuZbjpICZ+Dvq1czlGx7gA==",
"license": "MIT",
"peerDependencies": {
"@svgdotjs/svg.js": "^3.2.4"
}
},
"node_modules/@svgdotjs/svg.filter.js": {
"version": "3.0.9",
"resolved": "https://registry.npmmirror.com/@svgdotjs/svg.filter.js/-/svg.filter.js-3.0.9.tgz",
"integrity": "sha512-/69XMRCDoam2HgC4ldHIaDgeQf1ViHIsa0Ld4uWgiXtZ+E24DWHe/9Ib6kbNiZ7WRIdlVokUDR1Fg0kjIpkfbw==",
"license": "MIT",
"dependencies": {
"@svgdotjs/svg.js": "^3.2.4"
},
"engines": {
"node": ">= 0.8.0"
}
},
"node_modules/@svgdotjs/svg.js": {
"version": "3.2.5",
"resolved": "https://registry.npmmirror.com/@svgdotjs/svg.js/-/svg.js-3.2.5.tgz",
"integrity": "sha512-/VNHWYhNu+BS7ktbYoVGrCmsXDh+chFMaONMwGNdIBcFHrWqk2jY8fNyr3DLdtQUIalvkPfM554ZSFa3dm3nxQ==",
"license": "MIT",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/Fuzzyma"
}
},
"node_modules/@svgdotjs/svg.resize.js": {
"version": "2.0.5",
"resolved": "https://registry.npmmirror.com/@svgdotjs/svg.resize.js/-/svg.resize.js-2.0.5.tgz",
"integrity": "sha512-4heRW4B1QrJeENfi7326lUPYBCevj78FJs8kfeDxn5st0IYPIRXoTtOSYvTzFWgaWWXd3YCDE6ao4fmv91RthA==",
"license": "MIT",
"engines": {
"node": ">= 14.18"
},
"peerDependencies": {
"@svgdotjs/svg.js": "^3.2.4",
"@svgdotjs/svg.select.js": "^4.0.1"
}
},
"node_modules/@svgdotjs/svg.select.js": {
"version": "4.0.3",
"resolved": "https://registry.npmmirror.com/@svgdotjs/svg.select.js/-/svg.select.js-4.0.3.tgz",
"integrity": "sha512-qkMgso1sd2hXKd1FZ1weO7ANq12sNmQJeGDjs46QwDVsxSRcHmvWKL2NDF7Yimpwf3sl5esOLkPqtV2bQ3v/Jg==",
"license": "MIT",
"engines": {
"node": ">= 14.18"
},
"peerDependencies": {
"@svgdotjs/svg.js": "^3.2.4"
}
},
"node_modules/@swc/helpers": {
"version": "0.5.15",
"resolved": "https://registry.npmmirror.com/@swc/helpers/-/helpers-0.5.15.tgz",
@@ -987,6 +1045,26 @@
"@types/react": "^19.2.0"
}
},
"node_modules/@yr/monotone-cubic-spline": {
"version": "1.0.3",
"resolved": "https://registry.npmmirror.com/@yr/monotone-cubic-spline/-/monotone-cubic-spline-1.0.3.tgz",
"integrity": "sha512-FQXkOta0XBSUPHndIKON2Y9JeQz5ZeMqLYZVVK93FliNBFm7LNMIZmY6FrMEB9XPcDbE2bekMbZD6kzDkxwYjA==",
"license": "MIT"
},
"node_modules/apexcharts": {
"version": "5.3.5",
"resolved": "https://registry.npmmirror.com/apexcharts/-/apexcharts-5.3.5.tgz",
"integrity": "sha512-I04DY/WBZbJgJD2uixeV5EzyiL+J5LgKQXEu8rctqAwyRmKv44aDVeofJoLdTJe3ao4r2KEQfCgtVzXn6pqirg==",
"license": "SEE LICENSE IN LICENSE",
"dependencies": {
"@svgdotjs/svg.draggable.js": "^3.0.4",
"@svgdotjs/svg.filter.js": "^3.0.8",
"@svgdotjs/svg.js": "^3.2.4",
"@svgdotjs/svg.resize.js": "^2.0.2",
"@svgdotjs/svg.select.js": "^4.0.1",
"@yr/monotone-cubic-spline": "^1.0.3"
}
},
"node_modules/asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz",
@@ -1323,6 +1401,12 @@
"jiti": "lib/jiti-cli.mjs"
}
},
"node_modules/js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz",
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
"license": "MIT"
},
"node_modules/lightningcss": {
"version": "1.30.1",
"resolved": "https://registry.npmmirror.com/lightningcss/-/lightningcss-1.30.1.tgz",
@@ -1562,6 +1646,18 @@
"url": "https://opencollective.com/parcel"
}
},
"node_modules/loose-envify": {
"version": "1.4.0",
"resolved": "https://registry.npmmirror.com/loose-envify/-/loose-envify-1.4.0.tgz",
"integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
"license": "MIT",
"dependencies": {
"js-tokens": "^3.0.0 || ^4.0.0"
},
"bin": {
"loose-envify": "cli.js"
}
},
"node_modules/magic-string": {
"version": "0.30.19",
"resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.19.tgz",
@@ -1723,6 +1819,15 @@
"node": "^10 || ^12 || >=14"
}
},
"node_modules/object-assign": {
"version": "4.1.1",
"resolved": "https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz",
"integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/picocolors": {
"version": "1.1.1",
"resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz",
@@ -1758,6 +1863,17 @@
"node": "^10 || ^12 || >=14"
}
},
"node_modules/prop-types": {
"version": "15.8.1",
"resolved": "https://registry.npmmirror.com/prop-types/-/prop-types-15.8.1.tgz",
"integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
"license": "MIT",
"dependencies": {
"loose-envify": "^1.4.0",
"object-assign": "^4.1.1",
"react-is": "^16.13.1"
}
},
"node_modules/proxy-from-env": {
"version": "1.1.0",
"resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
@@ -1773,6 +1889,19 @@
"node": ">=0.10.0"
}
},
"node_modules/react-apexcharts": {
"version": "1.8.0",
"resolved": "https://registry.npmmirror.com/react-apexcharts/-/react-apexcharts-1.8.0.tgz",
"integrity": "sha512-MuEp56gc0NMO2UUgY94fxQzoBE4XEjmcCha4xYY0vJdRrc1yfFFZE4QrCekOt2wcS3nibghzca/q/CbgkAgN5w==",
"license": "SEE LICENSE IN LICENSE",
"dependencies": {
"prop-types": "^15.8.1"
},
"peerDependencies": {
"apexcharts": ">=4.0.0",
"react": ">=0.13"
}
},
"node_modules/react-dom": {
"version": "19.1.0",
"resolved": "https://registry.npmmirror.com/react-dom/-/react-dom-19.1.0.tgz",
@@ -1801,6 +1930,12 @@
"react": "^16.8.0 || ^17 || ^18 || ^19"
}
},
"node_modules/react-is": {
"version": "16.13.1",
"resolved": "https://registry.npmmirror.com/react-is/-/react-is-16.13.1.tgz",
"integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
"license": "MIT"
},
"node_modules/react-toastify": {
"version": "11.0.5",
"resolved": "https://registry.npmmirror.com/react-toastify/-/react-toastify-11.0.5.tgz",
+2
View File
@@ -8,9 +8,11 @@
"start": "next start"
},
"dependencies": {
"apexcharts": "^5.3.5",
"axios": "^1.12.2",
"next": "15.5.5",
"react": "19.1.0",
"react-apexcharts": "^1.8.0",
"react-dom": "19.1.0",
"react-hook-form": "^7.65.0",
"react-toastify": "^11.0.5"
+24
View File
@@ -0,0 +1,24 @@
<svg width="1440" height="3637" viewBox="0 0 1440 3637" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_4328_7407)">
<path d="M169.999 1702.5C36.5901 1957.69 24.0911 2029.52 -0.000610352 2155V902H1440C1418 980.333 1308.5 1102.59 1119 1191.5C979.321 1257.03 302 1450 169.999 1702.5Z" fill="#E5EFFF"/>
<path d="M-5.36442e-06 2386C-5.36442e-06 2268.83 40 2055.21 154.824 1874.05C311.59 1626.71 1006.42 1474.12 1137.88 1412.44C1316.24 1328.77 1419.29 1213.72 1440 1140" stroke="#B4D1FF"/>
<path d="M-0.0898438 758.5C23 694.5 113.955 575.063 257.5 522C457.611 448.027 746.117 430 774 183.5C782.071 112.149 783.203 66.1507 777.779 0" stroke="#B4D1FF"/>
<path d="M954 143.5V0H1440V902H0C22 823.667 131.5 703.409 321 614.5C460.679 548.966 954 489 954 143.5Z" fill="#E5EFFF"/>
<path d="M1126 153.5V0H1440V902H552C601.5 782.5 611.5 695.083 806.5 582.5C921.531 516.087 1126 409 1126 153.5Z" fill="url(#paint0_linear_4328_7407)"/>
<path d="M1296 203.5V0H1440V902H786.5C928 813.5 1009 752.5 1143 614.5C1234 506 1296 383.5 1296 203.5Z" fill="url(#paint1_linear_4328_7407)"/>
<path d="M1440 2327C1440 3462.32 479.165 3696.63 0 3671.7V3869H1440C1439.16 2882.06 1440 2869.79 1440 2327Z" fill="#E5EFFF"/>
</g>
<defs>
<linearGradient id="paint0_linear_4328_7407" x1="996" y1="648" x2="996" y2="879" gradientUnits="userSpaceOnUse">
<stop stop-color="#B4D1FF"/>
<stop offset="1" stop-color="#E5EFFF"/>
</linearGradient>
<linearGradient id="paint1_linear_4328_7407" x1="1196" y1="666.5" x2="1196" y2="902" gradientUnits="userSpaceOnUse">
<stop stop-color="#0164FF"/>
<stop offset="1" stop-color="#E5EFFF"/>
</linearGradient>
<clipPath id="clip0_4328_7407">
<rect width="1440" height="3637" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

+11
View File
@@ -0,0 +1,11 @@
<svg width="1440" height="1542" viewBox="0 0 1440 1542" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_4328_7697)">
<path d="M-5.36442e-06 2386C-5.36442e-06 2268.83 40 2055.21 154.824 1874.05C311.59 1626.71 1006.42 1474.12 1137.88 1412.44C1316.24 1328.77 1419.29 1213.72 1440 1140" stroke="#B4D1FF"/>
<path d="M1440 0C1440 1135.32 479.165 1369.63 0 1344.7V1542H1440C1439.16 555.062 1440 542.795 1440 0Z" fill="#E5EFFF"/>
</g>
<defs>
<clipPath id="clip0_4328_7697">
<rect width="1440" height="1542" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 566 B

+23
View File
@@ -0,0 +1,23 @@
<svg width="1440" height="2155" viewBox="0 0 1440 2155" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_4328_7714)">
<path d="M169.999 1702.5C36.5901 1957.69 24.0911 2029.52 -0.000610352 2155V902H1440C1418 980.333 1308.5 1102.59 1119 1191.5C979.321 1257.03 302 1450 169.999 1702.5Z" fill="#E5EFFF"/>
<path d="M-5.36442e-06 2386C-5.36442e-06 2268.83 40 2055.21 154.824 1874.05C311.59 1626.71 1006.42 1474.12 1137.88 1412.44C1316.24 1328.77 1419.29 1213.72 1440 1140" stroke="#B4D1FF"/>
<path d="M-0.0898438 758.5C23 694.5 113.955 575.063 257.5 522C457.611 448.027 746.117 430 774 183.5C782.071 112.149 783.203 66.1507 777.779 0" stroke="#B4D1FF"/>
<path d="M954 143.5V0H1440V902H0C22 823.667 131.5 703.409 321 614.5C460.679 548.966 954 489 954 143.5Z" fill="#E5EFFF"/>
<path d="M1126 153.5V0H1440V902H552C601.5 782.5 611.5 695.083 806.5 582.5C921.531 516.087 1126 409 1126 153.5Z" fill="url(#paint0_linear_4328_7714)"/>
<path d="M1296 203.5V0H1440V902H786.5C928 813.5 1009 752.5 1143 614.5C1234 506 1296 383.5 1296 203.5Z" fill="url(#paint1_linear_4328_7714)"/>
</g>
<defs>
<linearGradient id="paint0_linear_4328_7714" x1="996" y1="648" x2="996" y2="879" gradientUnits="userSpaceOnUse">
<stop stop-color="#B4D1FF"/>
<stop offset="1" stop-color="#E5EFFF"/>
</linearGradient>
<linearGradient id="paint1_linear_4328_7714" x1="1196" y1="666.5" x2="1196" y2="902" gradientUnits="userSpaceOnUse">
<stop stop-color="#0164FF"/>
<stop offset="1" stop-color="#E5EFFF"/>
</linearGradient>
<clipPath id="clip0_4328_7714">
<rect width="1440" height="2155" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

+3
View File
@@ -0,0 +1,3 @@
<svg width="42" height="26" viewBox="0 0 42 26" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M23.1111 2H40M40 2V19.6M40 2L23.1111 19.6L14.6667 10.8L2 24" stroke="#34BCCB" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 256 B

+4
View File
@@ -0,0 +1,4 @@
<svg width="32" height="40" viewBox="0 0 32 40" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M10 6H6C4.93913 6 3.92172 6.42143 3.17157 7.17157C2.42143 7.92172 2 8.93913 2 10V34C2 35.0609 2.42143 36.0783 3.17157 36.8284C3.92172 37.5786 4.93913 38 6 38H26C27.0609 38 28.0783 37.5786 28.8284 36.8284C29.5786 36.0783 30 35.0609 30 34V10C30 8.93913 29.5786 7.92172 28.8284 7.17157C28.0783 6.42143 27.0609 6 26 6H22M10 6C10 7.06087 10.4214 8.07828 11.1716 8.82843C11.9217 9.57857 12.9391 10 14 10H18C19.0609 10 20.0783 9.57857 20.8284 8.82843C21.5786 8.07828 22 7.06087 22 6M10 6C10 4.93913 10.4214 3.92172 11.1716 3.17157C11.9217 2.42143 12.9391 2 14 2H18C19.0609 2 20.0783 2.42143 20.8284 3.17157C21.5786 3.92172 22 4.93913 22 6M16 20H22H16ZM16 28H22H16ZM10 20H10.02H10ZM10 28H10.02H10Z" fill="#E0F0DC"/>
<path d="M10 6H6C4.93913 6 3.92172 6.42143 3.17157 7.17157C2.42143 7.92172 2 8.93913 2 10V34C2 35.0609 2.42143 36.0783 3.17157 36.8284C3.92172 37.5786 4.93913 38 6 38H26C27.0609 38 28.0783 37.5786 28.8284 36.8284C29.5786 36.0783 30 35.0609 30 34V10C30 8.93913 29.5786 7.92172 28.8284 7.17157C28.0783 6.42143 27.0609 6 26 6H22M10 6C10 7.06087 10.4214 8.07828 11.1716 8.82843C11.9217 9.57857 12.9391 10 14 10H18C19.0609 10 20.0783 9.57857 20.8284 8.82843C21.5786 8.07828 22 7.06087 22 6M10 6C10 4.93913 10.4214 3.92172 11.1716 3.17157C11.9217 2.42143 12.9391 2 14 2H18C19.0609 2 20.0783 2.42143 20.8284 3.17157C21.5786 3.92172 22 4.93913 22 6M16 20H22M16 28H22M10 20H10.02M10 28H10.02" stroke="#289744" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

+4
View File
@@ -0,0 +1,4 @@
<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M20 12V20L26 26M38 20C38 22.3638 37.5344 24.7044 36.6298 26.8883C35.7253 29.0722 34.3994 31.0565 32.7279 32.7279C31.0565 34.3994 29.0722 35.7253 26.8883 36.6298C24.7044 37.5344 22.3638 38 20 38C17.6362 38 15.2956 37.5344 13.1117 36.6298C10.9278 35.7253 8.94353 34.3994 7.27208 32.7279C5.60062 31.0565 4.27475 29.0722 3.37017 26.8883C2.46558 24.7044 2 22.3638 2 20C2 15.2261 3.89642 10.6477 7.27208 7.27208C10.6477 3.89642 15.2261 2 20 2C24.7739 2 29.3523 3.89642 32.7279 7.27208C36.1036 10.6477 38 15.2261 38 20Z" fill="#0EA5E9" fill-opacity="0.2"/>
<path d="M20 12V20L26 26M38 20C38 22.3638 37.5344 24.7044 36.6298 26.8883C35.7252 29.0722 34.3994 31.0565 32.7279 32.7279C31.0565 34.3994 29.0722 35.7252 26.8883 36.6298C24.7044 37.5344 22.3638 38 20 38C17.6362 38 15.2956 37.5344 13.1117 36.6298C10.9278 35.7252 8.94353 34.3994 7.27208 32.7279C5.60062 31.0565 4.27475 29.0722 3.37017 26.8883C2.46558 24.7044 2 22.3638 2 20C2 15.2261 3.89642 10.6477 7.27208 7.27208C10.6477 3.89642 15.2261 2 20 2C24.7739 2 29.3523 3.89642 32.7279 7.27208C36.1036 10.6477 38 15.2261 38 20Z" stroke="#0EA5E9" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

+4
View File
@@ -0,0 +1,4 @@
<svg width="36" height="43" viewBox="0 0 36 43" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M11.1429 21.5H24.8571H11.1429ZM11.1429 30.1667H24.8571H11.1429ZM29.4286 41H6.57143C5.35901 41 4.19625 40.5435 3.33894 39.7308C2.48163 38.9181 2 37.8159 2 36.6667V6.33333C2 5.18406 2.48163 4.08186 3.33894 3.2692C4.19625 2.45655 5.35901 2 6.57143 2H19.3394C19.9456 2.00012 20.5269 2.22848 20.9554 2.63483L33.3303 14.3652C33.759 14.7714 33.9999 15.3224 34 15.897V36.6667C34 37.8159 33.5184 38.9181 32.6611 39.7308C31.8038 40.5435 30.641 41 29.4286 41Z" fill="#24A6B4" fill-opacity="0.2"/>
<path d="M11.1429 21.5H24.8571M11.1429 30.1667H24.8571M29.4286 41H6.57143C5.35901 41 4.19625 40.5435 3.33894 39.7308C2.48163 38.9181 2 37.8159 2 36.6667V6.33333C2 5.18406 2.48163 4.08186 3.33894 3.2692C4.19625 2.45655 5.35901 2 6.57143 2H19.3394C19.9456 2.00012 20.5269 2.22848 20.9554 2.63483L33.3303 14.3652C33.759 14.7714 33.9999 15.3224 34 15.897V36.6667C34 37.8159 33.5184 38.9181 32.6611 39.7308C31.8038 40.5435 30.641 41 29.4286 41Z" stroke="#24A6B4" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

+9
View File
@@ -0,0 +1,9 @@
<svg width="1440" height="429" viewBox="0 0 1440 429" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="720" cy="4000" r="4000" fill="url(#paint0_linear_3079_9395)"/>
<defs>
<linearGradient id="paint0_linear_3079_9395" x1="720" y1="-239.5" x2="720" y2="316" gradientUnits="userSpaceOnUse">
<stop stop-color="#0164FF"/>
<stop offset="1" stop-color="#022D73"/>
</linearGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 402 B

+14
View File
@@ -0,0 +1,14 @@
<svg width="178" height="28" viewBox="0 0 178 28" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M120.808 11.5C120.808 11.8943 121.064 12.2196 121.577 12.4758C122.109 12.7124 122.75 12.9293 123.499 13.1264C124.248 13.3039 124.997 13.5404 125.746 13.8362C126.495 14.1122 127.126 14.5853 127.639 15.2556C128.171 15.9259 128.437 16.7638 128.437 17.7693C128.437 19.2873 127.866 20.4603 126.722 21.2883C125.598 22.0966 124.189 22.5008 122.493 22.5008C119.457 22.5008 117.387 21.3278 116.283 18.9817L119.595 17.1187C120.029 18.4001 120.995 19.0409 122.493 19.0409C123.854 19.0409 124.534 18.617 124.534 17.7693C124.534 17.375 124.268 17.0595 123.735 16.823C123.223 16.5667 122.592 16.3399 121.843 16.1428C121.094 15.9456 120.344 15.6992 119.595 15.4035C118.846 15.1078 118.205 14.6445 117.673 14.0136C117.161 13.363 116.904 12.5547 116.904 11.5887C116.904 10.1298 117.437 8.98634 118.501 8.15832C119.585 7.31059 120.926 6.88672 122.523 6.88672C123.726 6.88672 124.82 7.16273 125.805 7.71474C126.791 8.24704 127.57 9.01591 128.142 10.0214L124.889 11.7957C124.416 10.7902 123.627 10.2875 122.523 10.2875C122.03 10.2875 121.616 10.3959 121.281 10.6128C120.965 10.8297 120.808 11.1254 120.808 11.5Z" fill="#92BDFF"/>
<path d="M107.555 6.88672C109.172 6.88672 110.502 7.42887 111.547 8.51318C112.612 9.5975 113.144 11.0958 113.144 13.0081V22.0868H109.329V13.4813C109.329 12.4956 109.063 11.7464 108.531 11.2338C107.999 10.7015 107.289 10.4354 106.402 10.4354C105.416 10.4354 104.627 10.741 104.036 11.3521C103.445 11.9633 103.149 12.88 103.149 14.1023V22.0868H99.334V7.30073H103.149V8.95677C104.075 7.57673 105.544 6.88672 107.555 6.88672Z" fill="#92BDFF"/>
<path d="M84.4874 16.2611C84.9999 18.1143 86.3898 19.0409 88.657 19.0409C90.1159 19.0409 91.2199 18.548 91.9691 17.5623L95.0446 19.3366C93.5857 21.4461 91.4368 22.5008 88.5979 22.5008C86.1533 22.5008 84.1916 21.7615 82.713 20.2829C81.2344 18.8043 80.4951 16.9412 80.4951 14.6938C80.4951 12.466 81.2246 10.6128 82.6835 9.1342C84.1423 7.63588 86.0152 6.88672 88.3022 6.88672C90.4708 6.88672 92.255 7.63588 93.6547 9.1342C95.0742 10.6325 95.7839 12.4857 95.7839 14.6938C95.7839 15.1866 95.7346 15.7091 95.636 16.2611H84.4874ZM84.4282 13.3039H91.9691C91.7522 12.2984 91.2988 11.5493 90.6088 11.0564C89.9385 10.5635 89.1696 10.3171 88.3022 10.3171C87.277 10.3171 86.4293 10.5832 85.759 11.1155C85.0887 11.6281 84.6451 12.3576 84.4282 13.3039Z" fill="#92BDFF"/>
<path d="M70.6288 18.1837H78.5246V22.0872H66.5479V1.38672H70.6288V18.1837Z" fill="#92BDFF"/>
<path d="M55.5772 6.88672C57.5684 6.88672 59.2638 7.64574 60.6636 9.16377C62.083 10.6621 62.7928 12.5054 62.7928 14.6938C62.7928 16.8821 62.083 18.7353 60.6636 20.2533C59.2638 21.7516 57.5684 22.5008 55.5772 22.5008C53.5071 22.5008 51.9102 21.7812 50.7865 20.342V28.0012H46.9717V7.30073H50.7865V9.04548C51.9102 7.60631 53.5071 6.88672 55.5772 6.88672ZM51.9398 17.7101C52.7087 18.479 53.6846 18.8634 54.8674 18.8634C56.0503 18.8634 57.0262 18.479 57.7951 17.7101C58.5837 16.9215 58.978 15.9161 58.978 14.6938C58.978 13.4714 58.5837 12.4758 57.7951 11.707C57.0262 10.9184 56.0503 10.5241 54.8674 10.5241C53.6846 10.5241 52.7087 10.9184 51.9398 11.707C51.1709 12.4758 50.7865 13.4714 50.7865 14.6938C50.7865 15.9161 51.1709 16.9215 51.9398 17.7101Z" fill="#92BDFF"/>
<path d="M36.1787 6.88672C38.1699 6.88672 39.8654 7.64574 41.2651 9.16377C42.6846 10.6621 43.3943 12.5054 43.3943 14.6938C43.3943 16.8821 42.6846 18.7353 41.2651 20.2533C39.8654 21.7516 38.1699 22.5008 36.1787 22.5008C34.1087 22.5008 32.5118 21.7812 31.388 20.342V28.0012H27.5732V7.30073H31.388V9.04548C32.5118 7.60631 34.1087 6.88672 36.1787 6.88672ZM32.5414 17.7101C33.3102 18.479 34.2861 18.8634 35.469 18.8634C36.6519 18.8634 37.6278 18.479 38.3966 17.7101C39.1852 16.9215 39.5795 15.9161 39.5795 14.6938C39.5795 13.4714 39.1852 12.4758 38.3966 11.707C37.6278 10.9184 36.6519 10.5241 35.469 10.5241C34.2861 10.5241 33.3102 10.9184 32.5414 11.707C31.7725 12.4758 31.388 13.4714 31.388 14.6938C31.388 15.9161 31.7725 16.9215 32.5414 17.7101Z" fill="#92BDFF"/>
<path d="M173.334 10.6094C174.562 10.6094 175.55 10.9912 176.299 11.7548C177.048 12.5185 177.422 13.589 177.422 14.9666V22.0864H176.299V14.9666C176.299 13.9185 176.022 13.1099 175.468 12.5409C174.929 11.9719 174.21 11.6874 173.312 11.6874C172.309 11.6874 171.493 12.0318 170.864 12.7206C170.25 13.4094 169.943 14.4425 169.943 15.8201V22.0864H168.82V14.9666C168.82 13.9185 168.558 13.1099 168.034 12.5409C167.525 11.9719 166.829 11.6874 165.945 11.6874C164.957 11.6874 164.126 12.0393 163.452 12.7431C162.793 13.4318 162.464 14.4575 162.464 15.8201V22.0864H161.341V10.8564H162.464V12.788C163.242 11.3356 164.448 10.6094 166.08 10.6094C166.903 10.6094 167.622 10.8115 168.236 11.2158C168.85 11.6051 169.299 12.1666 169.584 12.9003C169.973 12.1366 170.497 11.5677 171.156 11.1933C171.83 10.804 172.556 10.6094 173.334 10.6094Z" fill="#71D1DB"/>
<path d="M152.754 22.3334C151.107 22.3334 149.707 21.7719 148.554 20.6489C147.416 19.511 146.847 18.1184 146.847 16.4714C146.847 14.8243 147.416 13.4393 148.554 12.3163C149.707 11.1784 151.107 10.6094 152.754 10.6094C154.386 10.6094 155.771 11.1784 156.909 12.3163C158.062 13.4393 158.638 14.8243 158.638 16.4714C158.638 18.1184 158.062 19.511 156.909 20.6489C155.771 21.7719 154.386 22.3334 152.754 22.3334ZM149.362 19.8628C150.291 20.7912 151.421 21.2553 152.754 21.2553C154.086 21.2553 155.209 20.7912 156.123 19.8628C157.036 18.9345 157.493 17.804 157.493 16.4714C157.493 15.1388 157.036 14.0083 156.123 13.08C155.209 12.1516 154.086 11.6874 152.754 11.6874C151.421 11.6874 150.291 12.1516 149.362 13.08C148.449 14.0083 147.992 15.1388 147.992 16.4714C147.992 17.804 148.449 18.9345 149.362 19.8628Z" fill="#71D1DB"/>
<path d="M140.273 22.3334C138.581 22.3334 137.174 21.7719 136.051 20.6489C134.928 19.5259 134.366 18.1334 134.366 16.4714C134.366 14.8094 134.928 13.4169 136.051 12.2939C137.174 11.1709 138.581 10.6094 140.273 10.6094C141.366 10.6094 142.354 10.8714 143.238 11.3955C144.121 11.9046 144.765 12.6008 145.169 13.4842L144.249 14.0233C143.919 13.3046 143.395 12.7356 142.676 12.3163C141.973 11.8971 141.172 11.6874 140.273 11.6874C138.926 11.6874 137.795 12.1516 136.882 13.08C135.968 13.9933 135.512 15.1238 135.512 16.4714C135.512 17.819 135.968 18.9569 136.882 19.8853C137.795 20.7987 138.926 21.2553 140.273 21.2553C141.172 21.2553 141.973 21.0457 142.676 20.6265C143.395 20.2072 143.942 19.6382 144.316 18.9195L145.259 19.481C144.81 20.3495 144.136 21.0457 143.238 21.5698C142.354 22.0789 141.366 22.3334 140.273 22.3334Z" fill="#71D1DB"/>
<path d="M132.641 22.0185C132.446 22.2131 132.206 22.3104 131.922 22.3104C131.637 22.3104 131.398 22.2131 131.203 22.0185C131.008 21.8238 130.911 21.5842 130.911 21.2998C130.911 21.0153 131.008 20.7757 131.203 20.581C131.398 20.3864 131.637 20.2891 131.922 20.2891C132.206 20.2891 132.446 20.3864 132.641 20.581C132.835 20.7757 132.933 21.0153 132.933 21.2998C132.933 21.5842 132.835 21.8238 132.641 22.0185Z" fill="#71D1DB"/>
<path d="M22.0855 11.9786C22.0855 6.39668 17.5605 1.87165 11.9786 1.87165C6.39668 1.87165 1.87165 6.39668 1.87165 11.9786C1.87165 17.5605 6.39668 22.0855 11.9786 22.0855V23.9572C5.36299 23.9572 0 18.5942 0 11.9786C0 5.36299 5.36299 0 11.9786 0C18.5942 0 23.9572 5.36299 23.9572 11.9786C23.9572 18.5942 18.5942 23.9572 11.9786 23.9572V22.0855C17.5605 22.0855 22.0855 17.5605 22.0855 11.9786Z" fill="#92BDFF"/>
<path d="M20.9626 11.9787C20.9626 7.1424 17.1411 3.19905 12.353 3.0028V5.99232C15.6154 6.08942 18.2419 8.71628 18.339 11.9787H20.9626ZM3.02619 12.7274C3.39652 17.2159 7.0659 20.7682 11.6044 20.9542V18.3167C8.6413 18.0497 6.28202 15.6904 6.01499 12.7274H3.02619ZM18.3167 12.7274C18.0385 15.8142 15.4897 18.2457 12.353 18.339V20.9542C16.8915 20.7682 20.5609 17.2159 20.9312 12.7274H18.3167ZM12.353 8.23538H11.6044V6.76694C8.9315 7.04165 6.834 9.25572 6.74172 11.9787H7.86105V12.7274H6.76694C7.02895 15.2766 9.05511 17.3024 11.6044 17.5644V16.0963H12.353V17.59C15.076 17.4977 17.2901 15.4002 17.5648 12.7274H16.0963V11.9787H17.59C17.4934 9.1298 15.2019 6.83789 12.353 6.74135V8.23538ZM5.99269 11.9787C6.08605 8.84204 8.51751 6.2928 11.6044 6.01462V3.0028C6.81627 3.19905 2.99476 7.1424 2.99476 11.9787H5.99269ZM21.7113 11.9787C21.7113 17.3539 17.3539 21.7113 11.9787 21.7113C6.60353 21.7113 2.24609 17.3539 2.24609 11.9787C2.24609 6.60353 6.60353 2.24609 11.9787 2.24609C17.3539 2.24609 21.7113 6.60353 21.7113 11.9787Z" fill="#71D1DB"/>
</svg>

After

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

+4
View File
@@ -0,0 +1,4 @@
<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M38 38L26 26L38 38ZM30 16C30 17.8385 29.6379 19.659 28.9343 21.3576C28.2307 23.0561 27.1995 24.5995 25.8995 25.8995C24.5995 27.1995 23.0561 28.2307 21.3576 28.9343C19.659 29.6379 17.8385 30 16 30C14.1615 30 12.341 29.6379 10.6424 28.9343C8.94387 28.2307 7.40053 27.1995 6.1005 25.8995C4.80048 24.5995 3.76925 23.0561 3.06569 21.3576C2.36212 19.659 2 17.8385 2 16C2 12.287 3.475 8.72601 6.1005 6.1005C8.72601 3.475 12.287 2 16 2C19.713 2 23.274 3.475 25.8995 6.1005C28.525 8.72601 30 12.287 30 16Z" fill="#E5821E" fill-opacity="0.2"/>
<path d="M38 38L26 26M30 16C30 17.8385 29.6379 19.659 28.9343 21.3576C28.2307 23.0561 27.1995 24.5995 25.8995 25.8995C24.5995 27.1995 23.0561 28.2307 21.3576 28.9343C19.659 29.6379 17.8385 30 16 30C14.1615 30 12.341 29.6379 10.6424 28.9343C8.94387 28.2307 7.40053 27.1995 6.1005 25.8995C4.80048 24.5995 3.76925 23.0561 3.06569 21.3576C2.36212 19.659 2 17.8385 2 16C2 12.287 3.475 8.72601 6.1005 6.1005C8.72601 3.475 12.287 2 16 2C19.713 2 23.274 3.475 25.8995 6.1005C28.525 8.72601 30 12.287 30 16Z" stroke="#E5821E" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

+25
View File
@@ -0,0 +1,25 @@
<svg width="1440" height="3637" viewBox="0 0 1440 3637" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_4328_7407)">
<rect width="1440" height="3637" fill="white"/>
<path d="M169.999 1702.5C36.5901 1957.69 24.0911 2029.52 -0.000610352 2155V902H1440C1418 980.333 1308.5 1102.59 1119 1191.5C979.321 1257.03 302 1450 169.999 1702.5Z" fill="#E5EFFF"/>
<path d="M-5.36442e-06 2386C-5.36442e-06 2268.83 40 2055.21 154.824 1874.05C311.59 1626.71 1006.42 1474.12 1137.88 1412.44C1316.24 1328.77 1419.29 1213.72 1440 1140" stroke="#B4D1FF"/>
<path d="M-0.0898438 758.5C23 694.5 113.955 575.063 257.5 522C457.611 448.027 746.117 430 774 183.5C782.071 112.149 783.203 66.1507 777.779 0" stroke="#B4D1FF"/>
<path d="M954 143.5V0H1440V902H0C22 823.667 131.5 703.409 321 614.5C460.679 548.966 954 489 954 143.5Z" fill="#E5EFFF"/>
<path d="M1126 153.5V0H1440V902H552C601.5 782.5 611.5 695.083 806.5 582.5C921.531 516.087 1126 409 1126 153.5Z" fill="url(#paint0_linear_4328_7407)"/>
<path d="M1296 203.5V0H1440V902H786.5C928 813.5 1009 752.5 1143 614.5C1234 506 1296 383.5 1296 203.5Z" fill="url(#paint1_linear_4328_7407)"/>
<path d="M1440 2327C1440 3462.32 479.165 3696.63 0 3671.7V3869H1440C1439.16 2882.06 1440 2869.79 1440 2327Z" fill="#E5EFFF"/>
</g>
<defs>
<linearGradient id="paint0_linear_4328_7407" x1="996" y1="648" x2="996" y2="879" gradientUnits="userSpaceOnUse">
<stop stop-color="#B4D1FF"/>
<stop offset="1" stop-color="#E5EFFF"/>
</linearGradient>
<linearGradient id="paint1_linear_4328_7407" x1="1196" y1="666.5" x2="1196" y2="902" gradientUnits="userSpaceOnUse">
<stop stop-color="#0164FF"/>
<stop offset="1" stop-color="#E5EFFF"/>
</linearGradient>
<clipPath id="clip0_4328_7407">
<rect width="1440" height="3637" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

+75
View File
File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 36 KiB

+5
View File
@@ -0,0 +1,5 @@
<svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect x="14" y="32" width="20" height="9" fill="#F6D7AB"/>
<path d="M34.667 41.3346H45.3337V37.0013C45.3336 35.6505 44.9191 34.3332 44.1478 33.2327C43.3766 32.1321 42.2869 31.3029 41.0302 30.8604C39.7735 30.4179 38.4123 30.384 37.1358 30.7635C35.8593 31.143 34.7309 31.9169 33.9075 32.9778M34.667 41.3346H13.3337H34.667ZM34.667 41.3346V37.0013C34.667 35.58 34.3982 34.2215 33.9075 32.9778M13.3337 41.3346H2.66699V37.0013C2.66709 35.6505 3.08157 34.3332 3.85283 33.2327C4.62409 32.1321 5.71379 31.3029 6.97046 30.8604C8.22713 30.4179 9.58833 30.384 10.8648 30.7635C12.1413 31.143 13.2697 31.9169 14.0931 32.9778M13.3337 41.3346V37.0013C13.3337 35.58 13.6025 34.2215 14.0931 32.9778M14.0931 32.9778C14.8854 30.967 16.2526 29.2435 18.0185 28.0294C19.7843 26.8153 21.8679 26.1664 24.0003 26.1664C26.1328 26.1664 28.2163 26.8153 29.9822 28.0294C31.7481 29.2435 33.1153 30.967 33.9075 32.9778M30.4003 13.168C30.4003 14.8919 29.726 16.5452 28.5258 17.7642C27.3256 18.9832 25.6977 19.668 24.0003 19.668C22.3029 19.668 20.6751 18.9832 19.4748 17.7642C18.2746 16.5452 17.6003 14.8919 17.6003 13.168C17.6003 11.4441 18.2746 9.79076 19.4748 8.57177C20.6751 7.35279 22.3029 6.66797 24.0003 6.66797C25.6977 6.66797 27.3256 7.35279 28.5258 8.57177C29.726 9.79076 30.4003 11.4441 30.4003 13.168ZM43.2003 19.668C43.2003 20.8172 42.7508 21.9194 41.9506 22.7321C41.1505 23.5448 40.0653 24.0013 38.9337 24.0013C37.8021 24.0013 36.7168 23.5448 35.9167 22.7321C35.1165 21.9194 34.667 20.8172 34.667 19.668C34.667 18.5187 35.1165 17.4165 35.9167 16.6038C36.7168 15.7912 37.8021 15.3346 38.9337 15.3346C40.0653 15.3346 41.1505 15.7912 41.9506 16.6038C42.7508 17.4165 43.2003 18.5187 43.2003 19.668ZM13.3337 19.668C13.3337 20.8172 12.8841 21.9194 12.084 22.7321C11.2838 23.5448 10.1986 24.0013 9.06699 24.0013C7.9354 24.0013 6.85016 23.5448 6.05 22.7321C5.24985 21.9194 4.80033 20.8172 4.80033 19.668C4.80033 18.5187 5.24985 17.4165 6.05 16.6038C6.85016 15.7912 7.9354 15.3346 9.06699 15.3346C10.1986 15.3346 11.2838 15.7912 12.084 16.6038C12.8841 17.4165 13.3337 18.5187 13.3337 19.668Z" fill="#F6D7AB"/>
<path d="M34.667 41.3346H45.3337V37.0013C45.3336 35.6505 44.9191 34.3332 44.1478 33.2327C43.3766 32.1321 42.2869 31.3029 41.0302 30.8604C39.7735 30.4179 38.4123 30.384 37.1358 30.7635C35.8593 31.143 34.7309 31.9169 33.9075 32.9778M34.667 41.3346H13.3337M34.667 41.3346V37.0013C34.667 35.58 34.3982 34.2215 33.9075 32.9778M33.9075 32.9778C33.1153 30.967 31.7481 29.2435 29.9822 28.0294C28.2163 26.8153 26.1328 26.1664 24.0003 26.1664C21.8679 26.1664 19.7843 26.8153 18.0185 28.0294C16.2526 29.2435 14.8854 30.967 14.0931 32.9778M13.3337 41.3346H2.66699V37.0013C2.66709 35.6505 3.08157 34.3332 3.85283 33.2327C4.62409 32.1321 5.71379 31.3029 6.97046 30.8604C8.22713 30.4179 9.58833 30.384 10.8648 30.7635C12.1413 31.143 13.2697 31.9169 14.0931 32.9778M13.3337 41.3346V37.0013C13.3337 35.58 13.6025 34.2215 14.0931 32.9778M30.4003 13.168C30.4003 14.8919 29.726 16.5452 28.5258 17.7642C27.3256 18.9832 25.6977 19.668 24.0003 19.668C22.3029 19.668 20.6751 18.9832 19.4748 17.7642C18.2746 16.5452 17.6003 14.8919 17.6003 13.168C17.6003 11.4441 18.2746 9.79076 19.4748 8.57177C20.6751 7.35279 22.3029 6.66797 24.0003 6.66797C25.6977 6.66797 27.3256 7.35279 28.5258 8.57177C29.726 9.79076 30.4003 11.4441 30.4003 13.168ZM43.2003 19.668C43.2003 20.8172 42.7508 21.9194 41.9506 22.7321C41.1505 23.5448 40.0653 24.0013 38.9337 24.0013C37.8021 24.0013 36.7168 23.5448 35.9167 22.7321C35.1165 21.9194 34.667 20.8172 34.667 19.668C34.667 18.5187 35.1165 17.4165 35.9167 16.6038C36.7168 15.7912 37.8021 15.3346 38.9337 15.3346C40.0653 15.3346 41.1505 15.7912 41.9506 16.6038C42.7508 17.4165 43.2003 18.5187 43.2003 19.668ZM13.3337 19.668C13.3337 20.8172 12.8841 21.9194 12.084 22.7321C11.2838 23.5448 10.1986 24.0013 9.06699 24.0013C7.9354 24.0013 6.85016 23.5448 6.05 22.7321C5.24985 21.9194 4.80033 20.8172 4.80033 19.668C4.80033 18.5187 5.24985 17.4165 6.05 16.6038C6.85016 15.7912 7.9354 15.3346 9.06699 15.3346C10.1986 15.3346 11.2838 15.7912 12.084 16.6038C12.8841 17.4165 13.3337 18.5187 13.3337 19.668Z" stroke="#E5821E" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 4.2 KiB

+4
View File
@@ -0,0 +1,4 @@
<svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M20.9803 4.46109L11.0003 8.22109C8.70031 9.08109 6.82031 11.8011 6.82031 14.2411V29.1011C6.82031 31.4611 8.38031 34.5611 10.2803 35.9811L18.8803 42.4011C21.7003 44.5211 26.3403 44.5211 29.1603 42.4011L37.7603 35.9811C39.6603 34.5611 41.2203 31.4611 41.2203 29.1011V14.2411C41.2203 11.7811 39.3403 9.06109 37.0403 8.20109L27.0603 4.46109C25.3603 3.84109 22.6403 3.84109 20.9803 4.46109Z" fill="#B4D1FF" stroke="#0164FF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M18.0996 23.7394L21.3196 26.9594L29.9196 18.3594" stroke="#0164FF" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 739 B

+5
View File
@@ -0,0 +1,5 @@
<svg width="37" height="36" viewBox="0 0 37 36" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M10.3457 27.8446L15.4184 31.7719C16.073 32.4264 17.5457 32.7537 18.5275 32.7537H24.7457C26.7093 32.7537 28.8366 31.281 29.3275 29.3173L33.2548 17.3719C34.073 15.081 32.6002 13.1173 30.1457 13.1173H23.6002C22.6184 13.1173 21.8002 12.2991 21.9639 11.1537L22.7821 5.91733C23.1093 4.4446 22.1275 2.80824 20.6548 2.31733C19.3457 1.82642 17.7093 2.48097 17.0548 3.46279L10.3457 13.4446" fill="#D6F4F8"/>
<path d="M10.3457 27.8446L15.4184 31.7719C16.073 32.4264 17.5457 32.7537 18.5275 32.7537H24.7457C26.7093 32.7537 28.8366 31.281 29.3275 29.3173L33.2548 17.3719C34.073 15.081 32.6002 13.1173 30.1457 13.1173H23.6002C22.6184 13.1173 21.8002 12.2991 21.9639 11.1537L22.7821 5.91733C23.1093 4.4446 22.1275 2.80824 20.6548 2.31733C19.3457 1.82642 17.7093 2.48097 17.0548 3.46279L10.3457 13.4446V27.8446Z" stroke="#24A6B4" stroke-width="4" stroke-miterlimit="10"/>
<path d="M2 27.8447V11.8083C2 9.5174 2.98182 8.69922 5.27273 8.69922H6.90909C9.2 8.69922 10.1818 9.5174 10.1818 11.8083V27.8447C10.1818 30.1356 9.2 30.9538 6.90909 30.9538H5.27273C2.98182 30.9538 2 30.1356 2 27.8447Z" fill="#D6F4F8" stroke="#24A6B4" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB