Index: src/assets/js/guardian.js
===================================================================
--- src/assets/js/guardian.js	(revision 88d7c8fc087ab49a2fd3ee63bf184d15d1f0fa31)
+++ src/assets/js/guardian.js	(revision e27b8db4e316874f7498fbe36e20270bc39b1d7f)
@@ -213,4 +213,26 @@
     panel.appendChild(h);
     return h;
+  }
+
+  function gateButton(w, feature, current, proposeLabel, onLabel, offLabel) {
+    var known = current === true || current === false;
+    var btn = el('button', 'quiet small', (known ? (current ? onLabel : offLabel) : proposeLabel) || feature);
+    btn.addEventListener('click', function () {
+      btn.disabled = true;
+      fetch('/guardian/wards/embeds', {
+        method: 'POST', headers: { 'Content-Type': 'application/json' },
+        body: JSON.stringify({ uri: w.other_uri, feature: feature, allow: known ? !current : true }),
+      }).then(function (r) { return r.json(); })
+        .then(function (j) {
+          if (j && j.state === 'open') {
+            btn.textContent = (T.embeds_waiting || 'waiting for the other guardians');
+            btn.disabled = true;
+            return;
+          }
+          refresh();
+        })
+        .catch(function () { btn.disabled = false; });
+    });
+    return btn;
   }
 
@@ -337,5 +359,11 @@
     set.appendChild(el('h3', null, T.settings_title || 'Settings'));
     var setRow = el('div', 'row');
-    setRow.appendChild(embedsButton(w));
+    setRow.appendChild(gateButton(w, 'shaer:externalEmbeds', w.embeds, T.embeds_propose, T.embeds_on, T.embeds_off));
+    // The heavier sibling (5.6): seeing that a video exists is one decision,
+    // letting a third party's player run inside the app is another. Only
+    // offered once previews are on: you cannot play what you may not see.
+    if (w.embeds === true) {
+      setRow.appendChild(gateButton(w, 'shaer:externalPlayback', w.playback, T.play_propose, T.play_on, T.play_off));
+    }
     set.appendChild(setRow);
     panel.appendChild(set);
