Index: src/views/pages/guardian.ejs
===================================================================
--- src/views/pages/guardian.ejs	(revision 70677e962e64de43ac4076f9b87a4ccb49017561)
+++ src/views/pages/guardian.ejs	(revision 02021042f8346f4cca62228062484c41e0df8bcd)
@@ -73,4 +73,17 @@
     </section>
 
+    <!-- 4b. Even afwezig (FEP-633c 3.6.1): de verantwoordelijke handeling.
+            Wie zich afmeldt telt niet mee in de besluiten, en een enkel
+            antwoord brengt je meteen terug. Alleen zichtbaar met wards. -->
+    <section id="away-section" hidden>
+      <div class="g-sec-head"><h2><%= t('guardian.away_title') %></h2></div>
+      <p class="g-sec-sub"><%= t('guardian.away_sub') %></p>
+      <div class="g-away-row">
+        <button id="away-week" class="quiet small"><%= t('guardian.away_week') %></button>
+        <button id="away-month" class="quiet small"><%= t('guardian.away_month') %></button>
+      </div>
+      <p id="away-msg" class="g-msg" hidden></p>
+    </section>
+
     <!-- 5. Meldingen. -->
     <section id="push-section">
Index: src/views/pages/messages.ejs
===================================================================
--- src/views/pages/messages.ejs	(revision 70677e962e64de43ac4076f9b87a4ccb49017561)
+++ src/views/pages/messages.ejs	(revision 02021042f8346f4cca62228062484c41e0df8bcd)
@@ -30,5 +30,20 @@
       <div style="flex:1;min-width:200px;">
         <strong><%= t('msg.guardians_label') %></strong><br>
-        <span><%= myGuardians.map(function(g){ return g.handle; }).join(', ') %></span>
+        <%# Availability (FEP-633c 3.6): the ward sees the real size of its
+            safety net, in buddy-list language on the responsibility axis.
+            Labels are UI (Robins besluit); the wire keeps the spec terms.
+            Owner-only by construction: this page is the owner's. %>
+        <span class="msg-guardians">
+          <% myGuardians.forEach(function(g){
+               var _st = g.availability === 'away' ? 'away' : (g.availability === 'dormant' ? 'dormant' : 'active');
+               var _lbl = _st === 'away' ? t('msg.g_away', { date: g.awayUntil ? formatDate(g.awayUntil) : '?' })
+                        : (_st === 'dormant' ? t('msg.g_offline') : t('msg.g_available')); %>
+            <span class="msg-guardian">
+              <span class="msg-gdot msg-gdot-<%= _st %>" aria-hidden="true"></span>
+              <%= g.handle %>
+              <span class="msg-gstate"><%= _lbl %></span>
+            </span>
+          <% }); %>
+        </span>
       </div>
     </div>
@@ -130,4 +145,14 @@
 
 <style>
+  /* Availability of the ward's guardians (FEP-633c 3.6): the buddy-list dot
+     on the responsibility axis. Green available, yellow declared away, grey
+     observed dormant (one answer restores). */
+  .msg-guardians { display: flex; flex-wrap: wrap; gap: .35rem 1rem; }
+  .msg-guardian { display: inline-flex; align-items: center; gap: .35rem; white-space: nowrap; }
+  .msg-gdot { width: 8px; height: 8px; border-radius: 50%; display: inline-block; }
+  .msg-gdot-active { background: #4caf7d; }
+  .msg-gdot-away { background: #e0a83a; }
+  .msg-gdot-dormant { background: #8a93a3; }
+  .msg-gstate { color: var(--ink-soft, #888); font-size: .82rem; }
   .msg-wrap { max-width: 640px; margin: 1rem auto; padding: 0 1rem; }
   .msg-title { margin: 0 0 .9rem; }
