Here it is as a user script. I couldn't find a user style extension for my browser, but I'm already running Tampermonkey.
// ==UserScript==
// @name StackExchange read-only mode
// @namespace https://github.com/PurpleMagick/
// @version 1.5
// @license MIT
// @author VLAZ
// @contributor Stephen Ostermiller
// @description Disables interactions such as posting or leaving any feedback on posts. Only leaves read-only features. If you browse the sites logged in, you would be able to save posts for later. Leaves flagging intact but removes close reasons. Does not disable keyboard shortcuts.
// @match https://*.stackexchange.com/*
// @match https://*.stackoverflow.com/*
// @match https://*.askubuntu.com/*
// @match https://*.superuser.com/*
// @match https://*.serverfault.com/*
// @match https://*.mathoverflow.net/*
// @match https://*.stackapps.com/*
// @grant GM_addStyle
// ==/UserScript==
GM_addStyle(`
.js-vote-down-btn,
.js-vote-up-btn,
.js-edit-post,
.js-post-notice-edit-post,
.js-suggest-edit-post,
.js-edit-pending,
#edit-tags,
.js-add-link.comments-link,
.js-comment-flag,
.js-comment-up,
.js-comment-edit,
.js-comment-delete,
#post-editor,
#submit-button,
a[href$='/questions/ask'],
#review-button .s-activity-indicator,
.review-dialog ul,
.review-dialog h3,
.review-dialog a[href$="/review"],
.js-actions-sidebar,
.js-accept-answer-btn[aria-pressed="false"],
.bounty-link,
#btnProtectLoggedIn,
a[href*='/edit-tag-wiki/'],
.js-join-community,
.js-admin-dashboard-button,
.js-mod-inbox-button,
.js-mod-menu-button,
.js-mod-message-menu,
.js-post-flag-bar,
.js-comment-flag-options,
.js-resolve-action,
.js-post-flag-options,
.js-flag-post-link,
.js-close-question-link,
.js-delete-post,
#popup-flag-post ul li:not(:nth-child(1)):not(:nth-child(2)):not(:last-child),
#popup-close-question li
{
display: none !important;
}
.js-accept-answer-btn[aria-pressed="true"]
{
pointer-events: none;
}
`)