@consilioweb/payload-seo-analyzer 1.14.0 → 1.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/client.cjs CHANGED
@@ -16982,6 +16982,92 @@ function CoreWebVitalsPanel({ locale }) {
16982
16982
  );
16983
16983
  }
16984
16984
  var C5 = {
16985
+ text: "var(--theme-text, #1a1a1a)",
16986
+ sub: "var(--theme-elevation-600, #6b7280)",
16987
+ card: "var(--theme-elevation-50, #f9fafb)",
16988
+ border: "var(--theme-elevation-200, #e5e7eb)",
16989
+ green: "#22c55e",
16990
+ amber: "#f59e0b"
16991
+ };
16992
+ var S2 = {
16993
+ fr: {
16994
+ title: "Sant\xE9 du module SEO",
16995
+ subtitle: "Configuration et \xE9tat des int\xE9grations / jobs (lecture seule).",
16996
+ ok: "Tout est configur\xE9 \u2713",
16997
+ ai: "IA (Claude)",
16998
+ gsc: "Search Console",
16999
+ psi: "PageSpeed",
17000
+ alerts: "Alertes",
17001
+ rank: "Dernier relev\xE9 positions",
17002
+ none: "jamais",
17003
+ warnings: "\xC0 corriger"
17004
+ },
17005
+ en: {
17006
+ title: "SEO module health",
17007
+ subtitle: "Integration & background-job status (read-only).",
17008
+ ok: "All configured \u2713",
17009
+ ai: "AI (Claude)",
17010
+ gsc: "Search Console",
17011
+ psi: "PageSpeed",
17012
+ alerts: "Alerts",
17013
+ rank: "Last rank snapshot",
17014
+ none: "never",
17015
+ warnings: "To fix"
17016
+ }
17017
+ };
17018
+ function HealthPanel({ locale }) {
17019
+ const s = S2[locale] ?? S2.fr;
17020
+ const [h, setH] = React4.useState(null);
17021
+ const load = React4.useCallback(async () => {
17022
+ try {
17023
+ const res = await fetch("/api/seo-plugin/health", { credentials: "include", cache: "no-store" });
17024
+ if (res.ok) setH(await res.json());
17025
+ } catch {
17026
+ }
17027
+ }, []);
17028
+ React4.useEffect(() => {
17029
+ void load();
17030
+ }, [load]);
17031
+ if (!h) return null;
17032
+ const card = { padding: 16, borderRadius: 12, border: `1px solid ${C5.border}`, backgroundColor: C5.card, marginBottom: 20 };
17033
+ const dot = (on) => ({
17034
+ display: "inline-block",
17035
+ width: 8,
17036
+ height: 8,
17037
+ borderRadius: 999,
17038
+ marginRight: 6,
17039
+ backgroundColor: on ? C5.green : C5.sub
17040
+ });
17041
+ const chip = (label, on) => /* @__PURE__ */ jsxRuntime.jsxs("span", { style: { fontSize: 12, color: C5.text, marginRight: 14, whiteSpace: "nowrap" }, children: [
17042
+ /* @__PURE__ */ jsxRuntime.jsx("span", { style: dot(on) }),
17043
+ label
17044
+ ] });
17045
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { style: card, children: [
17046
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", justifyContent: "space-between", alignItems: "center", gap: 8, flexWrap: "wrap" }, children: [
17047
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
17048
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 16, fontWeight: 800, color: C5.text }, children: s.title }),
17049
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 12, color: C5.sub, marginTop: 2 }, children: s.subtitle })
17050
+ ] }),
17051
+ /* @__PURE__ */ jsxRuntime.jsx("span", { style: { fontSize: 12, fontWeight: 700, color: h.ok ? C5.green : C5.amber }, children: h.ok ? s.ok : `${h.warnings.length} \u26A0` })
17052
+ ] }),
17053
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { marginTop: 12, display: "flex", flexWrap: "wrap", rowGap: 6 }, children: [
17054
+ chip(s.ai, h.config.aiKey),
17055
+ chip(s.gsc, h.config.gscConfigured && h.runtime.gscConnected),
17056
+ chip(s.psi, h.config.pageSpeedKey),
17057
+ chip(s.alerts, h.config.alertWebhook || h.config.alertEmail),
17058
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { style: { fontSize: 12, color: C5.sub, whiteSpace: "nowrap" }, children: [
17059
+ s.rank,
17060
+ ": ",
17061
+ h.runtime.lastRankSnapshot ? new Date(h.runtime.lastRankSnapshot).toLocaleDateString(locale) : s.none
17062
+ ] })
17063
+ ] }),
17064
+ h.warnings.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { marginTop: 12 }, children: [
17065
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 11, fontWeight: 700, color: C5.amber, textTransform: "uppercase", marginBottom: 4 }, children: s.warnings }),
17066
+ /* @__PURE__ */ jsxRuntime.jsx("ul", { style: { margin: 0, paddingLeft: 18, fontSize: 12, color: C5.sub, lineHeight: 1.6 }, children: h.warnings.map((w, i) => /* @__PURE__ */ jsxRuntime.jsx("li", { children: w }, i)) })
17067
+ ] })
17068
+ ] });
17069
+ }
17070
+ var C6 = {
16985
17071
  text: "var(--theme-text, #1a1a1a)",
16986
17072
  sub: "var(--theme-elevation-600, #6b7280)",
16987
17073
  card: "var(--theme-elevation-50, #f9fafb)",
@@ -16991,7 +17077,7 @@ var C5 = {
16991
17077
  red: "#ef4444",
16992
17078
  blue: "#3b82f6"
16993
17079
  };
16994
- var S2 = {
17080
+ var S3 = {
16995
17081
  fr: {
16996
17082
  title: "Google Search Console",
16997
17083
  subtitle: "Connexion OAuth pour importer automatiquement clics, impressions et positions r\xE9elles.",
@@ -17038,7 +17124,7 @@ var S2 = {
17038
17124
  }
17039
17125
  };
17040
17126
  function GscPanel({ locale }) {
17041
- const s = S2[locale] ?? S2.fr;
17127
+ const s = S3[locale] ?? S3.fr;
17042
17128
  const [status, setStatus] = React4.useState(null);
17043
17129
  const [busy, setBusy] = React4.useState(false);
17044
17130
  const [error, setError] = React4.useState(null);
@@ -17105,9 +17191,9 @@ function GscPanel({ locale }) {
17105
17191
  const btn = (primary) => ({
17106
17192
  padding: "8px 12px",
17107
17193
  borderRadius: 8,
17108
- border: `1px solid ${primary ? C5.blue : C5.border}`,
17109
- backgroundColor: primary ? C5.blue : C5.bg,
17110
- color: primary ? "#fff" : C5.text,
17194
+ border: `1px solid ${primary ? C6.blue : C6.border}`,
17195
+ backgroundColor: primary ? C6.blue : C6.bg,
17196
+ color: primary ? "#fff" : C6.text,
17111
17197
  fontSize: 12,
17112
17198
  fontWeight: 700,
17113
17199
  cursor: "pointer",
@@ -17116,21 +17202,21 @@ function GscPanel({ locale }) {
17116
17202
  const card = {
17117
17203
  padding: 16,
17118
17204
  borderRadius: 12,
17119
- border: `1px solid ${C5.border}`,
17120
- backgroundColor: C5.card,
17205
+ border: `1px solid ${C6.border}`,
17206
+ backgroundColor: C6.card,
17121
17207
  marginBottom: 20
17122
17208
  };
17123
17209
  if (!status) {
17124
17210
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { style: card, children: [
17125
- /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 16, fontWeight: 800, color: C5.text }, children: s.title }),
17126
- /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 12, color: C5.sub, marginTop: 6 }, children: "\u2026" })
17211
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 16, fontWeight: 800, color: C6.text }, children: s.title }),
17212
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 12, color: C6.sub, marginTop: 6 }, children: "\u2026" })
17127
17213
  ] });
17128
17214
  }
17129
17215
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { style: card, children: [
17130
17216
  /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", alignItems: "center", justifyContent: "space-between", gap: 8, flexWrap: "wrap" }, children: [
17131
17217
  /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
17132
- /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 16, fontWeight: 800, color: C5.text }, children: s.title }),
17133
- /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 12, color: C5.sub, marginTop: 2 }, children: s.subtitle })
17218
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 16, fontWeight: 800, color: C6.text }, children: s.title }),
17219
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 12, color: C6.sub, marginTop: 2 }, children: s.subtitle })
17134
17220
  ] }),
17135
17221
  /* @__PURE__ */ jsxRuntime.jsx(
17136
17222
  "span",
@@ -17141,14 +17227,14 @@ function GscPanel({ locale }) {
17141
17227
  padding: "4px 10px",
17142
17228
  borderRadius: 999,
17143
17229
  color: "#fff",
17144
- backgroundColor: status.connected ? C5.green : C5.sub
17230
+ backgroundColor: status.connected ? C6.green : C6.sub
17145
17231
  },
17146
17232
  children: status.connected ? "\u25CF " + s.connectedAs : "\u25CB"
17147
17233
  }
17148
17234
  )
17149
17235
  ] }),
17150
- error && /* @__PURE__ */ jsxRuntime.jsx("div", { style: { color: C5.red, fontSize: 13, fontWeight: 600, marginTop: 10 }, children: error }),
17151
- !status.configured && /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { marginTop: 12, fontSize: 13, color: C5.sub, lineHeight: 1.5 }, children: [
17236
+ error && /* @__PURE__ */ jsxRuntime.jsx("div", { style: { color: C6.red, fontSize: 13, fontWeight: 600, marginTop: 10 }, children: error }),
17237
+ !status.configured && /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { marginTop: 12, fontSize: 13, color: C6.sub, lineHeight: 1.5 }, children: [
17152
17238
  s.notConfigured,
17153
17239
  status.redirectUri && /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { marginTop: 8 }, children: [
17154
17240
  /* @__PURE__ */ jsxRuntime.jsx("span", { style: { fontWeight: 700 }, children: s.redirectHint }),
@@ -17159,10 +17245,10 @@ function GscPanel({ locale }) {
17159
17245
  status.configured && !status.connected && /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { marginTop: 12 }, children: [
17160
17246
  /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", onClick: connect, disabled: busy, style: btn(true), children: s.connect }),
17161
17247
  /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", onClick: () => void loadStatus(), disabled: busy, style: { ...btn(false), marginLeft: 8 }, children: s.refreshStatus }),
17162
- /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 11, color: C5.sub, marginTop: 8 }, children: s.connectHint })
17248
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 11, color: C6.sub, marginTop: 8 }, children: s.connectHint })
17163
17249
  ] }),
