diff --git a/lib/api-client.js b/lib/api-client.js index aaa1e5a..75fce63 100644 --- a/lib/api-client.js +++ b/lib/api-client.js @@ -367,6 +367,10 @@ Rules: 7. Providing ONLY the improved prompt, no explanations`; prompt = `Improve the following video generation prompt and translate it to ${targetLangName}. Focus on camera movement, specific action, motion dynamics, physics, and cinematic style. Respond only with the improved prompt:\n\n${sanitizedText}`; + } else if (type === 'image-universal') { + systemInstruction = `You are an expert AI prompt engineer for image generation. Your job is to transform rough user intent into a premium, universal image prompt. These prompts should be optimized for Nano Banana Pro (Google Gemini) but must work exceptionally well with any text-to-image model including Nano Banana 2, Seedream 5.0, GPT Image 1.5, Midjourney, DALL-E 3, Flux, and Stable Diffusion. Output ONLY the final prompt in English.`; + + prompt = `Turn this idea into a universal, high-quality image prompt optimized for Nano Banana but compatible with any text-to-image model. Respond only with the prompt:\n\n${sanitizedText}`; } else { systemInstruction = `You are a senior prompt editor for AI image models. Your task is to expand and clean up a user's existing image prompt without changing its core intent. diff --git a/popup/modules/ui-manager.js b/popup/modules/ui-manager.js index 22e9e96..5a7ec16 100644 --- a/popup/modules/ui-manager.js +++ b/popup/modules/ui-manager.js @@ -53,7 +53,11 @@ export function switchMode(mode) { export function updatePromptTypeVisuals(type) { elements.promptTypeBtns.forEach(btn => { if (btn.dataset.type === type) { - btn.className = 'prompt-type-btn flex-1 py-2 px-3 text-xs font-medium rounded-lg border border-orange-500/30 bg-orange-500/10 text-orange-400 flex items-center justify-center gap-2 hover:bg-orange-500/20 transition-colors'; + if (type === 'image-universal') { + btn.className = 'prompt-type-btn flex-1 py-2 px-3 text-xs font-medium rounded-lg border border-green-500/30 bg-green-500/10 text-green-400 flex items-center justify-center gap-2 hover:bg-green-500/20 transition-colors'; + } else { + btn.className = 'prompt-type-btn flex-1 py-2 px-3 text-xs font-medium rounded-lg border border-orange-500/30 bg-orange-500/10 text-orange-400 flex items-center justify-center gap-2 hover:bg-orange-500/20 transition-colors'; + } } else { btn.className = 'prompt-type-btn flex-1 py-2 px-3 text-xs font-medium rounded-lg border border-gray-700 bg-[#1e1e1e] text-gray-500 flex items-center justify-center gap-2 hover:bg-[#252525] hover:text-gray-300 transition-colors'; } diff --git a/popup/output.css b/popup/output.css index 4d64a3d..8b7b827 100644 --- a/popup/output.css +++ b/popup/output.css @@ -568,6 +568,10 @@ video { visibility: visible; } +.static { + position: static; +} + .fixed { position: fixed; } @@ -672,8 +676,8 @@ video { margin-right: 0.25rem; } -.mt-1 { - margin-top: 0.25rem; +.mt-2 { + margin-top: 0.5rem; } .mt-3 { @@ -688,6 +692,10 @@ video { display: block; } +.inline { + display: inline; +} + .flex { display: flex; } @@ -696,10 +704,18 @@ video { display: grid; } +.contents { + display: contents; +} + .hidden { display: none; } +.h-1 { + height: 0.25rem; +} + .h-6 { height: 1.5rem; } @@ -1011,6 +1027,10 @@ video { border-color: rgb(31 41 55 / 0.5); } +.border-green-500\/30 { + border-color: rgb(34 197 94 / 0.3); +} + .border-orange-500\/20 { border-color: rgb(249 115 22 / 0.2); } @@ -1019,6 +1039,10 @@ video { border-color: rgb(249 115 22 / 0.3); } +.border-red-900\/50 { + border-color: rgb(127 29 29 / 0.5); +} + .border-transparent { border-color: transparent; } @@ -1068,12 +1092,13 @@ video { background-color: rgb(0 0 0 / 0.9); } -.bg-blue-500\/10 { - background-color: rgb(59 130 246 / 0.1); +.bg-blue-500 { + --tw-bg-opacity: 1; + background-color: rgb(59 130 246 / var(--tw-bg-opacity)); } -.bg-blue-500\/5 { - background-color: rgb(59 130 246 / 0.05); +.bg-blue-500\/10 { + background-color: rgb(59 130 246 / 0.1); } .bg-blue-600 { @@ -1086,6 +1111,15 @@ video { background-color: rgb(55 65 81 / var(--tw-bg-opacity)); } +.bg-gray-800 { + --tw-bg-opacity: 1; + background-color: rgb(31 41 55 / var(--tw-bg-opacity)); +} + +.bg-green-500\/10 { + background-color: rgb(34 197 94 / 0.1); +} + .bg-orange-500\/10 { background-color: rgb(249 115 22 / 0.1); } @@ -1095,6 +1129,10 @@ video { background-color: rgb(234 88 12 / var(--tw-bg-opacity)); } +.bg-red-900\/30 { + background-color: rgb(127 29 29 / 0.3); +} + .bg-transparent { background-color: transparent; } @@ -1248,6 +1286,10 @@ video { text-align: center; } +.text-right { + text-align: right; +} + .font-mono { font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; } @@ -1334,10 +1376,6 @@ video { line-height: 1.375; } -.tracking-\[0\.18em\] { - letter-spacing: 0.18em; -} - .tracking-\[0\.2em\] { letter-spacing: 0.2em; } @@ -1595,15 +1633,15 @@ video { background-color: rgb(59 130 246 / var(--tw-bg-opacity)); } -.hover\:bg-blue-500\/20:hover { - background-color: rgb(59 130 246 / 0.2); -} - .hover\:bg-gray-700:hover { --tw-bg-opacity: 1; background-color: rgb(55 65 81 / var(--tw-bg-opacity)); } +.hover\:bg-green-500\/20:hover { + background-color: rgb(34 197 94 / 0.2); +} + .hover\:bg-orange-500\/20:hover { background-color: rgb(249 115 22 / 0.2); } @@ -1612,6 +1650,10 @@ video { background-color: rgb(239 68 68 / 0.2); } +.hover\:bg-red-900\/60:hover { + background-color: rgb(127 29 29 / 0.6); +} + .hover\:bg-white:hover { --tw-bg-opacity: 1; background-color: rgb(255 255 255 / var(--tw-bg-opacity)); @@ -1700,6 +1742,11 @@ video { cursor: not-allowed; } +.disabled\:bg-gray-700:disabled { + --tw-bg-opacity: 1; + background-color: rgb(55 65 81 / var(--tw-bg-opacity)); +} + .disabled\:opacity-40:disabled { opacity: 0.4; } diff --git a/popup/popup.html b/popup/popup.html index 95c66ce..5f5c922 100644 --- a/popup/popup.html +++ b/popup/popup.html @@ -92,11 +92,17 @@ data-type="image"> Rozbuduj + +