@jxsuite/starters 1.2.1 → 1.6.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 (82) hide show
  1. package/README.md +194 -0
  2. package/package.json +4 -2
  3. package/registry.json +16 -0
  4. package/sites/blog/document.schema.json +1802 -1153
  5. package/sites/blog/package.json +3 -3
  6. package/sites/blog/project.schema.json +535 -39
  7. package/sites/course/document.schema.json +1802 -1153
  8. package/sites/course/package.json +3 -3
  9. package/sites/course/project.schema.json +535 -39
  10. package/sites/event/document.schema.json +1802 -1153
  11. package/sites/event/package.json +3 -3
  12. package/sites/event/project.schema.json +535 -39
  13. package/sites/fitness-studio/document.schema.json +1802 -1153
  14. package/sites/fitness-studio/package.json +3 -3
  15. package/sites/fitness-studio/project.schema.json +535 -39
  16. package/sites/home-services/document.schema.json +1802 -1153
  17. package/sites/home-services/package.json +3 -3
  18. package/sites/home-services/project.schema.json +535 -39
  19. package/sites/museum/components/mu-band.json +92 -0
  20. package/sites/museum/components/mu-cta.json +101 -0
  21. package/sites/museum/components/mu-exhibition-card.json +191 -0
  22. package/sites/museum/components/mu-exhibition-row.json +237 -0
  23. package/sites/museum/components/mu-fact.json +64 -0
  24. package/sites/museum/components/mu-footer.json +256 -0
  25. package/sites/museum/components/mu-hero.json +236 -0
  26. package/sites/museum/components/mu-more.json +63 -0
  27. package/sites/museum/components/mu-oculus.json +44 -0
  28. package/sites/museum/components/mu-pagehead.json +105 -0
  29. package/sites/museum/components/mu-quote.json +49 -0
  30. package/sites/museum/content/exhibitions/ar/clay-salt-thread.md +18 -0
  31. package/sites/museum/content/exhibitions/ar/harbour-and-crane.md +18 -0
  32. package/sites/museum/content/exhibitions/ar/the-cartographers-room.md +18 -0
  33. package/sites/museum/content/exhibitions/en/clay-salt-thread.md +19 -0
  34. package/sites/museum/content/exhibitions/en/harbour-and-crane.md +19 -0
  35. package/sites/museum/content/exhibitions/en/the-cartographers-room.md +19 -0
  36. package/sites/museum/content/exhibitions/fr-CA/clay-salt-thread.md +18 -0
  37. package/sites/museum/content/exhibitions/fr-CA/harbour-and-crane.md +18 -0
  38. package/sites/museum/content/exhibitions/fr-CA/the-cartographers-room.md +18 -0
  39. package/sites/museum/document.schema.json +23513 -0
  40. package/sites/museum/layouts/ar.json +29 -0
  41. package/sites/museum/layouts/base.json +329 -0
  42. package/sites/museum/layouts/fr-ca.json +28 -0
  43. package/sites/museum/package.json +18 -0
  44. package/sites/museum/pages/about.json +378 -0
  45. package/sites/museum/pages/ar/about.json +314 -0
  46. package/sites/museum/pages/ar/exhibitions/[slug].json +211 -0
  47. package/sites/museum/pages/ar/exhibitions/index.json +103 -0
  48. package/sites/museum/pages/ar/index.json +246 -0
  49. package/sites/museum/pages/ar/visit.json +327 -0
  50. package/sites/museum/pages/exhibitions/[slug].json +200 -0
  51. package/sites/museum/pages/exhibitions/index.json +93 -0
  52. package/sites/museum/pages/fr-ca/a-propos.json +313 -0
  53. package/sites/museum/pages/fr-ca/expositions/[slug].json +215 -0
  54. package/sites/museum/pages/fr-ca/expositions/index.json +104 -0
  55. package/sites/museum/pages/fr-ca/index.json +246 -0
  56. package/sites/museum/pages/fr-ca/visite.json +328 -0
  57. package/sites/museum/pages/index.json +236 -0
  58. package/sites/museum/pages/visit.json +317 -0
  59. package/sites/museum/project.json +179 -0
  60. package/sites/museum/project.schema.json +996 -0
  61. package/sites/museum/public/favicon.svg +8 -0
  62. package/sites/nonprofit/document.schema.json +1802 -1153
  63. package/sites/nonprofit/package.json +3 -3
  64. package/sites/nonprofit/project.schema.json +535 -39
  65. package/sites/portfolio/document.schema.json +1802 -1153
  66. package/sites/portfolio/package.json +3 -3
  67. package/sites/portfolio/project.schema.json +535 -39
  68. package/sites/professional-firm/document.schema.json +1802 -1153
  69. package/sites/professional-firm/package.json +3 -3
  70. package/sites/professional-firm/project.schema.json +535 -39
  71. package/sites/real-estate/document.schema.json +1802 -1153
  72. package/sites/real-estate/package.json +3 -3
  73. package/sites/real-estate/project.schema.json +535 -39
  74. package/sites/restaurant/document.schema.json +1802 -1153
  75. package/sites/restaurant/package.json +3 -3
  76. package/sites/restaurant/project.schema.json +535 -39
  77. package/sites/saas/document.schema.json +1802 -1153
  78. package/sites/saas/package.json +3 -3
  79. package/sites/saas/project.schema.json +535 -39
  80. package/sites/shop/document.schema.json +1802 -1153
  81. package/sites/shop/package.json +3 -3
  82. package/sites/shop/project.schema.json +535 -39
