@byline/admin 6.10.1 → 6.11.0

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 (103) hide show
  1. package/dist/fields/array/array-field_module.css +57 -53
  2. package/dist/fields/blocks/blocks-field_module.css +134 -130
  3. package/dist/fields/checkbox/checkbox-field_module.css +6 -2
  4. package/dist/fields/code/code-field_module.css +57 -53
  5. package/dist/fields/datetime/datetime-field_module.css +6 -2
  6. package/dist/fields/draggable-context-menu_module.css +77 -73
  7. package/dist/fields/field-renderer_module.css +12 -8
  8. package/dist/fields/file/file-field_module.css +133 -129
  9. package/dist/fields/file/file-upload-field_module.css +67 -63
  10. package/dist/fields/group/group-field_module.css +25 -21
  11. package/dist/fields/image/image-field_module.css +123 -119
  12. package/dist/fields/image/image-upload-field_module.css +81 -77
  13. package/dist/fields/locale-badge_module.css +28 -24
  14. package/dist/fields/relation/relation-display_module.css +20 -16
  15. package/dist/fields/relation/relation-field_module.css +149 -145
  16. package/dist/fields/relation/relation-picker_module.css +187 -183
  17. package/dist/fields/relation/relation-summary_module.css +34 -30
  18. package/dist/fields/select/select-field_module.css +9 -5
  19. package/dist/fields/sortable-item_module.css +126 -122
  20. package/dist/fields/text/text-field_module.css +8 -4
  21. package/dist/fields/text-area/text-area-field_module.css +8 -4
  22. package/dist/forms/available-locales-widget_module.css +19 -15
  23. package/dist/forms/document-actions_module.css +120 -116
  24. package/dist/forms/form-renderer_module.css +247 -243
  25. package/dist/forms/path-widget_module.css +29 -25
  26. package/dist/forms/scheduled-publication-control_module.css +76 -72
  27. package/dist/forms/tree-placement-widget_module.css +61 -57
  28. package/dist/modules/admin-account/components/change-password_module.css +26 -22
  29. package/dist/modules/admin-account/components/container_module.css +93 -89
  30. package/dist/modules/admin-account/components/preferences_module.css +37 -33
  31. package/dist/modules/admin-account/components/theme-switch_module.css +16 -12
  32. package/dist/modules/admin-account/components/update_module.css +26 -22
  33. package/dist/modules/admin-permissions/components/inspector_module.css +197 -193
  34. package/dist/modules/admin-roles/components/create_module.css +26 -22
  35. package/dist/modules/admin-roles/components/permissions_module.css +159 -155
  36. package/dist/modules/admin-roles/components/update_module.css +26 -22
  37. package/dist/modules/admin-users/components/create_module.css +39 -35
  38. package/dist/modules/admin-users/components/roles_module.css +65 -61
  39. package/dist/modules/admin-users/components/set-password_module.css +29 -25
  40. package/dist/modules/admin-users/components/update_module.css +32 -28
  41. package/dist/modules/analytics/components/dashboard_module.css +268 -264
  42. package/dist/modules/analytics/components/timeseries_module.css +192 -188
  43. package/dist/modules/auth/components/passkey-manager_module.css +87 -83
  44. package/dist/modules/auth/components/sign-in-form_module.css +68 -64
  45. package/dist/presentation/group_module.css +19 -15
  46. package/dist/presentation/row_module.css +17 -13
  47. package/dist/presentation/tabs_module.css +231 -227
  48. package/dist/widgets/diff-viewer/diff-modal_module.css +58 -54
  49. package/dist/widgets/source-locale-badge/source-locale-badge_module.css +12 -8
  50. package/dist/widgets/status-badge/status-badge_module.css +20 -16
  51. package/package.json +9 -8
  52. package/src/fields/array/array-field.module.css +71 -55
  53. package/src/fields/blocks/blocks-field.module.css +173 -156
  54. package/src/fields/checkbox/checkbox-field.module.css +17 -3
  55. package/src/fields/code/code-editor.tsx +2 -0
  56. package/src/fields/code/code-field.module.css +75 -59
  57. package/src/fields/datetime/datetime-field.module.css +19 -3
  58. package/src/fields/draggable-context-menu.module.css +108 -92
  59. package/src/fields/field-renderer.module.css +26 -10
  60. package/src/fields/file/file-field.module.css +147 -131
  61. package/src/fields/file/file-upload-field.module.css +91 -75
  62. package/src/fields/group/group-field.module.css +42 -26
  63. package/src/fields/image/image-field.module.css +152 -136
  64. package/src/fields/image/image-upload-field.module.css +107 -91
  65. package/src/fields/locale-badge.module.css +43 -27
  66. package/src/fields/relation/relation-display.module.css +37 -21
  67. package/src/fields/relation/relation-field.module.css +168 -152
  68. package/src/fields/relation/relation-picker.module.css +207 -191
  69. package/src/fields/relation/relation-summary.module.css +52 -36
  70. package/src/fields/select/select-field.module.css +23 -7
  71. package/src/fields/sortable-item.module.css +143 -127
  72. package/src/fields/text/text-field.module.css +21 -5
  73. package/src/fields/text-area/text-area-field.module.css +21 -5
  74. package/src/forms/available-locales-widget.module.css +39 -23
  75. package/src/forms/document-actions.module.css +139 -123
  76. package/src/forms/form-layout-styles.test.node.ts +12 -4
  77. package/src/forms/form-renderer.module.css +312 -296
  78. package/src/forms/path-widget.module.css +44 -28
  79. package/src/forms/scheduled-publication-control.module.css +104 -91
  80. package/src/forms/tree-placement-widget.module.css +80 -64
  81. package/src/modules/admin-account/components/change-password.module.css +42 -26
  82. package/src/modules/admin-account/components/container.module.css +129 -113
  83. package/src/modules/admin-account/components/preferences.module.css +56 -40
  84. package/src/modules/admin-account/components/theme-switch.module.css +32 -16
  85. package/src/modules/admin-account/components/update.module.css +42 -26
  86. package/src/modules/admin-permissions/components/inspector.module.css +255 -239
  87. package/src/modules/admin-roles/components/create.module.css +42 -26
  88. package/src/modules/admin-roles/components/permissions.module.css +204 -201
  89. package/src/modules/admin-roles/components/update.module.css +42 -26
  90. package/src/modules/admin-users/components/create.module.css +58 -42
  91. package/src/modules/admin-users/components/roles.module.css +96 -86
  92. package/src/modules/admin-users/components/set-password.module.css +46 -30
  93. package/src/modules/admin-users/components/update.module.css +49 -33
  94. package/src/modules/analytics/components/dashboard.module.css +322 -306
  95. package/src/modules/analytics/components/timeseries.module.css +237 -221
  96. package/src/modules/auth/components/passkey-manager.module.css +98 -84
  97. package/src/modules/auth/components/sign-in-form.module.css +85 -69
  98. package/src/presentation/group.module.css +36 -20
  99. package/src/presentation/row.module.css +32 -16
  100. package/src/presentation/tabs.module.css +243 -227
  101. package/src/widgets/diff-viewer/diff-modal.module.css +71 -55
  102. package/src/widgets/source-locale-badge/source-locale-badge.module.css +25 -9
  103. package/src/widgets/status-badge/status-badge.module.css +35 -19