17164
17250
  status.configured && status.connected && /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { marginTop: 12 }, children: [
17165
- /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { fontSize: 12, color: C5.sub, marginBottom: 10 }, children: [
17251
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { fontSize: 12, color: C6.sub, marginBottom: 10 }, children: [
17166
17252
  s.connectedAs,
17167
17253
  status.connectedEmail ? ` \xB7 ${status.connectedEmail}` : "",
17168
17254
  status.propertyUrl ? ` \xB7 ${status.propertyUrl}` : ""
@@ -17172,17 +17258,17 @@ function GscPanel({ locale }) {
17172
17258
  /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", onClick: () => void fetchData("page"), disabled: dataLoading, style: btn(dimension === "page"), children: s.byPage }),
17173
17259
  /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", onClick: disconnect, disabled: busy, style: btn(false), children: s.disconnect })
17174
17260
  ] }),
17175
- dataLoading && /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 13, color: C5.sub }, children: s.fetching }),
17176
- rows && rows.length === 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 13, color: C5.sub }, children: s.noData }),
17261
+ dataLoading && /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 13, color: C6.sub }, children: s.fetching }),
17262
+ rows && rows.length === 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 13, color: C6.sub }, children: s.noData }),
17177
17263
  rows && rows.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { style: { overflowX: "auto" }, children: /* @__PURE__ */ jsxRuntime.jsxs("table", { style: { width: "100%", borderCollapse: "collapse", fontSize: 12 }, children: [
17178
- /* @__PURE__ */ jsxRuntime.jsx("thead", { children: /* @__PURE__ */ jsxRuntime.jsxs("tr", { style: { textAlign: "left", color: C5.sub }, children: [
17264
+ /* @__PURE__ */ jsxRuntime.jsx("thead", { children: /* @__PURE__ */ jsxRuntime.jsxs("tr", { style: { textAlign: "left", color: C6.sub }, children: [
17179
17265
  /* @__PURE__ */ jsxRuntime.jsx("th", { style: { padding: "6px 8px" }, children: dimension === "query" ? s.query : s.page }),
17180
17266
  /* @__PURE__ */ jsxRuntime.jsx("th", { style: { padding: "6px 8px", textAlign: "right" }, children: s.clicks }),
17181
17267
  /* @__PURE__ */ jsxRuntime.jsx("th", { style: { padding: "6px 8px", textAlign: "right" }, children: s.impressions }),
17182
17268
  /* @__PURE__ */ jsxRuntime.jsx("th", { style: { padding: "6px 8px", textAlign: "right" }, children: s.ctr }),
17183
17269
  /* @__PURE__ */ jsxRuntime.jsx("th", { style: { padding: "6px 8px", textAlign: "right" }, children: s.position })
17184
17270
  ] }) }),
17185
- /* @__PURE__ */ jsxRuntime.jsx("tbody", { children: rows.map((r, i) => /* @__PURE__ */ jsxRuntime.jsxs("tr", { style: { borderTop: `1px solid ${C5.border}`, color: C5.text }, children: [
17271
+ /* @__PURE__ */ jsxRuntime.jsx("tbody", { children: rows.map((r, i) => /* @__PURE__ */ jsxRuntime.jsxs("tr", { style: { borderTop: `1px solid ${C6.border}`, color: C6.text }, children: [
17186
17272
  /* @__PURE__ */ jsxRuntime.jsx("td", { style: { padding: "6px 8px", maxWidth: 320, overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" }, children: r.keys?.[0] || "\u2014" }),
17187
17273
  /* @__PURE__ */ jsxRuntime.jsx("td", { style: { padding: "6px 8px", textAlign: "right", fontWeight: 700 }, children: r.clicks }),
17188
17274
  /* @__PURE__ */ jsxRuntime.jsx("td", { style: { padding: "6px 8px", textAlign: "right" }, children: r.impressions }),
@@ -17196,7 +17282,7 @@ function GscPanel({ locale }) {
17196
17282
  ] })
17197
17283
  ] });
17198
17284
  }
17199
- var C6 = {
17285
+ var C7 = {
17200
17286
  text: "var(--theme-text, #1a1a1a)",
17201
17287
  sub: "var(--theme-elevation-600, #6b7280)",
17202
17288
  card: "var(--theme-elevation-50, #f9fafb)",
@@ -17205,7 +17291,7 @@ var C6 = {
17205
17291
  red: "#ef4444",
17206
17292
  blue: "#3b82f6"
17207
17293
  };
17208
- var S3 = {
17294
+ var S4 = {
17209
17295
  fr: {
17210
17296
  title: "Suivi de positions (rank tracking)",
17211
17297
  subtitle: "Historique quotidien des positions Google (via Search Console) et mouvements dans le temps.",
@@ -17242,7 +17328,7 @@ var S3 = {
17242
17328
  }
17243
17329
  };
17244
17330
  function RankTrackingPanel({ locale }) {
17245
- const s = S3[locale] ?? S3.fr;
17331
+ const s = S4[locale] ?? S4.fr;
17246
17332
  const [movers, setMovers] = React4.useState(null);
17247
17333
  const [lastSnapshot, setLastSnapshot] = React4.useState(null);
17248
17334
  const [loading, setLoading] = React4.useState(true);
@@ -17299,15 +17385,15 @@ function RankTrackingPanel({ locale }) {
17299
17385
  const card = {
17300
17386
  padding: 16,
17301
17387
  borderRadius: 12,
17302
- border: `1px solid ${C6.border}`,
17303
- backgroundColor: C6.card,
17388
+ border: `1px solid ${C7.border}`,
17389
+ backgroundColor: C7.card,
17304
17390
  marginBottom: 20
17305
17391
  };
17306
17392
  const btn = {
17307
17393
  padding: "8px 12px",
17308
17394
  borderRadius: 8,
17309
- border: `1px solid ${C6.blue}`,
17310
- backgroundColor: C6.blue,
17395
+ border: `1px solid ${C7.blue}`,
17396
+ backgroundColor: C7.blue,
17311
17397
  color: "#fff",
17312
17398
  fontSize: 12,
17313
17399
  fontWeight: 700,
@@ -17316,16 +17402,16 @@ function RankTrackingPanel({ locale }) {
17316
17402
  };
17317
17403
  const renderDelta = (m) => {
17318
17404
  if (m.previousPosition === null) {
17319
- return /* @__PURE__ */ jsxRuntime.jsx("span", { style: { color: C6.sub, fontSize: 11 }, children: s.newQ });
17405
+ return /* @__PURE__ */ jsxRuntime.jsx("span", { style: { color: C7.sub, fontSize: 11 }, children: s.newQ });
17320
17406
  }
17321
17407
  if (Math.abs(m.delta) < 0.1) {
17322
- return /* @__PURE__ */ jsxRuntime.jsxs("span", { style: { color: C6.sub, fontSize: 11 }, children: [
17408
+ return /* @__PURE__ */ jsxRuntime.jsxs("span", { style: { color: C7.sub, fontSize: 11 }, children: [
17323
17409
  "\u2014 ",
17324
17410
  s.stable
17325
17411
  ] });
17326
17412
  }
17327
17413
  const up = m.delta > 0;
17328
- return /* @__PURE__ */ jsxRuntime.jsxs("span", { style: { color: up ? C6.green : C6.red, fontWeight: 700, fontSize: 12 }, children: [
17414
+ return /* @__PURE__ */ jsxRuntime.jsxs("span", { style: { color: up ? C7.green : C7.red, fontWeight: 700, fontSize: 12 }, children: [
17329
17415
  up ? "\u25B2" : "\u25BC",
17330
17416
  " ",
17331
17417
  Math.abs(m.delta).toFixed(1)
@@ -17334,31 +17420,31 @@ function RankTrackingPanel({ locale }) {
17334
17420
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { style: card, children: [
17335
17421
  /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", alignItems: "center", justifyContent: "space-between", gap: 8, flexWrap: "wrap" }, children: [
17336
17422
  /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
17337
- /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 16, fontWeight: 800, color: C6.text }, children: s.title }),
17338
- /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 12, color: C6.sub, marginTop: 2 }, children: s.subtitle })
17423
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 16, fontWeight: 800, color: C7.text }, children: s.title }),
17424
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 12, color: C7.sub, marginTop: 2 }, children: s.subtitle })
17339
17425
  ] }),
17340
17426
  !notConnected && /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", onClick: snapshotNow, disabled: busy, style: btn, children: busy ? s.snapshotting : s.snapshot })
17341
17427
  ] }),
17342
- error && /* @__PURE__ */ jsxRuntime.jsx("div", { style: { color: C6.red, fontSize: 13, fontWeight: 600, marginTop: 10 }, children: error }),
17343
- notConnected && /* @__PURE__ */ jsxRuntime.jsx("div", { style: { marginTop: 12, fontSize: 13, color: C6.sub }, children: s.needGsc }),
17428
+ error && /* @__PURE__ */ jsxRuntime.jsx("div", { style: { color: C7.red, fontSize: 13, fontWeight: 600, marginTop: 10 }, children: error }),
17429
+ notConnected && /* @__PURE__ */ jsxRuntime.jsx("div", { style: { marginTop: 12, fontSize: 13, color: C7.sub }, children: s.needGsc }),
17344
17430
  !notConnected && /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { marginTop: 12 }, children: [
17345
- lastSnapshot && /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { fontSize: 11, color: C6.sub, marginBottom: 8 }, children: [
17431
+ lastSnapshot && /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { fontSize: 11, color: C7.sub, marginBottom: 8 }, children: [
17346
17432
  s.lastSnapshot,
17347
17433
  ": ",
17348
17434
  new Date(lastSnapshot).toLocaleString(locale),
17349
17435
  movers ? ` \xB7 ${movers.length} ${s.countLabel}` : ""
17350
17436
  ] }),
17351
- loading && !movers && /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 13, color: C6.sub }, children: "\u2026" }),
17352
- movers && movers.length === 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 13, color: C6.sub }, children: s.noData }),
17437
+ loading && !movers && /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 13, color: C7.sub }, children: "\u2026" }),
17438
+ movers && movers.length === 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 13, color: C7.sub }, children: s.noData }),
17353
17439
  movers && movers.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { style: { overflowX: "auto" }, children: /* @__PURE__ */ jsxRuntime.jsxs("table", { style: { width: "100%", borderCollapse: "collapse", fontSize: 12 }, children: [
17354
- /* @__PURE__ */ jsxRuntime.jsx("thead", { children: /* @__PURE__ */ jsxRuntime.jsxs("tr", { style: { textAlign: "left", color: C6.sub }, children: [
17440
+ /* @__PURE__ */ jsxRuntime.jsx("thead", { children: /* @__PURE__ */ jsxRuntime.jsxs("tr", { style: { textAlign: "left", color: C7.sub }, children: [
17355
17441
  /* @__PURE__ */ jsxRuntime.jsx("th", { style: { padding: "6px 8px" }, children: s.query }),
17356
17442
  /* @__PURE__ */ jsxRuntime.jsx("th", { style: { padding: "6px 8px", textAlign: "right" }, children: s.position }),
17357
17443
  /* @__PURE__ */ jsxRuntime.jsx("th", { style: { padding: "6px 8px", textAlign: "right" }, children: s.change }),
17358
17444
  /* @__PURE__ */ jsxRuntime.jsx("th", { style: { padding: "6px 8px", textAlign: "right" }, children: s.clicks }),
17359
17445
  /* @__PURE__ */ jsxRuntime.jsx("th", { style: { padding: "6px 8px", textAlign: "right" }, children: s.impressions })
17360
17446
  ] }) }),
17361
- /* @__PURE__ */ jsxRuntime.jsx("tbody", { children: movers.slice(0, 100).map((m, i) => /* @__PURE__ */ jsxRuntime.jsxs("tr", { style: { borderTop: `1px solid ${C6.border}`, color: C6.text }, children: [
17447
+ /* @__PURE__ */ jsxRuntime.jsx("tbody", { children: movers.slice(0, 100).map((m, i) => /* @__PURE__ */ jsxRuntime.jsxs("tr", { style: { borderTop: `1px solid ${C7.border}`, color: C7.text }, children: [
17362
17448
  /* @__PURE__ */ jsxRuntime.jsx("td", { style: { padding: "6px 8px", maxWidth: 320, overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" }, children: m.query }),
17363
17449
  /* @__PURE__ */ jsxRuntime.jsx("td", { style: { padding: "6px 8px", textAlign: "right", fontWeight: 700 }, children: m.position.toFixed(1) }),
17364
17450
  /* @__PURE__ */ jsxRuntime.jsx("td", { style: { padding: "6px 8px", textAlign: "right" }, children: renderDelta(m) }),
@@ -17369,7 +17455,7 @@ function RankTrackingPanel({ locale }) {
17369
17455
  ] })
17370
17456
  ] });
17371
17457
  }
17372
- var C7 = {
17458
+ var C8 = {
17373
17459
  text: "var(--theme-text, #1a1a1a)",
17374
17460
  sub: "var(--theme-elevation-600, #6b7280)",
17375
17461
  card: "var(--theme-elevation-50, #f9fafb)",
@@ -17379,7 +17465,7 @@ var C7 = {
17379
17465
  amber: "#f59e0b",
17380
17466
  violet: "#7c3aed"
17381
17467
  };
17382
- var S4 = {
17468
+ var S5 = {
17383
17469
  fr: {
17384
17470
  title: "Opportunit\xE9s CTR (faible clic / bonne position)",
17385
17471
  subtitle: "Pages bien positionn\xE9es mais peu cliqu\xE9es (m\xE9ta peu attractive). Donn\xE9es Google Search Console \u2192 r\xE9\xE9criture m\xE9ta cibl\xE9e.",
@@ -17420,7 +17506,7 @@ var S4 = {
17420
17506
  }
17421
17507
  };
17422
17508
  function CtrOpportunitiesPanel({ locale }) {
17423
- const s = S4[locale] ?? S4.fr;
17509
+ const s = S5[locale] ?? S5.fr;
17424
17510
  const [opps, setOpps] = React4.useState(null);
17425
17511
  const [loading, setLoading] = React4.useState(true);
17426
17512
  const [notConnected, setNotConnected] = React4.useState(false);
@@ -17495,7 +17581,7 @@ function CtrOpportunitiesPanel({ locale }) {
17495
17581
  setRow(o.url, { busy: false, error: e instanceof Error ? e.message : "Network error" });
17496
17582
  }
17497
17583
  };
17498
- const card = { padding: 16, borderRadius: 12, border: `1px solid ${C7.border}`, backgroundColor: C7.card, marginBottom: 20 };
17584
+ const card = { padding: 16, borderRadius: 12, border: `1px solid ${C8.border}`, backgroundColor: C8.card, marginBottom: 20 };
17499
17585
  const btn = (bg) => ({
17500
17586
  padding: "5px 10px",
17501
17587
  borderRadius: 6,
@@ -17509,17 +17595,17 @@ function CtrOpportunitiesPanel({ locale }) {
17509
17595
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { style: card, children: [
17510
17596
  /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", justifyContent: "space-between", alignItems: "center", gap: 8, flexWrap: "wrap" }, children: [
17511
17597
  /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
17512
- /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 16, fontWeight: 800, color: C7.text }, children: s.title }),
17513
- /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 12, color: C7.sub, marginTop: 2 }, children: s.subtitle })
17598
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 16, fontWeight: 800, color: C8.text }, children: s.title }),
17599
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 12, color: C8.sub, marginTop: 2 }, children: s.subtitle })
17514
17600
  ] }),
17515
- !notConnected && /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", onClick: () => void load(), style: btn(C7.sub), children: s.refresh })
17601
+ !notConnected && /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", onClick: () => void load(), style: btn(C8.sub), children: s.refresh })
17516
17602
  ] }),
17517
- error && /* @__PURE__ */ jsxRuntime.jsx("div", { style: { color: C7.red, fontSize: 13, fontWeight: 600, marginTop: 10 }, children: error }),
17518
- notConnected && /* @__PURE__ */ jsxRuntime.jsx("div", { style: { marginTop: 12, fontSize: 13, color: C7.sub }, children: s.needGsc }),
17519
- loading && !notConnected && /* @__PURE__ */ jsxRuntime.jsx("div", { style: { marginTop: 12, fontSize: 13, color: C7.sub }, children: s.loading }),
17520
- !loading && !notConnected && opps && opps.length === 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { style: { marginTop: 12, fontSize: 13, color: C7.sub }, children: s.none }),
17603
+ error && /* @__PURE__ */ jsxRuntime.jsx("div", { style: { color: C8.red, fontSize: 13, fontWeight: 600, marginTop: 10 }, children: error }),
17604
+ notConnected && /* @__PURE__ */ jsxRuntime.jsx("div", { style: { marginTop: 12, fontSize: 13, color: C8.sub }, children: s.needGsc }),
17605
+ loading && !notConnected && /* @__PURE__ */ jsxRuntime.jsx("div", { style: { marginTop: 12, fontSize: 13, color: C8.sub }, children: s.loading }),
17606
+ !loading && !notConnected && opps && opps.length === 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { style: { marginTop: 12, fontSize: 13, color: C8.sub }, children: s.none }),
17521
17607
  !notConnected && opps && opps.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { style: { overflowX: "auto", marginTop: 12 }, children: /* @__PURE__ */ jsxRuntime.jsxs("table", { style: { width: "100%", borderCollapse: "collapse", fontSize: 12 }, children: [
17522
- /* @__PURE__ */ jsxRuntime.jsx("thead", { children: /* @__PURE__ */ jsxRuntime.jsxs("tr", { style: { textAlign: "left", color: C7.sub }, children: [
17608
+ /* @__PURE__ */ jsxRuntime.jsx("thead", { children: /* @__PURE__ */ jsxRuntime.jsxs("tr", { style: { textAlign: "left", color: C8.sub }, children: [
17523
17609
  /* @__PURE__ */ jsxRuntime.jsx("th", { style: { padding: "6px 8px" }, children: s.page }),
17524
17610
  /* @__PURE__ */ jsxRuntime.jsx("th", { style: { padding: "6px 8px", textAlign: "right" }, children: s.pos }),
17525
17611
  /* @__PURE__ */ jsxRuntime.jsx("th", { style: { padding: "6px 8px", textAlign: "right" }, children: s.ctr }),
@@ -17536,41 +17622,41 @@ function CtrOpportunitiesPanel({ locale }) {
17536
17622
  }
17537
17623
  })();
17538
17624
  return /* @__PURE__ */ jsxRuntime.jsxs(React4__default.default.Fragment, { children: [
17539
- /* @__PURE__ */ jsxRuntime.jsxs("tr", { style: { borderTop: `1px solid ${C7.border}`, color: C7.text }, children: [
17625
+ /* @__PURE__ */ jsxRuntime.jsxs("tr", { style: { borderTop: `1px solid ${C8.border}`, color: C8.text }, children: [
17540
17626
  /* @__PURE__ */ jsxRuntime.jsx("td", { style: { padding: "6px 8px", maxWidth: 320, overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" }, children: path }),
17541
17627
  /* @__PURE__ */ jsxRuntime.jsx("td", { style: { padding: "6px 8px", textAlign: "right" }, children: o.position.toFixed(1) }),
17542
17628
  /* @__PURE__ */ jsxRuntime.jsxs("td", { style: { padding: "6px 8px", textAlign: "right" }, children: [
17543
- /* @__PURE__ */ jsxRuntime.jsxs("span", { style: { color: C7.red }, children: [
17629
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { style: { color: C8.red }, children: [
17544
17630
  (o.ctr * 100).toFixed(1),
17545
17631
  "%"
17546
17632
  ] }),
17547
- /* @__PURE__ */ jsxRuntime.jsxs("span", { style: { color: C7.sub }, children: [
17633
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { style: { color: C8.sub }, children: [
17548
17634
  " / ",
17549
17635
  (o.expectedCtr * 100).toFixed(0),
17550
17636
  "% ",
17551
17637
  s.expected
17552
17638
  ] })
17553
17639
  ] }),
17554
- /* @__PURE__ */ jsxRuntime.jsxs("td", { style: { padding: "6px 8px", textAlign: "right", fontWeight: 700, color: C7.amber }, children: [
17640
+ /* @__PURE__ */ jsxRuntime.jsxs("td", { style: { padding: "6px 8px", textAlign: "right", fontWeight: 700, color: C8.amber }, children: [
17555
17641
  "+",
17556
17642
  o.potentialClicks
17557
17643
  ] }),
17558
- /* @__PURE__ */ jsxRuntime.jsx("td", { style: { padding: "6px 8px", textAlign: "right" }, children: rs.applied ? /* @__PURE__ */ jsxRuntime.jsx("span", { style: { fontSize: 11, fontWeight: 700, color: C7.green }, children: s.applied }) : o.doc ? rs.suggestion ? /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", onClick: () => void apply(o), disabled: rs.busy, style: btn(C7.green), children: rs.busy ? s.optimizing : s.apply }) : /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", onClick: () => void optimize(o), disabled: rs.busy, style: btn(C7.violet), children: rs.busy ? s.optimizing : `\u2728 ${s.optimize}` }) : /* @__PURE__ */ jsxRuntime.jsxs("a", { href: o.url, target: "_blank", rel: "noopener noreferrer", style: { fontSize: 11, color: C7.sub }, children: [
17644
+ /* @__PURE__ */ jsxRuntime.jsx("td", { style: { padding: "6px 8px", textAlign: "right" }, children: rs.applied ? /* @__PURE__ */ jsxRuntime.jsx("span", { style: { fontSize: 11, fontWeight: 700, color: C8.green }, children: s.applied }) : o.doc ? rs.suggestion ? /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", onClick: () => void apply(o), disabled: rs.busy, style: btn(C8.green), children: rs.busy ? s.optimizing : s.apply }) : /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", onClick: () => void optimize(o), disabled: rs.busy, style: btn(C8.violet), children: rs.busy ? s.optimizing : `\u2728 ${s.optimize}` }) : /* @__PURE__ */ jsxRuntime.jsxs("a", { href: o.url, target: "_blank", rel: "noopener noreferrer", style: { fontSize: 11, color: C8.sub }, children: [
17559
17645
  s.open,
17560
17646
  " \u2197"
17561
17647
  ] }) })
17562
17648
  ] }),
17563
- rs.suggestion && !rs.applied && /* @__PURE__ */ jsxRuntime.jsx("tr", { style: { color: C7.text }, children: /* @__PURE__ */ jsxRuntime.jsxs("td", { colSpan: 5, style: { padding: "0 8px 8px 8px" }, children: [
17564
- /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 11, color: C7.green, fontWeight: 600 }, children: rs.suggestion.metaTitle }),
17565
- /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 11, color: C7.sub }, children: rs.suggestion.metaDescription })
17649
+ rs.suggestion && !rs.applied && /* @__PURE__ */ jsxRuntime.jsx("tr", { style: { color: C8.text }, children: /* @__PURE__ */ jsxRuntime.jsxs("td", { colSpan: 5, style: { padding: "0 8px 8px 8px" }, children: [
17650
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 11, color: C8.green, fontWeight: 600 }, children: rs.suggestion.metaTitle }),
17651
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 11, color: C8.sub }, children: rs.suggestion.metaDescription })
17566
17652
  ] }) }),
17567
- rs.error && /* @__PURE__ */ jsxRuntime.jsx("tr", { children: /* @__PURE__ */ jsxRuntime.jsx("td", { colSpan: 5, style: { padding: "0 8px 6px 8px", fontSize: 11, color: C7.red }, children: rs.error }) })
17653
+ rs.error && /* @__PURE__ */ jsxRuntime.jsx("tr", { children: /* @__PURE__ */ jsxRuntime.jsx("td", { colSpan: 5, style: { padding: "0 8px 6px 8px", fontSize: 11, color: C8.red }, children: rs.error }) })
17568
17654
  ] }, o.url);
17569
17655
  }) })
17570
17656
  ] }) })
17571
17657
  ] });
17572
17658
  }
17573
- var C8 = {
17659
+ var C9 = {
17574
17660
  text: "var(--theme-text, #1a1a1a)",
17575
17661
  sub: "var(--theme-elevation-600, #6b7280)",
17576
17662
  card: "var(--theme-elevation-50, #f9fafb)",
@@ -17580,7 +17666,7 @@ var C8 = {
17580
17666
  amber: "#f59e0b",
17581
17667
  blue: "#3b82f6"
17582
17668
  };
17583
- var S5 = {
17669
+ var S6 = {
17584
17670
  fr: {
17585
17671
  title: "Monitoring & alertes",
17586
17672
  subtitle: "Digest p\xE9riodique : r\xE9gressions de score, nouveaux 404, chutes de position (webhook / email).",
@@ -17623,7 +17709,7 @@ var S5 = {
17623
17709
  }
17624
17710
  };
17625
17711
  function AlertsPanel({ locale }) {
17626
- const s = S5[locale] ?? S5.fr;
17712
+ const s = S6[locale] ?? S6.fr;
17627
17713
  const [digest, setDigest] = React4.useState(null);
17628
17714
  const [config, setConfig] = React4.useState(null);
17629
17715
  const [loading, setLoading] = React4.useState(true);
@@ -17678,15 +17764,15 @@ function AlertsPanel({ locale }) {
17678
17764
  const card = {
17679
17765
  padding: 16,
17680
17766
  borderRadius: 12,
17681
- border: `1px solid ${C8.border}`,
17682
- backgroundColor: C8.card,
17767
+ border: `1px solid ${C9.border}`,
17768
+ backgroundColor: C9.card,
17683
17769
  marginBottom: 20
17684
17770
  };
17685
17771
  const btn = {
17686
17772
  padding: "8px 12px",
17687
17773
  borderRadius: 8,
17688
- border: `1px solid ${C8.blue}`,
17689
- backgroundColor: C8.blue,
17774
+ border: `1px solid ${C9.blue}`,
17775
+ backgroundColor: C9.blue,
17690
17776
  color: "#fff",
17691
17777
  fontSize: 12,
17692
17778
  fontWeight: 700,
@@ -17699,32 +17785,32 @@ function AlertsPanel({ locale }) {
17699
17785
  padding: "3px 8px",
17700
17786
  borderRadius: 999,
17701
17787
  color: "#fff",
17702
- backgroundColor: ok ? C8.green : C8.sub,
17788
+ backgroundColor: ok ? C9.green : C9.sub,
17703
17789
  marginRight: 6
17704
17790
  });
17705
17791
  const hasChannel = config && (config.webhookConfigured || config.emailConfigured);
17706
17792
  const list = (title, rows) => rows.length ? /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { marginTop: 10 }, children: [
17707
- /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { fontSize: 12, fontWeight: 700, color: C8.text, marginBottom: 4 }, children: [
17793
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { fontSize: 12, fontWeight: 700, color: C9.text, marginBottom: 4 }, children: [
17708
17794
  title,
17709
17795
  " ",
17710
- /* @__PURE__ */ jsxRuntime.jsxs("span", { style: { color: C8.amber }, children: [
17796
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { style: { color: C9.amber }, children: [
17711
17797
  "(",
17712
17798
  rows.length,
17713
17799
  ")"
17714
17800
  ] })
17715
17801
  ] }),
17716
- /* @__PURE__ */ jsxRuntime.jsx("ul", { style: { margin: 0, paddingLeft: 18, fontSize: 12, color: C8.sub, lineHeight: 1.6 }, children: rows.slice(0, 8).map((r, i) => /* @__PURE__ */ jsxRuntime.jsx("li", { children: r }, i)) })
17802
+ /* @__PURE__ */ jsxRuntime.jsx("ul", { style: { margin: 0, paddingLeft: 18, fontSize: 12, color: C9.sub, lineHeight: 1.6 }, children: rows.slice(0, 8).map((r, i) => /* @__PURE__ */ jsxRuntime.jsx("li", { children: r }, i)) })
17717
17803
  ] }) : null;
17718
17804
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { style: card, children: [
17719
17805
  /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", alignItems: "center", justifyContent: "space-between", gap: 8, flexWrap: "wrap" }, children: [
17720
17806
  /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
17721
- /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 16, fontWeight: 800, color: C8.text }, children: s.title }),
17722
- /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 12, color: C8.sub, marginTop: 2 }, children: s.subtitle })
17807
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 16, fontWeight: 800, color: C9.text }, children: s.title }),
17808
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 12, color: C9.sub, marginTop: 2 }, children: s.subtitle })
17723
17809
  ] }),
17724
17810
  hasChannel && /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", onClick: sendNow, disabled: busy, style: btn, children: busy ? s.sending : s.sendNow })
17725
17811
  ] }),
17726
- error && /* @__PURE__ */ jsxRuntime.jsx("div", { style: { color: C8.red, fontSize: 13, fontWeight: 600, marginTop: 10 }, children: error }),
17727
- notice && /* @__PURE__ */ jsxRuntime.jsx("div", { style: { color: C8.green, fontSize: 13, fontWeight: 600, marginTop: 10 }, children: notice }),
17812
+ error && /* @__PURE__ */ jsxRuntime.jsx("div", { style: { color: C9.red, fontSize: 13, fontWeight: 600, marginTop: 10 }, children: error }),
17813
+ notice && /* @__PURE__ */ jsxRuntime.jsx("div", { style: { color: C9.green, fontSize: 13, fontWeight: 600, marginTop: 10 }, children: notice }),
17728
17814
  config && /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { marginTop: 12 }, children: [
17729
17815
  /* @__PURE__ */ jsxRuntime.jsxs("span", { style: chip(config.webhookConfigured, s.webhook), children: [
17730
17816
  s.webhook,
@@ -17737,15 +17823,15 @@ function AlertsPanel({ locale }) {
17737
17823
  config.emailConfigured ? s.configured : s.missing
17738
17824
  ] })
17739
17825
  ] }),
17740
- !loading && !hasChannel && /* @__PURE__ */ jsxRuntime.jsx("div", { style: { marginTop: 12, fontSize: 13, color: C8.sub }, children: s.notConfigured }),
17741
- loading && /* @__PURE__ */ jsxRuntime.jsx("div", { style: { marginTop: 12, fontSize: 13, color: C8.sub }, children: s.loading }),
17826
+ !loading && !hasChannel && /* @__PURE__ */ jsxRuntime.jsx("div", { style: { marginTop: 12, fontSize: 13, color: C9.sub }, children: s.notConfigured }),
17827
+ loading && /* @__PURE__ */ jsxRuntime.jsx("div", { style: { marginTop: 12, fontSize: 13, color: C9.sub }, children: s.loading }),
17742
17828
  digest && /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { marginTop: 8 }, children: [
17743
- /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { fontSize: 12, color: C8.sub, marginTop: 6 }, children: [
17829
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { fontSize: 12, color: C9.sub, marginTop: 6 }, children: [
17744
17830
  digest.totalIssues,
17745
17831
  " ",
17746
17832
  s.issues
17747
17833
  ] }),
17748
- digest.totalIssues === 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { style: { marginTop: 8, fontSize: 13, color: C8.sub }, children: s.noIssues }),
17834
+ digest.totalIssues === 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { style: { marginTop: 8, fontSize: 13, color: C9.sub }, children: s.noIssues }),
17749
17835
  list(
17750
17836
  s.scoreReg,
17751
17837
  digest.scoreRegressions.map((r) => `${r.collection}/${r.documentId} \u2014 ${r.from} \u2192 ${r.to} (\u2212${r.drop})`)
@@ -17755,7 +17841,7 @@ function AlertsPanel({ locale }) {
17755
17841
  ] })
17756
17842
  ] });
17757
17843
  }
17758
- var C9 = {
17844
+ var C10 = {
17759
17845
  text: "var(--theme-text, #1a1a1a)",
17760
17846
  sub: "var(--theme-elevation-600, #6b7280)",
17761
17847
  card: "var(--theme-elevation-50, #f9fafb)",
@@ -17765,7 +17851,7 @@ var C9 = {
17765
17851
  red: "#ef4444",
17766
17852
  violet: "#7c3aed"
17767
17853
  };
17768
- var S6 = {
17854
+ var S7 = {
17769
17855
  fr: {
17770
17856
  title: "Alt-text IA des images",
17771
17857
  subtitle: "G\xE9n\xE8re l'attribut alt des images qui n'en ont pas (Claude vision), pour l'accessibilit\xE9 et le SEO.",
@@ -17798,7 +17884,7 @@ var S6 = {
17798
17884
  }
17799
17885
  };
17800
17886
  function AltTextPanel({ locale }) {
17801
- const s = S6[locale] ?? S6.fr;
17887
+ const s = S7[locale] ?? S7.fr;
17802
17888
  const [items, setItems] = React4.useState(null);
17803
17889
  const [collection, setCollection] = React4.useState("media");
17804
17890
  const [missingCount, setMissingCount] = React4.useState(0);
@@ -17875,8 +17961,8 @@ function AltTextPanel({ locale }) {
17875
17961
  const card = {
17876
17962
  padding: 16,
17877
17963
  borderRadius: 12,
17878
- border: `1px solid ${C9.border}`,
17879
- backgroundColor: C9.card,
17964
+ border: `1px solid ${C10.border}`,
17965
+ backgroundColor: C10.card,
17880
17966
  marginBottom: 20
17881
17967
  };
17882
17968
  const btn = (bg) => ({
@@ -17892,18 +17978,18 @@ function AltTextPanel({ locale }) {
17892
17978
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { style: card, children: [
17893
17979
  /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", alignItems: "center", justifyContent: "space-between", gap: 8, flexWrap: "wrap" }, children: [
17894
17980
  /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
17895
- /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 16, fontWeight: 800, color: C9.text }, children: s.title }),
17896
- /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 12, color: C9.sub, marginTop: 2 }, children: s.subtitle })
17981
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 16, fontWeight: 800, color: C10.text }, children: s.title }),
17982
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 12, color: C10.sub, marginTop: 2 }, children: s.subtitle })
17897
17983
  ] }),
