@cardinali-studio/adminkit 2.2.20 → 2.2.22

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 (48) hide show
  1. package/dist/api.d.ts +38 -2
  2. package/dist/api.js +13 -0
  3. package/dist/app/App.d.ts +1 -0
  4. package/dist/app/App.js +36 -15
  5. package/dist/app/NextAdminApp.d.ts +8 -0
  6. package/dist/app/NextAdminApp.js +3 -0
  7. package/dist/app/lib/admin-interface.d.ts +11 -0
  8. package/dist/app/lib/admin-interface.js +45 -0
  9. package/dist/app/next.css +826 -0
  10. package/dist/app/routes/AdminInterfaceSettings.d.ts +12 -0
  11. package/dist/app/routes/AdminInterfaceSettings.js +14 -0
  12. package/dist/app/routes/Deliveries.js +1 -1
  13. package/dist/app/routes/GallerySectionsEditor.d.ts +1 -1
  14. package/dist/app/routes/GallerySectionsEditor.js +14 -2
  15. package/dist/app/routes/HomeEditor.js +2 -2
  16. package/dist/app/routes/Overview.js +4 -4
  17. package/dist/app/routes/PageEditor.js +12 -5
  18. package/dist/app/routes/PortfolioWorksEditor.d.ts +1 -1
  19. package/dist/app/routes/PortfolioWorksEditor.js +11 -3
  20. package/dist/app/routes/Requests.js +2 -2
  21. package/dist/app/routes/SiteSettingsEditor.d.ts +4 -1
  22. package/dist/app/routes/SiteSettingsEditor.js +3 -2
  23. package/dist/app/ui/MediaSlot.js +1 -1
  24. package/dist/app/ui/OpenCard.js +22 -1
  25. package/dist/app/ui/icons.js +5 -2
  26. package/dist/form/fields/index.js +2 -1
  27. package/dist/form/media/Lightbox.js +33 -3
  28. package/dist/form/media/MediaGrid.js +9 -6
  29. package/dist/form/media/media-model.d.ts +2 -0
  30. package/dist/form/media/media-model.js +8 -0
  31. package/dist/form/media/useMediaLibrary.d.ts +11 -2
  32. package/dist/form/media/useMediaLibrary.js +89 -24
  33. package/dist/functions/_shared/d1-media.js +105 -91
  34. package/dist/functions/_shared/media-alt.js +61 -0
  35. package/dist/functions/api/assets/delete.js +20 -3
  36. package/dist/functions/api/assets/media.js +57 -2
  37. package/dist/functions/api/assets/move.js +5 -1
  38. package/dist/functions/api/assets/upload.js +3 -1
  39. package/dist/functions/api/assets.js +5 -2
  40. package/dist/gallery.d.ts +2 -0
  41. package/dist/media.d.ts +19 -0
  42. package/dist/media.js +132 -0
  43. package/dist/normalize.d.ts +1 -0
  44. package/dist/normalize.js +2 -1
  45. package/dist/persistence.d.ts +8 -0
  46. package/dist/persistence.js +78 -6
  47. package/dist/theme.css +42 -0
  48. package/package.json +2 -2
