@keenmate/pure-admin-core 1.3.0 → 1.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/README.md +25 -1
  2. package/dist/css/main.css +892 -762
  3. package/package.json +6 -5
  4. package/src/scss/_core.scss +4 -0
  5. package/src/scss/_fonts.scss +1 -17
  6. package/src/scss/_rtl-helpers.scss +161 -0
  7. package/src/scss/core-components/_alerts.scss +3 -3
  8. package/src/scss/core-components/_base.scss +4 -3
  9. package/src/scss/core-components/_buttons.scss +9 -9
  10. package/src/scss/core-components/_callouts.scss +14 -9
  11. package/src/scss/core-components/_cards.scss +41 -0
  12. package/src/scss/core-components/_checkbox-lists.scss +6 -6
  13. package/src/scss/core-components/_code.scss +10 -10
  14. package/src/scss/core-components/_command-palette.scss +5 -14
  15. package/src/scss/core-components/_comparison.scss +3 -3
  16. package/src/scss/core-components/_data-display.scss +6 -6
  17. package/src/scss/core-components/_detail-panel.scss +43 -26
  18. package/src/scss/core-components/_file-selector.scss +2 -2
  19. package/src/scss/core-components/_grid.scss +13 -24
  20. package/src/scss/core-components/_lists.scss +12 -12
  21. package/src/scss/core-components/_modals.scss +2 -8
  22. package/src/scss/core-components/_pagers.scss +1 -1
  23. package/src/scss/core-components/_profile.scss +11 -6
  24. package/src/scss/core-components/_settings-panel.scss +22 -9
  25. package/src/scss/core-components/_tables.scss +76 -30
  26. package/src/scss/core-components/_tabs.scss +27 -14
  27. package/src/scss/core-components/_timeline.scss +5 -5
  28. package/src/scss/core-components/_toasts.scss +57 -21
  29. package/src/scss/core-components/_tooltips.scss +11 -6
  30. package/src/scss/core-components/_utilities.scss +80 -31
  31. package/src/scss/core-components/forms/_input-groups.scss +23 -22
  32. package/src/scss/core-components/forms/_input-wrapper.scss +3 -3
  33. package/src/scss/core-components/forms/_query-editor.scss +1 -1
  34. package/src/scss/core-components/layout/_layout-responsive.scss +3 -4
  35. package/src/scss/core-components/layout/_navbar-elements.scss +17 -6
  36. package/src/scss/core-components/layout/_navbar.scss +11 -22
  37. package/src/scss/core-components/layout/_sidebar-states.scss +25 -16
  38. package/src/scss/core-components/layout/_sidebar.scss +22 -16
  39. package/src/scss/variables/_system.scss +1 -0
@@ -79,6 +79,14 @@
79
79
  box-shadow: $shadow-lg;
80
80
  }
81
81
 
82
+ // When containing a detail view, allow body to establish positioning context
83
+ &:has(.pa-detail-view) {
84
+ .pa-table-card__body {
85
+ position: relative;
86
+ overflow: hidden; // Clip detail panel to card boundaries
87
+ }
88
+ }
89
+
82
90
  &__header {
83
91
  padding: $card-header-padding-v $card-header-padding-h;
84
92
  min-height: $card-header-min-height;
@@ -149,12 +157,12 @@
149
157
  // Align first/last column with card header/footer padding
150
158
  th:first-child,
151
159
  td:first-child {
152
- padding-left: $card-header-padding-h;
160
+ padding-inline-start: $card-header-padding-h; // RTL: flips to padding-right
153
161
  }
154
162
 
155
163
  th:last-child,
156
164
  td:last-child {
157
- padding-right: $card-header-padding-h;
165
+ padding-inline-end: $card-header-padding-h; // RTL: flips to padding-left
158
166
  }
159
167
 
160
168
  // Remove bottom border from last row (card border handles it)
@@ -162,13 +170,46 @@
162
170
  border-bottom: none;
163
171
  }
164
172
  }
