Files
MichaelScottsman af4e73c1d3 Stereo glass: each eye sees the room behind the window glass from where it is; tuner fits its popup; the sidebar keeps native glass without the laser; Home leaves on the route exit
Stereo (glassd cap stereo, flag glassStereo, on)
- The window glass was one image both eyes saw on the glass plane, so the room behind it read as a picture
  pasted on the glass. glassd now renders each eye's view (SteamVR's eye-to-head offsets, refreshed every
  5 s): every region of a stereo surface's texture is a pair, left eye's copy then right eye's, and the
  scene graph's panel spans the pair with stereoscopy Parallel.
- Measured on the device with a lab probe (lgs_sg test.stereoProbe): SteamVR splits a Parallel panel at
  the middle of the panel's own uv rect, not at the texture's halves; hence the pair layout, and stereo only
  where the scene graph shows a surface whole (main, SteamVR's panels). The bar, the frame menu and popups
  show crops and stay mono. A slab clipped sideways is left out while it is.
- GPU about 2.9 -> 3.5 ms a frame.

Sidebar without the laser
- frame.menu is no longer laser-only: SteamVR shows it in gamepad mode (laser mouse off) and beside its own
  pages; keyed on the gamepad flag its native glass went off and the CSS glass showed. Verified with the
  flag forced to gamepad on Home and in VR Settings: the cover stays.

Home -> Library
- The shell stamps the leaving Home view with the moment it starts leaving (only on a way out of Home, kept
  across Steam's /library redirect); Home fades on the route exit and the reporter lets its plates go on
  that clock. Measured: all Home discs reported leaving in the first report, gone with the page.
- Plates whose element leaves the DOM are reported leaving from the mutation itself (no measuring), not
  after a frame-driven tick the new route's render starves.

Glass tuner
- The popup fits Steam's 600 px bar popup cap (rows 76 px: label and value on one line over a 40 px slider);
  open()/close() for tests.
2026-10-09 14:51:41 -04:00

29 lines
2.7 KiB
JSON

{
"version": 2,
"about": [
"C1a Shell chrome (WN §3.1, §3.3.6, §3.4, §3.7; PLAN §1.2, §1.6, §1.7). Contract: docs/phase2/contracts/reporter.md.",
"Window cover: 00-base.json's main.modes, keyed on the data-lgs-glass value C1a's runtime sets on %{BasicUiRoot} (window 656, window-full and hero 720, radius 54; windowless: plates only). Nothing to change here.",
"Nothing in the toolbar row or the bottom ornament pops: the legacy hdr-back, hdr-search, footer and sort-filter pops are superseded while wp.c1a is on (they come back with the flag off).",
"The ornament is a liquid plate (shell-ornament, the T2 node #Footer > .lgs-orn-plate, also the data-lgs-nopop box); on windowless routes Back and the search field are liquid plates (shell-back, shell-search). These are DOM attributes from device/rt/20-shell.js, not rules.",
"frame.menu: liquid (PLAN §1.6), and its cover is the tab bar's two capsules (the T2 nodes .lgs-tabcap), not the menu's box (which also holds the gap and the band under the bar). Without the runtime the cover falls back to the box. The cover's radius is the element's own border-radius (no r field), which 20-shell.css §4 sets from --lgs-c1a-tab-r: collapsed a capsule (half the column), expanded a 30 px rounded rectangle (a capsule radius on the expanded panel drew an oval blob); the fallback box gets the same radius, so it is never a square slab (REQ P7->C1a, review R2 M2).",
"The tab bar opens and closes by animating its width (20-shell.css §4, on snappy out and fade back): cover.morph has the reporter send the end shape with the motion's start time and spring, and glassd morphs the two capsules' glass along with the page (no glass trailing the labels).",
"Not laser-only (00-base.json's laserOnly is overridden): SteamVR shows the frame menu in gamepad mode too (laser mouse off, and beside SteamVR's own pages), and its panel reads only-visible-with-laser false whatever Steam asks (P6 RP-7). Keyed on the gamepad flag, the menu's native glass went off whenever the laser did and its CSS glass showed (2026-10-09).",
"The tab bar's +25 mm is P7's tabBarDepth rule (theme/sg/00-base.json) and the always-visible flag is theme/popups/20-shell.json (tabBarAlways): never a crop."
],
"flag": "wp.c1a",
"owns": ["frame.menu"],
"supersedes": ["hdr-back", "hdr-search", "footer", "sort-filter"],
"surfaces": {
"frame.menu": {
"material": "liquid",
"laserOnly": false,
"cover": {
"sel": "%{DashboardMenu}%{Variant_FrameMenu} > .lgs-tabcap, %{DashboardMenu}%{Variant_FrameMenu}:not(:has(> .lgs-tabcap))",
"all": true,
"morph": {"grow": "snappy", "shrink": "fade"}
},
"layers": []
}
}
}