@@ -1,3 +1,17 @@
1
+ @layer base,
2
+ byline-base,
3
+ theme,
4
+ byline-theme,
5
+ byline-functional,
6
+ byline-typography,
7
+ components,
8
+ byline-components,
9
+ overrides,
10
+ byline-utilities,
11
+ utilities;
12
+
13
+ @layer byline-components.primitives, byline-components.cms;
14
+
1
15
  /**
2
16
  * AnalyticsDashboard — the installation-level analytics page.
3
17
  *
@@ -22,378 +36,380 @@
22
36
  * Amber is deliberately unused here: it already means "draft".
23
37
  */
24
38
 
25
- .header,
26
- :global(.byline-analytics-header) {
27
- display: flex;
28
- align-items: flex-end;
29
- justify-content: space-between;
30
- gap: 1rem 1.5rem;
31
- flex-wrap: wrap;
32
- margin-bottom: 1.25rem;
33
- padding-bottom: 1rem;
34
- border-bottom: var(--border-width-thin) var(--border-style-solid) var(--gray-200);
35
- }
39
+ @layer byline-components.cms {
40
+ .header,
41
+ :global(.byline-analytics-header) {
42
+ display: flex;
43
+ align-items: flex-end;
44
+ justify-content: space-between;
45
+ gap: 1rem 1.5rem;
46
+ flex-wrap: wrap;
47
+ margin-bottom: 1.25rem;
48
+ padding-bottom: 1rem;
49
+ border-bottom: var(--border-width-thin) var(--border-style-solid) var(--gray-200);
50
+ }
36
51
 
37
- .title,
38
- :global(.byline-analytics-title) {
39
- margin: 0;
40
- font-size: 1.875rem;
41
- font-weight: 650;
42
- letter-spacing: -0.02em;
43
- }
52
+ .title,
53
+ :global(.byline-analytics-title) {
54
+ margin: 0;
55
+ font-size: 1.875rem;
56
+ font-weight: 650;
57
+ letter-spacing: -0.02em;
58
+ }
44
59
 
45
- .help,
46
- :global(.byline-analytics-help) {
47
- max-width: 48ch;
48
- margin: 0.35rem 0 0;
49
- font-size: 0.8125rem;
50
- }
60
+ .help,
61
+ :global(.byline-analytics-help) {
62
+ max-width: 48ch;
63
+ margin: 0.35rem 0 0;
64
+ font-size: 0.8125rem;
65
+ }
51
66
 
52
- /* `Card.Title` defaults to 1.8rem bold — larger than this page's own heading,
67
+ /* `Card.Title` defaults to 1.8rem bold — larger than this page's own heading,
53
68
  which inverted the hierarchy. Bring the section titles below the h1 while
54
69
  keeping them clearly headings. Scoped to the analytics cards so no other
55
70
  Card consumer shifts. */
56
- .chartCard :global(.byline-card-title),
57
- .list :global(.byline-card-title) {
58
- font-size: 1.25rem;
59
- font-weight: 600;
60
- letter-spacing: normal;
61
- }
71
+ .chartCard :global(.byline-card-title),
72
+ .list :global(.byline-card-title) {
73
+ font-size: 1.25rem;
74
+ font-weight: 600;
75
+ letter-spacing: normal;
76
+ }
62
77
 
63
- .chartCard :global(.byline-card-description),
64
- .list :global(.byline-card-description) {
65
- font-size: 0.75rem;
66
- }
78
+ .chartCard :global(.byline-card-description),
79
+ .list :global(.byline-card-description) {
80
+ font-size: 0.75rem;
81
+ }
67
82
 
68
- .controls,
69
- :global(.byline-analytics-controls) {
70
- display: flex;
71
- align-items: center;
72
- gap: 0.75rem;
73
- flex-wrap: wrap;
74
- }
83
+ .controls,
84
+ :global(.byline-analytics-controls) {
85
+ display: flex;
86
+ align-items: center;
87
+ gap: 0.75rem;
88
+ flex-wrap: wrap;
89
+ }
75
90
 
76
- /* ── Metric tiles ──────────────────────────────────────────────────── */
91
+ /* ── Metric tiles ──────────────────────────────────────────────────── */
77
92
 
78
- .stats,
79
- :global(.byline-analytics-stats) {
80
- display: grid;
81
- grid-template-columns: repeat(3, minmax(0, 1fr));
82
- gap: 0.75rem;
83
- margin-bottom: 0.75rem;
84
- }
93
+ .stats,
94
+ :global(.byline-analytics-stats) {
95
+ display: grid;
96
+ grid-template-columns: repeat(3, minmax(0, 1fr));
97
+ gap: 0.75rem;
98
+ margin-bottom: 0.75rem;
99
+ }
85
100
 
86
- .stat,
87
- :global(.byline-analytics-stat) {
88
- display: flex;
89
- flex-direction: column;
90
- gap: 0.5rem;
91
- min-width: 0;
92
- padding: 1rem 1.125rem 1.125rem;
93
- border-radius: 0.375rem;
94
- }
101
+ .stat,
102
+ :global(.byline-analytics-stat) {
103
+ display: flex;
104
+ flex-direction: column;
105
+ gap: 0.5rem;
106
+ min-width: 0;
107
+ padding: 1rem 1.125rem 1.125rem;
108
+ border-radius: 0.375rem;
109
+ }
95
110
 
96
- .statLabel,
97
- :global(.byline-analytics-stat-label) {
98
- font-size: 0.625rem;
99
- font-weight: 600;
100
- text-transform: uppercase;
101
- letter-spacing: 0.1em;
102
- line-height: 1;
103
- }
111
+ .statLabel,
112
+ :global(.byline-analytics-stat-label) {
113
+ font-size: 0.625rem;
114
+ font-weight: 600;
115
+ text-transform: uppercase;
116
+ letter-spacing: 0.1em;
117
+ line-height: 1;
118
+ }
104
119
 
105
- .statValue,
106
- :global(.byline-analytics-stat-value) {
107
- font-size: clamp(1.75rem, 4.5vw, 2.5rem);
108
- font-weight: 700;
109
- font-variant-numeric: tabular-nums;
110
- line-height: 1;
111
- letter-spacing: -0.02em;
112
- }
120
+ .statValue,
121
+ :global(.byline-analytics-stat-value) {
122
+ font-size: clamp(1.75rem, 4.5vw, 2.5rem);
123
+ font-weight: 700;
124
+ font-variant-numeric: tabular-nums;
125
+ line-height: 1;
126
+ letter-spacing: -0.02em;
127
+ }
113
128
 
114
- .statFoot,
115
- :global(.byline-analytics-stat-foot) {
116
- font-size: 0.6875rem;
117
- font-variant-numeric: tabular-nums;
118
- color: var(--gray-600);
119
- }
129
+ .statFoot,
130
+ :global(.byline-analytics-stat-foot) {
131
+ font-size: 0.6875rem;
132
+ font-variant-numeric: tabular-nums;
133
+ color: var(--gray-600);
134
+ }
120
135
 
121
- .toneViews {
122
- background-color: #f0f9ff;
123
- }
136
+ .toneViews {
137
+ background-color: #f0f9ff;
138
+ }
124
139
 
125
- .toneViews .statLabel,
126
- .toneViews .statValue {
127
- color: #0369a1;
128
- }
140
+ .toneViews .statLabel,
141
+ .toneViews .statValue {
142
+ color: #0369a1;
143
+ }
129
144
 
130
- .toneVisitors {
131
- background-color: #f5f3ff;
132
- }
145
+ .toneVisitors {
146
+ background-color: #f5f3ff;
147
+ }
133
148
 
134
- .toneVisitors .statLabel,
135
- .toneVisitors .statValue {
136
- color: #6d28d9;
137
- }
149
+ .toneVisitors .statLabel,
150
+ .toneVisitors .statValue {
151
+ color: #6d28d9;
152
+ }
138
153
 
139
- .toneDownloads {
140
- background-color: #ecfdf5;
141
- }
154
+ .toneDownloads {
155
+ background-color: #ecfdf5;
156
+ }
142
157
 
143
- .toneDownloads .statLabel,
144
- .toneDownloads .statValue {
145
- color: #047857;
146
- }
158
+ .toneDownloads .statLabel,
159
+ .toneDownloads .statValue {
160
+ color: #047857;
161
+ }
147
162
 
148
- :is([data-theme="dark"], :global(.dark)) .statFoot,
149
- :is([data-theme="dark"], :global(.dark)) :global(.byline-analytics-stat-foot) {
150
- color: var(--gray-400);
151
- }
163
+ :is([data-theme="dark"], :global(.dark)) .statFoot,
164
+ :is([data-theme="dark"], :global(.dark)) :global(.byline-analytics-stat-foot) {
165
+ color: var(--gray-400);
166
+ }
152
167
 
153
- :is([data-theme="dark"], :global(.dark)) .toneViews {
154
- background-color: rgba(12, 74, 110, 0.28);
155
- }
168
+ :is([data-theme="dark"], :global(.dark)) .toneViews {
169
+ background-color: rgba(12, 74, 110, 0.28);
170
+ }
156
171
 
157
- :is([data-theme="dark"], :global(.dark)) .toneViews .statLabel,
158
- :is([data-theme="dark"], :global(.dark)) .toneViews .statValue {
159
- color: #7dd3fc;
160
- }
172
+ :is([data-theme="dark"], :global(.dark)) .toneViews .statLabel,
173
+ :is([data-theme="dark"], :global(.dark)) .toneViews .statValue {
174
+ color: #7dd3fc;
175
+ }
161
176
 
162
- :is([data-theme="dark"], :global(.dark)) .toneVisitors {
163
- background-color: rgba(76, 29, 149, 0.3);
164
- }
177
+ :is([data-theme="dark"], :global(.dark)) .toneVisitors {
178
+ background-color: rgba(76, 29, 149, 0.3);
179
+ }
165
180
 
166
- :is([data-theme="dark"], :global(.dark)) .toneVisitors .statLabel,
167
- :is([data-theme="dark"], :global(.dark)) .toneVisitors .statValue {
168
- color: #c4b5fd;
169
- }
181
+ :is([data-theme="dark"], :global(.dark)) .toneVisitors .statLabel,
182
+ :is([data-theme="dark"], :global(.dark)) .toneVisitors .statValue {
183
+ color: #c4b5fd;
184
+ }
170
185
 
171
- :is([data-theme="dark"], :global(.dark)) .toneDownloads {
172
- background-color: rgba(6, 78, 59, 0.28);
173
- }
186
+ :is([data-theme="dark"], :global(.dark)) .toneDownloads {
187
+ background-color: rgba(6, 78, 59, 0.28);
188
+ }
174
189
 
175
- :is([data-theme="dark"], :global(.dark)) .toneDownloads .statLabel,
176
- :is([data-theme="dark"], :global(.dark)) .toneDownloads .statValue {
177
- color: #6ee7b7;
178
- }
190
+ :is([data-theme="dark"], :global(.dark)) .toneDownloads .statLabel,
191
+ :is([data-theme="dark"], :global(.dark)) .toneDownloads .statValue {
192
+ color: #6ee7b7;
193
+ }
179
194
 
180
- /* ── Lists ─────────────────────────────────────────────────────────── */
195
+ /* ── Lists ─────────────────────────────────────────────────────────── */
181
196
 
182
- .chartCard,
183
- :global(.byline-analytics-chart-card) {
184
- margin-bottom: 0.75rem;
185
- }
197
+ .chartCard,
198
+ :global(.byline-analytics-chart-card) {
199
+ margin-bottom: 0.75rem;
200
+ }
186
201
 
187
- /* Top pages is the list people actually read, so it takes the wide track. */
188
- .lists,
189
- :global(.byline-analytics-lists) {
190
- display: grid;
191
- grid-template-columns: 1.55fr 1fr;
192
- align-items: start;
193
- gap: 0.75rem;
194
- margin-bottom: 0.75rem;
195
- }
202
+ /* Top pages is the list people actually read, so it takes the wide track. */
203
+ .lists,
204
+ :global(.byline-analytics-lists) {
205
+ display: grid;
206
+ grid-template-columns: 1.55fr 1fr;
207
+ align-items: start;
208
+ gap: 0.75rem;
209
+ margin-bottom: 0.75rem;
210
+ }
196
211
 
197
- .stack {
198
- display: flex;
199
- flex-direction: column;
200
- gap: 0.75rem;
201
- }
212
+ .stack {
213
+ display: flex;
214
+ flex-direction: column;
215
+ gap: 0.75rem;
216
+ }
202
217
 
203
- .ranking,
204
- :global(.byline-analytics-ranking) {
205
- display: flex;
206
- flex-direction: column;
207
- gap: 1px;
208
- padding: 0;
209
- margin: 0;
210
- list-style: none;
211
- }
218
+ .ranking,
219
+ :global(.byline-analytics-ranking) {
220
+ display: flex;
221
+ flex-direction: column;
222
+ gap: 1px;
223
+ padding: 0;
224
+ margin: 0;
225
+ list-style: none;
226
+ }
212
227
 
213
- .rankingRow,
214
- :global(.byline-analytics-ranking-row) {
215
- position: relative;
216
- display: grid;
217
- grid-template-columns: minmax(0, 1fr) auto auto;
218
- align-items: center;
219
- gap: 0.75rem;
220
- padding: 0.45rem 0.625rem;
221
- border-radius: 0.25rem;
222
- /* The row paints its own stacking context so the share bar can sit behind
228
+ .rankingRow,
229
+ :global(.byline-analytics-ranking-row) {
230
+ position: relative;
231
+ display: grid;
232
+ grid-template-columns: minmax(0, 1fr) auto auto;
233
+ align-items: center;
234
+ gap: 0.75rem;
235
+ padding: 0.45rem 0.625rem;
236
+ border-radius: 0.25rem;
237
+ /* The row paints its own stacking context so the share bar can sit behind
223
238
  the text without escaping to the card background. */
224
- isolation: isolate;
225
- }
239
+ isolation: isolate;
240
+ }
226
241
 