173
+
174
+ // Detail view inside table card body
175
+ // Supports both inline split-view and overlay modes
176
+ .pa-detail-view {
177
+ height: 100%;
178
+
179
+ // Table inside detail view main area
180
+ .pa-detail-view__main {
181
+ .pa-table {
182
+ border-radius: 0;
183
+
184
+ th:first-child,
185
+ td:first-child {
186
+ padding-inline-start: $card-header-padding-h;
187
+ }
188
+
189
+ th:last-child,
190
+ td:last-child {
191
+ padding-inline-end: $card-header-padding-h;
192
+ }
193
+
194
+ tbody tr:last-child td {
195
+ border-bottom: none;
196
+ }
197
+ }
198
+
199
+ // web-grid inside detail view
200
+ web-grid {
201
+ --wg-cell-padding-left: #{$card-header-padding-h};
202
+ --wg-cell-padding-right: #{$card-header-padding-h};
203
+ }
204
+ }
205
+ }
165
206
  }
166
207
 
167
208
  &__footer {
168
209
  padding: $card-footer-padding-v $card-footer-padding-h;
169
210
  border-top: $border-width-base solid var(--pa-border-color);
170
- border-bottom-left-radius: $card-border-radius;
171
- border-bottom-right-radius: $card-border-radius;
211
+ border-end-start-radius: $card-border-radius; // RTL: bottom-right in RTL
212
+ border-end-end-radius: $card-border-radius; // RTL: bottom-left in RTL
172
213
  background: var(--pa-card-footer-bg);
173
214
  display: flex;
174
215
  justify-content: space-between;
@@ -260,8 +301,16 @@
260
301
  background: transparent;
261
302
  border-bottom: none;
262
303
  border-radius: 0;
263
- padding-left: 0;
264
- padding-right: 0;
304
+ padding-inline: 0;
305
+ }
306
+
307
+ // Body in plain mode with detail view - ensure proper containment
308
+ .pa-table-card__body {
309
+ // When containing overlay detail view, establish positioning context
310
+ &:has(.pa-detail-view--overlay) {
311
+ position: relative;
312
+ overflow: hidden;
313
+ }
265
314
  }
266
315
 
267
316
  // Footer in plain mode
@@ -269,8 +318,7 @@
269
318
  background: transparent;
270
319
  border-top: none;
271
320
  border-radius: 0;
272
- padding-left: 0;
273
- padding-right: 0;
321
+ padding-inline: 0;
274
322
  }
275
323
  }
276
324
  }
@@ -284,7 +332,7 @@
284
332
  th,
285
333
  td {
286
334
  padding: $table-padding-base-v $table-padding-base-h;
287
- text-align: left;
335
+ text-align: start; // RTL: flips to right
288
336
  border-bottom: $border-width-base solid var(--pa-border-color);
289
337
  vertical-align: middle;
290
338
  line-height: $line-height-tight;
@@ -379,13 +427,13 @@
379
427
 
380
428
  // Hover effects
381
429
  @if $table-hover-accent-width > 0 {
382
- // Header alignment - add padding-left instead of border
430
+ // Header alignment - add padding to match hover accent border
383
431
  th:first-child {
384
- padding-left: $table-hover-accent-width + $table-padding-base-h;
432
+ padding-inline-start: $table-hover-accent-width + $table-padding-base-h; // RTL: flips to padding-right
385
433
  }
386
434
 
387
435
  tbody tr {
388
- border-#{$table-hover-accent-position}: #{$table-hover-accent-width} solid transparent;
436
+ border-inline-start: #{$table-hover-accent-width} solid transparent; // RTL: flips to border-right
389
437
  transition: border-color $transition-normal $easing-smooth;
390
438
  }
391
439
  }
@@ -395,7 +443,7 @@
395
443
 
396
444
  // Apply hover accent if enabled
397
445
  @if $table-hover-accent-width > 0 {
398
- border-#{$table-hover-accent-position}-color: var(--pa-table-hover-accent-color);
446
+ border-inline-start-color: var(--pa-table-hover-accent-color); // RTL: flips to border-right-color
399
447
  }
400
448
  }
401
449
 
@@ -547,7 +595,7 @@
547
595
  &__count {
548
596
  color: var(--pa-text-color-2);
549
597
  font-size: $font-size-xs;
550
- margin-left: $spacing-xs;
598
+ margin-inline-start: $spacing-xs; // RTL: flips to margin-right
551
599
  }
552
600
  }
553
601
 
@@ -575,13 +623,13 @@
575
623
  .pa-virtual-table__header-cell {
576
624
  padding: $virtual-table-cell-padding-v $virtual-table-cell-padding-h;
577
625
  font-weight: $font-weight-semibold;
578
- border-right: $border-width-base solid var(--pa-border-color);
626
+ border-inline-end: $border-width-base solid var(--pa-border-color); // RTL: flips to border-left
579
627
  background: var(--pa-table-header-bg);
580
628
  color: var(--pa-text-color-1);
581
629
  }
