feat: update charity project assets, add livestream media, and clean up temporary migration scripts

This commit is contained in:
2026-07-15 16:37:05 +07:00
parent f4e24a0e00
commit fd4ad87a32
168 changed files with 3596 additions and 717 deletions
@@ -56,7 +56,7 @@ public class SecurityConfiguration {
authz
.requestMatchers(HttpMethod.GET, "/", "/about", "/flex-finish", "/tin-tuc", "/tin-tuc/**", "/lien-he",
"/manage/login", "/css/**", "/images/**", "/js/**", "/vendor/**", "/fonts/**", "/login-assets/**", "/UMass*/**", "/Undergraduate*/**",
"/favicon.ico", "/favicons/**", "/flex-finish/**", "/contact-us/**", "/uploads/**", "/api/manage/snippets/**", "/page/**", "/news/article/**", "/post/**", "/error",
"/favicon.ico", "/favicons/**", "/flex-finish/**", "/contact-us/**", "/uploads/**", "/upload/**", "/api/manage/snippets/**", "/page/**", "/news/article/**", "/post/**", "/error",
"/about-us", "/specialty", "/doctor", "/service", "/health-library", "/news-and-events", "/patient-support", "/medical-expert", "/umcers", "/bidding", "/contact-us", "/theme-assets/**")
.permitAll()
.requestMatchers(HttpMethod.POST, "/api/manage/media/upload").permitAll()
@@ -224,6 +224,7 @@ public class ComponentTemplateService {
itemHtml = itemHtml.replace("{{excerpt}}", safeExcerpt);
itemHtml = itemHtml.replace("{{content}}", post.getContent() != null ? parseContentToHtml(post.getContent()) : "");
itemHtml = itemHtml.replace("{{metaDescription}}", post.getMetaDescription() != null ? org.springframework.web.util.HtmlUtils.htmlEscape(post.getMetaDescription()) : "");
itemHtml = itemHtml.replace("{{{metaDescriptionRaw}}}", post.getMetaDescription() != null ? post.getMetaDescription() : "");
itemHtml = itemHtml.replace("{{featuredImageUrl}}", post.getFeaturedImage() != null ? post.getFeaturedImage() : "");
String dateStr = post.getCreatedDate() != null ? formatter.format(post.getCreatedDate()) : "";
itemHtml = itemHtml.replace("{{date}}", dateStr);
@@ -1,7 +1,7 @@
/* Custom CSS - This file has the highest priority and will override other styles */
/* ==========================================================================
Design System Tokens (Project-wide CSS Variables)
1. Design System Tokens (Project-wide CSS Variables)
========================================================================== */
:root {
/* Primary brand colors */
@@ -36,11 +36,27 @@
--radius-lg: 8px;
}
/* ==========================================================================
2. Global / Base Overrides
========================================================================== */
[data-component-id="umass_base:tophat"] {
background-color: transparent !important;
}
/* Creates an overlay gradient on top of the ambient video */
/* Navigation Container (Base) */
.navigation-container {
display: flex;
align-items: center;
justify-content: flex-end;
gap: 1.5rem;
flex-grow: 1;
}
/* ==========================================================================
3. Component Styles (Global)
========================================================================== */
/* --- Ambient Video --- */
.f--ambient-video {
position: relative;
}
@@ -60,266 +76,7 @@
/* Ensures it sits above the video */
}
/* News Grid Tablet Layout */
@media screen and (min-width: 769px) and (max-width: 1024px) {
.news-list {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 24px;
align-items: stretch;
}
.featured-grid__item {
height: 100%;
display: flex;
}
.featured-grid__item .news-card--featured {
display: flex;
flex-direction: column;
align-items: flex-start;
border: 1px solid #881C1C;
border-radius: 16px;
padding: 16px;
box-sizing: border-box;
width: 100%;
height: 100%;
gap: 16px;
background: #fff;
margin-bottom: 0 !important;
}
.featured-grid__item .news-card__image {
flex: none;
width: 100%;
aspect-ratio: 1 / 1;
margin-bottom: 0 !important;
}
.featured-grid__item .news-card__image > div {
height: 100%;
width: 100%;
}
.featured-grid__item .news-card__image img {
width: 100%;
height: 100%;
object-fit: cover;
object-position: center;
border-radius: 8px;
}
.featured-grid__item .news-card__content {
flex: 1;
display: flex;
flex-direction: column;
justify-content: flex-start;
min-width: 0;
padding: 0 !important;
margin: 0 !important;
}
.featured-grid__item .featured-grid__category {
margin-bottom: 12px;
}
.featured-grid__item .featured-grid__category a {
display: inline-block;
background-color: #f2f2f2;
color: #881C1C;
padding: 4px 8px;
border-radius: 4px;
font-size: 0.75rem;
font-weight: bold;
text-decoration: none;
text-transform: uppercase;
}
.featured-grid__item .news-card__title {
font-size: 1.1rem;
font-weight: 700;
margin-top: 0;
margin-bottom: 12px;
line-height: 1.4;
}
.featured-grid__item .news-card__title a {
color: #000;
text-decoration: none;
}
.featured-grid__item .news-card__title a:hover {
color: #881C1C;
}
.featured-grid__item .news-card__date {
margin-top: auto;
color: #881C1C;
font-size: 0.85rem;
font-weight: 500;
}
}
/* News Grid Desktop Layout */
@media screen and (min-width: 1025px){
.news-list {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 24px;
align-items: stretch;
}
.education-column .news-list {
grid-template-columns: repeat(3, 1fr);
}
.featured-grid__item {
height: 100%;
display: flex;
}
.featured-grid__item .news-card--featured {
display: flex;
flex-direction: row;
align-items: flex-start;
border: 1px solid #881C1C;
border-radius: 16px;
padding: 16px;
box-sizing: border-box;
width: 100%;
height: 100%;
gap: 16px;
background: #fff;
margin-bottom: 0 !important;
}
.featured-grid__item .news-card__image {
flex: 0 0 170px;
width: 100%;
height: 170px;
margin-bottom: 0 !important;
}
.featured-grid__item .news-card__image > div {
height: 100%;
width: 100%;
}
.featured-grid__item .news-card__image img {
width: 100%;
height: 100%;
object-fit: cover;
object-position: center;
border-radius: 8px;
}
.featured-grid__item .news-card__content {
flex: 1;
display: flex;
flex-direction: column;
justify-content: flex-start;
min-width: 0;
padding: 0 !important;
margin: 0 !important;
}
.featured-grid__item .featured-grid__category {
margin-bottom: 12px;
}
.featured-grid__item .featured-grid__category a {
display: inline-block;
background-color: #f2f2f2;
color: #881C1C;
padding: 4px 8px;
border-radius: 4px;
font-size: 0.75rem;
font-weight: bold;
text-decoration: none;
text-transform: uppercase;
}
.featured-grid__item .news-card__title {
font-size: 1.1rem;
font-weight: 700;
margin-top: 0;
margin-bottom: 12px;
line-height: 1.4;
}
.featured-grid__item .news-card__title a {
color: #000;
text-decoration: none;
}
.featured-grid__item .news-card__title a:hover {
color: #881C1C;
}
.featured-grid__item .news-card__date {
margin-top: auto;
color: #881C1C;
font-size: 0.85rem;
font-weight: 500;
}
}
/* ==========================================================================
Desktop Layouts (>= 1024px)
========================================================================== */
@media screen and (min-width: 1025px) {
/* Side-by-side layout for News and Events */
.news-events-row {
display: flex;
flex-direction: row;
gap: 40px;
align-items: stretch;
}
.news-events-row > .news-column {
flex: 1.8;
min-width: 0;
}
.news-events-row > .events-column {
flex: 1;
min-width: 0;
}
}
/* ==========================================================================
Navigation Container & Mobile Menu
========================================================================== */
/* --- Desktop (>1024px) --- */
.navigation-container {
display: flex;
align-items: center;
justify-content: flex-end;
gap: 1.5rem;
flex-grow: 1;
}
/* Desktop: show horizontal menu, hide hamburger */
@media (min-width: 1025px) {
#mobile-hamburger {
display: none !important;
}
#mobile-flyout-container {
display: flex !important;
align-items: center;
}
.primary-navigation {
display: flex;
align-items: center;
}
/* Desktop: hide arrow toggles and back buttons */
.mc--main-menu .arrow-toggle,
.mc--main-menu .button-back,
.mc--main-menu .navigation-title {
display: none !important;
}
/* Desktop: horizontal main menu */
.m--main-menu {
display: flex;
gap: 0;
list-style: none;
margin: 0;
padding: 0;
}
.m--main-menu > .menu-item > .link-arrow-wrapper > a {
text-transform: uppercase;
font-weight: 700;
padding: 10px 15px;
white-space: nowrap;
}
}
/* --- Mobile (<= 768px) --- */
@media (max-width: 768px) {
/* Hide ambient video on mobile to save bandwidth and use image fallback */
.f--ambient-video,
.video-controls {
display: none !important;
}
}
/* Override Tabbed Media Content text colors since background was changed to light gray */
/* --- Tabbed Media Content --- */
.cc--tabbed-media-content .f--description p {
color: #000000 !important;
}
@@ -327,7 +84,6 @@
color: var(--color-brand) !important;
}
/* Style tab labels and borders to black */
.cc--tabbed-media-content .tab-labels-inner {
border-bottom-color: #cccccc !important; /* light gray line for the tab row */
}
@@ -340,13 +96,37 @@
border-bottom: 3px solid #000000 !important; /* solid black underline for active tab */
}
/* Center children inside tabbed-media-content-media-col */
.cc--tabbed-media-content .tabbed-media-content-media-col {
align-items: center !important;
justify-content: center !important;
}
/* --- Mobile & Tablet (<=1024px) --- */
/* ==========================================================================
4. Media Queries
========================================================================== */
/* --- Mobile (<= 768px) --- */
@media (max-width: 768px) {
/* Hide ambient video on mobile to save bandwidth and use image fallback */
.f--ambient-video,
.video-controls {
display: none !important;
}
.cc--tabbed-media-content {
.c--tabbed-media-content {
max-width: var(--max-width);
margin: 0 auto;
padding: var(--s2) var(--s1);
display: grid;
grid-template-columns: 1fr;
gap: var(--s2);
}
}
}
/* --- Mobile & Tablet (<= 1024px) --- */
@media (max-width: 1024px) {
.navigation-container {
gap: 0.5rem;
@@ -454,8 +234,6 @@
.arrow-toggle {
background: none;
border: none;
/* border-left: 1px solid #e0e0e0; */
/* padding: 15px 20px; */
cursor: pointer;
display: flex;
align-items: center;
@@ -469,8 +247,6 @@
transform: rotate(180deg);
}
/* Submenu list */
.submenu {
list-style: none;
@@ -516,8 +292,239 @@
}
}
/* On Desktop, hide mobile-only elements */
@media (min-width: 1366) {
/* --- Tablet Only (769px to 1024px) --- */
@media screen and (min-width: 769px) and (max-width: 1024px) {
.news-list {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 24px;
align-items: stretch;
}
.featured-grid__item {
height: 100%;
display: flex;
}
.featured-grid__item .news-card--featured {
display: flex;
flex-direction: column;
align-items: flex-start;
border: 1px solid #881C1C;
border-radius: 16px;
padding: 16px;
box-sizing: border-box;
width: 100%;
height: 100%;
gap: 16px;
background: #fff;
margin-bottom: 0 !important;
}
.featured-grid__item .news-card__image {
flex: none;
width: 100%;
aspect-ratio: 1 / 1;
margin-bottom: 0 !important;
}
.featured-grid__item .news-card__image > div {
height: 100%;
width: 100%;
}
.featured-grid__item .news-card__image img {
width: 100%;
height: 100%;
object-fit: cover;
object-position: center;
border-radius: 8px;
}
.featured-grid__item .news-card__content {
flex: 1;
display: flex;
flex-direction: column;
justify-content: flex-start;
min-width: 0;
padding: 0 !important;
margin: 0 !important;
}
.featured-grid__item .featured-grid__category {
margin-bottom: 12px;
}
.featured-grid__item .featured-grid__category a {
display: inline-block;
background-color: #f2f2f2;
color: #881C1C;
padding: 4px 8px;
border-radius: 4px;
font-size: 0.75rem;
font-weight: bold;
text-decoration: none;
text-transform: uppercase;
}
.featured-grid__item .news-card__title {
font-size: 1.1rem;
font-weight: 700;
margin-top: 0;
margin-bottom: 12px;
line-height: 1.4;
}
.featured-grid__item .news-card__title a {
color: #000;
text-decoration: none;
}
.featured-grid__item .news-card__title a:hover {
color: #881C1C;
}
.featured-grid__item .news-card__date {
margin-top: auto;
color: #881C1C;
font-size: 0.85rem;
font-weight: 500;
}
}
/* --- Desktop (>= 1025px) --- */
@media screen and (min-width: 1025px) {
/* News Grid */
.news-list {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 24px;
align-items: stretch;
}
.education-column .news-list {
grid-template-columns: repeat(3, 1fr);
}
.featured-grid__item {
height: 100%;
display: flex;
}
.featured-grid__item .news-card--featured {
display: flex;
flex-direction: row;
align-items: flex-start;
border: 1px solid #881C1C;
border-radius: 16px;
padding: 16px;
box-sizing: border-box;
width: 100%;
height: 100%;
gap: 16px;
background: #fff;
margin-bottom: 0 !important;
}
.featured-grid__item .news-card__image {
flex: 0 0 170px;
width: 100%;
height: 170px;
margin-bottom: 0 !important;
}
.featured-grid__item .news-card__image > div {
height: 100%;
width: 100%;
}
.featured-grid__item .news-card__image img {
width: 100%;
height: 100%;
object-fit: cover;
object-position: center;
border-radius: 8px;
}
.featured-grid__item .news-card__content {
flex: 1;
display: flex;
flex-direction: column;
justify-content: flex-start;
min-width: 0;
padding: 0 !important;
margin: 0 !important;
}
.featured-grid__item .featured-grid__category {
margin-bottom: 12px;
}
.featured-grid__item .featured-grid__category a {
display: inline-block;
background-color: #f2f2f2;
color: #881C1C;
padding: 4px 8px;
border-radius: 4px;
font-size: 0.75rem;
font-weight: bold;
text-decoration: none;
text-transform: uppercase;
}
.featured-grid__item .news-card__title {
font-size: 1.1rem;
font-weight: 700;
margin-top: 0;
margin-bottom: 12px;
line-height: 1.4;
}
.featured-grid__item .news-card__title a {
color: #000;
text-decoration: none;
}
.featured-grid__item .news-card__title a:hover {
color: #881C1C;
}
.featured-grid__item .news-card__date {
margin-top: auto;
color: #881C1C;
font-size: 0.85rem;
font-weight: 500;
}
/* Side-by-side layout for News and Events */
.news-events-row {
display: flex;
flex-direction: row;
gap: 40px;
align-items: stretch;
}
.news-events-row > .news-column {
flex: 1.8;
min-width: 0;
}
.news-events-row > .events-column {
flex: 1;
min-width: 0;
}
/* Navigation Container */
#mobile-hamburger {
display: none !important;
}
#mobile-flyout-container {
display: flex !important;
align-items: center;
}
.primary-navigation {
display: flex;
align-items: center;
}
/* Hide arrow toggles and back buttons */
.mc--main-menu .arrow-toggle,
.mc--main-menu .button-back,
.mc--main-menu .navigation-title {
display: none !important;
}
/* Horizontal main menu */
.m--main-menu {
display: flex;
gap: 0;
list-style: none;
margin: 0;
padding: 0;
}
.m--main-menu > .menu-item > .link-arrow-wrapper > a {
text-transform: uppercase;
font-weight: 700;
padding: 10px 15px;
white-space: nowrap;
}
}
/* --- Large Desktop (>= 1366px) --- */
@media screen and (min-width: 1366px) {
.mobile-only {
display: none !important;
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 176 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 191 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 170 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 196 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 812 KiB

@@ -4,189 +4,190 @@
<div class="region region-footer r--region r--footer">
<div class="lc--layout-container lc--full">
<div class="l--layout l--full">
<section class="cc-component-container cc--footer" aria-label="Site Footer">
<section class="cc-component-container cc--footer" aria-label="Site Footer" style="background-color: var(--color-brand);">
<div class="c--component c--footer">
<div class="footer-top">
<div class="branding-container">
<div id="block-footerbranding" class="block block-fixed-block-content block-fixed-block-contentfooter-branding cc--component-container cc--footer-branding">
<div class="c--component c--footer-branding">
<a class="logo" href="/" aria-label="Sisvietnamvn">
<div>
<img th:src="@{/theme-assets/umass/images/logo.png}" alt="Sisvietnamvn" style="height: 180px ; width: auto;" />
</div>
</a>
</div>
<style>
.sis-footer-custom {
display: flex;
flex-wrap: wrap;
padding: 40px 20px;
gap: 60px;
color: #fff;
font-family: var(--font-family-base, 'Inter', sans-serif);
justify-content: center;
margin: 0;
}
.sis-footer-left {
flex: 0 0 320px;
display: flex;
flex-direction: column;
align-items: center;
text-align: center;
}
.sis-footer-logo {
max-width: 250px;
margin-bottom: 20px;
}
.sis-social-text {
font-size: 0.95rem;
margin-bottom: 12px;
font-weight: 500;
}
.sis-social-icons {
display: flex;
gap: 12px;
margin-bottom: 20px;
}
.sis-social-icons img, .sis-social-icons svg {
width: 32px;
height: 32px;
border-radius: 50%;
background: #fff;
}
.sis-social-icons a {
transition: transform 0.2s ease;
}
.sis-social-icons a:hover {
transform: scale(1.1);
}
.sis-app-stores {
display: flex;
gap: 12px;
}
.sis-app-stores img {
height: 36px;
border-radius: 6px;
}
.sis-footer-right {
flex: 1;
display: flex;
flex-wrap: wrap;
gap: 20px;
justify-content: space-around;
}
.sis-hospital-box {
flex: 1;
min-width: 260px;
border: 1px solid rgba(255,255,255,0.4);
border-radius: 12px;
padding: 24px;
display: flex;
flex-direction: column;
gap: 8px;
}
.sis-hospital-box h3 {
font-size: 1.15rem;
font-weight: 700;
margin: 0 0 10px 0;
color: #fff;
}
.sis-hospital-box p {
font-size: 0.9rem;
line-height: 1.5;
margin: 0;
color: #f8f9fa;
}
.sis-hospital-icons {
margin-top: 10px;
padding-top: 10px;
display: flex;
gap: 16px;
}
.sis-hospital-icons svg {
width: 20px;
height: 20px;
fill: #fff;
opacity: 0.8;
cursor: pointer;
transition: opacity 0.2s;
}
.sis-hospital-icons svg:hover {
opacity: 1;
}
@media (max-width: 992px) {
.sis-footer-custom {
flex-direction: column;
align-items: center;
}
.sis-footer-right {
flex-direction: column;
width: 100%;
max-width: 500px;
}
}
</style>
<div class="sis-footer-custom">
<div class="sis-footer-left">
<img th:src="@{/theme-assets/umass/images/logo.png}" alt="Stroke International Services" class="sis-footer-logo" />
<div class="sis-social-text">Theo dõi thông tin chính thức tại</div>
<div class="sis-social-icons">
<a href="#" aria-label="Facebook">
<!-- Facebook Icon -->
<svg viewBox="0 0 24 24" width="32" height="32"><circle cx="12" cy="12" r="12" fill="#1877F2"/><path d="M14.5 12h-2v7h-3v-7h-1.5v-2.5H11v-1.5c0-1.2.7-2.5 2.5-2.5h2v2.5h-1.3c-.4 0-.7.3-.7.8v.7h2l-.5 2.5z" fill="#FFF"/></svg>
</a>
<a href="#" aria-label="YouTube">
<!-- YouTube Icon -->
<svg viewBox="0 0 24 24" width="32" height="32"><circle cx="12" cy="12" r="12" fill="#FF0000"/><path d="M16 12l-6 3.5v-7L16 12z" fill="#FFF"/></svg>
</a>
<a href="#" aria-label="Zalo">
<!-- Zalo Icon Placeholder -->
<svg viewBox="0 0 24 24" width="32" height="32"><circle cx="12" cy="12" r="12" fill="#0068FF"/><path d="M12 5.5c-4.4 0-8 3.2-8 7 0 2.2 1.2 4 3 5.3v3.2l3-1.7c.6.2 1.3.2 2 .2 4.4 0 8-3.2 8-7s-3.6-7-8-7zm-1 9l-2-2 4 2 2-2-4-2z" fill="#FFF"/></svg>
</a>
<a href="#" aria-label="TikTok">
<!-- TikTok Icon -->
<svg viewBox="0 0 24 24" width="32" height="32"><circle cx="12" cy="12" r="12" fill="#000000"/><path d="M15 9.5c-.7 0-1.3-.2-1.9-.5V14c0 1.9-1.5 3.5-3.5 3.5S6 15.9 6 14s1.5-3.5 3.5-3.5c.3 0 .7.1 1 .2v2.1c-.3-.1-.6-.2-1-.2-.8 0-1.5.7-1.5 1.5s.7 1.5 1.5 1.5 1.5-.7 1.5-1.5v-8h2c0 1.3 1 2.5 2 2.5v2z" fill="#FFF"/></svg>
</a>
</div>
<div id="block-footersocial" class="block block-fixed-block-content block-fixed-block-contentfooter-social cc--component-container cc--footer-social">
<div class="c--component c--footer-social">
<nav aria-label="UMass Social Media Links">
<div>
<nav aria-label="Social media links">
<ul class="social-media-links--platforms platforms">
<li>
<a href="https://www.facebook.com/UMassAmherst/" class="ext" target="_blank" rel="noopener noreferrer" aria-label="Facebook (opens in new window)">
<svg height="16" viewBox="0 0 16 16" width="16" aria-hidden="true" focusable="false">
<path d="m19.9593333 5h-14.0853333c-.48269687 0-.874.39130313-.874.874v14.0853333c0 .4826969.39130313.874.874.874h7.5835333v-6.1230666h-2.0564333v-2.3965334h2.0564333v-1.7625666c0-2.04503337 1.2489334-3.15843337 3.0735667-3.15843337.6158056-.00219435 1.23127.02930829 1.8436333.09436667v2.13623333h-1.2616c-.9899 0-1.1811666.47119997-1.1811666 1.16343337v1.5263333h2.3731l-.3090667 2.3965333h-2.0640333v6.1237h4.0273666c.4826969 0 .874-.3913031.874-.874v-14.0853333c0-.48269687-.3913031-.874-.874-.874z" fill="#fff" fill-rule="evenodd" transform="translate(-5 -5)"></path>
</svg>
<span class="visually-hidden">Facebook</span>
</a>
</li>
<li>
<a href="https://twitter.com/UMassAmherst" class="ext" target="_blank" rel="noopener noreferrer" aria-label="X (formerly Twitter) (opens in new window)">
<svg style="fill:#FFFFFF;" width="24" height="24" y="0px" x="0px" viewBox="0 -2 50 50" aria-hidden="true" focusable="false">
<path d="M 5.9199219 6 L 20.582031 27.375 L 6.2304688 44 L 9.4101562 44 L 21.986328 29.421875 L 31.986328 44 L 44 44 L 28.681641 21.669922 L 42.199219 6 L 39.029297 6 L 27.275391 19.617188 L 17.933594 6 L 5.9199219 6 z M 9.7167969 8 L 16.880859 8 L 40.203125 42 L 33.039062 42 L 9.7167969 8 z"></path>
</svg>
<span class="visually-hidden">X (formerly Twitter)</span>
</a>
</li>
<li>
<a href="https://www.youtube.com/user/UMass" class="ext" target="_blank" rel="noopener noreferrer" aria-label="YouTube (opens in new window)">
<svg height="15" viewBox="0 0 23 15" width="23" aria-hidden="true" focusable="false">
<path d="m22.935049 8.18627451s-.2389706-1.43382353-.8762255-2.07107843c-.7965686-.87622549-1.752451-.87622549-2.1507353-.87622549-2.9473039-.23897059-7.4877451-.23897059-7.4877451-.23897059s-4.54044114 0-7.48774506.23897059c-.47794118 0-1.35416667 0-2.23039216.87622549-.6372549.6372549-.79656863 2.07107843-.79656863 2.07107843s-.23897058 1.67279412-.23897058 3.42524509v1.5931373c0 1.6727941.23897058 3.4252451.23897058 3.4252451s.23897059 1.4338235.8762255 2.0710784c.79656862.8762255 1.9117647.7965686 2.38970588.8762255 1.75245098.1593137 7.32843137.2389706 7.32843137.2389706s4.5404412 0 7.567402-.2389706c.3982843-.0796569 1.3541666-.0796569 2.1507353-.8762255.6372549-.6372549.8762254-2.0710784.8762254-2.0710784s.2389706-1.6727942.2389706-3.4252451v-1.5931373c-.1593137-1.75245097-.3982843-3.42524509-.3982843-3.42524509zm-12.745098 7.16911769v-5.97426475l5.7352941 2.86764705z" fill="#fff" fill-rule="evenodd" transform="translate(-1 -5)"></path>
</svg>
<span class="visually-hidden">YouTube</span>
</a>
</li>
<li>
<a href="https://www.instagram.com/umass/" class="ext" target="_blank" rel="noopener noreferrer" aria-label="Instagram (opens in new window)">
<svg height="16" viewBox="0 0 16 16" width="16" aria-hidden="true" focusable="false">
<path d="m12.9166667 5c-2.1666667 0-2.4166667 0-3.25000003.08333333-.83333334 0-1.41666667.16666667-1.91666667.33333334-.5.16666666-1 .5-1.41666667.91666666-.41666666.41666667-.75.91666667-.91666666 1.41666667-.16666667.5-.33333334 1.08333333-.33333334 1.91666667-.08333333.83333333-.08333333 1.08333333-.08333333 3.25000003 0 2.1666666 0 2.4166666.08333333 3.25 0 .8333333.16666667 1.4166666.33333334 1.9166666.16666666.5.5 1 .91666666 1.4166667.41666667.4166667.91666667.75 1.41666667.9166667.5.1666666 1.08333333.3333333 1.91666667.3333333.83333333 0 1.08333333.0833333 3.25000003.0833333 2.1666666 0 2.4166666 0 3.25-.0833333.8333333 0 1.4166666-.1666667 1.9166666-.3333333.5-.1666667 1-.5 1.4166667-.9166667s.75-.9166667.9166667-1.4166667c.1666666-.5.3333333-1.0833333.3333333-1.9166666 0-.8333334.0833333-1.0833334.0833333-3.25 0-2.1666667 0-2.4166667-.0833333-3.25000003 0-.83333334-.1666667-1.41666667-.3333333-1.91666667-.1666667-.5-.5-1-.9166667-1.41666667-.4166667-.41666666-.9166667-.75-1.4166667-.91666666-.5-.16666667-1.0833333-.33333334-1.9166666-.33333334-.8333334-.08333333-1.0833334-.08333333-3.25-.08333333m0 1.41666667c2.0833333 0 2.3333333 0 3.1666666.08333333.75 0 1.1666667.16666667 1.5.25.3333334.16666667.6666667.33333333.9166667.58333333s.4166667.58333334.5833333.91666667c.0833334.25.25.66666667.25 1.5 0 .8333333.0833334 1.0833333.0833334 3.25 0 2.0833333 0 2.3333333-.0833334 3.1666667 0 .75-.1666666 1.1666666-.25 1.5-.1666666.3333333-.3333333.6666666-.5833333.9166666s-.5.4166667-.9166667.5833334c-.25.0833333-.6666666.25-1.5.25-.8333333 0-1.0833333.0833333-3.1666666.0833333-2.0833334 0-2.3333334 0-3.1666667-.0833333-.75 0-1.16666667-.1666667-1.5-.25-.33333333-.1666667-.66666667-.3333334-.91666667-.5833334s-.41666666-.5833333-.58333333-.9166666c-.08333333-.25-.25-.6666667-.25-1.5 0-.8333334-.08333333-1.0833334-.08333333-3.1666667s0-2.3333333.08333333-3.25c0-.75.16666667-1.16666667.25-1.5.16666667-.33333333.33333333-.66666667.58333333-.91666667s.5-.41666666.91666667-.58333333c.25-.08333333.66666667-.25 1.5-.25.8333333-.08333333 1.0833333-.08333333 3.1666667-.08333333m0 9.16666663c-1.4166667 0-2.6666667-1.1666666-2.6666667-2.6666666s1.1666667-2.6666667 2.6666667-2.6666667 2.6666666 1.1666667 2.6666666 2.6666667-1.25 2.6666666-2.6666666 2.6666666m0-6.74999997c-2.25 0-4.08333337 1.83333337-4.08333337 4.08333337s1.83333337 4.0833333 4.08333337 4.0833333 4.0833333-1.8333333 4.0833333-4.0833333-1.8333333-4.08333337-4.0833333-4.08333337m5.1666666-.16666666c0 .5-.4166666.91666666-.9166666.91666666s-.9166667-.41666666-.9166667-.91666666.4166667-.91666667.9166667-.91666667.9166666.41666667.9166666.91666667" fill="#fff" fill-rule="evenodd" transform="translate(-5 -5)"></path>
</svg>
<span class="visually-hidden">Instagram</span>
</a>
</li>
<li>
<a href="https://www.linkedin.com/school/umassamherst/" class="ext" target="_blank" rel="noopener noreferrer" aria-label="LinkedIn (opens in new window)">
<svg height="16" viewBox="0 0 16 16" width="16" aria-hidden="true" focusable="false">
<path d="m20.8333333 17.8517316c0 1.6450216-1.3365801 2.9816017-2.9816017 2.9816017h-9.87012987c-1.64502164 0-2.98160173-1.3365801-2.98160173-2.9816017v-9.87012987c0-1.64502164 1.33658009-2.98160173 2.98160173-2.98160173h9.87012987c1.6450216 0 2.9816017 1.33658009 2.9816017 2.98160173zm-12.1320346-10.17857143c-.82251082 0-1.33658009.51406927-1.33658009 1.23376624-.10281385.71969697.41125542 1.23376619 1.23376624 1.23376619.82251082 0 1.33658009-.51406922 1.33658009-1.23376619s-.51406927-1.23376624-1.23376624-1.23376624zm1.13095238 10.58982683v-7.1969697h-2.36471861v7.1969697zm8.53354982 0v-4.1125541c0-2.1590909-1.1309524-3.1872294-2.7759741-3.1872294-1.2337662 0-1.7478355.7196969-2.056277 1.2337662v-1.0281385h-2.3647186v7.1969697h2.3647186v-4.1125541c0-.2056278 0-.4112555.1028138-.6168832.1028139-.4112554.5140693-.8225108 1.2337663-.8225108.8225108 0 1.2337662.6168831 1.2337662 1.6450217v3.8041125z" fill="#fff" fill-rule="evenodd" transform="translate(-5 -5)"></path>
</svg>
<span class="visually-hidden">LinkedIn</span>
</a>
</li>
<li>
<a href="https://www.snapchat.com/add/umassamherst" class="ext" target="_blank" rel="noopener noreferrer" aria-label="Snapchat (opens in new window)">
<svg height="17" viewBox="0 0 18 17" width="18" aria-hidden="true" focusable="false">
<path d="m12.8333333 20.3333333c-.0833333 0-.0833333 0-.1666666 0h-.0833334c-1.0833333 0-1.6666666-.3333333-2.25-.75-.41666663-.3333333-.74999997-.5833333-1.16666663-.5833333-.25 0-.41666667-.0833333-.66666667-.0833333-.33333333 0-.66666667.0833333-.91666667.0833333-.16666666 0-.33333333.0833333-.41666666.0833333-.33333334 0-.5-.25-.5-.4166666 0-.1666667-.08333334-.25-.08333334-.4166667 0-.0833333-.08333333-.25-.08333333-.3333333-1.33333333-.25-2.08333333-.5-2.25-1-.08333333 0-.08333333-.0833334-.08333333-.1666667 0-.25.16666666-.4166667.41666666-.5 2.25-.3333333 3.33333334-2.75 3.33333334-2.8333333.08333333-.25.16666666-.4166667.08333333-.5833334-.08333333-.1666666-.58333333-.3333333-.91666667-.4166666-.08333333 0-.16666666-.0833334-.25-.0833334-.83333333-.3333333-1-.75-.91666666-1.0833333.08333333-.5.83333333-.75 1.25-.5833333.33333333.1666666.58333333.1666666.75.1666666h.25c0-.0833333 0-.25 0-.3333333-.08333334-1.16666667-.25-2.66666667.16666666-3.5 1.16666667-2.66666667 3.66666667-2.83333333 4.33333337-2.83333333h.3333333c.75 0 3.1666667.16666666 4.3333333 2.83333333.4166667.91666667.3333334 2.33333333.25 3.5v.0833333.25h.1666667c.1666667 0 .4166667-.0833333.6666667-.1666666.1666666-.0833334.25-.0833334.4166666-.0833334.1666667 0 .25 0 .4166667.0833334.3333333.0833333.5833333.4166666.5833333.6666666 0 .4166667-.3333333.6666667-.9166666.9166667-.0833334 0-.1666667.0833333-.25.0833333-.3333334.0833334-.8333334.25-.9166667.5-.0833333.1666667 0 .3333334.0833333.5.0833334.25 1.0833334 2.5 3.25 2.8333334.25 0 .4166667.25.4166667.5 0 .0833333 0 .1666666-.0833333.1666666-.1666667.4166667-.9166667.75-2.25 1 0 .0833334-.0833334.25-.0833334.3333334 0 .1666666-.0833333.25-.0833333.4166666-.0833333.25-.25.4166667-.5.4166667-.0833333 0-.25 0-.4166667-.0833333-.25-.0833334-.5-.0833334-.9166666-.0833334-.1666667 0-.4166667 0-.6666667.0833334-.4166667.0833333-.75.3333333-1.1666667.5833333-.6666666.5833333-1.5.8333333-2.5.8333333" fill="#fff" fill-rule="evenodd" transform="translate(-4 -4)"></path>
</svg>
<span class="visually-hidden">Snapchat</span>
</a>
</li>
</ul>
</nav>
</div>
</nav>
</div>
<div class="sis-app-stores">
<a href="#">
<img src="https://upload.wikimedia.org/wikipedia/commons/3/3c/Download_on_the_App_Store_Badge.svg" alt="Tải trên App Store" />
</a>
<a href="#">
<img src="https://upload.wikimedia.org/wikipedia/commons/7/78/Google_Play_Store_badge_EN.svg" alt="Tải trên Google Play" />
</a>
</div>
</div>
<div class="nav-container">
<div id="block-footer" class="block block-system block-system-menu-blockfooter cc--component-container cc--footer-menu">
<div class="c--component c--footer-menu">
<nav class="mc--menu mc--menu-footer" aria-label="UMass Amherst Footer Menu">
<ul class="menu m--menu m--menu-footer">
<li class="menu-item menu-item--expanded">
<span class="navigation-title">Info for...</span>
<div class="submenu-wrapper">
<ul class="submenu">
<li class="menu-item">
<a href="https://www.umass.edu/gateway/info/prospective-students" data-drupal-link-system-path="node/42831">Prospective Students</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/gateway/info/current-students" title="Click here for info for current students" data-drupal-link-system-path="node/61">Current Students</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/gateway/info/faculty-and-staff" title="Click here for info for faculty and staff" data-drupal-link-system-path="node/66">Faculty and Staff</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/gateway/info/parents-and-families" title="Click here for info for parents and families" data-drupal-link-system-path="node/81">Parents and Families</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/hr/careers" title="Info for Job Seekers">Job Seekers</a>
</li>
</ul>
</div>
</li>
<li class="menu-item menu-item--expanded">
<span class="navigation-title">Resources</span>
<div class="submenu-wrapper">
<ul class="submenu">
<li class="menu-item">
<a href="https://www.umass.edu/registrar/academic-calendar">Academic Calendar</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/admissions/visit/visitor-info">Campus Maps</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/peoplefinder/">People Finder</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/policy/">Policies</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/gateway/atoz" title="A-Z Directory" data-drupal-link-system-path="node/3931">Sites A-Z Directory</a>
</li>
</ul>
</div>
</li>
<li class="menu-item menu-item--expanded">
<span class="navigation-title">Connect</span>
<div class="submenu-wrapper">
<ul class="submenu">
<li class="menu-item">
<a href="https://www.umassalumni.com/">Alumni</a>
</li>
<li class="menu-item">
<a href="https://umassathletics.com/">Athletics</a>
</li>
<li class="menu-item">
<a href="https://www.uma-foundation.org/">Giving</a>
</li>
<li class="menu-item">
<a href="https://www.library.umass.edu/">Libraries</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/gateway/contact-us" data-drupal-link-system-path="node/256">Contact Us</a>
</li>
</ul>
</div>
</li>
</ul>
</nav>
<div class="sis-footer-right">
<div class="sis-hospital-box">
<h3>Bệnh viện 1</h3>
<p>215 Hồng Bàng, Phường 11, Quận 5,<br>TP. Hồ Chí Minh</p>
<p><strong>Hotline:</strong> (84.28) 3855 4269</p>
<p><strong>Email:</strong> bvdhyd@umc.edu.vn</p>
<div class="sis-hospital-icons">
<svg viewBox="0 0 24 24" aria-label="Website"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-1 17.93c-3.95-.49-7-3.85-7-7.93 0-.62.08-1.21.21-1.79L9 15v1c0 1.1.9 2 2 2v1.93zm6.9-2.54c-.26-.81-1-1.39-1.9-1.39h-1v-3c0-.55-.45-1-1-1H8v-2h2c.55 0 1-.45 1-1V7h2c1.1 0 2-.9 2-2v-.41c2.93 1.19 5 4.06 5 7.41 0 2.08-.8 3.97-2.1 5.39z"/></svg>
<svg viewBox="0 0 24 24" aria-label="Bản đồ"><path d="M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z"/></svg>
</div>
</div>
<div class="sis-hospital-box">
<h3>Bệnh viện 2</h3>
<p>201 Nguyễn Chí Thanh, Phường 12, Quận 5,<br>TP. Hồ Chí Minh</p>
<p><strong>Hotline:</strong> (84.28) 3955 5548</p>
<p><strong>Email:</strong> bvdaihoccoso2@umc.edu.vn</p>
<div class="sis-hospital-icons">
<svg viewBox="0 0 24 24"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-1 17.93c-3.95-.49-7-3.85-7-7.93 0-.62.08-1.21.21-1.79L9 15v1c0 1.1.9 2 2 2v1.93zm6.9-2.54c-.26-.81-1-1.39-1.9-1.39h-1v-3c0-.55-.45-1-1-1H8v-2h2c.55 0 1-.45 1-1V7h2c1.1 0 2-.9 2-2v-.41c2.93 1.19 5 4.06 5 7.41 0 2.08-.8 3.97-2.1 5.39z"/></svg>
<svg viewBox="0 0 24 24"><path d="M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z"/></svg>
</div>
</div>
<div class="sis-hospital-box">
<h3>Bệnh viện 3</h3>
<p>221B Hoàng Văn Thụ, Phường 8, Q. Phú Nhuận,<br>TP. Hồ Chí Minh</p>
<p><strong>Hotline:</strong> (84.28) 3842 0070</p>
<p><strong>Email:</strong> bvdaihoccoso3@umc.edu.vn</p>
<div class="sis-hospital-icons">
<svg viewBox="0 0 24 24"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-1 17.93c-3.95-.49-7-3.85-7-7.93 0-.62.08-1.21.21-1.79L9 15v1c0 1.1.9 2 2 2v1.93zm6.9-2.54c-.26-.81-1-1.39-1.9-1.39h-1v-3c0-.55-.45-1-1-1H8v-2h2c.55 0 1-.45 1-1V7h2c1.1 0 2-.9 2-2v-.41c2.93 1.19 5 4.06 5 7.41 0 2.08-.8 3.97-2.1 5.39z"/></svg>
<svg viewBox="0 0 24 24"><path d="M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z"/></svg>
</div>
</div>
</div>
</div>
<div class="footer-bottom">
<div class="cc--component-container cc--footer-copyright ">
<div class="c--component c--footer-copyright">
<div class="f--field f--description">
<p>© 2026 University of Massachusetts Amherst</p>
</div>
</div>
</div>
<div id="block-footerutility" class="block block-system block-system-menu-blockfooter-utility cc--component-container cc--footer-menu">
<div class="c--component c--footer-menu">
<nav class="mc--menu mc--menu-footer-utility" aria-label="UMass Amherst Footer Utility Menu">
<ul class="menu m--menu m--menu-footer-utility">
<li class="menu-item">
<a href="https://www.umass.edu/gateway/site-policies" data-drupal-link-system-path="node/3861">Site Policies</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/policy/information-privacy-policy" title="UMass Amherst privacy policy">Privacy</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/policy/affirmative-action-non-discrimination-and-title-ix-non-discrimination-policy" title="UMass Amherst non-discrimination policies">Non-Discrimination Notice</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/accessibility/" title="UMass Amherst Accessibility Resources">Accessibility</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/it/policies/it-policy-acceptable-use-interpretation-guidelines" title="UMass Amherst terms of use">Terms of Use</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
</div>
</section>
</div>