--- id: NL-SPEC-0B9CBD34 type: spec title: Nuguland bar orientation --- # Nuguland bar orientation ## Behavior - The bar has one global orientation: `horizontal` or `vertical`. - The default is `horizontal`. - The orientation interface accepts either orientation or `toggle` and returns the resulting orientation. - Unknown input is a no-op returning the current orientation. - Changes apply live and remain consistent across bar and popout geometry. ## Layout | Concern | Horizontal | Vertical | | --- | --- | --- | | Edge | top | left | | Span | full width | full height | | Thickness | fixed bar height | widest visible compact content | | Flow | left to right | top to bottom | | Clock | inline hour and minute | stacked hour, rule, minute | | Popouts | below the bar | right of the bar | - The clock remains the middle zone and never overlaps another bar zone. - Vertical workspace pills remain compact and use the widget-label abbreviation rule. - OSD and toast placement remains independently top-right. - Orientation transitions are immediate. ## Abbreviation contract Drop `a`, `e`, `i`, `o`, and `u`, then take the first three characters. If fewer than three characters remain, take the first three characters of the original label. | Input | Output | | --- | --- | | `notify` | `ntf` | | `code` | `cod` | | `media` | `med` | | `system` | `sys` | | `audio` | `aud` | | `power` | `pwr` | ## Popout constraints - Bar thickness is the only orientation-dependent offset shared with popout geometry. - Vertical popouts use the free area to the right, move rightward, and clamp on the y-axis. - Horizontal popouts use the free area below, move downward, and clamp on the x-axis. - The outside-dismiss region excludes the bar in both orientations. ## Acceptance - Horizontal chips share a y-axis and vertical chips share an x-axis in increasing order. - Vertical thickness follows content rather than a fixed width. - The abbreviation self-test passes every required case. - Registered clock geometry does not overlap another bar zone. - Popout state reports the correct origin, constrained axis, and transition direction. - Outside dismissal does not intercept bar clicks. - Returning to horizontal preserves existing behavior. - The compositor keybind toggles orientation. - A human confirms labels, clock, and separator remain legible.