582
630
 
583
631
  .pa-virtual-table__header-cell:last-child {
584
- border-right: none;
632
+ border-inline-end: none;
585
633
  }
586
634
 
587
635
  .pa-virtual-table__body {
@@ -596,7 +644,7 @@
596
644
 
597
645
  // Setup for hover accent border (same as pa-table)
598
646
  @if $table-hover-accent-width > 0 {
599
- border-#{$table-hover-accent-position}: #{$table-hover-accent-width} solid transparent;
647
+ border-inline-start: #{$table-hover-accent-width} solid transparent; // RTL: flips to border-right
600
648
  transition: border-color $transition-normal $easing-smooth;
601
649
  }
602
650
  }
@@ -610,13 +658,13 @@
610
658
 
611
659
  // Apply hover accent if enabled (same as pa-table)
612
660
  @if $table-hover-accent-width > 0 {
613
- border-#{$table-hover-accent-position}-color: var(--pa-table-hover-accent-color);
661
+ border-inline-start-color: var(--pa-table-hover-accent-color); // RTL: flips to border-right-color
614
662
  }
615
663
  }
616
664
 
617
665
  .pa-virtual-table__cell {
618
666
  padding: $virtual-table-cell-padding-v $virtual-table-cell-padding-h;
619
- border-right: $border-width-base solid var(--pa-border-color);
667
+ border-inline-end: $border-width-base solid var(--pa-border-color); // RTL: flips to border-left
620
668
  overflow: hidden;
621
669
  text-overflow: ellipsis;
622
670
  white-space: nowrap;
@@ -625,7 +673,7 @@
625
673
  }
626
674
 
627
675
  .pa-virtual-table__cell:last-child {
628
- border-right: none;
676
+ border-inline-end: none;
629
677
  }
630
678
 
631
679
  // Responsive Tables - Stackable Layout
@@ -637,8 +685,7 @@
637
685
  -webkit-overflow-scrolling: touch; // Smooth scrolling on iOS
638
686
 
639
687
  // Show subtle scroll hint with border
640
- border-left: $border-width-base solid var(--pa-border-color);
641
- border-right: $border-width-base solid var(--pa-border-color);
688
+ border-inline: $border-width-base solid var(--pa-border-color); // RTL: no change needed (symmetric)
642
689
  }
643
690
 
644
691
  // Mobile: Stack into cards
@@ -658,7 +705,7 @@
658
705
 
659
706
  // Reset hover accent border for mobile
660
707
  @if $table-hover-accent-width > 0 {
661
- border-#{$table-hover-accent-position}: $border-width-base solid var(--pa-border-color) !important;
708
+ border-inline-start: $border-width-base solid var(--pa-border-color) !important; // RTL: flips
662
709
  }
663
710
 
664
711
  &:last-child {
@@ -669,7 +716,7 @@
669
716
  // Make each cell a row within the card
670
717
  tbody td {
671
718
  display: block;
672
- text-align: right;
719
+ text-align: end; // RTL: flips to left (value on end side)
673
720
  padding: $table-responsive-card-padding;
674
721
  position: relative;
675
722
  border-bottom: $border-width-base solid var(--pa-border-color);
@@ -683,15 +730,15 @@
683
730
  &::before {
684
731
  content: attr(data-label);
685
732
  position: absolute;
686
- left: $table-responsive-card-padding;
733
+ inset-inline-start: $table-responsive-card-padding; // RTL: flips to right
687
734
  top: $table-responsive-card-padding;
688
735
  font-weight: $table-responsive-label-font-weight;
689
- text-align: left;
736
+ text-align: start; // RTL: flips to right
690
737
  width: $table-responsive-label-width;
691
738
  }
692
739
 
693
- // Value aligned to the right
694
- padding-left: calc($table-responsive-label-width + $table-responsive-card-padding * 2);
740
+ // Value aligned to the end (leave space for label on start side)
741
+ padding-inline-start: calc($table-responsive-label-width + $table-responsive-card-padding * 2); // RTL: flips
695
742
  }
696
743
 
697
744
  // Disable col-auto effect in responsive view
@@ -730,8 +777,7 @@
730
777
  display: block;
731
778
  overflow-x: auto;
732
779
  -webkit-overflow-scrolling: touch;
733
- border-left: $border-width-base solid var(--pa-border-color);
734
- border-right: $border-width-base solid var(--pa-border-color);
780
+ border-inline: $border-width-base solid var(--pa-border-color); // RTL: no change needed (symmetric)
735
781
  }