17898
- status === "ok" && /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", onClick: () => void load(), style: btn(C9.sub), children: s.refresh })
17984
+ status === "ok" && /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", onClick: () => void load(), style: btn(C10.sub), children: s.refresh })
17899
17985
  ] }),
17900
- status === "forbidden" && /* @__PURE__ */ jsxRuntime.jsx("div", { style: { marginTop: 12, fontSize: 13, color: C9.sub }, children: s.forbidden }),
17901
- status === "disabled" && /* @__PURE__ */ jsxRuntime.jsx("div", { style: { marginTop: 12, fontSize: 13, color: C9.sub }, children: s.disabled }),
17986
+ status === "forbidden" && /* @__PURE__ */ jsxRuntime.jsx("div", { style: { marginTop: 12, fontSize: 13, color: C10.sub }, children: s.forbidden }),
17987
+ status === "disabled" && /* @__PURE__ */ jsxRuntime.jsx("div", { style: { marginTop: 12, fontSize: 13, color: C10.sub }, children: s.disabled }),
17902
17988
  status === "ok" && /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { marginTop: 12 }, children: [
17903
- loading && /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 13, color: C9.sub }, children: s.loading }),
17904
- !loading && items && items.length === 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 13, color: C9.sub }, children: s.none }),
17989
+ loading && /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 13, color: C10.sub }, children: s.loading }),
17990
+ !loading && items && items.length === 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 13, color: C10.sub }, children: s.none }),
17905
17991
  !loading && items && items.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
