fix(ui): voix Second Brain à la connexion et libellés du rail

Remplace le titre « notepad » et le jargon (Intelligence OS, SM-2) par des mots lisibles, et aligne la langue des pages d’auth sur le reste du site.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Antigravity
2026-08-30 10:56:00 +00:00
parent e0fd5393ca
commit ebf6f16fde
19 changed files with 194 additions and 174 deletions

View File

@@ -0,0 +1,52 @@
'use client';
import { useLanguage } from '@/lib/i18n/LanguageProvider';
import Link from 'next/link';
import { ArrowLeft } from 'lucide-react';
function AuthHeader() {
const { t } = useLanguage();
return (
<header className="p-6 md:p-8 flex justify-between items-center relative z-10">
<Link
href="/"
aria-label={t('general.back')}
className="flex items-center gap-2 text-[var(--muted-foreground)] hover:text-[var(--foreground)] transition-colors group"
>
<div className="w-8 h-8 rounded-full border border-[var(--border)] flex items-center justify-center group-hover:border-[var(--color-brand-accent)] transition-colors">
<ArrowLeft size={14} className="group-hover:-translate-x-0.5 transition-transform rtl:rotate-180" />
</div>
</Link>
<Link href="/" className="flex items-center gap-2">
<div className="w-8 h-8 bg-[var(--foreground)] text-[var(--background)] rounded-xl flex items-center justify-center shadow-lg">
<span className="font-serif font-bold text-xl">M</span>
</div>
<span className="font-serif text-xl font-medium tracking-tight">Memento</span>
</Link>
<div className="w-8" />
</header>
);
}
export function AuthShell({ children }: { children: React.ReactNode }) {
return (
<div className="min-h-screen bg-[#FDFCFB] dark:bg-[#0D0D0D] flex flex-col relative overflow-hidden">
<div className="absolute top-[-10%] right-[-10%] w-[50%] h-[50%] bg-[var(--color-brand-accent)]/5 blur-[120px] rounded-full pointer-events-none" />
<div className="absolute bottom-[-10%] left-[-10%] w-[50%] h-[50%] bg-[#D4A373]/5 blur-[120px] rounded-full pointer-events-none" />
<AuthHeader />
<main className="flex-1 flex items-center justify-center p-4 md:p-6 relative z-10">
<div className="w-full max-w-md">
{children}
<p className="text-center mt-8 text-[9px] text-[var(--muted-foreground)] font-bold uppercase tracking-[0.3em] opacity-40 select-none">
© 2026 Memento
</p>
</div>
</main>
</div>
);
}

View File