227
- .rankingRow::before {
228
- content: "";
229
- position: absolute;
230
- inset: 0 auto 0 0;
231
- z-index: -1;
232
- width: var(--byline-analytics-share, 0%);
233
- border-radius: 0.25rem;
234
- background-color: var(--byline-analytics-bar, transparent);
235
- opacity: 0.16;
236
- }
242
+ .rankingRow::before {
243
+ content: "";
244
+ position: absolute;
245
+ inset: 0 auto 0 0;
246
+ z-index: -1;
247
+ width: var(--byline-analytics-share, 0%);
248
+ border-radius: 0.25rem;
249
+ background-color: var(--byline-analytics-bar, transparent);
250
+ opacity: 0.16;
251
+ }
237
252
 
238
- .barViews {
239
- --byline-analytics-bar: #38bdf8;
240
- }
253
+ .barViews {
254
+ --byline-analytics-bar: #38bdf8;
255
+ }
241
256
 
242
- .barVisitors {
243
- --byline-analytics-bar: #7c3aed;
244
- }
257
+ .barVisitors {
258
+ --byline-analytics-bar: #7c3aed;
259
+ }
245
260
 
246
- .barDownloads {
247
- --byline-analytics-bar: #10b981;
248
- }
261
+ .barDownloads {
262
+ --byline-analytics-bar: #10b981;
263
+ }
249
264
 
