anchor.diff:  void main() {
   
     Impress pres = new Impress();
  -  pres.setupCanvas();
  +  pres.setupPresentation();
   
     // trigger impress action (next or prev) on keyup
     document.on.keyUp.add((event) {
  
positive.code:     return scale;
    }
    
    String stepCSS(String s) =>
      "position: absolute; -webkit-transform: translate(-50%, -50%) ${s}; -webkit-transform-style: preserve-3d;";
  
  
negative.code:   String canvasCSS(State state) =>
        "position: absolute; -webkit-transform-origin: 0% 0%; -webkit-transition: all 500ms ease-in-out 0ms; -webkit-transform-style: preserve-3d; -webkit-transform: rotateZ(${-state.rot.z}deg) rotateY(${-state.rot.y}deg) rotateX(${-state.rot.x}deg) translate3d(${-state.pos.x}px, ${-state.pos.y}px, ${-state.pos.z}px);";
  
    String scaleCSS(State state) {
        num windowScale = winScale();
        num targetScale = windowScale / state.scale;
        num perspective = mCfg.perspective / targetScale;
        return "position: absolute; -webkit-transform-origin: 0% 0%; -webkit-transition: all 500ms ease-in-out 250ms; -webkit-transform-style: preserve-3d; top: 50%; left: 50%; -webkit-transform: perspective(${perspective}) scale(${targetScale});";
    }
  
    void setupPresentation() {
      // Body and html
      document.body.style.cssText = bodyCSS();
      
      document.head.innerHTML = document.head.innerHTML + '<meta content="width=device-width, minimum-scale=1, maximum-scale=1, user-scalable=no" name="viewport">';
      
      // Create steps
      mSteps.forEach((Element step) =>
        step.style.cssText = stepCSS(stateToCSS(getState(step)))
      );
      
      // Create Canvas
      mCanvas.style.cssText = canvasCSS(getState(mSteps[0]));
      mCanvas.elements.first.remove();
  
      // Scale and perspective
      mImpress.style.cssText = scaleCSS(getState(mSteps[0]));
  