InfoPanel
A right-edge <Sheet> that describes whatever is selected — a star, a deep-sky object, a solar-system body, a constellation region or an asterism. Composes <HudReadout> for the coordinate grid and <IconButton> for the close button.
Below the catalogue rows it carries an Observing section, fed by engine.observe(): when the target is highest tonight, the hours it spends above 30° and in astronomical darkness, the airmass at the displayed instant, and how much the Moon will cost. Circumpolar, never-rises and no-darkness are answered as sentences rather than dashes. It closes with an inline altitude sparkline drawn from engine.altitudeTrack() — noon to noon, horizon marked, darkness shaded, the clock's position marked — carrying the same facts as its text alternative.
The section is suppressed for constellation regions and asterisms: an area of sky covering hundreds of square degrees does not reach its highest at one time, so a transit for it would be an invention.
Every printed time goes through ObserverTime with the observer's stored zone, and the panel re-renders on time:change and location:change. Live preview requires the SkyMap engine: view on the explorer and click any star, deep-sky object or planet.