efficient-web-builder 8.0.0 → 10.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,83 @@
1
1
  # Changelog
2
2
 
3
+ ## 10.0.0 - 2026-10-14
4
+
5
+ - **The `Which corners` cells and the nine-square grid are efficient-shell
6
+ parts**, drawn straight from `efficient-shell/ui`
7
+ (Efficient-Pty-Ltd/efficient-shell#377, harness UI-24: one UI kit). The 2x2
8
+ `CornersInput` is in the shell from 7.16.0 (#452); the peer floor 9.0.0 set,
9
+ `^7.21.0`, already covers it, so the range does not move.
10
+ - **Corners is ONE row: the shell's `CornersInput`, its radius box beside
11
+ the 2x2.** On a section, on a card and on the Image block, the `Corners`
12
+ slider row and the `Which corners` row under it are now one `Corners` row
13
+ (one builder, `cornersRowField` in `lib/puck/controls`): the radius box
14
+ ("R" … "px", 120px) and the four corners as a 2x2 that mirrors the box (TL TR
15
+ over BL BR, 24px buttons). Lewis approved the 2x2 beside the box (GG,
16
+ 2026-10-14). Stored values do not move: no number = following, a number =
17
+ that number, ↺ writes `null`; the corner set stays on its own key
18
+ (`sectionCornerSides`, `cardCornerSides`, `cornerSides`) with the same
19
+ values (nothing stored = all four; all four back on writes `null`). The
20
+ corner-set keys are still declared and draw no row of their own
21
+ (`cornerSidesField`, a no-control field).
22
+ - **Following is shown by the parts that already say it.** An empty box
23
+ shows, as its placeholder, the number the page draws: the site's Corners
24
+ for a section, the section's (or the site's, when the section runs edge to
25
+ edge) for a card, and 0 (square) for a picture; ArrowUp starts from it. The
26
+ ↺ (easel `SettingsDefaultReset`) shows only while a number is set. The hint
27
+ line is unchanged ("Follows Site styles ▸ Basics ▸ Corners until you set a
28
+ number here." on a section). A section that runs edge to edge closes the
29
+ whole row (box and corners) with the same reason.
30
+ - **The radius box draws as the shell draws it** inside the inspector:
31
+ `storefront-editor.css` rolls its old unlayered input rule back for the
32
+ Corners row (`.sf-corners`), as it already did for the slider's number and
33
+ the colour box (without it the number sat on top of "px").
34
+ - "Apply to all cards" now says "Gives the other card(s) this card's
35
+ Corners." (the corner set is on the Corners row).
36
+ - Breaking, removed as dead: `sectionCornerSidesField` and
37
+ `cardCornerSidesField` (one `cornerSidesField`), `pxField`'s `restAtSite`
38
+ option, the corner sliders' resting-track components, and
39
+ `CORNER_SIDES_LABEL` and `cornerSidesSummary` (`lib/content/section-corners`,
40
+ re-exported by `lib/content/card-corners`; the "Which corners" row and its
41
+ summary are gone).
42
+ - **`FocalPicker` draws the shell's `AlignmentGrid`** (was efficient-easel's
43
+ `panel/SettingsPlacement`), so every nine-square row does: `placementField`
44
+ (Placement, Content position, Text position) and `edgePad` (Scroll
45
+ direction, Overlay position). Same nine values, same shut cells, same
46
+ arrows on the marquee's live cells, and the cells' names and reasons are
47
+ still said through `lib/editor-words`. New from the part: one Tab stop for
48
+ the grid, and the arrow keys move and choose (stopping at the edge). The
49
+ look is the one Lewis approved for the part (40px square cells with thin
50
+ lines, the chosen cell light blue with a blue square). `FocalPicker`'s
51
+ `points` take the shell's `AlignmentPoint` type.
52
+ - Nothing in `src/` takes `SettingsCorners` or `SettingsPlacement` from
53
+ efficient-easel any more (`scripts/test-corners-and-grid-from-the-shell.tsx`).
54
+
55
+ ## 9.0.0 - 2026-10-14
56
+
57
+ - **The Pages panel draws the Layers panel's tree** (Lewis on the Pages panel,
58
+ 2026-10-13: "it is packed too tight"; the look approved 2026-10-14). Its
59
+ rows, headings, counts and folds are efficient-easel's `LayersTree`,
60
+ `TreeGroupLabel` (count and fold), `TreeRow` and `TreeRowAction`, on the
61
+ shell's `Tree`: rows 32 high and 4 apart whether or not they carry an
62
+ action (a hovered row was 38), a heading 8 above its first row, one inset
63
+ of 12 a side, the search field's. The page-type pills ride in the row's
64
+ `preview`, 8 off the name. Open-in-a-new-tab on Cart and Checkout is a row
65
+ action (`window.open`).
66
+ - **The Pages search is the shell's `Input`** with `leftIcon`: one field in
67
+ dark (the bare input drew a darker box inside the rounded field).
68
+ - **Removed CSS** (`components/storefront-editor.css`): `.sf-row` and its
69
+ `:hover` / `.is-selected` rules, `.sf-prow`, `.sf-pgroup` / `-head` / `-label`
70
+ / `-count` / `-body`, `.sf-pages-search` / `-input`, `.sf-pages-list` and its
71
+ note rules, `.sf-page-edit` and its states, `.sf-row-del`, and the dead
72
+ `.sf-tree > .sf-row + .sf-row` seam. The guard `test-tree-rhythm-tokens`
73
+ that held that seam is retired. New: `.sf-pages-find`, `.sf-pages > .sf-note`.
74
+ - **Breaking: peers `efficient-easel ^4.0.0` and `efficient-shell ^7.21.0`**
75
+ (were `^2.0.0 || ^3.1.0` and `^5.6.0 || ^6.4.0 || ^7.7.0`). Easel 4's
76
+ `TreeGroupLabel` hands its count and fold to the shell's, which has them
77
+ from 7.21.0. Easel 5.0.0 is not admitted: it changes `SETTINGS_BUCKETS` and
78
+ `BUCKET_KEY` (Design / Animation), which the builder's field groups use; that
79
+ move is its own release.
80
+
3
81
  ## 8.0.0 - 2026-10-14
4
82
 
