- banner:
  - heading "XZBT-NGN Exhibit Engine" [level=1]
  - paragraph: Contract 5.2/5.3 · One exhibit at a time
- main:
  - heading "Connection" [level=2]
  - generic: Exhibit URL (same origin)
  - textbox "Exhibit URL (same origin)":
    - /placeholder: /public/exhibits/example/index.html
    - text: http://127.0.0.1:4173/test-fixtures/reference-exhibits/museum-gallery/control.html
  - button "Load exhibit"
  - button "Reconnect"
  - button "Disconnect"
  - paragraph: Enter a trusted exhibit's local served path or a URL on this origin. Load exhibit also switches exhibits. Reconnect starts a new session, or reloads the last exhibit after disconnect.
  - status: connected · synchronized
  - paragraph: Museum Gallery · 0.1.0 · Contract 5.3
  - paragraph: "Exhibit location: http://127.0.0.1:4173/test-fixtures/reference-exhibits/museum-gallery/control.html"
  - iframe:
    - banner:
      - heading "Museum Gallery — Control Room" [level=1]
      - generic: Primary surface · Contract 5.3 · standalone-capable
      - generic: host attached
    - main:
      - paragraph: The Orrery
      - paragraph: "Lighting: 60%"
      - paragraph: "Rotation: 0.4x"
      - paragraph: "Labels: ON"
      - paragraph: "Attached non-primary surfaces: 0"
    - complementary:
      - heading "Artifact" [level=2]
      - generic: Selected artifact
      - combobox "Selected artifact":
        - option "The Orrery" [selected]
        - option "Star Map"
        - option "Meteorite Fragment"
      - heading "Environment" [level=2]
      - generic: Lighting level
      - generic: 60%
      - slider "Lighting level 60%"
      - generic: Rotation speed
      - generic: 0.4x
      - slider "Rotation speed 0.4x"
      - generic: Labels enabled
      - button "Toggle" [pressed]
      - heading "Actions" [level=2]
      - button "Flash spotlight"
    - contentinfo:
      - generic: Control Room
      - generic: Control Room standing by.
  - heading "Exhibit controls (5)" [level=2]
  - generic "Capabilities"
  - paragraph: Reported values are authoritative. New values are drafts; select Set or Invoke to submit. Rediscovery resets drafts.
  - heading "gallery" [level=3]
  - article:
    - heading "Selected Artifact" [level=3]
    - code: artifact.selected
    - paragraph: selection · readable · writable
    - status: "Reported value: \"the-orrery\""
    - generic "Target descriptor"
    - paragraph
    - text: New value
    - combobox "New value":
      - option "The Orrery" [selected]
      - option "Star Map"
      - option "Meteorite Fragment"
    - button "Set"
  - article:
    - heading "Lighting Level" [level=3]
    - code: lighting.level
    - paragraph: range · readable · writable
    - status: "Reported value: 0.6"
    - generic "Target descriptor"
    - paragraph
    - text: New value
    - spinbutton "New value": "0.6"
    - button "Set"
  - article:
    - heading "Rotation Speed" [level=3]
    - code: rotation.speed
    - paragraph: range · readable · writable
    - status: "Reported value: 0.4"
    - generic "Target descriptor"
    - paragraph
    - text: New value
    - spinbutton "New value": "0.4"
    - button "Set"
  - article:
    - heading "Labels Enabled" [level=3]
    - code: labels.enabled
    - paragraph: state · readable · writable
    - status: "Reported value: true"
    - generic "Target descriptor"
    - paragraph
    - text: New value
    - checkbox "New value" [checked]
    - button "Set"
  - heading "action" [level=3]
  - article:
    - heading "Spotlight Flash" [level=3]
    - code: action.spotlight-flash
    - paragraph: impulse · not readable · not writable
    - status: No persistent value reported.
    - generic "Target descriptor"
    - paragraph
    - button "Invoke"
  - heading "Presentation surfaces (3)" [level=2]
  - paragraph: Open Contract 5.3 presentation surfaces locally below. URLs resolve against the supplying exhibit. Disconnecting or switching exhibits closes these views. Remote/cast displays remain deferred.
  - article:
    - heading "Control Room" [level=3]
    - code: surface.control
    - generic: Primary
    - generic: "Role: control"
    - paragraph: "URL: control.html"
    - status: Open in the authoritative control frame. Use Connection controls to reload or disconnect.
    - button "Open" [disabled]
    - button "Reload" [disabled]
    - button "Close" [disabled]
  - article:
    - heading "Artifact Display" [level=3]
    - code: surface.artifact
    - generic: Non-primary
    - generic: "Role: ambient"
    - paragraph: "URL: artifact.html"
    - status: open
    - button "Open" [disabled]
    - button "Reload"
    - button "Close"
    - iframe:
      - banner:
        - heading "Museum Gallery — Artifact Display" [level=1]
        - generic: Non-primary surface · attaches to the Control Room
        - generic: surface
      - main:
        - paragraph: The Orrery
        - paragraph: "Lighting: 60%"
        - paragraph: "Rotation: 0.4x"
        - paragraph:
          - button "Cycle artifact"
        - paragraph: Attached to Control Room.
      - contentinfo:
        - generic: Artifact Display
        - generic: Waiting for shared state.
  - article:
    - heading "Information Wall" [level=3]
    - code: surface.info-wall
    - generic: Non-primary
    - generic: "Role: information"
    - paragraph: "URL: info-wall.html"
    - status: open
    - button "Open" [disabled]
    - button "Reload"
    - button "Close"
    - iframe:
      - banner:
        - heading "Museum Gallery — Information Wall" [level=1]
        - generic: Non-primary surface · attaches to the Control Room
        - generic: surface
      - main:
        - paragraph: The Orrery
        - paragraph: "Labels: ON"
        - paragraph:
          - button "Toggle labels"
        - paragraph: Attached to Control Room.
      - contentinfo:
        - generic: Information Wall
        - generic: Waiting for shared state.
  - heading "State and metadata" [level=2]
  - button "Refresh state"
  - generic "Session and exhibit metadata"
  - generic "Current persistent state"
  - heading "Protocol diagnostics" [level=2]
  - generic "Incoming events"
  - generic "Protocol and errors"