@7365admin1/layer-common 4.90.2-staging.483 → 4.90.2-staging.484

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.
@@ -324,6 +324,9 @@
324
324
  }
325
325
  /* The site fleet's strip: always six columns (README §2). */
326
326
  .hero-summary--six { grid-template-columns: repeat(6, minmax(0, 1fr)); }
327
+ /* Phones (owner 2026-10-02): six cells in one row cut every label ("TOTA",
328
+ "ONL"); three per row keeps each label whole. */
329
+ @media (max-width: 599.98px) { .hero-summary--six { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
327
330
  .hero-cell {
328
331
  --hero-cell-color: var(--hero-text);
329
332
  position: relative;
@@ -141,17 +141,17 @@
141
141
  before, and which is the one thing the admin app's
142
142
  Organizations list showed that this one did not.
143
143
  -->
144
- <td class="td-name">
144
+ <td class="td-name" data-label="Organization">
145
145
  {{ item.name }}
146
146
  <span class="td-name-sub">{{ item.email }}</span>
147
147
  </td>
148
148
  <!-- A blank cell reads as a broken screen, so the one case
149
149
  with nothing to print says so. `--text2`, not `--muted`:
150
150
  this is text to be read, and `--muted` measures 3.24:1. -->
151
- <td :class="{ 'td-nature-none': !item.nature }">
151
+ <td data-label="Nature" :class="{ 'td-nature-none': !item.nature }">
152
152
  {{ item.nature ? formatNature(item.nature) : 'Not recorded' }}
153
153
  </td>
154
- <td>
154
+ <td data-label="Sites">
155
155
  <span class="sites-badge">{{ item.sites }}</span>
156
156
  </td>
157
157
  <!--
@@ -159,7 +159,7 @@
159
159
  which reads as a broken screen. It is one ordinary state, so it
160
160
  is said once, in words.
161
161
  -->
162
- <td v-if="item.sub.state === 'none'" colspan="4" class="sub-none">
162
+ <td v-if="item.sub.state === 'none'" colspan="4" class="sub-none" data-label="Subscription">
163
163
  No subscription set up
164
164
  <button class="sub-setup-btn" @click="openSubscription(item)">
165
165
  Set up subscription
@@ -167,13 +167,13 @@
167
167
  </td>
168
168
 
169
169
  <template v-else>
170
- <td>
170
+ <td data-label="Subscription">
171
171
  <span class="sub-label" :class="{ 'needs-attention': item.sub.needsAttention }">
172
172
  {{ item.sub.label }}
173
173
  </span>
174
174
  </td>
175
- <td class="td-muted">{{ item.sub.billingCycle }}</td>
176
- <td>
175
+ <td class="td-muted" data-label="Billing cycle">{{ item.sub.billingCycle }}</td>
176
+ <td data-label="Start date">
177
177
  <span class="date-cell">
178
178
  <svg viewBox="0 0 16 16" fill="none" width="13" height="13">
179
179
  <rect x="1" y="3" width="14" height="12" rx="2" stroke="#9CA3AF" stroke-width="1.3"/>
@@ -183,7 +183,7 @@
183
183
  {{ item.sub.start }}
184
184
  </span>
185
185
  </td>
186
- <td>
186
+ <td data-label="End date">
187
187
  <span class="date-cell" :class="{ 'needs-attention': item.sub.needsAttention }">
188
188
  <svg viewBox="0 0 16 16" fill="none" width="13" height="13">
189
189
  <rect x="1" y="3" width="14" height="12" rx="2" stroke="#9CA3AF" stroke-width="1.3"/>
@@ -194,7 +194,7 @@
194
194
  </span>
195
195
  </td>
196
196
  </template>
197
- <td>
197
+ <td data-label="Actions">
198
198
  <div class="action-wrap">
199
199
  <button class="dots-btn" @click.stop="toggleMenu(item._id, $event)">
200
200
  <span /><span /><span />
@@ -223,11 +223,11 @@
223
223
  <td colspan="5" class="empty">No pending invitations.</td>
224
224
  </tr>
225
225
  <tr v-for="item in items" :key="item._id">
226
- <td class="td-muted">{{ item.email }}</td>
227
- <td>{{ item.app }}</td>
228
- <td class="td-muted">{{ item.role }}</td>
229
- <td><span class="status-chip pending">{{ item.status }}</span></td>
230
- <td>
226
+ <td class="td-muted" data-label="Email">{{ item.email }}</td>
227
+ <td data-label="App">{{ item.app }}</td>
228
+ <td class="td-muted" data-label="Role">{{ item.role }}</td>
229
+ <td data-label="Status"><span class="status-chip pending">{{ item.status }}</span></td>
230
+ <td data-label="Action">
231
231
  <button
232
232
  class="cancel-btn"
233
233
  :disabled="cancelLoadingId === item._id"
@@ -1314,4 +1314,46 @@ tbody td { vertical-align: middle; }
1314
1314
  background: var(--err-bg);
1315
1315
  color: var(--err);
1316
1316
  }
1317
+
1318
+ /* Phones (owner 2026-10-02): the client table was 1085px wide inside a 390px
1319
+ screen. Below 600px each client is a card, one "label: value" line per cell. */
1320
+ @media (max-width: 599.98px) {
1321
+ .table-scroll table,
1322
+ .table-scroll tbody,
1323
+ .table-scroll tr,
1324
+ .table-scroll td {
1325
+ display: block;
1326
+ width: 100%;
1327
+ }
1328
+
1329
+ .table-scroll thead {
1330
+ display: none;
1331
+ }
1332
+
1333
+ .table-scroll tr {
1334
+ border-bottom: 1px solid var(--border);
1335
+ padding: 8px 0;
1336
+ }
1337
+
1338
+ .table-scroll td {
1339
+ display: grid;
1340
+ grid-template-columns: minmax(0, 2fr) minmax(0, 3fr);
1341
+ column-gap: 12px;
1342
+ align-items: center;
1343
+ padding: 4px 16px !important;
1344
+ border: 0;
1345
+ white-space: normal;
1346
+ overflow-wrap: anywhere;
1347
+ }
1348
+
1349
+ .table-scroll td[data-label]::before {
1350
+ content: attr(data-label);
1351
+ color: var(--muted);
1352
+ font-size: 12px;
1353
+ }
1354
+
1355
+ .table-scroll td.empty {
1356
+ display: block;
1357
+ }
1358
+ }
1317
1359
  </style>
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@7365admin1/layer-common",
3
3
  "license": "MIT",
4
4
  "type": "module",
5
- "version": "4.90.2-staging.483",
5
+ "version": "4.90.2-staging.484",
6
6
  "author": "7365admin1",
7
7
  "main": "./nuxt.config.ts",
8
8
  "//files": "What a consumer extending this layer actually loads. Without this npm ships the whole working tree - the changesets, the CI workflows, the render harness in tools/ and any scratch directory that happened to exist at publish time. Nuxt resolves a layer by directory, so every runtime directory below has to stay listed; adding a new top-level runtime directory means adding it here too.",