Index: src/views/pages/ward.ejs
===================================================================
--- src/views/pages/ward.ejs	(revision 084b046d930ee79f779d73d05b08e90d00fd684f)
+++ src/views/pages/ward.ejs	(revision 4bb93aa4a060a71f9d58edb59da3c88711d16844)
@@ -58,4 +58,35 @@
   <p id="buoy-hint" class="sr-only"><%= state.strings.buoyHint %></p>
 
+  <!-- De zwaai-hand (§5): alleen in berichtenstand, dezelfde hoek als de
+       boei. Ze wisselen elkaar af: met de kaarten verdwijnt de boei, op de
+       hemel hangt de hand. -->
+  <button id="hand" type="button" hidden aria-describedby="hand-hint">👋</button>
+  <p id="hand-hint" class="sr-only"><%= state.strings.handHint %></p>
+
+  <!-- Het gesprek schuift OVER de hemel; die blijft eronder gewoon draaien. -->
+  <section id="thread" hidden>
+    <header>
+      <button id="thread-close" type="button" aria-label="<%= state.strings.close %>">←</button>
+      <h2 id="thread-name"></h2>
+    </header>
+    <div id="thread-list"></div>
+    <form id="thread-form">
+      <input id="thread-text" type="text" autocomplete="off" maxlength="2000"
+             placeholder="<%= state.strings.writeHere %>">
+      <button type="submit" class="primary"><%= state.strings.send %></button>
+    </form>
+  </section>
+
+  <!-- Het zwaai-paneel: de tekst die je kiest IS het bericht. -->
+  <dialog id="wave-dialog">
+    <h2 id="wave-title"></h2>
+    <div class="wave-answers">
+      <button data-wave="1">👋 <%= state.strings.wave %></button>
+      <button data-text="<%= state.strings.waveCall %>"><%= state.strings.waveCall %></button>
+      <button data-text="<%= state.strings.waveThanks %>"><%= state.strings.waveThanks %></button>
+    </div>
+    <button id="wave-cancel" type="button"><%= state.strings.notNow %></button>
+  </dialog>
+
   <dialog id="help-dialog">
     <form method="dialog">
