Hướng dẫn code UI demo cao cấp
Mình nâng cấp theo hướng UI demo cao cấp, không làm kiểu vài nút gradient đơn giản. Bản này có: HTML / CSS / JS tách riêng Class/component đều có tiền tố muathemewpgiare GSAP animation Lenis smooth scroll Lucide Icons VanillaTilt Particles.js Magnetic button Glow cursor 3D card Ripple button Animated counters Toast notification Modal
<!DOCTYPE html>
<html lang="vi">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Muathemewpgiare — Advanced UI Experience</title>
<meta
name="description"
content="Advanced interactive UI experience by muathemewpgiare.com"
>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link
href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800;900&display=swap"
rel="stylesheet"
>
<!-- Icons -->
<script src="https://unpkg.com/lucide@latest"></script>
<!-- GSAP -->
<script src="https://cdn.jsdelivr.net/npm/gsap@3.13.0/dist/gsap.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/gsap@3.13.0/dist/ScrollTrigger.min.js"></script>
<!-- Smooth Scroll -->
<script src="https://cdn.jsdelivr.net/npm/@studio-freight/lenis@1.0.42/bundled/lenis.min.js"></script>
<!-- Tilt -->
<script src="https://cdn.jsdelivr.net/npm/vanilla-tilt@1.8.1/dist/vanilla-tilt.min.js"></script>
<!-- Particles -->
<script src="https://cdn.jsdelivr.net/npm/particles.js@2.0.0/particles.min.js"></script>
</head>
<body>
<div class="muathemewpgiare-app">
<!-- Cursor -->
<div class="muathemewpgiare-cursor"></div>
<div class="muathemewpgiare-cursor-ring"></div>
<!-- Background -->
<div
id="muathemewpgiare-particles"
class="muathemewpgiare-particles"
></div>
<div class="muathemewpgiare-noise"></div>
<!-- Navigation -->
<header class="muathemewpgiare-header">
<a
href="#"
class="muathemewpgiare-logo muathemewpgiare-magnetic"
>
<span class="muathemewpgiare-logo-mark">
M
</span>
<span>
MUATHEME
<small>WPGIARE</small>
</span>
</a>
<nav class="muathemewpgiare-nav">
<a href="#home" class="muathemewpgiare-nav-link">
Home
</a>
<a href="#features" class="muathemewpgiare-nav-link">
Features
</a>
<a href="#showcase" class="muathemewpgiare-nav-link">
Showcase
</a>
<a href="#pricing" class="muathemewpgiare-nav-link">
Pricing
</a>
</nav>
<button
class="muathemewpgiare-button muathemewpgiare-button-primary muathemewpgiare-magnetic"
data-modal-open
>
<span>Get Started</span>
<i data-lucide="arrow-up-right"></i>
</button>
</header>
<!-- Hero -->
<main>
<section
id="home"
class="muathemewpgiare-hero"
>
<div class="muathemewpgiare-hero-orb muathemewpgiare-orb-one"></div>
<div class="muathemewpgiare-hero-orb muathemewpgiare-orb-two"></div>
<div class="muathemewpgiare-hero-content">
<div class="muathemewpgiare-badge">
<span class="muathemewpgiare-status-dot"></span>
<span>
NEXT GENERATION INTERFACE
</span>
</div>
<h1 class="muathemewpgiare-hero-title">
Build
<span class="muathemewpgiare-gradient-text">
Extraordinary
</span>
Digital Experiences.
</h1>
<p class="muathemewpgiare-hero-description">
Một giao diện tương tác thế hệ mới được xây dựng
với animation, micro-interaction, 3D effect và
motion system chuyên nghiệp.
</p>
<div class="muathemewpgiare-hero-actions">
<button
class="muathemewpgiare-button muathemewpgiare-button-primary muathemewpgiare-magnetic muathemewpgiare-ripple"
data-scroll="#showcase"
>
<i data-lucide="sparkles"></i>
Khám phá ngay
</button>
<button
class="muathemewpgiare-button muathemewpgiare-button-glass muathemewpgiare-ripple"
data-modal-open
>
<i data-lucide="play"></i>
Xem Demo
</button>
</div>
<div class="muathemewpgiare-trust">
<div class="muathemewpgiare-avatar-stack">
<span>H</span>
<span>M</span>
<span>W</span>
<span>+</span>
</div>
<div>
<strong>12,000+</strong>
<small>Digital experiences</small>
</div>
</div>
</div>
<!-- Hero visual -->
<div class="muathemewpgiare-hero-visual">
<div
class="muathemewpgiare-dashboard-card"
data-tilt
data-tilt-max="8"
data-tilt-speed="600"
>
<div class="muathemewpgiare-dashboard-top">
<div>
<span class="muathemewpgiare-mini-label">
SYSTEM PERFORMANCE
</span>
<h3>
Experience
</h3>
</div>
<button class="muathemewpgiare-icon-button">
<i data-lucide="more-horizontal"></i>
</button>
</div>
<div class="muathemewpgiare-chart">
<div class="muathemewpgiare-chart-grid"></div>
<svg
viewBox="0 0 600 240"
preserveAspectRatio="none"
>
<defs>
<linearGradient
id="muathemewpgiareGradient"
x1="0"
x2="1"
>
<stop
offset="0%"
stop-color="#9b5cff"
/>
<stop
offset="100%"
stop-color="#00e5ff"
/>
</linearGradient>
</defs>
<path
class="muathemewpgiare-chart-area"
d="M0 210
C60 185 80 195 120 160
S180 120 220 145
S280 70 330 100
S390 55 430 80
S500 30 600 20
L600 240 L0 240 Z"
/>
<path
class="muathemewpgiare-chart-line"
d="M0 210
C60 185 80 195 120 160
S180 120 220 145
S280 70 330 100
S390 55 430 80
S500 30 600 20"
/>
</svg>
</div>
<div class="muathemewpgiare-dashboard-stats">
<div>
<small>Conversion</small>
<strong>+84.29%</strong>
</div>
<div>
<small>Performance</small>
<strong>98.7</strong>
</div>
<div>
<small>Response</small>
<strong>0.08s</strong>
</div>
</div>
</div>
<div class="muathemewpgiare-floating-card muathemewpgiare-floating-one">
<div class="muathemewpgiare-floating-icon">
<i data-lucide="zap"></i>
</div>
<div>
<strong>Ultra Fast</strong>
<small>0.08s response</small>
</div>
</div>
<div class="muathemewpgiare-floating-card muathemewpgiare-floating-two">
<div class="muathemewpgiare-floating-icon">
<i data-lucide="shield-check"></i>
</div>
<div>
<strong>Protected</strong>
<small>Enterprise security</small>
</div>
</div>
</div>
</section>
<!-- Marquee -->
<section class="muathemewpgiare-marquee-section">
<div class="muathemewpgiare-marquee">
<div class="muathemewpgiare-marquee-track">
<span>DESIGN</span>
<b>✦</b>
<span>ANIMATION</span>
<b>✦</b>
<span>INTERACTION</span>
<b>✦</b>
<span>PERFORMANCE</span>
<b>✦</b>
<span>EXPERIENCE</span>
<b>✦</b>
<span>DESIGN</span>
<b>✦</b>
<span>ANIMATION</span>
<b>✦</b>
</div>
</div>
</section>
<!-- Features -->
<section
id="features"
class="muathemewpgiare-section"
>
<div class="muathemewpgiare-section-heading">
<div class="muathemewpgiare-section-label">
<span>01</span>
CAPABILITIES
</div>
<h2>
Không chỉ đẹp.
<br>
<span class="muathemewpgiare-gradient-text">
Phải có chiều sâu.
</span>
</h2>
<p>
Mỗi component được thiết kế để tạo cảm giác
tương tác sống động thay vì chỉ là một giao diện tĩnh.
</p>
</div>
<div class="muathemewpgiare-feature-grid">
<article
class="muathemewpgiare-feature-card"
data-tilt
>
<div class="muathemewpgiare-feature-number">
01
</div>
<div class="muathemewpgiare-feature-icon">
<i data-lucide="mouse-pointer-2"></i>
</div>
<h3>
Micro Interaction
</h3>
<p>
Hover, click, magnetic interaction,
ripple và transition được kết hợp
thành một hệ thống thống nhất.
</p>
<a href="#" class="muathemewpgiare-feature-link">
Explore
<i data-lucide="arrow-up-right"></i>
</a>
</article>
<article
class="muathemewpgiare-feature-card muathemewpgiare-feature-highlight"
data-tilt
>
<div class="muathemewpgiare-feature-number">
02
</div>
<div class="muathemewpgiare-feature-icon">
<i data-lucide="layers-3"></i>
</div>
<h3>
Layered Motion
</h3>
<p>
Nhiều lớp animation chạy đồng bộ tạo
chiều sâu thị giác và cảm giác premium.
</p>
<a href="#" class="muathemewpgiare-feature-link">
Explore
<i data-lucide="arrow-up-right"></i>
</a>
</article>
<article
class="muathemewpgiare-feature-card"
data-tilt
>
<div class="muathemewpgiare-feature-number">
03
</div>
<div class="muathemewpgiare-feature-icon">
<i data-lucide="cpu"></i>
</div>
<h3>
Smart Components
</h3>
<p>
Component có trạng thái, feedback,
loading, notification và modal.
</p>
<a href="#" class="muathemewpgiare-feature-link">
Explore
<i data-lucide="arrow-up-right"></i>
</a>
</article>
</div>
</section>
<!-- Showcase -->
<section
id="showcase"
class="muathemewpgiare-section muathemewpgiare-showcase"
>
<div class="muathemewpgiare-section-heading">
<div class="muathemewpgiare-section-label">
<span>02</span>
INTERACTIVE SHOWCASE
</div>
<h2>
Các hiệu ứng
<span class="muathemewpgiare-gradient-text">
được sinh ra để chuyển động.
</span>
</h2>
</div>
<div class="muathemewpgiare-showcase-grid">
<div class="muathemewpgiare-command-card">
<div class="muathemewpgiare-command-header">
<span>
INTERACTION LAB
</span>
<span class="muathemewpgiare-live">
LIVE
</span>
</div>
<div class="muathemewpgiare-command-body">
<button
class="muathemewpgiare-demo-button muathemewpgiare-ripple"
data-toast="Action executed successfully!"
>
<i data-lucide="command"></i>
Execute Action
</button>
<button
class="muathemewpgiare-demo-button muathemewpgiare-demo-secondary"
data-toast="System synchronized."
>
<i data-lucide="refresh-cw"></i>
Synchronize
</button>
<button
class="muathemewpgiare-demo-button muathemewpgiare-demo-danger"
data-toast="Session terminated."
>
<i data-lucide="power"></i>
Terminate
</button>
</div>
</div>
<div class="muathemewpgiare-stat-panel">
<div class="muathemewpgiare-stat-circle">
<div class="muathemewpgiare-stat-circle-inner">
<strong>
<span data-counter="98.7">0</span>
</strong>
<small>
SCORE
</small>
</div>
</div>
<div class="muathemewpgiare-stat-copy">
<span>
SYSTEM STATUS
</span>
<h3>
Everything is
<em>operational.</em>
</h3>
<div class="muathemewpgiare-progress">
<span
data-progress="92"
></span>
</div>
<small>
Performance index
</small>
</div>
</div>
</div>
</section>
<!-- Stats -->
<section class="muathemewpgiare-stats-section">
<div class="muathemewpgiare-stat-item">
<strong data-counter="12000">
0
</strong>
<span>
Projects
</span>
</div>
<div class="muathemewpgiare-stat-item">
<strong data-counter="98">
0
</strong>
<span>
Performance
</span>
</div>
<div class="muathemewpgiare-stat-item">
<strong data-counter="24">
0
</strong>
<span>
Components
</span>
</div>
<div class="muathemewpgiare-stat-item">
<strong data-counter="99">
0
</strong>
<span>
Satisfaction
</span>
</div>
</section>
<!-- Pricing -->
<section
id="pricing"
class="muathemewpgiare-section"
>
<div class="muathemewpgiare-section-heading">
<div class="muathemewpgiare-section-label">
<span>03</span>
EXPERIENCE
</div>
<h2>
Built for
<span class="muathemewpgiare-gradient-text">
serious projects.
</span>
</h2>
</div>
<div class="muathemewpgiare-pricing-grid">
<div class="muathemewpgiare-price-card">
<span class="muathemewpgiare-price-label">
STARTER
</span>
<h3>
Essential
</h3>
<div class="muathemewpgiare-price">
$29
<small>/mo</small>
</div>
<ul>
<li>
<i data-lucide="check"></i>
Advanced components
</li>
<li>
<i data-lucide="check"></i>
Motion effects
</li>
<li>
<i data-lucide="check"></i>
Responsive system
</li>
</ul>
<button
class="muathemewpgiare-button muathemewpgiare-button-glass muathemewpgiare-full-button"
data-toast="Starter selected"
>
Choose Plan
</button>
</div>
<div class="muathemewpgiare-price-card muathemewpgiare-price-featured">
<div class="muathemewpgiare-popular">
MOST POPULAR
</div>
<span class="muathemewpgiare-price-label">
PROFESSIONAL
</span>
<h3>
Advanced
</h3>
<div class="muathemewpgiare-price">
$79
<small>/mo</small>
</div>
<ul>
<li>
<i data-lucide="check"></i>
Everything in Essential
</li>
<li>
<i data-lucide="check"></i>
3D interactions
</li>
<li>
<i data-lucide="check"></i>
Premium animations
</li>
<li>
<i data-lucide="check"></i>
Priority support
</li>
</ul>
<button
class="muathemewpgiare-button muathemewpgiare-button-primary muathemewpgiare-full-button"
data-modal-open
>
Start Building
</button>
</div>
</div>
</section>
</main>
<!-- Footer -->
<footer class="muathemewpgiare-footer">
<div>
<strong>
MUATHEMEWPGIARE
</strong>
<p>
Advanced digital experiences.
</p>
</div>
<div>
© 2026 muathemewpgiare.com
</div>
</footer>
</div>
<!-- Toast -->
<div
class="muathemewpgiare-toast"
id="muathemewpgiare-toast"
>
<div class="muathemewpgiare-toast-icon">
<i data-lucide="check"></i>
</div>
<div>
<strong>
Success
</strong>
<span id="muathemewpgiare-toast-message">
Completed
</span>
</div>
</div>
<!-- Modal -->
<div
class="muathemewpgiare-modal"
id="muathemewpgiare-modal"
>
<div class="muathemewpgiare-modal-backdrop"></div>
<div class="muathemewpgiare-modal-box">
<button
class="muathemewpgiare-modal-close"
data-modal-close
>
<i data-lucide="x"></i>
</button>
<div class="muathemewpgiare-modal-icon">
<i data-lucide="sparkles"></i>
</div>
<span class="muathemewpgiare-modal-label">
MUATHEMEWPGIARE
</span>
<h2>
Ready to build
something extraordinary?
</h2>
<p>
Đây là khu vực modal tương tác.
Có thể thay thế bằng form đăng nhập,
đăng ký, checkout hoặc bất kỳ chức năng nào.
</p>
<button
class="muathemewpgiare-button muathemewpgiare-button-primary muathemewpgiare-full-button"
data-modal-close
>
Let's Create
</button>
</div>
</div>
<script src="script.js"></script>
</body>
</html>:root {
--muathemewpgiare-bg: #06060b;
--muathemewpgiare-panel: #0d0d15;
--muathemewpgiare-panel-2: #11111c;
--muathemewpgiare-purple: #8b5cf6;
--muathemewpgiare-violet: #c084fc;
--muathemewpgiare-cyan: #00e5ff;
--muathemewpgiare-text: #f8f7ff;
--muathemewpgiare-muted: #9695a7;
--muathemewpgiare-border:
rgba(255,255,255,.09);
--muathemewpgiare-radius: 24px;
}
* {
box-sizing: border-box;
margin: 0;
padding: 0;
}
html {
scroll-behavior: auto;
}
body {
background:
radial-gradient(
circle at 20% 10%,
rgba(139,92,246,.12),
transparent 30%
),
radial-gradient(
circle at 80% 30%,
rgba(0,229,255,.08),
transparent 25%
),
var(--muathemewpgiare-bg);
color: var(--muathemewpgiare-text);
font-family:
"Inter",
sans-serif;
overflow-x: hidden;
}
button,
a {
font: inherit;
}
button {
border: 0;
cursor: pointer;
}
a {
color: inherit;
text-decoration: none;
}
/* APP */
.muathemewpgiare-app {
position: relative;
min-height: 100vh;
overflow: hidden;
}
.muathemewpgiare-noise {
position: fixed;
inset: 0;
pointer-events: none;
opacity: .025;
z-index: 20;
background-image:
url("data:image/svg+xml,%3Csvg viewBox='0 0 180 180' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.8' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='.6'/%3E%3C/svg%3E");
}
/* PARTICLES */
.muathemewpgiare-particles {
position: fixed;
inset: 0;
z-index: -1;
pointer-events: none;
}
/* HEADER */
.muathemewpgiare-header {
width: min(1400px, calc(100% - 50px));
height: 84px;
margin: 20px auto 0;
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 18px 0 22px;
border: 1px solid
var(--muathemewpgiare-border);
background:
rgba(8,8,14,.62);
backdrop-filter:
blur(25px);
-webkit-backdrop-filter:
blur(25px);
border-radius: 22px;
position: relative;
z-index: 100;
}
.muathemewpgiare-logo {
display: flex;
align-items: center;
gap: 12px;
font-weight: 900;
letter-spacing: -.04em;
}
.muathemewpgiare-logo small {
display: block;
font-size: 8px;
letter-spacing: .3em;
color: var(--muathemewpgiare-muted);
}
.muathemewpgiare-logo-mark {
width: 40px;
height: 40px;
display: grid;
place-items: center;
border-radius: 12px;
background:
linear-gradient(
135deg,
var(--muathemewpgiare-purple),
var(--muathemewpgiare-cyan)
);
color: white;
box-shadow:
0 0 30px
rgba(139,92,246,.35);
}
.muathemewpgiare-nav {
display: flex;
align-items: center;
gap: 35px;
}
.muathemewpgiare-nav-link {
position: relative;
color: #aaa9b8;
font-size: 13px;
font-weight: 600;
transition: .3s;
}
.muathemewpgiare-nav-link:hover {
color: white;
}
.muathemewpgiare-nav-link::after {
content: "";
position: absolute;
left: 0;
bottom: -9px;
width: 0;
height: 1px;
background:
linear-gradient(
90deg,
var(--muathemewpgiare-purple),
var(--muathemewpgiare-cyan)
);
transition: .35s;
}
.muathemewpgiare-nav-link:hover::after {
width: 100%;
}
/* BUTTON */
.muathemewpgiare-button {
min-height: 50px;
padding: 0 22px;
display: inline-flex;
align-items: center;
justify-content: center;
gap: 10px;
border-radius: 14px;
font-size: 13px;
font-weight: 800;
transition:
transform .3s,
box-shadow .3s,
border .3s;
}
.muathemewpgiare-button svg {
width: 17px;
}
.muathemewpgiare-button-primary {
color: white;
background:
linear-gradient(
110deg,
#7044df,
#a855f7,
#06b6d4
);
background-size: 200% 100%;
box-shadow:
0 15px 40px
rgba(139,92,246,.25);
}
.muathemewpgiare-button-primary:hover {
transform: translateY(-3px);
background-position: 100% 0;
box-shadow:
0 20px 60px
rgba(139,92,246,.42);
}
.muathemewpgiare-button-glass {
color: white;
border: 1px solid
rgba(255,255,255,.12);
background:
rgba(255,255,255,.045);
backdrop-filter: blur(12px);
}
.muathemewpgiare-button-glass:hover {
background:
rgba(255,255,255,.09);
border-color:
rgba(255,255,255,.2);
transform:
translateY(-3px);
}
.muathemewpgiare-full-button {
width: 100%;
}
/* HERO */
.muathemewpgiare-hero {
width: min(1400px, calc(100% - 50px));
min-height: 760px;
margin: auto;
display: grid;
grid-template-columns:
minmax(0, 1fr)
minmax(450px, .9fr);
align-items: center;
gap: 80px;
position: relative;
}
.muathemewpgiare-hero-content {
position: relative;
z-index: 5;
}
.muathemewpgiare-badge {
width: fit-content;
display: flex;
align-items: center;
gap: 9px;
padding: 9px 14px;
border-radius: 999px;
border: 1px solid
rgba(255,255,255,.1);
background:
rgba(255,255,255,.035);
color: #bbb9c9;
font-size: 10px;
font-weight: 800;
letter-spacing: .16em;
}
.muathemewpgiare-status-dot {
width: 7px;
height: 7px;
border-radius: 50%;
background: #43ff9c;
box-shadow:
0 0 15px
#43ff9c;
animation:
muathemewpgiare-pulse 1.5s infinite;
}
@keyframes muathemewpgiare-pulse {
50% {
opacity: .3;
transform: scale(.6);
}
}
.muathemewpgiare-hero-title {
max-width: 850px;
margin-top: 30px;
font-size:
clamp(52px, 6vw, 88px);
line-height: .98;
letter-spacing: -.065em;
font-weight: 900;
}
.muathemewpgiare-gradient-text {
color: transparent;
background:
linear-gradient(
100deg,
#fff,
#b98cff 40%,
#00e5ff
);
-webkit-background-clip: text;
background-clip: text;
}
.muathemewpgiare-hero-description {
max-width: 620px;
margin-top: 30px;
color: var(--muathemewpgiare-muted);
line-height: 1.8;
font-size: 15px;
}
.muathemewpgiare-hero-actions {
display: flex;
gap: 12px;
margin-top: 38px;
}
.muathemewpgiare-trust {
margin-top: 55px;
display: flex;
align-items: center;
gap: 15px;
}
.muathemewpgiare-avatar-stack {
display: flex;
}
.muathemewpgiare-avatar-stack span {
width: 34px;
height: 34px;
margin-left: -8px;
border: 2px solid
var(--muathemewpgiare-bg);
border-radius: 50%;
display: grid;
place-items: center;
background:
linear-gradient(
135deg,
#302050,
#11151d
);
font-size: 10px;
font-weight: 800;
}
.muathemewpgiare-avatar-stack span:first-child {
margin-left: 0;
}
.muathemewpgiare-trust strong {
display: block;
font-size: 14px;
}
.muathemewpgiare-trust small {
display: block;
margin-top: 3px;
color: #777686;
font-size: 10px;
}
/* HERO VISUAL */
.muathemewpgiare-hero-visual {
position: relative;
height: 560px;
display: grid;
place-items: center;
}
.muathemewpgiare-dashboard-card {
width: 100%;
max-width: 570px;
padding: 28px;
position: relative;
border:
1px solid
rgba(255,255,255,.11);
border-radius: 30px;
background:
linear-gradient(
145deg,
rgba(255,255,255,.09),
rgba(255,255,255,.025)
);
box-shadow:
0 50px 120px
rgba(0,0,0,.45),
inset 0 1px 0
rgba(255,255,255,.1);
backdrop-filter:
blur(25px);
transform-style: preserve-3d;
}
.muathemewpgiare-dashboard-card::before {
content: "";
position: absolute;
inset: -1px;
border-radius: inherit;
background:
linear-gradient(
120deg,
rgba(139,92,246,.7),
transparent 30%,
transparent 70%,
rgba(0,229,255,.45)
);
opacity: .3;
z-index: -1;
}
.muathemewpgiare-dashboard-top {
display: flex;
justify-content: space-between;
}
.muathemewpgiare-mini-label {
color: #747382;
font-size: 9px;
letter-spacing: .18em;
}
.muathemewpgiare-dashboard-top h3 {
margin-top: 7px;
font-size: 24px;
letter-spacing: -.04em;
}
.muathemewpgiare-icon-button {
width: 40px;
height: 40px;
border-radius: 12px;
background:
rgba(255,255,255,.06);
color: white;
}
.muathemewpgiare-chart {
height: 260px;
margin-top: 30px;
position: relative;
}
.muathemewpgiare-chart svg {
width: 100%;
height: 100%;
}
.muathemewpgiare-chart-area {
fill:
url("#muathemewpgiareGradient");
opacity: .08;
}
.muathemewpgiare-chart-line {
fill: none;
stroke:
url("#muathemewpgiareGradient");
stroke-width: 4;
filter:
drop-shadow(
0 0 12px
rgba(139,92,246,.7)
);
}
.muathemewpgiare-dashboard-stats {
display: grid;
grid-template-columns:
repeat(3, 1fr);
gap: 10px;
}
.muathemewpgiare-dashboard-stats > div {
padding: 15px;
border:
1px solid
rgba(255,255,255,.07);
border-radius: 15px;
background:
rgba(0,0,0,.15);
}
.muathemewpgiare-dashboard-stats small {
display: block;
color: #777686;
font-size: 9px;
}
.muathemewpgiare-dashboard-stats strong {
display: block;
margin-top: 7px;
font-size: 15px;
}
.muathemewpgiare-floating-card {
position: absolute;
display: flex;
align-items: center;
gap: 12px;
padding: 13px 17px;
border:
1px solid
rgba(255,255,255,.1);
border-radius: 16px;
background:
rgba(12,12,20,.72);
backdrop-filter: blur(20px);
box-shadow:
0 20px 50px
rgba(0,0,0,.3);
animation:
muathemewpgiare-float 5s ease-in-out infinite;
}
.muathemewpgiare-floating-one {
top: 60px;
right: -10px;
}
.muathemewpgiare-floating-two {
bottom: 70px;
left: -25px;
animation-delay: -2s;
}
.muathemewpgiare-floating-icon {
width: 38px;
height: 38px;
display: grid;
place-items: center;
border-radius: 11px;
color: #d5c0ff;
background:
rgba(139,92,246,.15);
}
.muathemewpgiare-floating-card strong {
display: block;
font-size: 11px;
}
.muathemewpgiare-floating-card small {
display: block;
margin-top: 4px;
color: #777686;
font-size: 9px;
}
@keyframes muathemewpgiare-float {
0%,
100% {
transform: translateY(0);
}
50% {
transform: translateY(-13px);
}
}
/* ORBS */
.muathemewpgiare-hero-orb {
position: absolute;
width: 350px;
height: 350px;
border-radius: 50%;
filter: blur(90px);
opacity: .15;
pointer-events: none;
}
.muathemewpgiare-orb-one {
background: #8b5cf6;
top: 100px;
left: -100px;
}
.muathemewpgiare-orb-two {
background: #00e5ff;
bottom: 50px;
right: -100px;
}
/* MARQUEE */
.muathemewpgiare-marquee-section {
overflow: hidden;
border-top:
1px solid
rgba(255,255,255,.06);
border-bottom:
1px solid
rgba(255,255,255,.06);
background:
rgba(255,255,255,.018);
}
.muathemewpgiare-marquee {
padding: 24px 0;
}
.muathemewpgiare-marquee-track {
width: max-content;
display: flex;
align-items: center;
gap: 35px;
font-size: 13px;
font-weight: 900;
letter-spacing: .15em;
color: #686774;
animation:
muathemewpgiare-marquee 25s linear infinite;
}
.muathemewpgiare-marquee-track b {
color: #8b5cf6;
}
@keyframes muathemewpgiare-marquee {
to {
transform: translateX(-50%);
}
}
/* SECTION */
.muathemewpgiare-section {
width: min(1400px, calc(100% - 50px));
margin: auto;
padding:
150px 0;
}
.muathemewpgiare-section-heading {
max-width: 750px;
}
.muathemewpgiare-section-label {
display: flex;
align-items: center;
gap: 10px;
color: #777686;
font-size: 10px;
font-weight: 800;
letter-spacing: .18em;
}
.muathemewpgiare-section-label span {
color: #a979ff;
}
.muathemewpgiare-section-heading h2 {
margin-top: 20px;
font-size:
clamp(42px, 5vw, 70px);
line-height: 1;
letter-spacing: -.06em;
}
.muathemewpgiare-section-heading p {
margin-top: 25px;
color: #858491;
line-height: 1.8;
}
/* FEATURES */
.muathemewpgiare-feature-grid {
display: grid;
grid-template-columns:
repeat(3, 1fr);
gap: 18px;
margin-top: 70px;
}
.muathemewpgiare-feature-card {
min-height: 390px;
padding: 32px;
position: relative;
overflow: hidden;
border:
1px solid
rgba(255,255,255,.08);
border-radius: 25px;
background:
linear-gradient(
145deg,
rgba(255,255,255,.06),
rgba(255,255,255,.018)
);
transition:
border .4s,
transform .4s;
transform-style: preserve-3d;
}
.muathemewpgiare-feature-card:hover {
border-color:
rgba(168,85,247,.35);
}
.muathemewpgiare-feature-card::after {
content: "";
position: absolute;
width: 200px;
height: 200px;
right: -100px;
bottom: -100px;
border-radius: 50%;
background:
rgba(139,92,246,.2);
filter: blur(60px);
transition: .5s;
}
.muathemewpgiare-feature-card:hover::after {
transform:
scale(1.6);
}
.muathemewpgiare-feature-number {
color: #52515f;
font-size: 11px;
font-weight: 900;
}
.muathemewpgiare-feature-icon {
width: 58px;
height: 58px;
margin-top: 60px;
display: grid;
place-items: center;
border-radius: 17px;
background:
linear-gradient(
135deg,
rgba(139,92,246,.2),
rgba(0,229,255,.08)
);
color: #c9adff;
box-shadow:
inset 0 0 0 1px
rgba(255,255,255,.08);
}
.muathemewpgiare-feature-card h3 {
margin-top: 25px;
font-size: 22px;
letter-spacing: -.04em;
}
.muathemewpgiare-feature-card p {
margin-top: 13px;
color: #797886;
font-size: 13px;
line-height: 1.7;
}
.muathemewpgiare-feature-link {
position: absolute;
left: 32px;
bottom: 30px;
display: flex;
align-items: center;
gap: 7px;
color: #b68aff;
font-size: 11px;
font-weight: 800;
}
.muathemewpgiare-feature-link svg {
width: 14px;
}
/* SHOWCASE */
.muathemewpgiare-showcase-grid {
display: grid;
grid-template-columns:
1fr 1fr;
gap: 20px;
margin-top: 65px;
}
.muathemewpgiare-command-card,
.muathemewpgiare-stat-panel {
min-height: 420px;
padding: 30px;
border:
1px solid
rgba(255,255,255,.08);
border-radius: 28px;
background:
linear-gradient(
145deg,
rgba(255,255,255,.055),
rgba(255,255,255,.015)
);
}
.muathemewpgiare-command-header {
display: flex;
justify-content: space-between;
color: #777686;
font-size: 10px;
font-weight: 800;
letter-spacing: .15em;
}
.muathemewpgiare-live {
color: #43ff9c;
}
.muathemewpgiare-command-body {
height: 330px;
display: flex;
flex-direction: column;
justify-content: center;
gap: 12px;
}
.muathemewpgiare-demo-button {
width: 100%;
padding: 18px;
display: flex;
align-items: center;
justify-content: center;
gap: 10px;
border-radius: 15px;
color: white;
background:
linear-gradient(
100deg,
rgba(139,92,246,.25),
rgba(139,92,246,.08)
);
border:
1px solid
rgba(139,92,246,.25);
font-weight: 700;
transition: .3s;
}
.muathemewpgiare-demo-button:hover {
transform: translateX(7px);
background:
rgba(139,92,246,.2);
}
.muathemewpgiare-demo-secondary {
background:
rgba(255,255,255,.035);
border-color:
rgba(255,255,255,.08);
}
.muathemewpgiare-demo-danger {
background:
rgba(255,70,100,.07);
border-color:
rgba(255,70,100,.15);
}
.muathemewpgiare-stat-panel {
display: flex;
align-items: center;
justify-content: center;
gap: 55px;
}
.muathemewpgiare-stat-circle {
width: 210px;
height: 210px;
border-radius: 50%;
padding: 10px;
background:
conic-gradient(
#a855f7 0 75%,
#00e5ff 75% 85%,
rgba(255,255,255,.05) 85%
);
animation:
muathemewpgiare-spin-glow 8s linear infinite;
}
.muathemewpgiare-stat-circle-inner {
width: 100%;
height: 100%;
border-radius: inherit;
display: grid;
place-items: center;
align-content: center;
background:
#0c0c14;
}
.muathemewpgiare-stat-circle strong {
font-size: 40px;
letter-spacing: -.06em;
}
.muathemewpgiare-stat-circle small {
margin-top: 4px;
color: #777686;
font-size: 9px;
letter-spacing: .2em;
}
@keyframes muathemewpgiare-spin-glow {
to {
transform: rotate(360deg);
}
}
.muathemewpgiare-stat-copy > span {
color: #777686;
font-size: 9px;
letter-spacing: .2em;
}
.muathemewpgiare-stat-copy h3 {
max-width: 270px;
margin-top: 14px;
font-size: 28px;
line-height: 1.1;
letter-spacing: -.05em;
}
.muathemewpgiare-stat-copy em {
color: #b58bff;
font-style: normal;
}
.muathemewpgiare-progress {
width: 260px;
height: 5px;
margin-top: 25px;
overflow: hidden;
border-radius: 10px;
background:
rgba(255,255,255,.08);
}
.muathemewpgiare-progress span {
display: block;
width: 0;
height: 100%;
border-radius: inherit;
background:
linear-gradient(
90deg,
#8b5cf6,
#00e5ff
);
transition:
width 1.5s cubic-bezier(.2,.8,.2,1);
}
.muathemewpgiare-stat-copy small {
display: block;
margin-top: 9px;
color: #666573;
font-size: 9px;
}
/* STATS */
.muathemewpgiare-stats-section {
width: min(1400px, calc(100% - 50px));
margin: auto;
padding: 60px 0;
display: grid;
grid-template-columns:
repeat(4, 1fr);
border-top:
1px solid
rgba(255,255,255,.07);
border-bottom:
1px solid
rgba(255,255,255,.07);
}
.muathemewpgiare-stat-item {
text-align: center;
border-right:
1px solid
rgba(255,255,255,.07);
}
.muathemewpgiare-stat-item:last-child {
border-right: 0;
}
.muathemewpgiare-stat-item strong {
display: block;
font-size: 42px;
letter-spacing: -.06em;
background:
linear-gradient(
90deg,
white,
#9f7aea
);
color: transparent;
-webkit-background-clip: text;
background-clip: text;
}
.muathemewpgiare-stat-item span {
display: block;
margin-top: 5px;
color: #686774;
font-size: 10px;
text-transform: uppercase;
letter-spacing: .18em;
}
/* PRICING */
.muathemewpgiare-pricing-grid {
display: grid;
grid-template-columns:
1fr 1fr;
gap: 20px;
margin-top: 65px;
max-width: 900px;
}
.muathemewpgiare-price-card {
position: relative;
padding: 35px;
border-radius: 27px;
border:
1px solid
rgba(255,255,255,.08);
background:
rgba(255,255,255,.025);
}
.muathemewpgiare-price-featured {
background:
linear-gradient(
145deg,
rgba(139,92,246,.14),
rgba(0,229,255,.035)
);
border-color:
rgba(139,92,246,.35);
}
.muathemewpgiare-popular {
position: absolute;
top: 20px;
right: 20px;
padding: 6px 9px;
border-radius: 999px;
background:
rgba(139,92,246,.15);
color: #c39cff;
font-size: 8px;
font-weight: 900;
letter-spacing: .1em;
}
.muathemewpgiare-price-label {
color: #777686;
font-size: 10px;
font-weight: 800;
letter-spacing: .2em;
}
.muathemewpgiare-price-card h3 {
margin-top: 12px;
font-size: 28px;
}
.muathemewpgiare-price {
margin-top: 22px;
font-size: 48px;
font-weight: 900;
letter-spacing: -.06em;
}
.muathemewpgiare-price small {
color: #666573;
font-size: 11px;
letter-spacing: 0;
}
.muathemewpgiare-price-card ul {
list-style: none;
margin: 30px 0;
}
.muathemewpgiare-price-card li {
display: flex;
align-items: center;
gap: 9px;
margin: 14px 0;
color: #9695a5;
font-size: 12px;
}
.muathemewpgiare-price-card li svg {
width: 15px;
color: #a77aff;
}
/* FOOTER */
.muathemewpgiare-footer {
width: min(1400px, calc(100% - 50px));
margin: auto;
padding: 60px 0;
display: flex;
justify-content: space-between;
border-top:
1px solid
rgba(255,255,255,.07);
color: #5f5e6b;
font-size: 10px;
}
.muathemewpgiare-footer strong {
color: #b3b0c0;
letter-spacing: .08em;
}
.muathemewpgiare-footer p {
margin-top: 7px;
}
/* TOAST */
.muathemewpgiare-toast {
position: fixed;
right: 25px;
bottom: 25px;
min-width: 280px;
padding: 15px;
display: flex;
align-items: center;
gap: 12px;
border:
1px solid
rgba(255,255,255,.1);
border-radius: 17px;
background:
rgba(14,14,22,.85);
backdrop-filter:
blur(20px);
box-shadow:
0 25px 70px
rgba(0,0,0,.45);
transform:
translateY(130px)
scale(.95);
opacity: 0;
transition:
.45s cubic-bezier(.2,.8,.2,1);
z-index: 500;
}
.muathemewpgiare-toast.active {
transform:
translateY(0)
scale(1);
opacity: 1;
}
.muathemewpgiare-toast-icon {
width: 37px;
height: 37px;
display: grid;
place-items: center;
border-radius: 11px;
background:
rgba(67,255,156,.1);
color: #43ff9c;
}
.muathemewpgiare-toast strong,
.muathemewpgiare-toast span {
display: block;
}
.muathemewpgiare-toast strong {
font-size: 11px;
}
.muathemewpgiare-toast span {
margin-top: 3px;
color: #777686;
font-size: 10px;
}
/* MODAL */
.muathemewpgiare-modal {
position: fixed;
inset: 0;
display: grid;
place-items: center;
padding: 20px;
visibility: hidden;
opacity: 0;
z-index: 1000;
transition: .4s;
}
.muathemewpgiare-modal.active {
visibility: visible;
opacity: 1;
}
.muathemewpgiare-modal-backdrop {
position: absolute;
inset: 0;
background:
rgba(0,0,0,.72);
backdrop-filter:
blur(15px);
}
.muathemewpgiare-modal-box {
width: min(520px, 100%);
padding: 45px;
position: relative;
z-index: 2;
border:
1px solid
rgba(255,255,255,.1);
border-radius: 28px;
background:
linear-gradient(
145deg,
#15131f,
#0a0a10
);
box-shadow:
0 40px 120px
rgba(0,0,0,.6);
transform:
translateY(30px)
scale(.94);
transition:
.45s cubic-bezier(.2,.8,.2,1);
}
.muathemewpgiare-modal.active
.muathemewpgiare-modal-box {
transform:
translateY(0)
scale(1);
}
.muathemewpgiare-modal-close {
position: absolute;
top: 20px;
right: 20px;
width: 38px;
height: 38px;
display: grid;
place-items: center;
border-radius: 11px;
color: white;
background:
rgba(255,255,255,.06);
}
.muathemewpgiare-modal-icon {
width: 60px;
height: 60px;
display: grid;
place-items: center;
border-radius: 18px;
background:
linear-gradient(
135deg,
#8b5cf6,
#06b6d4
);
box-shadow:
0 15px 40px
rgba(139,92,246,.3);
}
.muathemewpgiare-modal-label {
display: block;
margin-top: 25px;
color: #8d8b9c;
font-size: 9px;
letter-spacing: .2em;
}
.muathemewpgiare-modal-box h2 {
margin-top: 10px;
font-size: 36px;
line-height: 1;
letter-spacing: -.06em;
}
.muathemewpgiare-modal-box p {
margin: 20px 0 25px;
color: #858391;
font-size: 13px;
line-height: 1.8;
}
/* RIPPLE */
.muathemewpgiare-ripple {
position: relative;
overflow: hidden;
}
.muathemewpgiare-ripple-effect {
position: absolute;
width: 20px;
height: 20px;
border-radius: 50%;
background:
rgba(255,255,255,.35);
transform:
translate(-50%,-50%)
scale(0);
pointer-events: none;
animation:
muathemewpgiare-ripple .7s ease-out;
}
@keyframes muathemewpgiare-ripple {
to {
transform:
translate(-50%,-50%)
scale(15);
opacity: 0;
}
}
/* CURSOR */
.muathemewpgiare-cursor,
.muathemewpgiare-cursor-ring {
position: fixed;
top: 0;
left: 0;
pointer-events: none;
z-index: 9999;
transform:
translate(-50%,-50%);
}
.muathemewpgiare-cursor {
width: 7px;
height: 7px;
border-radius: 50%;
background: white;
box-shadow:
0 0 20px
rgba(255,255,255,.9);
}
.muathemewpgiare-cursor-ring {
width: 34px;
height: 34px;
border:
1px solid
rgba(255,255,255,.35);
border-radius: 50%;
transition:
width .25s,
height .25s,
border .25s;
}
body.muathemewpgiare-hovering
.muathemewpgiare-cursor-ring {
width: 60px;
height: 60px;
border-color:
rgba(168,85,247,.7);
}
/* RESPONSIVE */
@media (max-width: 1000px) {
.muathemewpgiare-nav {
display: none;
}
.muathemewpgiare-hero {
grid-template-columns: 1fr;
padding-top: 100px;
min-height: auto;
}
.muathemewpgiare-hero-visual {
height: 600px;
}
.muathemewpgiare-feature-grid {
grid-template-columns: 1fr;
}
.muathemewpgiare-showcase-grid {
grid-template-columns: 1fr;
}
.muathemewpgiare-stats-section {
grid-template-columns:
repeat(2, 1fr);
gap: 35px;
}
.muathemewpgiare-stat-item:nth-child(2) {
border-right: 0;
}
.muathemewpgiare-pricing-grid {
grid-template-columns: 1fr;
}
}
@media (max-width: 650px) {
.muathemewpgiare-header,
.muathemewpgiare-hero,
.muathemewpgiare-section,
.muathemewpgiare-stats-section,
.muathemewpgiare-footer {
width: min(
100% - 28px,
1400px
);
}
.muathemewpgiare-header {
height: 70px;
}
.muathemewpgiare-header
.muathemewpgiare-button {
display: none;
}
.muathemewpgiare-hero-title {
font-size: 48px;
}
.muathemewpgiare-hero-actions {
flex-direction: column;
}
.muathemewpgiare-hero-actions
.muathemewpgiare-button {
width: 100%;
}
.muathemewpgiare-hero-visual {
height: 460px;
}
.muathemewpgiare-dashboard-card {
padding: 20px;
}
.muathemewpgiare-dashboard-stats {
grid-template-columns: 1fr;
}
.muathemewpgiare-dashboard-stats > div {
padding: 9px;
}
.muathemewpgiare-floating-one {
right: -5px;
top: 20px;
}
.muathemewpgiare-floating-two {
left: -5px;
bottom: 25px;
}
.muathemewpgiare-stat-panel {
flex-direction: column;
gap: 30px;
}
.muathemewpgiare-stat-circle {
width: 170px;
height: 170px;
}
.muathemewpgiare-stat-copy {
text-align: center;
}
.muathemewpgiare-progress {
width: 100%;
}
.muathemewpgiare-footer {
flex-direction: column;
gap: 25px;
}
.muathemewpgiare-cursor,
.muathemewpgiare-cursor-ring {
display: none;
}
}"use strict";
/* ==========================================================
MUATHEMEWPGIARE
Advanced Interaction Engine
muathemewpgiare.com
========================================================== */
document.addEventListener(
"DOMContentLoaded",
() => {
/* =====================================================
ICON ENGINE
===================================================== */
if (window.lucide) {
lucide.createIcons();
}
/* =====================================================
LENIS SMOOTH SCROLL
===================================================== */
let muathemewpgiareLenis = null;
if (window.Lenis) {
muathemewpgiareLenis =
new Lenis({
duration: 1.15,
smoothWheel: true,
wheelMultiplier: .85,
touchMultiplier: 1.2
});
function muathemewpgiareRAF(time) {
muathemewpgiareLenis.raf(time);
requestAnimationFrame(
muathemewpgiareRAF
);
}
requestAnimationFrame(
muathemewpgiareRAF
);
}
/* =====================================================
PARTICLES
===================================================== */
if (
window.particlesJS &&
document.getElementById(
"muathemewpgiare-particles"
)
) {
particlesJS(
"muathemewpgiare-particles",
{
particles: {
number: {
value: 45,
density: {
enable: true,
value_area: 1000
}
},
color: {
value: [
"#8b5cf6",
"#00e5ff",
"#ffffff"
]
},
opacity: {
value: .22,
random: true
},
size: {
value: 2,
random: true
},
line_linked: {
enable: true,
distance: 150,
color: "#8b5cf6",
opacity: .08,
width: 1
},
move: {
enable: true,
speed: .45,
direction: "none",
random: true,
straight: false,
out_mode: "out"
}
},
interactivity: {
detect_on: "canvas",
events: {
onhover: {
enable: true,
mode: "grab"
},
onclick: {
enable: true,
mode: "push"
},
resize: true
},
modes: {
grab: {
distance: 180,
line_linked: {
opacity: .18
}
},
push: {
particles_nb: 3
}
}
},
retina_detect: true
}
);
}
/* =====================================================
VANILLA TILT
===================================================== */
if (window.VanillaTilt) {
VanillaTilt.init(
document.querySelectorAll(
"[data-tilt]"
),
{
max: 8,
perspective: 1100,
speed: 600,
glare: true,
"max-glare": .12,
scale: 1.015
}
);
}
/* =====================================================
MAGNETIC BUTTON
===================================================== */
const muathemewpgiareMagnetic =
document.querySelectorAll(
".muathemewpgiare-magnetic"
);
muathemewpgiareMagnetic.forEach(
(element) => {
element.addEventListener(
"mousemove",
(event) => {
const rect =
element.getBoundingClientRect();
const x =
event.clientX -
rect.left -
rect.width / 2;
const y =
event.clientY -
rect.top -
rect.height / 2;
gsap.to(
element,
{
x: x * .18,
y: y * .18,
duration: .35,
ease: "power3.out"
}
);
}
);
element.addEventListener(
"mouseleave",
() => {
gsap.to(
element,
{
x: 0,
y: 0,
duration: .7,
ease: "elastic.out(1,.4)"
}
);
}
);
}
);
/* =====================================================
CUSTOM CURSOR
===================================================== */
const muathemewpgiareCursor =
document.querySelector(
".muathemewpgiare-cursor"
);
const muathemewpgiareCursorRing =
document.querySelector(
".muathemewpgiare-cursor-ring"
);
if (
muathemewpgiareCursor &&
muathemewpgiareCursorRing &&
window.innerWidth > 700
) {
let cursorX = 0;
let cursorY = 0;
let ringX = 0;
let ringY = 0;
document.addEventListener(
"mousemove",
(event) => {
cursorX = event.clientX;
cursorY = event.clientY;
gsap.to(
muathemewpgiareCursor,
{
x: cursorX,
y: cursorY,
duration: .08
}
);
}
);
function muathemewpgiareCursorLoop() {
ringX +=
(cursorX - ringX) * .14;
ringY +=
(cursorY - ringY) * .14;
gsap.set(
muathemewpgiareCursorRing,
{
x: ringX,
y: ringY
}
);
requestAnimationFrame(
muathemewpgiareCursorLoop
);
}
muathemewpgiareCursorLoop();
document
.querySelectorAll(
"a, button, [data-tilt]"
)
.forEach(
(element) => {
element.addEventListener(
"mouseenter",
() => {
document.body.classList.add(
"muathemewpgiare-hovering"
);
}
);
element.addEventListener(
"mouseleave",
() => {
document.body.classList.remove(
"muathemewpgiare-hovering"
);
}
);
}
);
}
/* =====================================================
RIPPLE
===================================================== */
document
.querySelectorAll(
".muathemewpgiare-ripple"
)
.forEach(
(button) => {
button.addEventListener(
"click",
function(event) {
const rect =
this.getBoundingClientRect();
const ripple =
document.createElement(
"span"
);
ripple.className =
"muathemewpgiare-ripple-effect";
ripple.style.left =
`${event.clientX - rect.left}px`;
ripple.style.top =
`${event.clientY - rect.top}px`;
this.appendChild(
ripple
);
setTimeout(
() => {
ripple.remove();
},
700
);
}
);
}
);
/* =====================================================
TOAST
===================================================== */
const muathemewpgiareToast =
document.getElementById(
"muathemewpgiare-toast"
);
const muathemewpgiareToastMessage =
document.getElementById(
"muathemewpgiare-toast-message"
);
let muathemewpgiareToastTimer;
function muathemewpgiareShowToast(
message
) {
if (!muathemewpgiareToast) {
return;
}
muathemewpgiareToastMessage.textContent =
message;
muathemewpgiareToast.classList.add(
"active"
);
clearTimeout(
muathemewpgiareToastTimer
);
muathemewpgiareToastTimer =
setTimeout(
() => {
muathemewpgiareToast.classList.remove(
"active"
);
},
2800
);
}
document
.querySelectorAll(
"[data-toast]"
)
.forEach(
(button) => {
button.addEventListener(
"click",
() => {
muathemewpgiareShowToast(
button.dataset.toast
);
}
);
}
);
/* =====================================================
MODAL
===================================================== */
const muathemewpgiareModal =
document.getElementById(
"muathemewpgiare-modal"
);
function muathemewpgiareOpenModal() {
muathemewpgiareModal.classList.add(
"active"
);
document.body.style.overflow =
"hidden";
}
function muathemewpgiareCloseModal() {
muathemewpgiareModal.classList.remove(
"active"
);
document.body.style.overflow =
"";
}
document
.querySelectorAll(
"[data-modal-open]"
)
.forEach(
(button) => {
button.addEventListener(
"click",
muathemewpgiareOpenModal
);
}
);
document
.querySelectorAll(
"[data-modal-close]"
)
.forEach(
(button) => {
button.addEventListener(
"click",
muathemewpgiareCloseModal
);
}
);
document.addEventListener(
"keydown",
(event) => {
if (
event.key === "Escape"
) {
muathemewpgiareCloseModal();
}
}
);
/* =====================================================
SMOOTH ANCHOR
===================================================== */
document
.querySelectorAll(
"[data-scroll]"
)
.forEach(
(button) => {
button.addEventListener(
"click",
() => {
const target =
document.querySelector(
button.dataset.scroll
);
if (!target) {
return;
}
if (
muathemewpgiareLenis
) {
muathemewpgiareLenis.scrollTo(
target,
{
offset: -50
}
);
} else {
target.scrollIntoView({
behavior:
"smooth"
});
}
}
);
}
);
/* =====================================================
GSAP
===================================================== */
if (window.gsap) {
gsap.registerPlugin(
ScrollTrigger
);
/* HERO */
const heroTimeline =
gsap.timeline({
defaults: {
ease: "power3.out"
}
});
heroTimeline
.from(
".muathemewpgiare-header",
{
y: -30,
opacity: 0,
duration: .8
}
)
.from(
".muathemewpgiare-badge",
{
y: 25,
opacity: 0,
duration: .5
},
"-=.35"
)
.from(
".muathemewpgiare-hero-title",
{
y: 50,
opacity: 0,
duration: 1
},
"-=.2"
)
.from(
".muathemewpgiare-hero-description",
{
y: 25,
opacity: 0,
duration: .7
},
"-=.5"
)
.from(
".muathemewpgiare-hero-actions",
{
y: 25,
opacity: 0,
duration: .6
},
"-=.4"
)
.from(
".muathemewpgiare-hero-visual",
{
x: 80,
opacity: 0,
rotateY: 12,
duration: 1.2
},
"-=.8"
);
/* SECTION REVEAL */
gsap.utils
.toArray(
".muathemewpgiare-section-heading"
)
.forEach(
(heading) => {
gsap.from(
heading,
{
scrollTrigger: {
trigger: heading,
start: "top 80%"
},
y: 50,
opacity: 0,
duration: 1,
ease:
"power3.out"
}
);
}
);
/* FEATURE CARDS */
gsap.utils
.toArray(
".muathemewpgiare-feature-card"
)
.forEach(
(card, index) => {
gsap.from(
card,
{
scrollTrigger: {
trigger: card,
start: "top 85%"
},
y: 80,
opacity: 0,
rotateX: 12,
duration: .8,
delay:
index * .12,
ease:
"power3.out"
}
);
}
);
/* STATS */
gsap.utils
.toArray(
".muathemewpgiare-stat-item"
)
.forEach(
(item) => {
gsap.from(
item,
{
scrollTrigger: {
trigger: item,
start: "top 90%"
},
y: 30,
opacity: 0,
duration: .7
}
);
}
);
/* PROGRESS */
const progress =
document.querySelector(
"[data-progress]"
);
if (progress) {
ScrollTrigger.create({
trigger: progress,
start: "top 85%",
once: true,
onEnter: () => {
progress.style.width =
`${progress.dataset.progress}%`;
}
});
}
}
/* =====================================================
COUNTERS
===================================================== */
const muathemewpgiareCounters =
document.querySelectorAll(
"[data-counter]"
);
muathemewpgiareCounters.forEach(
(counter) => {
const target =
parseFloat(
counter.dataset.counter
);
const hasDecimal =
!Number.isInteger(
target
);
if (window.gsap) {
gsap.fromTo(
counter,
{
innerText: 0
},
{
innerText: target,
duration: 2.2,
ease: "power2.out",
snap: {
innerText:
hasDecimal
? .1
: 1
},
scrollTrigger: {
trigger: counter,
start: "top 88%",
once: true
},
onUpdate: function() {
let value =
parseFloat(
this.targets()[0]
.innerText
);
if (hasDecimal) {
counter.innerText =
value.toFixed(1);
} else {
counter.innerText =
Math.round(
value
).toLocaleString(
"en-US"
);
}
}
}
);
}
}
);
/* =====================================================
3D MOUSE PARALLAX
===================================================== */
const heroVisual =
document.querySelector(
".muathemewpgiare-hero-visual"
);
if (
heroVisual &&
window.innerWidth > 900
) {
heroVisual.addEventListener(
"mousemove",
(event) => {
const rect =
heroVisual.getBoundingClientRect();
const x =
(
event.clientX -
rect.left -
rect.width / 2
) / rect.width;
const y =
(
event.clientY -
rect.top -
rect.height / 2
) / rect.height;
gsap.to(
".muathemewpgiare-dashboard-card",
{
rotationY:
x * 7,
rotationX:
-y * 7,
duration: .7,
ease: "power2.out"
}
);
}
);
heroVisual.addEventListener(
"mouseleave",
() => {
gsap.to(
".muathemewpgiare-dashboard-card",
{
rotationY: 0,
rotationX: 0,
duration: 1,
ease:
"elastic.out(1,.5)"
}
);
}
);
}
/* =====================================================
KEYBOARD SHORTCUT
===================================================== */
document.addEventListener(
"keydown",
(event) => {
if (
event.key.toLowerCase() ===
"k" &&
(event.ctrlKey ||
event.metaKey)
) {
event.preventDefault();
muathemewpgiareShowToast(
"Command system activated"
);
}
}
);
/* =====================================================
LOG
===================================================== */
console.log(
"%c MUATHEMEWPGIARE.COM ",
"background:#8b5cf6;color:white;padding:10px 16px;border-radius:8px;font-weight:900;"
);
console.log(
"%c Advanced UI Engine initialized.",
"color:#00e5ff;font-size:12px;"
);
}
);
Ctrl1 HTML
Ctrl2 CSS
Ctrl3 JS
Ctrl↵ Reload