Landing bar
The public page's header and its curtain: the lockup, three section links and the two ways in, floating over the first card with no ground of its own until the page moves.
Since Light 2
Synced from the product, 2026-09-30 (P16). The bar was rewritten whole with the page. It is fixed over the first card, inside the landing's inset, and it has no ground while the page is at its top, so the promise under it reads through nothing; the moment the page moves it gains .is-scrolled, a frosted surface at 80% with a hairline and a shadow cast in --tone-shade, and its corners round to 1.25rem. The curtain is this file's too: once per load, only when the boot script ran, a pale sheet with the lockup, a count from 000 to 100 and a petrol line, which then lifts off the top.
Live below, rendered by the real css inside a .landing pinned to data-theme="light", white in the dark stand too, as node 1.1 is for a person who chose dark in Settings (P16).
For people who are not into finance
Tendd shows every subscription and recurring charge in one calm view, so you always know what is going out. No spreadsheets, no judgment, no surprises.
No bank connection needed to start. Read-only, we cannot move your money.
Once the page has moved: .is-scrolled
Tendd shows every subscription and recurring charge in one calm view, so you always know what is going out. No spreadsheets, no judgment, no surprises.
.lp-navfixed at the landing's inset,--lp-nav-htall (64px, 56 under 40rem), no ground at rest. On the stand it is fixed to its stage, which is a containing block.lp-nav.is-scrolledthe frosted ground: surface at 80%, an 18px blur, a hairline and a shadow in--tone-shade. Set by the page script on the first scroll.lp-home .lockupthe lockup at this bar's size, the mark 28px and the word at--type-title, drawn by brand-mark.css and brand-wordmark.css; this file places it. It wears.signature, the one carrier of the arrival (U14).lp-nav-linksthree anchors to blocks of the page, with an underline that grows from the left under a pointer.lp-nav-end"Sign in" as a text action.lp-sign, and the small pill.lp-btn.lp-smfrom landing button. On the landing a plain click on either opens the dialog (P17).lp-loaderthe curtain:.lp-ld-brand,.lp-ld-count,.lp-ld-bar. Drawn only under.landing.lp-js, lifted by.is-lift, removed by.is-gone
The curtain is not on this stand. It exists only when the boot script has run (.landing.lp-js), and a stand specimen carries no script; under reduced motion it is never drawn at all.
Behaviour on width
Container points, all of this file: at 68.75rem the links close up, at 60rem they leave rather than fold into a menu (they point at blocks a phone reaches by scrolling), and under 40rem "Sign in" leaves the bar too, the bar shortens to 56px and the lockup steps down. The small pill tightens once more under 23.75rem (landing-button.css). The bar never wraps. On this stand the three links never show: the widest stage the stand builds is about 926px of container (_page.css, "a stage that has to cross 900"), under the 60rem at which they arrive. They are read on the landing from a 960px window up.
U3, composition and context. Exactly one .appbar per screen, and none on the landing: the landing carries this header instead. U14, context. The brand moves once on arrival and only here, on the public page's bar; the 54 app pages that carry a lockup do not carry .signature. Full table: Usage rules.
It stopped being sticky and opaque. Until 2026-09-26 the bar was the one sticky thing in the product with an opaque fill and no blur "because this system has no blur". Light 2 is cards floating over paper, and the frosted ground is the landing's own glass (--lp-glass family, landing-shell.css). Blur stays out of the app.
What it was, until 2026-09-26
Synced from the product, 2026-09-30 (P16). This section and every one after it, down to "Where it comes from", describe this component as it stood before Light 2 replaced the public page on 2026-09-26. Its classes then were .lp-links, .signin and a .btn.primary, an opaque sticky bar with the links appearing at 47.5rem. None of it is a present-tense claim about the product any more; what is true now is Since Light 2 above. It is kept as the record, because a stand amends its history and does not delete it.
It is not the app bar. .appbar holds one screen's identity and at most two slots, and past the tablet point it leaves the top of the glass entirely and becomes the head of the rail. This one stays a bar at every width, holds a set of anchors, and never moves: a public page has no rail to move into.
It is the one sticky thing in this product. Inside the app nothing sticks to the top, because the content is what the person came for. Here the one action is what the page is for, and a visitor who has read as far as the pricing should not have to scroll back up to take it. The fill is opaque, so nothing shows through and no blur is needed; this system has no blur and gains none here.
Anatomy, until 2026-09-26
- the lockup drawn by
brand-mark.cssandbrand-wordmark.css. This file only places it, and it had to:.lockuptakes its row and its gap from.app .appbar .lockup, so on a page with no.appin front of it the mark and the word stacked. Found by looking at the built page .lp-linksthree anchors to blocks of this page, hidden below the tablet point. Not folded into a menu: a hamburger that opens a list of anchors to content already under the thumb is a control that exists to look complete.signina text action and not a second button. Two buttons in a header read as a choice between two ways to start, and there is only one: the other is a way back.btn.primarythe same button every screen carries, at the same emphasis. One filled action in this zone, which is the button's own rule
Behaviour on width
One point, the registered 47.5rem: the section links appear and the bar grows from 64px to 72. The links use display: none and not visibility, so they leave the accessibility tree with the pixels. On a phone the page is the navigation.
Limits, until 2026-09-26
The bar wraps, and that is the reader's text size taken seriously. At a 24px root the two actions alone measure 263px, and with the lockup beside them the bar ran past a 390 screen. The alternatives were hiding Sign in on a phone, which removes a control somebody may be looking for, and shrinking the button, which is a size the button component owns. Wrapping costs one row of height at a text size most people never set.
Where it comes from
Drawn by design/system/components/landing-bar.css through ../system/index.css, the same entry point a product screen loads, and synced byte for byte from the product on 2026-09-30. It stands on the coloured landing, fixed over its first card. The grey wireframes/index.html is frozen at the structure before Light 2 and does not carry it: a component that arrived with a founder's decision after the grey closed, like the brand mark before it. Registered in docs/inventory.md and in _nav.js, in the organism group.