<?xml version='1.0' encoding='utf-8'?>
<mxfile host="drawio">
  <diagram id="bd" name="Browser desktop">
    <mxGraphModel grid="1" gridSize="10" pageWidth="720" pageHeight="1030" background="#000001">
      <root>
        <mxCell id="0" />
        <mxCell id="1" parent="0" />
        <mxCell id="page-extent" value="" vertex="1" parent="1" style="html=0;fillColor=#000001;strokeColor=none;">
          <mxGeometry as="geometry" x="0" y="0" width="719" height="1030" />
        </mxCell>
        <mxCell id="url" value="URL&#10;/projects/x/" style="whiteSpace=wrap;html=0;fillColor=#16191D;strokeColor=#E8C24A;rounded=1;absoluteArcSize=1;arcSize=6;fontColor=#F2F1EC;fontFamily=IBM Plex Sans;fontSize=14;align=center;verticalAlign=middle;spacing=10;strokeWidth=1.5;" vertex="1" parent="1">
          <mxGeometry x="35" y="30" width="290" height="100" as="geometry" />
        </mxCell>
        <mxCell id="route" value="Route table&#10;path → app +&#10;canonical route" style="whiteSpace=wrap;html=0;fillColor=#16191D;strokeColor=#3A4048;rounded=1;absoluteArcSize=1;arcSize=6;fontColor=#F2F1EC;fontFamily=IBM Plex Sans;fontSize=14;align=center;verticalAlign=middle;spacing=10;strokeWidth=1.5;" vertex="1" parent="1">
          <mxGeometry x="35" y="200" width="290" height="100" as="geometry" />
        </mxCell>
        <mxCell id="store" value="Window store&#10;one per app · z-order ·&#10;focus · cap" style="whiteSpace=wrap;html=0;fillColor=#16191D;strokeColor=#3A4048;rounded=1;absoluteArcSize=1;arcSize=6;fontColor=#F2F1EC;fontFamily=IBM Plex Sans;fontSize=14;align=center;verticalAlign=middle;spacing=10;strokeWidth=1.5;" vertex="1" parent="1">
          <mxGeometry x="35" y="370" width="290" height="110" as="geometry" />
        </mxCell>
        <mxCell id="lazy" value="Lazy app module&#10;loaded on first open" style="whiteSpace=wrap;html=0;fillColor=#16191D;strokeColor=#3A4048;rounded=1;absoluteArcSize=1;arcSize=6;fontColor=#F2F1EC;fontFamily=IBM Plex Sans;fontSize=14;align=center;verticalAlign=middle;spacing=10;strokeWidth=1.5;" vertex="1" parent="1">
          <mxGeometry x="35" y="590" width="290" height="100" as="geometry" />
        </mxCell>
        <mxCell id="sched" value="Frame scheduler&#10;pauses hidden canvases,&#10;steps down when slow" style="whiteSpace=wrap;html=0;fillColor=#16191D;strokeColor=#7FA7D9;rounded=1;absoluteArcSize=1;arcSize=6;fontColor=#F2F1EC;fontFamily=IBM Plex Sans;fontSize=14;align=center;verticalAlign=middle;spacing=10;strokeWidth=1.5;" vertex="1" parent="1">
          <mxGeometry x="35" y="760" width="290" height="130" as="geometry" />
        </mxCell>
        <mxCell id="ssr" value="Server-rendered page&#10;readable with JS off" style="whiteSpace=wrap;html=0;fillColor=#16191D;strokeColor=#8FC2A0;rounded=1;absoluteArcSize=1;arcSize=6;fontColor=#F2F1EC;fontFamily=IBM Plex Sans;fontSize=14;align=center;verticalAlign=middle;spacing=10;strokeWidth=1.5;" vertex="1" parent="1">
          <mxGeometry x="395" y="30" width="290" height="100" as="geometry" />
        </mxCell>
        <mxCell id="hist" value="History&#10;push · replace · back/forward" style="whiteSpace=wrap;html=0;fillColor=#16191D;strokeColor=#3A4048;rounded=1;absoluteArcSize=1;arcSize=6;fontColor=#F2F1EC;fontFamily=IBM Plex Sans;fontSize=14;align=center;verticalAlign=middle;spacing=10;strokeWidth=1.5;" vertex="1" parent="1">
          <mxGeometry x="395" y="370" width="290" height="110" as="geometry" />
        </mxCell>
        <mxCell id="prefs" value="Preference store&#10;allow-listed ·&#10;local → session → memory" style="whiteSpace=wrap;html=0;fillColor=#16191D;strokeColor=#3A4048;rounded=1;absoluteArcSize=1;arcSize=6;fontColor=#F2F1EC;fontFamily=IBM Plex Sans;fontSize=14;align=center;verticalAlign=middle;spacing=10;strokeWidth=1.5;" vertex="1" parent="1">
          <mxGeometry x="395" y="590" width="290" height="110" as="geometry" />
        </mxCell>
        <mxCell id="tests" value="735 automated checks · 9 suites in a headless browser + package checks" style="text=;whiteSpace=wrap;html=0;fillColor=none;strokeColor=none;fontColor=#858B94;fontFamily=IBM Plex Sans;fontSize=12;align=left;verticalAlign=middle;spacing=4;" vertex="1" parent="1">
          <mxGeometry x="35" y="940" width="650" height="65" as="geometry" />
        </mxCell>
        <mxCell id="e1" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=0;endArrow=block;endSize=8;strokeColor=#858B94;strokeWidth=1.5;fontColor=#858B94;fontFamily=IBM Plex Sans;fontSize=13;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" edge="1" parent="1" source="url" target="route">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e2" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=0;endArrow=block;endSize=8;strokeColor=#858B94;strokeWidth=1.5;fontColor=#858B94;fontFamily=IBM Plex Sans;fontSize=13;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" edge="1" parent="1" source="route" target="store">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e3" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=0;endArrow=block;endSize=8;strokeColor=#858B94;strokeWidth=1.5;fontColor=#858B94;fontFamily=IBM Plex Sans;fontSize=13;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" edge="1" parent="1" source="store" target="lazy">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e4" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=0;endArrow=block;endSize=8;strokeColor=#858B94;strokeWidth=1.5;fontColor=#858B94;fontFamily=IBM Plex Sans;fontSize=13;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" edge="1" parent="1" source="lazy" target="sched">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e5" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=0;endArrow=block;endSize=8;strokeColor=#8FC2A0;strokeWidth=1.5;fontColor=#858B94;fontFamily=IBM Plex Sans;fontSize=13;dashed=1;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="url" target="ssr">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e6" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=0;endArrow=block;endSize=8;strokeColor=#858B94;strokeWidth=1.5;fontColor=#858B94;fontFamily=IBM Plex Sans;fontSize=13;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="store" target="hist">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e7" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=0;endArrow=block;endSize=8;strokeColor=#858B94;strokeWidth=1.5;fontColor=#858B94;fontFamily=IBM Plex Sans;fontSize=13;exitX=0.8;exitY=1;entryX=0.5;entryY=0;" edge="1" parent="1" source="store" target="prefs">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="267" y="530" />
              <mxPoint x="540" y="530" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="e5-label" value="no JS" vertex="1" parent="1" style="text=;html=0;whiteSpace=wrap;fillColor=none;strokeColor=none;fontColor=#858B94;fontFamily=IBM Plex Sans;fontSize=12;align=left;verticalAlign=middle;spacing=4;">
          <mxGeometry as="geometry" x="334" y="42" width="55" height="25" />
        </mxCell>
      </root>
    </mxGraphModel>
  </diagram>
</mxfile>