diff --git a/js/app.js b/js/app.js
index d1b66f1..289184c 100644
--- a/js/app.js
+++ b/js/app.js
@@ -11,6 +11,8 @@ import './components/search-bar.js';
import './components/site-content.js';
import './components/site-footer.js';
import './components/book-card.js';
+import './components/push-box.js';
+import './components/arrow-button.js';
// App initialization (if needed)
document.addEventListener('DOMContentLoaded', () => {
diff --git a/js/components/arrow-button.js b/js/components/arrow-button.js
new file mode 100644
index 0000000..be19ff5
--- /dev/null
+++ b/js/components/arrow-button.js
@@ -0,0 +1,88 @@
+/**
+ * Arrow Button Component
+ * A CTA link with a circular arrow icon
+ * Uses a slot for the button text content
+ */
+class ArrowButton extends HTMLElement {
+ static get observedAttributes() {
+ return ["href"];
+ }
+
+ constructor() {
+ super();
+ this.attachShadow({ mode: "open" });
+ }
+
+ connectedCallback() {
+ this.render();
+ }
+
+ attributeChangedCallback() {
+ this.render();
+ }
+
+ get href() {
+ return this.getAttribute("href") || "#";
+ }
+
+ render() {
+ this.shadowRoot.innerHTML = `
+
+
+
+
+
+
+
+
+
+ `;
+ }
+}
+
+customElements.define("arrow-button", ArrowButton);
diff --git a/js/components/push-box.js b/js/components/push-box.js
new file mode 100644
index 0000000..531bc55
--- /dev/null
+++ b/js/components/push-box.js
@@ -0,0 +1,93 @@
+/**
+ * Push Box Component
+ * A promotional container with logo, title, and CTA
+ * Uses slots for all content to allow easy customization in HTML
+ */
+class PushBox extends HTMLElement {
+ static get observedAttributes() {
+ return ["background-color", "text-color"];
+ }
+
+ constructor() {
+ super();
+ this.attachShadow({ mode: "open" });
+ }
+
+ connectedCallback() {
+ this.render();
+ }
+
+ attributeChangedCallback() {
+ this.render();
+ }
+
+ get backgroundColor() {
+ return (
+ this.getAttribute("background-color") ||
+ "var(--color-push-box-bg, #EBEEF4)"
+ );
+ }
+
+ get textColor() {
+ return this.getAttribute("text-color") || "#951D51";
+ }
+
+ render() {
+ this.shadowRoot.innerHTML = `
+
+
+ `;
+ }
+}
+
+customElements.define("push-box", PushBox);
diff --git a/js/components/search-bar.js b/js/components/search-bar.js
index f45f9f9..34d9eea 100644
--- a/js/components/search-bar.js
+++ b/js/components/search-bar.js
@@ -173,7 +173,7 @@ class SearchBar extends HTMLElement {
align-items: center;
width: 100%;
height: 40px;
- background-color: #FADCE7;
+ background-color: #FFF;
border-radius: 8px;
overflow: hidden;
}