added animations and formated the code
This commit is contained in:
+49
-15
@@ -1,22 +1,58 @@
|
|||||||
import Background from "@/components/Background";
|
import Background from "@/components/Background";
|
||||||
import PinnedRepos from "@/components/PinnedRepos";
|
import PinnedRepos from "@/components/PinnedRepos";
|
||||||
import Skill from "@/components/Skill";
|
import Skill from "@/components/Skill";
|
||||||
import { faGithub, faGolang, faInstagram, faJs, faLinkedin, faPython, faReact, faRust } from "@fortawesome/free-brands-svg-icons";
|
import {
|
||||||
|
faGithub,
|
||||||
|
faGolang,
|
||||||
|
faInstagram,
|
||||||
|
faJs,
|
||||||
|
faLinkedin,
|
||||||
|
faPython,
|
||||||
|
faReact,
|
||||||
|
faRust,
|
||||||
|
} from "@fortawesome/free-brands-svg-icons";
|
||||||
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
||||||
|
|
||||||
export default function App() {
|
export default function App() {
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
<Background/>
|
<Background />
|
||||||
<div className="content-center w-full lg:mx-auto pt-16 lg:pt-0 relative z-20 pb-16 md:pb-0">
|
<div className="content-center w-full lg:mx-auto pt-16 lg:pt-0 relative z-20 pb-16 md:pb-0 animate-fadeIn">
|
||||||
<div className="w-full max-w-screen-lg mx-auto">
|
<div className="w-full max-w-screen-lg mx-auto">
|
||||||
<div className="px-8 md:px-10 lg:px-15 xl:px-24">
|
<div className="px-8 md:px-10 lg:px-15 xl:px-24">
|
||||||
<h1 className="py-2 text-gray-300">Hey, I'm Leo 👋🏻</h1>
|
<h1 className="py-2 text-gray-300">Hey, I'm Leo 👋🏻</h1>
|
||||||
<p className="font-semibold text-gray-300">A passionate software engineer and freelancer from Tirane, Albania, specializing in full-stack web development, desktop applications, and TUI apps. I have a deep interest in low-level programming, often building projects like CPU emulators from scratch.</p>
|
<p className="font-semibold text-gray-300">
|
||||||
|
A passionate software engineer and freelancer from Tirane,
|
||||||
|
Albania, specializing in full-stack web development, desktop
|
||||||
|
applications, and TUI apps. I have a deep interest in low-level
|
||||||
|
programming, often building projects like CPU emulators from
|
||||||
|
scratch.
|
||||||
|
</p>
|
||||||
<div className="pt-5 flex flex-row gap-5 w-max">
|
<div className="pt-5 flex flex-row gap-5 w-max">
|
||||||
<a href="https://github.com/kleo-dev/" target="blank_"><FontAwesomeIcon icon={faGithub} width={36} className="text-red" /></a>
|
<a href="https://github.com/kleo-dev/" target="blank_">
|
||||||
<a href="https://www.linkedin.com/in/klesti-selimaj-7a0162343/" target="blank_"><FontAwesomeIcon icon={faLinkedin} width={36} className="text-red" /></a>
|
<FontAwesomeIcon
|
||||||
<a href="https://www.instagram.com/kleo.dev/" target="blank_"><FontAwesomeIcon icon={faInstagram} width={36} className="text-red" /></a>
|
icon={faGithub}
|
||||||
|
width={36}
|
||||||
|
className="text-red"
|
||||||
|
/>
|
||||||
|
</a>
|
||||||
|
<a
|
||||||
|
href="https://www.linkedin.com/in/klesti-selimaj-7a0162343/"
|
||||||
|
target="blank_"
|
||||||
|
>
|
||||||
|
<FontAwesomeIcon
|
||||||
|
icon={faLinkedin}
|
||||||
|
width={36}
|
||||||
|
className="text-red"
|
||||||
|
/>
|
||||||
|
</a>
|
||||||
|
<a href="https://www.instagram.com/kleo.dev/" target="blank_">
|
||||||
|
<FontAwesomeIcon
|
||||||
|
icon={faInstagram}
|
||||||
|
width={36}
|
||||||
|
className="text-red"
|
||||||
|
/>
|
||||||
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<h1 className="pt-5 text-red-400">Pinned Projects</h1>
|
<h1 className="pt-5 text-red-400">Pinned Projects</h1>
|
||||||
<section className="">
|
<section className="">
|
||||||
@@ -30,11 +66,11 @@ export default function App() {
|
|||||||
<h1 className="pb-3 text-red-400 w-max">My Skills</h1>
|
<h1 className="pb-3 text-red-400 w-max">My Skills</h1>
|
||||||
<div className="p-3 bg-transparent-ish rounded-xl">
|
<div className="p-3 bg-transparent-ish rounded-xl">
|
||||||
<div className="mx-auto w-max flex flex-row gap-5">
|
<div className="mx-auto w-max flex flex-row gap-5">
|
||||||
<Skill skill="Rust" icon={faRust}/>
|
<Skill skill="Rust" icon={faRust} />
|
||||||
<Skill skill="Python" icon={faPython}/>
|
<Skill skill="Python" icon={faPython} />
|
||||||
<Skill skill="Go" icon={faGolang} mt="mt-2"/>
|
<Skill skill="Go" icon={faGolang} mt="mt-2" />
|
||||||
<Skill skill="JavaScript" icon={faJs}/>
|
<Skill skill="JavaScript" icon={faJs} />
|
||||||
<Skill skill="React" icon={faReact}/>
|
<Skill skill="React" icon={faReact} />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -43,9 +79,7 @@ export default function App() {
|
|||||||
<div>
|
<div>
|
||||||
<h1 className="pb-3 text-red-400 w-max">My Experience</h1>
|
<h1 className="pb-3 text-red-400 w-max">My Experience</h1>
|
||||||
<div className="p-3 bg-transparent-ish rounded-xl">
|
<div className="p-3 bg-transparent-ish rounded-xl">
|
||||||
<div className="mx-auto w-max">
|
<div className="mx-auto w-max">Soon</div>
|
||||||
Soon
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
+53
-13
@@ -1,54 +1,94 @@
|
|||||||
import Background from "@/components/Background";
|
import Background from "@/components/Background";
|
||||||
import { faCheck, faCode, faDatabase, faRocket } from "@fortawesome/free-solid-svg-icons";
|
import {
|
||||||
|
faCheck,
|
||||||
|
faCode,
|
||||||
|
faRocket,
|
||||||
|
} from "@fortawesome/free-solid-svg-icons";
|
||||||
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
||||||
|
|
||||||
export default function Pricing() {
|
export default function Pricing() {
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
<Background/>
|
<Background />
|
||||||
<div className="content-center w-full lg:mx-auto pt-16 lg:pt-0 relative z-20 pb-16 md:pb-0">
|
<div className="content-center w-full lg:mx-auto pt-16 lg:pt-0 relative z-20 pb-16 md:pb-0 animate-fadeIn">
|
||||||
<div className="w-full max-w-screen-lg mx-auto px-4 md:px-10">
|
<div className="w-full max-w-screen-lg mx-auto px-4 md:px-10">
|
||||||
<h1 className="pt-10 w-max mx-auto text-red-400">Choose a plan</h1>
|
<h1 className="pt-10 w-max mx-auto text-red-400">Choose a plan</h1>
|
||||||
<div className="pt-10 h-full grid grid-cols-1 lg:grid-cols-2 grid-rows-2 gap-8">
|
<div className="pt-10 h-full grid grid-cols-1 lg:grid-cols-2 grid-rows-2 gap-8">
|
||||||
<div className="h-full rounded-xl bg-transparent-ish border border-red p-9">
|
<div className="h-full rounded-xl bg-transparent-ish border border-red p-9">
|
||||||
<FontAwesomeIcon className="w-max mx-auto text-red-600" icon={faCode} width={35}/>
|
<FontAwesomeIcon
|
||||||
|
className="w-max mx-auto text-red-600"
|
||||||
|
icon={faCode}
|
||||||
|
width={35}
|
||||||
|
/>
|
||||||
<h1 className="w-max mx-auto text-red-400">Standard</h1>
|
<h1 className="w-max mx-auto text-red-400">Standard</h1>
|
||||||
<h2 className="text-2xl w-max mx-auto text-red">$25</h2>
|
<h2 className="text-2xl w-max mx-auto text-red">$25</h2>
|
||||||
<ul className="pt-4 list-none space-y-2">
|
<ul className="pt-4 list-none space-y-2">
|
||||||
<li className="flex items-center">
|
<li className="flex items-center">
|
||||||
<FontAwesomeIcon className="text-green-500 mr-2" icon={faCheck} width={14} />
|
<FontAwesomeIcon
|
||||||
|
className="text-green-500 mr-2"
|
||||||
|
icon={faCheck}
|
||||||
|
width={14}
|
||||||
|
/>
|
||||||
Up to a day
|
Up to a day
|
||||||
</li>
|
</li>
|
||||||
<li className="flex items-center">
|
<li className="flex items-center">
|
||||||
<FontAwesomeIcon className="text-green-500 mr-2" icon={faCheck} width={14} />
|
<FontAwesomeIcon
|
||||||
|
className="text-green-500 mr-2"
|
||||||
|
icon={faCheck}
|
||||||
|
width={14}
|
||||||
|
/>
|
||||||
Simple projects or tasks (e.g., bug fixes)
|
Simple projects or tasks (e.g., bug fixes)
|
||||||
</li>
|
</li>
|
||||||
<li className="flex items-center">
|
<li className="flex items-center">
|
||||||
<FontAwesomeIcon className="text-green-500 mr-2" icon={faCheck} width={14} />
|
<FontAwesomeIcon
|
||||||
|
className="text-green-500 mr-2"
|
||||||
|
icon={faCheck}
|
||||||
|
width={14}
|
||||||
|
/>
|
||||||
Response via Email or Discord
|
Response via Email or Discord
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="h-full rounded-xl bg-transparent-ish border border-red p-9">
|
<div className="h-full rounded-xl bg-transparent-ish border border-red p-9">
|
||||||
<FontAwesomeIcon className="w-max mx-auto text-red-600" icon={faRocket} width={35}/>
|
<FontAwesomeIcon
|
||||||
|
className="w-max mx-auto text-red-600"
|
||||||
|
icon={faRocket}
|
||||||
|
width={35}
|
||||||
|
/>
|
||||||
<h1 className="w-max mx-auto text-red-400">Premium</h1>
|
<h1 className="w-max mx-auto text-red-400">Premium</h1>
|
||||||
<h2 className="text-2xl w-max mx-auto text-red">$50</h2>
|
<h2 className="text-2xl w-max mx-auto text-red">$50</h2>
|
||||||
<ul className="pt-4 list-none space-y-2">
|
<ul className="pt-4 list-none space-y-2">
|
||||||
<li className="flex items-center">
|
<li className="flex items-center">
|
||||||
<FontAwesomeIcon className="text-green-500 mr-2" icon={faCheck} width={14} />
|
<FontAwesomeIcon
|
||||||
|
className="text-green-500 mr-2"
|
||||||
|
icon={faCheck}
|
||||||
|
width={14}
|
||||||
|
/>
|
||||||
Up to a week
|
Up to a week
|
||||||
</li>
|
</li>
|
||||||
<li className="flex items-center">
|
<li className="flex items-center">
|
||||||
<FontAwesomeIcon className="text-green-500 mr-2" icon={faCheck} width={14} />
|
<FontAwesomeIcon
|
||||||
|
className="text-green-500 mr-2"
|
||||||
|
icon={faCheck}
|
||||||
|
width={14}
|
||||||
|
/>
|
||||||
Complex projects
|
Complex projects
|
||||||
</li>
|
</li>
|
||||||
<li className="flex items-center">
|
<li className="flex items-center">
|
||||||
<FontAwesomeIcon className="text-green-500 mr-2" icon={faCheck} width={14} />
|
<FontAwesomeIcon
|
||||||
|
className="text-green-500 mr-2"
|
||||||
|
icon={faCheck}
|
||||||
|
width={14}
|
||||||
|
/>
|
||||||
Large tasks (e.g., refractoring, bug hunting)
|
Large tasks (e.g., refractoring, bug hunting)
|
||||||
</li>
|
</li>
|
||||||
<li className="flex items-center">
|
<li className="flex items-center">
|
||||||
<FontAwesomeIcon className="text-green-500 mr-2" icon={faCheck} width={14} />
|
<FontAwesomeIcon
|
||||||
|
className="text-green-500 mr-2"
|
||||||
|
icon={faCheck}
|
||||||
|
width={14}
|
||||||
|
/>
|
||||||
Documenting
|
Documenting
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
@@ -57,5 +97,5 @@ export default function Pricing() {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
)
|
);
|
||||||
}
|
}
|
||||||
@@ -27,7 +27,6 @@
|
|||||||
animation-iteration-count: infinite;
|
animation-iteration-count: infinite;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.background span:nth-child(0) {
|
.background span:nth-child(0) {
|
||||||
color: #f5304c;
|
color: #f5304c;
|
||||||
top: 24%;
|
top: 24%;
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import './Background.css';
|
import "./Background.css";
|
||||||
|
|
||||||
const Background = () => {
|
const Background = () => {
|
||||||
return (
|
return (
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
'use client'
|
"use client";
|
||||||
|
|
||||||
import { usePathname } from 'next/navigation';
|
import { usePathname } from "next/navigation";
|
||||||
|
|
||||||
export default function Navbar() {
|
export default function Navbar() {
|
||||||
const pathname = usePathname();
|
const pathname = usePathname();
|
||||||
@@ -9,17 +9,35 @@ export default function Navbar() {
|
|||||||
<nav className="py-4 flex">
|
<nav className="py-4 flex">
|
||||||
<div className="mx-auto flex">
|
<div className="mx-auto flex">
|
||||||
<div className="space-x-4 text-white block font-bold">
|
<div className="space-x-4 text-white block font-bold">
|
||||||
<a href="/" className={"hover:text-red transition-colors duration-300" + (pathname === '/' ? ' text-red' : '')}>
|
<a
|
||||||
|
href="/"
|
||||||
|
className={
|
||||||
|
"hover:text-red transition-colors duration-300" +
|
||||||
|
(pathname === "/" ? " text-red" : "")
|
||||||
|
}
|
||||||
|
>
|
||||||
Home
|
Home
|
||||||
</a>
|
</a>
|
||||||
<a href="/pricing" className={"hover:text-red transition-colors duration-300" + (pathname === '/pricing' ? ' text-red' : '')}>
|
<a
|
||||||
|
href="/pricing"
|
||||||
|
className={
|
||||||
|
"hover:text-red transition-colors duration-300" +
|
||||||
|
(pathname === "/pricing" ? " text-red" : "")
|
||||||
|
}
|
||||||
|
>
|
||||||
Pricing
|
Pricing
|
||||||
</a>
|
</a>
|
||||||
<a href="/blog" className={"hover:text-red transition-colors duration-300" + (pathname === '/blog' ? ' text-red' : '')}>
|
<a
|
||||||
|
href="/blog"
|
||||||
|
className={
|
||||||
|
"hover:text-red transition-colors duration-300" +
|
||||||
|
(pathname === "/blog" ? " text-red" : "")
|
||||||
|
}
|
||||||
|
>
|
||||||
Blog
|
Blog
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
);
|
);
|
||||||
};
|
}
|
||||||
|
|||||||
@@ -1,14 +1,21 @@
|
|||||||
type PinnedRepo = {
|
type PinnedRepo = {
|
||||||
author: string,
|
author: string;
|
||||||
name: string,
|
name: string;
|
||||||
description: string,
|
description: string;
|
||||||
language: string,
|
language: string;
|
||||||
stars: number,
|
stars: number;
|
||||||
forks: number,
|
forks: number;
|
||||||
href?: string,
|
href?: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
export function Repo({name, description: desc, language: lang, stars, forks, href}: PinnedRepo) {
|
export function Repo({
|
||||||
|
name,
|
||||||
|
description: desc,
|
||||||
|
language: lang,
|
||||||
|
stars,
|
||||||
|
forks,
|
||||||
|
href,
|
||||||
|
}: PinnedRepo) {
|
||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
className={`
|
className={`
|
||||||
@@ -37,7 +44,7 @@ export function Repo({name, description: desc, language: lang, stars, forks, hre
|
|||||||
target="_blank"
|
target="_blank"
|
||||||
rel="noreferrer"
|
rel="noreferrer"
|
||||||
className="hover:underline"
|
className="hover:underline"
|
||||||
style={{ cursor: 'pointer' }}
|
style={{ cursor: "pointer" }}
|
||||||
>
|
>
|
||||||
{name}
|
{name}
|
||||||
</a>
|
</a>
|
||||||
@@ -49,7 +56,10 @@ export function Repo({name, description: desc, language: lang, stars, forks, hre
|
|||||||
<div className="p-6 pt-0 mt-auto">
|
<div className="p-6 pt-0 mt-auto">
|
||||||
<div className="flex flex-wrap justify-between items-center gap-2">
|
<div className="flex flex-wrap justify-between items-center gap-2">
|
||||||
<div className="flex items-center gap-2 sm:gap-4">
|
<div className="flex items-center gap-2 sm:gap-4">
|
||||||
<div className="flex items-center gap-1 text-xs sm:text-sm" data-state="closed">
|
<div
|
||||||
|
className="flex items-center gap-1 text-xs sm:text-sm"
|
||||||
|
data-state="closed"
|
||||||
|
>
|
||||||
<svg
|
<svg
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
width="24"
|
width="24"
|
||||||
@@ -66,7 +76,10 @@ export function Repo({name, description: desc, language: lang, stars, forks, hre
|
|||||||
</svg>
|
</svg>
|
||||||
<span className="text-gray-300">{stars}</span>
|
<span className="text-gray-300">{stars}</span>
|
||||||
</div>
|
</div>
|
||||||
<div className="flex items-center gap-1 text-xs sm:text-sm" data-state="closed">
|
<div
|
||||||
|
className="flex items-center gap-1 text-xs sm:text-sm"
|
||||||
|
data-state="closed"
|
||||||
|
>
|
||||||
<svg
|
<svg
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
width="24"
|
width="24"
|
||||||
@@ -88,7 +101,11 @@ export function Repo({name, description: desc, language: lang, stars, forks, hre
|
|||||||
<span className="text-gray-300">{forks}</span>
|
<span className="text-gray-300">{forks}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="inline-flex items-center rounded-md border px-2.5 py-0.5 font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 text-foreground text-xs bg-red-600/10 border-red-600" data-sentry-component="Badge" data-sentry-source-file="badge.tsx">
|
<div
|
||||||
|
className="inline-flex items-center rounded-md border px-2.5 py-0.5 font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 text-foreground text-xs bg-red-600/10 border-red-600"
|
||||||
|
data-sentry-component="Badge"
|
||||||
|
data-sentry-source-file="badge.tsx"
|
||||||
|
>
|
||||||
<svg
|
<svg
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
width="24"
|
width="24"
|
||||||
@@ -112,11 +129,13 @@ export function Repo({name, description: desc, language: lang, stars, forks, hre
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
)
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
export default async function PinnedRepos() {
|
export default async function PinnedRepos() {
|
||||||
const pinned: PinnedRepo[] = await (await fetch('https://pinned.berrysauce.dev/get/kleo-dev')).json();
|
const pinned: PinnedRepo[] = await (
|
||||||
|
await fetch("https://pinned.berrysauce.dev/get/kleo-dev")
|
||||||
|
).json();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="grid grid-cols-1 sm:grid-cols-2 gap-4 sm:gap-6 bg-transparent">
|
<div className="grid grid-cols-1 sm:grid-cols-2 gap-4 sm:gap-6 bg-transparent">
|
||||||
@@ -129,8 +148,9 @@ export default async function PinnedRepos() {
|
|||||||
language={repo.language}
|
language={repo.language}
|
||||||
stars={repo.stars}
|
stars={repo.stars}
|
||||||
forks={repo.forks}
|
forks={repo.forks}
|
||||||
href={`https://github.com/${repo.author}/${repo.name}`}/>
|
href={`https://github.com/${repo.author}/${repo.name}`}
|
||||||
|
/>
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
)
|
);
|
||||||
}
|
}
|
||||||
@@ -1,13 +1,19 @@
|
|||||||
import { IconProp } from "@fortawesome/fontawesome-svg-core";
|
import { IconProp } from "@fortawesome/fontawesome-svg-core";
|
||||||
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
||||||
|
|
||||||
export default function Skill({skill, icon, mt}: {skill: string, icon: IconProp, mt?: string}) {
|
export default function Skill({
|
||||||
|
skill,
|
||||||
|
icon,
|
||||||
|
mt,
|
||||||
|
}: {
|
||||||
|
skill: string;
|
||||||
|
icon: IconProp;
|
||||||
|
mt?: string;
|
||||||
|
}) {
|
||||||
return (
|
return (
|
||||||
<div className="skill">
|
<div className="skill">
|
||||||
<FontAwesomeIcon icon={icon} width={40} className={`text-red ${mt}`} />
|
<FontAwesomeIcon icon={icon} width={40} className={`text-red ${mt}`} />
|
||||||
<span className="tooltip absolute bg-transparent-ish">
|
<span className="tooltip absolute bg-transparent-ish">{skill}</span>
|
||||||
{skill}
|
|
||||||
</span>
|
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
+10
-1
@@ -14,7 +14,16 @@ export default {
|
|||||||
red: '#f5304c',
|
red: '#f5304c',
|
||||||
'red-400': '#fa5770',
|
'red-400': '#fa5770',
|
||||||
'red-600': '#eb2642',
|
'red-600': '#eb2642',
|
||||||
'transparent-ish': '#0000006F'
|
'transparent-ish': '#0000006F',
|
||||||
|
},
|
||||||
|
animation: {
|
||||||
|
fadeIn: "fadeIn 1s ease-in-out",
|
||||||
|
},
|
||||||
|
keyframes: {
|
||||||
|
fadeIn: {
|
||||||
|
"0%": { opacity: "0", transform: "translateY(10px)" },
|
||||||
|
"100%": { opacity: "1", transform: "translateY(0px)" },
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user