<?xml version="1.0" encoding="UTF-8"?>
<PageData>
    <uuid_page val="9736e8db_2bb0_4f21_9682_ade802c01be2"/>
    <type_page val="0"/>
    <layout_datas>
        <uuid_grid val="c7283ee22f1c4634be1736e9ea486bb0"/>
        <margin_top>
            <is_resp val="false"/>
            <unit_val val="0"/>
            <values type="Map[int]=double"/>
            <no_resp_value val="0"/>
            <valid_resp_v val="true"/>
        </margin_top>
        <margin_bottom>
            <is_resp val="false"/>
            <unit_val val="0"/>
            <values type="Map[int]=double"/>
            <no_resp_value val="0"/>
            <valid_resp_v val="true"/>
        </margin_bottom>
        <custom_css>
            <code_html val=""/>
            <IsLangDependant val="false"/>
            <HtmlCodeByLang type="Map[QString]=QString"/>
        </custom_css>
        <animation>
            <enabled val="false"/>
            <key val=""/>
            <duration val="1000"/>
            <values type="List[AnimValueProperty]"/>
            <delta_strength val="2"/>
        </animation>
        <custom_obj_class val=""/>
        <EditorElementName val=""/>
        <CustomZindex>
            <is_resp val="false"/>
            <unit_val val="-1"/>
            <values type="Map[int]=double"/>
            <no_resp_value val="0"/>
            <valid_resp_v val="true"/>
        </CustomZindex>
        <boxes type="SmartList[Grid_ObjectBaseDatas*]">
            <ITEM class="Grid_BoxDatas">
                <uuid_grid val="33de288241ae4952aa20363824b69707"/>
                <margin_top>
                    <is_resp val="false"/>
                    <unit_val val="0"/>
                    <values type="Map[int]=double"/>
                    <no_resp_value val="0"/>
                    <valid_resp_v val="true"/>
                </margin_top>
                <margin_bottom>
                    <is_resp val="false"/>
                    <unit_val val="0"/>
                    <values type="Map[int]=double"/>
                    <no_resp_value val="0"/>
                    <valid_resp_v val="true"/>
                </margin_bottom>
                <custom_css>
                    <code_html val=""/>
                    <IsLangDependant val="false"/>
                    <HtmlCodeByLang type="Map[QString]=QString"/>
                </custom_css>
                <animation>
                    <enabled val="false"/>
                    <key val=""/>
                    <duration val="1000"/>
                    <values type="List[AnimValueProperty]"/>
                    <delta_strength val="2"/>
                </animation>
                <custom_obj_class val=""/>
                <EditorElementName val="Boite à copier"/>
                <CustomZindex>
                    <is_resp val="false"/>
                    <unit_val val="-1"/>
                    <values type="Map[int]=double"/>
                    <no_resp_value val="0"/>
                    <valid_resp_v val="true"/>
                </CustomZindex>
                <rows type="SmartList[Grid_RowDatas*]">
                    <ITEM class="Grid_RowDatas">
                        <uuid_grid val="c51f943c02f443cea7a0b3f9302b5f4c"/>
                        <margin_top>
                            <is_resp val="false"/>
                            <unit_val val="0"/>
                            <values type="Map[int]=double"/>
                            <no_resp_value val="0"/>
                            <valid_resp_v val="true"/>
                        </margin_top>
                        <margin_bottom>
                            <is_resp val="false"/>
                            <unit_val val="0"/>
                            <values type="Map[int]=double"/>
                            <no_resp_value val="0"/>
                            <valid_resp_v val="true"/>
                        </margin_bottom>
                        <custom_css>
                            <code_html val=""/>
                            <IsLangDependant val="false"/>
                            <HtmlCodeByLang type="Map[QString]=QString"/>
                        </custom_css>
                        <animation>
                            <enabled val="false"/>
                            <key val=""/>
                            <duration val="1000"/>
                            <values type="List[AnimValueProperty]"/>
                            <delta_strength val="2"/>
                        </animation>
                        <custom_obj_class val=""/>
                        <EditorElementName val=""/>
                        <CustomZindex>
                            <is_resp val="false"/>
                            <unit_val val="-1"/>
                            <values type="Map[int]=double"/>
                            <no_resp_value val="0"/>
                            <valid_resp_v val="true"/>
                        </CustomZindex>
                        <hidden>
                            <hidden type="Set[int]"/>
                        </hidden>
                        <ext_margins>
                            <val_0>
                                <is_resp val="false"/>
                                <unit_val val="-1"/>
                                <values type="Map[int]=double"/>
                                <no_resp_value val="0"/>
                                <valid_resp_v val="false"/>
                            </val_0>
                            <val_1>
                                <is_resp val="false"/>
                                <unit_val val="-1"/>
                                <values type="Map[int]=double"/>
                                <no_resp_value val="0"/>
                                <valid_resp_v val="false"/>
                            </val_1>
                            <val_2>
                                <is_resp val="false"/>
                                <unit_val val="-1"/>
                                <values type="Map[int]=double"/>
                                <no_resp_value val="0"/>
                                <valid_resp_v val="false"/>
                            </val_2>
                            <val_3>
                                <is_resp val="false"/>
                                <unit_val val="-1"/>
                                <values type="Map[int]=double"/>
                                <no_resp_value val="0"/>
                                <valid_resp_v val="false"/>
                            </val_3>
                        </ext_margins>
                        <children type="SmartList[Grid_RowChilBaseDatas*]">
                            <ITEM class="Grid_ColumnDatas">
                                <uuid_grid val="23f043f58fae4de58d58a1c650963718"/>
                                <margin_top>
                                    <is_resp val="false"/>
                                    <unit_val val="0"/>
                                    <values type="Map[int]=double"/>
                                    <no_resp_value val="0"/>
                                    <valid_resp_v val="true"/>
                                </margin_top>
                                <margin_bottom>
                                    <is_resp val="false"/>
                                    <unit_val val="0"/>
                                    <values type="Map[int]=double"/>
                                    <no_resp_value val="0"/>
                                    <valid_resp_v val="true"/>
                                </margin_bottom>
                                <custom_css>
                                    <code_html val=".$ {justify-content: center!important; align-items: center!important;}"/>
                                    <IsLangDependant val="false"/>
                                    <HtmlCodeByLang type="Map[QString]=QString"/>
                                </custom_css>
                                <animation>
                                    <enabled val="false"/>
                                    <key val=""/>
                                    <duration val="1000"/>
                                    <values type="List[AnimValueProperty]"/>
                                    <delta_strength val="2"/>
                                </animation>
                                <custom_obj_class val=""/>
                                <EditorElementName val=""/>
                                <CustomZindex>
                                    <is_resp val="false"/>
                                    <unit_val val="-1"/>
                                    <values type="Map[int]=double"/>
                                    <no_resp_value val="0"/>
                                    <valid_resp_v val="true"/>
                                </CustomZindex>
                                <resp_geo>
                                    <map_screen type="Map[int]=ScreenColumnGeometry">
                                        <ITEM>
                                            <KEY val="0"/>
                                            <VAL>
                                                <IndexStart val="0"/>
                                                <ColumnLength val="12"/>
                                            </VAL>
                                        </ITEM>
                                        <ITEM>
                                            <KEY val="1"/>
                                            <VAL>
                                                <IndexStart val="0"/>
                                                <ColumnLength val="12"/>
                                            </VAL>
                                        </ITEM>
                                        <ITEM>
                                            <KEY val="2"/>
                                            <VAL>
                                                <IndexStart val="0"/>
                                                <ColumnLength val="12"/>
                                            </VAL>
                                        </ITEM>
                                        <ITEM>
                                            <KEY val="3"/>
                                            <VAL>
                                                <IndexStart val="0"/>
                                                <ColumnLength val="12"/>
                                            </VAL>
                                        </ITEM>
                                    </map_screen>
                                </resp_geo>
                                <hidden>
                                    <hidden type="Set[int]"/>
                                </hidden>
                                <comps type="SmartList[Grid_ColumnElementDatas*]">
                                    <ITEM class="Grid_CompDatas_Html">
                                        <uuid_grid val="4e7378e400924b3abf4174dae92922f0"/>
                                        <margin_top>
                                            <is_resp val="false"/>
                                            <unit_val val="0"/>
                                            <values type="Map[int]=double"/>
                                            <no_resp_value val="0"/>
                                            <valid_resp_v val="true"/>
                                        </margin_top>
                                        <margin_bottom>
                                            <is_resp val="false"/>
                                            <unit_val val="0"/>
                                            <values type="Map[int]=double"/>
                                            <no_resp_value val="0"/>
                                            <valid_resp_v val="true"/>
                                        </margin_bottom>
                                        <custom_css>
                                            <code_html val=".zdog-canvas {display: block; /*margin: 0 auto;*/cursor: move;}@media only screen and (max-width: 421px) {.zdog-canvas {width: 350px;height: 350px;}}"/>
                                            <IsLangDependant val="false"/>
                                            <HtmlCodeByLang type="Map[QString]=QString"/>
                                        </custom_css>
                                        <animation>
                                            <enabled val="false"/>
                                            <key val=""/>
                                            <duration val="1000"/>
                                            <values type="List[AnimValueProperty]"/>
                                            <delta_strength val="2"/>
                                        </animation>
                                        <custom_obj_class val=""/>
                                        <EditorElementName val=""/>
                                        <CustomZindex>
                                            <is_resp val="false"/>
                                            <unit_val val="-1"/>
                                            <values type="Map[int]=double"/>
                                            <no_resp_value val="0"/>
                                            <valid_resp_v val="true"/>
                                        </CustomZindex>
                                        <hidden>
                                            <hidden type="Set[int]"/>
                                        </hidden>
                                        <ext_margins>
                                            <val_0>
                                                <is_resp val="false"/>
                                                <unit_val val="-1"/>
                                                <values type="Map[int]=double"/>
                                                <no_resp_value val="0"/>
                                                <valid_resp_v val="false"/>
                                            </val_0>
                                            <val_1>
                                                <is_resp val="false"/>
                                                <unit_val val="-1"/>
                                                <values type="Map[int]=double"/>
                                                <no_resp_value val="0"/>
                                                <valid_resp_v val="false"/>
                                            </val_1>
                                            <val_2>
                                                <is_resp val="false"/>
                                                <unit_val val="-1"/>
                                                <values type="Map[int]=double"/>
                                                <no_resp_value val="0"/>
                                                <valid_resp_v val="false"/>
                                            </val_2>
                                            <val_3>
                                                <is_resp val="false"/>
                                                <unit_val val="-1"/>
                                                <values type="Map[int]=double"/>
                                                <no_resp_value val="0"/>
                                                <valid_resp_v val="false"/>
                                            </val_3>
                                        </ext_margins>
                                        <anchor>
                                            <uuid_grid val="2e44b79d4dbc411cbdcc85a07c3510c3"/>
                                            <margin_top>
                                                <is_resp val="false"/>
                                                <unit_val val="0"/>
                                                <values type="Map[int]=double"/>
                                                <no_resp_value val="0"/>
                                                <valid_resp_v val="true"/>
                                            </margin_top>
                                            <margin_bottom>
                                                <is_resp val="false"/>
                                                <unit_val val="0"/>
                                                <values type="Map[int]=double"/>
                                                <no_resp_value val="0"/>
                                                <valid_resp_v val="true"/>
                                            </margin_bottom>
                                            <custom_css>
                                                <code_html val=""/>
                                                <IsLangDependant val="false"/>
                                                <HtmlCodeByLang type="Map[QString]=QString"/>
                                            </custom_css>
                                            <animation>
                                                <enabled val="false"/>
                                                <key val=""/>
                                                <duration val="1000"/>
                                                <values type="List[AnimValueProperty]"/>
                                                <delta_strength val="2"/>
                                            </animation>
                                            <custom_obj_class val=""/>
                                            <EditorElementName val=""/>
                                            <CustomZindex>
                                                <is_resp val="false"/>
                                                <unit_val val="-1"/>
                                                <values type="Map[int]=double"/>
                                                <no_resp_value val="0"/>
                                                <valid_resp_v val="true"/>
                                            </CustomZindex>
                                            <id_anchor val=""/>
                                            <ScrollMarginTop>
                                                <is_resp val="false"/>
                                                <unit_val val="-1"/>
                                                <values type="Map[int]=double"/>
                                                <no_resp_value val="0"/>
                                                <valid_resp_v val="false"/>
                                            </ScrollMarginTop>
                                        </anchor>
                                        <min_height>
                                            <is_resp val="false"/>
                                            <unit_val val="0"/>
                                            <values type="Map[int]=double"/>
                                            <no_resp_value val="0"/>
                                            <valid_resp_v val="true"/>
                                        </min_height>
                                        <HtmlCode>
                                            <code_html val="&lt;script src='https://unpkg.com/zdog@1/dist/zdog.dist.min.js'&gt;&lt;/script&gt;&lt;canvas class=&quot;zdog-canvas&quot;  width=&quot;500&quot; height=&quot;500&quot;&gt;&lt;/canvas&gt;&#10;&lt;script&gt;&#10;window.ZdogSpookyHouse = {&#10;  wobbling: true,&#10;  sceneY: 12,&#10;  hillScale: 0.75,&#10;  color: {&#10;    deep: 'hsl(230, 60%, 40%)',&#10;    dark: 'hsl(230, 60%, 50%)',&#10;    darker: '#2a3a81',&#10;    medium: 'hsl(230, 60%, 60%)',&#10;    light: 'hsl(230, 60%, 70%)',&#10;    pale: '#6D77AD',&#10;    highlight: '#FFB',&#10;    fog: 'hsla(230, 60%, 80%, 0.4)',&#10;    paintjob: '#d59c55' } };&#10;ZdogSpookyHouse.addBones = function (options) {&#10;  var TAU = Zdog.TAU;&#10;  var lineX = 2;&#10;  var color = ZdogSpookyHouse.color.light;&#10;  var stroke = 1.3;&#10;  var line = new Zdog.Shape({&#10;    addTo: options.addTo,&#10;    path: [{ x: -lineX }, { x: lineX }],&#10;    closed: false,&#10;    stroke: stroke,&#10;    color: color,&#10;    translate: { y: 12, z: -30 },&#10;    rotate: { y: TAU / 16, z: TAU / 16 } });&#10;  var halfFemur = line.copy({&#10;    translate: { x: -6, y: 15, z: -28 },&#10;    rotate: { y: -TAU / 8, z: TAU / 8 } });&#10;  var femurEnd = line.copy({&#10;    addTo: halfFemur,&#10;    path: [&#10;    { x: 1, y: -1 },&#10;    { x: 0, y: 0 },&#10;    { x: 1, y: 1 }],&#10;    closed: false,&#10;    rotate: null,&#10;    translate: { x: lineX } });&#10;  halfFemur.copyGraph({&#10;    translate: { x: 1, y: 6, z: -31 },&#10;    rotate: { z: -TAU / 8, x: TAU / 8 },&#10;    scale: 0.75 });&#10;  line.copy({&#10;    scale: 0.25,&#10;    translate: { y: 18, z: -26 },&#10;    rotate: { z: TAU / 8 } });&#10;  var fullFemur = halfFemur.copyGraph({&#10;    translate: { x: -9, y: 10, z: -30 },&#10;    rotate: { z: -TAU / 16 } });&#10;  femurEnd.copy({&#10;    addTo: fullFemur,&#10;    scale: { x: -1 },&#10;    translate: { x: -lineX } });&#10;  line.copy({&#10;    scale: 0.4,&#10;    translate: { x: -12, y: 14, z: -28 },&#10;    rotate: { z: -TAU / 16 } });&#10;};&#10;ZdogSpookyHouse.addCarRoad = function (options) {&#10;  var color = ZdogSpookyHouse.color;&#10;  var TAU = Zdog.TAU;&#10;  var roadRadius = 120;&#10;  var roadSegmentCount = 40;&#10;  var roadSegmentZ = 5;&#10;  var roadSegmentX = (roadRadius + roadSegmentZ) * TAU / roadSegmentCount / 2;&#10;  var roadSegmentPath = [&#10;  { x: -roadSegmentX + 1, z: roadSegmentZ },&#10;  { x: roadSegmentX - 1, z: roadSegmentZ },&#10;  { x: roadSegmentX, z: -roadSegmentZ },&#10;  { x: -roadSegmentX, z: -roadSegmentZ }];&#10;  for (var i = 0; i &lt; roadSegmentCount; i++) {&#10;    var roadAngle = i / roadSegmentCount * TAU;&#10;    new Zdog.Shape({&#10;      addTo: options.addTo,&#10;      path: roadSegmentPath,&#10;      translate: {&#10;        x: Math.cos(roadAngle) * roadRadius,&#10;        z: Math.sin(roadAngle) * roadRadius },&#10;      rotate: { y: roadAngle + TAU / 4 },&#10;      fill: true,&#10;      stroke: 2,&#10;      color: color.deep });&#10;  }&#10;  var bottomY = -1;&#10;  var middleY = -2.5;&#10;  var topY = -4.5;&#10;  var outerZ = 2.5;&#10;  var innerZ = 1.5;&#10;  var grillX = -5;&#10;  var hoodX = -4;&#10;  var wipersX = -2;&#10;  var windshieldX = -1;&#10;  var roofX = 2;&#10;  var trunkX = 4;&#10;  var bumperX = 5;&#10;  var driverPoints = {&#10;    grill: new Zdog.Vector({ x: grillX, y: bottomY, z: outerZ }),&#10;    hood: new Zdog.Vector({ x: hoodX, y: middleY, z: outerZ }),&#10;    wipers: new Zdog.Vector({ x: wipersX, y: middleY, z: outerZ }),&#10;    windshield: new Zdog.Vector({ x: windshieldX, y: topY, z: innerZ }),&#10;    roof: new Zdog.Vector({ x: roofX, y: topY, z: innerZ }),&#10;    trunk: new Zdog.Vector({ x: trunkX, y: middleY, z: outerZ }),&#10;    bumper: new Zdog.Vector({ x: bumperX, y: bottomY, z: outerZ }) };&#10;  var passengerPoints = {};&#10;  for (var pointName in driverPoints) {&#10;    var driverPoint = driverPoints[pointName];&#10;    passengerPoints[pointName] = driverPoint.copy().multiply({ z: -1 });&#10;  }&#10;  var carRotor = new Zdog.Anchor({&#10;    addTo: options.addTo });&#10;  var carAnchorY = -6;&#10;  var carAnchor = new Zdog.Group({&#10;    addTo: carRotor,&#10;    translate: { z: roadRadius - 0, y: carAnchorY },&#10;    scale: 1.2,&#10;    updateSort: true });&#10;  var carSide = new Zdog.Shape({&#10;    addTo: carAnchor,&#10;    path: [&#10;    driverPoints.grill, driverPoints.hood, driverPoints.wipers,&#10;    driverPoints.windshield, driverPoints.roof, driverPoints.trunk,&#10;    driverPoints.bumper],&#10;    stroke: 2,&#10;    fill: true,&#10;    color: color.paintjob });&#10;  carSide.copy({&#10;    scale: { z: -1 } });&#10;  function getCarPanel(pointNameA, pointNameB, color) {&#10;    return carSide.copy({&#10;      path: [&#10;      driverPoints[pointNameA], driverPoints[pointNameB],&#10;      passengerPoints[pointNameB], passengerPoints[pointNameA]],&#10;      color: color || carSide.color });&#10;  }&#10;  getCarPanel('grill', 'hood'); // front grill&#10;  getCarPanel('hood', 'wipers'); // hood&#10;  getCarPanel('wipers', 'windshield', color.medium); // windshield&#10;  getCarPanel('windshield', 'roof'); // roof&#10;  getCarPanel('roof', 'trunk', color.medium); // back window&#10;  getCarPanel('trunk', 'bumper'); // back bumper&#10;  var tireTranslate = new Zdog.Vector({ x: -3.5, z: outerZ, y: bottomY });&#10;  var tire = new Zdog.Ellipse({&#10;    addTo: carAnchor,&#10;    diameter: 1.8,&#10;    translate: tireTranslate,&#10;    stroke: 2,&#10;    fill: true,&#10;    color: color.paintjob });&#10;  tire.copy({&#10;    translate: tireTranslate.copy().multiply({ x: -1 }) });&#10;  tire.copy({&#10;    translate: tireTranslate.copy().multiply({ z: -1 }) });&#10;  tire.copy({&#10;    translate: tireTranslate.copy().multiply({ x: -1, z: -1 }) });&#10;  function animate(progress) {&#10;    carRotor.rotate.y = Zdog.easeInOut(progress / 4 % 1) * TAU + TAU * 3 / 8;&#10;    carAnchor.rotate.x = Math.sin(progress * TAU * 2) * 0.1;&#10;    carAnchor.translate.y = Math.sin(progress * TAU * 1.5) * 2 + carAnchorY;&#10;  }&#10;  return {&#10;    animate: animate };&#10;};&#10;ZdogSpookyHouse.addCats = function (options) {&#10;  var TAU = Zdog.TAU;&#10;  var color = ZdogSpookyHouse.color;&#10;  var catScale = 1.1;&#10;  var cat = new Zdog.Anchor({&#10;    addTo: options.addTo,&#10;    translate: { z: -22, x: -28, y: -2 },&#10;    scale: catScale,&#10;    rotate: { y: TAU / 8 } });&#10;  new Zdog.Cone({&#10;    addTo: cat,&#10;    diameter: 1,&#10;    length: 3,&#10;    rotate: { x: TAU / 4 },&#10;    stroke: 4 * catScale,&#10;    color: color.deep });&#10;  var catHead = new Zdog.Shape({&#10;    addTo: cat,&#10;    translate: { y: -4 },&#10;    stroke: 5 * catScale,&#10;    color: color.deep });&#10;  var catEye = new Zdog.Shape({&#10;    addTo: catHead,&#10;    translate: { x: -1, z: 1 },&#10;    stroke: 0.9 * catScale,&#10;    color: color.highlight });&#10;  catEye.copy({&#10;    translate: { x: 1, z: 1 } });&#10;  var catEarPointA = { x: -1, y: 1 };&#10;  var catEarPointB = { x: -1, y: -1 };&#10;  var catEarPointC = { x: 1, y: 1 };&#10;  var catEarPointD = { x: 1, y: 1, z: -1 };&#10;  var catEar = new Zdog.Anchor({&#10;    addTo: catHead,&#10;    scale: new Zdog.Vector({ x: 1, y: 1, z: 1.25 }) });&#10;  var catEarPanel = new Zdog.Shape({&#10;    addTo: catEar,&#10;    path: [catEarPointA, catEarPointB, catEarPointD],&#10;    translate: { x: -0.96, y: -1.5, z: 0 },&#10;    stroke: 0.6 * catScale,&#10;    fill: true,&#10;    color: color.deep });&#10;  catEarPanel.copy({&#10;    path: [catEarPointB, catEarPointC, catEarPointD] });&#10;  catEar.copyGraph({&#10;    scale: catEar.scale.copy().multiply({ x: -1 }) });&#10;  new Zdog.Shape({&#10;    addTo: cat,&#10;    path: [&#10;    {},&#10;    { bezier: [&#10;      { x: 4, y: 0, z: -4 },&#10;      { x: 0, y: -3, z: 0 },&#10;      { x: 3, y: -5, z: -1 }] }],&#10;    closed: false,&#10;    translate: { z: -1 },&#10;    stroke: 0 * catScale,&#10;    color: color.deep });&#10;  cat.copyGraph({&#10;    translate: { z: -6, x: -42, y: -15 },&#10;    scale: catScale,&#10;    rotate: { y: TAU / 4 } });&#10;  cat.copyGraph({&#10;    translate: { z: -30, x: -30, y: -2 },&#10;    scale: catScale,&#10;    rotate: { y: TAU / 4 } });&#10;};&#10;ZdogSpookyHouse.addFogMonster = function (options) {&#10;  var TAU = Zdog.TAU;&#10;  var color = ZdogSpookyHouse.color;&#10;  var radius = 54;&#10;  var rotor = new Zdog.Anchor(options);&#10;  var segmentCount = 74;&#10;  var trailEndAngle = TAU * 4 / 8;&#10;  var segments = [];&#10;  for (var i = 0; i &lt; segmentCount; i++) {&#10;    var alpha = i / segmentCount;&#10;    var angle = alpha * trailEndAngle;&#10;    var segment = new Zdog.Shape({&#10;      addTo: rotor,&#10;      path: [{}, { x: radius * TAU / segmentCount * 0.8 }],&#10;      stroke: 22 + 8 * -Math.cos(TAU / 8 * (3 + alpha * 5)),&#10;      translate: {&#10;        x: Math.sin(angle) * radius,&#10;        z: Math.cos(angle) * radius,&#10;        y: Math.sin(angle * 4) * 6 },&#10;      rotate: { y: alpha * -trailEndAngle },&#10;      color: color.fog });&#10;    segments.push(segment);&#10;  }&#10;  var monsterEye = new Zdog.Shape({&#10;    addTo: segments[0],&#10;    translate: { x: -10, z: 8 },&#10;    color: color.deep,&#10;    stroke: 3.5 });&#10;  monsterEye.copy({&#10;    translate: { x: -10, z: -8 } });&#10;  new Zdog.Ellipse({&#10;    addTo: segments[0],&#10;    translate: { x: -10, y: 4 },&#10;    quarters: 2,&#10;    rotate: { z: TAU / 4, y: TAU / 4 },&#10;    closed: true,&#10;    diameter: 8,&#10;    stroke: false,&#10;    fill: true,&#10;    color: color.deep });&#10;  function animate(progress) {&#10;    var rotorRY = rotor.rotate.y = progress * TAU / 6;&#10;    segments.forEach(function (segment, i) {&#10;      var alpha = i / segmentCount;&#10;      var angle = alpha * trailEndAngle;&#10;      segment.translate.y = Math.sin((angle - rotorRY) * 4) * 6;&#10;    });&#10;  }&#10;  return {&#10;    animate: animate };&#10;};&#10;ZdogSpookyHouse.addHouse = function (options) {&#10;  var TAU = Zdog.TAU;&#10;  var color = ZdogSpookyHouse.color;&#10;  var eastWestWallRects = [];&#10;  var southWallRects = [];&#10;  function addEastWestWallRect(rect) {&#10;    eastWestWallRects.push(rect);&#10;  }&#10;  function addSouthWallRect(rect) {&#10;    southWallRects.push(rect);&#10;  }&#10;  var house = new Zdog.Anchor({&#10;    addTo: options.addTo,&#10;    translate: { x: 0, y: -8, z: -6 } });&#10;  var wallPanelOptions = {&#10;    addTo: house,&#10;    width: 12,&#10;    height: 12,&#10;    stroke: options.stroke,&#10;    fill: true,&#10;    backface: color.deep };&#10;  var southWallPanelOptions = Object.assign({&#10;    color: color.light },&#10;  wallPanelOptions);&#10;  var frontDoorGroup = new Zdog.Group({&#10;    addTo: house,&#10;    translate: { z: 24 } });&#10;  addSouthWallRect(new Zdog.Rect(Object.assign({}, southWallPanelOptions, {&#10;    addTo: frontDoorGroup })));&#10;  new Zdog.Rect({&#10;    addTo: frontDoorGroup,&#10;    width: 6,&#10;    height: 8,&#10;    translate: { y: 2 },&#10;    color: color.dark,&#10;    fill: true,&#10;    stroke: false });&#10;  ZdogSpookyHouse.getWallPanel({ // south wall, 2nd floor&#10;    wall: Object.assign({&#10;      translate: { y: -12, z: 24 } },&#10;    southWallPanelOptions),&#10;    pane: color.medium,&#10;    wallRectCallback: addSouthWallRect });&#10;  ZdogSpookyHouse.getWallPanel({ // 3rd floor, window on&#10;    wall: Object.assign({&#10;      translate: { y: -24, z: 24 } },&#10;    southWallPanelOptions),&#10;    pane: color.highlight,&#10;    wallRectCallback: addSouthWallRect });&#10;  var eastWallPanelOptions = Object.assign({&#10;    color: color.medium,&#10;    rotate: { y: -TAU / 4 } },&#10;  wallPanelOptions);&#10;  var westWallPanelOptions = Object.assign({&#10;    color: color.medium,&#10;    rotate: { y: TAU / 4 } },&#10;  wallPanelOptions);&#10;  var eastWallSquare = new Zdog.Rect(Object.assign({}, eastWallPanelOptions, {&#10;    translate: { x: 6, z: 18 } }));&#10;  addEastWestWallRect(eastWallSquare);&#10;  addEastWestWallRect(eastWallSquare.copy({ // 2nd floor&#10;    translate: { x: 6, y: -12, z: 18 } }));&#10;  addEastWestWallRect(eastWallSquare.copy({ // 3rd floor&#10;    translate: { x: 6, y: -24, z: 18 } }));&#10;  var westWallSquare = eastWallSquare.copy({&#10;    translate: { x: -6, z: 18 },&#10;    rotate: { y: TAU / 4 } });&#10;  addEastWestWallRect(westWallSquare);&#10;  addEastWestWallRect(westWallSquare.copy({ // 2nd floor&#10;    translate: { x: -6, y: -12, z: 18 } }));&#10;  addEastWestWallRect(westWallSquare.copy({ // 3rd floor&#10;    translate: { x: -6, y: -24, z: 18 } }));&#10;  var entranceRoof = new Zdog.Anchor({&#10;    addTo: house,&#10;    translate: { y: -36, z: 18 } });&#10;  var entranceRoofPanel = new Zdog.Shape({&#10;    addTo: entranceRoof,&#10;    path: [&#10;    { x: -8, y: 6 },&#10;    { x: 8, y: 6 },&#10;    { x: 4, y: -6, z: -4 },&#10;    { x: -4, y: -6, z: -4 }],&#10;    translate: { z: 8 },&#10;    stroke: options.stroke,&#10;    fill: true,&#10;    color: color.dark });&#10;  entranceRoofPanel.copy({&#10;    rotate: { y: TAU / 4 },&#10;    translate: { x: -8 } });&#10;  entranceRoofPanel.copy({&#10;    rotate: { y: TAU / 2 },&#10;    translate: { z: -8 },&#10;    color: color.deep });&#10;  entranceRoofPanel.copy({&#10;    rotate: { y: TAU * 3 / 4 },&#10;    translate: { x: 8 },&#10;    color: color.deep });&#10;  new Zdog.Rect({&#10;    addTo: entranceRoof,&#10;    width: 8,&#10;    height: 8,&#10;    rotate: { x: -TAU / 4 },&#10;    translate: { y: -6 },&#10;    stroke: options.stroke,&#10;    fill: true,&#10;    color: color.dark });&#10;  ZdogSpookyHouse.getWallPanel({ // 1st floor&#10;    wall: Object.assign({}, southWallPanelOptions, {&#10;      translate: { x: 12, z: 12 } }),&#10;    pane: color.medium,&#10;    wallRectCallback: addSouthWallRect });&#10;  ZdogSpookyHouse.getWallPanel({ // 2nd floor&#10;    wall: Object.assign({}, southWallPanelOptions, {&#10;      translate: { x: 12, y: -12, z: 12 } }),&#10;    pane: color.medium,&#10;    wallRectCallback: addSouthWallRect });&#10;  ZdogSpookyHouse.getWallPanel({ // 1st floor&#10;    wall: Object.assign({}, southWallPanelOptions, {&#10;      translate: { x: -12, z: 12 } }),&#10;    pane: color.medium,&#10;    wallRectCallback: addSouthWallRect });&#10;  ZdogSpookyHouse.getWallPanel({ // 2nd floor&#10;    wall: Object.assign({}, southWallPanelOptions, {&#10;      translate: { x: -12, y: -12, z: 12 } }),&#10;    pane: color.medium,&#10;    wallRectCallback: addSouthWallRect });&#10;  ZdogSpookyHouse.getWallPanel({ // 1st floor&#10;    wall: Object.assign({}, eastWallPanelOptions, {&#10;      translate: { x: 18, z: 6 } }),&#10;    pane: color.dark,&#10;    wallRectCallback: addEastWestWallRect });&#10;  ZdogSpookyHouse.getWallPanel({ // 2nd floor&#10;    wall: Object.assign({}, eastWallPanelOptions, {&#10;      translate: { x: 18, y: -12, z: 6 } }),&#10;    pane: color.dark,&#10;    wallRectCallback: addEastWestWallRect });&#10;  ZdogSpookyHouse.getWallPanel({ // 1st floor&#10;    wall: Object.assign({}, eastWallPanelOptions, {&#10;      translate: { x: 18, z: -6 } }),&#10;    pane: color.dark,&#10;    wallRectCallback: addEastWestWallRect });&#10;  addEastWestWallRect(eastWallSquare.copy({ // 2nd floor, half wall&#10;    width: 6,&#10;    translate: { x: 18, y: -12, z: -3 } }));&#10;  var northWallSquare = eastWallSquare.copy({&#10;    width: 6,&#10;    translate: { x: 15, z: -12 },&#10;    rotate: { y: TAU / 2 },&#10;    color: color.dark });&#10;  var northBigWindowWall = new Zdog.Shape({&#10;    addTo: house,&#10;    path: [&#10;    { x: -4, y: 12 },&#10;    { x: -4, y: -6 },&#10;    { arc: [&#10;      { x: -4, y: -10 },&#10;      { x: 0, y: -10 }] },&#10;    { arc: [&#10;      { x: 4, y: -10 },&#10;      { x: 4, y: -6 }] },&#10;    { x: 4, y: 12 },&#10;    { x: 5, y: 12 },&#10;    { x: 5, y: -12 },&#10;    { x: -5, y: -12 },&#10;    { x: -5, y: 12 }],&#10;    translate: { x: 7, y: -6, z: -12 },&#10;    stroke: options.stroke,&#10;    color: color.dark,&#10;    fill: true });&#10;  new Zdog.Shape({&#10;    addTo: northBigWindowWall,&#10;    path: [&#10;    { move: { x: -4, y: -6 } },&#10;    { line: { x: 4, y: -6 } },&#10;    { move: { x: -4, y: 0 } },&#10;    { line: { x: 4, y: 0 } },&#10;    { move: { x: -4, y: 6 } },&#10;    { line: { x: 4, y: 6 } },&#10;    { move: { x: 0, y: -11 } },&#10;    { line: { x: 0, y: 12 } }],&#10;    closed: false,&#10;    stroke: 0.2,&#10;    color: color.dark });&#10;  northBigWindowWall.copyGraph({&#10;    translate: { x: -3, y: -6, z: -12 } });&#10;  northBigWindowWall.copyGraph({&#10;    translate: { x: -13, y: -6, z: -12 } });&#10;  northWallSquare.copy({ // bottom&#10;    width: 36,&#10;    height: 3,&#10;    translate: { x: 0, y: 4.5, z: -12 },&#10;    color: color.dark });&#10;  ZdogSpookyHouse.getWallPanel({ // 1st floor north west&#10;    wall: Object.assign({}, westWallPanelOptions, {&#10;      translate: { x: -18, z: -6 } }),&#10;    pane: color.dark,&#10;    wallRectCallback: addEastWestWallRect });&#10;  ZdogSpookyHouse.getWallPanel({ // 2nd floor, north west&#10;    wall: Object.assign({}, westWallPanelOptions, {&#10;      translate: { x: -18, y: -12, z: -6 } }),&#10;    wallRectCallback: addEastWestWallRect });&#10;  ZdogSpookyHouse.getWallPanel({ // 1st floor, south west&#10;    wall: Object.assign({}, westWallPanelOptions, {&#10;      translate: { x: -18, z: 6 } }),&#10;    pane: color.dark,&#10;    wallRectCallback: addEastWestWallRect });&#10;  ZdogSpookyHouse.getWallPanel({ // 2nd story west hanger&#10;    wall: Object.assign({}, westWallPanelOptions, {&#10;      translate: { x: -24, y: -12, z: 6 } }),&#10;    pane: color.highlight,&#10;    wallRectCallback: addEastWestWallRect });&#10;  new Zdog.Rect({&#10;    addTo: house,&#10;    width: 12,&#10;    height: 6,&#10;    translate: { x: -21, y: -6, z: 6 },&#10;    stroke: options.stroke,&#10;    fill: true,&#10;    color: color.deep,&#10;    rotate: { x: TAU / 4, z: TAU / 4 } });&#10;  var southWallSquare = northWallSquare.copy({&#10;    width: 6,&#10;    rotate: null,&#10;    translate: { x: -21, y: -12, z: 12 },&#10;    color: color.light });&#10;&#10;  addSouthWallRect(southWallSquare);&#10;  northWallSquare.copy({&#10;    width: 6,&#10;    translate: { x: -21, y: -12 } });&#10;  northWallSquare.copy({&#10;    width: 12,&#10;    height: 18,&#10;    translate: { x: -6, y: -27, z: -18 } });&#10;  new Zdog.Rect({&#10;    addTo: house,&#10;    width: 12,&#10;    height: 6,&#10;    translate: { x: 0, y: -33, z: -12 },&#10;    rotate: { y: TAU / 4 },&#10;    stroke: options.stroke,&#10;    fill: true,&#10;    color: color.medium });&#10;  new Zdog.Shape({&#10;    addTo: house,&#10;    path: [&#10;    { z: 2, y: -3 },&#10;    { z: -6, y: -3 },&#10;    { z: -6, y: 9 },&#10;    { z: -2, y: 9 }],&#10;    translate: { y: -27, z: -12 },&#10;    stroke: options.stroke,&#10;    fill: true,&#10;    color: color.medium });&#10;  westWallSquare.copy({&#10;    height: 18,&#10;    translate: { x: -12, y: -27, z: -12 } });&#10;  southWallSquare.copy({&#10;    height: 6,&#10;    width: 12,&#10;    translate: { x: -6, y: -33, z: -6 } });&#10;  new Zdog.Rect({&#10;    addTo: house,&#10;    width: 12,&#10;    height: 6,&#10;    translate: { x: -6, y: -18, z: -15 },&#10;    rotate: { x: TAU / 4 },&#10;    stroke: options.stroke,&#10;    fill: true,&#10;    color: color.deep });&#10;  entranceRoof.copyGraph({&#10;    translate: { x: -6, y: -42, z: -12 } });&#10;  var northEastTowerAnchor = new Zdog.Anchor({&#10;    addTo: house,&#10;    translate: { x: 18, y: -18, z: -12 } });&#10;  var northEastTowerGroup = new Zdog.Group({&#10;    addTo: northEastTowerAnchor });&#10;  new Zdog.Cylinder({&#10;    addTo: northEastTowerGroup,&#10;    diameter: 12,&#10;    length: 24,&#10;    color: color.medium,&#10;    backface: color.deep,&#10;    rotate: { x: TAU / 4 },&#10;    stroke: false });&#10;  new Zdog.Cone({&#10;    addTo: northEastTowerAnchor,&#10;    diameter: 16,&#10;    length: 16,&#10;    translate: { y: -12 },&#10;    rotate: { x: TAU / 4 },&#10;    color: color.deep,&#10;    stroke: false });&#10;  var towerPane = new Zdog.Rect({&#10;    addTo: northEastTowerGroup,&#10;    width: 2,&#10;    height: 6,&#10;    translate: { x: 5, y: -6 },&#10;    rotate: { y: -TAU / 4 },&#10;    fill: true,&#10;    stroke: false,&#10;    color: color.dark,&#10;    backface: false });&#10;  towerPane.copy({&#10;    translate: { y: 6, z: -5 },&#10;    rotate: { y: TAU / 2 } });&#10;  northEastTowerAnchor.copyGraph({&#10;    translate: { x: -18, y: -30, z: -6 },&#10;    rotate: { y: -TAU / 4 },&#10;    scale: { x: -1 } });&#10;  var roofCornerPanel = new Zdog.Shape({&#10;    addTo: house,&#10;    path: [&#10;    { x: -6, y: 6 },&#10;    { x: 8, y: 6 },&#10;    { x: 4, y: -6, z: -4 },&#10;    { x: -6, y: -6, z: -4 }],&#10;    translate: { x: 12, y: -24, z: 14 },&#10;    stroke: options.stroke,&#10;    fill: true,&#10;    color: color.dark });&#10;  roofCornerPanel.copy({&#10;    scale: { x: -1 },&#10;    translate: { x: 20, y: -24, z: 6 },&#10;    rotate: { y: -TAU / 4 },&#10;    color: color.deep });&#10;  roofCornerPanel.copy({&#10;    scale: { x: -1 },&#10;    translate: { x: -18, y: -24, z: 14 } });&#10;  roofCornerPanel.copy({&#10;    translate: { x: -26, y: -24, z: 6 },&#10;    rotate: { y: TAU / 4 } });&#10;  var roofHalfPanel = new Zdog.Shape({&#10;    addTo: house,&#10;    path: [&#10;    { x: -3, y: 6 },&#10;    { x: 3, y: 6 },&#10;    { x: 3, y: -6, z: -4 },&#10;    { x: -3, y: -6, z: -4 }],&#10;    translate: { x: -9, y: -24, z: 14 },&#10;    stroke: options.stroke,&#10;    fill: true,&#10;    color: color.dark });&#10;  roofHalfPanel.copy({&#10;    rotate: { y: -TAU / 4 },&#10;    translate: { x: 20, y: -24, z: -3 },&#10;    color: color.deep });&#10;  roofHalfPanel.copy({&#10;    rotate: { y: -TAU / 2 },&#10;    translate: { x: 9, y: -24, z: -14 },&#10;    color: color.deep });&#10;  roofHalfPanel.copy({&#10;    rotate: { y: -TAU / 2 },&#10;    translate: { x: 3, y: -24, z: -14 },&#10;    color: color.deep });&#10;  var roofTop = new Zdog.Anchor({&#10;    addTo: house,&#10;    translate: { y: -30 } });&#10;  var roofTopPanel = new Zdog.Rect({&#10;    addTo: roofTop,&#10;    width: 12,&#10;    height: 10,&#10;    rotate: { x: -TAU / 4 },&#10;    translate: { z: 5 },&#10;    stroke: options.stroke,&#10;    fill: true,&#10;    color: color.dark });&#10;  roofTopPanel.copy({&#10;    width: 10,&#10;    translate: { x: 11, z: 5 } });&#10;  roofTopPanel.copy({&#10;    width: 10,&#10;    translate: { x: 11, z: -5 } });&#10;  roofTopPanel.copy({&#10;    translate: { x: -12, z: 5 } });&#10;  roofTopPanel.copy({&#10;    width: 4,&#10;    translate: { x: -20, z: 5 } });&#10;  roofTopPanel.copy({&#10;    width: 6,&#10;    translate: { x: 3, z: -5 } });&#10;  roofTopPanel.copy({&#10;    height: 6,&#10;    translate: { x: -6, z: -3 } });&#10;  var porchFrameAnchor = new Zdog.Anchor({&#10;    addTo: house,&#10;    translate: { y: 2 } });&#10;  var porchFramePanel = new Zdog.Anchor({&#10;    addTo: porchFrameAnchor,&#10;    translate: { x: 9, z: 30 } });&#10;  new Zdog.Shape({&#10;    addTo: porchFramePanel,&#10;    path: [&#10;    { x: -3, y: 0 },&#10;    { arc: [&#10;      { x: -3, y: -3 },&#10;      { x: 0, y: -3 }] },&#10;    { arc: [&#10;      { x: 3, y: -3 },&#10;      { x: 3, y: 0 }] },&#10;    { x: 3, y: -3 },&#10;    { x: -3, y: -3 }],&#10;    translate: { y: -3 },&#10;    fill: true,&#10;    stroke: 1,&#10;    color: color.deep });&#10;  var porchFrameRect = new Zdog.Rect({&#10;    addTo: porchFramePanel,&#10;    width: 6,&#10;    height: 10,&#10;    translate: { y: -1 },&#10;    stroke: 1,&#10;    color: color.deep });&#10;  porchFrameRect.copy({&#10;    height: 4,&#10;    translate: { y: 2 } });&#10;  porchFrameRect.copy({&#10;    width: 2,&#10;    height: 4,&#10;    translate: { y: 2 } });&#10;  porchFramePanel.copyGraph({&#10;    translate: { x: 15, z: 30 } });&#10;  porchFramePanel.copyGraph({&#10;    translate: { x: 21, z: 30 } });&#10;  porchFramePanel.copyGraph({&#10;    translate: { x: -9, z: 30 } });&#10;  var eastPorchFramePanel = porchFramePanel.copyGraph({&#10;    translate: { x: 24, z: 27 },&#10;    rotate: { y: -TAU / 4 } });&#10;  eastPorchFramePanel.copyGraph({&#10;    translate: { x: 24, z: 21 } });&#10;  eastPorchFramePanel.copyGraph({&#10;    translate: { x: 24, z: 15 } });&#10;  eastPorchFramePanel.copyGraph({&#10;    translate: { x: 24, z: 9 } });&#10;  eastPorchFramePanel.copyGraph({&#10;    translate: { x: 24, z: 3 } });&#10;  var westPorchFramePanel = porchFramePanel.copyGraph({&#10;    translate: { x: -12, z: 27 },&#10;    rotate: { y: TAU / 4 } });&#10;  westPorchFramePanel.copyGraph({&#10;    translate: { x: -12, z: 21 } });&#10;  var southPorchRoof = new Zdog.Shape({&#10;    addTo: house,&#10;    path: [&#10;    { x: -12, y: 2 },&#10;    { x: 6, y: 2 },&#10;    { x: 6, y: 0, z: -6 },&#10;    { x: -6, y: 0, z: -6 }],&#10;    translate: { y: -6, z: 30 },&#10;    fill: true,&#10;    stroke: options.stroke,&#10;    color: color.dark });&#10;  southPorchRoof.copy({&#10;    path: [&#10;    { x: 24, y: 2 },&#10;    { x: 6, y: 2 },&#10;    { x: 6, y: 0, z: -6 },&#10;    { x: 18, y: 0, z: -6 }] });&#10;  southPorchRoof.copy({&#10;    path: [&#10;    { x: 18, y: 0, z: -6 },&#10;    { x: 24, y: 2 },&#10;    { x: 24, y: 2, z: -18 },&#10;    { x: 18, y: 0, z: -18 }],&#10;    color: color.deep });&#10;  southPorchRoof.copy({&#10;    path: [&#10;    { x: 24, y: 2, z: -18 },&#10;    { x: 18, y: 0, z: -18 },&#10;    { x: 18, y: 0, z: -30 },&#10;    { x: 24, y: 2, z: -30 }],&#10;    color: color.deep });&#10;  southPorchRoof.copy({&#10;    path: [&#10;    { x: -6, y: 0, z: -6 },&#10;    { x: -12, y: 2 },&#10;    { x: -12, y: 2, z: -12 },&#10;    { x: -6, y: 0, z: -12 }] });&#10;  new Zdog.Rect({&#10;    addTo: house,&#10;    width: 12,&#10;    height: 12,&#10;    translate: { x: 12, y: -6, z: 18 },&#10;    rotate: { x: -TAU / 4 },&#10;    fill: true,&#10;    stroke: options.stroke,&#10;    color: color.dark });&#10;  function animate(progress, rotation) {&#10;    var degrees = Math.abs(Math.round(rotation.y / TAU * 360) - 180);&#10;    var isLightOn = degrees &lt;= 50 || degrees &gt;= 60 &amp;&amp; degrees &lt;= 65;&#10;    var eastWestBackface = isLightOn ? color.highlight : color.deep;&#10;    var southBackface = isLightOn ? true : color.deep;&#10;&#10;    eastWestWallRects.forEach(function (rect) {&#10;      rect.backface = eastWestBackface;&#10;    });&#10;    southWallRects.forEach(function (rect) {&#10;      rect.backface = southBackface;&#10;    });&#10;  }&#10;  return {&#10;    shape: house,&#10;    animate: animate };&#10;};&#10;ZdogSpookyHouse.addInteriorScene = function (options) {&#10;  var color = ZdogSpookyHouse.color;&#10;  var TAU = Zdog.TAU;&#10;  var downLinePath = [{ y: 0 }, { y: 1 }];&#10;  var interiorScene = new Zdog.Anchor({&#10;    addTo: options.addTo,&#10;    translate: options.translate,&#10;    rotate: options.rotate });&#10;  var furnitureColor = color.medium;&#10;  var tableWidth = 9;&#10;  var tableDepth = 4;&#10;  var tableStroke = 1.5;&#10;  var tableAnchor = new Zdog.Anchor({&#10;    addTo: interiorScene,&#10;    rotate: { z: 0.1 } });&#10;  new Zdog.Rect({&#10;    addTo: tableAnchor,&#10;    width: tableWidth,&#10;    height: tableDepth,&#10;    rotate: { x: TAU / 4 },&#10;    fill: true,&#10;    color: furnitureColor,&#10;    stroke: tableStroke });&#10;  var tableLeg = new Zdog.Shape({&#10;    addTo: tableAnchor,&#10;    path: downLinePath,&#10;    scale: 3,&#10;    translate: { x: -tableWidth / 2, z: -tableDepth / 2 },&#10;    color: furnitureColor,&#10;    stroke: tableStroke });&#10;  tableLeg.copy({&#10;    translate: { x: tableWidth / 2, z: -tableDepth / 2 } });&#10;  tableLeg.copy({&#10;    translate: { x: tableWidth / 2, z: tableDepth / 2 } });&#10;  tableLeg.copy({&#10;    translate: { x: -tableWidth / 2, z: tableDepth / 2 } });&#10;  var monitorWidth = 10;&#10;  var monitorHeight = 5;&#10;&#10;  var monitorAnchor = new Zdog.Anchor({&#10;    addTo: tableAnchor,&#10;    translate: { y: -8 } });&#10;  var screenGroup = new Zdog.Group({&#10;    addTo: monitorAnchor,&#10;    rotate: { y: TAU / 2 } });&#10;  var screenBevel = new Zdog.Rect({&#10;    addTo: screenGroup,&#10;    width: monitorWidth,&#10;    height: monitorHeight,&#10;    color: color.deep,&#10;    fill: true,&#10;    stroke: 1.5 });&#10;  new Zdog.Rect({&#10;    addTo: screenGroup,&#10;    width: monitorWidth - 0.5,&#10;    height: monitorHeight - 0.5,&#10;    // translate: { z: 0.5 },&#10;    color: color.highlight,&#10;    backface: false,&#10;    fill: true,&#10;    stroke: false });&#10;  screenBevel.copy({&#10;    addTo: monitorAnchor,&#10;    width: 5,&#10;    height: 2,&#10;    rotate: { x: TAU / 4 },&#10;    translate: { y: 5 } });&#10;  new Zdog.Shape({&#10;    addTo: monitorAnchor,&#10;    path: downLinePath,&#10;    scale: 2,&#10;    translate: { y: 3.1 },&#10;    stroke: 1.5,&#10;    color: color.deep });&#10;  var chairAnchor = new Zdog.Anchor({&#10;    addTo: interiorScene,&#10;    translate: { z: -15 },&#10;    rotate: { z: -0.1 } });&#10;  new Zdog.Rect({&#10;    addTo: chairAnchor,&#10;    width: 3,&#10;    height: 3,&#10;    rotate: { x: TAU / 4 },&#10;    fill: true,&#10;    stroke: tableStroke,&#10;    color: furnitureColor });&#10;  new Zdog.Shape({&#10;    addTo: chairAnchor,&#10;    path: downLinePath,&#10;    scale: 3,&#10;    stroke: tableStroke,&#10;    color: furnitureColor });&#10;  var chairLeg = new Zdog.Shape({&#10;    addTo: chairAnchor,&#10;    path: [{}, { z: -2.5, y: 0.5 }],&#10;    translate: { y: 3 },&#10;    stroke: 1,&#10;    color: furnitureColor });&#10;  chairLeg.copy({ rotate: { y: TAU / 5 * 1 } });&#10;  chairLeg.copy({ rotate: { y: TAU / 5 * 2 } });&#10;  chairLeg.copy({ rotate: { y: TAU / 5 * 3 } });&#10;  chairLeg.copy({ rotate: { y: TAU / 5 * 4 } });&#10;  new Zdog.Rect({&#10;    addTo: chairAnchor,&#10;    width: 3,&#10;    height: 4,&#10;    translate: { z: -2.5, y: -2 },&#10;    rotate: { x: 0.2 },&#10;    stroke: tableStroke,&#10;    color: furnitureColor,&#10;    fill: true });&#10;  var figureColor = color.deep;&#10;  var figureStroke = 1.5;&#10;  var waistX = 1;&#10;  var shoulderX = 1.5;&#10;  var shoulderY = -3;&#10;  var figureY = -6;&#10;  var figure = new Zdog.Anchor({&#10;    addTo: interiorScene,&#10;    translate: { z: -13, y: figureY },&#10;    scale: 0.6 });&#10;  var torso = new Zdog.Shape({&#10;    addTo: figure,&#10;    path: [&#10;    { x: -waistX },&#10;    { x: -shoulderX, y: shoulderY },&#10;    { x: shoulderX, y: shoulderY },&#10;    { x: waistX }],&#10;    rotate: { x: 0.4 },&#10;    stroke: figureStroke,&#10;    color: figureColor,&#10;    fill: true });&#10;  new Zdog.Shape({&#10;    addTo: torso,&#10;    path: downLinePath,&#10;    scale: -1,&#10;    translate: { y: shoulderY - 2.5 },&#10;    stroke: figureStroke + 1,&#10;    color: figureColor });&#10;  var arm = new Zdog.Shape({&#10;    addTo: torso,&#10;    path: [&#10;    {},&#10;    { y: 3 },&#10;    { z: 2, y: 4 }],&#10;    translate: { x: -shoulderX, y: shoulderY },&#10;    rotate: { x: 1, z: 0.5 },&#10;    scale: 1.25,&#10;    closed: false,&#10;    stroke: figureStroke,&#10;    color: figureColor });&#10;  arm.copy({&#10;    translate: { x: shoulderX, y: shoulderY },&#10;    rotate: { z: -1 } });&#10;  var bum = new Zdog.Shape({&#10;    addTo: figure,&#10;    path: [{ x: -waistX }, { x: waistX }],&#10;    translate: { y: 2, z: 0.5 },&#10;    stroke: figureStroke + 0.5,&#10;    color: figureColor });&#10;  var leg = arm.copy({&#10;    addTo: bum,&#10;    scale: { x: 1.75, y: 1.75, z: -1.75 },&#10;    translate: { x: -waistX - 0.5 },&#10;    rotate: { x: 1.8, z: 0.1 } });&#10;  leg.copy({&#10;    translate: { x: waistX + 0.5 },&#10;    rotate: { x: 1, z: -0.2 } });&#10;  function animate(progress) {&#10;    tableAnchor.translate.y = Math.sin(progress * 6) * -1;&#10;    chairAnchor.translate.y = Math.sin(progress * 7) * 2;&#10;    figure.translate.y = Math.sin(progress * 8) * 2 + figureY;&#10;  }&#10;&#10;  return {&#10;    animate: animate };&#10;&#10;&#10;};&#10;ZdogSpookyHouse.getConeTree = function (options) {&#10;  Zdog.extend(options, {&#10;    rotate: { x: Zdog.TAU / 4 },&#10;    stroke: false,&#10;    color: ZdogSpookyHouse.color.deep });&#10;  var treeCone = new Zdog.Cone(options);&#10;  treeCone.copy({&#10;    addTo: treeCone,&#10;    rotate: null,&#10;    translate: { z: Math.round(options.length / 2) } });&#10;  return treeCone;&#10;};&#10;ZdogSpookyHouse.getGraveIsland = function (options) {&#10;  var TAU = Zdog.TAU;&#10;  var color = ZdogSpookyHouse.color;&#10;  var island = new Zdog.Anchor({&#10;    addTo: options.addTo,&#10;    translate: options.translate });&#10;  var size = 9;&#10;  ZdogSpookyHouse.getPyramid({&#10;    addTo: island,&#10;    scale: { x: size, y: -size, z: size },&#10;    color: color.deep,&#10;    snub: options.snub });&#10;  new Zdog.Rect({&#10;    width: size * 2,&#10;    height: size * 2,&#10;    addTo: island,&#10;    rotate: { x: TAU / 4 },&#10;    color: color.dark,&#10;    stroke: 4,&#10;    fill: true });&#10;  var tombstone = new Zdog.Rect({&#10;    addTo: island,&#10;    width: 4,&#10;    height: 4,&#10;    translate: { x: -4, y: -6 },&#10;    rotate: { y: TAU / 4 },&#10;    stroke: 3,&#10;    color: color.medium });&#10;  new Zdog.Ellipse({&#10;    addTo: tombstone,&#10;    diameter: 4,&#10;    translate: { y: -2 },&#10;    stroke: 3,&#10;    color: color.medium });&#10;  return island;&#10;};&#10;(function () {&#10;  var TAU = Zdog.TAU;&#10;  var color = ZdogSpookyHouse.color;&#10;  var branchPath = [&#10;  { move: { x: 0, y: 14 } },&#10;  { line: { x: -12, y: 2 } },&#10;  { move: { x: -4, y: 10 } },&#10;  { line: { x: -10, y: 10 } },&#10;  { move: { x: -8, y: 6 } },&#10;  { line: { x: -8, y: 0 } },&#10;  { line: { x: -12, y: -4 } },&#10;  { move: { x: 0, y: 8 } },&#10;  { line: { x: -4, y: 4 } },&#10;  { move: { x: 0, y: 2 } },&#10;  { line: { x: -10, y: -8 } },&#10;  { move: { x: 0, y: -4 } },&#10;  { line: { x: -4, y: -8 } },&#10;  { line: { x: -4, y: -10 } },&#10;  { move: { x: 0, y: 12 } },&#10;  { line: { x: 6, y: 6 } },&#10;  { line: { x: 10, y: 6 } },&#10;  { move: { x: 2, y: 10 } },&#10;  { line: { x: 8, y: 10 } },&#10;  { move: { x: 0, y: 6 } },&#10;  { line: { x: 12, y: -6 } },&#10;  { move: { x: 8, y: -2 } },&#10;  { line: { x: 8, y: -8 } },&#10;  { move: { x: 4, y: 2 } },&#10;  { line: { x: 12, y: 2 } },&#10;  { move: { x: 0, y: 0 } },&#10;  { line: { x: 4, y: -4 } },&#10;  { move: { x: 0, y: -6 } },&#10;  { line: { x: 4, y: -10 } }];&#10;  ZdogSpookyHouse.getLeafTree = function (options) {&#10;    var trunkY = -options.height;&#10;    Zdog.extend(options, {&#10;      path: [{ y: 0 }, { y: trunkY - 26 }],&#10;      stroke: 0.5,&#10;      color: color.deep });&#10;    var trunk = new Zdog.Shape(options);&#10;    var canopy = new Zdog.Anchor({&#10;      addTo: trunk,&#10;      translate: { y: trunkY - 14 },&#10;      rotate: { y: -TAU / 8 } });&#10;    var branchA = new Zdog.Shape({&#10;      addTo: canopy,&#10;      path: branchPath,&#10;      closed: false,&#10;      stroke: 0.6,&#10;      color: color.deep });&#10;    branchA.copyGraph({&#10;      rotate: { y: TAU / 4 } });&#10;    return trunk;&#10;  };&#10;})();&#10;(function () {&#10;  var TAU = Zdog.TAU;&#10;  var ROOT2 = Math.sqrt(2);&#10;  var pyramidFacePath = [&#10;  { x: -1 },&#10;  { x: 1 },&#10;  { y: -ROOT2 }];&#10;  var snubPyramidFacePath = [&#10;  { x: -1 },&#10;  { x: 1 },&#10;  { x: 0.5, y: -0.5 * ROOT2 },&#10;  { x: -0.5, y: -0.5 * ROOT2 }];&#10;  ZdogSpookyHouse.getPyramid = function (options) {&#10;    var pyramid = new Zdog.Anchor({&#10;      addTo: options.addTo,&#10;      translate: options.translate,&#10;      scale: options.scale,&#10;      rotate: options.rotate });&#10;    var stroke = options.stroke || 4;&#10;    var faceRotor = new Zdog.Anchor({&#10;      addTo: pyramid });&#10;    new Zdog.Shape({&#10;      addTo: faceRotor,&#10;      path: options.snub ? snubPyramidFacePath : pyramidFacePath,&#10;      translate: { z: 1 },&#10;      rotate: { x: TAU / 8 },&#10;      stroke: stroke,&#10;      fill: true,&#10;      color: options.color,&#10;      backface: options.backface !== undefined ? options.backface : true });&#10;    faceRotor.copyGraph({&#10;      rotate: { y: TAU / 4 } });&#10;    faceRotor.copyGraph({&#10;      rotate: { y: TAU / 2 } });&#10;    faceRotor.copyGraph({&#10;      rotate: { y: TAU * 3 / 4 } });&#10;    if (options.snub) {&#10;      new Zdog.Rect({&#10;        addTo: pyramid,&#10;        translate: { y: -0.5 },&#10;        rotate: { x: -TAU / 4 },&#10;        color: options.color,&#10;        stroke: 4,&#10;        fill: true });&#10;    }&#10;    return pyramid;&#10;  };&#10;})();&#10;(function () {&#10;  var wallChildProperties = ['color', 'stroke', 'fill', 'width', 'height',&#10;  'backface'];&#10;  ZdogSpookyHouse.getWallPanel = function (options) {&#10;    var wallPanel;&#10;    if (!options.pane) {&#10;      wallPanel = new Zdog.Rect(options.wall);&#10;      if (options.wallRectCallback) {&#10;        options.wallRectCallback(wallPanel);&#10;      }&#10;    } else {&#10;      wallPanel = getWallPanelGroup(options);&#10;    }&#10;    return wallPanel;&#10;  };&#10;  function getWallPanelGroup(options) {&#10;    var group = new Zdog.Group(options.wall);&#10;    var panelOptions = wallChildProperties.reduce(function (wallOptions, prop) {&#10;      wallOptions[prop] = options.wall[prop];&#10;      return wallOptions;&#10;    }, {});&#10;    panelOptions.addTo = group;&#10;    var wallRect = new Zdog.Rect(panelOptions);&#10;    if (options.wallRectCallback) {&#10;      options.wallRectCallback(wallRect);&#10;    }&#10;    new Zdog.Rect({&#10;      addTo: group,&#10;      width: 8,&#10;      height: 6,&#10;      translate: { y: -1 },&#10;      color: ZdogSpookyHouse.color.dark,&#10;      fill: true,&#10;      stroke: false,&#10;      backface: false });&#10;    new Zdog.Rect({&#10;      addTo: group,&#10;      width: 4,&#10;      height: 6,&#10;      translate: { y: -1 },&#10;      color: options.pane,&#10;      fill: true,&#10;      stroke: false });&#10;    return group;&#10;  }&#10;})();&#10;ZdogSpookyHouse.init = function (canvas) {&#10;  var TAU = Zdog.TAU;&#10;  var color = ZdogSpookyHouse.color;&#10;  //   based on width &amp; ratio of 270px == 1 zoom&#10;  var zoom = Math.floor(canvas.width / 135) / 2;&#10;  var illo = new Zdog.Illustration({&#10;    element: canvas,&#10;    zoom: zoom,&#10;    rotate: { y: TAU / 8 },&#10;    dragRotate: true,&#10;    onDragStart: function () {&#10;      ZdogSpookyHouse.wobbling = false;&#10;    } });&#10;  var scene = new Zdog.Anchor({&#10;    addTo: illo,&#10;    translate: { y: ZdogSpookyHouse.sceneY } });&#10;  var centerIsland = new Zdog.Anchor({&#10;    addTo: scene });&#10;  var centerIslandSize = 72;&#10;  new Zdog.Rect({&#10;    addTo: centerIsland,&#10;    width: centerIslandSize,&#10;    height: centerIslandSize,&#10;    rotate: { x: TAU / 4 },&#10;    color: color.dark,&#10;    stroke: 4,&#10;    fill: true,&#10;    backface: false });&#10;  ZdogSpookyHouse.getPyramid({&#10;    addTo: centerIsland,&#10;    scale: { x: centerIslandSize / 2, y: -52, z: centerIslandSize / 2 },&#10;    translate: { y: 2 },&#10;    color: color.darker });&#10;  ZdogSpookyHouse.getPyramid({ // spike&#10;    addTo: centerIsland,&#10;    scale: { x: 12, y: -28, z: 12 },&#10;    translate: { x: -12, y: 18, z: 8 },&#10;    color: color.darker,&#10;    backface: false });&#10;  ZdogSpookyHouse.getPyramid({ // spike&#10;    addTo: centerIsland,&#10;    scale: { x: 8, y: -28, z: 8 },&#10;    translate: { x: 8, y: 8, z: -22 },&#10;    color: color.darker,&#10;    backface: false });&#10;  ZdogSpookyHouse.getLeafTree({&#10;    addTo: centerIsland,&#10;    height: 3,&#10;    translate: { x: -35, z: 3 } });&#10;  var islandShard = new Zdog.Anchor({&#10;    addTo: centerIsland,&#10;    translate: { x: 20, y: 54, z: -16 },&#10;    scale: { x: 4, y: -8, z: 4 } });&#10;  ZdogSpookyHouse.getPyramid({ // shard top&#10;    addTo: islandShard,&#10;    scale: { y: -1 },&#10;    color: color.deep });&#10;  ZdogSpookyHouse.getPyramid({ // shard bottom&#10;    addTo: islandShard,&#10;    color: color.deep });&#10;  var southIsland = new Zdog.Group({&#10;    addTo: scene,&#10;    translate: { x: 18, z: 80 },&#10;    scale: ZdogSpookyHouse.hillScale,&#10;    updateSort: true });&#10;  var southIslandBigShapeAnchor = new Zdog.Anchor({&#10;    addTo: southIsland,&#10;    scale: { x: 24, y: 32, z: 24 } });&#10;  ZdogSpookyHouse.getPyramid({&#10;    addTo: southIslandBigShapeAnchor,&#10;    color: color.dark });&#10;  ZdogSpookyHouse.getPyramid({&#10;    addTo: southIslandBigShapeAnchor,&#10;    scale: { y: -1 },&#10;    snub: true,&#10;    color: color.deep });&#10;  ZdogSpookyHouse.getPyramid({ // bottom spike&#10;    addTo: southIsland,&#10;    scale: { x: 6, y: -14, z: 6 },&#10;    translate: { x: -8, y: 12, z: 8 },&#10;    color: color.deep });&#10;  ZdogSpookyHouse.getPyramid({ // top spike&#10;    addTo: southIsland,&#10;    scale: { x: 12, y: 46, z: 12 },&#10;    translate: { x: -12, z: -4 },&#10;    color: color.dark });&#10;  ZdogSpookyHouse.getConeTree({&#10;    addTo: southIsland,&#10;    diameter: 8,&#10;    length: 10,&#10;    translate: { x: 2, y: -15, z: 18 } });&#10;  ZdogSpookyHouse.getConeTree({&#10;    addTo: southIsland,&#10;    diameter: 8,&#10;    length: 10,&#10;    translate: { x: 15, y: -8, z: 16 } });&#10;  ZdogSpookyHouse.getConeTree({&#10;    addTo: southIsland,&#10;    diameter: 8,&#10;    length: 10,&#10;    translate: { x: 22, y: -3, z: 5 } });&#10;  var northIslandTopColor = color.dark;&#10;  var northIslandBottomColor = color.deep;&#10;  var northIsland = new Zdog.Group({&#10;    addTo: scene,&#10;    translate: { x: -52, z: -64 },&#10;    scale: ZdogSpookyHouse.hillScale,&#10;    updateSort: true });&#10;  ZdogSpookyHouse.getPyramid({&#10;    addTo: northIsland,&#10;    scale: { x: 26, y: 60, z: 26 },&#10;    color: northIslandTopColor });&#10;  ZdogSpookyHouse.getPyramid({ // top spike&#10;    addTo: northIsland,&#10;    scale: { x: 14, y: 52, z: 14 },&#10;    translate: { x: 12, y: -2, z: -12 },&#10;    color: northIslandTopColor });&#10;  ZdogSpookyHouse.getPyramid({ // bottom&#10;    addTo: northIsland,&#10;    scale: { x: 26, y: -26, z: 26 },&#10;    color: northIslandBottomColor });&#10;  ZdogSpookyHouse.getPyramid({ // bottom spike&#10;    addTo: northIsland,&#10;    scale: { x: 10, y: -20, z: 10 },&#10;    translate: { x: 12, y: 2, z: -12 },&#10;    color: northIslandBottomColor });&#10;  ZdogSpookyHouse.getConeTree({&#10;    addTo: northIsland,&#10;    diameter: 8,&#10;    length: 10,&#10;    translate: { x: 18, y: -26, z: 0 } });&#10;  ZdogSpookyHouse.getConeTree({&#10;    addTo: northIsland,&#10;    diameter: 8,&#10;    length: 10,&#10;    translate: { x: 32, y: -8, z: -4 } });&#10;  ZdogSpookyHouse.getConeTree({&#10;    addTo: northIsland,&#10;    diameter: 8,&#10;    length: 10,&#10;    translate: { x: 10, y: -16, z: 24 } });&#10;  ZdogSpookyHouse.getConeTree({&#10;    addTo: northIsland,&#10;    diameter: 8,&#10;    length: 10,&#10;    translate: { x: 0, y: -28, z: -22 } });&#10;  var eastIsland = new Zdog.Group({&#10;    addTo: scene,&#10;    translate: { x: 76, z: 36 },&#10;    scale: ZdogSpookyHouse.hillScale,&#10;    updateSort: true });&#10;  var eastPyramidSide = 20;&#10;  ZdogSpookyHouse.getPyramid({&#10;    addTo: eastIsland,&#10;    scale: { x: eastPyramidSide, y: 36, z: eastPyramidSide },&#10;    color: color.dark });&#10;  ZdogSpookyHouse.getPyramid({&#10;    addTo: eastIsland,&#10;    scale: { x: eastPyramidSide, y: -24, z: eastPyramidSide },&#10;    color: color.deep,&#10;    snub: true });&#10;  ZdogSpookyHouse.getConeTree({&#10;    addTo: eastIsland,&#10;    diameter: 8,&#10;    length: 10,&#10;    translate: { x: 10, y: -10, z: 18 } });&#10;  ZdogSpookyHouse.getConeTree({&#10;    addTo: eastIsland,&#10;    diameter: 8,&#10;    length: 10,&#10;    translate: { x: 16, y: -16 } });&#10;  ZdogSpookyHouse.getConeTree({&#10;    addTo: eastIsland,&#10;    diameter: 8,&#10;    length: 10,&#10;    translate: { x: -14, y: -18, z: -10 } });&#10;  islandShard.copyGraph({&#10;    addTo: eastIsland,&#10;    scale: { x: 4, y: -6, z: 4 },&#10;    translate: { x: 0, y: 28, z: 2 } });&#10;  var westIsland = new Zdog.Group({&#10;    addTo: scene,&#10;    translate: { x: -78, z: -36 },&#10;    scale: ZdogSpookyHouse.hillScale,&#10;    updateSort: true });&#10;  var westPyramidSide = 26;&#10;  var westIslandTopColor = color.dark;&#10;  var westIslandBottomColor = color.deep;&#10;  ZdogSpookyHouse.getPyramid({&#10;    addTo: westIsland,&#10;    scale: { x: westPyramidSide, y: 42, z: westPyramidSide },&#10;    color: westIslandTopColor });&#10;  ZdogSpookyHouse.getPyramid({&#10;    addTo: westIsland,&#10;    scale: { x: westPyramidSide, y: -40, z: westPyramidSide },&#10;    color: westIslandBottomColor,&#10;    snub: true });&#10;  ZdogSpookyHouse.getPyramid({ // top spike&#10;    addTo: westIsland,&#10;    scale: { x: 14, y: 29, z: 14 },&#10;    translate: { x: 12, y: -2, z: -12 },&#10;    color: westIslandTopColor });&#10;  ZdogSpookyHouse.getPyramid({ // top spike&#10;    addTo: westIsland,&#10;    scale: { x: 16, y: 54, z: 16 },&#10;    translate: { x: -4, y: -2, z: -4 },&#10;    color: westIslandTopColor });&#10;  ZdogSpookyHouse.getConeTree({&#10;    addTo: westIsland,&#10;    diameter: 8,&#10;    length: 10,&#10;    translate: { x: -16, y: -24, z: 6 } });&#10;  ZdogSpookyHouse.getConeTree({&#10;    addTo: westIsland,&#10;    diameter: 8,&#10;    length: 10,&#10;    translate: { x: -22, y: -14, z: -16 } });&#10;  ZdogSpookyHouse.getConeTree({&#10;    addTo: westIsland,&#10;    diameter: 8,&#10;    length: 8,&#10;    translate: { x: -22, y: -10, z: 15 } });&#10;  var westIslandShard = new Zdog.Anchor({&#10;    addTo: westIsland,&#10;    scale: { x: 6, y: 9, z: 6 },&#10;    translate: { x: 0, y: 40, z: 0 } });&#10;  ZdogSpookyHouse.getPyramid({ // shard top&#10;    addTo: westIslandShard,&#10;    color: westIslandBottomColor });&#10;  ZdogSpookyHouse.getPyramid({ // shard bottom&#10;    addTo: westIslandShard,&#10;    scale: { y: -1.2 },&#10;    color: westIslandBottomColor });&#10;  westIslandShard.copyGraph({&#10;    scale: { x: 2, y: 4, z: 4 },&#10;    translate: { x: 24, y: 29, z: -8 } });&#10;  ZdogSpookyHouse.getGraveIsland({&#10;    addTo: scene,&#10;    translate: { x: 62, z: -32 } });&#10;  ZdogSpookyHouse.getGraveIsland({&#10;    addTo: scene,&#10;    translate: { x: 60, z: -60 } });&#10;  ZdogSpookyHouse.getGraveIsland({&#10;    addTo: scene,&#10;    translate: { x: 32, z: -64 } });&#10;  var cloudColor = color.darker;&#10;  var cloudRotorA = new Zdog.Anchor({&#10;    addTo: scene,&#10;    translate: { y: -94 } });&#10;  var bigCloudPuff = new Zdog.Shape({&#10;    addTo: cloudRotorA,&#10;    translate: { z: -64 },&#10;    stroke: 32,&#10;    scale: 2,&#10;    color: cloudColor });&#10;  var smallCloudPuff = new Zdog.Shape({&#10;    addTo: bigCloudPuff,&#10;    translate: { x: -9, y: 4, z: 4 },&#10;    stroke: 16,&#10;    color: cloudColor });&#10;  smallCloudPuff.copy({&#10;    translate: { x: 9, y: 5, z: 6 },&#10;    stroke: 20 });&#10;  var disk = new Zdog.RoundedRect({&#10;    addTo: bigCloudPuff,&#10;    width: 26,&#10;    height: 12,&#10;    cornerRadius: 6,&#10;    translate: { x: -6, y: 7, z: 4 },&#10;    rotate: { x: TAU / 4 },&#10;    stroke: 6,&#10;    color: cloudColor,&#10;    fill: true });&#10;  disk.copy({&#10;    translate: { x: 6, y: 9, z: 8 } });&#10;  var cloudRotorB = new Zdog.Anchor({&#10;    addTo: scene,&#10;    translate: { y: -60 } });&#10;  var bigCloudPuffB = new Zdog.Anchor({&#10;    addTo: cloudRotorB,&#10;    translate: { z: 88 } });&#10;  new Zdog.Hemisphere({&#10;    addTo: bigCloudPuffB,&#10;    diameter: 36,&#10;    rotate: { x: TAU / 4 },&#10;    color: cloudColor,&#10;    stroke: 6 });&#10;  bigCloudPuff.copy({&#10;    addTo: bigCloudPuffB,&#10;    translate: { x: 16, y: -14, z: -4 } });&#10;  disk.copy({&#10;    addTo: bigCloudPuffB,&#10;    width: 28,&#10;    height: 16,&#10;    cornerRadius: 8,&#10;    stroke: 10,&#10;    scale: 2,&#10;    translate: { x: 8, y: 2, z: 4 } });&#10;  var house = ZdogSpookyHouse.addHouse({&#10;    addTo: centerIsland,&#10;    stroke: 1 / illo.zoom });&#10;  ZdogSpookyHouse.addCats({&#10;    addTo: centerIsland });&#10;  ZdogSpookyHouse.addBones({&#10;    addTo: centerIsland });&#10;  var interiorScene = ZdogSpookyHouse.addInteriorScene({&#10;    addTo: house.shape,&#10;    translate: { z: 6 } });&#10;  var fogMonster = ZdogSpookyHouse.addFogMonster({&#10;    addTo: scene,&#10;    translate: { y: 12 } });&#10;  var carRoad = ZdogSpookyHouse.addCarRoad({&#10;    addTo: scene });&#10;  var ticker = 0;&#10;  var cycleCount = 300;&#10;  function animate() {&#10;    var progress = ticker / cycleCount;&#10;    if (ZdogSpookyHouse.wobbling &amp; progress &lt;= 2) {&#10;      var theta = Zdog.easeInOut(progress % 1) * TAU;&#10;      var delta = TAU * -3 / 64;&#10;      illo.rotate.y = Math.sin(theta) * delta + TAU / 8;&#10;      illo.rotate.x = (Math.cos(theta) * -0.5 + 0.5) * delta;&#10;    }&#10;    illo.normalizeRotate();&#10;    fogMonster.animate(progress);&#10;    carRoad.animate(progress);&#10;    house.animate(progress, illo.rotate);&#10;    interiorScene.animate(progress);&#10;    cloudRotorA.rotate.y = progress * TAU / 12;&#10;    cloudRotorB.rotate.y = progress * TAU / 16;&#10;    centerIsland.translate.y = Math.sin(progress / 4 * TAU) * 4;&#10;    eastIsland.translate.y = Math.sin(progress / 1.5 * TAU) * -4;&#10;    westIsland.translate.y = Math.sin(progress / 2.5 * TAU) * -4;&#10;    northIsland.translate.y = Math.sin(progress / 3 * TAU) * 4;&#10;    southIsland.translate.y = Math.sin(progress / 2 * TAU) * 4;&#10;    ticker++;&#10;    illo.updateRenderGraph();&#10;    requestAnimationFrame(animate);&#10;  }&#10;  animate();&#10;};&#10;var zdogCanvas = document.querySelector('.zdog-canvas');&#10;ZdogSpookyHouse.init(zdogCanvas);&#10;&lt;/script&gt;&#10;"/>
                                            <IsLangDependant val="false"/>
                                            <HtmlCodeByLang type="Map[QString]=QString"/>
                                            <enabled val="true"/>
                                        </HtmlCode>
                                    </ITEM>
                                </comps>
                                <vert_align>
                                    <val val="0"/>
                                </vert_align>
                                <min_height>
                                    <is_resp val="false"/>
                                    <unit_val val="0"/>
                                    <values type="Map[int]=double"/>
                                    <no_resp_value val="0"/>
                                    <valid_resp_v val="true"/>
                                </min_height>
                                <fill>
                                    <type_fill val="0"/>
                                    <fill_color>
                                        <color>
                                            <col val="#4991cf"/>
                                            <ind val="-1"/>
                                        </color>
                                    </fill_color>
                                    <fill_gradient>
                                        <gradient>
                                            <pt1 val="[10,10]"/>
                                            <pt2 val="[50,50]"/>
                                            <col1>
                                                <col val="#5a9ff6"/>
                                                <ind val="-1"/>
                                            </col1>
                                            <col2>
                                                <col val="#226fdb"/>
                                                <ind val="-1"/>
                                            </col2>
                                            <col1_over>
                                                <col val="#5a9ff6"/>
                                                <ind val="-1"/>
                                            </col1_over>
                                            <col2_over>
                                                <col val="#226fdb"/>
                                                <ind val="-1"/>
                                            </col2_over>
                                        </gradient>
                                    </fill_gradient>
                                    <fill_image>
                                        <img_bg>
                                            <IsScreenDepend val="false"/>
                                            <NoScreenDependValue val=""/>
                                            <values type="Hash[int]=QString"/>
                                        </img_bg>
                                        <align>
                                            <lck_point val="4"/>
                                        </align>
                                        <fit>
                                            <fit_mode val="0"/>
                                            <repeat val="true"/>
                                            <bg_img_constant_size>
                                                <is_resp val="false"/>
                                                <unit_val val="0"/>
                                                <values type="Map[int]=double"/>
                                                <no_resp_value val="250"/>
                                                <valid_resp_v val="true"/>
                                            </bg_img_constant_size>
                                        </fit>
                                        <kenburn>
                                            <enabled val="false"/>
                                            <pos val="4"/>
                                            <duration val="10000"/>
                                            <zoom val="20"/>
                                        </kenburn>
                                    </fill_image>
                                    <fill_parallax>
                                        <img_bg>
                                            <IsScreenDepend val="false"/>
                                            <NoScreenDependValue val=""/>
                                            <values type="Hash[int]=QString"/>
                                        </img_bg>
                                        <blck_parallax>
                                            <is_resp val="true"/>
                                            <unit_val val="-1"/>
                                            <values type="Map[int]=double"/>
                                            <no_resp_value val="0"/>
                                            <valid_resp_v val="true"/>
                                        </blck_parallax>
                                        <align>
                                            <pos>
                                                <is_resp val="false"/>
                                                <unit_val val="-1"/>
                                                <values type="Map[int]=double"/>
                                                <no_resp_value val="0"/>
                                                <valid_resp_v val="false"/>
                                            </pos>
                                        </align>
                                    </fill_parallax>
                                    <fill_color_over>
                                        <color>
                                            <col>
                                                <col val=""/>
                                                <ind val="-1"/>
                                            </col>
                                            <col_over>
                                                <col val=""/>
                                                <ind val="-1"/>
                                            </col_over>
                                        </color>
                                    </fill_color_over>
                                    <fill_gradient_over>
                                        <gradient>
                                            <pt1 val="[10,10]"/>
                                            <pt2 val="[50,50]"/>
                                            <col1>
                                                <col val="#5a9ff6"/>
                                                <ind val="-1"/>
                                            </col1>
                                            <col2>
                                                <col val="#226fdb"/>
                                                <ind val="-1"/>
                                            </col2>
                                            <col1_over>
                                                <col val="#5a9ff6"/>
                                                <ind val="-1"/>
                                            </col1_over>
                                            <col2_over>
                                                <col val="#226fdb"/>
                                                <ind val="-1"/>
                                            </col2_over>
                                        </gradient>
                                    </fill_gradient_over>
                                    <fill_video>
                                        <type_video val="1"/>
                                        <ref_file>
                                            <key val=""/>
                                        </ref_file>
                                        <url_video val=""/>
                                    </fill_video>
                                </fill>
                                <corner>
                                    <corner_val>
                                        <is_resp val="false"/>
                                        <unit_val val="1"/>
                                        <values type="Map[int]=double"/>
                                        <no_resp_value val="0"/>
                                        <valid_resp_v val="true"/>
                                    </corner_val>
                                    <b_rad0>
                                        <is_resp val="false"/>
                                        <unit_val val="-1"/>
                                        <values type="Map[int]=double"/>
                                        <no_resp_value val="0"/>
                                        <valid_resp_v val="false"/>
                                    </b_rad0>
                                    <b_rad1>
                                        <is_resp val="false"/>
                                        <unit_val val="-1"/>
                                        <values type="Map[int]=double"/>
                                        <no_resp_value val="0"/>
                                        <valid_resp_v val="false"/>
                                    </b_rad1>
                                    <b_rad2>
                                        <is_resp val="false"/>
                                        <unit_val val="-1"/>
                                        <values type="Map[int]=double"/>
                                        <no_resp_value val="0"/>
                                        <valid_resp_v val="false"/>
                                    </b_rad2>
                                    <b_rad3>
                                        <is_resp val="false"/>
                                        <unit_val val="-1"/>
                                        <values type="Map[int]=double"/>
                                        <no_resp_value val="0"/>
                                        <valid_resp_v val="false"/>
                                    </b_rad3>
                                </corner>
                                <border>
                                    <margin0>
                                        <val>
                                            <is_resp val="false"/>
                                            <unit_val val="0"/>
                                            <values type="Map[int]=double"/>
                                            <no_resp_value val="0"/>
                                            <valid_resp_v val="true"/>
                                        </val>
                                        <col>
                                            <col val="#000000"/>
                                            <ind val="-1"/>
                                        </col>
                                    </margin0>
                                    <margin1>
                                        <val>
                                            <is_resp val="false"/>
                                            <unit_val val="0"/>
                                            <values type="Map[int]=double"/>
                                            <no_resp_value val="0"/>
                                            <valid_resp_v val="true"/>
                                        </val>
                                        <col>
                                            <col val="#000000"/>
                                            <ind val="-1"/>
                                        </col>
                                    </margin1>
                                    <margin2>
                                        <val>
                                            <is_resp val="false"/>
                                            <unit_val val="0"/>
                                            <values type="Map[int]=double"/>
                                            <no_resp_value val="0"/>
                                            <valid_resp_v val="true"/>
                                        </val>
                                        <col>
                                            <col val="#000000"/>
                                            <ind val="-1"/>
                                        </col>
                                    </margin2>
                                    <margin3>
                                        <val>
                                            <is_resp val="false"/>
                                            <unit_val val="0"/>
                                            <values type="Map[int]=double"/>
                                            <no_resp_value val="0"/>
                                            <valid_resp_v val="true"/>
                                        </val>
                                        <col>
                                            <col val="#000000"/>
                                            <ind val="-1"/>
                                        </col>
                                    </margin3>
                                </border>
                                <margins>
                                    <val_0>
                                        <is_resp val="false"/>
                                        <unit_val val="1"/>
                                        <values type="Map[int]=double"/>
                                        <no_resp_value val="0"/>
                                        <valid_resp_v val="true"/>
                                    </val_0>
                                    <val_1>
                                        <is_resp val="false"/>
                                        <unit_val val="1"/>
                                        <values type="Map[int]=double"/>
                                        <no_resp_value val="0"/>
                                        <valid_resp_v val="true"/>
                                    </val_1>
                                    <val_2>
                                        <is_resp val="false"/>
                                        <unit_val val="1"/>
                                        <values type="Map[int]=double"/>
                                        <no_resp_value val="0"/>
                                        <valid_resp_v val="true"/>
                                    </val_2>
                                    <val_3>
                                        <is_resp val="false"/>
                                        <unit_val val="1"/>
                                        <values type="Map[int]=double"/>
                                        <no_resp_value val="0"/>
                                        <valid_resp_v val="true"/>
                                    </val_3>
                                </margins>
                            </ITEM>
                        </children>
                        <cascading>
                            <break val="-1"/>
                        </cascading>
                        <gutter_x>
                            <is_resp val="false"/>
                            <unit_val val="1"/>
                            <values type="Map[int]=double"/>
                            <no_resp_value val="0"/>
                            <valid_resp_v val="true"/>
                        </gutter_x>
                        <float_row>
                            <enabled val="false"/>
                            <bg_floating_col>
                                <col val="#80ffffff"/>
                                <ind val="-1"/>
                            </bg_floating_col>
                        </float_row>
                    </ITEM>
                </rows>
                <hidden>
                    <hidden type="Set[int]"/>
                </hidden>
                <type_box val="0"/>
                <bg_box>
                    <fill>
                        <type_fill val="0"/>
                        <fill_color>
                            <color>
                                <col val="#4991cf"/>
                                <ind val="-1"/>
                            </color>
                        </fill_color>
                        <fill_gradient>
                            <gradient>
                                <pt1 val="[10,10]"/>
                                <pt2 val="[50,50]"/>
                                <col1>
                                    <col val="#5a9ff6"/>
                                    <ind val="-1"/>
                                </col1>
                                <col2>
                                    <col val="#226fdb"/>
                                    <ind val="-1"/>
                                </col2>
                                <col1_over>
                                    <col val="#5a9ff6"/>
                                    <ind val="-1"/>
                                </col1_over>
                                <col2_over>
                                    <col val="#226fdb"/>
                                    <ind val="-1"/>
                                </col2_over>
                            </gradient>
                        </fill_gradient>
                        <fill_image>
                            <img_bg>
                                <IsScreenDepend val="false"/>
                                <NoScreenDependValue val=""/>
                                <values type="Hash[int]=QString"/>
                            </img_bg>
                            <align>
                                <lck_point val="4"/>
                            </align>
                            <fit>
                                <fit_mode val="0"/>
                                <repeat val="true"/>
                                <bg_img_constant_size>
                                    <is_resp val="false"/>
                                    <unit_val val="0"/>
                                    <values type="Map[int]=double"/>
                                    <no_resp_value val="250"/>
                                    <valid_resp_v val="true"/>
                                </bg_img_constant_size>
                            </fit>
                            <kenburn>
                                <enabled val="false"/>
                                <pos val="4"/>
                                <duration val="10000"/>
                                <zoom val="20"/>
                            </kenburn>
                        </fill_image>
                        <fill_parallax>
                            <img_bg>
                                <IsScreenDepend val="false"/>
                                <NoScreenDependValue val=""/>
                                <values type="Hash[int]=QString"/>
                            </img_bg>
                            <blck_parallax>
                                <is_resp val="true"/>
                                <unit_val val="-1"/>
                                <values type="Map[int]=double"/>
                                <no_resp_value val="0"/>
                                <valid_resp_v val="true"/>
                            </blck_parallax>
                            <align>
                                <pos>
                                    <is_resp val="false"/>
                                    <unit_val val="-1"/>
                                    <values type="Map[int]=double"/>
                                    <no_resp_value val="0"/>
                                    <valid_resp_v val="false"/>
                                </pos>
                            </align>
                        </fill_parallax>
                        <fill_color_over>
                            <color>
                                <col>
                                    <col val=""/>
                                    <ind val="-1"/>
                                </col>
                                <col_over>
                                    <col val=""/>
                                    <ind val="-1"/>
                                </col_over>
                            </color>
                        </fill_color_over>
                        <fill_gradient_over>
                            <gradient>
                                <pt1 val="[10,10]"/>
                                <pt2 val="[50,50]"/>
                                <col1>
                                    <col val="#5a9ff6"/>
                                    <ind val="-1"/>
                                </col1>
                                <col2>
                                    <col val="#226fdb"/>
                                    <ind val="-1"/>
                                </col2>
                                <col1_over>
                                    <col val="#5a9ff6"/>
                                    <ind val="-1"/>
                                </col1_over>
                                <col2_over>
                                    <col val="#226fdb"/>
                                    <ind val="-1"/>
                                </col2_over>
                            </gradient>
                        </fill_gradient_over>
                        <fill_video>
                            <type_video val="1"/>
                            <ref_file>
                                <key val=""/>
                            </ref_file>
                            <url_video val=""/>
                        </fill_video>
                    </fill>
                    <corner>
                        <corner_val>
                            <is_resp val="false"/>
                            <unit_val val="1"/>
                            <values type="Map[int]=double"/>
                            <no_resp_value val="0"/>
                            <valid_resp_v val="true"/>
                        </corner_val>
                        <b_rad0>
                            <is_resp val="false"/>
                            <unit_val val="-1"/>
                            <values type="Map[int]=double"/>
                            <no_resp_value val="0"/>
                            <valid_resp_v val="false"/>
                        </b_rad0>
                        <b_rad1>
                            <is_resp val="false"/>
                            <unit_val val="-1"/>
                            <values type="Map[int]=double"/>
                            <no_resp_value val="0"/>
                            <valid_resp_v val="false"/>
                        </b_rad1>
                        <b_rad2>
                            <is_resp val="false"/>
                            <unit_val val="-1"/>
                            <values type="Map[int]=double"/>
                            <no_resp_value val="0"/>
                            <valid_resp_v val="false"/>
                        </b_rad2>
                        <b_rad3>
                            <is_resp val="false"/>
                            <unit_val val="-1"/>
                            <values type="Map[int]=double"/>
                            <no_resp_value val="0"/>
                            <valid_resp_v val="false"/>
                        </b_rad3>
                    </corner>
                    <border>
                        <margin0>
                            <val>
                                <is_resp val="false"/>
                                <unit_val val="0"/>
                                <values type="Map[int]=double"/>
                                <no_resp_value val="0"/>
                                <valid_resp_v val="true"/>
                            </val>
                            <col>
                                <col val="#000000"/>
                                <ind val="-1"/>
                            </col>
                        </margin0>
                        <margin1>
                            <val>
                                <is_resp val="false"/>
                                <unit_val val="0"/>
                                <values type="Map[int]=double"/>
                                <no_resp_value val="0"/>
                                <valid_resp_v val="true"/>
                            </val>
                            <col>
                                <col val="#000000"/>
                                <ind val="-1"/>
                            </col>
                        </margin1>
                        <margin2>
                            <val>
                                <is_resp val="false"/>
                                <unit_val val="0"/>
                                <values type="Map[int]=double"/>
                                <no_resp_value val="0"/>
                                <valid_resp_v val="true"/>
                            </val>
                            <col>
                                <col val="#000000"/>
                                <ind val="-1"/>
                            </col>
                        </margin2>
                        <margin3>
                            <val>
                                <is_resp val="false"/>
                                <unit_val val="0"/>
                                <values type="Map[int]=double"/>
                                <no_resp_value val="0"/>
                                <valid_resp_v val="true"/>
                            </val>
                            <col>
                                <col val="#000000"/>
                                <ind val="-1"/>
                            </col>
                        </margin3>
                    </border>
                </bg_box>
                <min_height>
                    <is_resp val="false"/>
                    <unit_val val="0"/>
                    <values type="Map[int]=double"/>
                    <no_resp_value val="0"/>
                    <valid_resp_v val="true"/>
                </min_height>
                <margins>
                    <val_0>
                        <is_resp val="false"/>
                        <unit_val val="0"/>
                        <values type="Map[int]=double"/>
                        <no_resp_value val="0"/>
                        <valid_resp_v val="true"/>
                    </val_0>
                    <val_1>
                        <is_resp val="false"/>
                        <unit_val val="1"/>
                        <values type="Map[int]=double"/>
                        <no_resp_value val="0"/>
                        <valid_resp_v val="true"/>
                    </val_1>
                    <val_2>
                        <is_resp val="false"/>
                        <unit_val val="0"/>
                        <values type="Map[int]=double"/>
                        <no_resp_value val="0"/>
                        <valid_resp_v val="true"/>
                    </val_2>
                    <val_3>
                        <is_resp val="false"/>
                        <unit_val val="1"/>
                        <values type="Map[int]=double"/>
                        <no_resp_value val="0"/>
                        <valid_resp_v val="true"/>
                    </val_3>
                </margins>
                <float_box>
                    <enabled val="false"/>
                </float_box>
                <v_row_spacing>
                    <is_resp val="false"/>
                    <unit_val val="-1"/>
                    <values type="Map[int]=double"/>
                    <no_resp_value val="0"/>
                    <valid_resp_v val="false"/>
                </v_row_spacing>
                <box_sync_fullpage_height>
                    <enabled val="false"/>
                    <VerticalContentDisposition>
                        <is_resp val="false"/>
                        <unit_val val="-1"/>
                        <values type="Map[int]=double"/>
                        <no_resp_value val="0"/>
                        <valid_resp_v val="false"/>
                    </VerticalContentDisposition>
                </box_sync_fullpage_height>
            </ITEM>
        </boxes>
    </layout_datas>
    <modification val="2024-10-14T18:07:13.113"/>
    <props>
        <html_head>
            <enabled val="false"/>
            <code_html val=""/>
            <IsLangDependant val="false"/>
            <HtmlCodeByLang type="Map[QString]=QString"/>
            <enabled val="false"/>
        </html_head>
        <html_body_end>
            <enabled val="false"/>
            <code_html val=""/>
            <IsLangDependant val="false"/>
            <HtmlCodeByLang type="Map[QString]=QString"/>
            <enabled val="false"/>
        </html_body_end>
        <php_page_beginning>
            <enabled val="false"/>
            <code_html val=""/>
            <IsLangDependant val="false"/>
            <HtmlCodeByLang type="Map[QString]=QString"/>
            <enabled val="false"/>
        </php_page_beginning>
        <custom_page_name val=""/>
        <b_custom_page_name_lang_dependant val="false"/>
        <template_uuids val=""/>
        <page_extension val="0"/>
        <seo_ignore_by_search_engine val="false"/>
        <seo_no_follow_links val="false"/>
        <under_construction val="false"/>
        <restricted_access>
            <enabled val="false"/>
            <entries val=""/>
        </restricted_access>
        <color_bg>
            <col val="#ffffff"/>
            <ind val="-1"/>
        </color_bg>
        <img_bg>
            <IsScreenDepend val="false"/>
            <NoScreenDependValue val=""/>
            <values type="Hash[int]=QString"/>
        </img_bg>
        <breadcrumb>
            <selected_id val=""/>
            <CustomBreadCrumbPageTitle>
                <switch_lng val="true"/>
                <lng_datas type="Map[QString]=SmtTextTranslatableItem"/>
                <opt val="2"/>
                <tr_auto val="0"/>
                <textID val=""/>
            </CustomBreadCrumbPageTitle>
        </breadcrumb>
        <txt_MetaTitle>
            <switch_lng val="true"/>
            <lng_datas type="Map[QString]=SmtTextTranslatableItem"/>
            <opt val="2"/>
            <tr_auto val="0"/>
            <textID val=""/>
        </txt_MetaTitle>
        <txt_MetaDescription>
            <switch_lng val="true"/>
            <lng_datas type="Map[QString]=SmtTextTranslatableItem"/>
            <opt val="2"/>
            <tr_auto val="0"/>
            <textID val=""/>
        </txt_MetaDescription>
        <txt_CustomName>
            <switch_lng val="true"/>
            <lng_datas type="Map[QString]=SmtTextTranslatableItem"/>
            <opt val="2"/>
            <tr_auto val="2"/>
            <textID val=""/>
        </txt_CustomName>
        <keywords_lang>
            <switch_lng val="true"/>
            <lng_datas type="Map[QString]=SmtTextTranslatableItem"/>
            <opt val="2"/>
            <tr_auto val="0"/>
            <textID val=""/>
        </keywords_lang>
        <keywords_nolang val=""/>
        <has_video val="false"/>
        <video_datas>
            <type_video val="0"/>
            <video_file>
                <key val=""/>
            </video_file>
            <html_code>
                <code_html val=""/>
                <IsLangDependant val="false"/>
                <HtmlCodeByLang type="Map[QString]=QString"/>
            </html_code>
            <url_video_file val=""/>
            <auto_play val="false"/>
            <auto_play_sound val="false"/>
        </video_datas>
    </props>
</PageData>
