2 Commits

35 changed files with 1989 additions and 1765 deletions

View File

@@ -1,2 +1,2 @@
PORT=3000
NEXT_PUBLIC_API_URL=https://www.hailearning.edu.vn/
NEXT_PUBLIC_API_URL=http://localhost:3001

View File

@@ -1,24 +1,26 @@
import { AboutHero, AboutIntro, AboutMission, AboutFeatures, AboutNews } from "../components/about";
import { aboutApi } from "../../api/aboutApi";
import HeroSection from "../components/about/HeroSection";
import Mission from "../components/about/Mission";
import WhyParis from "../components/about/WhyParis";
import HistoryTimeline from "../components/about/HistoryTimeline";
import LeadershipMessage from "../components/about/LeaderShip_Message";
import LeadershipBoard from "../components/about/LeaderShip_Broad";
import Campus from "../components/about/Campus";
// Force dynamic rendering - không cache
export const dynamic = 'force-dynamic';
export default async function AboutPage() {
const data = await aboutApi.getAbout();
if (!data) {
return null;
}
return (
<>
<AboutHero data={data.hero} />
<AboutIntro data={data.intro} />
<AboutMission data={data.mission} />
<AboutFeatures data={data.features} />
<AboutNews data={data.news} />
<HeroSection data={data} />
<Mission />
<WhyParis />
<LeadershipMessage />
<Campus />
<HistoryTimeline />
<LeadershipBoard />
</>
);
}

View File

@@ -1,53 +0,0 @@
import Link from "next/link";
import { AboutData } from "../../about/types";
interface AboutFeaturesProps {
data: AboutData["features"];
}
const AboutFeatures = ({ data }: AboutFeaturesProps) => {
return (
<section
className="choose-us-section-2 section-padding fix bg-cover"
style={{ backgroundImage: `url(${data.backgroundImage})` }}
>
<div className="container">
<div className="choose-us-wrapper-2">
<div className="row g-4">
<div className="col-lg-6">
<div className="choose-us-image">
<img src={data.image} alt="img" />
</div>
</div>
<div className="col-lg-6">
<div className="feature-content">
<div className="section-title mb-0">
<span className="sub-title-2 wow fadeInUp">{data.subheading}</span>
<h2 className="split-text-right split-text-in-right">{data.heading}</h2>
</div>
<p className="text">{data.description}</p>
{data.items.map((item, index) => (
<div key={index} className="choose-us-box">
<div className="icon">
<img src={item.icon} alt="img" />
</div>
<div className="content">
<h5>{item.title}</h5>
<p>{item.description}</p>
</div>
</div>
))}
<Link href={data.ctaButton.href} className="theme-btn">
{data.ctaButton.label}
<i className="fa-solid fa-arrow-right"></i>
</Link>
</div>
</div>
</div>
</div>
</div>
</section>
);
};
export default AboutFeatures;

View File

@@ -1,39 +0,0 @@
import Link from 'next/link';
import { AboutData } from '../../about/types';
interface AboutHeroProps {
data: AboutData['hero'];
}
const AboutHero = ({ data }: AboutHeroProps) => {
return (
<section className="breadcrumb-wrapper fix bg-cover" style={{ backgroundImage: `url(${data.backgroundImage})` }}>
<div className="shape">
<img src="/assets/img/inner-page/shape.png" alt="img" />
</div>
<div className="container">
<div className="page-heading">
<h1 className="breadcrumb-title">{data.title}</h1>
{Array.isArray(data.breadcrumb) && (
<ul className="breadcrumb-list">
{data.breadcrumb.map((item, index) => (
<li key={index}>
{index === data.breadcrumb.length - 1 ? (
item
) : (
<>
<Link href="/">{item}</Link>
<i className="fa-solid fa-chevron-right ms-2 me-2"></i>
</>
)}
</li>
))}
</ul>
)}
</div>
</div>
</section>
);
};
export default AboutHero;

View File

@@ -1,28 +0,0 @@
import { AboutData } from "../../about/types";
interface AboutIntroProps {
data: AboutData["intro"];
}
const AboutIntro = ({ data }: AboutIntroProps) => {
return (
<section className="intro-section section-padding fix pb-0">
<div className="container">
<div className="section-title-area">
<div className="section-title">
<span className="sub-title-2 wow fadeInUp">{data.subheading}</span>
<h2 className="split-text-right split-text-in-right">{data.heading}</h2>
</div>
<p>{data.description}</p>
</div>
<div className="row">
<div className="intro-image tp-clip-anim p-relative">
<img src={data.image} alt="img" className="tp-anim-img" data-animate="true" />
</div>
</div>
</div>
</section>
);
};
export default AboutIntro;

View File

@@ -1,79 +0,0 @@
import Link from "next/link";
import { AboutData } from "../../about/types";
interface AboutMissionProps {
data: AboutData["mission"];
}
const AboutMission = ({ data }: AboutMissionProps) => {
return (
<section className="about-section section-padding fix pb-0">
<div className="top-shape">
<img src={data.images.globeShape} alt="img" />
</div>
<div className="container">
<div className="about-wrapper">
<div className="row g-4">
<div className="col-lg-6">
<div className="about-image">
<img src={data.images.main} alt="img" className="wow img-custom-anim-left" />
<div className="about-image-2">
<img src={data.images.secondary} alt="img" className="wow img-custom-anim-right" />
</div>
<div className="bg-shape">
<img src={data.images.bgShape} alt="img" />
</div>
<div className="plane-shape float-bob-y">
<img src={data.images.planeShape} alt="img" />
</div>
<div className="top-shape float-bob-y">
<img src={data.images.topShape} alt="img" />
</div>
</div>
</div>
<div className="col-lg-6">
<div className="about-content">
<div className="section-title mb-0">
<span className="sub-title wow fadeInUp">{data.subheading}</span>
<h2 className="split-text-right split-text-in-right">{data.heading}</h2>
</div>
<p className="text wow fadeInUp" data-wow-delay=".3s">
{data.description}
</p>
<div className="about-item wow fadeInUp" data-wow-delay=".5s">
{data.items.map((item, index) => (
<div key={index} className="content">
<span>
<img src={item.icon} alt="" className="me-2 d-inline-block" />
{item.label}-
</span>
<p>{item.description}</p>
</div>
))}
</div>
<ul className="list wow fadeInUp" data-wow-delay=".3s">
{data.features.map((feature, index) => (
<li key={index}>
<i className="fa-solid fa-chevrons-right"></i>
{feature}
</li>
))}
</ul>
<Link
href={data.ctaButton.href}
className="theme-btn wow fadeInUp"
data-wow-delay=".5s"
>
{data.ctaButton.label}
<i className="fa-solid fa-arrow-right"></i>
</Link>
</div>
</div>
</div>
</div>
</div>
</section>
);
};
export default AboutMission;

View File

@@ -1,75 +0,0 @@
import Link from "next/link";
import { AboutData } from "../../about/types";
interface AboutNewsProps {
data: AboutData["news"];
}
const AboutNews = ({ data }: AboutNewsProps) => {
return (
<section className="news-section section-padding fix pt-0">
<div className="container">
<div className="section-title-area">
<div className="section-title">
<span className="sub-title">{data.subheading}</span>
<h2 className="split-text-right split-text-in-right">{data.heading}</h2>
</div>
<Link href={data.ctaButton.href} className="theme-btn">
{data.ctaButton.label}
<i className="fa-solid fa-arrow-right"></i>
</Link>
</div>
<div className="row">
{data.items.map((item, index) => (
<div key={index} className="col-xl-4 col-lg-6 col-md-6">
<div className="news-card-item">
<div className="news-image">
<img src={item.thumbnail} alt="img" />
<span>{item.category}</span>
<div className="news-layer-wrapper">
<div
className="news-layer-image"
style={{ backgroundImage: `url('${item.thumbnail}')` }}
></div>
<div
className="news-layer-image"
style={{ backgroundImage: `url('${item.thumbnail}')` }}
></div>
<div
className="news-layer-image"
style={{ backgroundImage: `url('${item.thumbnail}')` }}
></div>
<div
className="news-layer-image"
style={{ backgroundImage: `url('${item.thumbnail}')` }}
></div>
</div>
</div>
<div className="news-content">
<div className="list">
<span>Comment ({item.comments})</span>
<span>_ {item.date}</span>
</div>
<h3>
<Link href={item.link}>{item.title}</Link>
</h3>
<div className="news-bottom">
<div className="info-item">
<img src={item.author.avatar} alt="img" />
<span>By {item.author.name}</span>
</div>
<Link href={item.link} className="link-btn">
View Articles<i className="fa-solid fa-arrow-right"></i>
</Link>
</div>
</div>
</div>
</div>
))}
</div>
</div>
</section>
);
};
export default AboutNews;

View File

@@ -0,0 +1,65 @@
import Link from "next/link";
const CENTERS = [
{
tag: "Biosciences",
tagColor: "blue",
title: "Institut Pasteur Collaborative Lab",
desc: "A premier center focusing on immunology, genetics, and infectious diseases.",
img: "https://storage.googleapis.com/uxpilot-auth.appspot.com/115ee2f067-72629210549870cf0d35.png",
href: "#",
},
{
tag: "Humanities",
tagColor: "yellow",
title: "Center for European Studies",
desc: "Housing over 2 million volumes and dedicated to historical and sociological research.",
img: "https://storage.googleapis.com/uxpilot-auth.appspot.com/c11358a8da-a7b331f85d1fbd27c851.png",
href: "#",
},
{
tag: "Technology",
tagColor: "green",
title: "AI & Robotics Institute",
desc: "Pioneering developments in machine learning, automation, and computational science.",
img: "https://storage.googleapis.com/uxpilot-auth.appspot.com/97fca8b57f-238aa78a799f22cf1cd1.png",
href: "#",
},
];
const Campus = () => {
return (
<section id="campus" className="about-campus">
<div className="container">
<div className="about-campus__header text-center">
<h2 className="about-campus__title">Campus &amp; Research Centers</h2>
<p className="about-campus__subtitle">
State-of-the-art facilities nestled in the historic Latin Quarter, designed to foster innovation and collaboration.
</p>
</div>
<div className="about-campus__grid">
{CENTERS.map((center, i) => (
<div key={i} className="about-campus__card">
<div className="about-campus__img-wrap">
<img src={center.img} alt={center.title} className="about-campus__img" />
</div>
<div className="about-campus__body">
<span className={`about-campus__tag about-campus__tag--${center.tagColor}`}>
{center.tag}
</span>
<h3 className="about-campus__card-title">{center.title}</h3>
<p className="about-campus__card-desc">{center.desc}</p>
<Link href={center.href} className="about-campus__link">
Explore Facility <i className="fa-solid fa-arrow-right"></i>
</Link>
</div>
</div>
))}
</div>
</div>
</section>
);
};
export default Campus;

View File

@@ -0,0 +1,74 @@
import { AboutData } from "@/app/about/types";
import { getCmsImageUrl } from "@/utils/image";
import Link from "next/link";
interface HeroSectionProps {
data?: AboutData | null;
}
const HeroSection = ({ data }: HeroSectionProps) => {
const title = data?.hero?.title || "A Legacy of Liberal Arts & Research";
const backgroundImage = data?.hero?.backgroundImage
? getCmsImageUrl(data.hero.backgroundImage)
: null;
return (
<section
id="about-hero"
className="about-hero fix bg-cover"
style={backgroundImage ? { backgroundImage: `url('${backgroundImage}')` } : undefined}
>
<div className="container">
<div className="row align-items-center">
{/* Left: Text */}
<div className="col-lg-6">
<div className="about-hero__content">
<div className="about-hero__badge">
<span className="about-hero__badge-line"></span>
<span className="about-hero__badge-text">Our Identity</span>
</div>
<h1 className="about-hero__title"
dangerouslySetInnerHTML={{ __html: title }}
/>
<p className="about-hero__desc">
Founded in the heart of Paris, Université Libérale is dedicated to fostering
critical thinking, interdisciplinary innovation, and global understanding through
a rigorous liberal arts curriculum and world-class research initiatives.
</p>
<div className="about-hero__actions">
<button className="about-hero__btn">
Discover Our History
<i className="fa-solid fa-arrow-down"></i>
</button>
</div>
</div>
</div>
{/* Right: Image */}
<div className="col-lg-6">
<div className="about-hero__image-wrap">
<img
src={data?.intro?.image
? getCmsImageUrl(data.intro.image)
: "https://storage.googleapis.com/uxpilot-auth.appspot.com/e0291249ca-9b14cf509f6076b406c0.png"}
alt="University campus"
className="about-hero__image"
/>
<div className="about-hero__badge-card">
<div className="about-hero__badge-icon">
<i className="fa-solid fa-award"></i>
</div>
<div>
<h4 className="about-hero__badge-value">Top 50</h4>
<p className="about-hero__badge-label">Global Research Ranking</p>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
);
};
export default HeroSection;

View File

@@ -0,0 +1,39 @@
const TIMELINE = [
{ year: "1895", title: "Foundation", desc: "Established as an independent institute for liberal studies by a group of visionary scholars.", side: "left" },
{ year: "1945", title: "Post-War Expansion", desc: "Expanded faculties to include modern sciences and established the first dedicated research hub.", side: "right" },
{ year: "1982", title: "Global Partnerships", desc: "Initiated formal exchange programs and research partnerships with leading universities worldwide.", side: "left" },
{ year: "2020", title: "Modern Research Era", desc: "Inauguration of the new interdisciplinary research center, focusing on sustainable global development.", side: "right" },
];
const HistoryTimeline = () => {
return (
<section id="history-timeline" className="about-timeline">
<div className="container">
<div className="about-timeline__header text-center">
<h2 className="about-timeline__title">Our History</h2>
<p className="about-timeline__subtitle">A legacy of academic excellence spanning over a century.</p>
</div>
<div className="about-timeline__track">
<div className="about-timeline__line"></div>
{TIMELINE.map((item, i) => (
<div key={i} className={`about-timeline__item about-timeline__item--${item.side}`}>
<div className="about-timeline__content">
<h3 className="about-timeline__year">{item.year}</h3>
<h4 className="about-timeline__event">{item.title}</h4>
<p className="about-timeline__desc">{item.desc}</p>
</div>
<div className="about-timeline__dot-wrap">
<div className="about-timeline__dot"></div>
</div>
<div className="about-timeline__spacer"></div>
</div>
))}
</div>
</div>
</section>
);
};
export default HistoryTimeline;

View File

@@ -0,0 +1,66 @@
import Link from "next/link";
const LEADERS = [
{
name: "Dr. Eleanor Laurent",
role: "President",
img: "https://storage.googleapis.com/uxpilot-auth.appspot.com/8ce6757572-cd9d4e986dee9e71d10c.png",
},
{
name: "Prof. Marcus Dubois",
role: "Dean of Humanities",
img: "https://storage.googleapis.com/uxpilot-auth.appspot.com/3aae15d87b-020f60df05ac2c52a087.png",
},
{
name: "Dr. Sophie Martin",
role: "Dean of Research",
img: "https://storage.googleapis.com/uxpilot-auth.appspot.com/3fc05a202c-26e5f00c35a829b5462d.png",
},
{
name: "Prof. Jean-Paul Roux",
role: "Provost",
img: "https://storage.googleapis.com/uxpilot-auth.appspot.com/3aae15d87b-c36f00cff7803c4209d4.png",
},
];
const LeadershipBoard = () => {
return (
<section id="leadership-board" className="about-leadership">
<div className="container">
<div className="about-leadership__header text-center">
<div className="about-mission__badge">
<span className="about-mission__badge-line"></span>
<span className="about-mission__badge-text">University Leadership</span>
<span className="about-mission__badge-line"></span>
</div>
<h2 className="about-leadership__title">Meet Our Leaders</h2>
<p className="about-leadership__subtitle">Guiding our academic vision and institutional strategy.</p>
</div>
<div className="about-leadership__grid">
{LEADERS.map((leader, i) => (
<div key={i} className="about-leadership__card">
<div className="about-leadership__photo-wrap">
<img src={leader.img} alt={leader.name} className="about-leadership__photo" />
</div>
<div className="about-leadership__info">
<h3 className="about-leadership__name">{leader.name}</h3>
<p className="about-leadership__role">{leader.role}</p>
<div className="about-leadership__socials">
<Link href="#" className="about-leadership__social-link">
<i className="fa-brands fa-linkedin"></i>
</Link>
<Link href="#" className="about-leadership__social-link">
<i className="fa-solid fa-envelope"></i>
</Link>
</div>
</div>
</div>
))}
</div>
</div>
</section>
);
};
export default LeadershipBoard;