@@ -0,0 +1,826 @@
1
+ /* Nuova interfaccia ---------------------------------------------------------------
2
+ *
3
+ * Questo foglio è interamente subordinato alla feature flag `data-admin-interface="next"`.
4
+ * La UI corrente continua quindi a usare app.css senza una sola sovrascrittura. Il linguaggio
5
+ * nasce dalla reference del redesign: neutri caldi, gerarchie per tono invece che per tratti,
6
+ * navigazione globale in alto, navigazione contestuale a sinistra e un solo grande foglio di
7
+ * lavoro bianco.
8
+ */
9
+
10
+ :root[data-admin-interface="next"] {
11
+ --ak-bg: #f0eeef;
12
+ --ak-panel: #ffffff;
13
+ --ak-ground: #f0eeef;
14
+ --ak-inset: #f7f5f6;
15
+ --ak-inset-deep: #e4e2e3;
16
+ --ak-col-bg: #f0eeef;
17
+
18
+ --ak-ink: #252424;
19
+ --ak-ink-quiet: #706d6e;
20
+ --ak-ink-faint: #969293;
21
+ --ak-line: #dfdcdd;
22
+
23
+ --ak-accent: #007b5e;
24
+ --ak-accent-hover: #006b52;
25
+ --ak-accent-ink: #ffffff;
26
+ --ak-notification: #d93636;
27
+ --ak-danger: #b0443b;
28
+
29
+ --ak-rail-bg: #f7f5f6;
30
+ --ak-rail-ink: #5f5b5c;
31
+ --ak-rail-ink-on: #252424;
32
+ --ak-rail-hover: #efedee;
33
+ --ak-rail-on: #ffffff;
34
+ --ak-rail-line: #e7e4e5;
35
+
36
+ --ak-col-w: clamp(272px, 23vw, 340px);
37
+ --ak-radius: 14px;
38
+ --ak-hover: rgba(37, 36, 36, .055);
39
+ --ak-shadow: 0 1px 2px rgba(35, 30, 32, .05), 0 7px 18px -13px rgba(35, 30, 32, .38);
40
+ --ak-lift-1: 0 1px 2px rgba(35, 30, 32, .045), 0 7px 18px -14px rgba(35, 30, 32, .28);
41
+ --ak-lift-2: 0 1px 2px rgba(35, 30, 32, .055), 0 13px 28px -18px rgba(35, 30, 32, .34);
42
+ --ak-lift-3: 0 2px 5px rgba(35, 30, 32, .06), 0 25px 52px -28px rgba(35, 30, 32, .42);
43
+ }
44
+
45
+ :root[data-theme="dark"][data-admin-interface="next"] {
46
+ --ak-bg: #202124;
47
+ --ak-panel: #292a2e;
48
+ --ak-ground: #202124;
49
+ --ak-inset: #25262a;
50
+ --ak-inset-deep: #191a1d;
51
+ --ak-col-bg: #202124;
52
+
53
+ --ak-ink: #f1efef;
54
+ --ak-ink-quiet: #aaa6a7;
55
+ --ak-ink-faint: #858183;
56
+ --ak-line: rgba(255, 255, 255, .105);
57
+
58
+ --ak-accent: #4bc39d;
59
+ --ak-accent-hover: #5bd0ac;
60
+ --ak-accent-ink: #10241d;
61
+ --ak-notification: #ff625c;
62
+ --ak-danger: #ef7b6f;
63
+
64
+ --ak-rail-bg: #191a1d;
65
+ --ak-rail-ink: #aaa6a7;
66
+ --ak-rail-ink-on: #f1efef;
67
+ --ak-rail-hover: #25262a;
68
+ --ak-rail-on: #292a2e;
69
+ --ak-rail-line: rgba(255, 255, 255, .08);
70
+ --ak-hover: rgba(255, 255, 255, .055);
71
+ }
72
+
73
+ /* La shell usa tutto il viewport: la cornice della reference è utile in una presentazione,
74
+ * ma nel pannello operativo sottrarrebbe spazio senza aggiungere gerarchia. */
75
+ :root[data-admin-interface="next"] body {
76
+ padding: 0;
77
+ overflow: hidden;
78
+ background: var(--ak-bg);
79
+ }
80
+ :root[data-theme="dark"][data-admin-interface="next"] body { background: var(--ak-bg); }
81
+
82
+ :root[data-admin-interface="next"] .app,
83
+ :root[data-admin-interface="next"] .app.is-two {
84
+ height: 100vh;
85
+ grid-template-columns: var(--ak-col-w) minmax(0, 1fr);
86
+ grid-template-rows: 82px minmax(0, 1fr);
87
+ overflow: hidden;
88
+ border-radius: 0;
89
+ background: var(--ak-bg);
90
+ box-shadow: 0 1px 1px rgba(35, 30, 32, .04);
91
+ }
92
+ :root[data-admin-interface="next"] .app.is-two { grid-template-columns: minmax(0, 1fr); }
93
+
94
+ /* Navigazione globale: una sola riga, con il contesto corrente espresso come tab sollevato. */
95
+ :root[data-admin-interface="next"] .rail {
96
+ grid-column: 1 / -1;
97
+ grid-row: 1;
98
+ z-index: 20;
99
+ min-width: 0;
100
+ flex-direction: row;
101
+ align-items: center;
102
+ gap: 12px;
103
+ padding: 13px 18px;
104
+ overflow: hidden;
105
+ background: var(--ak-rail-bg);
106
+ color: var(--ak-rail-ink);
107
+ }
108
+ :root[data-admin-interface="next"] .rail-brand {
109
+ flex: none;
110
+ min-width: 164px;
111
+ height: 52px;
112
+ justify-content: center;
113
+ gap: 2px;
114
+ padding: 0 17px;
115
+ border-radius: 15px;
116
+ background: color-mix(in srgb, var(--ak-rail-bg) 74%, var(--ak-line));
117
+ }
118
+ :root[data-admin-interface="next"] .rail-brand-name {
119
+ overflow: hidden;
120
+ color: var(--ak-rail-ink-on);
121
+ font-size: 14px;
122
+ font-weight: 600;
123
+ text-overflow: ellipsis;
124
+ white-space: nowrap;
125
+ }
126
+ :root[data-admin-interface="next"] .rail-brand-role {
127
+ color: var(--ak-rail-ink);
128
+ font-size: 9px;
129
+ letter-spacing: .14em;
130
+ opacity: .7;
131
+ }
132
+ :root[data-admin-interface="next"] .rail-nav {
133
+ min-width: 0;
134
+ flex: 1;
135
+ flex-direction: row;
136
+ align-items: center;
137
+ gap: 6px;
138
+ overflow-x: auto;
139
+ overscroll-behavior-inline: contain;
140
+ scrollbar-width: none;
141
+ }
142
+ :root[data-admin-interface="next"] .rail-nav::-webkit-scrollbar { display: none; }
143
+ :root[data-admin-interface="next"] .rail-group {
144
+ display: flex;
145
+ align-items: center;
146
+ gap: 6px;
147
+ }
148
+ :root[data-admin-interface="next"] .rail-group + .rail-group { margin: 0; }
149
+ :root[data-admin-interface="next"] .rail-group-title { display: none; }
150
+ :root[data-admin-interface="next"] .rail-item {
151
+ width: auto;
152
+ min-height: 48px;
153
+ flex: none;
154
+ gap: 8px;
155
+ padding: 0 13px;
156
+ border-radius: 14px;
157
+ color: var(--ak-rail-ink);
158
+ font-size: 13px;
159
+ font-weight: 500;
160
+ white-space: nowrap;
161
+ }
162
+ :root[data-admin-interface="next"] .rail-item:hover {
163
+ background: var(--ak-rail-hover);
164
+ color: var(--ak-rail-ink-on);
165
+ }
166
+ :root[data-admin-interface="next"] .rail-item.is-on {
167
+ background: var(--ak-rail-on);
168
+ color: var(--ak-rail-ink-on);
169
+ box-shadow: var(--ak-shadow);
170
+ }
171
+ :root[data-admin-interface="next"] .rail-item:focus-visible {
172
+ outline: 0;
173
+ box-shadow: var(--ak-ring);
174
+ }
175
+ :root[data-admin-interface="next"] .rail-item .ico { width: 17px; height: 17px; opacity: .78; }
176
+ :root[data-admin-interface="next"] .rail-item.is-on .ico { color: var(--ak-accent); opacity: 1; }
177
+ :root[data-admin-interface="next"] .rail-badge {
178
+ min-width: 20px;
179
+ height: 20px;
180
+ padding: 0 6px;
181
+ border-radius: 10px;
182
+ background: var(--ak-notification);
183
+ color: #fff;
184
+ font-size: 10px;
185
+ line-height: 20px;
186
+ }
187
+ :root[data-admin-interface="next"] .rail-foot {
188
+ flex: none;
189
+ margin: 0 0 0 auto;
190
+ padding: 0;
191
+ border: 0;
192
+ flex-direction: row;
193
+ align-items: center;
194
+ gap: 6px;
195
+ }
196
+ :root[data-admin-interface="next"] .rail-foot .rail-item {
197
+ width: 48px;
198
+ justify-content: center;
199
+ padding: 0;
200
+ background: color-mix(in srgb, var(--ak-rail-bg) 74%, var(--ak-line));
201
+ }
202
+ :root[data-admin-interface="next"] .rail-foot .rail-item span { display: none; }
203
+ :root[data-admin-interface="next"] .rail-foot .rail-item.is-on {
204
+ background: var(--ak-rail-on);
205
+ color: var(--ak-rail-ink-on);
206
+ }
207
+ :root[data-admin-interface="next"] .rail-foot > :not(.rail-item) {
208
+ width: 48px;
209
+ height: 48px;
210
+ margin: 0;
211
+ overflow: hidden;
212
+ }
213
+ :root[data-admin-interface="next"] .rail-foot > :not(.rail-item) > :first-child {
214
+ width: 48px;
215
+ height: 48px;
216
+ min-height: 48px;
217
+ margin: 0;
218
+ padding: 0;
219
+ display: grid;
220
+ place-items: center;
221
+ border: 0;
222
+ border-radius: 14px;
223
+ background: color-mix(in srgb, var(--ak-rail-bg) 74%, var(--ak-line));
224
+ box-shadow: none;
225
+ overflow: hidden;
226
+ }
227
+ :root[data-admin-interface="next"] .rail-foot > :not(.rail-item) > :first-child {
228
+ color: transparent;
229
+ font-size: 0;
230
+ }
231
+ :root[data-admin-interface="next"] .rail-foot > :not(.rail-item) > :first-child :is(strong, p, small) {
232
+ position: absolute;
233
+ width: 1px;
234
+ height: 1px;
235
+ overflow: hidden;
236
+ clip: rect(0 0 0 0);
237
+ white-space: nowrap;
238
+ }
239
+
240
+ /* Navigazione contestuale: ciò che prima era la seconda colonna diventa il primo livello del
241
+ * workspace. Nessun bordo verticale: basta la differenza fra superficie e foglio bianco. */
242
+ :root[data-admin-interface="next"] .col {
243
+ grid-column: 1;
244
+ grid-row: 2;
245
+ padding: 24px 18px 18px;
246
+ border: 0;
247
+ background: var(--ak-col-bg);
248
+ }
249
+ :root[data-admin-interface="next"] .col-head {
250
+ min-height: 46px;
251
+ padding: 0 10px 17px;
252
+ border: 0;
253
+ }
254
+ :root[data-admin-interface="next"] .col-head-actions {
255
+ height: auto;
256
+ min-height: 0;
257
+ flex-direction: column;
258
+ align-items: stretch;
259
+ gap: 16px;
260
+ }
261
+ :root[data-admin-interface="next"] .col-title {
262
+ color: var(--ak-ink);
263
+ font-size: 18px;
264
+ font-weight: 600;
265
+ letter-spacing: -.015em;
266
+ text-transform: none;
267
+ }
268
+ :root[data-admin-interface="next"] .col-head .ak-btn,
269
+ :root[data-admin-interface="next"] .col-head .pa-new > button {
270
+ min-height: 48px;
271
+ width: 100%;
272
+ justify-content: space-between;
273
+ padding: 0 16px;
274
+ border: 0;
275
+ border-radius: 14px;
276
+ background: var(--ak-accent);
277
+ color: var(--ak-accent-ink);
278
+ font-size: 13px;
279
+ box-shadow: none;
280
+ }
281
+ :root[data-admin-interface="next"] .col-body {
282
+ padding: 0 10px 24px;
283
+ scrollbar-color: var(--ak-line) transparent;
284
+ }
285
+ :root[data-admin-interface="next"] .col-list,
286
+ :root[data-admin-interface="next"] .pg-list,
287
+ :root[data-admin-interface="next"] .rq-list,
288
+ :root[data-admin-interface="next"] .dl-list { gap: 4px; }
289
+ :root[data-admin-interface="next"] .col-item,
290
+ :root[data-admin-interface="next"] .pg-row,
291
+ :root[data-admin-interface="next"] .rq-row,
292
+ :root[data-admin-interface="next"] .mf-item {
293
+ border: 0;
294
+ border-radius: 14px;
295
+ box-shadow: none;
296
+ }
297
+ :root[data-admin-interface="next"] .col-item {
298
+ min-height: 48px;
299
+ padding: 11px 14px;
300
+ font-size: 14px;
301
+ }
302
+ :root[data-admin-interface="next"] .settings-list { gap: 7px; }
303
+ :root[data-admin-interface="next"] .settings-list-item {
304
+ min-height: 78px;
305
+ justify-content: center;
306
+ gap: 6px;
307
+ padding: 14px 16px;
308
+ }
309
+ :root[data-admin-interface="next"] .settings-list-item strong { font-size: 14px; }
310
+ :root[data-admin-interface="next"] .settings-list-item span { font-size: 12px; line-height: 1.45; }
311
+ :root[data-admin-interface="next"] :is(.col-item, .pg-row, .rq-row, .mf-item):hover {
312
+ background: color-mix(in srgb, var(--ak-inset-deep) 55%, transparent);
313
+ }
314
+ :root[data-admin-interface="next"] :is(.col-item, .pg-row, .rq-row, .mf-item).is-on {
315
+ border: 0;
316
+ background: var(--ak-inset-deep);
317
+ box-shadow: none;
318
+ }
319
+ :root[data-admin-interface="next"] :is(.col-item, .pg-row, .rq-row, .mf-item).is-on :is(.ico, .pg-icon, .mf-ico) {
320
+ color: var(--ak-accent);
321
+ }
322
+ :root[data-admin-interface="next"] :is(.col-item, .pg-open, .rq-open, .mf-open, .dl-row):focus-visible {
323
+ outline: 0;
324
+ border-radius: 12px;
325
+ box-shadow: var(--ak-ring);
326
+ }
327
+ :root[data-admin-interface="next"] .pg-group-title,
328
+ :root[data-admin-interface="next"] .bk-list-label {
329
+ margin: 0 0 8px;
330
+ padding: 0 14px;
331
+ color: var(--ak-ink-quiet);
332
+ font-size: 11px;
333
+ font-weight: 500;
334
+ letter-spacing: .02em;
335
+ text-transform: none;
336
+ }
337
+ :root[data-admin-interface="next"] .pg-open,
338
+ :root[data-admin-interface="next"] .mf-open { min-height: 48px; padding-block: 11px; font-size: 14px; }
339
+ :root[data-admin-interface="next"] .mf-list + .mf-list,
340
+ :root[data-admin-interface="next"] .mf-tail,
341
+ :root[data-admin-interface="next"] .dl-col-foot,
342
+ :root[data-admin-interface="next"] .bk-settings-link { border-color: var(--ak-line); }
343
+
344
+ /* Area di lavoro: header-breadcrumb sul fondo quieto, poi un solo foglio bianco arrotondato. */
345
+ :root[data-admin-interface="next"] .pane {
346
+ grid-column: 2;
347
+ grid-row: 2;
348
+ min-width: 0;
349
+ padding: 0 18px 18px 0;
350
+ overflow-y: auto;
351
+ background: var(--ak-bg);
352
+ scrollbar-color: var(--ak-line) transparent;
353
+ }
354
+ :root[data-admin-interface="next"] .app.is-two .pane { grid-column: 1; padding-left: 18px; }
355
+ :root[data-admin-interface="next"] .pane-head {
356
+ min-height: 70px;
357
+ padding: 10px 20px 10px 34px;
358
+ border: 0;
359
+ background: transparent;
360
+ }
361
+ :root[data-admin-interface="next"] .pane-title {
362
+ color: var(--ak-accent);
363
+ font-size: 15px;
364
+ font-weight: 600;
365
+ }
366
+ :root[data-admin-interface="next"] .pane-crumb { font-size: 14px; }
367
+ :root[data-admin-interface="next"] .pane-crumb.is-current { color: var(--ak-accent); font-size: 15px; }
368
+ :root[data-admin-interface="next"] .pane-crumb-sep { color: var(--ak-ink-faint); }
369
+ :root[data-admin-interface="next"] .pane-count { color: var(--ak-ink-quiet); font-size: 12px; }
370
+ :root[data-admin-interface="next"] .pane-head .ak-btn,
371
+ :root[data-admin-interface="next"] .pane-open,
372
+ :root[data-admin-interface="next"] .pe-seo-button,
373
+ :root[data-admin-interface="next"] .pe-status {
374
+ min-height: 40px;
375
+ padding-inline: 14px;
376
+ border-color: transparent;
377
+ border-radius: 12px;
378
+ background: color-mix(in srgb, var(--ak-panel) 68%, transparent);
379
+ }
380
+ :root[data-admin-interface="next"] .pane-head .ak-btn-primary {
381
+ background: var(--ak-accent);
382
+ color: var(--ak-accent-ink);
383
+ }
384
+ :root[data-admin-interface="next"] .pane-body,
385
+ :root[data-admin-interface="next"] .pane-body.is-wide {
386
+ flex: none;
387
+ min-height: calc(100% - 70px);
388
+ margin: 0;
389
+ padding: clamp(24px, 3vw, 42px) clamp(24px, 3vw, 44px) 72px;
390
+ overflow: visible;
391
+ border-radius: 28px;
392
+ background: var(--ak-panel);
393
+ }
394
+ :root[data-admin-interface="next"] .pane-body:has(.ed-portfolio),
395
+ :root[data-admin-interface="next"] .pane-body:has(.ed-gallery),
396
+ :root[data-admin-interface="next"] .pane-body:has(.ed-about),
397
+ :root[data-admin-interface="next"] .pane-body:has(.ed-workshop),
398
+ :root[data-admin-interface="next"] .pane-body:has(.ed-home),
399
+ :root[data-admin-interface="next"] .pane-body:has(.ov) { background: var(--ak-panel); }
400
+ :root[data-admin-interface="next"] .pane-body > :is(.ed, .rq-detail, .rg, .pane-empty) { max-width: 920px; }
401
+ :root[data-admin-interface="next"] .pane-empty { min-height: 180px; justify-content: center; }
402
+
403
+ /* Controlli condivisi: dimensioni più comode, tratti quieti e focus affidato all'anello. */
404
+ :root[data-admin-interface="next"] .ak-btn {
405
+ min-height: 40px;
406
+ padding: 0 15px;
407
+ border-radius: 12px;
408
+ font-size: 12px;
409
+ }
410
+ :root[data-admin-interface="next"] .ak-btn-primary { border-color: transparent; }
411
+ :root[data-admin-interface="next"] :is(.ak-input, .st-input, .dl-field input, .dl-field textarea, .dl-select) {
412
+ border-color: transparent;
413
+ border-radius: 12px;
414
+ background: var(--ak-inset);
415
+ }
416
+ :root[data-admin-interface="next"] :is(.ak-input, .st-input, .dl-field input, .dl-field textarea, .dl-select):focus {
417
+ outline: 0;
418
+ border-color: transparent;
419
+ box-shadow: var(--ak-ring);
420
+ }
421
+
422
+ /* Consegne: il flusso resta interamente visibile, ma le opzioni diventano gruppi tonali
423
+ * annidati nel foglio invece di una griglia di riquadri tecnici. */
424
+ :root[data-admin-interface="next"] .dl-work { gap: 18px; }
425
+ :root[data-admin-interface="next"] .dl-work-head {
426
+ position: static;
427
+ z-index: auto;
428
+ top: auto;
429
+ margin: 0;
430
+ padding: 0 2px 12px;
431
+ background: var(--ak-panel);
432
+ }
433
+ :root[data-admin-interface="next"] .dl-work-title h2 {
434
+ font-size: 20px;
435
+ font-weight: 600;
436
+ letter-spacing: -.02em;
437
+ }
438
+ :root[data-admin-interface="next"] .dl-grid { gap: 18px; }
439
+ :root[data-admin-interface="next"] :is(.dl-main, .dl-side) { gap: 12px; }
440
+ :root[data-admin-interface="next"] :is(.dl-card, .dl-group) {
441
+ border: 0;
442
+ border-radius: 18px;
443
+ background: var(--ak-inset);
444
+ }
445
+ :root[data-admin-interface="next"] .dl-pick-tile {
446
+ border: 0;
447
+ border-radius: 14px;
448
+ background: var(--ak-panel);
449
+ }
450
+ :root[data-admin-interface="next"] .dl-drop { border-color: color-mix(in srgb, var(--ak-ink-faint) 45%, transparent); }
451
+ :root[data-admin-interface="next"] :is(.dl-card, .dl-group) :is(.dl-field input, .dl-field textarea, .dl-select) {
452
+ background: var(--ak-panel);
453
+ }
454
+ :root[data-admin-interface="next"] .dl-get { background: transparent; }
455
+ :root[data-admin-interface="next"] .dl-col-foot { border: 0; padding-inline: 10px; }
456
+
457
+ /* Richieste: il dettaglio è un blocco editoriale dentro il foglio, non un secondo foglio. */
458
+ :root[data-admin-interface="next"] .rq-detail {
459
+ border: 0;
460
+ border-radius: 18px;
461
+ background: var(--ak-inset);
462
+ }
463
+ :root[data-admin-interface="next"] .rq-new { background: var(--ak-notification); }
464
+ :root[data-admin-interface="next"] .rq-head { border-color: color-mix(in srgb, var(--ak-line) 72%, transparent); }
465
+
466
+ /* Impostazioni: una gerarchia editoriale dentro il foglio, non un modulo tecnico. */
467
+ :root[data-admin-interface="next"] .settings-editor {
468
+ width: min(1040px, 100%);
469
+ padding: 0 4px 76px;
470
+ gap: 52px;
471
+ }
472
+ :root[data-admin-interface="next"] .st-intro { padding: 2px 0 28px; border-color: var(--ak-line); }
473
+ :root[data-admin-interface="next"] .st-intro > span { color: var(--ak-accent); font-size: 11px; }
474
+ :root[data-admin-interface="next"] .st-intro h2 {
475
+ font-size: clamp(28px, 3vw, 38px);
476
+ font-weight: 550;
477
+ letter-spacing: -.035em;
478
+ }
479
+ :root[data-admin-interface="next"] .st-intro p { max-width: 700px; font-size: 14px; }
480
+ :root[data-admin-interface="next"] .st-section > h2 { padding-bottom: 16px; font-size: 17px; }
481
+ :root[data-admin-interface="next"] .st-row {
482
+ grid-template-columns: minmax(220px, 310px) minmax(280px, 620px);
483
+ padding: 30px 0;
484
+ }
485
+ :root[data-admin-interface="next"] .st-copy h3 { font-size: 15px; }
486
+ :root[data-admin-interface="next"] .st-copy p { font-size: 13px; }
487
+ :root[data-admin-interface="next"] .st-input { min-height: 48px; padding: 12px 14px; font-size: 14px; }
488
+
489
+ /* Panoramica: preserva la densità informativa, ma mette i moduli su un tono incassato invece
490
+ * di moltiplicare bordi e ombre dentro il foglio principale. */
491
+ :root[data-admin-interface="next"] .ov { gap: 18px; }
492
+ :root[data-admin-interface="next"] .ov-bar { padding: 0 2px 6px; }
493
+ :root[data-admin-interface="next"] .ov-bar-hi { font-size: 14px; }
494
+ :root[data-admin-interface="next"] .ov-grid { gap: 14px; }
495
+ :root[data-admin-interface="next"] .ov-tile {
496
+ border-radius: 18px;
497
+ background: var(--ak-inset);
498
+ }
499
+ :root[data-admin-interface="next"] .ov-cta {
500
+ background: var(--ak-accent);
501
+ color: var(--ak-accent-ink);
502
+ }
503
+ :root[data-admin-interface="next"] .ov-tile-head { padding: 18px 18px 14px; }
504
+ :root[data-admin-interface="next"] .ov-tile-head h2 { font-size: 14px; }
505
+
506
+ /* Editor Home e Pagine -------------------------------------------------------------
507
+ * Nel foglio bianco non serve ripetere una seconda pila di card bianche sollevate. I gruppi
508
+ * di contenuto diventano quindi superfici tonali, mentre campi e anteprime tornano bianchi
509
+ * solo quando devono emergere dal gruppo. La gerarchia resta affidata a tono, spazio e scala,
510
+ * come nella reference, e gli editor visuali possono usare tutta la larghezza disponibile. */
511
+ :root[data-admin-interface="next"] .pane-body > :is(.ed-home, .ed-gallery, .ed-about, .ed-workshop) {
512
+ width: 100%;
513
+ max-width: none;
514
+ }
515
+ :root[data-admin-interface="next"] :is(.hm, .gs-editor, .abo, .wsh-intro) {
516
+ width: min(1180px, 100%);
517
+ }
518
+ :root[data-admin-interface="next"] .hm {
519
+ gap: 20px;
520
+ padding-bottom: 32px;
521
+ }
522
+ :root[data-admin-interface="next"] .hm-hint {
523
+ margin: 0 2px;
524
+ max-width: 66ch;
525
+ color: var(--ak-ink-quiet);
526
+ font-size: 13px;
527
+ line-height: 1.55;
528
+ }
529
+ :root[data-admin-interface="next"] .hm-split {
530
+ grid-template-columns: minmax(280px, .82fr) minmax(360px, 1.18fr);
531
+ gap: 20px;
532
+ }
533
+ :root[data-admin-interface="next"] .hm-photos {
534
+ grid-template-columns: repeat(auto-fit, minmax(170px, 1fr));
535
+ gap: 12px;
536
+ }
537
+ :root[data-admin-interface="next"] .hm-stacked-photos { grid-template-columns: minmax(0, 1fr); }
538
+ :root[data-admin-interface="next"] .hm-photo {
539
+ gap: 10px;
540
+ padding: 14px;
541
+ border-radius: 18px;
542
+ background: var(--ak-inset);
543
+ }
544
+ :root[data-admin-interface="next"] .hm-photo-label,
545
+ :root[data-admin-interface="next"] .pw-label > span {
546
+ font-size: 12px;
547
+ font-weight: 550;
548
+ }
549
+ :root[data-admin-interface="next"] :is(.hm-block, .abo-block, .abo-side-inner, .wsh-intro) {
550
+ border-radius: 18px;
551
+ background: var(--ak-inset);
552
+ box-shadow: none;
553
+ }
554
+ :root[data-admin-interface="next"] .hm-block {
555
+ gap: 14px;
556
+ padding: 18px;
557
+ }
558
+ :root[data-admin-interface="next"] :is(.pw-block-head h4, .gs-card-head strong, .pw-card-kind) {
559
+ color: var(--ak-ink);
560
+ font-size: 12px;
561
+ font-weight: 600;
562
+ letter-spacing: 0;
563
+ text-transform: none;
564
+ }
565
+ :root[data-admin-interface="next"] :is(.hm-block, .abo-block, .abo-side-inner, .wsh-intro) .pw-field,
566
+ :root[data-admin-interface="next"] .hm-row .pw-field {
567
+ background: var(--ak-panel);
568
+ box-shadow: none;
569
+ }
570
+ :root[data-admin-interface="next"] :is(.hm-block, .abo-block, .abo-side-inner, .wsh-intro) .pw-field:hover,
571
+ :root[data-admin-interface="next"] .hm-row .pw-field:hover {
572
+ background: color-mix(in srgb, var(--ak-panel) 88%, var(--ak-inset-deep));
573
+ box-shadow: none;
574
+ }
575
+ :root[data-admin-interface="next"] :is(.hm-block, .abo-block, .abo-side-inner, .wsh-intro) .pw-field:focus,
576
+ :root[data-admin-interface="next"] .hm-row .pw-field:focus { background: var(--ak-panel); box-shadow: var(--ak-ring); }
577
+ :root[data-admin-interface="next"] .hm-title-preview {
578
+ padding: 16px;
579
+ border-radius: 14px;
580
+ background: color-mix(in srgb, var(--ak-inset-deep) 62%, var(--ak-inset));
581
+ }
582
+ :root[data-admin-interface="next"] .hm-title-preview span {
583
+ font-size: clamp(17px, 2.3vw, 25px);
584
+ letter-spacing: -.03em;
585
+ }
586
+ :root[data-admin-interface="next"] .hm-row {
587
+ padding: 5px 7px 5px 2px;
588
+ border-radius: 12px;
589
+ background: color-mix(in srgb, var(--ak-inset-deep) 58%, transparent);
590
+ }
591
+ :root[data-admin-interface="next"] .pw-add-quiet {
592
+ align-self: flex-start;
593
+ min-height: 34px;
594
+ padding-inline: 10px;
595
+ border-radius: 10px;
596
+ }
597
+
598
+ /* Le card riordinabili sono gruppi, non fogli indipendenti. L'elevazione compare soltanto
599
+ * durante il drag: nello stato normale il tono è sufficiente a renderne visibili i confini. */
600
+ :root[data-admin-interface="next"] :is(.pw-work, .pw-card, .gs-card) {
601
+ border-radius: 18px;
602
+ background: var(--ak-inset);
603
+ box-shadow: none;
604
+ }
605
+ :root[data-admin-interface="next"] :is(.pw-work, .pw-card, .gs-card):hover { box-shadow: none; }
606
+ :root[data-admin-interface="next"] .pw-work.is-open {
607
+ background: color-mix(in srgb, var(--ak-inset) 78%, var(--ak-inset-deep));
608
+ box-shadow: none;
609
+ }
610
+ :root[data-admin-interface="next"] .pw-work-reveal {
611
+ display: grid;
612
+ grid-template-rows: 0fr;
613
+ opacity: 0;
614
+ transition:
615
+ grid-template-rows 440ms cubic-bezier(.4, 0, .2, 1),
616
+ opacity 240ms cubic-bezier(.4, 0, .2, 1);
617
+ }
618
+ :root[data-admin-interface="next"] .pw-work-reveal.is-expanded {
619
+ grid-template-rows: 1fr;
620
+ opacity: 1;
621
+ }
622
+ :root[data-admin-interface="next"] .pw-work-reveal-inner {
623
+ min-height: 0;
624
+ overflow: hidden;
625
+ }
626
+ :root[data-admin-interface="next"] .pw-work.is-dragging,
627
+ :root[data-admin-interface="next"] .pw-card.is-dragging,
628
+ :root[data-admin-interface="next"] .gs-card.is-dragging { box-shadow: var(--ak-lift-3); }
629
+ :root[data-admin-interface="next"] .pw-block {
630
+ border-radius: 14px;
631
+ background: color-mix(in srgb, var(--ak-panel) 72%, var(--ak-inset));
632
+ }
633
+ :root[data-admin-interface="next"] .pw-card { background: var(--ak-panel); }
634
+
635
+ /* Gallery: l'intestazione, i conteggi, le azioni e la griglia appartengono a un solo gruppo
636
+ * tonale. `display: contents` elimina il guscio visuale dell'editor fotografico senza alterarne
637
+ * semantica o stato React: i suoi figli diventano righe della card grigia. */
638
+ :root[data-admin-interface="next"] .gs-editor { gap: 18px; padding-top: 0; }
639
+ :root[data-admin-interface="next"] .gs-list { gap: 14px; }
640
+ :root[data-admin-interface="next"] .gs-card-head {
641
+ min-height: 58px;
642
+ padding: 10px 16px 8px 10px;
643
+ }
644
+ :root[data-admin-interface="next"] .gs-card.is-gallery {
645
+ display: grid;
646
+ grid-template-columns: minmax(0, 1fr) auto;
647
+ align-items: start;
648
+ padding-bottom: 8px;
649
+ }
650
+ :root[data-admin-interface="next"] .gs-card.is-gallery > .gs-card-head {
651
+ grid-column: 1 / -1;
652
+ grid-row: 1;
653
+ padding-right: clamp(230px, 25vw, 280px);
654
+ }
655
+ :root[data-admin-interface="next"] .gs-card.is-gallery > .gs-gallery,
656
+ :root[data-admin-interface="next"] .gs-card.is-gallery > .gs-gallery > .pe-gallery,
657
+ :root[data-admin-interface="next"] .gs-card.is-gallery .pe-gallery-bar {
658
+ display: contents;
659
+ }
660
+ :root[data-admin-interface="next"] .gs-card.is-gallery .pe-gallery-summary {
661
+ grid-column: 1 / -1;
662
+ grid-row: 2;
663
+ gap: 3px;
664
+ padding: 2px 20px 12px;
665
+ }
666
+ :root[data-admin-interface="next"] .gs-card.is-gallery .pe-gallery-bar > :is(.pe-add, .pe-add-group) {
667
+ grid-column: 2;
668
+ grid-row: 1;
669
+ z-index: 2;
670
+ align-self: center;
671
+ justify-self: end;
672
+ margin-right: 16px;
673
+ }
674
+ :root[data-admin-interface="next"] .gs-card.is-gallery :is(.pe-photo-grid, .pe-gallery-empty, .pe-hidden-gallery) {
675
+ grid-column: 1 / -1;
676
+ }
677
+ :root[data-admin-interface="next"] .gs-card.is-gallery .pe-photo-grid {
678
+ grid-row: 3;
679
+ margin: 0;
680
+ padding: 8px 20px 36px;
681
+ }
682
+ :root[data-admin-interface="next"] .gs-card.is-gallery .pe-gallery-empty {
683
+ grid-row: 3;
684
+ margin: 0 20px 12px;
685
+ background: color-mix(in srgb, var(--ak-panel) 58%, transparent);
686
+ }
687
+ :root[data-admin-interface="next"] .gs-card.is-gallery .pe-hidden-gallery {
688
+ grid-row: 4;
689
+ margin: 0 20px;
690
+ }
691
+ :root[data-admin-interface="next"] .pe-gallery-bar {
692
+ min-height: 52px;
693
+ padding: 0;
694
+ border: 0;
695
+ }
696
+ :root[data-admin-interface="next"] .pe-gallery-bar strong { font-size: 14px; }
697
+ :root[data-admin-interface="next"] .pe-photo-grid {
698
+ gap: 24px 18px;
699
+ padding-top: 8px;
700
+ }
701
+ :root[data-admin-interface="next"] .pe-photo-frame img {
702
+ border-radius: 7px;
703
+ box-shadow: 0 5px 18px -12px rgba(35, 30, 32, .55);
704
+ }
705
+ :root[data-admin-interface="next"] .pe-photo-actions {
706
+ border: 0;
707
+ border-radius: 10px;
708
+ box-shadow: var(--ak-lift-3);
709
+ }
710
+ /* Tutte le azioni primarie usano la coppia di colori del tema. Alcuni componenti storici
711
+ * fissavano il testo a bianco: in dark l'accento diventa chiaro e richiede invece inchiostro
712
+ * scuro, come il pulsante di pubblicazione. */
713
+ :root[data-admin-interface="next"] :is(.gs-add, .pe-add, .pe-add-position, .btn-soft.is-primary) {
714
+ color: var(--ak-accent-ink);
715
+ }
716
+
717
+ @media (max-width: 900px) {
718
+ :root[data-admin-interface="next"] .gs-card.is-gallery > .gs-card-head { padding-right: 16px; }
719
+ :root[data-admin-interface="next"] .gs-card.is-gallery .pe-gallery-bar > :is(.pe-add, .pe-add-group) {
720
+ grid-column: 1 / -1;
721
+ grid-row: 2;
722
+ justify-self: start;
723
+ margin: 4px 20px 12px;
724
+ }
725
+ :root[data-admin-interface="next"] .gs-card.is-gallery .pe-gallery-summary { grid-row: 3; }
726
+ :root[data-admin-interface="next"] .gs-card.is-gallery .pe-photo-grid,
727
+ :root[data-admin-interface="next"] .gs-card.is-gallery .pe-gallery-empty { grid-row: 4; }
728
+ :root[data-admin-interface="next"] .gs-card.is-gallery .pe-hidden-gallery { grid-row: 5; }
729
+ }
730
+ :root[data-admin-interface="next"] :is(.gs-fields, .gs-image-editor) { padding-inline: 16px; }
731
+ :root[data-admin-interface="next"] :is(.gs-fields input, .gs-fields textarea, .gs-fields .ak-prose-field, .gs-image-fields input) {
732
+ border-radius: 12px;
733
+ background: var(--ak-panel);
734
+ }
735
+
736
+ /* La testata di una pagina contiene due gruppi leggibili: identità a sinistra, stato e azioni
737
+ * a destra. Il wrap evita che i controlli comprimano il titolo sui viewport intermedi. */
738
+ :root[data-admin-interface="next"] .pe-head-main {
739
+ gap: 8px;
740
+ flex-wrap: wrap;
741
+ }
742
+ :root[data-admin-interface="next"] .pe-title {
743
+ max-width: min(32vw, 380px);
744
+ margin-right: 4px;
745
+ font-size: 18px;
746
+ letter-spacing: -.02em;
747
+ }
748
+ :root[data-admin-interface="next"] .pe-language {
749
+ border: 0;
750
+ border-radius: 10px;
751
+ background: color-mix(in srgb, var(--ak-panel) 68%, transparent);
752
+ }
753
+ :root[data-admin-interface="next"] .pe-language button { min-height: 36px; border: 0; }
754
+ :root[data-admin-interface="next"] .pe-language button.is-active { box-shadow: none; }
755
+ :root[data-admin-interface="next"] .pe-menu-toggle {
756
+ min-height: 40px;
757
+ padding: 0 12px;
758
+ border-radius: 12px;
759
+ background: color-mix(in srgb, var(--ak-panel) 68%, transparent);
760
+ }
761
+
762
+ @media (max-width: 1050px) {
763
+ :root[data-admin-interface="next"] .hm-split { grid-template-columns: minmax(0, 1fr); }
764
+ :root[data-admin-interface="next"] .hm-split > .hm-photos { grid-template-columns: repeat(2, minmax(0, 1fr)); }
765
+ }
766
+
767
+ @media (prefers-reduced-motion: reduce) {
768
+ :root[data-admin-interface="next"] .pw-work-reveal { transition-duration: 1ms; }
769
+ }
770
+
771
+ /* I vecchi avvisi restano distinguibili, ma appartengono al foglio e non spezzano più la shell. */
772
+ :root[data-admin-interface="next"] .app-legacy {
773
+ margin: 0 18px 12px 0;
774
+ padding: 12px 16px;
775
+ border: 0;
776
+ border-radius: 14px;
777
+ background: color-mix(in srgb, #f0b94a 13%, var(--ak-panel));
778
+ }
779
+
780
+ /* Prima cedono le etichette delle attività meno frequenti, così le aree editoriali
781
+ * restano leggibili anche su un portatile. */
782
+ @media (max-width: 1450px) {
783
+ :root[data-admin-interface="next"] .rail-nav .rail-group:nth-child(3) .rail-item {
784
+ position: relative;
785
+ width: 48px;
786
+ justify-content: center;
787
+ padding: 0;
788
+ }
789
+ :root[data-admin-interface="next"] .rail-nav .rail-group:nth-child(3) .rail-item > span:not(.rail-badge) { display: none; }
790
+ :root[data-admin-interface="next"] .rail-nav .rail-group:nth-child(3) .rail-badge {
791
+ position: absolute;
792
+ transform: translate(13px, -13px);
793
+ }
794
+ }
795
+
796
+ /* A larghezze intermedie anche gli altri tab globali conservano le icone e cedono le etichette. */
797
+ @media (max-width: 1180px) {
798
+ :root[data-admin-interface="next"] .rail-brand { min-width: 148px; }
799
+ :root[data-admin-interface="next"] .rail-nav .rail-item { width: 48px; justify-content: center; padding: 0; }
800
+ :root[data-admin-interface="next"] .rail-nav .rail-item > span:not(.rail-badge) { display: none; }
801
+ :root[data-admin-interface="next"] .rail-nav .rail-badge { position: absolute; transform: translate(13px, -13px); }
802
+ }
803
+
804
+ @media (max-width: 820px) {
805
+ :root[data-admin-interface="next"] body { padding: 0; }
806
+ :root[data-admin-interface="next"] .app,
807
+ :root[data-admin-interface="next"] .app.is-two {
808
+ height: 100vh;
809
+ grid-template-columns: minmax(220px, 40vw) minmax(0, 1fr);
810
+ grid-template-rows: 70px minmax(0, 1fr);
811
+ border-radius: 0;
812
+ }
813
+ :root[data-admin-interface="next"] .app.is-two { grid-template-columns: minmax(0, 1fr); }
814
+ :root[data-admin-interface="next"] .rail { padding: 9px 10px; align-items: center; }
815
+ :root[data-admin-interface="next"] .rail-brand { min-width: 48px; width: 48px; height: 48px; padding: 0; }
816
+ :root[data-admin-interface="next"] .rail-brand-name { font-size: 0; }
817
+ :root[data-admin-interface="next"] .rail-brand-name::first-letter { font-size: 14px; }
818
+ :root[data-admin-interface="next"] .rail-brand-role { display: none; }
819
+ :root[data-admin-interface="next"] .rail-foot .rail-item:not(.is-on) { display: none; }
820
+ :root[data-admin-interface="next"] .col { padding: 18px 10px 10px; }
821
+ :root[data-admin-interface="next"] .pane { padding: 0 10px 10px 0; }
822
+ :root[data-admin-interface="next"] .app.is-two .pane { padding-left: 10px; }
823
+ :root[data-admin-interface="next"] .pane-head { min-height: 62px; padding: 8px 10px 8px 18px; }
824
+ :root[data-admin-interface="next"] .pane-body,
825
+ :root[data-admin-interface="next"] .pane-body.is-wide { border-radius: 22px; padding: 24px 20px 56px; }
826
+ }