efficient-web-builder 21.0.0 → 22.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 +138 -0
- package/dist/components/AnimatedStat.js +1 -1
- package/dist/components/Banner.js +1 -1
- package/dist/components/Cards.js +1 -1
- package/dist/components/CategoryBar.js +1 -1
- package/dist/components/ChartSection.js +1 -1
- package/dist/components/Countdown.js +1 -1
- package/dist/components/DealerFinder.d.ts +12 -0
- package/dist/components/DealerFinder.js +1 -0
- package/dist/components/DocMasthead.js +1 -1
- package/dist/components/DocMetaCards.js +1 -1
- package/dist/components/DocTabs.js +1 -1
- package/dist/components/FeaturedCover.js +1 -1
- package/dist/components/Footprint.d.ts +8 -1
- package/dist/components/Footprint.js +5 -5
- package/dist/components/HeroPoster.d.ts +2 -1
- package/dist/components/HeroPoster.js +1 -1
- package/dist/components/HeroSingle.d.ts +3 -1
- package/dist/components/HeroSingle.js +4 -4
- package/dist/components/HeroSlide.d.ts +2 -1
- package/dist/components/HeroSlide.js +1 -1
- package/dist/components/ImageBlock.d.ts +2 -1
- package/dist/components/ImageBlock.js +1 -1
- package/dist/components/KeyFeatures.js +1 -1
- package/dist/components/LocationGroupHeader.js +1 -1
- package/dist/components/Logos.js +1 -1
- package/dist/components/LongRead.js +1 -1
- package/dist/components/Manifesto.js +1 -1
- package/dist/components/Masthead.js +1 -1
- package/dist/components/MediaUploadField.d.ts +3 -1
- package/dist/components/MediaUploadField.js +1 -1
- package/dist/components/MockupSection.js +1 -1
- package/dist/components/OrderSummary.js +1 -1
- package/dist/components/PagesPanel.js +1 -1
- package/dist/components/ParagraphsA.js +1 -1
- package/dist/components/PostCard.js +1 -1
- package/dist/components/ProcessSteps.js +1 -1
- package/dist/components/Prose.js +1 -1
- package/dist/components/SectionEyebrow.js +1 -1
- package/dist/components/SectionHeader.js +1 -1
- package/dist/components/Series.js +1 -1
- package/dist/components/SiteTextStylesField.js +1 -1
- package/dist/components/Split.js +1 -1
- package/dist/components/Stats.js +1 -1
- package/dist/components/StatsParagraph.js +1 -1
- package/dist/components/Testimonials.js +1 -1
- package/dist/components/Text.js +1 -1
- package/dist/components/ThemeField.js +1 -1
- package/dist/components/Timeline.js +1 -1
- package/dist/components/TimelineTrack.js +1 -1
- package/dist/components/WebsiteScreenParts.js +1 -1
- package/dist/components/storefront-editor.css +96 -271
- package/dist/components/useLocationsTree.js +1 -1
- package/dist/lib/content/phone-focus.d.ts +7 -0
- package/dist/lib/content/phone-focus.js +1 -0
- package/dist/lib/dealer-source.d.ts +34 -0
- package/dist/lib/dealer-source.js +1 -0
- package/dist/lib/editor-words-catalogue.d.ts +9 -5
- package/dist/lib/editor-words-catalogue.js +4 -4
- package/dist/lib/puck/MarkupToolbar.d.ts +1 -1
- package/dist/lib/puck/MarkupToolbar.js +1 -1
- package/dist/lib/puck/blocks/general/Footprint/fields.js +1 -1
- package/dist/lib/puck/blocks/general/Footprint/render.js +2 -2
- package/dist/lib/puck/blocks/general/HeroSingle/fields.js +1 -1
- package/dist/lib/puck/blocks/general/HeroSingle/render.js +1 -1
- package/dist/lib/puck/blocks/general/HeroSlide/fields.js +1 -1
- package/dist/lib/puck/blocks/general/HeroSlide/render.js +1 -1
- package/dist/lib/puck/blocks/general/ImageBlock/fields.js +1 -1
- package/dist/lib/puck/blocks/general/ImageBlock/render.js +1 -1
- package/dist/lib/puck/controls.d.ts +5 -2
- package/dist/lib/puck/controls.js +1 -1
- package/dist/lib/puck/field-groups.js +1 -1
- package/dist/lib/sections/collection-card-text-regions.d.ts +9 -1
- package/dist/lib/sections/collection-card-text-regions.js +1 -1
- package/dist/lib/sections/text-regions.d.ts +1 -0
- package/dist/lib/sections/text-regions.js +1 -1
- package/dist/lib/site-text-styles.d.ts +1 -0
- package/dist/lib/site-text-styles.js +2 -2
- package/dist/lib/source-rules/heading-ceiling-sweep.js +3 -3
- package/dist/lib/source-rules/part-style-naming.js +2 -2
- package/dist/lib/source-rules/rule.d.ts +1 -0
- package/dist/lib/source-rules/rule.js +3 -1
- package/dist/lib/source-rules/size-token-paints.js +4 -4
- package/dist/lib/source-rules/style-face-matches-size.js +3 -3
- package/package.json +7 -5
- package/dist/components/ImageFocusRow.d.ts +0 -7
- package/dist/components/ImageFocusRow.js +0 -1
- package/dist/components/TemplateGlyph.d.ts +0 -6
- package/dist/components/TemplateGlyph.js +0 -1
- package/dist/components/TextStyleRow.d.ts +0 -13
- package/dist/components/TextStyleRow.js +0 -1
|
@@ -89,7 +89,7 @@
|
|
|
89
89
|
.sf-panel-heading {
|
|
90
90
|
display: flex;
|
|
91
91
|
align-items: baseline;
|
|
92
|
-
gap:
|
|
92
|
+
gap: var(--space-8);
|
|
93
93
|
min-width: 0;
|
|
94
94
|
}
|
|
95
95
|
/* The site's name, read-only. Quiet and small — it is context, not a setting,
|
|
@@ -125,7 +125,7 @@
|
|
|
125
125
|
}
|
|
126
126
|
.sf-panel-site::before {
|
|
127
127
|
content: "·";
|
|
128
|
-
margin-right:
|
|
128
|
+
margin-right: var(--space-8);
|
|
129
129
|
}
|
|
130
130
|
.sf-x {
|
|
131
131
|
width: 24px;
|
|
@@ -258,7 +258,7 @@
|
|
|
258
258
|
what makes the ladder read as one list at three depths rather than three
|
|
259
259
|
lists. */
|
|
260
260
|
margin: var(--es-rhythm-between) 0 var(--es-rhythm-between) 16px;
|
|
261
|
-
padding-left:
|
|
261
|
+
padding-left: var(--space-12);
|
|
262
262
|
border-left: 1px solid var(--sf-line);
|
|
263
263
|
display: flex;
|
|
264
264
|
flex-direction: column;
|
|
@@ -278,9 +278,9 @@
|
|
|
278
278
|
.sf-addside-sitewide {
|
|
279
279
|
display: flex;
|
|
280
280
|
align-items: center;
|
|
281
|
-
gap:
|
|
281
|
+
gap: var(--space-12);
|
|
282
282
|
margin-top: 16px;
|
|
283
|
-
padding:
|
|
283
|
+
padding: var(--space-12);
|
|
284
284
|
border: 1px solid var(--sf-divider);
|
|
285
285
|
border-radius: var(--radius-xl);
|
|
286
286
|
}
|
|
@@ -421,11 +421,11 @@
|
|
|
421
421
|
.sf-addcard-addbtn {
|
|
422
422
|
display: inline-flex;
|
|
423
423
|
align-items: center;
|
|
424
|
-
gap:
|
|
424
|
+
gap: var(--space-8);
|
|
425
425
|
background: var(--sf-accent);
|
|
426
426
|
color: var(--sf-on-accent);
|
|
427
427
|
border-radius: var(--radius-lg);
|
|
428
|
-
padding:
|
|
428
|
+
padding: var(--space-8) var(--space-16);
|
|
429
429
|
font-size: var(--text-xs);
|
|
430
430
|
font-weight: 600;
|
|
431
431
|
box-shadow: 0 4px 12px var(--sf-accent-shadow);
|
|
@@ -458,7 +458,7 @@
|
|
|
458
458
|
flex-direction: column;
|
|
459
459
|
align-items: center;
|
|
460
460
|
justify-content: center;
|
|
461
|
-
gap:
|
|
461
|
+
gap: var(--space-12);
|
|
462
462
|
padding: 64px 20px;
|
|
463
463
|
text-align: center;
|
|
464
464
|
color: var(--sf-muted);
|
|
@@ -876,7 +876,7 @@
|
|
|
876
876
|
measured and set (card 66212, 2026-10-13). The token stays, as a name for
|
|
877
877
|
that inset, because rules below read it to reach the panel's edge. */
|
|
878
878
|
--sf-insp-pad-x: var(--es-insp-pad-x, var(--space-16));
|
|
879
|
-
padding-block:
|
|
879
|
+
padding-block: var(--space-4) var(--space-20);
|
|
880
880
|
|
|
881
881
|
/* THE DROPDOWN ARROW, WRITTEN ONCE — card 66399.c.
|
|
882
882
|
Read by `.sf-insp-body select` at rest AND by the hover rule beside it. The
|
|
@@ -973,7 +973,7 @@
|
|
|
973
973
|
border: 1px solid var(--sf-input-border);
|
|
974
974
|
background: var(--sf-field-bg);
|
|
975
975
|
border-radius: var(--sf-field-radius);
|
|
976
|
-
padding:
|
|
976
|
+
padding: var(--space-8) var(--space-12);
|
|
977
977
|
font-size: var(--text-sm);
|
|
978
978
|
color: var(--sf-field-text);
|
|
979
979
|
font-family: var(--sf-font);
|
|
@@ -1074,7 +1074,7 @@
|
|
|
1074
1074
|
background-repeat: no-repeat;
|
|
1075
1075
|
background-position: calc(100% - 12px) calc(50% + 3px);
|
|
1076
1076
|
border-radius: var(--sf-field-radius);
|
|
1077
|
-
padding:
|
|
1077
|
+
padding: var(--space-8) var(--space-12);
|
|
1078
1078
|
font-size: var(--text-sm);
|
|
1079
1079
|
color: var(--sf-field-text);
|
|
1080
1080
|
cursor: pointer;
|
|
@@ -1146,7 +1146,7 @@
|
|
|
1146
1146
|
border: 1px solid var(--sf-input-border);
|
|
1147
1147
|
background: var(--sf-field-bg);
|
|
1148
1148
|
border-radius: var(--sf-field-radius);
|
|
1149
|
-
padding:
|
|
1149
|
+
padding: var(--space-8) var(--space-12);
|
|
1150
1150
|
font-size: var(--text-sm);
|
|
1151
1151
|
font-family: var(--sf-font);
|
|
1152
1152
|
color: var(--sf-field-text);
|
|
@@ -1164,7 +1164,7 @@
|
|
|
1164
1164
|
flex: none;
|
|
1165
1165
|
}
|
|
1166
1166
|
.sf-multi-menu {
|
|
1167
|
-
margin:
|
|
1167
|
+
margin: var(--space-8) 0 0;
|
|
1168
1168
|
padding: 4px;
|
|
1169
1169
|
border: 1px solid var(--sf-input-border);
|
|
1170
1170
|
border-radius: var(--sf-field-radius);
|
|
@@ -1233,7 +1233,7 @@
|
|
|
1233
1233
|
flex: none;
|
|
1234
1234
|
border: 0;
|
|
1235
1235
|
background: none;
|
|
1236
|
-
padding:
|
|
1236
|
+
padding: var(--space-4) var(--space-2) var(--space-4) var(--space-8);
|
|
1237
1237
|
font: inherit;
|
|
1238
1238
|
line-height: 1;
|
|
1239
1239
|
color: var(--sf-text-secondary);
|
|
@@ -1246,7 +1246,7 @@
|
|
|
1246
1246
|
choose. */
|
|
1247
1247
|
.sf-secttheme-oncard {
|
|
1248
1248
|
margin: 0;
|
|
1249
|
-
padding:
|
|
1249
|
+
padding: var(--space-8) var(--space-4) var(--space-8);
|
|
1250
1250
|
font-size: var(--text-2xs);
|
|
1251
1251
|
line-height: 1.4;
|
|
1252
1252
|
color: var(--sf-text-secondary);
|
|
@@ -1355,9 +1355,9 @@
|
|
|
1355
1355
|
.sf-secttheme-item {
|
|
1356
1356
|
display: flex;
|
|
1357
1357
|
align-items: center;
|
|
1358
|
-
gap:
|
|
1358
|
+
gap: var(--space-12);
|
|
1359
1359
|
width: 100%;
|
|
1360
|
-
padding:
|
|
1360
|
+
padding: var(--space-8) var(--space-8);
|
|
1361
1361
|
border: 0;
|
|
1362
1362
|
background: transparent;
|
|
1363
1363
|
border-radius: max(calc(var(--sf-field-radius) - 2px), 2px);
|
|
@@ -1387,12 +1387,12 @@
|
|
|
1387
1387
|
}
|
|
1388
1388
|
.sf-secttheme-sep {
|
|
1389
1389
|
height: 1px;
|
|
1390
|
-
margin:
|
|
1390
|
+
margin: var(--space-4) 0;
|
|
1391
1391
|
background: var(--sf-input-border);
|
|
1392
1392
|
}
|
|
1393
1393
|
/* ── The edit sheet ─────────────────────────────────────────────────────── */
|
|
1394
1394
|
.sf-secttheme-sheet {
|
|
1395
|
-
margin-top:
|
|
1395
|
+
margin-top: var(--space-8);
|
|
1396
1396
|
border: 1px solid var(--sf-input-border);
|
|
1397
1397
|
border-radius: var(--sf-field-radius);
|
|
1398
1398
|
overflow: hidden;
|
|
@@ -1400,7 +1400,7 @@
|
|
|
1400
1400
|
.sf-secttheme-sheet-head {
|
|
1401
1401
|
display: flex;
|
|
1402
1402
|
align-items: center;
|
|
1403
|
-
padding:
|
|
1403
|
+
padding: var(--space-8) var(--space-12);
|
|
1404
1404
|
background: var(--sf-field-bg);
|
|
1405
1405
|
border-bottom: 1px solid var(--sf-input-border);
|
|
1406
1406
|
font-size: var(--text-xs);
|
|
@@ -1435,7 +1435,7 @@
|
|
|
1435
1435
|
it. Drawn in the panel's own warning ink rather than a new colour. */
|
|
1436
1436
|
.sf-secttheme-warn {
|
|
1437
1437
|
margin: 0;
|
|
1438
|
-
padding:
|
|
1438
|
+
padding: var(--space-8) var(--space-12);
|
|
1439
1439
|
border-top: 1px solid var(--sf-input-border);
|
|
1440
1440
|
background: var(--sf-accent-ring);
|
|
1441
1441
|
font-size: var(--text-2xs);
|
|
@@ -1501,7 +1501,7 @@
|
|
|
1501
1501
|
it takes the tree's inset. Placement only; the note style itself is .sf-note. */
|
|
1502
1502
|
.sf-pages > .sf-note {
|
|
1503
1503
|
margin: 0 var(--space-12);
|
|
1504
|
-
padding:
|
|
1504
|
+
padding: var(--space-12);
|
|
1505
1505
|
}
|
|
1506
1506
|
.sf-pages > .sf-note--error {
|
|
1507
1507
|
margin-top: var(--space-4);
|
|
@@ -1526,7 +1526,7 @@
|
|
|
1526
1526
|
font-weight: 700;
|
|
1527
1527
|
letter-spacing: 0.3px;
|
|
1528
1528
|
text-transform: uppercase;
|
|
1529
|
-
padding:
|
|
1529
|
+
padding: var(--space-2) var(--space-8);
|
|
1530
1530
|
border-radius: 999px;
|
|
1531
1531
|
}
|
|
1532
1532
|
.sf-badge-dynamic {
|
|
@@ -1548,7 +1548,7 @@
|
|
|
1548
1548
|
font-weight: 700;
|
|
1549
1549
|
letter-spacing: 0.3px;
|
|
1550
1550
|
text-transform: uppercase;
|
|
1551
|
-
padding:
|
|
1551
|
+
padding: var(--space-2) var(--space-8);
|
|
1552
1552
|
border-radius: 999px;
|
|
1553
1553
|
color: var(--sf-warning);
|
|
1554
1554
|
background: var(--sf-preview-tint);
|
|
@@ -1785,8 +1785,8 @@
|
|
|
1785
1785
|
.sf-theme-colours .es-group-sub,
|
|
1786
1786
|
.sf-secttheme-rows .es-group-sub {
|
|
1787
1787
|
border-top: 1px solid var(--sf-line);
|
|
1788
|
-
margin-top:
|
|
1789
|
-
padding-top:
|
|
1788
|
+
margin-top: var(--space-32);
|
|
1789
|
+
padding-top: var(--space-32);
|
|
1790
1790
|
/* Cancel the panel body's side padding, then put it back inside, so the rule
|
|
1791
1791
|
reaches the panel edge while the words stay on the rows' left edge.
|
|
1792
1792
|
⚠️ READ FROM THE TOKEN, never typed. A literal `14px` here hung the line
|
|
@@ -1956,7 +1956,7 @@
|
|
|
1956
1956
|
border: 1px solid var(--sf-input-border);
|
|
1957
1957
|
background: var(--sf-chip-bg);
|
|
1958
1958
|
border-radius: var(--sf-field-radius);
|
|
1959
|
-
padding:
|
|
1959
|
+
padding: var(--space-8) var(--space-12);
|
|
1960
1960
|
font-size: var(--text-sm);
|
|
1961
1961
|
color: var(--sf-text-secondary);
|
|
1962
1962
|
font-family: var(--sf-font);
|
|
@@ -2018,121 +2018,20 @@
|
|
|
2018
2018
|
opacity: 0.5;
|
|
2019
2019
|
}
|
|
2020
2020
|
|
|
2021
|
-
/* Formatting bar above a copy field — bold · italic · strike
|
|
2021
|
+
/* Formatting bar above a copy field — bold · italic · strike, and Clear.
|
|
2022
2022
|
Select words in the field, press a button; the button writes the markup the
|
|
2023
|
-
renderer understands, so a merchant never types a delimiter.
|
|
2024
|
-
|
|
2025
|
-
|
|
2026
|
-
|
|
2027
|
-
|
|
2028
|
-
|
|
2029
|
-
|
|
2030
|
-
|
|
2031
|
-
|
|
2032
|
-
|
|
2033
|
-
`.sf-markup` — the container class this repo's own bar carried — is GONE from
|
|
2034
|
-
these selectors, because nothing renders it any more (swept: no `"sf-markup"`
|
|
2035
|
-
class in app / components / lib). `.sf-markup-btn` went too: the Clear
|
|
2036
|
-
button is the shell's `IconButton` (harness UI-24), with the shell's own
|
|
2037
|
-
metrics, hover and :disabled look. */
|
|
2038
|
-
.sf-copybox > .es-copy-bar,
|
|
2039
|
-
.es-list-above > .es-copy-bar {
|
|
2040
|
-
display: flex;
|
|
2041
|
-
align-items: center;
|
|
2042
|
-
gap: 2px;
|
|
2043
|
-
/* ZERO, and it is the shell's 4px being neutralised rather than a gap being
|
|
2044
|
-
chosen. `copy.css` gives its bar a gap to the box below it, because in the
|
|
2045
|
-
campaign designer the bar floats above a separately framed box. Here the
|
|
2046
|
-
bar sits INSIDE the frame (card 8802.g) and the list column already spaces
|
|
2047
|
-
its children — both places set 0, which is what the two rules further down
|
|
2048
|
-
used to do one at a time. */
|
|
2049
|
-
margin-bottom: 0;
|
|
2050
|
-
}
|
|
2051
|
-
/* ⚠️ THE BAR WRAPS, and it has to now that three of its buttons are WORDS.
|
|
2052
|
-
|
|
2053
|
-
It was `nowrap` to reproduce the old `.sf-markup` exactly, which was right
|
|
2054
|
-
while every button was a 24px glyph. Highlight / Bold / Quiet are names
|
|
2055
|
-
(card: the three blank buttons), and three names do not share a line with
|
|
2056
|
-
four glyphs and a Clear button in a narrow panel. Measured, `text` row:
|
|
2057
|
-
|
|
2058
|
-
panel nowrap wrap
|
|
2059
|
-
320px Clear 6px inside 6px inside, one line
|
|
2060
|
-
220px Clear 12px OUTSIDE 6px inside, two lines
|
|
2061
|
-
181px Clear 51px OUTSIDE 6px inside, two lines
|
|
2062
|
-
|
|
2063
|
-
So the wrap is not a preference: without it the fix for the blank buttons
|
|
2064
|
-
would trade three unreadable buttons for an unreachable one. `copy.css`
|
|
2065
|
-
already wraps; this rule now only exists to say why that is wanted here. */
|
|
2066
|
-
.sf-copybox > .es-copy-bar,
|
|
2067
|
-
.es-list-above > .es-copy-bar {
|
|
2068
|
-
flex-wrap: wrap;
|
|
2069
|
-
row-gap: 2px;
|
|
2070
|
-
}
|
|
2071
|
-
/* A button that draws a GLYPH is a square; a button that draws a WORD is as
|
|
2072
|
-
wide as its word. `has-glyph` is the shell's own marker for the difference
|
|
2073
|
-
(editor-shell 0.62.0), so the two cases are told apart by what they hold
|
|
2074
|
-
rather than by a list of style names kept in step by hand. */
|
|
2075
|
-
.sf-copybox .es-copy-mark.has-glyph,
|
|
2076
|
-
.es-list-above .es-copy-mark.has-glyph {
|
|
2077
|
-
width: 24px;
|
|
2078
|
-
}
|
|
2079
|
-
.sf-copybox .es-copy-mark:not(.has-glyph),
|
|
2080
|
-
.es-list-above .es-copy-mark:not(.has-glyph) {
|
|
2081
|
-
/* The style's NAME — Highlight / Bold / Quiet. Padded so two of them do not
|
|
2082
|
-
read as one word, and never wrapped mid-name. */
|
|
2083
|
-
padding: 0 6px;
|
|
2084
|
-
font-size: var(--text-2xs);
|
|
2085
|
-
line-height: 1;
|
|
2086
|
-
white-space: nowrap;
|
|
2087
|
-
}
|
|
2088
|
-
/* A mark is the shell's IconButton since efficient-easel 1.0 (UI-24): its
|
|
2089
|
-
ground, ink, hover, press, pressed (`aria-pressed`) and disabled looks are
|
|
2090
|
-
the shell's. Only its height is this row's: the bar is 22px tall. */
|
|
2091
|
-
.sf-copybox .es-copy-mark,
|
|
2092
|
-
.es-list-above .es-copy-mark {
|
|
2093
|
-
height: 22px;
|
|
2094
|
-
}
|
|
2095
|
-
/* The fifth button — clear formatting (card 8809) — pushed away from the four.
|
|
2096
|
-
The four ADD a mark to a selection; this one TAKES every mark off the whole
|
|
2097
|
-
field, so it does not stand shoulder to shoulder with them. This one rule is
|
|
2098
|
-
the whole separation: `margin-left: auto` makes the bar's own `.es-divider-v`
|
|
2099
|
-
eat the free space, which IS the flexible spacer, and carries the button after
|
|
2100
|
-
it to the far end. No new class, no new line and no new colour — the divider
|
|
2101
|
-
already draws itself in --sf-divider, and the button is the shell's
|
|
2102
|
-
`IconButton`, with its metrics, its hover and its :disabled look.
|
|
2103
|
-
|
|
2104
|
-
The height is the one adjustment: `.es-divider-v` is 22px for the 30px icon
|
|
2105
|
-
buttons of the top toolbar, which in a 22px row would run edge to edge and
|
|
2106
|
-
read as a wall rather than a seam. 14px matches the glyphs it separates. */
|
|
2107
|
-
.sf-copybox > .es-copy-bar > .es-copy-bar-split,
|
|
2108
|
-
.es-list-above > .es-copy-bar > .es-copy-bar-split {
|
|
2109
|
-
margin-left: auto;
|
|
2110
|
-
height: 14px;
|
|
2111
|
-
}
|
|
2112
|
-
/* ⚠️ AND THE AUTO MARGIN IS ON THE BUTTON TOO, not only on the divider.
|
|
2113
|
-
`margin-left: auto` eats the free space of the line the item is ON. While
|
|
2114
|
-
the bar was one line that was the same thing. Now that it wraps, the divider
|
|
2115
|
-
can end line 1 while Clear starts line 2 — and Clear, with no auto margin of
|
|
2116
|
-
its own, sat at the LEFT of that line. Measured at 181px: three rows, glyphs
|
|
2117
|
-
/ names / Clear, with Clear 135px from the right edge it is supposed to be
|
|
2118
|
-
at. One declaration, and it is at the far end of whichever line it lands on. */
|
|
2119
|
-
.sf-copybox > .es-copy-bar > .sf-markup-clear,
|
|
2120
|
-
.es-list-above > .es-copy-bar > .sf-markup-clear {
|
|
2121
|
-
margin-left: auto;
|
|
2122
|
-
}
|
|
2123
|
-
/* The shell's divider dressed as the shop's `.es-divider-v`: the same seam, so
|
|
2124
|
-
the bar has ONE divider rather than the shell's plus a hand-rolled one.
|
|
2125
|
-
NO COLOUR IS NAMED — copy.css already draws it in `--es-copy-rule`, which the
|
|
2126
|
-
editor aliases onto its own border token, exactly as `.es-divider-v` drew
|
|
2127
|
-
itself in `--es-divider`. A colour here would be a second answer. */
|
|
2128
|
-
.sf-copybox > .es-copy-bar > .es-copy-bar-split,
|
|
2129
|
-
.es-list-above > .es-copy-bar > .es-copy-bar-split {
|
|
2130
|
-
align-self: center;
|
|
2131
|
-
margin-right: 2px;
|
|
2132
|
-
}
|
|
2023
|
+
renderer understands, so a merchant never types a delimiter.
|
|
2024
|
+
⚠️ THE ROW IS THE SHELL'S `TextToolbar` (efficient-shell/ui, via
|
|
2025
|
+
`MarkupToolbar`; efficient-easel 11.5.0 retired `MarkBar`'s own bar). Its
|
|
2026
|
+
buttons, their size, ground, hover, pressed and :disabled looks, and where
|
|
2027
|
+
the Clear button sits (the toolbar's `last` cell) are the shell's (harness
|
|
2028
|
+
UI-24): no rule here dresses a button. What is the inspector's is only where
|
|
2029
|
+
the bar SITS: inside the copy box's frame, hidden at rest, dimmed with a
|
|
2030
|
+
hidden element. `MarkupToolbar` puts `sf-markup-bar` on the toolbar's
|
|
2031
|
+
wrapper, so these rules never name a shell class. */
|
|
2133
2032
|
/* A hidden element's copy is still editable, so the bar dims with the input
|
|
2134
2033
|
rather than disappearing — same cue, same reason as the input's 0.5. */
|
|
2135
|
-
.es-field.is-hidden .
|
|
2034
|
+
.es-field.is-hidden .sf-markup-bar {
|
|
2136
2035
|
opacity: 0.5;
|
|
2137
2036
|
}
|
|
2138
2037
|
|
|
@@ -2164,9 +2063,9 @@
|
|
|
2164
2063
|
hairline. --sf-hover is the panel's own faintest fill, the tint every other
|
|
2165
2064
|
inspector control uses to say "chrome, not content", so no new colour and no
|
|
2166
2065
|
literal is introduced here. */
|
|
2167
|
-
.sf-copybox > .
|
|
2066
|
+
.sf-copybox > .sf-markup-bar {
|
|
2168
2067
|
margin-bottom: 0;
|
|
2169
|
-
padding:
|
|
2068
|
+
padding: var(--space-4) var(--space-8);
|
|
2170
2069
|
/* ⚠️ NOT a panel divider, and card 66334 deliberately left it. This hairline
|
|
2171
2070
|
is INSIDE one control: it divides the formatting bar from the words, and it
|
|
2172
2071
|
exists instead of giving the bar a second full frame -- which is the thing
|
|
@@ -2182,7 +2081,7 @@
|
|
|
2182
2081
|
unmounted: the bar keeps its place in the markup, and a keyboard user who
|
|
2183
2082
|
Shift+Tabs out of the words lands on its last button, which keeps the box
|
|
2184
2083
|
focused and the bar shown. */
|
|
2185
|
-
.sf-copybox:not(:focus-within) > .
|
|
2084
|
+
.sf-copybox:not(:focus-within) > .sf-markup-bar {
|
|
2186
2085
|
display: none;
|
|
2187
2086
|
}
|
|
2188
2087
|
/* The input gives up its own frame to the wrapper. The `.sf-insp-body` +
|
|
@@ -2215,7 +2114,7 @@
|
|
|
2215
2114
|
.sf-swatches {
|
|
2216
2115
|
display: flex;
|
|
2217
2116
|
align-items: center;
|
|
2218
|
-
gap:
|
|
2117
|
+
gap: var(--space-12);
|
|
2219
2118
|
}
|
|
2220
2119
|
.sf-swatch {
|
|
2221
2120
|
width: 26px;
|
|
@@ -2252,7 +2151,7 @@
|
|
|
2252
2151
|
.sf-colour {
|
|
2253
2152
|
display: inline-flex;
|
|
2254
2153
|
align-items: center;
|
|
2255
|
-
gap:
|
|
2154
|
+
gap: var(--space-8);
|
|
2256
2155
|
min-width: 0;
|
|
2257
2156
|
}
|
|
2258
2157
|
.es-field-head > .sf-colour {
|
|
@@ -2315,7 +2214,7 @@
|
|
|
2315
2214
|
width: 100%;
|
|
2316
2215
|
align-items: center;
|
|
2317
2216
|
gap: 8px;
|
|
2318
|
-
padding:
|
|
2217
|
+
padding: var(--space-8) var(--space-12);
|
|
2319
2218
|
border: 1px solid var(--sf-input-border);
|
|
2320
2219
|
border-radius: var(--sf-field-radius);
|
|
2321
2220
|
background: var(--sf-field-bg);
|
|
@@ -2372,7 +2271,7 @@
|
|
|
2372
2271
|
width: 100%;
|
|
2373
2272
|
align-items: center;
|
|
2374
2273
|
gap: 8px;
|
|
2375
|
-
padding:
|
|
2274
|
+
padding: var(--space-8) var(--space-12);
|
|
2376
2275
|
border: 0;
|
|
2377
2276
|
background: none;
|
|
2378
2277
|
text-align: left;
|
|
@@ -2460,7 +2359,7 @@
|
|
|
2460
2359
|
merchant's settings, so it must not read as loudly as the rows above it. */
|
|
2461
2360
|
.sf-hints {
|
|
2462
2361
|
display: flex;
|
|
2463
|
-
margin-top:
|
|
2362
|
+
margin-top: var(--space-32);
|
|
2464
2363
|
}
|
|
2465
2364
|
/* A rung that is not part of a strip: it sizes to its own word rather than
|
|
2466
2365
|
sharing a row, so the `flex: 1` every rung takes has to come back off. */
|
|
@@ -2468,7 +2367,7 @@
|
|
|
2468
2367
|
display: inline-flex;
|
|
2469
2368
|
flex: none;
|
|
2470
2369
|
align-items: center;
|
|
2471
|
-
gap:
|
|
2370
|
+
gap: var(--space-8);
|
|
2472
2371
|
color: var(--sf-muted);
|
|
2473
2372
|
}
|
|
2474
2373
|
.sf-hints-toggle svg {
|
|
@@ -2503,7 +2402,7 @@
|
|
|
2503
2402
|
}
|
|
2504
2403
|
/* The "Auto" button that clears an optional number back to the built-in. */
|
|
2505
2404
|
.sf-auto-reset {
|
|
2506
|
-
padding:
|
|
2405
|
+
padding: var(--space-2) var(--space-8);
|
|
2507
2406
|
border: 1px solid var(--sf-input-border);
|
|
2508
2407
|
border-radius: var(--sf-field-radius);
|
|
2509
2408
|
background: var(--sf-field-bg);
|
|
@@ -2570,7 +2469,7 @@
|
|
|
2570
2469
|
width: 100%;
|
|
2571
2470
|
align-items: center;
|
|
2572
2471
|
gap: 8px;
|
|
2573
|
-
padding:
|
|
2472
|
+
padding: var(--space-12) 0;
|
|
2574
2473
|
background: none;
|
|
2575
2474
|
border: 0;
|
|
2576
2475
|
text-align: left;
|
|
@@ -2670,7 +2569,7 @@
|
|
|
2670
2569
|
/* The face picker -- a native select, so the platform draws the list, the
|
|
2671
2570
|
keyboard works and a phone gets its own wheel. */
|
|
2672
2571
|
.sf-select {
|
|
2673
|
-
padding:
|
|
2572
|
+
padding: var(--space-8) var(--space-8);
|
|
2674
2573
|
border: 1px solid var(--sf-input-border);
|
|
2675
2574
|
border-radius: var(--sf-field-radius);
|
|
2676
2575
|
background: var(--sf-field-bg);
|
|
@@ -2783,7 +2682,7 @@
|
|
|
2783
2682
|
display: flex;
|
|
2784
2683
|
flex-direction: column;
|
|
2785
2684
|
gap: 4px;
|
|
2786
|
-
padding:
|
|
2685
|
+
padding: var(--space-12) var(--space-12);
|
|
2787
2686
|
}
|
|
2788
2687
|
.sf-theme-eyebrow {
|
|
2789
2688
|
font-size: 7.5px;
|
|
@@ -2811,14 +2710,14 @@
|
|
|
2811
2710
|
.sf-theme-row {
|
|
2812
2711
|
display: flex;
|
|
2813
2712
|
align-items: center;
|
|
2814
|
-
gap:
|
|
2713
|
+
gap: var(--space-8);
|
|
2815
2714
|
margin-top: 1px;
|
|
2816
2715
|
}
|
|
2817
2716
|
.sf-theme-btn {
|
|
2818
2717
|
font-size: 8.5px;
|
|
2819
2718
|
font-weight: 700;
|
|
2820
2719
|
letter-spacing: 0.02em;
|
|
2821
|
-
padding:
|
|
2720
|
+
padding: var(--space-8) var(--space-12);
|
|
2822
2721
|
border-radius: var(--radius-sm);
|
|
2823
2722
|
white-space: nowrap;
|
|
2824
2723
|
flex: none;
|
|
@@ -2843,7 +2742,7 @@
|
|
|
2843
2742
|
align-items: center;
|
|
2844
2743
|
justify-content: space-between;
|
|
2845
2744
|
gap: 8px;
|
|
2846
|
-
padding:
|
|
2745
|
+
padding: var(--space-8) var(--space-8) var(--space-8) var(--space-12);
|
|
2847
2746
|
background: var(--sf-hover);
|
|
2848
2747
|
}
|
|
2849
2748
|
.sf-theme-card.is-selected .sf-theme-foot { color: var(--sf-accent-text); }
|
|
@@ -2893,7 +2792,7 @@
|
|
|
2893
2792
|
.sf-theme-add {
|
|
2894
2793
|
display: flex;
|
|
2895
2794
|
align-items: center;
|
|
2896
|
-
gap:
|
|
2795
|
+
gap: var(--space-8);
|
|
2897
2796
|
margin-top: 8px;
|
|
2898
2797
|
border: 0;
|
|
2899
2798
|
background: none;
|
|
@@ -2919,12 +2818,12 @@
|
|
|
2919
2818
|
around them is what says the three belong together: they are one decision. */
|
|
2920
2819
|
.sf-colour-lede {
|
|
2921
2820
|
margin-top: -3px;
|
|
2922
|
-
margin-bottom:
|
|
2821
|
+
margin-bottom: var(--space-12);
|
|
2923
2822
|
}
|
|
2924
2823
|
.sf-colour-pair {
|
|
2925
2824
|
border: 1px solid var(--sf-divider);
|
|
2926
2825
|
border-radius: var(--sf-row-radius);
|
|
2927
|
-
padding:
|
|
2826
|
+
padding: var(--space-2) var(--space-12) var(--space-12);
|
|
2928
2827
|
background: var(--sf-app-bg);
|
|
2929
2828
|
}
|
|
2930
2829
|
/* The rows sit inside a card that already spaces them, so they set their own
|
|
@@ -2934,7 +2833,7 @@
|
|
|
2934
2833
|
sub-row inside one setting's card has no business borrowing the class that
|
|
2935
2834
|
sets the distance between two settings. Copied exactly — nothing moves. */
|
|
2936
2835
|
.sf-colour-row {
|
|
2937
|
-
margin-top:
|
|
2836
|
+
margin-top: var(--space-12);
|
|
2938
2837
|
display: flex;
|
|
2939
2838
|
align-items: center;
|
|
2940
2839
|
justify-content: space-between;
|
|
@@ -2961,15 +2860,15 @@
|
|
|
2961
2860
|
}
|
|
2962
2861
|
|
|
2963
2862
|
.sf-readability {
|
|
2964
|
-
margin-top:
|
|
2965
|
-
padding:
|
|
2863
|
+
margin-top: var(--space-12);
|
|
2864
|
+
padding: var(--space-12) var(--space-12) var(--space-12);
|
|
2966
2865
|
border: 1px solid var(--sf-divider);
|
|
2967
2866
|
border-radius: var(--sf-row-radius);
|
|
2968
2867
|
}
|
|
2969
2868
|
.sf-readability-row {
|
|
2970
2869
|
display: flex;
|
|
2971
2870
|
align-items: center;
|
|
2972
|
-
gap:
|
|
2871
|
+
gap: var(--space-12);
|
|
2973
2872
|
padding: 4px 0;
|
|
2974
2873
|
font-size: var(--text-xs);
|
|
2975
2874
|
}
|
|
@@ -3008,7 +2907,7 @@
|
|
|
3008
2907
|
.sf-readability-val.is-hard { color: var(--sf-danger); }
|
|
3009
2908
|
|
|
3010
2909
|
.sf-readability-advice {
|
|
3011
|
-
margin-top:
|
|
2910
|
+
margin-top: var(--space-8);
|
|
3012
2911
|
font-size: var(--text-2xs);
|
|
3013
2912
|
line-height: 1.6;
|
|
3014
2913
|
color: var(--sf-muted);
|
|
@@ -3016,15 +2915,15 @@
|
|
|
3016
2915
|
.sf-readability-suggestions {
|
|
3017
2916
|
display: flex;
|
|
3018
2917
|
flex-wrap: wrap;
|
|
3019
|
-
gap:
|
|
2918
|
+
gap: var(--space-8);
|
|
3020
2919
|
margin-top: 8px;
|
|
3021
2920
|
}
|
|
3022
2921
|
.sf-readability-suggestion {
|
|
3023
2922
|
display: inline-flex;
|
|
3024
2923
|
align-items: center;
|
|
3025
|
-
gap:
|
|
2924
|
+
gap: var(--space-8);
|
|
3026
2925
|
height: 26px;
|
|
3027
|
-
padding: 0
|
|
2926
|
+
padding: 0 var(--space-12);
|
|
3028
2927
|
border: 1px solid var(--sf-input-border);
|
|
3029
2928
|
border-radius: var(--sf-field-radius);
|
|
3030
2929
|
background: var(--sf-field-bg);
|
|
@@ -3135,13 +3034,13 @@
|
|
|
3135
3034
|
justify-content: space-between;
|
|
3136
3035
|
gap: 12px;
|
|
3137
3036
|
flex: none;
|
|
3138
|
-
padding:
|
|
3037
|
+
padding: var(--space-12) var(--space-16);
|
|
3139
3038
|
background: var(--sf-panel);
|
|
3140
3039
|
}
|
|
3141
3040
|
.sf-preview-pin-text {
|
|
3142
3041
|
display: flex;
|
|
3143
3042
|
flex-direction: column;
|
|
3144
|
-
gap:
|
|
3043
|
+
gap: var(--space-2);
|
|
3145
3044
|
min-width: 0;
|
|
3146
3045
|
}
|
|
3147
3046
|
.sf-preview-pin-label {
|
|
@@ -3161,7 +3060,7 @@
|
|
|
3161
3060
|
.sf-colstep {
|
|
3162
3061
|
display: flex;
|
|
3163
3062
|
align-items: center;
|
|
3164
|
-
gap:
|
|
3063
|
+
gap: var(--space-8);
|
|
3165
3064
|
}
|
|
3166
3065
|
.sf-colstep-value {
|
|
3167
3066
|
min-width: 14px;
|
|
@@ -3219,18 +3118,18 @@
|
|
|
3219
3118
|
/* Segmented */
|
|
3220
3119
|
.sf-seg2 {
|
|
3221
3120
|
display: flex;
|
|
3222
|
-
gap:
|
|
3121
|
+
gap: var(--space-4);
|
|
3223
3122
|
background: var(--sf-track-bg);
|
|
3224
3123
|
border: 1px solid var(--sf-input-border);
|
|
3225
3124
|
border-radius: var(--radius-lg);
|
|
3226
|
-
padding:
|
|
3125
|
+
padding: var(--space-4);
|
|
3227
3126
|
}
|
|
3228
3127
|
.sf-seg2 button {
|
|
3229
3128
|
flex: 1;
|
|
3230
3129
|
border: none;
|
|
3231
3130
|
background: transparent;
|
|
3232
3131
|
border-radius: var(--radius-md);
|
|
3233
|
-
padding:
|
|
3132
|
+
padding: var(--space-8) var(--space-8);
|
|
3234
3133
|
font-size: var(--text-xs);
|
|
3235
3134
|
font-weight: 500;
|
|
3236
3135
|
color: var(--sf-icon);
|
|
@@ -3276,7 +3175,7 @@
|
|
|
3276
3175
|
container and is untouched by construction. */
|
|
3277
3176
|
@container (width < 284px) {
|
|
3278
3177
|
.sf-seg2 button {
|
|
3279
|
-
padding-inline:
|
|
3178
|
+
padding-inline: var(--space-8);
|
|
3280
3179
|
}
|
|
3281
3180
|
}
|
|
3282
3181
|
|
|
@@ -3374,7 +3273,7 @@
|
|
|
3374
3273
|
The row the bar is aimed at has to stay visible AFTER the caret leaves — the
|
|
3375
3274
|
merchant clicks the bar, which takes the focus ring off the row — so the cue
|
|
3376
3275
|
is painted rather than borrowed from :focus. Accent tokens only. */
|
|
3377
|
-
.es-list-above > .
|
|
3276
|
+
.es-list-above > .sf-markup-bar {
|
|
3378
3277
|
margin-bottom: 0;
|
|
3379
3278
|
}
|
|
3380
3279
|
input.sf-list-marking {
|
|
@@ -3387,7 +3286,7 @@ input.sf-list-marking {
|
|
|
3387
3286
|
.sf-blogsource {
|
|
3388
3287
|
display: flex;
|
|
3389
3288
|
flex-direction: column;
|
|
3390
|
-
gap:
|
|
3289
|
+
gap: var(--space-12);
|
|
3391
3290
|
}
|
|
3392
3291
|
/* The shell's Button in the column (SourceStatus): its own width, not the
|
|
3393
3292
|
column's. Placement only; the look is the shell's (harness UI-24). */
|
|
@@ -3438,7 +3337,7 @@ input.sf-list-marking {
|
|
|
3438
3337
|
.sf-formpicker {
|
|
3439
3338
|
display: flex;
|
|
3440
3339
|
flex-direction: column;
|
|
3441
|
-
gap:
|
|
3340
|
+
gap: var(--space-12);
|
|
3442
3341
|
}
|
|
3443
3342
|
.sf-formsummary-caption {
|
|
3444
3343
|
margin-bottom: 4px;
|
|
@@ -3449,7 +3348,7 @@ input.sf-list-marking {
|
|
|
3449
3348
|
}
|
|
3450
3349
|
.sf-formsummary-fields {
|
|
3451
3350
|
margin: 0;
|
|
3452
|
-
padding-left:
|
|
3351
|
+
padding-left: var(--space-20);
|
|
3453
3352
|
font-size: var(--text-xs);
|
|
3454
3353
|
line-height: 1.55;
|
|
3455
3354
|
color: var(--sf-text-secondary);
|
|
@@ -3466,32 +3365,10 @@ input.sf-list-marking {
|
|
|
3466
3365
|
gap: 8px;
|
|
3467
3366
|
}
|
|
3468
3367
|
|
|
3469
|
-
/* THE MEDIA ROW IS efficient-easel's `ImageBox
|
|
3470
|
-
(
|
|
3471
|
-
|
|
3472
|
-
|
|
3473
|
-
/* Loading / error line under the slot, so a slow or failed picker round-trip is
|
|
3474
|
-
visible instead of nothing happening. */
|
|
3475
|
-
.sf-image-status {
|
|
3476
|
-
margin-top: 6px;
|
|
3477
|
-
font-size: var(--text-2xs);
|
|
3478
|
-
color: var(--sf-muted);
|
|
3479
|
-
}
|
|
3480
|
-
.sf-image-status--error {
|
|
3481
|
-
color: var(--sf-danger);
|
|
3482
|
-
}
|
|
3483
|
-
/* The shell's FileIntakeAlert renders a dropped file's rejection as a list whose
|
|
3484
|
-
items carry the kit's own light-theme utilities (text-xs text-red-600). Inside
|
|
3485
|
-
the editor they read the slot's status line instead, so a rejection flips with
|
|
3486
|
-
the editor theme like the error line above it. */
|
|
3487
|
-
ul.sf-image-status {
|
|
3488
|
-
list-style: none;
|
|
3489
|
-
padding: 0;
|
|
3490
|
-
}
|
|
3491
|
-
.sf-image-status--error li {
|
|
3492
|
-
color: inherit;
|
|
3493
|
-
font-size: inherit;
|
|
3494
|
-
}
|
|
3368
|
+
/* THE MEDIA ROW IS efficient-easel's `ImageBox`, which since easel 12 IS the
|
|
3369
|
+
shell's MediaUploadField (efficient-shell #528): the picture with its Change
|
|
3370
|
+
image bar and bin, its own drop intake and its own announcements. What
|
|
3371
|
+
stays here is the shop's own: the template's inert slot. */
|
|
3495
3372
|
/* Shown in place of the media slot above when the open document can't hold
|
|
3496
3373
|
media (a template): the same dashed frame, plainly not a button. It is the
|
|
3497
3374
|
SLOT in its inert state, not a note — it was only ever counted as one
|
|
@@ -3499,39 +3376,13 @@ ul.sf-image-status {
|
|
|
3499
3376
|
.sf-image-slot-inert {
|
|
3500
3377
|
border: 1.5px dashed var(--sf-input-border);
|
|
3501
3378
|
border-radius: var(--radius-lg);
|
|
3502
|
-
padding:
|
|
3379
|
+
padding: var(--space-12) var(--space-16);
|
|
3503
3380
|
font-size: var(--text-xs);
|
|
3504
3381
|
line-height: 1.5;
|
|
3505
3382
|
color: var(--sf-muted);
|
|
3506
3383
|
background-image: repeating-linear-gradient(45deg, var(--sf-hatch) 0 1px, transparent 1px 12px);
|
|
3507
3384
|
}
|
|
3508
3385
|
|
|
3509
|
-
/* ── The image FOCUS point (card 66226) ──────────────────────────────────────
|
|
3510
|
-
WHICH PART OF A BACKGROUND IMAGE SURVIVES ITS CROP, as any point on the
|
|
3511
|
-
picture rather than as one of nine. The `Image focus` row opens (the shared
|
|
3512
|
-
.sf-style-head grammar, see components/ImageFocusRow.tsx) onto
|
|
3513
|
-
efficient-shell's `ImageFocusPoint`, which draws the whole photograph, the
|
|
3514
|
-
dot and its crosshair with the kit's own classes (efficient-shell#375); no
|
|
3515
|
-
rule here styles it.
|
|
3516
|
-
|
|
3517
|
-
⚠️ THE MEDIA ROW'S OWN FRAME IS NOT RESTYLED, EVER. `.es-pick-image-frame`
|
|
3518
|
-
stays `cover` because that is what the PAGE will look like, and that
|
|
3519
|
-
is its job. The focus part is a second frame, on screen only while a
|
|
3520
|
-
merchant is actually setting the point, because a `cover` view cannot
|
|
3521
|
-
express a point it has already cropped away.
|
|
3522
|
-
|
|
3523
|
-
THE PHOTOGRAPH IS NEVER ON SCREEN TWICE. The 96px crop belongs to the
|
|
3524
|
-
Background image field and the focus row belongs to `imageFocal` — two
|
|
3525
|
-
sibling Puck fields, which cannot reach each other from React — so the crop
|
|
3526
|
-
stands down for as long as the part is open (its root carries
|
|
3527
|
-
`data-image-focus`), and comes back the moment it closes. The `:has()` on
|
|
3528
|
-
Puck's own field wrapper is this stylesheet's established idiom for exactly
|
|
3529
|
-
that problem (see the `[data-sf-bucket]` and `[data-sf-no-control]` rules
|
|
3530
|
-
above). */
|
|
3531
|
-
.es-insp-rows:has([data-image-focus]) .es-pick-image-frame {
|
|
3532
|
-
display: none;
|
|
3533
|
-
}
|
|
3534
|
-
|
|
3535
3386
|
/* ── The note (card 66121) ───────────────────────────────────────────────────
|
|
3536
3387
|
THE chrome's quiet sentence: what a panel says when it has something to tell
|
|
3537
3388
|
the merchant and nothing to let them edit. A whole-panel stand-in for
|
|
@@ -3555,7 +3406,7 @@ ul.sf-image-status {
|
|
|
3555
3406
|
`--wide` / `--tight` pair here, because a family of padding variants is the
|
|
3556
3407
|
same six classes wearing one name. */
|
|
3557
3408
|
.sf-note {
|
|
3558
|
-
padding:
|
|
3409
|
+
padding: var(--space-16) var(--space-16);
|
|
3559
3410
|
font-size: var(--text-sm);
|
|
3560
3411
|
line-height: 1.5;
|
|
3561
3412
|
color: var(--sf-muted);
|
|
@@ -3575,7 +3426,7 @@ ul.sf-image-status {
|
|
|
3575
3426
|
screenshot, and a screenshot carries no console. Quieter and smaller than the
|
|
3576
3427
|
sentence above it, so it reads as a footnote and not as an instruction. */
|
|
3577
3428
|
.sf-note-detail {
|
|
3578
|
-
margin-top:
|
|
3429
|
+
margin-top: var(--space-12);
|
|
3579
3430
|
font-size: var(--text-2xs);
|
|
3580
3431
|
color: var(--sf-muted);
|
|
3581
3432
|
opacity: 0.75;
|
|
@@ -3617,7 +3468,7 @@ ul.sf-image-status {
|
|
|
3617
3468
|
the other six. The clip existed only to round the 3px accent edge below,
|
|
3618
3469
|
which now rounds itself. */
|
|
3619
3470
|
margin: 0 0 4px;
|
|
3620
|
-
padding:
|
|
3471
|
+
padding: var(--space-12) var(--space-16);
|
|
3621
3472
|
border: 1px solid var(--sf-divider);
|
|
3622
3473
|
border-radius: var(--radius-xl);
|
|
3623
3474
|
background: var(--sf-track-bg);
|
|
@@ -3651,7 +3502,7 @@ ul.sf-image-status {
|
|
|
3651
3502
|
color: var(--sf-muted);
|
|
3652
3503
|
}
|
|
3653
3504
|
.sf-part-style-count {
|
|
3654
|
-
margin-bottom:
|
|
3505
|
+
margin-bottom: var(--space-4);
|
|
3655
3506
|
font-size: var(--text-2xs);
|
|
3656
3507
|
font-weight: 600;
|
|
3657
3508
|
color: var(--sf-muted);
|
|
@@ -3736,7 +3587,7 @@ ul.sf-image-status {
|
|
|
3736
3587
|
align-items: baseline;
|
|
3737
3588
|
gap: 8px;
|
|
3738
3589
|
width: 100%;
|
|
3739
|
-
padding:
|
|
3590
|
+
padding: var(--space-8) var(--space-12);
|
|
3740
3591
|
border: 0;
|
|
3741
3592
|
background: none;
|
|
3742
3593
|
text-align: left;
|
|
@@ -3798,7 +3649,7 @@ ul.sf-image-status {
|
|
|
3798
3649
|
.sf-part-style-top {
|
|
3799
3650
|
display: flex;
|
|
3800
3651
|
align-items: center;
|
|
3801
|
-
gap:
|
|
3652
|
+
gap: var(--space-12);
|
|
3802
3653
|
margin-top: 8px;
|
|
3803
3654
|
}
|
|
3804
3655
|
/* Pushes "Edit style" to the end whatever sits before it — a note, or the chip
|
|
@@ -3827,7 +3678,7 @@ ul.sf-image-status {
|
|
|
3827
3678
|
display: inline-flex;
|
|
3828
3679
|
align-items: center;
|
|
3829
3680
|
border-radius: 999px;
|
|
3830
|
-
padding:
|
|
3681
|
+
padding: var(--space-2) var(--space-12);
|
|
3831
3682
|
background: var(--sf-accent-tint);
|
|
3832
3683
|
color: var(--sf-accent-text);
|
|
3833
3684
|
font-size: var(--text-2xs);
|
|
@@ -3885,7 +3736,7 @@ ul.sf-image-status {
|
|
|
3885
3736
|
reads as belonging to something above them. The BOX only — the colour, the
|
|
3886
3737
|
size and the line-height stay the one note style's (card 66211). */
|
|
3887
3738
|
.sf-slot-rows > .sf-note {
|
|
3888
|
-
padding:
|
|
3739
|
+
padding: var(--space-12) var(--space-12) var(--space-12);
|
|
3889
3740
|
}
|
|
3890
3741
|
|
|
3891
3742
|
/* A value that reads "style" is not a measurement, so it is drawn as quietly as
|
|
@@ -3948,7 +3799,7 @@ ul.sf-image-status {
|
|
|
3948
3799
|
display: flex;
|
|
3949
3800
|
flex-wrap: wrap;
|
|
3950
3801
|
align-items: center;
|
|
3951
|
-
gap:
|
|
3802
|
+
gap: var(--space-8);
|
|
3952
3803
|
}
|
|
3953
3804
|
|
|
3954
3805
|
/* The override mark, half two — and it IS the reset button, which is why it is
|
|
@@ -4023,7 +3874,7 @@ ul.sf-image-status {
|
|
|
4023
3874
|
/* The group's caption — the section panel's small-caps heading, so this group
|
|
4024
3875
|
reads like the buckets above it. A real <h3>, so it joins the panel outline. */
|
|
4025
3876
|
.sf-entries-head {
|
|
4026
|
-
margin:
|
|
3877
|
+
margin: var(--space-16) 0 var(--space-4);
|
|
4027
3878
|
font-size: var(--text-2xs);
|
|
4028
3879
|
font-weight: 600;
|
|
4029
3880
|
letter-spacing: 0.06em;
|
|
@@ -4056,29 +3907,10 @@ ul.sf-image-status {
|
|
|
4056
3907
|
repo's override of it — so matching it means drawing NOTHING, and the padding
|
|
4057
3908
|
above is the whole of what this rule still owns. */
|
|
4058
3909
|
.sf-slot-rows .sf-add-card {
|
|
4059
|
-
padding:
|
|
3910
|
+
padding: var(--space-8) var(--space-12);
|
|
4060
3911
|
border-radius: 0;
|
|
4061
3912
|
}
|
|
4062
3913
|
|
|
4063
|
-
/* The drop zone round the media row's box. `SettingsField` puts its control in
|
|
4064
|
-
`.es-field-ctl`, a flex ROW, where a plain block shrinks to its content: the
|
|
4065
|
-
empty slot drew 190px wide in a 280px row. It takes the row instead. */
|
|
4066
|
-
.sf-image-drop {
|
|
4067
|
-
flex: 1;
|
|
4068
|
-
min-width: 0;
|
|
4069
|
-
}
|
|
4070
|
-
/* Drag-over highlight for the media row (MediaUploadField's drop shortcut):
|
|
4071
|
-
the empty slot takes the accent, a filled picture an accent ring. */
|
|
4072
|
-
.sf-image-drop.is-dragover .es-pick-image-slot {
|
|
4073
|
-
border-color: var(--sf-accent);
|
|
4074
|
-
background-color: var(--sf-accent-tint);
|
|
4075
|
-
}
|
|
4076
|
-
.sf-image-drop.is-dragover .es-pick-image-frame {
|
|
4077
|
-
outline: 2px solid var(--sf-accent);
|
|
4078
|
-
outline-offset: -2px;
|
|
4079
|
-
}
|
|
4080
|
-
|
|
4081
|
-
|
|
4082
3914
|
/* ── THE PHOTO WALL'S LAYOUT PICKER ─────────────────────────────────────────
|
|
4083
3915
|
The Customer Photo Grid's one layout control: a strip of pictures, filtered by
|
|
4084
3916
|
how many photos sit in a row. The owner, 2026-09-07, on the numbers it
|
|
@@ -4096,14 +3928,14 @@ ul.sf-image-status {
|
|
|
4096
3928
|
nothing is cut off and nothing scrolls sideways at either width. */
|
|
4097
3929
|
.sf-gallery-filter {
|
|
4098
3930
|
display: flex;
|
|
4099
|
-
gap:
|
|
3931
|
+
gap: var(--space-8);
|
|
4100
3932
|
flex-wrap: wrap;
|
|
4101
3933
|
}
|
|
4102
3934
|
.sf-gallery-filter button {
|
|
4103
3935
|
border: 1px solid var(--sf-input-border);
|
|
4104
3936
|
background: var(--sf-field-bg);
|
|
4105
3937
|
border-radius: 999px;
|
|
4106
|
-
padding:
|
|
3938
|
+
padding: var(--space-4) var(--space-12);
|
|
4107
3939
|
font-size: var(--text-xs);
|
|
4108
3940
|
font-weight: 600;
|
|
4109
3941
|
color: var(--sf-icon);
|
|
@@ -4124,7 +3956,7 @@ ul.sf-image-status {
|
|
|
4124
3956
|
header's country picker became its third row). What stays here is where the
|
|
4125
3957
|
strip sits in this panel: the line of space under the row's name. */
|
|
4126
3958
|
.sf-gallery-layouts {
|
|
4127
|
-
margin-top:
|
|
3959
|
+
margin-top: var(--space-8);
|
|
4128
3960
|
}
|
|
4129
3961
|
/* ⚠️ THE STRIP MUST BE TOLD TO FILL THE SHELL'S CONTROL SLOT, OR IT COLLAPSES.
|
|
4130
3962
|
editor-shell card 66516, and the shop is now the second consumer to meet it.
|
|
@@ -4205,7 +4037,7 @@ ul.sf-image-status {
|
|
|
4205
4037
|
.sf-gallery-count {
|
|
4206
4038
|
font-size: var(--text-2xs);
|
|
4207
4039
|
color: var(--sf-disabled);
|
|
4208
|
-
margin-top:
|
|
4040
|
+
margin-top: var(--space-8);
|
|
4209
4041
|
}
|
|
4210
4042
|
|
|
4211
4043
|
/* ── Side panel heads (components/SidePanelHead) ─────────────────────────
|
|
@@ -4255,13 +4087,6 @@ ul.sf-image-status {
|
|
|
4255
4087
|
min-width: 0;
|
|
4256
4088
|
}
|
|
4257
4089
|
|
|
4258
|
-
/* The focal-point picker's row is TextStyleRow's disclosure row, not a
|
|
4259
|
-
SettingsField; this keeps the gap above it that its old bare `.sf-field`
|
|
4260
|
-
wrapper gave, from the same rhythm token. */
|
|
4261
|
-
.sf-focal-row {
|
|
4262
|
-
margin-top: var(--es-rhythm-between);
|
|
4263
|
-
}
|
|
4264
|
-
|
|
4265
4090
|
/* The notice for a page whose header and footer could not load
|
|
4266
4091
|
(components/PinnedChromeLoadNotice, 16.0.1), floating over the top of the
|
|
4267
4092
|
canvas — the preview host is `position: relative` — so the frame keeps its
|