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
+
+