PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.0.1
Jetpack – WP Security, Backup, Speed, & Growth v16.0.1
16.0.1 16.1-a.1 16.0 16.0-beta 16.0-a.7 16.0-a.5 15.9.1 16.0-a.3 16.0-a.1 15.9 15.9-beta 15.9-a.7 15.9-a.5 15.9-a.3 15.9-a.1 15.8 15.8-beta 15.8-a.7 15.8-a.5 5.2.5 5.3.4 5.4.4 5.5.5 5.6.5 5.7.5 5.8.4 5.9.4 6.0.4 6.1 6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.2 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.3 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.4 6.4.1 6.4.2 6.4.3 6.4.4 6.4.5 6.4.6 6.5 6.5.1 6.5.2 6.5.3 6.5.4 6.6 6.6.1 6.6.2 6.6.3 6.6.4 6.6.5 6.7 6.7.1 6.7.2 6.7.3 6.7.4 6.8 6.8.1 6.8.2 6.8.3 6.8.4 6.8.5 6.9 6.9.1 6.9.2 6.9.3 6.9.4 7.0 7.0.1 7.0.2 7.0.3 7.0.4 7.0.5 7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2 7.2.1 7.2.1.1 7.2.2 7.2.3 7.2.4 7.2.5 7.3 7.3.0.1 7.3.1 7.3.1.1 7.3.2 7.3.3 7.3.4 7.3.5 7.4 7.4.1 7.4.2 7.4.3 7.4.4 7.4.5 7.5 7.5.0.1 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 7.5.6 7.5.7 7.6 7.6.1 7.6.2 7.6.3 7.6.4 7.7 7.7.1 7.7.2 7.7.3 7.7.4 7.7.5 7.7.6 7.8 7.8.1 7.8.2 7.8.3 7.8.4 7.9 7.9.1 7.9.2 7.9.3 7.9.4 8.0 8.0.1 8.0.2 8.0.3 8.1 8.1.1 8.1.2 8.1.3 8.1.4 8.2 8.2.0.1 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.2.6 8.3 8.3.1 8.3.2 8.3.3 8.4 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.5 8.5.1 8.5.2 8.5.3 8.6 8.6.1 8.6.2 8.6.3 8.6.4 8.7 8.7.0.1 8.7.1 8.7.2 8.7.3 8.7.4 8.8 8.8.1 8.8.2 8.8.3 8.8.4 8.8.5 8.9 8.9.1 8.9.2 8.9.3 8.9.4 9.0 9.0.1 9.0.2 9.0.3 9.0.4 9.0.5 9.1 9.1.1 9.1.2 9.1.3 9.2 9.2.1 9.2.2 9.2.3 9.2.4 9.3 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 9.4 9.4.1 9.4.2 9.4.3 9.4.4 9.5 9.5.1 9.5.2 9.5.3 9.5.4 9.5.5 9.6 9.6.1 9.6.2 9.6.3 9.6.4 9.7 9.7.1 9.7.2 15.7-beta.2 9.7.3 15.7.1 9.8 15.8-a.1 9.8.1 15.8-a.3 9.8.2 2.0.9 9.8.3 2.1.7 9.9 2.2.10 9.9.1 2.3.10 9.9.2 2.4.7 9.9.3 2.5.5 2.6.6 2.7.5 2.8.5 2.9.6 3.0.6 3.1.5 3.2.5 3.3.6 3.4.6 3.5.6 3.6.4 3.7.5 3.8.5 3.9.10 4.0.7 4.1.4 4.2.5 4.3.5 4.4.5 4.5.3 4.6.3 4.7.4 4.8.5 4.9.3 5.0.3 5.1.4 trunk 10.0 10.0.1 10.0.2 10.1 10.1.1 10.1.2 10.2 10.2.1 10.2.2 10.2.3 10.3 10.3.1 10.3.2 10.4 10.4.1 10.4.2 10.5 10.5.1 10.5.2 10.5.3 10.6 10.6.1 10.6.2 10.7 10.7.1 10.7.2 10.8 10.8.1 10.8.2 10.9 10.9.1 10.9.2 10.9.3 11.0 11.0.1 11.0.2 11.1 11.1.1 11.1.2 11.1.3 11.1.4 11.2 11.2.1 11.2.2 11.3 11.3.1 11.3.2 11.3.3 11.3.4 11.4 11.4.1 11.4.2 11.5 11.5.1 11.5.2 11.5.3 11.6 11.6.1 11.6.2 11.7 11.7.1 11.7.2 11.7.3 11.8 11.8.3 11.8.4 11.8.5 11.8.6 11.9 11.9.1 11.9.2 11.9.3 12.0 12.0.1 12.0.2 12.1 12.1.1 12.1.2 12.2 12.2.1 12.2.2 12.3 12.3.1 12.4 12.4.1 12.5 12.5.1 12.6 12.6.1 12.6.2 12.6.3 12.7 12.7.1 12.7.2 12.8 12.8.1 12.8.2 12.9 12.9.1 12.9.2 12.9.3 12.9.4 13.0 13.0.1 13.1 13.1.1 13.1.2 13.1.3 13.1.4 13.2 13.2.1 13.2.2 13.2.3 13.3 13.3.1 13.3.2 13.4 13.4.1 13.4.2 13.4.3 13.4.4 13.5 13.5.1 13.6 13.6.1 13.7 13.7.1 13.8 13.8.1 13.8.2 13.9 13.9.1 14.0 14.1 14.2 14.2.1 14.3 14.4 14.4.1 14.5 14.6 14.7 14.8 14.9 14.9.1 15.0 15.0.1 15.0.2 15.1 15.1.1 15.2 15.3 15.3.1 15.4 15.5 15.6 15.7 15.7-a.1 15.7-a.3 15.7-a.5 15.7-a.7 15.7-beta
jetpack / _inc / content-guidelines-ai / style.scss
jetpack / _inc / content-guidelines-ai Last commit date
components 2 days ago hooks 2 days ago lib 2 days ago constants.js 2 days ago store.js 2 days ago style.scss 2 days ago
style.scss
277 lines
1 // Shared color tokens for AI suggestion UI.
2 // Jetpack ThemeProvider doesn't wrap this page,
3 // so we define fallback values here.
4 $cg-green: #069e08;
5 $cg-green-light: rgba(0, 135, 0, 0.08);
6 $cg-diff-added: #d4edda;
7 $cg-diff-removed: #f8d7da;
8
9 .jetpack-content-guidelines-ai__header-container {
10 display: inline-flex;
11 }
12
13 .jetpack-content-guidelines-ai__suggest-all-button .jetpack-logo {
14 width: 18px;
15 height: 18px;
16 }
17
18 // Empty state banner.
19 .jetpack-content-guidelines-ai__banner {
20 position: relative;
21 background: #003010;
22 border-radius: 8px;
23 padding: 32px;
24 overflow: hidden;
25 min-height: 220px;
26 display: flex;
27 align-items: flex-start;
28 width: min(680px, 100%);
29 box-sizing: border-box;
30 margin: 0 auto 24px;
31 }
32
33 .jetpack-content-guidelines-ai__banner-content {
34 position: relative;
35 z-index: 1;
36 display: flex;
37 flex-direction: column;
38 max-width: 520px;
39
40 h2 {
41 color: #daffdc;
42 font-size: 32px;
43 line-height: 40px;
44 font-weight: 500;
45 margin: 0 0 12px;
46 }
47
48 p {
49 color: #daffdc;
50 font-size: 13px;
51 line-height: 20px;
52 margin: 0 0 64px;
53 }
54 }
55
56 .jetpack-content-guidelines-ai__banner-actions {
57 display: flex;
58 gap: 8px;
59 }
60
61 .jetpack-content-guidelines-ai__banner-cta {
62 background-color: #48ff50 !important;
63 color: #003010 !important;
64 border-color: #48ff50 !important;
65
66 &:hover {
67 background-color: #3de046 !important;
68 border-color: #3de046 !important;
69 }
70 }
71
72 .jetpack-content-guidelines-ai__banner-close-text {
73 color: #48ff50 !important;
74
75 &:hover {
76 color: #3de046 !important;
77 }
78 }
79
80 .jetpack-content-guidelines-ai__banner-close {
81 position: absolute;
82 inset-block-start: 8px;
83 inset-inline-end: 8px;
84 z-index: 1;
85 color: #fff !important;
86
87 &:hover {
88 color: #daffdc !important;
89 }
90 }
91
92 .jetpack-content-guidelines-ai__banner-orb {
93 position: absolute;
94 border-radius: 50%;
95 pointer-events: none;
96 width: 180px;
97 height: 180px;
98 background: linear-gradient(to right, #04c, #48ff50);
99 // Shared by both orbs so the top glow and the bottom sphere line up
100 // on the same vertical axis.
101 inset-inline-end: 56px;
102
103 &--top {
104 inset-block-start: -96px;
105 filter: blur(25px);
106 }
107
108 &--bottom {
109 inset-block-end: -96px;
110 }
111 }
112
113 // Badge in accordion headers.
114 // Hide badge when the accordion is expanded — the Accept/Dismiss
115 // buttons inside already communicate the suggestion state. The badge is
116 // injected inside the CollapsibleCard trigger, which carries aria-expanded.
117 [aria-expanded="true"]="true""] .jetpack-content-guidelines-ai__badge-container {
118 display: none;
119 }
120
121 // Jetpack CSS custom properties are normally set by
122 // ThemeProvider, which doesn't wrap this page. Define
123 // the tokens our Badge component needs as fallbacks.
124 .jetpack-content-guidelines-ai__badge-container {
125 --jp-green-5: #d0e6b8;
126 --jp-green-50: #008710;
127
128 display: inline-flex;
129 align-items: center;
130 }
131
132 .jetpack-content-guidelines-ai__badge--loading .components-spinner {
133 margin: 0;
134 width: 16px;
135 height: 16px;
136 }
137
138 // Suggestion preview inside accordion.
139 // Match the VStack spacing={4} (16px gap) used by the Gutenberg form.
140 .jetpack-content-guidelines-ai__suggestion {
141 display: flex;
142 flex-direction: column;
143 gap: 16px;
144 }
145
146 // Word-level diff display.
147 // Styled to match the Gutenberg textarea — green border indicates
148 // a suggestion is active. Clicking anywhere accepts the suggestion.
149 .jetpack-content-guidelines-ai__diff {
150 padding: 9px 11px;
151 border: 1px solid var(--jp-green-40, $cg-green);
152 border-radius: 2px;
153 background: #fff;
154 font-size: 13px;
155 line-height: 20px;
156 white-space: pre-wrap;
157 overflow-wrap: break-word;
158 overflow-y: auto;
159 resize: vertical;
160 cursor: text;
161 box-sizing: border-box;
162 }
163
164 .jetpack-content-guidelines-ai__diff-added {
165 background: $cg-diff-added;
166 text-decoration: none;
167 }
168
169 .jetpack-content-guidelines-ai__diff-removed {
170 background: $cg-diff-removed;
171 text-decoration: line-through;
172 }
173
174 .jetpack-content-guidelines-ai__suggestion-actions {
175 display: flex;
176 gap: 8px;
177 }
178
179 // Green shimmer overlay on the textarea during AI generation.
180 // We make the textarea wrapper positioned so the ::after overlay works.
181 .is-jetpack-loading .components-textarea-control {
182 position: relative;
183
184 &::after {
185 content: "";
186 position: absolute;
187 inset: 0;
188 pointer-events: none;
189 border-radius: 4px;
190 background: linear-gradient(90deg, transparent 0%, $cg-green-light 50%, transparent 100%);
191 background-size: 200% 100%;
192 animation: jetpack-cg-shimmer 1.5s infinite;
193 z-index: 1;
194 }
195 }
196
197 .is-jetpack-loading textarea {
198 border-color: var(--jp-green-40, $cg-green) !important;
199 pointer-events: none;
200 }
201
202 @keyframes jetpack-cg-shimmer {
203
204 0% {
205 background-position: -200% 0;
206 }
207
208 100% {
209 background-position: 200% 0;
210 }
211 }
212
213 // Hide Gutenberg's DataForm and Save/Clear when a suggestion is active.
214 // Also hide the per-section generate button since Accept/Dismiss replaces it.
215 .has-jetpack-suggestion:not(.block-guideline-modal) > :first-child > :not(.jetpack-content-guidelines-ai__actions-container) {
216 display: none;
217 }
218
219 // Injected containers should not affect layout when their content is empty.
220 // React root inside means :empty won't work,
221 // so we use display:contents when not active.
222 .jetpack-content-guidelines-ai__actions-container,
223 .jetpack-content-guidelines-ai__section-button-container {
224 display: contents;
225 }
226
227 // Per-section generate button.
228 .jetpack-content-guidelines-ai__section-generate-button {
229 display: inline-flex;
230 }
231
232 // The per-section Generate/Improve button is injected as a third control into
233 // the form's Save/Clear row — a Gutenberg HStack laid out for two buttons and
234 // set not to wrap. On narrow viewports the extra button overflows and, because
235 // flex items shrink by default, the button labels overlap. Let that row wrap
236 // onto multiple lines instead. Scoped through the injected container (a direct
237 // child of the HStack) so only the rows we add a button to are affected.
238 .guidelines__list-item form :has(> .jetpack-content-guidelines-ai__section-button-container) {
239 flex-wrap: wrap;
240 }
241
242 // Upgrade notice.
243 .jetpack-content-guidelines-ai__upgrade-notice-container {
244 display: contents;
245 }
246
247 .jetpack-content-guidelines-ai__upgrade-notice {
248 width: min(680px, 100%);
249 margin: 0 auto 16px;
250 box-sizing: border-box;
251 }
252
253 // Block guideline modal — hide only the textarea input
254 // when suggestion is active, keeping the label visible.
255 .block-guideline-modal.has-jetpack-suggestion .components-textarea-control__input {
256 display: none;
257 }
258
259 // Block modal — shimmer only on the textarea,
260 // not the label wrapper. Suppress the ::after overlay
261 // and apply shimmer as a background on the textarea.
262 .block-guideline-modal.is-jetpack-loading .components-textarea-control::after {
263 content: none;
264 }
265
266 .block-guideline-modal.is-jetpack-loading .components-textarea-control__input {
267 background: linear-gradient(90deg, transparent 0%, $cg-green-light 50%, transparent 100%);
268 background-size: 200% 100%;
269 animation: jetpack-cg-shimmer 1.5s infinite;
270 }
271
272 // Block modal injected containers — collapse when empty.
273 .jetpack-content-guidelines-ai__block-actions-container,
274 .jetpack-content-guidelines-ai__block-suggestion-buttons-container {
275 display: contents;
276 }
277