| TITAN-LOADING-01 | Match the indicator to what’s known: a real value → ProgressBar; a known content shape → Skeleton; neither → Spinner. | Each primitive communicates a different amount of information. Using the wrong one either overstates what’s known or wastes information that was available. See TITAN-SKL-02. |
| TITAN-LOADING-02 | Show no loading indicator at all for a wait expected to resolve in under roughly 300ms. | Below that, the indicator itself becomes the most noticeable thing on screen — it appears and disappears faster than the reader can register what it was, which reads as a flicker rather than feedback. |
| TITAN-LOADING-03 | A skeleton screen matches the real layout — same line count, widths, and spacing as the content it replaces. | Its only value is preparing the reader for a shape. A mismatch makes the page jump on load, which undoes the reason to use one at all — TITAN-SKL-01. |
| TITAN-LOADING-04 | One animation, one loading primitive, per region. Do not mix Skeleton’s pulse with wave, or a skeleton with a spinner, in the same view. | Two loading rhythms in one region read as two different systems, not one thing loading — TITAN-SKL-04. |
| TITAN-LOADING-05 | A loading state always resolves — to content, an EmptyState, or a handoff to Error handling. It never simply stops appearing. | An indefinite loading state is a hang the interface is disguising as progress — TITAN-SKL-03. |
| TITAN-LOADING-06 | A skeleton screen used on more than one page is built once and shared, not re-implemented per application. | TITAN-GAP-31 records three independent copies of the same TabLoadingSkeleton, 21 instances each. That duplication is the measured cost of not doing this. |
| TITAN-LOADING-07 | Under prefers-reduced-motion: reduce, pass animation={false} to every Skeleton on the screen. | The component does not honor the preference itself — TITAN-SKL-05, TITAN-GAP-08. This is a call-site workaround, not a fix. |
| TITAN-LOADING-08 | The loading region carries aria-busy and announces completion once; the placeholder itself is hidden from assistive technology. | Grey shapes carry no information to a screen reader. The announcement belongs to the region, and only on completion — TITAN-SKL-06. |