feat: footer feedback widget — textarea + send to webhook

This commit is contained in:
Oliver
2026-03-27 17:46:37 -03:00
parent 5526873a41
commit 0fc5b59d5f
+157 -4
View File
@@ -1027,11 +1027,10 @@
.footer-inner { .footer-inner {
max-width: 72rem; max-width: 72rem;
margin: 0 auto; margin: 0 auto;
display: flex; display: grid;
flex-wrap: wrap; grid-template-columns: 1fr auto 1fr;
align-items: center; align-items: center;
justify-content: space-between; gap: 2rem;
gap: 1.25rem;
font-size: 0.875rem; font-size: 0.875rem;
} }
.footer-copy { .footer-copy {
@@ -1040,6 +1039,7 @@
.footer-links { .footer-links {
display: flex; display: flex;
gap: 1.75rem; gap: 1.75rem;
justify-self: end;
} }
.footer-links a { .footer-links a {
color: rgba(255, 255, 255, 0.6); color: rgba(255, 255, 255, 0.6);
@@ -1049,6 +1049,91 @@
color: var(--white); color: var(--white);
} }
/* ── Footer Feedback ────────────────────────────── */
.footer-feedback {
justify-self: center;
width: 100%;
max-width: 380px;
}
.footer-feedback__form {
display: flex;
gap: 0.5rem;
align-items: flex-end;
}
.footer-feedback__area {
flex: 1;
resize: none;
border: 1.5px solid rgba(255, 255, 255, 0.18);
border-radius: 0.875rem;
padding: 0.6rem 0.875rem;
font-family: "Inter", sans-serif;
font-size: 0.8rem;
color: var(--white);
background-color: rgba(255, 255, 255, 0.07);
outline: none;
line-height: 1.5;
transition:
border-color 0.2s,
background-color 0.2s;
overflow: hidden;
}
.footer-feedback__area::placeholder {
color: rgba(255, 255, 255, 0.35);
}
.footer-feedback__area:focus {
border-color: rgba(255, 255, 255, 0.42);
background-color: rgba(255, 255, 255, 0.11);
}
.footer-feedback__btn {
flex-shrink: 0;
background-color: var(--terra);
color: var(--white);
border: none;
border-radius: 0.875rem;
padding: 0.6rem 1rem;
font-family: "Inter", sans-serif;
font-size: 0.8rem;
font-weight: 700;
cursor: pointer;
transition:
background-color 0.2s,
transform 0.15s;
white-space: nowrap;
line-height: 1.5;
}
.footer-feedback__btn:hover {
background-color: var(--terra-deep);
transform: translateY(-1px);
}
.footer-feedback__btn:disabled {
opacity: 0.5;
cursor: not-allowed;
transform: none;
}
.footer-feedback__msg {
font-size: 0.74rem;
color: rgba(255, 255, 255, 0.52);
margin-top: 0.4rem;
min-height: 1em;
text-align: center;
transition: opacity 0.3s;
}
@media (max-width: 900px) {
.footer-inner {
grid-template-columns: 1fr;
text-align: center;
gap: 1.5rem;
}
.footer-links {
justify-self: center;
}
.footer-feedback {
justify-self: stretch;
max-width: 100%;
}
}
/* ── Blog Modal ─────────────────────────────────────────── */ /* ── Blog Modal ─────────────────────────────────────────── */
#blog-modal { #blog-modal {
position: fixed; position: fixed;
@@ -1790,6 +1875,30 @@
>ODOO4projects — Hosting for the AI generation</span >ODOO4projects — Hosting for the AI generation</span
> >
</p> </p>
<div class="footer-feedback">
<form
id="footer-feedback-form"
class="footer-feedback__form"
novalidate
>
<textarea
id="footer-feedback-text"
class="footer-feedback__area"
rows="2"
maxlength="1000"
placeholder="Missing something, or have feedback? Drop us a note — we read every one."
></textarea>
<button type="submit" class="footer-feedback__btn">
Send&nbsp;
</button>
</form>
<p
id="footer-feedback-msg"
class="footer-feedback__msg"
></p>
</div>
<nav class="footer-links" aria-label="Footer links"> <nav class="footer-links" aria-label="Footer links">
<a <a
href="https://odoo4projects.com/support" href="https://odoo4projects.com/support"
@@ -2399,6 +2508,50 @@
} }
}); });
} }
// Footer feedback
var footerFeedbackForm = document.getElementById(
"footer-feedback-form",
);
if (footerFeedbackForm) {
footerFeedbackForm.addEventListener(
"submit",
async function (e) {
e.preventDefault();
var textarea = document.getElementById(
"footer-feedback-text",
);
var msgEl = document.getElementById(
"footer-feedback-msg",
);
var btn = footerFeedbackForm.querySelector(
'button[type="submit"]',
);
var text = textarea.value.trim();
if (!text) return;
btn.disabled = true;
msgEl.textContent = "";
try {
var fd = new FormData();
fd.append("message", text);
fd.append("page", window.location.href);
await fetch(
"https://002-001-5dd6e535-4d1c-46bc-9bd9-42ad4bc5f082.odoo4projects.com/webhook/2fe3d1fe-eff9-45aa-8d0f-88738d443946",
{ method: "POST", body: fd },
);
textarea.value = "";
msgEl.textContent = "✓ Thanks — we got it!";
setTimeout(function () {
msgEl.textContent = "";
}, 5000);
} catch (err) {
msgEl.textContent =
"Could not send right now. Please try again.";
}
btn.disabled = false;
},
);
}
</script> </script>
</body> </body>
</html> </html>