                               {:message "" :time 0 :color :black} 
                               (nth (reverse (get-in state [:world :log])) log-idx))
             darken-factor   (inc  (* (/ -1 5) (- current-time (message :time))))
-            log-color       (darken-rgb (color->rgb (get message :color)) darken-factor)]
+            log-color       (darken-rgb (color->rgb (get message :color)) darken-factor)
+            characters      (markup->chars 0 0 (format "%s%s %s" (if msg-above?
+                                                                   (str "<color fg=\"highlight\">/</color>-" up-arrow-char)
+                                                                   "   ")
+                                                                 (if msg-below?
+                                                                   (str "<color fg=\"highlight\">*</color>-" down-arrow-char)
+                                                                   "   ")
+                                                                 (or (message :text) "" )))]
         (log/info "num-log-msgs" num-logs)
         (log/info "message" message)
-        (put-string screen 0 0 (format "%s%s %s" (if msg-above?
-                                                  (str up-arrow-char "-/")
-                                                  "   ")
-                                                (if msg-below?
-                                                  (str down-arrow-char "-*")
-                                                  "   ")
-                                                (message :text))
-                               log-color :black)))
+        (put-chars screen characters)))
     (case (current-state state)
       :pickup               (render-pick-up state)
       :inventory            (render-inventory state)

          (doall (map-indexed
            (fn [idx item] (put-string (state :screen) 18 (+ idx 6) (item :name)))
            (-> state :world :player :inventory)))
          (put-string (state :screen) 10 22 "Play again? [yn]"))
      :rescued
        (let [rescue-modes   ["boat" "helicopter" "hovercraft" "ocean liner"]
              rescue-mode    (nth rescue-modes (mod (get-in state [:world :random-numbers 2]) (count rescue-modes)))

   (let [fg (color->rgb fg)
         bg (color->rgb bg)]
     [string fg bg styles])))

(defn zip-str [s]
  (zip/xml-zip 
      (xml/parse (java.io.ByteArrayInputStream. (.getBytes s)))))

(defn str->chars
  ([s]
   (str->chars s :white :black))
  ([s fg bg]
   (map (fn [c] {:c c :fg fg :bg bg :style #{}})
        s)))

(defn markup->chars
  [x y s]
  (let [z (zip-str (str "<body>" s "</body>"))]
    (println "s" s)
    (map-indexed (fn [idx c] (assoc c :c  (str (get c :c))
                                      :x  (+ x idx)
                                      :y  y
                                      :fg (color->rgb (get c :fg))
                                      :bg (color->rgb (get c :bg))))
                 (reduce (fn [characters v]
                           (cond
                             (string? v)
                               (concat characters
                                       (str->chars v))
                             (map? v)
                               (concat characters
                                       (str->chars (-> v :content first)
                                                   (if (= (get v :tag) :color)
                                                     (keyword (get-in v [:attrs :fg] :white))
                                                     :white)
                                                   (if (= (get v :tag) :color)
                                                     (keyword (get-in v [:attrs :bg] :black))
                                                     :black)))))
                         []
                         (-> z zip/node :content)))))

(defn put-string
  ([^robinson.aterminal.ATerminal screen x y string]