17906
- /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { fontSize: 12, color: C9.sub, marginBottom: 10 }, children: [
17992
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { fontSize: 12, color: C10.sub, marginBottom: 10 }, children: [
17907
17993
  missingCount,
17908
17994
  " ",
17909
17995
  s.missing
@@ -17919,8 +18005,8 @@ function AltTextPanel({ locale }) {
17919
18005
  alignItems: "center",
17920
18006
  padding: 8,
17921
18007
  borderRadius: 8,
17922
- border: `1px solid ${C9.border}`,
17923
- backgroundColor: C9.bg
18008
+ border: `1px solid ${C10.border}`,
18009
+ backgroundColor: C10.bg
17924
18010
  },
17925
18011
  children: [
17926
18012
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -17928,11 +18014,11 @@ function AltTextPanel({ locale }) {
17928
18014
  {
17929
18015
  src: item.url,
17930
18016
  alt: "",
17931
- style: { width: 48, height: 48, objectFit: "cover", borderRadius: 6, flexShrink: 0, border: `1px solid ${C9.border}` }
18017
+ style: { width: 48, height: 48, objectFit: "cover", borderRadius: 6, flexShrink: 0, border: `1px solid ${C10.border}` }
17932
18018
  }
17933
18019
  ),
17934
18020
  /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { flex: 1, minWidth: 0 }, children: [
17935
- /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 11, color: C9.sub, overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" }, children: item.filename }),
18021
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 11, color: C10.sub, overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" }, children: item.filename }),
17936
18022
  rs.alt !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx(
17937
18023
  "input",
17938
18024
  {
@@ -17946,15 +18032,15 @@ function AltTextPanel({ locale }) {
17946
18032
  padding: "4px 8px",
17947
18033
  fontSize: 12,
17948
18034
  borderRadius: 6,
17949
- border: `1px solid ${C9.border}`,
17950
- backgroundColor: C9.bg,
17951
- color: C9.text
18035
+ border: `1px solid ${C10.border}`,
18036
+ backgroundColor: C10.bg,
18037
+ color: C10.text
17952
18038
  }
17953
18039
  }
17954
- ) : /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 12, color: C9.sub, marginTop: 4, fontStyle: "italic" }, children: "\u2014" }),
17955
- rs.error && /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 11, color: C9.red, marginTop: 2 }, children: rs.error })
18040
+ ) : /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 12, color: C10.sub, marginTop: 4, fontStyle: "italic" }, children: "\u2014" }),
18041
+ rs.error && /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 11, color: C10.red, marginTop: 2 }, children: rs.error })
17956
18042
  ] }),
