anchor.diff:    | Unselectable v -> boolAttr html "unselectable" v
     #if !FABLE_COMPILER
     | Style cssList ->
  -    html.Append "style" |> ignore
  -    html.Append "=\"" |> ignore
  -
  -    for cssProp in cssList do
  -      renderCssProp html cssProp
  -    if not(List.isEmpty cssList) then
  -      html.Remove (html.Length - 1, 1) |> ignore
  -    html.Append '"' |> ignore
  +    html.Write "style"
  +    html.Write "=\""
  +
  +    cssList
  +    |> List.iteri( fun i cssProp ->
  +        if i > 0 then html.Write(';')
  +        renderCssProp html cssProp)
  +    html.Write '"'
   
     | HTMLAttr.Custom (key, value) -> strAttr html (key.ToLower()) (string value)
     | Data (key, value) -> strAttr html ("data-" + key) (string value)
     #endif
   
  -let private renderSVGAttr (html:StringBuilder) (attr: SVGAttr) =
  +let private renderSVGAttr (html:TextWriter) (attr: SVGAttr) =
     match attr with
     | SVGAttr.ClipPath v -> objAttr html "clip-path" v
     | SVGAttr.Cx v -> objAttr html "cx" v
  
positive.code: module Fable.Helpers.ReactServer
  
  open System
  open System.Text
  open System.Text.RegularExpressions
  
  open Fable.Import.React
  
negative.code: let private voidTags = System.Collections.Generic.HashSet<_>(["area"; "base"; "br"; "col"; "embed"; "hr"; "img"; "input"; "keygen"; "link"; "menuitem"; "meta"; "param"; "source"; "track"; "wbr"])
  
  // Adapted from https://github.com/facebook/react/blob/37e4329bc81def4695211d6e3795a654ef4d84f5/packages/react-dom/src/server/escapeTextForBrowser.js#L49
  let escapeHtml (sb:TextWriter) (str: string) =
    if isNull str then () else
    for c in str.ToCharArray() do
      match c with
      | '"' -> sb.Write("&quot")
      | '&' -> sb.Write("&amp;")
      | ''' -> sb.Write("&#x27;") // modified from escape-html; used to be '&#39'
      | '<' -> sb.Write("&lt;")
      | '>' -> sb.Write("&gt;")
      | c   -> sb.Write(c)
  
  let inline private addUnit (html:TextWriter) (key: string) (value: string) =
    html.Write value
    if not (unitlessCssProps.Contains key) then
      html.Write "px"
  
  let private cssProp (html:TextWriter) (key: string) (value: obj) =
    html.Write key
    html.Write ':'
  
    match value with
    | :? int as v -> addUnit html key (string v)
    | :? float as v -> addUnit html key (string v)
    | _ -> escapeHtml html (value.ToString())
  
  let private slugRegex = Regex("([A-Z])", RegexOptions.Compiled)
  let inline private slugKey key =
    slugRegex.Replace(string key, "-$1").ToLower()
  
  let private renderCssProp (html:TextWriter) (prop: CSSProp) =
    match prop with
    | AlignContent v -> cssProp html "align-content" v
    | AlignItems v -> cssProp html "align-items" v
  