This commit is contained in:
Your Name committed 2026-09-29 06:43:16 +07:00
1 parent 466059f01a
commit 602eaa9260
4 files changed
+164 -12

No files matched your search

+24 -1
View File
@@ -70,8 +70,29 @@ export default function Footer({ categories = [] }: FooterProps) {
.catch(console.error) .catch(console.error)
}, []) }, [])
const hasBrandFinale = Boolean(settings?.logoUrl || brandName.trim())
return ( return (
<footer className="bg-night-900 text-pop-black px-6 py-20 border-t border-pop-black/20"> <footer className={`site-footer text-pop-black${hasBrandFinale ? ' site-footer-with-finale' : ''}`}>
<div className="site-footer-stage">
{hasBrandFinale && (
<section
className="site-footer-brand-finale"
aria-label={brandName || t('footer.brand', 'Brand')}
>
{settings?.logoUrl ? (
<img
src={settings.logoUrl}
alt=""
className="site-footer-finale-logo"
/>
) : (
<p className="site-footer-finale-wordmark">{brandName}</p>
)}
</section>
)}
<div className="site-footer-navigation bg-night-900 text-pop-black px-6 py-20 border-t border-pop-black/20">
<div className="ui-section-inner grid grid-cols-1 gap-12 md:grid-cols-4"> <div className="ui-section-inner grid grid-cols-1 gap-12 md:grid-cols-4">
<div className="space-y-6"> <div className="space-y-6">
<div className="text-2xl font-bold tracking-widest text-pop-black"> <div className="text-2xl font-bold tracking-widest text-pop-black">
@@ -151,6 +172,8 @@ export default function Footer({ categories = [] }: FooterProps) {
</div> </div>
</div> </div>
</div> </div>
</div>
</div>
</footer> </footer>
) )
} }
+86
View File
@@ -275,3 +275,89 @@ html {
.ui-prose blockquote { .ui-prose blockquote {
@apply border-l-4 border-pop-pink pl-4 italic opacity-80 my-4; @apply border-l-4 border-pop-pink pl-4 italic opacity-80 my-4;
} }
/* Footer Curtain Reveal Effect */
.global-main {
position: relative;
z-index: 2;
background: var(--color-pop-bg);
}
.site-footer {
@apply relative bg-pop-bg;
z-index: 1;
}
.site-footer-stage {
position: relative;
}
.site-footer-brand-finale {
@apply flex min-h-[55svh] items-center justify-center overflow-hidden border-t border-pop-black/10 bg-pop-bg px-6 py-20 text-center;
}
.site-footer-finale-logo {
@apply h-auto max-h-32 w-auto max-w-[min(82vw,32rem)] object-contain;
}
.site-footer-finale-wordmark {
@apply max-w-full break-words text-5xl font-semibold uppercase text-pop-black md:text-7xl;
letter-spacing: 0;
}
.site-footer-navigation {
@apply relative border-t border-pop-black/10 bg-night-900;
z-index: 3;
}
/* Desktop Fixed Curtain Reveal Effect (เปิดม่าน Logo แบบ Fixed ตาม pkh.kitizone.com) */
@media (min-width: 1024px) {
.global-main {
position: relative;
z-index: 2;
background: var(--color-pop-bg);
}
.site-footer-with-finale {
min-height: 100svh;
}
.site-footer-stage {
position: fixed;
inset: 0;
z-index: 0;
min-height: 100svh;
display: grid;
grid-template-rows: minmax(0, 1fr) auto;
pointer-events: none;
}
.site-footer-brand-finale {
min-height: 0;
padding-top: 4rem;
padding-bottom: 4rem;
}
.site-footer-finale-logo {
@apply max-h-48 max-w-[min(68vw,48rem)];
}
.site-footer-finale-wordmark {
@apply text-8xl;
}
.site-footer-navigation {
pointer-events: auto;
}
}
@media (prefers-reduced-motion: reduce) {
.site-footer-stage {
display: block;
position: relative;
}
.site-footer-with-finale {
min-height: 0;
}
}
+2
View File
@@ -52,11 +52,13 @@ export default function HomePage() {
<div className="w-12 h-12 border-4 border-pop-pink border-t-transparent rounded-full animate-spin"></div> <div className="w-12 h-12 border-4 border-pop-pink border-t-transparent rounded-full animate-spin"></div>
</div> </div>
) : ( ) : (
<main className="global-main relative z-10 bg-pop-bg">
<DynamicPageRenderer <DynamicPageRenderer
sections={sections} sections={sections}
categories={categories} categories={categories}
categoriesLoading={categoriesLoading} categoriesLoading={categoriesLoading}
/> />
</main>
)} )}
<Footer categories={categories} /> <Footer categories={categories} />
+52 -11
View File
@@ -210,33 +210,71 @@
@apply flex h-9 w-9 items-center justify-center rounded-full border border-line-primary/20 bg-surface-page text-[10px] font-bold text-text-main transition-all duration-300 hover:border-brand-primary hover:bg-brand-primary hover:text-surface-card; @apply flex h-9 w-9 items-center justify-center rounded-full border border-line-primary/20 bg-surface-page text-[10px] font-bold text-text-main transition-all duration-300 hover:border-brand-primary hover:bg-brand-primary hover:text-surface-card;
} }
.global-main {
position: relative;
z-index: 2;
background: var(--color-surface-page);
}
.site-footer { .site-footer {
@apply relative bg-surface-page; position: relative;
z-index: 1; z-index: 1;
background-color: var(--color-surface-page);
} }
.site-footer-stage { .site-footer-stage {
@apply relative; position: relative;
} }
.site-footer-brand-finale { .site-footer-brand-finale {
@apply flex min-h-[55svh] items-center justify-center overflow-hidden border-t border-line-primary/20 bg-surface-page px-6 py-20 text-center; display: flex;
min-height: 55svh;
align-items: center;
justify-content: center;
overflow: hidden;
border-top: 1px solid color-mix(in oklab, var(--color-line-primary) 20%, transparent);
background-color: var(--color-surface-page);
padding-inline: calc(var(--spacing) * 6);
padding-block: calc(var(--spacing) * 20);
text-align: center;
} }
.site-footer-finale-logo { .site-footer-finale-logo {
@apply h-auto max-h-32 w-auto max-w-[min(82vw,32rem)] object-contain; height: auto;
max-height: calc(var(--spacing) * 32);
width: auto;
max-width: min(82vw, 32rem);
object-fit: contain;
} }
.site-footer-finale-wordmark { .site-footer-finale-wordmark {
@apply max-w-full break-words text-5xl font-semibold uppercase text-text-main md:text-7xl; max-width: 100%;
font-size: var(--text-5xl);
line-height: var(--tw-leading, var(--text-5xl--line-height));
font-weight: var(--font-weight-semibold, 600);
overflow-wrap: break-word;
color: var(--color-text-main);
text-transform: uppercase;
letter-spacing: 0; letter-spacing: 0;
} }
@media (min-width: 48rem) {
.site-footer-finale-wordmark {
font-size: var(--text-7xl);
line-height: var(--tw-leading, var(--text-7xl--line-height));
}
}
.site-footer-navigation { .site-footer-navigation {
@apply relative border-t border-line-primary/20 bg-surface-card px-6 py-20; position: relative;
border-top: 1px solid color-mix(in oklab, var(--color-line-primary) 20%, transparent);
background-color: var(--color-surface-card);
padding-inline: calc(var(--spacing) * 6);
padding-block: calc(var(--spacing) * 20);
z-index: 3; z-index: 3;
} }
/* Desktop Fixed Curtain Reveal Effect (เปิดม่าน Logo แบบ Fixed ตาม pkh.kitizone.com) */
@media (min-width: 1024px) { @media (min-width: 1024px) {
.global-main { .global-main {
position: relative; position: relative;
@@ -252,22 +290,25 @@
position: fixed; position: fixed;
inset: 0; inset: 0;
z-index: 0; z-index: 0;
min-height: 100svh;
display: grid; display: grid;
grid-template-rows: minmax(0, 1fr) auto; grid-template-rows: minmax(0, 1fr) auto;
min-height: 100svh;
pointer-events: none; pointer-events: none;
} }
.site-footer-brand-finale { .site-footer-brand-finale {
@apply min-h-0 py-16; min-height: 0;
padding-block: calc(var(--spacing) * 16);
} }
.site-footer-finale-logo { .site-footer-finale-logo {
@apply max-h-48 max-w-[min(68vw,48rem)]; max-height: calc(var(--spacing) * 48);
max-width: min(68vw, 48rem);
} }
.site-footer-finale-wordmark { .site-footer-finale-wordmark {
@apply text-8xl; font-size: var(--text-8xl);
line-height: var(--tw-leading, var(--text-8xl--line-height));
} }
.site-footer-navigation { .site-footer-navigation {
@@ -277,8 +318,8 @@
@media (prefers-reduced-motion: reduce) { @media (prefers-reduced-motion: reduce) {
.site-footer-stage { .site-footer-stage {
position: relative;
display: block; display: block;
position: relative;
} }
.site-footer-with-finale { .site-footer-with-finale {