fix(quotas): unifier le décompte IA (BYOK, rollback) et combler les fuites
All checks were successful
CI / Lint, Unit Tests & Build (push) Successful in 6m55s
CI / Deploy production (on server) (push) Successful in 36s

Centralise la réserve via ai-quota, corrige admin unavailable (-1), brancher les routes sans quota et le host-pays brainstorm, avec usage-meter élargi, noms de clusters, MCP et ajustements dashboard/insights.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Antigravity
2026-07-15 20:42:25 +00:00
parent 30da592ba2
commit 4fe31ebc99
75 changed files with 2949 additions and 785 deletions

View File

@@ -1296,18 +1296,29 @@ export function Sidebar({ className, user }: { className?: string; user?: any })
ref={asideRef}
style={sidebarWidth !== null ? { width: sidebarWidth } : undefined}
className={cn(
// Sur /insights replié : fixed hors flux pour que <main flex-1> s'agrandisse.
// Ne jamais ajouter un `relative` nu ensuite — twMerge le ferait gagner sur `fixed`
// et réserverait toujours l'espace (bande beige vide).
isImmersiveRoute && userCollapsed
? 'fixed inset-y-0 start-0 z-[70]'
: 'fixed inset-y-0 start-0 z-[70] md:relative md:z-auto',
sidebarWidth === null && 'w-80 md:w-[26rem] 2xl:w-[30rem]',
'h-full min-h-0 shrink-0 flex flex-row self-stretch relative overflow-visible',
? cn(
'fixed inset-y-0 start-0 z-[70]',
isRtl ? 'translate-x-full' : '-translate-x-full',
'pointer-events-none',
sidebarWidth === null && 'w-80 md:w-[26rem] 2xl:w-[30rem]',
)
: cn(
'fixed inset-y-0 start-0 z-[70] md:relative md:z-auto',
sidebarWidth === null && 'w-80 md:w-[26rem] 2xl:w-[30rem]',
isMobileOpen
? 'translate-x-0 shadow-2xl'
: cn(isRtl ? 'translate-x-full md:translate-x-0' : '-translate-x-full md:translate-x-0'),
),
'h-full min-h-0 shrink-0 flex flex-row self-stretch overflow-visible',
'transition-transform duration-300 ease-in-out',
isImmersiveRoute && userCollapsed
? '-translate-x-full'
: (isMobileOpen ? 'translate-x-0 shadow-2xl' : '-translate-x-full md:translate-x-0'),
'border-e border-border/40 bg-white/95 md:bg-white/30 backdrop-blur-md sidebar-shadow dark:border-white/6 dark:bg-[#151515] dark:backdrop-blur-none',
className
)}
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">