HTML Styles in chat So I was messing about with some other stuff, and came across this trick. Generally, R20 will ignore any HTML you try to type into chat. But as my old man used to say, "if it doesn't fit, force it". So here's how to force a little bit of HTML style into chat. The trick is basic - when you create a chat link or button, we send: [Brown Bear] (<a href="https://roll20.net/compendium/dnd5e/Brown" rel="nofollow">https://roll20.net/compendium/dnd5e/Brown</a> Bear) to chat, and at some point it gets turned into: <a href=" <a href="https://roll20.net/compendium/dnd5e/Brown" rel="nofollow">https://roll20.net/compendium/dnd5e/Brown</a> Bear "> Brown Bear </a> So, I thought, what if we close the href property while still inside the () parentheses, then throw an inline style in there? I'll bet it doesn't work. But it does... quite a few styles will work in there (but some won't). A very basic example: &{template:default}{{name=Simple Styles}}{{=[Blue](#" style="color:blue) [Red Border](#" style="color:red;border:1px dashed red) [Big background](#" style="color:cyan;font-size:30px;line-height:40px;background-color:black;padding:2px) [Blurred](#" style="color:rgba(0,0,0,0&rpar;;text-shadow:5px 0px 10px black,-5px 0px 10px black;font-size:20px;line-height:40px) (blurred) [Font/margin change](#" style="color:gray;font-family:comic sans ms;font-size:25px;font-style:italic;display:block;text-align:center;line-height:25px;display:block;text-align:left;margin-left:-55px) }} So all we're doing is closing the href property early ( using a # makes a null link which can't be clicked , you can use an actual link though) and then putting inline style="property1: value; property2: value1, value2; property3: value; after it. We don't need to close the style field, as the R20 parser puts a "> on there for us, so we just end the final style entry with the usual ) brace to close the link from the R20 parser's point of view. One big caveat with &{template:default} : you can't use this trick on the left side of a row. The '=' after style will end the left side of the row, and move to the right side, breaking the style attempt. Escaping with &equals; doesn't work either - if anyone figures a way around this, comment away! Or is there another inline html syntax that doesn't use "="? Anyway, so we can use this trick in other templates too, like the npcaction template from 5e - just a bit of prettying up: &{template:npcaction} {{rname=[Wildshape](#" style="color:#7e2d40;font-size:22px;display:block;text-align:center;margin-bottom:5px)}} {{name=[Bob, lvl @{bob|base_level} @{bob|class}](#" style="display:block;text-align:center;border:1px solid)}} {{description=&nbsp; [**Bob transforms into a...**](#" style="display:block;text-align:center) &nbsp; ?{Wildshape Form?| Brown Bear,[img](<a href="https://s3.amazonaws.com/files.d20.io/images/28450281/heCscf51qjn8zRRwUPHYjA/original.png" rel="nofollow">https://s3.amazonaws.com/files.d20.io/images/28450281/heCscf51qjn8zRRwUPHYjA/original.png</a>) &nbsp; [Hungry Brown Bear!](<a href="https://roll20.net/compendium/dnd5e/Brown" rel="nofollow">https://roll20.net/compendium/dnd5e/Brown</a> Bear" style="color:brown;font-size:25px;font-weight:bold;display:block;text-align:center;line-height:25px)| Other options,blah blah} &nbsp; [[[@{bob|other_resource}-1]]/@{bob|other_resource|max} uses remain until short rest](#" style="border:1px solid black;background-color:beige;margin:1px;text-align:center;user-select:none;display:block)}} Obviously you can achieve more with CSS, but the advantage of this method is that all players will see the Styles, regardless of whether they have Stylus or other extensions installed. We can also combine the trick with Stylus so different players see different things in the same message, though you would have to pre-share a style with your players for this to work. It could be rolled in with other style changes so they don't notice, of course: &{template:default} {{name=Scrawled message}} {{=[At the ](#" style="color:gray;font:italic 18px Impact;padding:2px)[first](#" style="display:none;color:gray;font:italic 18px Impact;padding:2px" id="alice)[second](#" style="display:none;color:gray;font:italic 18px Impact;padding:2px" id="bob)[third](#" style="color:gray;font:italic 18px Impact;padding:2px" id="default)[ junction, head ](#" style="color:gray;font:italic 18px Impact;padding:2px)[north](#" style="display:none;color:gray;font:italic 18px Impact;padding:2px" id="alice)[south](#" style="display:none;color:gray;font:italic 18px Impact;padding:2px" id="bob)[west](#" style="color:gray;font:italic 18px Impact;padding:2px" id="default)}} Alice has this in her Stylus: #userscript-alice { display:inline!important; } #userscript-default { display:none!important; } And Bob has: #userscript-bob { display:inline!important; } #userscript-default { display:none!important; } The exact same message in public chat is seen differently by Alice, Bob, and a player with no styles installed: Another use might be languages. Here's an unreadable wall plaque: &{template:default} {{name=Wall Plaque}} {{=[I can read Elvish](#" style="color:rgba(0,0,0,0&rpar;;text-shadow:10px 0px 10px black,-10px 0px 10px black;font-size:25px;font-family:comic sans ms;margin-left:-55px;line-height:40px" id="Elvish)}} Unless you can read Elvish and the GM gave you this: .textchatcontainer #userscript-Elvish { color:cyan!important; } A note on using id tags in the link: Roll20 puts " userscript- " in front of whatever you enter in the field, so you can't use this trick to play funny buggers with Roll20's pre-set id's. Same goes for classes if you try to use one. As mentioned in this blind roll trick , if you don't want the id for your hidden/blurred text to be obvious to any player looking at your macro code, you can hide it in an Attribute field of a character sheet that no one has permissions on. That's probably about a long enough post. Oh! One more thing. You can actually use this trick to recreate the NPC Chat Menu with Keith's inline link fix, *and* hiding invalid actions, all without installing Stylus. I don't think you can hide the line-breaks using this method, so the Stylus one is probably still better. But at least this works out of the box and doesn't require anything to be installed, I guess: /w gm &{template:npcaction} &{noerror} {{rname=@{selected|character_name}}} {{name=@{selected|npc_type}}} {{description=[@{selected|repeating_npcaction_$0_name}&nbsp;](~@{selected|character_name}|repeating_npcaction_$0_npc_action" style="border:none;background-color:rgba(0,0,0,0&rpar;;color:blue;font-weight:bold;display:none;display:@{selected|repeating_npcaction_$0_name|max}inline) [@{selected|repeating_npcaction_$1_name}&nbsp;](~@{selected|character_name}|repeating_npcaction_$1_npc_action" style="border:none;background-color:rgba(0,0,0,0&rpar;;color:blue;font-weight:bold;display:none;display:@{selected|repeating_npcaction_$1_name|max}inline) [@{selected|repeating_npcaction_$2_name}&nbsp;](~@{selected|character_name}|repeating_npcaction_$2_npc_action" style="border:none;background-color:rgba(0,0,0,0&rpar;;color:blue;font-weight:bold;display:none;display:@{selected|repeating_npcaction_$2_name|max}inline) [@{selected|repeating_npcaction_$3_name}&nbsp;](~@{selected|character_name}|repeating_npcaction_$3_npc_action" style="border:none;background-color:rgba(0,0,0,0&rpar;;color:blue;font-weight:bold;display:none;display:@{selected|repeating_npcaction_$3_name|max}inline) [@{selected|repeating_npcaction_$4_name}&nbsp;](~@{selected|character_name}|repeating_npcaction_$4_npc_action" style="border:none;background-color:rgba(0,0,0,0&rpar;;color:blue;font-weight:bold;display:none;display:@{selected|repeating_npcaction_$4_name|max}inline) [@{selected|repeating_npcaction_$5_name}&nbsp;](~@{selected|character_name}|repeating_npcaction_$5_npc_action" style="border:none;background-color:rgba(0,0,0,0&rpar;;color:blue;font-weight:bold;display:none;display:@{selected|repeating_npcaction_$5_name|max}inline)}}