anchor.diff:      ..then((String content) {
         GeometryBuilder gb = ImportGeometryFromWavefront(content);
         MeshData md = GeometryBuilderToMeshData("", pnc_novertexmovement, gb);
  -      theNodes.ctLogo = Node(md.name, md, material)
  +      theNodes.ctLogo = Node(md.name, md, theNodes.material)
           ..rotX(Math.pi / 2.0)
  -        ..rotZ(Math.pi);
  -      theNodes.ctLogo.transform.scale(0.25, 0.25, 0.25);
  +        ..rotZ(Math.pi)
  +        ..transform.scale(0.25, 0.25, 0.25)
  +        ..enabled = false;
         scene_pnc_novertexmovement.add(theNodes.ctLogo);
       });
     gLoadables.add(future);
   
  -  double _startTimeMs = 0.0;
  +  double startMs = -1.0;
     void animate(num timeMs) {
  -    if (_startTimeMs == 0.0) _startTimeMs = timeMs;
  -    final now = (timeMs - _startTimeMs) / 1000.0;
  -    if (now < musicBeatsBegin + 2.0) {
  -      double frac = now / 30;
  -      if (frac > 1.0) frac = 0.99;
  -      VM.Vector3 pos = VM.Vector3.zero();
  -      VM.Vector3.mix(cameraIntroStartPoint, cameraIntroEndPoint, frac, pos);
  -      print("${cameraIntroEndPoint} ${frac} ${pos}");
  -      tkc.setPosFromVec(pos);
  -      tkc.lookAt(cameraIntroEndPoint);
  -    }
  -
  -    material.ForceUniform(uTime, now);
  +    if (startMs < 0.0) startMs = timeMs;
  +    double now = (timeMs - startMs) * 0.001 + 175.0;
  +    // double now = theNodes.music.currentTime;
  +    if (musicElement.ended || now > 192.0) {
  +      infoElement.text = about;
  +    } else {
  +      theNodes.advanceTimeline(now);
  +      infoElement.text = "${now}";
  +    }
  +
  +    theNodes.material.ForceUniform(uTime, timeMs / 1000.0);
       phase.Draw();
  +
       HTML.window.animationFrame.then(animate);
     }
   
     Future.wait(gLoadables).then((List list) {
  -    music.play();
  -    HTML.document.getElementById("info").innerHtml = about;
  +    musicElement.play();
  +    infoElement.text = "";
  +
       animate(0.0);
     });
   }
  
positive.code:       switched = false;
      }
  
      if( switchCount >= 5) {
        // music is about to end
        littleBall.enabled = false;
        ctLogo.enabled = false;
      }
      double pos = (time/flySpeedDivider)+amp+1.1;
      //ballPos = (time/flySpeed)+0.5;
      setObjectPosAlongTorus( pos-tween, activeNode); // -1.5 to make the ball apear a bit later
      if( activeNode.children.length != 0)
        activeNode.children.first.rotZ(elapsed/1000);
    }
  
    void setObjectPosAlongTorus( double pos, Spatial node) {
      getTorusKnotPos( pos, q, p, radius, 1.0, p1 );
      getTorusKnotPos( pos+0.3, q, p, radius, 1.0, p2 );
      node.setPosFromVec(p1);
      if( node == camera)
        node.lookAt(p2); // let the camera use the z axis as its up vector.
      else
        node.lookAt(p2, camera.getUp());
    }
  }
  
  Camera camera;
  TextureCache textureCache;
  TextureWrapper blockTex;
  html.AudioElement music;
  
  */
  final List<Future<Object>> gLoadables = [];
  
  class TheNodes {
    TheNodes();
  
    Node knot;
    Node icoBig;
    Node icoSmall;
    Node ctLogo;
  }
  
  void main() {
    IntroduceNewShaderVar(uFadeFactor, const ShaderVarDesc("float", ""));
  
    final HTML.CanvasElement canvas =
        HTML.document.getElementById("webgl-canvas");
    final HTML.AudioElement music = HTML.document.getElementById("music");
    final ChronosGL cgl = ChronosGL(canvas);
    final TorusKnotCamera tkc = TorusKnotCamera();
    final VM.Vector3 cameraIntroEndPoint = VM.Vector3.zero();
    TorusKnotGetPos(
        cameraIntroEndPointTime * 1000.0, 3, 2, 20.0, 1.0, cameraIntroEndPoint);
  
    print("@@@@@ ${cameraIntroStartPoint}");
    print("@@@@@ ${cameraIntroEndPoint}");
    tkc
      ..setPosFromVec(cameraIntroStartPoint)
      ..lookAt(cameraIntroEndPoint);
  
    Perspective perspective = Perspective(tkc, 0.1, 1000.0);
  
    final width = canvas.clientWidth;
    final height = canvas.clientHeight;
  
negative.code:   final RenderPhaseResizeAware phase =
        RenderPhaseResizeAware("main", cgl, canvas, perspective);
  
    theNodes.material = Material("matLogo")..SetUniform(uFadeFactor, 0.5);
  
    // =========================================
    final Scene scene_pnvc = Scene("", MakeVertexColorShader(cgl), [perspective]);
    phase.add(scene_pnvc);
  