feat: update footer hospital information, adjust CSS breakpoints, and reorganize main content blocks with new news and events sections.

This commit is contained in:
2026-07-20 15:13:28 +07:00
parent fdbbb7c965
commit d6d722386f
36 changed files with 546 additions and 598 deletions
+84 -63
View File
@@ -4,75 +4,96 @@
<div class="l--layout l--full">
<div class="lr--layout-region lr--main">
<div class="cc--component-container cc--homepage-hero">
<div class="c--component c--homepage-hero">
<div class="slides-container">
<div class="image-video-container has-video">
<img src="https://www.umass.edu/sites/default/files/styles/1_1_1920x1920/public/2025-09/250616_UMASS_4515.jpg" alt="Students collaborate using a driving simulator in the UMass Center for Transportation." srcset="https://www.umass.edu/sites/default/files/styles/1_1_1920x1920/public/2025-09/250616_UMASS_4515.jpg?h=9855f42d&amp;itok=d27r8GaT 1920w" />
<div class="f--ambient-video">
<video allowfullscreen="allowfullscreen" role="presentation" tabindex="-1" loop autoplay playsinline="" muted controls>
<source src="https://api-files.sproutvideo.com/file/aa9ad8b61e11ebc420/de09e4945c49091f/1080.mp4" type="video/mp4" />
</video>
</div>
<div data-once="ambientVideo" class="video-controls">
<div class="video-controls-inner">
<button aria-labelledby="pauseBtn" class="video-button video-pause-button">
<svg height="14" viewBox="0 0 10 14" width="10" xmlns="http://www.w3.org/2000/svg">
<title id="pauseBtn">Pause Background Video</title>
<path d="m1143 711v14h-3v-14zm7 0v14h-3v-14z" fill="#fff" fill-rule="evenodd" transform="translate(-1140 -711)"></path>
</svg>
</button>
<button aria-labelledby="playBtn" class="video-button video-play-button">
<svg height="29" viewBox="0 0 29 29" width="29" xmlns="http://www.w3.org/2000/svg">
<title id="playBtn">Play Background Video</title>
<path d="m17.5 3c-7.99789474 0-14.5 6.50210526-14.5 14.5 0 7.9978947 6.50210526 14.5 14.5 14.5 7.9978947 0 14.5-6.5021053 14.5-14.5 0-7.99789474-6.5021053-14.5-14.5-14.5zm5.6763936 15.2939067-7.3503366 4.5939604c-.6635721.408352-1.5313202-.051044-1.5313202-.8422261v-9.1879207c0-.7911821.8677481-1.2761001 1.5313202-.8422261l7.3503366 4.5939604c.612528.38283.612528 1.3016221 0 1.6844521z" fill="#fff" fill-rule="evenodd" transform="translate(-3 -3)"></path>
</svg>
</button>
</div>
</div>
<div class="c--component c--homepage-hero" style="position: relative; overflow: hidden; height: 100vh; max-height: 38.125rem;">
<!-- ====== LỚP 1: ẢNH TĨNH (Nằm dưới cùng, sẽ hiện trên Mobile) ====== -->
<img class="static-fallback-image" src="https://res.cloudinary.com/ipufdhda/image/upload/v1784534008/BANNER-WEB-scaled_yeox4u.jpg" alt="Static Fallback" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; object-fit: cover; z-index: 1;" />
<!-- ====== LỚP 2: SLIDER (Chạy nếu không có Video, Ẩn trên Mobile) ====== -->
<div class="vanilla-slider desktop-slider" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; z-index: 2;">
<div class="v-slide" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; opacity: 1; transition: opacity 1s ease-in-out;">
<img src="https://res.cloudinary.com/ipufdhda/image/upload/v1784534008/BANNER-WEB-01-scaled_epe5ui.jpg" style="width: 100%; height: 100%; object-fit: cover;" />
</div>
<div class="text-container centered">
<div class="slide-text-container-inner">
<h3>
<a href="https://www.umass.edu/gateway/why-umass">Stroke International School.</a>
</h3>
<div class="f--field f--button">
<a href="https://www.umass.edu/gateway/why-umass" aria-label="Learn More Learn more about UMass Amherst." data-component-id="umass_base:button" class="button-secondary button-context-dark">
<span class="button-text"> Learn More </span>
</a>
</div>
<nav class="mc--menu mc--info-menu" th:if="${infoMenu != null and not #lists.isEmpty(infoMenu.items)}">
<ul class="menu m--menu m--info-menu">
<li class="menu-item menu-item--expanded">
<details class="utility-button-wrapper mc--info-menu-container">
<summary type="button" aria-label="Display submenu for Information menu" aria-expanded="false" aria-haspopup="true" class="utility-button arrow-toggle information-for-toggle">
<span th:text="${infoMenu.name}">Info For</span>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 16 7" enable-background="new 0 0 16 7" xml:space="preserve" width="16" height="7" class="arrow">
<polygon fill-rule="evenodd" clip-rule="evenodd" fill="#ffffff" points="7,7 0,0 16,0 "></polygon>
</svg>
</summary>
<div class="submenu-wrapper">
<ul class="submenu">
<li class="menu-item" th:each="item : ${infoMenu.items}">
<a th:href="${item.url}" th:text="${item.label}">Prospective Students</a>
</li>
</ul>
</div>
</details>
<div class="submenu-wrapper-desktop">
<ul class="submenu">
<li class="menu-item" th:each="item : ${infoMenu.items}">
<a th:href="${item.url}" th:text="${item.label}">Prospective Students</a>
</li>
</ul>
</div>
</li>
</ul>
</nav>
<div class="v-slide" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; opacity: 0; transition: opacity 1s ease-in-out;">
<img src="https://res.cloudinary.com/ipufdhda/image/upload/v1784534008/BANNER-WEB-scaled_yeox4u.jpg" style="width: 100%; height: 100%; object-fit: cover;" />
</div>
<div class="v-slide" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; opacity: 0; transition: opacity 1s ease-in-out;">
<img src="https://res.cloudinary.com/ipufdhda/image/upload/v1784534009/W2-01-scaled_jhmzlv.jpg" style="width: 100%; height: 100%; object-fit: cover;" />
</div>
<!-- Nút điều khiển Slider -->
<div class="v-btn v-prev" style="position: absolute; left: 20px; top: 50%; transform: translateY(-50%); color: white; font-size: 50px; font-weight: bold; cursor: pointer; z-index: 10; pointer-events: auto; text-shadow: 0 2px 4px rgba(0,0,0,0.5); user-select: none;">&#10094;</div>
<div class="v-btn v-next" style="position: absolute; right: 20px; top: 50%; transform: translateY(-50%); color: white; font-size: 50px; font-weight: bold; cursor: pointer; z-index: 10; pointer-events: auto; text-shadow: 0 2px 4px rgba(0,0,0,0.5); user-select: none;">&#10095;</div>
</div>
<!-- ====== LỚP 3: VIDEO (Nằm trên cùng, đè lên Slider, Ẩn trên Mobile) ====== -->
<div class="f--ambient-video desktop-video" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; z-index: 3; pointer-events: none;">
<video allowfullscreen="allowfullscreen" role="presentation" tabindex="-1" loop="loop" autoplay="autoplay" playsinline="playsinline" muted="muted" style="width: 100%; height: 100%; object-fit: cover;">
<source src="https://res.cloudinary.com/ipufdhda/video/upload/v1784530171/homepage_f4xed9.mp4" type="video/mp4" />
</video>
</div>
<!-- ====== LỚP 4: TEXT OVERLAY (Nội dung chữ nằm trên tất cả) ====== -->
<div class="text-container centered" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; z-index: 4; pointer-events: none;">
<div class="slide-text-container-inner" style="pointer-events: auto;">
<h3>
<a href="https://www.umass.edu/gateway/why-umass">Stroke International School.</a>
</h3>
<div class="f--field f--button">
<a href="https://www.umass.edu/gateway/why-umass" aria-label="Learn More" data-component-id="umass_base:button" class="button-secondary button-context-dark">
<span class="button-text"> Tìm Hiểu Thêm </span>
</a>
</div>
[menu:INFO:dropdown]
</div>
</div>
</div>
</div>
<style>
/* Ẩn Video và Slider trên điện thoại, chỉ chừa lại Lớp 1 (Ảnh tĩnh) */
@media (max-width: 767px) {
.desktop-slider,
.desktop-video {
display: none !important;
}
}
</style>
<script>
document.addEventListener('DOMContentLoaded', function () {
const slides = document.querySelectorAll('.vanilla-slider .v-slide');
const nextBtn = document.querySelector('.vanilla-slider .v-next');
const prevBtn = document.querySelector('.vanilla-slider .v-prev');
let currentSlide = 0;
let slideInterval;
function goToSlide(index) {
if (!slides.length) return;
slides[currentSlide].style.opacity = 0;
currentSlide = (index + slides.length) % slides.length;
slides[currentSlide].style.opacity = 1;
}
function nextSlide() { goToSlide(currentSlide + 1); }
function prevSlide() { goToSlide(currentSlide - 1); }
function startAutoPlay() {
if (slideInterval) clearInterval(slideInterval);
slideInterval = setInterval(nextSlide, 3000);
}
if (slides.length > 0 && nextBtn && prevBtn) {
nextBtn.addEventListener('click', function() { nextSlide(); startAutoPlay(); });
prevBtn.addEventListener('click', function() { prevSlide(); startAutoPlay(); });
startAutoPlay();
}
});
</script>
</div>
</div>
</div>