✓ keeps survives unchanged · ↻ normalizes to CSS kept, rewritten as CSS · ↑ upgrades to native legacy form, becomes the native equivalent · 🔒 blocked (security) removed by the sanitizer regardless of mode · ✗ HTML mode only not represented in the visual editor — author it in HTML mode
Each allowed tag and the attributes it may carry. Inline
style values are governed by the Inline styles section;
class values by the CSS classes section.
| Tag | Allowed attributes | URL schemes | Rich-Text editor |
|---|---|---|---|
<a> | hreftargetrelstyleclassdata-typedata-page-iddata-page-slugdata-page-existsdata-game-slug | (default) | ✓ keeps |
<b> | classstyle | (default) | ✓ keeps |
<blockquote> | classstyledata-authordata-author-iddata-post-iddata-timestampdata-hydrateddata-ipsquote-timestampdata-ipsquote-useriddata-ipsquote-usernamedata-ipsquote-contentappdata-ipsquote-contenttypedata-ipsquote-contentiddata-ipsquote-contentclassdata-ipsquote-contentcommentid | (default) | ✓ keeps |
<br> | classstyle | (default) | ✓ keeps |
<code> | class | (default) | ✓ keeps |
<col> | stylespanwidthalign | (default) | ✓ keeps |
<colgroup> | spanwidthalign | (default) | ✓ keeps |
<del> | classstyle | (default) | ✓ keeps |
<div> | classstyletitledata-authordata-author-iddata-post-iddata-timestampdata-modedata-recipientsdata-aligndata-margindata-padding | (default) | ✓ keeps |
<em> | classstyle | (default) | ✓ keeps |
<fieldset> | classstyle | (default) | ✓ keeps |
<h1> | style | (default) | ✓ keeps |
<h2> | style | (default) | ✓ keeps |
<h3> | style | (default) | ✓ keeps |
<h4> | style | (default) | ✓ keeps |
<h5> | style | (default) | ✓ keeps |
<h6> | style | (default) | ✓ keeps |
<hr> | classstyle | (default) | ✓ keeps |
<i> | classstyle | (default) | ✓ keeps |
<img> | srcalttitlewidthheightclassstyledata-spacingdata-emojiloading | https, data | ✓ keeps |
<legend> | classstyledata-title-html | (default) | ✓ keeps |
<li> | stylevalue | (default) | ✓ keeps |
<mark> | classstyle | (default) | ✓ keeps |
<ol> | stylestart | (default) | ✓ keeps |
<p> | style | (default) | ✓ keeps |
<pre> | classstyle | (default) | ✓ keeps |
<s> | classstyle | (default) | ✓ keeps |
<span> | classstyletitledata-typedata-iddata-labeldata-showndata-hiddendata-languagedata-inline-dicedata-roll-set-iddata-display-modedata-dice-refdata-dice-strikedata-tpl-placeholderdata-canonical-pathdata-field-keydata-template-keydata-original-valuedata-sheet-id | (default) | ✓ keeps |
<strong> | classstyle | (default) | ✓ keeps |
<sub> | classstyle | (default) | ✓ keeps |
<sup> | classstyle | (default) | ✓ keeps |
<table> | classstylewidthcellpaddingcellspacingborderalignbgcolordata-zebra | (default) | ✓ keeps |
<tbody> | classstylealignvalignbgcolor | (default) | ✓ keeps |
<td> | colspanrowspanstylecolwidthwidthheightalignvalignbgcolornowrap | (default) | ✓ keeps |
<tfoot> | classstylealignvalignbgcolor | (default) | ✗ HTML mode only |
<th> | colspanrowspanscopestylecolwidthwidthheightalignvalignbgcolornowrap | (default) | ✓ keeps |
<thead> | classstylealignvalignbgcolor | (default) | ✗ HTML mode only |
<tr> | stylealignvalignbgcolor | (default) | ✓ keeps |
<u> | classstyle | (default) | ✓ keeps |
<ul> | style | (default) | ✓ keeps |
CSS properties accepted in a style="…" attribute on
any element, with the value shapes the server allows. Values that don't match are dropped. The Rich-Text editor column shows whether the property survives a switch on a block element and/or on an inline <span>.
| Property | Accepted values | Rich-Text editor |
|---|---|---|
color | hex color (3, 4, 6, or 8 digits); rgb() color; rgba() color (with alpha); a named color (e.g. red, navy); a theme palette color, rgb(var(--mwpalette-…)) | ✓ block & inline |
text-align | left; right; center; justify; start; -webkit-left | ✓ block & inline |
font-size | a font-size keyword, or a number with px/em/rem/%/pt | ✓ block & inline |
font-family | a font-family name or stack | ✓ block & inline |
font-weight | normal, bold, bolder, lighter, or a 3-digit weight | ✓ block & inline |
font-style | one of: normal, italic, oblique | ✓ block & inline |
text-decoration | any value | ✓ block & inline |
text-decoration-style | a line style: solid, double, dotted, dashed, or wavy | ✓ block & inline |
text-decoration-thickness | any value | ✓ block & inline |
text-decoration-line | any value | ✓ block & inline |
line-height | normal, or a number with %/px/em/rem | ✓ block & inline |
letter-spacing | normal, or a number (may be negative) with px/em/rem | ✓ block & inline |
word-spacing | normal, or a number (may be negative) with px/em/rem | ✓ block & inline |
text-indent | a number (may be negative) with px/em/rem/% | ✓ block & inline |
text-transform | one of: none, capitalize, uppercase, lowercase | ✓ block & inline |
white-space | one of: normal, nowrap, pre, pre-wrap, pre-line, break-spaces | ✓ block & inline |
font-variant | any value | ✓ block & inline |
font-variant-ligatures | any value | ✓ block & inline |
font-variant-caps | any value | ✓ block & inline |
| Property | Accepted values | Rich-Text editor |
|---|---|---|
width | a positive number, optionally with px/%/em/rem | ✓ block & inline |
min-width | a positive number with px/%/em/rem, optional !important | ✓ block & inline |
max-width | a positive number, optionally with px/%/em/rem | ✓ block & inline |
height | auto, or a positive number with px/%/em/rem | ✓ block & inline |
min-height | a positive number, optionally with px/%/em/rem | ✓ block & inline |
max-height | a positive number, optionally with px/%/em/rem | ✓ block & inline |
| Property | Accepted values | Rich-Text editor |
|---|---|---|
background-color | hex color (3, 4, 6, or 8 digits); rgb() color; rgba() color (with alpha); a named color (e.g. red, navy); transparent; a theme palette color, rgb(var(--mwpalette-…)) | ✓ block & inline |
background | any value with no url() (e.g. a gradient); matches pattern ^url\(\s*(['"]?)https:\/\/(?:(?:[a-z0-9-]+\.)*myth-weavers\.com|(?:pbp-forum-uploads|mwbaldrcdkstack-ipbuploads[a-z0-9-]+)\.s3\.(?:[a-z0-9-]+\.)?amazonaws\.com)\/[^'"\s)]*\1\s*\)$ | ✓ block & inline |
background-image | any value with no url() (e.g. a gradient); matches pattern ^url\(\s*(['"]?)https:\/\/(?:(?:[a-z0-9-]+\.)*myth-weavers\.com|(?:pbp-forum-uploads|mwbaldrcdkstack-ipbuploads[a-z0-9-]+)\.s3\.(?:[a-z0-9-]+\.)?amazonaws\.com)\/[^'"\s)]*\1\s*\)$ | ✓ block & inline |
background-size | any value | ✓ block & inline |
background-position | any value | ✓ block & inline |
background-repeat | a background-repeat value (one or two of repeat, repeat-x, repeat-y, no-repeat, space, round) | ✓ block & inline |
background-attachment | one of: scroll, fixed, local | ✓ block & inline |
| Property | Accepted values | Rich-Text editor |
|---|---|---|
border | any value | ✓ block & inline |
border-top | any value | ✓ block & inline |
border-right | any value | ✓ block & inline |
border-bottom | any value | ✓ block & inline |
border-left | any value | ✓ block & inline |
border-style | one or more border styles (none, solid, dashed, dotted, inset, outset, ridge, groove, double, thin) | ✓ block & inline |
border-width | one or more lengths with px/em/rem | ✓ block & inline |
border-color | hex color (3, 4, 6, or 8 digits); rgb() color; rgba() color (with alpha); a named color (e.g. red, navy); a theme palette color, rgb(var(--mwpalette-…)) | ✓ block & inline |
border-radius | one or more lengths with px/em/rem/% | ✓ block & inline |
border-collapse | one of: collapse, separate | ✓ block & inline |
border-spacing | one or two lengths with px/em/rem | ✓ block & inline |
| Property | Accepted values | Rich-Text editor |
|---|---|---|
padding | one or more lengths with px/em/rem/%/vh | ✓ block & inline |
padding-top | a non-negative number with px/em/rem/% | ✓ block & inline |
padding-right | a non-negative number with px/em/rem/% | ✓ block & inline |
padding-bottom | a non-negative number with px/em/rem/% | ✓ block & inline |
padding-left | a non-negative number with px/em/rem/% | ✓ block & inline |
margin | matches pattern ^(auto|-?[\d.]+(px|em|rem|%|pt|in|cm)?)(\s+(auto|-?[\d.]+(px|em|rem|%|pt|in|cm)?))*$ | ✓ block & inline |
margin-top | a number (may be negative) with px/em/rem/%/pt/in/cm | ✓ block & inline |
margin-right | matches pattern ^(auto|-?[\d.]+(px|em|rem|%)?)$ | ✓ block & inline |
margin-bottom | a number (may be negative) with px/em/rem/%/pt/in/cm | ✓ block & inline |
margin-left | matches pattern ^(auto|-?[\d.]+(px|em|rem|%)?)$ | ✓ inline |
| Property | Accepted values | Rich-Text editor |
|---|---|---|
vertical-align | one of: top, middle, bottom, baseline, text-top, text-bottom, inherit | ✓ block & inline |
display | matches pattern ^(none|block|inline|inline-block|flow-root|list-item|inline-table|table|table-row|table-cell|table-caption|table-column|table-column-group|table-row-group|table-header-group|table-footer-group|flex|inline-flex|grid|inline-grid)(\s*!important)?$ | ✓ block & inline |
float | one of: none, left, right, center, unset | ✓ block & inline |
clear | one of: none, left, right, both | ✓ block & inline |
overflow | one of: visible, hidden, scroll, auto | ✓ block & inline |
box-sizing | one of: content-box, border-box | ✓ block & inline |
flex | any value | ✓ block & inline |
flex-direction | any value | ✓ block & inline |
flex-wrap | any value | ✓ block & inline |
flex-flow | any value | ✓ block & inline |
flex-grow | any value | ✓ block & inline |
flex-shrink | any value | ✓ block & inline |
flex-basis | any value | ✓ block & inline |
align-items | any value | ✓ block & inline |
align-content | any value | ✓ block & inline |
align-self | any value | ✓ block & inline |
justify-content | any value | ✓ block & inline |
justify-items | any value | ✓ block & inline |
justify-self | any value | ✓ block & inline |
gap | any value | ✓ block & inline |
row-gap | any value | ✓ block & inline |
column-gap | any value | ✓ block & inline |
order | any value | ✓ block & inline |
grid | any value | ✓ block & inline |
grid-template | any value | ✓ block & inline |
grid-template-columns | any value | ✓ block & inline |
grid-template-rows | any value | ✓ block & inline |
grid-template-areas | any value | ✗ HTML mode only |
grid-column | any value | ✓ block & inline |
grid-row | any value | ✓ block & inline |
grid-area | any value | ✓ block & inline |
grid-auto-columns | any value | ✓ block & inline |
grid-auto-rows | any value | ✓ block & inline |
grid-auto-flow | any value | ✓ block & inline |
| Property | Accepted values | Rich-Text editor |
|---|---|---|
position | one of: static, relative | ✓ block & inline |
top | a number (may be negative) with px/em/rem/% | ✓ block & inline |
left | a number (may be negative) with px/em/rem/% | ✓ block & inline |
right | a number (may be negative) with px/em/rem/% | ✓ block & inline |
bottom | a number (may be negative) with px/em/rem/% | ✓ block & inline |
z-index | an integer (may be negative) | ✓ block & inline |
| Property | Accepted values | Rich-Text editor |
|---|---|---|
opacity | a number, optionally as a percentage | ✓ block & inline |
outline | any value | ✓ block & inline |
transform | any value | ✓ block & inline |
cursor | one of: auto, default, pointer, text, move, not-allowed, crosshair, grab, grabbing, help, wait, progress, none, cell, context-menu, copy, alias, no-drop, zoom-in, zoom-out, n-resize, s-resize, e-resize, w-resize, nw-resize, ne-resize, sw-resize, se-resize, ew-resize, ns-resize, nesw-resize, nwse-resize, col-resize, row-resize, all-scroll, vertical-text | ✓ block & inline |
box-shadow | any value | ✓ block & inline |
text-shadow | any value | ✓ block & inline |
| Property | Accepted values | Rich-Text editor |
|---|---|---|
list-style | any value | ✓ block & inline |
list-style-type | one of: none, disc, circle, square, decimal, lower-alpha, upper-alpha, lower-roman, upper-roman | ✓ block & inline |
| Property | Accepted values | Rich-Text editor |
|---|---|---|
--table-border-width | a number, optionally with px | ✓ block & inline |
--table-cell-padding | a number, optionally with px | ✓ block & inline |
--table-margin | a number, optionally with px | ✓ block & inline |
Class names accepted on any element. Entries shown with a
trailing pattern (e.g. language-…) match any class with that prefix.
ProseMirror hljs-… code-block code-block-header editor-table hljs ipsAttachLink ipsAttachLink_center ipsAttachLink_image ipsAttachLink_left ipsAttachLink_right ipsCode ipsImage ipsImage_thumbnailed ipsQuote ipsQuote_citation ipsQuote_contents ipsSpoiler ipsSpoiler_contents ipsSpoiler_header ipsStyle_spoiler legacy-anchor legacy-attachment legacy-dice legacy-dice-formula legacy-dice-result legacy-dice-results legacy-dice-warning legacy-post-link legacy-thread-link mention mention-group mention-user mw-clear-float mw-emoji mw-fieldset mw-fieldset-body mw-fieldset-legend mw-float mw-float-border-thick mw-float-border-thin mw-float-left mw-float-right mw-language mw-private mw-private-body mw-private-hidden mw-private-shown mw-privatefrom mwbbcode mwbbcode-bb mwbbcode-html mwlang mwlang-content mwlang-label mwlang-obscured mwlang-unknown mwooc mwooc-hidden mwooc-shown mwprivate mwprivate-content mwprivate-header mwprivate-hidden-placeholder mwspoiler mwspoiler-hidden mwspoiler-hidetext mwspoiler-shown mwspoiler-showtext page-link page-link-new post-gm post-ic post-image post-image-center post-image-left post-image-link post-image-right post-ooc post-quote quote-attribution quote-content table-wrapper text-danger text-info text-muted text-success text-warning tpl-placeholder-chip tpl-placeholder-chip--dangling tpl-placeholder-chip--edited visibility-gm-only visibility-whisper
How these classes behave when a post is switched into the visual editor. Classes not listed here round-trip unchanged.
| Class | On switch | What happens |
|---|---|---|
| ipsAttachLink_center | ↑ upgrades to native | Legacy/imported form — the Rich-Text editor UPGRADES it to the native equivalent on switch (the legacy class/attribute is replaced by the native structure). No content is lost. |
| ipsAttachLink_left | ↑ upgrades to native | Legacy/imported form — the Rich-Text editor UPGRADES it to the native equivalent on switch (the legacy class/attribute is replaced by the native structure). No content is lost. |
| ipsAttachLink_right | ↑ upgrades to native | Legacy/imported form — the Rich-Text editor UPGRADES it to the native equivalent on switch (the legacy class/attribute is replaced by the native structure). No content is lost. |
| ipsCode | ↑ upgrades to native | Legacy/imported form — the Rich-Text editor UPGRADES it to the native equivalent on switch (the legacy class/attribute is replaced by the native structure). No content is lost. |
| ipsQuote | ↑ upgrades to native | Legacy/imported form — the Rich-Text editor UPGRADES it to the native equivalent on switch (the legacy class/attribute is replaced by the native structure). No content is lost. |
| ipsQuote_citation | ↑ upgrades to native | Legacy/imported form — the Rich-Text editor UPGRADES it to the native equivalent on switch (the legacy class/attribute is replaced by the native structure). No content is lost. |
| ipsQuote_contents | ↑ upgrades to native | Legacy/imported form — the Rich-Text editor UPGRADES it to the native equivalent on switch (the legacy class/attribute is replaced by the native structure). No content is lost. |
| ipsSpoiler | ↑ upgrades to native | Legacy/imported form — the Rich-Text editor UPGRADES it to the native equivalent on switch (the legacy class/attribute is replaced by the native structure). No content is lost. |
| ipsSpoiler_contents | ↑ upgrades to native | Legacy/imported form — the Rich-Text editor UPGRADES it to the native equivalent on switch (the legacy class/attribute is replaced by the native structure). No content is lost. |
| ipsSpoiler_header | ↑ upgrades to native | Legacy/imported form — the Rich-Text editor UPGRADES it to the native equivalent on switch (the legacy class/attribute is replaced by the native structure). No content is lost. |
| ipsStyle_spoiler | ↑ upgrades to native | Legacy/imported form — the Rich-Text editor UPGRADES it to the native equivalent on switch (the legacy class/attribute is replaced by the native structure). No content is lost. |
| legacy-attachment | ↑ upgrades to native | Legacy/imported form — the Rich-Text editor UPGRADES it to the native equivalent on switch (the legacy class/attribute is replaced by the native structure). No content is lost. |
| legacy-dice | ↑ upgrades to native | Legacy/imported form — the Rich-Text editor UPGRADES it to the native equivalent on switch (the legacy class/attribute is replaced by the native structure). No content is lost. |
| legacy-dice-formula | ↑ upgrades to native | Legacy/imported form — the Rich-Text editor UPGRADES it to the native equivalent on switch (the legacy class/attribute is replaced by the native structure). No content is lost. |
| legacy-dice-result | ↑ upgrades to native | Legacy/imported form — the Rich-Text editor UPGRADES it to the native equivalent on switch (the legacy class/attribute is replaced by the native structure). No content is lost. |
| legacy-dice-results | ↑ upgrades to native | Legacy/imported form — the Rich-Text editor UPGRADES it to the native equivalent on switch (the legacy class/attribute is replaced by the native structure). No content is lost. |
| legacy-dice-warning | ↑ upgrades to native | Legacy/imported form — the Rich-Text editor UPGRADES it to the native equivalent on switch (the legacy class/attribute is replaced by the native structure). No content is lost. |
| mw-language | ↑ upgrades to native | Legacy/imported form — the Rich-Text editor UPGRADES it to the native equivalent on switch (the legacy class/attribute is replaced by the native structure). No content is lost. |
| mw-private | ↑ upgrades to native | Legacy/imported form — the Rich-Text editor UPGRADES it to the native equivalent on switch (the legacy class/attribute is replaced by the native structure). No content is lost. |
| mw-private-body | ↑ upgrades to native | Legacy/imported form — the Rich-Text editor UPGRADES it to the native equivalent on switch (the legacy class/attribute is replaced by the native structure). No content is lost. |
| mw-private-hidden | ↑ upgrades to native | Legacy/imported form — the Rich-Text editor UPGRADES it to the native equivalent on switch (the legacy class/attribute is replaced by the native structure). No content is lost. |
| mw-private-shown | ↑ upgrades to native | Legacy/imported form — the Rich-Text editor UPGRADES it to the native equivalent on switch (the legacy class/attribute is replaced by the native structure). No content is lost. |
| mw-privatefrom | ↑ upgrades to native | Legacy/imported form — the Rich-Text editor UPGRADES it to the native equivalent on switch (the legacy class/attribute is replaced by the native structure). No content is lost. |
| mwbbcode | ↑ upgrades to native | Legacy/imported form — the Rich-Text editor UPGRADES it to the native equivalent on switch (the legacy class/attribute is replaced by the native structure). No content is lost. |
| mwbbcode-bb | ↑ upgrades to native | Legacy/imported form — the Rich-Text editor UPGRADES it to the native equivalent on switch (the legacy class/attribute is replaced by the native structure). No content is lost. |
| mwbbcode-html | ↑ upgrades to native | Legacy/imported form — the Rich-Text editor UPGRADES it to the native equivalent on switch (the legacy class/attribute is replaced by the native structure). No content is lost. |
| post-gm | ✗ HTML mode only | Bootstrap/post-type utility classes (text-muted, post-ic, visibility-*, …) on plain elements are dropped — the Rich-Text editor doesn't carry arbitrary CSS classes. The text survives unstyled. Apply styling via the toolbar, or keep it in HTML mode. |
| post-ic | ✗ HTML mode only | Bootstrap/post-type utility classes (text-muted, post-ic, visibility-*, …) on plain elements are dropped — the Rich-Text editor doesn't carry arbitrary CSS classes. The text survives unstyled. Apply styling via the toolbar, or keep it in HTML mode. |
| post-ooc | ✗ HTML mode only | Bootstrap/post-type utility classes (text-muted, post-ic, visibility-*, …) on plain elements are dropped — the Rich-Text editor doesn't carry arbitrary CSS classes. The text survives unstyled. Apply styling via the toolbar, or keep it in HTML mode. |
| text-danger | ✗ HTML mode only | Bootstrap/post-type utility classes (text-muted, post-ic, visibility-*, …) on plain elements are dropped — the Rich-Text editor doesn't carry arbitrary CSS classes. The text survives unstyled. Apply styling via the toolbar, or keep it in HTML mode. |
| text-info | ✗ HTML mode only | Bootstrap/post-type utility classes (text-muted, post-ic, visibility-*, …) on plain elements are dropped — the Rich-Text editor doesn't carry arbitrary CSS classes. The text survives unstyled. Apply styling via the toolbar, or keep it in HTML mode. |
| text-muted | ✗ HTML mode only | Bootstrap/post-type utility classes (text-muted, post-ic, visibility-*, …) on plain elements are dropped — the Rich-Text editor doesn't carry arbitrary CSS classes. The text survives unstyled. Apply styling via the toolbar, or keep it in HTML mode. |
| text-success | ✗ HTML mode only | Bootstrap/post-type utility classes (text-muted, post-ic, visibility-*, …) on plain elements are dropped — the Rich-Text editor doesn't carry arbitrary CSS classes. The text survives unstyled. Apply styling via the toolbar, or keep it in HTML mode. |
| text-warning | ✗ HTML mode only | Bootstrap/post-type utility classes (text-muted, post-ic, visibility-*, …) on plain elements are dropped — the Rich-Text editor doesn't carry arbitrary CSS classes. The text survives unstyled. Apply styling via the toolbar, or keep it in HTML mode. |
| visibility-gm-only | ✗ HTML mode only | Bootstrap/post-type utility classes (text-muted, post-ic, visibility-*, …) on plain elements are dropped — the Rich-Text editor doesn't carry arbitrary CSS classes. The text survives unstyled. Apply styling via the toolbar, or keep it in HTML mode. |
| visibility-whisper | ✗ HTML mode only | Bootstrap/post-type utility classes (text-muted, post-ic, visibility-*, …) on plain elements are dropped — the Rich-Text editor doesn't carry arbitrary CSS classes. The text survives unstyled. Apply styling via the toolbar, or keep it in HTML mode. |
| Tag | Classes |
|---|---|
<code> | language-… lang-… |
<pre> | lang-… |
Which URL schemes are accepted in link/image addresses.
Default (links and most elements): http, https
<img>: https, data
🔒 blocked (security) img: http — dropped by the sanitizer regardless of editor mode (phishing / mixed-content safety).