Nine organic, minimal loading states for the Landjourney platform — derived from the brand's green palette and the stacked geometry of the logo. All pure CSS + inline SVG. Drop into any Angular template.
--lj-size and --lj-color — and default to the brand green (#2b9663). They use currentColor where possible so they adapt when placed on buttons, dark surfaces, or status tiles. Motion is kept short (≈1.4s), soft, and strictly eased — no bounces, no springs. All respect prefers-reduced-motion.
Sweep Arc at 18px · inherits the button's white color.
Breathing Dot at 14px · quiet enough not to grab attention.
Tri-Stack Pulse with a soft scrim over skeleton rows.
| Loader | Use for | Avoid for | |
|---|---|---|---|
| 01 | Stacked Fill | App boot, first paint, splash / route transitions > 1s | Inline or in-button use |
| 02 | Sweep Arc | The default. Buttons, inline actions, small inline loads | Only if animation has to feel distinctly Landjourney |
| 03 | Tri-Stack Pulse | Card and section overlays during a re-fetch | Tiny sizes (< 24px) — detail is lost |
| 04 | Breathing Dot | Inline status in text; quiet "is calculating" moments | Anything over 2s — feels unresponsive |
| 05 | Soft Orbit | Data fetches, tables, list refreshes | Inside buttons (too visually busy) |
| 06 | Wave Bar | AI / computation / messaging ("thinking") | Generic page loads — implies active processing |
| 07 | Leaf Sway | Long-running tasks, onboarding steps, document processing | Quick actions — the slow cadence feels wrong |
| 08 | Dotted Ring | Neutral fallback at any size; legacy screens | When brand recognition matters (use 01 / 03) |
| 09 | Progress Strand | Top-of-page indeterminate progress, between route changes | Anywhere a circular form fits better |
Every loader is a single <span> wrapping inline SVG, with one shared stylesheet. Wrap the whole set in a standalone lj-loader component so usage stays one-line.