···6666 expect( global, 'every [data-phase=...] selector must be :global()-wrapped' ).toBe( total );
6767 } );
68686969+ // At night the sky is the bare starfield: the sun-driven layers (.bloom glow, .halo ring,
7070+ // .horizon line) must be switched off so no sun gradient or halo bleeds into the dark sky.
7171+ it( 'hides every sun layer at night, leaving only the stars', () => {
7272+ const style = index.match( /<style>([\s\S]*?)<\/style>/ )?.[ 1 ] ?? '';
7373+ for ( const layer of [ 'bloom', 'halo', 'horizon' ] ) {
7474+ const rule = new RegExp(
7575+ `:global\\(\\s*\\[data-phase='night'\\]\\s*\\)\\s*\\.${ layer }\\b`
7676+ );
7777+ expect( style, `night must silence the .${ layer } sun layer` ).toMatch( rule );
7878+ }
7979+ } );
8080+6981 // The inline head script must run before any module loads (for a no-flash sky), so it
7082 // can't import phaseForHour — it hand-mirrors the same hour->phase boundaries. This guard
7183 // keeps that copy honest: extract its `var p = <ternary>` expression straight from source