736
782
 
737
783
  // Mobile: CSS Grid layout
@@ -119,19 +119,22 @@
119
119
  &--vertical {
120
120
  flex-direction: column;
121
121
  border-bottom: none;
122
- border-right: $border-width-base solid var(--pa-border-color);
122
+ border-inline-end: $border-width-base solid var(--pa-border-color); // RTL: flips to border-left
123
123
  gap: 0;
124
124
  margin-bottom: 0;
125
- padding-right: 0;
125
+ padding-inline-end: 0; // RTL: flips to padding-left
126
126
  width: fit-content;
127
127
  min-width: max-content;
128
128
 
129
129
  .pa-tabs__item {
130
130
  justify-content: flex-start;
131
131
  border-bottom: none;
132
- border-right: $border-width-medium solid transparent;
132
+ border-inline-end: $border-width-medium solid transparent; // RTL: flips to border-left
133
133
  padding: $spacing-sm;
134
- border-radius: $border-radius 0 0 $border-radius;
134
+ border-start-start-radius: $border-radius; // RTL: top-right in RTL
135
+ border-end-start-radius: $border-radius; // RTL: bottom-right in RTL
136
+ border-start-end-radius: 0;
137
+ border-end-end-radius: 0;
135
138
  gap: $tabs-vertical-item-gap;
136
139
  white-space: nowrap;
137
140
  min-height: 4rem; // Default height for vertical tabs
@@ -141,7 +144,7 @@
141
144
  }
142
145
 
143
146
  &--active {
144
- border-right-color: $accent-color;
147
+ border-inline-end-color: $accent-color; // RTL: flips to border-left-color
145
148
  background-color: rgba($accent-color, $tabs-vertical-active-opacity);
146
149
  }
147
150
 
@@ -224,14 +227,24 @@
224
227
  background: linear-gradient(to right, var(--pa-main-bg), color-mix(in srgb, var(--pa-main-bg) 80%, transparent));
225
228
  }
226
229
 