View File

@@ -0,0 +1,73 @@
import Link from "next/link";
const LeadershipMessage = () => {
return (
<section id="leadership-message" className="about-message">
<div className="container">
<div className="row">
{/* Main content */}
<div className="col-lg-8">
<div className="about-message__header">
<h2 className="about-message__title">A Message from the President</h2>
<div className="about-message__divider"></div>
</div>
<div className="about-message__body">
<p className="about-message__quote">
"Research is not just about discovery; it is about responsibility. As a premier institution in Paris, we carry the torch of enlightenment into the 21st century."
</p>
<p>
Welcome to Paris Research University. For decades, our halls have echoed with the profound debates of brilliant minds and the quiet hum of groundbreaking laboratories. We stand at the intersection of history and the future, leveraging our rich heritage to propel innovation that addresses the world's most pressing challenges.
</p>
<p>
Our commitment is unwavering: to foster an inclusive, vibrant academic community where interdisciplinary collaboration thrives. We invite you to explore our centers, engage with our faculty, and join us in our relentless pursuit of knowledge.
</p>
</div>
<div className="about-message__author">
<div className="about-message__avatar">
<img src="https://storage.googleapis.com/uxpilot-auth.appspot.com/avatars/avatar-4.jpg" alt="President" />
</div>
<div>
<h4 className="about-message__author-name">Dr. Jean-UX Pilot Laurent</h4>
<p className="about-message__author-role">President &amp; Vice-Chancellor</p>
</div>
<i className="fa-solid fa-quote-right about-message__quote-icon"></i>
</div>
</div>
{/* Sidebar */}
<div className="col-lg-4">
<div className="about-message__sidebar">
<div className="about-message__sidebar-card about-message__sidebar-card--primary">
<h3>Accreditation &amp; Standards</h3>
<p>Learn about our rigorous academic standards and global recognitions.</p>
<Link href="/accreditation" className="about-message__sidebar-link">
View Credentials <i className="fa-solid fa-arrow-right"></i>
</Link>
</div>
<div className="about-message__sidebar-card">
<div className="about-message__sidebar-icon">
<i className="fa-solid fa-handshake"></i>
</div>
<h3>Global Partnerships</h3>
<p>Explore our network of industry and academic collaborators.</p>
<Link href="/partnerships" className="about-message__sidebar-text-link">
Discover Network <i className="fa-solid fa-arrow-right"></i>
</Link>
</div>
<div className="about-message__sidebar-card">
<h3>Have Questions?</h3>
<Link href="/contact" className="about-message__sidebar-outline-link">
Contact Administration
</Link>
</div>
</div>
</div>
</div>
</div>
</section>
);
};
export default LeadershipMessage;

View File

@@ -0,0 +1,51 @@
const VALUES = [
{
icon: "fa-solid fa-book-open",
title: "Liberal Arts Foundation",
desc: "Providing a broad intellectual foundation that encourages critical thinking, creativity, and the ability to adapt to a rapidly changing world.",
},
{
icon: "fa-solid fa-microscope",
title: "Research Excellence",
desc: "Fostering a culture of rigorous inquiry and innovation, supporting faculty and students in pushing the boundaries of knowledge.",
},
{
icon: "fa-solid fa-globe",
title: "Global Perspective",
desc: "Cultivating an inclusive environment that values diverse perspectives and prepares students to engage with complex global challenges.",
},
];
const Mission = () => {
return (
<section id="mission-values" className="about-mission">
<div className="container">
<div className="about-mission__header text-center">
<div className="about-mission__badge">
<span className="about-mission__badge-line"></span>
<span className="about-mission__badge-text">Core Principles</span>
<span className="about-mission__badge-line"></span>
</div>
<h2 className="about-mission__title">Our Mission &amp; Values</h2>
<p className="about-mission__subtitle">
We are committed to advancing human knowledge and cultivating responsible global citizens through transformative education.
</p>
</div>
<div className="about-mission__grid">
{VALUES.map((item, i) => (
<div key={i} className="about-mission__card">
<div className="about-mission__icon-wrap">
<i className={item.icon}></i>
</div>
<h3 className="about-mission__card-title">{item.title}</h3>
<p className="about-mission__card-desc">{item.desc}</p>
</div>
))}
</div>
</div>
</section>
);
};
export default Mission;

View File

@@ -0,0 +1,65 @@
const FEATURES = [
"Access to world-renowned museums, archives, and libraries.",
"A hub for international organizations and global policy.",
"A vibrant cultural ecosystem that enriches the liberal arts experience.",
];
const IMAGES = [
{ src: "https://storage.googleapis.com/uxpilot-auth.appspot.com/4df3620db3-dda28233c91d6369d039.png", alt: "Parisian cafe and street", tall: false },
{ src: "https://storage.googleapis.com/uxpilot-auth.appspot.com/a45c3de13a-8173142c33595269388d.png", alt: "Students in Parisian library", tall: true },
{ src: "https://storage.googleapis.com/uxpilot-auth.appspot.com/fe39e27ab6-40f9c9b4851f3b8176da.png", alt: "Seine river with historic bridges", tall: true },
{ src: "https://storage.googleapis.com/uxpilot-auth.appspot.com/cb66207ea0-16795a67db08ef0e6f8c.png", alt: "Modern research facility", tall: false },
];
const WhyParis = () => {
return (
<section id="why-paris" className="why-paris">
<div className="container">
<div className="row align-items-center">
{/* Left: Image grid */}
<div className="col-lg-6 order-lg-1 order-2">
<div className="why-paris__image-grid">
<div className="why-paris__image-col">
<img src={IMAGES[0].src} alt={IMAGES[0].alt} className="why-paris__img why-paris__img--short" />
<img src={IMAGES[1].src} alt={IMAGES[1].alt} className="why-paris__img why-paris__img--tall" />
</div>
<div className="why-paris__image-col why-paris__image-col--offset">
<img src={IMAGES[2].src} alt={IMAGES[2].alt} className="why-paris__img why-paris__img--tall" />
<img src={IMAGES[3].src} alt={IMAGES[3].alt} className="why-paris__img why-paris__img--short" />
</div>
</div>
</div>
{/* Right: Text */}
<div className="col-lg-6 order-lg-2 order-1">
<div className="why-paris__content">
<div className="about-hero__badge">
<span className="about-hero__badge-line"></span>
<span className="about-hero__badge-text">Our Location</span>
</div>
<h2 className="why-paris__title">Why Paris?</h2>
<p className="why-paris__desc">
Paris is not just a backdrop; it is our extended campus. As a historic center
of intellectual thought, art, and scientific discovery, the city offers
unparalleled opportunities for our students and researchers.
</p>
<ul className="why-paris__list">
{FEATURES.map((item, i) => (
<li key={i} className="why-paris__list-item">
<span className="why-paris__check">
<i className="fa-solid fa-check"></i>
</span>
<span>{item}</span>
</li>
))}
</ul>
<button className="why-paris__btn">Explore Campus Life</button>
</div>
</div>
</div>
</div>
</section>
);
};
export default WhyParis;

View File

