diff --git a/web/public/logo-c.png b/web/public/logo-c.png new file mode 100644 index 000000000000..3530428634f9 Binary files /dev/null and b/web/public/logo-c.png differ diff --git a/web/public/logo.png b/web/public/logo.png index 851556f62db5..f08fd3f3e5b5 100644 Binary files a/web/public/logo.png and b/web/public/logo.png differ diff --git a/web/src/components/auth/LoginForm.jsx b/web/src/components/auth/LoginForm.jsx index 7e8c0ce017f1..5c9445277b35 100644 --- a/web/src/components/auth/LoginForm.jsx +++ b/web/src/components/auth/LoginForm.jsx @@ -506,12 +506,12 @@ const LoginForm = () => {
Logo - + <Title heading={3} className='text-semi-color-text-0'> {systemName}
- +
{t('登 录')} @@ -522,7 +522,7 @@ const LoginForm = () => { {status.wechat_login && ( <Button theme='outline' - className='w-full h-12 flex items-center justify-center !rounded-full border border-gray-200 hover:bg-gray-50 transition-colors' + className='w-full h-12 flex items-center justify-center !rounded-xl border border-gray-200 hover:bg-gray-50 transition-colors' type='tertiary' icon={ <Icon svg={<WeChatIcon />} style={{ color: '#07C160' }} /> @@ -537,7 +537,7 @@ const LoginForm = () => { {status.github_oauth && ( <Button theme='outline' - className='w-full h-12 flex items-center justify-center !rounded-full border border-gray-200 hover:bg-gray-50 transition-colors' + className='w-full h-12 flex items-center justify-center !rounded-xl border border-gray-200 hover:bg-gray-50 transition-colors' type='tertiary' icon={<IconGithubLogo size='large' />} onClick={handleGitHubClick} @@ -551,7 +551,7 @@ const LoginForm = () => { {status.discord_oauth && ( <Button theme='outline' - className='w-full h-12 flex items-center justify-center !rounded-full border border-gray-200 hover:bg-gray-50 transition-colors' + className='w-full h-12 flex items-center justify-center !rounded-xl border border-gray-200 hover:bg-gray-50 transition-colors' type='tertiary' icon={ <SiDiscord @@ -572,7 +572,7 @@ const LoginForm = () => { {status.oidc_enabled && ( <Button theme='outline' - className='w-full h-12 flex items-center justify-center !rounded-full border border-gray-200 hover:bg-gray-50 transition-colors' + className='w-full h-12 flex items-center justify-center !rounded-xl border border-gray-200 hover:bg-gray-50 transition-colors' type='tertiary' icon={<OIDCIcon style={{ color: '#1877F2' }} />} onClick={handleOIDCClick} @@ -585,7 +585,7 @@ const LoginForm = () => { {status.linuxdo_oauth && ( <Button theme='outline' - className='w-full h-12 flex items-center justify-center !rounded-full border border-gray-200 hover:bg-gray-50 transition-colors' + className='w-full h-12 flex items-center justify-center !rounded-xl border border-gray-200 hover:bg-gray-50 transition-colors' type='tertiary' icon={ <LinuxDoIcon @@ -608,7 +608,7 @@ const LoginForm = () => { <Button key={provider.slug} theme='outline' - className='w-full h-12 flex items-center justify-center !rounded-full border border-gray-200 hover:bg-gray-50 transition-colors' + className='w-full h-12 flex items-center justify-center !rounded-xl border border-gray-200 hover:bg-gray-50 transition-colors' type='tertiary' icon={getOAuthProviderIcon(provider.icon || '', 20)} onClick={() => handleCustomOAuthClick(provider)} @@ -632,7 +632,7 @@ const LoginForm = () => { {status.passkey_login && passkeySupported && ( <Button theme='outline' - className='w-full h-12 flex items-center justify-center !rounded-full border border-gray-200 hover:bg-gray-50 transition-colors' + className='w-full h-12 flex items-center justify-center !rounded-xl border border-gray-200 hover:bg-gray-50 transition-colors' type='tertiary' icon={<IconKey size='large' />} onClick={handlePasskeyLogin} @@ -649,7 +649,7 @@ const LoginForm = () => { <Button theme='solid' type='primary' - className='w-full h-12 flex items-center justify-center bg-black text-white !rounded-full hover:bg-gray-800 transition-colors' + className='w-full h-12 flex items-center justify-center bg-black text-white !rounded-xl hover:bg-gray-800 transition-colors' icon={<IconMail size='large' />} onClick={handleEmailLoginClick} loading={emailLoginLoading} @@ -725,7 +725,7 @@ const LoginForm = () => { <Title heading={3}>{systemName}
- +
{t('登 录')} @@ -736,7 +736,7 @@ const LoginForm = () => { <Button theme='outline' type='tertiary' - className='w-full h-12 flex items-center justify-center !rounded-full border border-gray-200 hover:bg-gray-50 transition-colors mb-4' + className='w-full h-12 flex items-center justify-center !rounded-xl border border-gray-200 hover:bg-gray-50 transition-colors mb-4' icon={<IconKey size='large' />} onClick={handlePasskeyLogin} loading={passkeyLoading} @@ -805,7 +805,7 @@ const LoginForm = () => { <div className='space-y-2 pt-2'> <Button theme='solid' - className='w-full !rounded-full' + className='w-full !rounded-xl' type='primary' htmlType='submit' onClick={handleSubmit} @@ -820,7 +820,7 @@ const LoginForm = () => { <Button theme='borderless' type='tertiary' - className='w-full !rounded-full' + className='w-full !rounded-xl' onClick={handleResetPasswordClick} loading={resetPasswordLoading} > @@ -839,7 +839,7 @@ const LoginForm = () => { <Button theme='outline' type='tertiary' - className='w-full !rounded-full' + className='w-full !rounded-xl' onClick={handleOtherLoginOptionsClick} loading={otherLoginOptionsLoading} > @@ -947,16 +947,7 @@ const LoginForm = () => { }; return ( - <div className='relative overflow-hidden bg-gray-100 flex items-center justify-center py-12 px-4 sm:px-6 lg:px-8'> - {/* 背景模糊晕染球 */} - <div - className='blur-ball blur-ball-indigo' - style={{ top: '-80px', right: '-80px', transform: 'none' }} - /> - <div - className='blur-ball blur-ball-teal' - style={{ top: '50%', left: '-120px' }} - /> + <div className='relative overflow-hidden bg-transparent flex items-center justify-center py-12 px-4 sm:px-6 lg:px-8'> <div className='w-full max-w-sm mt-[60px]'> {showEmailLogin || !hasOAuthLoginOptions diff --git a/web/src/components/auth/RegisterForm.jsx b/web/src/components/auth/RegisterForm.jsx index 0a755b194431..c60453f5126f 100644 --- a/web/src/components/auth/RegisterForm.jsx +++ b/web/src/components/auth/RegisterForm.jsx @@ -397,12 +397,12 @@ const RegisterForm = () => { <div className='w-full max-w-md'> <div className='flex items-center justify-center mb-6 gap-2'> <img src={logo} alt='Logo' className='h-10 rounded-full' /> - <Title heading={3} className='!text-gray-800'> + <Title heading={3} className='text-semi-color-text-0'> {systemName}
- +
{t('注 册')} @@ -413,7 +413,7 @@ const RegisterForm = () => { {status.wechat_login && ( <Button theme='outline' - className='w-full h-12 flex items-center justify-center !rounded-full border border-gray-200 hover:bg-gray-50 transition-colors' + className='w-full h-12 flex items-center justify-center !rounded-xl border border-gray-200 hover:bg-gray-50 transition-colors' type='tertiary' icon={ <Icon svg={<WeChatIcon />} style={{ color: '#07C160' }} /> @@ -428,7 +428,7 @@ const RegisterForm = () => { {status.github_oauth && ( <Button theme='outline' - className='w-full h-12 flex items-center justify-center !rounded-full border border-gray-200 hover:bg-gray-50 transition-colors' + className='w-full h-12 flex items-center justify-center !rounded-xl border border-gray-200 hover:bg-gray-50 transition-colors' type='tertiary' icon={<IconGithubLogo size='large' />} onClick={handleGitHubClick} @@ -442,7 +442,7 @@ const RegisterForm = () => { {status.discord_oauth && ( <Button theme='outline' - className='w-full h-12 flex items-center justify-center !rounded-full border border-gray-200 hover:bg-gray-50 transition-colors' + className='w-full h-12 flex items-center justify-center !rounded-xl border border-gray-200 hover:bg-gray-50 transition-colors' type='tertiary' icon={ <SiDiscord @@ -463,7 +463,7 @@ const RegisterForm = () => { {status.oidc_enabled && ( <Button theme='outline' - className='w-full h-12 flex items-center justify-center !rounded-full border border-gray-200 hover:bg-gray-50 transition-colors' + className='w-full h-12 flex items-center justify-center !rounded-xl border border-gray-200 hover:bg-gray-50 transition-colors' type='tertiary' icon={<OIDCIcon style={{ color: '#1877F2' }} />} onClick={handleOIDCClick} @@ -476,7 +476,7 @@ const RegisterForm = () => { {status.linuxdo_oauth && ( <Button theme='outline' - className='w-full h-12 flex items-center justify-center !rounded-full border border-gray-200 hover:bg-gray-50 transition-colors' + className='w-full h-12 flex items-center justify-center !rounded-xl border border-gray-200 hover:bg-gray-50 transition-colors' type='tertiary' icon={ <LinuxDoIcon @@ -499,7 +499,7 @@ const RegisterForm = () => { <Button key={provider.slug} theme='outline' - className='w-full h-12 flex items-center justify-center !rounded-full border border-gray-200 hover:bg-gray-50 transition-colors' + className='w-full h-12 flex items-center justify-center !rounded-xl border border-gray-200 hover:bg-gray-50 transition-colors' type='tertiary' icon={getOAuthProviderIcon(provider.icon || '', 20)} onClick={() => handleCustomOAuthClick(provider)} @@ -527,7 +527,7 @@ const RegisterForm = () => { <Button theme='solid' type='primary' - className='w-full h-12 flex items-center justify-center bg-black text-white !rounded-full hover:bg-gray-800 transition-colors' + className='w-full h-12 flex items-center justify-center bg-black text-white !rounded-xl hover:bg-gray-800 transition-colors' icon={<IconMail size='large' />} onClick={handleEmailRegisterClick} loading={emailRegisterLoading} @@ -560,12 +560,12 @@ const RegisterForm = () => { <div className='w-full max-w-md'> <div className='flex items-center justify-center mb-6 gap-2'> <img src={logo} alt='Logo' className='h-10 rounded-full' /> - <Title heading={3} className='!text-gray-800'> + <Title heading={3} className='text-semi-color-text-0'> {systemName}
- +
{t('注 册')} @@ -678,7 +678,7 @@ const RegisterForm = () => { <div className='space-y-2 pt-2'> <Button theme='solid' - className='w-full !rounded-full' + className='w-full !rounded-xl' type='primary' htmlType='submit' onClick={handleSubmit} @@ -702,7 +702,7 @@ const RegisterForm = () => { <Button theme='outline' type='tertiary' - className='w-full !rounded-full' + className='w-full !rounded-xl' onClick={handleOtherRegisterOptionsClick} loading={otherRegisterOptionsLoading} > @@ -770,16 +770,7 @@ const RegisterForm = () => { }; return ( - <div className='relative overflow-hidden bg-gray-100 flex items-center justify-center py-12 px-4 sm:px-6 lg:px-8'> - {/* 背景模糊晕染球 */} - <div - className='blur-ball blur-ball-indigo' - style={{ top: '-80px', right: '-80px', transform: 'none' }} - /> - <div - className='blur-ball blur-ball-teal' - style={{ top: '50%', left: '-120px' }} - /> + <div className='relative overflow-hidden bg-transparent flex items-center justify-center py-12 px-4 sm:px-6 lg:px-8'> <div className='w-full max-w-sm mt-[60px]'> {showEmailRegister || !hasOAuthRegisterOptions diff --git a/web/src/components/dashboard/DashboardHeader.jsx b/web/src/components/dashboard/DashboardHeader.jsx index c2867e90c2a0..67e74dc3354c 100644 --- a/web/src/components/dashboard/DashboardHeader.jsx +++ b/web/src/components/dashboard/DashboardHeader.jsx @@ -29,12 +29,12 @@ const DashboardHeader = ({ loading, t, }) => { - const ICON_BUTTON_CLASS = 'text-white hover:bg-opacity-80 !rounded-full'; + const ICON_BUTTON_CLASS = 'text-semi-color-text-1 hover:bg-semi-color-fill-1 !rounded-lg'; return ( <div className='flex items-center justify-between mb-4'> <h2 - className='text-2xl font-semibold text-gray-800 transition-opacity duration-1000 ease-in-out' + className='text-2xl font-semibold text-semi-color-text-0 transition-opacity duration-1000 ease-in-out' style={{ opacity: greetingVisible ? 1 : 0 }} > {getGreeting} @@ -44,14 +44,14 @@ const DashboardHeader = ({ type='tertiary' icon={<Search size={16} />} onClick={showSearchModal} - className={`bg-green-500 hover:bg-green-600 ${ICON_BUTTON_CLASS}`} + className={`bg-semi-color-fill-0 hover:bg-semi-color-fill-1 ${ICON_BUTTON_CLASS}`} /> <Button type='tertiary' icon={<RefreshCw size={16} />} onClick={refresh} loading={loading} - className={`bg-blue-500 hover:bg-blue-600 ${ICON_BUTTON_CLASS}`} + className={`bg-semi-color-fill-0 hover:bg-semi-color-fill-1 ${ICON_BUTTON_CLASS}`} /> </div> </div> diff --git a/web/src/components/dashboard/StatsCards.jsx b/web/src/components/dashboard/StatsCards.jsx index ce72568354c1..7300af7412ca 100644 --- a/web/src/components/dashboard/StatsCards.jsx +++ b/web/src/components/dashboard/StatsCards.jsx @@ -39,7 +39,7 @@ const StatsCards = ({ <Card key={idx} {...CARD_PROPS} - className={`${group.color} border-0 !rounded-2xl w-full`} + className='!rounded-2xl border-0 w-full' title={group.title} > <div className='space-y-4'> @@ -58,7 +58,7 @@ const StatsCards = ({ {item.icon} </Avatar> <div> - <div className='text-xs text-gray-500'>{item.title}</div> + <div className='text-xs text-semi-color-text-2'>{item.title}</div> <div className='text-lg font-semibold'> <Skeleton loading={loading} diff --git a/web/src/components/layout/Footer.jsx b/web/src/components/layout/Footer.jsx index ba64689374ab..7f6d474c9898 100644 --- a/web/src/components/layout/Footer.jsx +++ b/web/src/components/layout/Footer.jsx @@ -199,14 +199,9 @@ const FooterBar = () => { <span className='!text-semi-color-text-1'> {t('设计与开发由')}{' '} </span> - <a - href='https://github.com/QuantumNous/new-api' - target='_blank' - rel='noopener noreferrer' - className='!text-semi-color-primary font-medium' - > - New API - </a> + <span className='!text-semi-color-text-1 font-medium'> + New + </span> </div> </div> </footer> @@ -231,14 +226,9 @@ const FooterBar = () => { <span className='!text-semi-color-text-1'> {t('设计与开发由')}{' '} </span> - <a - href='https://github.com/QuantumNous/new-api' - target='_blank' - rel='noopener noreferrer' - className='!text-semi-color-primary font-medium' - > - New API - </a> + <span className='!text-semi-color-text-1 font-medium'> + New + </span> </div> </div> </footer> diff --git a/web/src/components/layout/headerbar/index.jsx b/web/src/components/layout/headerbar/index.jsx index 81b51d7fe486..506a19c04de6 100644 --- a/web/src/components/layout/headerbar/index.jsx +++ b/web/src/components/layout/headerbar/index.jsx @@ -65,7 +65,7 @@ const HeaderBar = ({ onMobileMenuToggle, drawerOpen }) => { const { mainNavLinks } = useNavigation(t, docsLink, headerNavModules); return ( - <header className='text-semi-color-text-0 sticky top-0 z-50 transition-colors duration-300 bg-white/75 dark:bg-zinc-900/75 backdrop-blur-lg'> + <header className='text-semi-color-text-0 sticky top-0 z-50 transition-colors duration-300 bg-transparent'> <NoticeModal visible={noticeVisible} onClose={handleNoticeClose} diff --git a/web/src/constants/dashboard.constants.js b/web/src/constants/dashboard.constants.js index 7e930b479d57..1e9cd72efc9a 100644 --- a/web/src/constants/dashboard.constants.js +++ b/web/src/constants/dashboard.constants.js @@ -31,7 +31,7 @@ export const FORM_FIELD_PROPS = { size: 'large', }; -export const ICON_BUTTON_CLASS = 'text-white hover:bg-opacity-80 !rounded-full'; +export const ICON_BUTTON_CLASS = 'text-semi-color-text-1 hover:bg-semi-color-fill-1 !rounded-lg'; export const FLEX_CENTER_GAP2 = 'flex items-center gap-2'; export const ILLUSTRATION_SIZE = { width: 96, height: 96 }; diff --git a/web/src/index.css b/web/src/index.css index 63808fbb50b9..33cc7eba0d76 100644 --- a/web/src/index.css +++ b/web/src/index.css @@ -18,6 +18,14 @@ --sidebar-width: 180px; --sidebar-width-collapsed: 60px; --sidebar-current-width: var(--sidebar-width); + /* 橙棕色强调色 — 模仿 right.codes */ + --semi-color-primary: #c06030; + --semi-color-primary-hover: #a8522a; + --semi-color-primary-active: #904824; + --semi-color-primary-disabled: rgba(192, 96, 48, 0.4); + --semi-color-primary-light-default: rgba(192, 96, 48, 0.08); + --semi-color-primary-light-hover: rgba(192, 96, 48, 0.15); + --semi-color-primary-light-active: rgba(192, 96, 48, 0.22); } body.sidebar-collapsed { @@ -25,10 +33,30 @@ body.sidebar-collapsed { } body { - font-family: Lato, 'Helvetica Neue', Arial, Helvetica, 'Microsoft YaHei', - sans-serif; + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Inter', Roboto, + Oxygen, Ubuntu, 'Microsoft YaHei', sans-serif; + color: var(--semi-color-text-0); + background: linear-gradient(135deg, + #fce4ec 0%, + #f3e5f5 25%, + #e8eaf6 50%, + #fff3e0 75%, + #fce4ec 100% + ); + background-attachment: fixed; + min-height: 100vh; +} + +html.dark body { + background: linear-gradient(135deg, + #1a1a2e 0%, + #16213e 25%, + #0f3460 50%, + #1a1a2e 75%, + #16213e 100% + ); + background-attachment: fixed; color: var(--semi-color-text-0); - background-color: var(--semi-color-bg-0); } /* 桌面端禁止 body 纵向滚动 - 防止 VChart tooltip 触发页面滚动条 */ @@ -53,6 +81,23 @@ code { monospace; } +/* ==================== 布局/卡片透明 — right.codes 风格 ==================== */ +.semi-layout, +.semi-layout-content, +.semi-layout-header, +.semi-sider { + background-color: transparent !important; +} + +.semi-card { + background: rgba(255, 255, 255, 0.85) !important; + backdrop-filter: blur(10px); +} + +html.dark .semi-card { + background: rgba(30, 30, 30, 0.85) !important; +} + /* ==================== 布局相关样式 ==================== */ .semi-layout::-webkit-scrollbar, .semi-layout-content::-webkit-scrollbar, @@ -126,13 +171,13 @@ code { flex-direction: column; min-height: 0; transition: width 0.3s ease; - background: var(--semi-color-bg-0); + background: transparent; } .sidebar-nav { flex: 1; width: 100%; - background: var(--semi-color-bg-0); + background: transparent; height: 100%; overflow-x: hidden; border-right: none; @@ -156,14 +201,14 @@ code { } .sidebar-nav-item:hover { - background-color: rgba(var(--semi-blue-0), 0.08); - color: var(--semi-color-primary); + background-color: rgba(192, 96, 48, 0.08); + color: #c06030; } .sidebar-nav-item-selected { - background-color: rgba(var(--semi-blue-0), 0.12); - color: var(--semi-color-primary); - font-weight: 500; + background-color: rgba(192, 96, 48, 0.12); + color: #c06030; + font-weight: 600; } /* 图标容器样式 */ @@ -212,7 +257,7 @@ code { padding: 12px; margin-top: auto; cursor: pointer; - background-color: var(--semi-color-bg-0); + background-color: transparent; position: sticky; bottom: 0; z-index: 10; @@ -691,34 +736,16 @@ html.dark .sbg-variant-green { } .shine-text { - background: linear-gradient( - 90deg, - currentColor 0%, - currentColor 40%, - rgba(255, 255, 255, 0.9) 50%, - currentColor 60%, - currentColor 100% - ); - background-size: 200% 100%; - -webkit-background-clip: text; - background-clip: text; - -webkit-text-fill-color: transparent; - animation: sweep-shine 4s linear infinite; + color: var(--semi-color-primary); + -webkit-text-fill-color: unset; + background: none; + animation: none; } .dark .shine-text { - background: linear-gradient( - 90deg, - currentColor 0%, - currentColor 40%, - #facc15 50%, - currentColor 60%, - currentColor 100% - ); - background-size: 200% 100%; - -webkit-background-clip: text; - background-clip: text; - -webkit-text-fill-color: transparent; + color: var(--semi-color-primary); + -webkit-text-fill-color: unset; + background: none; } /* ==================== ScrollList 定制样式 ==================== */ @@ -748,13 +775,7 @@ html.dark .sbg-variant-green { /* ==================== Banner 背景模糊球 ==================== */ .blur-ball { - position: absolute; - width: 360px; - height: 360px; - border-radius: 50%; - filter: blur(120px); - pointer-events: none; - z-index: -1; + display: none; } .blur-ball-indigo { @@ -802,22 +823,7 @@ html:not(.dark) .blur-ball-teal { } .with-pastel-balls::before { - content: ''; - position: absolute; - inset: 0; - pointer-events: none; - z-index: 0; - background: radial-gradient( - circle at -5% -10%, - var(--pb1) 0%, - transparent 60% - ), - radial-gradient(circle at 105% -10%, var(--pb2) 0%, transparent 55%), - radial-gradient(circle at 5% 110%, var(--pb3) 0%, transparent 55%), - radial-gradient(circle at 105% 110%, var(--pb4) 0%, transparent 50%); - filter: blur(var(--pb-blur)); - opacity: var(--pb-opacity); - transform: translateZ(0); + display: none; } /* 暗黑模式下更柔和的色彩和透明度 */ @@ -934,7 +940,7 @@ html.dark .with-pastel-balls::before { /* ==================== semi-ui 组件自定义样式 ==================== */ .semi-card-header, .semi-card-body { - padding: 10px !important; + padding: 16px !important; } /* ==================== 使用日志: channel affinity tag ==================== */ @@ -979,7 +985,7 @@ html.dark .with-pastel-balls::before { .semi-select, .semi-button, .semi-datepicker-range-input { - border-radius: 10px !important; + border-radius: 12px !important; } @keyframes slideInLeft { diff --git a/web/src/pages/Home/index.jsx b/web/src/pages/Home/index.jsx index c153c1b3da99..30f715925ef3 100644 --- a/web/src/pages/Home/index.jsx +++ b/web/src/pages/Home/index.jsx @@ -159,15 +159,12 @@ const Home = () => { <div className='w-full overflow-x-hidden'> {/* Banner 部分 */} <div className='w-full border-b border-semi-color-border min-h-[500px] md:min-h-[600px] lg:min-h-[700px] relative overflow-x-hidden'> - {/* 背景模糊晕染球 */} - <div className='blur-ball blur-ball-indigo' /> - <div className='blur-ball blur-ball-teal' /> <div className='flex items-center justify-center h-full px-4 py-20 md:py-24 lg:py-32 mt-10'> {/* 居中内容区 */} <div className='flex flex-col items-center justify-center text-center max-w-4xl mx-auto'> <div className='flex flex-col items-center justify-center mb-6 md:mb-8'> <h1 - className={`text-4xl md:text-5xl lg:text-6xl xl:text-7xl font-bold text-semi-color-text-0 leading-tight ${isChinese ? 'tracking-wide md:tracking-wider' : ''}`} + className={`text-3xl md:text-4xl lg:text-5xl xl:text-6xl font-bold text-semi-color-text-0 leading-tight tracking-tight ${isChinese ? 'tracking-wide md:tracking-wider' : ''}`} > <> {t('统一的')} @@ -175,7 +172,7 @@ const Home = () => { <span className='shine-text'>{t('大模型接口网关')}</span> </> </h1> - <p className='text-base md:text-lg lg:text-xl text-semi-color-text-1 mt-4 md:mt-6 max-w-xl'> + <p className='text-sm md:text-base lg:text-lg text-semi-color-text-2 mt-4 md:mt-6 max-w-xl'> {t('更好的价格,更好的稳定性,只需要将模型基址替换为:')} </p> {/* BASE URL 与端点选择 */} @@ -218,7 +215,7 @@ const Home = () => { theme='solid' type='primary' size={isMobile ? 'default' : 'large'} - className='!rounded-3xl px-8 py-2' + className='!rounded-xl px-8 py-2' icon={<IconPlay />} > {t('获取密钥')} @@ -227,7 +224,7 @@ const Home = () => { {isDemoSiteMode && statusState?.status?.version ? ( <Button size={isMobile ? 'default' : 'large'} - className='flex items-center !rounded-3xl px-6 py-2' + className='flex items-center !rounded-xl px-6 py-2' icon={<IconGithubLogo />} onClick={() => window.open( @@ -242,7 +239,7 @@ const Home = () => { docsLink && ( <Button size={isMobile ? 'default' : 'large'} - className='flex items-center !rounded-3xl px-6 py-2' + className='flex items-center !rounded-xl px-6 py-2' icon={<IconFile />} onClick={() => window.open(docsLink, '_blank')} > @@ -257,73 +254,73 @@ const Home = () => { <div className='flex items-center mb-6 md:mb-8 justify-center'> <Text type='tertiary' - className='text-lg md:text-xl lg:text-2xl font-light' + className='text-lg md:text-xl font-light' > {t('支持众多的大模型供应商')} </Text> </div> <div className='flex flex-wrap items-center justify-center gap-3 sm:gap-4 md:gap-6 lg:gap-8 max-w-5xl mx-auto px-4'> - <div className='w-8 h-8 sm:w-10 sm:h-10 md:w-12 md:h-12 flex items-center justify-center'> + <div className='w-8 h-8 sm:w-10 sm:h-10 md:w-12 md:h-12 flex items-center justify-center '> <Moonshot size={40} /> </div> - <div className='w-8 h-8 sm:w-10 sm:h-10 md:w-12 md:h-12 flex items-center justify-center'> + <div className='w-8 h-8 sm:w-10 sm:h-10 md:w-12 md:h-12 flex items-center justify-center '> <OpenAI size={40} /> </div> - <div className='w-8 h-8 sm:w-10 sm:h-10 md:w-12 md:h-12 flex items-center justify-center'> + <div className='w-8 h-8 sm:w-10 sm:h-10 md:w-12 md:h-12 flex items-center justify-center '> <XAI size={40} /> </div> - <div className='w-8 h-8 sm:w-10 sm:h-10 md:w-12 md:h-12 flex items-center justify-center'> + <div className='w-8 h-8 sm:w-10 sm:h-10 md:w-12 md:h-12 flex items-center justify-center '> <Zhipu.Color size={40} /> </div> - <div className='w-8 h-8 sm:w-10 sm:h-10 md:w-12 md:h-12 flex items-center justify-center'> + <div className='w-8 h-8 sm:w-10 sm:h-10 md:w-12 md:h-12 flex items-center justify-center '> <Volcengine.Color size={40} /> </div> - <div className='w-8 h-8 sm:w-10 sm:h-10 md:w-12 md:h-12 flex items-center justify-center'> + <div className='w-8 h-8 sm:w-10 sm:h-10 md:w-12 md:h-12 flex items-center justify-center '> <Cohere.Color size={40} /> </div> - <div className='w-8 h-8 sm:w-10 sm:h-10 md:w-12 md:h-12 flex items-center justify-center'> + <div className='w-8 h-8 sm:w-10 sm:h-10 md:w-12 md:h-12 flex items-center justify-center '> <Claude.Color size={40} /> </div> - <div className='w-8 h-8 sm:w-10 sm:h-10 md:w-12 md:h-12 flex items-center justify-center'> + <div className='w-8 h-8 sm:w-10 sm:h-10 md:w-12 md:h-12 flex items-center justify-center '> <Gemini.Color size={40} /> </div> - <div className='w-8 h-8 sm:w-10 sm:h-10 md:w-12 md:h-12 flex items-center justify-center'> + <div className='w-8 h-8 sm:w-10 sm:h-10 md:w-12 md:h-12 flex items-center justify-center '> <Suno size={40} /> </div> - <div className='w-8 h-8 sm:w-10 sm:h-10 md:w-12 md:h-12 flex items-center justify-center'> + <div className='w-8 h-8 sm:w-10 sm:h-10 md:w-12 md:h-12 flex items-center justify-center '> <Minimax.Color size={40} /> </div> - <div className='w-8 h-8 sm:w-10 sm:h-10 md:w-12 md:h-12 flex items-center justify-center'> + <div className='w-8 h-8 sm:w-10 sm:h-10 md:w-12 md:h-12 flex items-center justify-center '> <Wenxin.Color size={40} /> </div> - <div className='w-8 h-8 sm:w-10 sm:h-10 md:w-12 md:h-12 flex items-center justify-center'> + <div className='w-8 h-8 sm:w-10 sm:h-10 md:w-12 md:h-12 flex items-center justify-center '> <Spark.Color size={40} /> </div> - <div className='w-8 h-8 sm:w-10 sm:h-10 md:w-12 md:h-12 flex items-center justify-center'> + <div className='w-8 h-8 sm:w-10 sm:h-10 md:w-12 md:h-12 flex items-center justify-center '> <Qingyan.Color size={40} /> </div> - <div className='w-8 h-8 sm:w-10 sm:h-10 md:w-12 md:h-12 flex items-center justify-center'> + <div className='w-8 h-8 sm:w-10 sm:h-10 md:w-12 md:h-12 flex items-center justify-center '> <DeepSeek.Color size={40} /> </div> - <div className='w-8 h-8 sm:w-10 sm:h-10 md:w-12 md:h-12 flex items-center justify-center'> + <div className='w-8 h-8 sm:w-10 sm:h-10 md:w-12 md:h-12 flex items-center justify-center '> <Qwen.Color size={40} /> </div> - <div className='w-8 h-8 sm:w-10 sm:h-10 md:w-12 md:h-12 flex items-center justify-center'> + <div className='w-8 h-8 sm:w-10 sm:h-10 md:w-12 md:h-12 flex items-center justify-center '> <Midjourney size={40} /> </div> - <div className='w-8 h-8 sm:w-10 sm:h-10 md:w-12 md:h-12 flex items-center justify-center'> + <div className='w-8 h-8 sm:w-10 sm:h-10 md:w-12 md:h-12 flex items-center justify-center '> <Grok size={40} /> </div> - <div className='w-8 h-8 sm:w-10 sm:h-10 md:w-12 md:h-12 flex items-center justify-center'> + <div className='w-8 h-8 sm:w-10 sm:h-10 md:w-12 md:h-12 flex items-center justify-center '> <AzureAI.Color size={40} /> </div> - <div className='w-8 h-8 sm:w-10 sm:h-10 md:w-12 md:h-12 flex items-center justify-center'> + <div className='w-8 h-8 sm:w-10 sm:h-10 md:w-12 md:h-12 flex items-center justify-center '> <Hunyuan.Color size={40} /> </div> - <div className='w-8 h-8 sm:w-10 sm:h-10 md:w-12 md:h-12 flex items-center justify-center'> + <div className='w-8 h-8 sm:w-10 sm:h-10 md:w-12 md:h-12 flex items-center justify-center '> <Xinference.Color size={40} /> </div> - <div className='w-8 h-8 sm:w-10 sm:h-10 md:w-12 md:h-12 flex items-center justify-center'> + <div className='w-8 h-8 sm:w-10 sm:h-10 md:w-12 md:h-12 flex items-center justify-center '> <Typography.Text className='!text-lg sm:!text-xl md:!text-2xl lg:!text-3xl font-bold'> 30+ </Typography.Text>