feat: design system overhaul — sidebar, AI chats, settings, brainstorm, color cleanup
All checks were successful
Deploy to Production / Build and Deploy (push) Successful in 12s

- Sidebar: dynamic brand-accent colors, brainstorm section restyled
- AI chat general: popup panel with expand/collapse, hides when contextual AI open
- AI chat contextual: tabs reordered (Actions first), X close button, height fix
- Settings: all tabs restyled, 6 new color presets (sage, terracotta, iron, etc.)
- Global color cleanup: emerald/orange hardcoded → brand-accent dynamic
- Brainstorm page: orange → brand-accent throughout
- PageEntry animation component added to key pages
- Floating AI button: bg-brand-accent instead of hardcoded black
- i18n: all 15 locales updated with new AI/billing keys
- Billing: freemium quota tracking, BYOK, stripe subscription scaffolding
- Admin: integrated into new design
- AGENTS.md + CLAUDE.md project rules added
This commit is contained in:
Antigravity
2026-05-16 12:59:30 +00:00
parent 1fcea6ed7d
commit bd495be965
2284 changed files with 395285 additions and 2327 deletions

View File

@@ -55,7 +55,11 @@
"freezePinnedNotebook": "پین کردن سفارش نوار کناری نوت بوک",
"unfreezePinnedNotebook": "پین کردن سفارش نوار کناری نوت بوک",
"newSubNotebook": "نوت بوک فرعی جدید",
"renameNotebook": "تغییر نام دهید"
"renameNotebook": "تغییر نام دهید",
"sharedNotebookBadge": "· Shared",
"sortManual": "ترتیب آزاد",
"moveFailed": "انتقال دفترچه ناموفق بود",
"dropToRoot": "برای انتقال به ریشه اینجا رها کنید"
},
"notes": {
"title": "یادداشت‌ها",
@@ -261,7 +265,11 @@
"noteDeletedToast": "یادداشت حذف شد",
"deleteNoteFailedToast": "حذف نشد.",
"documentInfoAria": "اطلاعات سند",
"noModification": "بدون تغییر"
"noModification": "بدون تغییر",
"notes.emptyNotebook": "Empty notebook",
"notes.emptyNotebookDesc": "This notebook has no notes. Click + to create one.",
"notes.noNoteSelected": "No note selected",
"notes.selectOrCreateNote": "Select a note from the list or create a new one."
},
"pagination": {
"previous": "←",
@@ -615,7 +623,14 @@
"presentationReadyBadge": "ارائه آماده است",
"openInLabTitle": "در آزمایشگاه باز کنید",
"inlineSummaryMarkdown": "**خلاصه:**",
"networkErrorShort": "خطای شبکه"
"networkErrorShort": "خطای شبکه",
"contextSourceHeading": "Context source",
"tones": {
"professional": "Professional",
"creative": "Creative",
"academic": "Academic",
"casual": "Casual"
}
},
"titleSuggestions": {
"available": "پیشنهادات عنوان",
@@ -1415,7 +1430,10 @@
"fontFamilyLabel": "خانواده فونت",
"fontFamilyDescription": "فونت استفاده شده در سراسر برنامه را انتخاب کنید",
"selectFontFamily": "Inter برای خوانایی بهینه شده است، سیستم از فونت بومی سیستم‌عامل شما استفاده می‌کند",
"fontSystem": "فونت پیش‌فرض سیستم"
"fontSystem": "فونت پیش‌فرض سیستم",
"fontInterDefault": "Inter (default)",
"fontPlayfairDisplay": "Playfair Display",
"fontJetBrainsMono": "JetBrains Mono"
},
"generalSettings": {
"title": "تنظیمات عمومی",
@@ -1744,7 +1762,27 @@
"includeImagesHint": "استخراج تصاویر از صفحات استخراج شده و پیوست به یادداشت تولید شده",
"back": "Back",
"configuration": "Configuration",
"options": "Options"
"options": "Options",
"slideThemes": {
"modern_wellness": "مدرن و تندرستی",
"business_authority": "کسب‌وکار و اعتبار",
"nature_outdoors": "طبیعت و فضای باز",
"vintage_academic": "کلاسیک دانشگاهی",
"soft_creative": "نرم و خلاقانه",
"bohemian": "بوهمیایی",
"vibrant_tech": "پرجنب‌وجوش و تکنولوژی",
"craft_artisan": "صنعت دستی و هنرمند",
"tech_night": "فناوری و شب (تیره)",
"education_charts": "آموزش و نمودار",
"forest_eco": "جنگل و اکولوژی",
"elegant_fashion": "شیک و مد",
"art_food": "هنر و غذا",
"luxury_mystery": "لوکس و مرموز",
"pure_tech_blue": "آبی تکنولوژی خالص",
"coastal_coral": "مرجان ساحلی",
"vibrant_orange_mint": "نارنجی شاد و نعناع",
"platinum_white_gold": "پلاتین و سفید طلایی"
}
},
"frequencies": {
"manual": "دستی",
@@ -2033,7 +2071,19 @@
"superscript": "بالانویس",
"subscript": "زیرنویس",
"addBlock": "افزودن بلوک",
"placeholder": "برای دستورات '/' تایپ کنید..."
"placeholder": "برای دستورات '/' تایپ کنید...",
"aiReformulateFailed": "دستیار هوش مصنوعی نتوانست این متن را پردازش کند. دوباره تلاش کنید.",
"translateTargets": {
"Francais": "فرانسوی",
"English": "انگلیسی",
"Espanol": "اسپانیایی",
"Deutsch": "آلمانی",
"Persan": "فارسی",
"Portugais": "پرتغالی",
"Italiano": "ایتالیایی",
"Chinois": "چینی",
"Japonais": "ژاپنی"
}
},
"brainstorm": {
"title": "Waves of Thought",
@@ -2098,6 +2148,181 @@
"joined": "به جلسه پیوست",
"idea_dismissed": "یک ایده را رد کرد",
"invite_created": "دعوت ایجاد کرد"
},
"shareDialogTitle": "Share brainstorm",
"shareSearchLabel": "Find someone",
"shareNameOrEmailPlaceholder": "Name or email…",
"shareSubmit": "Share",
"shareSubmitting": "Sending…",
"shareFooterHint": "They will get a notification to accept or decline.",
"sharePublicLink": "Public link",
"shareGuestsCanEdit": "Allow guests to edit",
"feedbackInviteSent": "Invitation sent!",
"feedbackInviteResent": "Invitation resent!",
"feedbackAlreadyShared": "This person already has access to this brainstorm.",
"feedbackAlreadyPending": "An invitation is already pending for this person.",
"feedbackGenericError": "Error",
"unnamedPerson": "No name",
"canvasEditTitleReply": "Reply",
"canvasEditTitleNewIdea": "New idea",
"canvasPlaceholderReply": "Your reply…",
"canvasPlaceholderIdea": "Your idea…",
"canvasShortcutSave": "save",
"canvasShortcutCancel": "cancel",
"canvasChildBranch": "Child",
"canvasDoubleClickHint": "Double-click to add an idea",
"ideaDetailDescription": "Description",
"ideaDetailConnection": "Connection",
"ideaDetailNovelty": "Novelty",
"ideaDetailWave": "Wave",
"waveFlavorVariation": "Variation",
"waveFlavorAnalogy": "Analogy",
"waveFlavorDisruption": "Disruption",
"liveCollaborationTitle": "Live collaboration",
"liveStatus": "Live",
"liveYouMarker": "(You)",
"liveOtherParticipants": "{count} other participants",
"guestReadOnlyNotice": "You're viewing this brainstorm as a guest. Sign in to edit.",
"impactNotesEnriched": "{count} note(s) enriched",
"impactNotesMarkedDry": "{count} note(s) marked dry",
"impactSeparator": " · ",
"exportNotebookPrefix": "Notebook:",
"playbackStep": "Step {current}/{total}",
"playbackStepsCount": "{count} steps",
"playbackReturnToLive": "Return to live",
"canvasWaitingHint": "The canvas is waiting for your spark...",
"seedNodeBadge": "SEED",
"originalSeedDescription": "Original seed idea",
"convertedToNoteStatus": "Converted to note",
"toastExpandSuccess": "Ideas expanded!",
"toastExpandFailed": "Failed to expand",
"toastDismissSuccess": "Idea dismissed",
"toastDismissFailed": "Failed to dismiss",
"toastConvertSuccess": "Idea converted to note!",
"toastConvertFailed": "Failed to convert",
"toastExportNoteSuccess": "Exported as note!",
"toastExportFailed": "Failed to export",
"legendSeed": "Seed",
"legendVariations": "Variations",
"legendAnalogies": "Analogies",
"legendDisruptions": "Disruptions",
"exportFailedMessage": "Export failed",
"exportDefaultNotebookName": "Brainstorm",
"exportDefaultNoteTitle": "Synthesis",
"exportOpening": "Opening…",
"ownerBadge": "Owner",
"waveBadge": "Wave {wave}"
},
"usageMeter": {
"packName": "AI Discovery Pack",
"featureSearch": "Search",
"featureTags": "Tags",
"featureTitles": "Titles",
"unlimited": "Unlimited",
"remaining": "{count} left",
"upgradeTitle": "Upgrade to Pro",
"upgradeDescription": "You've used all your AI Discovery Pack credits. Upgrade to Pro for higher limits and additional features.",
"proIncludes": "Pro includes:",
"proSearch": "100 semantic searches / month",
"proTags": "200 auto-tags / month",
"proTitles": "200 auto-titles / month",
"proReformulate": "50 reformulations / month",
"proChat": "100 chat messages / month",
"later": "Later",
"upgradePricing": "Upgrade to Pro",
"addApiKey": "Use your own API key (BYOK)"
},
"byokSettings": {
"title": "Your API keys (BYOK)",
"description": "Connect your own LLM provider keys to bypass Discovery Pack quotas. Keys are encrypted at rest.",
"badgeActive": "BYOK active",
"tierRequired": "BYOK requires a Pro plan or higher. Upgrade to connect your API keys.",
"provider": "Provider",
"providerPlaceholder": "Select a provider",
"alias": "Label (optional)",
"aliasPlaceholder": "e.g. Work OpenAI",
"apiKey": "API key",
"apiKeyPlaceholder": "sk-...",
"save": "Save key",
"saved": "API key saved",
"deleted": "API key removed",
"error": "Could not save API key",
"loadError": "Could not load API keys",
"loading": "Loading keys...",
"empty": "No API keys configured yet.",
"confirmDelete": "Remove this API key permanently?",
"toggleActive": "Active",
"providers": {
"openai": "OpenAI",
"anthropic": "Anthropic",
"deepseek": "DeepSeek",
"openrouter": "OpenRouter",
"minimax": "MiniMax",
"zai": "Z.ai",
"google": "Google",
"mistral": "Mistral",
"glm": "GLM"
}
},
"billing": {
"title": "صورت‌حساب",
"currentPlan": "طرح فعلی",
"upgradePlan": "ارتقای طرح",
"manageBilling": "مدیریت صورت‌حساب",
"manageDescription": "به‌روزرسانی روش پرداخت، مشاهده فاکتورها یا لغو.",
"openPortal": "باز کردن پورتال صورت‌حساب",
"renewsOn": "تمدید در",
"expiresOn": "انقضا در",
"canceledAt": "لغو شده — دسترسی تا",
"freePlan": "طرح رایگان",
"proPlan": "طرح Pro",
"businessPlan": "طرح Business",
"enterprisePlan": "طرح Enterprise",
"perMonth": "/ماه",
"perYear": "/سال",
"monthly": "ماهانه",
"annual": "سالانه",
"save": "صرفه‌جویی",
"upgradeTitle": "انتخاب طرح",
"proPrice": "9.90 €",
"businessPrice": "29.90 €",
"proAnnualPrice": "99 €",
"businessAnnualPrice": "299 €",
"proFeature1": "100 جستجوی معنایی / ماه",
"proFeature2": "200 برچسب خودکار / ماه",
"proFeature3": "50 بازنویسی / ماه",
"proFeature4": "100 پیام چت / ماه",
"businessFeature1": "1,000 جستجوی معنایی / ماه",
"businessFeature2": "1,000 برچسب خودکار / ماه",
"businessFeature3": "500 بازنویسی / ماه",
"businessFeature4": "1,000 پیام چت / ماه",
"enterpriseTitle": "Enterprise",
"enterpriseDescription": "سهمیه سفارشی، SSO، پشتیبانی اولویت‌دار.",
"contactSales": "تماس با فروش",
"startCheckout": "شروع",
"checkoutLoading": "در حال بارگذاری پرداخت…",
"checkoutSuccess": "اشتراک فعال شد! به {tier} خوش آمدید.",
"checkoutCanceled": "پرداخت لغو شد.",
"active": "فعال",
"trialing": "آزمایشی",
"pastDue": "معوق",
"canceled": "لغو شده",
"inactive": "غیرفعال",
"billingEnabled": "صورت‌حساب فعال است",
"billingDisabled": "صورت‌حساب در این نمونه فعال نیست.",
"usageThisPeriod": "استفاده در این دوره",
"periodRange": "دوره",
"unlimited": "نامحدود",
"noUsage": "داده‌ای موجود نیست",
"billingHistory": "تاریخچه صورتحساب",
"viewInvoices": "مدیریت فاکتورها در پورتال",
"nextBillingDate": "تاریخ صدور بعدی",
"billingPeriod": "دوره صورتحساب",
"planSince": "عضو از",
"checkoutSuccessTitle": "اشتراک فعال شد!",
"checkoutSuccessBody": "به {tier} خوش آمدید. ویژگی‌های شما اکنون باز شده‌اند.",
"subscriptionType": "subscriptionType",
"renewalDate": "renewalDate",
"noRenewalDate": "—"
}
}
}