@arbidocs/blocks 0.5.59 → 0.5.60
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.
- package/README.md +40 -0
- package/dist/{ConnectedCallDock-IGIDX5LT.cjs → ConnectedCallDock-NEXHEXVL.cjs} +14 -14
- package/dist/{ConnectedCallDock-IGIDX5LT.cjs.map → ConnectedCallDock-NEXHEXVL.cjs.map} +1 -1
- package/dist/{ConnectedCallDock-KCINYWGF.js → ConnectedCallDock-PMCWZXCO.js} +13 -13
- package/dist/{ConnectedCallDock-KCINYWGF.js.map → ConnectedCallDock-PMCWZXCO.js.map} +1 -1
- package/dist/{ConnectedCallRoom-V3UUSCMA.cjs → ConnectedCallRoom-GE2TMDIL.cjs} +14 -14
- package/dist/{ConnectedCallRoom-V3UUSCMA.cjs.map → ConnectedCallRoom-GE2TMDIL.cjs.map} +1 -1
- package/dist/{ConnectedCallRoom-W3IDBOFA.js → ConnectedCallRoom-RJZT5ZUA.js} +13 -13
- package/dist/{ConnectedCallRoom-W3IDBOFA.js.map → ConnectedCallRoom-RJZT5ZUA.js.map} +1 -1
- package/dist/{ConnectedDocumentViewer-DXBTO2K6.cjs → ConnectedDocumentViewer-2KDPYQDT.cjs} +22 -21
- package/dist/{ConnectedDocumentViewer-DXBTO2K6.cjs.map → ConnectedDocumentViewer-2KDPYQDT.cjs.map} +1 -1
- package/dist/{ConnectedDocumentViewer-S4TWI5ML.js → ConnectedDocumentViewer-GYLXZV72.js} +21 -20
- package/dist/{ConnectedDocumentViewer-S4TWI5ML.js.map → ConnectedDocumentViewer-GYLXZV72.js.map} +1 -1
- package/dist/{ConnectedNativeDocxComparison-XOUU4XE4.cjs → ConnectedNativeDocxComparison-2OC37MR5.cjs} +15 -15
- package/dist/ConnectedNativeDocxComparison-2OC37MR5.cjs.map +1 -0
- package/dist/{ConnectedNativeDocxComparison-4Q57CKP4.js → ConnectedNativeDocxComparison-7PD2LD7L.js} +14 -14
- package/dist/ConnectedNativeDocxComparison-7PD2LD7L.js.map +1 -0
- package/dist/{ConnectedNativeDocxEditor-EFEAU6CF.cjs → ConnectedNativeDocxEditor-FPIX7SWU.cjs} +15 -15
- package/dist/ConnectedNativeDocxEditor-FPIX7SWU.cjs.map +1 -0
- package/dist/{ConnectedNativeDocxEditor-4KXAQEBW.js → ConnectedNativeDocxEditor-UMENIC3E.js} +13 -13
- package/dist/ConnectedNativeDocxEditor-UMENIC3E.js.map +1 -0
- package/dist/{ConnectedStreamedWordArtifact-MWVDNPYF.cjs → ConnectedStreamedWordArtifact-3UZN4UHY.cjs} +15 -15
- package/dist/ConnectedStreamedWordArtifact-3UZN4UHY.cjs.map +1 -0
- package/dist/{ConnectedStreamedWordArtifact-MKEN2R7Y.js → ConnectedStreamedWordArtifact-K7HVTZIG.js} +14 -14
- package/dist/ConnectedStreamedWordArtifact-K7HVTZIG.js.map +1 -0
- package/dist/{DocumentReviewCard-RURBAILX.cjs → DocumentReviewCard-B3RRCJBD.cjs} +8 -8
- package/dist/{DocumentReviewCard-RURBAILX.cjs.map → DocumentReviewCard-B3RRCJBD.cjs.map} +1 -1
- package/dist/{DocumentReviewCard-FHRCV7IB.js → DocumentReviewCard-RPETGTSK.js} +8 -8
- package/dist/{DocumentReviewCard-FHRCV7IB.js.map → DocumentReviewCard-RPETGTSK.js.map} +1 -1
- package/dist/{WorkspaceTableView-2AZRQUTW.cjs → WorkspaceTableView-2XRSJECY.cjs} +10 -10
- package/dist/{WorkspaceTableView-2AZRQUTW.cjs.map → WorkspaceTableView-2XRSJECY.cjs.map} +1 -1
- package/dist/{WorkspaceTableView-7D6CO2NO.js → WorkspaceTableView-F4QG4226.js} +8 -8
- package/dist/{WorkspaceTableView-7D6CO2NO.js.map → WorkspaceTableView-F4QG4226.js.map} +1 -1
- package/dist/agents/index.cjs +344 -344
- package/dist/agents/index.js +8 -8
- package/dist/calls/index.cjs +2 -2
- package/dist/calls/index.js +2 -2
- package/dist/chat/index.cjs +167 -167
- package/dist/chat/index.js +10 -10
- package/dist/{chunk-MSY4JQPU.js → chunk-2N5G5WZ7.js} +3 -3
- package/dist/{chunk-MSY4JQPU.js.map → chunk-2N5G5WZ7.js.map} +1 -1
- package/dist/chunk-34HQO4ZQ.cjs +72 -0
- package/dist/chunk-34HQO4ZQ.cjs.map +1 -0
- package/dist/{chunk-EQ3WRY2N.js → chunk-3EWS6ECM.js} +9 -6
- package/dist/chunk-3EWS6ECM.js.map +1 -0
- package/dist/{chunk-Y564AOO6.js → chunk-6HMWZY3U.js} +3 -3
- package/dist/{chunk-Y564AOO6.js.map → chunk-6HMWZY3U.js.map} +1 -1
- package/dist/{chunk-FB6DTNMF.cjs → chunk-6TMA6MPT.cjs} +8 -8
- package/dist/{chunk-FB6DTNMF.cjs.map → chunk-6TMA6MPT.cjs.map} +1 -1
- package/dist/{chunk-JS7KJRKG.js → chunk-75Z5AUMM.js} +3 -3
- package/dist/{chunk-JS7KJRKG.js.map → chunk-75Z5AUMM.js.map} +1 -1
- package/dist/{chunk-4TCJDGIM.js → chunk-7EOO6ZCK.js} +3 -3
- package/dist/{chunk-4TCJDGIM.js.map → chunk-7EOO6ZCK.js.map} +1 -1
- package/dist/{chunk-AJCMN23Q.js → chunk-AGDOBXHY.js} +3 -3
- package/dist/{chunk-AJCMN23Q.js.map → chunk-AGDOBXHY.js.map} +1 -1
- package/dist/{chunk-W7B6VO7E.js → chunk-B63TSC3W.js} +97 -6
- package/dist/chunk-B63TSC3W.js.map +1 -0
- package/dist/{chunk-HC4GCNCQ.js → chunk-B7XMGAWP.js} +3 -32
- package/dist/chunk-B7XMGAWP.js.map +1 -0
- package/dist/{chunk-EQRSQZS5.cjs → chunk-BSITLJMQ.cjs} +4 -4
- package/dist/{chunk-EQRSQZS5.cjs.map → chunk-BSITLJMQ.cjs.map} +1 -1
- package/dist/{chunk-UJN3MBVO.js → chunk-CYECDWVY.js} +3 -3
- package/dist/{chunk-UJN3MBVO.js.map → chunk-CYECDWVY.js.map} +1 -1
- package/dist/{chunk-NTXOETH6.js → chunk-DP7XGB2D.js} +3 -3
- package/dist/{chunk-NTXOETH6.js.map → chunk-DP7XGB2D.js.map} +1 -1
- package/dist/{chunk-PFCTYQJH.cjs → chunk-DQ6PNJ6J.cjs} +3 -3
- package/dist/{chunk-PFCTYQJH.cjs.map → chunk-DQ6PNJ6J.cjs.map} +1 -1
- package/dist/{chunk-XNOQVBU3.cjs → chunk-ECJOIWF4.cjs} +66 -28
- package/dist/chunk-ECJOIWF4.cjs.map +1 -0
- package/dist/{chunk-AMZNWDTN.cjs → chunk-GCMNPIKB.cjs} +6 -6
- package/dist/{chunk-AMZNWDTN.cjs.map → chunk-GCMNPIKB.cjs.map} +1 -1
- package/dist/{chunk-QV3YRFQS.js → chunk-GYONAUKV.js} +11 -11
- package/dist/{chunk-QV3YRFQS.js.map → chunk-GYONAUKV.js.map} +1 -1
- package/dist/chunk-IRPDQJNT.js +70 -0
- package/dist/chunk-IRPDQJNT.js.map +1 -0
- package/dist/{chunk-62DTFNIS.cjs → chunk-IZXJTVOS.cjs} +44 -7
- package/dist/chunk-IZXJTVOS.cjs.map +1 -0
- package/dist/{chunk-IHEXSVAI.cjs → chunk-J2A7LVTM.cjs} +70 -70
- package/dist/{chunk-IHEXSVAI.cjs.map → chunk-J2A7LVTM.cjs.map} +1 -1
- package/dist/{chunk-PFEXFTJ6.js → chunk-JLR67BW2.js} +47 -11
- package/dist/chunk-JLR67BW2.js.map +1 -0
- package/dist/{chunk-OMWOPRQR.cjs → chunk-JZ4LN4Q6.cjs} +3 -3
- package/dist/{chunk-OMWOPRQR.cjs.map → chunk-JZ4LN4Q6.cjs.map} +1 -1
- package/dist/{chunk-DDHEN3TC.cjs → chunk-K2UPRNQB.cjs} +3 -3
- package/dist/{chunk-DDHEN3TC.cjs.map → chunk-K2UPRNQB.cjs.map} +1 -1
- package/dist/{chunk-BFWAIOZK.js → chunk-L4JJKGUD.js} +3 -3
- package/dist/{chunk-BFWAIOZK.js.map → chunk-L4JJKGUD.js.map} +1 -1
- package/dist/{chunk-6YJLVAR6.cjs → chunk-LVC4ZGYW.cjs} +19 -19
- package/dist/{chunk-6YJLVAR6.cjs.map → chunk-LVC4ZGYW.cjs.map} +1 -1
- package/dist/{chunk-72VTGWZ5.cjs → chunk-LXKALYOS.cjs} +5 -5
- package/dist/{chunk-72VTGWZ5.cjs.map → chunk-LXKALYOS.cjs.map} +1 -1
- package/dist/{chunk-TM2D4XT4.cjs → chunk-MZZ3SBQL.cjs} +9 -6
- package/dist/chunk-MZZ3SBQL.cjs.map +1 -0
- package/dist/{chunk-RJ7753W5.js → chunk-NMU723IY.js} +5 -5
- package/dist/{chunk-RJ7753W5.js.map → chunk-NMU723IY.js.map} +1 -1
- package/dist/{chunk-BL6KFCZK.cjs → chunk-NUAG57PG.cjs} +18 -18
- package/dist/{chunk-BL6KFCZK.cjs.map → chunk-NUAG57PG.cjs.map} +1 -1
- package/dist/{chunk-FAYWEPDL.js → chunk-NXSPX7AP.js} +5 -5
- package/dist/{chunk-FAYWEPDL.js.map → chunk-NXSPX7AP.js.map} +1 -1
- package/dist/{chunk-N27CI32R.cjs → chunk-OM5IVNEW.cjs} +7 -7
- package/dist/{chunk-N27CI32R.cjs.map → chunk-OM5IVNEW.cjs.map} +1 -1
- package/dist/{chunk-I3BF67WQ.cjs → chunk-Q5GFVDFM.cjs} +9 -9
- package/dist/{chunk-I3BF67WQ.cjs.map → chunk-Q5GFVDFM.cjs.map} +1 -1
- package/dist/{chunk-PPOL2RVQ.js → chunk-QCDS3ZCF.js} +3 -3
- package/dist/{chunk-PPOL2RVQ.js.map → chunk-QCDS3ZCF.js.map} +1 -1
- package/dist/{chunk-VEMJON3H.cjs → chunk-QUTIWGWO.cjs} +3 -3
- package/dist/{chunk-VEMJON3H.cjs.map → chunk-QUTIWGWO.cjs.map} +1 -1
- package/dist/{chunk-TUXGAGPX.js → chunk-R6UKY6NA.js} +7 -7
- package/dist/{chunk-TUXGAGPX.js.map → chunk-R6UKY6NA.js.map} +1 -1
- package/dist/{chunk-EANS63YE.js → chunk-RGRQWMTF.js} +43 -6
- package/dist/chunk-RGRQWMTF.js.map +1 -0
- package/dist/{chunk-HWT2IHT4.js → chunk-S45JNJK7.js} +3 -3
- package/dist/{chunk-HWT2IHT4.js.map → chunk-S45JNJK7.js.map} +1 -1
- package/dist/{chunk-WH2BIMAZ.js → chunk-SBVOYSOO.js} +3 -3
- package/dist/{chunk-WH2BIMAZ.js.map → chunk-SBVOYSOO.js.map} +1 -1
- package/dist/chunk-SUVMOGTC.js +132 -0
- package/dist/chunk-SUVMOGTC.js.map +1 -0
- package/dist/chunk-TAVQOU3M.cjs +137 -0
- package/dist/chunk-TAVQOU3M.cjs.map +1 -0
- package/dist/{chunk-VO3VUC44.cjs → chunk-TFTGDUE4.cjs} +27 -27
- package/dist/{chunk-VO3VUC44.cjs.map → chunk-TFTGDUE4.cjs.map} +1 -1
- package/dist/{chunk-OXDKLA47.cjs → chunk-TX4CIWH5.cjs} +97 -4
- package/dist/chunk-TX4CIWH5.cjs.map +1 -0
- package/dist/{chunk-Q3SG3BWO.js → chunk-UIUWCTIZ.js} +3 -3
- package/dist/{chunk-Q3SG3BWO.js.map → chunk-UIUWCTIZ.js.map} +1 -1
- package/dist/{chunk-HPA4XNIC.js → chunk-UM543YBU.js} +3 -3
- package/dist/{chunk-HPA4XNIC.js.map → chunk-UM543YBU.js.map} +1 -1
- package/dist/{chunk-T6C5Z4CS.cjs → chunk-UR3MPRJA.cjs} +4 -4
- package/dist/{chunk-T6C5Z4CS.cjs.map → chunk-UR3MPRJA.cjs.map} +1 -1
- package/dist/{chunk-MQBEX5KB.js → chunk-VB7VPTMB.js} +13 -13
- package/dist/{chunk-MQBEX5KB.js.map → chunk-VB7VPTMB.js.map} +1 -1
- package/dist/{chunk-HA27GUIF.cjs → chunk-VTY44LKS.cjs} +12 -12
- package/dist/{chunk-HA27GUIF.cjs.map → chunk-VTY44LKS.cjs.map} +1 -1
- package/dist/{chunk-Z2KOIA5D.cjs → chunk-W427WPYF.cjs} +2 -32
- package/dist/chunk-W427WPYF.cjs.map +1 -0
- package/dist/{chunk-UPWVMG2X.cjs → chunk-XNZSVCNR.cjs} +4 -4
- package/dist/{chunk-UPWVMG2X.cjs.map → chunk-XNZSVCNR.cjs.map} +1 -1
- package/dist/{chunk-S65CHL3M.js → chunk-YA2H33OW.js} +5 -5
- package/dist/{chunk-S65CHL3M.js.map → chunk-YA2H33OW.js.map} +1 -1
- package/dist/{chunk-F72ZD5Q2.cjs → chunk-YD3RN2FY.cjs} +3 -3
- package/dist/{chunk-F72ZD5Q2.cjs.map → chunk-YD3RN2FY.cjs.map} +1 -1
- package/dist/{chunk-22UJW54C.js → chunk-YXX63XJD.js} +3 -3
- package/dist/{chunk-22UJW54C.js.map → chunk-YXX63XJD.js.map} +1 -1
- package/dist/{chunk-OS27G5ZI.js → chunk-Z3MWFHZC.js} +3 -3
- package/dist/{chunk-OS27G5ZI.js.map → chunk-Z3MWFHZC.js.map} +1 -1
- package/dist/{chunk-XUEJYHEP.cjs → chunk-ZDZY6OPL.cjs} +3 -3
- package/dist/{chunk-XUEJYHEP.cjs.map → chunk-ZDZY6OPL.cjs.map} +1 -1
- package/dist/{chunk-YWBIOI6M.cjs → chunk-ZQDJRROK.cjs} +26 -26
- package/dist/{chunk-YWBIOI6M.cjs.map → chunk-ZQDJRROK.cjs.map} +1 -1
- package/dist/{chunk-4QDJQC5I.cjs → chunk-ZTTR5MMZ.cjs} +10 -10
- package/dist/{chunk-4QDJQC5I.cjs.map → chunk-ZTTR5MMZ.cjs.map} +1 -1
- package/dist/collaboration/index.cjs +9 -9
- package/dist/collaboration/index.js +1 -1
- package/dist/components/Banner.d.ts +9 -3
- package/dist/components/ErrorBoundary.d.ts +16 -1
- package/dist/components/LoadingIndicator.d.ts +14 -1
- package/dist/connect/docx.cjs +17 -17
- package/dist/connect/docx.js +13 -13
- package/dist/connect/index.cjs +843 -843
- package/dist/connect/index.js +45 -45
- package/dist/connect/viewer.cjs +21 -20
- package/dist/connect/viewer.js +19 -18
- package/dist/facts/index.cjs +57 -57
- package/dist/facts/index.js +5 -5
- package/dist/files/index.cjs +2 -2
- package/dist/files/index.js +2 -2
- package/dist/home/index.cjs +29 -29
- package/dist/home/index.js +4 -4
- package/dist/index.cjs +806 -789
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +28 -27
- package/dist/index.js.map +1 -1
- package/dist/settings/ErrorDialog.d.ts +21 -1
- package/dist/settings/error-report.d.ts +26 -0
- package/dist/settings/index.cjs +163 -155
- package/dist/settings/index.d.ts +2 -1
- package/dist/settings/index.js +3 -3
- package/dist/shell/AccountBanners.d.ts +22 -0
- package/dist/shell/Toaster.d.ts +24 -2
- package/dist/shell/index.cjs +91 -74
- package/dist/shell/index.d.ts +2 -1
- package/dist/shell/index.js +7 -6
- package/dist/site/index.cjs +55 -54
- package/dist/site/index.js +3 -2
- package/dist/studio/index.cjs +56 -55
- package/dist/studio/index.cjs.map +1 -1
- package/dist/studio/index.js +9 -8
- package/dist/studio/index.js.map +1 -1
- package/dist/workflow-canvas/index.cjs +44 -44
- package/dist/workflow-canvas/index.js +19 -19
- package/node_modules/@arbidocs/coedit/package.json +1 -1
- package/package.json +5 -5
- package/src/blocks.css +83 -2
- package/dist/ConnectedNativeDocxComparison-4Q57CKP4.js.map +0 -1
- package/dist/ConnectedNativeDocxComparison-XOUU4XE4.cjs.map +0 -1
- package/dist/ConnectedNativeDocxEditor-4KXAQEBW.js.map +0 -1
- package/dist/ConnectedNativeDocxEditor-EFEAU6CF.cjs.map +0 -1
- package/dist/ConnectedStreamedWordArtifact-MKEN2R7Y.js.map +0 -1
- package/dist/ConnectedStreamedWordArtifact-MWVDNPYF.cjs.map +0 -1
- package/dist/chunk-62DTFNIS.cjs.map +0 -1
- package/dist/chunk-EANS63YE.js.map +0 -1
- package/dist/chunk-EQ3WRY2N.js.map +0 -1
- package/dist/chunk-HC4GCNCQ.js.map +0 -1
- package/dist/chunk-OXDKLA47.cjs.map +0 -1
- package/dist/chunk-PFEXFTJ6.js.map +0 -1
- package/dist/chunk-SOZQJTHB.js +0 -34
- package/dist/chunk-SOZQJTHB.js.map +0 -1
- package/dist/chunk-TM2D4XT4.cjs.map +0 -1
- package/dist/chunk-VTQOMJW7.cjs +0 -37
- package/dist/chunk-VTQOMJW7.cjs.map +0 -1
- package/dist/chunk-W7B6VO7E.js.map +0 -1
- package/dist/chunk-XNOQVBU3.cjs.map +0 -1
- package/dist/chunk-Z2KOIA5D.cjs.map +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var chunkW427WPYF_cjs = require('./chunk-W427WPYF.cjs');
|
|
5
5
|
var chunkRRI4VGIR_cjs = require('./chunk-RRI4VGIR.cjs');
|
|
6
6
|
var chunkNWNVWO6L_cjs = require('./chunk-NWNVWO6L.cjs');
|
|
7
7
|
var zustand = require('zustand');
|
|
@@ -163,7 +163,7 @@ function CollectionDetail({
|
|
|
163
163
|
return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: renderDetail(items[index], { previous: items[index - 1], next: items[index + 1] }) });
|
|
164
164
|
}
|
|
165
165
|
function Eyebrow({ children, index, rule = false, tone, className, testId }) {
|
|
166
|
-
const t =
|
|
166
|
+
const t = chunkW427WPYF_cjs.useEditorialTone(tone);
|
|
167
167
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
168
168
|
"p",
|
|
169
169
|
{
|
|
@@ -176,7 +176,7 @@ function Eyebrow({ children, index, rule = false, tone, className, testId }) {
|
|
|
176
176
|
"data-testid": testId,
|
|
177
177
|
children: [
|
|
178
178
|
rule && /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": "true", className: "h-px w-8 shrink-0 bg-primary" }),
|
|
179
|
-
index !== void 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: ui.cn("tabular-nums", t.accent), children:
|
|
179
|
+
index !== void 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: ui.cn("tabular-nums", t.accent), children: chunkW427WPYF_cjs.formatIndex(index) }),
|
|
180
180
|
/* @__PURE__ */ jsxRuntime.jsx("span", { children })
|
|
181
181
|
]
|
|
182
182
|
}
|
|
@@ -193,7 +193,7 @@ function EditorialHeading({
|
|
|
193
193
|
className,
|
|
194
194
|
testId
|
|
195
195
|
}) {
|
|
196
|
-
const t =
|
|
196
|
+
const t = chunkW427WPYF_cjs.useEditorialTone(tone);
|
|
197
197
|
const Heading = `h${level}`;
|
|
198
198
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
199
199
|
"div",
|
|
@@ -262,7 +262,7 @@ function EditorialHero({
|
|
|
262
262
|
testIds
|
|
263
263
|
}) {
|
|
264
264
|
const tone = SURFACE_TONE[surface];
|
|
265
|
-
const t =
|
|
265
|
+
const t = chunkW427WPYF_cjs.useEditorialTone(tone);
|
|
266
266
|
const centered = align === "center" && !aside;
|
|
267
267
|
const ids = {
|
|
268
268
|
root: testIds?.root ?? testId,
|
|
@@ -272,7 +272,7 @@ function EditorialHero({
|
|
|
272
272
|
actions: testIds?.actions ?? (testId ? `${testId}-actions` : void 0),
|
|
273
273
|
aside: testIds?.aside ?? (testId ? `${testId}-aside` : void 0)
|
|
274
274
|
};
|
|
275
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
275
|
+
return /* @__PURE__ */ jsxRuntime.jsx(chunkW427WPYF_cjs.EditorialToneContext.Provider, { value: tone, children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
276
276
|
"section",
|
|
277
277
|
{
|
|
278
278
|
className: ui.cn("relative isolate overflow-hidden", SURFACE_CLASS[surface], className),
|
|
@@ -372,11 +372,11 @@ function EditorialSection({
|
|
|
372
372
|
testId
|
|
373
373
|
}) {
|
|
374
374
|
const tone = SURFACE_TONE[surface];
|
|
375
|
-
const t =
|
|
375
|
+
const t = chunkW427WPYF_cjs.useEditorialTone(tone);
|
|
376
376
|
const hasHeading = Boolean(title || eyebrow || index !== void 0);
|
|
377
377
|
const heading = hasHeading && title ? /* @__PURE__ */ jsxRuntime.jsx(EditorialHeading, { eyebrow, index, title, lead, tone }) : null;
|
|
378
378
|
const split = layout !== "stacked";
|
|
379
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
379
|
+
return /* @__PURE__ */ jsxRuntime.jsx(chunkW427WPYF_cjs.EditorialToneContext.Provider, { value: tone, children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
380
380
|
"section",
|
|
381
381
|
{
|
|
382
382
|
id,
|
|
@@ -425,7 +425,7 @@ function EditorialProse({
|
|
|
425
425
|
className,
|
|
426
426
|
testId
|
|
427
427
|
}) {
|
|
428
|
-
const t =
|
|
428
|
+
const t = chunkW427WPYF_cjs.useEditorialTone();
|
|
429
429
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
430
430
|
"div",
|
|
431
431
|
{
|
|
@@ -449,7 +449,7 @@ function DefinitionList({
|
|
|
449
449
|
className,
|
|
450
450
|
testId
|
|
451
451
|
}) {
|
|
452
|
-
const t =
|
|
452
|
+
const t = chunkW427WPYF_cjs.useEditorialTone();
|
|
453
453
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
454
454
|
"dl",
|
|
455
455
|
{
|
|
@@ -503,7 +503,7 @@ function DefinitionList({
|
|
|
503
503
|
);
|
|
504
504
|
}
|
|
505
505
|
function CheckList({ items, columns = 1, icon, className, testId }) {
|
|
506
|
-
const t =
|
|
506
|
+
const t = chunkW427WPYF_cjs.useEditorialTone();
|
|
507
507
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
508
508
|
"ul",
|
|
509
509
|
{
|
|
@@ -536,7 +536,7 @@ function CheckList({ items, columns = 1, icon, className, testId }) {
|
|
|
536
536
|
);
|
|
537
537
|
}
|
|
538
538
|
function TagList({ items, label, className, testId }) {
|
|
539
|
-
const t =
|
|
539
|
+
const t = chunkW427WPYF_cjs.useEditorialTone();
|
|
540
540
|
if (items.length === 0) return null;
|
|
541
541
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
542
542
|
"ul",
|
|
@@ -598,10 +598,10 @@ function PanelGrid({
|
|
|
598
598
|
className,
|
|
599
599
|
testId
|
|
600
600
|
}) {
|
|
601
|
-
const t =
|
|
601
|
+
const t = chunkW427WPYF_cjs.useEditorialTone(tone);
|
|
602
602
|
const Heading = `h${headingLevel}`;
|
|
603
603
|
const joined = variant === "joined";
|
|
604
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
604
|
+
return /* @__PURE__ */ jsxRuntime.jsx(chunkW427WPYF_cjs.EditorialToneContext.Provider, { value: t.tone, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
605
605
|
"ul",
|
|
606
606
|
{
|
|
607
607
|
className: ui.cn(
|
|
@@ -640,7 +640,7 @@ function PanelGrid({
|
|
|
640
640
|
children: item.icon
|
|
641
641
|
}
|
|
642
642
|
) : /* @__PURE__ */ jsxRuntime.jsx("span", {}),
|
|
643
|
-
number !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: ui.cn("font-display text-sm tabular-nums", t.subtle), children:
|
|
643
|
+
number !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: ui.cn("font-display text-sm tabular-nums", t.subtle), children: chunkW427WPYF_cjs.formatIndex(number) }) : item.href && /* @__PURE__ */ jsxRuntime.jsx(
|
|
644
644
|
lucideReact.ArrowUpRight,
|
|
645
645
|
{
|
|
646
646
|
"aria-hidden": "true",
|
|
@@ -686,7 +686,7 @@ function PanelGrid({
|
|
|
686
686
|
]
|
|
687
687
|
}
|
|
688
688
|
);
|
|
689
|
-
const cell = /* @__PURE__ */ jsxRuntime.jsx(
|
|
689
|
+
const cell = /* @__PURE__ */ jsxRuntime.jsx(chunkW427WPYF_cjs.BlockLink, { href: item.href, linkComponent, className: "block h-full", children: inner });
|
|
690
690
|
return /* @__PURE__ */ jsxRuntime.jsx("li", { className: "min-w-0", children: reveal ? /* @__PURE__ */ jsxRuntime.jsx(Reveal, { delay: i * 90, className: "h-full", children: cell }) : cell }, i);
|
|
691
691
|
})
|
|
692
692
|
}
|
|
@@ -701,7 +701,7 @@ function PullQuote({
|
|
|
701
701
|
className,
|
|
702
702
|
testId
|
|
703
703
|
}) {
|
|
704
|
-
const t =
|
|
704
|
+
const t = chunkW427WPYF_cjs.useEditorialTone();
|
|
705
705
|
const centered = align === "center";
|
|
706
706
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
707
707
|
"figure",
|
|
@@ -758,7 +758,7 @@ function ArticleList({
|
|
|
758
758
|
className,
|
|
759
759
|
testId
|
|
760
760
|
}) {
|
|
761
|
-
const t =
|
|
761
|
+
const t = chunkW427WPYF_cjs.useEditorialTone();
|
|
762
762
|
if (items.length === 0) return empty ? /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: empty }) : null;
|
|
763
763
|
const idOf = (item, i) => item.testId ?? (testId ? `${testId}-item-${i}` : void 0);
|
|
764
764
|
if (layout === "rows") {
|
|
@@ -769,7 +769,7 @@ function ArticleList({
|
|
|
769
769
|
"data-slot": "article-list",
|
|
770
770
|
"data-layout": "rows",
|
|
771
771
|
"data-testid": testId,
|
|
772
|
-
children: items.map((item, i) => /* @__PURE__ */ jsxRuntime.jsx("li", { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
772
|
+
children: items.map((item, i) => /* @__PURE__ */ jsxRuntime.jsx("li", { children: /* @__PURE__ */ jsxRuntime.jsx(chunkW427WPYF_cjs.BlockLink, { href: item.href, linkComponent, className: "group block", children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
773
773
|
"article",
|
|
774
774
|
{
|
|
775
775
|
className: "grid gap-2 py-6 transition-colors sm:grid-cols-[10rem_minmax(0,1fr)_auto] sm:gap-8",
|
|
@@ -808,7 +808,7 @@ function ArticleList({
|
|
|
808
808
|
}
|
|
809
809
|
);
|
|
810
810
|
}
|
|
811
|
-
const card = (item, i, lead) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
811
|
+
const card = (item, i, lead) => /* @__PURE__ */ jsxRuntime.jsx(chunkW427WPYF_cjs.BlockLink, { href: item.href, linkComponent, className: "group block h-full", children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
812
812
|
"article",
|
|
813
813
|
{
|
|
814
814
|
className: ui.cn(
|
|
@@ -820,7 +820,7 @@ function ArticleList({
|
|
|
820
820
|
"data-testid": idOf(item, i),
|
|
821
821
|
children: [
|
|
822
822
|
item.imageUrl && /* @__PURE__ */ jsxRuntime.jsx(
|
|
823
|
-
|
|
823
|
+
chunkW427WPYF_cjs.BlockImage,
|
|
824
824
|
{
|
|
825
825
|
src: item.imageUrl,
|
|
826
826
|
alt: item.imageAlt ?? "",
|
|
@@ -901,8 +901,8 @@ function ProofStrip({
|
|
|
901
901
|
testId
|
|
902
902
|
}) {
|
|
903
903
|
const tone = SURFACE_TONE[surface];
|
|
904
|
-
const t =
|
|
905
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
904
|
+
const t = chunkW427WPYF_cjs.useEditorialTone(tone);
|
|
905
|
+
return /* @__PURE__ */ jsxRuntime.jsx(chunkW427WPYF_cjs.EditorialToneContext.Provider, { value: tone, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
906
906
|
"section",
|
|
907
907
|
{
|
|
908
908
|
"aria-label": label,
|
|
@@ -933,8 +933,8 @@ function CtaBand({
|
|
|
933
933
|
testId
|
|
934
934
|
}) {
|
|
935
935
|
const tone = SURFACE_TONE[surface];
|
|
936
|
-
const t =
|
|
937
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
936
|
+
const t = chunkW427WPYF_cjs.useEditorialTone(tone);
|
|
937
|
+
return /* @__PURE__ */ jsxRuntime.jsx(chunkW427WPYF_cjs.EditorialToneContext.Provider, { value: tone, children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
938
938
|
"section",
|
|
939
939
|
{
|
|
940
940
|
className: ui.cn("relative isolate overflow-hidden", SURFACE_CLASS[surface], className),
|
|
@@ -978,5 +978,5 @@ exports.Reveal = Reveal;
|
|
|
978
978
|
exports.TagList = TagList;
|
|
979
979
|
exports.createAppearanceStore = createAppearanceStore;
|
|
980
980
|
exports.themeFromCss = themeFromCss;
|
|
981
|
-
//# sourceMappingURL=chunk-
|
|
982
|
-
//# sourceMappingURL=chunk-
|
|
981
|
+
//# sourceMappingURL=chunk-TFTGDUE4.cjs.map
|
|
982
|
+
//# sourceMappingURL=chunk-TFTGDUE4.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/theme/appearance.ts","../src/theme/fromCss.ts","../src/components/CollectionDetail.tsx","../src/components/editorial/Eyebrow.tsx","../src/components/editorial/EditorialHeading.tsx","../src/components/editorial/EditorialHero.tsx","../src/components/editorial/EditorialSection.tsx","../src/components/editorial/lists.tsx","../src/components/editorial/Reveal.tsx","../src/components/editorial/PanelGrid.tsx","../src/components/editorial/PullQuote.tsx","../src/components/editorial/ArticleList.tsx","../src/components/editorial/Bands.tsx"],"names":["getFontPairing","applyFontVars","create","persist","jsx","Fragment","useEditorialTone","jsxs","cn","formatIndex","EditorialToneContext","Check","useRef","useState","useEffect","ArrowUpRight","BlockLink","COLS","BlockImage"],"mappings":";;;;;;;;;;;;AAqBA,IAAM,eAAA,GAAsD;AAAA,EAC1D,OAAA,EAAS,MAAA;AAAA,EACT,KAAA,EAAO,QAAA;AAAA,EACP,MAAA,EAAQ;AACV,CAAA;AAoCA,SAAS,iBAAiB,MAAA,EAAqC;AAC7D,EAAA,IAAI,OAAO,aAAa,WAAA,EAAa;AACrC,EAAA,QAAA,CAAS,eAAA,CAAgB,SAAA,CAAU,MAAA,CAAO,MAAA,EAAQ,WAAW,MAAM,CAAA;AACrE;AAGA,SAAS,cAAc,IAAA,EAAgC;AACrD,EAAA,IAAI,OAAO,aAAa,WAAA,EAAa;AACrC,EAAA,MAAM,KAAA,GAAQ,eAAA,CAAgB,IAAI,CAAA,IAAK,eAAA,CAAgB,OAAA;AACvD,EAAA,QAAA,CAAS,eAAA,CAAgB,KAAA,CAAM,QAAA,GAAW,KAAA,KAAU,SAAS,EAAA,GAAK,KAAA;AACpE;AAGO,SAAS,qBAAA,CAAsB;AAAA,EACpC,UAAA;AAAA,EACA,QAAA,EAAU,KAAA;AAAA,EACV;AACF,CAAA,EAA4C;AAC1C,EAAA,MAAM,WAA+B,EAAE,WAAA,EAAa,SAAS,QAAA,EAAU,SAAA,EAAW,GAAG,KAAA,EAAM;AAC3F,EAAA,IAAI,CAACA,gCAAA,CAAe,QAAA,CAAS,SAAS,CAAA,EAAG;AACvC,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,wCAAA,EAA2C,QAAA,CAAS,SAAS,CAAA,CAAA,CAAG,CAAA;AAAA,EAClF;AACA,EAAA,MAAM,cAAA,GAAiB,CAAC,SAAA,KACtBA,gCAAA,CAAe,SAAS,CAAA,IAAKA,gCAAA,CAAe,SAAS,SAAS,CAAA;AAChE,EAAA,MAAM,WAAW,CAAC,EAAE,SAAA,EAAW,WAAA,EAAa,UAAS,KAA0B;AAC7E,IAAA,IAAI,OAAO,aAAa,WAAA,EAAa;AACrC,IAAAC,+BAAA,CAAc,cAAA,CAAe,SAAS,CAAC,CAAA;AACvC,IAAA,gBAAA,CAAiB,WAAW,CAAA;AAC5B,IAAA,aAAA,CAAc,QAAQ,CAAA;AAAA,EACxB,CAAA;AAEA,EAAA,MAAM,WAAWC,cAAA,EAAwB;AAAA,IACvCC,kBAAA;AAAA,MACE,CAAC,GAAA,MAAS;AAAA,QACR,GAAG,QAAA;AAAA,QACH,UAAA,EAAY,CAAC,SAAA,KAAc;AACzB,UAAA,MAAM,OAAA,GAAUH,iCAAe,SAAS,CAAA;AACxC,UAAA,IAAI,CAAC,OAAA,EAAS;AACd,UAAAC,+BAAA,CAAc,OAAO,CAAA;AACrB,UAAA,GAAA,CAAI,EAAE,WAAW,CAAA;AAAA,QACnB,CAAA;AAAA,QACA,cAAA,EAAgB,CAAC,WAAA,KAAgB;AAC/B,UAAA,gBAAA,CAAiB,WAAW,CAAA;AAC5B,UAAA,GAAA,CAAI,EAAE,aAAa,CAAA;AAAA,QACrB,CAAA;AAAA,QACA,WAAA,EAAa,CAAC,QAAA,KAAa;AACzB,UAAA,IAAI,EAAE,YAAY,eAAA,CAAA,EAAkB;AACpC,UAAA,aAAA,CAAc,QAAQ,CAAA;AACtB,UAAA,GAAA,CAAI,EAAE,UAAU,CAAA;AAAA,QAClB,CAAA;AAAA,QACA,OAAO,MAAM;AACX,UAAA,QAAA,CAAS,QAAQ,CAAA;AACjB,UAAA,GAAA,CAAI,EAAE,GAAG,QAAA,EAAU,CAAA;AAAA,QACrB;AAAA,OACF,CAAA;AAAA,MACA;AAAA,QACE,IAAA,EAAM,UAAA;AAAA;AAAA;AAAA,QAGN,kBAAA,EAAoB,MAAM,CAAC,KAAA,KAAU;AACnC,UAAA,IAAI,KAAA,WAAgB,KAAK,CAAA;AAAA,QAC3B;AAAA;AACF;AACF,GACF;AAEA,EAAA,OAAO;AAAA,IACL,QAAA;AAAA,IACA,QAAA;AAAA,IACA,UAAA;AAAA,IACA,cAAA;AAAA,IACA,WAAA,EAAa,MAAM,QAAA,CAAS,QAAA,CAAS,UAAU;AAAA,GACjD;AACF;;;AC9GA,SAAS,UAAU,GAAA,EAAyB;AAC1C,EAAA,MAAM,IAAA,GAAO,GAAA,CAAI,OAAA,CAAQ,mBAAA,EAAqB,EAAE,CAAA;AAChD,EAAA,MAAM,SAAqB,EAAC;AAC5B,EAAA,MAAM,OAAmB,EAAC;AAC1B,EAAA,IAAI,MAAA,GAAS,EAAA;AACb,EAAA,MAAM,UAAU,MAAM;AACpB,IAAA,MAAM,KAAA,GAAQ,qCAAA,CAAsC,IAAA,CAAK,MAAM,CAAA;AAC/D,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA;AAClC,IAAA,IAAI,KAAA,IAAS,OAAO,KAAA,CAAM,IAAA,CAAK,MAAM,CAAC,CAAC,CAAA,GAAI,KAAA,CAAM,CAAC,CAAA;AAClD,IAAA,MAAA,GAAS,EAAA;AAAA,EACX,CAAA;AACA,EAAA,KAAA,MAAW,MAAM,IAAA,EAAM;AACrB,IAAA,IAAI,OAAO,GAAA,EAAK;AACd,MAAA,MAAM,KAAA,GAAkB,EAAE,OAAA,EAAS,MAAA,CAAO,MAAK,EAAG,IAAA,EAAM,EAAC,EAAE;AAC3D,MAAA,IAAA,CAAK,KAAK,KAAK,CAAA;AACf,MAAA,MAAA,CAAO,KAAK,KAAK,CAAA;AACjB,MAAA,MAAA,GAAS,EAAA;AAAA,IACX,CAAA,MAAA,IAAW,OAAO,GAAA,EAAK;AACrB,MAAA,OAAA,EAAQ;AACR,MAAA,IAAA,CAAK,GAAA,EAAI;AAAA,IACX,CAAA,MAAA,IAAW,OAAO,GAAA,EAAK;AACrB,MAAA,OAAA,EAAQ;AAAA,IACV,CAAA,MAAO;AACL,MAAA,MAAA,IAAU,EAAA;AAAA,IACZ;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAEA,IAAM,OAAA,GAAU,CAAC,OAAA,EAAiB,QAAA,KAChC,QAAQ,KAAA,CAAM,GAAG,CAAA,CAAE,IAAA,CAAK,CAAC,IAAA,KAAS,IAAA,CAAK,IAAA,OAAW,QAAQ,CAAA;AAG5D,SAAS,MAAA,CAAO,QAAoB,KAAA,EAA6D;AAC/F,EAAA,OAAO,OAAO,MAAA,CAAO,IAAI,GAAG,MAAA,CAAO,OAAO,CAAC,CAAA,KAAM,MAAM,CAAA,CAAE,OAAO,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAI,CAAC,CAAA;AACvF;AAGA,SAAS,MAAM,KAAA,EAAuB;AACpC,EAAA,MAAM,KAAA,GAAQ,yBAAA,CAA0B,IAAA,CAAK,KAAA,CAAM,MAAM,CAAA;AACzD,EAAA,IAAI,CAAC,KAAA,EAAO,MAAM,IAAI,KAAA,CAAM,CAAA,wBAAA,EAA2B,KAAK,CAAA,qBAAA,CAAuB,CAAA;AACnF,EAAA,OAAO,KAAA,CAAM,CAAC,CAAA,KAAM,IAAA,GAAO,MAAA,CAAO,KAAA,CAAM,CAAC,CAAC,CAAA,GAAI,EAAA,GAAK,MAAA,CAAO,KAAA,CAAM,CAAC,CAAC,CAAA;AACpE;AAqBO,SAAS,YAAA,CACd,KACA,EAAE,MAAA,EAAQ,OAAO,MAAA,EAAQ,KAAA,EAAO,QAAO,EACzB;AACd,EAAA,MAAM,MAAA,GAAS,UAAU,OAAO,GAAA,KAAQ,WAAW,GAAA,GAAM,GAAA,CAAI,IAAA,CAAK,IAAI,CAAC,CAAA;AACvE,EAAA,MAAM,OAAO,IAAA,KAAS,MAAA;AACtB,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,MAAA,EAAQ,CAAC,CAAA,KAAO,IAAA,GAAO,WAAA,CAAY,IAAA,CAAK,CAAC,CAAA,GAAI,OAAA,CAAQ,CAAA,EAAG,OAAO,CAAE,CAAA;AACtF,EAAA,MAAM,IAAA,GAAO,IAAA,GAAO,MAAA,GAAY,MAAA,CAAO,MAAA,EAAQ,CAAC,CAAA,KAAM,OAAA,CAAQ,CAAA,EAAG,OAAO,CAAC,CAAA;AACzE,EAAA,MAAM,MAAA,GAAS,OAAO,UAAA,GAAa,IAAA;AAEnC,EAAA,MAAM,IAAA,GAAO,CAAC,IAAA,EAA8B,IAAA,EAAc,KAAA,KAAkB;AAC1E,IAAA,MAAM,KAAA,GAAQ,KAAK,IAAI,CAAA;AACvB,IAAA,IAAI,KAAA,KAAU,QAAW,MAAM,IAAI,MAAM,CAAA,cAAA,EAAiB,KAAK,CAAA,aAAA,EAAgB,IAAI,CAAA,CAAE,CAAA;AACrF,IAAA,OAAO,KAAA;AAAA,EACT,CAAA;AACA,EAAA,MAAM,UAAA,GAAa,OAAO,QAAA,GAAW,OAAA;AACrC,EAAA,MAAM,QAAA,GAAW,CAAC,IAAA,EAA8B,KAAA,KAC9C,OAAO,WAAA,CAAY,MAAA,CAAO,IAAI,CAAC,EAAE,KAAI,KAAM,CAAC,KAAK,IAAA,CAAK,IAAA,EAAM,SAAS,GAAA,EAAK,KAAK,CAAC,CAAC,CAAC,CAAA;AAEpF,EAAA,OAAO;AAAA,IACL,KAAA,EAAO;AAAA,MACL,MAAA,EAAQ,QAAA,CAAS,KAAA,EAAO,UAAU,CAAA;AAAA,MAClC,OAAO,KAAA,IAAS;AAAA,QACd,OAAA,EAAS,IAAA,CAAK,KAAA,EAAO,gBAAA,EAAkB,UAAU,CAAA;AAAA,QACjD,IAAA,EAAM,IAAA,CAAK,KAAA,EAAO,aAAA,EAAe,UAAU;AAAA,OAC7C;AAAA,MACA,QAAQ,MAAA,IAAU,KAAA,CAAM,KAAK,KAAA,EAAO,UAAA,EAAY,UAAU,CAAC;AAAA,KAC7D;AAAA,IACA,GAAI,IAAA,IAAQ,EAAE,YAAY,QAAA,CAAS,IAAA,EAAM,OAAO,CAAA;AAAE,GACpD;AACF;AC5FO,SAAS,gBAAA,CAAoB;AAAA,EAClC,KAAA;AAAA,EACA,IAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAA,EAA6B;AAC3B,EAAA,IAAI,CAAC,IAAA,EAAM,uBAAOG,cAAA,CAAAC,mBAAA,EAAA,EAAG,QAAA,EAAA,UAAA,CAAW,KAAK,CAAA,EAAE,CAAA;AACvC,EAAA,MAAM,KAAA,GAAQ,MAAM,SAAA,CAAU,CAAC,SAAS,OAAA,CAAQ,IAAI,MAAM,IAAI,CAAA;AAC9D,EAAA,IAAI,UAAU,EAAA,EAAI;AAChB,IAAA,uBACED,cAAA,CAAAC,mBAAA,EAAA,EACG,QAAA,EAAA,cAAA,GACC,cAAA,CAAe,IAAI,CAAA,mBAEnBD,cAAA,CAAC,GAAA,EAAA,EAAE,IAAA,EAAK,QAAA,EAAS,WAAA,EAAU,sBAAA,EAAuB,QAAA,EAAA,WAAA,EAElD,CAAA,EAEJ,CAAA;AAAA,EAEJ;AACA,EAAA,6DAAU,QAAA,EAAA,YAAA,CAAa,KAAA,CAAM,KAAK,CAAA,EAAG,EAAE,QAAA,EAAU,KAAA,CAAM,KAAA,GAAQ,CAAC,GAAG,IAAA,EAAM,KAAA,CAAM,QAAQ,CAAC,CAAA,EAAG,CAAA,EAAE,CAAA;AAC/F;ACjCO,SAAS,OAAA,CAAQ,EAAE,QAAA,EAAU,KAAA,EAAO,OAAO,KAAA,EAAO,IAAA,EAAM,SAAA,EAAW,MAAA,EAAO,EAAiB;AAChG,EAAA,MAAM,CAAA,GAAIE,mCAAiB,IAAI,CAAA;AAC/B,EAAA,uBACEC,eAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAWC,KAAA;AAAA,QACT,wEAAA;AAAA,QACA,CAAA,CAAE,MAAA;AAAA,QACF;AAAA,OACF;AAAA,MACA,WAAA,EAAU,SAAA;AAAA,MACV,aAAA,EAAa,MAAA;AAAA,MAEZ,QAAA,EAAA;AAAA,QAAA,IAAA,oBAAQJ,cAAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAY,MAAA,EAAO,WAAU,8BAAA,EAA+B,CAAA;AAAA,QAC1E,KAAA,KAAU,MAAA,oBACTA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAWI,KAAA,CAAG,cAAA,EAAgB,CAAA,CAAE,MAAM,CAAA,EAAI,QAAA,EAAAC,6BAAA,CAAY,KAAK,CAAA,EAAE,CAAA;AAAA,wBAErEL,cAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAS;AAAA;AAAA;AAAA,GAClB;AAEJ;ACfO,SAAS,gBAAA,CAAiB;AAAA,EAC/B,OAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA,GAAQ,CAAA;AAAA,EACR,KAAA,GAAQ,OAAA;AAAA,EACR,IAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAA0B;AACxB,EAAA,MAAM,CAAA,GAAIE,mCAAiB,IAAI,CAAA;AAC/B,EAAA,MAAM,OAAA,GAAU,IAAI,KAAK,CAAA,CAAA;AACzB,EAAA,uBACEC,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAWC,KAAAA,CAAG,WAAA,EAAa,KAAA,KAAU,QAAA,IAAY,uBAAuB,SAAS,CAAA;AAAA,MACjF,WAAA,EAAU,mBAAA;AAAA,MACV,aAAA,EAAa,MAAA;AAAA,MAEX,QAAA,EAAA;AAAA,QAAA,CAAA,OAAA,IAAW,KAAA,KAAU,2BACrBJ,cAAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACC,KAAA;AAAA,YACA,IAAA;AAAA,YACA,SAAA,EAAWI,KAAAA,CAAG,MAAA,EAAQ,KAAA,KAAU,YAAY,gBAAgB,CAAA;AAAA,YAE3D,QAAA,EAAA;AAAA;AAAA,SACH;AAAA,wBAEFJ,cAAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAWI,KAAAA;AAAA,cACT,6EAAA;AAAA,cACA,CAAA,CAAE;AAAA,aACJ;AAAA,YAEC,QAAA,EAAA;AAAA;AAAA,SACH;AAAA,QACC,IAAA,oBAAQJ,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAWI,MAAG,8BAAA,EAAgC,CAAA,CAAE,KAAK,CAAA,EAAI,QAAA,EAAA,IAAA,EAAK;AAAA;AAAA;AAAA,GAC5E;AAEJ;ACfO,IAAM,aAAA,GAAkD;AAAA,EAC7D,KAAA,EAAO,+BAAA;AAAA,EACP,KAAA,EAAO,0BAAA;AAAA,EACP,OAAA,EAAS;AACX,CAAA;AAEO,IAAM,YAAA,GAAwD;AAAA,EACnE,KAAA,EAAO,SAAA;AAAA,EACP,KAAA,EAAO,SAAA;AAAA,EACP,OAAA,EAAS;AACX,CAAA;AAEA,SAAS,WAAA,CAAY,OAAkB,QAAA,EAA8B;AACnE,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,CAAC,QAAA,IAAY,CAAC,KAAA,CAAM,QAAA,CAAS,QAAQ,CAAA,EAAG,OAAO,KAAA;AAChF,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,KAAA,CAAM,QAAQ,CAAA;AAClC,EAAA,OAAO,MAAM,GAAA,CAAI,CAAC,MAAM,CAAA,qBACtBD,gBAAC,MAAA,EAAA,EACE,QAAA,EAAA;AAAA,IAAA,IAAA;AAAA,IACA,CAAA,GAAI,MAAM,MAAA,GAAS,CAAA,oBAAKH,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,qBAAA,EAAuB,QAAA,EAAA,QAAA,EAAS;AAAA,GAAA,EAAA,EAF9D,CAGX,CACD,CAAA;AACH;AAOO,SAAS,aAAA,CAAc;AAAA,EAC5B,OAAA;AAAA,EACA,WAAA,GAAc,KAAA;AAAA,EACd,KAAA;AAAA,EACA,QAAA;AAAA,EACA,IAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA,GAAQ,OAAA;AAAA,EACR,IAAA,GAAO,MAAA;AAAA,EACP,OAAA,GAAU,OAAA;AAAA,EACV,SAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAAuB;AACrB,EAAA,MAAM,IAAA,GAAO,aAAa,OAAO,CAAA;AACjC,EAAA,MAAM,CAAA,GAAIE,mCAAiB,IAAI,CAAA;AAC/B,EAAA,MAAM,QAAA,GAAW,KAAA,KAAU,QAAA,IAAY,CAAC,KAAA;AACxC,EAAA,MAAM,GAAA,GAAM;AAAA,IACV,IAAA,EAAM,SAAS,IAAA,IAAQ,MAAA;AAAA,IACvB,SAAS,OAAA,EAAS,OAAA,KAAY,MAAA,GAAS,CAAA,EAAG,MAAM,CAAA,QAAA,CAAA,GAAa,MAAA,CAAA;AAAA,IAC7D,OAAO,OAAA,EAAS,KAAA,KAAU,MAAA,GAAS,CAAA,EAAG,MAAM,CAAA,MAAA,CAAA,GAAW,MAAA,CAAA;AAAA,IACvD,MAAM,OAAA,EAAS,IAAA,KAAS,MAAA,GAAS,CAAA,EAAG,MAAM,CAAA,KAAA,CAAA,GAAU,MAAA,CAAA;AAAA,IACpD,SAAS,OAAA,EAAS,OAAA,KAAY,MAAA,GAAS,CAAA,EAAG,MAAM,CAAA,QAAA,CAAA,GAAa,MAAA,CAAA;AAAA,IAC7D,OAAO,OAAA,EAAS,KAAA,KAAU,MAAA,GAAS,CAAA,EAAG,MAAM,CAAA,MAAA,CAAA,GAAW,MAAA;AAAA,GACzD;AACA,EAAA,uBACEF,cAAAA,CAACM,sCAAA,CAAqB,UAArB,EAA8B,KAAA,EAAO,MACpC,QAAA,kBAAAH,eAAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,WAAWC,KAAAA,CAAG,kCAAA,EAAoC,aAAA,CAAc,OAAO,GAAG,SAAS,CAAA;AAAA,MACnF,WAAA,EAAU,gBAAA;AAAA,MACV,WAAA,EAAW,IAAA;AAAA,MACX,eAAa,GAAA,CAAI,IAAA;AAAA,MAEhB,QAAA,EAAA;AAAA,QAAA,QAAA,oBACCJ,cAAAA,CAAC,KAAA,EAAA,EAAI,eAAY,MAAA,EAAO,SAAA,EAAU,8CAC/B,QAAA,EAAA,QAAA,EACH,CAAA;AAAA,wBAEFG,eAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAWC,KAAAA;AAAA,cACT,gCAAA;AAAA,cACA,IAAA,KAAS,UAAU,gBAAA,GAAmB,gBAAA;AAAA,cACtC,KAAA,IAAS;AAAA,aACX;AAAA,YAEA,QAAA,EAAA;AAAA,8BAAAD,gBAAC,KAAA,EAAA,EAAI,SAAA,EAAWC,MAAG,WAAA,EAAa,QAAA,IAAY,qBAAqB,CAAA,EAC9D,QAAA,EAAA;AAAA,gBAAA,OAAA,oBACCJ,cAAAA;AAAA,kBAAC,OAAA;AAAA,kBAAA;AAAA,oBACC,IAAA,EAAM,WAAA;AAAA,oBACN,IAAA;AAAA,oBACA,SAAA,EAAWI,KAAAA,CAAG,MAAA,EAAQ,QAAA,IAAY,gBAAgB,CAAA;AAAA,oBAClD,QAAQ,GAAA,CAAI,OAAA;AAAA,oBAEX,QAAA,EAAA;AAAA;AAAA,iBACH;AAAA,gCAEFJ,cAAAA;AAAA,kBAAC,IAAA;AAAA,kBAAA;AAAA,oBACC,SAAA,EAAWI,KAAAA;AAAA,sBACT,wDAAA;AAAA,sBACA,IAAA,KAAS,UACL,2DAAA,GACA,qCAAA;AAAA,sBACJ,CAAA,CAAE;AAAA,qBACJ;AAAA,oBACA,eAAa,GAAA,CAAI,KAAA;AAAA,oBAEhB,QAAA,EAAA,WAAA,CAAY,OAAO,QAAQ;AAAA;AAAA,iBAC9B;AAAA,gBACC,wBACCJ,cAAAA;AAAA,kBAAC,GAAA;AAAA,kBAAA;AAAA,oBACC,SAAA,EAAWI,KAAAA;AAAA,sBACT,wCAAA;AAAA,sBACA,QAAA,IAAY,SAAA;AAAA,sBACZ,CAAA,CAAE;AAAA,qBACJ;AAAA,oBACA,eAAa,GAAA,CAAI,IAAA;AAAA,oBAEhB,QAAA,EAAA;AAAA;AAAA,iBACH;AAAA,gBAED,2BACCJ,cAAAA;AAAA,kBAAC,KAAA;AAAA,kBAAA;AAAA,oBACC,SAAA,EAAWI,KAAAA;AAAA,sBACT,sCAAA;AAAA,sBACA,QAAA,IAAY;AAAA,qBACd;AAAA,oBACA,eAAa,GAAA,CAAI,OAAA;AAAA,oBAEhB,QAAA,EAAA;AAAA;AAAA,iBACH;AAAA,gBAED,MAAA,oBACCJ,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAWI,MAAG,MAAA,EAAQ,QAAA,IAAY,qBAAqB,CAAA,EAAI,QAAA,EAAA,MAAA,EAAO;AAAA,eAAA,EAE3E,CAAA;AAAA,cACC,yBACCJ,cAAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EAAU,kBAAA;AAAA,kBACV,WAAA,EAAU,sBAAA;AAAA,kBACV,eAAa,GAAA,CAAI,KAAA;AAAA,kBAEhB,QAAA,EAAA;AAAA;AAAA;AACH;AAAA;AAAA;AAEJ;AAAA;AAAA,GACF,EACF,CAAA;AAEJ;AC/IO,SAAS,gBAAA,CAAiB;AAAA,EAC/B,EAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA,GAAS,SAAA;AAAA,EACT,OAAA,GAAU,OAAA;AAAA,EACV,QAAA,GAAW,KAAA;AAAA,EACX,OAAA,GAAU,IAAA;AAAA,EACV,QAAA;AAAA,EACA,YAAA,EAAc,SAAA;AAAA,EACd,QAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAA0B;AACxB,EAAA,MAAM,IAAA,GAAO,aAAa,OAAO,CAAA;AACjC,EAAA,MAAM,CAAA,GAAIE,mCAAiB,IAAI,CAAA;AAC/B,EAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,KAAA,IAAS,OAAA,IAAW,UAAU,MAAS,CAAA;AAClE,EAAA,MAAM,OAAA,GACJ,UAAA,IAAc,KAAA,mBACZF,cAAAA,CAAC,gBAAA,EAAA,EAAiB,OAAA,EAAkB,KAAA,EAAc,KAAA,EAAc,IAAA,EAAY,IAAA,EAAY,CAAA,GACtF,IAAA;AACN,EAAA,MAAM,QAAQ,MAAA,KAAW,SAAA;AACzB,EAAA,uBACEA,cAAAA,CAACM,sCAAA,CAAqB,UAArB,EAA8B,KAAA,EAAO,MACpC,QAAA,kBAAAH,eAAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,EAAA;AAAA,MACA,YAAA,EAAY,QAAQ,MAAA,GAAY,SAAA;AAAA,MAChC,SAAA,EAAWC,KAAAA;AAAA,QACT,+CAAA;AAAA,QACA,cAAc,OAAO,CAAA;AAAA,QACrB,QAAA,IAAYA,KAAAA,CAAG,UAAA,EAAY,CAAA,CAAE,QAAQ,CAAA;AAAA,QACrC;AAAA,OACF;AAAA,MACA,WAAA,EAAU,mBAAA;AAAA,MACV,aAAA,EAAa,MAAA;AAAA,MAEZ,QAAA,EAAA;AAAA,QAAA,QAAA,oBACCJ,cAAAA,CAAC,KAAA,EAAA,EAAI,eAAY,MAAA,EAAO,SAAA,EAAU,8CAC/B,QAAA,EAAA,QAAA,EACH,CAAA;AAAA,wBAEFA,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAWI,KAAAA;AAAA,cACT,gCAAA;AAAA,cACA,OAAA,KAAY,OAAO,gBAAA,GAAmB,gBAAA;AAAA,cACtC,KAAA,IACEA,KAAAA;AAAA,gBACE,uBAAA;AAAA,gBACA,MAAA,KAAW,eAAe,0BAAA,GAA6B;AAAA;AACzD,aACJ;AAAA,YAEC,QAAA,EAAA,KAAA,mBACCD,eAAAA,CAAAF,mBAAAA,EAAA,EACG,QAAA,EAAA;AAAA,cAAA,OAAA,oBAAWD,cAAAA,CAAC,KAAA,EAAA,EAAK,QAAA,EAAA,OAAA,EAAQ,CAAA;AAAA,8BAC1BA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAW,QAAA,EAAS;AAAA,aAAA,EACrC,CAAA,mBAEAG,eAAAA,CAAAF,mBAAAA,EAAA,EACG,QAAA,EAAA;AAAA,cAAA,OAAA,oBACCE,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8DAAA,EACZ,QAAA,EAAA;AAAA,gBAAA,OAAA;AAAA,gBACA,0BAAUH,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAY,QAAA,EAAA,MAAA,EAAO;AAAA,eAAA,EAC/C,CAAA;AAAA,cAED,QAAA,oBAAYA,cAAAA,CAAC,KAAA,EAAA,EAAI,WAAWI,KAAAA,CAAG,OAAA,IAAW,gBAAgB,CAAA,EAAI,QAAA,EAAS;AAAA,aAAA,EAC1E;AAAA;AAAA;AAEJ;AAAA;AAAA,GACF,EACF,CAAA;AAEJ;AAaO,SAAS,cAAA,CAAe;AAAA,EAC7B,UAAA;AAAA,EACA,OAAA,GAAU,CAAA;AAAA,EACV,IAAA,GAAO,MAAA;AAAA,EACP,SAAA;AAAA,EACA;AACF,CAAA,EAAwB;AACtB,EAAA,MAAM,IAAIF,kCAAA,EAAiB;AAC3B,EAAA,uBACEF,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAWI,KAAAA;AAAA,QACT,IAAA,KAAS,OAAO,SAAA,GAAY,WAAA;AAAA,QAC5B,iBAAA;AAAA,QACA,CAAA,CAAE,KAAA;AAAA,QACF,OAAA,KAAY,IAAI,qBAAA,GAAwB,aAAA;AAAA,QACxC;AAAA,OACF;AAAA,MACA,WAAA,EAAU,iBAAA;AAAA,MACV,aAAA,EAAa,MAAA;AAAA,MAEZ,qBAAW,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,qBAClBJ,cAAAA,CAAC,GAAA,EAAA,EAAU,SAAA,EAAWI,KAAAA,CAAG,YAAY,CAAA,GAAI,yBAAA,GAA4B,iBAAiB,CAAA,EACnF,QAAA,EAAA,CAAA,EAAA,EADK,CAER,CACD;AAAA;AAAA,GACH;AAEJ;AChIO,SAAS,cAAA,CAAe;AAAA,EAC7B,KAAA;AAAA,EACA,MAAA,GAAS,MAAA;AAAA,EACT,MAAA,GAAS,KAAA;AAAA,EACT,SAAA;AAAA,EACA;AACF,CAAA,EAAwB;AACtB,EAAA,MAAM,IAAIF,kCAAA,EAAiB;AAC3B,EAAA,uBACEF,cAAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAWI,MAAG,MAAA,KAAW,MAAA,GAAS,cAAc,UAAA,EAAY,CAAA,CAAE,UAAU,SAAS,CAAA;AAAA,MACjF,WAAA,EAAU,iBAAA;AAAA,MACV,aAAA,EAAa,MAAA;AAAA,MACb,aAAA,EAAa,MAAA;AAAA,MAEZ,QAAA,EAAA,KAAA,CAAM,GAAA;AAAA,QAAI,CAAC,IAAA,EAAM,CAAA,KAChB,MAAA,KAAW,yBACTD,eAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YAEC,SAAA,EAAWC,KAAAA;AAAA,cACT,oDAAA;AAAA,cACA,CAAA,CAAE,KAAA;AAAA,cACF,CAAA,CAAE;AAAA,aACJ;AAAA,YACA,aAAA,EAAa,KAAK,MAAA,KAAW,MAAA,GAAS,GAAG,MAAM,CAAA,MAAA,EAAS,CAAC,CAAA,CAAA,GAAK,MAAA,CAAA;AAAA,YAE7D,QAAA,EAAA;AAAA,cAAA,IAAA,CAAK,uBACJJ,cAAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EAAWI,KAAAA;AAAA,oBACT,oEAAA;AAAA,oBACA,CAAA,CAAE;AAAA,mBACJ;AAAA,kBACA,aAAA,EAAY,MAAA;AAAA,kBAEX,QAAA,EAAA,IAAA,CAAK;AAAA;AAAA,eACR,GAEA,WAAW,KAAA,oBACTJ,eAAC,MAAA,EAAA,EAAK,aAAA,EAAY,MAAA,EAAO,SAAA,EAAU,8CAAA,EAA+C,CAAA;AAAA,8BAGtFG,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,SAAA,EACb,QAAA,EAAA;AAAA,gCAAAH,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,aAAA,EAAe,eAAK,IAAA,EAAK,CAAA;AAAA,gCACvCA,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAWI,KAAAA,CAAG,kBAAkB,CAAA,CAAE,KAAK,CAAA,EAAI,QAAA,EAAA,IAAA,CAAK,WAAA,EAAY;AAAA,eAAA,EAClE;AAAA;AAAA,WAAA;AAAA,UA1BK;AAAA,4BA6BPD,eAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YAEC,SAAA,EAAU,qEAAA;AAAA,YACV,aAAA,EAAa,KAAK,MAAA,KAAW,MAAA,GAAS,GAAG,MAAM,CAAA,MAAA,EAAS,CAAC,CAAA,CAAA,GAAK,MAAA,CAAA;AAAA,YAE9D,QAAA,EAAA;AAAA,8BAAAH,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,aAAA,EAAe,eAAK,IAAA,EAAK,CAAA;AAAA,8BACvCA,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAWI,KAAAA,CAAG,2BAA2B,CAAA,CAAE,KAAK,CAAA,EAAI,QAAA,EAAA,IAAA,CAAK,WAAA,EAAY;AAAA;AAAA,WAAA;AAAA,UALpE;AAAA;AAMP;AAEJ;AAAA,GACF;AAEJ;AAaO,SAAS,SAAA,CAAU,EAAE,KAAA,EAAO,OAAA,GAAU,GAAG,IAAA,EAAM,SAAA,EAAW,QAAO,EAAmB;AACzF,EAAA,MAAM,IAAIF,kCAAA,EAAiB;AAC3B,EAAA,uBACEF,cAAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,WAAWI,KAAAA,CAAG,OAAA,KAAY,CAAA,GAAI,2BAAA,GAA8B,aAAa,SAAS,CAAA;AAAA,MAClF,WAAA,EAAU,YAAA;AAAA,MACV,aAAA,EAAa,MAAA;AAAA,MAEZ,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,sBAChBD,eAAAA;AAAA,QAAC,IAAA;AAAA,QAAA;AAAA,UAEC,SAAA,EAAWC,KAAAA,CAAG,gDAAA,EAAkD,CAAA,CAAE,KAAK,CAAA;AAAA,UACvE,eAAa,MAAA,GAAS,CAAA,EAAG,MAAM,CAAA,MAAA,EAAS,CAAC,CAAA,CAAA,GAAK,MAAA;AAAA,UAE9C,QAAA,EAAA;AAAA,4BAAAJ,cAAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,aAAA,EAAY,MAAA;AAAA,gBACZ,SAAA,EAAWI,KAAAA;AAAA,kBACT,6EAAA;AAAA,kBACA,CAAA,CAAE;AAAA,iBACJ;AAAA,gBAEC,QAAA,EAAA,IAAA,oBAAQJ,cAAAA,CAACO,iBAAA,EAAA,EAAM,WAAU,QAAA,EAAS;AAAA;AAAA,aACrC;AAAA,4BACAP,cAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,IAAA,EAAK;AAAA;AAAA,SAAA;AAAA,QAbP;AAAA,OAeR;AAAA;AAAA,GACH;AAEJ;AAWO,SAAS,QAAQ,EAAE,KAAA,EAAO,KAAA,EAAO,SAAA,EAAW,QAAO,EAAiB;AACzE,EAAA,MAAM,IAAIE,kCAAA,EAAiB;AAC3B,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAC/B,EAAA,uBACEF,cAAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,YAAA,EAAY,KAAA;AAAA,MACZ,SAAA,EAAWI,KAAAA,CAAG,wBAAA,EAA0B,SAAS,CAAA;AAAA,MACjD,WAAA,EAAU,UAAA;AAAA,MACV,aAAA,EAAa,MAAA;AAAA,MAEZ,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,GAAA,qBACVJ,cAAAA,CAAC,IAAA,EAAA,EAAa,SAAA,EAAWI,KAAAA,CAAG,6CAA6C,CAAA,CAAE,IAAI,CAAA,EAC5E,QAAA,EAAA,GAAA,EAAA,EADM,GAET,CACD;AAAA;AAAA,GACH;AAEJ;AC1IO,SAAS,OAAO,EAAE,QAAA,EAAU,QAAQ,CAAA,EAAG,SAAA,EAAW,QAAO,EAAgB;AAC9E,EAAA,MAAM,GAAA,GAAMI,aAAuB,IAAI,CAAA;AACvC,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIC,eAAuC,MAAM,CAAA;AAEvE,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,MAAM,KAAK,GAAA,CAAI,OAAA;AACf,IAAA,IAAI,CAAC,EAAA,IAAM,OAAO,oBAAA,KAAyB,WAAA,EAAa;AACxD,IAAA,QAAA,CAAS,SAAS,CAAA;AAClB,IAAA,MAAM,KAAK,IAAI,oBAAA;AAAA,MACb,CAAC,OAAA,KAAY;AACX,QAAA,IAAI,QAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,cAAc,CAAA,EAAG;AACzC,UAAA,QAAA,CAAS,OAAO,CAAA;AAChB,UAAA,EAAA,CAAG,UAAA,EAAW;AAAA,QAChB;AAAA,MACF,CAAA;AAAA,MACA,EAAE,YAAY,mBAAA;AAAoB,KACpC;AACA,IAAA,EAAA,CAAG,QAAQ,EAAE,CAAA;AACb,IAAA,OAAO,MAAM,GAAG,UAAA,EAAW;AAAA,EAC7B,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,uBACEV,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,WAAA,EAAU,QAAA;AAAA,MACV,aAAA,EAAa,KAAA,KAAU,MAAA,GAAS,MAAA,GAAY,KAAA;AAAA,MAC5C,OAAO,KAAA,GAAS,EAAE,kBAAkB,CAAA,EAAG,KAAK,MAAK,GAAsB,MAAA;AAAA,MACvE,SAAA,EAAWI,MAAG,SAAS,CAAA;AAAA,MACvB,aAAA,EAAa,MAAA;AAAA,MAEZ;AAAA;AAAA,GACH;AAEJ;ACJA,IAAM,IAAA,GAAkC;AAAA,EACtC,CAAA,EAAG,gBAAA;AAAA,EACH,CAAA,EAAG,+BAAA;AAAA,EACH,CAAA,EAAG;AACL,CAAA;AAOO,SAAS,SAAA,CAAU;AAAA,EACxB,KAAA;AAAA,EACA,OAAA,GAAU,CAAA;AAAA,EACV,OAAA,GAAU,OAAA;AAAA,EACV,QAAA,GAAW,KAAA;AAAA,EACX,MAAA,GAAS,KAAA;AAAA,EACT,aAAA;AAAA,EACA,YAAA,GAAe,CAAA;AAAA,EACf,IAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAAmB;AACjB,EAAA,MAAM,CAAA,GAAIF,mCAAiB,IAAI,CAAA;AAC/B,EAAA,MAAM,OAAA,GAAU,IAAI,YAAY,CAAA,CAAA;AAChC,EAAA,MAAM,SAAS,OAAA,KAAY,QAAA;AAC3B,EAAA,uBACEF,eAACM,sCAAA,CAAqB,QAAA,EAArB,EAA8B,KAAA,EAAO,CAAA,CAAE,MACtC,QAAA,kBAAAN,cAAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAWI,KAAAA;AAAA,QACT,MAAA;AAAA,QACA,MAAA,GAASA,KAAAA,CAAG,0CAAA,EAA4C,CAAA,CAAE,QAAQ,CAAA,GAAI,OAAA;AAAA,QACtE,MAAA,KAAW,CAAA,CAAE,IAAA,KAAS,SAAA,GAAY,kBAAA,GAAqB,WAAA,CAAA;AAAA,QACvD,IAAA,CAAK,OAAO,CAAA,IAAK,IAAA,CAAK,CAAC,CAAA;AAAA,QACvB;AAAA,OACF;AAAA,MACA,WAAA,EAAU,YAAA;AAAA,MACV,cAAA,EAAc,OAAA;AAAA,MACd,aAAA,EAAa,MAAA;AAAA,MAEZ,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,CAAA,KAAM;AACtB,QAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,KAAU,QAAA,GAAW,IAAI,CAAA,GAAI,MAAA,CAAA;AACjD,QAAA,MAAM,wBACJD,eAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAWC,KAAAA;AAAA,cACT,+DAAA;AAAA,cACA,MAAA,GACIA,KAAAA;AAAA,gBACE,CAAA,CAAE,IAAA,KAAS,SAAA,GAAY,eAAA,GAAkB,eAAA;AAAA,gBACzC,KAAK,IAAA,IAAQ;AAAA,eACf,GACAA,MAAG,mBAAA,EAAqB,CAAA,CAAE,OAAO,IAAA,CAAK,IAAA,IAAQ,EAAE,UAAU;AAAA,aAChE;AAAA,YACA,aAAA,EAAa,KAAK,MAAA,KAAW,MAAA,GAAS,GAAG,MAAM,CAAA,MAAA,EAAS,CAAC,CAAA,CAAA,GAAK,MAAA,CAAA;AAAA,YAE5D,QAAA,EAAA;AAAA,cAAA,CAAA,IAAA,CAAK,IAAA,IAAQ,WAAW,MAAA,IAAa,IAAA,CAAK,yBAC1CD,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wCAAA,EACZ,QAAA,EAAA;AAAA,gBAAA,IAAA,CAAK,uBACJH,cAAAA;AAAA,kBAAC,MAAA;AAAA,kBAAA;AAAA,oBACC,aAAA,EAAY,MAAA;AAAA,oBACZ,SAAA,EAAWI,KAAAA;AAAA,sBACT,4DAAA;AAAA,sBACA,CAAA,CAAE;AAAA,qBACJ;AAAA,oBAEC,QAAA,EAAA,IAAA,CAAK;AAAA;AAAA,iBACR,mBAEAJ,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA;AAAA,gBAEP,WAAW,MAAA,mBACVA,cAAAA,CAAC,MAAA,EAAA,EAAK,WAAWI,KAAAA,CAAG,mCAAA,EAAqC,CAAA,CAAE,MAAM,GAC9D,QAAA,EAAAC,6BAAA,CAAY,MAAM,GACrB,CAAA,GAEA,IAAA,CAAK,wBACHL,cAAAA;AAAA,kBAACW,wBAAA;AAAA,kBAAA;AAAA,oBACC,aAAA,EAAY,MAAA;AAAA,oBACZ,SAAA,EAAWP,KAAAA;AAAA,sBACT,mDAAA;AAAA,sBACA,CAAA,CAAE;AAAA;AACJ;AAAA;AACF,eAAA,EAGN,CAAA;AAAA,cAED,IAAA,CAAK,0BACJJ,cAAAA;AAAA,gBAAC,GAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EAAWI,KAAAA;AAAA,oBACT,gDAAA;AAAA,oBACA,IAAA,CAAK,IAAA,IAAQ,MAAA,KAAW,MAAA,GAAY,MAAA,GAAS,EAAA;AAAA,oBAC7C,CAAA,CAAE;AAAA,mBACJ;AAAA,kBAEC,QAAA,EAAA,IAAA,CAAK;AAAA;AAAA,eACR;AAAA,8BAEFJ,cAAAA;AAAA,gBAAC,OAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EAAWI,KAAAA;AAAA,oBACT,iDAAA;AAAA,oBACA,KAAK,IAAA,IAAQ,MAAA,KAAW,MAAA,IAAa,IAAA,CAAK,SAAS,MAAA,GAAS,EAAA;AAAA,oBAC5D,CAAA,CAAE;AAAA,mBACJ;AAAA,kBAEC,QAAA,EAAA,IAAA,CAAK;AAAA;AAAA,eACR;AAAA,cACC,IAAA,CAAK,IAAA,oBACJJ,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAWI,KAAAA,CAAG,8BAAA,EAAgC,CAAA,CAAE,KAAK,CAAA,EAAI,QAAA,EAAA,IAAA,CAAK,IAAA,EAAK,CAAA;AAAA,cAEzE,KAAK,MAAA,IAAU,IAAA,CAAK,MAAA,CAAO,MAAA,GAAS,qBACnCJ,cAAAA;AAAA,gBAAC,SAAA;AAAA,gBAAA;AAAA,kBACC,OAAO,IAAA,CAAK,MAAA;AAAA,kBACZ,SAAA,EAAWI,KAAAA,CAAG,8BAAA,EAAgC,CAAA,CAAE,QAAQ;AAAA;AAAA,eAC1D;AAAA,cAED,IAAA,CAAK,IAAA,IAAQ,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,CAAA,oBAC/BJ,cAAAA,CAAC,OAAA,EAAA,EAAQ,KAAA,EAAO,IAAA,CAAK,IAAA,EAAM,WAAU,cAAA,EAAe,CAAA;AAAA,cAErD,IAAA,CAAK,MAAA,oBACJA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAWI,KAAAA,CAAG,sBAAA,EAAwB,CAAA,CAAE,MAAM,CAAA,EAAI,QAAA,EAAA,IAAA,CAAK,MAAA,EAAO;AAAA;AAAA;AAAA,SAEvE;AAEF,QAAA,MAAM,IAAA,mBACJJ,cAAAA,CAACY,2BAAA,EAAA,EAAU,IAAA,EAAM,KAAK,IAAA,EAAM,aAAA,EAA8B,SAAA,EAAU,cAAA,EACjE,QAAA,EAAA,KAAA,EACH,CAAA;AAEF,QAAA,uBACEZ,cAAAA,CAAC,IAAA,EAAA,EAAW,SAAA,EAAU,SAAA,EACnB,mCACCA,cAAAA,CAAC,MAAA,EAAA,EAAO,KAAA,EAAO,IAAI,EAAA,EAAI,SAAA,EAAU,UAC9B,QAAA,EAAA,IAAA,EACH,CAAA,GAEA,QANK,CAQT,CAAA;AAAA,MAEJ,CAAC;AAAA;AAAA,GACH,EACF,CAAA;AAEJ;AC7KO,SAAS,SAAA,CAAU;AAAA,EACxB,KAAA;AAAA,EACA,WAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA,GAAQ,OAAA;AAAA,EACR,IAAA,GAAO,IAAA;AAAA,EACP,SAAA;AAAA,EACA;AACF,CAAA,EAAmB;AACjB,EAAA,MAAM,IAAIE,kCAAA,EAAiB;AAC3B,EAAA,MAAM,WAAW,KAAA,KAAU,QAAA;AAC3B,EAAA,uBACEC,eAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAWC,KAAAA;AAAA,QACT,WAAA;AAAA,QACA,WAAW,qBAAA,GAAwB,wCAAA;AAAA,QACnC;AAAA,OACF;AAAA,MACA,WAAA,EAAU,YAAA;AAAA,MACV,aAAA,EAAa,MAAA;AAAA,MAEb,QAAA,EAAA;AAAA,wBAAAJ,cAAAA;AAAA,UAAC,YAAA;AAAA,UAAA;AAAA,YACC,IAAA;AAAA,YACA,SAAA,EAAWI,KAAAA;AAAA,cACT,oDAAA;AAAA,cACA,IAAA,KAAS,OAAO,sBAAA,GAAyB,sBAAA;AAAA,cACzC,CAAA,CAAE;AAAA,aACJ;AAAA,YAEA,QAAA,kBAAAJ,cAAAA,CAAC,GAAA,EAAA,EAAG,QAAA,EAAA,KAAA,EAAM;AAAA;AAAA,SACZ;AAAA,QACC,WAAA,oBACCG,eAAAA,CAAC,YAAA,EAAA,EAAW,WAAWC,KAAAA,CAAG,cAAA,EAAgB,CAAA,CAAE,KAAK,CAAA,EAC/C,QAAA,EAAA;AAAA,0BAAAJ,cAAAA,CAAC,UAAK,SAAA,EAAWI,KAAAA,CAAG,iBAAiB,CAAA,CAAE,IAAI,CAAA,EAAI,QAAA,EAAA,WAAA,CAAY,IAAA,EAAK,CAAA;AAAA,UAC/D,WAAA,CAAY,IAAA,oBAAQD,eAAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAA;AAAA,YAAA,IAAA;AAAA,YAAG,WAAA,CAAY;AAAA,WAAA,EAAK;AAAA,SAAA,EACjD;AAAA;AAAA;AAAA,GAEJ;AAEJ;ACnBA,IAAMU,KAAAA,GAA8B;AAAA,EAClC,CAAA,EAAG,gBAAA;AAAA,EACH,CAAA,EAAG;AACL,CAAA;AAGA,SAAS,QAAA,CAAS,EAAE,IAAA,EAAM,SAAA,EAAU,EAA+C;AACjF,EAAA,IAAI,CAAC,IAAA,IAAQ,IAAA,CAAK,MAAA,KAAW,GAAG,OAAO,IAAA;AACvC,EAAA,uBACEb,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EACA,QAAA,EAAA,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,qBACZG,eAAAA,CAAC,MAAA,EAAA,EACE,QAAA,EAAA;AAAA,IAAA,CAAA,GAAI,qBAAKH,cAAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAY,QAAO,QAAA,EAAA,QAAA,EAAG,CAAA;AAAA,IACrC;AAAA,GAAA,EAAA,EAFQ,CAGX,CACD,CAAA,EACH,CAAA;AAEJ;AAGO,SAAS,WAAA,CAAY;AAAA,EAC1B,KAAA;AAAA,EACA,MAAA,GAAS,OAAA;AAAA,EACT,YAAA,GAAe,KAAA;AAAA,EACf,OAAA,GAAU,CAAA;AAAA,EACV,aAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,EAAqB;AACnB,EAAA,MAAM,IAAIE,kCAAA,EAAiB;AAC3B,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,KAAA,mBAAQF,cAAAA,CAAAC,mBAAAA,EAAA,EAAG,QAAA,EAAA,KAAA,EAAM,CAAA,GAAM,IAAA;AAEtD,EAAA,MAAM,IAAA,GAAO,CAAC,IAAA,EAAmB,CAAA,KAC/B,IAAA,CAAK,MAAA,KAAW,MAAA,GAAS,CAAA,EAAG,MAAM,CAAA,MAAA,EAAS,CAAC,CAAA,CAAA,GAAK,MAAA,CAAA;AAEnD,EAAA,IAAI,WAAW,MAAA,EAAQ;AACrB,IAAA,uBACED,cAAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAWI,KAAAA,CAAG,mBAAA,EAAqB,CAAA,CAAE,UAAU,SAAS,CAAA;AAAA,QACxD,WAAA,EAAU,cAAA;AAAA,QACV,aAAA,EAAY,MAAA;AAAA,QACZ,aAAA,EAAa,MAAA;AAAA,QAEZ,gBAAM,GAAA,CAAI,CAAC,IAAA,EAAM,CAAA,qBAChBJ,cAAAA,CAAC,IAAA,EAAA,EACC,QAAA,kBAAAA,cAAAA,CAACY,+BAAU,IAAA,EAAM,IAAA,CAAK,MAAM,aAAA,EAA8B,SAAA,EAAU,eAClE,QAAA,kBAAAT,eAAAA;AAAA,UAAC,SAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,oFAAA;AAAA,YACV,aAAA,EAAa,IAAA,CAAK,IAAA,EAAM,CAAC,CAAA;AAAA,YAEzB,QAAA,EAAA;AAAA,8BAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACZ,QAAA,EAAA;AAAA,gBAAA,IAAA,CAAK,MAAA,oBACJH,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAWI,KAAAA,CAAG,gDAAA,EAAkD,CAAA,CAAE,MAAM,CAAA,EACxE,QAAA,EAAA,IAAA,CAAK,MAAA,EACR,CAAA;AAAA,gCAEFJ,cAAAA,CAAC,QAAA,EAAA,EAAS,IAAA,EAAM,IAAA,CAAK,IAAA,EAAM,SAAA,EAAWI,KAAAA,CAAG,SAAA,EAAW,CAAA,CAAE,MAAM,CAAA,EAAG;AAAA,eAAA,EACjE,CAAA;AAAA,8BACAD,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,SAAA,EACb,QAAA,EAAA;AAAA,gCAAAH,cAAAA;AAAA,kBAAC,IAAA;AAAA,kBAAA;AAAA,oBACC,SAAA,EAAWI,KAAAA;AAAA,sBACT,4FAAA;AAAA,sBACA,CAAA,CAAE;AAAA,qBACJ;AAAA,oBAEC,QAAA,EAAA,IAAA,CAAK;AAAA;AAAA,iBACR;AAAA,gBACC,IAAA,CAAK,OAAA,oBACJJ,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAWI,KAAAA,CAAG,8BAAA,EAAgC,CAAA,CAAE,KAAK,CAAA,EAAI,QAAA,EAAA,IAAA,CAAK,OAAA,EAAQ;AAAA,eAAA,EAE7E,CAAA;AAAA,cACC,IAAA,CAAK,wBACJJ,cAAAA;AAAA,gBAACW,wBAAAA;AAAA,gBAAA;AAAA,kBACC,aAAA,EAAY,MAAA;AAAA,kBACZ,SAAA,EAAWP,KAAAA;AAAA,oBACT,mEAAA;AAAA,oBACA,CAAA,CAAE;AAAA;AACJ;AAAA;AACF;AAAA;AAAA,SAEJ,EACF,CAAA,EAAA,EArCO,CAsCT,CACD;AAAA;AAAA,KACH;AAAA,EAEJ;AAEA,EAAA,MAAM,IAAA,GAAO,CAAC,IAAA,EAAmB,CAAA,EAAW,yBAC1CJ,cAAAA,CAACY,2BAAA,EAAA,EAAU,IAAA,EAAM,IAAA,CAAK,IAAA,EAAM,aAAA,EAA8B,SAAA,EAAU,sBAClE,QAAA,kBAAAT,eAAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAWC,KAAAA;AAAA,QACT,uEAAA;AAAA,QACA,CAAA,CAAE,KAAA;AAAA,QACF,IAAA,CAAK,QAAQ,CAAA,CAAE,UAAA;AAAA,QACf,OAAO,YAAA,GAAe;AAAA,OACxB;AAAA,MACA,aAAA,EAAa,IAAA,CAAK,IAAA,EAAM,CAAC,CAAA;AAAA,MAExB,QAAA,EAAA;AAAA,QAAA,IAAA,CAAK,4BACJJ,cAAAA;AAAA,UAACc,4BAAA;AAAA,UAAA;AAAA,YACC,KAAK,IAAA,CAAK,QAAA;AAAA,YACV,GAAA,EAAK,KAAK,QAAA,IAAY,EAAA;AAAA,YACtB,MAAA,EAAO,MAAA;AAAA,YACP,OAAA,EAAQ,MAAA;AAAA,YACR,SAAA,EAAU;AAAA;AAAA,SACZ;AAAA,wBAEFX,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wCAAA,EACZ,QAAA,EAAA;AAAA,UAAA,IAAA,CAAK,MAAA,mBACJH,cAAAA,CAAC,GAAA,EAAA,EAAE,WAAWI,KAAAA,CAAG,gDAAA,EAAkD,CAAA,CAAE,MAAM,GACxE,QAAA,EAAA,IAAA,CAAK,MAAA,EACR,CAAA,mBAEAJ,eAAC,MAAA,EAAA,EAAK,CAAA;AAAA,UAEP,IAAA,CAAK,wBACJA,cAAAA;AAAA,YAACW,wBAAAA;AAAA,YAAA;AAAA,cACC,aAAA,EAAY,MAAA;AAAA,cACZ,SAAA,EAAWP,KAAAA,CAAG,mDAAA,EAAqD,CAAA,CAAE,MAAM;AAAA;AAAA;AAC7E,SAAA,EAEJ,CAAA;AAAA,wBACAJ,cAAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAWI,KAAAA;AAAA,cACT,8CAAA;AAAA,cACA,OAAO,sBAAA,GAAyB,SAAA;AAAA,cAChC,CAAA,CAAE;AAAA,aACJ;AAAA,YAEC,QAAA,EAAA,IAAA,CAAK;AAAA;AAAA,SACR;AAAA,QACC,IAAA,CAAK,2BACJJ,cAAAA;AAAA,UAAC,GAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAWI,KAAAA;AAAA,cACT,qCAAA;AAAA,cACA,IAAA,IAAQ,oBAAA;AAAA,cACR,CAAA,CAAE;AAAA,aACJ;AAAA,YAEC,QAAA,EAAA,IAAA,CAAK;AAAA;AAAA,SACR;AAAA,wBAEFJ,cAAAA,CAAC,QAAA,EAAA,EAAS,IAAA,EAAM,IAAA,CAAK,IAAA,EAAM,SAAA,EAAWI,KAAAA,CAAG,cAAA,EAAgB,CAAA,CAAE,MAAM,CAAA,EAAG;AAAA;AAAA;AAAA,GACtE,EACF,CAAA;AAGF,EAAA,IAAI,YAAA,IAAgB,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG;AACpC,IAAA,MAAM,CAAC,IAAA,EAAM,GAAG,IAAI,CAAA,GAAI,KAAA;AACxB,IAAA,uBACED,eAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAWC,KAAAA,CAAG,qCAAA,EAAuC,SAAS,CAAA;AAAA,QAC9D,WAAA,EAAU,cAAA;AAAA,QACV,aAAA,EAAY,SAAA;AAAA,QACZ,aAAA,EAAa,MAAA;AAAA,QAEb,QAAA,EAAA;AAAA,0BAAAJ,eAAC,KAAA,EAAA,EAAK,QAAA,EAAA,IAAA,CAAK,IAAA,EAAM,CAAA,EAAG,IAAI,CAAA,EAAE,CAAA;AAAA,0BAC1BA,eAAC,IAAA,EAAA,EAAG,SAAA,EAAU,cACX,QAAA,EAAA,IAAA,CAAK,GAAA,CAAI,CAAC,IAAA,EAAM,CAAA,qBACfA,cAAAA,CAAC,IAAA,EAAA,EAAY,eAAK,IAAA,EAAM,CAAA,GAAI,GAAG,KAAK,CAAA,EAAA,EAA3B,CAA6B,CACvC,CAAA,EACH;AAAA;AAAA;AAAA,KACF;AAAA,EAEJ;AAEA,EAAA,uBACEA,cAAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAWI,MAAG,YAAA,EAAcS,KAAAA,CAAK,OAAO,CAAA,IAAKA,KAAAA,CAAK,CAAC,CAAA,EAAG,SAAS,CAAA;AAAA,MAC/D,WAAA,EAAU,cAAA;AAAA,MACV,aAAA,EAAY,OAAA;AAAA,MACZ,aAAA,EAAa,MAAA;AAAA,MAEZ,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,sBAChBb,cAAAA,CAAC,IAAA,EAAA,EAAY,QAAA,EAAA,IAAA,CAAK,IAAA,EAAM,CAAA,EAAG,KAAK,CAAA,EAAA,EAAvB,CAAyB,CACnC;AAAA;AAAA,GACH;AAEJ;ACxMO,SAAS,UAAA,CAAW;AAAA,EACzB,IAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA,GAAU,OAAA;AAAA,EACV,SAAA;AAAA,EACA;AACF,CAAA,EAAoB;AAClB,EAAA,MAAM,IAAA,GAAO,aAAa,OAAO,CAAA;AACjC,EAAA,MAAM,CAAA,GAAIE,mCAAiB,IAAI,CAAA;AAC/B,EAAA,uBACEF,cAAAA,CAACM,sCAAA,CAAqB,UAArB,EAA8B,KAAA,EAAO,MACpC,QAAA,kBAAAN,cAAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,YAAA,EAAY,KAAA;AAAA,MACZ,SAAA,EAAWI,MAAG,UAAA,EAAY,CAAA,CAAE,UAAU,aAAA,CAAc,OAAO,GAAG,SAAS,CAAA;AAAA,MACvE,WAAA,EAAU,aAAA;AAAA,MACV,aAAA,EAAa,MAAA;AAAA,MAEb,QAAA,kBAAAD,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qGAAA,EACZ,QAAA,EAAA;AAAA,QAAA,IAAA,oBAAQH,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iDAAiD,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,wBAC9EA,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,4DAAA,EACX,gBAAM,GAAA,CAAI,CAAC,IAAA,EAAM,CAAA,qBAChBA,cAAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YAEC,SAAA,EAAWI,KAAAA,CAAG,gDAAA,EAAkD,CAAA,CAAE,MAAM,CAAA;AAAA,YAEvE,QAAA,EAAA;AAAA,WAAA;AAAA,UAHI;AAAA,SAKR,CAAA,EACH;AAAA,OAAA,EACF;AAAA;AAAA,GACF,EACF,CAAA;AAEJ;AAgBO,SAAS,OAAA,CAAQ;AAAA,EACtB,KAAA;AAAA,EACA,IAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA,GAAU,SAAA;AAAA,EACV,SAAA;AAAA,EACA;AACF,CAAA,EAAiB;AACf,EAAA,MAAM,IAAA,GAAO,aAAa,OAAO,CAAA;AACjC,EAAA,MAAM,CAAA,GAAIF,mCAAiB,IAAI,CAAA;AAC/B,EAAA,uBACEF,cAAAA,CAACM,sCAAA,CAAqB,UAArB,EAA8B,KAAA,EAAO,MACpC,QAAA,kBAAAH,eAAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,WAAWC,KAAAA,CAAG,kCAAA,EAAoC,aAAA,CAAc,OAAO,GAAG,SAAS,CAAA;AAAA,MACnF,WAAA,EAAU,UAAA;AAAA,MACV,aAAA,EAAa,MAAA;AAAA,MAEZ,QAAA,EAAA;AAAA,QAAA,QAAA,oBACCJ,cAAAA,CAAC,KAAA,EAAA,EAAI,eAAY,MAAA,EAAO,SAAA,EAAU,8CAC/B,QAAA,EAAA,QAAA,EACH,CAAA;AAAA,wBAEFG,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2DAAA,EACb,QAAA,EAAA;AAAA,0BAAAH,cAAAA;AAAA,YAAC,IAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAWI,KAAAA;AAAA,gBACT,6EAAA;AAAA,gBACA,CAAA,CAAE;AAAA,eACJ;AAAA,cAEC,QAAA,EAAA;AAAA;AAAA,WACH;AAAA,UACC,IAAA,oBAAQJ,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAWI,MAAG,gCAAA,EAAkC,CAAA,CAAE,KAAK,CAAA,EAAI,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,UAC3E,2BACCJ,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oEACZ,QAAA,EAAA,OAAA,EACH;AAAA,SAAA,EAEJ;AAAA;AAAA;AAAA,GACF,EACF,CAAA;AAEJ","file":"chunk-VO3VUC44.cjs","sourcesContent":["/**\n * The reader's appearance on this device: typeface, colour scheme and text size.\n *\n * Separate from {@link createThemeStore}. A theme bundle is the site's brand (a whole token set an\n * author edits); this store only ever sets the two typography vars and the root font-size (inline\n * on `<html>`, so they win over any `:root` block a `cssVars` theme emits) and toggles the `.dark`\n * class (class-based dark mode). The faces come from `FONT_PAIRINGS`, so every site offers the\n * same typography vocabulary.\n *\n * The text size sets the root font-size as a percentage of the browser's own default, so the\n * reader's browser preference still compounds with it, and every rem-based size scales with it.\n */\nimport { create, type StoreApi, type UseBoundStore } from 'zustand'\nimport { persist } from 'zustand/middleware'\nimport { applyFontVars } from './tokens'\nimport { getFontPairing, type FontPairing } from './fontPairings'\n\nexport type AppearanceColorScheme = 'light' | 'dark'\nexport type AppearanceTextSize = 'default' | 'large' | 'larger'\n\n/** Text size steps, as a root font-size relative to the browser default. */\nconst TEXT_SIZE_SCALE: Record<AppearanceTextSize, string> = {\n default: '100%',\n large: '112.5%',\n larger: '125%',\n}\n\nexport interface AppearanceDefaults {\n /** A `FONT_PAIRINGS` id; must match the faces the site's stylesheet paints first. */\n pairingId: string\n colorScheme: AppearanceColorScheme\n textSize: AppearanceTextSize\n}\n\nexport interface AppearanceState extends AppearanceDefaults {\n setPairing: (pairingId: string) => void\n setColorScheme: (scheme: AppearanceColorScheme) => void\n setTextSize: (size: AppearanceTextSize) => void\n reset: () => void\n}\n\nexport interface AppearanceStoreConfig {\n /** localStorage key for persistence (namespaced per site). */\n storageKey: string\n /** The site's shipped appearance. Default: light, default size; the pairing is required. */\n defaults: Pick<AppearanceDefaults, 'pairingId'> & Partial<AppearanceDefaults>\n /** Typefaces offered in Settings (`FONT_PAIRINGS` ids); default: the settings' own spread. */\n pairingIds?: readonly string[]\n}\n\nexport interface AppearanceBundle {\n useStore: UseBoundStore<StoreApi<AppearanceState>>\n defaults: AppearanceDefaults\n pairingIds?: readonly string[]\n /** Resolve an id to a pairing, falling back to the default pairing for unknown ids. */\n resolvePairing: (pairingId: string) => FontPairing\n /** Paint the stored appearance before the first render (safe at module scope). */\n applyStored: () => void\n}\n\n/** Toggle the `.dark` class on the document root: the one dark-mode switch. */\nfunction applyColorScheme(scheme: AppearanceColorScheme): void {\n if (typeof document === 'undefined') return\n document.documentElement.classList.toggle('dark', scheme === 'dark')\n}\n\n/** The default step clears the inline value, so the stylesheet paints exactly as without it. */\nfunction applyTextSize(size: AppearanceTextSize): void {\n if (typeof document === 'undefined') return\n const scale = TEXT_SIZE_SCALE[size] ?? TEXT_SIZE_SCALE.default\n document.documentElement.style.fontSize = scale === '100%' ? '' : scale\n}\n\n/** Build a site's appearance store. */\nexport function createAppearanceStore({\n storageKey,\n defaults: given,\n pairingIds,\n}: AppearanceStoreConfig): AppearanceBundle {\n const defaults: AppearanceDefaults = { colorScheme: 'light', textSize: 'default', ...given }\n if (!getFontPairing(defaults.pairingId)) {\n throw new Error(`createAppearanceStore: no font pairing \"${defaults.pairingId}\"`)\n }\n const resolvePairing = (pairingId: string) =>\n getFontPairing(pairingId) ?? getFontPairing(defaults.pairingId)!\n const applyAll = ({ pairingId, colorScheme, textSize }: AppearanceDefaults) => {\n if (typeof document === 'undefined') return\n applyFontVars(resolvePairing(pairingId))\n applyColorScheme(colorScheme)\n applyTextSize(textSize)\n }\n\n const useStore = create<AppearanceState>()(\n persist(\n (set) => ({\n ...defaults,\n setPairing: (pairingId) => {\n const pairing = getFontPairing(pairingId)\n if (!pairing) return\n applyFontVars(pairing)\n set({ pairingId })\n },\n setColorScheme: (colorScheme) => {\n applyColorScheme(colorScheme)\n set({ colorScheme })\n },\n setTextSize: (textSize) => {\n if (!(textSize in TEXT_SIZE_SCALE)) return\n applyTextSize(textSize)\n set({ textSize })\n },\n reset: () => {\n applyAll(defaults)\n set({ ...defaults })\n },\n }),\n {\n name: storageKey,\n // Paint the persisted choice as soon as the store rehydrates, so a reader never sees a\n // frame of the default appearance before theirs lands.\n onRehydrateStorage: () => (state) => {\n if (state) applyAll(state)\n },\n }\n )\n )\n\n return {\n useStore,\n defaults,\n pairingIds,\n resolvePairing,\n applyStored: () => applyAll(useStore.getState()),\n }\n}\n","/**\n * Read a host's theme defaults out of its own stylesheet, so the editable catalog's values are\n * never a second, hand-kept copy of the CSS that paints the first frame.\n *\n * A host imports its token stylesheet as text (Vite: `import css from './tokens.css?raw'`) and\n * passes it with its catalog. The values come from the blocks of the host's emit mode:\n *\n * - `'flat'`: the `@theme` block's `--color-<key>` (hex, as Tailwind v4 themes are written);\n * - `'cssVars'`: the `:root` block's `--<key>` triplets, and the `.dark` block's for the dark set.\n *\n * `--font-display`, `--font-sans` and `--radius` are read from the same light block unless the\n * host supplies them. A catalog key the stylesheet does not declare throws: a catalog that names a\n * token the CSS no longer has is the drift this module exists to stop.\n */\nimport type { ColorToken, ThemeEmitMode, ThemeFonts, ThemeTokens } from './tokens'\n\ninterface CssBlock {\n /** The block's prelude: a selector list or an at-rule (`@theme`, `@layer base`). */\n prelude: string\n /** The custom properties it declares, by name (`--primary`). */\n vars: Record<string, string>\n}\n\n/** Every block of a stylesheet with the custom properties it declares; nesting is flattened. */\nfunction cssBlocks(css: string): CssBlock[] {\n const text = css.replace(/\\/\\*[\\s\\S]*?\\*\\//g, '')\n const blocks: CssBlock[] = []\n const open: CssBlock[] = []\n let buffer = ''\n const declare = () => {\n const match = /^\\s*(--[\\w-]+)\\s*:\\s*([\\s\\S]*?)\\s*$/.exec(buffer)\n const block = open[open.length - 1]\n if (match && block) block.vars[match[1]] = match[2]\n buffer = ''\n }\n for (const ch of text) {\n if (ch === '{') {\n const block: CssBlock = { prelude: buffer.trim(), vars: {} }\n open.push(block)\n blocks.push(block)\n buffer = ''\n } else if (ch === '}') {\n declare()\n open.pop()\n } else if (ch === ';') {\n declare()\n } else {\n buffer += ch\n }\n }\n return blocks\n}\n\nconst selects = (prelude: string, selector: string) =>\n prelude.split(',').some((part) => part.trim() === selector)\n\n/** All the variables declared by the blocks `match` accepts, later blocks winning. */\nfunction varsOf(blocks: CssBlock[], match: (prelude: string) => boolean): Record<string, string> {\n return Object.assign({}, ...blocks.filter((b) => match(b.prelude)).map((b) => b.vars))\n}\n\n/** A `--radius` value (`0.1875rem`, `4px`) in rem. */\nfunction remOf(value: string): number {\n const match = /^(-?\\d*\\.?\\d+)(rem|px)$/.exec(value.trim())\n if (!match) throw new Error(`themeFromCss: --radius \"${value}\" is not in rem or px`)\n return match[2] === 'px' ? Number(match[1]) / 16 : Number(match[1])\n}\n\nexport interface ThemeFromCssOptions {\n /** The editable catalog: every key must be declared by the stylesheet. */\n tokens: readonly ColorToken[]\n /** The host's emit mode (see {@link ThemeEmitMode}). Default `'flat'`. */\n mode?: ThemeEmitMode\n /** The faces, when the stylesheet given does not declare them (the host's default pairing). */\n fonts?: ThemeFonts\n /** The base radius in rem, when the stylesheet given does not declare it. */\n radius?: number\n}\n\nexport interface ThemeFromCss {\n /** The shipped defaults, exactly as the stylesheet paints them. */\n theme: ThemeTokens\n /** `cssVars` mode: the `.dark` values of the catalog's keys (for `darkColors`). */\n darkColors?: Record<string, string>\n}\n\n/** The catalog's default values, read from the host's stylesheet text (see the module doc). */\nexport function themeFromCss(\n css: string | readonly string[],\n { tokens, mode = 'flat', fonts, radius }: ThemeFromCssOptions\n): ThemeFromCss {\n const blocks = cssBlocks(typeof css === 'string' ? css : css.join('\\n'))\n const flat = mode === 'flat'\n const light = varsOf(blocks, (p) => (flat ? /^@theme\\b/.test(p) : selects(p, ':root')))\n const dark = flat ? undefined : varsOf(blocks, (p) => selects(p, '.dark'))\n const prefix = flat ? '--color-' : '--'\n\n const read = (vars: Record<string, string>, name: string, where: string) => {\n const value = vars[name]\n if (value === undefined) throw new Error(`themeFromCss: ${where} declares no ${name}`)\n return value\n }\n const lightWhere = flat ? '@theme' : ':root'\n const colorsOf = (vars: Record<string, string>, where: string) =>\n Object.fromEntries(tokens.map(({ key }) => [key, read(vars, prefix + key, where)]))\n\n return {\n theme: {\n colors: colorsOf(light, lightWhere),\n fonts: fonts ?? {\n display: read(light, '--font-display', lightWhere),\n sans: read(light, '--font-sans', lightWhere),\n },\n radius: radius ?? remOf(read(light, '--radius', lightWhere)),\n },\n ...(dark && { darkColors: colorsOf(dark, '.dark') }),\n }\n}\n","import type { ReactNode } from 'react'\n\nexport interface CollectionDetailContext<T> {\n previous?: T\n next?: T\n}\n\nexport interface CollectionDetailProps<T> {\n /** The collection, supplied by the host (CMS, files, API...). */\n items: T[]\n /** The slug from the host's route. Absent: the list is rendered. */\n slug?: string\n getSlug: (item: T) => string\n renderList: (items: T[]) => ReactNode\n /** One item's page. `previous` / `next` are the neighbours in `items` order. */\n renderDetail: (item: T, context: CollectionDetailContext<T>) => ReactNode\n /** Shown when `slug` matches nothing. */\n renderNotFound?: (slug: string) => ReactNode\n}\n\n/**\n * The list-and-detail page contract for a collection (people, articles, services...). It owns\n * only the slug lookup; the host owns the route, the data and every pixel of both views, so one\n * route (`/things/:slug?`) serves the list and each detail page.\n */\nexport function CollectionDetail<T>({\n items,\n slug,\n getSlug,\n renderList,\n renderDetail,\n renderNotFound,\n}: CollectionDetailProps<T>) {\n if (!slug) return <>{renderList(items)}</>\n const index = items.findIndex((item) => getSlug(item) === slug)\n if (index === -1) {\n return (\n <>\n {renderNotFound ? (\n renderNotFound(slug)\n ) : (\n <p role=\"status\" data-slot=\"collection-not-found\">\n Not found\n </p>\n )}\n </>\n )\n }\n return <>{renderDetail(items[index], { previous: items[index - 1], next: items[index + 1] })}</>\n}\n","import type { ReactNode } from 'react'\nimport { cn } from '@arbidocs/react/ui'\nimport { formatIndex, useEditorialTone, type EditorialTone } from './tone'\n\nexport interface EyebrowProps {\n children: ReactNode\n /** A number or label before the text: `1` renders `01`. */\n index?: number | string\n /** A short accent rule before the text. */\n rule?: boolean\n tone?: EditorialTone\n className?: string\n testId?: string\n}\n\n/** Small uppercase label above a heading: optional index and accent rule. */\nexport function Eyebrow({ children, index, rule = false, tone, className, testId }: EyebrowProps) {\n const t = useEditorialTone(tone)\n return (\n <p\n className={cn(\n 'flex items-center gap-3 text-xs font-semibold uppercase tracking-wider',\n t.subtle,\n className\n )}\n data-slot=\"eyebrow\"\n data-testid={testId}\n >\n {rule && <span aria-hidden=\"true\" className=\"h-px w-8 shrink-0 bg-primary\" />}\n {index !== undefined && (\n <span className={cn('tabular-nums', t.accent)}>{formatIndex(index)}</span>\n )}\n <span>{children}</span>\n </p>\n )\n}\n","import type { ReactNode } from 'react'\nimport { cn } from '@arbidocs/react/ui'\nimport { Eyebrow } from './Eyebrow'\nimport { useEditorialTone, type EditorialTone } from './tone'\n\nexport interface EditorialHeadingProps {\n eyebrow?: ReactNode\n /** Section number or label shown with the eyebrow. */\n index?: number | string\n title: ReactNode\n lead?: ReactNode\n /** Heading element level (default 2). */\n level?: 1 | 2 | 3\n align?: 'start' | 'center'\n tone?: EditorialTone\n className?: string\n testId?: string\n}\n\n/** Section heading: numbered or labelled eyebrow, display title and lead. */\nexport function EditorialHeading({\n eyebrow,\n index,\n title,\n lead,\n level = 2,\n align = 'start',\n tone,\n className,\n testId,\n}: EditorialHeadingProps) {\n const t = useEditorialTone(tone)\n const Heading = `h${level}` as 'h1' | 'h2' | 'h3'\n return (\n <div\n className={cn('max-w-3xl', align === 'center' && 'mx-auto text-center', className)}\n data-slot=\"editorial-heading\"\n data-testid={testId}\n >\n {(eyebrow || index !== undefined) && (\n <Eyebrow\n index={index}\n tone={tone}\n className={cn('mb-4', align === 'center' && 'justify-center')}\n >\n {eyebrow}\n </Eyebrow>\n )}\n <Heading\n className={cn(\n 'font-display text-3xl font-semibold tracking-tight text-balance sm:text-4xl',\n t.text\n )}\n >\n {title}\n </Heading>\n {lead && <p className={cn('mt-4 text-lg leading-relaxed', t.muted)}>{lead}</p>}\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport { cn } from '@arbidocs/react/ui'\nimport { Eyebrow } from './Eyebrow'\nimport { EditorialToneContext, useEditorialTone, type EditorialTone } from './tone'\n\nexport type EditorialSurface = 'plain' | 'muted' | 'inverse'\n\nexport interface EditorialHeroTestIds {\n root: string\n eyebrow: string\n title: string\n lede: string\n actions: string\n aside: string\n}\n\nexport interface EditorialHeroProps {\n eyebrow?: ReactNode\n /** Show the accent rule before the eyebrow. */\n eyebrowRule?: boolean\n /** The headline: text or any node. */\n title: ReactNode\n /** A phrase inside a string `title` set in the italic accent. */\n emphasis?: string\n /** The paragraph under the headline. */\n lede?: ReactNode\n /** Buttons or links under the lede. */\n actions?: ReactNode\n /** Anything under the actions (badges, a trust line). */\n footer?: ReactNode\n /** The figure beside (below on phones) the copy: an image frame, a card, a media slot. */\n aside?: ReactNode\n /** Decoration behind the copy (texture, wash, background image). Hidden from assistive tech. */\n backdrop?: ReactNode\n /** `start` copy, or `center` (no aside). */\n align?: 'start' | 'center'\n /** `page`: a page-opening header band. `cover`: the larger home-page hero. */\n size?: 'page' | 'cover'\n surface?: EditorialSurface\n className?: string\n testId?: string\n testIds?: Partial<EditorialHeroTestIds>\n}\n\nexport const SURFACE_CLASS: Record<EditorialSurface, string> = {\n plain: 'bg-background text-foreground',\n muted: 'bg-muted text-foreground',\n inverse: 'bg-foreground text-background',\n}\n\nexport const SURFACE_TONE: Record<EditorialSurface, EditorialTone> = {\n plain: 'default',\n muted: 'default',\n inverse: 'inverse',\n}\n\nfunction renderTitle(title: ReactNode, emphasis?: string): ReactNode {\n if (typeof title !== 'string' || !emphasis || !title.includes(emphasis)) return title\n const parts = title.split(emphasis)\n return parts.map((part, i) => (\n <span key={i}>\n {part}\n {i < parts.length - 1 && <em className=\"italic text-primary\">{emphasis}</em>}\n </span>\n ))\n}\n\n/**\n * Editorial opening band: eyebrow, display headline with an italic accent phrase, lede, actions\n * and an optional aside (image, card). Covers a page header (no aside, `size=\"page\"`), a split\n * hero (aside) and a centred landing hero (`align=\"center\"`, `size=\"cover\"`).\n */\nexport function EditorialHero({\n eyebrow,\n eyebrowRule = false,\n title,\n emphasis,\n lede,\n actions,\n footer,\n aside,\n backdrop,\n align = 'start',\n size = 'page',\n surface = 'plain',\n className,\n testId,\n testIds,\n}: EditorialHeroProps) {\n const tone = SURFACE_TONE[surface]\n const t = useEditorialTone(tone)\n const centered = align === 'center' && !aside\n const ids = {\n root: testIds?.root ?? testId,\n eyebrow: testIds?.eyebrow ?? (testId ? `${testId}-eyebrow` : undefined),\n title: testIds?.title ?? (testId ? `${testId}-title` : undefined),\n lede: testIds?.lede ?? (testId ? `${testId}-lede` : undefined),\n actions: testIds?.actions ?? (testId ? `${testId}-actions` : undefined),\n aside: testIds?.aside ?? (testId ? `${testId}-aside` : undefined),\n }\n return (\n <EditorialToneContext.Provider value={tone}>\n <section\n className={cn('relative isolate overflow-hidden', SURFACE_CLASS[surface], className)}\n data-slot=\"editorial-hero\"\n data-size={size}\n data-testid={ids.root}\n >\n {backdrop && (\n <div aria-hidden=\"true\" className=\"pointer-events-none absolute inset-0 -z-10\">\n {backdrop}\n </div>\n )}\n <div\n className={cn(\n 'mx-auto max-w-7xl px-5 lg:px-8',\n size === 'cover' ? 'py-16 lg:py-28' : 'py-14 lg:py-24',\n aside && 'grid items-center gap-12 lg:grid-cols-[1.02fr_0.98fr] lg:gap-14'\n )}\n >\n <div className={cn('max-w-3xl', centered && 'mx-auto text-center')}>\n {eyebrow && (\n <Eyebrow\n rule={eyebrowRule}\n tone={tone}\n className={cn('mb-6', centered && 'justify-center')}\n testId={ids.eyebrow}\n >\n {eyebrow}\n </Eyebrow>\n )}\n <h1\n className={cn(\n 'font-display font-semibold tracking-tight text-balance',\n size === 'cover'\n ? 'text-[2.6rem] leading-[1.03] sm:text-6xl lg:text-[4.4rem]'\n : 'text-4xl leading-[1.05] sm:text-5xl',\n t.text\n )}\n data-testid={ids.title}\n >\n {renderTitle(title, emphasis)}\n </h1>\n {lede && (\n <p\n className={cn(\n 'mt-6 max-w-2xl text-lg leading-relaxed',\n centered && 'mx-auto',\n t.muted\n )}\n data-testid={ids.lede}\n >\n {lede}\n </p>\n )}\n {actions && (\n <div\n className={cn(\n 'mt-8 flex flex-col gap-3 sm:flex-row',\n centered && 'sm:justify-center'\n )}\n data-testid={ids.actions}\n >\n {actions}\n </div>\n )}\n {footer && (\n <div className={cn('mt-8', centered && 'flex justify-center')}>{footer}</div>\n )}\n </div>\n {aside && (\n <div\n className=\"relative min-w-0\"\n data-slot=\"editorial-hero-aside\"\n data-testid={ids.aside}\n >\n {aside}\n </div>\n )}\n </div>\n </section>\n </EditorialToneContext.Provider>\n )\n}\n","import type { ReactNode } from 'react'\nimport { cn } from '@arbidocs/react/ui'\nimport { EditorialHeading } from './EditorialHeading'\nimport { SURFACE_CLASS, SURFACE_TONE, type EditorialSurface } from './EditorialHero'\nimport { EditorialToneContext, useEditorialTone } from './tone'\n\nexport interface EditorialSectionProps {\n id?: string\n eyebrow?: ReactNode\n /** Section number or label: `1` renders `01`. */\n index?: number | string\n title?: ReactNode\n lead?: ReactNode\n /** Sits beside the heading from `sm` up (a \"see all\" link or button). */\n action?: ReactNode\n /**\n * `stacked`: heading above the content. `split`: heading column beside the content from `lg`.\n * `split-wide`: the same with a wider content column.\n */\n layout?: 'stacked' | 'split' | 'split-wide'\n /** `plain`, `muted` (tinted band) or `inverse` (dark band on a light theme). */\n surface?: EditorialSurface\n /** Hairline above and below the band. */\n bordered?: boolean\n /** Vertical rhythm. */\n spacing?: 'md' | 'lg'\n /** Backdrop behind the content (texture, image), hidden from assistive tech. */\n backdrop?: ReactNode\n /** Accessible name when there is no `title`. */\n 'aria-label'?: string\n children?: ReactNode\n className?: string\n testId?: string\n}\n\n/**\n * A page band: numbered or labelled heading, optional action, and content stacked below or in a\n * second column. Sets the tone for the parts inside it, so the same list or panel grid reads on\n * a plain, tinted or inverse band.\n */\nexport function EditorialSection({\n id,\n eyebrow,\n index,\n title,\n lead,\n action,\n layout = 'stacked',\n surface = 'plain',\n bordered = false,\n spacing = 'lg',\n backdrop,\n 'aria-label': ariaLabel,\n children,\n className,\n testId,\n}: EditorialSectionProps) {\n const tone = SURFACE_TONE[surface]\n const t = useEditorialTone(tone)\n const hasHeading = Boolean(title || eyebrow || index !== undefined)\n const heading =\n hasHeading && title ? (\n <EditorialHeading eyebrow={eyebrow} index={index} title={title} lead={lead} tone={tone} />\n ) : null\n const split = layout !== 'stacked'\n return (\n <EditorialToneContext.Provider value={tone}>\n <section\n id={id}\n aria-label={title ? undefined : ariaLabel}\n className={cn(\n 'relative isolate overflow-hidden scroll-mt-24',\n SURFACE_CLASS[surface],\n bordered && cn('border-y', t.hairline),\n className\n )}\n data-slot=\"editorial-section\"\n data-testid={testId}\n >\n {backdrop && (\n <div aria-hidden=\"true\" className=\"pointer-events-none absolute inset-0 -z-10\">\n {backdrop}\n </div>\n )}\n <div\n className={cn(\n 'mx-auto max-w-7xl px-5 lg:px-8',\n spacing === 'lg' ? 'py-16 lg:py-24' : 'py-12 lg:py-16',\n split &&\n cn(\n 'grid gap-10 lg:gap-16',\n layout === 'split-wide' ? 'lg:grid-cols-[1fr_1.4fr]' : 'lg:grid-cols-2'\n )\n )}\n >\n {split ? (\n <>\n {heading && <div>{heading}</div>}\n <div className=\"min-w-0\">{children}</div>\n </>\n ) : (\n <>\n {heading && (\n <div className=\"flex flex-col justify-between gap-6 sm:flex-row sm:items-end\">\n {heading}\n {action && <div className=\"shrink-0\">{action}</div>}\n </div>\n )}\n {children && <div className={cn(heading && 'mt-12 lg:mt-14')}>{children}</div>}\n </>\n )}\n </div>\n </section>\n </EditorialToneContext.Provider>\n )\n}\n\nexport interface EditorialProseProps {\n /** One entry per paragraph. */\n paragraphs: ReactNode[]\n /** Two columns from `md` up (paragraphs never split across columns). */\n columns?: 1 | 2\n size?: 'base' | 'lg'\n className?: string\n testId?: string\n}\n\n/** Long-form paragraphs set at a readable measure, in one or two columns. */\nexport function EditorialProse({\n paragraphs,\n columns = 1,\n size = 'base',\n className,\n testId,\n}: EditorialProseProps) {\n const t = useEditorialTone()\n return (\n <div\n className={cn(\n size === 'lg' ? 'text-lg' : 'text-base',\n 'leading-relaxed',\n t.muted,\n columns === 2 ? 'gap-10 md:columns-2' : 'max-w-prose',\n className\n )}\n data-slot=\"editorial-prose\"\n data-testid={testId}\n >\n {paragraphs.map((p, i) => (\n <p key={i} className={cn(columns === 2 ? 'mb-5 break-inside-avoid' : 'mt-5 first:mt-0')}>\n {p}\n </p>\n ))}\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport { Check } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport { useEditorialTone } from './tone'\n\nexport interface DefinitionItem {\n term: ReactNode\n description: ReactNode\n /** A leading icon; without one the `dot` marker is used when `marker=\"dot\"`. */\n icon?: ReactNode\n testId?: string\n}\n\nexport interface DefinitionListProps {\n items: DefinitionItem[]\n /**\n * `rows`: each entry is a lifted row with a marker. `ruled`: a spec sheet, term and description\n * side by side between hairlines.\n */\n layout?: 'rows' | 'ruled'\n /** Marker of an entry with no `icon` in the `rows` layout. */\n marker?: 'dot' | 'none'\n className?: string\n testId?: string\n}\n\n/** Term and description pairs (`<dl>`): feature rows, a spec sheet, a definition list. */\nexport function DefinitionList({\n items,\n layout = 'rows',\n marker = 'dot',\n className,\n testId,\n}: DefinitionListProps) {\n const t = useEditorialTone()\n return (\n <dl\n className={cn(layout === 'rows' ? 'space-y-3' : 'divide-y', t.hairline, className)}\n data-slot=\"definition-list\"\n data-layout={layout}\n data-testid={testId}\n >\n {items.map((item, i) =>\n layout === 'rows' ? (\n <div\n key={i}\n className={cn(\n 'flex gap-4 rounded-sm border p-5 transition-colors',\n t.panel,\n t.panelHover\n )}\n data-testid={item.testId ?? (testId ? `${testId}-item-${i}` : undefined)}\n >\n {item.icon ? (\n <span\n className={cn(\n 'flex size-9 shrink-0 items-center justify-center rounded-sm border',\n t.tile\n )}\n aria-hidden=\"true\"\n >\n {item.icon}\n </span>\n ) : (\n marker === 'dot' && (\n <span aria-hidden=\"true\" className=\"mt-2 size-2 shrink-0 rounded-full bg-primary\" />\n )\n )}\n <div className=\"min-w-0\">\n <dt className=\"font-medium\">{item.term}</dt>\n <dd className={cn('mt-0.5 text-sm', t.muted)}>{item.description}</dd>\n </div>\n </div>\n ) : (\n <div\n key={i}\n className=\"grid gap-1 py-4 sm:grid-cols-[minmax(0,1fr)_minmax(0,2fr)] sm:gap-8\"\n data-testid={item.testId ?? (testId ? `${testId}-item-${i}` : undefined)}\n >\n <dt className=\"font-medium\">{item.term}</dt>\n <dd className={cn('text-sm leading-relaxed', t.muted)}>{item.description}</dd>\n </div>\n )\n )}\n </dl>\n )\n}\n\nexport interface CheckListProps {\n items: ReactNode[]\n /** Two columns from `sm` up. */\n columns?: 1 | 2\n /** Replaces the check mark. */\n icon?: ReactNode\n className?: string\n testId?: string\n}\n\n/** A list of points, each with a ringed check mark. */\nexport function CheckList({ items, columns = 1, icon, className, testId }: CheckListProps) {\n const t = useEditorialTone()\n return (\n <ul\n className={cn(columns === 2 ? 'grid gap-4 sm:grid-cols-2' : 'space-y-3', className)}\n data-slot=\"check-list\"\n data-testid={testId}\n >\n {items.map((item, i) => (\n <li\n key={i}\n className={cn('flex items-start gap-3 text-sm leading-relaxed', t.muted)}\n data-testid={testId ? `${testId}-item-${i}` : undefined}\n >\n <span\n aria-hidden=\"true\"\n className={cn(\n 'mt-0.5 flex size-5 shrink-0 items-center justify-center rounded-full border',\n t.tile\n )}\n >\n {icon ?? <Check className=\"size-3\" />}\n </span>\n <span>{item}</span>\n </li>\n ))}\n </ul>\n )\n}\n\nexport interface TagListProps {\n items: string[]\n /** Accessible name of the list. */\n label?: string\n className?: string\n testId?: string\n}\n\n/** Small bordered chips: sectors, focus areas, topics. */\nexport function TagList({ items, label, className, testId }: TagListProps) {\n const t = useEditorialTone()\n if (items.length === 0) return null\n return (\n <ul\n aria-label={label}\n className={cn('flex flex-wrap gap-1.5', className)}\n data-slot=\"tag-list\"\n data-testid={testId}\n >\n {items.map((tag) => (\n <li key={tag} className={cn('rounded-sm border px-2 py-0.5 text-[11px]', t.chip)}>\n {tag}\n </li>\n ))}\n </ul>\n )\n}\n","import { useEffect, useRef, useState, type CSSProperties, type ReactNode } from 'react'\nimport { cn } from '@arbidocs/react/ui'\n\nexport interface RevealProps {\n children: ReactNode\n /** Delay in ms before the reveal starts (stagger siblings with `index * 90`). */\n delay?: number\n className?: string\n testId?: string\n}\n\n/**\n * Fade-and-rise on first scroll into view. Content is fully visible until the part has mounted\n * and found an `IntersectionObserver`, so server rendering, no-JS and jsdom show everything; the\n * hidden state and transition live in `blocks.css` (`[data-reveal]`) and collapse under\n * `prefers-reduced-motion`.\n */\nexport function Reveal({ children, delay = 0, className, testId }: RevealProps) {\n const ref = useRef<HTMLDivElement>(null)\n const [state, setState] = useState<'idle' | 'pending' | 'shown'>('idle')\n\n useEffect(() => {\n const el = ref.current\n if (!el || typeof IntersectionObserver === 'undefined') return\n setState('pending')\n const io = new IntersectionObserver(\n (entries) => {\n if (entries.some((e) => e.isIntersecting)) {\n setState('shown')\n io.disconnect()\n }\n },\n { rootMargin: '0px 0px -90px 0px' }\n )\n io.observe(el)\n return () => io.disconnect()\n }, [])\n\n return (\n <div\n ref={ref}\n data-slot=\"reveal\"\n data-reveal={state === 'idle' ? undefined : state}\n style={delay ? ({ '--reveal-delay': `${delay}ms` } as CSSProperties) : undefined}\n className={cn(className)}\n data-testid={testId}\n >\n {children}\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport { ArrowUpRight } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport { BlockLink, type BlockLinkComponent } from '../blockLink'\nimport { CheckList, TagList } from './lists'\nimport { Reveal } from './Reveal'\nimport { EditorialToneContext, formatIndex, useEditorialTone, type EditorialTone } from './tone'\n\nexport interface PanelItem {\n title: ReactNode\n body?: ReactNode\n /** Icon in a bordered tile. */\n icon?: ReactNode\n /** Explicit number or label; with `numbered` on the grid it defaults to the position. */\n index?: number | string\n /** A small label above the title (category). */\n kicker?: ReactNode\n /** Bulleted points under the body. */\n points?: ReactNode[]\n /** Chips at the foot. */\n tags?: string[]\n /** Anything at the foot (a meta line, a link). */\n footer?: ReactNode\n /** Makes the whole panel a link. */\n href?: string\n testId?: string\n}\n\nexport interface PanelGridProps {\n items: PanelItem[]\n columns?: 2 | 3 | 4\n /** `cards`: separate bordered panels. `joined`: one hairline-ruled table of cells. */\n variant?: 'cards' | 'joined'\n /** Number the panels 01, 02, ... */\n numbered?: boolean\n /** Fade each panel in on scroll, staggered. */\n reveal?: boolean\n /** Router link for panels with an `href`. */\n linkComponent?: BlockLinkComponent\n /** Heading level of the panel titles (default 3). */\n headingLevel?: 2 | 3 | 4\n tone?: EditorialTone\n className?: string\n testId?: string\n}\n\nconst COLS: Record<2 | 3 | 4, string> = {\n 2: 'sm:grid-cols-2',\n 3: 'sm:grid-cols-2 lg:grid-cols-3',\n 4: 'sm:grid-cols-2 lg:grid-cols-4',\n}\n\n/**\n * Icon, title and body panels: principles, process steps, capability cards, security pillars,\n * practice areas. Cards or a joined hairline table, optional numbers, bullet points, chips and\n * a link per panel.\n */\nexport function PanelGrid({\n items,\n columns = 3,\n variant = 'cards',\n numbered = false,\n reveal = false,\n linkComponent,\n headingLevel = 3,\n tone,\n className,\n testId,\n}: PanelGridProps) {\n const t = useEditorialTone(tone)\n const Heading = `h${headingLevel}` as 'h2' | 'h3' | 'h4'\n const joined = variant === 'joined'\n return (\n <EditorialToneContext.Provider value={t.tone}>\n <ul\n className={cn(\n 'grid',\n joined ? cn('gap-px overflow-hidden rounded-sm border', t.hairline) : 'gap-4',\n joined && (t.tone === 'inverse' ? 'bg-background/15' : 'bg-border'),\n COLS[columns] ?? COLS[3],\n className\n )}\n data-slot=\"panel-grid\"\n data-variant={variant}\n data-testid={testId}\n >\n {items.map((item, i) => {\n const number = item.index ?? (numbered ? i + 1 : undefined)\n const inner = (\n <div\n className={cn(\n 'group flex h-full flex-col p-6 transition-colors duration-300',\n joined\n ? cn(\n t.tone === 'inverse' ? 'bg-foreground' : 'bg-background',\n item.href && 'hover:bg-muted/40'\n )\n : cn('rounded-sm border', t.panel, item.href && t.panelHover)\n )}\n data-testid={item.testId ?? (testId ? `${testId}-item-${i}` : undefined)}\n >\n {(item.icon || number !== undefined || item.href) && (\n <div className=\"flex items-start justify-between gap-4\">\n {item.icon ? (\n <span\n aria-hidden=\"true\"\n className={cn(\n 'flex size-11 items-center justify-center rounded-sm border',\n t.tile\n )}\n >\n {item.icon}\n </span>\n ) : (\n <span />\n )}\n {number !== undefined ? (\n <span className={cn('font-display text-sm tabular-nums', t.subtle)}>\n {formatIndex(number)}\n </span>\n ) : (\n item.href && (\n <ArrowUpRight\n aria-hidden=\"true\"\n className={cn(\n 'size-4 transition-colors group-hover:text-primary',\n t.subtle\n )}\n />\n )\n )}\n </div>\n )}\n {item.kicker && (\n <p\n className={cn(\n 'text-xs font-semibold uppercase tracking-wider',\n item.icon || number !== undefined ? 'mt-5' : '',\n t.accent\n )}\n >\n {item.kicker}\n </p>\n )}\n <Heading\n className={cn(\n 'font-display text-lg font-semibold leading-snug',\n item.icon || number !== undefined || item.kicker ? 'mt-4' : '',\n t.text\n )}\n >\n {item.title}\n </Heading>\n {item.body && (\n <div className={cn('mt-2 text-sm leading-relaxed', t.muted)}>{item.body}</div>\n )}\n {item.points && item.points.length > 0 && (\n <CheckList\n items={item.points}\n className={cn('mt-4 space-y-2 border-t pt-4', t.hairline)}\n />\n )}\n {item.tags && item.tags.length > 0 && (\n <TagList items={item.tags} className=\"mt-auto pt-5\" />\n )}\n {item.footer && (\n <div className={cn('mt-auto pt-5 text-xs', t.subtle)}>{item.footer}</div>\n )}\n </div>\n )\n const cell = (\n <BlockLink href={item.href} linkComponent={linkComponent} className=\"block h-full\">\n {inner}\n </BlockLink>\n )\n return (\n <li key={i} className=\"min-w-0\">\n {reveal ? (\n <Reveal delay={i * 90} className=\"h-full\">\n {cell}\n </Reveal>\n ) : (\n cell\n )}\n </li>\n )\n })}\n </ul>\n </EditorialToneContext.Provider>\n )\n}\n","import type { ReactNode } from 'react'\nimport { cn } from '@arbidocs/react/ui'\nimport { useEditorialTone } from './tone'\n\nexport interface PullQuoteProps {\n quote: ReactNode\n /** Who said it. */\n attribution?: { name: ReactNode; role?: ReactNode }\n /** Link to the source. */\n cite?: string\n align?: 'start' | 'center'\n size?: 'md' | 'lg'\n className?: string\n testId?: string\n}\n\n/** A large display quotation with an accent rule and attribution. */\nexport function PullQuote({\n quote,\n attribution,\n cite,\n align = 'start',\n size = 'md',\n className,\n testId,\n}: PullQuoteProps) {\n const t = useEditorialTone()\n const centered = align === 'center'\n return (\n <figure\n className={cn(\n 'max-w-3xl',\n centered ? 'mx-auto text-center' : 'border-l-2 border-primary pl-6 lg:pl-8',\n className\n )}\n data-slot=\"pull-quote\"\n data-testid={testId}\n >\n <blockquote\n cite={cite}\n className={cn(\n 'font-display font-medium leading-snug text-balance',\n size === 'lg' ? 'text-3xl sm:text-4xl' : 'text-2xl sm:text-3xl',\n t.text\n )}\n >\n <p>{quote}</p>\n </blockquote>\n {attribution && (\n <figcaption className={cn('mt-5 text-sm', t.muted)}>\n <span className={cn('font-semibold', t.text)}>{attribution.name}</span>\n {attribution.role && <span>, {attribution.role}</span>}\n </figcaption>\n )}\n </figure>\n )\n}\n","import type { ReactNode } from 'react'\nimport { ArrowUpRight } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport { BlockImage } from '../BlockImage'\nimport { BlockLink, type BlockLinkComponent } from '../blockLink'\nimport { useEditorialTone } from './tone'\n\nexport interface ArticleItem {\n title: ReactNode\n summary?: ReactNode\n /** Category or type, shown as an accent label. */\n kicker?: ReactNode\n /** Short facts joined with a middle dot: author, date, reading time. */\n meta?: ReactNode[]\n href?: string\n imageUrl?: string\n imageAlt?: string\n testId?: string\n}\n\nexport interface ArticleListProps {\n items: ArticleItem[]\n /**\n * `cards`: a grid of cards. `rows`: ruled rows (kicker and meta beside the title), best for an\n * archive.\n */\n layout?: 'cards' | 'rows'\n /** `cards` only: the first item is a large card beside a column of the rest from `lg`. */\n featureFirst?: boolean\n columns?: 2 | 3\n linkComponent?: BlockLinkComponent\n /** Rendered instead of the list when `items` is empty. */\n empty?: ReactNode\n className?: string\n testId?: string\n}\n\nconst COLS: Record<2 | 3, string> = {\n 2: 'md:grid-cols-2',\n 3: 'md:grid-cols-2 lg:grid-cols-3',\n}\n\n/** Insight, news or post listing: `meta` joined with a middle dot, linked cards or rows. */\nfunction MetaLine({ meta, className }: { meta?: ReactNode[]; className?: string }) {\n if (!meta || meta.length === 0) return null\n return (\n <p className={className}>\n {meta.map((m, i) => (\n <span key={i}>\n {i > 0 && <span aria-hidden=\"true\"> · </span>}\n {m}\n </span>\n ))}\n </p>\n )\n}\n\n/** Article, insight or news items as cards (optionally with a lead card) or ruled archive rows. */\nexport function ArticleList({\n items,\n layout = 'cards',\n featureFirst = false,\n columns = 3,\n linkComponent,\n empty,\n className,\n testId,\n}: ArticleListProps) {\n const t = useEditorialTone()\n if (items.length === 0) return empty ? <>{empty}</> : null\n\n const idOf = (item: ArticleItem, i: number) =>\n item.testId ?? (testId ? `${testId}-item-${i}` : undefined)\n\n if (layout === 'rows') {\n return (\n <ul\n className={cn('divide-y border-y', t.hairline, className)}\n data-slot=\"article-list\"\n data-layout=\"rows\"\n data-testid={testId}\n >\n {items.map((item, i) => (\n <li key={i}>\n <BlockLink href={item.href} linkComponent={linkComponent} className=\"group block\">\n <article\n className=\"grid gap-2 py-6 transition-colors sm:grid-cols-[10rem_minmax(0,1fr)_auto] sm:gap-8\"\n data-testid={idOf(item, i)}\n >\n <div className=\"space-y-1\">\n {item.kicker && (\n <p className={cn('text-xs font-semibold uppercase tracking-wider', t.accent)}>\n {item.kicker}\n </p>\n )}\n <MetaLine meta={item.meta} className={cn('text-xs', t.subtle)} />\n </div>\n <div className=\"min-w-0\">\n <h3\n className={cn(\n 'font-display text-xl font-semibold leading-snug transition-colors group-hover:text-primary',\n t.text\n )}\n >\n {item.title}\n </h3>\n {item.summary && (\n <p className={cn('mt-2 text-sm leading-relaxed', t.muted)}>{item.summary}</p>\n )}\n </div>\n {item.href && (\n <ArrowUpRight\n aria-hidden=\"true\"\n className={cn(\n 'hidden size-4 transition-colors group-hover:text-primary sm:block',\n t.subtle\n )}\n />\n )}\n </article>\n </BlockLink>\n </li>\n ))}\n </ul>\n )\n }\n\n const card = (item: ArticleItem, i: number, lead: boolean) => (\n <BlockLink href={item.href} linkComponent={linkComponent} className=\"group block h-full\">\n <article\n className={cn(\n 'flex h-full flex-col rounded-sm border transition-colors duration-300',\n t.panel,\n item.href && t.panelHover,\n lead ? 'p-6 lg:p-8' : 'p-6'\n )}\n data-testid={idOf(item, i)}\n >\n {item.imageUrl && (\n <BlockImage\n src={item.imageUrl}\n alt={item.imageAlt ?? ''}\n aspect=\"16:9\"\n rounded=\"none\"\n className=\"mb-5 w-full\"\n />\n )}\n <div className=\"flex items-start justify-between gap-3\">\n {item.kicker ? (\n <p className={cn('text-xs font-semibold uppercase tracking-wider', t.accent)}>\n {item.kicker}\n </p>\n ) : (\n <span />\n )}\n {item.href && (\n <ArrowUpRight\n aria-hidden=\"true\"\n className={cn('size-4 transition-colors group-hover:text-primary', t.subtle)}\n />\n )}\n </div>\n <h3\n className={cn(\n 'mt-3 font-display font-semibold leading-snug',\n lead ? 'text-2xl sm:text-3xl' : 'text-lg',\n t.text\n )}\n >\n {item.title}\n </h3>\n {item.summary && (\n <p\n className={cn(\n 'mt-3 flex-1 text-sm leading-relaxed',\n lead && 'max-w-xl text-base',\n t.muted\n )}\n >\n {item.summary}\n </p>\n )}\n <MetaLine meta={item.meta} className={cn('mt-5 text-xs', t.subtle)} />\n </article>\n </BlockLink>\n )\n\n if (featureFirst && items.length > 1) {\n const [lead, ...rest] = items\n return (\n <div\n className={cn('grid gap-5 lg:grid-cols-[1.4fr_1fr]', className)}\n data-slot=\"article-list\"\n data-layout=\"feature\"\n data-testid={testId}\n >\n <div>{card(lead, 0, true)}</div>\n <ul className=\"grid gap-5\">\n {rest.map((item, i) => (\n <li key={i}>{card(item, i + 1, false)}</li>\n ))}\n </ul>\n </div>\n )\n }\n\n return (\n <ul\n className={cn('grid gap-5', COLS[columns] ?? COLS[3], className)}\n data-slot=\"article-list\"\n data-layout=\"cards\"\n data-testid={testId}\n >\n {items.map((item, i) => (\n <li key={i}>{card(item, i, false)}</li>\n ))}\n </ul>\n )\n}\n","import type { ReactNode } from 'react'\nimport { cn } from '@arbidocs/react/ui'\nimport { SURFACE_CLASS, SURFACE_TONE, type EditorialSurface } from './EditorialHero'\nimport { EditorialToneContext, useEditorialTone } from './tone'\n\nexport interface ProofStripProps {\n /** The lead statement (an icon and a sentence). */\n lead?: ReactNode\n /** Short labels: standards, memberships, clients. */\n items: ReactNode[]\n /** Accessible name of the label list. */\n label?: string\n surface?: EditorialSurface\n className?: string\n testId?: string\n}\n\n/** A thin band of proof points: a lead statement and a row of short uppercase labels. */\nexport function ProofStrip({\n lead,\n items,\n label,\n surface = 'muted',\n className,\n testId,\n}: ProofStripProps) {\n const tone = SURFACE_TONE[surface]\n const t = useEditorialTone(tone)\n return (\n <EditorialToneContext.Provider value={tone}>\n <section\n aria-label={label}\n className={cn('border-y', t.hairline, SURFACE_CLASS[surface], className)}\n data-slot=\"proof-strip\"\n data-testid={testId}\n >\n <div className=\"mx-auto flex max-w-7xl flex-col items-center gap-5 px-5 py-6 lg:flex-row lg:justify-between lg:px-8\">\n {lead && <div className=\"flex items-center gap-2.5 text-sm font-medium\">{lead}</div>}\n <ul className=\"flex flex-wrap items-center justify-center gap-x-6 gap-y-2\">\n {items.map((item, i) => (\n <li\n key={i}\n className={cn('text-xs font-semibold uppercase tracking-wider', t.subtle)}\n >\n {item}\n </li>\n ))}\n </ul>\n </div>\n </section>\n </EditorialToneContext.Provider>\n )\n}\n\nexport interface CtaBandProps {\n title: ReactNode\n lead?: ReactNode\n /** Buttons or links. */\n actions?: ReactNode\n /** Decoration behind the copy (image, texture), hidden from assistive tech. */\n backdrop?: ReactNode\n /** Default `inverse`: a dark closing band. */\n surface?: EditorialSurface\n className?: string\n testId?: string\n}\n\n/** Closing call-to-action band: centred heading, lead and actions over an optional backdrop. */\nexport function CtaBand({\n title,\n lead,\n actions,\n backdrop,\n surface = 'inverse',\n className,\n testId,\n}: CtaBandProps) {\n const tone = SURFACE_TONE[surface]\n const t = useEditorialTone(tone)\n return (\n <EditorialToneContext.Provider value={tone}>\n <section\n className={cn('relative isolate overflow-hidden', SURFACE_CLASS[surface], className)}\n data-slot=\"cta-band\"\n data-testid={testId}\n >\n {backdrop && (\n <div aria-hidden=\"true\" className=\"pointer-events-none absolute inset-0 -z-10\">\n {backdrop}\n </div>\n )}\n <div className=\"mx-auto max-w-4xl px-5 py-20 text-center lg:px-8 lg:py-24\">\n <h2\n className={cn(\n 'font-display text-3xl font-semibold tracking-tight text-balance sm:text-4xl',\n t.text\n )}\n >\n {title}\n </h2>\n {lead && <p className={cn('mx-auto mt-4 max-w-2xl text-lg', t.muted)}>{lead}</p>}\n {actions && (\n <div className=\"mt-8 flex flex-col items-center justify-center gap-3 sm:flex-row\">\n {actions}\n </div>\n )}\n </div>\n </section>\n </EditorialToneContext.Provider>\n )\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/theme/appearance.ts","../src/theme/fromCss.ts","../src/components/CollectionDetail.tsx","../src/components/editorial/Eyebrow.tsx","../src/components/editorial/EditorialHeading.tsx","../src/components/editorial/EditorialHero.tsx","../src/components/editorial/EditorialSection.tsx","../src/components/editorial/lists.tsx","../src/components/editorial/Reveal.tsx","../src/components/editorial/PanelGrid.tsx","../src/components/editorial/PullQuote.tsx","../src/components/editorial/ArticleList.tsx","../src/components/editorial/Bands.tsx"],"names":["getFontPairing","applyFontVars","create","persist","jsx","Fragment","useEditorialTone","jsxs","cn","formatIndex","EditorialToneContext","Check","useRef","useState","useEffect","ArrowUpRight","BlockLink","COLS","BlockImage"],"mappings":"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","file":"chunk-TFTGDUE4.cjs","sourcesContent":["/**\n * The reader's appearance on this device: typeface, colour scheme and text size.\n *\n * Separate from {@link createThemeStore}. A theme bundle is the site's brand (a whole token set an\n * author edits); this store only ever sets the two typography vars and the root font-size (inline\n * on `<html>`, so they win over any `:root` block a `cssVars` theme emits) and toggles the `.dark`\n * class (class-based dark mode). The faces come from `FONT_PAIRINGS`, so every site offers the\n * same typography vocabulary.\n *\n * The text size sets the root font-size as a percentage of the browser's own default, so the\n * reader's browser preference still compounds with it, and every rem-based size scales with it.\n */\nimport { create, type StoreApi, type UseBoundStore } from 'zustand'\nimport { persist } from 'zustand/middleware'\nimport { applyFontVars } from './tokens'\nimport { getFontPairing, type FontPairing } from './fontPairings'\n\nexport type AppearanceColorScheme = 'light' | 'dark'\nexport type AppearanceTextSize = 'default' | 'large' | 'larger'\n\n/** Text size steps, as a root font-size relative to the browser default. */\nconst TEXT_SIZE_SCALE: Record<AppearanceTextSize, string> = {\n default: '100%',\n large: '112.5%',\n larger: '125%',\n}\n\nexport interface AppearanceDefaults {\n /** A `FONT_PAIRINGS` id; must match the faces the site's stylesheet paints first. */\n pairingId: string\n colorScheme: AppearanceColorScheme\n textSize: AppearanceTextSize\n}\n\nexport interface AppearanceState extends AppearanceDefaults {\n setPairing: (pairingId: string) => void\n setColorScheme: (scheme: AppearanceColorScheme) => void\n setTextSize: (size: AppearanceTextSize) => void\n reset: () => void\n}\n\nexport interface AppearanceStoreConfig {\n /** localStorage key for persistence (namespaced per site). */\n storageKey: string\n /** The site's shipped appearance. Default: light, default size; the pairing is required. */\n defaults: Pick<AppearanceDefaults, 'pairingId'> & Partial<AppearanceDefaults>\n /** Typefaces offered in Settings (`FONT_PAIRINGS` ids); default: the settings' own spread. */\n pairingIds?: readonly string[]\n}\n\nexport interface AppearanceBundle {\n useStore: UseBoundStore<StoreApi<AppearanceState>>\n defaults: AppearanceDefaults\n pairingIds?: readonly string[]\n /** Resolve an id to a pairing, falling back to the default pairing for unknown ids. */\n resolvePairing: (pairingId: string) => FontPairing\n /** Paint the stored appearance before the first render (safe at module scope). */\n applyStored: () => void\n}\n\n/** Toggle the `.dark` class on the document root: the one dark-mode switch. */\nfunction applyColorScheme(scheme: AppearanceColorScheme): void {\n if (typeof document === 'undefined') return\n document.documentElement.classList.toggle('dark', scheme === 'dark')\n}\n\n/** The default step clears the inline value, so the stylesheet paints exactly as without it. */\nfunction applyTextSize(size: AppearanceTextSize): void {\n if (typeof document === 'undefined') return\n const scale = TEXT_SIZE_SCALE[size] ?? TEXT_SIZE_SCALE.default\n document.documentElement.style.fontSize = scale === '100%' ? '' : scale\n}\n\n/** Build a site's appearance store. */\nexport function createAppearanceStore({\n storageKey,\n defaults: given,\n pairingIds,\n}: AppearanceStoreConfig): AppearanceBundle {\n const defaults: AppearanceDefaults = { colorScheme: 'light', textSize: 'default', ...given }\n if (!getFontPairing(defaults.pairingId)) {\n throw new Error(`createAppearanceStore: no font pairing \"${defaults.pairingId}\"`)\n }\n const resolvePairing = (pairingId: string) =>\n getFontPairing(pairingId) ?? getFontPairing(defaults.pairingId)!\n const applyAll = ({ pairingId, colorScheme, textSize }: AppearanceDefaults) => {\n if (typeof document === 'undefined') return\n applyFontVars(resolvePairing(pairingId))\n applyColorScheme(colorScheme)\n applyTextSize(textSize)\n }\n\n const useStore = create<AppearanceState>()(\n persist(\n (set) => ({\n ...defaults,\n setPairing: (pairingId) => {\n const pairing = getFontPairing(pairingId)\n if (!pairing) return\n applyFontVars(pairing)\n set({ pairingId })\n },\n setColorScheme: (colorScheme) => {\n applyColorScheme(colorScheme)\n set({ colorScheme })\n },\n setTextSize: (textSize) => {\n if (!(textSize in TEXT_SIZE_SCALE)) return\n applyTextSize(textSize)\n set({ textSize })\n },\n reset: () => {\n applyAll(defaults)\n set({ ...defaults })\n },\n }),\n {\n name: storageKey,\n // Paint the persisted choice as soon as the store rehydrates, so a reader never sees a\n // frame of the default appearance before theirs lands.\n onRehydrateStorage: () => (state) => {\n if (state) applyAll(state)\n },\n }\n )\n )\n\n return {\n useStore,\n defaults,\n pairingIds,\n resolvePairing,\n applyStored: () => applyAll(useStore.getState()),\n }\n}\n","/**\n * Read a host's theme defaults out of its own stylesheet, so the editable catalog's values are\n * never a second, hand-kept copy of the CSS that paints the first frame.\n *\n * A host imports its token stylesheet as text (Vite: `import css from './tokens.css?raw'`) and\n * passes it with its catalog. The values come from the blocks of the host's emit mode:\n *\n * - `'flat'`: the `@theme` block's `--color-<key>` (hex, as Tailwind v4 themes are written);\n * - `'cssVars'`: the `:root` block's `--<key>` triplets, and the `.dark` block's for the dark set.\n *\n * `--font-display`, `--font-sans` and `--radius` are read from the same light block unless the\n * host supplies them. A catalog key the stylesheet does not declare throws: a catalog that names a\n * token the CSS no longer has is the drift this module exists to stop.\n */\nimport type { ColorToken, ThemeEmitMode, ThemeFonts, ThemeTokens } from './tokens'\n\ninterface CssBlock {\n /** The block's prelude: a selector list or an at-rule (`@theme`, `@layer base`). */\n prelude: string\n /** The custom properties it declares, by name (`--primary`). */\n vars: Record<string, string>\n}\n\n/** Every block of a stylesheet with the custom properties it declares; nesting is flattened. */\nfunction cssBlocks(css: string): CssBlock[] {\n const text = css.replace(/\\/\\*[\\s\\S]*?\\*\\//g, '')\n const blocks: CssBlock[] = []\n const open: CssBlock[] = []\n let buffer = ''\n const declare = () => {\n const match = /^\\s*(--[\\w-]+)\\s*:\\s*([\\s\\S]*?)\\s*$/.exec(buffer)\n const block = open[open.length - 1]\n if (match && block) block.vars[match[1]] = match[2]\n buffer = ''\n }\n for (const ch of text) {\n if (ch === '{') {\n const block: CssBlock = { prelude: buffer.trim(), vars: {} }\n open.push(block)\n blocks.push(block)\n buffer = ''\n } else if (ch === '}') {\n declare()\n open.pop()\n } else if (ch === ';') {\n declare()\n } else {\n buffer += ch\n }\n }\n return blocks\n}\n\nconst selects = (prelude: string, selector: string) =>\n prelude.split(',').some((part) => part.trim() === selector)\n\n/** All the variables declared by the blocks `match` accepts, later blocks winning. */\nfunction varsOf(blocks: CssBlock[], match: (prelude: string) => boolean): Record<string, string> {\n return Object.assign({}, ...blocks.filter((b) => match(b.prelude)).map((b) => b.vars))\n}\n\n/** A `--radius` value (`0.1875rem`, `4px`) in rem. */\nfunction remOf(value: string): number {\n const match = /^(-?\\d*\\.?\\d+)(rem|px)$/.exec(value.trim())\n if (!match) throw new Error(`themeFromCss: --radius \"${value}\" is not in rem or px`)\n return match[2] === 'px' ? Number(match[1]) / 16 : Number(match[1])\n}\n\nexport interface ThemeFromCssOptions {\n /** The editable catalog: every key must be declared by the stylesheet. */\n tokens: readonly ColorToken[]\n /** The host's emit mode (see {@link ThemeEmitMode}). Default `'flat'`. */\n mode?: ThemeEmitMode\n /** The faces, when the stylesheet given does not declare them (the host's default pairing). */\n fonts?: ThemeFonts\n /** The base radius in rem, when the stylesheet given does not declare it. */\n radius?: number\n}\n\nexport interface ThemeFromCss {\n /** The shipped defaults, exactly as the stylesheet paints them. */\n theme: ThemeTokens\n /** `cssVars` mode: the `.dark` values of the catalog's keys (for `darkColors`). */\n darkColors?: Record<string, string>\n}\n\n/** The catalog's default values, read from the host's stylesheet text (see the module doc). */\nexport function themeFromCss(\n css: string | readonly string[],\n { tokens, mode = 'flat', fonts, radius }: ThemeFromCssOptions\n): ThemeFromCss {\n const blocks = cssBlocks(typeof css === 'string' ? css : css.join('\\n'))\n const flat = mode === 'flat'\n const light = varsOf(blocks, (p) => (flat ? /^@theme\\b/.test(p) : selects(p, ':root')))\n const dark = flat ? undefined : varsOf(blocks, (p) => selects(p, '.dark'))\n const prefix = flat ? '--color-' : '--'\n\n const read = (vars: Record<string, string>, name: string, where: string) => {\n const value = vars[name]\n if (value === undefined) throw new Error(`themeFromCss: ${where} declares no ${name}`)\n return value\n }\n const lightWhere = flat ? '@theme' : ':root'\n const colorsOf = (vars: Record<string, string>, where: string) =>\n Object.fromEntries(tokens.map(({ key }) => [key, read(vars, prefix + key, where)]))\n\n return {\n theme: {\n colors: colorsOf(light, lightWhere),\n fonts: fonts ?? {\n display: read(light, '--font-display', lightWhere),\n sans: read(light, '--font-sans', lightWhere),\n },\n radius: radius ?? remOf(read(light, '--radius', lightWhere)),\n },\n ...(dark && { darkColors: colorsOf(dark, '.dark') }),\n }\n}\n","import type { ReactNode } from 'react'\n\nexport interface CollectionDetailContext<T> {\n previous?: T\n next?: T\n}\n\nexport interface CollectionDetailProps<T> {\n /** The collection, supplied by the host (CMS, files, API...). */\n items: T[]\n /** The slug from the host's route. Absent: the list is rendered. */\n slug?: string\n getSlug: (item: T) => string\n renderList: (items: T[]) => ReactNode\n /** One item's page. `previous` / `next` are the neighbours in `items` order. */\n renderDetail: (item: T, context: CollectionDetailContext<T>) => ReactNode\n /** Shown when `slug` matches nothing. */\n renderNotFound?: (slug: string) => ReactNode\n}\n\n/**\n * The list-and-detail page contract for a collection (people, articles, services...). It owns\n * only the slug lookup; the host owns the route, the data and every pixel of both views, so one\n * route (`/things/:slug?`) serves the list and each detail page.\n */\nexport function CollectionDetail<T>({\n items,\n slug,\n getSlug,\n renderList,\n renderDetail,\n renderNotFound,\n}: CollectionDetailProps<T>) {\n if (!slug) return <>{renderList(items)}</>\n const index = items.findIndex((item) => getSlug(item) === slug)\n if (index === -1) {\n return (\n <>\n {renderNotFound ? (\n renderNotFound(slug)\n ) : (\n <p role=\"status\" data-slot=\"collection-not-found\">\n Not found\n </p>\n )}\n </>\n )\n }\n return <>{renderDetail(items[index], { previous: items[index - 1], next: items[index + 1] })}</>\n}\n","import type { ReactNode } from 'react'\nimport { cn } from '@arbidocs/react/ui'\nimport { formatIndex, useEditorialTone, type EditorialTone } from './tone'\n\nexport interface EyebrowProps {\n children: ReactNode\n /** A number or label before the text: `1` renders `01`. */\n index?: number | string\n /** A short accent rule before the text. */\n rule?: boolean\n tone?: EditorialTone\n className?: string\n testId?: string\n}\n\n/** Small uppercase label above a heading: optional index and accent rule. */\nexport function Eyebrow({ children, index, rule = false, tone, className, testId }: EyebrowProps) {\n const t = useEditorialTone(tone)\n return (\n <p\n className={cn(\n 'flex items-center gap-3 text-xs font-semibold uppercase tracking-wider',\n t.subtle,\n className\n )}\n data-slot=\"eyebrow\"\n data-testid={testId}\n >\n {rule && <span aria-hidden=\"true\" className=\"h-px w-8 shrink-0 bg-primary\" />}\n {index !== undefined && (\n <span className={cn('tabular-nums', t.accent)}>{formatIndex(index)}</span>\n )}\n <span>{children}</span>\n </p>\n )\n}\n","import type { ReactNode } from 'react'\nimport { cn } from '@arbidocs/react/ui'\nimport { Eyebrow } from './Eyebrow'\nimport { useEditorialTone, type EditorialTone } from './tone'\n\nexport interface EditorialHeadingProps {\n eyebrow?: ReactNode\n /** Section number or label shown with the eyebrow. */\n index?: number | string\n title: ReactNode\n lead?: ReactNode\n /** Heading element level (default 2). */\n level?: 1 | 2 | 3\n align?: 'start' | 'center'\n tone?: EditorialTone\n className?: string\n testId?: string\n}\n\n/** Section heading: numbered or labelled eyebrow, display title and lead. */\nexport function EditorialHeading({\n eyebrow,\n index,\n title,\n lead,\n level = 2,\n align = 'start',\n tone,\n className,\n testId,\n}: EditorialHeadingProps) {\n const t = useEditorialTone(tone)\n const Heading = `h${level}` as 'h1' | 'h2' | 'h3'\n return (\n <div\n className={cn('max-w-3xl', align === 'center' && 'mx-auto text-center', className)}\n data-slot=\"editorial-heading\"\n data-testid={testId}\n >\n {(eyebrow || index !== undefined) && (\n <Eyebrow\n index={index}\n tone={tone}\n className={cn('mb-4', align === 'center' && 'justify-center')}\n >\n {eyebrow}\n </Eyebrow>\n )}\n <Heading\n className={cn(\n 'font-display text-3xl font-semibold tracking-tight text-balance sm:text-4xl',\n t.text\n )}\n >\n {title}\n </Heading>\n {lead && <p className={cn('mt-4 text-lg leading-relaxed', t.muted)}>{lead}</p>}\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport { cn } from '@arbidocs/react/ui'\nimport { Eyebrow } from './Eyebrow'\nimport { EditorialToneContext, useEditorialTone, type EditorialTone } from './tone'\n\nexport type EditorialSurface = 'plain' | 'muted' | 'inverse'\n\nexport interface EditorialHeroTestIds {\n root: string\n eyebrow: string\n title: string\n lede: string\n actions: string\n aside: string\n}\n\nexport interface EditorialHeroProps {\n eyebrow?: ReactNode\n /** Show the accent rule before the eyebrow. */\n eyebrowRule?: boolean\n /** The headline: text or any node. */\n title: ReactNode\n /** A phrase inside a string `title` set in the italic accent. */\n emphasis?: string\n /** The paragraph under the headline. */\n lede?: ReactNode\n /** Buttons or links under the lede. */\n actions?: ReactNode\n /** Anything under the actions (badges, a trust line). */\n footer?: ReactNode\n /** The figure beside (below on phones) the copy: an image frame, a card, a media slot. */\n aside?: ReactNode\n /** Decoration behind the copy (texture, wash, background image). Hidden from assistive tech. */\n backdrop?: ReactNode\n /** `start` copy, or `center` (no aside). */\n align?: 'start' | 'center'\n /** `page`: a page-opening header band. `cover`: the larger home-page hero. */\n size?: 'page' | 'cover'\n surface?: EditorialSurface\n className?: string\n testId?: string\n testIds?: Partial<EditorialHeroTestIds>\n}\n\nexport const SURFACE_CLASS: Record<EditorialSurface, string> = {\n plain: 'bg-background text-foreground',\n muted: 'bg-muted text-foreground',\n inverse: 'bg-foreground text-background',\n}\n\nexport const SURFACE_TONE: Record<EditorialSurface, EditorialTone> = {\n plain: 'default',\n muted: 'default',\n inverse: 'inverse',\n}\n\nfunction renderTitle(title: ReactNode, emphasis?: string): ReactNode {\n if (typeof title !== 'string' || !emphasis || !title.includes(emphasis)) return title\n const parts = title.split(emphasis)\n return parts.map((part, i) => (\n <span key={i}>\n {part}\n {i < parts.length - 1 && <em className=\"italic text-primary\">{emphasis}</em>}\n </span>\n ))\n}\n\n/**\n * Editorial opening band: eyebrow, display headline with an italic accent phrase, lede, actions\n * and an optional aside (image, card). Covers a page header (no aside, `size=\"page\"`), a split\n * hero (aside) and a centred landing hero (`align=\"center\"`, `size=\"cover\"`).\n */\nexport function EditorialHero({\n eyebrow,\n eyebrowRule = false,\n title,\n emphasis,\n lede,\n actions,\n footer,\n aside,\n backdrop,\n align = 'start',\n size = 'page',\n surface = 'plain',\n className,\n testId,\n testIds,\n}: EditorialHeroProps) {\n const tone = SURFACE_TONE[surface]\n const t = useEditorialTone(tone)\n const centered = align === 'center' && !aside\n const ids = {\n root: testIds?.root ?? testId,\n eyebrow: testIds?.eyebrow ?? (testId ? `${testId}-eyebrow` : undefined),\n title: testIds?.title ?? (testId ? `${testId}-title` : undefined),\n lede: testIds?.lede ?? (testId ? `${testId}-lede` : undefined),\n actions: testIds?.actions ?? (testId ? `${testId}-actions` : undefined),\n aside: testIds?.aside ?? (testId ? `${testId}-aside` : undefined),\n }\n return (\n <EditorialToneContext.Provider value={tone}>\n <section\n className={cn('relative isolate overflow-hidden', SURFACE_CLASS[surface], className)}\n data-slot=\"editorial-hero\"\n data-size={size}\n data-testid={ids.root}\n >\n {backdrop && (\n <div aria-hidden=\"true\" className=\"pointer-events-none absolute inset-0 -z-10\">\n {backdrop}\n </div>\n )}\n <div\n className={cn(\n 'mx-auto max-w-7xl px-5 lg:px-8',\n size === 'cover' ? 'py-16 lg:py-28' : 'py-14 lg:py-24',\n aside && 'grid items-center gap-12 lg:grid-cols-[1.02fr_0.98fr] lg:gap-14'\n )}\n >\n <div className={cn('max-w-3xl', centered && 'mx-auto text-center')}>\n {eyebrow && (\n <Eyebrow\n rule={eyebrowRule}\n tone={tone}\n className={cn('mb-6', centered && 'justify-center')}\n testId={ids.eyebrow}\n >\n {eyebrow}\n </Eyebrow>\n )}\n <h1\n className={cn(\n 'font-display font-semibold tracking-tight text-balance',\n size === 'cover'\n ? 'text-[2.6rem] leading-[1.03] sm:text-6xl lg:text-[4.4rem]'\n : 'text-4xl leading-[1.05] sm:text-5xl',\n t.text\n )}\n data-testid={ids.title}\n >\n {renderTitle(title, emphasis)}\n </h1>\n {lede && (\n <p\n className={cn(\n 'mt-6 max-w-2xl text-lg leading-relaxed',\n centered && 'mx-auto',\n t.muted\n )}\n data-testid={ids.lede}\n >\n {lede}\n </p>\n )}\n {actions && (\n <div\n className={cn(\n 'mt-8 flex flex-col gap-3 sm:flex-row',\n centered && 'sm:justify-center'\n )}\n data-testid={ids.actions}\n >\n {actions}\n </div>\n )}\n {footer && (\n <div className={cn('mt-8', centered && 'flex justify-center')}>{footer}</div>\n )}\n </div>\n {aside && (\n <div\n className=\"relative min-w-0\"\n data-slot=\"editorial-hero-aside\"\n data-testid={ids.aside}\n >\n {aside}\n </div>\n )}\n </div>\n </section>\n </EditorialToneContext.Provider>\n )\n}\n","import type { ReactNode } from 'react'\nimport { cn } from '@arbidocs/react/ui'\nimport { EditorialHeading } from './EditorialHeading'\nimport { SURFACE_CLASS, SURFACE_TONE, type EditorialSurface } from './EditorialHero'\nimport { EditorialToneContext, useEditorialTone } from './tone'\n\nexport interface EditorialSectionProps {\n id?: string\n eyebrow?: ReactNode\n /** Section number or label: `1` renders `01`. */\n index?: number | string\n title?: ReactNode\n lead?: ReactNode\n /** Sits beside the heading from `sm` up (a \"see all\" link or button). */\n action?: ReactNode\n /**\n * `stacked`: heading above the content. `split`: heading column beside the content from `lg`.\n * `split-wide`: the same with a wider content column.\n */\n layout?: 'stacked' | 'split' | 'split-wide'\n /** `plain`, `muted` (tinted band) or `inverse` (dark band on a light theme). */\n surface?: EditorialSurface\n /** Hairline above and below the band. */\n bordered?: boolean\n /** Vertical rhythm. */\n spacing?: 'md' | 'lg'\n /** Backdrop behind the content (texture, image), hidden from assistive tech. */\n backdrop?: ReactNode\n /** Accessible name when there is no `title`. */\n 'aria-label'?: string\n children?: ReactNode\n className?: string\n testId?: string\n}\n\n/**\n * A page band: numbered or labelled heading, optional action, and content stacked below or in a\n * second column. Sets the tone for the parts inside it, so the same list or panel grid reads on\n * a plain, tinted or inverse band.\n */\nexport function EditorialSection({\n id,\n eyebrow,\n index,\n title,\n lead,\n action,\n layout = 'stacked',\n surface = 'plain',\n bordered = false,\n spacing = 'lg',\n backdrop,\n 'aria-label': ariaLabel,\n children,\n className,\n testId,\n}: EditorialSectionProps) {\n const tone = SURFACE_TONE[surface]\n const t = useEditorialTone(tone)\n const hasHeading = Boolean(title || eyebrow || index !== undefined)\n const heading =\n hasHeading && title ? (\n <EditorialHeading eyebrow={eyebrow} index={index} title={title} lead={lead} tone={tone} />\n ) : null\n const split = layout !== 'stacked'\n return (\n <EditorialToneContext.Provider value={tone}>\n <section\n id={id}\n aria-label={title ? undefined : ariaLabel}\n className={cn(\n 'relative isolate overflow-hidden scroll-mt-24',\n SURFACE_CLASS[surface],\n bordered && cn('border-y', t.hairline),\n className\n )}\n data-slot=\"editorial-section\"\n data-testid={testId}\n >\n {backdrop && (\n <div aria-hidden=\"true\" className=\"pointer-events-none absolute inset-0 -z-10\">\n {backdrop}\n </div>\n )}\n <div\n className={cn(\n 'mx-auto max-w-7xl px-5 lg:px-8',\n spacing === 'lg' ? 'py-16 lg:py-24' : 'py-12 lg:py-16',\n split &&\n cn(\n 'grid gap-10 lg:gap-16',\n layout === 'split-wide' ? 'lg:grid-cols-[1fr_1.4fr]' : 'lg:grid-cols-2'\n )\n )}\n >\n {split ? (\n <>\n {heading && <div>{heading}</div>}\n <div className=\"min-w-0\">{children}</div>\n </>\n ) : (\n <>\n {heading && (\n <div className=\"flex flex-col justify-between gap-6 sm:flex-row sm:items-end\">\n {heading}\n {action && <div className=\"shrink-0\">{action}</div>}\n </div>\n )}\n {children && <div className={cn(heading && 'mt-12 lg:mt-14')}>{children}</div>}\n </>\n )}\n </div>\n </section>\n </EditorialToneContext.Provider>\n )\n}\n\nexport interface EditorialProseProps {\n /** One entry per paragraph. */\n paragraphs: ReactNode[]\n /** Two columns from `md` up (paragraphs never split across columns). */\n columns?: 1 | 2\n size?: 'base' | 'lg'\n className?: string\n testId?: string\n}\n\n/** Long-form paragraphs set at a readable measure, in one or two columns. */\nexport function EditorialProse({\n paragraphs,\n columns = 1,\n size = 'base',\n className,\n testId,\n}: EditorialProseProps) {\n const t = useEditorialTone()\n return (\n <div\n className={cn(\n size === 'lg' ? 'text-lg' : 'text-base',\n 'leading-relaxed',\n t.muted,\n columns === 2 ? 'gap-10 md:columns-2' : 'max-w-prose',\n className\n )}\n data-slot=\"editorial-prose\"\n data-testid={testId}\n >\n {paragraphs.map((p, i) => (\n <p key={i} className={cn(columns === 2 ? 'mb-5 break-inside-avoid' : 'mt-5 first:mt-0')}>\n {p}\n </p>\n ))}\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport { Check } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport { useEditorialTone } from './tone'\n\nexport interface DefinitionItem {\n term: ReactNode\n description: ReactNode\n /** A leading icon; without one the `dot` marker is used when `marker=\"dot\"`. */\n icon?: ReactNode\n testId?: string\n}\n\nexport interface DefinitionListProps {\n items: DefinitionItem[]\n /**\n * `rows`: each entry is a lifted row with a marker. `ruled`: a spec sheet, term and description\n * side by side between hairlines.\n */\n layout?: 'rows' | 'ruled'\n /** Marker of an entry with no `icon` in the `rows` layout. */\n marker?: 'dot' | 'none'\n className?: string\n testId?: string\n}\n\n/** Term and description pairs (`<dl>`): feature rows, a spec sheet, a definition list. */\nexport function DefinitionList({\n items,\n layout = 'rows',\n marker = 'dot',\n className,\n testId,\n}: DefinitionListProps) {\n const t = useEditorialTone()\n return (\n <dl\n className={cn(layout === 'rows' ? 'space-y-3' : 'divide-y', t.hairline, className)}\n data-slot=\"definition-list\"\n data-layout={layout}\n data-testid={testId}\n >\n {items.map((item, i) =>\n layout === 'rows' ? (\n <div\n key={i}\n className={cn(\n 'flex gap-4 rounded-sm border p-5 transition-colors',\n t.panel,\n t.panelHover\n )}\n data-testid={item.testId ?? (testId ? `${testId}-item-${i}` : undefined)}\n >\n {item.icon ? (\n <span\n className={cn(\n 'flex size-9 shrink-0 items-center justify-center rounded-sm border',\n t.tile\n )}\n aria-hidden=\"true\"\n >\n {item.icon}\n </span>\n ) : (\n marker === 'dot' && (\n <span aria-hidden=\"true\" className=\"mt-2 size-2 shrink-0 rounded-full bg-primary\" />\n )\n )}\n <div className=\"min-w-0\">\n <dt className=\"font-medium\">{item.term}</dt>\n <dd className={cn('mt-0.5 text-sm', t.muted)}>{item.description}</dd>\n </div>\n </div>\n ) : (\n <div\n key={i}\n className=\"grid gap-1 py-4 sm:grid-cols-[minmax(0,1fr)_minmax(0,2fr)] sm:gap-8\"\n data-testid={item.testId ?? (testId ? `${testId}-item-${i}` : undefined)}\n >\n <dt className=\"font-medium\">{item.term}</dt>\n <dd className={cn('text-sm leading-relaxed', t.muted)}>{item.description}</dd>\n </div>\n )\n )}\n </dl>\n )\n}\n\nexport interface CheckListProps {\n items: ReactNode[]\n /** Two columns from `sm` up. */\n columns?: 1 | 2\n /** Replaces the check mark. */\n icon?: ReactNode\n className?: string\n testId?: string\n}\n\n/** A list of points, each with a ringed check mark. */\nexport function CheckList({ items, columns = 1, icon, className, testId }: CheckListProps) {\n const t = useEditorialTone()\n return (\n <ul\n className={cn(columns === 2 ? 'grid gap-4 sm:grid-cols-2' : 'space-y-3', className)}\n data-slot=\"check-list\"\n data-testid={testId}\n >\n {items.map((item, i) => (\n <li\n key={i}\n className={cn('flex items-start gap-3 text-sm leading-relaxed', t.muted)}\n data-testid={testId ? `${testId}-item-${i}` : undefined}\n >\n <span\n aria-hidden=\"true\"\n className={cn(\n 'mt-0.5 flex size-5 shrink-0 items-center justify-center rounded-full border',\n t.tile\n )}\n >\n {icon ?? <Check className=\"size-3\" />}\n </span>\n <span>{item}</span>\n </li>\n ))}\n </ul>\n )\n}\n\nexport interface TagListProps {\n items: string[]\n /** Accessible name of the list. */\n label?: string\n className?: string\n testId?: string\n}\n\n/** Small bordered chips: sectors, focus areas, topics. */\nexport function TagList({ items, label, className, testId }: TagListProps) {\n const t = useEditorialTone()\n if (items.length === 0) return null\n return (\n <ul\n aria-label={label}\n className={cn('flex flex-wrap gap-1.5', className)}\n data-slot=\"tag-list\"\n data-testid={testId}\n >\n {items.map((tag) => (\n <li key={tag} className={cn('rounded-sm border px-2 py-0.5 text-[11px]', t.chip)}>\n {tag}\n </li>\n ))}\n </ul>\n )\n}\n","import { useEffect, useRef, useState, type CSSProperties, type ReactNode } from 'react'\nimport { cn } from '@arbidocs/react/ui'\n\nexport interface RevealProps {\n children: ReactNode\n /** Delay in ms before the reveal starts (stagger siblings with `index * 90`). */\n delay?: number\n className?: string\n testId?: string\n}\n\n/**\n * Fade-and-rise on first scroll into view. Content is fully visible until the part has mounted\n * and found an `IntersectionObserver`, so server rendering, no-JS and jsdom show everything; the\n * hidden state and transition live in `blocks.css` (`[data-reveal]`) and collapse under\n * `prefers-reduced-motion`.\n */\nexport function Reveal({ children, delay = 0, className, testId }: RevealProps) {\n const ref = useRef<HTMLDivElement>(null)\n const [state, setState] = useState<'idle' | 'pending' | 'shown'>('idle')\n\n useEffect(() => {\n const el = ref.current\n if (!el || typeof IntersectionObserver === 'undefined') return\n setState('pending')\n const io = new IntersectionObserver(\n (entries) => {\n if (entries.some((e) => e.isIntersecting)) {\n setState('shown')\n io.disconnect()\n }\n },\n { rootMargin: '0px 0px -90px 0px' }\n )\n io.observe(el)\n return () => io.disconnect()\n }, [])\n\n return (\n <div\n ref={ref}\n data-slot=\"reveal\"\n data-reveal={state === 'idle' ? undefined : state}\n style={delay ? ({ '--reveal-delay': `${delay}ms` } as CSSProperties) : undefined}\n className={cn(className)}\n data-testid={testId}\n >\n {children}\n </div>\n )\n}\n","import type { ReactNode } from 'react'\nimport { ArrowUpRight } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport { BlockLink, type BlockLinkComponent } from '../blockLink'\nimport { CheckList, TagList } from './lists'\nimport { Reveal } from './Reveal'\nimport { EditorialToneContext, formatIndex, useEditorialTone, type EditorialTone } from './tone'\n\nexport interface PanelItem {\n title: ReactNode\n body?: ReactNode\n /** Icon in a bordered tile. */\n icon?: ReactNode\n /** Explicit number or label; with `numbered` on the grid it defaults to the position. */\n index?: number | string\n /** A small label above the title (category). */\n kicker?: ReactNode\n /** Bulleted points under the body. */\n points?: ReactNode[]\n /** Chips at the foot. */\n tags?: string[]\n /** Anything at the foot (a meta line, a link). */\n footer?: ReactNode\n /** Makes the whole panel a link. */\n href?: string\n testId?: string\n}\n\nexport interface PanelGridProps {\n items: PanelItem[]\n columns?: 2 | 3 | 4\n /** `cards`: separate bordered panels. `joined`: one hairline-ruled table of cells. */\n variant?: 'cards' | 'joined'\n /** Number the panels 01, 02, ... */\n numbered?: boolean\n /** Fade each panel in on scroll, staggered. */\n reveal?: boolean\n /** Router link for panels with an `href`. */\n linkComponent?: BlockLinkComponent\n /** Heading level of the panel titles (default 3). */\n headingLevel?: 2 | 3 | 4\n tone?: EditorialTone\n className?: string\n testId?: string\n}\n\nconst COLS: Record<2 | 3 | 4, string> = {\n 2: 'sm:grid-cols-2',\n 3: 'sm:grid-cols-2 lg:grid-cols-3',\n 4: 'sm:grid-cols-2 lg:grid-cols-4',\n}\n\n/**\n * Icon, title and body panels: principles, process steps, capability cards, security pillars,\n * practice areas. Cards or a joined hairline table, optional numbers, bullet points, chips and\n * a link per panel.\n */\nexport function PanelGrid({\n items,\n columns = 3,\n variant = 'cards',\n numbered = false,\n reveal = false,\n linkComponent,\n headingLevel = 3,\n tone,\n className,\n testId,\n}: PanelGridProps) {\n const t = useEditorialTone(tone)\n const Heading = `h${headingLevel}` as 'h2' | 'h3' | 'h4'\n const joined = variant === 'joined'\n return (\n <EditorialToneContext.Provider value={t.tone}>\n <ul\n className={cn(\n 'grid',\n joined ? cn('gap-px overflow-hidden rounded-sm border', t.hairline) : 'gap-4',\n joined && (t.tone === 'inverse' ? 'bg-background/15' : 'bg-border'),\n COLS[columns] ?? COLS[3],\n className\n )}\n data-slot=\"panel-grid\"\n data-variant={variant}\n data-testid={testId}\n >\n {items.map((item, i) => {\n const number = item.index ?? (numbered ? i + 1 : undefined)\n const inner = (\n <div\n className={cn(\n 'group flex h-full flex-col p-6 transition-colors duration-300',\n joined\n ? cn(\n t.tone === 'inverse' ? 'bg-foreground' : 'bg-background',\n item.href && 'hover:bg-muted/40'\n )\n : cn('rounded-sm border', t.panel, item.href && t.panelHover)\n )}\n data-testid={item.testId ?? (testId ? `${testId}-item-${i}` : undefined)}\n >\n {(item.icon || number !== undefined || item.href) && (\n <div className=\"flex items-start justify-between gap-4\">\n {item.icon ? (\n <span\n aria-hidden=\"true\"\n className={cn(\n 'flex size-11 items-center justify-center rounded-sm border',\n t.tile\n )}\n >\n {item.icon}\n </span>\n ) : (\n <span />\n )}\n {number !== undefined ? (\n <span className={cn('font-display text-sm tabular-nums', t.subtle)}>\n {formatIndex(number)}\n </span>\n ) : (\n item.href && (\n <ArrowUpRight\n aria-hidden=\"true\"\n className={cn(\n 'size-4 transition-colors group-hover:text-primary',\n t.subtle\n )}\n />\n )\n )}\n </div>\n )}\n {item.kicker && (\n <p\n className={cn(\n 'text-xs font-semibold uppercase tracking-wider',\n item.icon || number !== undefined ? 'mt-5' : '',\n t.accent\n )}\n >\n {item.kicker}\n </p>\n )}\n <Heading\n className={cn(\n 'font-display text-lg font-semibold leading-snug',\n item.icon || number !== undefined || item.kicker ? 'mt-4' : '',\n t.text\n )}\n >\n {item.title}\n </Heading>\n {item.body && (\n <div className={cn('mt-2 text-sm leading-relaxed', t.muted)}>{item.body}</div>\n )}\n {item.points && item.points.length > 0 && (\n <CheckList\n items={item.points}\n className={cn('mt-4 space-y-2 border-t pt-4', t.hairline)}\n />\n )}\n {item.tags && item.tags.length > 0 && (\n <TagList items={item.tags} className=\"mt-auto pt-5\" />\n )}\n {item.footer && (\n <div className={cn('mt-auto pt-5 text-xs', t.subtle)}>{item.footer}</div>\n )}\n </div>\n )\n const cell = (\n <BlockLink href={item.href} linkComponent={linkComponent} className=\"block h-full\">\n {inner}\n </BlockLink>\n )\n return (\n <li key={i} className=\"min-w-0\">\n {reveal ? (\n <Reveal delay={i * 90} className=\"h-full\">\n {cell}\n </Reveal>\n ) : (\n cell\n )}\n </li>\n )\n })}\n </ul>\n </EditorialToneContext.Provider>\n )\n}\n","import type { ReactNode } from 'react'\nimport { cn } from '@arbidocs/react/ui'\nimport { useEditorialTone } from './tone'\n\nexport interface PullQuoteProps {\n quote: ReactNode\n /** Who said it. */\n attribution?: { name: ReactNode; role?: ReactNode }\n /** Link to the source. */\n cite?: string\n align?: 'start' | 'center'\n size?: 'md' | 'lg'\n className?: string\n testId?: string\n}\n\n/** A large display quotation with an accent rule and attribution. */\nexport function PullQuote({\n quote,\n attribution,\n cite,\n align = 'start',\n size = 'md',\n className,\n testId,\n}: PullQuoteProps) {\n const t = useEditorialTone()\n const centered = align === 'center'\n return (\n <figure\n className={cn(\n 'max-w-3xl',\n centered ? 'mx-auto text-center' : 'border-l-2 border-primary pl-6 lg:pl-8',\n className\n )}\n data-slot=\"pull-quote\"\n data-testid={testId}\n >\n <blockquote\n cite={cite}\n className={cn(\n 'font-display font-medium leading-snug text-balance',\n size === 'lg' ? 'text-3xl sm:text-4xl' : 'text-2xl sm:text-3xl',\n t.text\n )}\n >\n <p>{quote}</p>\n </blockquote>\n {attribution && (\n <figcaption className={cn('mt-5 text-sm', t.muted)}>\n <span className={cn('font-semibold', t.text)}>{attribution.name}</span>\n {attribution.role && <span>, {attribution.role}</span>}\n </figcaption>\n )}\n </figure>\n )\n}\n","import type { ReactNode } from 'react'\nimport { ArrowUpRight } from 'lucide-react'\nimport { cn } from '@arbidocs/react/ui'\nimport { BlockImage } from '../BlockImage'\nimport { BlockLink, type BlockLinkComponent } from '../blockLink'\nimport { useEditorialTone } from './tone'\n\nexport interface ArticleItem {\n title: ReactNode\n summary?: ReactNode\n /** Category or type, shown as an accent label. */\n kicker?: ReactNode\n /** Short facts joined with a middle dot: author, date, reading time. */\n meta?: ReactNode[]\n href?: string\n imageUrl?: string\n imageAlt?: string\n testId?: string\n}\n\nexport interface ArticleListProps {\n items: ArticleItem[]\n /**\n * `cards`: a grid of cards. `rows`: ruled rows (kicker and meta beside the title), best for an\n * archive.\n */\n layout?: 'cards' | 'rows'\n /** `cards` only: the first item is a large card beside a column of the rest from `lg`. */\n featureFirst?: boolean\n columns?: 2 | 3\n linkComponent?: BlockLinkComponent\n /** Rendered instead of the list when `items` is empty. */\n empty?: ReactNode\n className?: string\n testId?: string\n}\n\nconst COLS: Record<2 | 3, string> = {\n 2: 'md:grid-cols-2',\n 3: 'md:grid-cols-2 lg:grid-cols-3',\n}\n\n/** Insight, news or post listing: `meta` joined with a middle dot, linked cards or rows. */\nfunction MetaLine({ meta, className }: { meta?: ReactNode[]; className?: string }) {\n if (!meta || meta.length === 0) return null\n return (\n <p className={className}>\n {meta.map((m, i) => (\n <span key={i}>\n {i > 0 && <span aria-hidden=\"true\"> · </span>}\n {m}\n </span>\n ))}\n </p>\n )\n}\n\n/** Article, insight or news items as cards (optionally with a lead card) or ruled archive rows. */\nexport function ArticleList({\n items,\n layout = 'cards',\n featureFirst = false,\n columns = 3,\n linkComponent,\n empty,\n className,\n testId,\n}: ArticleListProps) {\n const t = useEditorialTone()\n if (items.length === 0) return empty ? <>{empty}</> : null\n\n const idOf = (item: ArticleItem, i: number) =>\n item.testId ?? (testId ? `${testId}-item-${i}` : undefined)\n\n if (layout === 'rows') {\n return (\n <ul\n className={cn('divide-y border-y', t.hairline, className)}\n data-slot=\"article-list\"\n data-layout=\"rows\"\n data-testid={testId}\n >\n {items.map((item, i) => (\n <li key={i}>\n <BlockLink href={item.href} linkComponent={linkComponent} className=\"group block\">\n <article\n className=\"grid gap-2 py-6 transition-colors sm:grid-cols-[10rem_minmax(0,1fr)_auto] sm:gap-8\"\n data-testid={idOf(item, i)}\n >\n <div className=\"space-y-1\">\n {item.kicker && (\n <p className={cn('text-xs font-semibold uppercase tracking-wider', t.accent)}>\n {item.kicker}\n </p>\n )}\n <MetaLine meta={item.meta} className={cn('text-xs', t.subtle)} />\n </div>\n <div className=\"min-w-0\">\n <h3\n className={cn(\n 'font-display text-xl font-semibold leading-snug transition-colors group-hover:text-primary',\n t.text\n )}\n >\n {item.title}\n </h3>\n {item.summary && (\n <p className={cn('mt-2 text-sm leading-relaxed', t.muted)}>{item.summary}</p>\n )}\n </div>\n {item.href && (\n <ArrowUpRight\n aria-hidden=\"true\"\n className={cn(\n 'hidden size-4 transition-colors group-hover:text-primary sm:block',\n t.subtle\n )}\n />\n )}\n </article>\n </BlockLink>\n </li>\n ))}\n </ul>\n )\n }\n\n const card = (item: ArticleItem, i: number, lead: boolean) => (\n <BlockLink href={item.href} linkComponent={linkComponent} className=\"group block h-full\">\n <article\n className={cn(\n 'flex h-full flex-col rounded-sm border transition-colors duration-300',\n t.panel,\n item.href && t.panelHover,\n lead ? 'p-6 lg:p-8' : 'p-6'\n )}\n data-testid={idOf(item, i)}\n >\n {item.imageUrl && (\n <BlockImage\n src={item.imageUrl}\n alt={item.imageAlt ?? ''}\n aspect=\"16:9\"\n rounded=\"none\"\n className=\"mb-5 w-full\"\n />\n )}\n <div className=\"flex items-start justify-between gap-3\">\n {item.kicker ? (\n <p className={cn('text-xs font-semibold uppercase tracking-wider', t.accent)}>\n {item.kicker}\n </p>\n ) : (\n <span />\n )}\n {item.href && (\n <ArrowUpRight\n aria-hidden=\"true\"\n className={cn('size-4 transition-colors group-hover:text-primary', t.subtle)}\n />\n )}\n </div>\n <h3\n className={cn(\n 'mt-3 font-display font-semibold leading-snug',\n lead ? 'text-2xl sm:text-3xl' : 'text-lg',\n t.text\n )}\n >\n {item.title}\n </h3>\n {item.summary && (\n <p\n className={cn(\n 'mt-3 flex-1 text-sm leading-relaxed',\n lead && 'max-w-xl text-base',\n t.muted\n )}\n >\n {item.summary}\n </p>\n )}\n <MetaLine meta={item.meta} className={cn('mt-5 text-xs', t.subtle)} />\n </article>\n </BlockLink>\n )\n\n if (featureFirst && items.length > 1) {\n const [lead, ...rest] = items\n return (\n <div\n className={cn('grid gap-5 lg:grid-cols-[1.4fr_1fr]', className)}\n data-slot=\"article-list\"\n data-layout=\"feature\"\n data-testid={testId}\n >\n <div>{card(lead, 0, true)}</div>\n <ul className=\"grid gap-5\">\n {rest.map((item, i) => (\n <li key={i}>{card(item, i + 1, false)}</li>\n ))}\n </ul>\n </div>\n )\n }\n\n return (\n <ul\n className={cn('grid gap-5', COLS[columns] ?? COLS[3], className)}\n data-slot=\"article-list\"\n data-layout=\"cards\"\n data-testid={testId}\n >\n {items.map((item, i) => (\n <li key={i}>{card(item, i, false)}</li>\n ))}\n </ul>\n )\n}\n","import type { ReactNode } from 'react'\nimport { cn } from '@arbidocs/react/ui'\nimport { SURFACE_CLASS, SURFACE_TONE, type EditorialSurface } from './EditorialHero'\nimport { EditorialToneContext, useEditorialTone } from './tone'\n\nexport interface ProofStripProps {\n /** The lead statement (an icon and a sentence). */\n lead?: ReactNode\n /** Short labels: standards, memberships, clients. */\n items: ReactNode[]\n /** Accessible name of the label list. */\n label?: string\n surface?: EditorialSurface\n className?: string\n testId?: string\n}\n\n/** A thin band of proof points: a lead statement and a row of short uppercase labels. */\nexport function ProofStrip({\n lead,\n items,\n label,\n surface = 'muted',\n className,\n testId,\n}: ProofStripProps) {\n const tone = SURFACE_TONE[surface]\n const t = useEditorialTone(tone)\n return (\n <EditorialToneContext.Provider value={tone}>\n <section\n aria-label={label}\n className={cn('border-y', t.hairline, SURFACE_CLASS[surface], className)}\n data-slot=\"proof-strip\"\n data-testid={testId}\n >\n <div className=\"mx-auto flex max-w-7xl flex-col items-center gap-5 px-5 py-6 lg:flex-row lg:justify-between lg:px-8\">\n {lead && <div className=\"flex items-center gap-2.5 text-sm font-medium\">{lead}</div>}\n <ul className=\"flex flex-wrap items-center justify-center gap-x-6 gap-y-2\">\n {items.map((item, i) => (\n <li\n key={i}\n className={cn('text-xs font-semibold uppercase tracking-wider', t.subtle)}\n >\n {item}\n </li>\n ))}\n </ul>\n </div>\n </section>\n </EditorialToneContext.Provider>\n )\n}\n\nexport interface CtaBandProps {\n title: ReactNode\n lead?: ReactNode\n /** Buttons or links. */\n actions?: ReactNode\n /** Decoration behind the copy (image, texture), hidden from assistive tech. */\n backdrop?: ReactNode\n /** Default `inverse`: a dark closing band. */\n surface?: EditorialSurface\n className?: string\n testId?: string\n}\n\n/** Closing call-to-action band: centred heading, lead and actions over an optional backdrop. */\nexport function CtaBand({\n title,\n lead,\n actions,\n backdrop,\n surface = 'inverse',\n className,\n testId,\n}: CtaBandProps) {\n const tone = SURFACE_TONE[surface]\n const t = useEditorialTone(tone)\n return (\n <EditorialToneContext.Provider value={tone}>\n <section\n className={cn('relative isolate overflow-hidden', SURFACE_CLASS[surface], className)}\n data-slot=\"cta-band\"\n data-testid={testId}\n >\n {backdrop && (\n <div aria-hidden=\"true\" className=\"pointer-events-none absolute inset-0 -z-10\">\n {backdrop}\n </div>\n )}\n <div className=\"mx-auto max-w-4xl px-5 py-20 text-center lg:px-8 lg:py-24\">\n <h2\n className={cn(\n 'font-display text-3xl font-semibold tracking-tight text-balance sm:text-4xl',\n t.text\n )}\n >\n {title}\n </h2>\n {lead && <p className={cn('mx-auto mt-4 max-w-2xl text-lg', t.muted)}>{lead}</p>}\n {actions && (\n <div className=\"mt-8 flex flex-col items-center justify-center gap-3 sm:flex-row\">\n {actions}\n </div>\n )}\n </div>\n </section>\n </EditorialToneContext.Provider>\n )\n}\n"]}
|