250
- /* The reserved overflow bucket is an aggregate, not a page — a dashed rule
265
+ /* The reserved overflow bucket is an aggregate, not a page — a dashed rule
251
266
  and muted label keep it from reading as traffic to a real path. */
252
- .rankingOverflow {
253
- border: var(--border-width-thin) dashed var(--gray-300);
254
- }
255
-
256
- .rankingOverflow::before {
257
- opacity: 0.07;
258
- }
267
+ .rankingOverflow {
268
+ border: var(--border-width-thin) dashed var(--gray-300);
269
+ }
259
270
 
260
- .rankingOverflow .rankingLabel {
261
- font-style: italic;
262
- color: var(--gray-600);
263
- }
271
+ .rankingOverflow::before {
272
+ opacity: 0.07;
273
+ }
264
274
 
265
- .rankingLabel {
266
- overflow: hidden;
267
- min-width: 0;
268
- font-size: 0.8125rem;
269
- text-overflow: ellipsis;
270
- white-space: nowrap;
271
- }
275
+ .rankingOverflow .rankingLabel {
276
+ font-style: italic;
277
+ color: var(--gray-600);
278
+ }
272
279
 
273
- .rankingValue {
274
- font-size: 0.8125rem;
275
- font-weight: 600;
276
- font-variant-numeric: tabular-nums;
277
- }
280
+ .rankingLabel {
281
+ overflow: hidden;
282
+ min-width: 0;
283
+ font-size: 0.8125rem;
284
+ text-overflow: ellipsis;
285
+ white-space: nowrap;
286
+ }
278
287
 