17957
- /* @__PURE__ */ jsxRuntime.jsx("div", { style: { flexShrink: 0 }, children: rs.applied ? /* @__PURE__ */ jsxRuntime.jsx("span", { style: { fontSize: 11, fontWeight: 700, color: C9.green }, children: s.applied }) : rs.alt !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", onClick: () => void apply(item), disabled: rs.busy, style: btn(C9.green), children: rs.busy ? s.generating : s.apply }) : /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", onClick: () => void generate(item), disabled: rs.busy, style: btn(C9.violet), children: rs.busy ? s.generating : s.generate }) })
18043
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: { flexShrink: 0 }, children: rs.applied ? /* @__PURE__ */ jsxRuntime.jsx("span", { style: { fontSize: 11, fontWeight: 700, color: C10.green }, children: s.applied }) : rs.alt !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", onClick: () => void apply(item), disabled: rs.busy, style: btn(C10.green), children: rs.busy ? s.generating : s.apply }) : /* @__PURE__ */ jsxRuntime.jsx("button", { type: "button", onClick: () => void generate(item), disabled: rs.busy, style: btn(C10.violet), children: rs.busy ? s.generating : s.generate }) })
17958
18044
  ]
17959
18045
  },
17960
18046
  item.id
@@ -18376,6 +18462,7 @@ function PerformanceView() {
18376
18462
  ]
18377
18463
  }
18378
18464
  ),
18465
+ /* @__PURE__ */ jsxRuntime.jsx(HealthPanel, { locale }),
18379
18466
  /* @__PURE__ */ jsxRuntime.jsx(CoreWebVitalsPanel, { locale }),
18380
18467
  /* @__PURE__ */ jsxRuntime.jsx(GscPanel, { locale }),
18381
18468
  /* @__PURE__ */ jsxRuntime.jsx(RankTrackingPanel, { locale }),
@@ -18905,7 +18992,7 @@ function PerformanceView() {
18905
18992
  }
18906
18993
  );
18907
18994
  }
