diff --git a/zebra-report/zebra-spaces.html b/zebra-report/zebra-spaces.html
index 310bb33..40771e9 100644
--- a/zebra-report/zebra-spaces.html
+++ b/zebra-report/zebra-spaces.html
@@ -2981,14 +2981,14 @@ function preferStereoOpus(sdp, maxAvgBps, opts){
return 'a=fmtp:' + pt + ' ' + parts.join(';');
});
if (!opusPT) return sdp;
- /* Add NACK feedback for Opus if not already present — reactive packet
- * recovery, near-zero overhead. Browsers that don't honor it will
- * ignore the line. */
- const nackLine = 'a=rtcp-fb:' + opusPT + ' nack';
- if (sdp.indexOf(nackLine) === -1){
- sdp = sdp.replace(new RegExp('(a=rtpmap:' + opusPT + ' opus[^\\r\\n]*\\r?\\n)'),
- '$1' + nackLine + '\r\n');
- }
+ /* Audio NACK was tried and rolled back: Chrome receivers will request
+ * retransmits if the sender advertises rtcp-fb:nack on the Opus PT, but
+ * Firefox senders never reply (Mozilla never shipped the responder
+ * side). Chrome's jitter buffer waits for recovery that never arrives
+ * and then skips — audibly choppy in mixed Firefox→Chrome rooms.
+ * useinbandfec + 700ms playoutDelayHint already cover the loss case
+ * without protocol churn. Do NOT re-add audio NACK without verifying
+ * both sides actually implement it for the negotiated PT. */
/* Tolerate larger frames from peers (up to 120ms). Bigger encode
* windows give Opus more context per packet → cleaner music at the
* same bitrate. We can't force OUR encoder's frame size from JS but
@@ -4417,8 +4417,8 @@ logLine('', 'ready — pick a handle, type a rendezvous code, enter the space');