@@ -0,0 +1,328 @@
1
+ {
2
+ "$layout": "./layouts/fr-ca.json",
3
+ "$translationKey": "visit",
4
+ "title": "Préparer sa visite — Atrium",
5
+ "description": "Heures, admission, transport et accessibilité au musée municipal d'art et d'histoire Atrium. Entrée libre, du mardi au dimanche, de 10 h à 18 h.",
6
+ "$head": [
7
+ {
8
+ "tagName": "meta",
9
+ "attributes": {
10
+ "name": "description",
11
+ "content": "Heures, admission, transport et accessibilité au musée municipal d'art et d'histoire Atrium. Entrée libre, du mardi au dimanche, de 10 h à 18 h."
12
+ }
13
+ }
14
+ ],
15
+ "state": {
16
+ "tourPrice": {
17
+ "$expression": {
18
+ "operator": "call",
19
+ "target": { "$ref": "window#/Intl/formatNumber" },
20
+ "value": [12, null, { "style": "currency", "currency": "CAD" }]
21
+ }
22
+ },
23
+ "membership": {
24
+ "$expression": {
25
+ "operator": "call",
26
+ "target": { "$ref": "window#/Intl/formatNumber" },
27
+ "value": [45, null, { "style": "currency", "currency": "CAD" }]
28
+ }
29
+ },
30
+ "trams": {
31
+ "$expression": {
32
+ "operator": "call",
33
+ "target": { "$ref": "window#/Intl/formatList" },
34
+ "value": [["2", "6", "11"]]
35
+ }
36
+ },
37
+ "closedFrom": {
38
+ "$expression": {
39
+ "operator": "call",
40
+ "target": { "$ref": "window#/Intl/formatDate" },
41
+ "value": ["2026-12-24", null, { "day": "numeric", "month": "long" }]
42
+ }
43
+ },
44
+ "closedTo": {
45
+ "$expression": {
46
+ "operator": "call",
47
+ "target": { "$ref": "window#/Intl/formatDate" },
48
+ "value": ["2026-12-26", null, { "day": "numeric", "month": "long", "year": "numeric" }]
49
+ }
50
+ }
51
+ },
52
+ "children": [
53
+ {
54
+ "tagName": "mu-pagehead",
55
+ "$props": {
56
+ "kicker": "Visite",
57
+ "title": "De dix heures à six heures, six jours sur sept",
58
+ "standfirst": "Il n'y a pas de billetterie, parce qu'il n'y a pas de billet. Entrez par le côté du quai, laissez votre sac au comptoir s'il est plus gros qu'une sacoche, et commencez où vous voulez.",
59
+ "metaLabel": "Adresse",
60
+ "metaValue": "2, quai des Écluses, Vieux-Port"
61
+ }
62
+ },
63
+ {
64
+ "tagName": "mu-band",
65
+ "$props": { "index": "01", "label": "Heures", "tone": "chalk" },
66
+ "children": [
67
+ {
68
+ "tagName": "div",
69
+ "style": {
70
+ "display": "grid",
71
+ "gridTemplateColumns": "repeat(2, minmax(0, 1fr))",
72
+ "columnGap": "clamp(2rem, 5vw, 4rem)",
73
+ "@--md": { "gridTemplateColumns": "minmax(0, 1fr)" }
74
+ },
75
+ "children": [
76
+ {
77
+ "tagName": "div",
78
+ "children": [
79
+ {
80
+ "tagName": "mu-fact",
81
+ "$props": {
82
+ "term": "Mar. – ven.",
83
+ "value": "10 h – 18 h",
84
+ "note": "Dernière entrée à la salle de lecture à 17 h."
85
+ }
86
+ },
87
+ {
88
+ "tagName": "mu-fact",
89
+ "$props": {
90
+ "term": "Sam. – dim.",
91
+ "value": "10 h – 18 h",
92
+ "note": "La cour reste ouverte jusqu'à 19 h de mai à septembre."
93
+ }
94
+ }
95
+ ]
96
+ },
97
+ {
98
+ "tagName": "div",
99
+ "children": [
100
+ {
101
+ "tagName": "mu-fact",
102
+ "$props": {
103
+ "term": "Lundi",
104
+ "value": "Fermé",
105
+ "note": "Journée de conservation. Le café côté quai reste ouvert."
106
+ }
107
+ },
108
+ {
109
+ "tagName": "mu-fact",
110
+ "$props": {
111
+ "term": "Fermeture d'hiver",
112
+ "value": "Du ${state.closedFrom} au ${state.closedTo}",
113
+ "note": "Les trois seuls jours consécutifs de fermeture de toute l'année."
114
+ }
115
+ }
116
+ ]
117
+ }
118
+ ]
119
+ }
120
+ ]
121
+ },
122
+ {
123
+ "tagName": "mu-band",
124
+ "$props": { "index": "02", "label": "Admission", "tone": "card" },
125
+ "children": [
126
+ {
127
+ "tagName": "div",
128
+ "style": {
129
+ "display": "grid",
130
+ "gridTemplateColumns": "minmax(0, 1fr) minmax(0, 1fr)",
131
+ "columnGap": "clamp(2rem, 5vw, 4rem)",
132
+ "rowGap": "1.5rem",
133
+ "@--md": { "gridTemplateColumns": "minmax(0, 1fr)" }
134
+ },
135
+ "children": [
136
+ {
137
+ "tagName": "div",
138
+ "style": {
139
+ "border": "2px solid var(--color-ink)",
140
+ "backgroundColor": "var(--color-pigment)",
141
+ "color": "var(--color-card)",
142
+ "padding": "clamp(1.5rem, 3.5vw, 2.25rem)"
143
+ },
144
+ "children": [
145
+ {
146
+ "tagName": "p",
147
+ "style": {
148
+ "margin": "0 0 0.9rem",
149
+ "fontFamily": "var(--font-label)",
150
+ "fontSize": "0.66rem",
151
+ "letterSpacing": "var(--label-tracking)",
152
+ "textTransform": "var(--label-case)",
153
+ "opacity": "0.8"
154
+ },
155
+ "textContent": "Admission générale"
156
+ },
157
+ {
158
+ "tagName": "p",
159
+ "style": {
160
+ "margin": "0",
161
+ "fontFamily": "var(--font-display)",
162
+ "fontSize": "clamp(2.4rem, 6vw, 3.6rem)",
163
+ "fontWeight": "700",
164
+ "lineHeight": "calc(1 * var(--leading-scale))",
165
+ "letterSpacing": "var(--display-tracking)"
166
+ },
167
+ "textContent": "Gratuite"
168
+ },
169
+ {
170
+ "tagName": "p",
171
+ "style": { "margin": "1.1rem 0 0", "lineHeight": "1.65", "maxWidth": "34ch" },
172
+ "textContent": "Inscrite dans la souscription fondatrice de 1897 et jamais modifiée depuis. Pas de billet, pas de réservation, pas d'heure réservée aux membres."
173
+ }
174
+ ]
175
+ },
176
+ {
177
+ "tagName": "div",
178
+ "children": [
179
+ {
180
+ "tagName": "mu-fact",
181
+ "$props": {
182
+ "term": "Visite guidée",
183
+ "value": "${state.tourPrice}",
184
+ "note": "Quatre-vingt-dix minutes, le samedi à 11 h et à 15 h. Réservation au comptoir."
185
+ }
186
+ },
187
+ {
188
+ "tagName": "mu-fact",
189
+ "$props": {
190
+ "term": "Adhésion",
191
+ "value": "${state.membership}",
192
+ "note": "Une année de visites guidées, la revue trimestrielle et un droit de vote à l'assemblée annuelle."
193
+ }
194
+ },
195
+ {
196
+ "tagName": "mu-fact",
197
+ "$props": {
198
+ "term": "Écoles",
199
+ "value": "Jamais de frais",
200
+ "note": "L'autobus compris. Écrivez au service éducatif six semaines à l'avance."
201
+ }
202
+ }
203
+ ]
204
+ }
205
+ ]
206
+ }
207
+ ]
208
+ },
209
+ {
210
+ "tagName": "mu-band",
211
+ "$props": { "index": "03", "label": "S'y rendre", "tone": "chalk" },
212
+ "children": [
213
+ {
214
+ "tagName": "div",
215
+ "style": {
216
+ "display": "grid",
217
+ "gridTemplateColumns": "repeat(2, minmax(0, 1fr))",
218
+ "columnGap": "clamp(2rem, 5vw, 4rem)",
219
+ "@--md": { "gridTemplateColumns": "minmax(0, 1fr)" }
220
+ },
221
+ "children": [
222
+ {
223
+ "tagName": "div",
224
+ "children": [
225
+ {
226
+ "tagName": "mu-fact",
227
+ "$props": {
228
+ "term": "Tramway",
229
+ "value": "Lignes ${state.trams}",
230
+ "note": "Arrêt Écluses. La halle est le toit de verre à votre gauche en descendant."
231
+ }
232
+ },
233
+ {
234
+ "tagName": "mu-fact",
235
+ "$props": {
236
+ "term": "À pied",
237
+ "value": "Onze minutes de la porte de la vieille ville",
238
+ "note": "Suivez le quai ; le dernier tronçon est pavé et inégal."
239
+ }
240
+ }
241
+ ]
242
+ },
243
+ {
244
+ "tagName": "div",
245
+ "children": [
246
+ {
247
+ "tagName": "mu-fact",
248
+ "$props": {
249
+ "term": "À vélo",
250
+ "value": "Quarante supports sous l'auvent nord",
251
+ "note": "Couverts, éclairés et à la vue du comptoir d'accueil."
252
+ }
253
+ },
254
+ {
255
+ "tagName": "mu-fact",
256
+ "$props": {
257
+ "term": "En auto",
258
+ "value": "Pas de stationnement au musée",
259
+ "note": "Stationnement public au Bassin Nord, à six minutes de marche par le pont de l'écluse."
260
+ }
261
+ }
262
+ ]
263
+ }
264
+ ]
265
+ }
266
+ ]
267
+ },
268
+ {
269
+ "tagName": "mu-band",
270
+ "$props": { "index": "04", "label": "Accessibilité", "tone": "card" },
271
+ "children": [
272
+ {
273
+ "tagName": "div",
274
+ "style": { "maxWidth": "var(--measure)" },
275
+ "children": [
276
+ {
277
+ "tagName": "p",
278
+ "style": { "margin": "0 0 1.5rem", "lineHeight": "1.75" },
279
+ "textContent": "Toutes les salles sont accessibles sans marche depuis l'entrée côté quai, y compris la cour et la salle de lecture. Seule exception : le passage de la douane, qui compte quatre marches de pierre sans main courante ; un contournement de plain-pied est indiqué dès l'entrée."
280
+ },
281
+ {
282
+ "tagName": "mu-fact",
283
+ "$props": {
284
+ "term": "Sans marche",
285
+ "value": "Toutes les salles et la salle de lecture",
286
+ "note": "Deux ascenseurs, tous deux assez grands pour un fauteuil roulant et un accompagnateur."
287
+ }
288
+ },
289
+ {
290
+ "tagName": "mu-fact",
291
+ "$props": {
292
+ "term": "Places assises",
293
+ "value": "Un banc dans chaque salle",
294
+ "note": "Tabourets pliants au comptoir, prêtés gratuitement, sans dépôt."
295
+ }
296
+ },
297
+ {
298
+ "tagName": "mu-fact",
299
+ "$props": {
300
+ "term": "Heure calme",
301
+ "value": "Le mercredi, de 10 h à 11 h",
302
+ "note": "Éclairage doux, son coupé, et deux fois moins de monde qu'à l'habitude."
303
+ }
304
+ },
305
+ {
306
+ "tagName": "mu-fact",
307
+ "$props": {
308
+ "term": "Chiens d'assistance",
309
+ "value": "Bienvenus partout",
310
+ "note": "Bols d'eau aux deux entrées et dans la cour."
311
+ }
312
+ }
313
+ ]
314
+ }
315
+ ]
316
+ },
317
+ {
318
+ "tagName": "mu-cta",
319
+ "$props": {
320
+ "kicker": "Avant de venir",
321
+ "heading": "Voyez ce qui est accroché cette semaine.",
322
+ "text": "Trois expositions sont ouvertes, et la programmation indique ce qui change ensuite.",
323
+ "label": "À l'affiche",
324
+ "href": "/fr-ca/expositions/"
325
+ }
326
+ }
327
+ ]
328
+ }
@@ -0,0 +1,236 @@
1
+ {
2
+ "title": "Atrium — City Museum of Art and History",
3
+ "description": "A city museum in a glass hall: four centuries of the harbour, its makers and its maps. Free entry, Tuesday to Sunday, in English, French and Arabic.",
4
+ "state": {
5
+ "objects": {
6
+ "$expression": {
7
+ "operator": "call",
8
+ "target": { "$ref": "window#/Intl/formatNumber" },
9
+ "value": [18400]
10
+ }
11
+ },
12
+ "visitors": {
13
+ "$expression": {
14
+ "operator": "call",
15
+ "target": { "$ref": "window#/Intl/formatNumber" },
16
+ "value": [212000]
17
+ }
18
+ },
19
+ "founded": {
20
+ "$expression": {
21
+ "operator": "call",
22
+ "target": { "$ref": "window#/Intl/formatDate" },
23
+ "value": ["1897-11-04", null, { "day": "numeric", "month": "long", "year": "numeric" }]
24
+ }
25
+ },
26
+ "openDays": {
27
+ "$expression": {
28
+ "operator": "call",
29
+ "target": { "$ref": "window#/Intl/formatList" },
30
+ "value": [["Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]]
31
+ }
32
+ },
33
+ "shows": {
34
+ "$prototype": "ContentCollection",
35
+ "$src": "@jxsuite/parser/ContentCollection.class.json",
36
+ "contentType": "exhibitions",
37
+ "filter": [{ "field": "lang", "op": "==", "value": "en" }],
38
+ "sort": [{ "field": "order", "order": "asc" }],
39
+ "limit": 3
40
+ }
41
+ },
42
+ "children": [
43
+ {
44
+ "tagName": "mu-hero",
45
+ "$props": {
46
+ "kicker": "City Museum of Art & History",
47
+ "title": "Four centuries, one glass hall",
48
+ "standfirst": "Atrium holds what the city made, bought, salvaged and argued over since the first stone quay went in — and shows it free, in three languages, six days a week.",
49
+ "primaryLabel": "Plan your visit",
50
+ "primaryHref": "/visit/",
51
+ "secondaryLabel": "What's on",
52
+ "secondaryHref": "/exhibitions/",
53
+ "noteLabel": "Free entry",
54
+ "note": "Tuesday to Sunday, 10:00–18:00"
55
+ }
56
+ },
57
+ {
58
+ "tagName": "mu-band",
59
+ "$props": { "index": "01", "label": "Now on view", "tone": "chalk" },
60
+ "children": [
61
+ {
62
+ "tagName": "h2",
63
+ "style": {
64
+ "margin": "0 0 2.25rem",
65
+ "fontFamily": "var(--font-display)",
66
+ "fontSize": "clamp(1.7rem, 3.6vw, 2.6rem)",
67
+ "fontWeight": "500",
68
+ "lineHeight": "calc(1.08 * var(--leading-scale))",
69
+ "letterSpacing": "var(--display-tracking)",
70
+ "maxWidth": "22ch"
71
+ },
72
+ "textContent": "Three exhibitions, all of them about this place"
73
+ },
74
+ {
75
+ "tagName": "div",
76
+ "style": {
77
+ "display": "grid",
78
+ "gridTemplateColumns": "repeat(3, minmax(0, 1fr))",
79
+ "gap": "clamp(1rem, 2.5vw, 1.75rem)",
80
+ "@--md": { "gridTemplateColumns": "repeat(2, minmax(0, 1fr))" },
81
+ "@--sm": { "gridTemplateColumns": "minmax(0, 1fr)" }
82
+ },
83
+ "children": {
84
+ "$prototype": "Array",
85
+ "items": { "$ref": "#/state/shows" },
86
+ "map": {
87
+ "tagName": "mu-exhibition-card",
88
+ "$props": {
89
+ "title": "${item.data.title}",
90
+ "description": "${item.data.description}",
91
+ "gallery": "${item.data.gallery}",
92
+ "status": "Open now",
93
+ "href": "/exhibitions/${item.id}/",
94
+ "hue": "${item.data.hue}",
95
+ "date": "${item.data.date}",
96
+ "until": "${item.data.until}",
97
+ "locale": "${$page.locale}"
98
+ }
99
+ }
100
+ }
101
+ },
102
+ {
103
+ "tagName": "mu-more",
104
+ "$props": {
105
+ "label": "The whole programme",
106
+ "href": "/exhibitions/",
107
+ "space": "2rem"
108
+ }
109
+ }
110
+ ]
111
+ },
112
+ {
113
+ "tagName": "mu-band",
114
+ "$props": { "index": "02", "label": "The museum in numbers", "tone": "card" },
115
+ "children": [
116
+ {
117
+ "tagName": "div",
118
+ "style": {
119
+ "display": "grid",
120
+ "gridTemplateColumns": "repeat(2, minmax(0, 1fr))",
121
+ "columnGap": "clamp(2rem, 5vw, 4rem)",
122
+ "@--md": { "gridTemplateColumns": "minmax(0, 1fr)" }
123
+ },
124
+ "children": [
125
+ {
126
+ "tagName": "div",
127
+ "children": [
128
+ {
129
+ "tagName": "mu-fact",
130
+ "$props": {
131
+ "term": "Objects",
132
+ "value": "${state.objects}",
133
+ "note": "Catalogued, of which about a tenth are on show at any one time."
134
+ }
135
+ },
136
+ {
137
+ "tagName": "mu-fact",
138
+ "$props": {
139
+ "term": "Visitors",
140
+ "value": "${state.visitors}",
141
+ "note": "In the last full year, counted at the door."
142
+ }
143
+ }
144
+ ]
145
+ },
146
+ {
147
+ "tagName": "div",
148
+ "children": [
149
+ {
150
+ "tagName": "mu-fact",
151
+ "$props": {
152
+ "term": "Founded",
153
+ "value": "${state.founded}",
154
+ "note": "By a subscription of 240 households, in a room above the customs house."
155
+ }
156
+ },
157
+ {
158
+ "tagName": "mu-fact",
159
+ "$props": {
160
+ "term": "Open",
161
+ "value": "${state.openDays}",
162
+ "note": "Closed Mondays, and on the two days a year the hall is cleaned."
163
+ }
164
+ }
165
+ ]
166
+ }
167
+ ]
168
+ },
169
+ {
170
+ "tagName": "p",
171
+ "style": {
172
+ "margin": "2rem 0 0",
173
+ "paddingBlockStart": "1.1rem",
174
+ "borderBlockStart": "1px solid var(--color-hairline)",
175
+ "fontSize": "0.95rem",
176
+ "lineHeight": "1.6",
177
+ "color": "var(--color-muted)",
178
+ "maxWidth": "var(--measure)"
179
+ },
180
+ "textContent": "Every figure here is formatted by the page's own language: this document renders 18,400 in English, 18 400 in French and ١٨٬٤٠٠ in Arabic, because the route already said which language it is."
181
+ }
182
+ ]
183
+ },
184
+ {
185
+ "tagName": "mu-band",
186
+ "$props": { "index": "03", "label": "From the reading room", "tone": "chalk" },
187
+ "children": [
188
+ {
189
+ "tagName": "div",
190
+ "style": {
191
+ "display": "grid",
192
+ "gridTemplateColumns": "minmax(0, 1.05fr) minmax(0, 1fr)",
193
+ "columnGap": "clamp(2rem, 5vw, 4rem)",
194
+ "alignItems": "start",
195
+ "@--md": { "gridTemplateColumns": "minmax(0, 1fr)", "rowGap": "2rem" }
196
+ },
197
+ "children": [
198
+ {
199
+ "tagName": "mu-quote",
200
+ "$props": {
201
+ "quote": "A museum is a room where a city keeps the things it cannot agree about.",
202
+ "attribution": "Hélène Fournier, first curator, 1897"
203
+ }
204
+ },
205
+ {
206
+ "tagName": "div",
207
+ "style": { "maxWidth": "var(--measure)" },
208
+ "children": [
209
+ {
210
+ "tagName": "p",
211
+ "style": { "margin": "0", "lineHeight": "1.75" },
212
+ "textContent": "The reading room on the second floor is open to anyone with a question. Its shelves hold the harbour ledgers, the survey notebooks, four hundred boxes of workshop correspondence, and the museum's own minute books — including the ones recording arguments the trustees would rather have kept quiet."
213
+ },
214
+ {
215
+ "tagName": "p",
216
+ "style": { "margin": "1.1rem 0 0", "lineHeight": "1.75" },
217
+ "textContent": "No appointment is needed to read; one is needed to handle. Ask at the desk and a member of staff will bring the box up within the hour."
218
+ }
219
+ ]
220
+ }
221
+ ]
222
+ }
223
+ ]
224
+ },
225
+ {
226
+ "tagName": "mu-cta",
227
+ "$props": {
228
+ "kicker": "Free entry",
229
+ "heading": "The hall is open. Come and disagree with us.",
230
+ "text": "Six days a week, ten to six, no ticket and no booking. The courtyard stays open an hour later through the summer.",
231
+ "label": "Plan your visit",
232
+ "href": "/visit/"
233
+ }
234
+ }
235
+ ]
236
+ }