style: revert to cyan accent, fix dark hover button priority
Docker Build / Build and Push Docker Image (push) Successful in 4m15s

This commit is contained in:
2026-06-14 16:13:53 +08:00
parent 2c4c2002c6
commit 2723bd66ad
4 changed files with 32 additions and 32 deletions
+3 -3
View File
@@ -58,7 +58,7 @@ function FooterLinkItem(props: { link: FooterLink }) {
href={props.link.href}
target='_blank'
rel='noopener noreferrer'
className='text-[#8B8D97] hover:text-[#28C840] text-sm transition-colors duration-200'
className='text-[#8B8D97] hover:text-[#00D2FF] text-sm transition-colors duration-200'
>
{label}
</a>
@@ -110,7 +110,7 @@ function LegalLinks(props: { leadingSeparator?: boolean }) {
)}
<Link
to={item.href}
className='text-[#8B8D97] hover:text-[#28C840] transition-colors duration-200'
className='text-[#8B8D97] hover:text-[#00D2FF] transition-colors duration-200'
>
{item.label}
</Link>
@@ -131,7 +131,7 @@ function ProjectAttribution(props: { currentYear: number; inline?: boolean }) {
href='https://git.viaeon.com/admin/new-api'
target='_blank'
rel='noopener noreferrer'
className='text-[#8B8D97] hover:text-[#28C840] font-medium transition-colors'
className='text-[#8B8D97] hover:text-[#00D2FF] font-medium transition-colors'
>
{t('ModelsToken')}
</a>
@@ -260,11 +260,11 @@ export function PublicHeader(props: PublicHeaderProps) {
<div className='mx-2 h-4 w-px bg-white/10' />
)}
{showLanguageSwitcher && <LanguageSwitcher className='text-white/70 hover:bg-white/10 hover:text-white' />}
{showThemeSwitch && <ThemeSwitch className='text-white/70 hover:bg-white/10 hover:text-white' />}
{showLanguageSwitcher && <LanguageSwitcher className='text-white/70 hover:bg-white/10 hover:text-white dark:hover:bg-white/10' />}
{showThemeSwitch && <ThemeSwitch className='text-white/70 hover:bg-white/10 hover:text-white dark:hover:bg-white/10' />}
{showNotifications && (
<NotificationPopover
className='text-white/70 hover:bg-white/10 hover:text-white'
className='text-white/70 hover:bg-white/10 hover:text-white dark:hover:bg-white/10'
open={notifications.popoverOpen}
onOpenChange={notifications.setPopoverOpen}
unreadCount={notifications.unreadCount}
@@ -286,7 +286,7 @@ export function PublicHeader(props: PublicHeaderProps) {
) : (
<Button
size='sm'
className='h-8 rounded-lg bg-[#28C840] px-3.5 text-xs font-semibold text-[#0A0E14] hover:bg-[#22A836]'
className='h-8 rounded-lg bg-[#00D2FF] px-3.5 text-xs font-semibold text-[#0A0E14] hover:bg-[#00B8E6]'
render={<Link to='/sign-in' />}
>
{t('Sign in')}
@@ -298,7 +298,7 @@ export function PublicHeader(props: PublicHeaderProps) {
{/* Mobile: compact actions + hamburger */}
<div className='flex items-center gap-2 sm:hidden'>
{showThemeSwitch && <ThemeSwitch className='text-white/70 hover:bg-white/10 hover:text-white' />}
{showThemeSwitch && <ThemeSwitch className='text-white/70 hover:bg-white/10 hover:text-white dark:hover:bg-white/10' />}
{showAuthButtons && !loading && isAuthenticated && (
<ProfileDropdown />
)}
@@ -405,7 +405,7 @@ export function PublicHeader(props: PublicHeaderProps) {
<Link
to={isAuthenticated ? '/dashboard' : '/sign-in'}
onClick={() => setMobileOpen(false)}
className='bg-[#28C840] text-[#0A0E14] inline-flex h-10 items-center justify-center rounded-lg text-sm font-semibold transition-opacity hover:opacity-90 active:opacity-80'
className='bg-[#00D2FF] text-[#0A0E14] inline-flex h-10 items-center justify-center rounded-lg text-sm font-semibold transition-opacity hover:opacity-90 active:opacity-80'
>
{isAuthenticated ? t('Go to Dashboard') : t('Sign in')}
</Link>
+17 -17
View File
@@ -28,14 +28,14 @@ interface HeroProps {
isAuthenticated?: boolean
}
/* Termius-dark terminal palette */
/* Termius-dark palette: black bg, cyan accent */
const T = {
bg: '#0A0E14',
surface: '#0F1419',
border: '#1A1F29',
accent: '#00D2FF',
accentDim: '#0099BB',
green: '#28C840',
greenDim: '#1B7A2B',
cyan: '#00D2FF',
yellow: '#FEBC2E',
gray: '#5C6370',
grayLight: '#8B8D97',
@@ -67,7 +67,7 @@ export function Hero(props: HeroProps) {
className='pointer-events-none absolute inset-0'
style={{
background:
'radial-gradient(ellipse 60% 35% at 50% -5%, rgba(40,200,64,0.06) 0%, transparent 70%)',
'radial-gradient(ellipse 60% 35% at 50% -5%, rgba(0,210,255,0.06) 0%, transparent 70%)',
}}
/>
@@ -76,7 +76,7 @@ export function Hero(props: HeroProps) {
<div className='flex min-h-[calc(100svh-3rem)] flex-col items-center justify-center py-20 text-center'>
<h1
className='max-w-3xl text-[clamp(2rem,5.5vw,3.5rem)] leading-[1.1] font-bold tracking-[-0.025em]'
style={{ color: T.green }}
style={{ color: T.accent }}
>
{t('Unified LLM Gateway')}
</h1>
@@ -89,7 +89,7 @@ export function Hero(props: HeroProps) {
{props.isAuthenticated ? (
<Button
className='group h-11 rounded-lg px-6 text-sm font-semibold hover:opacity-90'
style={{ backgroundColor: T.green, color: T.bg }}
style={{ backgroundColor: T.accent, color: T.bg }}
render={<Link to='/dashboard' />}
>
{t('Go to Dashboard')}
@@ -99,7 +99,7 @@ export function Hero(props: HeroProps) {
<>
<Button
className='group h-11 rounded-lg px-6 text-sm font-semibold hover:opacity-90'
style={{ backgroundColor: T.green, color: T.bg }}
style={{ backgroundColor: T.accent, color: T.bg }}
render={<Link to='/sign-up' />}
>
{t('Get Started')}
@@ -137,7 +137,7 @@ export function Hero(props: HeroProps) {
<div>
<span style={{ color: T.green }}>$</span>{' '}
<span style={{ color: T.white }}>curl</span>{' '}
<span style={{ color: T.cyan }}>{serverAddress}/v1/chat/completions</span>{' '}
<span style={{ color: T.accent }}>{serverAddress}/v1/chat/completions</span>{' '}
<span style={{ color: T.gray }}>\</span>
</div>
<div className='pl-4'>
@@ -156,11 +156,11 @@ export function Hero(props: HeroProps) {
</div>
<div className='mt-2'>
<span style={{ color: T.gray }}>{"{"}</span>{' '}
<span style={{ color: T.cyan }}>"model"</span>
<span style={{ color: T.accent }}>"model"</span>
<span style={{ color: T.gray }}>:</span>{' '}
<span style={{ color: T.yellow }}>"gpt-4o"</span>
<span style={{ color: T.gray }}>,</span>{' '}
<span style={{ color: T.cyan }}>"usage"</span>
<span style={{ color: T.accent }}>"usage"</span>
<span style={{ color: T.gray }}>:</span>{' '}
<span style={{ color: T.gray }}>{"{...}"}</span>
<span style={{ color: T.gray }}>{"}"}</span>
@@ -195,7 +195,7 @@ export function Hero(props: HeroProps) {
backgroundColor: T.surface,
}}
onMouseEnter={(e) => {
e.currentTarget.style.borderColor = T.greenDim
e.currentTarget.style.borderColor = T.accentDim
}}
onMouseLeave={(e) => {
e.currentTarget.style.borderColor = T.border
@@ -205,9 +205,9 @@ export function Hero(props: HeroProps) {
<div className={i % 2 === 1 ? 'lg:order-2' : ''}>
<div
className='mb-3 flex size-9 items-center justify-center rounded-md'
style={{ backgroundColor: `${T.green}15` }}
>
<feature.icon className='size-[18px]' style={{ color: T.green }} />
style={{ backgroundColor: `${T.accent}15` }}
>
<feature.icon className='size-[18px]' style={{ color: T.accent }} />
</div>
<h3 className='text-base font-semibold' style={{ color: T.white }}>
{t(feature.title)}
@@ -275,9 +275,9 @@ function tokenize(line: string, keywords: Set<string>, _stringRe: RegExp) {
if (wordMatch) {
const word = wordMatch[1]
if (keywords.has(word)) {
tokens.push(<span key={key++} style={{ color: T.cyan }}>{word}</span>)
tokens.push(<span key={key++} style={{ color: T.accent }}>{word}</span>)
} else if (/^[A-Z]/.test(word)) {
tokens.push(<span key={key++} style={{ color: T.cyan }}>{word}</span>)
tokens.push(<span key={key++} style={{ color: T.accent }}>{word}</span>)
} else {
tokens.push(<span key={key++} style={{ color: T.white }}>{word}</span>)
}
@@ -298,7 +298,7 @@ function tokenize(line: string, keywords: Set<string>, _stringRe: RegExp) {
if ('(){}[].:;,'.includes(ch)) {
tokens.push(<span key={key++} style={{ color: T.grayLight }}>{ch}</span>)
} else if ('=<>!+-*/%&|?'.includes(ch)) {
tokens.push(<span key={key++} style={{ color: T.cyan }}>{ch}</span>)
tokens.push(<span key={key++} style={{ color: T.accent }}>{ch}</span>)
} else {
tokens.push(<span key={key++} style={{ color: T.white }}>{ch}</span>)
}
+6 -6
View File
@@ -146,14 +146,14 @@ For commercial licensing, please contact admin@modelstoken.com
}
.dark {
/* Termius-dark: deep black bg, green accent (#28C840 ≈ oklch(0.72 0.19 145)) */
/* Termius-dark: deep black bg, cyan accent (#00D2FF ≈ oklch(0.78 0.15 210)) */
--background: oklch(0.10 0.005 270);
--foreground: oklch(0.93 0.005 270);
--card: oklch(0.14 0.005 270);
--card-foreground: oklch(0.93 0.005 270);
--popover: oklch(0.14 0.005 270);
--popover-foreground: oklch(0.93 0.005 270);
--primary: oklch(0.72 0.19 145);
--primary: oklch(0.78 0.15 210);
--primary-foreground: oklch(0.10 0.005 270);
--secondary: oklch(0.22 0.005 270);
--secondary-foreground: oklch(0.88 0.005 270);
@@ -173,20 +173,20 @@ For commercial licensing, please contact admin@modelstoken.com
--neutral-foreground: oklch(0.10 0.005 270);
--border: oklch(0.22 0.005 270);
--input: oklch(0.22 0.005 270);
--ring: oklch(0.72 0.19 145);
--chart-1: oklch(0.72 0.19 145);
--ring: oklch(0.78 0.15 210);
--chart-1: oklch(0.78 0.15 210);
--chart-2: oklch(0.696 0.17 162.48);
--chart-3: oklch(0.769 0.188 70.08);
--chart-4: oklch(0.627 0.265 303.9);
--chart-5: oklch(0.645 0.246 16.439);
--sidebar: oklch(0.08 0.005 270);
--sidebar-foreground: oklch(0.88 0.005 270);
--sidebar-primary: oklch(0.72 0.19 145);
--sidebar-primary: oklch(0.78 0.15 210);
--sidebar-primary-foreground: oklch(0.10 0.005 270);
--sidebar-accent: oklch(0.18 0.005 270);
--sidebar-accent-foreground: oklch(0.88 0.005 270);
--sidebar-border: oklch(0.22 0.005 270);
--sidebar-ring: oklch(0.72 0.19 145);
--sidebar-ring: oklch(0.78 0.15 210);
--skeleton-base: oklch(0.18 0.005 270);
--skeleton-highlight: oklch(0.26 0.005 270);
}