5
83
  - **Breaking: the page has no "Page Title" field** (owner, 2026-10-13,
@@ -1 +1 @@
1
- "use client";import{jsx as t,jsxs as r,Fragment as ne}from"react/jsx-runtime";import{useEffect as se,useId as oe,useMemo as j,useState as d}from"react";import{useStorefrontDocument as re}from"./StorefrontDocumentContext.js";import g from"./UiIcon.js";import le from"./SidePanelHead.js";import{useWebsiteName as ie}from"./WebsiteSettingsPanel.js";import{InspectorIconButton as ce}from"efficient-easel/chrome";import{Button as H,Dialog as de,FormField as pe,Input as me,Tooltip as R}from"efficient-shell/ui";import{AddIcon as ue}from"efficient-easel/icons";import{PagesIcon as he}from"efficient-easel/rail";import{useEditorHost as ge}from"../lib/editor-host.js";import{bucketEditorPageRows as fe,DYNAMIC_PAGES_GROUP_KEY as be,isDynamicPageRow as we,MAIN_PAGES_GROUP as ye}from"../lib/editor-page-rows.js";import{useEditorSession as Ne}from"../lib/editor-session-context.js";import{usePageRows as ke}from"../lib/page-rows.js";import{say as a}from"../lib/editor-words.js";const M="sf-editor-pages-collapsed-groups",ve=i=>i.toLowerCase().trim().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,""),U=(i,f)=>{const c=ve(i)||"page";if(!f.has(c))return c;let p=2;for(;f.has(`${c}-${p}`);)p+=1;return`${c}-${p}`};function Pe({onNavigate:i,onClose:f,activeSurface:c,onPreviewSurface:p}){const b=Ne().chrome?.pageRows,D=ge(),{adapter:w,capabilities:y,ready:L,currentSlug:O}=re(),q=ie(),{rows:l,reload:K,setRows:Y}=ke(),[P,J]=d(""),[m,N]=d(!1),[k,u]=d(null),[_,v]=d(!1),[h,C]=d(""),z=oe(),[S,Q]=d(()=>{if(typeof window>"u")return new Set;try{const e=window.localStorage.getItem(M);return new Set(e?JSON.parse(e):[])}catch{return new Set}});se(()=>{try{window.localStorage.setItem(M,JSON.stringify([...S]))}catch{}},[S]);const T=e=>Q(s=>{const n=new Set(s);return n.has(e)?n.delete(e):n.add(e),n}),V=j(()=>fe(l??[]),[l]),I=P.trim().toLowerCase(),F=e=>!I||e.toLowerCase().includes(I),X=e=>I?!0:!S.has(e),G=j(()=>new Set((l??[]).map(e=>e.slug)),[l]),Z=()=>{if(y.pageCreationInAdminForm){D.send("storefront-editor:new-page");return}C(""),u(null),v(!0)},W=async()=>{const e=h.trim();if(!(!e||!L||m||!w.createPage)){N(!0),u(null);try{const s=await w.createPage({slug:U(e,G),title:e,layout:{}});await K(),v(!1),C(""),i(s.slug)}catch{u(a("Couldn’t add the page — please retry."))}finally{N(!1)}}},ee=async e=>{if(!(!L||m||!w.deletePage||(l??[]).length<=1)){N(!0);try{await w.deletePage(e.id);const s=(l??[]).filter(n=>n.id!==e.id);Y(s),u(null),e.slug===O&&s[0]&&i(s[0].slug)}catch{u(a("Couldn’t delete the page — please retry."))}finally{N(!1)}}},te=e=>D.send("storefront-editor:open-page",{slug:e}),ae=e=>{if(!F(e.label))return null;const s=!c&&e.slug===O,n=y.canDeletePagesInline&&(l??[]).length>1;return r("div",{className:`sf-row sf-prow ${s?"is-selected":""}`,onClick:()=>i(e.slug),children:[t("span",{className:"sf-chip",children:t(Ce,{})}),t("span",{className:"sf-row-name",children:e.label}),we(e)&&t("span",{className:"sf-badge-dynamic",children:a("Dynamic")}),e.kind==="lightbox"&&t("span",{className:"sf-badge-lightbox",children:a("Lightbox")}),e.draft&&t("span",{className:"sf-page-draft",children:a("draft")}),y.pageCreationInAdminForm&&t(R,{content:a("Edit “{name}” in {place}",{name:e.label,place:a("the admin")}),children:t("button",{type:"button",className:"sf-page-edit","aria-label":a("Edit {name} in {place}",{name:e.label,place:a("the admin")}),onClick:o=>{o.stopPropagation(),te(e.slug)},children:t(g,{name:"pencil",size:13,strokeWidth:1.7,rounded:!0})})}),n&&t(R,{content:a("Delete “{name}”",{name:e.label}),children:t("button",{type:"button",className:"sf-page-edit sf-page-edit--danger",disabled:m,"aria-label":a("Delete {name}",{name:e.label}),onClick:o=>{o.stopPropagation(),ee(e)},children:t(g,{name:"trash",size:13,strokeWidth:1.7,rounded:!0})})})]},e.id)},A=(e,s,n)=>{const o=n.filter(Boolean);if(o.length===0)return null;const E=X(e);return r("div",{className:"sf-pgroup",children:[r("button",{type:"button",className:"sf-pgroup-head","aria-expanded":E,onClick:()=>T(e),children:[t(g,{name:"chevron-right",size:10,strokeWidth:2.6,rounded:!0,style:{transform:E?"rotate(90deg)":"none",transition:"transform 0.14s"}}),t("span",{className:"sf-pgroup-label",children:s}),t("span",{className:"sf-pgroup-count",children:o.length})]}),E&&t("div",{className:"sf-pgroup-body",children:o})]},e)},$=(b?.rows??[]).filter(e=>F(e.label)).map(e=>{const s=c===e.key;return r("div",{className:`sf-row sf-prow sf-prow--shop ${s?"is-selected":""}`,onClick:()=>p(e.key),children:[t("span",{className:"sf-chip",children:e.icon}),t("span",{className:"sf-row-name",children:e.label}),t("span",{className:"sf-badge-preview",children:a("Preview")}),t(R,{content:a("Open the {name} in a new tab",{name:e.label}),children:t("a",{className:"sf-page-edit",href:e.href,target:"_blank",rel:"noopener noreferrer","aria-label":a("Open the {name} in a new tab",{name:e.label}),onClick:n=>n.stopPropagation(),children:t(g,{name:"external-link",size:13,strokeWidth:1.7,rounded:!0})})})]},e.key)}),B=y.hasSiteSettings&&!!b,x=(()=>{if(l===null)return null;const e=[];let s=!1;for(const n of V){B&&!s&&n.key.startsWith("system:")&&(e.push(A("shop",b.title,$)),s=!0);const o=n.key===be||n.label===ye?a(n.label):n.label;e.push(A(n.key,o,n.rows.map(ae)))}return B&&!s&&e.push(A("shop",b.title,$)),e})();return r("div",{className:"sf-pages",children:[t(le,{icon:t(he,{}),title:a("Pages"),context:q,actions:t(ce,{label:a("New page"),onClick:Z,children:t(ue,{size:15})}),onHide:f}),r("div",{className:"sf-pages-search",children:[t(g,{name:"search",size:14,rounded:!0}),t("input",{type:"search",className:"sf-pages-search-input",placeholder:a("Search all pages…"),value:P,onChange:e=>J(e.target.value),"aria-label":a("Search all pages")})]}),r("div",{className:"sf-pages-list sf-scroll",children:[k&&!_&&t("div",{className:"sf-note sf-note--error",role:"alert",children:k}),x===null?t("div",{className:"sf-note",children:a("Loading…")}):x.some(Boolean)?x:t("div",{className:"sf-note",children:P.trim()?a("No pages match your search"):a("No pages yet. Add one with + above.")})]}),t(de,{open:_,onClose:()=>v(!1),size:"sm",title:a("Add a page"),description:a("Give the new template page a name. It starts blank — add sections once it opens."),footer:r(ne,{children:[t(H,{variant:"secondary",onClick:()=>v(!1),children:a("Cancel")}),t(H,{onClick:()=>{W()},disabled:m||!h.trim(),loading:m,children:a("Add page")})]}),children:t(pe,{label:a("Page name"),htmlFor:z,hint:h.trim()?a("URL: /{slug}",{slug:U(h,G)}):void 0,error:k??void 0,children:t(me,{id:z,value:h,invalid:!!k,onChange:e=>C(e.target.value),onKeyDown:e=>{e.key==="Enter"&&W()},placeholder:a("e.g. About")})})})]})}function Ce(){return r("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:1.7,strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[t("path",{d:"M14 3H7a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V8z"}),t("path",{d:"M14 3v5h5"})]})}export{Pe as default};
1
+ "use client";import{jsx as t,Fragment as L,jsxs as d}from"react/jsx-runtime";import{Fragment as ie,useEffect as de,useId as ce,useMemo as M,useState as c}from"react";import{useStorefrontDocument as ue}from"./StorefrontDocumentContext.js";import v from"./UiIcon.js";import me from"./SidePanelHead.js";import{useWebsiteName as pe}from"./WebsiteSettingsPanel.js";import{InspectorIconButton as ge}from"efficient-easel/chrome";import{Button as T,Dialog as he,FormField as fe,Input as $}from"efficient-shell/ui";import{LayersTree as be,TreeGroupLabel as we,TreeRow as U,TreeRowAction as E}from"efficient-easel/tree";import{AddIcon as ye}from"efficient-easel/icons";import{PagesIcon as ke}from"efficient-easel/rail";import{useEditorHost as Pe}from"../lib/editor-host.js";import{bucketEditorPageRows as Se,DYNAMIC_PAGES_GROUP_KEY as ve,isDynamicPageRow as Ce,MAIN_PAGES_GROUP as Ne}from"../lib/editor-page-rows.js";import{useEditorSession as Ie}from"../lib/editor-session-context.js";import{usePageRows as Ae}from"../lib/page-rows.js";import{say as n}from"../lib/editor-words.js";const q="sf-editor-pages-collapsed-groups",Re=l=>l.toLowerCase().trim().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,""),K=(l,b)=>{const i=Re(l)||"page";if(!b.has(i))return i;let u=2;for(;b.has(`${i}-${u}`);)u+=1;return`${i}-${u}`};function xe({onNavigate:l,onClose:b,activeSurface:i,onPreviewSurface:u}){const w=Ie().chrome?.pageRows,D=Pe(),{adapter:y,capabilities:m,ready:_,currentSlug:F}=ue(),Y=pe(),{rows:o,reload:J,setRows:Q}=Ae(),[C,V]=c(""),[p,k]=c(!1),[P,g]=c(null),[O,S]=c(!1),[h,N]=c(""),z=ce(),[I,X]=c(()=>{if(typeof window>"u")return new Set;try{const e=window.localStorage.getItem(q);return new Set(e?JSON.parse(e):[])}catch{return new Set}});de(()=>{try{window.localStorage.setItem(q,JSON.stringify([...I]))}catch{}},[I]);const Z=e=>X(s=>{const a=new Set(s);return a.has(e)?a.delete(e):a.add(e),a}),ee=M(()=>Se(o??[]),[o]),A=C.trim().toLowerCase(),G=e=>!A||e.toLowerCase().includes(A),te=e=>A?!0:!I.has(e),B=M(()=>new Set((o??[]).map(e=>e.slug)),[o]),ne=()=>{if(m.pageCreationInAdminForm){D.send("storefront-editor:new-page");return}N(""),g(null),S(!0)},W=async()=>{const e=h.trim();if(!(!e||!_||p||!y.createPage)){k(!0),g(null);try{const s=await y.createPage({slug:K(e,B),title:e,layout:{}});await J(),S(!1),N(""),l(s.slug)}catch{g(n("Couldn’t add the page — please retry."))}finally{k(!1)}}},ae=async e=>{if(!(!_||p||!y.deletePage||(o??[]).length<=1)){k(!0);try{await y.deletePage(e.id);const s=(o??[]).filter(a=>a.id!==e.id);Q(s),g(null),e.slug===F&&s[0]&&l(s[0].slug)}catch{g(n("Couldn’t delete the page — please retry."))}finally{k(!1)}}},se=e=>D.send("storefront-editor:open-page",{slug:e}),oe=e=>{if(!G(e.label))return null;const s=!i&&e.slug===F,a=m.canDeletePagesInline&&(o??[]).length>1,r=Ce(e),f=e.kind==="lightbox",re=r||f||e.draft?d(L,{children:[r&&t("span",{className:"sf-badge-dynamic",children:n("Dynamic")}),f&&t("span",{className:"sf-badge-lightbox",children:n("Lightbox")}),e.draft&&t("span",{className:"sf-page-draft",children:n("draft")})]}):void 0,le=m.pageCreationInAdminForm||a?d(L,{children:[m.pageCreationInAdminForm&&t(E,{kind:"plain",label:n("Edit “{name}” in {place}",{name:e.label,place:n("the admin")}),onClick:()=>se(e.slug),children:t(v,{name:"pencil",size:13,strokeWidth:1.7,rounded:!0})}),a&&t(E,{kind:"delete",label:n("Delete “{name}”",{name:e.label}),disabled:p,onClick:()=>{ae(e)},children:t(v,{name:"trash",size:13,strokeWidth:1.7,rounded:!0})})]}):void 0;return t(U,{icon:t(Le,{}),name:e.label,selected:s,onSelect:()=>l(e.slug),preview:re,actions:le,rowProps:{"data-page-slug":e.slug}},e.id)},R=(e,s,a)=>{const r=a.filter(Boolean);if(r.length===0)return null;const f=te(e);return d(ie,{children:[t(we,{count:r.length,expanded:f,onToggle:()=>Z(e),children:s}),f&&r]},e)},j=(w?.rows??[]).filter(e=>G(e.label)).map(e=>{const s=i===e.key;return t(U,{icon:e.icon,name:e.label,selected:s,onSelect:()=>u(e.key),preview:t("span",{className:"sf-badge-preview",children:n("Preview")}),actions:t(E,{kind:"plain",label:n("Open the {name} in a new tab",{name:e.label}),onClick:()=>window.open(e.href,"_blank","noopener,noreferrer"),children:t(v,{name:"external-link",size:13,strokeWidth:1.7,rounded:!0})}),rowProps:{"data-shop-surface":e.key}},e.key)}),H=m.hasSiteSettings&&!!w,x=(()=>{if(o===null)return null;const e=[];let s=!1;for(const a of ee){H&&!s&&a.key.startsWith("system:")&&(e.push(R("shop",w.title,j)),s=!0);const r=a.key===ve||a.label===Ne?n(a.label):a.label;e.push(R(a.key,r,a.rows.map(oe)))}return H&&!s&&e.push(R("shop",w.title,j)),e})();return d("div",{className:"sf-pages",children:[t(me,{icon:t(ke,{}),title:n("Pages"),context:Y,actions:t(ge,{label:n("New page"),onClick:ne,children:t(ye,{size:15})}),onHide:b}),t("div",{className:"sf-pages-find",children:t($,{type:"search",leftIcon:t(v,{name:"search",size:14,rounded:!0}),placeholder:n("Search all pages…"),value:C,onChange:e=>V(e.target.value),"aria-label":n("Search all pages")})}),P&&!O&&t("div",{className:"sf-note sf-note--error",role:"alert",children:P}),x===null?t("div",{className:"sf-note",children:n("Loading…")}):x.some(Boolean)?t(be,{ariaLabel:n("Pages"),className:"sf-scroll",children:x}):t("div",{className:"sf-note",children:C.trim()?n("No pages match your search"):n("No pages yet. Add one with + above.")}),t(he,{open:O,onClose:()=>S(!1),size:"sm",title:n("Add a page"),description:n("Give the new template page a name. It starts blank — add sections once it opens."),footer:d(L,{children:[t(T,{variant:"secondary",onClick:()=>S(!1),children:n("Cancel")}),t(T,{onClick:()=>{W()},disabled:p||!h.trim(),loading:p,children:n("Add page")})]}),children:t(fe,{label:n("Page name"),htmlFor:z,hint:h.trim()?n("URL: /{slug}",{slug:K(h,B)}):void 0,error:P??void 0,children:t($,{id:z,value:h,invalid:!!P,onChange:e=>N(e.target.value),onKeyDown:e=>{e.key==="Enter"&&W()},placeholder:n("e.g. About")})})})]})}function Le(){return d("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:1.7,strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[t("path",{d:"M14 3H7a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V8z"}),t("path",{d:"M14 3v5h5"})]})}export{xe as default};
@@ -146,65 +146,13 @@
146
146
 
147
147
  /* ── Left panel: section tree (wraps Puck.Outline) ────────────────────── */
148
148
 
149
- /* EVERY SEAM THE TREE STACKS, and no bare number among them.
150
- The pairs are spelled out rather than written `> * + *` because the tree
151
- interleaves group labels and subtrees between its rows: a rule that only
152
- knows about `.sf-row` leaves those seams to whatever padding happens to be
153
- nearby, which looks governed and is not.
154
- `.sf-group-label` keeps its own `padding` and takes no margin here — it is a
155
- heading, and a heading's air is part of the heading. */
156
- .sf-tree > .sf-row + .sf-row,
157
- .sf-tree > .sf-subtree + .sf-row {
158
- margin-top: var(--es-rhythm-between);
159
- }
160
- .sf-row {
161
- display: flex;
162
- align-items: center;
163
- gap: 8px;
164
- /* ONE ROW, EVERY DEPTH (the owner's "One Ladder", 2026-09-04). The tree used
165
- to draw three: a top-level bar (11px/600 in a 1px outline), a nested bar
166
- (10.5px/600 on a mixed fill) and a leaf (11.5px/400). A merchant reading
167
- down the panel had to learn three shapes that all meant "a level". Depth is
168
- now said ONCE, by `.sf-subtree` — an indent and a hairline — and by nothing
169
- else, so a row's look never has to be decided twice. */
170
- padding: 7px 11px;
171
- border-radius: var(--sf-row-radius);
172
- cursor: pointer;
173
- transition: background 0.12s;
174
- /* Anchors the drop-indicator rules drawn during a drag-to-reorder, and the
175
- drag grip, which sits in this row's own left padding. */
176
- position: relative;
177
- /* THE GROUND THIS ROW IS PAINTED ON, as a value the row's own children can
178
- read. `.sf-row-actions` fades the name out beneath the hover eye/trash, and
179
- a fade has to end in the colour that is actually behind the row — which
180
- differs per state (plain, hovered, selected, bar, nested bar).
181
- Every rule that changes the row's background changes this in the SAME
182
- declaration block and then paints `background: var(--sf-row-scrim)`, so the
183
- two can never name different colours. A resting row paints nothing, so its
184
- ground is the panel it sits on. */
185
- --sf-row-scrim: var(--sf-panel);
186
- }
187
- .sf-row:hover {
188
- --sf-row-scrim: var(--sf-hover);
189
- background: var(--sf-row-scrim);
190
- }
191
- /* The Layers rows' drag / drop marks (the dimmed grabbed row, the before /
192
- after line, the drop-INTO box) and the group label are editor-shell's since
193
- redesign 2b (`.es-tree-row.is-*`, `.es-tree-group`). The `.sf-row` rules here
194
- serve the Pages list and the standalone section editor, which keep them. */
195
- .sf-row.is-selected {
196
- --sf-row-scrim: var(--sf-accent-tint);
197
- background: var(--sf-row-scrim);
198
- box-shadow: inset 2px 0 0 var(--sf-accent);
199
- }
200
- .sf-row.is-selected .sf-chip {
201
- background: var(--sf-raised);
202
- color: var(--sf-accent);
203
- }
204
- .sf-row.is-selected .sf-row-name {
205
- color: var(--sf-accent-text);
206
- font-weight: 600;
207
- }
149
+ /* `.sf-row`, its states and the `.sf-tree > .sf-row + …` seam WERE HERE. The
150
+ Layers rows became the shell's `TreeRow` in redesign 2b and the seam matched
151
+ nothing after; the Pages rows followed on 2026-10-13 (Lewis: "it is packed
152
+ too tight" — they touched, at two heights, 8 from the panel edge). Both
153
+ panels draw efficient-easel/tree on the shell's `Tree` now: rows 32 high
154
+ and 4 apart, a heading 8 above its first row, one inset of 12 a side.
155
+ `scripts/test-pages-panel-on-the-tree.ts` keeps the copy out. */
208
156
  /* `.sf-add-section` WAS HERE, and it is gone on purpose (card 66228). Lewis
209
157
  ruled on 2026-08-31 that ONE `+` in the top bar replaces every other add door
210
158
  — the drawing is `editor-add-and-context-v1.html` in the SHARED `mockups/`
@@ -1522,96 +1470,24 @@
1522
1470
  height: 100%;
1523
1471
  }
1524
1472
 
1525
- /* The left panel's search field. It had a second wearer — the Add panel's own
1526
- search (card 66400.c) — until that panel was deleted and the `+` was pointed
1527
- at the one picker; the picker has its own `.sf-addsearch`, sized for a 772px
1528
- dialog. So this is the Pages list's control alone again. */
1529
- .sf-pages-search {
1473
+ /* The Pages panel's search: the shell's `Input` with its glass inside the one
1474
+ field (so the dark theme paints one field, not a darker box inside a rounded
1475
+ one), on the tree's inset — its side 12 is the rows'. */
1476
+ .sf-pages-find {
1530
1477
  flex: none;
1531
- display: flex;
1532
- align-items: center;
1533
- gap: 7px;
1534
- margin: 0 12px 8px;
1535
- padding: 7px 10px;
1536
- background: var(--sf-track-bg);
1537
- border-radius: var(--radius-lg);
1538
- color: var(--sf-muted);
1539
- }
1540
- .sf-pages-search-input {
1541
- flex: 1;
1542
- min-width: 0;
1543
- border: none;
1544
- background: transparent;
1545
- font-family: var(--sf-font);
1546
- font-size: var(--text-sm);
1547
- color: var(--sf-text);
1548
- outline: none;
1549
- }
1550
- .sf-pages-search-input::placeholder {
1551
- color: var(--sf-muted);
1552
- }
1553
- .sf-pages-list {
1554
- flex: 1;
1555
- min-height: 0;
1556
- overflow-y: auto;
1557
- padding: 0 8px 8px;
1478
+ padding: 0 var(--space-12) var(--space-8);
1558
1479
  }
1559
- /* A note in this list is not the panel's body — it stands where a page row
1560
- would, so it takes the ROW's inset and lines up with the group heads above
1561
- it rather than with the panel edge. Placement only; the note style itself is
1562
- .sf-note. */
1563
- .sf-pages-list > .sf-note {
1480
+ /* A note stands where the tree would — Loading, nothing found, an error — so
1481
+ it takes the tree's inset. Placement only; the note style itself is .sf-note. */
1482
+ .sf-pages > .sf-note {
1483
+ margin: 0 var(--space-12);
1564
1484
  padding: 10px 12px;
1565
1485
  }
1566
- .sf-pages-list > .sf-note--error {
1567
- margin: 4px 4px 0;
1568
- }
1569
- .sf-pgroup {
1570
- margin-top: 2px;
1571
- }
1572
- .sf-pgroup-head {
1573
- width: 100%;
1574
- display: flex;
1575
- align-items: center;
1576
- gap: 7px;
1577
- padding: 8px 8px 6px;
1578
- border: none;
1579
- background: transparent;
1580
- cursor: pointer;
1581
- color: var(--sf-muted);
1582
- }
1583
- .sf-pgroup-head:hover {
1584
- color: var(--sf-text);
1585
- }
1586
- .sf-pgroup-label {
1587
- flex: 1;
1588
- text-align: left;
1589
- font-size: var(--text-2xs);
1590
- font-weight: 700;
1591
- letter-spacing: 0.4px;
1592
- text-transform: uppercase;
1593
- }
1594
- .sf-pgroup-count {
1595
- flex: none;
1596
- font-size: var(--text-2xs);
1597
- font-weight: 600;
1598
- color: var(--sf-muted);
1599
- background: var(--sf-track-bg);
1600
- border-radius: 999px;
1601
- padding: 1px 7px;
1602
- }
1603
- /* 4 between rows, the shell Tree's own row gap, so a hovered row next to the
1604
- selected one is two rounded shapes, never one block (Lewis, 2026-10-14). */
1605
- .sf-pgroup-body {
1606
- display: flex;
1607
- flex-direction: column;
1608
- gap: var(--space-4);
1609
- }
1610
- /* Page rows reuse .sf-row; anchors (Cart/Checkout) reset link chrome. */
1611
- .sf-prow {
1612
- text-decoration: none;
1613
- color: inherit;
1486
+ .sf-pages > .sf-note--error {
1487
+ margin-top: var(--space-4);
1614
1488
  }
1489
+ /* `.sf-pgroup*` and `.sf-prow` WERE HERE: the Pages headings are the shell's
1490
+ `TreeGroupLabel` (its count pill and fold), its rows the shell's `TreeRow`. */
1615
1491
  .sf-page-draft {
1616
1492
  flex: none;
1617
1493
  font-size: var(--text-2xs);
@@ -1642,36 +1518,9 @@
1642
1518
  color: var(--status-success-soft-ink);
1643
1519
  background: var(--status-success-soft);
1644
1520
  }
1645
- .sf-page-edit {
1646
- flex: none;
1647
- width: 24px;
1648
- height: 24px;
1649
- border: none;
1650
- background: transparent;
1651
- border-radius: var(--radius-md);
1652
- color: var(--sf-muted);
1653
- display: none;
1654
- align-items: center;
1655
- justify-content: center;
1656
- cursor: pointer;
1657
- }
1658
- .sf-row:hover .sf-page-edit,
1659
- .sf-row:focus-within .sf-page-edit {
1660
- display: flex;
1661
- }
1662
- .sf-page-edit:hover {
1663
- background: var(--sf-hover);
1664
- color: var(--sf-text);
1665
- }
1666
- /* Row hover-delete (template pages — inline page management). */
1667
- .sf-page-edit--danger:hover {
1668
- background: var(--sf-danger-tint);
1669
- color: var(--sf-danger);
1670
- }
1671
- .sf-page-edit--danger:disabled {
1672
- opacity: 0.5;
1673
- cursor: default;
1674
- }
1521
+ /* `.sf-page-edit` WAS HERE: a row's edit, delete and open-in-a-new-tab are
1522
+ efficient-easel's `TreeRowAction` (the shell's `IconButton` and `Tooltip`),
1523
+ laid over the end of the row on hover as on every Layers row. */
1675
1524
  /* "Preview" pill on Cart / Checkout — signals "opens the live page, view-only". */
1676
1525
  .sf-badge-preview {
1677
1526
  flex: none;
@@ -1685,44 +1534,9 @@
1685
1534
  background: var(--sf-preview-tint);
1686
1535
  }
1687
1536
 
1688
- /* ── Layers rows (redesign 2b) ──────────────────────────────────────────
1689
- The Layers tree's rows are editor-shell's `TreeRow` (efficient-easel/tree.css):
1690
- the name box with the eye and trash laid over its END (card 66199), the
1691
- hover / focus-within reveal, a hidden row's permanent eye, the grip in the
1692
- row's own left padding, the caret-or-spacer column (One Ladder), the drag and
1693
- drop marks and the rename box — all lifted from this sheet. What stays below
1694
- is `.sf-row-del`, which the standalone section editor's own rows still wear. */
1695
- /* Per-row delete — a hover-revealed trash on section, slot-child and
1696
- footer-block rows. Laid out inside `.sf-row-actions` above, invisible +
1697
- non-interactive until the row is hovered or a control inside it is focused,
1698
- so it stays out of the way of the visibility eye.
1699
- Deleting is a normal dispatch, so Undo restores the row. */
1700
- .sf-row-del {
1701
- width: 22px;
1702
- height: 22px;
1703
- border: none;
1704
- background: transparent;
1705
- border-radius: var(--radius-md);
1706
- cursor: pointer;
1707
- color: var(--sf-danger);
1708
- display: flex;
1709
- align-items: center;
1710
- justify-content: center;
1711
- opacity: 0;
1712
- pointer-events: none;
1713
- flex: none;
1714
- transition: opacity 0.12s, background 0.12s, color 0.12s;
1715
- }
1716
- .sf-row:hover .sf-row-del,
1717
- .sf-row:focus-within .sf-row-del {
1718
- opacity: 0.7;
1719
- pointer-events: auto;
1720
- }
1721
- .sf-row-del:hover {
1722
- opacity: 1;
1723
- background: var(--sf-danger-tint);
1724
- color: var(--sf-danger-strong);
1725
- }
1537
+ /* `.sf-row-del` WAS HERE, for "the standalone section editor's own rows",
1538
+ which have been efficient-easel's `TreeRow` with `TreeRowAction` since
1539
+ redesign 2b; nothing wore it. */
1726
1540
  .sf-panel-head-actions {
1727
1541
  display: flex;
1728
1542
  align-items: center;
@@ -2448,6 +2262,14 @@
2448
2262
  .sf-editor .sf-insp-body :is(.sf-slider, .sf-colour) input::placeholder {
2449
2263
  all: revert-layer;
2450
2264
  }
2265
+ /* The same roll-back for the Corners row's radius box (`.sf-corners`, the
2266
+ shell's CornersInput, plan W2): without it the old rule's padding put the
2267
+ number on top of "px". */
2268
+ .sf-editor .sf-insp-body .sf-corners input[type="text"],
2269
+ .sf-editor .sf-insp-body .sf-corners input[type="text"]:focus,
2270
+ .sf-editor .sf-insp-body .sf-corners input::placeholder {
2271
+ all: revert-layer;
2272
+ }
2451
2273
  /* The colour a row FOLLOWS, shown in its box in grey (option E): the grey is
2452
2274
  what says the setting has no colour of its own. After the roll-back above,
2453
2275
  and more specific than it, so the roll-back does not take the grey away. */
@@ -3218,7 +3040,8 @@
3218
3040
  }
3219
3041
 
3220
3042
  /* The nine-square grid moved into `efficient-easel/panel` as `SettingsPlacement`
3221
- (0.35.0), so the `.sf-focal*` rules that lived here are gone rather than left
3043
+ (0.35.0), and from there into efficient-shell as `AlignmentGrid` (#377, which
3044
+ web-builder 10.0.0 draws directly), so the `.sf-focal*` rules that lived here are gone rather than left
3222
3045
  as a second copy nobody would remember to update. The chosen cell also stopped
3223
3046
  being card 8811's tint on the way: the shell tells the chosen thing apart by
3224
3047
  being the darkest in the row on a grey track (66138 / 66302), and its suite
@@ -1,5 +1,5 @@
1
1
  import type { CSSProperties } from "react";
2
- export { CORNER_SIDES, CORNER_SIDE_POINTS, CORNER_SIDES_LABEL, cornerSidesShorthand, cornerSidesSummary, hasCornerSubset, normalizeCornerSides, type CornerSide, } from "./section-corners.js";
2
+ export { CORNER_SIDES, CORNER_SIDE_POINTS, cornerSidesShorthand, hasCornerSubset, normalizeCornerSides, type CornerSide, } from "./section-corners.js";
3
3
  export declare const CARD_BOX_RADIUS_PROP = "--sf-card-box-radius";
4
4
  export declare const SITE_CARD_RADIUS_PROP = "--sf-site-card-radius";
5
5
  export declare const CARD_FOLLOWS_SITE_CLASS = "sf-section-bleeds";
@@ -1 +1 @@
1
- import{cornerRadiusTokens as d,normalizeCornerRadius as S}from"../theme.js";import{CARD_RADIUS_PROP as t,cornerSidesShorthand as p,hasCornerSubset as u,normalizeCornerSides as c}from"./section-corners.js";import{CORNER_SIDES as E,CORNER_SIDE_POINTS as I,CORNER_SIDES_LABEL as b,cornerSidesShorthand as P,cornerSidesSummary as y,hasCornerSubset as L,normalizeCornerSides as N}from"./section-corners.js";const C="--sf-card-box-radius",a="--sf-site-card-radius",m="sf-section-bleeds";function f(r){return typeof r=="number"&&Number.isFinite(r)}function O(r,o){if(!f(r))return;const e=d(S(r))[t];if(typeof e!="string")return;const s=u(o)?p(e,c(o)??[]):e;return{[C]:s}}function x(r){const o=r[t];return typeof o=="string"?{[a]:o}:{}}function D(r,o){const e=r.find(n=>n?.props?.id===o);if(!e)return[...r];const s=e.props?.cardCorners,i=e.props?.cardCornerSides;return r.map(n=>n?.props?.id===o?n:{...n,props:{...n.props,cardCorners:s,cardCornerSides:i}})}export{C as CARD_BOX_RADIUS_PROP,m as CARD_FOLLOWS_SITE_CLASS,E as CORNER_SIDES,b as CORNER_SIDES_LABEL,I as CORNER_SIDE_POINTS,a as SITE_CARD_RADIUS_PROP,O as cardCornerStyle,D as cardsWithSharedCorners,P as cornerSidesShorthand,y as cornerSidesSummary,L as hasCornerSubset,f as hasOwnCardCorners,N as normalizeCornerSides,x as siteCardRadiusTokens};
1
+ import{cornerRadiusTokens as d,normalizeCornerRadius as p}from"../theme.js";import{CARD_RADIUS_PROP as t,cornerSidesShorthand as S,hasCornerSubset as u,normalizeCornerSides as c}from"./section-corners.js";import{CORNER_SIDES as b,CORNER_SIDE_POINTS as I,cornerSidesShorthand as P,hasCornerSubset as E,normalizeCornerSides as T}from"./section-corners.js";const C="--sf-card-box-radius",a="--sf-site-card-radius",m="sf-section-bleeds";function f(r){return typeof r=="number"&&Number.isFinite(r)}function x(r,o){if(!f(r))return;const e=d(p(r))[t];if(typeof e!="string")return;const s=u(o)?S(e,c(o)??[]):e;return{[C]:s}}function O(r){const o=r[t];return typeof o=="string"?{[a]:o}:{}}function h(r,o){const e=r.find(n=>n?.props?.id===o);if(!e)return[...r];const s=e.props?.cardCorners,i=e.props?.cardCornerSides;return r.map(n=>n?.props?.id===o?n:{...n,props:{...n.props,cardCorners:s,cardCornerSides:i}})}export{C as CARD_BOX_RADIUS_PROP,m as CARD_FOLLOWS_SITE_CLASS,b as CORNER_SIDES,I as CORNER_SIDE_POINTS,a as SITE_CARD_RADIUS_PROP,x as cardCornerStyle,h as cardsWithSharedCorners,P as cornerSidesShorthand,E as hasCornerSubset,f as hasOwnCardCorners,T as normalizeCornerSides,O as siteCardRadiusTokens};
@@ -8,9 +8,7 @@ export type CornerSide = (typeof CORNER_SIDES)[number];
8
8
  export declare function normalizeCornerSides(value: unknown): CornerSide[] | null;
9
9
  export declare function hasCornerSubset(value: unknown): boolean;
10
10
  export declare function cornerSidesShorthand(radius: string, sides: CornerSide[]): string;
11
- export declare const CORNER_SIDES_LABEL = "Which corners";
12
11
  export declare const CORNER_SIDE_POINTS: readonly {
13
12
  value: CornerSide;
14
13
  label: string;
15
14
  }[];
16
- export declare function cornerSidesSummary(sides: readonly CornerSide[]): string;
@@ -1 +1 @@
1
- import{cornerRadiusTokens as u,normalizeCornerRadius as c}from"../theme.js";function f(r){return typeof r=="number"&&Number.isFinite(r)}function R(r,t){if(!f(r))return;const n=u(c(r));if(Object.keys(n).length===0)return;const o=n[a];if(typeof o!="string")return n;const i=h(t)?b(o,l(t)??[]):o;return{...n,[s]:i}}const s="--sf-section-radius",a="--sf-card-radius",e=["tl","tr","br","bl"];function l(r){if(!Array.isArray(r))return null;const t=r.filter(n=>e.includes(n));return e.filter(n=>t.includes(n))}function h(r){const t=l(r);return t!==null&&t.length<e.length}function b(r,t){return e.map(n=>t.includes(n)?r:"0").join(" ")}const d="Which corners",p=[{value:"tl",label:"Top left"},{value:"tr",label:"Top right"},{value:"bl",label:"Bottom left"},{value:"br",label:"Bottom right"}];function g(r){const t=n=>r.includes(n);if(r.length===e.length)return"All four";if(r.length===0)return"None";if(r.length===1)return p.find(n=>n.value===r[0])?.label??"1 corner";if(r.length===2){if(t("tl")&&t("tr"))return"Top two";if(t("bl")&&t("br"))return"Bottom two";if(t("tl")&&t("bl"))return"Left two";if(t("tr")&&t("br"))return"Right two"}return`${r.length} corners`}export{a as CARD_RADIUS_PROP,e as CORNER_SIDES,d as CORNER_SIDES_LABEL,p as CORNER_SIDE_POINTS,s as SECTION_RADIUS_PROP,b as cornerSidesShorthand,g as cornerSidesSummary,h as hasCornerSubset,f as hasOwnSectionCorners,l as normalizeCornerSides,R as sectionCornerStyle};
1
+ import{cornerRadiusTokens as l,normalizeCornerRadius as u}from"../theme.js";function c(r){return typeof r=="number"&&Number.isFinite(r)}function S(r,t){if(!c(r))return;const e=l(u(r));if(Object.keys(e).length===0)return;const o=e[a];if(typeof o!="string")return e;const s=d(t)?p(o,i(t)??[]):o;return{...e,[f]:s}}const f="--sf-section-radius",a="--sf-card-radius",n=["tl","tr","br","bl"];function i(r){if(!Array.isArray(r))return null;const t=r.filter(e=>n.includes(e));return n.filter(e=>t.includes(e))}function d(r){const t=i(r);return t!==null&&t.length<n.length}function p(r,t){return n.map(e=>t.includes(e)?r:"0").join(" ")}const R=[{value:"tl",label:"Top left"},{value:"tr",label:"Top right"},{value:"bl",label:"Bottom left"},{value:"br",label:"Bottom right"}];export{a as CARD_RADIUS_PROP,n as CORNER_SIDES,R as CORNER_SIDE_POINTS,f as SECTION_RADIUS_PROP,p as cornerSidesShorthand,d as hasCornerSubset,c as hasOwnSectionCorners,i as normalizeCornerSides,S as sectionCornerStyle};
@@ -297,7 +297,6 @@ export declare const WEB_BUILDER_WORDS: {
297
297
  readonly "Copy over image": "Copy over image";
298
298
  readonly "Copying\u2026": "Copying…";
299
299
  readonly Corners: "Corners";
300
- readonly "Corners left off stay square. The row above sets how round the others are.": "Corners left off stay square. The row above sets how round the others are.";
301
300
  readonly "Couldn\u2019t add the page \u2014 please retry.": "Couldn’t add the page — please retry.";
302
301
  readonly "Couldn\u2019t delete the page \u2014 please retry.": "Couldn’t delete the page — please retry.";
303
302
  readonly "Couldn\u2019t duplicate the section \u2014 please retry": "Couldn’t duplicate the section — please retry";
@@ -380,7 +379,6 @@ export declare const WEB_BUILDER_WORDS: {
380
379
  readonly "Easy to read": "Easy to read";
381
380
  readonly Edit: "Edit";
382
381
  readonly "Edit {name}": "Edit {name}";
383
- readonly "Edit {name} in {place}": "Edit {name} in {place}";
384
382
  readonly "Edit \u201C{name}\u201D in {place}": "Edit “{name}” in {place}";
385
383
  readonly "Editing {name} changes it everywhere.": "Editing {name} changes it everywhere.";
386
384
  readonly "Editor only \u2014 not shown live": "Editor only — not shown live";
@@ -442,7 +440,6 @@ export declare const WEB_BUILDER_WORDS: {
442
440
  readonly "Follow the slideshow": "Follow the slideshow";
443
441
  readonly "Follows Desktop": "Follows Desktop";
444
442
  readonly "Follows no style \u2014 change": "Follows no style — change";
445
- readonly "Follows the section": "Follows the section";
446
443
  readonly "Follows the section's Corners until you set a number here.": "Follows the section's Corners until you set a number here.";
447
444
  readonly "Follows the site": "Follows the site";
448
445
  readonly "Follows the style": "Follows the style";
@@ -473,8 +470,8 @@ export declare const WEB_BUILDER_WORDS: {
473
470
  readonly "Gap only": "Gap only";
474
471
  readonly Ghost: "Ghost";
475
472
  readonly "Give the new template page a name. It starts blank \u2014 add sections once it opens.": "Give the new template page a name. It starts blank — add sections once it opens.";
476
- readonly "Gives the other card this card's Corners and Which corners.": "Gives the other card this card's Corners and Which corners.";
477
- readonly "Gives the other {n} cards this card's Corners and Which corners.": "Gives the other {n} cards this card's Corners and Which corners.";
473
+ readonly "Gives the other card this card's Corners.": "Gives the other card this card's Corners.";
474
+ readonly "Gives the other {n} cards this card's Corners.": "Gives the other {n} cards this card's Corners.";
478
475
  readonly Good: "Good";
479
476
  readonly "Greeting message": "Greeting message";
480
477
  readonly Grid: "Grid";
@@ -868,7 +865,6 @@ export declare const WEB_BUILDER_WORDS: {
868
865
  readonly Separator: "Separator";
869
866
  readonly "Series title": "Series title";
870
867
  readonly Serif: "Serif";
871
- readonly "Set a number above first \u2014 there is nothing to shape yet.": "Set a number above first — there is nothing to shape yet.";
872
868
  readonly "Set this card's corners first.": "Set this card's corners first.";
873
869
  readonly "Shadow color": "Shadow color";
874
870
  readonly Shape: "Shape";
@@ -1091,7 +1087,6 @@ export declare const WEB_BUILDER_WORDS: {
1091
1087
  readonly "What people *say.*": "What people *say.*";
1092
1088
  readonly WhatsApp: "WhatsApp";
1093
1089
  readonly "Whether this page sits on the site's content column, or runs edge to edge.": "Whether this page sits on the site's content column, or runs edge to edge.";
1094
- readonly "Which corners": "Which corners";
1095
1090
  readonly "Whole number Theme Color": "Whole number Theme Color";
1096
1091
  readonly "Wide (2:1)": "Wide (2:1)";
1097
1092
  readonly "Wide promo strip with background image.": "Wide promo strip with background image.";
@@ -1,11 +1,11 @@
1
1
  const e={"$ efficient …":"$ efficient …","0 min":"0 min","0 min read":"0 min read","01 / Section":"01 / Section","100s":"100s","1st rendering":"1st rendering","2nd rendering":"2nd rendering","30-day returns":"30-day returns","3rd rendering":"3rd rendering","4th rendering":"4th rendering","5th rendering":"5th rendering","A 'Show us yours.' headline with a photo-submission form.":"A 'Show us yours.' headline with a photo-submission form.","A big headline beside a stack of call-to-action buttons.":"A big headline beside a stack of call-to-action buttons.","A bold brand statement beside a full-height image, with a stat strip.":"A bold brand statement beside a full-height image, with a stat strip.","A call-to-action button.":"A call-to-action button.","A card's opening picture — a card pinned to a finish keeps its own.":"A card's opening picture — a card pinned to a finish keeps its own.","A centered 'ready to order?' headline with the checkout button.":"A centered 'ready to order?' headline with the checkout button.","A chat bubble on every page":"A chat bubble on every page","A corner would need a diagonal ramp, which this overlay does not draw.":"A corner would need a diagonal ramp, which this overlay does not draw.","A detail line":"A detail line","A display order-summary panel — items, totals and a note.":"A display order-summary panel — items, totals and a note.","A document header — headline, metadata and standfirst.":"A document header — headline, metadata and standfirst.","A featured article — big cover image beside a headline and dek.":"A featured article — big cover image beside a headline and dek.","A fitment table — per-size bolt patterns, offsets and load ratings, filterable by diameter.":"A fitment table — per-size bolt patterns, offsets and load ratings, filterable by diameter.","A frequently-asked-questions accordion with a header.":"A frequently-asked-questions accordion with a header.","A full product-listing page: filter rail, sortable card grid and pagination, from the live catalog. Choose which product types it shows.":"A full product-listing page: filter rail, sortable card grid and pagination, from the live catalog. Choose which product types it shows.","A heading over a grid of free-text title-and-blurb cards.":"A heading over a grid of free-text title-and-blurb cards.","A heading over columns of image, title, blurb and specs.":"A heading over columns of image, title, blurb and specs.","A headline beside a stylized product-UI mockup card — spec sheet, fitment, portal, kanban and more.":"A headline beside a stylized product-UI mockup card — spec sheet, fitment, portal, kanban and more.","A horizontal year track of milestones — company history or roadmap.":"A horizontal year track of milestones — company history or roadmap.","A journal issue header with a lead statement and contents.":"A journal issue header with a lead statement and contents.","A line or two of supporting copy.":"A line or two of supporting copy.","A long-form article spread with a pull-quote and cover image.":"A long-form article spread with a pull-quote and cover image.","A marquee cannot run diagonally, so the corners are not answers.":"A marquee cannot run diagonally, so the corners are not answers.","A milestone still to come.":"A milestone still to come.","A newsletter signup beside a list of recent issues.":"A newsletter signup beside a list of recent issues.","A newsletter signup beside your latest blog posts, pulled live.":"A newsletter signup beside your latest blog posts, pulled live.","A numbered section title with optional link.":"A numbered section title with optional link.","A paragraph of body copy.":"A paragraph of body copy.","A payment-methods trust strip with reassurance lines.":"A payment-methods trust strip with reassurance lines.","A picture worth\n*a thousand rows.*":`A picture worth
2
- *a thousand rows.*`,"A plain editorial text section — eyebrow, heading and body copy.":"A plain editorial text section — eyebrow, heading and body copy.","A product hero — image beside price, bullets and a buy button.":"A product hero — image beside price, bullets and a buy button.","A row of partner or brand logos.":"A row of partner or brand logos.","A scrolling marquee of short phrases, full width.":"A scrolling marquee of short phrases, full width.","A second customer quote — what they loved, in a sentence or two.":"A second customer quote — what they loved, in a sentence or two.","A section heading over a grid of column cards.":"A section heading over a grid of column cards.","A sentence or two of supporting copy.":"A sentence or two of supporting copy.","A short customer quote goes here — replace it with a real testimonial from your customers.":"A short customer quote goes here — replace it with a real testimonial from your customers.","A short customer quote goes here.":"A short customer quote goes here.","A short description of this recurring column.":"A short description of this recurring column.","A short lead paragraph introducing this section — a sentence or two about its theme.":"A short lead paragraph introducing this section — a sentence or two about its theme.","A short line about this card.":"A short line about this card.","A short line about this milestone.":"A short line about this milestone.","A short name so a link can jump straight to this section, like yoursite.com/page#about.":"A short name so a link can jump straight to this section, like yoursite.com/page#about.","A short pull quote.":"A short pull quote.","A short reassurance note under the total.":"A short reassurance note under the total.","A short summary of the article goes here.":"A short summary of the article goes here.","A short summary of the featured article — one or two sentences that draw the reader in.":"A short summary of the featured article — one or two sentences that draw the reader in.","A short summary of the post — one or two sentences.":"A short summary of the post — one or two sentences.","A single heading line.":"A single heading line.","A slim trail showing where the reader is (Home / Journal…).":"A slim trail showing where the reader is (Home / Journal…).","A spec sheet — labeled rows of product specifications.":"A spec sheet — labeled rows of product specifications.","A standalone image, at the width you set.":"A standalone image, at the width you set.","A sticky row of category tabs with counts and links.":"A sticky row of category tabs with counts and links.","A sticky tab bar to switch between documents.":"A sticky tab bar to switch between documents.","A template is a blueprint — it has no website of its own, so there is nothing here to change.":"A template is a blueprint — it has no website of its own, so there is nothing here to change.","A theme-color chip and heading over a grid of short feature labels.":"A theme-color chip and heading over a grid of short feature labels.","A thin horizontal rule between sections.":"A thin horizontal rule between sections.","A thin one-line spec strip — small-caps items spread across the width, as a dark band or a bare hairline row.":"A thin one-line spec strip — small-caps items spread across the width, as a dark band or a bare hairline row.","A third short quote to round out the row.":"A third short quote to round out the row.","A three-up meta strip for the foot of a document.":"A three-up meta strip for the foot of a document.","A titled chart — bars, line or donut — drawn from your own labeled data points.":"A titled chart — bars, line or donut — drawn from your own labeled data points.","A vehicle picker — make, model, year and trim resolve the OEM stock fitment live.":"A vehicle picker — make, model, year and trim resolve the OEM stock fitment live.","A world map of your locations with a legend — designed here, sold worldwide.":"A world map of your locations with a legend — designed here, sold worldwide.","A write-a-review form — submissions wait for your approval before they show.":"A write-a-review form — submissions wait for your approval before they show.","About & brand story":"About & brand story",Accent:"Accent","Accent button":"Accent button","Accent footnote":"Accent footnote","Active tab":"Active tab","Add a *headline* for this post.":"Add a *headline* for this post.","Add a *headline* for this story.":"Add a *headline* for this story.","Add a page":"Add a page","Add a sentence or two introducing this document.":"Add a sentence or two introducing this document.","Add a sentence or two of supporting copy.":"Add a sentence or two of supporting copy.","Add a short heading.":"Add a short heading.","Add a short statement here — a sentence or two is plenty.":"Add a short statement here — a sentence or two is plenty.","Add an office in the inspector":"Add an office in the inspector","Add another question":"Add another question","Add city":"Add city","Add group":"Add group","Add new theme":"Add new theme","Add page":"Add page","Add slide":"Add slide","Add this section's copy here.":"Add this section's copy here.","Add this section's copy here. A blank line starts a new paragraph.":"Add this section's copy here. A blank line starts a new paragraph.","Add your answer here — a sentence or two is plenty.":"Add your answer here — a sentence or two is plenty.","Add your answer here.":"Add your answer here.","Add your answer here. Keep it clear and concise so it stays easy to scan.":"Add your answer here. Keep it clear and concise so it stays easy to scan.","Add your first question":"Add your first question","Add your numbers.":"Add your numbers.",Address:"Address",After:"After",Alignment:"Alignment",All:"All","Alt text":"Alt text","Alternating (zig-zag)":"Alternating (zig-zag)",Amount:"Amount","An editorial aside beside a rail-marked timeline of dated entries.":"An editorial aside beside a rail-marked timeline of dated entries.","An editorial heading and paragraph over a row of theme-color-accented stat cards.":"An editorial heading and paragraph over a row of theme-color-accented stat cards.","An editorial text panel with a stat strip and founders' note.":"An editorial text panel with a stat strip and founders' note.","An empty section. Add whatever you want inside.":"An empty section. Add whatever you want inside.",Anchor:"Anchor","Anchor name":"Anchor name","Another group already uses this heading — pick a different one.":"Another group already uses this heading — pick a different one.",Answer:"Answer","Any color":"Any color",App:"App","App chips":"App chips","App name":"App name",Appearance:"Appearance","Appearance settings belong to a website.":"Appearance settings belong to a website.","Applied to {n} card":"Applied to {n} card","Applied to {n} cards":"Applied to {n} cards","Apply to all cards":"Apply to all cards","Approved customer reviews in a star-rated card grid, pulled live.":"Approved customer reviews in a star-rated card grid, pulled live.",Arrow:"Arrow",Arrows:"Arrows",Article:"Article","Article *headline* goes here.":"Article *headline* goes here.","Article Text":"Article Text","Article headline":"Article headline","As designed":"As designed","As shot":"As shot","As typed":"As typed","As uploaded":"As uploaded","Aspect ratio":"Aspect ratio","At zero":"At zero",Attribution:"Attribution",Auto:"Auto","Auto = the accent phrase takes the heading's own weight.":"Auto = the accent phrase takes the heading's own weight.","Auto = this style states no size, and text following it keeps the size its section drew.":"Auto = this style states no size, and text following it keeps the size its section drew.","Auto contrast":"Auto contrast","Auto-advance slides":"Auto-advance slides","Auto-fills the cover image, headline, dek, date and link from this post each time you open the editor. Those fields are hidden while a post is linked; the remaining fields stay yours to set.":"Auto-fills the cover image, headline, dek, date and link from this post each time you open the editor. Those fields are hidden while a post is linked; the remaining fields stay yours to set.","Auto-slide":"Auto-slide","Avg rating":"Avg rating",Background:"Background","Background image":"Background image","Background images":"Background images","Background video":"Background video",Badge:"Badge",Banner:"Banner","Banner headline":"Banner headline",Bar:"Bar",Bare:"Bare",Bars:"Bars","Bars (comparison / funnel)":"Bars (comparison / funnel)","Bars heading":"Bars heading",Basics:"Basics",Before:"Before","Begin reading":"Begin reading","Below picture":"Below picture","Big first":"Big first","Big left":"Big left","Big right":"Big right","Big stat":"Big stat","Bigger left":"Bigger left","Bigger right":"Bigger right","Black and white":"Black and white","Black and white logos":"Black and white logos",Block:"Block","Block gap":"Block gap","Block spacing":"Block spacing","Block widths":"Block widths","Blog & journal":"Blog & journal","Blog post":"Blog post","Blog post source":"Blog post source",Body:"Body",Bold:"Bold","Bold is the weight above — one value, two ways to set it.":"Bold is the weight above — one value, two ways to set it.","Bold word":"Bold word","Booking Form":"Booking Form",Borders:"Borders",Bottom:"Bottom","Bottom center":"Bottom center","Bottom left":"Bottom left","Bottom right":"Bottom right",Box:"Box","Box name":"Box name","Brand Strip":"Brand Strip","Brand Text":"Brand Text","Brand name":"Brand name",Breadcrumb:"Breadcrumb",Brick:"Brick","Browser mock":"Browser mock","Browser storefront (hero + tiles)":"Browser storefront (hero + tiles)","Build this footer out of Boxes and blocks, like a page: the same menus, signup, social links and logo, with the copyright as a Legal Line. Your current footer is kept.":"Build this footer out of Boxes and blocks, like a page: the same menus, signup, social links and logo, with the copyright as a Legal Line. Your current footer is kept.","Bundle Products":"Bundle Products",Button:"Button","Button Right Text":"Button Right Text","Button color":"Button color","Button label":"Button label","Button link":"Button link","Button text color":"Button text color",Buttons:"Buttons","Buy button":"Buy button","By the *numbers*":"By the *numbers*","By the numbers":"By the numbers","Call-to-Action Heading":"Call-to-Action Heading",Cancel:"Cancel",Capitals:"Capitals","Caps the biggest heading on the site. Auto = each section's own.":"Caps the biggest heading on the site. Auto = each section's own.",Caption:"Caption",Card:"Card","Card body":"Card body","Card button":"Card button","Card header strip":"Card header strip","Card height":"Card height","Card image":"Card image","Card layout":"Card layout","Card link":"Card link","Card number":"Card number","Card outline":"Card outline","Card shadow":"Card shadow","Card subtitle":"Card subtitle","Card title":"Card title","Card title one":"Card title one","Card title three":"Card title three","Card title two":"Card title two","Card type":"Card type",Cards:"Cards",Cart:"Cart","Catalog Filter Bar":"Catalog Filter Bar",Category:"Category","Category Bar":"Category Bar","Category bar":"Category bar","Cell width":"Cell width",Center:"Center","Changes apply to all selected.":"Changes apply to all selected.",Chart:"Chart","Chart style":"Chart style","Chat with us":"Chat with us","Checkout & ordering":"Checkout & ordering","Chip label":"Chip label","Choose a background image first — there’s nothing to focus yet.":"Choose a background image first — there’s nothing to focus yet.","Choose a page":"Choose a page","Choose a post":"Choose a post","Choose a product":"Choose a product","Choose a section":"Choose a section","Cities in this group":"Cities in this group",City:"City","City strip":"City strip","Claims bars":"Claims bars","Claims panel (rows + defect bars)":"Claims panel (rows + defect bars)",Clear:"Clear","Clear change":"Clear change","Clear change: {label}":"Clear change: {label}","Clear colors":"Clear colors","Clear formatting":"Clear formatting","Clear override":"Clear override","Clear override: {label}":"Clear override: {label}","Clear this site’s colors?":"Clear this site’s colors?","Clear {what}":"Clear {what}","Clear {what}: {label}":"Clear {what}: {label}",Collections:"Collections",Color:"Color","Column *title.*":"Column *title.*","Column 1 cards":"Column 1 cards","Column 1 title":"Column 1 title","Column 2 cards":"Column 2 cards","Column 2 title":"Column 2 title","Column 3 cards":"Column 3 cards","Column 3 title":"Column 3 title","Column 4 cards":"Column 4 cards","Column 4 title":"Column 4 title","Column {n}":"Column {n}",Columns:"Columns","Columns on phone":"Columns on phone",Compressed:"Compressed","Contact / Locations":"Contact / Locations","Contact Form":"Contact Form","Contact, FAQ & forms":"Contact, FAQ & forms",Contain:"Contain",Contained:"Contained",Content:"Content","Content position":"Content position","Content width":"Content width",Contents:"Contents","Contents heading":"Contents heading","Contents label":"Contents label",Coordinates:"Coordinates","Coordinates from OpenStreetMap":"Coordinates from OpenStreetMap","Copy above image":"Copy above image","Copy over image":"Copy over image","Copying…":"Copying…",Corners:"Corners","Corners left off stay square. The row above sets how round the others are.":"Corners left off stay square. The row above sets how round the others are.","Couldn’t add the page — please retry.":"Couldn’t add the page — please retry.","Couldn’t delete the page — please retry.":"Couldn’t delete the page — please retry.","Couldn’t duplicate the section — please retry":"Couldn’t duplicate the section — please retry","Couldn’t load pages":"Couldn’t load pages","Couldn’t open the media picker — please try again.":"Couldn’t open the media picker — please try again.","Couldn’t open this section.":"Couldn’t open this section.","Couldn’t reach {place}.":"Couldn’t reach {place}.",Count:"Count",Countdown:"Countdown",Country:"Country","Country Switch":"Country Switch",Cover:"Cover","Cover image":"Cover image","Cross ✕":"Cross ✕",Crumbs:"Crumbs","Current page":"Current page","Custom HTML":"Custom HTML","Custom URL":"Custom URL","Customer Photo Grid":"Customer Photo Grid","Customer name":"Customer name","Customer photos in a card grid with a click-to-open lightbox.":"Customer photos in a card grid with a click-to-open lightbox.","Customer quotes in a grid — the quote, a name and a role.":"Customer quotes in a grid — the quote, a name and a role.",Dark:"Dark","Dark band":"Dark band",Darken:"Darken","Darken style":"Darken style","Data points":"Data points",Date:"Date","Deck / standfirst":"Deck / standfirst",Default:"Default","Defect rate by product":"Defect rate by product",Dek:"Dek","Delete city":"Delete city","Delete group ({n} cities)":"Delete group ({n} cities)","Delete group ({n} city)":"Delete group ({n} city)","Delete {label} group ({n} cities)":"Delete {label} group ({n} cities)","Delete {label} group ({n} city)":"Delete {label} group ({n} city)","Delete {name}":"Delete {name}","Delete “{name}”":"Delete “{name}”",Delivery:"Delivery","Delivery Options":"Delivery Options","Delivery tiers as cards — name, window and price, one highlighted.":"Delivery tiers as cards — name, window and price, one highlighted.","Describe this section in a sentence or two.":"Describe this section in a sentence or two.","Describe this step in a sentence or two.":"Describe this step in a sentence or two.","Describe what happened, in a sentence or two.":"Describe what happened, in a sentence or two.",Detail:"Detail","Detail line":"Detail line",Direction:"Direction","Directions link":"Directions link","Dismiss link":"Dismiss link",Display:"Display",Divider:"Divider","Document Detail Cards":"Document Detail Cards","Document Header":"Document Header","Document Tabs":"Document Tabs","Document Text":"Document Text","Document body":"Document body","Document masthead":"Document masthead","Document tabs":"Document tabs",Done:"Done","Done {name}":"Done {name}","Donut (split of a whole)":"Donut (split of a whole)","Dot ●":"Dot ●",Dots:"Dots",Down:"Down","Drop in your own sanitized HTML.":"Drop in your own sanitized HTML.","Duplicate section":"Duplicate section","Duplicate to another page":"Duplicate to another page","Duplicate to page":"Duplicate to page","Duplicated to “{name}”":"Duplicated to “{name}”",Dynamic:"Dynamic","Dynamic Pages":"Dynamic Pages","EU Tyre Label":"EU Tyre Label","Each block":"Each block","Each website created from this template sets its own appearance afterwards.":"Each website created from this template sets its own appearance afterwards.","Each website created from this template sets its own header afterwards.":"Each website created from this template sets its own header afterwards.","Each website created from this template sets its own live chat afterwards.":"Each website created from this template sets its own live chat afterwards.","Each website created from this template sets its own social link afterwards.":"Each website created from this template sets its own social link afterwards.","Each website created from this template sets its own {what} afterwards.":"Each website created from this template sets its own {what} afterwards.","Easy to read":"Easy to read",Edit:"Edit","Edit {name}":"Edit {name}","Edit {name} in {place}":"Edit {name} in {place}","Edit “{name}” in {place}":"Edit “{name}” in {place}","Editing {name} changes it everywhere.":"Editing {name} changes it everywhere.","Editor only — not shown live":"Editor only — not shown live",Editorial:"Editorial","Editorial Text":"Editorial Text",Email:"Email","Email Form":"Email Form","Email signup":"Email signup",Empty:"Empty",End:"End",Ends:"Ends","Enter coordinates manually":"Enter coordinates manually",Entrance:"Entrance",Entries:"Entries","Entries count":"Entries count",Equal:"Equal",Essay:"Essay",Even:"Even","Every {part} in this section follows it. The face and the size change; the letter case is the section’s own and stays as it is.":"Every {part} in this section follows it. The face and the size change; the letter case is the section’s own and stays as it is.","Everything else on this block comes from the linked post. Unlink it to edit by hand.":"Everything else on this block comes from the linked post. Unlink it to edit by hand.",Excerpt:"Excerpt",Eyebrow:"Eyebrow","Eyebrow style":"Eyebrow style",Facebook:"Facebook",Fade:"Fade",Feature:"Feature","Feature Banner":"Feature Banner","Feature Rows":"Feature Rows","Feature label":"Feature label","Feature label five":"Feature label five","Feature label four":"Feature label four","Feature label one":"Feature label one","Feature label six":"Feature label six","Feature label three":"Feature label three","Feature label two":"Feature label two","Feature story":"Feature story",Featured:"Featured","Featured *image*":"Featured *image*","Featured cover":"Featured cover",Features:"Features",Feedback:"Feedback","Field label":"Field label","Field notes":"Field notes",Filled:"Filled","Filters the collection grids below it — a sticky row of Pills (the default), or Columns, one per filter you switch on.":"Filters the collection grids below it — a sticky row of Pills (the default), or Columns, one per filter you switch on.","Find coordinates":"Find coordinates","Finding…":"Finding…","Fine print":"Fine print","Finish swatches":"Finish swatches","Finish · Size · ×1":"Finish · Size · ×1","First item":"First item","First section":"First section","Fit content":"Fit content","Fitment Form":"Fitment Form","Fitment Table":"Fitment Table",Fixed:"Fixed","Fixed size — the site’s Text setting doesn’t resize this.":"Fixed size — the site’s Text setting doesn’t resize this.","Follow the page":"Follow the page","Follow the slideshow":"Follow the slideshow","Follows Desktop":"Follows Desktop","Follows no style — change":"Follows no style — change","Follows the section":"Follows the section","Follows the section's Corners until you set a number here.":"Follows the section's Corners until you set a number here.","Follows the site":"Follows the site","Follows the style":"Follows the style","Follows {name} — change":"Follows {name} — change",Font:"Font","Footer Box":"Footer Box",Footnote:"Footnote",Form:"Form","Form eyebrow":"Form eyebrow","Form heading":"Form heading","Form intro":"Form intro","Formatting — click a row first":"Formatting — click a row first","Formatting — row {n}":"Formatting — row {n}",Founders:"Founders","Founders heading":"Founders heading","Founders statement":"Founders statement","Four across":"Four across","Four stagger":"Four stagger",Frequency:"Frequency","Frequently *asked.*":"Frequently *asked.*","From the bottom":"From the bottom",Full:"Full","Full width":"Full width","Full-bleed intro image the next section scrolls over.":"Full-bleed intro image the next section scrolls over.","Full-screen image or video with a headline.":"Full-screen image or video with a headline.","Full-screen opener with rotating slides.":"Full-screen opener with rotating slides.",Gap:"Gap","Gap only":"Gap only",Ghost:"Ghost","Give the new template page a name. It starts blank — add sections once it opens.":"Give the new template page a name. It starts blank — add sections once it opens.","Gives the other card this card's Corners and Which corners.":"Gives the other card this card's Corners and Which corners.","Gives the other {n} cards this card's Corners and Which corners.":"Gives the other {n} cards this card's Corners and Which corners.",Good:"Good","Greeting message":"Greeting message",Grid:"Grid",Group:"Group","Group heading":"Group heading","Group name":"Group name",H1:"H1",H2:"H2",H3:"H3",H4:"H4",H5:"H5",H6:"H6",HQ:"HQ",HTML:"HTML",Hairline:"Hairline","Hairline borders":"Hairline borders","Hand-picked products in a tidy grid.":"Hand-picked products in a tidy grid.","Hard to read":"Hard to read",Header:"Header","Header badge":"Header badge","Header settings belong to a website.":"Header settings belong to a website.",Heading:"Heading","Heading 1":"Heading 1","Heading 2":"Heading 2","Heading 3":"Heading 3","Heading font size":"Heading font size",Headings:"Headings",Headquarters:"Headquarters",Height:"Height",Hero:"Hero","Hero & intros":"Hero & intros","Hero Slide":"Hero Slide","Hero Slideshow":"Hero Slideshow","Hero button":"Hero button","Hero image":"Hero image","Hero line":"Hero line","Hidden on the page":"Hidden on the page","Hide manual coordinates":"Hide manual coordinates","Hide {label} on the slide":"Hide {label} on the slide",Highlight:"Highlight","Highlight key numbers — years, designs.":"Highlight key numbers — years, designs.","Highlight line":"Highlight line",Hint:"Hint","Hold video":"Hold video",Home:"Home","Hours, minutes and seconds to a set date and time, then one line.":"Hours, minutes and seconds to a set date and time, then one line.","Hover effect":"Hover effect","Illustrative example":"Illustrative example",Image:"Image","Image & Text Columns":"Image & Text Columns","Image & Text Split":"Image & Text Split","Image background":"Image background","Image caption":"Image caption","Image column":"Image column","Image date":"Image date","Image fit":"Image fit","Image focus":"Image focus","Image label":"Image label","Image left":"Image left","Image meta":"Image meta","Image right":"Image right","Image side":"Image side","Image stage":"Image stage","Image tint":"Image tint","Image width":"Image width","In its own box":"In its own box","In progress (accent)":"In progress (accent)","In the product":"In the product","In this issue":"In this issue","In this section":"In this section","In your own time zone. Every visitor counts down to the same moment.":"In your own time zone. Every visitor counts down to the same moment.",Instagram:"Instagram",Integrations:"Integrations","Integrations Grid":"Integrations Grid",Interview:"Interview",Intro:"Intro","Introduce your company in a paragraph or two.":"Introduce your company in a paragraph or two.","Issue Header":"Issue Header","Issue lines":"Issue lines","Issue meta lines":"Issue meta lines",Italic:"Italic","Italic is not saved yet — the theme row has no column for it (card 66162.b).":"Italic is not saved yet — the theme row has no column for it (card 66162.b).",Item:"Item","Item alignment":"Item alignment",Items:"Items","Items from":"Items from","Its own":"Its own","Its size follows Site styles ▸ {follows} — {px}px right now.":"Its size follows Site styles ▸ {follows} — {px}px right now.","Its size follows Site styles ▸ {follows}.":"Its size follows Site styles ▸ {follows}.","Job card label":"Job card label",Join:"Join","Jumps to a section on that page.":"Jumps to a section on that page.",Justify:"Justify","Kanban board (job columns)":"Kanban board (job columns)","Kanban columns":"Kanban columns","Keep this section's own built-in size":"Keep this section's own built-in size","Key *features.*":"Key *features.*","Key Features":"Key Features",LINE:"LINE",LIVE:"LIVE",Label:"Label","Label color":"Label color",Labels:"Labels",Ladder:"Ladder",Large:"Large","Large text only":"Large text only","Largest size":"Largest size","Latest Posts":"Latest Posts","Latest journal posts in a three-card row.":"Latest journal posts in a three-card row.",Latitude:"Latitude",Layout:"Layout","Layout & structure":"Layout & structure","Layout, structure & embeds":"Layout, structure & embeds",Lead:"Lead","Lead Text":"Lead Text","Learn more":"Learn more","Leave a blank line between paragraphs to start a new one.":"Leave a blank line between paragraphs to start a new one.","Leave a field blank to use the built-in wording.":"Leave a field blank to use the built-in wording.",Left:"Left","Left of the copy":"Left of the copy","Legal & documents":"Legal & documents","Legal Line":"Legal Line",Level:"Level",Lift:"Lift",Lifted:"Lifted",Light:"Light",Lightbox:"Lightbox","Limited release":"Limited release",Line:"Line","Line & text gap":"Line & text gap","Line (trend)":"Line (trend)","Line gap {line} · text gap {letter}em.":"Line gap {line} · text gap {letter}em.",Link:"Link","Linked to a blog post. This editor has no blog to pick another from; choose “None (manual)” to author the section yourself.":"Linked to a blog post. This editor has no blog to pick another from; choose “None (manual)” to author the section yourself.","Linked to “{name}”":"Linked to “{name}”",LinkedIn:"LinkedIn",Links:"Links","Links to":"Links to",List:"List","Live chat":"Live chat","Live chat settings belong to a website.":"Live chat settings belong to a website.","Loading…":"Loading…","Location name":"Location name",Locations:"Locations","Locations Map":"Locations Map",Logo:"Logo","Logo alt text":"Logo alt text","Logo color":"Logo color","Logo description":"Logo description","Logo five":"Logo five","Logo four":"Logo four","Logo height":"Logo height","Logo image":"Logo image","Logo one":"Logo one","Logo three":"Logo three","Logo two":"Logo two",Logos:"Logos","Long read":"Long read","Long-form document body with an 'On this page' contents list.":"Long-form document body with an 'On this page' contents list.",Longitude:"Longitude",Look:"Look",Main:"Main","Main Pages":"Main Pages","Main color":"Main color","Main heading":"Main heading","Main heading\n*Highlight line*":`Main heading
2
+ *a thousand rows.*`,"A plain editorial text section — eyebrow, heading and body copy.":"A plain editorial text section — eyebrow, heading and body copy.","A product hero — image beside price, bullets and a buy button.":"A product hero — image beside price, bullets and a buy button.","A row of partner or brand logos.":"A row of partner or brand logos.","A scrolling marquee of short phrases, full width.":"A scrolling marquee of short phrases, full width.","A second customer quote — what they loved, in a sentence or two.":"A second customer quote — what they loved, in a sentence or two.","A section heading over a grid of column cards.":"A section heading over a grid of column cards.","A sentence or two of supporting copy.":"A sentence or two of supporting copy.","A short customer quote goes here — replace it with a real testimonial from your customers.":"A short customer quote goes here — replace it with a real testimonial from your customers.","A short customer quote goes here.":"A short customer quote goes here.","A short description of this recurring column.":"A short description of this recurring column.","A short lead paragraph introducing this section — a sentence or two about its theme.":"A short lead paragraph introducing this section — a sentence or two about its theme.","A short line about this card.":"A short line about this card.","A short line about this milestone.":"A short line about this milestone.","A short name so a link can jump straight to this section, like yoursite.com/page#about.":"A short name so a link can jump straight to this section, like yoursite.com/page#about.","A short pull quote.":"A short pull quote.","A short reassurance note under the total.":"A short reassurance note under the total.","A short summary of the article goes here.":"A short summary of the article goes here.","A short summary of the featured article — one or two sentences that draw the reader in.":"A short summary of the featured article — one or two sentences that draw the reader in.","A short summary of the post — one or two sentences.":"A short summary of the post — one or two sentences.","A single heading line.":"A single heading line.","A slim trail showing where the reader is (Home / Journal…).":"A slim trail showing where the reader is (Home / Journal…).","A spec sheet — labeled rows of product specifications.":"A spec sheet — labeled rows of product specifications.","A standalone image, at the width you set.":"A standalone image, at the width you set.","A sticky row of category tabs with counts and links.":"A sticky row of category tabs with counts and links.","A sticky tab bar to switch between documents.":"A sticky tab bar to switch between documents.","A template is a blueprint — it has no website of its own, so there is nothing here to change.":"A template is a blueprint — it has no website of its own, so there is nothing here to change.","A theme-color chip and heading over a grid of short feature labels.":"A theme-color chip and heading over a grid of short feature labels.","A thin horizontal rule between sections.":"A thin horizontal rule between sections.","A thin one-line spec strip — small-caps items spread across the width, as a dark band or a bare hairline row.":"A thin one-line spec strip — small-caps items spread across the width, as a dark band or a bare hairline row.","A third short quote to round out the row.":"A third short quote to round out the row.","A three-up meta strip for the foot of a document.":"A three-up meta strip for the foot of a document.","A titled chart — bars, line or donut — drawn from your own labeled data points.":"A titled chart — bars, line or donut — drawn from your own labeled data points.","A vehicle picker — make, model, year and trim resolve the OEM stock fitment live.":"A vehicle picker — make, model, year and trim resolve the OEM stock fitment live.","A world map of your locations with a legend — designed here, sold worldwide.":"A world map of your locations with a legend — designed here, sold worldwide.","A write-a-review form — submissions wait for your approval before they show.":"A write-a-review form — submissions wait for your approval before they show.","About & brand story":"About & brand story",Accent:"Accent","Accent button":"Accent button","Accent footnote":"Accent footnote","Active tab":"Active tab","Add a *headline* for this post.":"Add a *headline* for this post.","Add a *headline* for this story.":"Add a *headline* for this story.","Add a page":"Add a page","Add a sentence or two introducing this document.":"Add a sentence or two introducing this document.","Add a sentence or two of supporting copy.":"Add a sentence or two of supporting copy.","Add a short heading.":"Add a short heading.","Add a short statement here — a sentence or two is plenty.":"Add a short statement here — a sentence or two is plenty.","Add an office in the inspector":"Add an office in the inspector","Add another question":"Add another question","Add city":"Add city","Add group":"Add group","Add new theme":"Add new theme","Add page":"Add page","Add slide":"Add slide","Add this section's copy here.":"Add this section's copy here.","Add this section's copy here. A blank line starts a new paragraph.":"Add this section's copy here. A blank line starts a new paragraph.","Add your answer here — a sentence or two is plenty.":"Add your answer here — a sentence or two is plenty.","Add your answer here.":"Add your answer here.","Add your answer here. Keep it clear and concise so it stays easy to scan.":"Add your answer here. Keep it clear and concise so it stays easy to scan.","Add your first question":"Add your first question","Add your numbers.":"Add your numbers.",Address:"Address",After:"After",Alignment:"Alignment",All:"All","Alt text":"Alt text","Alternating (zig-zag)":"Alternating (zig-zag)",Amount:"Amount","An editorial aside beside a rail-marked timeline of dated entries.":"An editorial aside beside a rail-marked timeline of dated entries.","An editorial heading and paragraph over a row of theme-color-accented stat cards.":"An editorial heading and paragraph over a row of theme-color-accented stat cards.","An editorial text panel with a stat strip and founders' note.":"An editorial text panel with a stat strip and founders' note.","An empty section. Add whatever you want inside.":"An empty section. Add whatever you want inside.",Anchor:"Anchor","Anchor name":"Anchor name","Another group already uses this heading — pick a different one.":"Another group already uses this heading — pick a different one.",Answer:"Answer","Any color":"Any color",App:"App","App chips":"App chips","App name":"App name",Appearance:"Appearance","Appearance settings belong to a website.":"Appearance settings belong to a website.","Applied to {n} card":"Applied to {n} card","Applied to {n} cards":"Applied to {n} cards","Apply to all cards":"Apply to all cards","Approved customer reviews in a star-rated card grid, pulled live.":"Approved customer reviews in a star-rated card grid, pulled live.",Arrow:"Arrow",Arrows:"Arrows",Article:"Article","Article *headline* goes here.":"Article *headline* goes here.","Article Text":"Article Text","Article headline":"Article headline","As designed":"As designed","As shot":"As shot","As typed":"As typed","As uploaded":"As uploaded","Aspect ratio":"Aspect ratio","At zero":"At zero",Attribution:"Attribution",Auto:"Auto","Auto = the accent phrase takes the heading's own weight.":"Auto = the accent phrase takes the heading's own weight.","Auto = this style states no size, and text following it keeps the size its section drew.":"Auto = this style states no size, and text following it keeps the size its section drew.","Auto contrast":"Auto contrast","Auto-advance slides":"Auto-advance slides","Auto-fills the cover image, headline, dek, date and link from this post each time you open the editor. Those fields are hidden while a post is linked; the remaining fields stay yours to set.":"Auto-fills the cover image, headline, dek, date and link from this post each time you open the editor. Those fields are hidden while a post is linked; the remaining fields stay yours to set.","Auto-slide":"Auto-slide","Avg rating":"Avg rating",Background:"Background","Background image":"Background image","Background images":"Background images","Background video":"Background video",Badge:"Badge",Banner:"Banner","Banner headline":"Banner headline",Bar:"Bar",Bare:"Bare",Bars:"Bars","Bars (comparison / funnel)":"Bars (comparison / funnel)","Bars heading":"Bars heading",Basics:"Basics",Before:"Before","Begin reading":"Begin reading","Below picture":"Below picture","Big first":"Big first","Big left":"Big left","Big right":"Big right","Big stat":"Big stat","Bigger left":"Bigger left","Bigger right":"Bigger right","Black and white":"Black and white","Black and white logos":"Black and white logos",Block:"Block","Block gap":"Block gap","Block spacing":"Block spacing","Block widths":"Block widths","Blog & journal":"Blog & journal","Blog post":"Blog post","Blog post source":"Blog post source",Body:"Body",Bold:"Bold","Bold is the weight above — one value, two ways to set it.":"Bold is the weight above — one value, two ways to set it.","Bold word":"Bold word","Booking Form":"Booking Form",Borders:"Borders",Bottom:"Bottom","Bottom center":"Bottom center","Bottom left":"Bottom left","Bottom right":"Bottom right",Box:"Box","Box name":"Box name","Brand Strip":"Brand Strip","Brand Text":"Brand Text","Brand name":"Brand name",Breadcrumb:"Breadcrumb",Brick:"Brick","Browser mock":"Browser mock","Browser storefront (hero + tiles)":"Browser storefront (hero + tiles)","Build this footer out of Boxes and blocks, like a page: the same menus, signup, social links and logo, with the copyright as a Legal Line. Your current footer is kept.":"Build this footer out of Boxes and blocks, like a page: the same menus, signup, social links and logo, with the copyright as a Legal Line. Your current footer is kept.","Bundle Products":"Bundle Products",Button:"Button","Button Right Text":"Button Right Text","Button color":"Button color","Button label":"Button label","Button link":"Button link","Button text color":"Button text color",Buttons:"Buttons","Buy button":"Buy button","By the *numbers*":"By the *numbers*","By the numbers":"By the numbers","Call-to-Action Heading":"Call-to-Action Heading",Cancel:"Cancel",Capitals:"Capitals","Caps the biggest heading on the site. Auto = each section's own.":"Caps the biggest heading on the site. Auto = each section's own.",Caption:"Caption",Card:"Card","Card body":"Card body","Card button":"Card button","Card header strip":"Card header strip","Card height":"Card height","Card image":"Card image","Card layout":"Card layout","Card link":"Card link","Card number":"Card number","Card outline":"Card outline","Card shadow":"Card shadow","Card subtitle":"Card subtitle","Card title":"Card title","Card title one":"Card title one","Card title three":"Card title three","Card title two":"Card title two","Card type":"Card type",Cards:"Cards",Cart:"Cart","Catalog Filter Bar":"Catalog Filter Bar",Category:"Category","Category Bar":"Category Bar","Category bar":"Category bar","Cell width":"Cell width",Center:"Center","Changes apply to all selected.":"Changes apply to all selected.",Chart:"Chart","Chart style":"Chart style","Chat with us":"Chat with us","Checkout & ordering":"Checkout & ordering","Chip label":"Chip label","Choose a background image first — there’s nothing to focus yet.":"Choose a background image first — there’s nothing to focus yet.","Choose a page":"Choose a page","Choose a post":"Choose a post","Choose a product":"Choose a product","Choose a section":"Choose a section","Cities in this group":"Cities in this group",City:"City","City strip":"City strip","Claims bars":"Claims bars","Claims panel (rows + defect bars)":"Claims panel (rows + defect bars)",Clear:"Clear","Clear change":"Clear change","Clear change: {label}":"Clear change: {label}","Clear colors":"Clear colors","Clear formatting":"Clear formatting","Clear override":"Clear override","Clear override: {label}":"Clear override: {label}","Clear this site’s colors?":"Clear this site’s colors?","Clear {what}":"Clear {what}","Clear {what}: {label}":"Clear {what}: {label}",Collections:"Collections",Color:"Color","Column *title.*":"Column *title.*","Column 1 cards":"Column 1 cards","Column 1 title":"Column 1 title","Column 2 cards":"Column 2 cards","Column 2 title":"Column 2 title","Column 3 cards":"Column 3 cards","Column 3 title":"Column 3 title","Column 4 cards":"Column 4 cards","Column 4 title":"Column 4 title","Column {n}":"Column {n}",Columns:"Columns","Columns on phone":"Columns on phone",Compressed:"Compressed","Contact / Locations":"Contact / Locations","Contact Form":"Contact Form","Contact, FAQ & forms":"Contact, FAQ & forms",Contain:"Contain",Contained:"Contained",Content:"Content","Content position":"Content position","Content width":"Content width",Contents:"Contents","Contents heading":"Contents heading","Contents label":"Contents label",Coordinates:"Coordinates","Coordinates from OpenStreetMap":"Coordinates from OpenStreetMap","Copy above image":"Copy above image","Copy over image":"Copy over image","Copying…":"Copying…",Corners:"Corners","Couldn’t add the page — please retry.":"Couldn’t add the page — please retry.","Couldn’t delete the page — please retry.":"Couldn’t delete the page — please retry.","Couldn’t duplicate the section — please retry":"Couldn’t duplicate the section — please retry","Couldn’t load pages":"Couldn’t load pages","Couldn’t open the media picker — please try again.":"Couldn’t open the media picker — please try again.","Couldn’t open this section.":"Couldn’t open this section.","Couldn’t reach {place}.":"Couldn’t reach {place}.",Count:"Count",Countdown:"Countdown",Country:"Country","Country Switch":"Country Switch",Cover:"Cover","Cover image":"Cover image","Cross ✕":"Cross ✕",Crumbs:"Crumbs","Current page":"Current page","Custom HTML":"Custom HTML","Custom URL":"Custom URL","Customer Photo Grid":"Customer Photo Grid","Customer name":"Customer name","Customer photos in a card grid with a click-to-open lightbox.":"Customer photos in a card grid with a click-to-open lightbox.","Customer quotes in a grid — the quote, a name and a role.":"Customer quotes in a grid — the quote, a name and a role.",Dark:"Dark","Dark band":"Dark band",Darken:"Darken","Darken style":"Darken style","Data points":"Data points",Date:"Date","Deck / standfirst":"Deck / standfirst",Default:"Default","Defect rate by product":"Defect rate by product",Dek:"Dek","Delete city":"Delete city","Delete group ({n} cities)":"Delete group ({n} cities)","Delete group ({n} city)":"Delete group ({n} city)","Delete {label} group ({n} cities)":"Delete {label} group ({n} cities)","Delete {label} group ({n} city)":"Delete {label} group ({n} city)","Delete {name}":"Delete {name}","Delete “{name}”":"Delete “{name}”",Delivery:"Delivery","Delivery Options":"Delivery Options","Delivery tiers as cards — name, window and price, one highlighted.":"Delivery tiers as cards — name, window and price, one highlighted.","Describe this section in a sentence or two.":"Describe this section in a sentence or two.","Describe this step in a sentence or two.":"Describe this step in a sentence or two.","Describe what happened, in a sentence or two.":"Describe what happened, in a sentence or two.",Detail:"Detail","Detail line":"Detail line",Direction:"Direction","Directions link":"Directions link","Dismiss link":"Dismiss link",Display:"Display",Divider:"Divider","Document Detail Cards":"Document Detail Cards","Document Header":"Document Header","Document Tabs":"Document Tabs","Document Text":"Document Text","Document body":"Document body","Document masthead":"Document masthead","Document tabs":"Document tabs",Done:"Done","Done {name}":"Done {name}","Donut (split of a whole)":"Donut (split of a whole)","Dot ●":"Dot ●",Dots:"Dots",Down:"Down","Drop in your own sanitized HTML.":"Drop in your own sanitized HTML.","Duplicate section":"Duplicate section","Duplicate to another page":"Duplicate to another page","Duplicate to page":"Duplicate to page","Duplicated to “{name}”":"Duplicated to “{name}”",Dynamic:"Dynamic","Dynamic Pages":"Dynamic Pages","EU Tyre Label":"EU Tyre Label","Each block":"Each block","Each website created from this template sets its own appearance afterwards.":"Each website created from this template sets its own appearance afterwards.","Each website created from this template sets its own header afterwards.":"Each website created from this template sets its own header afterwards.","Each website created from this template sets its own live chat afterwards.":"Each website created from this template sets its own live chat afterwards.","Each website created from this template sets its own social link afterwards.":"Each website created from this template sets its own social link afterwards.","Each website created from this template sets its own {what} afterwards.":"Each website created from this template sets its own {what} afterwards.","Easy to read":"Easy to read",Edit:"Edit","Edit {name}":"Edit {name}","Edit “{name}” in {place}":"Edit “{name}” in {place}","Editing {name} changes it everywhere.":"Editing {name} changes it everywhere.","Editor only — not shown live":"Editor only — not shown live",Editorial:"Editorial","Editorial Text":"Editorial Text",Email:"Email","Email Form":"Email Form","Email signup":"Email signup",Empty:"Empty",End:"End",Ends:"Ends","Enter coordinates manually":"Enter coordinates manually",Entrance:"Entrance",Entries:"Entries","Entries count":"Entries count",Equal:"Equal",Essay:"Essay",Even:"Even","Every {part} in this section follows it. The face and the size change; the letter case is the section’s own and stays as it is.":"Every {part} in this section follows it. The face and the size change; the letter case is the section’s own and stays as it is.","Everything else on this block comes from the linked post. Unlink it to edit by hand.":"Everything else on this block comes from the linked post. Unlink it to edit by hand.",Excerpt:"Excerpt",Eyebrow:"Eyebrow","Eyebrow style":"Eyebrow style",Facebook:"Facebook",Fade:"Fade",Feature:"Feature","Feature Banner":"Feature Banner","Feature Rows":"Feature Rows","Feature label":"Feature label","Feature label five":"Feature label five","Feature label four":"Feature label four","Feature label one":"Feature label one","Feature label six":"Feature label six","Feature label three":"Feature label three","Feature label two":"Feature label two","Feature story":"Feature story",Featured:"Featured","Featured *image*":"Featured *image*","Featured cover":"Featured cover",Features:"Features",Feedback:"Feedback","Field label":"Field label","Field notes":"Field notes",Filled:"Filled","Filters the collection grids below it — a sticky row of Pills (the default), or Columns, one per filter you switch on.":"Filters the collection grids below it — a sticky row of Pills (the default), or Columns, one per filter you switch on.","Find coordinates":"Find coordinates","Finding…":"Finding…","Fine print":"Fine print","Finish swatches":"Finish swatches","Finish · Size · ×1":"Finish · Size · ×1","First item":"First item","First section":"First section","Fit content":"Fit content","Fitment Form":"Fitment Form","Fitment Table":"Fitment Table",Fixed:"Fixed","Fixed size — the site’s Text setting doesn’t resize this.":"Fixed size — the site’s Text setting doesn’t resize this.","Follow the page":"Follow the page","Follow the slideshow":"Follow the slideshow","Follows Desktop":"Follows Desktop","Follows no style — change":"Follows no style — change","Follows the section's Corners until you set a number here.":"Follows the section's Corners until you set a number here.","Follows the site":"Follows the site","Follows the style":"Follows the style","Follows {name} — change":"Follows {name} — change",Font:"Font","Footer Box":"Footer Box",Footnote:"Footnote",Form:"Form","Form eyebrow":"Form eyebrow","Form heading":"Form heading","Form intro":"Form intro","Formatting — click a row first":"Formatting — click a row first","Formatting — row {n}":"Formatting — row {n}",Founders:"Founders","Founders heading":"Founders heading","Founders statement":"Founders statement","Four across":"Four across","Four stagger":"Four stagger",Frequency:"Frequency","Frequently *asked.*":"Frequently *asked.*","From the bottom":"From the bottom",Full:"Full","Full width":"Full width","Full-bleed intro image the next section scrolls over.":"Full-bleed intro image the next section scrolls over.","Full-screen image or video with a headline.":"Full-screen image or video with a headline.","Full-screen opener with rotating slides.":"Full-screen opener with rotating slides.",Gap:"Gap","Gap only":"Gap only",Ghost:"Ghost","Give the new template page a name. It starts blank — add sections once it opens.":"Give the new template page a name. It starts blank — add sections once it opens.","Gives the other card this card's Corners.":"Gives the other card this card's Corners.","Gives the other {n} cards this card's Corners.":"Gives the other {n} cards this card's Corners.",Good:"Good","Greeting message":"Greeting message",Grid:"Grid",Group:"Group","Group heading":"Group heading","Group name":"Group name",H1:"H1",H2:"H2",H3:"H3",H4:"H4",H5:"H5",H6:"H6",HQ:"HQ",HTML:"HTML",Hairline:"Hairline","Hairline borders":"Hairline borders","Hand-picked products in a tidy grid.":"Hand-picked products in a tidy grid.","Hard to read":"Hard to read",Header:"Header","Header badge":"Header badge","Header settings belong to a website.":"Header settings belong to a website.",Heading:"Heading","Heading 1":"Heading 1","Heading 2":"Heading 2","Heading 3":"Heading 3","Heading font size":"Heading font size",Headings:"Headings",Headquarters:"Headquarters",Height:"Height",Hero:"Hero","Hero & intros":"Hero & intros","Hero Slide":"Hero Slide","Hero Slideshow":"Hero Slideshow","Hero button":"Hero button","Hero image":"Hero image","Hero line":"Hero line","Hidden on the page":"Hidden on the page","Hide manual coordinates":"Hide manual coordinates","Hide {label} on the slide":"Hide {label} on the slide",Highlight:"Highlight","Highlight key numbers — years, designs.":"Highlight key numbers — years, designs.","Highlight line":"Highlight line",Hint:"Hint","Hold video":"Hold video",Home:"Home","Hours, minutes and seconds to a set date and time, then one line.":"Hours, minutes and seconds to a set date and time, then one line.","Hover effect":"Hover effect","Illustrative example":"Illustrative example",Image:"Image","Image & Text Columns":"Image & Text Columns","Image & Text Split":"Image & Text Split","Image background":"Image background","Image caption":"Image caption","Image column":"Image column","Image date":"Image date","Image fit":"Image fit","Image focus":"Image focus","Image label":"Image label","Image left":"Image left","Image meta":"Image meta","Image right":"Image right","Image side":"Image side","Image stage":"Image stage","Image tint":"Image tint","Image width":"Image width","In its own box":"In its own box","In progress (accent)":"In progress (accent)","In the product":"In the product","In this issue":"In this issue","In this section":"In this section","In your own time zone. Every visitor counts down to the same moment.":"In your own time zone. Every visitor counts down to the same moment.",Instagram:"Instagram",Integrations:"Integrations","Integrations Grid":"Integrations Grid",Interview:"Interview",Intro:"Intro","Introduce your company in a paragraph or two.":"Introduce your company in a paragraph or two.","Issue Header":"Issue Header","Issue lines":"Issue lines","Issue meta lines":"Issue meta lines",Italic:"Italic","Italic is not saved yet — the theme row has no column for it (card 66162.b).":"Italic is not saved yet — the theme row has no column for it (card 66162.b).",Item:"Item","Item alignment":"Item alignment",Items:"Items","Items from":"Items from","Its own":"Its own","Its size follows Site styles ▸ {follows} — {px}px right now.":"Its size follows Site styles ▸ {follows} — {px}px right now.","Its size follows Site styles ▸ {follows}.":"Its size follows Site styles ▸ {follows}.","Job card label":"Job card label",Join:"Join","Jumps to a section on that page.":"Jumps to a section on that page.",Justify:"Justify","Kanban board (job columns)":"Kanban board (job columns)","Kanban columns":"Kanban columns","Keep this section's own built-in size":"Keep this section's own built-in size","Key *features.*":"Key *features.*","Key Features":"Key Features",LINE:"LINE",LIVE:"LIVE",Label:"Label","Label color":"Label color",Labels:"Labels",Ladder:"Ladder",Large:"Large","Large text only":"Large text only","Largest size":"Largest size","Latest Posts":"Latest Posts","Latest journal posts in a three-card row.":"Latest journal posts in a three-card row.",Latitude:"Latitude",Layout:"Layout","Layout & structure":"Layout & structure","Layout, structure & embeds":"Layout, structure & embeds",Lead:"Lead","Lead Text":"Lead Text","Learn more":"Learn more","Leave a blank line between paragraphs to start a new one.":"Leave a blank line between paragraphs to start a new one.","Leave a field blank to use the built-in wording.":"Leave a field blank to use the built-in wording.",Left:"Left","Left of the copy":"Left of the copy","Legal & documents":"Legal & documents","Legal Line":"Legal Line",Level:"Level",Lift:"Lift",Lifted:"Lifted",Light:"Light",Lightbox:"Lightbox","Limited release":"Limited release",Line:"Line","Line & text gap":"Line & text gap","Line (trend)":"Line (trend)","Line gap {line} · text gap {letter}em.":"Line gap {line} · text gap {letter}em.",Link:"Link","Linked to a blog post. This editor has no blog to pick another from; choose “None (manual)” to author the section yourself.":"Linked to a blog post. This editor has no blog to pick another from; choose “None (manual)” to author the section yourself.","Linked to “{name}”":"Linked to “{name}”",LinkedIn:"LinkedIn",Links:"Links","Links to":"Links to",List:"List","Live chat":"Live chat","Live chat settings belong to a website.":"Live chat settings belong to a website.","Loading…":"Loading…","Location name":"Location name",Locations:"Locations","Locations Map":"Locations Map",Logo:"Logo","Logo alt text":"Logo alt text","Logo color":"Logo color","Logo description":"Logo description","Logo five":"Logo five","Logo four":"Logo four","Logo height":"Logo height","Logo image":"Logo image","Logo one":"Logo one","Logo three":"Logo three","Logo two":"Logo two",Logos:"Logos","Long read":"Long read","Long-form document body with an 'On this page' contents list.":"Long-form document body with an 'On this page' contents list.",Longitude:"Longitude",Look:"Look",Main:"Main","Main Pages":"Main Pages","Main color":"Main color","Main heading":"Main heading","Main heading\n*Highlight line*":`Main heading
3
3
  *Highlight line*`,Map:"Map","Map & Theme":"Map & Theme","Map theme":"Map theme","Match / done (green)":"Match / done (green)",Media:"Media",Medium:"Medium",Menu:"Menu",Message:"Message","Meta line":"Meta line",Metadata:"Metadata","Metadata rows":"Metadata rows",Middle:"Middle","Middle meta":"Middle meta",Milestone:"Milestone","Milestone Timeline":"Milestone Timeline","Milestone title.":"Milestone title.",Milestones:"Milestones",Mixed:"Mixed","Mixed styles":"Mixed styles","Mockup Card":"Mockup Card","Mockup card":"Mockup card","Mockup position":"Mockup position",Mono:"Mono","Month DD, YYYY":"Month DD, YYYY",Motion:"Motion","Multi-column container for blocks.":"Multi-column container for blocks.",Muted:"Muted",Name:"Name","Name / alt":"Name / alt",Natural:"Natural","Navigation & wayfinding":"Navigation & wayfinding","New page":"New page","Next slide":"Next slide","No fill":"No fill","No locations yet.":"No locations yet.","No match (gray ✕)":"No match (gray ✕)","No other pages":"No other pages","No pages match your search":"No pages match your search","No pages yet. Add one with + above.":"No pages yet. Add one with + above.","No section anchors yet":"No section anchors yet","No style":"No style","No wrap":"No wrap","No. 1":"No. 1",None:"None","None (manual)":"None (manual)",Normal:"Normal","Not changed":"Not changed","Not chosen":"Not chosen","Not saved. Reload the page.":"Not saved. Reload the page.","Not saved. Try again.":"Not saved. Try again.","Not set":"Not set","Not shown on the page":"Not shown on the page",Note:"Note","Note label":"Note label","Note value":"Note value",Nothing:"Nothing",Nudge:"Nudge",Number:"Number","Number style":"Number style",Numbers:"Numbers","N°01, N°02":"N°01, N°02",Office:"Office",Offices:"Offices","Offset tall":"Offset tall","On a phone":"On a phone","On picture":"On picture","On this page":"On this page","One row":"One row","One then four":"One then four","Only the size follows a site style. This section sets its own font, weight and letter case.":"Only the size follows a site style. This section sets its own font, weight and letter case.",Open:"Open","Open first answer":"Open first answer","Open the {name} in a new tab":"Open the {name} in a new tab","Opening hours":"Opening hours","Opening the picker…":"Opening the picker…",Option:"Option","Order Table":"Order Table","Order summary":"Order summary",Outline:"Outline",Outlined:"Outlined",Overlay:"Overlay","Overlay - CartDrawer":"Overlay - CartDrawer","Overlay button":"Overlay button","Overlay color":"Overlay color","Overlay position":"Overlay position",Padding:"Padding","Padding bottom":"Padding bottom","Padding left":"Padding left","Padding right":"Padding right","Padding top":"Padding top",Page:"Page","Page button":"Page button","Page name":"Page name","Page settings":"Page settings",Pages:"Pages","Panel heading":"Panel heading","Panels & cards":"Panels & cards","Panels and cards":"Panels and cards","Part of {name}":"Part of {name}","Paste a link to each profile. A platform left empty shows nothing on the site.":"Paste a link to each profile. A platform left empty shows nothing on the site.","Payment Methods":"Payment Methods","Payment methods":"Payment methods",Phone:"Phone","Photo Submission Form":"Photo Submission Form","Photo behind the words":"Photo behind the words",Photography:"Photography","Photos in a row":"Photos in a row","Pick a color to see how it reads.":"Pick a color to see how it reads.","Pick a post from {place} to auto-fill this section, or keep “None (manual)” to author it yourself below.":"Pick a post from {place} to auto-fill this section, or keep “None (manual)” to author it yourself below.","Pick who to reach, then a form that routes the message.":"Pick who to reach, then a form that routes the message.",Pinterest:"Pinterest",Placement:"Placement",Plain:"Plain","Play video":"Play video","Playback speed":"Playback speed","Plays well with\n*your favourite apps.*":`Plays well with
4
4
  *your favourite apps.*`,"Pop up - SubscribePopup":"Pop up - SubscribePopup","Portal card (stock + button + orders)":"Portal card (stock + button + orders)",Positions:"Positions","Post Card":"Post Card",Prefix:"Prefix",Preview:"Preview","Preview hover state":"Preview hover state","Preview the live site (opens in a new tab)":"Preview the live site (opens in a new tab)","Preview the live site in a new tab":"Preview the live site in a new tab","Previous slide":"Previous slide",Price:"Price",Primary:"Primary","Primary (Theme Color)":"Primary (Theme Color)",Product:"Product","Product Grid":"Product Grid","Product Hero":"Product Hero","Product badge":"Product badge","Product collections in a tidy grid.":"Product collections in a tidy grid.","Product name":"Product name","Product page":"Product page","Product record":"Product record","Product record (spec tiles)":"Product record (spec tiles)","Product tiles":"Product tiles","Promotions & sign-ups":"Promotions & sign-ups",Published:"Published","Pull quote":"Pull quote","Q&A":"Q&A",Question:"Question",Questions:"Questions",Quiet:"Quiet",Quote:"Quote",Quotes:"Quotes",Rating:"Rating","Read out in place of the picture, and shown if it can’t load.":"Read out in place of the picture, and shown if it can’t load.","Read the story":"Read the story","Read time":"Read time","Reads in":"Reads in","Ready-to-Order Banner":"Ready-to-Order Banner","Reassurance lines":"Reassurance lines","Record type":"Record type","Recurring Columns":"Recurring Columns","Reel label":"Reel label","Refresh now":"Refresh now","Region · country":"Region · country",Regular:"Regular","Related Products":"Related Products","Remove section":"Remove section","Repeating full-width rows — eyebrow, title and copy beside a numbered close-up image, alternating sides each row.":"Repeating full-width rows — eyebrow, title and copy beside a numbered close-up image, alternating sides each row.","Reset color":"Reset color","Reset {name} to the preset":"Reset {name} to the preset",Rest:"Rest","Result / order rows":"Result / order rows","Review Form":"Review Form",Reviews:"Reviews",Right:"Right","Right Top Text":"Right Top Text","Right links":"Right links","Right of the copy":"Right of the copy",Rigs:"Rigs","Rigs fitted":"Rigs fitted",Rise:"Rise",Role:"Role","Role · Location":"Role · Location","Role · location":"Role · location","Rotate on hover":"Rotate on hover","Rounds the picture. Left alone it stays square.":"Rounds the picture. Left alone it stays square.","Rounds the picture. The card's own corner is in Site styles.":"Rounds the picture. The card's own corner is in Site styles.",Sans:"Sans","Save as Template":"Save as Template","Save this website as a platform template":"Save this website as a platform template","Save your page changes first":"Save your page changes first",Scale:"Scale",Screen:"Screen","Scroll direction":"Scroll direction","Scroll duration":"Scroll duration","Scroll-Over Text":"Scroll-Over Text","Scroll-over":"Scroll-over","Scrolling Bar":"Scrolling Bar",Search:"Search","Search all pages":"Search all pages","Search all pages…":"Search all pages…",Season:"Season","Second item":"Second item","Second section":"Second section","Second surface":"Second surface",Section:"Section","Section *heading.*":"Section *heading.*","Section *title*":"Section *title*","Section Header":"Section Header","Section above":"Section above","Section band":"Section band","Section below":"Section below","Section header":"Section header","Section heading":"Section heading","Section heading\n*Highlight line*":`Section heading
5
5
  *Highlight line*`,"Section heading *here.*":"Section heading *here.*","Section headline\n*Highlight line*":`Section headline
6
6
  *Highlight line*`,"Section headline *here.*\n*Highlight line*":`Section headline *here.*
7
7
  *Highlight line*`,"Section number":"Section number","Section settings":"Section settings",Sections:"Sections","Section’s own":"Section’s own","Secure encrypted checkout":"Secure encrypted checkout","Seen from\n*the counter.*":`Seen from
8
- *the counter.*`,"Select a word, then press the highlighter.":"Select a word, then press the highlighter.","Selector guide (pills + results)":"Selector guide (pills + results)","Selector pills":"Selector pills",Semibold:"Semibold",Separator:"Separator","Series title":"Series title",Serif:"Serif","Set a number above first — there is nothing to shape yet.":"Set a number above first — there is nothing to shape yet.","Set this card's corners first.":"Set this card's corners first.","Shadow color":"Shadow color",Shape:"Shape",Shared:"Shared","Shop & galleries":"Shop & galleries","Short description of this figure.":"Short description of this figure.","Short detail line":"Short detail line","Short supporting line":"Short supporting line",Show:"Show","Show cover image":"Show cover image","Show hints":"Show hints","Show on a card":"Show on a card","Show the chat bubble":"Show the chat bubble","Show the chat bubble on the whole site":"Show the chat bubble on the whole site","Show ticker":"Show ticker","Show {label} on the slide":"Show {label} on the slide","Shown beside the heading":"Shown beside the heading","Side space":"Side space","Side-by-side image and text in two columns.":"Side-by-side image and text in two columns.",Sideways:"Sideways","Signup Form":"Signup Form",Simple:"Simple","Site settings":"Site settings","Site style":"Site style","Site styles":"Site styles","Six across":"Six across","Six stagger":"Six stagger",Size:"Size",Sizes:"Sizes","Slash /":"Slash /","Slide name":"Slide name","Slide picker":"Slide picker",Small:"Small","Social Logos":"Social Logos","Social link settings belong to a website.":"Social link settings belong to a website.","Social links":"Social links",Soft:"Soft",Solid:"Solid","Space above and below":"Space above and below","Space between":"Space between",Spacer:"Spacer","Spec Strip":"Spec Strip","Spec Table":"Spec Table","Spec label":"Spec label","Spec tiles":"Spec tiles","Spec value":"Spec value","Spine (single rail)":"Spine (single rail)","Split (editorial aside)":"Split (editorial aside)",Square:"Square",Stacked:"Stacked",Standard:"Standard",Start:"Start",Stat:"Stat","Stat & note":"Stat & note","Stat label":"Stat label","Stat name":"Stat name","Stat value":"Stat value",State:"State","State / Province":"State / Province",Statement:"Statement",Stats:"Stats","Stats & social proof":"Stats & social proof","Stats with Text":"Stats with Text","Status chip":"Status chip","Step *one*":"Step *one*","Step *three*":"Step *three*","Step *two*":"Step *two*","Stick under header":"Stick under header","Still time per slide":"Still time per slide","Storefront → Blog":"Storefront → Blog","Storefront ▸ Sites ▸ Settings":"Storefront ▸ Sites ▸ Settings","Story Timeline":"Story Timeline","Street address":"Street address",Stretch:"Stretch","Strip fill":"Strip fill","Strip items":"Strip items","Stripes · bold":"Stripes · bold","Stripes · fine":"Stripes · fine","Stripes · medium":"Stripes · medium",Style:"Style","Sub-title":"Sub-title","Sub-total lines":"Sub-total lines",Subtitle:"Subtitle","Subtitle font size":"Subtitle font size",Subtotal:"Subtotal","Success heading":"Success heading","Success message":"Success message",Superscript:"Superscript",Surfaces:"Surfaces","Switch now":"Switch now","Switch to Box footer":"Switch to Box footer","Synced from the blog post.":"Synced from the blog post.","Synced from the product.":"Synced from the product.","Synced from the site menu.":"Synced from the site menu.","Syncing from {place}…":"Syncing from {place}…",Tab:"Tab","Tab label":"Tab label","Tab name":"Tab name","Tabbed Gallery":"Tabbed Gallery",Tabs:"Tabs","Tall (3:4)":"Tall (3:4)","Tall first":"Tall first","Tall middle":"Tall middle","Team four":"Team four","Team one":"Team one","Team three":"Team three","Team two":"Team two",Telegram:"Telegram","Templates don’t store images — this slot stays a placeholder. Each website picks its own after it’s created.":"Templates don’t store images — this slot stays a placeholder. Each website picks its own after it’s created.","Templates don’t store videos — this slot stays a placeholder. Each website picks its own after it’s created.":"Templates don’t store videos — this slot stays a placeholder. Each website picks its own after it’s created.","Templates keep their look. Press Done.":"Templates keep their look. Press Done.",Terminal:"Terminal","Terminal (CLI session)":"Terminal (CLI session)","Terminal lines":"Terminal lines",Testimonials:"Testimonials",Text:"Text","Text & content":"Text & content","Text & media":"Text & media","Text color":"Text color","Text column":"Text column","Text height":"Text height","Text position":"Text position","Text size":"Text size","Text style":"Text style",Texts:"Texts",Texture:"Texture","Texture opacity":"Texture opacity","Thanks — we'll email you to confirm.":"Thanks — we'll email you to confirm.","The built-in spacing.":"The built-in spacing.","The chat bubble is hidden across the whole site.":"The chat bubble is hidden across the whole site.","The current product's compatible tyres — image, size, key specs and price per tyre, with an inquiry link. Display only.":"The current product's compatible tyres — image, size, key specs and price per tyre, with an inquiry link. Display only.","The current product's related items in a tidy row — the product page's built-in 'Pair with' cross-sell.":"The current product's related items in a tidy row — the product page's built-in 'Pair with' cross-sell.","The floating chat bubble shows in the corner of every page.":"The floating chat bubble shows in the corner of every page.","The only setting that changes a heading's capitals.":"The only setting that changes a heading's capitals.","The room left at the left and right edge of every page.":"The room left at the left and right edge of every page.","The section is full width, so this card follows Site styles ▸ Basics ▸ Corners.":"The section is full width, so this card follows Site styles ▸ Basics ▸ Corners.","The section it belonged to has been changed or removed.":"The section it belonged to has been changed or removed.","The size a text takes when you set it to follow this style. Sections keep their own sizes.":"The size a text takes when you set it to follow this style. Sections keep their own sizes.","The standard width every page on this site renders at.":"The standard width every page on this site renders at.","The words are still on your page and nothing has been lost. The editor could not work out which control belongs to them, which is a fault on our side. Go back and click the section to open its settings instead.":"The words are still on your page and nothing has been lost. The editor could not work out which control belongs to them, which is a fault on our side. Go back and click the section to open its settings instead.",Theme:"Theme","Theme {n}":"Theme {n}","Theme {n} background":"Theme {n} background","Theme {n} main color":"Theme {n} main color","Theme {n} text color":"Theme {n} text color","Third item":"Third item","This cannot be undone.":"This cannot be undone.","This card is not in a section that can share corners.":"This card is not in a section that can share corners.","This color is hard to read on this theme's page. The buttons below are the same hue, darkened.":"This color is hard to read on this theme's page. The buttons below are the same hue, darkened.","This color is hard to read on your page background. Pick one further from it — lighter if your pages are dark, deeper if they are light.":"This color is hard to read on your page background. Pick one further from it — lighter if your pages are dark, deeper if they are light.","This color reads clearly on your pages.":"This color reads clearly on your pages.","This face":"This face","This is the only card in the section.":"This is the only card in the section.","This part is no longer here.":"This part is no longer here.","This part's settings did not open.":"This part's settings did not open.","This section runs edge to edge, so its corners sit off the page. Set Width to Content width to use them.":"This section runs edge to edge, so its corners sit off the page. Set Width to Content width to use them.","This site has {n} color theme of its own. Clearing takes them away and puts back the four the shop supplies.":"This site has {n} color theme of its own. Clearing takes them away and puts back the four the shop supplies.","This site has {n} color themes of its own. Clearing takes them away and puts back the four the shop supplies.":"This site has {n} color themes of its own. Clearing takes them away and puts back the four the shop supplies.","This text follows the site style.":"This text follows the site style.","This ticker’s hero is no longer on the page.":"This ticker’s hero is no longer on the page.","Three across":"Three across","Three ladder":"Three ladder","Three stagger":"Three stagger",Ticker:"Ticker","Ticker items":"Ticker items",Tight:"Tight",TikTok:"TikTok","Timeline entries":"Timeline entries","Timezone chip":"Timezone chip","Tint color":"Tint color","Tint opacity":"Tint opacity",Title:"Title",Tone:"Tone",Top:"Top","Top border":"Top border","Top center":"Top center","Top left":"Top left","Top right":"Top right","Top row":"Top row","Top space":"Top space",Total:"Total","Total amount":"Total amount","Total label":"Total label","Total line":"Total line","Trailing note":"Trailing note","Triangle ▼":"Triangle ▼","Trusted by *teams worldwide*":"Trusted by *teams worldwide*","Two across":"Two across","Two image galleries with tabs and filters.":"Two image galleries with tabs and filters.","Two tall":"Two tall",Type:"Type","Typed here":"Typed here","Tyre Fitment Form":"Tyre Fitment Form","Tyre Sizes":"Tyre Sizes","URL pill":"URL pill","URL: /{slug}":"URL: /{slug}",Ungrouped:"Ungrouped",Unit:"Unit","Unit labels":"Unit labels",Up:"Up","Up and down":"Up and down",Upcoming:"Upcoming","Upload a background image":"Upload a background image","Upload a background video":"Upload a background video","Upload a poster still":"Upload a poster still","Uppercase heading":"Uppercase heading","Use {colour}":"Use {colour}",Value:"Value","Value suffix":"Value suffix","Vertical breathing room between sections.":"Vertical breathing room between sections.",Video:"Video","Video poster":"Video poster","View all":"View all","View all questions":"View all questions","View series →":"View series →",Volume:"Volume","Ways to pay":"Ways to pay",WeChat:"WeChat",Weight:"Weight","What people *say.*":"What people *say.*",WhatsApp:"WhatsApp","Whether this page sits on the site's content column, or runs edge to edge.":"Whether this page sits on the site's content column, or runs edge to edge.","Which corners":"Which corners","Whole number Theme Color":"Whole number Theme Color","Wide (2:1)":"Wide (2:1)","Wide promo strip with background image.":"Wide promo strip with background image.",Width:"Width","With us":"With us",Wording:"Wording",Wrap:"Wrap","Write the answer here.":"Write the answer here.","Write the opening paragraph here.\n\n- Start a line with a dash for a bullet.\n- Add as many as you like.":`Write the opening paragraph here.
8
+ *the counter.*`,"Select a word, then press the highlighter.":"Select a word, then press the highlighter.","Selector guide (pills + results)":"Selector guide (pills + results)","Selector pills":"Selector pills",Semibold:"Semibold",Separator:"Separator","Series title":"Series title",Serif:"Serif","Set this card's corners first.":"Set this card's corners first.","Shadow color":"Shadow color",Shape:"Shape",Shared:"Shared","Shop & galleries":"Shop & galleries","Short description of this figure.":"Short description of this figure.","Short detail line":"Short detail line","Short supporting line":"Short supporting line",Show:"Show","Show cover image":"Show cover image","Show hints":"Show hints","Show on a card":"Show on a card","Show the chat bubble":"Show the chat bubble","Show the chat bubble on the whole site":"Show the chat bubble on the whole site","Show ticker":"Show ticker","Show {label} on the slide":"Show {label} on the slide","Shown beside the heading":"Shown beside the heading","Side space":"Side space","Side-by-side image and text in two columns.":"Side-by-side image and text in two columns.",Sideways:"Sideways","Signup Form":"Signup Form",Simple:"Simple","Site settings":"Site settings","Site style":"Site style","Site styles":"Site styles","Six across":"Six across","Six stagger":"Six stagger",Size:"Size",Sizes:"Sizes","Slash /":"Slash /","Slide name":"Slide name","Slide picker":"Slide picker",Small:"Small","Social Logos":"Social Logos","Social link settings belong to a website.":"Social link settings belong to a website.","Social links":"Social links",Soft:"Soft",Solid:"Solid","Space above and below":"Space above and below","Space between":"Space between",Spacer:"Spacer","Spec Strip":"Spec Strip","Spec Table":"Spec Table","Spec label":"Spec label","Spec tiles":"Spec tiles","Spec value":"Spec value","Spine (single rail)":"Spine (single rail)","Split (editorial aside)":"Split (editorial aside)",Square:"Square",Stacked:"Stacked",Standard:"Standard",Start:"Start",Stat:"Stat","Stat & note":"Stat & note","Stat label":"Stat label","Stat name":"Stat name","Stat value":"Stat value",State:"State","State / Province":"State / Province",Statement:"Statement",Stats:"Stats","Stats & social proof":"Stats & social proof","Stats with Text":"Stats with Text","Status chip":"Status chip","Step *one*":"Step *one*","Step *three*":"Step *three*","Step *two*":"Step *two*","Stick under header":"Stick under header","Still time per slide":"Still time per slide","Storefront → Blog":"Storefront → Blog","Storefront ▸ Sites ▸ Settings":"Storefront ▸ Sites ▸ Settings","Story Timeline":"Story Timeline","Street address":"Street address",Stretch:"Stretch","Strip fill":"Strip fill","Strip items":"Strip items","Stripes · bold":"Stripes · bold","Stripes · fine":"Stripes · fine","Stripes · medium":"Stripes · medium",Style:"Style","Sub-title":"Sub-title","Sub-total lines":"Sub-total lines",Subtitle:"Subtitle","Subtitle font size":"Subtitle font size",Subtotal:"Subtotal","Success heading":"Success heading","Success message":"Success message",Superscript:"Superscript",Surfaces:"Surfaces","Switch now":"Switch now","Switch to Box footer":"Switch to Box footer","Synced from the blog post.":"Synced from the blog post.","Synced from the product.":"Synced from the product.","Synced from the site menu.":"Synced from the site menu.","Syncing from {place}…":"Syncing from {place}…",Tab:"Tab","Tab label":"Tab label","Tab name":"Tab name","Tabbed Gallery":"Tabbed Gallery",Tabs:"Tabs","Tall (3:4)":"Tall (3:4)","Tall first":"Tall first","Tall middle":"Tall middle","Team four":"Team four","Team one":"Team one","Team three":"Team three","Team two":"Team two",Telegram:"Telegram","Templates don’t store images — this slot stays a placeholder. Each website picks its own after it’s created.":"Templates don’t store images — this slot stays a placeholder. Each website picks its own after it’s created.","Templates don’t store videos — this slot stays a placeholder. Each website picks its own after it’s created.":"Templates don’t store videos — this slot stays a placeholder. Each website picks its own after it’s created.","Templates keep their look. Press Done.":"Templates keep their look. Press Done.",Terminal:"Terminal","Terminal (CLI session)":"Terminal (CLI session)","Terminal lines":"Terminal lines",Testimonials:"Testimonials",Text:"Text","Text & content":"Text & content","Text & media":"Text & media","Text color":"Text color","Text column":"Text column","Text height":"Text height","Text position":"Text position","Text size":"Text size","Text style":"Text style",Texts:"Texts",Texture:"Texture","Texture opacity":"Texture opacity","Thanks — we'll email you to confirm.":"Thanks — we'll email you to confirm.","The built-in spacing.":"The built-in spacing.","The chat bubble is hidden across the whole site.":"The chat bubble is hidden across the whole site.","The current product's compatible tyres — image, size, key specs and price per tyre, with an inquiry link. Display only.":"The current product's compatible tyres — image, size, key specs and price per tyre, with an inquiry link. Display only.","The current product's related items in a tidy row — the product page's built-in 'Pair with' cross-sell.":"The current product's related items in a tidy row — the product page's built-in 'Pair with' cross-sell.","The floating chat bubble shows in the corner of every page.":"The floating chat bubble shows in the corner of every page.","The only setting that changes a heading's capitals.":"The only setting that changes a heading's capitals.","The room left at the left and right edge of every page.":"The room left at the left and right edge of every page.","The section is full width, so this card follows Site styles ▸ Basics ▸ Corners.":"The section is full width, so this card follows Site styles ▸ Basics ▸ Corners.","The section it belonged to has been changed or removed.":"The section it belonged to has been changed or removed.","The size a text takes when you set it to follow this style. Sections keep their own sizes.":"The size a text takes when you set it to follow this style. Sections keep their own sizes.","The standard width every page on this site renders at.":"The standard width every page on this site renders at.","The words are still on your page and nothing has been lost. The editor could not work out which control belongs to them, which is a fault on our side. Go back and click the section to open its settings instead.":"The words are still on your page and nothing has been lost. The editor could not work out which control belongs to them, which is a fault on our side. Go back and click the section to open its settings instead.",Theme:"Theme","Theme {n}":"Theme {n}","Theme {n} background":"Theme {n} background","Theme {n} main color":"Theme {n} main color","Theme {n} text color":"Theme {n} text color","Third item":"Third item","This cannot be undone.":"This cannot be undone.","This card is not in a section that can share corners.":"This card is not in a section that can share corners.","This color is hard to read on this theme's page. The buttons below are the same hue, darkened.":"This color is hard to read on this theme's page. The buttons below are the same hue, darkened.","This color is hard to read on your page background. Pick one further from it — lighter if your pages are dark, deeper if they are light.":"This color is hard to read on your page background. Pick one further from it — lighter if your pages are dark, deeper if they are light.","This color reads clearly on your pages.":"This color reads clearly on your pages.","This face":"This face","This is the only card in the section.":"This is the only card in the section.","This part is no longer here.":"This part is no longer here.","This part's settings did not open.":"This part's settings did not open.","This section runs edge to edge, so its corners sit off the page. Set Width to Content width to use them.":"This section runs edge to edge, so its corners sit off the page. Set Width to Content width to use them.","This site has {n} color theme of its own. Clearing takes them away and puts back the four the shop supplies.":"This site has {n} color theme of its own. Clearing takes them away and puts back the four the shop supplies.","This site has {n} color themes of its own. Clearing takes them away and puts back the four the shop supplies.":"This site has {n} color themes of its own. Clearing takes them away and puts back the four the shop supplies.","This text follows the site style.":"This text follows the site style.","This ticker’s hero is no longer on the page.":"This ticker’s hero is no longer on the page.","Three across":"Three across","Three ladder":"Three ladder","Three stagger":"Three stagger",Ticker:"Ticker","Ticker items":"Ticker items",Tight:"Tight",TikTok:"TikTok","Timeline entries":"Timeline entries","Timezone chip":"Timezone chip","Tint color":"Tint color","Tint opacity":"Tint opacity",Title:"Title",Tone:"Tone",Top:"Top","Top border":"Top border","Top center":"Top center","Top left":"Top left","Top right":"Top right","Top row":"Top row","Top space":"Top space",Total:"Total","Total amount":"Total amount","Total label":"Total label","Total line":"Total line","Trailing note":"Trailing note","Triangle ▼":"Triangle ▼","Trusted by *teams worldwide*":"Trusted by *teams worldwide*","Two across":"Two across","Two image galleries with tabs and filters.":"Two image galleries with tabs and filters.","Two tall":"Two tall",Type:"Type","Typed here":"Typed here","Tyre Fitment Form":"Tyre Fitment Form","Tyre Sizes":"Tyre Sizes","URL pill":"URL pill","URL: /{slug}":"URL: /{slug}",Ungrouped:"Ungrouped",Unit:"Unit","Unit labels":"Unit labels",Up:"Up","Up and down":"Up and down",Upcoming:"Upcoming","Upload a background image":"Upload a background image","Upload a background video":"Upload a background video","Upload a poster still":"Upload a poster still","Uppercase heading":"Uppercase heading","Use {colour}":"Use {colour}",Value:"Value","Value suffix":"Value suffix","Vertical breathing room between sections.":"Vertical breathing room between sections.",Video:"Video","Video poster":"Video poster","View all":"View all","View all questions":"View all questions","View series →":"View series →",Volume:"Volume","Ways to pay":"Ways to pay",WeChat:"WeChat",Weight:"Weight","What people *say.*":"What people *say.*",WhatsApp:"WhatsApp","Whether this page sits on the site's content column, or runs edge to edge.":"Whether this page sits on the site's content column, or runs edge to edge.","Whole number Theme Color":"Whole number Theme Color","Wide (2:1)":"Wide (2:1)","Wide promo strip with background image.":"Wide promo strip with background image.",Width:"Width","With us":"With us",Wording:"Wording",Wrap:"Wrap","Write the answer here.":"Write the answer here.","Write the opening paragraph here.\n\n- Start a line with a dash for a bullet.\n- Add as many as you like.":`Write the opening paragraph here.
9
9
 
10
10
  - Start a line with a dash for a bullet.
11
11
  - Add as many as you like.`,X:"X","X-Large":"X-Large",Year:"Year","Year →":"Year →",Years:"Years",YouTube:"YouTube","Your *first* section.":"Your *first* section.","Your *second* section.":"Your *second* section.","Your fifth question goes here?":"Your fifth question goes here?","Your first question goes here?":"Your first question goes here?","Your fourth question goes here?":"Your fourth question goes here?","Your locations as a city gallery plus address and map cards.":"Your locations as a city gallery plus address and map cards.","Your review":"Your review","Your second question goes here?":"Your second question goes here?","Your third question goes here?":"Your third question goes here?",Zigzag:"Zigzag",accent:"accent","all theme colors":"all theme colors",body:"body","body text":"body text",button:"button",card:"card",city:"city",draft:"draft","e.g. About":"e.g. About","e.g. Americas":"e.g. Americas","e.g. about":"e.g. about","e.g. {example}":"e.g. {example}","each block's own spacing":"each block's own spacing",entries:"entries",group:"group",heading:"heading",headingLarge:"headingLarge",headingMedium:"headingMedium",headingSmall:"headingSmall","images only":"images only",item:"item",label:"label",manifesto:"manifesto","not set":"not set","not shown live":"not shown live",px:"px","the Text style in Site styles":"the Text style in Site styles","the admin":"the admin","the built-in corners":"the built-in corners","the page":"the page","the section":"the section","the theme's image stage":"the theme's image stage","the theme's section background":"the theme's section background","this container's own spacing":"this container's own spacing","videos only":"videos only","{face} is loaded without an italic, so it cannot be set in italic. Slanting it would deform the letters rather than style them.":"{face} is loaded without an italic, so it cannot be set in italic. Slanting it would deform the letters rather than style them.","{grade} on the button":"{grade} on the button","{kind} · every row":"{kind} · every row","{label} hex code":"{label} hex code","{label} {n}":"{label} {n}","{label} — row {n}":"{label} — row {n}","{letter} · Step":"{letter} · Step","{name} (unavailable)":"{name} (unavailable)","{name} is on this section":"{name} is on this section","{name} — renamed in the Console: {place}.":"{name} — renamed in the Console: {place}.","{n} changed":"{n} changed","{n} cities":"{n} cities","{n} city":"{n} city","{n} of {total} layouts":"{n} of {total} layouts","{n} selected":"{n} selected","{value} from {from}":"{value} from {from}","{value} on desktop":"{value} on desktop","{what} settings belong to a website.":"{what} settings belong to a website.","— Articles in total":"— Articles in total","— Label":"— Label","— Name, Year":"— Name, Year"};export{e as WEB_BUILDER_WORDS};
@@ -1 +1 @@
1
- import{say as d,sayCount as l}from"../editor-words.js";import{hasOwnCardCorners as m,cardsWithSharedCorners as x}from"../content/card-corners.js";import{locateNode as C}from"./content-tree.js";function g(r,o,p){const s=p?.zone??"",e=s.lastIndexOf(":"),h=e>0?s.slice(0,e):"",a=e>0?s.slice(e+1):"",n=h?C(r,o,h):null,t=n&&Array.isArray(n.item.props[a])?n.item.props[a]:[],u=p?.index??-1,i=u>=0?t[u]:void 0,f=i?.props?.id?String(i.props.id):"",c=Math.max(t.length-1,0);return!n||!f?{can:!1,reason:"unreachable",others:0}:t.length<=1?{can:!1,reason:"alone",others:c}:m(i?.props?.cardCorners)?{can:!0,others:c,zone:n.zone,index:n.index,data:{...n.item,props:{...n.item.props,[a]:x(t,f)}}}:{can:!1,reason:"unset",others:c}}function b(r){return r.can?l("Gives the other card this card's Corners and Which corners.","Gives the other {n} cards this card's Corners and Which corners.",r.others):r.reason==="alone"?d("This is the only card in the section."):r.reason==="unset"?d("Set this card's corners first."):d("This card is not in a section that can share corners.")}function I(r){return l("Applied to {n} card","Applied to {n} cards",r)}function S(r,o){r.can&&o(r.zone,r.index,r.data)}export{S as applyCorners,I as applyCornersDoneLabel,b as applyCornersNote,g as planApplyCorners};
1
+ import{say as d,sayCount as l}from"../editor-words.js";import{hasOwnCardCorners as m,cardsWithSharedCorners as x}from"../content/card-corners.js";import{locateNode as C}from"./content-tree.js";function g(r,o,p){const s=p?.zone??"",n=s.lastIndexOf(":"),h=n>0?s.slice(0,n):"",a=n>0?s.slice(n+1):"",e=h?C(r,o,h):null,t=e&&Array.isArray(e.item.props[a])?e.item.props[a]:[],u=p?.index??-1,i=u>=0?t[u]:void 0,f=i?.props?.id?String(i.props.id):"",c=Math.max(t.length-1,0);return!e||!f?{can:!1,reason:"unreachable",others:0}:t.length<=1?{can:!1,reason:"alone",others:c}:m(i?.props?.cardCorners)?{can:!0,others:c,zone:e.zone,index:e.index,data:{...e.item,props:{...e.item.props,[a]:x(t,f)}}}:{can:!1,reason:"unset",others:c}}function b(r){return r.can?l("Gives the other card this card's Corners.","Gives the other {n} cards this card's Corners.",r.others):r.reason==="alone"?d("This is the only card in the section."):r.reason==="unset"?d("Set this card's corners first."):d("This card is not in a section that can share corners.")}function I(r){return l("Applied to {n} card","Applied to {n} cards",r)}function S(r,o){r.can&&o(r.zone,r.index,r.data)}export{S as applyCorners,I as applyCornersDoneLabel,b as applyCornersNote,g as planApplyCorners};
@@ -1 +1 @@
1
- import{jsx as t}from"react/jsx-runtime";import{IMAGE_FIT_ROW_LABEL as i,imageFitOptions as s,imageIsCropped as p,parseImageFit as c}from"../../../../content/image-fit.js";import{ImageIcon as m}from"efficient-easel/icons";import{FOCAL_DEFAULT as g,focalPicker as n,group as e,imageCornersField as f,linkField as u,plainText as I,sectionCornerSidesField as d,select as F,upload as v}from"../../../controls.js";import{photographyToggle as _}from"../../shared-fields.js";const y={fields:{_gImage:e("Image"),src:v("Image","image/*"),alt:I("Alt text"),aspect:{type:"select",label:"Aspect ratio",options:[{label:"Auto",value:"auto"},{label:"21 : 9",value:"21/9"},{label:"16 : 9",value:"16/9"},{label:"4 : 3",value:"4/3"},{label:"1 : 1",value:"1/1"}]},fit:F(i,t(m,{}),s(),"cover"),focal:n("Image focus",g,"src"),href:u("Link"),_gStyle:e("Style"),grayscale:_(),_gShape:e("Shape"),corners:f(),cornerSides:d()},resolveFields:(r,{fields:o})=>{const a=r.props??{};if(p(a.aspect,c(a.fit,"cover")))return o;const l={...o};return delete l.focal,l}};export{y as ImageBlockFields};
1
+ import{jsx as t}from"react/jsx-runtime";import{IMAGE_FIT_ROW_LABEL as i,imageFitOptions as s,imageIsCropped as p,parseImageFit as c}from"../../../../content/image-fit.js";import{ImageIcon as m}from"efficient-easel/icons";import{FOCAL_DEFAULT as g,focalPicker as n,group as e,imageCornersField as f,linkField as u,plainText as I,cornerSidesField as d,select as F,upload as v}from"../../../controls.js";import{photographyToggle as _}from"../../shared-fields.js";const y={fields:{_gImage:e("Image"),src:v("Image","image/*"),alt:I("Alt text"),aspect:{type:"select",label:"Aspect ratio",options:[{label:"Auto",value:"auto"},{label:"21 : 9",value:"21/9"},{label:"16 : 9",value:"16/9"},{label:"4 : 3",value:"4/3"},{label:"1 : 1",value:"1/1"}]},fit:F(i,t(m,{}),s(),"cover"),focal:n("Image focus",g,"src"),href:u("Link"),_gStyle:e("Style"),grayscale:_(),_gShape:e("Shape"),corners:f(),cornerSides:d()},resolveFields:(r,{fields:o})=>{const a=r.props??{};if(p(a.aspect,c(a.fit,"cover")))return o;const l={...o};return delete l.focal,l}};export{y as ImageBlockFields};
@@ -2,7 +2,7 @@ import { type ReactElement, type ReactNode } from "react";
2
2
  import { readHidable, hidableText, type HidableValue } from "./hidable.js";
3
3
  import { FOLD_FIELD_MARKER, LINK_FIELD_MARKER, MEDIA_FIELD_MARKER, SCAFFOLD_FIELD_MARKER, TEXT_FIELD_MARKER, foldMetaOf, textFieldIdentifier, type EdgeCell, type FoldFieldMeta, type TextFieldMeta, type TextListRendering } from "./field-markers.js";
4
4
  import { type HeroGroupPlacement } from "../hero-group-placement.js";
5
- import { FOCAL_DEFAULT } from "efficient-shell/ui";
5
+ import { type AlignmentPoint, FOCAL_DEFAULT } from "efficient-shell/ui";
6
6
  import type { GeocodeState } from "../content/contact.js";
7
7
  import { type DirectionContainer } from "../content/container-direction.js";
8
8
  import { GAP_FIELD_CONTAINER, type GapContainer } from "../content/container-gap.js";
@@ -133,7 +133,6 @@ export declare function pxField(label: string, opts: {
133
133
  step?: number;
134
134
  unsetLabel?: string;
135
135
  hint?: ReactNode;
136
- restAtSite?: boolean;
137
136
  unsetMark?: ReactElement<MarkProps>;
138
137
  restTrack?: (p: {
139
138
  min: number;
@@ -145,13 +144,21 @@ export declare function pxField(label: string, opts: {
145
144
  }) => ReactElement;
146
145
  }): CustomField<number | null>;
147
146
  export declare function gapField(container: GapContainer): CustomField<number | string>;
148
- export declare function sectionCornerSidesField(): CustomField<string[] | null>;
147
+ interface CornersRowTier {
148
+ sidesKey: string;
149
+ step?: number;
150
+ useFollowed: () => number;
151
+ useClosedReason?: () => string | null;
152
+ mark: ReactElement<MarkProps>;
153
+ hint: ReactNode;
154
+ }
155
+ export declare function cornersRowField(tier: CornersRowTier): CustomField<number | null>;
156
+ export declare function cornerSidesField(): CustomField<string[] | null>;
149
157
  export declare function sectionCornersField(): CustomField<number | null>;
150
158
  export declare const SECTION_BLEEDS_HINT = "This section runs edge to edge, so its corners sit off the page. Set Width to Content width to use them.";
151
159
  export declare function sectionShapeFields(): Record<string, unknown>;
152
160
  export declare function sectionAnimationFields(): Record<string, unknown>;
153
161
  export declare function cardCornersField(): CustomField<number | null>;
154
- export declare function cardCornerSidesField(): CustomField<string[] | null>;
155
162
  export declare function cardShapeFields(): Record<string, unknown>;
156
163
  export declare function boxJustifyField(): SelectField;
157
164
  export declare function boxAlignField(): SelectField;
@@ -206,12 +213,7 @@ export declare function FocalPicker({ label, value, onChange, points, }: {
206
213
  label: string;
207
214
  value: string;
208
215
  onChange: (next: string) => void;
209
- points?: readonly {
210
- value: string;
211
- label: string;
212
- disabled?: boolean;
213
- title?: string;
214
- }[];
216
+ points?: readonly AlignmentPoint[];
215
217
  }): import("react").JSX.Element;
216
218
  export declare function focalPicker(label: string, fallback?: string, imageProp?: string): CustomField<string>;
217
219
  export interface PlacementFieldOptions {
@@ -1 +1 @@
1
- "use client";import{jsx as r,jsxs as T,Fragment as R}from"react/jsx-runtime";import{cloneElement as Je,useId as Ze,useRef as ee,useState as pe}from"react";import{useEasel as F}from"efficient-easel/easel";import{say as l,editorEaselWords as b}from"../editor-words.js";import{readHidable as fe,hidableText as me}from"./hidable.js";import{FOLD_FIELD_MARKER as te,LINK_FIELD_MARKER as he,MEDIA_FIELD_MARKER as ge,SCAFFOLD_FIELD_MARKER as be,TEXT_FIELD_MARKER as v,foldMetaOf as ne,textFieldIdentifier as Qe}from"./field-markers.js";import et from"../../components/ApplyCornersToSiblings.js";import{CARD_IMAGE_RADIUS_STEP as tt,CORNER_RADIUS_MAX as $,CORNER_RADIUS_MIN as M}from"../content/card-image-shape.js";import{IMAGE_CORNER_STEP as nt,IMAGE_CORNERS_LABEL as ot}from"../content/image-corners.js";import{GRID_MAX_COLUMNS as rt}from"../content/grid-span.js";import{GALLERY_ACROSS_BUCKETS as it,GALLERY_LAYOUTS as w,GALLERY_LAYOUT_KEYS as xe}from"../content/gallery-layout.js";import{anchorSiblingsOf as lt,HERO_GROUP_PLACEMENTS as at,HERO_GROUP_PLACEMENT_DEFAULT as st,normalisePlacement as ct,placementPoints as Ce}from"../hero-group-placement.js";import ut from"../../components/KeepHint.js";import{AlignLeftIcon as dt,AlignSeparateIcon as pt,AnimationIcon as Se,BackgroundIcon as ft,BlockSectionIcon as mt,CartIcon as ht,ColumnWidthsIcon as Ie,ColumnsIcon as gt,CornerIcon as _e,DirectionDownIcon as bt,DirectionLeftIcon as xt,DirectionRightIcon as Ct,DirectionUpIcon as St,DollarIcon as It,FinishIcon as _t,GapIcon as ye,GridIcon as yt,GroundIcon as Et,HashIcon as Ee,ImageIcon as Tt,LayoutIcon as Rt,ListIcon as vt,LocationIcon as oe,PaddingBottomIcon as Lt,PaddingLeftIcon as Nt,PaddingRightIcon as Ot,PaddingTopIcon as At,PageIcon as Te,PhoneIcon as Ft,PlacementIcon as wt,ProductSizeIcon as Pt,RotateIcon as kt,SquareIcon as Dt,StylesIcon as Bt,TextLinesIcon as Ht,TypeIcon as Gt,WidthIcon as Mt,WrapIcon as Wt}from"efficient-easel/icons";import{FieldGlyph as Re}from"../../components/FieldGlyph.js";import{resolvePageBackground as Ut}from"../content/page-background.js";import{CORNER_SIDES as P,CORNER_SIDE_POINTS as re,CORNER_SIDES_LABEL as k,cornerSidesSummary as ve,hasOwnSectionCorners as Kt,normalizeCornerSides as z}from"../content/section-corners.js";import{hasOwnCardCorners as Xt}from"../content/card-corners.js";import{SECTION_MOTION_NONE as $t,SECTION_MOTION_OPTIONS as zt}from"../content/section-animation.js";import{enclosingSectionProps as Le}from"./enclosing-section.js";import{SettingsCorners as Ne,SettingsDefaultReset as x,SettingsField as h,SettingsGroupHead as Vt,SettingsGroupSub as Yt,SettingsPlacement as jt,SettingsSegmented as qt,SettingsSwitch as Jt}from"efficient-easel/panel";import{FieldSelect as Zt,ListField as Qt}from"efficient-easel/fields";import{Checkbox as en,DateTimePicker as tn,FOCAL_DEFAULT as Oe,Slider as nn,Tooltip as V}from"efficient-shell/ui";import{ColourControl as Ae}from"./ColourControl.js";import Fe from"./MarkupToolbar.js";import{deviceField as L}from"./device-fields.js";import{noControlField as on}from"./panel-no-control-mark.js";import{phoneKey as Y,resolvePhoneValue as ie}from"./phone-override.js";import{SuppressibleText as rn}from"./section-text-suppress.js";import{CARD_INDEX_OPTIONS as ln,CARD_OUTLINE_OPTIONS as an,DEFAULT_CARD_INDEX_FORMAT as sn,DEFAULT_CARD_OUTLINE as cn}from"../sections/product-card-style.js";import{COVER_INDEX_OPTIONS as un,DEFAULT_COVER_INDEX as dn}from"../sections/card-cover-index.js";import{SCALAR_TEXT_CONTROLS as pn}from"./text-control-kinds.js";import fn from"../../components/ImageFocusRow.js";import mn from"../../components/MediaUploadField.js";import hn from"../../components/MultiSelectField.js";import gn from"../../components/SectionThemePicker.js";import bn from"../../components/SearchSelectField.js";import xn from"../../components/StorefrontLinkField.js";import we from"../../components/UiIcon.js";import{SECTION_PADDING as _}from"../content/section-padding.js";import{hasPhoneHeight as Cn,resolveSectionMinHeight as Sn}from"../content/section-min-height.js";import{SECTION_MIN_HEIGHT as In,SECTION_MIN_HEIGHT_GROUP_LABEL as W,SECTION_SCREEN_PCT as _n}from"../content/section-min-height.js";import{CONTAINER_DIRECTION_LABEL as yn,containerDirectionPoints as En,resolveContainerDirection as Pe}from"../content/container-direction.js";import{BOX_ALIGN_POINTS as Tn,BOX_BLOCK_SPACING_LABEL as Rn,BOX_BLOCK_SPACING_POINTS as ke,BOX_JUSTIFY_POINTS as De,BOX_PHONE_ROW_LABEL as vn,BOX_PHONE_ROW_MAX as Ln,BOX_PHONE_ROW_MIN as Be,BOX_SHARE_LABEL as He,BOX_SHARE_POINTS as le,BOX_WRAP_LABEL as Nn,BOX_WRAP_POINTS as Ge}from"../content/box-layout.js";import{usePreviewHeader as j}from"../../components/PreviewHeaderContext.js";import{CONTAINER_GAP as ae,CONTAINER_GAP_BUILT_IN as On,GAP_FIELD_CONTAINER as An,hasOwnContainerGap as Fn,resolveContainerGap as wn}from"../content/container-gap.js";import{CARD_IMAGE_BG_INHERIT as Pn,CARD_IMAGE_BG_OFF as kn,CARD_IMAGE_BG_SWATCH_NAMES as Dn,CARD_IMAGE_BG_SWATCHES as Bn,isCardImageBackgroundInheriting as Hn,cardImageBackgroundChoice as Gn,THEME_CARD_IMAGE_BG as Mn}from"../content/card-image-background.js";import{SECTION_BG_INHERIT as Wn,SECTION_BG_SWATCHES as Un,SECTION_BG_SWATCH_NAMES as Kn,THEME_SECTION_BG as Xn,isSectionBackgroundInheriting as $n}from"../content/section-background.js";import{SECTION_THEME_GROUP_LABEL as zn}from"../content/section-surface.js";import{TYPE_SIZE_FIXED as Vn,TYPE_SIZE_INHERIT as Yn,isTypeSizeInheriting as jn}from"../content/section-type-size.js";import{SECTION_WIDTH_CHOICES as qn,WIDTH_CHOICE_LABEL as Jn,WIDTH_INHERIT as Zn,resolveWidth as Qn,sectionRunsFullWidth as Me}from"../content/section-width.js";import{useFoldHeadingLevel as We}from"./panel-heading-scope.js";import{withStyleKind as eo}from"efficient-easel/style-clipboard";function U(e){for(const[t,o]of Object.entries(e))o&&typeof o=="object"&&!ne(o)&&eo(o,`section:${t}`);return e}function qr({children:e}){return r("div",{className:"sf-field-label",children:typeof e=="string"?l(e):e})}function Ue(){return null}function to(e){if(!e.trim())throw new Error("noGlyph() needs a reason naming the ruling that decided it.");return r(Ue,{},e)}function no(e){return e.type===Ue}function q(e){return no(e)?void 0:e}function D(e,t){return l("{value} from {from}",{value:e,from:t})}function oo(){const{appState:e}=F(i=>i),t=e.data.root?.props??{},{mode:o,pageWidth:n}=Qn(t,"full");return o==="page"?D(`${n}px`,l("the page")):o==="contained"?D(l("Contained"),l("the page")):D(l("Full"),l("the page"))}function ro(){const{blockGap:e}=j();return e===null?l("this container's own spacing"):D(`${e}px`,l("Site styles"))}function io({inherited:e,onReset:t,label:o}){return r(x,{words:b()?.panel,label:l(o),changed:!e,detail:ro(),onReset:t})}function lo({inherited:e,onReset:t,label:o}){return r(x,{words:b()?.panel,label:l(o),changed:!e,detail:oo(),onReset:t})}function B({value:e,onChange:t,label:o,placeholder:n,hint:i,multiline:a,hideable:s=!0,markup:c=!0}){const{text:u,hidden:p}=fe(e),m=ee(null),d=ee(null),f=E=>t(s?{text:E,hidden:p}:E),g=()=>t({text:u,hidden:!p}),C=s&&p,y=Ze(),S=i?po(i)?r("span",{className:"sf-hint-keep sf-hint-while-typing",children:l(i)}):r(ut,{children:l(i)}):void 0,X=p?l("Show {label} on the slide",{label:l(o)}):l("Hide {label} on the slide",{label:l(o)});return r(h,{label:l(o),icon:r(Gt,{}),htmlFor:y,className:C?"is-hidden":void 0,hint:S,action:s?r(V,{content:X,children:r("button",{type:"button",className:"sf-field-eye","aria-pressed":p,"aria-label":X,onClick:g,children:p?r(we,{name:"eye-off",size:14}):r(we,{name:"eye",size:14})})}):void 0,children:T("div",{className:"sf-copybox",children:[c&&r(Fe,{target:a?d:m,value:u,onChange:f}),a?r("textarea",{id:y,ref:d,value:u,placeholder:n===void 0?void 0:l(n),onChange:E=>f(E.target.value)}):r("input",{id:y,ref:m,type:"text",value:u,placeholder:n===void 0?void 0:l(n),onChange:E=>f(E.target.value)})]})})}function Jr(e,t){return{...e,[be]:t}}function Zr(e){const t=e[v];if(!t)throw new Error("withOffPage: the field holds no authored text");return{...e,[v]:{...t,offPage:!0}}}function Qr(e){return!e||typeof e!="object"?!1:e[v]?.offPage===!0}function ei(e){const t=e[v];if(!t)throw new Error("withIdentifier: the field holds no authored text");return{...e,[v]:{...t,identifier:!0}}}import{TEXT_CONTROL_KINDS as rl,SCALAR_TEXT_CONTROLS as il}from"./text-control-kinds.js";const ao=new Set(pn),H=(e,t)=>{const o={...t,[v]:e};if(!ao.has(e.control))return o;const n=t.render;return{...on(o,"authored-copy"),render:i=>r(rn,{name:i.name,children:n(i)})}},ti="Everything else on this block comes from the linked post. Unlink it to edit by hand.",so="Select a word, then press the highlighter.",co="A short name so a link can jump straight to this section, like yoursite.com/page#about.",uo=new Set([so]),po=e=>uo.has(e);function ni(e,t,o){return H({control:"text",label:e,placeholder:t,hint:o},{type:"custom",render:({value:n,onChange:i})=>r(B,{value:n,onChange:i,label:e,placeholder:t,hint:o})})}function oi(e,t,o){return H({control:"textarea",label:e,placeholder:t,hint:o},{type:"custom",render:({value:n,onChange:i})=>r(B,{value:n,onChange:i,label:e,placeholder:t,hint:o,multiline:!0})})}function fo(e,t,o){return H({control:"plainText",label:e,placeholder:t,hint:o},{type:"custom",render:({value:n,onChange:i})=>r(B,{value:n,onChange:i,label:e,placeholder:t,hint:o,hideable:!1,markup:!1})})}function ri(e,t,o){return H({control:"copyText",label:e,placeholder:t,hint:o},{type:"custom",render:({value:n,onChange:i})=>r(B,{value:n,onChange:i,label:e,placeholder:t,hint:o,hideable:!1})})}function ii(e){return{type:"custom",[he]:{label:e},render:({value:t,onChange:o})=>r(xn,{value:me(t),onChange:o,label:e})}}function li(e,t,o){return H({control:"plainTextarea",label:e,placeholder:t,hint:o},{type:"custom",render:({value:n,onChange:i})=>r(B,{value:n,onChange:i,label:e,placeholder:t,hint:o,multiline:!0,hideable:!1})})}const ai={Content:Ht,Style:Bt,Layout:Rt,Animation:Se};function si(e,t){return e.includes("Content")?t!=="Content":null}function mo({label:e}){return r(Vt,{title:l(e),level:We(1)})}function ho({level:e,label:t}){return e===1?r(mo,{label:t}):r(bo,{label:t})}function Ke(e,t){return{type:"custom",[te]:{label:e,level:t},render:()=>r(ho,{level:t,label:e})}}function I(e){return Ke(e,2)}function ci(e){return{type:"custom",render:()=>r(go,{text:e})}}function go({text:e}){return r("p",{className:"sf-note",children:l(e)})}function ui(e){return Ke(e,1)}function di(e){return ne(e)!==null&&e?.tabs!==void 0}const Xe=new Map;function pi(e,t){const o=`${e}\0${t?t.join(""):""}`,n=Xe.get(o)??{type:"custom",tabs:t,[te]:{label:e,level:1},bucket:e,marker:!0,render:()=>r(R,{})};return Xe.set(o,n),n}function bo({label:e}){return r(Yt,{title:l(e),level:We(2)})}function $e({swatches:e,current:t,onPick:o,names:n}){const i=e.find(c=>c.toLowerCase()===t.toLowerCase()),a=i?n?.[i]:void 0,s=a?l(a):t;return T("div",{className:"sf-swatches",children:[e.map(c=>{const u=n?.[c]?l(n[c]):c;return r(V,{content:u,children:r("button",{type:"button","aria-pressed":t.toLowerCase()===c.toLowerCase(),className:`sf-swatch ${t.toLowerCase()===c.toLowerCase()?"is-active":""}`,style:{background:c},onClick:()=>o(c),"aria-label":u})},c)}),r("span",{className:"sf-swatch-hex",children:s})]})}function fi(e,t){return{type:"custom",render:({value:o,onChange:n})=>{const i=$n(o,t);return r(h,{label:l(e),icon:r(ft,{}),changed:!i,action:r(x,{words:b()?.panel,label:l(e),changed:!i,detail:l("the theme's section background"),onReset:()=>n(Wn)}),children:$e({swatches:Un,current:i?Xn:o??t??"",onPick:n,names:Kn})})}}}function xo(e,t){return{type:"custom",render:({value:o,onChange:n})=>{const i=o,a=Hn(i,t);return r(h,{label:l(e),icon:r(Et,{}),changed:!a,action:r(x,{words:b()?.panel,label:l(e),changed:!a,detail:l("the theme's image stage"),onReset:()=>n(Pn)}),children:$e({swatches:Bn,current:a?Mn:Gn(i,t),onPick:n,names:Dn})})}}}function mi(e=o=>o,t){return U({_gSectionTheme:I(zn),sectionAccent:{type:"custom",render:({value:o,onChange:n})=>r(gn,{value:e(o),onChange:n,followLabel:t})}})}function O({min:e,max:t,step:o,value:n,onChange:i,suffix:a="",readout:s=!0,notch:c,ariaLabel:u,disabled:p=!1}){const m=c!==void 0&&Number.isFinite(c)&&c>=e&&c<=t;return r("div",{className:m?"sf-slider has-notch":"sf-slider",style:m?{"--sf-notch":(c-e)/(t-e)}:void 0,children:r(nn,{min:e,max:t,step:o,value:n,suffix:a||void 0,showInput:s,label:u===void 0?void 0:l(u),disabled:p,size:"sm",className:"sf-slider-track",onChange:d=>{d!==null&&d!==n&&i(d)}})})}function G(e,t,o,n,i,a,s="",c){return{type:"custom",render:u=>r(h,{label:l(e),icon:q(t),action:c?c("storedValue"in u?u.storedValue:u.value,u.onChange):void 0,children:O({min:o,max:n,step:i,value:typeof u.value=="number"?u.value:a,suffix:s,ariaLabel:e,onChange:u.onChange})})}}function ze({min:e,max:t,step:o,px:n,label:i,onChange:a,disabled:s=!1}){const{cornerRadiusPx:c}=j();return r(R,{children:O({min:e,max:t,step:o,value:n??(typeof c=="number"?c:e),readout:!1,ariaLabel:i,disabled:s,onChange:a})})}function K(e,t){const{min:o,max:n,step:i=1,unsetLabel:a,hint:s,restAtSite:c=!1,restTrack:u,unsetMark:p}=t;return{type:"custom",render:({value:m,onChange:d})=>{const f=typeof m=="number"?m:null,g=f===null;return r(h,{label:l(e),value:g?p||a===void 0?void 0:l(a):`${f}px`,changed:!g,action:p?Je(p,{changed:!g,onReset:()=>d(null)}):r(x,{words:b()?.panel,label:l(e),changed:!g,onReset:()=>d(null)}),hint:typeof s=="string"?l(s):s,children:u?u({min:o,max:n,step:i,px:f,label:e,onChange:d}):c?r(ze,{min:o,max:n,step:i,px:f,label:e,onChange:d}):O({min:o,max:n,step:i,value:f??o,readout:!1,ariaLabel:e,onChange:d})})}}}function hi(e){const t=G("Gap",r(ye,{}),ae.min,ae.max,ae.step,On[e],"px",(o,n)=>r(io,{inherited:!Fn(e,o),onReset:()=>n(void 0),label:"Gap"}));return{type:"custom",[An]:e,render:o=>t.render({...o,value:wn(e,o.value,o.field?.siteGap),storedValue:o.value,onChange:n=>o.onChange(n)})}}function Co(){return{type:"custom",render:({value:e,onChange:t})=>{const n=z(e)??[...P],i=n.length===P.length;return r(h,{label:l(k),icon:r(_e,{}),value:ve(n),changed:!i,action:r(x,{words:b()?.panel,label:l(k),changed:!i,onReset:()=>t(null)}),hint:"Corners left off stay square. The row above sets how round the others are.",children:r(Eo,{value:n,onChange:a=>{const s=z(a)??[];t(s.length===P.length?null:s)}})})}}}function So({label:e,changed:t=!1,onReset:o=()=>{}}){const{cornerRadiusPx:n}=j(),i=typeof n=="number"?`${n}px`:l("not set");return r(x,{words:b()?.panel,label:l(e),changed:t,detail:n==null?l("the built-in corners"):D(i,l("Site styles")),onReset:o})}function Io(){return K("Corners",{min:M,max:$,unsetLabel:"Follows the site",unsetMark:r(So,{label:"Corners"}),restTrack:e=>r(_o,{...e}),hint:r(yo,{})})}const Ve="This section runs edge to edge, so its corners sit off the page. Set Width to Content width to use them.";function se(){return Me(J())}function _o(e){return r(ze,{...e,disabled:se()})}function yo(){return r(R,{children:se()?Ve:"Follows Site styles ▸ Basics ▸ Corners until you set a number here."})}function Eo({value:e,onChange:t}){const o=se();return r(Ne,{label:l(k),value:e,corners:o?re.map(n=>({...n,disabled:!0,title:Ve})):re,onChange:t})}function gi(){return U({_gShape:I("Shape"),sectionCorners:Io(),sectionCornerSides:Co()})}function bi(){return{_gMotion:I("Motion"),sectionAnimation:de("Entrance",r(Se,{}),[...zt],$t)}}function ce(){let e=null;try{const{appState:t,selectedItem:o}=F(i=>i),n=o?.props?.id?String(o.props.id):void 0;e=n?Le(t?.data,n):null}catch{e=null}return e!==null&&Me(e)}function Ye(e){const{cornerRadiusPx:t}=j(),o=ce(),n=typeof t=="number"?t:e;let i=null;try{const{appState:s,selectedItem:c}=F(p=>p),u=c?.props?.id?String(c.props.id):void 0;i=u?Le(s?.data,u):null}catch{i=null}if(o||!i)return n;const a=i.sectionCorners;return Kt(a)?a:n}function To({min:e,max:t,step:o,px:n,label:i,onChange:a}){const s=Ye(e);return r(R,{children:O({min:e,max:t,step:o,value:n??s,readout:!1,ariaLabel:i,onChange:a})})}function Ro({label:e,changed:t=!1,onReset:o=()=>{}}){const n=ce(),i=Ye(M),a=n?"Site":"Section";return r(x,{words:b()?.panel,label:l(e),changed:t,detail:D(`${i}px`,n?l("Site styles"):l("the section")),onReset:o})}function vo(){return r(R,{children:ce()?l("The section is full width, so this card follows Site styles ▸ Basics ▸ Corners."):l("Follows the section's Corners until you set a number here.")})}function Lo(){return K("Corners",{min:M,max:$,unsetLabel:"Follows the section",unsetMark:r(Ro,{label:"Corners"}),restTrack:e=>r(To,{...e}),hint:r(vo,{})})}function No({value:e,onChange:t}){return r(Ne,{label:l(k),value:e,corners:re,onChange:t})}function Oo({unset:e}){return r(R,{children:e?l("Set a number above first — there is nothing to shape yet."):l("Corners left off stay square. The row above sets how round the others are.")})}function Ao(){return{type:"custom",render:({value:e,onChange:t})=>{const n=z(e)??[...P],i=n.length===P.length;return r(h,{label:l(k),icon:r(_e,{}),value:ve(n),changed:!i,action:r(x,{words:b()?.panel,label:l(k),changed:!i,onReset:()=>t(null)}),hint:r(Oo,{unset:!Xt(e)}),children:r(No,{value:n,onChange:a=>{const s=z(a)??[];t(s.length===P.length?null:s)}})})}}}function Fo(){return{type:"custom",render:()=>r(et,{})}}function xi(){return{_gShape:I("Shape"),cardCorners:Lo(),cardCornerSides:Ao(),cardCornersApplyAll:Fo()}}function Ci(){return N("Justify",r(pt,{}),De,De[0].value)}function Si(){return N("Item alignment",r(dt,{}),Tn,"stretch")}function Ii(){return N(Nn,r(Wt,{}),Ge,Ge[0].value)}function _i(){return{type:"custom",render:({value:e,onChange:t})=>{const o=le.find(n=>n.value===e)??le[0];return r(h,{label:l(He),icon:r(Ie,{}),value:l(o.label),children:r("div",{className:"sf-gallery-layouts",role:"group","aria-label":l(He),children:le.map(n=>r(V,{content:l(n.label),className:"sf-tile-tip",children:r("button",{type:"button","aria-pressed":o.value===n.value,"aria-label":l(n.label),onClick:()=>t(n.value),children:r("span",{className:"sf-gallery-pic",children:wo(n.weights).map((i,a)=>r("i",{style:{gridColumn:`span ${i}`}},a))})})},n.value))})})}}}function wo(e){if(!e)return[3,4];const t=e.reduce((o,n)=>o+n,0);return e.map(o=>Math.round(o/t*12))}function yi(){return N(Rn,r(ye,{}),ke,ke[0].value)}function Ei(){return G(vn,r(Ft,{}),Be,Ln,1,Be)}function Ti(e){const t=de(yn,to("`Direction` names how a container's children run — a MODIFIER, not a thing. doc/naming.md N10.1 gives the idea a dash in its Glyph column; editor-shell's own `direction` meaning says the bare row is CORRECT and not an omission (SS seat, 2026-09-11)."),En(e),Pe(e,void 0));return{type:"custom",render:o=>t.render({...o,value:Pe(e,o.value),onChange:n=>o.onChange(n)})}}function Ri(e,t,o,n,i,a){return{type:"custom",render:({value:s,onChange:c})=>r(h,{label:l(e),icon:r(Re,{noun:a}),action:r(x,{words:b()?.panel,label:l(e),changed:!jn(s),detail:l("the Text style in Site styles"),onReset:()=>c(Yn),defaultAction:{onPress:()=>c(Vn),title:l("Keep this section's own built-in size"),icon:r(mt,{})}}),children:O({min:t,max:o,step:n,value:typeof s=="number"?s:i,suffix:"px",ariaLabel:e,onChange:c})})}}function vi(){return{_gCellWidth:I("Cell width"),gridSpan:N("Positions",r(Ie,{}),[{label:"Auto",value:""},...Array.from({length:rt},(e,t)=>({label:t===0?"1 position":`${t+1} positions`,value:String(t+1)}))],"")}}function J(){let e=null;try{e=F(t=>t).selectedItem}catch{e=null}return e?.props??{}}function Po({min:e,max:t,step:o,px:n,label:i,onChange:a,desktopKey:s,fallback:c}){const u=J()[s],p=ie(void 0,u,c);return r(R,{children:O({min:e,max:t,step:o,value:ie(n,u,c),readout:!1,ariaLabel:i,notch:p,onChange:a})})}function ko({label:e,desktopKey:t,fallback:o,changed:n=!1,onReset:i=()=>{}}){const a=J()[t],s=ie(void 0,a,o);return r(x,{words:b()?.panel,label:l(e),changed:n,detail:l("{value} on desktop",{value:`${s}px`}),onReset:i})}function Do(e){return K(e.label,{min:e.min,max:e.max,step:e.step,unsetLabel:"Follows Desktop",unsetMark:r(ko,{label:e.label,desktopKey:e.desktopKey,fallback:e.fallback}),restTrack:t=>r(Po,{...t,desktopKey:e.desktopKey,fallback:e.fallback})})}const Bo={Top:"Padding top",Bottom:"Padding bottom",Left:"Padding left",Right:"Padding right"};function Li(e={}){const t=e.keys?.top??"sectionPaddingTop",o=e.keys?.bottom??"sectionPaddingBottom",n=e.group!==!1,i=S=>n?S:Bo[S],a=S=>G(i("Top"),r(At,{}),_.min,_.max,_.step,S,"px"),s=(S,X,E,Q=_)=>L("mobile",Do({label:i(S),desktopKey:X,min:Q.min,max:Q.max,step:Q.step,fallback:E})),c=e.top??_.min,u=e.bottom??_.min,p="sectionPaddingLeft",m="sectionPaddingRight",d=e.sideBounds??_,f=e.side??d.min,g=e.sidePhone??f,C=e.phone===!0,y=S=>C?L("desktop",S):S;return U({...n?{_gSpacing:I("Padding")}:{},[t]:y(a(c)),...C?{[Y(t)]:s("Top",t,c)}:{},...e.only==="top"?{}:{[o]:y(G(i("Bottom"),r(Lt,{}),_.min,_.max,_.step,u,"px")),...C?{[Y(o)]:s("Bottom",o,u)}:{}},...e.sides?{[p]:y(G(i("Left"),r(Nt,{}),d.min,d.max,d.step,f,"px")),...C?{[Y(p)]:s("Left",p,g,d)}:{},[m]:y(G(i("Right"),r(Ot,{}),d.min,d.max,d.step,f,"px")),...C?{[Y(m)]:s("Right",m,g,d)}:{}}:{}})}const Ho={contained:"Contained",page:"Page",full:"Full"},Z="Width";function Ni(e,t=qn,o=!0){const n=t.map(i=>({label:Jn[i]??Ho[i],value:i}));return U({...o?{_gWidth:I(Z)}:{},widthMode:{type:"custom",render:({onChange:i,field:a})=>r(h,{label:l(Z),icon:r(Mt,{}),action:o?r(lo,{inherited:a?.inherited??!1,onReset:()=>i(Zn),label:Z}):void 0,children:ue({options:n,value:a?.currentValue||e,onChange:i,ariaLabel:Z})})}})}function Oi(){const e=n=>({type:"custom",render:({value:i,onChange:a})=>T("div",{className:"sf-field",children:[n?T("div",{className:"sf-field-head",children:[r("span",{className:"sf-field-label sf-field-label--inline",children:W}),n(a)]}):null,r("div",{children:ue({options:[{label:"Auto",value:"auto"},{label:"Fixed",value:"fixed"},{label:"Screen",value:"screen"}],value:["auto","fixed","screen"].includes(i)?i:"auto",onChange:a,ariaLabel:W})})]})}),t=()=>({type:"custom",render:({value:n,onChange:i,field:a})=>{const s=a?.unit==="%"?"%":"px",c=s==="%"?_n:In;return r("div",{className:"sf-field",children:O({min:c.min,max:c.max,step:c.step,value:typeof n=="number"?n:c.fallback,suffix:s,ariaLabel:W,onChange:i})})}}),o=()=>de("Unit",r(Ee,{}),[{label:"px",value:"px"},{label:"%",value:"%"}],"px");return U({_gHeight:I(W),sectionHeightMode:L("desktop",e()),sectionHeightValue:L("desktop",t()),sectionHeightUnit:L("desktop",o()),sectionHeightModePhone:L("mobile",e(n=>r(Go,{onClear:()=>n(void 0)}))),sectionHeightValuePhone:L("mobile",t()),sectionHeightUnitPhone:L("mobile",o())})}function Go({onClear:e}){const t=J(),o=Cn(t),n=Sn(t),i=l("{value} on desktop",{value:n.mode==="auto"?l("Auto"):`${n.value}${n.unit}`});return r(x,{words:b()?.panel,label:l(W),changed:o,detail:i,onReset:e})}function Ai(){return{_gAnchor:I("Anchor"),anchor:fo("Anchor name","e.g. about",co)}}function Fi(e,t,o){return{type:"custom",render:({value:n,onChange:i,id:a,name:s})=>{const c=`${a??s??e}-datetime`,u=Date.parse(typeof n=="string"?n:"");return r(h,{label:l(e),icon:t,htmlFor:c,hint:o===void 0?void 0:l(o),children:r(tn,{id:c,value:Number.isFinite(u)?new Date(u):null,onChange:p=>i(p?p.toISOString():"")})})}}}function A(e,t,o){return{type:"custom",render:({value:n,onChange:i,id:a,name:s})=>{const c=typeof n=="boolean"?n:t,u=`${a??s??e}-label`;return r(h,{label:l(e),labelId:u,icon:o,action:r(Jt,{checked:c,onChange:i,ariaLabelledBy:u})})}}}function wi(){return{type:"custom",render:({value:e,onChange:t,id:o,name:n})=>{const i=`${String(o??n??"pageBackground")}-colour`;return r(h,{label:l("Background"),icon:r(Te,{}),htmlFor:i,action:r(Ae,{id:i,label:"Background",value:Ut(e),onChange:t})})}}}function Pi(e,t){return{type:"custom",render:({value:o,onChange:n,id:i})=>{const a=typeof o=="boolean"?o:t,s=`${i??e}-checkbox`;return r(h,{label:l(e),htmlFor:s,className:"sf-checkbox",action:r(en,{id:s,checked:a,onChange:n})})}}}function ki(e,t){return{type:"custom",render:({value:o,onChange:n})=>r(h,{label:l(e),action:Ae({value:o||t,onChange:n,label:e})})}}const Mo=[{value:"0% 0%",label:"Top left"},{value:"50% 0%",label:"Top"},{value:"100% 0%",label:"Top right"},{value:"0% 50%",label:"Left"},{value:"50% 50%",label:"Center"},{value:"100% 50%",label:"Right"},{value:"0% 100%",label:"Bottom left"},{value:"50% 100%",label:"Bottom"},{value:"100% 100%",label:"Bottom right"}];function je({label:e,value:t,onChange:o,points:n=Mo}){const i=n.map(a=>({...a,label:l(a.label),...a.title?{title:l(a.title)}:null}));return r(jt,{label:l(e),value:t,points:i,onChange:o})}function Di(e,t=Oe,o="mediaImage"){return{type:"custom",render:({value:n,onChange:i})=>r("div",{className:"sf-focal-row",children:r(Wo,{label:e,value:n||t,onChange:i,imageProp:o})})}}function Wo({label:e,value:t,onChange:o,imageProp:n}){const{selectedItem:i}=F(s=>s),a=i?.props?.[n];return r(fn,{label:e,value:t,onChange:o,image:typeof a=="string"?a:void 0})}const Uo=Ce([]);function Bi(e,{stacking:t,fallback:o=st}){return{type:"custom",render:({value:n,onChange:i})=>{const a=at.includes(n)?n:o;return t?r(Ko,{label:e,value:a,onChange:i}):qe({label:e,value:a,onChange:i,points:Uo})}}}function Ko({label:e,value:t,onChange:o}){const{appState:n,selectedItem:i}=F(c=>c),a=i?.props?.id?String(i.props.id):void 0,s=a?lt(n?.data,a):[];return qe({label:e,value:t,onChange:o,points:Ce(s,a)})}function qe({label:e,value:t,onChange:o,points:n}){const i=n.find(a=>a.disabled);return r(h,{label:l(e),icon:r(wt,{}),hint:i?.title?l(i.title):void 0,children:je({label:e,value:ct(t),onChange:o,points:n})})}const Hi={top:r(St,{}),right:r(Ct,{}),bottom:r(bt,{}),left:r(xt,{})};function Gi(e,t,o,n,i,a){const s=m=>t.find(d=>d.value===m),c=m=>({value:m,label:"",disabled:!0,title:n}),u=m=>{const d=t.find(g=>g.cell===m);if(!d)return c(`missing-${m}`);const f=a?.[m];return f?{value:d.value,label:d.label,icon:f}:{value:d.value,label:d.label}},p=[c("corner-top-left"),u("top"),c("corner-top-right"),u("left"),c("centre"),u("right"),c("corner-bottom-left"),u("bottom"),c("corner-bottom-right")];return{type:"custom",render:({value:m,onChange:d})=>{const f=t.some(g=>g.value===m)?m:o;return r(h,{label:l(e),icon:i,value:s(f)?.label?l(s(f).label):"",children:je({label:e,value:f,onChange:d,points:p})})}}}const Xo="\0note";function N(e,t,o,n,i){return{type:"custom",options:o,fallback:n,...i?{note:i}:{},render:({value:a,onChange:s,field:c})=>{const u=c.options??o,p=c.fallback??n,m=u.some(d=>d.value===a)?a:p;return r(h,{label:l(e),icon:q(t),children:r(Zt,{value:m,ariaLabel:l(e),onChange:s,options:[...i?[{label:l(i),value:Xo,disabled:!0}]:[],...u.map(d=>({label:l(d.label),value:d.value}))]})})}}}function Mi(e,t,o){return{type:"custom",options:t,render:({value:n,onChange:i,field:a})=>r(hn,{label:e,options:(a.options??t).map(s=>({...s,label:l(s.label)})),value:Array.isArray(n)?n:[],onChange:i,...o?{emptyLabel:l(o)}:{}})}}function Wi(e,t,o,n){return{type:"custom",options:t,fallback:o,render:({value:i,onChange:a,field:s})=>r(bn,{label:e,options:(s.options??t).map(c=>({...c,label:l(c.label)})),fallback:s.fallback??o,value:i,onChange:a,placeholder:n===void 0?void 0:l(n)})}}function Ui(e,t={}){return{type:"custom",render:({value:o,onChange:n})=>{const i={value:o,onChange:n,...t};return r(e,{...i})}}}function ue({options:e,value:t,onChange:o,ariaLabel:n,disabled:i=!1}){return r(qt,{options:e.map(a=>({id:a.value,label:l(a.label),title:a.title===void 0?void 0:l(a.title)})),value:t,onChange:o,ariaLabel:l(n),disabled:i})}const Ki=[{label:"Image",value:"image"},{label:"Video",value:"video"}];function de(e,t,o,n){const i=o.map(a=>typeof a=="string"?{label:a,value:a}:a);return{type:"custom",render:({value:a,onChange:s,field:c})=>r(h,{label:l(e),icon:q(t),children:ue({options:i,value:i.some(u=>u.value===a)?a:a||c?.currentValue||n,onChange:s,ariaLabel:e})})}}function Xi(e,t,o){return{type:"custom",[ge]:!0,render:({value:n,onChange:i})=>r(mn,{value:n||"",onChange:i,label:e,accept:t,placeholder:o})}}const $i={HeroSingle:["imageFocal"],ContactLocations:["locations[].photo"],ProcessSteps:["steps[].image"]};function zi({value:e,onChange:t,label:o}){const n=e||{},i=!!n.pending,a=i?"var(--fg-dim, #888)":n.ok?"#1d9e75":"#d85a30",s=(c,u)=>t({...n,[c]:u===""?void 0:Number(u)});return T(h,{label:l(o),icon:r(oe,{}),children:[r("button",{type:"button",disabled:i,onClick:()=>t({...n,pending:!0,ok:!1,status:"Finding…"}),style:{width:"100%",display:"flex",alignItems:"center",justifyContent:"center",gap:6,padding:"8px 10px",fontSize:13,cursor:i?"default":"pointer",opacity:i?.6:1,border:"1px solid var(--border-strong, #ccc)",borderRadius:6,background:"transparent",color:"inherit"},children:i?l("Finding…"):l("Find coordinates")}),n.status&&r("div",{style:{marginTop:6,fontSize:12,lineHeight:1.4,color:a},children:l(n.status)}),r("div",{style:{marginTop:6,fontSize:11,color:"var(--fg-dim, #999)"},children:l("Coordinates from OpenStreetMap")}),r("button",{type:"button",onClick:()=>t({...n,manual:!n.manual}),style:{marginTop:8,padding:0,border:"none",background:"none",font:"inherit",fontSize:12,color:"var(--sf-accent, #2563eb)",cursor:"pointer",textDecoration:"underline"},children:n.manual?l("Hide manual coordinates"):l("Enter coordinates manually")}),n.manual&&T("div",{style:{marginTop:8,display:"grid",gap:8},children:[r(h,{label:l("Latitude"),icon:r(oe,{}),children:r("input",{type:"number",step:"any",placeholder:l("e.g. {example}",{example:"34.0990198"}),value:typeof n.lat=="number"?n.lat:"",onChange:c=>s("lat",c.target.value)})}),r(h,{label:l("Longitude"),icon:r(oe,{}),children:r("input",{type:"number",step:"any",placeholder:l("e.g. {example}",{example:"-117.9842833"}),value:typeof n.lng=="number"?n.lng:"",onChange:c=>s("lng",c.target.value)})})]})]})}function $o(e,t){return t===null||t<0||t>=e.length?"":e[t]?.text??""}function zo(e,t,o){const n=e.map(i=>({text:i?.text??""}));return t===null||t<0||t>=e.length?n:n.map((i,a)=>a===t?{text:o}:i)}function Vi(e,t){return e===null?null:t>e?e:null}function Vo(e,t,o){if(o===null||o>=t.length)return null;for(let n=0;n<o;n+=1)if(e[n]!==t[n])return null;return e[o]!==t[o]&&t.includes(e[o])||e[o]!==t[o]&&t.length!==e.length?null:o}const Yi={label:"Ticker items",icon:r(vt,{})};function ji(e,t,o,n){return{type:"custom",[v]:{control:"textList",label:e,placeholder:o,itemKey:"text",rendering:n},render:({value:i,onChange:a})=>r(Yo,{label:e,icon:q(t),items:Array.isArray(i)?i:[],placeholder:o,onChange:a,markup:n==="markup"})}}function Yo({label:e,icon:t,items:o,placeholder:n,onChange:i,markup:a=!1}){const s=ee(null),[c,u]=pe(null),p=d=>d.map(f=>({text:f?.text??""})),m=d=>{const f=Vo(o,d,c);f===null&&(s.current=null),u(f),i(p(d))};return r(Qt,{label:l(e),icon:t,noun:l("item"),items:o,onChange:m,newItem:()=>({text:""}),open:null,onOpen:()=>{},renderItem:()=>null,above:a?r(Fe,{target:s,value:$o(o,c),onChange:d=>i(zo(o,c??-1,d)),disabled:c===null,label:c===null?l("Formatting — click a row first"):l("Formatting — row {n}",{n:c+1})}):void 0,renderRow:(d,f,g)=>r("input",{type:"text",className:a&&c===f?"sf-list-marking":void 0,value:d?.text??"",placeholder:l(n),"aria-label":l("{label} {n}",{label:l(e),n:f+1}),onChange:C=>g({text:C.target.value}),onFocus:C=>{s.current=C.currentTarget,u(f)}})})}function qi(e,t){const o=`${e.label} — row ${t+1}`;return H({control:"plainText",label:o,placeholder:e.placeholder,offPage:e.offPage},{type:"custom",render:({value:n,onChange:i})=>r(B,{value:n,onChange:i,label:l("{label} — row {n}",{label:l(e.label),n:t+1}),placeholder:e.placeholder,hideable:!1,markup:e.rendering==="markup"})})}function Ji(e){return{_gCards:I("Cards"),coverIndex:N("Cover image",r(Tt,{}),un,String(dn),e?.coverHint??"A card's opening picture — a card pinned to a finish keeps its own."),imageBackground:xo("Image background",kn),cardImage:jo(),spinOnHover:A("Rotate on hover",e?.spinDefault??!0,r(kt,{}))}}function Zi(){return{outline:N("Card outline",r(Dt,{}),an,cn),indexBadge:N("Card number",r(Ee,{}),ln,sn),showBadge:A("Product badge",!0,r(Re,{noun:"tag"}))}}function Qi(e){const t=e?.bottomDefault??!0;return{_gShowOnCard:I("Show on a card"),showCardPrice:A("Price",!0,r(It,{})),showCardFinishes:A("Finish swatches",!0,r(_t,{})),showCardSizes:A("Sizes",t,r(Pt,{})),showCardBuy:A("Buy button",t,r(ht,{})),showCardPage:A("Page button",t,r(Te,{}))}}function jo(){return K("Card image",{min:M,max:$,step:tt,hint:"Rounds the picture. The card's own corner is in Site styles."})}function el(){return K(ot,{min:M,max:$,step:nt,unsetLabel:"Square",hint:"Rounds the picture. Left alone it stays square."})}function tl(){return{type:"custom",render:({value:e,onChange:t})=>r(qo,{value:typeof e=="string"?e:"",onChange:t})}}function qo({value:e,onChange:t}){const[o,n]=pe(null),i=xe.filter(s=>o===null||w[s].across===o),a=e&&e in w?w[e]:null;return T(R,{children:[r(h,{label:l("Photos in a row"),icon:r(gt,{}),children:T("div",{className:"sf-gallery-filter",children:[r("button",{type:"button","aria-pressed":o===null,onClick:()=>n(null),children:l("All")}),it.map(s=>r("button",{type:"button","aria-pressed":o===s,onClick:()=>n(s),children:s},s))]})}),r(h,{label:l("Layout"),icon:r(yt,{}),value:a?l(a.label):l("Not chosen"),hint:l("{n} of {total} layouts",{n:i.length,total:xe.length}),children:r("div",{className:"sf-gallery-layouts",children:i.map(s=>r(V,{content:l(w[s].label),className:"sf-tile-tip",children:r("button",{type:"button","aria-pressed":e===s,"aria-label":l(w[s].label),onClick:()=>t(e===s?"":s),children:r("span",{className:"sf-gallery-pic",children:w[s].desktop.map(([c,u],p)=>r("i",{style:{gridColumn:`span ${c}`,gridRow:`span ${u}`}},p))})})},s))})})]})}export{co as ANCHOR_HINT,ti as BOUND_TO_POST_NOTE,ai as BUCKET_ICONS,$i as CUSTOM_FIELD_MEDIA,zi as CoordsField,Hi as EDGE_ARROWS,Oe as FOCAL_DEFAULT,Mo as FOCAL_POINTS,te as FOLD_FIELD_MARKER,je as FocalPicker,bo as GroupLabel,so as HIGHLIGHT_HINT,B as HidableTextField,he as LINK_FIELD_MARKER,qr as Label,ge as MEDIA_FIELD_MARKER,Ki as MEDIA_TYPE_OPTIONS,go as PanelNoteLine,qe as PlacementGridView,be as SCAFFOLD_FIELD_MARKER,il as SCALAR_TEXT_CONTROLS,Ve as SECTION_BLEEDS_HINT,mo as SectionHeading,ue as Segmented,io as SiteGapDefaultReset,O as Slider,$e as Swatches,rl as TEXT_CONTROL_KINDS,v as TEXT_FIELD_MARKER,Yi as TICKER_ITEMS_ROW,Yo as TextListField,lo as WidthDefaultReset,Vo as aimAfterListChange,Ai as anchorFields,D as backTo,fi as backgroundField,Si as boxAlignField,yi as boxBlockSpacingField,Ci as boxJustifyField,Ei as boxPhoneRowField,_i as boxShareField,Ii as boxWrapField,pi as bucketHeader,Ao as cardCornerSidesField,Lo as cardCornersField,xo as cardImageBackgroundField,jo as cardImageField,Ji as cardMediaFields,xi as cardShapeFields,Qi as cardShowFields,Zi as cardStyleFields,vi as cellWidthFields,Pi as checkbox,ki as colorInput,ri as copyText,Fi as dateTime,Ti as directionField,Gi as edgePad,si as entriesHiddenForTab,Di as focalPicker,Vi as focusAfterRemove,ne as foldMetaOf,tl as galleryLayoutField,hi as gapField,I as group,Oi as heightFields,me as hidableText,po as hintIsWhileTyping,q as iconOf,el as imageCornersField,di as isBucketHeader,no as isNoGlyph,ii as linkField,Mi as multiSelect,to as noGlyph,wi as pageBackgroundField,ci as panelNote,Do as phoneOverrideField,Bi as placementField,fo as plainText,li as plainTextarea,K as pxField,fe as readHidable,$o as rowText,Wi as searchSelect,ui as section,bi as sectionAnimationFields,Co as sectionCornerSidesField,Io as sectionCornersField,gi as sectionShapeFields,mi as sectionThemeFields,de as segmented,N as select,zo as setRowText,Ri as sizeField,G as slider,Ui as sourceField,Li as spacingFields,ni as text,Qe as textFieldIdentifier,Qr as textFieldOffPage,ji as textList,qi as textListRowField,oi as textarea,A as toggle,Xi as upload,oo as usePageWidthDetail,ro as useSiteGapDetail,Ni as widthField,ei as withIdentifier,Zr as withOffPage,Jr as withScaffold};
1
+ "use client";import{jsx as r,jsxs as T,Fragment as B}from"react/jsx-runtime";import{cloneElement as ae,useId as Je,useRef as J,useState as se}from"react";import{useEasel as v,useSelectedFields as qe}from"efficient-easel/easel";import{say as l,editorEaselWords as x}from"../editor-words.js";import{readHidable as ce,hidableText as ue}from"./hidable.js";import{FOLD_FIELD_MARKER as q,LINK_FIELD_MARKER as de,MEDIA_FIELD_MARKER as pe,SCAFFOLD_FIELD_MARKER as fe,TEXT_FIELD_MARKER as R,foldMetaOf as Z,textFieldIdentifier as Ze}from"./field-markers.js";import Qe from"../../components/ApplyCornersToSiblings.js";import{CARD_IMAGE_RADIUS_STEP as et,CORNER_RADIUS_MAX as me,CORNER_RADIUS_MIN as A}from"../content/card-image-shape.js";import{IMAGE_CORNER_STEP as tt,IMAGE_CORNERS_LABEL as nt}from"../content/image-corners.js";import{GRID_MAX_COLUMNS as ot}from"../content/grid-span.js";import{GALLERY_ACROSS_BUCKETS as rt,GALLERY_LAYOUTS as F,GALLERY_LAYOUT_KEYS as he}from"../content/gallery-layout.js";import{anchorSiblingsOf as it,HERO_GROUP_PLACEMENTS as lt,HERO_GROUP_PLACEMENT_DEFAULT as at,normalisePlacement as st,placementPoints as ge}from"../hero-group-placement.js";import ct from"../../components/KeepHint.js";import{AlignLeftIcon as ut,AlignSeparateIcon as dt,AnimationIcon as be,BackgroundIcon as pt,BlockSectionIcon as ft,CartIcon as mt,ColumnWidthsIcon as xe,ColumnsIcon as ht,CornerIcon as gt,DirectionDownIcon as bt,DirectionLeftIcon as xt,DirectionRightIcon as St,DirectionUpIcon as Ct,DollarIcon as It,FinishIcon as _t,GapIcon as Se,GridIcon as yt,GroundIcon as Et,HashIcon as Ce,ImageIcon as Tt,LayoutIcon as Rt,ListIcon as Nt,LocationIcon as Q,PaddingBottomIcon as Ot,PaddingLeftIcon as Lt,PaddingRightIcon as vt,PaddingTopIcon as At,PageIcon as Ie,PhoneIcon as Ft,PlacementIcon as wt,ProductSizeIcon as Pt,RotateIcon as kt,SquareIcon as Dt,StylesIcon as Bt,TextLinesIcon as Ht,TypeIcon as Gt,WidthIcon as Mt,WrapIcon as Wt}from"efficient-easel/icons";import{FieldGlyph as _e}from"../../components/FieldGlyph.js";import{resolvePageBackground as Kt}from"../content/page-background.js";import{CORNER_SIDES as ye,CORNER_SIDE_POINTS as Ut,hasOwnSectionCorners as Xt,normalizeCornerSides as Ee}from"../content/section-corners.js";import{SECTION_MOTION_NONE as $t,SECTION_MOTION_OPTIONS as zt}from"../content/section-animation.js";import{enclosingSectionProps as Te}from"./enclosing-section.js";import{SettingsDefaultReset as S,SettingsField as h,SettingsGroupHead as Vt,SettingsGroupSub as Yt,SettingsSegmented as jt,SettingsSwitch as Jt}from"efficient-easel/panel";import{FieldSelect as qt,ListField as Zt}from"efficient-easel/fields";import{AlignmentGrid as Qt,Checkbox as en,CornersInput as tn,DateTimePicker as nn,FOCAL_DEFAULT as Re,Slider as on,Tooltip as K}from"efficient-shell/ui";import{ColourControl as Ne}from"./ColourControl.js";import Oe from"./MarkupToolbar.js";import{deviceField as N}from"./device-fields.js";import{NoControlMark as rn,noControlField as Le}from"./panel-no-control-mark.js";import{phoneKey as U,resolvePhoneValue as ee}from"./phone-override.js";import{SuppressibleText as ln}from"./section-text-suppress.js";import{CARD_INDEX_OPTIONS as an,CARD_OUTLINE_OPTIONS as sn,DEFAULT_CARD_INDEX_FORMAT as cn,DEFAULT_CARD_OUTLINE as un}from"../sections/product-card-style.js";import{COVER_INDEX_OPTIONS as dn,DEFAULT_COVER_INDEX as pn}from"../sections/card-cover-index.js";import{SCALAR_TEXT_CONTROLS as fn}from"./text-control-kinds.js";import mn from"../../components/ImageFocusRow.js";import hn from"../../components/MediaUploadField.js";import gn from"../../components/MultiSelectField.js";import bn from"../../components/SectionThemePicker.js";import xn from"../../components/SearchSelectField.js";import Sn from"../../components/StorefrontLinkField.js";import ve from"../../components/UiIcon.js";import{SECTION_PADDING as _}from"../content/section-padding.js";import{hasPhoneHeight as Cn,resolveSectionMinHeight as In}from"../content/section-min-height.js";import{SECTION_MIN_HEIGHT as _n,SECTION_MIN_HEIGHT_GROUP_LABEL as H,SECTION_SCREEN_PCT as yn}from"../content/section-min-height.js";import{CONTAINER_DIRECTION_LABEL as En,containerDirectionPoints as Tn,resolveContainerDirection as Ae}from"../content/container-direction.js";import{BOX_ALIGN_POINTS as Rn,BOX_BLOCK_SPACING_LABEL as Nn,BOX_BLOCK_SPACING_POINTS as Fe,BOX_JUSTIFY_POINTS as we,BOX_PHONE_ROW_LABEL as On,BOX_PHONE_ROW_MAX as Ln,BOX_PHONE_ROW_MIN as Pe,BOX_SHARE_LABEL as ke,BOX_SHARE_POINTS as te,BOX_WRAP_LABEL as vn,BOX_WRAP_POINTS as De}from"../content/box-layout.js";import{usePreviewHeader as X}from"../../components/PreviewHeaderContext.js";import{CONTAINER_GAP as ne,CONTAINER_GAP_BUILT_IN as An,GAP_FIELD_CONTAINER as Fn,hasOwnContainerGap as wn,resolveContainerGap as Pn}from"../content/container-gap.js";import{CARD_IMAGE_BG_INHERIT as kn,CARD_IMAGE_BG_OFF as Dn,CARD_IMAGE_BG_SWATCH_NAMES as Bn,CARD_IMAGE_BG_SWATCHES as Hn,isCardImageBackgroundInheriting as Gn,cardImageBackgroundChoice as Mn,THEME_CARD_IMAGE_BG as Wn}from"../content/card-image-background.js";import{SECTION_BG_INHERIT as Kn,SECTION_BG_SWATCHES as Un,SECTION_BG_SWATCH_NAMES as Xn,THEME_SECTION_BG as $n,isSectionBackgroundInheriting as zn}from"../content/section-background.js";import{SECTION_THEME_GROUP_LABEL as Vn}from"../content/section-surface.js";import{TYPE_SIZE_FIXED as Yn,TYPE_SIZE_INHERIT as jn,isTypeSizeInheriting as Jn}from"../content/section-type-size.js";import{SECTION_WIDTH_CHOICES as qn,WIDTH_CHOICE_LABEL as Zn,WIDTH_INHERIT as Qn,resolveWidth as eo,sectionRunsFullWidth as Be}from"../content/section-width.js";import{useFoldHeadingLevel as He}from"./panel-heading-scope.js";import{withStyleKind as to}from"efficient-easel/style-clipboard";function G(e){for(const[t,n]of Object.entries(e))n&&typeof n=="object"&&!Z(n)&&to(n,`section:${t}`);return e}function Vr({children:e}){return r("div",{className:"sf-field-label",children:typeof e=="string"?l(e):e})}function Ge(){return null}function no(e){if(!e.trim())throw new Error("noGlyph() needs a reason naming the ruling that decided it.");return r(Ge,{},e)}function oo(e){return e.type===Ge}function $(e){return oo(e)?void 0:e}function w(e,t){return l("{value} from {from}",{value:e,from:t})}function ro(){const{appState:e}=v(i=>i),t=e.data.root?.props??{},{mode:n,pageWidth:o}=eo(t,"full");return n==="page"?w(`${o}px`,l("the page")):n==="contained"?w(l("Contained"),l("the page")):w(l("Full"),l("the page"))}function io(){const{blockGap:e}=X();return e===null?l("this container's own spacing"):w(`${e}px`,l("Site styles"))}function lo({inherited:e,onReset:t,label:n}){return r(S,{words:x()?.panel,label:l(n),changed:!e,detail:io(),onReset:t})}function ao({inherited:e,onReset:t,label:n}){return r(S,{words:x()?.panel,label:l(n),changed:!e,detail:ro(),onReset:t})}function P({value:e,onChange:t,label:n,placeholder:o,hint:i,multiline:a,hideable:c=!0,markup:s=!0}){const{text:u,hidden:p}=ce(e),f=J(null),d=J(null),m=E=>t(c?{text:E,hidden:p}:E),I=()=>t({text:u,hidden:!p}),g=c&&p,y=Je(),b=i?fo(i)?r("span",{className:"sf-hint-keep sf-hint-while-typing",children:l(i)}):r(ct,{children:l(i)}):void 0,W=p?l("Show {label} on the slide",{label:l(n)}):l("Hide {label} on the slide",{label:l(n)});return r(h,{label:l(n),icon:r(Gt,{}),htmlFor:y,className:g?"is-hidden":void 0,hint:b,action:c?r(K,{content:W,children:r("button",{type:"button",className:"sf-field-eye","aria-pressed":p,"aria-label":W,onClick:I,children:p?r(ve,{name:"eye-off",size:14}):r(ve,{name:"eye",size:14})})}):void 0,children:T("div",{className:"sf-copybox",children:[s&&r(Oe,{target:a?d:f,value:u,onChange:m}),a?r("textarea",{id:y,ref:d,value:u,placeholder:o===void 0?void 0:l(o),onChange:E=>m(E.target.value)}):r("input",{id:y,ref:f,type:"text",value:u,placeholder:o===void 0?void 0:l(o),onChange:E=>m(E.target.value)})]})})}function Yr(e,t){return{...e,[fe]:t}}function jr(e){const t=e[R];if(!t)throw new Error("withOffPage: the field holds no authored text");return{...e,[R]:{...t,offPage:!0}}}function Jr(e){return!e||typeof e!="object"?!1:e[R]?.offPage===!0}function qr(e){const t=e[R];if(!t)throw new Error("withIdentifier: the field holds no authored text");return{...e,[R]:{...t,identifier:!0}}}import{TEXT_CONTROL_KINDS as tl,SCALAR_TEXT_CONTROLS as nl}from"./text-control-kinds.js";const so=new Set(fn),k=(e,t)=>{const n={...t,[R]:e};if(!so.has(e.control))return n;const o=t.render;return{...Le(n,"authored-copy"),render:i=>r(ln,{name:i.name,children:o(i)})}},Zr="Everything else on this block comes from the linked post. Unlink it to edit by hand.",co="Select a word, then press the highlighter.",uo="A short name so a link can jump straight to this section, like yoursite.com/page#about.",po=new Set([co]),fo=e=>po.has(e);function Qr(e,t,n){return k({control:"text",label:e,placeholder:t,hint:n},{type:"custom",render:({value:o,onChange:i})=>r(P,{value:o,onChange:i,label:e,placeholder:t,hint:n})})}function ei(e,t,n){return k({control:"textarea",label:e,placeholder:t,hint:n},{type:"custom",render:({value:o,onChange:i})=>r(P,{value:o,onChange:i,label:e,placeholder:t,hint:n,multiline:!0})})}function mo(e,t,n){return k({control:"plainText",label:e,placeholder:t,hint:n},{type:"custom",render:({value:o,onChange:i})=>r(P,{value:o,onChange:i,label:e,placeholder:t,hint:n,hideable:!1,markup:!1})})}function ti(e,t,n){return k({control:"copyText",label:e,placeholder:t,hint:n},{type:"custom",render:({value:o,onChange:i})=>r(P,{value:o,onChange:i,label:e,placeholder:t,hint:n,hideable:!1})})}function ni(e){return{type:"custom",[de]:{label:e},render:({value:t,onChange:n})=>r(Sn,{value:ue(t),onChange:n,label:e})}}function oi(e,t,n){return k({control:"plainTextarea",label:e,placeholder:t,hint:n},{type:"custom",render:({value:o,onChange:i})=>r(P,{value:o,onChange:i,label:e,placeholder:t,hint:n,multiline:!0,hideable:!1})})}const ri={Content:Ht,Style:Bt,Layout:Rt,Animation:be};function ii(e,t){return e.includes("Content")?t!=="Content":null}function ho({label:e}){return r(Vt,{title:l(e),level:He(1)})}function go({level:e,label:t}){return e===1?r(ho,{label:t}):r(xo,{label:t})}function Me(e,t){return{type:"custom",[q]:{label:e,level:t},render:()=>r(go,{level:t,label:e})}}function C(e){return Me(e,2)}function li(e){return{type:"custom",render:()=>r(bo,{text:e})}}function bo({text:e}){return r("p",{className:"sf-note",children:l(e)})}function ai(e){return Me(e,1)}function si(e){return Z(e)!==null&&e?.tabs!==void 0}const We=new Map;function ci(e,t){const n=`${e}\0${t?t.join(""):""}`,o=We.get(n)??{type:"custom",tabs:t,[q]:{label:e,level:1},bucket:e,marker:!0,render:()=>r(B,{})};return We.set(n,o),o}function xo({label:e}){return r(Yt,{title:l(e),level:He(2)})}function Ke({swatches:e,current:t,onPick:n,names:o}){const i=e.find(s=>s.toLowerCase()===t.toLowerCase()),a=i?o?.[i]:void 0,c=a?l(a):t;return T("div",{className:"sf-swatches",children:[e.map(s=>{const u=o?.[s]?l(o[s]):s;return r(K,{content:u,children:r("button",{type:"button","aria-pressed":t.toLowerCase()===s.toLowerCase(),className:`sf-swatch ${t.toLowerCase()===s.toLowerCase()?"is-active":""}`,style:{background:s},onClick:()=>n(s),"aria-label":u})},s)}),r("span",{className:"sf-swatch-hex",children:c})]})}function ui(e,t){return{type:"custom",render:({value:n,onChange:o})=>{const i=zn(n,t);return r(h,{label:l(e),icon:r(pt,{}),changed:!i,action:r(S,{words:x()?.panel,label:l(e),changed:!i,detail:l("the theme's section background"),onReset:()=>o(Kn)}),children:Ke({swatches:Un,current:i?$n:n??t??"",onPick:o,names:Xn})})}}}function So(e,t){return{type:"custom",render:({value:n,onChange:o})=>{const i=n,a=Gn(i,t);return r(h,{label:l(e),icon:r(Et,{}),changed:!a,action:r(S,{words:x()?.panel,label:l(e),changed:!a,detail:l("the theme's image stage"),onReset:()=>o(kn)}),children:Ke({swatches:Hn,current:a?Wn:Mn(i,t),onPick:o,names:Bn})})}}}function di(e=n=>n,t){return G({_gSectionTheme:C(Vn),sectionAccent:{type:"custom",render:({value:n,onChange:o})=>r(bn,{value:e(n),onChange:o,followLabel:t})}})}function M({min:e,max:t,step:n,value:o,onChange:i,suffix:a="",readout:c=!0,notch:s,ariaLabel:u,disabled:p=!1}){const f=s!==void 0&&Number.isFinite(s)&&s>=e&&s<=t;return r("div",{className:f?"sf-slider has-notch":"sf-slider",style:f?{"--sf-notch":(s-e)/(t-e)}:void 0,children:r(on,{min:e,max:t,step:n,value:o,suffix:a||void 0,showInput:c,label:u===void 0?void 0:l(u),disabled:p,size:"sm",className:"sf-slider-track",onChange:d=>{d!==null&&d!==o&&i(d)}})})}function D(e,t,n,o,i,a,c="",s){return{type:"custom",render:u=>r(h,{label:l(e),icon:$(t),action:s?s("storedValue"in u?u.storedValue:u.value,u.onChange):void 0,children:M({min:n,max:o,step:i,value:typeof u.value=="number"?u.value:a,suffix:c,ariaLabel:e,onChange:u.onChange})})}}function Ue(e,t){const{min:n,max:o,step:i=1,unsetLabel:a,hint:c,restTrack:s,unsetMark:u}=t;return{type:"custom",render:({value:p,onChange:f})=>{const d=typeof p=="number"?p:null,m=d===null;return r(h,{label:l(e),value:m?u||a===void 0?void 0:l(a):`${d}px`,changed:!m,action:u?ae(u,{changed:!m,onReset:()=>f(null)}):r(S,{words:x()?.panel,label:l(e),changed:!m,onReset:()=>f(null)}),hint:typeof c=="string"?l(c):c,children:s?s({min:n,max:o,step:i,px:d,label:e,onChange:f}):M({min:n,max:o,step:i,value:d??n,readout:!1,ariaLabel:e,onChange:f})})}}}function pi(e){const t=D("Gap",r(Se,{}),ne.min,ne.max,ne.step,An[e],"px",(n,o)=>r(lo,{inherited:!wn(e,n),onReset:()=>o(void 0),label:"Gap"}));return{type:"custom",[Fn]:e,render:n=>t.render({...n,value:Pn(e,n.value,n.field?.siteGap),storedValue:n.value,onChange:o=>n.onChange(o)})}}const z="Corners";function oe(e){return{type:"custom",render:({value:t,onChange:n})=>{const o=typeof t=="number"&&Number.isFinite(t)?t:null,i=o!==null;return r(h,{label:l(z),icon:r(gt,{}),changed:i,action:ae(e.mark,{changed:i,onReset:()=>n(null)}),hint:e.hint,children:r(Io,{tier:e,px:o,onRadius:n})})}}}function Co(e){let t=null;try{t=qe()}catch{t=null}return[t?.values?.[e],n=>t?.onChange(e,n)]}function Io({tier:e,px:t,onRadius:n}){const o=e.useFollowed(),i=e.useClosedReason?e.useClosedReason():null,[a,c]=Co(e.sidesKey),s=Ee(a)??[...ye];return r(tn,{className:"sf-corners",label:l(z),value:s,corners:Ut,onChange:u=>{const p=Ee(u)??[];c(p.length===ye.length?null:p)},radius:t,onRadiusChange:n,radiusMin:A,radiusMax:me,radiusStep:e.step??1,radiusPlaceholder:String(o),disabled:i!==null,disabledReason:i??void 0})}function Xe(){return Le({type:"custom",render:()=>r(rn,{})},"always")}function _o({label:e,changed:t=!1,onReset:n=()=>{}}){const{cornerRadiusPx:o}=X(),i=typeof o=="number"?`${o}px`:l("not set");return r(S,{words:x()?.panel,label:l(e),changed:t,detail:o==null?l("the built-in corners"):w(i,l("Site styles")),onReset:n})}function yo(){const{cornerRadiusPx:e}=X();return typeof e=="number"?e:A}function Eo(){return oe({sidesKey:"sectionCornerSides",useFollowed:yo,useClosedReason:()=>ze()?l($e):null,mark:r(_o,{label:z}),hint:r(To,{})})}const $e="This section runs edge to edge, so its corners sit off the page. Set Width to Content width to use them.";function ze(){return Be(V())}function To(){return r(B,{children:ze()?$e:"Follows Site styles ▸ Basics ▸ Corners until you set a number here."})}function fi(){return G({_gShape:C("Shape"),sectionCorners:Eo(),sectionCornerSides:Xe()})}function mi(){return{_gMotion:C("Motion"),sectionAnimation:le("Entrance",r(be,{}),[...zt],$t)}}function re(){let e=null;try{const{appState:t,selectedItem:n}=v(i=>i),o=n?.props?.id?String(n.props.id):void 0;e=o?Te(t?.data,o):null}catch{e=null}return e!==null&&Be(e)}function Ve(e){const{cornerRadiusPx:t}=X(),n=re(),o=typeof t=="number"?t:e;let i=null;try{const{appState:c,selectedItem:s}=v(p=>p),u=s?.props?.id?String(s.props.id):void 0;i=u?Te(c?.data,u):null}catch{i=null}if(n||!i)return o;const a=i.sectionCorners;return Xt(a)?a:o}function Ro({label:e,changed:t=!1,onReset:n=()=>{}}){const o=re(),i=Ve(A),a=o?"Site":"Section";return r(S,{words:x()?.panel,label:l(e),changed:t,detail:w(`${i}px`,o?l("Site styles"):l("the section")),onReset:n})}function No(){return r(B,{children:re()?l("The section is full width, so this card follows Site styles ▸ Basics ▸ Corners."):l("Follows the section's Corners until you set a number here.")})}function Oo(){return oe({sidesKey:"cardCornerSides",useFollowed:()=>Ve(A),mark:r(Ro,{label:z}),hint:r(No,{})})}function Lo(){return{type:"custom",render:()=>r(Qe,{})}}function hi(){return{_gShape:C("Shape"),cardCorners:Oo(),cardCornerSides:Xe(),cardCornersApplyAll:Lo()}}function gi(){return O("Justify",r(dt,{}),we,we[0].value)}function bi(){return O("Item alignment",r(ut,{}),Rn,"stretch")}function xi(){return O(vn,r(Wt,{}),De,De[0].value)}function Si(){return{type:"custom",render:({value:e,onChange:t})=>{const n=te.find(o=>o.value===e)??te[0];return r(h,{label:l(ke),icon:r(xe,{}),value:l(n.label),children:r("div",{className:"sf-gallery-layouts",role:"group","aria-label":l(ke),children:te.map(o=>r(K,{content:l(o.label),className:"sf-tile-tip",children:r("button",{type:"button","aria-pressed":n.value===o.value,"aria-label":l(o.label),onClick:()=>t(o.value),children:r("span",{className:"sf-gallery-pic",children:vo(o.weights).map((i,a)=>r("i",{style:{gridColumn:`span ${i}`}},a))})})},o.value))})})}}}function vo(e){if(!e)return[3,4];const t=e.reduce((n,o)=>n+o,0);return e.map(n=>Math.round(n/t*12))}function Ci(){return O(Nn,r(Se,{}),Fe,Fe[0].value)}function Ii(){return D(On,r(Ft,{}),Pe,Ln,1,Pe)}function _i(e){const t=le(En,no("`Direction` names how a container's children run — a MODIFIER, not a thing. doc/naming.md N10.1 gives the idea a dash in its Glyph column; editor-shell's own `direction` meaning says the bare row is CORRECT and not an omission (SS seat, 2026-09-11)."),Tn(e),Ae(e,void 0));return{type:"custom",render:n=>t.render({...n,value:Ae(e,n.value),onChange:o=>n.onChange(o)})}}function yi(e,t,n,o,i,a){return{type:"custom",render:({value:c,onChange:s})=>r(h,{label:l(e),icon:r(_e,{noun:a}),action:r(S,{words:x()?.panel,label:l(e),changed:!Jn(c),detail:l("the Text style in Site styles"),onReset:()=>s(jn),defaultAction:{onPress:()=>s(Yn),title:l("Keep this section's own built-in size"),icon:r(ft,{})}}),children:M({min:t,max:n,step:o,value:typeof c=="number"?c:i,suffix:"px",ariaLabel:e,onChange:s})})}}function Ei(){return{_gCellWidth:C("Cell width"),gridSpan:O("Positions",r(xe,{}),[{label:"Auto",value:""},...Array.from({length:ot},(e,t)=>({label:t===0?"1 position":`${t+1} positions`,value:String(t+1)}))],"")}}function V(){let e=null;try{e=v(t=>t).selectedItem}catch{e=null}return e?.props??{}}function Ao({min:e,max:t,step:n,px:o,label:i,onChange:a,desktopKey:c,fallback:s}){const u=V()[c],p=ee(void 0,u,s);return r(B,{children:M({min:e,max:t,step:n,value:ee(o,u,s),readout:!1,ariaLabel:i,notch:p,onChange:a})})}function Fo({label:e,desktopKey:t,fallback:n,changed:o=!1,onReset:i=()=>{}}){const a=V()[t],c=ee(void 0,a,n);return r(S,{words:x()?.panel,label:l(e),changed:o,detail:l("{value} on desktop",{value:`${c}px`}),onReset:i})}function wo(e){return Ue(e.label,{min:e.min,max:e.max,step:e.step,unsetLabel:"Follows Desktop",unsetMark:r(Fo,{label:e.label,desktopKey:e.desktopKey,fallback:e.fallback}),restTrack:t=>r(Ao,{...t,desktopKey:e.desktopKey,fallback:e.fallback})})}const Po={Top:"Padding top",Bottom:"Padding bottom",Left:"Padding left",Right:"Padding right"};function Ti(e={}){const t=e.keys?.top??"sectionPaddingTop",n=e.keys?.bottom??"sectionPaddingBottom",o=e.group!==!1,i=b=>o?b:Po[b],a=b=>D(i("Top"),r(At,{}),_.min,_.max,_.step,b,"px"),c=(b,W,E,j=_)=>N("mobile",wo({label:i(b),desktopKey:W,min:j.min,max:j.max,step:j.step,fallback:E})),s=e.top??_.min,u=e.bottom??_.min,p="sectionPaddingLeft",f="sectionPaddingRight",d=e.sideBounds??_,m=e.side??d.min,I=e.sidePhone??m,g=e.phone===!0,y=b=>g?N("desktop",b):b;return G({...o?{_gSpacing:C("Padding")}:{},[t]:y(a(s)),...g?{[U(t)]:c("Top",t,s)}:{},...e.only==="top"?{}:{[n]:y(D(i("Bottom"),r(Ot,{}),_.min,_.max,_.step,u,"px")),...g?{[U(n)]:c("Bottom",n,u)}:{}},...e.sides?{[p]:y(D(i("Left"),r(Lt,{}),d.min,d.max,d.step,m,"px")),...g?{[U(p)]:c("Left",p,I,d)}:{},[f]:y(D(i("Right"),r(vt,{}),d.min,d.max,d.step,m,"px")),...g?{[U(f)]:c("Right",f,I,d)}:{}}:{}})}const ko={contained:"Contained",page:"Page",full:"Full"},Y="Width";function Ri(e,t=qn,n=!0){const o=t.map(i=>({label:Zn[i]??ko[i],value:i}));return G({...n?{_gWidth:C(Y)}:{},widthMode:{type:"custom",render:({onChange:i,field:a})=>r(h,{label:l(Y),icon:r(Mt,{}),action:n?r(ao,{inherited:a?.inherited??!1,onReset:()=>i(Qn),label:Y}):void 0,children:ie({options:o,value:a?.currentValue||e,onChange:i,ariaLabel:Y})})}})}function Ni(){const e=o=>({type:"custom",render:({value:i,onChange:a})=>T("div",{className:"sf-field",children:[o?T("div",{className:"sf-field-head",children:[r("span",{className:"sf-field-label sf-field-label--inline",children:H}),o(a)]}):null,r("div",{children:ie({options:[{label:"Auto",value:"auto"},{label:"Fixed",value:"fixed"},{label:"Screen",value:"screen"}],value:["auto","fixed","screen"].includes(i)?i:"auto",onChange:a,ariaLabel:H})})]})}),t=()=>({type:"custom",render:({value:o,onChange:i,field:a})=>{const c=a?.unit==="%"?"%":"px",s=c==="%"?yn:_n;return r("div",{className:"sf-field",children:M({min:s.min,max:s.max,step:s.step,value:typeof o=="number"?o:s.fallback,suffix:c,ariaLabel:H,onChange:i})})}}),n=()=>le("Unit",r(Ce,{}),[{label:"px",value:"px"},{label:"%",value:"%"}],"px");return G({_gHeight:C(H),sectionHeightMode:N("desktop",e()),sectionHeightValue:N("desktop",t()),sectionHeightUnit:N("desktop",n()),sectionHeightModePhone:N("mobile",e(o=>r(Do,{onClear:()=>o(void 0)}))),sectionHeightValuePhone:N("mobile",t()),sectionHeightUnitPhone:N("mobile",n())})}function Do({onClear:e}){const t=V(),n=Cn(t),o=In(t),i=l("{value} on desktop",{value:o.mode==="auto"?l("Auto"):`${o.value}${o.unit}`});return r(S,{words:x()?.panel,label:l(H),changed:n,detail:i,onReset:e})}function Oi(){return{_gAnchor:C("Anchor"),anchor:mo("Anchor name","e.g. about",uo)}}function Li(e,t,n){return{type:"custom",render:({value:o,onChange:i,id:a,name:c})=>{const s=`${a??c??e}-datetime`,u=Date.parse(typeof o=="string"?o:"");return r(h,{label:l(e),icon:t,htmlFor:s,hint:n===void 0?void 0:l(n),children:r(nn,{id:s,value:Number.isFinite(u)?new Date(u):null,onChange:p=>i(p?p.toISOString():"")})})}}}function L(e,t,n){return{type:"custom",render:({value:o,onChange:i,id:a,name:c})=>{const s=typeof o=="boolean"?o:t,u=`${a??c??e}-label`;return r(h,{label:l(e),labelId:u,icon:n,action:r(Jt,{checked:s,onChange:i,ariaLabelledBy:u})})}}}function vi(){return{type:"custom",render:({value:e,onChange:t,id:n,name:o})=>{const i=`${String(n??o??"pageBackground")}-colour`;return r(h,{label:l("Background"),icon:r(Ie,{}),htmlFor:i,action:r(Ne,{id:i,label:"Background",value:Kt(e),onChange:t})})}}}function Ai(e,t){return{type:"custom",render:({value:n,onChange:o,id:i})=>{const a=typeof n=="boolean"?n:t,c=`${i??e}-checkbox`;return r(h,{label:l(e),htmlFor:c,className:"sf-checkbox",action:r(en,{id:c,checked:a,onChange:o})})}}}function Fi(e,t){return{type:"custom",render:({value:n,onChange:o})=>r(h,{label:l(e),action:Ne({value:n||t,onChange:o,label:e})})}}const Bo=[{value:"0% 0%",label:"Top left"},{value:"50% 0%",label:"Top"},{value:"100% 0%",label:"Top right"},{value:"0% 50%",label:"Left"},{value:"50% 50%",label:"Center"},{value:"100% 50%",label:"Right"},{value:"0% 100%",label:"Bottom left"},{value:"50% 100%",label:"Bottom"},{value:"100% 100%",label:"Bottom right"}];function Ye({label:e,value:t,onChange:n,points:o=Bo}){const i=o.map(a=>({...a,label:l(a.label),...a.title?{title:l(a.title)}:null}));return r(Qt,{label:l(e),value:t,points:i,onChange:n})}function wi(e,t=Re,n="mediaImage"){return{type:"custom",render:({value:o,onChange:i})=>r("div",{className:"sf-focal-row",children:r(Ho,{label:e,value:o||t,onChange:i,imageProp:n})})}}function Ho({label:e,value:t,onChange:n,imageProp:o}){const{selectedItem:i}=v(c=>c),a=i?.props?.[o];return r(mn,{label:e,value:t,onChange:n,image:typeof a=="string"?a:void 0})}const Go=ge([]);function Pi(e,{stacking:t,fallback:n=at}){return{type:"custom",render:({value:o,onChange:i})=>{const a=lt.includes(o)?o:n;return t?r(Mo,{label:e,value:a,onChange:i}):je({label:e,value:a,onChange:i,points:Go})}}}function Mo({label:e,value:t,onChange:n}){const{appState:o,selectedItem:i}=v(s=>s),a=i?.props?.id?String(i.props.id):void 0,c=a?it(o?.data,a):[];return je({label:e,value:t,onChange:n,points:ge(c,a)})}function je({label:e,value:t,onChange:n,points:o}){const i=o.find(a=>a.disabled);return r(h,{label:l(e),icon:r(wt,{}),hint:i?.title?l(i.title):void 0,children:Ye({label:e,value:st(t),onChange:n,points:o})})}const ki={top:r(Ct,{}),right:r(St,{}),bottom:r(bt,{}),left:r(xt,{})};function Di(e,t,n,o,i,a){const c=f=>t.find(d=>d.value===f),s=f=>({value:f,label:"",disabled:!0,title:o}),u=f=>{const d=t.find(I=>I.cell===f);if(!d)return s(`missing-${f}`);const m=a?.[f];return m?{value:d.value,label:d.label,icon:m}:{value:d.value,label:d.label}},p=[s("corner-top-left"),u("top"),s("corner-top-right"),u("left"),s("centre"),u("right"),s("corner-bottom-left"),u("bottom"),s("corner-bottom-right")];return{type:"custom",render:({value:f,onChange:d})=>{const m=t.some(I=>I.value===f)?f:n;return r(h,{label:l(e),icon:i,value:c(m)?.label?l(c(m).label):"",children:Ye({label:e,value:m,onChange:d,points:p})})}}}const Wo="\0note";function O(e,t,n,o,i){return{type:"custom",options:n,fallback:o,...i?{note:i}:{},render:({value:a,onChange:c,field:s})=>{const u=s.options??n,p=s.fallback??o,f=u.some(d=>d.value===a)?a:p;return r(h,{label:l(e),icon:$(t),children:r(qt,{value:f,ariaLabel:l(e),onChange:c,options:[...i?[{label:l(i),value:Wo,disabled:!0}]:[],...u.map(d=>({label:l(d.label),value:d.value}))]})})}}}function Bi(e,t,n){return{type:"custom",options:t,render:({value:o,onChange:i,field:a})=>r(gn,{label:e,options:(a.options??t).map(c=>({...c,label:l(c.label)})),value:Array.isArray(o)?o:[],onChange:i,...n?{emptyLabel:l(n)}:{}})}}function Hi(e,t,n,o){return{type:"custom",options:t,fallback:n,render:({value:i,onChange:a,field:c})=>r(xn,{label:e,options:(c.options??t).map(s=>({...s,label:l(s.label)})),fallback:c.fallback??n,value:i,onChange:a,placeholder:o===void 0?void 0:l(o)})}}function Gi(e,t={}){return{type:"custom",render:({value:n,onChange:o})=>{const i={value:n,onChange:o,...t};return r(e,{...i})}}}function ie({options:e,value:t,onChange:n,ariaLabel:o,disabled:i=!1}){return r(jt,{options:e.map(a=>({id:a.value,label:l(a.label),title:a.title===void 0?void 0:l(a.title)})),value:t,onChange:n,ariaLabel:l(o),disabled:i})}const Mi=[{label:"Image",value:"image"},{label:"Video",value:"video"}];function le(e,t,n,o){const i=n.map(a=>typeof a=="string"?{label:a,value:a}:a);return{type:"custom",render:({value:a,onChange:c,field:s})=>r(h,{label:l(e),icon:$(t),children:ie({options:i,value:i.some(u=>u.value===a)?a:a||s?.currentValue||o,onChange:c,ariaLabel:e})})}}function Wi(e,t,n){return{type:"custom",[pe]:!0,render:({value:o,onChange:i})=>r(hn,{value:o||"",onChange:i,label:e,accept:t,placeholder:n})}}const Ki={HeroSingle:["imageFocal"],ContactLocations:["locations[].photo"],ProcessSteps:["steps[].image"]};function Ui({value:e,onChange:t,label:n}){const o=e||{},i=!!o.pending,a=i?"var(--fg-dim, #888)":o.ok?"#1d9e75":"#d85a30",c=(s,u)=>t({...o,[s]:u===""?void 0:Number(u)});return T(h,{label:l(n),icon:r(Q,{}),children:[r("button",{type:"button",disabled:i,onClick:()=>t({...o,pending:!0,ok:!1,status:"Finding…"}),style:{width:"100%",display:"flex",alignItems:"center",justifyContent:"center",gap:6,padding:"8px 10px",fontSize:13,cursor:i?"default":"pointer",opacity:i?.6:1,border:"1px solid var(--border-strong, #ccc)",borderRadius:6,background:"transparent",color:"inherit"},children:i?l("Finding…"):l("Find coordinates")}),o.status&&r("div",{style:{marginTop:6,fontSize:12,lineHeight:1.4,color:a},children:l(o.status)}),r("div",{style:{marginTop:6,fontSize:11,color:"var(--fg-dim, #999)"},children:l("Coordinates from OpenStreetMap")}),r("button",{type:"button",onClick:()=>t({...o,manual:!o.manual}),style:{marginTop:8,padding:0,border:"none",background:"none",font:"inherit",fontSize:12,color:"var(--sf-accent, #2563eb)",cursor:"pointer",textDecoration:"underline"},children:o.manual?l("Hide manual coordinates"):l("Enter coordinates manually")}),o.manual&&T("div",{style:{marginTop:8,display:"grid",gap:8},children:[r(h,{label:l("Latitude"),icon:r(Q,{}),children:r("input",{type:"number",step:"any",placeholder:l("e.g. {example}",{example:"34.0990198"}),value:typeof o.lat=="number"?o.lat:"",onChange:s=>c("lat",s.target.value)})}),r(h,{label:l("Longitude"),icon:r(Q,{}),children:r("input",{type:"number",step:"any",placeholder:l("e.g. {example}",{example:"-117.9842833"}),value:typeof o.lng=="number"?o.lng:"",onChange:s=>c("lng",s.target.value)})})]})]})}function Ko(e,t){return t===null||t<0||t>=e.length?"":e[t]?.text??""}function Uo(e,t,n){const o=e.map(i=>({text:i?.text??""}));return t===null||t<0||t>=e.length?o:o.map((i,a)=>a===t?{text:n}:i)}function Xi(e,t){return e===null?null:t>e?e:null}function Xo(e,t,n){if(n===null||n>=t.length)return null;for(let o=0;o<n;o+=1)if(e[o]!==t[o])return null;return e[n]!==t[n]&&t.includes(e[n])||e[n]!==t[n]&&t.length!==e.length?null:n}const $i={label:"Ticker items",icon:r(Nt,{})};function zi(e,t,n,o){return{type:"custom",[R]:{control:"textList",label:e,placeholder:n,itemKey:"text",rendering:o},render:({value:i,onChange:a})=>r($o,{label:e,icon:$(t),items:Array.isArray(i)?i:[],placeholder:n,onChange:a,markup:o==="markup"})}}function $o({label:e,icon:t,items:n,placeholder:o,onChange:i,markup:a=!1}){const c=J(null),[s,u]=se(null),p=d=>d.map(m=>({text:m?.text??""})),f=d=>{const m=Xo(n,d,s);m===null&&(c.current=null),u(m),i(p(d))};return r(Zt,{label:l(e),icon:t,noun:l("item"),items:n,onChange:f,newItem:()=>({text:""}),open:null,onOpen:()=>{},renderItem:()=>null,above:a?r(Oe,{target:c,value:Ko(n,s),onChange:d=>i(Uo(n,s??-1,d)),disabled:s===null,label:s===null?l("Formatting — click a row first"):l("Formatting — row {n}",{n:s+1})}):void 0,renderRow:(d,m,I)=>r("input",{type:"text",className:a&&s===m?"sf-list-marking":void 0,value:d?.text??"",placeholder:l(o),"aria-label":l("{label} {n}",{label:l(e),n:m+1}),onChange:g=>I({text:g.target.value}),onFocus:g=>{c.current=g.currentTarget,u(m)}})})}function Vi(e,t){const n=`${e.label} — row ${t+1}`;return k({control:"plainText",label:n,placeholder:e.placeholder,offPage:e.offPage},{type:"custom",render:({value:o,onChange:i})=>r(P,{value:o,onChange:i,label:l("{label} — row {n}",{label:l(e.label),n:t+1}),placeholder:e.placeholder,hideable:!1,markup:e.rendering==="markup"})})}function Yi(e){return{_gCards:C("Cards"),coverIndex:O("Cover image",r(Tt,{}),dn,String(pn),e?.coverHint??"A card's opening picture — a card pinned to a finish keeps its own."),imageBackground:So("Image background",Dn),cardImage:zo(),spinOnHover:L("Rotate on hover",e?.spinDefault??!0,r(kt,{}))}}function ji(){return{outline:O("Card outline",r(Dt,{}),sn,un),indexBadge:O("Card number",r(Ce,{}),an,cn),showBadge:L("Product badge",!0,r(_e,{noun:"tag"}))}}function Ji(e){const t=e?.bottomDefault??!0;return{_gShowOnCard:C("Show on a card"),showCardPrice:L("Price",!0,r(It,{})),showCardFinishes:L("Finish swatches",!0,r(_t,{})),showCardSizes:L("Sizes",t,r(Pt,{})),showCardBuy:L("Buy button",t,r(mt,{})),showCardPage:L("Page button",t,r(Ie,{}))}}function zo(){return Ue("Card image",{min:A,max:me,step:et,hint:"Rounds the picture. The card's own corner is in Site styles."})}function qi(){return oe({sidesKey:"cornerSides",step:tt,useFollowed:()=>A,mark:r(Vo,{label:nt}),hint:l("Rounds the picture. Left alone it stays square.")})}function Vo({label:e,changed:t=!1,onReset:n=()=>{}}){return r(S,{words:x()?.panel,label:l(e),changed:t,onReset:n})}function Zi(){return{type:"custom",render:({value:e,onChange:t})=>r(Yo,{value:typeof e=="string"?e:"",onChange:t})}}function Yo({value:e,onChange:t}){const[n,o]=se(null),i=he.filter(c=>n===null||F[c].across===n),a=e&&e in F?F[e]:null;return T(B,{children:[r(h,{label:l("Photos in a row"),icon:r(ht,{}),children:T("div",{className:"sf-gallery-filter",children:[r("button",{type:"button","aria-pressed":n===null,onClick:()=>o(null),children:l("All")}),rt.map(c=>r("button",{type:"button","aria-pressed":n===c,onClick:()=>o(c),children:c},c))]})}),r(h,{label:l("Layout"),icon:r(yt,{}),value:a?l(a.label):l("Not chosen"),hint:l("{n} of {total} layouts",{n:i.length,total:he.length}),children:r("div",{className:"sf-gallery-layouts",children:i.map(c=>r(K,{content:l(F[c].label),className:"sf-tile-tip",children:r("button",{type:"button","aria-pressed":e===c,"aria-label":l(F[c].label),onClick:()=>t(e===c?"":c),children:r("span",{className:"sf-gallery-pic",children:F[c].desktop.map(([s,u],p)=>r("i",{style:{gridColumn:`span ${s}`,gridRow:`span ${u}`}},p))})})},c))})})]})}export{uo as ANCHOR_HINT,Zr as BOUND_TO_POST_NOTE,ri as BUCKET_ICONS,Ki as CUSTOM_FIELD_MEDIA,Ui as CoordsField,ki as EDGE_ARROWS,Re as FOCAL_DEFAULT,Bo as FOCAL_POINTS,q as FOLD_FIELD_MARKER,Ye as FocalPicker,xo as GroupLabel,co as HIGHLIGHT_HINT,P as HidableTextField,de as LINK_FIELD_MARKER,Vr as Label,pe as MEDIA_FIELD_MARKER,Mi as MEDIA_TYPE_OPTIONS,bo as PanelNoteLine,je as PlacementGridView,fe as SCAFFOLD_FIELD_MARKER,nl as SCALAR_TEXT_CONTROLS,$e as SECTION_BLEEDS_HINT,ho as SectionHeading,ie as Segmented,lo as SiteGapDefaultReset,M as Slider,Ke as Swatches,tl as TEXT_CONTROL_KINDS,R as TEXT_FIELD_MARKER,$i as TICKER_ITEMS_ROW,$o as TextListField,ao as WidthDefaultReset,Xo as aimAfterListChange,Oi as anchorFields,w as backTo,ui as backgroundField,bi as boxAlignField,Ci as boxBlockSpacingField,gi as boxJustifyField,Ii as boxPhoneRowField,Si as boxShareField,xi as boxWrapField,ci as bucketHeader,Oo as cardCornersField,So as cardImageBackgroundField,zo as cardImageField,Yi as cardMediaFields,hi as cardShapeFields,Ji as cardShowFields,ji as cardStyleFields,Ei as cellWidthFields,Ai as checkbox,Fi as colorInput,ti as copyText,Xe as cornerSidesField,oe as cornersRowField,Li as dateTime,_i as directionField,Di as edgePad,ii as entriesHiddenForTab,wi as focalPicker,Xi as focusAfterRemove,Z as foldMetaOf,Zi as galleryLayoutField,pi as gapField,C as group,Ni as heightFields,ue as hidableText,fo as hintIsWhileTyping,$ as iconOf,qi as imageCornersField,si as isBucketHeader,oo as isNoGlyph,ni as linkField,Bi as multiSelect,no as noGlyph,vi as pageBackgroundField,li as panelNote,wo as phoneOverrideField,Pi as placementField,mo as plainText,oi as plainTextarea,Ue as pxField,ce as readHidable,Ko as rowText,Hi as searchSelect,ai as section,mi as sectionAnimationFields,Eo as sectionCornersField,fi as sectionShapeFields,di as sectionThemeFields,le as segmented,O as select,Uo as setRowText,yi as sizeField,D as slider,Gi as sourceField,Ti as spacingFields,Qr as text,Ze as textFieldIdentifier,Jr as textFieldOffPage,zi as textList,Vi as textListRowField,ei as textarea,L as toggle,Wi as upload,ro as usePageWidthDetail,io as useSiteGapDetail,Ri as widthField,qr as withIdentifier,jr as withOffPage,Yr as withScaffold};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "efficient-web-builder",
3
- "version": "8.0.0",
3
+ "version": "10.0.0",
4
4
  "description": "The EFFICIENT website builder: the website editor, the general sections and the renderer that draws them, compiled. Hostable by any EFFICIENT product; nothing here imports a host.",
5
5
  "license": "UNLICENSED",
6
6
  "author": "Efficient Pty Ltd",
@@ -40,8 +40,8 @@
40
40
  },
41
41
  "peerDependencies": {
42
42
  "@tabler/icons-react": "^3.46.0",
43
- "efficient-easel": "^2.0.0 || ^3.1.0",
44
- "efficient-shell": "^5.6.0 || ^6.4.0 || ^7.7.0",
43
+ "efficient-easel": "^4.0.0",
44
+ "efficient-shell": "^7.21.0",
45
45
  "isomorphic-dompurify": "^3.18.0",
46
46
  "next": ">=16",
47
47
  "react": ">=19",
@@ -59,8 +59,8 @@
59
59
  "@types/node": "^20",
60
60
  "@types/react": "^19",
61
61
  "@types/react-dom": "^19",
62
- "efficient-easel": "^2.2.0",
63
- "efficient-shell": "^7.19.0",
62
+ "efficient-easel": "^4.0.0",
63
+ "efficient-shell": "^7.21.0",
64
64
  "esbuild": "^0.28.0",
65
65
  "happy-dom": "^20.14.5",
66
66
  "isomorphic-dompurify": "^3.18.0",