Getting right-to-left right: what Persian projects taught us
RTL support is more than `direction: rtl`. The problems we actually hit in Persian systems, and how we solved them.

Every team shipping its first Persian project assumes RTL is one CSS property. Then numbers, identifiers and email addresses start jumping around.
Take logical properties seriously
Use margin-inline-start rather than margin-left. One stylesheet then serves both directions with no mirrored rewrite.
Bidirectional isolation
Identifiers, phone numbers and URLs inside Persian text need unicode-bidi: isolate, or trailing punctuation renders on the wrong side.
Calendars and numerals
An Iranian user expects the Jalali calendar and Persian digits, while the same date must stay Gregorian and ISO in the database. Separating presentation from storage is not optional.
Directional icons
A "next" arrow must mirror in RTL; a clock icon must not. Every icon needs its own decision.