279
- .rankingVisitors {
280
- min-width: 3ch;
281
- font-size: 0.6875rem;
282
- font-variant-numeric: tabular-nums;
283
- text-align: end;
284
- color: var(--gray-500);
285
- }
288
+ .rankingValue {
289
+ font-size: 0.8125rem;
290
+ font-weight: 600;
291
+ font-variant-numeric: tabular-nums;
292
+ }
286
293
 
287
- :is([data-theme="dark"], :global(.dark)) .header,
288
- :is([data-theme="dark"], :global(.dark)) :global(.byline-analytics-header) {
289
- border-bottom-color: var(--gray-700);
290
- }
294
+ .rankingVisitors {
295
+ min-width: 3ch;
296
+ font-size: 0.6875rem;
297
+ font-variant-numeric: tabular-nums;
298
+ text-align: end;
299
+ color: var(--gray-500);
300
+ }
291
301
 
292
- :is([data-theme="dark"], :global(.dark)) .rankingVisitors {
293
- color: var(--gray-400);
294
- }
302
+ :is([data-theme="dark"], :global(.dark)) .header,
303
+ :is([data-theme="dark"], :global(.dark)) :global(.byline-analytics-header) {
304
+ border-bottom-color: var(--gray-700);
305
+ }
295
306
 
