fix: move providers marquee between sections, restore footer, add notification to mobile
Docker Build / Build and Push Docker Image (push) Successful in 4m32s

This commit is contained in:
2026-06-14 20:09:03 +08:00
parent 790d832756
commit cd8cdebdcb
4 changed files with 38 additions and 22 deletions
@@ -261,6 +261,19 @@ export function PublicHeader() {
{/* Mobile: compact actions + hamburger */}
<div className='flex items-center gap-2 sm:hidden'>
{showThemeSwitch && <ThemeSwitch className='text-muted-foreground hover:bg-accent hover:text-foreground' />}
{showNotifications && (
<NotificationPopover
className='text-muted-foreground hover:bg-accent hover:text-foreground'
open={notifications.popoverOpen}
onOpenChange={notifications.setPopoverOpen}
unreadCount={notifications.unreadCount}
activeTab={notifications.activeTab}
onTabChange={notifications.setActiveTab}
notice={notifications.notice}
announcements={notifications.announcements}
loading={notifications.loading}
/>
)}
{showAuthButtons && !loading && isAuthenticated && (
<ProfileDropdown />
)}
+1
View File
@@ -34,6 +34,7 @@ export { Main } from './components/main'
export { PageFooterPortal } from './components/page-footer'
export { NavGroup } from './components/nav-group'
export { SectionPageLayout } from './components/section-page-layout'
export { Footer } from './components/footer'
export { SidebarViewHeader } from './components/sidebar-view-header'
export { SystemBrand } from './components/system-brand'
export { TopNav } from './components/top-nav'
+22 -22
View File
@@ -234,6 +234,28 @@ export function Hero(props: HeroProps) {
</button>
</div>
{/* ── Provider logos marquee (between hero and code demo) ── */}
<div className='relative py-16'>
<p className='mb-4 text-center text-xs font-medium uppercase tracking-widest text-muted-foreground/60'>
{t('Supported providers')}
</p>
<div className='relative overflow-hidden'>
<div className='flex animate-[marquee_30s_linear_infinite] gap-8'>
{[...providers, ...providers].map((name, i) => (
<span
key={`${name}-${i}`}
className='shrink-0 text-sm font-semibold text-muted-foreground/40'
>
{name}
</span>
))}
</div>
{/* Fade edges */}
<div className='pointer-events-none absolute inset-y-0 left-0 w-16 bg-gradient-to-r from-background to-transparent' />
<div className='pointer-events-none absolute inset-y-0 right-0 w-16 bg-gradient-to-l from-background to-transparent' />
</div>
</div>
{/* ── Section 2: Code Demo ── */}
<div
ref={sections[1].ref}
@@ -322,28 +344,6 @@ export function Hero(props: HeroProps) {
</div>
</div>
{/* ── Provider logos marquee (bottom) ── */}
<div className='relative py-16'>
<p className='mb-4 text-center text-xs font-medium uppercase tracking-widest text-muted-foreground/60'>
{t('Supported providers')}
</p>
<div className='relative overflow-hidden'>
<div className='flex animate-[marquee_30s_linear_infinite] gap-8'>
{[...providers, ...providers].map((name, i) => (
<span
key={`${name}-${i}`}
className='shrink-0 text-sm font-semibold text-muted-foreground/40'
>
{name}
</span>
))}
</div>
{/* Fade edges */}
<div className='pointer-events-none absolute inset-y-0 left-0 w-16 bg-gradient-to-r from-background to-transparent' />
<div className='pointer-events-none absolute inset-y-0 right-0 w-16 bg-gradient-to-l from-background to-transparent' />
</div>
</div>
{/* Marquee keyframes */}
<style>{`
@keyframes marquee {
+2
View File
@@ -20,6 +20,7 @@ import { useTranslation } from 'react-i18next'
import { useAuthStore } from '@/stores/auth-store'
import { Markdown } from '@/components/ui/markdown'
import { PublicLayout } from '@/components/layout'
import { Footer } from '@/components/layout'
import { Hero } from './components'
import { useHomePageContent } from './hooks'
@@ -62,6 +63,7 @@ export function Home() {
return (
<PublicLayout showMainContainer={false}>
<Hero isAuthenticated={isAuthenticated} />
<Footer />
</PublicLayout>
)
}