@@ -0,0 +1,902 @@
/* ============================================================
ABOUT PAGE
============================================================ */
.about-hero {
padding: 80px 0;
background-color: #f8fbff;
position: relative;
overflow: hidden;
}
.about-hero__content {
display: flex;
flex-direction: column;
gap: 1.5rem;
}
.about-hero__badge {
display: inline-flex;
align-items: center;
gap: 0.75rem;
}
.about-hero__badge-line {
display: inline-block;
width: 2rem;
height: 2px;
background: #1b254b;
}
.about-hero__badge-text {
font-size: 0.8rem;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.1em;
color: #6b7280;
}
.about-hero__title {
font-size: clamp(2rem, 4vw, 3.5rem);
font-weight: 700;
color: #1b254b;
line-height: 1.15;
margin: 0;
}
.about-hero__title span {
color: var(--theme, #E13833);
}
.about-hero__desc {
font-size: 1.05rem;
color: #6b7280;
line-height: 1.7;
max-width: 36rem;
margin: 0;
}
.about-hero__actions {
padding-top: 0.5rem;
}
.about-hero__btn {
display: inline-flex;
align-items: center;
gap: 0.5rem;
padding: 0.875rem 2rem;
background-color: #1b254b;
color: #ffffff;
font-weight: 600;
font-size: 1rem;
border-radius: 0.375rem;
border: none;
cursor: pointer;
box-shadow: 0 4px 6px -1px rgba(0,0,0,0.1), 0 2px 4px -2px rgba(0,0,0,0.1);
transition: background-color 0.2s ease;
}
.about-hero__btn:hover {
background-color: #151c3a;
}
/* Image side */
.about-hero__image-wrap {
position: relative;
border-radius: 1rem;
overflow: visible;
}
.about-hero__image {
width: 100%;
height: auto;
border-radius: 1rem;
object-fit: cover;
box-shadow: 0 25px 50px rgba(0, 0, 0, 0.12);
display: block;
}
/* Badge card overlay */
.about-hero__badge-card {
position: absolute;
bottom: -1.5rem;
left: -1.5rem;
background: #ffffff;
padding: 1.25rem 1.5rem;
border-radius: 0.75rem;
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.1);
border: 1px solid #e5e7eb;
display: flex;
align-items: center;
gap: 1rem;
}
@media (max-width: 767px) {
.about-hero__badge-card {
display: none;
}
}
.about-hero__badge-icon {
width: 3rem;
height: 3rem;
background: #f8fbff;
border-radius: 0.5rem;
display: flex;
align-items: center;
justify-content: center;
font-size: 1.25rem;
color: #1b254b;
flex-shrink: 0;
}
.about-hero__badge-value {
font-size: 1.5rem;
font-weight: 700;
color: #1b254b;
margin: 0;
}
.about-hero__badge-label {
font-size: 0.8rem;
color: #6b7280;
margin: 0;
}
@media (max-width: 991px) {
.about-hero {
padding: 80px 0 60px;
}
.about-hero__image-wrap {
margin-top: 3rem;
}
}
/* ------------------------------------------------------------
Mission & Values
------------------------------------------------------------ */
.about-mission {
padding: 80px 0;
background-color: #f8f8f9;
border-top: 1px solid #e5e7eb;
}
.about-mission__header {
max-width: 48rem;
margin: 0 auto 4rem;
}
.about-mission__badge {
display: inline-flex;
align-items: center;
gap: 0.75rem;
margin-bottom: 1rem;
}
.about-mission__badge-line {
display: inline-block;
width: 2rem;
height: 2px;
background: #E13833;
}
.about-mission__badge-text {
font-size: 0.8rem;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.1em;
color: #6b7280;
}
.about-mission__title {
font-size: clamp(1.75rem, 3vw, 2.25rem);
font-weight: 700;
color: #1b254b;
margin-bottom: 1rem;
}
.about-mission__subtitle {
font-size: 1.05rem;
color: #6b7280;
line-height: 1.7;
margin: 0;
}
.about-mission__grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 2rem;
}
@media (max-width: 991px) {
.about-mission__grid {
grid-template-columns: 1fr;
}
}
.about-mission__card {
background: #ffffff;
padding: 2rem;
border-radius: 0.75rem;
border: 1px solid #e5e7eb;
box-shadow: 0 1px 4px rgba(0,0,0,0.04);
transition: box-shadow 0.2s ease;
}
.about-mission__card:hover {
box-shadow: 0 8px 24px rgba(0,0,0,0.08);
}
.about-mission__icon-wrap {
width: 3.5rem;
height: 3.5rem;
background: #f8fbff;
border-radius: 0.5rem;
display: flex;
align-items: center;
justify-content: center;
font-size: 1.25rem;
color: #1b254b;
margin-bottom: 1.5rem;
border-top: 4px solid transparent;
transition: background-color 0.2s ease, color 0.2s ease, border-color 0.2s ease;
}
.about-mission__card:hover .about-mission__icon-wrap {
background-color: #1b254b;
color: #ffffff;
border-top-color: #E13833;
}
.about-mission__card-title {
font-size: 1.125rem;
font-weight: 700;
color: #1b254b;
margin-bottom: 0.75rem;
}
.about-mission__card-desc {
font-size: 0.95rem;
color: #6b7280;
line-height: 1.7;
margin: 0;
}
/* ------------------------------------------------------------
Why Paris
------------------------------------------------------------ */
.why-paris {
padding: 80px 0;
background: #ffffff;
}
.why-paris__image-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 1rem;
}
.why-paris__image-col {
display: flex;
flex-direction: column;
gap: 1rem;
}
.why-paris__image-col--offset {
padding-top: 2rem;
}
.why-paris__img {
width: 100%;
object-fit: cover;
border-radius: 0.75rem;
box-shadow: 0 4px 12px rgba(0,0,0,0.1);
display: block;
}
.why-paris__img--short { height: 12rem; }
.why-paris__img--tall { height: 16rem; }
.why-paris__content {
display: flex;
flex-direction: column;
gap: 1.25rem;
padding-left: 2rem;
}
@media (max-width: 991px) {
.why-paris__content {
padding-left: 0;
margin-bottom: 2.5rem;
}
}
.why-paris__title {
font-size: clamp(1.75rem, 3vw, 2.25rem);
font-weight: 700;
color: #1b254b;
margin: 0;
}
.why-paris__desc {
font-size: 1.05rem;
color: #6b7280;
line-height: 1.7;
margin: 0;
}
.why-paris__list {
list-style: none;
padding: 0;
margin: 0;
display: flex;
flex-direction: column;
gap: 1rem;
}
.why-paris__list-item {
display: flex;
align-items: flex-start;
gap: 0.75rem;
color: #1b254b;
font-size: 0.95rem;
}
.why-paris__check {
width: 1.25rem;
height: 1.25rem;
border-radius: 50%;
background: #f8fbff;
display: flex;
align-items: center;
justify-content: center;
color: #1b254b;
font-size: 0.65rem;
flex-shrink: 0;
margin-top: 2px;
}
.why-paris__btn {
display: inline-block;
margin-top: 0.5rem;
padding: 0.625rem 1.5rem;
background: #f8fbff;
color: #1b254b;
font-weight: 600;
font-size: 0.95rem;
border-radius: 0.375rem;
border: 1px solid #e5e7eb;
cursor: pointer;
transition: background-color 0.2s ease;
}
.why-paris__btn:hover {
background-color: #e5e7eb;
}
/* ------------------------------------------------------------
Leadership Message
------------------------------------------------------------ */
.about-message {
padding: 80px 0;
background: #ffffff;
}
.about-message__header {
margin-bottom: 2rem;
}
.about-message__title {
font-size: clamp(1.75rem, 3vw, 2.5rem);
font-weight: 700;
color: #1b254b;
margin-bottom: 1rem;
}
.about-message__divider {
width: 5rem;
height: 4px;
background: #E13833;
border-radius: 999px;
}
.about-message__body p {
color: #6b7280;
line-height: 1.8;
margin-bottom: 1.25rem;
}
.about-message__quote {
font-size: 1.2rem;
font-weight: 500;
color: #1b254b !important;
line-height: 1.7;
}
.about-message__author {
display: flex;
align-items: center;
gap: 1.25rem;
margin-top: 2rem;
padding: 1.5rem;
background: #f8f8f9;
border-radius: 1rem;
border: 1px solid #e5e7eb;
}
.about-message__avatar {
width: 5rem;
height: 5rem;
border-radius: 50%;
overflow: hidden;
border: 2px solid #E13833;
flex-shrink: 0;
}
.about-message__avatar img {
width: 100%;
height: 100%;
object-fit: cover;
}
.about-message__author-name {
font-size: 1.1rem;
font-weight: 700;
color: #1b254b;
margin: 0 0 0.25rem;
}
.about-message__author-role {
font-size: 0.875rem;
color: #E13833;
font-weight: 500;
margin: 0;
}
.about-message__quote-icon {
font-size: 3rem;
color: #1b254b;
opacity: 0.15;
margin-left: auto;
}
/* Sidebar */
.about-message__sidebar {
display: flex;
flex-direction: column;
gap: 1.25rem;
position: sticky;
top: 7rem;
}
.about-message__sidebar-card {
background: #f8f8f9;
padding: 2rem;
border-radius: 1.5rem;
border: 1px solid #e5e7eb;
}
.about-message__sidebar-card h3 {
font-size: 1.1rem;
font-weight: 700;
color: #1b254b;
margin-bottom: 0.75rem;
}
.about-message__sidebar-card p {
font-size: 0.875rem;
color: #6b7280;
margin-bottom: 1.25rem;
}
.about-message__sidebar-card--primary {
background: #1b254b;
}
.about-message__sidebar-card--primary h3,
.about-message__sidebar-card--primary p {
color: #ffffff;
}
.about-message__sidebar-card--primary p {
color: rgba(255,255,255,0.75);
}
.about-message__sidebar-link {
display: inline-flex;
align-items: center;
justify-content: space-between;
width: 100%;
background: #ffffff;
color: #1b254b;
padding: 0.75rem 1.5rem;
border-radius: 999px;
font-weight: 500;
font-size: 0.9rem;
text-decoration: none;
transition: background 0.2s;
}
.about-message__sidebar-link:hover { background: #f3f4f6; }
.about-message__sidebar-icon {
width: 3rem;
height: 3rem;
background: #ffffff;
border-radius: 0.75rem;
display: flex;
align-items: center;
justify-content: center;
font-size: 1.25rem;
color: #1b254b;
margin-bottom: 1rem;
box-shadow: 0 1px 4px rgba(0,0,0,0.08);
}
.about-message__sidebar-text-link {
display: inline-flex;
align-items: center;
gap: 0.5rem;
color: #1b254b;
font-weight: 500;
font-size: 0.9rem;
text-decoration: none;
}
.about-message__sidebar-text-link:hover { text-decoration: underline; }
.about-message__sidebar-outline-link {
display: flex;
align-items: center;
justify-content: center;
width: 100%;
border: 2px solid #1b254b;
color: #1b254b;
padding: 0.75rem 1.5rem;
border-radius: 999px;
font-weight: 500;
font-size: 0.9rem;
text-decoration: none;
transition: all 0.2s;
}
.about-message__sidebar-outline-link:hover {
background: #1b254b;
color: #ffffff;
}
/* ------------------------------------------------------------
Leadership Board
------------------------------------------------------------ */
.about-leadership {
padding: 80px 0;
background: #f8f8f9;
}
.about-leadership__header {
margin-bottom: 3rem;
}
.about-leadership__title {
font-size: clamp(1.75rem, 3vw, 2.25rem);
font-weight: 700;
color: #1b254b;
margin-bottom: 0.75rem;
}
.about-leadership__subtitle {
color: #6b7280;
font-size: 1.05rem;
margin: 0;
}
.about-leadership__grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 2rem;
}
@media (max-width: 991px) {
.about-leadership__grid { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 575px) {
.about-leadership__grid { grid-template-columns: 1fr; }
}
.about-leadership__card {
background: #ffffff;
border-radius: 0.75rem;
border: 1px solid #e5e7eb;
overflow: hidden;
transition: box-shadow 0.2s;
}
.about-leadership__card:hover { box-shadow: 0 8px 24px rgba(0,0,0,0.08); }
.about-leadership__photo-wrap {
height: 16rem;
overflow: hidden;
background: #f3f4f6;
}
.about-leadership__photo {
width: 100%;
height: 100%;
object-fit: cover;
transition: transform 0.5s ease;
}
.about-leadership__card:hover .about-leadership__photo { transform: scale(1.05); }
.about-leadership__info {
padding: 1.5rem;
text-align: center;
}
.about-leadership__name {
font-size: 1rem;
font-weight: 700;
color: #1b254b;
margin-bottom: 0.25rem;
}
.about-leadership__role {
font-size: 0.875rem;
color: #E13833;
font-weight: 500;
margin-bottom: 0.75rem;
}
.about-leadership__socials {
display: flex;
justify-content: center;
gap: 0.75rem;
}
.about-leadership__social-link {
color: #6b7280;
font-size: 1rem;
text-decoration: none;
transition: color 0.2s;
}
.about-leadership__social-link:hover { color: #1b254b; }
/* ------------------------------------------------------------
Campus
------------------------------------------------------------ */
.about-campus {
padding: 80px 0;
background: #f8f8f9;
}
.about-campus__header {
margin-bottom: 3rem;
}
.about-campus__title {
font-size: clamp(1.75rem, 3vw, 2.25rem);
font-weight: 700;
color: #1b254b;
margin-bottom: 0.75rem;
}
.about-campus__subtitle {
color: #6b7280;
max-width: 40rem;
margin: 0 auto;
}
.about-campus__grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 2rem;
}
@media (max-width: 991px) {
.about-campus__grid { grid-template-columns: 1fr; }
}
.about-campus__card {
background: #ffffff;
border-radius: 1.5rem;
overflow: hidden;
box-shadow: 0 2px 8px rgba(0,0,0,0.06);
transition: box-shadow 0.2s;
}
.about-campus__card:hover { box-shadow: 0 12px 32px rgba(0,0,0,0.1); }
.about-campus__img-wrap {
height: 12rem;
overflow: hidden;
}
.about-campus__img {
width: 100%;
height: 100%;
object-fit: cover;
transition: transform 0.5s ease;
}
.about-campus__card:hover .about-campus__img { transform: scale(1.05); }
.about-campus__body {
padding: 2rem;
}
.about-campus__tag {
display: inline-block;
padding: 0.2rem 0.75rem;
border-radius: 999px;
font-size: 0.75rem;
font-weight: 700;
margin-bottom: 1rem;
}
.about-campus__tag--blue { background: #eff6ff; color: #1b254b; }
.about-campus__tag--yellow { background: #fefce8; color: #854d0e; }
.about-campus__tag--green { background: #f0fdf4; color: #166534; }
.about-campus__card-title {
font-size: 1.1rem;
font-weight: 700;
color: #1b254b;
margin-bottom: 0.75rem;
}
.about-campus__card-desc {
font-size: 0.875rem;
color: #6b7280;
line-height: 1.6;
margin-bottom: 1.5rem;
}
.about-campus__link {
display: inline-flex;
align-items: center;
gap: 0.5rem;
color: #1b254b;
font-weight: 500;
font-size: 0.875rem;
text-decoration: none;
transition: gap 0.2s;
}
.about-campus__link:hover { gap: 0.75rem; }
/* ------------------------------------------------------------
History Timeline
------------------------------------------------------------ */
.about-timeline {
padding: 80px 0;
background: #1b254b;
color: #ffffff;
}
.about-timeline__header { margin-bottom: 3rem; }
.about-timeline__title {
font-size: clamp(1.75rem, 3vw, 2.5rem);
font-weight: 700;
color: #ffffff;
margin-bottom: 0.75rem;
}
.about-timeline__subtitle { color: rgba(255,255,255,0.65); font-size: 1rem; margin: 0; }
.about-timeline__track {
max-width: 44rem;
margin: 0 auto;
position: relative;
padding: 1rem 0;
}
/* Vertical line chạy giữa track */
.about-timeline__line {
position: absolute;
left: 50%;
top: 0;
bottom: 0;
width: 2px;
margin-left: -1px;
background: rgba(100,160,255,0.3);
}
.about-timeline__item {
display: flex;
margin-bottom: 3.5rem;
width: 100%;
position: relative;
}
.about-timeline__item:last-child { margin-bottom: 0; }
/* Content chiếm nửa trái hoặc phải */
.about-timeline__content {
width: calc(50% - 1.5rem);
}
/* Dot nằm absolute giữa line */
.about-timeline__dot-wrap {
position: absolute;
left: 50%;
top: 0.3rem;
transform: translateX(-50%);
z-index: 2;
display: flex;
align-items: center;
justify-content: center;
}
/* Spacer chiếm nửa còn lại */
.about-timeline__spacer {
width: calc(50% - 1.5rem);
}
/* Left: content bên trái, text align right */
.about-timeline__item--left .about-timeline__content {
text-align: right;
order: 1;
margin-right: 3rem;
}
.about-timeline__item--left .about-timeline__dot-wrap { order: 2; }
.about-timeline__item--left .about-timeline__spacer { order: 3; }
/* Right: spacer bên trái, content bên phải */
.about-timeline__item--right .about-timeline__spacer { order: 1; }
.about-timeline__item--right .about-timeline__dot-wrap { order: 2; }
.about-timeline__item--right .about-timeline__content {
text-align: left;
order: 3;
margin-left: 3rem;
}
.about-timeline__dot {
width: 1.25rem;
height: 1.25rem;
border-radius: 50%;
background: transparent;
border: 2px solid #74b3ff;
box-shadow: 0 0 0 4px rgba(116,179,255,0.15);
flex-shrink: 0;
}
.about-timeline__year {
font-size: 1.75rem;
font-weight: 700;
color: #ffffff;
margin-bottom: 0.25rem;
line-height: 1;
}
.about-timeline__event {
font-size: 0.95rem;
font-weight: 600;
color: #74b3ff;
margin-bottom: 0.5rem;
}
.about-timeline__desc {
font-size: 0.875rem;
color: rgba(255,255,255,0.65);
line-height: 1.6;
margin: 0;
max-width: 18rem;
}
.about-timeline__item--left .about-timeline__desc { margin-left: auto; }
.about-timeline__item--right .about-timeline__desc { margin-right: auto; }
@media (max-width: 767px) {
.about-timeline__line { left: 0.75rem; }
.about-timeline__item { flex-direction: column; align-items: flex-start; padding-left: 2.5rem; }
.about-timeline__item--left .about-timeline__content,
.about-timeline__item--right .about-timeline__content { text-align: left; padding: 0; order: 2; }
.about-timeline__item--left .about-timeline__desc,
.about-timeline__item--right .about-timeline__desc { margin: 0; max-width: 100%; }
.about-timeline__dot-wrap { position: absolute; left: 0; top: 0.25rem; order: 1; }
.about-timeline__spacer { display: none; }
}

View File

@@ -1,5 +0,0 @@
export { default as AboutHero } from './AboutHero';
export { default as AboutIntro } from './AboutIntro';
export { default as AboutMission } from './AboutMission';
export { default as AboutFeatures } from './AboutFeatures';
export { default as AboutNews } from './AboutNews';

View File

@@ -1,47 +0,0 @@
interface AchievementsProps {
data: {
heading: string;
subheading: string;
items: {
value: string;
suffix: string;
label: string;
description: string;
}[];
};
}
const Achievements = ({ data }: AchievementsProps) => {
return (
<section className="counter-section section-padding pb-0 fix bg-cover" style={{ backgroundImage: "url('/assets/img/home-1/feature/bg-2.jpg')" }}>
<div className="shape">
<img src="/assets/img/home-1/feature/shape-2.png" alt="img" />
</div>
<div className="container">
<div className="section-title text-center">
<span className="sub-title bg-2 wow fadeInUp">{data.subheading}</span>
<h2 className="text-white split-text-right split-text-in-right">
{data.heading}
</h2>
</div>
</div>
<div className="counter-wrapper">
<div className="container">
<div className="counter-main-item">
{data.items.map((item, index) => (
<div key={index} className={`counter-item ${index < 3 ? 'style-2' : ''}`}>
<h2><span className="odometer" data-count={item.value}>00</span>{item.suffix}</h2>
<h5>{item.label}</h5>
<p>
{item.description}
</p>
</div>
))}
</div>
</div>
</div>
</section>
);
};
export default Achievements;

View File

@@ -1,116 +0,0 @@
import { getCmsImageUrl } from '@/utils/image';
import Link from 'next/link';
interface BlogPreviewProps {
data: {
heading: string;
subheading: string;
ctaButton: {
label: string;
href: string;
};
items: {
title: string;
excerpt: string;
category: string;
date: string;
author: {
name: string;
avatar: string;
};
comments: number;
link: string;
thumbnail: string;
}[];
};
}
const BlogPreview = ({ data }: BlogPreviewProps) => {
const formatDate = (dateString: string) => {
const date = new Date(dateString);
return date.toLocaleDateString('en-US', { day: 'numeric', month: 'long', year: 'numeric' });
};
return (
<section className="news-section section-padding fix">
<div className="container">
<div className="section-title-area">
<div className="section-title">
<span className="sub-title wow fadeInUp">{data.subheading}</span>
<h2 className="split-text-right split-text-in-right">
{data.heading}
</h2>
</div>
<Link href={data.ctaButton.href} className="theme-btn wow fadeInUp" data-wow-delay=".3s">
{data.ctaButton.label}
<i className="fa-solid fa-arrow-right"></i>
</Link>
</div>
<div className="row">
{data.items.map((item, index) => {
const thumbUrl = getCmsImageUrl(item.thumbnail);
return (
<div key={index} className="col-xl-4 col-lg-6 col-md-6 wow fadeInUp" data-wow-delay={`.${(index + 1) * 2 + 1}s`}>
<div className="news-card-item">
<div className="news-image">
<img
src={thumbUrl}
alt="img"
style={{
width: '419px',
height: '312px',
objectFit: 'cover'
}}
/>
<span>{item.category}</span>
<div className="news-layer-wrapper">
<div className="news-layer-image" style={{ backgroundImage: `url('${thumbUrl}')`, width: '419px', height: '312px' }}></div>
<div className="news-layer-image" style={{ backgroundImage: `url('${thumbUrl}')`, width: '419px', height: '312px' }}></div>
<div className="news-layer-image" style={{ backgroundImage: `url('${thumbUrl}')`, width: '419px', height: '312px' }}></div>
<div className="news-layer-image" style={{ backgroundImage: `url('${thumbUrl}')`, width: '419px', height: '312px' }}></div>
</div>
</div>
<div className="news-content">
<div className="list">
<span>Comment ({item.comments.toString().padStart(2, '0')})</span>
<span>_ {formatDate(item.date)}</span>
</div>
<h3>
<Link href={item.link}>
{item.title}
</Link>
</h3>
<div className="news-bottom">
<div className="info-item">
<div
style={{
width: '32px',
height: '32px',
backgroundColor: '#d1d5db',
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
fontSize: '14px',
fontWeight: 'bold',
color: '#374151',
marginRight: '10px'
}}
>
{item.author.name.charAt(0).toUpperCase()}
</div>
<span>By {item.author.name}</span>
</div>
<Link href={item.link} className="link-btn">View Articles<i className="fa-solid fa-arrow-right"></i></Link>
</div>
</div>
</div>
</div>
);
})}
</div>
</div>
</section>
);
};
export default BlogPreview;

View File

@@ -1,83 +0,0 @@
import Link from 'next/link';
interface FAQSectionProps {
data: {
heading: string;
subheading: string;
description: string;
ctaButton: {
label: string;
href: string;
};
items: {
question: string;
answer: string;
}[];
};
}
const FAQSection = ({ data }: FAQSectionProps) => {
return (
<section className="faq-section section-padding fix">
<div className="container">
<div className="faq-wrapper">
<div className="row g-4">
<div className="col-lg-5">
<div className="faq-content">
<div className="section-title mb-0">
<span className="sub-title wow fadeInUp">{data.subheading}</span>
<h2 className="split-text-right split-text-in-right">
{data.heading}
</h2>
</div>
<p className="text">
{data.description}
</p>
<Link href={data.ctaButton.href} className="theme-btn">
{data.ctaButton.label}
<i className="fa-solid fa-arrow-right"></i>
</Link>
</div>
</div>
<div className="col-lg-7">
<div className="faq-items">
<div className="accordion" id="accordionExample">
{data.items.map((item, index) => (
<div key={index} className="accordion-item wow fadeInUp" data-wow-delay={`.${(index + 1) * 2}s`}>
<h5 className="accordion-header" id={`heading${index}`}>
<button
className="accordion-button collapsed"
type="button"
data-bs-toggle="collapse"
data-bs-target={`#collapse${index}`}
aria-expanded="false"
aria-controls={`collapse${index}`}
>
{item.question}
</button>
</h5>
<div
id={`collapse${index}`}
className="accordion-collapse collapse"
aria-labelledby={`heading${index}`}
data-bs-parent="#accordionExample"
>
<div className="accordion-body">
<p>
{item.answer}
</p>
</div>
</div>
</div>
))}
</div>
</div>
</div>
</div>
</div>
</div>
</section>
);
};
export default FAQSection;

View File

@@ -1,136 +1,41 @@
import { getCmsImageUrl } from '@/utils/image';
import Link from 'next/link';
interface HeroSlide {
title: string;
subtitle: string;
description: string;
primaryButton: {
label: string;
href: string;
};
secondaryButton: {
label: string;
href: string;
};
heroImage?: string;
videoUrl: string;
}
interface HeroSectionProps {
data: {
backgroundImage: string;
// Optional multi-slide support from CMS
slides?: HeroSlide[];
// Legacy single-slide fields (fallback)
title?: string;
subtitle?: string;
description?: string;
primaryButton?: {
label: string;
href: string;
};
secondaryButton?: {
label: string;
href: string;
};
heroImage?: string;
videoUrl?: string;
};
}
const HeroSection = ({ data }: HeroSectionProps) => {
const slides: HeroSlide[] =
(data.slides && data.slides.length > 0)
? data.slides
: [{
title: data.title || '',
subtitle: data.subtitle || '',
description: data.description || '',
primaryButton: data.primaryButton || { label: '', href: '#' },
secondaryButton: data.secondaryButton || { label: '', href: '#' },
heroImage: data.heroImage,
videoUrl: data.videoUrl || '',
}];
const firstSlide = slides[0];
import Link from "next/link";
const HeroSection = () => {
return (
<section className="hero-section hero-1 fix bg-cover" style={{ backgroundImage: `url('${getCmsImageUrl(data.backgroundImage)}')` }}>
<div className="left-shape">
<img src="/assets/img/home-1/hero/sape-2.png" alt="img" />
<section id="hero-banner" className="hero-home">
<div className="hero-home__overlay">
<img
src="https://images.unsplash.com/photo-1541339907198-e08756dedf3f?ixlib=rb-4.0.3&auto=format&fit=crop&w=2070&q=80"
alt="Paris University Campus"
className="hero-home__bg-img"
/>
<div className="hero-home__gradient" />
</div>
<div className="hero-shape">
<img src="/assets/img/home-1/hero/shape.png" alt="img" />
<div className="hero-home__container">
<div className="hero-home__content">
<div className="hero-home__badge">
<span className="hero-home__badge-dot" />
<span className="hero-home__badge-text">Leading Research Institution</span>
</div>
<div className="top-shape">
<img src="/assets/img/home-1/hero/shape-3.png" alt="img" />
</div>
<div className="right-shape">
<img src="/assets/img/home-1/hero/shape-4.png" alt="img" />
</div>
<div className="pagi-item">
<div className="dot-number">
<span className="dot-num">
<span>03</span>
</span>
<span className="dot-num">
<span>05</span>
</span>
</div>
</div>
<div className="container-fluid">
<div className="row align-items-center">
<div className="col-lg-6">
<div className="swiper hero-slider">
<div className="swiper-wrapper">
{slides.map((slide, index) => (
<div className="swiper-slide" key={index}>
<div className="hero-content">
<h6>{slide.subtitle}</h6>
<h1>
{slide.title}
{slide.videoUrl && (
<a href={slide.videoUrl} className="video-btn video-popup">
<i className="fa-solid fa-play"></i>
</a>
)}
<h1 className="hero-home__title">
Advancing Knowledge in the Heart of Paris
</h1>
<p>
{slide.description}
<p className="hero-home__desc">
A premier liberal arts and research university dedicated to fostering
interdisciplinary innovation, global partnerships, and academic excellence.
</p>
<div className="hero-button">
{slide.primaryButton?.href && (
<Link href={slide.primaryButton.href} className="theme-btn">
{slide.primaryButton.label}
<div className="hero-home__actions">
<button className="hero-home__btn hero-home__btn--primary">
Explore Research
<i className="fa-solid fa-arrow-right"></i>
</Link>
)}
{slide.secondaryButton?.href && (
<Link href={slide.secondaryButton.href} className="theme-btn style-2">
{slide.secondaryButton.label}
<i className="fa-solid fa-arrow-right"></i>
</Link>
)}
</div>
</div>
</div>
))}
</div>
</div>
</div>
<div className="col-lg-6">
<div className="swiper image-slider">
<div className="swiper-wrapper">
{slides.map((slide, index) => (
<div className="swiper-slide" key={index}>
<div className="hero-image">
<img src={slide.heroImage || firstSlide.heroImage || "/assets/img/home-1/hero/man.png"} alt="img" />
</div>
</div>
))}
</div>
</div>
</button>
<button className="hero-home__btn hero-home__btn--secondary">
Partner With Us
</button>
</div>
</div>
</div>

View File

@@ -1,66 +0,0 @@
import { getCmsImageUrl } from '@/utils/image';
interface PartnersProps {
data: {
visaConsultancy: {
items: {
name: string;
icon: string;
year: string;
}[];
};
brands: {
items: {
logo: string;
}[];
};
};
}
const Partners = ({ data }: PartnersProps) => {
return (
<>
{/* Awards Section */}
<section className="visa-consultency-section section-padding fix">
<div className="container">
<div className="row g-4">
{(data.visaConsultancy?.items || []).map((partner, index) => (
<div key={index} className="col-xl-3 col-lg-4 col-md-6">
<div className="visa-consultency-item">
<div className="image d-flex justify-content-center">
<img src={getCmsImageUrl(partner.icon)} alt={partner.name} />
</div>
<h3>{partner.name}</h3>
<h6>{partner.year}</h6>
</div>
</div>
))}
</div>
</div>
</section>
{/* Brand Partners Section */}
<div className="brand-section fix">
<div className="container">
<div className="brand-wrapper style-1">
<div className="brand-item">
<div className="swiper brand-slider">
<div className="swiper-wrapper">
{(data.brands?.items || []).map((brand, index) => (
<div key={index} className="swiper-slide">
<div className="brand-image d-flex justify-content-center">
<img src={getCmsImageUrl(brand.logo)} alt="brand-logo" />
</div>
</div>
))}
</div>
</div>
</div>
</div>
</div>
</div>
</>
);
};
export default Partners;

View File

@@ -0,0 +1,67 @@
import Link from "next/link";
const LINKS = [
{
icon: "fa-solid fa-microscope",
title: "Research Hub",
desc: "Discover our ongoing projects, facilities, and interdisciplinary centers.",
cta: "View Hub",
href: "/research",
},
{
icon: "fa-solid fa-book-open",
title: "Publications",
desc: "Access our extensive repository of peer-reviewed papers and journals.",
cta: "Browse",
href: "/publications",
},
{
icon: "fa-solid fa-handshake",
title: "Partnerships",
desc: "Collaborate with us through industry, academic, and global networks.",
cta: "Connect",
href: "/partnerships",
},
{
icon: "fa-solid fa-newspaper",
title: "News & Events",
desc: "Stay updated with our latest breakthroughs, seminars, and campus life.",
cta: "Read More",
href: "/blog",
},
];
const QuickLinksGrid = () => {
return (
<section id="quick-links" className="quick-links">
<div className="container">
<div className="quick-links__header text-center">
<h2 className="quick-links__title">Explore Our Ecosystem</h2>
<p className="quick-links__subtitle">
Navigate through our core pillars of academic excellence and global partnerships.
</p>
</div>
<div className="quick-links__grid">
{LINKS.map((item, i) => (
<Link href={item.href} key={i} className="quick-links__card">
<div className="quick-links__icon-wrap">
<i className={item.icon}></i>
</div>
<h3 className="quick-links__card-title">{item.title}</h3>
<p className="quick-links__card-desc">{item.desc}</p>
<div className="quick-links__card-footer">
<span className="quick-links__cta">{item.cta}</span>
<span className="quick-links__arrow">
<i className="fa-solid fa-arrow-right"></i>
</span>
</div>
</Link>
))}
</div>
</div>
</section>
);
};
export default QuickLinksGrid;

View File

@@ -1,74 +0,0 @@
interface TestimonialsProps {
data: {
heading: string;
subheading: string;
videoUrl: string;
videoThumbnail: string;
items: {
name: string;
role: string;
country: string;
rating: number;
comment: string;
avatar: string;
}[];
};
}
const Testimonials = ({ data }: TestimonialsProps) => {
return (
<section className="testimonial-section section-padding pb-0 fix">
<div className="container">
<div className="section-title text-center">
<span className="sub-title wow fadeInUp">{data.subheading}</span>
<h2 className="split-text-right split-text-in-right">
{data.heading}
</h2>
</div>
<div className="testimonial-wrapper">
<div className="row g-4">
<div className="col-lg-4">
<div className="testimonia-image tp-clip-anim p-relative">
<img src={data.videoThumbnail} alt="img" className="tp-anim-img" data-animate="true" />
<a href={data.videoUrl} className="video-btn video-popup">
<i className="fa-solid fa-play"></i></a>
<h5>Real stories</h5>
</div>
</div>
<div className="col-lg-8">
<div className="swiper testimonial-slider">
<div className="swiper-wrapper">
{data.items.map((testimonial, index) => (
<div key={index} className="swiper-slide">
<div className="testimonial-box">
<div className="star">
{Array.from({ length: testimonial.rating }).map((_, i) => (
<i key={i} className="fa-solid fa-star"></i>
))}
</div>
<p>
{testimonial.comment}
</p>
<div className="info-item">
<div className="client-image">
<img src={testimonial.avatar} alt="img" />
</div>
<div className="content">
<h5>{testimonial.name}</h5>
<span>{testimonial.country}</span>
</div>
</div>
</div>
</div>
))}
</div>
</div>
</div>
</div>
</div>
</div>
</section>
);
};
export default Testimonials;

View File

@@ -1,35 +0,0 @@
interface VideoGalleryProps {
data: {
heading: string;
videoUrl: string;
thumbnail: string;
};
}
const VideoGallery = ({ data }: VideoGalleryProps) => {
return (
<section className="video-section bg-cover">
<video autoPlay loop muted playsInline className="video-bg">
<source src={data.videoUrl} type="video/mp4" />
</video>
<div className="text-image">
<img src="/assets/img/home-1/feature/text.png" alt="img" />
</div>
<div className="text-image-2">
<img src="/assets/img/home-1/feature/text-2.png" alt="img" />
</div>
<div className="container">
<div className="video-content">
<div className="shape">
<img src="/assets/img/home-1/feature/Vector.png" alt="img" />
</div>
<h2 className="split-text-right split-text-in-right">{data.heading.split(' ').map((word, index) => (
<span key={index}>{word}{index === 0 ? <br /> : ' '}</span>
))}</h2>
</div>
</div>
</section>
);
};
export default VideoGallery;

View File

@@ -1,82 +0,0 @@
import Link from 'next/link';
interface VisaCountriesProps {
data: {
heading: string;
subheading: string;
description: string;
countries: {
name: string;
code: string;
flag: string;
link: string;
visaTypes: string[];
}[];
ctaButton: {
label: string;
href: string;
};
};
}
const VisaCountries = ({ data }: VisaCountriesProps) => {
// Display the first country as featured
const featuredCountry = data.countries[0];
const halfLength = Math.ceil(featuredCountry.visaTypes.length / 2);
const firstColumn = featuredCountry.visaTypes.slice(0, halfLength);
const secondColumn = featuredCountry.visaTypes.slice(halfLength);
return (
<section className="feature-section section-padding fix bg-cover" style={{ backgroundImage: "url('/assets/img/home-1/feature/bg.png')" }}>
<div className="container">
<div className="feature-wrapper">
<div className="row g-4">
<div className="col-lg-6">
<div className="feature-content">
<div className="section-title mb-0">
<span className="sub-title bg-2 wow fadeInUp">{data.subheading}</span>
<h2 className="text-white split-text-right split-text-in-right">
{data.heading}
</h2>
</div>
<p className="text wow fadeInUp" data-wow-delay=".3s">
{data.description}
</p>
<div className="feature-list-item wow fadeInUp" data-wow-delay=".5s">
<ul className="list">
{firstColumn.map((visaType, index) => (
<li key={index}>
<i className="fa-solid fa-arrow-right"></i>
{visaType}
</li>
))}
</ul>
<ul className="list">
{secondColumn.map((visaType, index) => (
<li key={index}>
<i className="fa-solid fa-arrow-right"></i>
{visaType}
</li>
))}
</ul>
</div>
<Link href={data.ctaButton.href} className="theme-btn">
{data.ctaButton.label}
<i className="fa-solid fa-arrow-right"></i>
</Link>
</div>
</div>
<div className="col-lg-6">
<div className="feature-image">
<img src={featuredCountry.flag} alt="img" />
<h6>{featuredCountry.code}.{featuredCountry.name}</h6>
</div>
</div>
</div>
</div>
</div>
</section>
);
};
export default VisaCountries;

View File

@@ -1,52 +0,0 @@
import Link from 'next/link';
interface VisaSolutionsProps {
data: {
heading: string;
subheading: string;
items: {
number: string;
title: string;
description: string;
link: string;
}[];
};
}
const VisaSolutions = ({ data }: VisaSolutionsProps) => {
return (
<div className="service-section section-padding fix">
<div className="container">
<div className="section-title text-center">
<span className="sub-title wow fadeInUp">{data.subheading}</span>
<h2 className="split-text-right split-text-in-right">
{data.heading}
</h2>
</div>
</div>
{data.items.map((item, index) => (
<div key={index} className={`service-wrapper ${index === 1 ? 'active' : ''}`}>
<div className="container">
<div className="service-item">
<div className="left-item">
<h5 className="number">{item.number}</h5>
<h3>
<Link href={item.link}>{item.title}</Link>
</h3>
</div>
<div className="right-item">
<p>
{item.description}
</p>
<Link href={item.link} className="service-btn">Service Details <i className="fa-solid fa-arrow-right"></i></Link>
</div>
</div>
</div>
</div>
))}
</div>
);
};
export default VisaSolutions;

View File

@@ -1,109 +0,0 @@
import Link from 'next/link';
interface WhyChooseUsProps {
data: {
heading: string;
highlightWord?: string;
subheading: string;
description: string;
mainImage?: string;
secondaryImage?: string;
items: {
icon: string;
title: string;
description: string;
}[];
features: string[];
ctaButton: {
label: string;
href: string;
};
};
}
const WhyChooseUs = ({ data }: WhyChooseUsProps) => {
const highlight = data.highlightWord?.trim();
let headingContent: React.ReactNode = data.heading;
if (highlight) {
const index = data.heading.indexOf(highlight);
if (index !== -1) {
const before = data.heading.slice(0, index);
const after = data.heading.slice(index + highlight.length);
headingContent = (
<>
{before}
<span>{highlight}</span>
{after}
</>
);
}
}
return (
<section className="about-section section-padding fix pb-0">
<div className="top-shape">
<img src="/assets/img/home-1/about/globe.png" alt="img" />
</div>
<div className="container">
<div className="about-wrapper">
<div className="row g-4">
<div className="col-lg-6">
<div className="about-image">
<img src={data.mainImage || "/assets/img/home-1/about/about-1.jpg"} alt="img" className="wow img-custom-anim-left" />
<div className="about-image-2">
<img src={data.secondaryImage || "/assets/img/home-1/about/about-02.jpg"} alt="img" className="wow img-custom-anim-right" />
</div>
<div className="bg-shape">
<img src="/assets/img/home-1/about/Vector.png" alt="img" />
</div>
<div className="plane-shape float-bob-y">
<img src="/assets/img/home-1/about/plane.png" alt="img" />
</div>
<div className="top-shape float-bob-y">
<img src="/assets/img/home-1/about/shape.png" alt="img" />
</div>
</div>
</div>
<div className="col-lg-6">
<div className="about-content">
<div className="section-title mb-0">
<span className="sub-title wow fadeInUp">{data.subheading}</span>
<h2 className="split-text-right split-text-in-right">
{headingContent}
</h2>
</div>
<p className="text wow fadeInUp" data-wow-delay=".3s">
{data.description}
</p>
<div className="about-item wow fadeInUp" data-wow-delay=".5s">
{data.items.map((item, index) => (
<div key={index} className="content">
<span><img src={item.icon} alt="" /> {item.title}-</span>
<p>{item.description}</p>
</div>
))}
</div>
<ul className="list wow fadeInUp" data-wow-delay=".3s">
{data.features.map((feature, index) => (
<li key={index}>
<i className="fa-solid fa-chevrons-right"></i>
{feature}
</li>
))}
</ul>
<Link href={data.ctaButton.href} className="theme-btn wow fadeInUp" data-wow-delay=".5s">
{data.ctaButton.label}
<i className="fa-solid fa-arrow-right"></i>
</Link>
</div>
</div>
</div>
</div>
</div>
</section>
);
};
export default WhyChooseUs;

View File

@@ -0,0 +1,514 @@
/* ============================================================
HOME PAGE — shared styles
============================================================ */
/* ------------------------------------------------------------
Hero Section
------------------------------------------------------------ */
.hero-home {
position: relative;
width: 100%;
height: 560px;
background-color: #1b254b;
overflow: hidden;
display: flex;
align-items: center;
}
.hero-home__overlay {
position: absolute;
inset: 0;
opacity: 0.2;
}
.hero-home__bg-img {
width: 100%;
height: 100%;
object-fit: cover;
mix-blend-mode: overlay;
}
.hero-home__gradient {
position: absolute;
inset: 0;
background: linear-gradient(to right, #1b254b, rgba(27, 37, 75, 0.9), transparent);
}
.hero-home__container {
position: relative;
z-index: 2;
max-width: 1440px;
margin: 0 auto;
padding: 0 1.5rem;
width: 100%;
}
@media (min-width: 1024px) {
.hero-home__container {
padding: 0 2rem;
}
}
.hero-home__content {
max-width: 42rem;
display: flex;
flex-direction: column;
gap: 1.5rem;
}
/* Badge */
.hero-home__badge {
display: inline-flex;
align-items: center;
gap: 0.5rem;
padding: 0.375rem 0.75rem;
border-radius: 9999px;
background: rgba(255, 255, 255, 0.1);
border: 1px solid rgba(255, 255, 255, 0.2);
backdrop-filter: blur(4px);
width: fit-content;
}
.hero-home__badge-dot {
width: 0.5rem;
height: 0.5rem;
border-radius: 50%;
background: #60a5fa;
animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
}
@keyframes pulse {
0%, 100% { opacity: 1; }
50% { opacity: 0.5; }
}
.hero-home__badge-text {
font-size: 0.75rem;
font-weight: 600;
color: #bfdbfe;
text-transform: uppercase;
letter-spacing: 0.05em;
}
/* Title */
.hero-home__title {
font-size: 3rem;
font-weight: 700;
color: #ffffff;
line-height: 1.2;
letter-spacing: -0.02em;
margin: 0;
}
@media (min-width: 1024px) {
.hero-home__title {
font-size: 3.75rem;
}
}
/* Description */
.hero-home__desc {
font-size: 1.125rem;
color: #bfdbfe;
line-height: 1.7;
max-width: 36rem;
margin: 0;
}
/* Actions */
.hero-home__actions {
display: flex;
align-items: center;
flex-wrap: wrap;
gap: 1rem;
padding-top: 1rem;
}
/* Buttons */
.hero-home__btn {
display: inline-flex;
align-items: center;
gap: 0.5rem;
padding: 0.75rem 1.5rem;
border-radius: 0.5rem;
font-weight: 600;
font-size: 1rem;
cursor: pointer;
transition: all 0.2s ease-in-out;
border: none;
}
.hero-home__btn--primary {
background: #ffffff;
color: #1b254b;
box-shadow: 0 4px 6px -1px rgba(0,0,0,0.1), 0 2px 4px -2px rgba(0,0,0,0.1);
}
.hero-home__btn--primary:hover {
background: #f9fafb;
}
.hero-home__btn--secondary {
background: rgba(255, 255, 255, 0.1);
color: #ffffff;
border: 1px solid rgba(255, 255, 255, 0.2);
backdrop-filter: blur(4px);
}
.hero-home__btn--secondary:hover {
background: rgba(255, 255, 255, 0.2);
}
/* ------------------------------------------------------------
Research Impact Section
------------------------------------------------------------ */
.research-impact {
padding: 80px 0;
background-color: #f8fbff;
}
.research-impact__header {
display: flex;
align-items: center;
justify-content: space-between;
flex-wrap: wrap;
gap: 0.5rem;
margin-bottom: 2.5rem;
}
.research-impact__title {
font-size: 1.6rem;
font-weight: 700;
color: #1b254b;
margin: 0;
}
.research-impact__year {
font-size: 0.85rem;
font-weight: 500;
color: #6b7280;
background: #e5e7eb;
padding: 4px 12px;
border-radius: 999px;
}
.research-impact__stats {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 1.25rem;
margin-bottom: 2rem;
}
@media (max-width: 991px) {
.research-impact__stats {
grid-template-columns: repeat(2, 1fr);
}
}
@media (max-width: 575px) {
.research-impact__stats {
grid-template-columns: 1fr;
}
}
.research-impact__stat-card {
background: #ffffff;
border: 1px solid #e5e7eb;
border-radius: 12px;
padding: 1.5rem;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
}
.research-impact__stat-label {
font-size: 0.8rem;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 0.06em;
color: #6b7280;
margin-bottom: 0.5rem;
}
.research-impact__stat-value-row {
display: flex;
align-items: baseline;
gap: 0.5rem;
margin-bottom: 0.25rem;
}
.research-impact__stat-value {
font-size: 2rem;
font-weight: 700;
color: #1b254b;
line-height: 1;
}
.research-impact__stat-trend {
font-size: 0.78rem;
font-weight: 600;
padding: 2px 8px;
border-radius: 999px;
}
.research-impact__stat-trend--up {
background: #d1fae5;
color: #065f46;
}
.research-impact__stat-trend--down {
background: #fee2e2;
color: #991b1b;
}
.research-impact__stat-trend--stable {
background: #e5e7eb;
color: #374151;
}
.research-impact__stat-sub {
font-size: 0.8rem;
color: #9ca3af;
margin: 0;
}
.research-impact__charts {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 1.25rem;
}
@media (max-width: 767px) {
.research-impact__charts {
grid-template-columns: 1fr;
}
}
.research-impact__chart-card {
background: #ffffff;
border: 1px solid #e5e7eb;
border-radius: 12px;
padding: 1.75rem;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
}
.research-impact__chart-title {
font-size: 1rem;
font-weight: 600;
color: #1b254b;
margin-bottom: 0.25rem;
}
.research-impact__chart-sub {
font-size: 0.8rem;
color: #9ca3af;
margin-bottom: 1.25rem;
}
.research-impact__bar-chart {
display: flex;
align-items: flex-end;
gap: 1.5rem;
height: 160px;
padding-top: 1rem;
}
.research-impact__bar-group {
display: flex;
flex-direction: column;
align-items: center;
gap: 0.5rem;
flex: 1;
}
.research-impact__bar {
width: 100%;
border-radius: 6px 6px 0 0;
min-height: 8px;
transition: height 0.4s ease;
}
.research-impact__bar--journals {
background: #1b254b;
}
.research-impact__bar--conferences {
background: #74c0fc;
}
.research-impact__bar-label {
font-size: 0.78rem;
color: #6b7280;
font-weight: 500;
}
.research-impact__donut-wrapper {
display: flex;
align-items: center;
gap: 1.5rem;
flex-wrap: wrap;
}
.research-impact__donut {
width: 120px;
height: 120px;
border-radius: 50%;
flex-shrink: 0;
-webkit-mask: radial-gradient(circle, transparent 40%, black 41%);
mask: radial-gradient(circle, transparent 40%, black 41%);
}
.research-impact__legend {
list-style: none;
padding: 0;
margin: 0;
display: flex;
flex-direction: column;
gap: 0.5rem;
}
.research-impact__legend-item {
display: flex;
align-items: center;
gap: 0.5rem;
font-size: 0.85rem;
}
.research-impact__legend-dot {
width: 10px;
height: 10px;
border-radius: 50%;
flex-shrink: 0;
}
.research-impact__legend-label {
color: #374151;
flex: 1;
}
.research-impact__legend-value {
font-weight: 600;
color: #1b254b;
}
/* ------------------------------------------------------------
Quick Links Grid
------------------------------------------------------------ */
.quick-links {
padding: 80px 0;
background: #ffffff;
}
.quick-links__header {
margin-bottom: 3rem;
}
.quick-links__title {
font-size: clamp(1.75rem, 3vw, 2.25rem);
font-weight: 700;
color: #1b254b;
margin-bottom: 0.75rem;
}
.quick-links__subtitle {
color: #6b7280;
max-width: 40rem;
margin: 0 auto;
}
.quick-links__grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 1.5rem;
}
@media (max-width: 991px) {
.quick-links__grid {
grid-template-columns: repeat(2, 1fr);
}
}
@media (max-width: 575px) {
.quick-links__grid {
grid-template-columns: 1fr;
}
}
.quick-links__card {
display: flex;
flex-direction: column;
background: #f8fbff;
padding: 2rem;
border-radius: 1.5rem;
border: 1px solid transparent;
text-decoration: none;
transition: box-shadow 0.2s ease, border-color 0.2s ease;
cursor: pointer;
}
.quick-links__card:hover {
box-shadow: 0 20px 40px rgba(0, 0, 0, 0.08);
border-color: #e5e7eb;
}
.quick-links__icon-wrap {
width: 3.5rem;
height: 3.5rem;
background: #ffffff;
border-radius: 0.75rem;
display: flex;
align-items: center;
justify-content: center;
font-size: 1.25rem;
color: #1b254b;
margin-bottom: 1.5rem;
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.08);
transition: transform 0.2s ease;
}
.quick-links__card:hover .quick-links__icon-wrap {
transform: scale(1.1);
}
.quick-links__card-title {
font-size: 1.125rem;
font-weight: 700;
color: #1b254b;
margin-bottom: 0.75rem;
}
.quick-links__card-desc {
font-size: 0.875rem;
color: #6b7280;
line-height: 1.6;
flex: 1;
margin-bottom: 1.5rem;
}
.quick-links__card-footer {
display: flex;
justify-content: space-between;
align-items: center;
}
.quick-links__cta {
font-size: 0.875rem;
font-weight: 500;
color: #1b254b;
}
.quick-links__arrow {
width: 2rem;
height: 2rem;
border-radius: 50%;
background: #1b254b;
color: #ffffff;
display: flex;
align-items: center;
justify-content: center;
font-size: 0.75rem;
opacity: 0;
transition: opacity 0.2s ease;
}
.quick-links__card:hover .quick-links__arrow {
opacity: 1;
}

View File

@@ -1,31 +1,14 @@
@import "tailwindcss";
/* Mobile Menu Styles */
@import "./components/layout/Header/mobile-menu.css";
.collapse {
visibility: visible !important;
}
.collapse.show {
visibility: visible;
}
/* Header Responsive Styles */
@import "./components/layout/Header/header-responsive.css";
@import "./components/home/home.css";
@import "./components/about/about.css";
@theme {
--color-brand-blue: #1b254b;
--color-brand-light: #f8fbff;
--color-ui-muted: #6b7280;
--color-ui-border: #e5e7eb;
--shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
}
@@ -34,3 +17,11 @@
@apply border border-[--color-ui-border] bg-white;
}
}
.collapse {
visibility: visible !important;
}
.collapse.show {
visibility: visible;
}

View File

@@ -1,13 +1,5 @@
import HeroSection from './components/home/HeroSection';
import WhyChooseUs from './components/home/WhyChooseUs';
import VisaSolutions from './components/home/VisaSolutions';
import VisaCountries from './components/home/VisaCountries';
import Testimonials from './components/home/Testimonials';
import VideoGallery from './components/home/VideoGallery';
import FAQSection from './components/home/FAQSection';
import Achievements from './components/home/Achievements';
import Partners from './components/home/Partners';
import BlogPreview from './components/home/BlogPreview';
import QuickLinksGrid from './components/home/QuickLinksGrid';
import localHomeData from './home.json';
import { getCmsImageUrl } from '@/utils/image';
import { fetchHomeData } from '@/api';
@@ -38,18 +30,8 @@ export default async function Home() {
return (
<>
<HeroSection data={data.hero} />
<WhyChooseUs data={data.whyChooseUs} />
<VisaSolutions data={data.visaSolutions} />
<VisaCountries data={data.visaCountries} />
<Testimonials data={data.testimonials} />
<VideoGallery data={data.videoGallery} />
<FAQSection data={data.faq} />
<Achievements data={data.achievements} />
<Partners data={data.partners} />
<HeroSection/>
<QuickLinksGrid/>
</>
);
}

View File

@@ -5041,599 +5041,6 @@ html.lenis, html.lenis body {
transform: scale(1);
}
}
.hero-1 {
margin: 0 40px;
border-radius: 32px;
position: relative;
z-index: 9;
}
@media (max-width: 1399px) {
.hero-1 {
margin: 0 30px;
padding-top: 100px;
padding-bottom: 100px;
}
}
@media (max-width: 991px) {
.hero-1 {
padding-top: 80px;
padding-bottom: 0;
}
}
@media (max-width: 575px) {
.hero-1 {
margin: 0 15px;
}
}
.hero-1 .pagi-item {
right: 60px;
top: 345px;
position: absolute;
z-index: 999;
}
@media (max-width: 1600px) {
.hero-1 .pagi-item {
top: 310px;
}
}
@media (max-width: 1399px) {
.hero-1 .pagi-item {
display: none;
}
}
.hero-1 .pagi-item .dot-number {
display: flex;
align-items: center;
gap: 20px;
}
.hero-1 .pagi-item .dot-number .swiper-pagination-bullet {
background: none !important;
width: auto !important;
height: auto !important;
margin: 0 !important;
transition: all 0.4s ease-in-out;
}
.hero-1 .pagi-item .dot-number .swiper-pagination-bullet-active .dot-num span {
color: var(--white);
font-size: 32px;
font-weight: 700;
transition: all 0.4s ease-in-out;
}
.hero-1 .pagi-item .dot-number .dot-num {
transition: all 0.4s ease-in-out;
}
.hero-1 .pagi-item .dot-number .dot-num span {
font-size: 18px;
font-weight: 500;
color: rgba(255, 255, 255, 0.5);
transition: all 0.4s ease-in-out;
}
.hero-1 .left-shape {
position: absolute;
left: 0;
bottom: 0;
}
@media (max-width: 1399px) {
.hero-1 .left-shape {
display: none;
}
}
.hero-1 .hero-shape {
position: absolute;
z-index: -1;
right: 10px;
bottom: 0;
margin-right: 0;
}
@media (max-width: 1600px) {
.hero-1 .hero-shape {
max-width: 660px;
}
}
@media (max-width: 1399px) {
.hero-1 .hero-shape {
display: none;
max-width: initial;
}
}
.hero-1 .hero-shape img {
width: 100%;
height: 100%;
}
.hero-1 .top-shape {
position: absolute;
top: 0;
right: 0;
}
@media (max-width: 1399px) {
.hero-1 .top-shape {
display: none;
}
}
.hero-1 .top-shape img {
width: 100%;
height: 100%;
}
.hero-1 .right-shape {
position: absolute;
right: 0;
top: 0;
}
@media (max-width: 1399px) {
.hero-1 .right-shape {
display: none;
}
}
.hero-1 .container-fluid {
padding: 0 124px;
}
@media (max-width: 1899px) {
.hero-1 .container-fluid {
padding: 0 70px;
}
}
@media (max-width: 1600px) {
.hero-1 .container-fluid {
padding: 0 50px;
}
}
@media (max-width: 1399px) {
.hero-1 .container-fluid {
padding: 0 30px;
}
}
@media (max-width: 575px) {
.hero-1 .container-fluid {
padding: 0 15px;
}
}
.hero-1 .hero-content h6 {
font-size: 18px;
font-weight: 500;
color: var(--white);
margin-bottom: 20px;
line-height: 1;
padding: 8px 16px;
border-radius: 100px;
display: inline-block;
position: relative;
background-color: var(--bg-2);
}
.hero-1 .hero-content h1 {
color: var(--white);
text-transform: uppercase;
margin-bottom: 15px;
}
.hero-1 .hero-content h1 .video-btn {
width: 64px;
height: 64px;
line-height: 64px;
display: inline-block;
background-color: var(--theme);
color: var(--white);
text-align: center;
border-radius: 50%;
font-size: 20px;
margin-left: 60px;
position: relative;
z-index: 1;
transform: translateY(-15px);
}
@media (max-width: 1600px) {
.hero-1 .hero-content h1 .video-btn {
width: 50px;
height: 50px;
line-height: 50px;
}
}
@media (max-width: 1399px) {
.hero-1 .hero-content h1 .video-btn {
display: none;
}
}
.hero-1 .hero-content h1 .video-btn::before {
position: absolute;
content: "";
background: rgba(203, 204, 207, 0.24);
width: 48px;
height: 1px;
left: -57px;
top: 30px;
}
.hero-1 .hero-content h1 .video-btn::after {
content: "";
position: absolute;
top: -10px;
left: -10px;
right: -10px;
bottom: -10px;
border: 10px solid rgba(255, 255, 255, 0.12);
border-radius: 50%;
z-index: -1;
}
.hero-1 .hero-content p {
max-width: 671px;
color: rgba(255, 255, 255, 0.8);
padding-left: 30px;
border-left: 2px solid var(--white);
opacity: 0.8;
}
@media (max-width: 1399px) {
.hero-1 .hero-content p {
border-left: none;
padding-left: 0;
}
}
.hero-1 .hero-content .hero-button {
display: flex;
align-items: center;
gap: 35px;
margin-top: 50px;
}
@media (max-width: 1399px) {
.hero-1 .hero-content .hero-button {
margin-top: 30px;
flex-wrap: wrap;
gap: 25px;
}
}
.hero-1 .hero-content .hero-button .theme-btn {
background-color: var(--white);
}
.hero-1 .hero-content .hero-button .theme-btn:hover {
background-color: var(--theme);
border: 1px solid var(--theme);
}
.hero-1 .hero-content .hero-button .theme-btn.style-2 {
border: 1px solid var(--border-2);
background-color: transparent;
color: var(--white);
}
.hero-1 .hero-content .hero-button .theme-btn.style-2 i {
background-color: var(--white);
color: var(--header);
}
.hero-1 .hero-content .hero-button .theme-btn.style-2:hover {
background-color: var(--theme);
color: var(--white);
border: 1px solid var(--theme);
}
.hero-1 .hero-image {
margin-top: 20px;
margin-right: -140px;
position: relative;
z-index: 9;
}
@media (max-width: 1399px) {
.hero-1 .hero-image {
margin-right: 0;
}
}
.hero-1 .hero-image img {
width: 100%;
height: 100%;
opacity: 0;
transform: translateY(50px);
transition: all 0.8s ease-in-out;
}
.hero-1 .swiper-slide-active .hero-image img {
opacity: 1;
transform: translateY(0);
}
.hero-2 {
position: relative;
}
@media (max-width: 1399px) {
.hero-2 {
padding-top: 100px;
padding-bottom: 100px;
}
}
@media (max-width: 991px) {
.hero-2 {
padding-top: 80px;
padding-bottom: 0;
}
}
.hero-2 .shape {
position: absolute;
left: 0;
top: 0;
}
@media (max-width: 1399px) {
.hero-2 .shape {
display: none;
}
}
.hero-2 .container-fluid {
padding: 0 65px;
}
@media (max-width: 1600px) {
.hero-2 .container-fluid {
padding: 0 50px;
}
}
@media (max-width: 1399px) {
.hero-2 .container-fluid {
padding: 0 40px;
}
}
@media (max-width: 1399px) {
.hero-2 .container-fluid {
padding: 0 30px;
}
}
@media (max-width: 575px) {
.hero-2 .container-fluid {
padding: 0 15px;
}
}
.hero-2::before {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
width: 100%;
height: 100%;
content: "";
background: linear-gradient(279deg, rgba(21, 26, 38, 0.88) 34.84%, rgba(21, 26, 38, 0) 84.02%);
}
.hero-2 .hero-image {
margin-top: 30px;
position: relative;
margin-left: -75px;
}
@media (max-width: 1399px) {
.hero-2 .hero-image {
margin-left: 0;
margin-top: 0;
}
}
.hero-2 .hero-image img {
width: 100%;
height: 100%;
}
.hero-2 .hero-content {
position: relative;
z-index: 999;
}
.hero-2 .hero-content h6 {
color: var(--white);
font-size: 18px;
font-weight: 500;
letter-spacing: 6px;
text-transform: uppercase;
margin-bottom: 20px;
}
.hero-2 .hero-content h1 {
color: var(--white);
text-transform: uppercase;
margin-bottom: 20px;
}
.hero-2 .hero-content p {
color: var(--white);
max-width: 800px;
padding-left: 24px;
border-left: 3px solid var(--white);
}
@media (max-width: 1399px) {
.hero-2 .hero-content p {
border-left: none;
padding-left: 0;
}
}
.hero-2 .hero-content .hero-button {
display: flex;
align-items: center;
gap: 35px;
margin-top: 50px;
}
@media (max-width: 1399px) {
.hero-2 .hero-content .hero-button {
flex-wrap: wrap;
gap: 25px;
}
}
.hero-2 .hero-content .hero-button .theme-btn {
background-color: var(--white);
}
.hero-2 .hero-content .hero-button .theme-btn:hover {
background-color: var(--theme);
border: 1px solid var(--theme);
}
.hero-2 .hero-content .hero-button .theme-btn.style-2 {
border: 1px solid var(--border-2);
background-color: transparent;
color: var(--white);
}
.hero-2 .hero-content .hero-button .theme-btn.style-2 i {
background-color: var(--white);
color: var(--header);
}
.hero-2 .hero-content .hero-button .theme-btn.style-2:hover {
background-color: var(--theme);
color: var(--white);
border: 1px solid var(--theme);
}
.hero-3 {
position: relative;
z-index: 9;
}
@media (max-width: 1399px) {
.hero-3 {
margin: 0 30px;
padding-top: 100px;
padding-bottom: 100px;
}
}
@media (max-width: 991px) {
.hero-3 {
padding-top: 80px;
padding-bottom: 0;
}
}
@media (max-width: 575px) {
.hero-3 {
margin: 0 15px;
}
}
.hero-3 .pagi-item {
right: 60px;
bottom: 120px;
position: absolute;
z-index: 999;
}
@media (max-width: 1399px) {
.hero-3 .pagi-item {
display: none;
}
}
.hero-3 .pagi-item .dot-number {
display: flex;
align-items: center;
gap: 20px;
}
.hero-3 .pagi-item .dot-number .swiper-pagination-bullet {
background: none !important;
width: auto !important;
height: auto !important;
margin: 0 !important;
transition: all 0.4s ease-in-out;
}
.hero-3 .pagi-item .dot-number .swiper-pagination-bullet-active .dot-num span {
color: var(--white);
font-size: 32px;
font-weight: 700;
transition: all 0.4s ease-in-out;
}
.hero-3 .pagi-item .dot-number .dot-num {
transition: all 0.4s ease-in-out;
}
.hero-3 .pagi-item .dot-number .dot-num span {
font-size: 18px;
font-weight: 500;
color: rgba(255, 255, 255, 0.5);
transition: all 0.4s ease-in-out;
}
.hero-3 .hero-shape {
position: absolute;
z-index: -1;
left: 0;
top: 0;
}
@media (max-width: 1600px) {
.hero-3 .hero-shape {
max-width: 660px;
}
}
@media (max-width: 1399px) {
.hero-3 .hero-shape {
display: none;
max-width: initial;
}
}
.hero-3 .hero-shape img {
width: 100%;
height: 100%;
}
.hero-3 .container-fluid {
padding: 0 124px;
}
@media (max-width: 1899px) {
.hero-3 .container-fluid {
padding: 0 70px;
}
}
@media (max-width: 1600px) {
.hero-3 .container-fluid {
padding: 0 50px;
}
}
@media (max-width: 1399px) {
.hero-3 .container-fluid {
padding: 0 30px;
}
}
@media (max-width: 575px) {
.hero-3 .container-fluid {
padding: 0 15px;
}
}
.hero-3 .hero-content h6 {
font-size: 18px;
font-weight: 500;
color: var(--theme);
margin-bottom: 20px;
}
.hero-3 .hero-content h1 {
color: var(--white);
text-transform: uppercase;
margin-bottom: 15px;
}
.hero-3 .hero-content p {
max-width: 772px;
color: rgba(255, 255, 255, 0.8);
opacity: 0.8;
}
.hero-3 .hero-content .hero-button {
display: flex;
align-items: center;
gap: 35px;
margin-top: 50px;
}
@media (max-width: 1399px) {
.hero-3 .hero-content .hero-button {
margin-top: 30px;
flex-wrap: wrap;
gap: 25px;
}
}
.hero-3 .hero-content .hero-button .theme-btn {
background-color: var(--white);
}
.hero-3 .hero-content .hero-button .theme-btn:hover {
background-color: var(--theme);
border: 1px solid var(--theme);
}
.hero-3 .hero-content .hero-button .theme-btn.style-2 {
border: 1px solid var(--border-2);
background-color: transparent;
color: var(--white);
}
.hero-3 .hero-content .hero-button .theme-btn.style-2 i {
background-color: var(--white);
color: var(--header);
}
.hero-3 .hero-content .hero-button .theme-btn.style-2:hover {
background-color: var(--theme);
color: var(--white);
border: 1px solid var(--theme);
}
.hero-3 .hero-image {
margin-top: 20px;
position: relative;
z-index: 9;
}
@media (max-width: 1399px) {
.hero-3 .hero-image {
margin-right: 0;
}
}
.hero-3 .hero-image img {
width: 100%;
height: 100%;
opacity: 0;
transform: translateY(50px);
transition: all 0.8s ease-in-out;
}
.hero-3 .swiper-slide-active .hero-image img {
opacity: 1;
transform: translateY(0);
}
.mean-container a.meanmenu-reveal {
display: none;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

View File

@@ -1,18 +0,0 @@
<svg width="159" height="48" viewBox="0 0 159 48" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M41.3036 18.9806C41.604 18.9074 41.9089 18.8663 42.2184 18.8572C42.5279 18.8389 42.8237 18.8297 43.1059 18.8297C43.3699 18.8297 43.6839 18.8526 44.048 18.8983C44.4213 18.9349 44.7489 19.0034 45.0311 19.104L45.195 19.3372L40.0337 37.7143C39.5513 37.7692 39.0142 37.8057 38.4226 37.824C37.8309 37.8514 37.2665 37.8652 36.7295 37.8652C35.9466 37.8652 35.3322 37.7372 34.8862 37.4812C34.4401 37.2252 34.1124 36.7223 33.9031 35.9726L29.3016 19.3509C29.6749 19.1863 30.0708 19.0446 30.4895 18.9257C30.9174 18.8069 31.3589 18.7474 31.814 18.7474C32.433 18.7474 32.9154 18.912 33.2613 19.2412C33.6072 19.5703 33.8712 20.096 34.0533 20.8183L36.2516 28.9097C36.3972 29.4309 36.5337 29.9749 36.6612 30.5417C36.7886 31.0994 36.907 31.6617 37.0162 32.2286C37.1254 32.7863 37.2256 33.3303 37.3166 33.8606C37.3439 34.0069 37.3757 34.0983 37.4122 34.1349C37.4577 34.1714 37.5214 34.1897 37.6033 34.1897L41.3036 18.9806Z" fill="black"/>
<path d="M48.0401 18.9806C48.3678 18.9166 48.732 18.8754 49.1325 18.8572C49.5421 18.8389 49.8743 18.8297 50.1292 18.8297C50.4114 18.8297 50.7437 18.8389 51.126 18.8572C51.5174 18.8754 51.8815 18.9166 52.2183 18.9806V37.7143C51.8815 37.7783 51.5174 37.8194 51.126 37.8377C50.7437 37.856 50.4114 37.8652 50.1292 37.8652C49.8743 37.8652 49.5421 37.856 49.1325 37.8377C48.732 37.8194 48.3678 37.7783 48.0401 37.7143V18.9806Z" fill="black"/>
<path d="M55.2672 36.0823C55.3218 35.488 55.5039 34.9029 55.8134 34.3269C56.132 33.7509 56.4915 33.2892 56.892 32.9417C57.6658 33.408 58.5396 33.824 59.5136 34.1897C60.4876 34.5554 61.4571 34.7383 62.4219 34.7383C63.2594 34.7383 63.8693 34.5417 64.2516 34.1486C64.6339 33.7463 64.8251 33.3029 64.8251 32.8183C64.8251 32.4709 64.7113 32.1052 64.4837 31.7212C64.2652 31.328 63.7691 30.9714 62.9954 30.6514L59.7048 29.2663C58.576 28.7909 57.643 28.16 56.9057 27.3737C56.1775 26.5874 55.8134 25.5452 55.8134 24.2469C55.8134 23.1223 56.1047 22.1349 56.6872 21.2846C57.2698 20.4343 58.0572 19.7714 59.0494 19.296C60.0507 18.8206 61.1658 18.5829 62.3946 18.5829C63.669 18.5829 64.866 18.7474 65.9857 19.0766C67.1053 19.4057 68.0201 19.7577 68.7301 20.1326C68.6937 20.7269 68.5481 21.3074 68.2932 21.8743C68.0383 22.432 67.7106 22.8983 67.3101 23.2732C66.6092 22.9349 65.799 22.6286 64.8797 22.3543C63.9603 22.08 63.1365 21.9429 62.4083 21.9429C61.5981 21.9429 61.0065 22.1303 60.6333 22.5052C60.2691 22.88 60.0871 23.2777 60.0871 23.6983C60.0871 24.0823 60.2145 24.4206 60.4694 24.7132C60.7334 24.9966 61.1703 25.2663 61.7802 25.5223L65.1254 26.9212C65.9902 27.2777 66.7275 27.7257 67.3374 28.2652C67.9564 28.7954 68.4252 29.4034 68.7438 30.0892C69.0715 30.7657 69.2353 31.5017 69.2353 32.2972C69.2353 33.3943 68.9713 34.3817 68.4434 35.2594C67.9245 36.1372 67.1371 36.832 66.0812 37.344C65.0344 37.856 63.7191 38.112 62.1352 38.112C61.0247 38.112 59.8504 37.9383 58.6125 37.5909C57.3836 37.2343 56.2685 36.7314 55.2672 36.0823Z" fill="black"/>
<path d="M76.7523 18.9806C77.0891 18.9349 77.4896 18.8983 77.9539 18.8709C78.4181 18.8434 78.8232 18.8297 79.1691 18.8297C79.5059 18.8297 79.9064 18.8434 80.3706 18.8709C80.844 18.8983 81.2445 18.944 81.5722 19.008L87.4844 37.44C87.1931 37.6046 86.8199 37.728 86.3648 37.8103C85.9096 37.9017 85.4818 37.9474 85.0813 37.9474C84.4259 37.9474 83.9116 37.7966 83.5384 37.4949C83.1652 37.184 82.8511 36.5806 82.5963 35.6846L80.5072 28.3749C80.2887 27.5977 80.0384 26.7017 79.7562 25.6869C79.4831 24.672 79.2374 23.7212 79.0189 22.8343H78.855C78.7185 23.5749 78.5182 24.4252 78.2543 25.3852C77.9994 26.336 77.7673 27.168 77.5579 27.8812L74.6359 37.7417C74.3811 37.8057 74.1034 37.8469 73.803 37.8652C73.5027 37.8834 73.1932 37.8926 72.8746 37.8926C72.556 37.8926 72.201 37.8697 71.8095 37.824C71.4181 37.7783 71.0995 37.7097 70.8538 37.6183L70.7036 37.3989L76.7523 18.9806ZM76.9981 33.7097C76.8707 33.7097 76.7159 33.7097 76.5339 33.7097C76.3518 33.7006 76.1697 33.696 75.9877 33.696C75.8147 33.6869 75.6645 33.6823 75.5371 33.6823H73.3661L74.6496 30.4046H76.5475C76.6749 30.4046 76.8251 30.4046 76.9981 30.4046C77.171 30.3954 77.344 30.3909 77.5169 30.3909C77.6899 30.3817 77.8355 30.3772 77.9539 30.3772H80.0429C80.1704 30.3772 80.3206 30.3817 80.4935 30.3909C80.6665 30.3909 80.8394 30.3954 81.0124 30.4046C81.1853 30.4046 81.3355 30.4046 81.463 30.4046H83.4292L84.4805 33.6823H82.3232C82.1957 33.6823 82.041 33.6869 81.8589 33.696C81.6769 33.696 81.4948 33.7006 81.3128 33.7097C81.1398 33.7097 80.9896 33.7097 80.8622 33.7097H76.9981Z" fill="black"/>
<path d="M88.069 19.2274C88.3876 19.0903 88.7426 18.976 89.134 18.8846C89.5254 18.7932 89.9077 18.7474 90.2809 18.7474C91.0092 18.7474 91.5371 18.9074 91.8648 19.2274C92.2016 19.5383 92.4383 20.1417 92.5748 21.0377L93.8037 28.4297C93.9038 29.0057 94.004 29.632 94.1041 30.3086C94.2042 30.9852 94.2952 31.6389 94.3772 32.2697C94.4682 32.8914 94.5365 33.4217 94.582 33.8606C94.6002 34.0343 94.6229 34.1394 94.6502 34.176C94.6867 34.2034 94.7504 34.2172 94.8414 34.2172L97.2036 19.3509C97.6132 19.2777 98.0592 19.2274 98.5417 19.2C99.0241 19.1634 99.4656 19.1452 99.8661 19.1452C100.294 19.1452 100.745 19.1634 101.218 19.2C101.7 19.2274 102.137 19.2777 102.529 19.3509L104.713 33.8606C104.741 34.0343 104.772 34.1394 104.809 34.176C104.854 34.2034 104.918 34.2172 105 34.2172C105.055 33.7052 105.127 33.1109 105.218 32.4343C105.31 31.7577 105.41 31.0629 105.519 30.3497C105.628 29.6366 105.733 28.9829 105.833 28.3886L107.458 18.9806C107.767 18.9166 108.086 18.8754 108.414 18.8572C108.741 18.8389 109.046 18.8297 109.328 18.8297C109.647 18.8297 109.984 18.8526 110.339 18.8983C110.694 18.944 111.012 19.0126 111.295 19.104L111.499 19.3509L107.84 37.6869C107.367 37.7417 106.789 37.7829 106.106 37.8103C105.432 37.8469 104.823 37.8652 104.276 37.8652C103.657 37.8652 103.111 37.76 102.638 37.5497C102.165 37.3394 101.864 36.8137 101.737 35.9726L100.754 29.8423C100.59 28.7909 100.43 27.6846 100.276 26.5234C100.13 25.3623 100.012 24.3292 99.9207 23.424H99.7159C99.6067 24.3292 99.4701 25.3623 99.3063 26.5234C99.1424 27.6754 98.9695 28.7817 98.7874 29.8423L97.4766 37.6869C96.976 37.7417 96.4071 37.7829 95.7699 37.8103C95.1418 37.8469 94.5456 37.8652 93.9812 37.8652C93.3167 37.8652 92.7478 37.76 92.2744 37.5497C91.8102 37.3394 91.4962 36.8092 91.3323 35.9589L88.069 19.2274Z" fill="black"/>
<path d="M118.115 18.9806C118.451 18.9349 118.852 18.8983 119.316 18.8709C119.78 18.8434 120.185 18.8297 120.531 18.8297C120.868 18.8297 121.269 18.8434 121.733 18.8709C122.206 18.8983 122.607 18.944 122.934 19.008L128.847 37.44C128.555 37.6046 128.182 37.728 127.727 37.8103C127.272 37.9017 126.844 37.9474 126.444 37.9474C125.788 37.9474 125.274 37.7966 124.901 37.4949C124.527 37.184 124.213 36.5806 123.958 35.6846L121.869 28.3749C121.651 27.5977 121.401 26.7017 121.118 25.6869C120.845 24.672 120.6 23.7212 120.381 22.8343H120.217C120.081 23.5749 119.88 24.4252 119.617 25.3852C119.362 26.336 119.13 27.168 118.92 27.8812L115.998 37.7417C115.743 37.8057 115.466 37.8469 115.165 37.8652C114.865 37.8834 114.555 37.8926 114.237 37.8926C113.918 37.8926 113.563 37.8697 113.172 37.824C112.78 37.7783 112.462 37.7097 112.216 37.6183L112.066 37.3989L118.115 18.9806ZM118.36 33.7097C118.233 33.7097 118.078 33.7097 117.896 33.7097C117.714 33.7006 117.532 33.696 117.35 33.696C117.177 33.6869 117.027 33.6823 116.899 33.6823H114.728L116.012 30.4046H117.91C118.037 30.4046 118.187 30.4046 118.36 30.4046C118.533 30.3954 118.706 30.3909 118.879 30.3909C119.052 30.3817 119.198 30.3772 119.316 30.3772H121.405C121.533 30.3772 121.683 30.3817 121.856 30.3909C122.029 30.3909 122.202 30.3954 122.375 30.4046C122.548 30.4046 122.698 30.4046 122.825 30.4046H124.791L125.843 33.6823H123.685C123.558 33.6823 123.403 33.6869 123.221 33.696C123.039 33.696 122.857 33.7006 122.675 33.7097C122.502 33.7097 122.352 33.7097 122.224 33.7097H118.36Z" fill="black"/>
<path d="M133.41 29.4172H137.588V37.7143C137.251 37.7783 136.892 37.8194 136.51 37.8377C136.136 37.856 135.809 37.8652 135.526 37.8652C135.272 37.8652 134.939 37.856 134.53 37.8377C134.12 37.8194 133.747 37.7783 133.41 37.7143V29.4172ZM138.954 18.9806C139.245 18.9166 139.532 18.8754 139.814 18.8572C140.096 18.8389 140.374 18.8297 140.647 18.8297C141.002 18.8297 141.361 18.8526 141.725 18.8983C142.09 18.944 142.413 19.0172 142.695 19.1177L142.859 19.3509L137.37 32.448H133.683L128.14 19.4743C128.513 19.264 128.922 19.0949 129.369 18.9669C129.815 18.8297 130.256 18.7612 130.693 18.7612C131.285 18.7612 131.74 18.8937 132.058 19.1589C132.377 19.424 132.655 19.8537 132.891 20.448L134.311 23.9863C134.53 24.5532 134.744 25.1612 134.953 25.8103C135.162 26.4594 135.358 27.1406 135.54 27.8537H135.69C135.809 27.4057 135.941 26.9486 136.086 26.4823C136.232 26.016 136.382 25.5589 136.537 25.1109C136.701 24.6629 136.86 24.2423 137.015 23.8492L138.954 18.9806Z" fill="black"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M17.9978 43.3281C20.5208 32.8971 19.5204 21.9194 15.1533 12.1223C23.8314 8.6219 33.1615 7.04718 42.5022 7.50735C42.9362 8.94698 43.3244 10.3982 43.667 11.8579L52.0194 13.536H26.0885V48L24.9804 43.2663C22.6597 43.4062 20.329 43.4278 17.9978 43.3281Z" fill="#E13833"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M17.6248 38.3511C16.4941 29.4258 12.9019 20.9574 7.20915 13.925C14.6893 8.28785 23.296 4.34155 32.437 2.35731C33.2346 3.64812 33.9906 4.96162 34.7036 6.29676C27.8434 6.78015 21.0798 8.33535 14.6725 10.9201L13.4273 11.422L13.9753 12.6516C17.5633 20.7015 18.8148 29.6527 17.6248 38.3511Z" fill="black"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M15.8945 37.5263C12.4621 29.6575 6.98999 22.8108 0 17.7315C5.77315 10.3418 13.0689 4.29249 21.3877 0C22.4075 0.960982 23.3973 1.94993 24.3567 2.9658C17.8737 5.22498 11.7596 8.48472 6.24812 12.6389L4.91621 13.6421L5.9665 14.9398C11.251 21.4667 14.663 29.2764 15.8945 37.5263Z" fill="#E13833"/>
<path d="M106.782 37.571C108.845 36.9354 111.436 36.0416 113.189 35.1346C110.17 36.4323 109.294 34.9161 109.188 34.3865C108.114 35.1346 107.105 35.8563 106.242 36.4786C105.675 36.8891 106.116 37.7763 106.782 37.571Z" fill="black"/>
<path d="M132.938 27.1765L141.27 20.3638C141.27 20.3638 138.6 22.8002 138.534 24.0317C138.237 24.3826 132.938 27.1765 132.938 27.1765Z" fill="black"/>
<path d="M132.964 25.1771C132.964 25.1771 139.048 21.0458 140.683 19.5098C138.646 21.0259 137.908 20.8736 137.38 20.6551C134.23 23.8596 132.964 25.1771 132.964 25.1771Z" fill="black"/>
<path d="M121.106 34.9095C121.106 34.9095 126.84 31.5528 128.442 30.4405C127.862 30.8775 126.893 32.1222 126.834 32.9432L121.106 34.9095Z" fill="black"/>
<path d="M152.133 21.6416C151.724 19.0265 151.328 16.5503 150.926 13.9682C150.676 14.1735 150.471 14.339 150.274 14.5045C148.791 15.7956 147.149 16.8284 145.304 17.5236C144.677 17.7553 144.111 17.7487 143.524 17.3779C142.39 16.6562 141.223 15.9876 140.07 15.2924C140.498 14.7296 140.979 14.5376 141.639 14.6171C142.548 14.723 143.471 14.7495 144.387 14.7561C144.664 14.7561 145.007 14.6568 145.218 14.478C148.428 11.7503 151.618 9.00272 154.809 6.24852C155.685 5.49376 156.7 5.11638 157.847 5.14286C158.843 5.16272 159.258 5.79831 158.836 6.70534C158.619 7.17541 158.263 7.61238 157.88 7.96328C156.944 8.82397 155.969 9.63169 154.993 10.446C154.723 10.6711 154.585 10.9029 154.558 11.2736C154.347 13.9947 154.09 16.7092 153.892 19.4303C153.846 20.0328 153.649 20.4764 153.148 20.814C152.818 21.0325 152.541 21.304 152.133 21.6416Z" fill="black"/>
<path d="M143.32 10.2275C144.064 9.57872 144.585 8.75114 145.785 8.92989C146.991 9.11527 148.224 9.12189 149.45 9.20796C149.549 9.21458 149.654 9.23445 149.858 9.26093C148.949 10.0289 148.118 10.7373 147.274 11.4325C147.195 11.4987 147.037 11.5384 146.938 11.5053C145.818 11.1544 144.704 10.7903 143.59 10.4196C143.504 10.4063 143.445 10.3269 143.32 10.2275Z" fill="black"/>
</svg>

Before

Width:  |  Height:  |  Size: 12 KiB

View File

@@ -1,18 +0,0 @@
<svg width="159" height="48" viewBox="0 0 159 48" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M41.3036 18.9806C41.604 18.9074 41.9089 18.8663 42.2184 18.8572C42.5279 18.8389 42.8237 18.8297 43.1059 18.8297C43.3699 18.8297 43.6839 18.8526 44.048 18.8983C44.4212 18.9349 44.7489 19.0034 45.0311 19.104L45.195 19.3372L40.0337 37.7143C39.5513 37.7692 39.0142 37.8057 38.4226 37.824C37.8309 37.8514 37.2665 37.8652 36.7295 37.8652C35.9466 37.8652 35.3322 37.7372 34.8862 37.4812C34.4401 37.2252 34.1124 36.7223 33.9031 35.9726L29.3016 19.3509C29.6749 19.1863 30.0708 19.0446 30.4895 18.9257C30.9174 18.8069 31.3589 18.7474 31.814 18.7474C32.433 18.7474 32.9154 18.912 33.2613 19.2411C33.6072 19.5703 33.8712 20.096 34.0533 20.8183L36.2516 28.9097C36.3972 29.4309 36.5337 29.9749 36.6612 30.5417C36.7886 31.0994 36.907 31.6617 37.0162 32.2286C37.1254 32.7863 37.2256 33.3303 37.3166 33.8606C37.3439 34.0069 37.3757 34.0983 37.4122 34.1349C37.4577 34.1714 37.5214 34.1897 37.6033 34.1897L41.3036 18.9806Z" fill="white"/>
<path d="M48.0401 18.9806C48.3678 18.9166 48.732 18.8754 49.1325 18.8572C49.5421 18.8389 49.8743 18.8297 50.1292 18.8297C50.4114 18.8297 50.7437 18.8389 51.126 18.8572C51.5174 18.8754 51.8815 18.9166 52.2183 18.9806V37.7143C51.8815 37.7783 51.5174 37.8194 51.126 37.8377C50.7437 37.856 50.4114 37.8652 50.1292 37.8652C49.8743 37.8652 49.5421 37.856 49.1325 37.8377C48.732 37.8194 48.3678 37.7783 48.0401 37.7143V18.9806Z" fill="white"/>
<path d="M55.2672 36.0823C55.3218 35.488 55.5039 34.9029 55.8134 34.3269C56.132 33.7509 56.4915 33.2892 56.892 32.9417C57.6658 33.408 58.5396 33.824 59.5136 34.1897C60.4876 34.5554 61.4571 34.7383 62.4219 34.7383C63.2594 34.7383 63.8693 34.5417 64.2516 34.1486C64.6339 33.7463 64.8251 33.3029 64.8251 32.8183C64.8251 32.4709 64.7113 32.1052 64.4837 31.7212C64.2652 31.328 63.7691 30.9714 62.9954 30.6514L59.7048 29.2663C58.576 28.7909 57.643 28.16 56.9057 27.3737C56.1775 26.5874 55.8134 25.5452 55.8134 24.2469C55.8134 23.1223 56.1047 22.1349 56.6872 21.2846C57.2698 20.4343 58.0572 19.7714 59.0494 19.296C60.0507 18.8206 61.1658 18.5829 62.3946 18.5829C63.669 18.5829 64.866 18.7474 65.9857 19.0766C67.1053 19.4057 68.0201 19.7577 68.7301 20.1326C68.6937 20.7269 68.5481 21.3074 68.2932 21.8743C68.0383 22.432 67.7106 22.8983 67.3101 23.2732C66.6092 22.9349 65.799 22.6286 64.8797 22.3543C63.9603 22.08 63.1365 21.9429 62.4083 21.9429C61.5981 21.9429 61.0065 22.1303 60.6333 22.5052C60.2691 22.88 60.0871 23.2777 60.0871 23.6983C60.0871 24.0823 60.2145 24.4206 60.4694 24.7132C60.7334 24.9966 61.1703 25.2663 61.7802 25.5223L65.1255 26.9212C65.9902 27.2777 66.7275 27.7257 67.3374 28.2652C67.9564 28.7954 68.4252 29.4034 68.7438 30.0892C69.0715 30.7657 69.2353 31.5017 69.2353 32.2972C69.2353 33.3943 68.9713 34.3817 68.4434 35.2594C67.9245 36.1372 67.1371 36.832 66.0812 37.344C65.0344 37.856 63.7191 38.112 62.1352 38.112C61.0247 38.112 59.8504 37.9383 58.6124 37.5909C57.3836 37.2343 56.2685 36.7314 55.2672 36.0823Z" fill="white"/>
<path d="M76.7523 18.9806C77.0891 18.9349 77.4896 18.8983 77.9539 18.8709C78.4181 18.8434 78.8232 18.8297 79.1691 18.8297C79.5059 18.8297 79.9064 18.8434 80.3707 18.8709C80.844 18.8983 81.2445 18.944 81.5722 19.008L87.4844 37.44C87.1931 37.6046 86.8199 37.728 86.3648 37.8103C85.9096 37.9017 85.4818 37.9474 85.0813 37.9474C84.4259 37.9474 83.9116 37.7966 83.5384 37.4949C83.1652 37.184 82.8511 36.5806 82.5963 35.6846L80.5072 28.3749C80.2887 27.5977 80.0384 26.7017 79.7562 25.6869C79.4831 24.672 79.2374 23.7212 79.0189 22.8343H78.855C78.7185 23.5749 78.5182 24.4252 78.2543 25.3852C77.9994 26.336 77.7673 27.168 77.5579 27.8812L74.6359 37.7417C74.3811 37.8057 74.1034 37.8469 73.803 37.8652C73.5026 37.8834 73.1932 37.8926 72.8746 37.8926C72.556 37.8926 72.201 37.8697 71.8095 37.824C71.4181 37.7783 71.0995 37.7097 70.8538 37.6183L70.7036 37.3989L76.7523 18.9806ZM76.9981 33.7097C76.8707 33.7097 76.7159 33.7097 76.5339 33.7097C76.3518 33.7006 76.1697 33.696 75.9877 33.696C75.8147 33.6869 75.6645 33.6823 75.5371 33.6823H73.3661L74.6496 30.4046H76.5475C76.6749 30.4046 76.8251 30.4046 76.9981 30.4046C77.171 30.3954 77.344 30.3909 77.5169 30.3909C77.6899 30.3817 77.8355 30.3772 77.9539 30.3772H80.0429C80.1704 30.3772 80.3206 30.3817 80.4935 30.3909C80.6665 30.3909 80.8394 30.3954 81.0124 30.4046C81.1853 30.4046 81.3355 30.4046 81.463 30.4046H83.4292L84.4805 33.6823H82.3232C82.1957 33.6823 82.041 33.6869 81.8589 33.696C81.6769 33.696 81.4948 33.7006 81.3128 33.7097C81.1398 33.7097 80.9896 33.7097 80.8622 33.7097H76.9981Z" fill="white"/>
<path d="M88.069 19.2274C88.3876 19.0903 88.7426 18.976 89.134 18.8846C89.5254 18.7932 89.9077 18.7474 90.2809 18.7474C91.0092 18.7474 91.5371 18.9074 91.8648 19.2274C92.2016 19.5383 92.4383 20.1417 92.5748 21.0377L93.8037 28.4297C93.9038 29.0057 94.004 29.632 94.1041 30.3086C94.2042 30.9852 94.2952 31.6389 94.3772 32.2697C94.4682 32.8914 94.5365 33.4217 94.582 33.8606C94.6002 34.0343 94.6229 34.1394 94.6502 34.176C94.6867 34.2034 94.7504 34.2172 94.8414 34.2172L97.2036 19.3509C97.6132 19.2777 98.0592 19.2274 98.5417 19.2C99.0241 19.1634 99.4656 19.1452 99.8661 19.1452C100.294 19.1452 100.745 19.1634 101.218 19.2C101.7 19.2274 102.137 19.2777 102.529 19.3509L104.713 33.8606C104.741 34.0343 104.772 34.1394 104.809 34.176C104.854 34.2034 104.918 34.2172 105 34.2172C105.055 33.7052 105.127 33.1109 105.218 32.4343C105.31 31.7577 105.41 31.0629 105.519 30.3497C105.628 29.6366 105.733 28.9829 105.833 28.3886L107.458 18.9806C107.767 18.9166 108.086 18.8754 108.414 18.8572C108.741 18.8389 109.046 18.8297 109.328 18.8297C109.647 18.8297 109.984 18.8526 110.339 18.8983C110.694 18.944 111.012 19.0126 111.295 19.104L111.499 19.3509L107.84 37.6869C107.367 37.7417 106.789 37.7829 106.106 37.8103C105.432 37.8469 104.823 37.8652 104.276 37.8652C103.657 37.8652 103.111 37.76 102.638 37.5497C102.165 37.3394 101.864 36.8137 101.737 35.9726L100.754 29.8423C100.59 28.7909 100.43 27.6846 100.276 26.5234C100.13 25.3623 100.012 24.3292 99.9207 23.424H99.7159C99.6067 24.3292 99.4701 25.3623 99.3063 26.5234C99.1424 27.6754 98.9695 28.7817 98.7874 29.8423L97.4766 37.6869C96.976 37.7417 96.4071 37.7829 95.7699 37.8103C95.1418 37.8469 94.5456 37.8652 93.9812 37.8652C93.3167 37.8652 92.7478 37.76 92.2744 37.5497C91.8102 37.3394 91.4962 36.8092 91.3323 35.9589L88.069 19.2274Z" fill="white"/>
<path d="M118.115 18.9806C118.451 18.9349 118.852 18.8983 119.316 18.8709C119.78 18.8434 120.185 18.8297 120.531 18.8297C120.868 18.8297 121.269 18.8434 121.733 18.8709C122.206 18.8983 122.607 18.944 122.934 19.008L128.847 37.44C128.555 37.6046 128.182 37.728 127.727 37.8103C127.272 37.9017 126.844 37.9474 126.444 37.9474C125.788 37.9474 125.274 37.7966 124.901 37.4949C124.527 37.184 124.213 36.5806 123.958 35.6846L121.869 28.3749C121.651 27.5977 121.401 26.7017 121.118 25.6869C120.845 24.672 120.6 23.7212 120.381 22.8343H120.217C120.081 23.5749 119.88 24.4252 119.617 25.3852C119.362 26.336 119.13 27.168 118.92 27.8812L115.998 37.7417C115.743 37.8057 115.466 37.8469 115.165 37.8652C114.865 37.8834 114.555 37.8926 114.237 37.8926C113.918 37.8926 113.563 37.8697 113.172 37.824C112.78 37.7783 112.462 37.7097 112.216 37.6183L112.066 37.3989L118.115 18.9806ZM118.36 33.7097C118.233 33.7097 118.078 33.7097 117.896 33.7097C117.714 33.7006 117.532 33.696 117.35 33.696C117.177 33.6869 117.027 33.6823 116.899 33.6823H114.728L116.012 30.4046H117.91C118.037 30.4046 118.187 30.4046 118.36 30.4046C118.533 30.3954 118.706 30.3909 118.879 30.3909C119.052 30.3817 119.198 30.3772 119.316 30.3772H121.405C121.533 30.3772 121.683 30.3817 121.856 30.3909C122.029 30.3909 122.202 30.3954 122.375 30.4046C122.548 30.4046 122.698 30.4046 122.825 30.4046H124.791L125.843 33.6823H123.685C123.558 33.6823 123.403 33.6869 123.221 33.696C123.039 33.696 122.857 33.7006 122.675 33.7097C122.502 33.7097 122.352 33.7097 122.224 33.7097H118.36Z" fill="white"/>
<path d="M133.41 29.4172H137.588V37.7143C137.251 37.7783 136.892 37.8194 136.51 37.8377C136.136 37.856 135.809 37.8652 135.526 37.8652C135.272 37.8652 134.939 37.856 134.53 37.8377C134.12 37.8194 133.747 37.7783 133.41 37.7143V29.4172ZM138.954 18.9806C139.245 18.9166 139.532 18.8754 139.814 18.8572C140.096 18.8389 140.374 18.8297 140.647 18.8297C141.002 18.8297 141.361 18.8526 141.725 18.8983C142.09 18.944 142.413 19.0172 142.695 19.1177L142.859 19.3509L137.37 32.448H133.683L128.14 19.4743C128.513 19.264 128.922 19.0949 129.368 18.9669C129.815 18.8297 130.256 18.7612 130.693 18.7612C131.285 18.7612 131.74 18.8937 132.058 19.1589C132.377 19.424 132.655 19.8537 132.891 20.448L134.311 23.9863C134.53 24.5532 134.744 25.1612 134.953 25.8103C135.162 26.4594 135.358 27.1406 135.54 27.8537H135.69C135.809 27.4057 135.941 26.9486 136.086 26.4823C136.232 26.016 136.382 25.5589 136.537 25.1109C136.701 24.6629 136.86 24.2423 137.015 23.8492L138.954 18.9806Z" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M17.9978 43.3281C20.5208 32.8971 19.5204 21.9194 15.1533 12.1223C23.8314 8.6219 33.1615 7.04718 42.5022 7.50735C42.9362 8.94698 43.3244 10.3982 43.667 11.8579L52.0194 13.536H26.0885V48L24.9804 43.2663C22.6597 43.4062 20.329 43.4278 17.9978 43.3281Z" fill="#E13833"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M17.6248 38.3511C16.4941 29.4258 12.9019 20.9574 7.20915 13.925C14.6893 8.28785 23.296 4.34155 32.437 2.35731C33.2346 3.64812 33.9906 4.96162 34.7036 6.29676C27.8434 6.78015 21.0798 8.33535 14.6725 10.9201L13.4273 11.422L13.9753 12.6516C17.5633 20.7015 18.8148 29.6527 17.6248 38.3511Z" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M15.8945 37.5263C12.4621 29.6575 6.98999 22.8108 0 17.7315C5.77315 10.3418 13.0689 4.29249 21.3877 0C22.4075 0.960982 23.3973 1.94993 24.3567 2.9658C17.8737 5.22498 11.7596 8.48472 6.24812 12.6389L4.91621 13.6421L5.9665 14.9398C11.251 21.4667 14.663 29.2764 15.8945 37.5263Z" fill="#E13833"/>
<path d="M106.782 37.571C108.845 36.9354 111.436 36.0416 113.189 35.1346C110.17 36.4323 109.294 34.9161 109.188 34.3865C108.114 35.1346 107.105 35.8563 106.242 36.4786C105.675 36.8891 106.116 37.7763 106.782 37.571Z" fill="white"/>
<path d="M132.938 27.1765L141.27 20.3638C141.27 20.3638 138.6 22.8002 138.534 24.0317C138.237 24.3826 132.938 27.1765 132.938 27.1765Z" fill="white"/>
<path d="M132.964 25.1771C132.964 25.1771 139.048 21.0458 140.683 19.5098C138.646 21.0259 137.908 20.8736 137.38 20.6551C134.23 23.8596 132.964 25.1771 132.964 25.1771Z" fill="white"/>
<path d="M121.106 34.9095C121.106 34.9095 126.84 31.5528 128.442 30.4405C127.862 30.8775 126.893 32.1222 126.834 32.9432L121.106 34.9095Z" fill="white"/>
<path d="M152.133 21.6416C151.724 19.0265 151.328 16.5503 150.926 13.9682C150.676 14.1735 150.471 14.339 150.274 14.5045C148.791 15.7956 147.149 16.8284 145.304 17.5236C144.677 17.7553 144.111 17.7487 143.524 17.3779C142.39 16.6562 141.223 15.9876 140.07 15.2924C140.498 14.7296 140.979 14.5376 141.639 14.6171C142.548 14.723 143.471 14.7495 144.387 14.7561C144.664 14.7561 145.007 14.6568 145.218 14.478C148.428 11.7503 151.618 9.00272 154.809 6.24852C155.685 5.49376 156.701 5.11638 157.847 5.14286C158.843 5.16272 159.258 5.79831 158.836 6.70534C158.619 7.17541 158.263 7.61238 157.88 7.96328C156.944 8.82397 155.969 9.63169 154.993 10.446C154.723 10.6711 154.585 10.9029 154.558 11.2736C154.347 13.9947 154.09 16.7092 153.892 19.4303C153.846 20.0328 153.649 20.4764 153.148 20.814C152.818 21.0325 152.541 21.304 152.133 21.6416Z" fill="white"/>
<path d="M143.32 10.2275C144.064 9.57872 144.585 8.75114 145.785 8.92989C146.991 9.11527 148.224 9.12189 149.45 9.20796C149.549 9.21458 149.654 9.23445 149.858 9.26093C148.949 10.0289 148.118 10.7373 147.274 11.4325C147.195 11.4987 147.037 11.5384 146.938 11.5053C145.818 11.1544 144.704 10.7903 143.59 10.4196C143.504 10.4063 143.445 10.3269 143.32 10.2275Z" fill="white"/>
</svg>

Before

Width:  |  Height:  |  Size: 12 KiB