18908
- var C10 = {
18995
+ var C11 = {
18909
18996
  text: "var(--theme-text, #1a1a1a)",
18910
18997
  sub: "var(--theme-elevation-600, #6b7280)",
18911
18998
  card: "var(--theme-elevation-50, #f9fafb)",
@@ -18915,7 +19002,7 @@ var C10 = {
18915
19002
  red: "#ef4444",
18916
19003
  blue: "#3b82f6"
18917
19004
  };
18918
- var S7 = {
19005
+ var S8 = {
18919
19006
  fr: {
18920
19007
  title: "Brief de contenu IA",
18921
19008
  subtitle: "G\xE9n\xE8re un plan r\xE9dactionnel optimis\xE9 pour un mot-cl\xE9 (plan, entit\xE9s, questions, longueur cible).",
@@ -18950,7 +19037,7 @@ var S7 = {
18950
19037
  }
18951
19038
  };
18952
19039
  function ContentBriefPanel({ locale }) {
18953
- const s = S7[locale] ?? S7.fr;
19040
+ const s = S8[locale] ?? S8.fr;
18954
19041
  const [keyword, setKeyword] = React4.useState("");
18955
19042
  const [brief, setBrief] = React4.useState(null);
18956
19043
  const [busy, setBusy] = React4.useState(false);
@@ -18986,8 +19073,8 @@ function ContentBriefPanel({ locale }) {
18986
19073
  const card = {
18987
19074
  padding: 16,
18988
19075
  borderRadius: 12,
18989
- border: `1px solid ${C10.border}`,
18990
- backgroundColor: C10.card,
19076
+ border: `1px solid ${C11.border}`,
19077
+ backgroundColor: C11.card,
18991
19078
  marginBottom: 20
18992
19079
  };
18993
19080
  const chip = {
@@ -18996,14 +19083,14 @@ function ContentBriefPanel({ locale }) {
18996
19083
  padding: "3px 8px",
18997
19084
  borderRadius: 999,
18998
19085
  backgroundColor: "rgba(59,130,246,0.12)",
18999
- color: C10.blue,
19000
- border: `1px solid ${C10.border}`,
19086
+ color: C11.blue,
19087
+ border: `1px solid ${C11.border}`,
19001
19088
  margin: "0 6px 6px 0"
19002
19089
  };
19003
- const h4 = { fontSize: 12, fontWeight: 800, color: C10.text, margin: "14px 0 6px", textTransform: "uppercase" };
19090
+ const h4 = { fontSize: 12, fontWeight: 800, color: C11.text, margin: "14px 0 6px", textTransform: "uppercase" };
19004
19091
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { style: card, children: [
19005
- /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 16, fontWeight: 800, color: C10.text }, children: s.title }),
19006
- /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 12, color: C10.sub, marginTop: 2, marginBottom: 12 }, children: s.subtitle }),
19092
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 16, fontWeight: 800, color: C11.text }, children: s.title }),
19093
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 12, color: C11.sub, marginTop: 2, marginBottom: 12 }, children: s.subtitle }),
19007
19094
  /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", gap: 8, flexWrap: "wrap" }, children: [
19008
19095
  /* @__PURE__ */ jsxRuntime.jsx(
19009
19096
  "input",
@@ -19020,9 +19107,9 @@ function ContentBriefPanel({ locale }) {
19020
19107
  padding: "8px 12px",
19021
19108
  fontSize: 13,
19022
19109
  borderRadius: 8,
19023
- border: `1px solid ${C10.border}`,
19024
- backgroundColor: C10.bg,
19025
- color: C10.text
19110
+ border: `1px solid ${C11.border}`,
19111
+ backgroundColor: C11.bg,
19112
+ color: C11.text
19026
19113
  }
19027
19114
  }
19028
19115
  ),
@@ -19035,8 +19122,8 @@ function ContentBriefPanel({ locale }) {
19035
19122
  style: {
19036
19123
  padding: "8px 14px",
19037
19124
  borderRadius: 8,
19038
- border: `1px solid ${C10.violet}`,
19039
- backgroundColor: C10.violet,
19125
+ border: `1px solid ${C11.violet}`,
19126
+ backgroundColor: C11.violet,
19040
19127
  color: "#fff",
19041
19128
  fontSize: 12,
19042
19129
  fontWeight: 700,
@@ -19047,12 +19134,12 @@ function ContentBriefPanel({ locale }) {
19047
19134
  }
19048
19135
  )
19049
19136
  ] }),
19050
- error && /* @__PURE__ */ jsxRuntime.jsx("div", { style: { color: C10.red, fontSize: 13, fontWeight: 600, marginTop: 10 }, children: error }),
19137
+ error && /* @__PURE__ */ jsxRuntime.jsx("div", { style: { color: C11.red, fontSize: 13, fontWeight: 600, marginTop: 10 }, children: error }),
19051
19138
  brief && /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { marginTop: 8 }, children: [
19052
- brief.recommendedWordCount > 0 && /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { fontSize: 12, color: C10.sub, marginTop: 10 }, children: [
19139
+ brief.recommendedWordCount > 0 && /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { fontSize: 12, color: C11.sub, marginTop: 10 }, children: [
19053
19140
  s.words,
19054
19141
  ": ",
19055
- /* @__PURE__ */ jsxRuntime.jsxs("b", { style: { color: C10.text }, children: [
19142
+ /* @__PURE__ */ jsxRuntime.jsxs("b", { style: { color: C11.text }, children: [
19056
19143
  "~",
19057
19144
  brief.recommendedWordCount,
19058
19145
  " ",
@@ -19061,7 +19148,7 @@ function ContentBriefPanel({ locale }) {
19061
19148
  ] }),
19062
19149
  brief.outline.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
19063
19150
  /* @__PURE__ */ jsxRuntime.jsx("div", { style: h4, children: s.outline }),
19064
- /* @__PURE__ */ jsxRuntime.jsx("ul", { style: { margin: 0, paddingLeft: 18, fontSize: 13, color: C10.text, lineHeight: 1.6 }, children: brief.outline.map((o, i) => /* @__PURE__ */ jsxRuntime.jsx("li", { style: { marginLeft: o.level === "h3" ? 18 : 0, color: o.level === "h3" ? C10.sub : C10.text, fontWeight: o.level === "h2" ? 700 : 400 }, children: o.text }, i)) })
19151
+ /* @__PURE__ */ jsxRuntime.jsx("ul", { style: { margin: 0, paddingLeft: 18, fontSize: 13, color: C11.text, lineHeight: 1.6 }, children: brief.outline.map((o, i) => /* @__PURE__ */ jsxRuntime.jsx("li", { style: { marginLeft: o.level === "h3" ? 18 : 0, color: o.level === "h3" ? C11.sub : C11.text, fontWeight: o.level === "h2" ? 700 : 400 }, children: o.text }, i)) })
19065
19152
  ] }),
19066
19153
  brief.entities.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
19067
19154
  /* @__PURE__ */ jsxRuntime.jsx("div", { style: h4, children: s.entities }),
@@ -19069,7 +19156,7 @@ function ContentBriefPanel({ locale }) {
19069
19156
  ] }),
19070
19157
  brief.questions.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
19071
19158
  /* @__PURE__ */ jsxRuntime.jsx("div", { style: h4, children: s.questions }),
19072
- /* @__PURE__ */ jsxRuntime.jsx("ul", { style: { margin: 0, paddingLeft: 18, fontSize: 13, color: C10.text, lineHeight: 1.6 }, children: brief.questions.map((q, i) => /* @__PURE__ */ jsxRuntime.jsx("li", { children: q }, i)) })
19159
+ /* @__PURE__ */ jsxRuntime.jsx("ul", { style: { margin: 0, paddingLeft: 18, fontSize: 13, color: C11.text, lineHeight: 1.6 }, children: brief.questions.map((q, i) => /* @__PURE__ */ jsxRuntime.jsx("li", { children: q }, i)) })
19073
19160
  ] }),
19074
19161
  brief.internalLinkIdeas.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
19075
19162
  /* @__PURE__ */ jsxRuntime.jsx("div", { style: h4, children: s.links }),
@@ -19077,7 +19164,7 @@ function ContentBriefPanel({ locale }) {
19077
19164
  ] }),
19078
19165
  brief.notes.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
19079
19166
  /* @__PURE__ */ jsxRuntime.jsx("div", { style: h4, children: s.notes }),
19080
- /* @__PURE__ */ jsxRuntime.jsx("ul", { style: { margin: 0, paddingLeft: 18, fontSize: 12, color: C10.sub, lineHeight: 1.6 }, children: brief.notes.map((n, i) => /* @__PURE__ */ jsxRuntime.jsx("li", { children: n }, i)) })
19167
+ /* @__PURE__ */ jsxRuntime.jsx("ul", { style: { margin: 0, paddingLeft: 18, fontSize: 12, color: C11.sub, lineHeight: 1.6 }, children: brief.notes.map((n, i) => /* @__PURE__ */ jsxRuntime.jsx("li", { children: n }, i)) })
19081
19168
  ] })
19082
19169
  ] })
19083
19170
  ] });
@@ -20219,7 +20306,7 @@ var controlBtnStyle = {
20219
20306
  cursor: "pointer",
20220
20307
  lineHeight: 1.4
20221
20308
  };