227
- &--left {
228
- left: 0;
230
+ &--left,
231
+ &--start {
232
+ inset-inline-start: 0; // RTL: flips to right
229
233
  background: linear-gradient(to right, color-mix(in srgb, var(--pa-main-bg) 95%, transparent), transparent);
234
+
235
+ [dir="rtl"] & {
236
+ background: linear-gradient(to left, color-mix(in srgb, var(--pa-main-bg) 95%, transparent), transparent);
237
+ }
230
238
  }
231
239
 
232
- &--right {
233
- right: 0;
240
+ &--right,
241
+ &--end {
242
+ inset-inline-end: 0; // RTL: flips to left
234
243
  background: linear-gradient(to left, color-mix(in srgb, var(--pa-main-bg) 95%, transparent), transparent);
244
+
245
+ [dir="rtl"] & {
246
+ background: linear-gradient(to right, color-mix(in srgb, var(--pa-main-bg) 95%, transparent), transparent);
247
+ }
235
248
  }
236
249
 
237
250
  &--visible {
@@ -373,7 +386,7 @@
373
386
  // Overflow toggle for tabs that don't fit
374
387
  .pa-tabs__overflow {
375
388
  position: relative;
376
- margin-left: auto;
389
+ margin-inline-start: auto; // RTL: flips to margin-right
377
390
  flex-shrink: 0;
378
391
  }
379
392
 
@@ -390,7 +403,7 @@
390
403
  color: var(--pa-text-color-2);
391
404
  cursor: pointer;
392
405
  transition: all $transition-fast $easing-snappy;
393
- border-left: $border-width-base solid var(--pa-border-color);
406
+ border-inline-start: $border-width-base solid var(--pa-border-color); // RTL: flips to border-right
394
407
  margin: (-$card-header-padding-v) (-$card-header-padding-h) (-$card-header-padding-v) 0;
395
408
  box-sizing: content-box;
396
409
  height: $card-header-min-height;
@@ -423,7 +436,7 @@
423
436
  .pa-tabs__overflow-menu {
424
437
  position: absolute;
425
438
  top: $card-header-min-height;
426
- right: 0;
439
+ inset-inline-end: 0; // RTL: flips to left
427
440
  min-width: 15rem;
428
441
  background: var(--pa-card-bg);
429
442
  border: $card-border-width solid var(--pa-border-color);
@@ -443,7 +456,7 @@
443
456
  border: none;
444
457
  border-bottom: none;
445
458
  border-radius: 0;
446
- text-align: left;
459
+ text-align: start; // RTL: flips to right
447
460
  white-space: nowrap;
448
461
 
449
462
  &:hover {
@@ -480,7 +493,7 @@
480
493
 
481
494
  // Add divider between tabs and content (gap already provides spacing)
482
495
  .pa-tabs--vertical {
483
- border-right: $border-width-base solid var(--pa-border-color);
496
+ border-inline-end: $border-width-base solid var(--pa-border-color); // RTL: flips to border-left
484
497
 
485
498
  // Make tab items full width so active border reaches divider
486
499
  .pa-tabs__item {
@@ -13,11 +13,11 @@
13
13
  position: relative;
14
14
  }
15
15
 
16
- // Variant 1: Simple left-aligned timeline (like Timeline #1)
16
+ // Variant 1: Simple start-aligned timeline (like Timeline #1)
17
17
  &--simple {
18
- border-left: $timeline-simple-line-width solid var(--pa-border-color);
19
- margin-left: $timeline-simple-margin-left;
20
- padding-left: $timeline-simple-padding-left;
18
+ border-inline-start: $timeline-simple-line-width solid var(--pa-border-color); // RTL: flips to right
19
+ margin-inline-start: $timeline-simple-margin-left; // RTL: flips to right
20
+ padding-inline-start: $timeline-simple-padding-left; // RTL: flips to right
21
21
 
22
22
  .pa-timeline__item {
23
23
  padding-bottom: $spacing-lg;
@@ -32,7 +32,7 @@
32
32
  &::before {
33
33
  content: '';
34
34
  position: absolute;
35
- left: $timeline-simple-dot-offset;
35
+ inset-inline-start: $timeline-simple-dot-offset; // RTL: flips to right
36
36
  top: 0;
37
37
  width: $timeline-simple-dot-size;
38
38
  height: $timeline-simple-dot-size;
@@ -15,38 +15,47 @@
15
15
  flex-direction: column;
16
16
  gap: $spacing-md;
17
17
 
18
- // Position variations
19
- &--top-right {
18
+ // Position variations - using logical properties for RTL support
19
+ &--top-end {
20
20
  top: $spacing-lg;
21
- right: $spacing-lg;
21
+ inset-inline-end: $spacing-lg; // RTL: flips to left
22
22
  }
23
23
 
24
- &--top-left {
24
+ &--top-start {
25
25
  top: $spacing-lg;
26
- left: $spacing-lg;
26
+ inset-inline-start: $spacing-lg; // RTL: flips to right
27
27
  }
28
28
 
29
- &--bottom-right {
29
+ &--bottom-end {
30
30
  bottom: $spacing-lg;
31
- right: $spacing-lg;
31
+ inset-inline-end: $spacing-lg; // RTL: flips to left
32
32
  }
33
33
 
34
- &--bottom-left {
34
+ &--bottom-start {
35
35
  bottom: $spacing-lg;
36
- left: $spacing-lg;
36
+ inset-inline-start: $spacing-lg; // RTL: flips to right
37
37
  }
38
38
 
39
39
  &--top-center {
40
40
  top: $spacing-lg;
41
- left: 50%;
41
+ inset-inline-start: 50%;
42
42
  transform: translateX(-50%);
43
+
44
+ [dir="rtl"] & {
45
+ transform: translateX(50%);
46
+ }
43
47
  }
44
48
 
45
49
  &--bottom-center {
46
50
  bottom: $spacing-lg;
47
- left: 50%;
51
+ inset-inline-start: 50%;
48
52
  transform: translateX(-50%);
53
+
54
+ [dir="rtl"] & {
55
+ transform: translateX(50%);
56
+ }
49
57
  }
58
+
50
59
  }
51
60
 
52
61
  // ===== TOAST ITEM =====
@@ -81,9 +90,37 @@
81
90
  transform: translateX(100%);
82
91
  }
83
92
 
84
- // Left position animations
85
- .pa-toast-container--top-left &,
86
- .pa-toast-container--bottom-left & {
93
+ // Start position animations (left in LTR, right in RTL)
94
+ .pa-toast-container--top-start &,
95
+ .pa-toast-container--bottom-start & {
96
+ transform: translateX(-100%);
97
+
98
+ &.pa-toast--show {
99
+ transform: translateX(0);
100
+ }
101
+
102
+ &.pa-toast--hide {
103
+ transform: translateX(-100%);
104
+ }
105
+ }
106
+
107
+ // RTL: reverse animation direction for start positions
108
+ [dir="rtl"] .pa-toast-container--top-start &,
109
+ [dir="rtl"] .pa-toast-container--bottom-start & {
110
+ transform: translateX(100%);
111
+
112
+ &.pa-toast--show {
113
+ transform: translateX(0);
114
+ }
115
+
116
+ &.pa-toast--hide {
117
+ transform: translateX(100%);
118
+ }
119
+ }
120
+
121
+ // RTL: reverse animation direction for end positions
122
+ [dir="rtl"] .pa-toast-container--top-end &,
123
+ [dir="rtl"] .pa-toast-container--bottom-end & {
87
124
  transform: translateX(-100%);
88
125
 
89
126
  &.pa-toast--show {
@@ -175,7 +212,7 @@
175
212
  .pa-toast__progress {
176
213
  position: absolute;
177
214
  bottom: 0;
178
- left: 0;
215
+ inset-inline-start: 0; // RTL: flips to right
179
216
  height: $toast-progress-height;
180
217
  background-color: currentColor;
181
218
  opacity: 0.3;
@@ -258,18 +295,17 @@
258
295
 
259
296
  @media (max-width: $mobile-breakpoint) {
260
297
  .pa-toast-container {
261
- left: $spacing-md !important;
262
- right: $spacing-md !important;
298
+ inset-inline: $spacing-md !important; // RTL: full width on mobile
263
299
  transform: none !important;
264
300
 
265
- &--top-right,
266
- &--top-left,
301
+ &--top-end,
302
+ &--top-start,
267
303
  &--top-center {
268
304
  top: $spacing-md;
269
305
  }
270
306
 
271
- &--bottom-right,
272
- &--bottom-left,
307
+ &--bottom-end,
308
+ &--bottom-start,
273
309
  &--bottom-center {
274
310
  bottom: $spacing-md;
275
311
  }
@@ -48,7 +48,7 @@
48
48
  // Multiline tooltip variant
49
49
  &--multiline::before {
50
50
  white-space: normal;
51
- text-align: left;
51
+ text-align: start; // RTL: flips to right
52
52
  width: $tooltip-multiline-width;
53
53
  max-width: $tooltip-multiline-width;
54
54
  line-height: $line-height-base;
@@ -414,7 +414,7 @@
414
414
  font-size: $font-size-sm;
415
415
  line-height: $line-height-base;
416
416
  color: var(--pa-text-color-1);
417
- text-align: left; // Reset inherited alignment for rich content
417
+ text-align: start; // RTL: flips to right
418
418
 
419
419
  p {
420
420
  margin: 0 0 $spacing-sm 0;
@@ -435,7 +435,7 @@
435
435
 
436
436
  ul, ol {
437
437
  margin: $spacing-sm 0;
438
- padding-left: $spacing-lg;
438
+ padding-inline-start: $spacing-lg; // RTL: flips to padding-right
439
439
  }
440
440
 
441
441
  code {
@@ -485,11 +485,16 @@
485
485
  text-align: center;
486
486
  }
487
487
 
488
- &--right &__body {
489
- text-align: right;
488
+ &--end &__body {
489
+ text-align: end; // RTL: flips to left
490
490
  }
491
491
  }
492
492
 
493
+ // Legacy class for backward compatibility
494
+ .pa-popover--right .pa-popover__body {
495
+ text-align: end;
496
+ }
497
+
493
498
  // ========================================
494
499
  // Floating UI Tooltip (Portal Rendering)
495
500
  // ========================================
@@ -510,7 +515,7 @@
510
515
  // Multiline variant
511
516
  &.pa-tooltip--multiline {
512
517
  white-space: normal;
513
- text-align: left;
518
+ text-align: start; // RTL: flips to right
514
519
  max-width: $tooltip-multiline-max-width;
515
520
  }
516
521