@@ -1386,8 +1386,8 @@ export function Sidebar({ className, user }: { className?: string; user?: any })
)}
aria-hidden={isImmersiveRoute && userCollapsed ? true : undefined}
>
{/* ── Column 1 : Rail d'icônes (54px) — inspiré du prototype ── */}
<div className="w-[54px] border-e border-border/40 bg-[#FAF9F5] dark:bg-[#0E0E0E] flex flex-col items-center justify-between py-5 shrink-0 select-none overflow-hidden">
{/* ── Column 1 : Rail icône + libellé — destinations lisibles sans survol ── */}
<div className="w-[72px] border-e border-border/40 bg-[#FAF9F5] dark:bg-[#0E0E0E] flex flex-col items-center justify-between py-3 shrink-0 select-none overflow-y-auto overflow-x-hidden custom-scrollbar">
{/* Top : Logo + navigation */}
<div className="flex flex-col items-center gap-[18px] w-full">
@@ -1425,12 +1425,12 @@ export function Sidebar({ className, user }: { className?: string; user?: any })
</DropdownMenu>
{/* Boutons de navigation principaux */}
<div className="flex flex-col gap-2 w-full px-1.5">
<div className="flex flex-col gap-1 w-full px-1">
{([
{
id: 'dashboard',
icon: LayoutGrid,
label: t('nav.dashboard') || 'Dashboard',
label: t('nav.home'),
onClick: () => {
setActiveView('dashboard')
router.replace('/home')
@@ -1470,7 +1470,7 @@ export function Sidebar({ className, user }: { className?: string; user?: any })
{
id: 'agents',
icon: Bot,
label: t('agents.intelligenceOS') || 'Intelligence IA',
label: t('nav.agents'),
onClick: () => {
setActiveView('agents')
router.push('/agents')
@@ -1492,20 +1492,17 @@ export function Sidebar({ className, user }: { className?: string; user?: any })
aria-current={item.isActive ? 'page' : undefined}
onClick={item.onClick}
className={cn(
'w-9 h-9 rounded-lg flex items-center justify-center transition-all relative group',
'w-full rounded-lg flex flex-col items-center justify-center gap-0.5 py-1.5 px-0.5 transition-all relative',
item.isActive
? 'bg-brand-accent/10 text-brand-accent border border-brand-accent/25'
: 'text-concrete hover:text-ink dark:hover:text-white hover:bg-black/[0.04] dark:hover:bg-white/[0.04]'
: 'text-ink/70 hover:text-ink dark:text-white/70 dark:hover:text-white hover:bg-black/[0.04] dark:hover:bg-white/[0.04]'
)}
>
{item.isActive && (
<div className="absolute left-0 top-1/2 -translate-y-1/2 w-1 h-4 bg-brand-accent rounded-r-full" />
<div className="absolute start-0 top-1/2 -translate-y-1/2 w-1 h-4 bg-brand-accent rounded-e-full" />
)}
<item.icon size={16} />
<span
aria-hidden="true"
className="absolute left-[50px] top-1/2 -translate-y-1/2 bg-ink dark:bg-white dark:text-ink text-paper text-[9px] font-bold py-1 px-2 rounded opacity-0 group-hover:opacity-100 transition-opacity whitespace-nowrap z-50 pointer-events-none shadow-md uppercase tracking-wider"
>
<item.icon size={16} aria-hidden />
<span className="text-[11px] leading-tight font-semibold text-center max-w-full line-clamp-2">
{item.label}
</span>
</button>
@@ -1519,6 +1516,7 @@ export function Sidebar({ className, user }: { className?: string; user?: any })
<Link
href="/trash"
aria-label={t('sidebar.trash')}
className={cn(
'w-9 h-9 rounded-lg flex items-center justify-center transition-all relative group',
pathname === '/trash'
@@ -1538,6 +1536,7 @@ export function Sidebar({ className, user }: { className?: string; user?: any })
<Link
href="/archive"
aria-label={t('sidebar.archive')}
className={cn(
'w-9 h-9 rounded-lg flex items-center justify-center transition-all relative group',
pathname === '/archive'
@@ -1554,6 +1553,7 @@ export function Sidebar({ className, user }: { className?: string; user?: any })
<Link
href="/home?shared=1&forceList=1"
aria-label={t('sidebar.sharedWithMe')}
className={cn(
'w-9 h-9 rounded-lg flex items-center justify-center transition-all relative group',
searchParams.get('shared') === '1' && pathname === '/home'
@@ -1570,7 +1570,8 @@ export function Sidebar({ className, user }: { className?: string; user?: any })
<button
onClick={openSearch}
className="w-9 h-9 rounded-lg flex items-center justify-center text-concrete hover:text-ink dark:hover:text-white hover:bg-black/[0.04] dark:hover:bg-white/[0.04] transition-all relative group"
title="Ctrl+K"
aria-label={t('sidebar.searchShortcut')}
title={t('sidebar.searchShortcut')}
>
<Search size={15} />
<span className="absolute left-[50px] top-1/2 -translate-y-1/2 bg-ink dark:bg-white dark:text-ink text-paper text-[9px] font-bold py-1 px-2 rounded opacity-0 group-hover:opacity-100 transition-opacity whitespace-nowrap z-50 pointer-events-none shadow-md uppercase tracking-wider">
@@ -1580,6 +1581,7 @@ export function Sidebar({ className, user }: { className?: string; user?: any })
<button
onClick={toggleTheme}
aria-label={isDark ? t('sidebar.lightMode') : t('sidebar.darkMode')}
className="w-9 h-9 rounded-lg flex items-center justify-center text-concrete hover:text-ink dark:hover:text-white hover:bg-black/[0.04] dark:hover:bg-white/[0.04] transition-all relative group"
>
{isDark ? <Sun size={15} /> : <Moon size={15} />}
@@ -1590,6 +1592,7 @@ export function Sidebar({ className, user }: { className?: string; user?: any })
<Link
href="/settings"
aria-label={t('nav.settings')}
className={cn(
'w-9 h-9 rounded-lg flex items-center justify-center transition-all relative group',
pathname.startsWith('/settings')
@@ -1606,6 +1609,7 @@ export function Sidebar({ className, user }: { className?: string; user?: any })
<button
onClick={() => performSignOut('/login')}
aria-label={t('sidebar.signOut')}
className="w-9 h-9 rounded-lg flex items-center justify-center text-concrete hover:text-red-500 hover:bg-rose-500/5 transition-all relative group"
>
<LogOut size={14} />
@@ -1971,7 +1975,7 @@ export function Sidebar({ className, user }: { className?: string; user?: any })
transition={{ duration: 0.2 }}
>
<p className="text-[10px] font-bold text-muted-foreground tracking-widest uppercase mb-4 px-4">
{t('agents.intelligenceOS')}
{t('nav.agents')}
</p>
<div className="space-y-1">
{[