@sproutsocial/racine 31.7.15 → 31.7.16
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 +12 -0
- package/README.NPM.md +1 -1
- package/README.md +19 -3
- package/dist/components.css +988 -744
- package/package.json +5 -5
package/dist/components.css
CHANGED
|
@@ -98,7 +98,8 @@
|
|
|
98
98
|
background: var(--color-container-bg-base);
|
|
99
99
|
}
|
|
100
100
|
|
|
101
|
-
.accordion-item[data-state="open"]
|
|
101
|
+
.accordion-item[data-state="open"]
|
|
102
|
+
.seeds-accordion-trigger[data-styled="true"] {
|
|
102
103
|
border-bottom: 1px solid transparent;
|
|
103
104
|
}
|
|
104
105
|
|
|
@@ -521,7 +522,6 @@
|
|
|
521
522
|
*/
|
|
522
523
|
|
|
523
524
|
@layer components {
|
|
524
|
-
|
|
525
525
|
.seeds-btn {
|
|
526
526
|
display: inline-block;
|
|
527
527
|
box-sizing: border-box;
|
|
@@ -544,9 +544,9 @@
|
|
|
544
544
|
|
|
545
545
|
.seeds-btn:focus {
|
|
546
546
|
outline: none;
|
|
547
|
-
box-shadow:
|
|
548
|
-
0 0 0
|
|
549
|
-
|
|
547
|
+
box-shadow: 0 0 0 1px var(--color-button-primary-bg-base),
|
|
548
|
+
0 0 0 4px
|
|
549
|
+
color-mix(in srgb, var(--color-button-primary-bg-base) 30%, transparent);
|
|
550
550
|
}
|
|
551
551
|
|
|
552
552
|
/* KNOWN ISSUE: `small` currently renders identically to the default size — both use
|
|
@@ -676,8 +676,7 @@
|
|
|
676
676
|
border-radius: inherit;
|
|
677
677
|
padding: 1px;
|
|
678
678
|
background: var(--color-gradient-ai);
|
|
679
|
-
-webkit-mask:
|
|
680
|
-
linear-gradient(#fff 0 0) content-box,
|
|
679
|
+
-webkit-mask: linear-gradient(#fff 0 0) content-box,
|
|
681
680
|
linear-gradient(#fff 0 0);
|
|
682
681
|
-webkit-mask-composite: xor;
|
|
683
682
|
mask-composite: exclude;
|
|
@@ -747,10 +746,10 @@
|
|
|
747
746
|
color: var(--color-button-pill-text-hover);
|
|
748
747
|
background-color: var(--color-button-pill-bg-active);
|
|
749
748
|
}
|
|
750
|
-
|
|
751
749
|
}
|
|
752
750
|
|
|
753
751
|
/* end @layer components */
|
|
752
|
+
|
|
754
753
|
/* --- seeds-react-character-counter --- */
|
|
755
754
|
/**
|
|
756
755
|
* Seeds CharacterCounter component classes
|
|
@@ -1018,9 +1017,9 @@
|
|
|
1018
1017
|
|
|
1019
1018
|
.seeds-content-header-trigger:focus-visible {
|
|
1020
1019
|
outline: none;
|
|
1021
|
-
box-shadow:
|
|
1022
|
-
0 0 0
|
|
1023
|
-
|
|
1020
|
+
box-shadow: 0 0 0 1px var(--color-button-primary-bg-base),
|
|
1021
|
+
0 0 0 4px
|
|
1022
|
+
color-mix(in srgb, var(--color-button-primary-bg-base) 30%, transparent);
|
|
1024
1023
|
}
|
|
1025
1024
|
}
|
|
1026
1025
|
|
|
@@ -1184,8 +1183,12 @@
|
|
|
1184
1183
|
transform: translateX(-100%);
|
|
1185
1184
|
}
|
|
1186
1185
|
|
|
1187
|
-
.seeds-drawer-popup--bottom:not(
|
|
1188
|
-
|
|
1186
|
+
.seeds-drawer-popup--bottom:not(
|
|
1187
|
+
.seeds-drawer-popup--snap
|
|
1188
|
+
)[data-starting-style],
|
|
1189
|
+
.seeds-drawer-popup--bottom:not(
|
|
1190
|
+
.seeds-drawer-popup--snap
|
|
1191
|
+
)[data-ending-style] {
|
|
1189
1192
|
transform: translateY(calc(100% - var(--bleed) + 2px));
|
|
1190
1193
|
}
|
|
1191
1194
|
|
|
@@ -1199,8 +1202,12 @@
|
|
|
1199
1202
|
RAIL_OFFSET). Translating the popup by its own height alone leaves the rail
|
|
1200
1203
|
visible at the bottom of the viewport during enter/exit, so we add the rail's
|
|
1201
1204
|
outset: RAIL_BUTTON_HEIGHT (32) + RAIL_OFFSET (12) = 44px. */
|
|
1202
|
-
.seeds-drawer-popup--bottom.seeds-drawer-popup--action-rail:not(
|
|
1203
|
-
|
|
1205
|
+
.seeds-drawer-popup--bottom.seeds-drawer-popup--action-rail:not(
|
|
1206
|
+
.seeds-drawer-popup--snap
|
|
1207
|
+
)[data-starting-style],
|
|
1208
|
+
.seeds-drawer-popup--bottom.seeds-drawer-popup--action-rail:not(
|
|
1209
|
+
.seeds-drawer-popup--snap
|
|
1210
|
+
)[data-ending-style] {
|
|
1204
1211
|
transform: translateY(calc(100% - var(--bleed) + 2px + 44px));
|
|
1205
1212
|
}
|
|
1206
1213
|
|
|
@@ -1226,7 +1233,9 @@
|
|
|
1226
1233
|
/* Bottom non-snap stacked bottom-sheet animation. Snap-point drawers don't
|
|
1227
1234
|
participate: the stack math overwrites --translate-y and clips overflow,
|
|
1228
1235
|
which collides with base-ui's snap-offset transform. */
|
|
1229
|
-
.seeds-drawer-popup--bottom:not(
|
|
1236
|
+
.seeds-drawer-popup--bottom:not(
|
|
1237
|
+
.seeds-drawer-popup--snap
|
|
1238
|
+
)[data-nested-drawer-open] {
|
|
1230
1239
|
--stack-step: 0.05;
|
|
1231
1240
|
--stack-progress: clamp(0, var(--drawer-swipe-progress), 1);
|
|
1232
1241
|
/* Override default vars; base transform rule picks them up automatically */
|
|
@@ -1714,8 +1723,7 @@
|
|
|
1714
1723
|
background-color: var(--color-form-bg-base);
|
|
1715
1724
|
color: var(--color-text-body);
|
|
1716
1725
|
outline: none;
|
|
1717
|
-
transition:
|
|
1718
|
-
border-color var(--duration-fast) var(--ease-ease_in),
|
|
1726
|
+
transition: border-color var(--duration-fast) var(--ease-ease_in),
|
|
1719
1727
|
box-shadow var(--duration-fast) var(--ease-ease_in);
|
|
1720
1728
|
font-family: var(--font-family);
|
|
1721
1729
|
font-weight: var(--font-weight-normal);
|
|
@@ -1741,9 +1749,9 @@
|
|
|
1741
1749
|
|
|
1742
1750
|
.seeds-input input:focus {
|
|
1743
1751
|
outline: none;
|
|
1744
|
-
box-shadow:
|
|
1745
|
-
0 0 0
|
|
1746
|
-
|
|
1752
|
+
box-shadow: 0 0 0 1px var(--color-button-primary-bg-base),
|
|
1753
|
+
0 0 0 4px
|
|
1754
|
+
color-mix(in srgb, var(--color-button-primary-bg-base) 30%, transparent);
|
|
1747
1755
|
}
|
|
1748
1756
|
|
|
1749
1757
|
/* Fix for red ring when input is marked required in Firefox */
|
|
@@ -1905,9 +1913,9 @@
|
|
|
1905
1913
|
|
|
1906
1914
|
.seeds-link:focus {
|
|
1907
1915
|
outline: none;
|
|
1908
|
-
box-shadow:
|
|
1909
|
-
0 0 0
|
|
1910
|
-
|
|
1916
|
+
box-shadow: 0 0 0 1px var(--color-button-primary-bg-base),
|
|
1917
|
+
0 0 0 4px
|
|
1918
|
+
color-mix(in srgb, var(--color-button-primary-bg-base) 30%, transparent);
|
|
1911
1919
|
}
|
|
1912
1920
|
|
|
1913
1921
|
.seeds-link:focus:active {
|
|
@@ -2095,31 +2103,29 @@
|
|
|
2095
2103
|
*/
|
|
2096
2104
|
|
|
2097
2105
|
@layer components {
|
|
2098
|
-
|
|
2099
|
-
|
|
2100
|
-
|
|
2101
|
-
|
|
2102
|
-
|
|
2103
|
-
|
|
2104
|
-
|
|
2105
|
-
|
|
2106
|
-
/* Subtle (default): the 20% AI gradient tint composited over the base
|
|
2106
|
+
.seeds-ai-container {
|
|
2107
|
+
position: relative;
|
|
2108
|
+
overflow: hidden;
|
|
2109
|
+
box-sizing: border-box;
|
|
2110
|
+
border-radius: var(--radius-800);
|
|
2111
|
+
box-shadow: var(--shadow-low);
|
|
2112
|
+
font-family: var(--font-family);
|
|
2113
|
+
/* Subtle (default): the 20% AI gradient tint composited over the base
|
|
2107
2114
|
surface. --color-gradient-ai-subtle is already translucent, so layering it
|
|
2108
2115
|
over the opaque base color produces the soft wash. */
|
|
2109
|
-
|
|
2110
|
-
|
|
2111
|
-
|
|
2112
|
-
}
|
|
2116
|
+
background-color: var(--color-container-bg-base);
|
|
2117
|
+
background-image: var(--color-gradient-ai-subtle);
|
|
2118
|
+
color: var(--color-text-headline);
|
|
2119
|
+
}
|
|
2113
2120
|
|
|
2114
|
-
/* Vivid: the full-saturation AI gradient with white content. White has no
|
|
2121
|
+
/* Vivid: the full-saturation AI gradient with white content. White has no
|
|
2115
2122
|
semantic Seeds token; it is part of the AI gradient treatment (mirrors the
|
|
2116
2123
|
raw brand hex used in --color-gradient-ai). */
|
|
2117
|
-
.seeds-ai-container-vivid {
|
|
2118
|
-
|
|
2119
|
-
|
|
2120
|
-
|
|
2121
|
-
}
|
|
2122
|
-
|
|
2124
|
+
.seeds-ai-container-vivid {
|
|
2125
|
+
background-color: transparent;
|
|
2126
|
+
background-image: var(--color-gradient-ai);
|
|
2127
|
+
color: #fff;
|
|
2128
|
+
}
|
|
2123
2129
|
}
|
|
2124
2130
|
|
|
2125
2131
|
/* --- seeds-react-narrative-kit --- */
|
|
@@ -2135,30 +2141,28 @@
|
|
|
2135
2141
|
*/
|
|
2136
2142
|
|
|
2137
2143
|
@layer components {
|
|
2138
|
-
|
|
2139
|
-
/* A solid gray pill matching the design: background and border are both the
|
|
2144
|
+
/* A solid gray pill matching the design: background and border are both the
|
|
2140
2145
|
#dee1e1 container-border-base token, which also tracks dark mode. The two
|
|
2141
2146
|
pixel literals below have no exact theme token — the --space scale skips 6px
|
|
2142
2147
|
(4px→8px) and the --font-size scale skips 12px (11px→13px) — so the design's
|
|
2143
2148
|
values are kept verbatim. All colors use tokens. */
|
|
2144
|
-
.seeds-eyebrow-token {
|
|
2145
|
-
|
|
2146
|
-
|
|
2147
|
-
|
|
2148
|
-
|
|
2149
|
-
|
|
2150
|
-
|
|
2151
|
-
|
|
2152
|
-
|
|
2153
|
-
|
|
2154
|
-
|
|
2155
|
-
|
|
2156
|
-
|
|
2157
|
-
|
|
2158
|
-
|
|
2159
|
-
|
|
2160
|
-
}
|
|
2161
|
-
|
|
2149
|
+
.seeds-eyebrow-token {
|
|
2150
|
+
box-sizing: border-box;
|
|
2151
|
+
display: inline-flex;
|
|
2152
|
+
align-items: center;
|
|
2153
|
+
justify-content: center;
|
|
2154
|
+
gap: var(--space-100); /* 2px */
|
|
2155
|
+
padding: var(--space-100) var(--space-300); /* 2px / 8px */
|
|
2156
|
+
border: 1px solid var(--color-container-border-base); /* #dee1e1 */
|
|
2157
|
+
border-radius: var(--radius-500); /* 6px */
|
|
2158
|
+
background-color: var(--color-container-border-base); /* #dee1e1 */
|
|
2159
|
+
font-family: var(--font-family);
|
|
2160
|
+
font-size: 12px; /* text-sm */
|
|
2161
|
+
line-height: 20px;
|
|
2162
|
+
font-weight: var(--font-weight-normal);
|
|
2163
|
+
color: var(--color-text-body);
|
|
2164
|
+
white-space: nowrap;
|
|
2165
|
+
}
|
|
2162
2166
|
}
|
|
2163
2167
|
|
|
2164
2168
|
/* --- seeds-react-narrative-kit --- */
|
|
@@ -2177,167 +2181,175 @@
|
|
|
2177
2181
|
*/
|
|
2178
2182
|
|
|
2179
2183
|
@layer components {
|
|
2180
|
-
|
|
2181
|
-
|
|
2182
|
-
|
|
2183
|
-
|
|
2184
|
-
/* Wrap the fixed-width chart onto its own line when the metric block + chart
|
|
2184
|
+
.seeds-metric-highlight {
|
|
2185
|
+
box-sizing: border-box;
|
|
2186
|
+
display: flex;
|
|
2187
|
+
/* Wrap the fixed-width chart onto its own line when the metric block + chart
|
|
2185
2188
|
can't sit side by side (narrow cards / mobile). The metric block claims its
|
|
2186
2189
|
min-content width below, so a cramped row drops the chart down rather than
|
|
2187
2190
|
overflowing the card and getting clipped by the container. */
|
|
2188
|
-
|
|
2189
|
-
|
|
2190
|
-
|
|
2191
|
-
|
|
2192
|
-
|
|
2193
|
-
|
|
2191
|
+
flex-wrap: wrap;
|
|
2192
|
+
align-items: flex-start;
|
|
2193
|
+
gap: var(--space-350); /* 12px */
|
|
2194
|
+
border-radius: var(--radius-800); /* 12px */
|
|
2195
|
+
font-family: var(--font-family);
|
|
2196
|
+
/* Container (default): a padded gray app surface (matches the design's
|
|
2194
2197
|
#f3f4f4 box). `-bare` strips it. */
|
|
2195
|
-
|
|
2196
|
-
|
|
2197
|
-
}
|
|
2198
|
+
padding: var(--space-400) var(--space-450); /* 16px / 24px */
|
|
2199
|
+
background-color: var(--color-app-bg-base);
|
|
2200
|
+
}
|
|
2198
2201
|
|
|
2199
|
-
.seeds-metric-highlight-bare {
|
|
2200
|
-
|
|
2201
|
-
|
|
2202
|
-
}
|
|
2202
|
+
.seeds-metric-highlight-bare {
|
|
2203
|
+
padding: 0;
|
|
2204
|
+
background-color: transparent;
|
|
2205
|
+
}
|
|
2203
2206
|
|
|
2204
|
-
.seeds-metric-highlight-vertical {
|
|
2205
|
-
|
|
2206
|
-
}
|
|
2207
|
+
.seeds-metric-highlight-vertical {
|
|
2208
|
+
flex-direction: column;
|
|
2209
|
+
}
|
|
2207
2210
|
|
|
2208
|
-
/* The metric block: label + value/trend. Grows to fill the row in horizontal. */
|
|
2209
|
-
.seeds-metric-highlight-metric {
|
|
2210
|
-
|
|
2211
|
-
|
|
2212
|
-
|
|
2213
|
-
|
|
2214
|
-
|
|
2215
|
-
|
|
2211
|
+
/* The metric block: label + value/trend. Grows to fill the row in horizontal. */
|
|
2212
|
+
.seeds-metric-highlight-metric {
|
|
2213
|
+
box-sizing: border-box;
|
|
2214
|
+
display: flex;
|
|
2215
|
+
flex-direction: column;
|
|
2216
|
+
align-items: flex-start;
|
|
2217
|
+
gap: var(--space-200); /* 4px */
|
|
2218
|
+
/* Grow to fill the row, but never shrink below the metric's own content
|
|
2216
2219
|
(the nowrap value + trend pill). That min-content floor is what forces the
|
|
2217
2220
|
chart to wrap below on narrow cards instead of the row overflowing. */
|
|
2218
|
-
|
|
2219
|
-
|
|
2220
|
-
}
|
|
2221
|
+
flex: 1 1 auto;
|
|
2222
|
+
min-width: min-content;
|
|
2223
|
+
}
|
|
2221
2224
|
|
|
2222
|
-
.seeds-metric-highlight-vertical .seeds-metric-highlight-metric {
|
|
2223
|
-
|
|
2224
|
-
|
|
2225
|
-
}
|
|
2225
|
+
.seeds-metric-highlight-vertical .seeds-metric-highlight-metric {
|
|
2226
|
+
width: 100%;
|
|
2227
|
+
flex: 0 0 auto;
|
|
2228
|
+
}
|
|
2226
2229
|
|
|
2227
|
-
/* Small: label and value collapse onto a single centered row. */
|
|
2228
|
-
.seeds-metric-highlight-small .seeds-metric-highlight-metric {
|
|
2229
|
-
|
|
2230
|
-
|
|
2231
|
-
|
|
2232
|
-
}
|
|
2230
|
+
/* Small: label and value collapse onto a single centered row. */
|
|
2231
|
+
.seeds-metric-highlight-small .seeds-metric-highlight-metric {
|
|
2232
|
+
flex-direction: row;
|
|
2233
|
+
align-items: center;
|
|
2234
|
+
gap: var(--space-300); /* 8px */
|
|
2235
|
+
}
|
|
2233
2236
|
|
|
2234
|
-
.seeds-metric-highlight-label {
|
|
2235
|
-
|
|
2236
|
-
|
|
2237
|
-
|
|
2238
|
-
|
|
2239
|
-
|
|
2240
|
-
|
|
2241
|
-
}
|
|
2237
|
+
.seeds-metric-highlight-label {
|
|
2238
|
+
margin: 0;
|
|
2239
|
+
font-size: var(--font-size-300); /* 16px */
|
|
2240
|
+
line-height: var(--line-height-400); /* ~28px */
|
|
2241
|
+
font-weight: var(--font-weight-normal);
|
|
2242
|
+
color: var(--color-text-body);
|
|
2243
|
+
overflow-wrap: break-word;
|
|
2244
|
+
}
|
|
2242
2245
|
|
|
2243
|
-
/* In small, the label takes the slack so the value/trend align to the end. */
|
|
2244
|
-
.seeds-metric-highlight-small .seeds-metric-highlight-label {
|
|
2245
|
-
|
|
2246
|
-
|
|
2247
|
-
}
|
|
2246
|
+
/* In small, the label takes the slack so the value/trend align to the end. */
|
|
2247
|
+
.seeds-metric-highlight-small .seeds-metric-highlight-label {
|
|
2248
|
+
flex: 1 0 0;
|
|
2249
|
+
min-width: 0;
|
|
2250
|
+
}
|
|
2248
2251
|
|
|
2249
|
-
.seeds-metric-highlight-value-row {
|
|
2250
|
-
|
|
2251
|
-
|
|
2252
|
-
|
|
2253
|
-
|
|
2254
|
-
}
|
|
2252
|
+
.seeds-metric-highlight-value-row {
|
|
2253
|
+
display: flex;
|
|
2254
|
+
flex-wrap: wrap; /* trend pill drops under the value on very narrow cards */
|
|
2255
|
+
align-items: center;
|
|
2256
|
+
gap: var(--space-300); /* 8px */
|
|
2257
|
+
}
|
|
2255
2258
|
|
|
2256
|
-
.seeds-metric-highlight-small .seeds-metric-highlight-value-row {
|
|
2257
|
-
|
|
2258
|
-
}
|
|
2259
|
+
.seeds-metric-highlight-small .seeds-metric-highlight-value-row {
|
|
2260
|
+
justify-content: flex-end;
|
|
2261
|
+
}
|
|
2259
2262
|
|
|
2260
|
-
.seeds-metric-highlight-value {
|
|
2261
|
-
|
|
2262
|
-
|
|
2263
|
+
.seeds-metric-highlight-value {
|
|
2264
|
+
margin: 0;
|
|
2265
|
+
/* No mono token exists yet; fall back to a system monospace stack. Mirrors the
|
|
2263
2266
|
font/font-mono treatment in the design. */
|
|
2264
|
-
|
|
2265
|
-
|
|
2266
|
-
|
|
2267
|
-
|
|
2268
|
-
|
|
2269
|
-
|
|
2270
|
-
|
|
2267
|
+
font-family: var(
|
|
2268
|
+
--font-family-mono,
|
|
2269
|
+
ui-monospace,
|
|
2270
|
+
"SF Mono",
|
|
2271
|
+
SFMono-Regular,
|
|
2272
|
+
Menlo,
|
|
2273
|
+
monospace
|
|
2274
|
+
);
|
|
2275
|
+
font-size: var(--font-size-700); /* 32px */
|
|
2276
|
+
line-height: var(--line-height-700); /* 40px */
|
|
2277
|
+
font-weight: var(--font-weight-bold);
|
|
2278
|
+
color: var(--color-text-headline);
|
|
2279
|
+
white-space: nowrap;
|
|
2280
|
+
}
|
|
2271
2281
|
|
|
2272
|
-
.seeds-metric-highlight-small .seeds-metric-highlight-value {
|
|
2273
|
-
|
|
2274
|
-
|
|
2275
|
-
}
|
|
2282
|
+
.seeds-metric-highlight-small .seeds-metric-highlight-value {
|
|
2283
|
+
font-size: var(--font-size-600); /* 24px */
|
|
2284
|
+
line-height: var(--line-height-600); /* 32px */
|
|
2285
|
+
}
|
|
2276
2286
|
|
|
2277
|
-
/* Trend badge — a rounded pill. Up is the positive (green) treatment; down
|
|
2287
|
+
/* Trend badge — a rounded pill. Up is the positive (green) treatment; down
|
|
2278
2288
|
swaps to the negative (red) treatment. Color flows to the arrow + value via
|
|
2279
2289
|
currentColor. */
|
|
2280
|
-
.seeds-metric-highlight-trend {
|
|
2281
|
-
|
|
2282
|
-
|
|
2283
|
-
|
|
2284
|
-
|
|
2285
|
-
|
|
2286
|
-
|
|
2287
|
-
|
|
2288
|
-
|
|
2289
|
-
|
|
2290
|
-
|
|
2291
|
-
|
|
2292
|
-
}
|
|
2290
|
+
.seeds-metric-highlight-trend {
|
|
2291
|
+
display: inline-flex;
|
|
2292
|
+
align-items: center;
|
|
2293
|
+
gap: var(--space-200); /* 4px */
|
|
2294
|
+
padding: var(--space-100) var(--space-300); /* 2px / 8px */
|
|
2295
|
+
border-radius: 999px;
|
|
2296
|
+
font-size: var(--font-size-200); /* 13px */
|
|
2297
|
+
line-height: var(--line-height-200);
|
|
2298
|
+
font-weight: var(--font-weight-bold);
|
|
2299
|
+
white-space: nowrap;
|
|
2300
|
+
background-color: var(--color-container-bg-decorative-green);
|
|
2301
|
+
color: var(--color-text-decorative-green);
|
|
2302
|
+
}
|
|
2293
2303
|
|
|
2294
|
-
.seeds-metric-highlight-trend-down {
|
|
2295
|
-
|
|
2296
|
-
|
|
2297
|
-
}
|
|
2304
|
+
.seeds-metric-highlight-trend-down {
|
|
2305
|
+
background-color: var(--color-container-bg-decorative-red);
|
|
2306
|
+
color: var(--color-text-decorative-red);
|
|
2307
|
+
}
|
|
2298
2308
|
|
|
2299
|
-
.seeds-metric-highlight-trend-arrow {
|
|
2300
|
-
|
|
2301
|
-
|
|
2302
|
-
|
|
2303
|
-
|
|
2304
|
-
|
|
2305
|
-
}
|
|
2309
|
+
.seeds-metric-highlight-trend-arrow {
|
|
2310
|
+
flex: 0 0 auto;
|
|
2311
|
+
width: 1em;
|
|
2312
|
+
height: 1em;
|
|
2313
|
+
stroke: currentColor;
|
|
2314
|
+
stroke-width: 1.5;
|
|
2315
|
+
}
|
|
2306
2316
|
|
|
2307
|
-
/* Slot for an injected chart (e.g. a data-viz SparklineChart). Layout only — no
|
|
2317
|
+
/* Slot for an injected chart (e.g. a data-viz SparklineChart). Layout only — no
|
|
2308
2318
|
stroke/background styling, so the injected chart controls its own look. Heights
|
|
2309
2319
|
are explicit (never percentage/stretch) so a Highcharts chart always measures a
|
|
2310
2320
|
concrete container instead of falling back to its 400px default. */
|
|
2311
|
-
.seeds-metric-highlight-chart {
|
|
2312
|
-
|
|
2313
|
-
|
|
2314
|
-
|
|
2315
|
-
|
|
2321
|
+
.seeds-metric-highlight-chart {
|
|
2322
|
+
box-sizing: border-box;
|
|
2323
|
+
flex: 0 0 auto;
|
|
2324
|
+
align-self: center;
|
|
2325
|
+
/* Center the injected chart as a flex item — an inline/inline-block child
|
|
2316
2326
|
(e.g. the data-viz SparklineChart) otherwise sits on the text baseline with
|
|
2317
2327
|
descender space below it, reading as vertically off-center in the slot. */
|
|
2318
|
-
|
|
2319
|
-
|
|
2320
|
-
}
|
|
2321
|
-
|
|
2322
|
-
.seeds-metric-highlight:not(.seeds-metric-highlight-vertical) .seeds-metric-highlight-chart {
|
|
2323
|
-
width: 104px;
|
|
2324
|
-
height: 48px;
|
|
2325
|
-
}
|
|
2328
|
+
display: flex;
|
|
2329
|
+
align-items: center;
|
|
2330
|
+
}
|
|
2326
2331
|
|
|
2327
|
-
.seeds-metric-highlight
|
|
2328
|
-
|
|
2329
|
-
|
|
2330
|
-
|
|
2332
|
+
.seeds-metric-highlight:not(.seeds-metric-highlight-vertical)
|
|
2333
|
+
.seeds-metric-highlight-chart {
|
|
2334
|
+
width: 104px;
|
|
2335
|
+
height: 48px;
|
|
2336
|
+
}
|
|
2331
2337
|
|
|
2332
|
-
.seeds-metric-highlight-
|
|
2333
|
-
|
|
2334
|
-
|
|
2335
|
-
|
|
2338
|
+
.seeds-metric-highlight-small:not(.seeds-metric-highlight-vertical)
|
|
2339
|
+
.seeds-metric-highlight-chart {
|
|
2340
|
+
width: 88px;
|
|
2341
|
+
height: 40px;
|
|
2342
|
+
}
|
|
2336
2343
|
|
|
2337
|
-
.seeds-metric-highlight-vertical
|
|
2338
|
-
|
|
2339
|
-
|
|
2344
|
+
.seeds-metric-highlight-vertical .seeds-metric-highlight-chart {
|
|
2345
|
+
width: 100%;
|
|
2346
|
+
height: 96px;
|
|
2347
|
+
}
|
|
2340
2348
|
|
|
2349
|
+
.seeds-metric-highlight-vertical.seeds-metric-highlight-small
|
|
2350
|
+
.seeds-metric-highlight-chart {
|
|
2351
|
+
height: 56px;
|
|
2352
|
+
}
|
|
2341
2353
|
}
|
|
2342
2354
|
|
|
2343
2355
|
/* --- seeds-react-narrative-kit --- */
|
|
@@ -2357,45 +2369,43 @@
|
|
|
2357
2369
|
*/
|
|
2358
2370
|
|
|
2359
2371
|
@layer components {
|
|
2372
|
+
/* Main container — horizontal layout with avatar, social icon, and user name. */
|
|
2373
|
+
.seeds-narrative-attribution {
|
|
2374
|
+
box-sizing: border-box;
|
|
2375
|
+
display: flex;
|
|
2376
|
+
align-items: center;
|
|
2377
|
+
gap: var(--space-300); /* 8px */
|
|
2378
|
+
font-family: var(--font-family);
|
|
2379
|
+
}
|
|
2360
2380
|
|
|
2361
|
-
/*
|
|
2362
|
-
.seeds-narrative-attribution {
|
|
2363
|
-
|
|
2364
|
-
|
|
2365
|
-
|
|
2366
|
-
|
|
2367
|
-
|
|
2368
|
-
}
|
|
2369
|
-
|
|
2370
|
-
/* Circular avatar image — fixed size with rounded corners. */
|
|
2371
|
-
.seeds-narrative-attribution-avatar {
|
|
2372
|
-
width: var(--space-450); /* 24px */
|
|
2373
|
-
height: var(--space-450); /* 24px */
|
|
2374
|
-
border-radius: var(--radius-circular); /* 50% */
|
|
2375
|
-
object-fit: cover;
|
|
2376
|
-
flex-shrink: 0;
|
|
2377
|
-
}
|
|
2378
|
-
|
|
2379
|
-
/* Social network icon container — flexible sizing for partner logos. */
|
|
2380
|
-
.seeds-narrative-attribution-social-icon {
|
|
2381
|
-
flex-shrink: 0;
|
|
2382
|
-
display: flex;
|
|
2383
|
-
align-items: center;
|
|
2384
|
-
justify-content: center;
|
|
2385
|
-
}
|
|
2381
|
+
/* Circular avatar image — fixed size with rounded corners. */
|
|
2382
|
+
.seeds-narrative-attribution-avatar {
|
|
2383
|
+
width: var(--space-450); /* 24px */
|
|
2384
|
+
height: var(--space-450); /* 24px */
|
|
2385
|
+
border-radius: var(--radius-circular); /* 50% */
|
|
2386
|
+
object-fit: cover;
|
|
2387
|
+
flex-shrink: 0;
|
|
2388
|
+
}
|
|
2386
2389
|
|
|
2387
|
-
/*
|
|
2388
|
-
.seeds-narrative-attribution-
|
|
2389
|
-
|
|
2390
|
-
|
|
2391
|
-
|
|
2392
|
-
|
|
2393
|
-
|
|
2394
|
-
font-style: normal;
|
|
2395
|
-
font-weight: var(--font-weight-bold, 700);
|
|
2396
|
-
line-height: var(--text-base-line-height, 24px);
|
|
2397
|
-
}
|
|
2390
|
+
/* Social network icon container — flexible sizing for partner logos. */
|
|
2391
|
+
.seeds-narrative-attribution-social-icon {
|
|
2392
|
+
flex-shrink: 0;
|
|
2393
|
+
display: flex;
|
|
2394
|
+
align-items: center;
|
|
2395
|
+
justify-content: center;
|
|
2396
|
+
}
|
|
2398
2397
|
|
|
2398
|
+
/* User name text — bold headline text with ellipsis overflow. */
|
|
2399
|
+
.seeds-narrative-attribution-user-name {
|
|
2400
|
+
overflow: hidden;
|
|
2401
|
+
color: var(--color-text-headline);
|
|
2402
|
+
text-overflow: ellipsis;
|
|
2403
|
+
font-family: var(--font-family);
|
|
2404
|
+
font-size: var(--text-base-font-size, 14px);
|
|
2405
|
+
font-style: normal;
|
|
2406
|
+
font-weight: var(--font-weight-bold, 700);
|
|
2407
|
+
line-height: var(--text-base-line-height, 24px);
|
|
2408
|
+
}
|
|
2399
2409
|
}
|
|
2400
2410
|
|
|
2401
2411
|
/* --- seeds-react-narrative-kit --- */
|
|
@@ -2411,22 +2421,21 @@
|
|
|
2411
2421
|
*/
|
|
2412
2422
|
|
|
2413
2423
|
@layer components {
|
|
2424
|
+
.seeds-narrative-container {
|
|
2425
|
+
position: relative;
|
|
2426
|
+
overflow: hidden;
|
|
2427
|
+
box-sizing: border-box;
|
|
2428
|
+
display: flex;
|
|
2429
|
+
flex-direction: column;
|
|
2430
|
+
align-items: stretch;
|
|
2431
|
+
padding: var(--space-500);
|
|
2432
|
+
border-radius: var(--radius-800);
|
|
2433
|
+
box-shadow: var(--shadow-low);
|
|
2434
|
+
background-color: var(--color-container-bg-base);
|
|
2435
|
+
font-family: var(--font-family);
|
|
2436
|
+
}
|
|
2414
2437
|
|
|
2415
|
-
|
|
2416
|
-
position: relative;
|
|
2417
|
-
overflow: hidden;
|
|
2418
|
-
box-sizing: border-box;
|
|
2419
|
-
display: flex;
|
|
2420
|
-
flex-direction: column;
|
|
2421
|
-
align-items: stretch;
|
|
2422
|
-
padding: var(--space-500);
|
|
2423
|
-
border-radius: var(--radius-800);
|
|
2424
|
-
box-shadow: var(--shadow-low);
|
|
2425
|
-
background-color: var(--color-container-bg-base);
|
|
2426
|
-
font-family: var(--font-family);
|
|
2427
|
-
}
|
|
2428
|
-
|
|
2429
|
-
/* Grid and flex items default to `min-width: auto`, so they never shrink below
|
|
2438
|
+
/* Grid and flex items default to `min-width: auto`, so they never shrink below
|
|
2430
2439
|
their own min-content. A wide row of widgets (a metric grid, a card grid) then
|
|
2431
2440
|
forces its column wider than the padded surface — and since the container clips
|
|
2432
2441
|
with overflow:hidden, the excess is cut off at the edge, eating the right-hand
|
|
@@ -2439,39 +2448,37 @@
|
|
|
2439
2448
|
default. Any component that needs a real floor (e.g. the data callout's 270px
|
|
2440
2449
|
donut slot) sets its own min-width via a plain class and always wins, instead
|
|
2441
2450
|
of racing this rule on source order. */
|
|
2442
|
-
:where(.seeds-narrative-container),
|
|
2443
|
-
:where(.seeds-narrative-container *) {
|
|
2444
|
-
|
|
2445
|
-
}
|
|
2451
|
+
:where(.seeds-narrative-container),
|
|
2452
|
+
:where(.seeds-narrative-container *) {
|
|
2453
|
+
min-width: 0;
|
|
2454
|
+
}
|
|
2446
2455
|
|
|
2447
|
-
/* Decorative inner gradient border anchored to the top-left corner.
|
|
2456
|
+
/* Decorative inner gradient border anchored to the top-left corner.
|
|
2448
2457
|
A masked ::before so the gradient renders as a uniform-width ring that follows
|
|
2449
2458
|
border-radius and never tints the content. The radial ellipse fades to
|
|
2450
2459
|
transparent away from the corner; its x-radius (80%) is larger than its
|
|
2451
2460
|
y-radius (60%) so the accent runs slightly further along the top edge than down
|
|
2452
2461
|
the left edge. Brand stops mirror --color-gradient-ai — tokenize to a
|
|
2453
2462
|
--color-gradient-* token once one exists for a fade-to-transparent variant. */
|
|
2454
|
-
.seeds-narrative-container-accent::before {
|
|
2455
|
-
|
|
2456
|
-
|
|
2457
|
-
|
|
2458
|
-
|
|
2459
|
-
|
|
2460
|
-
|
|
2461
|
-
|
|
2462
|
-
|
|
2463
|
-
|
|
2464
|
-
|
|
2465
|
-
|
|
2466
|
-
|
|
2467
|
-
|
|
2468
|
-
|
|
2469
|
-
|
|
2470
|
-
|
|
2471
|
-
|
|
2472
|
-
|
|
2473
|
-
}
|
|
2474
|
-
|
|
2463
|
+
.seeds-narrative-container-accent::before {
|
|
2464
|
+
content: "";
|
|
2465
|
+
position: absolute;
|
|
2466
|
+
inset: 0;
|
|
2467
|
+
border-radius: inherit;
|
|
2468
|
+
padding: 4px;
|
|
2469
|
+
background: radial-gradient(
|
|
2470
|
+
ellipse 80% 60% at top left,
|
|
2471
|
+
#205bc3 0%,
|
|
2472
|
+
#9747ff 28%,
|
|
2473
|
+
#f282f5 50%,
|
|
2474
|
+
transparent 72%
|
|
2475
|
+
);
|
|
2476
|
+
-webkit-mask: linear-gradient(#fff 0 0) content-box,
|
|
2477
|
+
linear-gradient(#fff 0 0);
|
|
2478
|
+
-webkit-mask-composite: xor;
|
|
2479
|
+
mask-composite: exclude;
|
|
2480
|
+
pointer-events: none;
|
|
2481
|
+
}
|
|
2475
2482
|
}
|
|
2476
2483
|
|
|
2477
2484
|
/* --- seeds-react-narrative-kit --- */
|
|
@@ -2496,89 +2503,87 @@
|
|
|
2496
2503
|
*/
|
|
2497
2504
|
|
|
2498
2505
|
@layer components {
|
|
2499
|
-
|
|
2500
|
-
/* Establishes the query container. The row inside reacts to this element's
|
|
2506
|
+
/* Establishes the query container. The row inside reacts to this element's
|
|
2501
2507
|
inline size. A container query only styles DESCENDANTS of the query container,
|
|
2502
2508
|
so the flex row lives on the inner element, not this one. */
|
|
2503
|
-
.seeds-narrative-data-callout {
|
|
2504
|
-
|
|
2505
|
-
|
|
2506
|
-
|
|
2507
|
-
}
|
|
2509
|
+
.seeds-narrative-data-callout {
|
|
2510
|
+
container-type: inline-size;
|
|
2511
|
+
box-sizing: border-box;
|
|
2512
|
+
font-family: var(--font-family);
|
|
2513
|
+
}
|
|
2508
2514
|
|
|
2509
|
-
/* Stacked single column by default (narrow). The container query below turns it
|
|
2515
|
+
/* Stacked single column by default (narrow). The container query below turns it
|
|
2510
2516
|
into the horizontal 1/3 + 2/3 row once there is room. */
|
|
2511
|
-
.seeds-narrative-data-callout-row {
|
|
2512
|
-
|
|
2513
|
-
|
|
2514
|
-
|
|
2515
|
-
|
|
2516
|
-
|
|
2517
|
-
}
|
|
2517
|
+
.seeds-narrative-data-callout-row {
|
|
2518
|
+
box-sizing: border-box;
|
|
2519
|
+
display: flex;
|
|
2520
|
+
flex-direction: column;
|
|
2521
|
+
align-items: center;
|
|
2522
|
+
gap: var(--space-450); /* 24px */
|
|
2523
|
+
}
|
|
2518
2524
|
|
|
2519
|
-
/* Visual slot — layout only, no stroke/background so the injected chart controls
|
|
2525
|
+
/* Visual slot — layout only, no stroke/background so the injected chart controls
|
|
2520
2526
|
its own look and its own size. No fixed height: charts like the data-viz
|
|
2521
2527
|
DonutChart carry their own intrinsic height (and a legend), so the slot sizes
|
|
2522
2528
|
to the chart rather than clipping it. Stacked full-width until the container
|
|
2523
2529
|
query expands the row. */
|
|
2524
|
-
.seeds-narrative-data-callout-visual {
|
|
2525
|
-
|
|
2526
|
-
|
|
2527
|
-
|
|
2528
|
-
|
|
2529
|
-
|
|
2530
|
-
|
|
2531
|
-
}
|
|
2530
|
+
.seeds-narrative-data-callout-visual {
|
|
2531
|
+
box-sizing: border-box;
|
|
2532
|
+
display: flex;
|
|
2533
|
+
align-items: center;
|
|
2534
|
+
justify-content: center;
|
|
2535
|
+
width: 100%;
|
|
2536
|
+
min-width: 0;
|
|
2537
|
+
}
|
|
2532
2538
|
|
|
2533
|
-
/* Stretch the injected visual to the slot's full width. A fluid-width chart like
|
|
2539
|
+
/* Stretch the injected visual to the slot's full width. A fluid-width chart like
|
|
2534
2540
|
the v2 DonutChart otherwise shrinks to content inside this centered flex slot,
|
|
2535
2541
|
so Highcharts fills that shrunk width and the ring gets width-capped below its
|
|
2536
2542
|
fixed 270px height — leaving an empty vertical band. Filling the width lets the
|
|
2537
2543
|
ring become height-capped and fill its box top-to-bottom, like the standalone
|
|
2538
2544
|
chart story. */
|
|
2539
|
-
.seeds-narrative-data-callout-visual > * {
|
|
2540
|
-
|
|
2541
|
-
}
|
|
2545
|
+
.seeds-narrative-data-callout-visual > * {
|
|
2546
|
+
width: 100%;
|
|
2547
|
+
}
|
|
2542
2548
|
|
|
2543
|
-
/* Body copy — fills the remaining space. */
|
|
2544
|
-
.seeds-narrative-data-callout-body {
|
|
2545
|
-
|
|
2546
|
-
|
|
2547
|
-
|
|
2548
|
-
|
|
2549
|
-
|
|
2550
|
-
|
|
2551
|
-
|
|
2552
|
-
}
|
|
2549
|
+
/* Body copy — fills the remaining space. */
|
|
2550
|
+
.seeds-narrative-data-callout-body {
|
|
2551
|
+
box-sizing: border-box;
|
|
2552
|
+
min-width: 0;
|
|
2553
|
+
font-size: var(--font-size-300); /* 16px */
|
|
2554
|
+
line-height: var(--line-height-400); /* ~28px */
|
|
2555
|
+
font-weight: var(--font-weight-normal);
|
|
2556
|
+
color: var(--color-text-body);
|
|
2557
|
+
overflow-wrap: break-word;
|
|
2558
|
+
}
|
|
2553
2559
|
|
|
2554
|
-
/* Expand to the horizontal 1/3 + 2/3 split once the component is wide enough.
|
|
2560
|
+
/* Expand to the horizontal 1/3 + 2/3 split once the component is wide enough.
|
|
2555
2561
|
The threshold is on the component's own width (container query), so a narrow
|
|
2556
2562
|
callout on a wide screen still stacks. 480px keeps the donut + copy readable
|
|
2557
2563
|
side by side. */
|
|
2558
|
-
@container (min-width: 480px) {
|
|
2559
|
-
|
|
2560
|
-
|
|
2561
|
-
|
|
2564
|
+
@container (min-width: 480px) {
|
|
2565
|
+
.seeds-narrative-data-callout-row {
|
|
2566
|
+
flex-direction: row;
|
|
2567
|
+
}
|
|
2562
2568
|
|
|
2563
|
-
|
|
2564
|
-
|
|
2569
|
+
.seeds-narrative-data-callout-visual {
|
|
2570
|
+
/* Nominally one-third, but never narrower than the injected chart's fixed
|
|
2565
2571
|
height (the v2 DonutChart is 270px tall). Below that width a fluid-width,
|
|
2566
2572
|
fixed-height chart like the donut gets width-capped and leaves an empty
|
|
2567
2573
|
vertical band above/below the ring; the min-width keeps the visual square
|
|
2568
2574
|
enough that the ring fills its box top-to-bottom, matching the standalone
|
|
2569
2575
|
chart story. */
|
|
2570
|
-
|
|
2571
|
-
|
|
2572
|
-
|
|
2573
|
-
|
|
2576
|
+
flex: 0 0 33.333%;
|
|
2577
|
+
min-width: 270px;
|
|
2578
|
+
width: auto;
|
|
2579
|
+
}
|
|
2574
2580
|
|
|
2575
|
-
|
|
2576
|
-
|
|
2581
|
+
.seeds-narrative-data-callout-body {
|
|
2582
|
+
flex: 1 1 0;
|
|
2583
|
+
}
|
|
2577
2584
|
}
|
|
2578
2585
|
}
|
|
2579
2586
|
|
|
2580
|
-
}
|
|
2581
|
-
|
|
2582
2587
|
/* --- seeds-react-narrative-kit --- */
|
|
2583
2588
|
/**
|
|
2584
2589
|
* Seeds NarrativeDivider component classes.
|
|
@@ -2592,20 +2597,18 @@
|
|
|
2592
2597
|
*/
|
|
2593
2598
|
|
|
2594
2599
|
@layer components {
|
|
2595
|
-
|
|
2596
|
-
/* A full-width, 1px horizontal rule. The <hr> ships with user-agent margins
|
|
2600
|
+
/* A full-width, 1px horizontal rule. The <hr> ships with user-agent margins
|
|
2597
2601
|
and a beveled border, so reset those and draw the line with a single
|
|
2598
2602
|
border-top using the container-border-base token (#dee1e1), which also
|
|
2599
2603
|
tracks dark mode. */
|
|
2600
|
-
.seeds-narrative-divider {
|
|
2601
|
-
|
|
2602
|
-
|
|
2603
|
-
|
|
2604
|
-
|
|
2605
|
-
|
|
2606
|
-
|
|
2607
|
-
}
|
|
2608
|
-
|
|
2604
|
+
.seeds-narrative-divider {
|
|
2605
|
+
box-sizing: border-box;
|
|
2606
|
+
width: 100%;
|
|
2607
|
+
height: 0;
|
|
2608
|
+
margin: 0;
|
|
2609
|
+
border: 0;
|
|
2610
|
+
border-top: 1px solid var(--color-container-border-base); /* #dee1e1 */
|
|
2611
|
+
}
|
|
2609
2612
|
}
|
|
2610
2613
|
|
|
2611
2614
|
/* --- seeds-react-narrative-kit --- */
|
|
@@ -2625,121 +2628,120 @@
|
|
|
2625
2628
|
*/
|
|
2626
2629
|
|
|
2627
2630
|
@layer components {
|
|
2631
|
+
/* Headline text. Rendered as an h1–h6, so reset the UA heading margins. */
|
|
2632
|
+
.seeds-narrative-headline {
|
|
2633
|
+
box-sizing: border-box;
|
|
2634
|
+
margin: 0;
|
|
2635
|
+
font-family: var(--font-family);
|
|
2636
|
+
font-size: var(--font-size-700);
|
|
2637
|
+
line-height: var(--line-height-700);
|
|
2638
|
+
font-weight: var(--font-weight-bold);
|
|
2639
|
+
letter-spacing: -0.02em;
|
|
2640
|
+
color: var(--color-text-headline);
|
|
2641
|
+
}
|
|
2628
2642
|
|
|
2629
|
-
/*
|
|
2630
|
-
.seeds-narrative-headline {
|
|
2631
|
-
box-sizing: border-box;
|
|
2632
|
-
margin: 0;
|
|
2633
|
-
font-family: var(--font-family);
|
|
2634
|
-
font-size: var(--font-size-700);
|
|
2635
|
-
line-height: var(--line-height-700);
|
|
2636
|
-
font-weight: var(--font-weight-bold);
|
|
2637
|
-
letter-spacing: -0.02em;
|
|
2638
|
-
color: var(--color-text-headline);
|
|
2639
|
-
}
|
|
2640
|
-
|
|
2641
|
-
/* Compact size for denser layouts (e.g. NarrativeSummary). Weight, letter
|
|
2643
|
+
/* Compact size for denser layouts (e.g. NarrativeSummary). Weight, letter
|
|
2642
2644
|
spacing, and color are inherited from the base class. */
|
|
2643
|
-
.seeds-narrative-headline-small {
|
|
2644
|
-
|
|
2645
|
-
|
|
2646
|
-
}
|
|
2645
|
+
.seeds-narrative-headline-small {
|
|
2646
|
+
font-size: var(--font-size-600); /* 24px */
|
|
2647
|
+
line-height: var(--line-height-600); /* 32px */
|
|
2648
|
+
}
|
|
2647
2649
|
|
|
2648
|
-
/* Static gradient accent for a span of headline text ("highlighted word").
|
|
2650
|
+
/* Static gradient accent for a span of headline text ("highlighted word").
|
|
2649
2651
|
Paints the AI brand gradient onto the glyphs via background-clip. */
|
|
2650
|
-
.seeds-narrative-headline-highlight {
|
|
2651
|
-
|
|
2652
|
-
|
|
2653
|
-
|
|
2654
|
-
|
|
2655
|
-
}
|
|
2652
|
+
.seeds-narrative-headline-highlight {
|
|
2653
|
+
background: var(--color-gradient-ai);
|
|
2654
|
+
-webkit-background-clip: text;
|
|
2655
|
+
background-clip: text;
|
|
2656
|
+
color: transparent;
|
|
2657
|
+
}
|
|
2656
2658
|
|
|
2657
|
-
/* -------------------------------------------------------------------------
|
|
2659
|
+
/* -------------------------------------------------------------------------
|
|
2658
2660
|
"Roll" variant — vertical word roll. The active word slides into view
|
|
2659
2661
|
while the previous one rolls out.
|
|
2660
2662
|
------------------------------------------------------------------------- */
|
|
2661
|
-
.seeds-narrative-headline-roll {
|
|
2662
|
-
|
|
2663
|
-
|
|
2664
|
-
|
|
2663
|
+
.seeds-narrative-headline-roll {
|
|
2664
|
+
display: inline-block;
|
|
2665
|
+
position: relative;
|
|
2666
|
+
/* clip-path rather than overflow:hidden: overflow:hidden on an inline-block
|
|
2665
2667
|
snaps its baseline to the bottom margin edge, dropping the rolling word
|
|
2666
2668
|
below the surrounding text. clip-path keeps the natural baseline. */
|
|
2667
|
-
|
|
2668
|
-
}
|
|
2669
|
+
clip-path: inset(0);
|
|
2670
|
+
}
|
|
2669
2671
|
|
|
2670
|
-
/* Invisible word that holds the box width to the active word. */
|
|
2671
|
-
.seeds-narrative-headline-roll-sizer {
|
|
2672
|
-
|
|
2673
|
-
|
|
2674
|
-
|
|
2675
|
-
|
|
2676
|
-
}
|
|
2672
|
+
/* Invisible word that holds the box width to the active word. */
|
|
2673
|
+
.seeds-narrative-headline-roll-sizer {
|
|
2674
|
+
display: inline-block;
|
|
2675
|
+
visibility: hidden;
|
|
2676
|
+
white-space: nowrap;
|
|
2677
|
+
pointer-events: none;
|
|
2678
|
+
}
|
|
2677
2679
|
|
|
2678
|
-
.seeds-narrative-headline-roll-word {
|
|
2679
|
-
|
|
2680
|
-
|
|
2681
|
-
|
|
2682
|
-
|
|
2683
|
-
|
|
2684
|
-
|
|
2685
|
-
|
|
2686
|
-
|
|
2687
|
-
|
|
2688
|
-
|
|
2689
|
-
}
|
|
2680
|
+
.seeds-narrative-headline-roll-word {
|
|
2681
|
+
display: inline-block;
|
|
2682
|
+
position: absolute;
|
|
2683
|
+
top: 0;
|
|
2684
|
+
left: 0;
|
|
2685
|
+
white-space: nowrap;
|
|
2686
|
+
transform: translateY(100%);
|
|
2687
|
+
opacity: 0;
|
|
2688
|
+
transition: transform var(--seeds-narrative-headline-roll-ms, 500ms) ease,
|
|
2689
|
+
opacity var(--seeds-narrative-headline-roll-ms, 500ms) ease;
|
|
2690
|
+
}
|
|
2690
2691
|
|
|
2691
|
-
.seeds-narrative-headline-roll-word-active {
|
|
2692
|
-
|
|
2693
|
-
|
|
2694
|
-
}
|
|
2692
|
+
.seeds-narrative-headline-roll-word-active {
|
|
2693
|
+
transform: translateY(0);
|
|
2694
|
+
opacity: 1;
|
|
2695
|
+
}
|
|
2695
2696
|
|
|
2696
|
-
.seeds-narrative-headline-roll-word-past {
|
|
2697
|
-
|
|
2698
|
-
|
|
2699
|
-
}
|
|
2700
|
-
|
|
2701
|
-
/* Reverse the roll direction. */
|
|
2702
|
-
.seeds-narrative-headline-roll-down .seeds-narrative-headline-roll-word {
|
|
2703
|
-
transform: translateY(-100%);
|
|
2704
|
-
}
|
|
2705
|
-
.seeds-narrative-headline-roll-down .seeds-narrative-headline-roll-word-active {
|
|
2706
|
-
transform: translateY(0);
|
|
2707
|
-
}
|
|
2708
|
-
.seeds-narrative-headline-roll-down .seeds-narrative-headline-roll-word-past {
|
|
2709
|
-
transform: translateY(100%);
|
|
2710
|
-
}
|
|
2711
|
-
|
|
2712
|
-
/* Gradient-painted rolling words with a slow shimmer. */
|
|
2713
|
-
.seeds-narrative-headline-roll-gradient .seeds-narrative-headline-roll-word {
|
|
2714
|
-
background: var(--color-gradient-ai);
|
|
2715
|
-
background-size: 200% 200%;
|
|
2716
|
-
-webkit-background-clip: text;
|
|
2717
|
-
background-clip: text;
|
|
2718
|
-
color: transparent;
|
|
2719
|
-
animation: seeds-narrative-headline-grad-shift 8s ease infinite;
|
|
2720
|
-
}
|
|
2697
|
+
.seeds-narrative-headline-roll-word-past {
|
|
2698
|
+
transform: translateY(-100%);
|
|
2699
|
+
opacity: 0;
|
|
2700
|
+
}
|
|
2721
2701
|
|
|
2722
|
-
|
|
2723
|
-
|
|
2724
|
-
|
|
2725
|
-
background-position: 0% 50%;
|
|
2702
|
+
/* Reverse the roll direction. */
|
|
2703
|
+
.seeds-narrative-headline-roll-down .seeds-narrative-headline-roll-word {
|
|
2704
|
+
transform: translateY(-100%);
|
|
2726
2705
|
}
|
|
2727
|
-
|
|
2728
|
-
|
|
2706
|
+
.seeds-narrative-headline-roll-down
|
|
2707
|
+
.seeds-narrative-headline-roll-word-active {
|
|
2708
|
+
transform: translateY(0);
|
|
2729
2709
|
}
|
|
2730
|
-
|
|
2731
|
-
|
|
2732
|
-
/* The JS cycle is already disabled under reduced-motion (the first word holds);
|
|
2733
|
-
also flatten the transition and shimmer so any in-flight motion settles. */
|
|
2734
|
-
@media (prefers-reduced-motion: reduce) {
|
|
2735
|
-
.seeds-narrative-headline-roll-word {
|
|
2736
|
-
transition: none;
|
|
2710
|
+
.seeds-narrative-headline-roll-down .seeds-narrative-headline-roll-word-past {
|
|
2711
|
+
transform: translateY(100%);
|
|
2737
2712
|
}
|
|
2713
|
+
|
|
2714
|
+
/* Gradient-painted rolling words with a slow shimmer. */
|
|
2738
2715
|
.seeds-narrative-headline-roll-gradient .seeds-narrative-headline-roll-word {
|
|
2739
|
-
|
|
2716
|
+
background: var(--color-gradient-ai);
|
|
2717
|
+
background-size: 200% 200%;
|
|
2718
|
+
-webkit-background-clip: text;
|
|
2719
|
+
background-clip: text;
|
|
2720
|
+
color: transparent;
|
|
2721
|
+
animation: seeds-narrative-headline-grad-shift 8s ease infinite;
|
|
2722
|
+
}
|
|
2723
|
+
|
|
2724
|
+
@keyframes seeds-narrative-headline-grad-shift {
|
|
2725
|
+
0%,
|
|
2726
|
+
100% {
|
|
2727
|
+
background-position: 0% 50%;
|
|
2728
|
+
}
|
|
2729
|
+
50% {
|
|
2730
|
+
background-position: 100% 50%;
|
|
2731
|
+
}
|
|
2740
2732
|
}
|
|
2741
|
-
}
|
|
2742
2733
|
|
|
2734
|
+
/* The JS cycle is already disabled under reduced-motion (the first word holds);
|
|
2735
|
+
also flatten the transition and shimmer so any in-flight motion settles. */
|
|
2736
|
+
@media (prefers-reduced-motion: reduce) {
|
|
2737
|
+
.seeds-narrative-headline-roll-word {
|
|
2738
|
+
transition: none;
|
|
2739
|
+
}
|
|
2740
|
+
.seeds-narrative-headline-roll-gradient
|
|
2741
|
+
.seeds-narrative-headline-roll-word {
|
|
2742
|
+
animation: none;
|
|
2743
|
+
}
|
|
2744
|
+
}
|
|
2743
2745
|
}
|
|
2744
2746
|
|
|
2745
2747
|
/* --- seeds-react-narrative-kit --- */
|
|
@@ -2759,103 +2761,109 @@
|
|
|
2759
2761
|
*/
|
|
2760
2762
|
|
|
2761
2763
|
@layer components {
|
|
2762
|
-
|
|
2763
|
-
/* Establishes the query container. The track inside reacts to this element's
|
|
2764
|
+
/* Establishes the query container. The track inside reacts to this element's
|
|
2764
2765
|
inline size — a container query can only style descendants of the container,
|
|
2765
2766
|
never the container element itself. */
|
|
2766
|
-
.seeds-narrative-ordered-list {
|
|
2767
|
-
|
|
2768
|
-
|
|
2769
|
-
|
|
2770
|
-
}
|
|
2767
|
+
.seeds-narrative-ordered-list {
|
|
2768
|
+
container-type: inline-size;
|
|
2769
|
+
box-sizing: border-box;
|
|
2770
|
+
font-family: var(--font-family);
|
|
2771
|
+
}
|
|
2771
2772
|
|
|
2772
|
-
/* The list itself, and the default (stacked) layout. The horizontal modifier
|
|
2773
|
+
/* The list itself, and the default (stacked) layout. The horizontal modifier
|
|
2773
2774
|
only expands to a row once the container query below has room, so horizontal
|
|
2774
2775
|
collapses back to this stack when narrow. */
|
|
2775
|
-
.seeds-narrative-ordered-list-track {
|
|
2776
|
-
|
|
2777
|
-
|
|
2778
|
-
|
|
2779
|
-
|
|
2780
|
-
|
|
2781
|
-
|
|
2782
|
-
}
|
|
2776
|
+
.seeds-narrative-ordered-list-track {
|
|
2777
|
+
display: flex;
|
|
2778
|
+
flex-direction: column;
|
|
2779
|
+
gap: var(--space-400); /* 16px */
|
|
2780
|
+
margin: 0;
|
|
2781
|
+
padding: 0;
|
|
2782
|
+
list-style: none;
|
|
2783
|
+
}
|
|
2783
2784
|
|
|
2784
|
-
/* An item row: the ordinal beside the body, on its own rounded surface. */
|
|
2785
|
-
.seeds-narrative-ordered-list-item {
|
|
2786
|
-
|
|
2787
|
-
|
|
2788
|
-
|
|
2789
|
-
|
|
2790
|
-
|
|
2791
|
-
|
|
2792
|
-
|
|
2793
|
-
|
|
2794
|
-
}
|
|
2785
|
+
/* An item row: the ordinal beside the body, on its own rounded surface. */
|
|
2786
|
+
.seeds-narrative-ordered-list-item {
|
|
2787
|
+
display: flex;
|
|
2788
|
+
gap: var(--space-450); /* 24px */
|
|
2789
|
+
align-items: flex-start;
|
|
2790
|
+
box-sizing: border-box;
|
|
2791
|
+
min-width: 0;
|
|
2792
|
+
padding: var(--space-400) var(--space-450); /* 16px 24px */
|
|
2793
|
+
border-radius: var(--radius-800); /* 12px */
|
|
2794
|
+
background-color: var(--color-app-bg-base);
|
|
2795
|
+
}
|
|
2795
2796
|
|
|
2796
|
-
/* The ordinal (01, 02, …). No mono token exists yet, so fall back to a system
|
|
2797
|
+
/* The ordinal (01, 02, …). No mono token exists yet, so fall back to a system
|
|
2797
2798
|
monospace stack — mirrors the value treatment in metric-highlight.css. */
|
|
2798
|
-
.seeds-narrative-ordered-list-number {
|
|
2799
|
-
|
|
2800
|
-
|
|
2801
|
-
|
|
2802
|
-
|
|
2803
|
-
|
|
2804
|
-
|
|
2805
|
-
|
|
2806
|
-
|
|
2799
|
+
.seeds-narrative-ordered-list-number {
|
|
2800
|
+
margin: 0;
|
|
2801
|
+
flex-shrink: 0;
|
|
2802
|
+
font-family: var(
|
|
2803
|
+
--font-family-mono,
|
|
2804
|
+
ui-monospace,
|
|
2805
|
+
"SF Mono",
|
|
2806
|
+
SFMono-Regular,
|
|
2807
|
+
Menlo,
|
|
2808
|
+
monospace
|
|
2809
|
+
);
|
|
2810
|
+
font-size: var(--font-size-700); /* 32px */
|
|
2811
|
+
line-height: var(--line-height-700); /* 40px */
|
|
2812
|
+
font-weight: var(--font-weight-bold);
|
|
2813
|
+
color: var(--color-text-headline);
|
|
2814
|
+
}
|
|
2807
2815
|
|
|
2808
|
-
/* Title + description + optional action, stacked. */
|
|
2809
|
-
.seeds-narrative-ordered-list-body {
|
|
2810
|
-
|
|
2811
|
-
|
|
2812
|
-
|
|
2813
|
-
|
|
2814
|
-
|
|
2815
|
-
}
|
|
2816
|
+
/* Title + description + optional action, stacked. */
|
|
2817
|
+
.seeds-narrative-ordered-list-body {
|
|
2818
|
+
flex: 1 1 auto;
|
|
2819
|
+
display: flex;
|
|
2820
|
+
flex-direction: column;
|
|
2821
|
+
gap: var(--space-200); /* 4px */
|
|
2822
|
+
min-width: 0;
|
|
2823
|
+
}
|
|
2816
2824
|
|
|
2817
|
-
/* Title. 16px / 28px — the 28px line-height has no exact type token (the scale
|
|
2825
|
+
/* Title. 16px / 28px — the 28px line-height has no exact type token (the scale
|
|
2818
2826
|
skips from 24px to 32px), so the design value is kept verbatim. Same
|
|
2819
2827
|
rationale as narrative-summary.css. */
|
|
2820
|
-
.seeds-narrative-ordered-list-title {
|
|
2821
|
-
|
|
2822
|
-
|
|
2823
|
-
|
|
2824
|
-
|
|
2825
|
-
|
|
2826
|
-
}
|
|
2828
|
+
.seeds-narrative-ordered-list-title {
|
|
2829
|
+
margin: 0;
|
|
2830
|
+
font-size: var(--font-size-300); /* 16px */
|
|
2831
|
+
line-height: 28px; /* off-scale, see comment above */
|
|
2832
|
+
font-weight: var(--font-weight-bold);
|
|
2833
|
+
color: var(--color-text-body);
|
|
2834
|
+
}
|
|
2827
2835
|
|
|
2828
|
-
/* Description. 14px / 24px has no exact type token, so it is kept verbatim —
|
|
2836
|
+
/* Description. 14px / 24px has no exact type token, so it is kept verbatim —
|
|
2829
2837
|
same rationale as the title above. */
|
|
2830
|
-
.seeds-narrative-ordered-list-description {
|
|
2831
|
-
|
|
2832
|
-
|
|
2833
|
-
|
|
2834
|
-
|
|
2835
|
-
|
|
2836
|
-
}
|
|
2838
|
+
.seeds-narrative-ordered-list-description {
|
|
2839
|
+
margin: 0;
|
|
2840
|
+
font-size: 14px; /* off-scale, see title above */
|
|
2841
|
+
line-height: 24px;
|
|
2842
|
+
font-weight: var(--font-weight-normal);
|
|
2843
|
+
color: var(--color-text-body);
|
|
2844
|
+
}
|
|
2837
2845
|
|
|
2838
|
-
.seeds-narrative-ordered-list-action {
|
|
2839
|
-
|
|
2840
|
-
}
|
|
2846
|
+
.seeds-narrative-ordered-list-action {
|
|
2847
|
+
padding-top: var(--space-350); /* 12px */
|
|
2848
|
+
}
|
|
2841
2849
|
|
|
2842
|
-
/* Expand the horizontal variant to a row of equal columns once the component is
|
|
2850
|
+
/* Expand the horizontal variant to a row of equal columns once the component is
|
|
2843
2851
|
wide enough. The threshold is on the component's own width (container query),
|
|
2844
2852
|
so a narrow card on a wide screen still stacks. 640px = Tailwind/Seeds sm
|
|
2845
2853
|
breakpoint, matching narrative-summary.css. */
|
|
2846
|
-
@container (min-width: 640px) {
|
|
2847
|
-
|
|
2848
|
-
|
|
2849
|
-
|
|
2854
|
+
@container (min-width: 640px) {
|
|
2855
|
+
.seeds-narrative-ordered-list-horizontal {
|
|
2856
|
+
flex-direction: row;
|
|
2857
|
+
}
|
|
2850
2858
|
|
|
2851
|
-
|
|
2852
|
-
|
|
2853
|
-
|
|
2859
|
+
.seeds-narrative-ordered-list-horizontal
|
|
2860
|
+
> .seeds-narrative-ordered-list-item {
|
|
2861
|
+
flex: 1 1 0;
|
|
2862
|
+
min-width: 0;
|
|
2863
|
+
}
|
|
2854
2864
|
}
|
|
2855
2865
|
}
|
|
2856
2866
|
|
|
2857
|
-
}
|
|
2858
|
-
|
|
2859
2867
|
/* --- seeds-react-narrative-kit --- */
|
|
2860
2868
|
/**
|
|
2861
2869
|
* Seeds NarrativeSection component classes.
|
|
@@ -2872,36 +2880,34 @@
|
|
|
2872
2880
|
*/
|
|
2873
2881
|
|
|
2874
2882
|
@layer components {
|
|
2875
|
-
|
|
2876
|
-
/* The wrapper stacks the title above the content with a small gap. It carries
|
|
2883
|
+
/* The wrapper stacks the title above the content with a small gap. It carries
|
|
2877
2884
|
no surface of its own — it's meant to sit inside a NarrativeContainer. */
|
|
2878
|
-
.seeds-narrative-section {
|
|
2879
|
-
|
|
2880
|
-
|
|
2881
|
-
|
|
2882
|
-
}
|
|
2885
|
+
.seeds-narrative-section {
|
|
2886
|
+
display: flex;
|
|
2887
|
+
flex-direction: column;
|
|
2888
|
+
gap: var(--space-400); /* 16px — title to content */
|
|
2889
|
+
}
|
|
2883
2890
|
|
|
2884
|
-
/* The content slot stacks the section's widgets with the same 32px rhythm a
|
|
2891
|
+
/* The content slot stacks the section's widgets with the same 32px rhythm a
|
|
2885
2892
|
single-column grid (gap={500}) would give them, so multiple primitives inside
|
|
2886
2893
|
one section are spaced exactly as they are between sections. */
|
|
2887
|
-
.seeds-narrative-section-content {
|
|
2888
|
-
|
|
2889
|
-
|
|
2890
|
-
|
|
2891
|
-
}
|
|
2894
|
+
.seeds-narrative-section-content {
|
|
2895
|
+
display: flex;
|
|
2896
|
+
flex-direction: column;
|
|
2897
|
+
gap: var(--space-500); /* 32px — between widgets */
|
|
2898
|
+
}
|
|
2892
2899
|
|
|
2893
|
-
/* The section title: bold 14px/24px in the headline color token (#273333,
|
|
2900
|
+
/* The section title: bold 14px/24px in the headline color token (#273333,
|
|
2894
2901
|
which also tracks dark mode). Matches the summary-label recipe used across
|
|
2895
2902
|
the kit. The heading element ships with user-agent margins, so reset them. */
|
|
2896
|
-
.seeds-narrative-section-title {
|
|
2897
|
-
|
|
2898
|
-
|
|
2899
|
-
|
|
2900
|
-
|
|
2901
|
-
|
|
2902
|
-
|
|
2903
|
-
}
|
|
2904
|
-
|
|
2903
|
+
.seeds-narrative-section-title {
|
|
2904
|
+
margin: 0;
|
|
2905
|
+
font-family: var(--font-family);
|
|
2906
|
+
font-size: 14px;
|
|
2907
|
+
line-height: 24px;
|
|
2908
|
+
font-weight: var(--font-weight-bold);
|
|
2909
|
+
color: var(--color-text-headline); /* #273333 */
|
|
2910
|
+
}
|
|
2905
2911
|
}
|
|
2906
2912
|
|
|
2907
2913
|
/* --- seeds-react-narrative-kit --- */
|
|
@@ -2921,71 +2927,77 @@
|
|
|
2921
2927
|
*/
|
|
2922
2928
|
|
|
2923
2929
|
@layer components {
|
|
2924
|
-
|
|
2925
|
-
/* Main card container — gray background with rounded corners and padding.
|
|
2930
|
+
/* Main card container — gray background with rounded corners and padding.
|
|
2926
2931
|
Uses Seeds tokens for spacing, colors, and radius to match the design system.
|
|
2927
2932
|
Fills the width it is given (e.g. a grid column) and stretches its content to
|
|
2928
2933
|
match, mirroring the horizontal NarrativeOrderedList — so a row of cards grows
|
|
2929
2934
|
and resizes together instead of being pinned to a fixed 320px. */
|
|
2930
|
-
.seeds-narrative-social-media-card {
|
|
2931
|
-
|
|
2932
|
-
|
|
2933
|
-
|
|
2934
|
-
|
|
2935
|
-
|
|
2936
|
-
|
|
2937
|
-
|
|
2938
|
-
|
|
2939
|
-
|
|
2940
|
-
|
|
2941
|
-
}
|
|
2942
|
-
|
|
2943
|
-
/* No background — transparent background for cards that blend seamlessly with the page. */
|
|
2944
|
-
.seeds-narrative-social-media-card--no-background {
|
|
2945
|
-
background-color: transparent;
|
|
2946
|
-
}
|
|
2947
|
-
|
|
2948
|
-
/* Main content area — standard body text styling. */
|
|
2949
|
-
.seeds-narrative-social-media-card-content {
|
|
2950
|
-
flex: 1;
|
|
2951
|
-
margin-top: var(--space-400); /* 16px */
|
|
2952
|
-
font-family: var(--font-family);
|
|
2953
|
-
font-size: 14px;
|
|
2954
|
-
font-style: normal;
|
|
2955
|
-
font-weight: 400;
|
|
2956
|
-
line-height: 24px;
|
|
2957
|
-
color: var(--color-text-body);
|
|
2958
|
-
}
|
|
2935
|
+
.seeds-narrative-social-media-card {
|
|
2936
|
+
box-sizing: border-box;
|
|
2937
|
+
display: flex;
|
|
2938
|
+
flex-direction: column;
|
|
2939
|
+
align-items: stretch;
|
|
2940
|
+
width: 100%;
|
|
2941
|
+
padding: var(--space-450); /* 24px */
|
|
2942
|
+
border-radius: var(--radius-500); /* 6px */
|
|
2943
|
+
background-color: var(--color-app-bg-base);
|
|
2944
|
+
font-family: var(--font-family);
|
|
2945
|
+
color: var(--color-text-body);
|
|
2946
|
+
}
|
|
2959
2947
|
|
|
2960
|
-
/*
|
|
2961
|
-
.seeds-narrative-social-media-card-
|
|
2962
|
-
|
|
2963
|
-
|
|
2964
|
-
gap: var(--space-400); /* 16px */
|
|
2965
|
-
margin-top: var(--space-400); /* 16px */;
|
|
2966
|
-
}
|
|
2948
|
+
/* No background — transparent background for cards that blend seamlessly with the page. */
|
|
2949
|
+
.seeds-narrative-social-media-card--no-background {
|
|
2950
|
+
background-color: transparent;
|
|
2951
|
+
}
|
|
2967
2952
|
|
|
2968
|
-
/*
|
|
2969
|
-
.seeds-narrative-social-media-card-
|
|
2970
|
-
|
|
2971
|
-
|
|
2953
|
+
/* Main content area — standard body text styling. */
|
|
2954
|
+
.seeds-narrative-social-media-card-content {
|
|
2955
|
+
flex: 1;
|
|
2956
|
+
margin-top: var(--space-400); /* 16px */
|
|
2957
|
+
font-family: var(--font-family);
|
|
2958
|
+
font-size: 14px;
|
|
2959
|
+
font-style: normal;
|
|
2960
|
+
font-weight: 400;
|
|
2961
|
+
line-height: 24px;
|
|
2962
|
+
color: var(--color-text-body);
|
|
2963
|
+
}
|
|
2972
2964
|
|
|
2973
|
-
/*
|
|
2974
|
-
.seeds-narrative-social-media-card-
|
|
2975
|
-
|
|
2976
|
-
|
|
2977
|
-
|
|
2978
|
-
|
|
2965
|
+
/* Footer section — horizontal layout for stats with equal spacing. */
|
|
2966
|
+
.seeds-narrative-social-media-card-footer {
|
|
2967
|
+
display: flex;
|
|
2968
|
+
align-items: center;
|
|
2969
|
+
gap: var(--space-400); /* 16px */
|
|
2970
|
+
margin-top: var(--space-400); /* 16px */
|
|
2971
|
+
}
|
|
2979
2972
|
|
|
2980
|
-
/*
|
|
2981
|
-
.seeds-narrative-social-media-card-
|
|
2982
|
-
|
|
2983
|
-
|
|
2984
|
-
font-weight: 400;
|
|
2985
|
-
line-height: 24px;
|
|
2986
|
-
color: var(--color-text-body);
|
|
2987
|
-
}
|
|
2973
|
+
/* Hide footer when empty (no metadata items). */
|
|
2974
|
+
.seeds-narrative-social-media-card-footer:empty {
|
|
2975
|
+
display: none;
|
|
2976
|
+
}
|
|
2988
2977
|
|
|
2978
|
+
/* Individual stat container — icon + value in horizontal layout. */
|
|
2979
|
+
.seeds-narrative-social-media-card-stat {
|
|
2980
|
+
display: flex;
|
|
2981
|
+
align-items: center;
|
|
2982
|
+
gap: var(--space-200); /* 4px */
|
|
2983
|
+
}
|
|
2984
|
+
|
|
2985
|
+
/* Stat value text — monospace font for numeric values. */
|
|
2986
|
+
.seeds-narrative-social-media-card-stat-value {
|
|
2987
|
+
font-family: var(
|
|
2988
|
+
--font-family-mono,
|
|
2989
|
+
ui-monospace,
|
|
2990
|
+
"SF Mono",
|
|
2991
|
+
SFMono-Regular,
|
|
2992
|
+
Menlo,
|
|
2993
|
+
monospace
|
|
2994
|
+
);
|
|
2995
|
+
font-size: 14px;
|
|
2996
|
+
font-style: normal;
|
|
2997
|
+
font-weight: 400;
|
|
2998
|
+
line-height: 24px;
|
|
2999
|
+
color: var(--color-text-body);
|
|
3000
|
+
}
|
|
2989
3001
|
}
|
|
2990
3002
|
|
|
2991
3003
|
/* --- seeds-react-narrative-kit --- */
|
|
@@ -3007,115 +3019,113 @@
|
|
|
3007
3019
|
*/
|
|
3008
3020
|
|
|
3009
3021
|
@layer components {
|
|
3010
|
-
|
|
3011
|
-
/* Establishes the query container. The grid inside reacts to this element's
|
|
3022
|
+
/* Establishes the query container. The grid inside reacts to this element's
|
|
3012
3023
|
inline size. */
|
|
3013
|
-
.seeds-narrative-summary {
|
|
3014
|
-
|
|
3015
|
-
|
|
3016
|
-
|
|
3017
|
-
}
|
|
3024
|
+
.seeds-narrative-summary {
|
|
3025
|
+
container-type: inline-size;
|
|
3026
|
+
box-sizing: border-box;
|
|
3027
|
+
font-family: var(--font-family);
|
|
3028
|
+
}
|
|
3018
3029
|
|
|
3019
|
-
/* Stacked single column by default (narrow). The container query below expands
|
|
3030
|
+
/* Stacked single column by default (narrow). The container query below expands
|
|
3020
3031
|
it once there is room. */
|
|
3021
|
-
.seeds-narrative-summary-grid {
|
|
3022
|
-
|
|
3023
|
-
|
|
3024
|
-
|
|
3025
|
-
}
|
|
3032
|
+
.seeds-narrative-summary-grid {
|
|
3033
|
+
display: grid;
|
|
3034
|
+
grid-template-columns: 1fr;
|
|
3035
|
+
gap: var(--space-450); /* 24px */
|
|
3036
|
+
}
|
|
3026
3037
|
|
|
3027
|
-
/* The lead column: eyebrow, headline, optional action. align-items:flex-start
|
|
3038
|
+
/* The lead column: eyebrow, headline, optional action. align-items:flex-start
|
|
3028
3039
|
keeps the eyebrow pill and the action sized to their content — without it the
|
|
3029
3040
|
column's default stretch would blow the eyebrow out to full width. The
|
|
3030
3041
|
headline still fills and wraps because its text is wider than the track. */
|
|
3031
|
-
.seeds-narrative-summary-lead {
|
|
3032
|
-
|
|
3033
|
-
|
|
3034
|
-
|
|
3035
|
-
|
|
3036
|
-
|
|
3037
|
-
}
|
|
3042
|
+
.seeds-narrative-summary-lead {
|
|
3043
|
+
display: flex;
|
|
3044
|
+
flex-direction: column;
|
|
3045
|
+
align-items: flex-start;
|
|
3046
|
+
gap: var(--space-300); /* 8px */
|
|
3047
|
+
min-width: 0;
|
|
3048
|
+
}
|
|
3038
3049
|
|
|
3039
|
-
/* The headline area grows so the action anchors toward the bottom of the lead
|
|
3050
|
+
/* The headline area grows so the action anchors toward the bottom of the lead
|
|
3040
3051
|
column when the neighboring columns are taller. align-self:stretch fills the
|
|
3041
3052
|
track width (the lead column pins other items to flex-start) so the headline
|
|
3042
3053
|
wraps at the column edge regardless of its length. */
|
|
3043
|
-
.seeds-narrative-summary-headline {
|
|
3044
|
-
|
|
3045
|
-
|
|
3046
|
-
}
|
|
3054
|
+
.seeds-narrative-summary-headline {
|
|
3055
|
+
flex: 1 1 auto;
|
|
3056
|
+
align-self: stretch;
|
|
3057
|
+
}
|
|
3047
3058
|
|
|
3048
|
-
/* In three-column mode the content wrapper is transparent to the grid, so its
|
|
3059
|
+
/* In three-column mode the content wrapper is transparent to the grid, so its
|
|
3049
3060
|
two sections become grid items in their own columns. In two-column mode the
|
|
3050
3061
|
container query below turns it into a real, stacking grid item. */
|
|
3051
|
-
.seeds-narrative-summary-content {
|
|
3052
|
-
|
|
3053
|
-
}
|
|
3062
|
+
.seeds-narrative-summary-content {
|
|
3063
|
+
display: contents;
|
|
3064
|
+
}
|
|
3054
3065
|
|
|
3055
|
-
.seeds-narrative-summary-section {
|
|
3056
|
-
|
|
3057
|
-
|
|
3058
|
-
|
|
3059
|
-
|
|
3060
|
-
}
|
|
3066
|
+
.seeds-narrative-summary-section {
|
|
3067
|
+
display: flex;
|
|
3068
|
+
flex-direction: column;
|
|
3069
|
+
gap: var(--space-300); /* 8px */
|
|
3070
|
+
min-width: 0;
|
|
3071
|
+
}
|
|
3061
3072
|
|
|
3062
|
-
/* Section label. 14px / 24px has no exact type token (the scale skips from
|
|
3073
|
+
/* Section label. 14px / 24px has no exact type token (the scale skips from
|
|
3063
3074
|
13px to 16px), so the design value is kept verbatim — same rationale as
|
|
3064
3075
|
eyebrow-token.css. All other values use tokens. */
|
|
3065
|
-
.seeds-narrative-summary-label {
|
|
3066
|
-
|
|
3067
|
-
|
|
3068
|
-
|
|
3069
|
-
|
|
3070
|
-
|
|
3071
|
-
}
|
|
3076
|
+
.seeds-narrative-summary-label {
|
|
3077
|
+
margin: 0;
|
|
3078
|
+
font-size: 14px;
|
|
3079
|
+
line-height: 24px;
|
|
3080
|
+
font-weight: var(--font-weight-bold);
|
|
3081
|
+
color: var(--color-text-headline);
|
|
3082
|
+
}
|
|
3072
3083
|
|
|
3073
|
-
.seeds-narrative-summary-text {
|
|
3074
|
-
|
|
3075
|
-
|
|
3076
|
-
|
|
3077
|
-
|
|
3078
|
-
|
|
3079
|
-
}
|
|
3084
|
+
.seeds-narrative-summary-text {
|
|
3085
|
+
margin: 0;
|
|
3086
|
+
font-size: 14px; /* off-scale, see label above */
|
|
3087
|
+
line-height: 24px;
|
|
3088
|
+
font-weight: var(--font-weight-normal);
|
|
3089
|
+
color: var(--color-text-body);
|
|
3090
|
+
}
|
|
3080
3091
|
|
|
3081
|
-
.seeds-narrative-summary-list {
|
|
3082
|
-
|
|
3083
|
-
|
|
3084
|
-
|
|
3085
|
-
|
|
3086
|
-
|
|
3087
|
-
|
|
3088
|
-
|
|
3089
|
-
}
|
|
3092
|
+
.seeds-narrative-summary-list {
|
|
3093
|
+
margin: 0;
|
|
3094
|
+
padding-inline-start: 21px;
|
|
3095
|
+
list-style: disc;
|
|
3096
|
+
font-size: 14px; /* off-scale, see label above */
|
|
3097
|
+
line-height: 24px;
|
|
3098
|
+
font-weight: var(--font-weight-normal);
|
|
3099
|
+
color: var(--color-text-body);
|
|
3100
|
+
}
|
|
3090
3101
|
|
|
3091
|
-
.seeds-narrative-summary-list li {
|
|
3092
|
-
|
|
3093
|
-
}
|
|
3102
|
+
.seeds-narrative-summary-list li {
|
|
3103
|
+
margin: 0;
|
|
3104
|
+
}
|
|
3094
3105
|
|
|
3095
|
-
/* Expand to the multi-column layout once the component is wide enough. The
|
|
3106
|
+
/* Expand to the multi-column layout once the component is wide enough. The
|
|
3096
3107
|
threshold is on the component's own width (container query), so a narrow card
|
|
3097
3108
|
on a wide screen still stacks. 640px = Tailwind/Seeds sm breakpoint. */
|
|
3098
|
-
@container (min-width: 640px) {
|
|
3099
|
-
|
|
3100
|
-
|
|
3101
|
-
|
|
3109
|
+
@container (min-width: 640px) {
|
|
3110
|
+
.seeds-narrative-summary-grid {
|
|
3111
|
+
grid-template-columns: repeat(3, 1fr);
|
|
3112
|
+
}
|
|
3102
3113
|
|
|
3103
|
-
|
|
3104
|
-
|
|
3105
|
-
|
|
3106
|
-
|
|
3114
|
+
/* 1/3 lead + 2/3 content. */
|
|
3115
|
+
.seeds-narrative-summary-two-column {
|
|
3116
|
+
grid-template-columns: 1fr 2fr;
|
|
3117
|
+
}
|
|
3107
3118
|
|
|
3108
|
-
|
|
3109
|
-
|
|
3110
|
-
|
|
3111
|
-
|
|
3112
|
-
|
|
3113
|
-
|
|
3119
|
+
/* The content wrapper becomes a real grid item that stacks its two sections. */
|
|
3120
|
+
.seeds-narrative-summary-two-column .seeds-narrative-summary-content {
|
|
3121
|
+
display: flex;
|
|
3122
|
+
flex-direction: column;
|
|
3123
|
+
gap: var(--space-450); /* 24px */
|
|
3124
|
+
min-width: 0;
|
|
3125
|
+
}
|
|
3114
3126
|
}
|
|
3115
3127
|
}
|
|
3116
3128
|
|
|
3117
|
-
}
|
|
3118
|
-
|
|
3119
3129
|
/* --- seeds-react-narrative-kit --- */
|
|
3120
3130
|
/**
|
|
3121
3131
|
* Seeds PullQuote component classes.
|
|
@@ -3130,60 +3140,58 @@
|
|
|
3130
3140
|
*/
|
|
3131
3141
|
|
|
3132
3142
|
@layer components {
|
|
3133
|
-
|
|
3134
|
-
|
|
3135
|
-
|
|
3136
|
-
|
|
3137
|
-
|
|
3138
|
-
|
|
3139
|
-
|
|
3140
|
-
/* 40px block / 48px inline — 48px is off the space scale, so derive it from
|
|
3143
|
+
.seeds-pull-quote {
|
|
3144
|
+
width: 100%;
|
|
3145
|
+
display: flex;
|
|
3146
|
+
flex-direction: column;
|
|
3147
|
+
align-items: flex-start;
|
|
3148
|
+
margin: 0; /* reset the browser default <figure> margin */
|
|
3149
|
+
/* 40px block / 48px inline — 48px is off the space scale, so derive it from
|
|
3141
3150
|
two tokens (40 + 8) rather than hardcoding an off-scale value. */
|
|
3142
|
-
|
|
3143
|
-
}
|
|
3151
|
+
padding: var(--space-600) calc(var(--space-600) + var(--space-300));
|
|
3152
|
+
}
|
|
3144
3153
|
|
|
3145
|
-
/* The accented bar holding the quote and attribution. */
|
|
3146
|
-
.seeds-pull-quote-bar {
|
|
3147
|
-
|
|
3148
|
-
|
|
3149
|
-
|
|
3150
|
-
|
|
3151
|
-
|
|
3152
|
-
|
|
3153
|
-
|
|
3154
|
-
|
|
3154
|
+
/* The accented bar holding the quote and attribution. */
|
|
3155
|
+
.seeds-pull-quote-bar {
|
|
3156
|
+
box-sizing: border-box;
|
|
3157
|
+
display: flex;
|
|
3158
|
+
flex-direction: column;
|
|
3159
|
+
align-items: flex-start;
|
|
3160
|
+
gap: var(--space-450); /* 24px */
|
|
3161
|
+
width: 100%;
|
|
3162
|
+
padding-left: var(--space-450); /* 24px */
|
|
3163
|
+
/* 4px is off the border-width scale (max token is 3px); the bar is a
|
|
3155
3164
|
decorative accent, mirroring NarrativeContainer's hardcoded 4px ring. The
|
|
3156
3165
|
subtle accent uses the AI gradient mid stop (#9747ff — no exact token). */
|
|
3157
|
-
|
|
3158
|
-
}
|
|
3166
|
+
border-left: 4px solid #9747ff;
|
|
3167
|
+
}
|
|
3159
3168
|
|
|
3160
|
-
.seeds-pull-quote-vivid .seeds-pull-quote-bar {
|
|
3161
|
-
|
|
3162
|
-
}
|
|
3169
|
+
.seeds-pull-quote-vivid .seeds-pull-quote-bar {
|
|
3170
|
+
border-left-color: #fff;
|
|
3171
|
+
}
|
|
3163
3172
|
|
|
3164
|
-
.seeds-pull-quote-text {
|
|
3165
|
-
|
|
3166
|
-
|
|
3167
|
-
|
|
3168
|
-
|
|
3169
|
-
|
|
3170
|
-
|
|
3171
|
-
|
|
3172
|
-
}
|
|
3173
|
+
.seeds-pull-quote-text {
|
|
3174
|
+
margin: 0; /* reset the browser default <blockquote> margin */
|
|
3175
|
+
font-size: var(--font-size-600);
|
|
3176
|
+
line-height: var(--line-height-600);
|
|
3177
|
+
font-style: italic;
|
|
3178
|
+
font-weight: var(--font-weight-normal);
|
|
3179
|
+
color: inherit;
|
|
3180
|
+
overflow-wrap: break-word;
|
|
3181
|
+
}
|
|
3173
3182
|
|
|
3174
|
-
/* Attribution row — a flex container for author name, avatar, network, etc.
|
|
3183
|
+
/* Attribution row — a flex container for author name, avatar, network, etc.
|
|
3175
3184
|
Direct text inherits a bold, small treatment to match the display-name style;
|
|
3176
3185
|
richer content (e.g. an Avatar) composes freely. */
|
|
3177
|
-
.seeds-pull-quote-attribution {
|
|
3178
|
-
|
|
3179
|
-
|
|
3180
|
-
|
|
3181
|
-
|
|
3182
|
-
|
|
3183
|
-
|
|
3184
|
-
|
|
3185
|
-
}
|
|
3186
|
-
|
|
3186
|
+
.seeds-pull-quote-attribution {
|
|
3187
|
+
display: flex;
|
|
3188
|
+
align-items: center;
|
|
3189
|
+
gap: var(--space-300); /* 8px */
|
|
3190
|
+
font-size: var(--font-size-200);
|
|
3191
|
+
line-height: var(--line-height-200);
|
|
3192
|
+
font-weight: var(--font-weight-bold);
|
|
3193
|
+
color: inherit;
|
|
3194
|
+
}
|
|
3187
3195
|
}
|
|
3188
3196
|
|
|
3189
3197
|
/* --- seeds-react-numeral --- */
|
|
@@ -3310,6 +3318,100 @@
|
|
|
3310
3318
|
}
|
|
3311
3319
|
}
|
|
3312
3320
|
|
|
3321
|
+
/* --- seeds-react-panel --- */
|
|
3322
|
+
/**
|
|
3323
|
+
* Seeds Panel component classes.
|
|
3324
|
+
* Component-scoped port of the static styled-components chrome in styles.ts.
|
|
3325
|
+
* Used by PanelTailwind.tsx and the Tailwind sub-component paths.
|
|
3326
|
+
*
|
|
3327
|
+
* Requires @sproutsocial/seeds-react-theme/dist/theme-all.css imported for the
|
|
3328
|
+
* CSS variable definitions (and dark mode support).
|
|
3329
|
+
*
|
|
3330
|
+
* Runtime geometry (flex-basis, the gap margin, the direction shape, and the
|
|
3331
|
+
* inner min-width/min-height) is applied as inline style on the elements, not
|
|
3332
|
+
* here — the jsdom tests assert those computed values and CSS is not loaded in
|
|
3333
|
+
* that environment. Only static chrome lives in these classes.
|
|
3334
|
+
*
|
|
3335
|
+
* All rules live in `@layer components` so consumer Tailwind utilities (e.g.
|
|
3336
|
+
* mx-200, p-300, inline-flex) win the cascade and can override these component
|
|
3337
|
+
* defaults, rather than tying/beating them on specificity. Unlayered rules
|
|
3338
|
+
* would outrank any layered utility per the CSS cascade-layers spec.
|
|
3339
|
+
*/
|
|
3340
|
+
|
|
3341
|
+
@layer components {
|
|
3342
|
+
/* Container --------------------------------------------------------------- */
|
|
3343
|
+
|
|
3344
|
+
.seeds-panel {
|
|
3345
|
+
background: var(--color-container-bg-base);
|
|
3346
|
+
flex-grow: 0;
|
|
3347
|
+
flex-shrink: 0;
|
|
3348
|
+
overflow: hidden;
|
|
3349
|
+
border-radius: var(--radius-800);
|
|
3350
|
+
transition: flex-basis var(--duration-medium) ease-in-out,
|
|
3351
|
+
margin var(--duration-medium) ease-in-out;
|
|
3352
|
+
}
|
|
3353
|
+
|
|
3354
|
+
.seeds-panel-inner {
|
|
3355
|
+
display: flex;
|
|
3356
|
+
flex-direction: column;
|
|
3357
|
+
overflow: hidden;
|
|
3358
|
+
}
|
|
3359
|
+
|
|
3360
|
+
/* Header ------------------------------------------------------------------ */
|
|
3361
|
+
|
|
3362
|
+
.seeds-panel-header {
|
|
3363
|
+
display: flex;
|
|
3364
|
+
flex: 0 0 auto;
|
|
3365
|
+
justify-content: space-between;
|
|
3366
|
+
align-items: center;
|
|
3367
|
+
padding: var(--space-400);
|
|
3368
|
+
border-bottom: 1px solid var(--color-container-border-base);
|
|
3369
|
+
}
|
|
3370
|
+
|
|
3371
|
+
/* Content ----------------------------------------------------------------- */
|
|
3372
|
+
|
|
3373
|
+
/* overflow-y (and, when headerless, display/flex-direction) are set inline
|
|
3374
|
+
by PanelContentTailwind because the tests assert them under jsdom. */
|
|
3375
|
+
.seeds-panel-content {
|
|
3376
|
+
flex: 1 1 auto;
|
|
3377
|
+
min-height: 0;
|
|
3378
|
+
padding: var(--space-450);
|
|
3379
|
+
color: var(--color-text-body);
|
|
3380
|
+
}
|
|
3381
|
+
|
|
3382
|
+
/* Headerless content renders flush; the children own all chrome/padding. */
|
|
3383
|
+
.seeds-panel-content--headerless {
|
|
3384
|
+
padding: 0;
|
|
3385
|
+
}
|
|
3386
|
+
|
|
3387
|
+
/* Footer ------------------------------------------------------------------ */
|
|
3388
|
+
|
|
3389
|
+
/* margin-bottom (var(--bleed, 0px)) is set inline by PanelFooterTailwind. */
|
|
3390
|
+
.seeds-panel-footer {
|
|
3391
|
+
flex: 0 0 auto;
|
|
3392
|
+
overflow: hidden;
|
|
3393
|
+
padding: var(--space-450);
|
|
3394
|
+
}
|
|
3395
|
+
|
|
3396
|
+
/* Mobile actions header --------------------------------------------------- */
|
|
3397
|
+
|
|
3398
|
+
.seeds-panel-mobile-actions-header {
|
|
3399
|
+
display: flex;
|
|
3400
|
+
flex: 0 0 auto;
|
|
3401
|
+
align-items: center;
|
|
3402
|
+
justify-content: space-between;
|
|
3403
|
+
padding-top: var(--space-400);
|
|
3404
|
+
padding-left: var(--space-450);
|
|
3405
|
+
padding-right: var(--space-450);
|
|
3406
|
+
}
|
|
3407
|
+
|
|
3408
|
+
.seeds-panel-mobile-actions-buttons {
|
|
3409
|
+
display: flex;
|
|
3410
|
+
align-items: center;
|
|
3411
|
+
gap: var(--space-200);
|
|
3412
|
+
}
|
|
3413
|
+
}
|
|
3414
|
+
|
|
3313
3415
|
/* --- seeds-react-partner-logo --- */
|
|
3314
3416
|
/**
|
|
3315
3417
|
* Seeds Partner Logo component classes
|
|
@@ -3346,6 +3448,62 @@
|
|
|
3346
3448
|
}
|
|
3347
3449
|
}
|
|
3348
3450
|
|
|
3451
|
+
/* --- seeds-react-peek-in --- */
|
|
3452
|
+
/**
|
|
3453
|
+
* Seeds PeekIn component classes
|
|
3454
|
+
* Use these instead of writing out individual Tailwind utility classes.
|
|
3455
|
+
*
|
|
3456
|
+
* Requires @sproutsocial/seeds-react-theme/dist/theme-all.css imported for
|
|
3457
|
+
* CSS variable definitions and dark mode support.
|
|
3458
|
+
*
|
|
3459
|
+
* These classes back only the root layout wrappers PeekIn authors directly
|
|
3460
|
+
* (the mobile bottom-sheet header row and the desktop main column). The rest
|
|
3461
|
+
* of PeekIn's appearance comes from the composed Seeds primitives (Modal,
|
|
3462
|
+
* Drawer, Panel, Text, Button), which own their own styling.
|
|
3463
|
+
*
|
|
3464
|
+
* Rules are wrapped in @layer components so consumer Tailwind utilities (which
|
|
3465
|
+
* live in @layer utilities) win the cascade. Without this layer the unlayered
|
|
3466
|
+
* component CSS would beat utilities like px-450 / gap-300 and they could not
|
|
3467
|
+
* override component styling. Keep every rule inside this single block.
|
|
3468
|
+
*/
|
|
3469
|
+
|
|
3470
|
+
@layer components {
|
|
3471
|
+
/* Mobile bottom-sheet header row (Drawer.Header render wrapper) */
|
|
3472
|
+
.seeds-peek-in-drawer-header {
|
|
3473
|
+
display: flex;
|
|
3474
|
+
align-items: center;
|
|
3475
|
+
justify-content: space-between;
|
|
3476
|
+
padding-top: var(--space-400);
|
|
3477
|
+
padding-right: var(--space-450);
|
|
3478
|
+
padding-left: var(--space-450);
|
|
3479
|
+
flex: 0 0 auto;
|
|
3480
|
+
}
|
|
3481
|
+
|
|
3482
|
+
/* Header left group: optional back button + title */
|
|
3483
|
+
.seeds-peek-in-titlegroup {
|
|
3484
|
+
display: flex;
|
|
3485
|
+
align-items: center;
|
|
3486
|
+
gap: var(--space-300);
|
|
3487
|
+
}
|
|
3488
|
+
|
|
3489
|
+
/* Header right group: consumer actions + inline pills/close */
|
|
3490
|
+
.seeds-peek-in-header-actions {
|
|
3491
|
+
display: flex;
|
|
3492
|
+
align-items: center;
|
|
3493
|
+
gap: var(--space-200);
|
|
3494
|
+
}
|
|
3495
|
+
|
|
3496
|
+
/* Desktop main column: header + content, alongside the optional panel */
|
|
3497
|
+
.seeds-peek-in-main {
|
|
3498
|
+
display: flex;
|
|
3499
|
+
flex-direction: column;
|
|
3500
|
+
flex: 1 1 auto;
|
|
3501
|
+
overflow: hidden;
|
|
3502
|
+
background: var(--color-container-bg-base);
|
|
3503
|
+
border-radius: var(--radius-800);
|
|
3504
|
+
}
|
|
3505
|
+
}
|
|
3506
|
+
|
|
3349
3507
|
/* --- seeds-react-profile --- */
|
|
3350
3508
|
/**
|
|
3351
3509
|
* Seeds InlineProfile component classes
|
|
@@ -3496,6 +3654,7 @@
|
|
|
3496
3654
|
gap: var(--space-300);
|
|
3497
3655
|
}
|
|
3498
3656
|
}
|
|
3657
|
+
|
|
3499
3658
|
/* --- seeds-react-profile --- */
|
|
3500
3659
|
/**
|
|
3501
3660
|
* Seeds ProfileToken component classes
|
|
@@ -3602,17 +3761,16 @@
|
|
|
3602
3761
|
border: 1px solid var(--color-form-border-base);
|
|
3603
3762
|
border-radius: 50%;
|
|
3604
3763
|
background-color: var(--color-form-bg-base);
|
|
3605
|
-
transition:
|
|
3606
|
-
border-color var(--duration-fast) ease-in,
|
|
3764
|
+
transition: border-color var(--duration-fast) ease-in,
|
|
3607
3765
|
background-color var(--duration-fast) ease-in;
|
|
3608
3766
|
}
|
|
3609
3767
|
|
|
3610
3768
|
/* Focus ring mirrors button.css (the CSS form of the focusRing mixin) */
|
|
3611
3769
|
.seeds-radio-input:focus {
|
|
3612
3770
|
outline: none;
|
|
3613
|
-
box-shadow:
|
|
3614
|
-
0 0 0
|
|
3615
|
-
|
|
3771
|
+
box-shadow: 0 0 0 1px var(--color-button-primary-bg-base),
|
|
3772
|
+
0 0 0 4px
|
|
3773
|
+
color-mix(in srgb, var(--color-button-primary-bg-base) 30%, transparent);
|
|
3616
3774
|
}
|
|
3617
3775
|
|
|
3618
3776
|
.seeds-radio-wrapper:before {
|
|
@@ -3632,7 +3790,8 @@
|
|
|
3632
3790
|
|
|
3633
3791
|
/* Unchecked hover / focus: show the dot (only when NOT checked) */
|
|
3634
3792
|
.seeds-radio-wrapper:not(.seeds-radio-checked):hover .seeds-radio-input,
|
|
3635
|
-
.seeds-radio-wrapper:not(.seeds-radio-checked):focus-within
|
|
3793
|
+
.seeds-radio-wrapper:not(.seeds-radio-checked):focus-within
|
|
3794
|
+
.seeds-radio-input {
|
|
3636
3795
|
border-color: var(--color-form-border-base);
|
|
3637
3796
|
background-color: var(--color-form-bg-base);
|
|
3638
3797
|
}
|
|
@@ -3644,7 +3803,9 @@
|
|
|
3644
3803
|
}
|
|
3645
3804
|
|
|
3646
3805
|
/* Disabled-unchecked keeps the hover dot hidden (parity with opacity: disabled ? 0 : 1) */
|
|
3647
|
-
.seeds-radio-wrapper.seeds-radio-disabled:not(
|
|
3806
|
+
.seeds-radio-wrapper.seeds-radio-disabled:not(
|
|
3807
|
+
.seeds-radio-checked
|
|
3808
|
+
):hover:before {
|
|
3648
3809
|
opacity: 0;
|
|
3649
3810
|
}
|
|
3650
3811
|
|
|
@@ -3796,8 +3957,7 @@
|
|
|
3796
3957
|
cursor: pointer;
|
|
3797
3958
|
outline: none;
|
|
3798
3959
|
appearance: none;
|
|
3799
|
-
transition:
|
|
3800
|
-
border-color var(--duration-fast) var(--ease-ease_in),
|
|
3960
|
+
transition: border-color var(--duration-fast) var(--ease-ease_in),
|
|
3801
3961
|
box-shadow var(--duration-fast) var(--ease-ease_in);
|
|
3802
3962
|
font-family: var(--font-family);
|
|
3803
3963
|
font-weight: var(--font-weight-normal);
|
|
@@ -3812,16 +3972,14 @@
|
|
|
3812
3972
|
}
|
|
3813
3973
|
|
|
3814
3974
|
.seeds-select .seeds-select-input:focus {
|
|
3815
|
-
box-shadow:
|
|
3816
|
-
0 0 0 1px var(--color-button-primary-bg-base),
|
|
3975
|
+
box-shadow: 0 0 0 1px var(--color-button-primary-bg-base),
|
|
3817
3976
|
0 0px 0px 4px
|
|
3818
3977
|
color-mix(in srgb, var(--color-button-primary-bg-base), transparent 70%);
|
|
3819
3978
|
outline: none;
|
|
3820
3979
|
}
|
|
3821
3980
|
|
|
3822
3981
|
/* Fix for red ring when input is marked required in Firefox */
|
|
3823
|
-
.seeds-select
|
|
3824
|
-
.seeds-select-input:not(output):not(:focus):-moz-ui-invalid {
|
|
3982
|
+
.seeds-select .seeds-select-input:not(output):not(:focus):-moz-ui-invalid {
|
|
3825
3983
|
box-shadow: none;
|
|
3826
3984
|
}
|
|
3827
3985
|
|
|
@@ -4187,9 +4345,9 @@
|
|
|
4187
4345
|
/* Mixin for styled focus ring — copied from button.css:34-39 */
|
|
4188
4346
|
.seeds-switch:focus {
|
|
4189
4347
|
outline: none;
|
|
4190
|
-
box-shadow:
|
|
4191
|
-
0 0 0
|
|
4192
|
-
|
|
4348
|
+
box-shadow: 0 0 0 1px var(--color-button-primary-bg-base),
|
|
4349
|
+
0 0 0 4px
|
|
4350
|
+
color-mix(in srgb, var(--color-button-primary-bg-base) 30%, transparent);
|
|
4193
4351
|
}
|
|
4194
4352
|
|
|
4195
4353
|
/* Base styles for circle element */
|
|
@@ -4291,6 +4449,95 @@
|
|
|
4291
4449
|
}
|
|
4292
4450
|
}
|
|
4293
4451
|
|
|
4452
|
+
/* --- seeds-react-table --- */
|
|
4453
|
+
/**
|
|
4454
|
+
* Seeds v2 Table component classes
|
|
4455
|
+
* Use these instead of writing out individual Tailwind utility classes.
|
|
4456
|
+
*
|
|
4457
|
+
* Requires @sproutsocial/seeds-react-theme/dist/theme-all.css imported for
|
|
4458
|
+
* CSS variable definitions and dark mode support.
|
|
4459
|
+
*
|
|
4460
|
+
* Usage:
|
|
4461
|
+
* <div class="seeds-table-v2-container" role="region" tabindex="0">
|
|
4462
|
+
* <table class="seeds-table-v2">
|
|
4463
|
+
* <caption class="seeds-table-v2-caption">Caption</caption>
|
|
4464
|
+
* <thead class="seeds-table-v2-header">
|
|
4465
|
+
* <tr class="seeds-table-v2-row">
|
|
4466
|
+
* <th class="seeds-table-v2-header-cell" scope="col">Header</th>
|
|
4467
|
+
* </tr>
|
|
4468
|
+
* </thead>
|
|
4469
|
+
* <tbody class="seeds-table-v2-body">
|
|
4470
|
+
* <tr class="seeds-table-v2-row">
|
|
4471
|
+
* <td class="seeds-table-v2-cell">Data</td>
|
|
4472
|
+
* </tr>
|
|
4473
|
+
* </tbody>
|
|
4474
|
+
* </table>
|
|
4475
|
+
* </div>
|
|
4476
|
+
*
|
|
4477
|
+
* All rules are wrapped in `@layer components` so that consumer Tailwind
|
|
4478
|
+
* utilities (unlayered) win the cascade over these styles.
|
|
4479
|
+
*/
|
|
4480
|
+
|
|
4481
|
+
@layer components {
|
|
4482
|
+
.seeds-table-v2-container {
|
|
4483
|
+
overflow-x: auto;
|
|
4484
|
+
max-width: 100%;
|
|
4485
|
+
}
|
|
4486
|
+
|
|
4487
|
+
.seeds-table-v2 {
|
|
4488
|
+
width: 100%;
|
|
4489
|
+
border-collapse: collapse;
|
|
4490
|
+
color: var(--color-text-body);
|
|
4491
|
+
font-family: var(--font-family);
|
|
4492
|
+
}
|
|
4493
|
+
|
|
4494
|
+
.seeds-table-v2-caption {
|
|
4495
|
+
text-align: left;
|
|
4496
|
+
font-size: var(--font-size-400);
|
|
4497
|
+
line-height: var(--line-height-400);
|
|
4498
|
+
font-weight: var(--font-weight-semibold);
|
|
4499
|
+
padding: var(--space-300);
|
|
4500
|
+
margin-top: var(--space-200);
|
|
4501
|
+
}
|
|
4502
|
+
|
|
4503
|
+
.seeds-table-v2-caption-hidden {
|
|
4504
|
+
position: absolute;
|
|
4505
|
+
width: 1px;
|
|
4506
|
+
height: 1px;
|
|
4507
|
+
padding: 0;
|
|
4508
|
+
margin: -1px;
|
|
4509
|
+
overflow: hidden;
|
|
4510
|
+
clip: rect(0, 0, 0, 0);
|
|
4511
|
+
border: 0;
|
|
4512
|
+
}
|
|
4513
|
+
|
|
4514
|
+
.seeds-table-v2-header {
|
|
4515
|
+
vertical-align: bottom;
|
|
4516
|
+
border-bottom: 1px solid var(--color-container-border-base);
|
|
4517
|
+
}
|
|
4518
|
+
|
|
4519
|
+
.seeds-table-v2-row {
|
|
4520
|
+
border-bottom: 1px solid var(--color-container-border-base);
|
|
4521
|
+
}
|
|
4522
|
+
|
|
4523
|
+
.seeds-table-v2-header-cell {
|
|
4524
|
+
font-size: var(--font-size-100);
|
|
4525
|
+
line-height: var(--line-height-100);
|
|
4526
|
+
font-weight: var(--font-weight-semibold);
|
|
4527
|
+
padding: var(--space-300);
|
|
4528
|
+
text-align: left;
|
|
4529
|
+
min-width: 0;
|
|
4530
|
+
}
|
|
4531
|
+
|
|
4532
|
+
.seeds-table-v2-cell {
|
|
4533
|
+
font-size: var(--font-size-200);
|
|
4534
|
+
line-height: var(--line-height-200);
|
|
4535
|
+
font-weight: var(--font-weight-normal);
|
|
4536
|
+
padding: var(--space-300);
|
|
4537
|
+
text-align: left;
|
|
4538
|
+
}
|
|
4539
|
+
}
|
|
4540
|
+
|
|
4294
4541
|
/* --- seeds-react-tabs --- */
|
|
4295
4542
|
/**
|
|
4296
4543
|
* Seeds Tabs component classes
|
|
@@ -4500,6 +4747,7 @@
|
|
|
4500
4747
|
line-height: var(--line-height-200);
|
|
4501
4748
|
}
|
|
4502
4749
|
}
|
|
4750
|
+
|
|
4503
4751
|
/* --- seeds-react-textarea --- */
|
|
4504
4752
|
/**
|
|
4505
4753
|
* Seeds Textarea component classes
|
|
@@ -4545,9 +4793,9 @@
|
|
|
4545
4793
|
}
|
|
4546
4794
|
|
|
4547
4795
|
.seeds-textarea-input:focus {
|
|
4548
|
-
box-shadow:
|
|
4549
|
-
0 0 0
|
|
4550
|
-
|
|
4796
|
+
box-shadow: 0 0 0 1px var(--color-button-primary-bg-base),
|
|
4797
|
+
0 0 0 4px
|
|
4798
|
+
color-mix(in srgb, var(--color-button-primary-bg-base), transparent 70%);
|
|
4551
4799
|
outline: none;
|
|
4552
4800
|
}
|
|
4553
4801
|
|
|
@@ -4624,8 +4872,7 @@
|
|
|
4624
4872
|
}
|
|
4625
4873
|
|
|
4626
4874
|
.seeds-token:focus {
|
|
4627
|
-
box-shadow:
|
|
4628
|
-
0 0 0 1px var(--color-button-primary-bg-base),
|
|
4875
|
+
box-shadow: 0 0 0 1px var(--color-button-primary-bg-base),
|
|
4629
4876
|
0 0px 0px 4px
|
|
4630
4877
|
color-mix(in srgb, var(--color-button-primary-bg-base), transparent 70%);
|
|
4631
4878
|
outline: none;
|
|
@@ -4658,7 +4905,11 @@
|
|
|
4658
4905
|
cursor: pointer;
|
|
4659
4906
|
box-shadow: var(--shadow-low);
|
|
4660
4907
|
border: 1px solid
|
|
4661
|
-
color-mix(
|
|
4908
|
+
color-mix(
|
|
4909
|
+
in srgb,
|
|
4910
|
+
var(--color-container-border-decorative-blue),
|
|
4911
|
+
black 20%
|
|
4912
|
+
);
|
|
4662
4913
|
}
|
|
4663
4914
|
|
|
4664
4915
|
/* disabled */
|
|
@@ -4729,7 +4980,11 @@
|
|
|
4729
4980
|
.lights-out .seeds-token-blue:hover,
|
|
4730
4981
|
.lights-out .seeds-token-blue:active {
|
|
4731
4982
|
border: 1px solid
|
|
4732
|
-
color-mix(
|
|
4983
|
+
color-mix(
|
|
4984
|
+
in srgb,
|
|
4985
|
+
var(--color-container-border-decorative-blue),
|
|
4986
|
+
white 20%
|
|
4987
|
+
);
|
|
4733
4988
|
}
|
|
4734
4989
|
|
|
4735
4990
|
[data-theme="dark"] .seeds-token-invalid:hover,
|
|
@@ -4959,14 +5214,9 @@
|
|
|
4959
5214
|
}
|
|
4960
5215
|
|
|
4961
5216
|
.seeds-tree-combobox-input-group:focus-within {
|
|
4962
|
-
box-shadow:
|
|
4963
|
-
0 0 0 1px var(--color-button-primary-bg-base),
|
|
5217
|
+
box-shadow: 0 0 0 1px var(--color-button-primary-bg-base),
|
|
4964
5218
|
0 0px 0px 4px
|
|
4965
|
-
color-mix(
|
|
4966
|
-
in srgb,
|
|
4967
|
-
var(--color-button-primary-bg-base),
|
|
4968
|
-
transparent 70%
|
|
4969
|
-
);
|
|
5219
|
+
color-mix(in srgb, var(--color-button-primary-bg-base), transparent 70%);
|
|
4970
5220
|
outline: none;
|
|
4971
5221
|
}
|
|
4972
5222
|
|
|
@@ -5023,8 +5273,7 @@
|
|
|
5023
5273
|
cursor: default;
|
|
5024
5274
|
outline: none;
|
|
5025
5275
|
user-select: none;
|
|
5026
|
-
transition:
|
|
5027
|
-
border-color var(--duration-fast) var(--ease-ease_in),
|
|
5276
|
+
transition: border-color var(--duration-fast) var(--ease-ease_in),
|
|
5028
5277
|
box-shadow var(--duration-fast) var(--ease-ease_in);
|
|
5029
5278
|
}
|
|
5030
5279
|
|
|
@@ -5033,14 +5282,9 @@
|
|
|
5033
5282
|
}
|
|
5034
5283
|
|
|
5035
5284
|
.seeds-tree-select-trigger:focus-visible {
|
|
5036
|
-
box-shadow:
|
|
5037
|
-
0 0 0 1px var(--color-button-primary-bg-base),
|
|
5285
|
+
box-shadow: 0 0 0 1px var(--color-button-primary-bg-base),
|
|
5038
5286
|
0 0px 0px 4px
|
|
5039
|
-
color-mix(
|
|
5040
|
-
in srgb,
|
|
5041
|
-
var(--color-button-primary-bg-base),
|
|
5042
|
-
transparent 70%
|
|
5043
|
-
);
|
|
5287
|
+
color-mix(in srgb, var(--color-button-primary-bg-base), transparent 70%);
|
|
5044
5288
|
outline: none;
|
|
5045
5289
|
}
|
|
5046
5290
|
|