anchor.diff:      (<:html
        (<:head
         (<:title "Hello!")
  +      (<:style :type "text/css" "
  +
  +.chat-box {
  +    list-style: none;
  +    width: 420px;
  +    background: #eee;
  +    border: 1px solid #333;
  +    padding: 5px 14px;
  +    margin-left: auto;
  +    margin-right: auto;
  +
  +}
  +
  +.chat-box li { font: 12px/14px Courier, fixed; }
  +
  +.sceneheader, .action, .character { padding-top: 1.5ex; }
  +
  +.character, .sceneheader { text-transform:uppercase; }
  +
  +.action { padding-right: 5%; }
  +
  +.character { margin-left: 40%; }
  +
  +.dialogue { margin-left: 25%; padding-right: 25%; }
  +
  +.parenthetical { margin-left: 32%; padding-right: 30%; }
  +
  +/* special case: dialogue followed by a parenthetical; the extra line needs to be suppressed */
  +
  +.dialogue + .parenthetical { padding-bottom: 0; }
  +
  +.transition { padding-top: 3ex; margin-left: 65%; padding-bottom: 1.5ex; }
  +
  +.user-story { margin-right: auto;
  +            margin-left: auto;
  +            width: 45%;
  +            background-color: pink
  +          }
  +
  +"
  +)
         (<:script :src "http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js" :type "text/javascript")
         (<:script :type "text/javascript" (<:ai "
   function callback(data) {
  
positive.code: ;; TODO for today:
  ;; * Add another input field, 'action'.
  ;; * When someone logs in, draw a screenplay-style scene heading.
  ;; * Render each entry as screenplay-style Action/Dialog for the user that spoke.
  
  (defvar *server* nil)
  (defparameter *current-story* nil)
  (defvar *users* nil)
  (defvar *max-message-id* 0)
  
  (defstruct user-message id user timestamp message)
  
  (defun add-user-message (user message &optional (timestamp (get-universal-time))
                           &aux (id (incf *max-message-id*)))
    (push (make-user-message :id id :user user :timestamp timestamp :message message)
          *current-story*)
    id)
  
  (defun get-recent-messages (last-message-id)
    (member (1+ last-message-id) (reverse *current-story*) :key #'user-message-id))
  
  (defun session-cleanup (session)
    (let ((username (session-value 'username session)))
  
negative.code:             (<:p (<:ah "Successfully logged in as " username "."))
              (push username *users*)
              (setf (session-value 'username) username
                    (session-value 'last-action-id) *max-action-id*)
              (format t "~&~A logged in.~%" username)
              (redirect "/"))
            (<:div
  