1 Commits

Author SHA1 Message Date
tistopandita b856dce066 feat: add animation 2026-06-05 13:09:29 +07:00
2 changed files with 103 additions and 53 deletions
+38 -19
View File
@@ -1277,13 +1277,12 @@
<section class="hero-section"> <section class="hero-section">
<div class="hero-overlay"></div> <div class="hero-overlay"></div>
<h1 class="hero-title"> <h1 class="hero-title reveal">
Study at Study at
<span class="highlight-text">Universitas Tanjungpura</span> Pontianak <span class="highlight-text">Universitas Tanjungpura</span> Pontianak
</h1> </h1>
<p class="hero-description" data-skp-i18n="skp_hero_desc"> <p class="hero-description reveal" data-skp-i18n="skp_hero_desc">
<p class="hero-description" data-skp-i18n="skp_hero_desc">
Kuliah di kampus unggulan Kalimantan Barat dengan fasilitas lengkap, Kuliah di kampus unggulan Kalimantan Barat dengan fasilitas lengkap,
lingkungan nyaman dan kehidupan mahasiswa yang terjangkau lingkungan nyaman dan kehidupan mahasiswa yang terjangkau
</p> </p>
@@ -1291,12 +1290,12 @@
<!-- ABOUT SECTION --> <!-- ABOUT SECTION -->
<section class="about-section"> <section class="about-section">
<div class="about-image-wrapper"> <div class="about-image-wrapper reveal>
<span class="image-bg-decorator"></span> <span class=" image-bg-decorator"></span>
<div class="main-image"></div> <div class="main-image"></div>
</div> </div>
<div class="about-content"> <div class="about-content reveal">
<span class="eyebrow-component" data-skp-i18n="skp_about_eyebrow">Tentang Untan</span> <span class="eyebrow-component" data-skp-i18n="skp_about_eyebrow">Tentang Untan</span>
<h2 class="about-title" data-skp-i18n="skp_about_title"> <h2 class="about-title" data-skp-i18n="skp_about_title">
@@ -1337,7 +1336,7 @@
<section class="facilities-section"> <section class="facilities-section">
<span class="eyebrow-component" data-skp-i18n="skp_fac_eyebrow">Fasilitas Kampus</span> <span class="eyebrow-component" data-skp-i18n="skp_fac_eyebrow">Fasilitas Kampus</span>
<h2 class="facilities-title" data-skp-i18n="skp_fac_main_title"> <h2 class="facilities-title reveal" data-skp-i18n="skp_fac_main_title">
Fasilitas Kampus untuk Pengalaman Belajar yang Nyaman Fasilitas Kampus untuk Pengalaman Belajar yang Nyaman
</h2> </h2>
@@ -1348,10 +1347,10 @@
<section class="campus-section"> <section class="campus-section">
<span class="eyebrow-component" data-skp-i18n="skp_campus_eyebrow">Kehidupan Kampus</span> <span class="eyebrow-component" data-skp-i18n="skp_campus_eyebrow">Kehidupan Kampus</span>
<h2 class="campus-title" data-skp-i18n="skp_campus_title"> <h2 class="campus-title reveal data-skp-i18n=" skp_campus_title">
Aktivitas Mahasiswa & Organisasi Kampus Aktivitas Mahasiswa & Organisasi Kampus
</h2> </h2>
<p class="campus-subtitle" data-skp-i18n="skp_campus_subtitle"> <p class="campus-subtitle reveal data-skp-i18n=" skp_campus_subtitle">
Mahasiswa UNTAN memiliki berbagai kesempatan untuk berkembang melalui Mahasiswa UNTAN memiliki berbagai kesempatan untuk berkembang melalui
organisasi, UKM, komunitas, dan kegiatan ekstrakurikuler. organisasi, UKM, komunitas, dan kegiatan ekstrakurikuler.
</p> </p>
@@ -1367,8 +1366,8 @@
<section class="pontianak-city-section"> <section class="pontianak-city-section">
<div class="pontianak-overlay"></div> <div class="pontianak-overlay"></div>
<div class="pontianak-content"> <div class="pontianak-content reveal>
<span class="eyebrow-component" data-skp-i18n="skp_pontianak_eyebrow">Kota Pontianak</span> <span class=" eyebrow-component" data-skp-i18n="skp_pontianak_eyebrow">Kota Pontianak</span>
<h2 class="pontianak-title" data-skp-i18n="skp_pontianak_title"> <h2 class="pontianak-title" data-skp-i18n="skp_pontianak_title">
Live In Pontianak Live In Pontianak
</h2> </h2>
@@ -1387,7 +1386,7 @@
<section class="destination-section"> <section class="destination-section">
<span class="eyebrow-component" data-skp-i18n="skp_dest_eyebrow">Wisata & Destinasi</span> <span class="eyebrow-component" data-skp-i18n="skp_dest_eyebrow">Wisata & Destinasi</span>
<h2 class="destination-title" data-skp-i18n="skp_dest_title"> <h2 class="destination-title reveal data-skp-i18n=" skp_dest_title">
Tempat Menarik di Pontianak Tempat Menarik di Pontianak
</h2> </h2>
@@ -1400,7 +1399,7 @@
<section class="culinary-section"> <section class="culinary-section">
<span class="eyebrow-component" data-skp-i18n="skp_cul_eyebrow">Cafe & Kuliner</span> <span class="eyebrow-component" data-skp-i18n="skp_cul_eyebrow">Cafe & Kuliner</span>
<h2 class="culinary-title" data-skp-i18n="skp_cul_title"> <h2 class="culinary-title reveal" data-skp-i18n="skp_cul_title">
Kuliner dan Coffee Shop Favorit Mahasiswa Kuliner dan Coffee Shop Favorit Mahasiswa
</h2> </h2>
<hr class="culinary-divider" /> <hr class="culinary-divider" />
@@ -1417,7 +1416,7 @@
<div class="cost-banner-overlay"></div> <div class="cost-banner-overlay"></div>
</div> </div>
<div class="cost-info-panel"> <div class="cost-info-panel reveal">
<span class="eyebrow-component" data-skp-i18n="skp_cost_eyebrow">Biaya Hidup Mahasiswa</span> <span class="eyebrow-component" data-skp-i18n="skp_cost_eyebrow">Biaya Hidup Mahasiswa</span>
<h2 class="cost-title" data-skp-i18n="skp_cost_title"> <h2 class="cost-title" data-skp-i18n="skp_cost_title">
@@ -1715,7 +1714,7 @@
typeof skpT === "function" ? skpT(item.descKey) : item.descKey; typeof skpT === "function" ? skpT(item.descKey) : item.descKey;
cardsHtmlHTML += ` cardsHtmlHTML += `
<div class="facility-card"> <div class="facility-card reveal">
<img src="${item.imgSrc}" alt="${displayTitle}" class="card-image" loading="lazy" decoding="async" /> <img src="${item.imgSrc}" alt="${displayTitle}" class="card-image" loading="lazy" decoding="async" />
<div class="card-body"> <div class="card-body">
<span class="card-icon-badge"> <span class="card-icon-badge">
@@ -1855,7 +1854,7 @@
typeof skpT === "function" ? skpT(dir.descKey) : dir.descKey; typeof skpT === "function" ? skpT(dir.descKey) : dir.descKey;
return ` return `
<div class="directory-card"> <div class="directory-card reveal">
<div class="img-wrapper"> <div class="img-wrapper">
<img src="${dir.image}" alt="${displayTitle}" loading="lazy" decoding="async" /> <img src="${dir.image}" alt="${displayTitle}" loading="lazy" decoding="async" />
</div> </div>
@@ -1991,7 +1990,7 @@
typeof skpT === "function" ? skpT(dest.descKey) : dest.descKey; typeof skpT === "function" ? skpT(dest.descKey) : dest.descKey;
return ` return `
<div class="destination-card" style="background-image: url('${dest.image}')"> <div class="destination-card reveal" style="background-image: url('${dest.image}')">
<div class="card-overlay"></div> <div class="card-overlay"></div>
<div class="card-content"> <div class="card-content">
<h3 class="card-name">${displayName}</h3> <h3 class="card-name">${displayName}</h3>
@@ -2144,7 +2143,7 @@
typeof skpT === "function" ? skpT(item.descKey) : item.descKey; typeof skpT === "function" ? skpT(item.descKey) : item.descKey;
return ` return `
<div class="culinary-card"> <div class="culinary-card reveal">
<img src="${item.image}" alt="${item.name}" class="card-thumb" loading="lazy" decoding="async" /> <img src="${item.image}" alt="${item.name}" class="card-thumb" loading="lazy" decoding="async" />
<div class="card-body"> <div class="card-body">
<h3>${item.name}</h3> <h3>${item.name}</h3>
@@ -2209,7 +2208,7 @@
typeof skpT === "function" ? skpT("skp_cost_period") : "per bulan"; typeof skpT === "function" ? skpT("skp_cost_period") : "per bulan";
return ` return `
<div class="cost-item-card"> <div class="cost-item-card reveal">
${detail.iconSvg} ${detail.iconSvg}
<p class="cost-type">${displayType}</p> <p class="cost-type">${displayType}</p>
<p class="cost-price">Rp ${detail.price}</p> <p class="cost-price">Rp ${detail.price}</p>
@@ -2226,6 +2225,26 @@
renderLivingCostCards(); renderLivingCostCards();
}); });
</script> </script>
<script>
document.addEventListener("DOMContentLoaded", () => {
const reveals = document.querySelectorAll(".reveal");
const observer = new IntersectionObserver((entries) => {
entries.forEach((entry) => {
if (entry.isIntersecting) {
entry.target.classList.add("active");
observer.unobserve(entry.target);
}
});
}, {
threshold: 0.15
});
reveals.forEach((element) => {
observer.observe(element);
});
});
</script>
</body> </body>
</html> </html>
+65 -34
View File
@@ -119,7 +119,7 @@ body {
display: block; display: block;
} }
.article-body > * + * { .article-body>*+* {
margin-top: 1.1em; margin-top: 1.1em;
} }
@@ -300,12 +300,10 @@ body {
position: absolute; position: absolute;
inset: 0; inset: 0;
z-index: 1; z-index: 1;
background: linear-gradient( background: linear-gradient(270deg,
270deg, rgba(0, 0, 0, 0) 21.76%,
rgba(0, 0, 0, 0) 21.76%, rgba(0, 0, 0, 0.4) 63.31%,
rgba(0, 0, 0, 0.4) 63.31%, rgba(0, 49, 80, 0.72) 78.24%);
rgba(0, 49, 80, 0.72) 78.24%
);
} }
/* Judul Hero */ /* Judul Hero */
@@ -427,7 +425,7 @@ body {
font-size: 8px; font-size: 8px;
font-weight: 500; font-weight: 500;
p + p { p+p {
margin-top: 8px; margin-top: 8px;
} }
} }
@@ -984,12 +982,10 @@ body {
.pontianak-overlay { .pontianak-overlay {
position: absolute; position: absolute;
inset: 0; inset: 0;
background: linear-gradient( background: linear-gradient(0deg,
0deg, rgba(0, 0, 0, 0.9) -14.48%,
rgba(0, 0, 0, 0.9) -14.48%, rgba(0, 0, 0, 0.4) 42.76%,
rgba(0, 0, 0, 0.4) 42.76%, rgba(0, 0, 0, 0) 100%);
rgba(0, 0, 0, 0) 100%
);
z-index: 1; z-index: 1;
} }
@@ -1132,12 +1128,10 @@ body {
.card-overlay { .card-overlay {
position: absolute; position: absolute;
inset: 0; inset: 0;
background: linear-gradient( background: linear-gradient(0deg,
0deg, rgba(0, 0, 0, 0.8) 0%,
rgba(0, 0, 0, 0.8) 0%, rgba(0, 0, 0, 0.2) 50%,
rgba(0, 0, 0, 0.2) 50%, rgba(0, 0, 0, 0) 100%);
rgba(0, 0, 0, 0) 100%
);
z-index: 1; z-index: 1;
} }
@@ -1406,12 +1400,10 @@ body {
.cost-banner-overlay { .cost-banner-overlay {
position: absolute; position: absolute;
inset: 0; inset: 0;
background: linear-gradient( background: linear-gradient(0deg,
0deg, #012338 0%,
#012338 0%, rgba(1, 35, 56, 0.4) 55%,
rgba(1, 35, 56, 0.4) 55%, rgba(1, 35, 56, 0) 100%);
rgba(1, 35, 56, 0) 100%
);
} }
} }
@@ -1534,12 +1526,10 @@ body {
/* Perubahan Arah Gradasi: Mengabur ke arah kiri panel Navy */ /* Perubahan Arah Gradasi: Mengabur ke arah kiri panel Navy */
.cost-banner-overlay { .cost-banner-overlay {
background: linear-gradient( background: linear-gradient(270deg,
270deg, #012338 0%,
#012338 0%, rgba(0, 0, 0, 0.4) 65%,
rgba(0, 0, 0, 0.4) 65%, rgba(0, 0, 0, 0) 78%);
rgba(0, 0, 0, 0) 78%
);
} }
} }
@@ -1634,13 +1624,13 @@ body.lang-pending {
will-change: box-shadow; will-change: box-shadow;
} }
#nav-wrapper > div:first-child { #nav-wrapper>div:first-child {
transform: translateZ(0); transform: translateZ(0);
-webkit-transform: translateZ(0); -webkit-transform: translateZ(0);
} }
@media (max-width: 1023px) { @media (max-width: 1023px) {
#nav-wrapper > div:first-child { #nav-wrapper>div:first-child {
min-height: 0 !important; min-height: 0 !important;
max-height: none; max-height: none;
} }
@@ -1658,6 +1648,7 @@ body.lang-pending {
} }
@media (prefers-reduced-motion: reduce) { @media (prefers-reduced-motion: reduce) {
*, *,
*::before, *::before,
*::after { *::after {
@@ -1832,6 +1823,7 @@ body.lang-pending {
} }
@keyframes lucoPulse { @keyframes lucoPulse {
0%, 0%,
100% { 100% {
transform: scale(1); transform: scale(1);
@@ -1878,6 +1870,7 @@ body.lang-pending {
} }
@keyframes bounce { @keyframes bounce {
0%, 0%,
80%, 80%,
100% { 100% {
@@ -1901,3 +1894,41 @@ body.lang-pending {
border-right: 1px solid #e2e8f0; border-right: 1px solid #e2e8f0;
border-bottom: 1px solid #e2e8f0; border-bottom: 1px solid #e2e8f0;
} }
/* ===== PAGE LOAD ANIMATIONS ===== */
@keyframes fadeInUplarge {
from {
opacity: 0;
transform: translateY(30px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
@keyframes fadeIn {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
/* Hero */
.reveal {
opacity: 0;
transform: translateY(50px);
transition:
opacity 0.8s ease,
transform 0.8s ease;
}
.reveal.active {
opacity: 1;
transform: translateY(0);
}