20222
- var C11 = {
20309
+ var C12 = {
20223
20310
  cyan: "#00E5FF",
20224
20311
  black: "#000",
20225
20312
  green: "#22c55e",
@@ -20234,10 +20321,10 @@ var C11 = {
20234
20321
  var TITLE_MIN = 30;
20235
20322
  var TITLE_MAX = 60;
20236
20323
  function getCharColor(len) {
20237
- if (len === 0) return C11.textSecondary;
20238
- if (len >= TITLE_MIN && len <= TITLE_MAX) return C11.green;
20239
- if (len > 0 && len < TITLE_MIN) return C11.orange;
20240
- return C11.red;
20324
+ if (len === 0) return C12.textSecondary;
20325
+ if (len >= TITLE_MIN && len <= TITLE_MAX) return C12.green;
20326
+ if (len > 0 && len < TITLE_MIN) return C12.orange;
20327
+ return C12.red;
20241
20328
  }
20242
20329
  function getProgressPercent(len) {
20243
20330
  if (len === 0) return 0;
@@ -20245,9 +20332,9 @@ function getProgressPercent(len) {
20245
20332
  }
20246
20333
  function getProgressColor(len) {
20247
20334
  if (len === 0) return "var(--theme-elevation-200, #e5e7eb)";
20248
- if (len >= TITLE_MIN && len <= TITLE_MAX) return C11.green;
20249
- if (len < TITLE_MIN) return C11.orange;
20250
- return C11.red;
20335
+ if (len >= TITLE_MIN && len <= TITLE_MAX) return C12.green;
20336
+ if (len < TITLE_MIN) return C12.orange;
20337
+ return C12.red;
20251
20338
  }
20252
20339
  function MetaTitleField({
20253
20340
  path,
@@ -20318,7 +20405,7 @@ function MetaTitleField({
20318
20405
  style: {
20319
20406
  fontSize: 13,
20320
20407
  fontWeight: 700,
20321
- color: C11.textPrimary
20408
+ color: C12.textPrimary
20322
20409
  },
20323
20410
  children: t.metaTitle.label
20324
20411
  }
@@ -20358,9 +20445,9 @@ function MetaTitleField({
20358
20445
  fontSize: 14,
20359
20446
  fontFamily: "inherit",
20360
20447
  borderRadius: 8,
20361
- border: `2px solid ${C11.border}`,
20362
- backgroundColor: C11.surfaceBg,
20363
- color: C11.textPrimary,
20448
+ border: `2px solid ${C12.border}`,
20449
+ backgroundColor: C12.surfaceBg,
20450
+ color: C12.textPrimary,
20364
20451
  outline: "none",
20365
20452
  boxShadow: "2px 2px 0 0 var(--theme-border-color, rgba(0,0,0,1))"
20366
20453
  }
@@ -20378,9 +20465,9 @@ function MetaTitleField({
20378
20465
  gap: 5,
20379
20466
  padding: "8px 14px",
20380
20467
  borderRadius: 8,
20381
- border: `2px solid ${C11.border}`,
20382
- backgroundColor: loading ? C11.surface50 : C11.cyan,
20383
- color: loading ? C11.textSecondary : C11.black,
20468
+ border: `2px solid ${C12.border}`,
20469
+ backgroundColor: loading ? C12.surface50 : C12.cyan,
20470
+ color: loading ? C12.textSecondary : C12.black,
20384
20471
  fontWeight: 800,
20385
20472
  fontSize: 11,
20386
20473
  textTransform: "uppercase",
@@ -20427,7 +20514,7 @@ function MetaTitleField({
20427
20514
  justifyContent: "space-between",
20428
20515
  marginTop: 4,
20429
20516
  fontSize: 10,
20430
- color: C11.textSecondary
20517
+ color: C12.textSecondary
20431
20518
  },
20432
20519
  children: [
20433
20520
  /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
@@ -20461,9 +20548,9 @@ function MetaTitleField({
20461
20548
  borderRadius: 6,
20462
20549
  fontSize: 11,
20463
20550
  fontWeight: 600,
20464
- color: C11.red,
20551
+ color: C12.red,
20465
20552
  backgroundColor: "rgba(239,68,68,0.08)",
20466
- border: `1px solid ${C11.red}`
20553
+ border: `1px solid ${C12.red}`
20467
20554
  },
20468
20555
  children: error
20469
20556
  }
@@ -20472,7 +20559,7 @@ function MetaTitleField({
20472
20559
  }
20473
20560
  );
20474
20561
  }
20475
- var C12 = {
20562
+ var C13 = {
20476
20563
  cyan: "#00E5FF",
20477
20564
  black: "#000",
20478
20565
  green: "#22c55e",
@@ -20487,10 +20574,10 @@ var C12 = {
20487
20574
  var DESC_MIN = 120;
20488
20575
  var DESC_MAX = 160;
20489
20576
  function getCharColor2(len) {
20490
- if (len === 0) return C12.textSecondary;
20491
- if (len >= DESC_MIN && len <= DESC_MAX) return C12.green;
20492
- if (len > 0 && len < DESC_MIN) return C12.orange;
20493
- return C12.red;
20577
+ if (len === 0) return C13.textSecondary;
20578
+ if (len >= DESC_MIN && len <= DESC_MAX) return C13.green;
20579
+ if (len > 0 && len < DESC_MIN) return C13.orange;
20580
+ return C13.red;
20494
20581
  }
20495
20582
  function getProgressPercent2(len) {
20496
20583
  if (len === 0) return 0;
@@ -20498,9 +20585,9 @@ function getProgressPercent2(len) {
20498
20585
  }
20499
20586
  function getProgressColor2(len) {
20500
20587
  if (len === 0) return "var(--theme-elevation-200, #e5e7eb)";
20501
- if (len >= DESC_MIN && len <= DESC_MAX) return C12.green;
20502
- if (len < DESC_MIN) return C12.orange;
20503
- return C12.red;
20588
+ if (len >= DESC_MIN && len <= DESC_MAX) return C13.green;
20589
+ if (len < DESC_MIN) return C13.orange;
20590
+ return C13.red;
20504
20591
  }
20505
20592
  function MetaDescriptionField({
20506
20593
  path,
@@ -20571,7 +20658,7 @@ function MetaDescriptionField({
20571
20658
  style: {
20572
20659
  fontSize: 13,
20573
20660
  fontWeight: 700,
20574
- color: C12.textPrimary
20661
+ color: C13.textPrimary
20575
20662
  },
20576
20663
  children: t.metaDescription.label
20577
20664
  }
@@ -20611,9 +20698,9 @@ function MetaDescriptionField({
20611
20698
  fontSize: 14,
20612
20699
  fontFamily: "inherit",
20613
20700
  borderRadius: 8,
20614
- border: `2px solid ${C12.border}`,
20615
- backgroundColor: C12.surfaceBg,
20616
- color: C12.textPrimary,
20701
+ border: `2px solid ${C13.border}`,
20702
+ backgroundColor: C13.surfaceBg,
20703
+ color: C13.textPrimary,
20617
20704
  outline: "none",
20618
20705
  resize: "vertical",
20619
20706
  lineHeight: 1.5,
@@ -20633,9 +20720,9 @@ function MetaDescriptionField({
20633
20720
  gap: 5,
20634
20721
  padding: "8px 14px",
20635
20722
  borderRadius: 8,
20636
- border: `2px solid ${C12.border}`,
20637
- backgroundColor: loading ? C12.surface50 : C12.cyan,
20638
- color: loading ? C12.textSecondary : C12.black,
20723
+ border: `2px solid ${C13.border}`,
20724
+ backgroundColor: loading ? C13.surface50 : C13.cyan,
20725
+ color: loading ? C13.textSecondary : C13.black,
20639
20726
  fontWeight: 800,
20640
20727
  fontSize: 11,
20641
20728
  textTransform: "uppercase",
@@ -20683,7 +20770,7 @@ function MetaDescriptionField({
20683
20770
  justifyContent: "space-between",
20684
20771
  marginTop: 4,
20685
20772
  fontSize: 10,
20686
- color: C12.textSecondary
20773
+ color: C13.textSecondary
20687
20774
  },
20688
20775
  children: [
20689
20776
  /* @__PURE__ */ jsxRuntime.jsxs("span", { children: [
@@ -20717,9 +20804,9 @@ function MetaDescriptionField({
20717
20804
  borderRadius: 6,
20718
20805
  fontSize: 11,
20719
20806
  fontWeight: 600,
20720
- color: C12.red,
20807
+ color: C13.red,
20721
20808
  backgroundColor: "rgba(239,68,68,0.08)",
20722
- border: `1px solid ${C12.red}`
20809
+ border: `1px solid ${C13.red}`
20723
20810
  },
20724
20811
  children: error
20725
20812
  }
@@ -20728,7 +20815,7 @@ function MetaDescriptionField({
20728
20815
  }
20729
20816
  );
20730
20817
  }
20731
- var C13 = {
20818
+ var C14 = {
20732
20819
  cyan: "#00E5FF",
20733
20820
  black: "#000",
20734
20821
  white: "#fff",
@@ -20805,8 +20892,8 @@ function MetaImageField({
20805
20892
  gap: 10,
20806
20893
  padding: "10px 14px",
20807
20894
  borderRadius: 8,
20808
- border: `2px solid ${C13.border}`,
20809
- backgroundColor: C13.surfaceBg,
20895
+ border: `2px solid ${C14.border}`,
20896
+ backgroundColor: C14.surfaceBg,
20810
20897
  boxShadow: "2px 2px 0 0 var(--theme-border-color, rgba(0,0,0,1))"
20811
20898
  },
20812
20899
  children: [
@@ -20825,7 +20912,7 @@ function MetaImageField({
20825
20912
  fontWeight: 900,
20826
20913
  backgroundColor: hasImage ? "rgba(34,197,94,0.15)" : "rgba(255,138,0,0.15)",
20827
20914
  color: hasImage ? "#16a34a" : "#d97706",
20828
- border: `1px solid ${hasImage ? C13.green : C13.orange}`
20915
+ border: `1px solid ${hasImage ? C14.green : C14.orange}`
20829
20916
  },
20830
20917
  children: hasImage ? "\u2713" : "!"
20831
20918
  }
@@ -20837,7 +20924,7 @@ function MetaImageField({
20837
20924
  style: {
20838
20925
  fontSize: 12,
20839
20926
  fontWeight: 700,
20840
- color: C13.textPrimary
20927
+ color: C14.textPrimary
20841
20928
  },
20842
20929
  children: t.metaImage.label
20843
20930
  }
@@ -20847,7 +20934,7 @@ function MetaImageField({
20847
20934
  {
20848
20935
  style: {
20849
20936
  fontSize: 10,
20850
- color: C13.textSecondary,
20937
+ color: C14.textSecondary,
20851
20938
  lineHeight: 1.4
20852
20939
  },
20853
20940
  children: hasImage ? t.metaImage.imageSet : t.metaImage.noImage
@@ -20867,9 +20954,9 @@ function MetaImageField({
20867
20954
  gap: 5,
20868
20955
  padding: "8px 14px",
20869
20956
  borderRadius: 8,
20870
- border: `2px solid ${C13.border}`,
20871
- backgroundColor: loading ? C13.surface50 : success ? C13.green : C13.cyan,
20872
- color: loading ? C13.textSecondary : success ? C13.white : C13.black,
20957
+ border: `2px solid ${C14.border}`,
20958
+ backgroundColor: loading ? C14.surface50 : success ? C14.green : C14.cyan,
20959
+ color: loading ? C14.textSecondary : success ? C14.white : C14.black,
20873
20960
  fontWeight: 800,
20874
20961
  fontSize: 11,
20875
20962
  textTransform: "uppercase",
@@ -20896,9 +20983,9 @@ function MetaImageField({
20896
20983
  borderRadius: 6,
20897
20984
  fontSize: 11,
20898
20985
  fontWeight: 600,
20899
- color: C13.red,
20986
+ color: C14.red,
20900
20987
  backgroundColor: "rgba(239,68,68,0.08)",
20901
- border: `1px solid ${C13.red}`
20988
+ border: `1px solid ${C14.red}`
20902
20989
  },
20903
20990
  children: error
20904
20991
  }
@@ -20907,7 +20994,7 @@ function MetaImageField({
20907
20994
  }
20908
20995
  );
20909
20996
  }
20910
- var C14 = {
20997
+ var C15 = {
20911
20998
  black: "#000",
20912
20999
  white: "#fff",
20913
21000
  green: "#22c55e",
@@ -20921,15 +21008,15 @@ var C14 = {
20921
21008
  function getCompletenessColor(count) {
20922
21009
  switch (count) {
20923
21010
  case 0:
20924
- return C14.red;
21011
+ return C15.red;
20925
21012
  case 1:
20926
- return C14.orange;
21013
+ return C15.orange;
20927
21014
  case 2:
20928
- return C14.yellow;
21015
+ return C15.yellow;
20929
21016
  case 3:
20930
- return C14.green;
21017
+ return C15.green;
20931
21018
  default:
20932
- return C14.textSecondary;
21019
+ return C15.textSecondary;
20933
21020
  }
20934
21021
  }
20935
21022
  function getCompletenessLabel(count, ov) {
@@ -20987,8 +21074,8 @@ function OverviewField({
20987
21074
  fontFamily: "var(--font-body, Inter, system-ui, sans-serif)",
20988
21075
  padding: "12px 14px",
20989
21076
  borderRadius: 10,
20990
- border: `2px solid ${C14.border}`,
20991
- backgroundColor: C14.surfaceBg,
21077
+ border: `2px solid ${C15.border}`,
21078
+ backgroundColor: C15.surfaceBg,
20992
21079
  boxShadow: "3px 3px 0 0 var(--theme-border-color, rgba(0,0,0,1))",
20993
21080
  marginBottom: 12
20994
21081
  },
@@ -21011,7 +21098,7 @@ function OverviewField({
21011
21098
  fontWeight: 800,
21012
21099
  textTransform: "uppercase",
21013
21100
  letterSpacing: "0.04em",
21014
- color: C14.textPrimary
21101
+ color: C15.textPrimary
21015
21102
  },
21016
21103
  children: t.overview.metaCompleteness
21017
21104
  }
@@ -21026,8 +21113,8 @@ function OverviewField({
21026
21113
  fontSize: 11,
21027
21114
  fontWeight: 800,
21028
21115
  backgroundColor: completenessColor,
21029
- color: completenessColor === C14.yellow ? C14.black : C14.white,
21030
- border: `2px solid ${C14.border}`,
21116
+ color: completenessColor === C15.yellow ? C15.black : C15.white,
21117
+ border: `2px solid ${C15.border}`,
21031
21118
  textTransform: "uppercase",
21032
21119
  letterSpacing: "0.03em"
21033
21120
  },
@@ -21125,7 +21212,7 @@ function OverviewField({
21125
21212
  style: {
21126
21213
  fontSize: 12,
21127
21214
  fontWeight: 600,
21128
- color: item.filled ? C14.textPrimary : C14.textSecondary
21215
+ color: item.filled ? C15.textPrimary : C15.textSecondary
21129
21216
  },
21130
21217
  children: item.label
21131
21218
  }
@@ -21137,7 +21224,7 @@ function OverviewField({
21137
21224
  marginLeft: "auto",
21138
21225
  fontSize: 10,
21139
21226
  fontWeight: 700,
21140
- color: item.filled ? C14.green : C14.red,
21227
+ color: item.filled ? C15.green : C15.red,
21141
21228
  textTransform: "uppercase",
21142
21229
  letterSpacing: "0.03em"
21143
21230
  },
@@ -21154,7 +21241,7 @@ function OverviewField({
21154
21241
  }
21155
21242
  );
21156
21243
  }
21157
- var C15 = {
21244
+ var C16 = {
21158
21245
  cyan: "#00E5FF",
21159
21246
  black: "#000",
21160
21247
  white: "#fff",
@@ -21173,10 +21260,10 @@ var G = {
21173
21260
  descGrey: "#4d5156",
21174
21261
  faviconBg: "#e8eaed"};
21175
21262
  function charCountColor2(len, min, max) {
21176
- if (len >= min && len <= max) return C15.green;
21177
- if (len > 0 && len < min) return C15.orange;
21178
- if (len > max) return C15.red;
21179
- return C15.textSecondary;
21263
+ if (len >= min && len <= max) return C16.green;
21264
+ if (len > 0 && len < min) return C16.orange;
21265
+ if (len > max) return C16.red;
21266
+ return C16.textSecondary;
21180
21267
  }
21181
21268
  function truncateText(text, maxChars) {
21182
21269
  if (text.length <= maxChars) return text;
@@ -21231,8 +21318,8 @@ function SerpPreview({
21231
21318
  padding: "10px 12px",
21232
21319
  cursor: "pointer",
21233
21320
  borderRadius: 8,
21234
- border: `2px solid ${C15.border}`,
21235
- backgroundColor: C15.surface50,
21321
+ border: `2px solid ${C16.border}`,
21322
+ backgroundColor: C16.surface50,
21236
21323
  userSelect: "none"
21237
21324
  },
21238
21325
  children: [
@@ -21247,7 +21334,7 @@ function SerpPreview({
21247
21334
  fontWeight: 800,
21248
21335
  textTransform: "uppercase",
21249
21336
  letterSpacing: "0.04em",
21250
- color: C15.textPrimary
21337
+ color: C16.textPrimary
21251
21338
  },
21252
21339
  children: [
21253
21340
  /* @__PURE__ */ jsxRuntime.jsxs(
@@ -21279,7 +21366,7 @@ function SerpPreview({
21279
21366
  transition: "transform 0.2s",
21280
21367
  display: "inline-block",
21281
21368
  transform: open ? "rotate(90deg)" : "none",
21282
- color: C15.textSecondary
21369
+ color: C16.textSecondary
21283
21370
  },
21284
21371
  children: "\u25B6"
21285
21372
  }
@@ -21312,10 +21399,10 @@ function SerpPreview({
21312
21399
  "div",
21313
21400
  {
21314
21401
  style: {
21315
- backgroundColor: C15.white,
21316
- border: `2px solid ${C15.border}`,
21402
+ backgroundColor: C16.white,
21403
+ border: `2px solid ${C16.border}`,
21317
21404
  borderRadius: 12,
21318
- boxShadow: `3px 3px 0 0 ${C15.border}`,
21405
+ boxShadow: `3px 3px 0 0 ${C16.border}`,
21319
21406
  padding: isDesktop ? 20 : 14,
21320
21407
  maxWidth: isDesktop ? 650 : 380,
21321
21408
  overflow: "hidden"
@@ -21378,7 +21465,7 @@ function SerpPreview({
21378
21465
  style: {
21379
21466
  fontSize: 14,
21380
21467
  fontWeight: 400,
21381
- color: C15.black,
21468
+ color: C16.black,
21382
21469
  lineHeight: 1.3,
21383
21470
  whiteSpace: "nowrap",
21384
21471
  overflow: "hidden",
@@ -21442,7 +21529,7 @@ function SerpPreview({
21442
21529
  "span",
21443
21530
  {
21444
21531
  style: {
21445
- color: C15.textSecondary,
21532
+ color: C16.textSecondary,
21446
21533
  fontStyle: "italic",
21447
21534
  fontSize: titleFontSize - 2
21448
21535
  },
@@ -21471,7 +21558,7 @@ function SerpPreview({
21471
21558
  "span",
21472
21559
  {
21473
21560
  style: {
21474
- color: C15.textSecondary,
21561
+ color: C16.textSecondary,
21475
21562
  fontStyle: "italic",
21476
21563
  fontSize: descFontSize - 1
21477
21564
  },
@@ -21504,7 +21591,7 @@ function SerpPreview({
21504
21591
  fontSize: 11
21505
21592
  },
21506
21593
  children: [
21507
- /* @__PURE__ */ jsxRuntime.jsx("span", { style: { color: C15.textSecondary, fontWeight: 600 }, children: t.serpPreview.previewTitle }),
21594
+ /* @__PURE__ */ jsxRuntime.jsx("span", { style: { color: C16.textSecondary, fontWeight: 600 }, children: t.serpPreview.previewTitle }),
21508
21595
  /* @__PURE__ */ jsxRuntime.jsxs(
21509
21596
  "span",
21510
21597
  {
@@ -21533,7 +21620,7 @@ function SerpPreview({
21533
21620
  fontSize: 11
21534
21621
  },
21535
21622
  children: [
21536
- /* @__PURE__ */ jsxRuntime.jsx("span", { style: { color: C15.textSecondary, fontWeight: 600 }, children: t.serpPreview.previewDescription }),
21623
+ /* @__PURE__ */ jsxRuntime.jsx("span", { style: { color: C16.textSecondary, fontWeight: 600 }, children: t.serpPreview.previewDescription }),
21537
21624
  /* @__PURE__ */ jsxRuntime.jsxs(
21538
21625
  "span",
21539
21626
  {
@@ -21562,14 +21649,14 @@ function SerpPreview({
21562
21649
  fontSize: 11
21563
21650
  },
21564
21651
  children: [
21565
- /* @__PURE__ */ jsxRuntime.jsx("span", { style: { color: C15.textSecondary, fontWeight: 600 }, children: t.serpPreview.url }),
21652
+ /* @__PURE__ */ jsxRuntime.jsx("span", { style: { color: C16.textSecondary, fontWeight: 600 }, children: t.serpPreview.url }),
21566
21653
  /* @__PURE__ */ jsxRuntime.jsxs(
21567
21654
  "span",
21568
21655
  {
21569
21656
  style: {
21570
21657
  fontWeight: 700,
21571
21658
  fontVariantNumeric: "tabular-nums",
21572
- color: fullUrl.length <= 75 ? C15.green : C15.red
21659
+ color: fullUrl.length <= 75 ? C16.green : C16.red
21573
21660
  },
21574
21661
  children: [
21575
21662
  fullUrl.length,
@@ -21604,13 +21691,13 @@ function DeviceButton({
21604
21691
  gap: 5,
21605
21692
  padding: "4px 12px",
21606
21693
  borderRadius: 6,
21607
- border: `2px solid ${C15.border}`,
21694
+ border: `2px solid ${C16.border}`,
21608
21695
  fontSize: 11,
21609
21696
  fontWeight: 700,
21610
21697
  cursor: "pointer",
21611
- backgroundColor: active ? C15.cyan : C15.surfaceBg,
21612
- color: active ? C15.black : C15.textPrimary,
21613
- boxShadow: active ? `2px 2px 0 0 ${C15.border}` : "none",
21698
+ backgroundColor: active ? C16.cyan : C16.surfaceBg,
21699
+ color: active ? C16.black : C16.textPrimary,
21700
+ boxShadow: active ? `2px 2px 0 0 ${C16.border}` : "none",
21614
21701
  transition: "background-color 0.15s"
21615
21702
  },
21616
21703
  children: [