296
- :is([data-theme="dark"], :global(.dark)) .rankingOverflow {
297
- border-color: var(--gray-600);
298
- }
307
+ :is([data-theme="dark"], :global(.dark)) .rankingVisitors {
308
+ color: var(--gray-400);
309
+ }
299
310
 
300
- :is([data-theme="dark"], :global(.dark)) .rankingOverflow .rankingLabel {
301
- color: var(--gray-400);
302
- }
311
+ :is([data-theme="dark"], :global(.dark)) .rankingOverflow {
312
+ border-color: var(--gray-600);
313
+ }
303
314
 
304
- :is([data-theme="dark"], :global(.dark)) .barVisitors {
305
- --byline-analytics-bar: #a78bfa;
306
- }
315
+ :is([data-theme="dark"], :global(.dark)) .rankingOverflow .rankingLabel {
316
+ color: var(--gray-400);
317
+ }
307
318
 
308
- :is([data-theme="dark"], :global(.dark)) .barDownloads {
309
- --byline-analytics-bar: #34d399;
310
- }
319
+ :is([data-theme="dark"], :global(.dark)) .barVisitors {
320
+ --byline-analytics-bar: #a78bfa;
321
+ }
311
322
 
312
- @media (max-width: 900px) {
313
- .lists,
314
- :global(.byline-analytics-lists) {
315
- grid-template-columns: 1fr;
323
+ :is([data-theme="dark"], :global(.dark)) .barDownloads {
324
+ --byline-analytics-bar: #34d399;
316
325
  }
317
- }
318
326
 
319
- @media (max-width: 720px) {
320
- .header,
321
- :global(.byline-analytics-header) {
322
- align-items: stretch;
323
- flex-direction: column;
327
+ @media (max-width: 900px) {
328
+ .lists,
329
+ :global(.byline-analytics-lists) {
330
+ grid-template-columns: 1fr;
331
+ }
324
332
  }
325
333
 
326
- .stats,
327
- :global(.byline-analytics-stats) {
328
- grid-template-columns: 1fr;
334
+ @media (max-width: 720px) {
335
+ .header,
336
+ :global(.byline-analytics-header) {
337
+ align-items: stretch;
338
+ flex-direction: column;
339
+ }
340
+
341
+ .stats,
342
+ :global(.byline-analytics-stats) {
343
+ grid-template-columns: 1fr;
344
+ }
329
345
  }
330
- }
331
346
 
332
- /* ── Preview cap and full-list modal ───────────────────────────────── */
347
+ /* ── Preview cap and full-list modal ───────────────────────────────── */
333
348
 
334
- /* The header carries the "View all" action beside the title so the card's
349
+ /* The header carries the "View all" action beside the title so the card's
335
350
  body stays a plain ranking. */
336
- .listHeader,
337
- :global(.byline-analytics-list-header) {
338
- display: flex;
339
- align-items: flex-start;
340
- justify-content: space-between;
341
- gap: 0.75rem;
342
- }
351
+ .listHeader,
352
+ :global(.byline-analytics-list-header) {
353
+ display: flex;
354
+ align-items: flex-start;
355
+ justify-content: space-between;
356
+ gap: 0.75rem;
357
+ }
343
358
 
344
- .listHeading {
345
- min-width: 0;
346
- }
359
+ .listHeading {
360
+ min-width: 0;
361
+ }
347
362
 
348
- .viewAll,
349
- :global(.byline-analytics-view-all) {
350
- flex-shrink: 0;
351
- white-space: nowrap;
352
- }
363
+ .viewAll,
364
+ :global(.byline-analytics-view-all) {
365
+ flex-shrink: 0;
366
+ white-space: nowrap;
367
+ }
353
368
 
354
- .modal,
355
- :global(.byline-analytics-modal) {
356
- width: min(40rem, calc(100vw - 2rem));
357
- }
369
+ .modal,
370
+ :global(.byline-analytics-modal) {
371
+ width: min(40rem, calc(100vw - 2rem));
372
+ }
358
373
 
359
- .modalCaption,
360
- :global(.byline-analytics-modal-caption) {
361
- margin: 0.25rem 0 0;
362
- font-size: 0.75rem;
363
- font-variant-numeric: tabular-nums;
364
- }
374
+ .modalCaption,
375
+ :global(.byline-analytics-modal-caption) {
376
+ margin: 0.25rem 0 0;
377
+ font-size: 0.75rem;
378
+ font-variant-numeric: tabular-nums;
379
+ }
365
380
 
366
- /* Twenty-five rows exceed a short viewport; the content scrolls inside the
381
+ /* Twenty-five rows exceed a short viewport; the content scrolls inside the
367
382
  dialog so the pager and close action stay reachable. */
368
- .modalContent,
369
- :global(.byline-analytics-modal-content) {
370
- max-height: min(60vh, 48rem);
371
- overflow-y: auto;
372
- }
383
+ .modalContent,
384
+ :global(.byline-analytics-modal-content) {
385
+ max-height: min(60vh, 48rem);
386
+ overflow-y: auto;
387
+ }
373
388
 
374
- .modalStatus {
375
- display: flex;
376
- justify-content: center;
377
- padding: 2rem 0;
378
- }
389
+ .modalStatus {
390
+ display: flex;
391
+ justify-content: center;
392
+ padding: 2rem 0;
393
+ }
379
394
 
380
- .modalActions,
381
- :global(.byline-analytics-modal-actions) {
382
- display: flex;
383
- align-items: center;
384
- justify-content: space-between;
385
- gap: 0.75rem;
386
- flex-wrap: wrap;
387
- }
395
+ .modalActions,
396
+ :global(.byline-analytics-modal-actions) {
397
+ display: flex;
398
+ align-items: center;
399
+ justify-content: space-between;
400
+ gap: 0.75rem;
401
+ flex-wrap: wrap;
402
+ }
388
403
 
389
- .srOnly {
390
- position: absolute;
391
- width: 1px;
392
- height: 1px;
393
- padding: 0;
394
- margin: -1px;
395
- overflow: hidden;
396
- clip: rect(0, 0, 0, 0);
397
- white-space: nowrap;
398
- border: 0;
404
+ .srOnly {
405
+ position: absolute;
406
+ width: 1px;
407
+ height: 1px;
408
+ padding: 0;
409
+ margin: -1px;
410
+ overflow: hidden;
411
+ clip: rect(0, 0, 0, 0);
412
+ white-space: nowrap;
413
+ border: 0;
414
+ }
399
415
  }