diff --git a/apple-touch-icon.png b/apple-touch-icon.png
index 4e2ff8d..5395547 100644
Binary files a/apple-touch-icon.png and b/apple-touch-icon.png differ
diff --git a/brand-mark-full.png b/brand-mark-full.png
index eff8ff1..614a14e 100644
Binary files a/brand-mark-full.png and b/brand-mark-full.png differ
diff --git a/brand-mark-square.png b/brand-mark-square.png
index 1d753ee..cccd0ba 100644
Binary files a/brand-mark-square.png and b/brand-mark-square.png differ
diff --git a/brand-mark.svg b/brand-mark.svg
index 5b646f2..53289dd 100644
--- a/brand-mark.svg
+++ b/brand-mark.svg
@@ -1,9 +1,17 @@
diff --git a/chat-widget.js b/chat-widget.js
index 77bf25c..17644b3 100644
--- a/chat-widget.js
+++ b/chat-widget.js
@@ -65,6 +65,7 @@
+ '.cw-typing span:nth-child(3){animation-delay:.3s;}'
+ '@keyframes cw-typing{0%,60%,100%{opacity:.3;transform:translateY(0);}30%{opacity:1;transform:translateY(-3px);}}'
+ '.cw-quick{padding:0 16px 12px;background:' + BRAND.paper + ';display:flex;flex-wrap:wrap;gap:6px;}'
+ + '.cw-quick.is-dismissed{display:none;}'
+ '.cw-quick button{background:' + BRAND.surface + ';border:1px solid ' + BRAND.border + ';border-radius:999px;padding:7px 12px;font:500 12.5px/1 Inter,system-ui,sans-serif;color:' + BRAND.ink + ';cursor:pointer;transition:background .15s,border-color .15s,color .15s;}'
+ '.cw-quick button:hover{background:' + BRAND.ink + ';color:#fff;border-color:' + BRAND.ink + ';}'
+ '.cw-form{display:flex;gap:8px;align-items:flex-end;padding:12px 14px;border-top:1px solid ' + BRAND.border + ';background:' + BRAND.surface + ';}'
@@ -176,6 +177,9 @@
b.textContent = q;
b.addEventListener('click', function () {
if (inFlight) return;
+ // Dismiss the recommendation row the moment the user picks one
+ // — otherwise it sits over the chat for the rest of the session.
+ quick.classList.add('is-dismissed');
input.value = q;
autoSize();
form.requestSubmit();
@@ -184,6 +188,15 @@
});
}
+ // Hide the "what I can build" recommendation row once the user has
+ // actually started a conversation. It returns on reset.
+ function dismissQuick() {
+ quick.classList.add('is-dismissed');
+ }
+ function restoreQuick() {
+ quick.classList.remove('is-dismissed');
+ }
+
function escape(s) {
return String(s).replace(/[&<>"']/g, function (c) {
return ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''' })[c];
@@ -300,6 +313,7 @@
localStorage.removeItem(STORE_KEY);
if (s) localStorage.setItem(STORE_KEY, 'sess-' + Date.now().toString(36) + Math.random().toString(36).slice(2, 8));
} catch (_) {}
+ restoreQuick();
renderHistory();
}
@@ -347,6 +361,9 @@
if (!text || inFlight) return;
inFlight = true;
sendBtn.disabled = true;
+ // First real send — the suggestion row has done its job, remove it so
+ // it doesn't sit over the conversation for the rest of the session.
+ dismissQuick();
addMessage('user', text);
var typing = showTyping();
callWebhook(text)
diff --git a/contact.html b/contact.html
index 1ebacc8..1119b03 100644
--- a/contact.html
+++ b/contact.html
@@ -328,6 +328,7 @@
How it works
Pricing
Why us
+ Try sandbox
Start a project