@consilioweb/payload-seo-analyzer 1.13.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.js CHANGED
@@ -1062,6 +1062,8 @@ var fr = {
1062
1062
  bulkOptimizeMeta: "Optimiser m\xE9ta (IA)",
1063
1063
  bulkOptimizing: "Analyse\u2026",
1064
1064
  bulkConfirm: "Confirmer ?",
1065
+ optimizeSite: "Optimiser le site",
1066
+ optimizeSiteHint: "Cible automatiquement les pages \xE0 probl\xE8me (m\xE9ta manquante, sans mot-cl\xE9, score faible) \u2192 aper\xE7u \u2192 appliquer",
1065
1067
  bulkPreviewTitle: "Corrections m\xE9ta propos\xE9es",
1066
1068
  bulkApply: "Appliquer",
1067
1069
  bulkApplying: "Application\u2026",
@@ -1664,6 +1666,8 @@ var en = {
1664
1666
  bulkOptimizeMeta: "Optimize meta (AI)",
1665
1667
  bulkOptimizing: "Analyzing\u2026",
1666
1668
  bulkConfirm: "Confirm?",
1669
+ optimizeSite: "Optimize site",
1670
+ optimizeSiteHint: "Auto-targets pages that need work (missing meta, no keyword, low score) \u2192 preview \u2192 apply",
1667
1671
  bulkPreviewTitle: "Proposed meta corrections",
1668
1672
  bulkApply: "Apply",
1669
1673
  bulkApplying: "Applying\u2026",
@@ -9538,9 +9542,9 @@ function SeoView() {
9538
9542
  },
9539
9543
  [selectedIds, fetchAudit]
9540
9544
  );
9541
- const handleBulkOptimizeMeta = useCallback(async () => {
9542
- const ids = Array.from(selectedIds).filter((k) => !k.startsWith("global:"));
9543
- if (ids.length === 0) return;
9545
+ const runBulkPreview = useCallback(async (ids) => {
9546
+ const clean = ids.filter((k) => !k.startsWith("global:"));
9547
+ if (clean.length === 0) return;
9544
9548
  setBulkOptimizing(true);
9545
9549
  setBulkPreview(null);
9546
9550
  try {
@@ -9548,7 +9552,7 @@ function SeoView() {
9548
9552
  method: "POST",
9549
9553
  headers: { "Content-Type": "application/json" },
9550
9554
  credentials: "include",
9551
- body: JSON.stringify({ ids, apply: false, limit: 100 })
9555
+ body: JSON.stringify({ ids: clean, apply: false, limit: 100 })
9552
9556
  });
9553
9557
  if (res.ok) {
9554
9558
  const data = await res.json();
@@ -9558,7 +9562,15 @@ function SeoView() {
9558
9562
  } catch {
9559
9563
  }
9560
9564
  setBulkOptimizing(false);
9561
- }, [selectedIds]);
9565
+ }, []);
9566
+ const handleBulkOptimizeMeta = useCallback(
9567
+ () => runBulkPreview(Array.from(selectedIds)),
9568
+ [selectedIds, runBulkPreview]
9569
+ );
9570
+ const handleOptimizeSite = useCallback(() => {
9571
+ const targets = items.filter((i) => !i.collection.startsWith("global:")).filter((i) => !i.metaTitle || !i.metaDescription || !i.focusKeyword || i.score < 70).slice(0, 100).map(itemKey);
9572
+ runBulkPreview(targets);
9573
+ }, [items, runBulkPreview]);
9562
9574
  const handleBulkApplyPreview = useCallback(async () => {
9563
9575
  if (!bulkPreview || bulkPreview.results.length === 0) return;
9564
9576
  setBulkApplying(true);
@@ -9925,6 +9937,16 @@ function SeoView() {
9925
9937
  ] })
9926
9938
  ] }),
9927
9939
  /* @__PURE__ */ jsxs("div", { style: { display: "flex", gap: 8 }, children: [
9940
+ /* @__PURE__ */ jsx(
9941
+ "button",
9942
+ {
9943
+ onClick: handleOptimizeSite,
9944
+ disabled: bulkOptimizing || items.length === 0,
9945
+ title: t.seoView.optimizeSiteHint,
9946
+ style: { ...btnBase, backgroundColor: "#7c3aed", color: "#fff", opacity: bulkOptimizing || items.length === 0 ? 0.6 : 1 },
9947
+ children: bulkOptimizing ? t.seoView.bulkOptimizing : `\u2728 ${t.seoView.optimizeSite}`
9948
+ }
9949
+ ),
9928
9950
  /* @__PURE__ */ jsxs(
9929
9951
  "button",
9930
9952
  {
@@ -16954,6 +16976,92 @@ function CoreWebVitalsPanel({ locale }) {
16954
16976
  );
16955
16977
  }
16956
16978
  var C5 = {
16979
+ text: "var(--theme-text, #1a1a1a)",
16980
+ sub: "var(--theme-elevation-600, #6b7280)",
16981
+ card: "var(--theme-elevation-50, #f9fafb)",
16982
+ border: "var(--theme-elevation-200, #e5e7eb)",
16983
+ green: "#22c55e",
16984
+ amber: "#f59e0b"
16985
+ };
16986
+ var S2 = {
16987
+ fr: {
16988
+ title: "Sant\xE9 du module SEO",
16989
+ subtitle: "Configuration et \xE9tat des int\xE9grations / jobs (lecture seule).",
16990
+ ok: "Tout est configur\xE9 \u2713",
16991
+ ai: "IA (Claude)",
16992
+ gsc: "Search Console",
16993
+ psi: "PageSpeed",
16994
+ alerts: "Alertes",
16995
+ rank: "Dernier relev\xE9 positions",
16996
+ none: "jamais",
16997
+ warnings: "\xC0 corriger"
16998
+ },
16999
+ en: {
17000
+ title: "SEO module health",
17001
+ subtitle: "Integration & background-job status (read-only).",
17002
+ ok: "All configured \u2713",
17003
+ ai: "AI (Claude)",
17004
+ gsc: "Search Console",
17005
+ psi: "PageSpeed",
17006
+ alerts: "Alerts",
17007
+ rank: "Last rank snapshot",
17008
+ none: "never",
17009
+ warnings: "To fix"
17010
+ }
17011
+ };
17012
+ function HealthPanel({ locale }) {
17013
+ const s = S2[locale] ?? S2.fr;
17014
+ const [h, setH] = useState(null);
17015
+ const load = useCallback(async () => {
17016
+ try {
17017
+ const res = await fetch("/api/seo-plugin/health", { credentials: "include", cache: "no-store" });
17018
+ if (res.ok) setH(await res.json());
17019
+ } catch {
17020
+ }
17021
+ }, []);
17022
+ useEffect(() => {
17023
+ void load();
17024
+ }, [load]);
17025
+ if (!h) return null;
17026
+ const card = { padding: 16, borderRadius: 12, border: `1px solid ${C5.border}`, backgroundColor: C5.card, marginBottom: 20 };
17027
+ const dot = (on) => ({
17028
+ display: "inline-block",
17029
+ width: 8,
17030
+ height: 8,
17031
+ borderRadius: 999,
17032
+ marginRight: 6,
17033
+ backgroundColor: on ? C5.green : C5.sub
17034
+ });
17035
+ const chip = (label, on) => /* @__PURE__ */ jsxs("span", { style: { fontSize: 12, color: C5.text, marginRight: 14, whiteSpace: "nowrap" }, children: [
17036
+ /* @__PURE__ */ jsx("span", { style: dot(on) }),
17037
+ label
17038
+ ] });
17039
+ return /* @__PURE__ */ jsxs("div", { style: card, children: [
17040
+ /* @__PURE__ */ jsxs("div", { style: { display: "flex", justifyContent: "space-between", alignItems: "center", gap: 8, flexWrap: "wrap" }, children: [
17041
+ /* @__PURE__ */ jsxs("div", { children: [
17042
+ /* @__PURE__ */ jsx("div", { style: { fontSize: 16, fontWeight: 800, color: C5.text }, children: s.title }),
17043
+ /* @__PURE__ */ jsx("div", { style: { fontSize: 12, color: C5.sub, marginTop: 2 }, children: s.subtitle })
17044
+ ] }),
17045
+ /* @__PURE__ */ jsx("span", { style: { fontSize: 12, fontWeight: 700, color: h.ok ? C5.green : C5.amber }, children: h.ok ? s.ok : `${h.warnings.length} \u26A0` })
17046
+ ] }),
17047
+ /* @__PURE__ */ jsxs("div", { style: { marginTop: 12, display: "flex", flexWrap: "wrap", rowGap: 6 }, children: [
17048
+ chip(s.ai, h.config.aiKey),
17049
+ chip(s.gsc, h.config.gscConfigured && h.runtime.gscConnected),
17050
+ chip(s.psi, h.config.pageSpeedKey),
17051
+ chip(s.alerts, h.config.alertWebhook || h.config.alertEmail),
17052
+ /* @__PURE__ */ jsxs("span", { style: { fontSize: 12, color: C5.sub, whiteSpace: "nowrap" }, children: [
17053
+ s.rank,
17054
+ ": ",
17055
+ h.runtime.lastRankSnapshot ? new Date(h.runtime.lastRankSnapshot).toLocaleDateString(locale) : s.none
17056
+ ] })
17057
+ ] }),
17058
+ h.warnings.length > 0 && /* @__PURE__ */ jsxs("div", { style: { marginTop: 12 }, children: [
17059
+ /* @__PURE__ */ jsx("div", { style: { fontSize: 11, fontWeight: 700, color: C5.amber, textTransform: "uppercase", marginBottom: 4 }, children: s.warnings }),
17060
+ /* @__PURE__ */ jsx("ul", { style: { margin: 0, paddingLeft: 18, fontSize: 12, color: C5.sub, lineHeight: 1.6 }, children: h.warnings.map((w, i) => /* @__PURE__ */ jsx("li", { children: w }, i)) })
17061
+ ] })
17062
+ ] });
17063
+ }
17064
+ var C6 = {
16957
17065
  text: "var(--theme-text, #1a1a1a)",
16958
17066
  sub: "var(--theme-elevation-600, #6b7280)",
16959
17067
  card: "var(--theme-elevation-50, #f9fafb)",
@@ -16963,7 +17071,7 @@ var C5 = {
16963
17071
  red: "#ef4444",
16964
17072
  blue: "#3b82f6"
16965
17073
  };
16966
- var S2 = {
17074
+ var S3 = {
16967
17075
  fr: {
16968
17076
  title: "Google Search Console",
16969
17077
  subtitle: "Connexion OAuth pour importer automatiquement clics, impressions et positions r\xE9elles.",
@@ -17010,7 +17118,7 @@ var S2 = {
17010
17118
  }
17011
17119
  };
17012
17120
  function GscPanel({ locale }) {
17013
- const s = S2[locale] ?? S2.fr;
17121
+ const s = S3[locale] ?? S3.fr;
17014
17122
  const [status, setStatus] = useState(null);
17015
17123
  const [busy, setBusy] = useState(false);
17016
17124
  const [error, setError] = useState(null);
@@ -17077,9 +17185,9 @@ function GscPanel({ locale }) {
17077
17185
  const btn = (primary) => ({
17078
17186
  padding: "8px 12px",
17079
17187
  borderRadius: 8,
17080
- border: `1px solid ${primary ? C5.blue : C5.border}`,
17081
- backgroundColor: primary ? C5.blue : C5.bg,
17082
- color: primary ? "#fff" : C5.text,
17188
+ border: `1px solid ${primary ? C6.blue : C6.border}`,
17189
+ backgroundColor: primary ? C6.blue : C6.bg,
17190
+ color: primary ? "#fff" : C6.text,
17083
17191
  fontSize: 12,
17084
17192
  fontWeight: 700,
17085
17193
  cursor: "pointer",
@@ -17088,21 +17196,21 @@ function GscPanel({ locale }) {
17088
17196
  const card = {
17089
17197
  padding: 16,
17090
17198
  borderRadius: 12,
17091
- border: `1px solid ${C5.border}`,
17092
- backgroundColor: C5.card,
17199
+ border: `1px solid ${C6.border}`,
17200
+ backgroundColor: C6.card,
17093
17201
  marginBottom: 20
17094
17202
  };
17095
17203
  if (!status) {
17096
17204
  return /* @__PURE__ */ jsxs("div", { style: card, children: [
17097
- /* @__PURE__ */ jsx("div", { style: { fontSize: 16, fontWeight: 800, color: C5.text }, children: s.title }),
17098
- /* @__PURE__ */ jsx("div", { style: { fontSize: 12, color: C5.sub, marginTop: 6 }, children: "\u2026" })
17205
+ /* @__PURE__ */ jsx("div", { style: { fontSize: 16, fontWeight: 800, color: C6.text }, children: s.title }),
17206
+ /* @__PURE__ */ jsx("div", { style: { fontSize: 12, color: C6.sub, marginTop: 6 }, children: "\u2026" })
17099
17207
  ] });
17100
17208
  }
17101
17209
  return /* @__PURE__ */ jsxs("div", { style: card, children: [
17102
17210
  /* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center", justifyContent: "space-between", gap: 8, flexWrap: "wrap" }, children: [
17103
17211
  /* @__PURE__ */ jsxs("div", { children: [
17104
- /* @__PURE__ */ jsx("div", { style: { fontSize: 16, fontWeight: 800, color: C5.text }, children: s.title }),
17105
- /* @__PURE__ */ jsx("div", { style: { fontSize: 12, color: C5.sub, marginTop: 2 }, children: s.subtitle })
17212
+ /* @__PURE__ */ jsx("div", { style: { fontSize: 16, fontWeight: 800, color: C6.text }, children: s.title }),
17213
+ /* @__PURE__ */ jsx("div", { style: { fontSize: 12, color: C6.sub, marginTop: 2 }, children: s.subtitle })
17106
17214
  ] }),
17107
17215
  /* @__PURE__ */ jsx(
17108
17216
  "span",
@@ -17113,14 +17221,14 @@ function GscPanel({ locale }) {
17113
17221
  padding: "4px 10px",
17114
17222
  borderRadius: 999,
17115
17223
  color: "#fff",
17116
- backgroundColor: status.connected ? C5.green : C5.sub
17224
+ backgroundColor: status.connected ? C6.green : C6.sub
17117
17225
  },
17118
17226
  children: status.connected ? "\u25CF " + s.connectedAs : "\u25CB"
17119
17227
  }
17120
17228
  )
17121
17229
  ] }),
17122
- error && /* @__PURE__ */ jsx("div", { style: { color: C5.red, fontSize: 13, fontWeight: 600, marginTop: 10 }, children: error }),
17123
- !status.configured && /* @__PURE__ */ jsxs("div", { style: { marginTop: 12, fontSize: 13, color: C5.sub, lineHeight: 1.5 }, children: [
17230
+ error && /* @__PURE__ */ jsx("div", { style: { color: C6.red, fontSize: 13, fontWeight: 600, marginTop: 10 }, children: error }),
17231
+ !status.configured && /* @__PURE__ */ jsxs("div", { style: { marginTop: 12, fontSize: 13, color: C6.sub, lineHeight: 1.5 }, children: [
17124
17232
  s.notConfigured,
17125
17233
  status.redirectUri && /* @__PURE__ */ jsxs("div", { style: { marginTop: 8 }, children: [
17126
17234
  /* @__PURE__ */ jsx("span", { style: { fontWeight: 700 }, children: s.redirectHint }),
@@ -17131,10 +17239,10 @@ function GscPanel({ locale }) {
17131
17239
  status.configured && !status.connected && /* @__PURE__ */ jsxs("div", { style: { marginTop: 12 }, children: [
17132
17240
  /* @__PURE__ */ jsx("button", { type: "button", onClick: connect, disabled: busy, style: btn(true), children: s.connect }),
17133
17241
  /* @__PURE__ */ jsx("button", { type: "button", onClick: () => void loadStatus(), disabled: busy, style: { ...btn(false), marginLeft: 8 }, children: s.refreshStatus }),
17134
- /* @__PURE__ */ jsx("div", { style: { fontSize: 11, color: C5.sub, marginTop: 8 }, children: s.connectHint })
17242
+ /* @__PURE__ */ jsx("div", { style: { fontSize: 11, color: C6.sub, marginTop: 8 }, children: s.connectHint })
17135
17243
  ] }),
17136
17244
  status.configured && status.connected && /* @__PURE__ */ jsxs("div", { style: { marginTop: 12 }, children: [
17137
- /* @__PURE__ */ jsxs("div", { style: { fontSize: 12, color: C5.sub, marginBottom: 10 }, children: [
17245
+ /* @__PURE__ */ jsxs("div", { style: { fontSize: 12, color: C6.sub, marginBottom: 10 }, children: [
17138
17246
  s.connectedAs,
17139
17247
  status.connectedEmail ? ` \xB7 ${status.connectedEmail}` : "",
17140
17248
  status.propertyUrl ? ` \xB7 ${status.propertyUrl}` : ""
@@ -17144,17 +17252,17 @@ function GscPanel({ locale }) {
17144
17252
  /* @__PURE__ */ jsx("button", { type: "button", onClick: () => void fetchData("page"), disabled: dataLoading, style: btn(dimension === "page"), children: s.byPage }),
17145
17253
  /* @__PURE__ */ jsx("button", { type: "button", onClick: disconnect, disabled: busy, style: btn(false), children: s.disconnect })
17146
17254
  ] }),
17147
- dataLoading && /* @__PURE__ */ jsx("div", { style: { fontSize: 13, color: C5.sub }, children: s.fetching }),
17148
- rows && rows.length === 0 && /* @__PURE__ */ jsx("div", { style: { fontSize: 13, color: C5.sub }, children: s.noData }),
17255
+ dataLoading && /* @__PURE__ */ jsx("div", { style: { fontSize: 13, color: C6.sub }, children: s.fetching }),
17256
+ rows && rows.length === 0 && /* @__PURE__ */ jsx("div", { style: { fontSize: 13, color: C6.sub }, children: s.noData }),
17149
17257
  rows && rows.length > 0 && /* @__PURE__ */ jsx("div", { style: { overflowX: "auto" }, children: /* @__PURE__ */ jsxs("table", { style: { width: "100%", borderCollapse: "collapse", fontSize: 12 }, children: [
17150
- /* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsxs("tr", { style: { textAlign: "left", color: C5.sub }, children: [
17258
+ /* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsxs("tr", { style: { textAlign: "left", color: C6.sub }, children: [
17151
17259
  /* @__PURE__ */ jsx("th", { style: { padding: "6px 8px" }, children: dimension === "query" ? s.query : s.page }),
17152
17260
  /* @__PURE__ */ jsx("th", { style: { padding: "6px 8px", textAlign: "right" }, children: s.clicks }),
17153
17261
  /* @__PURE__ */ jsx("th", { style: { padding: "6px 8px", textAlign: "right" }, children: s.impressions }),
17154
17262
  /* @__PURE__ */ jsx("th", { style: { padding: "6px 8px", textAlign: "right" }, children: s.ctr }),
17155
17263
  /* @__PURE__ */ jsx("th", { style: { padding: "6px 8px", textAlign: "right" }, children: s.position })
17156
17264
  ] }) }),
17157
- /* @__PURE__ */ jsx("tbody", { children: rows.map((r, i) => /* @__PURE__ */ jsxs("tr", { style: { borderTop: `1px solid ${C5.border}`, color: C5.text }, children: [
17265
+ /* @__PURE__ */ jsx("tbody", { children: rows.map((r, i) => /* @__PURE__ */ jsxs("tr", { style: { borderTop: `1px solid ${C6.border}`, color: C6.text }, children: [
17158
17266
  /* @__PURE__ */ jsx("td", { style: { padding: "6px 8px", maxWidth: 320, overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" }, children: r.keys?.[0] || "\u2014" }),
17159
17267
  /* @__PURE__ */ jsx("td", { style: { padding: "6px 8px", textAlign: "right", fontWeight: 700 }, children: r.clicks }),
17160
17268
  /* @__PURE__ */ jsx("td", { style: { padding: "6px 8px", textAlign: "right" }, children: r.impressions }),
@@ -17168,7 +17276,7 @@ function GscPanel({ locale }) {
17168
17276
  ] })
17169
17277
  ] });
17170
17278
  }
17171
- var C6 = {
17279
+ var C7 = {
17172
17280
  text: "var(--theme-text, #1a1a1a)",
17173
17281
  sub: "var(--theme-elevation-600, #6b7280)",
17174
17282
  card: "var(--theme-elevation-50, #f9fafb)",
@@ -17177,7 +17285,7 @@ var C6 = {
17177
17285
  red: "#ef4444",
17178
17286
  blue: "#3b82f6"
17179
17287
  };
17180
- var S3 = {
17288
+ var S4 = {
17181
17289
  fr: {
17182
17290
  title: "Suivi de positions (rank tracking)",
17183
17291
  subtitle: "Historique quotidien des positions Google (via Search Console) et mouvements dans le temps.",
@@ -17214,7 +17322,7 @@ var S3 = {
17214
17322
  }
17215
17323
  };
17216
17324
  function RankTrackingPanel({ locale }) {
17217
- const s = S3[locale] ?? S3.fr;
17325
+ const s = S4[locale] ?? S4.fr;
17218
17326
  const [movers, setMovers] = useState(null);
17219
17327
  const [lastSnapshot, setLastSnapshot] = useState(null);
17220
17328
  const [loading, setLoading] = useState(true);
@@ -17271,15 +17379,15 @@ function RankTrackingPanel({ locale }) {
17271
17379
  const card = {
17272
17380
  padding: 16,
17273
17381
  borderRadius: 12,
17274
- border: `1px solid ${C6.border}`,
17275
- backgroundColor: C6.card,
17382
+ border: `1px solid ${C7.border}`,
17383
+ backgroundColor: C7.card,
17276
17384
  marginBottom: 20
17277
17385
  };
17278
17386
  const btn = {
17279
17387
  padding: "8px 12px",
17280
17388
  borderRadius: 8,
17281
- border: `1px solid ${C6.blue}`,
17282
- backgroundColor: C6.blue,
17389
+ border: `1px solid ${C7.blue}`,
17390
+ backgroundColor: C7.blue,
17283
17391
  color: "#fff",
17284
17392
  fontSize: 12,
17285
17393
  fontWeight: 700,
@@ -17288,16 +17396,16 @@ function RankTrackingPanel({ locale }) {
17288
17396
  };
17289
17397
  const renderDelta = (m) => {
17290
17398
  if (m.previousPosition === null) {
17291
- return /* @__PURE__ */ jsx("span", { style: { color: C6.sub, fontSize: 11 }, children: s.newQ });
17399
+ return /* @__PURE__ */ jsx("span", { style: { color: C7.sub, fontSize: 11 }, children: s.newQ });
17292
17400
  }
17293
17401
  if (Math.abs(m.delta) < 0.1) {
17294
- return /* @__PURE__ */ jsxs("span", { style: { color: C6.sub, fontSize: 11 }, children: [
17402
+ return /* @__PURE__ */ jsxs("span", { style: { color: C7.sub, fontSize: 11 }, children: [
17295
17403
  "\u2014 ",
17296
17404
  s.stable
17297
17405
  ] });
17298
17406
  }
17299
17407
  const up = m.delta > 0;
17300
- return /* @__PURE__ */ jsxs("span", { style: { color: up ? C6.green : C6.red, fontWeight: 700, fontSize: 12 }, children: [
17408
+ return /* @__PURE__ */ jsxs("span", { style: { color: up ? C7.green : C7.red, fontWeight: 700, fontSize: 12 }, children: [
17301
17409
  up ? "\u25B2" : "\u25BC",
17302
17410
  " ",
17303
17411
  Math.abs(m.delta).toFixed(1)
@@ -17306,31 +17414,31 @@ function RankTrackingPanel({ locale }) {
17306
17414
  return /* @__PURE__ */ jsxs("div", { style: card, children: [
17307
17415
  /* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center", justifyContent: "space-between", gap: 8, flexWrap: "wrap" }, children: [
17308
17416
  /* @__PURE__ */ jsxs("div", { children: [
17309
- /* @__PURE__ */ jsx("div", { style: { fontSize: 16, fontWeight: 800, color: C6.text }, children: s.title }),
17310
- /* @__PURE__ */ jsx("div", { style: { fontSize: 12, color: C6.sub, marginTop: 2 }, children: s.subtitle })
17417
+ /* @__PURE__ */ jsx("div", { style: { fontSize: 16, fontWeight: 800, color: C7.text }, children: s.title }),
17418
+ /* @__PURE__ */ jsx("div", { style: { fontSize: 12, color: C7.sub, marginTop: 2 }, children: s.subtitle })
17311
17419
  ] }),
17312
17420
  !notConnected && /* @__PURE__ */ jsx("button", { type: "button", onClick: snapshotNow, disabled: busy, style: btn, children: busy ? s.snapshotting : s.snapshot })
17313
17421
  ] }),
17314
- error && /* @__PURE__ */ jsx("div", { style: { color: C6.red, fontSize: 13, fontWeight: 600, marginTop: 10 }, children: error }),
17315
- notConnected && /* @__PURE__ */ jsx("div", { style: { marginTop: 12, fontSize: 13, color: C6.sub }, children: s.needGsc }),
17422
+ error && /* @__PURE__ */ jsx("div", { style: { color: C7.red, fontSize: 13, fontWeight: 600, marginTop: 10 }, children: error }),
17423
+ notConnected && /* @__PURE__ */ jsx("div", { style: { marginTop: 12, fontSize: 13, color: C7.sub }, children: s.needGsc }),
17316
17424
  !notConnected && /* @__PURE__ */ jsxs("div", { style: { marginTop: 12 }, children: [
17317
- lastSnapshot && /* @__PURE__ */ jsxs("div", { style: { fontSize: 11, color: C6.sub, marginBottom: 8 }, children: [
17425
+ lastSnapshot && /* @__PURE__ */ jsxs("div", { style: { fontSize: 11, color: C7.sub, marginBottom: 8 }, children: [
17318
17426
  s.lastSnapshot,
17319
17427
  ": ",
17320
17428
  new Date(lastSnapshot).toLocaleString(locale),
17321
17429
  movers ? ` \xB7 ${movers.length} ${s.countLabel}` : ""
17322
17430
  ] }),
17323
- loading && !movers && /* @__PURE__ */ jsx("div", { style: { fontSize: 13, color: C6.sub }, children: "\u2026" }),
17324
- movers && movers.length === 0 && /* @__PURE__ */ jsx("div", { style: { fontSize: 13, color: C6.sub }, children: s.noData }),
17431
+ loading && !movers && /* @__PURE__ */ jsx("div", { style: { fontSize: 13, color: C7.sub }, children: "\u2026" }),
17432
+ movers && movers.length === 0 && /* @__PURE__ */ jsx("div", { style: { fontSize: 13, color: C7.sub }, children: s.noData }),
17325
17433
  movers && movers.length > 0 && /* @__PURE__ */ jsx("div", { style: { overflowX: "auto" }, children: /* @__PURE__ */ jsxs("table", { style: { width: "100%", borderCollapse: "collapse", fontSize: 12 }, children: [
17326
- /* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsxs("tr", { style: { textAlign: "left", color: C6.sub }, children: [
17434
+ /* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsxs("tr", { style: { textAlign: "left", color: C7.sub }, children: [
17327
17435
  /* @__PURE__ */ jsx("th", { style: { padding: "6px 8px" }, children: s.query }),
17328
17436
  /* @__PURE__ */ jsx("th", { style: { padding: "6px 8px", textAlign: "right" }, children: s.position }),
17329
17437
  /* @__PURE__ */ jsx("th", { style: { padding: "6px 8px", textAlign: "right" }, children: s.change }),
17330
17438
  /* @__PURE__ */ jsx("th", { style: { padding: "6px 8px", textAlign: "right" }, children: s.clicks }),
17331
17439
  /* @__PURE__ */ jsx("th", { style: { padding: "6px 8px", textAlign: "right" }, children: s.impressions })
17332
17440
  ] }) }),
17333
- /* @__PURE__ */ jsx("tbody", { children: movers.slice(0, 100).map((m, i) => /* @__PURE__ */ jsxs("tr", { style: { borderTop: `1px solid ${C6.border}`, color: C6.text }, children: [
17441
+ /* @__PURE__ */ jsx("tbody", { children: movers.slice(0, 100).map((m, i) => /* @__PURE__ */ jsxs("tr", { style: { borderTop: `1px solid ${C7.border}`, color: C7.text }, children: [
17334
17442
  /* @__PURE__ */ jsx("td", { style: { padding: "6px 8px", maxWidth: 320, overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" }, children: m.query }),
17335
17443
  /* @__PURE__ */ jsx("td", { style: { padding: "6px 8px", textAlign: "right", fontWeight: 700 }, children: m.position.toFixed(1) }),
17336
17444
  /* @__PURE__ */ jsx("td", { style: { padding: "6px 8px", textAlign: "right" }, children: renderDelta(m) }),
@@ -17341,7 +17449,7 @@ function RankTrackingPanel({ locale }) {
17341
17449
  ] })
17342
17450
  ] });
17343
17451
  }
17344
- var C7 = {
17452
+ var C8 = {
17345
17453
  text: "var(--theme-text, #1a1a1a)",
17346
17454
  sub: "var(--theme-elevation-600, #6b7280)",
17347
17455
  card: "var(--theme-elevation-50, #f9fafb)",
@@ -17351,7 +17459,7 @@ var C7 = {
17351
17459
  amber: "#f59e0b",
17352
17460
  violet: "#7c3aed"
17353
17461
  };
17354
- var S4 = {
17462
+ var S5 = {
17355
17463
  fr: {
17356
17464
  title: "Opportunit\xE9s CTR (faible clic / bonne position)",
17357
17465
  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.",
@@ -17392,7 +17500,7 @@ var S4 = {
17392
17500
  }
17393
17501
  };
17394
17502
  function CtrOpportunitiesPanel({ locale }) {
17395
- const s = S4[locale] ?? S4.fr;
17503
+ const s = S5[locale] ?? S5.fr;
17396
17504
  const [opps, setOpps] = useState(null);
17397
17505
  const [loading, setLoading] = useState(true);
17398
17506
  const [notConnected, setNotConnected] = useState(false);
@@ -17467,7 +17575,7 @@ function CtrOpportunitiesPanel({ locale }) {
17467
17575
  setRow(o.url, { busy: false, error: e instanceof Error ? e.message : "Network error" });
17468
17576
  }
17469
17577
  };
17470
- const card = { padding: 16, borderRadius: 12, border: `1px solid ${C7.border}`, backgroundColor: C7.card, marginBottom: 20 };
17578
+ const card = { padding: 16, borderRadius: 12, border: `1px solid ${C8.border}`, backgroundColor: C8.card, marginBottom: 20 };
17471
17579
  const btn = (bg) => ({
17472
17580
  padding: "5px 10px",
17473
17581
  borderRadius: 6,
@@ -17481,17 +17589,17 @@ function CtrOpportunitiesPanel({ locale }) {
17481
17589
  return /* @__PURE__ */ jsxs("div", { style: card, children: [
17482
17590
  /* @__PURE__ */ jsxs("div", { style: { display: "flex", justifyContent: "space-between", alignItems: "center", gap: 8, flexWrap: "wrap" }, children: [
17483
17591
  /* @__PURE__ */ jsxs("div", { children: [
17484
- /* @__PURE__ */ jsx("div", { style: { fontSize: 16, fontWeight: 800, color: C7.text }, children: s.title }),
17485
- /* @__PURE__ */ jsx("div", { style: { fontSize: 12, color: C7.sub, marginTop: 2 }, children: s.subtitle })
17592
+ /* @__PURE__ */ jsx("div", { style: { fontSize: 16, fontWeight: 800, color: C8.text }, children: s.title }),
17593
+ /* @__PURE__ */ jsx("div", { style: { fontSize: 12, color: C8.sub, marginTop: 2 }, children: s.subtitle })
17486
17594
  ] }),
17487
- !notConnected && /* @__PURE__ */ jsx("button", { type: "button", onClick: () => void load(), style: btn(C7.sub), children: s.refresh })
17595
+ !notConnected && /* @__PURE__ */ jsx("button", { type: "button", onClick: () => void load(), style: btn(C8.sub), children: s.refresh })
17488
17596
  ] }),
17489
- error && /* @__PURE__ */ jsx("div", { style: { color: C7.red, fontSize: 13, fontWeight: 600, marginTop: 10 }, children: error }),
17490
- notConnected && /* @__PURE__ */ jsx("div", { style: { marginTop: 12, fontSize: 13, color: C7.sub }, children: s.needGsc }),
17491
- loading && !notConnected && /* @__PURE__ */ jsx("div", { style: { marginTop: 12, fontSize: 13, color: C7.sub }, children: s.loading }),
17492
- !loading && !notConnected && opps && opps.length === 0 && /* @__PURE__ */ jsx("div", { style: { marginTop: 12, fontSize: 13, color: C7.sub }, children: s.none }),
17597
+ error && /* @__PURE__ */ jsx("div", { style: { color: C8.red, fontSize: 13, fontWeight: 600, marginTop: 10 }, children: error }),
17598
+ notConnected && /* @__PURE__ */ jsx("div", { style: { marginTop: 12, fontSize: 13, color: C8.sub }, children: s.needGsc }),
17599
+ loading && !notConnected && /* @__PURE__ */ jsx("div", { style: { marginTop: 12, fontSize: 13, color: C8.sub }, children: s.loading }),
17600
+ !loading && !notConnected && opps && opps.length === 0 && /* @__PURE__ */ jsx("div", { style: { marginTop: 12, fontSize: 13, color: C8.sub }, children: s.none }),
17493
17601
  !notConnected && opps && opps.length > 0 && /* @__PURE__ */ jsx("div", { style: { overflowX: "auto", marginTop: 12 }, children: /* @__PURE__ */ jsxs("table", { style: { width: "100%", borderCollapse: "collapse", fontSize: 12 }, children: [
17494
- /* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsxs("tr", { style: { textAlign: "left", color: C7.sub }, children: [
17602
+ /* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsxs("tr", { style: { textAlign: "left", color: C8.sub }, children: [
17495
17603
  /* @__PURE__ */ jsx("th", { style: { padding: "6px 8px" }, children: s.page }),
17496
17604
  /* @__PURE__ */ jsx("th", { style: { padding: "6px 8px", textAlign: "right" }, children: s.pos }),
17497
17605
  /* @__PURE__ */ jsx("th", { style: { padding: "6px 8px", textAlign: "right" }, children: s.ctr }),
@@ -17508,41 +17616,41 @@ function CtrOpportunitiesPanel({ locale }) {
17508
17616
  }
17509
17617
  })();
17510
17618
  return /* @__PURE__ */ jsxs(React4.Fragment, { children: [
17511
- /* @__PURE__ */ jsxs("tr", { style: { borderTop: `1px solid ${C7.border}`, color: C7.text }, children: [
17619
+ /* @__PURE__ */ jsxs("tr", { style: { borderTop: `1px solid ${C8.border}`, color: C8.text }, children: [
17512
17620
  /* @__PURE__ */ jsx("td", { style: { padding: "6px 8px", maxWidth: 320, overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" }, children: path }),
17513
17621
  /* @__PURE__ */ jsx("td", { style: { padding: "6px 8px", textAlign: "right" }, children: o.position.toFixed(1) }),
17514
17622
  /* @__PURE__ */ jsxs("td", { style: { padding: "6px 8px", textAlign: "right" }, children: [
17515
- /* @__PURE__ */ jsxs("span", { style: { color: C7.red }, children: [
17623
+ /* @__PURE__ */ jsxs("span", { style: { color: C8.red }, children: [
17516
17624
  (o.ctr * 100).toFixed(1),
17517
17625
  "%"
17518
17626
  ] }),
17519
- /* @__PURE__ */ jsxs("span", { style: { color: C7.sub }, children: [
17627
+ /* @__PURE__ */ jsxs("span", { style: { color: C8.sub }, children: [
17520
17628
  " / ",
17521
17629
  (o.expectedCtr * 100).toFixed(0),
17522
17630
  "% ",
17523
17631
  s.expected
17524
17632
  ] })
17525
17633
  ] }),
17526
- /* @__PURE__ */ jsxs("td", { style: { padding: "6px 8px", textAlign: "right", fontWeight: 700, color: C7.amber }, children: [
17634
+ /* @__PURE__ */ jsxs("td", { style: { padding: "6px 8px", textAlign: "right", fontWeight: 700, color: C8.amber }, children: [
17527
17635
  "+",
17528
17636
  o.potentialClicks
17529
17637
  ] }),
17530
- /* @__PURE__ */ jsx("td", { style: { padding: "6px 8px", textAlign: "right" }, children: rs.applied ? /* @__PURE__ */ jsx("span", { style: { fontSize: 11, fontWeight: 700, color: C7.green }, children: s.applied }) : o.doc ? rs.suggestion ? /* @__PURE__ */ jsx("button", { type: "button", onClick: () => void apply(o), disabled: rs.busy, style: btn(C7.green), children: rs.busy ? s.optimizing : s.apply }) : /* @__PURE__ */ jsx("button", { type: "button", onClick: () => void optimize(o), disabled: rs.busy, style: btn(C7.violet), children: rs.busy ? s.optimizing : `\u2728 ${s.optimize}` }) : /* @__PURE__ */ jsxs("a", { href: o.url, target: "_blank", rel: "noopener noreferrer", style: { fontSize: 11, color: C7.sub }, children: [
17638
+ /* @__PURE__ */ jsx("td", { style: { padding: "6px 8px", textAlign: "right" }, children: rs.applied ? /* @__PURE__ */ jsx("span", { style: { fontSize: 11, fontWeight: 700, color: C8.green }, children: s.applied }) : o.doc ? rs.suggestion ? /* @__PURE__ */ jsx("button", { type: "button", onClick: () => void apply(o), disabled: rs.busy, style: btn(C8.green), children: rs.busy ? s.optimizing : s.apply }) : /* @__PURE__ */ jsx("button", { type: "button", onClick: () => void optimize(o), disabled: rs.busy, style: btn(C8.violet), children: rs.busy ? s.optimizing : `\u2728 ${s.optimize}` }) : /* @__PURE__ */ jsxs("a", { href: o.url, target: "_blank", rel: "noopener noreferrer", style: { fontSize: 11, color: C8.sub }, children: [
17531
17639
  s.open,
17532
17640
  " \u2197"
17533
17641
  ] }) })
17534
17642
  ] }),
17535
- rs.suggestion && !rs.applied && /* @__PURE__ */ jsx("tr", { style: { color: C7.text }, children: /* @__PURE__ */ jsxs("td", { colSpan: 5, style: { padding: "0 8px 8px 8px" }, children: [
17536
- /* @__PURE__ */ jsx("div", { style: { fontSize: 11, color: C7.green, fontWeight: 600 }, children: rs.suggestion.metaTitle }),
17537
- /* @__PURE__ */ jsx("div", { style: { fontSize: 11, color: C7.sub }, children: rs.suggestion.metaDescription })
17643
+ rs.suggestion && !rs.applied && /* @__PURE__ */ jsx("tr", { style: { color: C8.text }, children: /* @__PURE__ */ jsxs("td", { colSpan: 5, style: { padding: "0 8px 8px 8px" }, children: [
17644
+ /* @__PURE__ */ jsx("div", { style: { fontSize: 11, color: C8.green, fontWeight: 600 }, children: rs.suggestion.metaTitle }),
17645
+ /* @__PURE__ */ jsx("div", { style: { fontSize: 11, color: C8.sub }, children: rs.suggestion.metaDescription })
17538
17646
  ] }) }),
17539
- rs.error && /* @__PURE__ */ jsx("tr", { children: /* @__PURE__ */ jsx("td", { colSpan: 5, style: { padding: "0 8px 6px 8px", fontSize: 11, color: C7.red }, children: rs.error }) })
17647
+ rs.error && /* @__PURE__ */ jsx("tr", { children: /* @__PURE__ */ jsx("td", { colSpan: 5, style: { padding: "0 8px 6px 8px", fontSize: 11, color: C8.red }, children: rs.error }) })
17540
17648
  ] }, o.url);
17541
17649
  }) })
17542
17650
  ] }) })
17543
17651
  ] });
17544
17652
  }
17545
- var C8 = {
17653
+ var C9 = {
17546
17654
  text: "var(--theme-text, #1a1a1a)",
17547
17655
  sub: "var(--theme-elevation-600, #6b7280)",
17548
17656
  card: "var(--theme-elevation-50, #f9fafb)",
@@ -17552,7 +17660,7 @@ var C8 = {
17552
17660
  amber: "#f59e0b",
17553
17661
  blue: "#3b82f6"
17554
17662
  };
17555
- var S5 = {
17663
+ var S6 = {
17556
17664
  fr: {
17557
17665
  title: "Monitoring & alertes",
17558
17666
  subtitle: "Digest p\xE9riodique : r\xE9gressions de score, nouveaux 404, chutes de position (webhook / email).",
@@ -17595,7 +17703,7 @@ var S5 = {
17595
17703
  }
17596
17704
  };
17597
17705
  function AlertsPanel({ locale }) {
17598
- const s = S5[locale] ?? S5.fr;
17706
+ const s = S6[locale] ?? S6.fr;
17599
17707
  const [digest, setDigest] = useState(null);
17600
17708
  const [config, setConfig] = useState(null);
17601
17709
  const [loading, setLoading] = useState(true);
@@ -17650,15 +17758,15 @@ function AlertsPanel({ locale }) {
17650
17758
  const card = {
17651
17759
  padding: 16,
17652
17760
  borderRadius: 12,
17653
- border: `1px solid ${C8.border}`,
17654
- backgroundColor: C8.card,
17761
+ border: `1px solid ${C9.border}`,
17762
+ backgroundColor: C9.card,
17655
17763
  marginBottom: 20
17656
17764
  };
17657
17765
  const btn = {
17658
17766
  padding: "8px 12px",
17659
17767
  borderRadius: 8,
17660
- border: `1px solid ${C8.blue}`,
17661
- backgroundColor: C8.blue,
17768
+ border: `1px solid ${C9.blue}`,
17769
+ backgroundColor: C9.blue,
17662
17770
  color: "#fff",
17663
17771
  fontSize: 12,
17664
17772
  fontWeight: 700,
@@ -17671,32 +17779,32 @@ function AlertsPanel({ locale }) {
17671
17779
  padding: "3px 8px",
17672
17780
  borderRadius: 999,
17673
17781
  color: "#fff",
17674
- backgroundColor: ok ? C8.green : C8.sub,
17782
+ backgroundColor: ok ? C9.green : C9.sub,
17675
17783
  marginRight: 6
17676
17784
  });
17677
17785
  const hasChannel = config && (config.webhookConfigured || config.emailConfigured);
17678
17786
  const list = (title, rows) => rows.length ? /* @__PURE__ */ jsxs("div", { style: { marginTop: 10 }, children: [
17679
- /* @__PURE__ */ jsxs("div", { style: { fontSize: 12, fontWeight: 700, color: C8.text, marginBottom: 4 }, children: [
17787
+ /* @__PURE__ */ jsxs("div", { style: { fontSize: 12, fontWeight: 700, color: C9.text, marginBottom: 4 }, children: [
17680
17788
  title,
17681
17789
  " ",
17682
- /* @__PURE__ */ jsxs("span", { style: { color: C8.amber }, children: [
17790
+ /* @__PURE__ */ jsxs("span", { style: { color: C9.amber }, children: [
17683
17791
  "(",
17684
17792
  rows.length,
17685
17793
  ")"
17686
17794
  ] })
17687
17795
  ] }),
17688
- /* @__PURE__ */ jsx("ul", { style: { margin: 0, paddingLeft: 18, fontSize: 12, color: C8.sub, lineHeight: 1.6 }, children: rows.slice(0, 8).map((r, i) => /* @__PURE__ */ jsx("li", { children: r }, i)) })
17796
+ /* @__PURE__ */ jsx("ul", { style: { margin: 0, paddingLeft: 18, fontSize: 12, color: C9.sub, lineHeight: 1.6 }, children: rows.slice(0, 8).map((r, i) => /* @__PURE__ */ jsx("li", { children: r }, i)) })
17689
17797
  ] }) : null;
17690
17798
  return /* @__PURE__ */ jsxs("div", { style: card, children: [
17691
17799
  /* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center", justifyContent: "space-between", gap: 8, flexWrap: "wrap" }, children: [
17692
17800
  /* @__PURE__ */ jsxs("div", { children: [
17693
- /* @__PURE__ */ jsx("div", { style: { fontSize: 16, fontWeight: 800, color: C8.text }, children: s.title }),
17694
- /* @__PURE__ */ jsx("div", { style: { fontSize: 12, color: C8.sub, marginTop: 2 }, children: s.subtitle })
17801
+ /* @__PURE__ */ jsx("div", { style: { fontSize: 16, fontWeight: 800, color: C9.text }, children: s.title }),
17802
+ /* @__PURE__ */ jsx("div", { style: { fontSize: 12, color: C9.sub, marginTop: 2 }, children: s.subtitle })
17695
17803
  ] }),
17696
17804
  hasChannel && /* @__PURE__ */ jsx("button", { type: "button", onClick: sendNow, disabled: busy, style: btn, children: busy ? s.sending : s.sendNow })
17697
17805
  ] }),
17698
- error && /* @__PURE__ */ jsx("div", { style: { color: C8.red, fontSize: 13, fontWeight: 600, marginTop: 10 }, children: error }),
17699
- notice && /* @__PURE__ */ jsx("div", { style: { color: C8.green, fontSize: 13, fontWeight: 600, marginTop: 10 }, children: notice }),
17806
+ error && /* @__PURE__ */ jsx("div", { style: { color: C9.red, fontSize: 13, fontWeight: 600, marginTop: 10 }, children: error }),
17807
+ notice && /* @__PURE__ */ jsx("div", { style: { color: C9.green, fontSize: 13, fontWeight: 600, marginTop: 10 }, children: notice }),
17700
17808
  config && /* @__PURE__ */ jsxs("div", { style: { marginTop: 12 }, children: [
17701
17809
  /* @__PURE__ */ jsxs("span", { style: chip(config.webhookConfigured, s.webhook), children: [
17702
17810
  s.webhook,
@@ -17709,15 +17817,15 @@ function AlertsPanel({ locale }) {
17709
17817
  config.emailConfigured ? s.configured : s.missing
17710
17818
  ] })
17711
17819
  ] }),
17712
- !loading && !hasChannel && /* @__PURE__ */ jsx("div", { style: { marginTop: 12, fontSize: 13, color: C8.sub }, children: s.notConfigured }),
17713
- loading && /* @__PURE__ */ jsx("div", { style: { marginTop: 12, fontSize: 13, color: C8.sub }, children: s.loading }),
17820
+ !loading && !hasChannel && /* @__PURE__ */ jsx("div", { style: { marginTop: 12, fontSize: 13, color: C9.sub }, children: s.notConfigured }),
17821
+ loading && /* @__PURE__ */ jsx("div", { style: { marginTop: 12, fontSize: 13, color: C9.sub }, children: s.loading }),
17714
17822
  digest && /* @__PURE__ */ jsxs("div", { style: { marginTop: 8 }, children: [
17715
- /* @__PURE__ */ jsxs("div", { style: { fontSize: 12, color: C8.sub, marginTop: 6 }, children: [
17823
+ /* @__PURE__ */ jsxs("div", { style: { fontSize: 12, color: C9.sub, marginTop: 6 }, children: [
17716
17824
  digest.totalIssues,
17717
17825
  " ",
17718
17826
  s.issues
17719
17827
  ] }),
17720
- digest.totalIssues === 0 && /* @__PURE__ */ jsx("div", { style: { marginTop: 8, fontSize: 13, color: C8.sub }, children: s.noIssues }),
17828
+ digest.totalIssues === 0 && /* @__PURE__ */ jsx("div", { style: { marginTop: 8, fontSize: 13, color: C9.sub }, children: s.noIssues }),
17721
17829
  list(
17722
17830
  s.scoreReg,
17723
17831
  digest.scoreRegressions.map((r) => `${r.collection}/${r.documentId} \u2014 ${r.from} \u2192 ${r.to} (\u2212${r.drop})`)
@@ -17727,7 +17835,7 @@ function AlertsPanel({ locale }) {
17727
17835
  ] })
17728
17836
  ] });
17729
17837
  }
17730
- var C9 = {
17838
+ var C10 = {
17731
17839
  text: "var(--theme-text, #1a1a1a)",
17732
17840
  sub: "var(--theme-elevation-600, #6b7280)",
17733
17841
  card: "var(--theme-elevation-50, #f9fafb)",
@@ -17737,7 +17845,7 @@ var C9 = {
17737
17845
  red: "#ef4444",
17738
17846
  violet: "#7c3aed"
17739
17847
  };
17740
- var S6 = {
17848
+ var S7 = {
17741
17849
  fr: {
17742
17850
  title: "Alt-text IA des images",
17743
17851
  subtitle: "G\xE9n\xE8re l'attribut alt des images qui n'en ont pas (Claude vision), pour l'accessibilit\xE9 et le SEO.",
@@ -17770,7 +17878,7 @@ var S6 = {
17770
17878
  }
17771
17879
  };
17772
17880
  function AltTextPanel({ locale }) {
17773
- const s = S6[locale] ?? S6.fr;
17881
+ const s = S7[locale] ?? S7.fr;
17774
17882
  const [items, setItems] = useState(null);
17775
17883
  const [collection, setCollection] = useState("media");
17776
17884
  const [missingCount, setMissingCount] = useState(0);
@@ -17847,8 +17955,8 @@ function AltTextPanel({ locale }) {
17847
17955
  const card = {
17848
17956
  padding: 16,
17849
17957
  borderRadius: 12,
17850
- border: `1px solid ${C9.border}`,
17851
- backgroundColor: C9.card,
17958
+ border: `1px solid ${C10.border}`,
17959
+ backgroundColor: C10.card,
17852
17960
  marginBottom: 20
17853
17961
  };
17854
17962
  const btn = (bg) => ({
@@ -17864,18 +17972,18 @@ function AltTextPanel({ locale }) {
17864
17972
  return /* @__PURE__ */ jsxs("div", { style: card, children: [
17865
17973
  /* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center", justifyContent: "space-between", gap: 8, flexWrap: "wrap" }, children: [
17866
17974
  /* @__PURE__ */ jsxs("div", { children: [
17867
- /* @__PURE__ */ jsx("div", { style: { fontSize: 16, fontWeight: 800, color: C9.text }, children: s.title }),
17868
- /* @__PURE__ */ jsx("div", { style: { fontSize: 12, color: C9.sub, marginTop: 2 }, children: s.subtitle })
17975
+ /* @__PURE__ */ jsx("div", { style: { fontSize: 16, fontWeight: 800, color: C10.text }, children: s.title }),
17976
+ /* @__PURE__ */ jsx("div", { style: { fontSize: 12, color: C10.sub, marginTop: 2 }, children: s.subtitle })
17869
17977
  ] }),
17870
- status === "ok" && /* @__PURE__ */ jsx("button", { type: "button", onClick: () => void load(), style: btn(C9.sub), children: s.refresh })
17978
+ status === "ok" && /* @__PURE__ */ jsx("button", { type: "button", onClick: () => void load(), style: btn(C10.sub), children: s.refresh })
17871
17979
  ] }),
17872
- status === "forbidden" && /* @__PURE__ */ jsx("div", { style: { marginTop: 12, fontSize: 13, color: C9.sub }, children: s.forbidden }),
17873
- status === "disabled" && /* @__PURE__ */ jsx("div", { style: { marginTop: 12, fontSize: 13, color: C9.sub }, children: s.disabled }),
17980
+ status === "forbidden" && /* @__PURE__ */ jsx("div", { style: { marginTop: 12, fontSize: 13, color: C10.sub }, children: s.forbidden }),
17981
+ status === "disabled" && /* @__PURE__ */ jsx("div", { style: { marginTop: 12, fontSize: 13, color: C10.sub }, children: s.disabled }),
17874
17982
  status === "ok" && /* @__PURE__ */ jsxs("div", { style: { marginTop: 12 }, children: [
17875
- loading && /* @__PURE__ */ jsx("div", { style: { fontSize: 13, color: C9.sub }, children: s.loading }),
17876
- !loading && items && items.length === 0 && /* @__PURE__ */ jsx("div", { style: { fontSize: 13, color: C9.sub }, children: s.none }),
17983
+ loading && /* @__PURE__ */ jsx("div", { style: { fontSize: 13, color: C10.sub }, children: s.loading }),
17984
+ !loading && items && items.length === 0 && /* @__PURE__ */ jsx("div", { style: { fontSize: 13, color: C10.sub }, children: s.none }),
17877
17985
  !loading && items && items.length > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
17878
- /* @__PURE__ */ jsxs("div", { style: { fontSize: 12, color: C9.sub, marginBottom: 10 }, children: [
17986
+ /* @__PURE__ */ jsxs("div", { style: { fontSize: 12, color: C10.sub, marginBottom: 10 }, children: [
17879
17987
  missingCount,
17880
17988
  " ",
17881
17989
  s.missing
@@ -17891,8 +17999,8 @@ function AltTextPanel({ locale }) {
17891
17999
  alignItems: "center",
17892
18000
  padding: 8,
17893
18001
  borderRadius: 8,
17894
- border: `1px solid ${C9.border}`,
17895
- backgroundColor: C9.bg
18002
+ border: `1px solid ${C10.border}`,
18003
+ backgroundColor: C10.bg
17896
18004
  },
17897
18005
  children: [
17898
18006
  /* @__PURE__ */ jsx(
@@ -17900,11 +18008,11 @@ function AltTextPanel({ locale }) {
17900
18008
  {
17901
18009
  src: item.url,
17902
18010
  alt: "",
17903
- style: { width: 48, height: 48, objectFit: "cover", borderRadius: 6, flexShrink: 0, border: `1px solid ${C9.border}` }
18011
+ style: { width: 48, height: 48, objectFit: "cover", borderRadius: 6, flexShrink: 0, border: `1px solid ${C10.border}` }
17904
18012
  }
17905
18013
  ),
17906
18014
  /* @__PURE__ */ jsxs("div", { style: { flex: 1, minWidth: 0 }, children: [
17907
- /* @__PURE__ */ jsx("div", { style: { fontSize: 11, color: C9.sub, overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" }, children: item.filename }),
18015
+ /* @__PURE__ */ jsx("div", { style: { fontSize: 11, color: C10.sub, overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" }, children: item.filename }),
17908
18016
  rs.alt !== void 0 ? /* @__PURE__ */ jsx(
17909
18017
  "input",
17910
18018
  {
@@ -17918,15 +18026,15 @@ function AltTextPanel({ locale }) {
17918
18026
  padding: "4px 8px",
17919
18027
  fontSize: 12,
17920
18028
  borderRadius: 6,
17921
- border: `1px solid ${C9.border}`,
17922
- backgroundColor: C9.bg,
17923
- color: C9.text
18029
+ border: `1px solid ${C10.border}`,
18030
+ backgroundColor: C10.bg,
18031
+ color: C10.text
17924
18032
  }
17925
18033
  }
17926
- ) : /* @__PURE__ */ jsx("div", { style: { fontSize: 12, color: C9.sub, marginTop: 4, fontStyle: "italic" }, children: "\u2014" }),
17927
- rs.error && /* @__PURE__ */ jsx("div", { style: { fontSize: 11, color: C9.red, marginTop: 2 }, children: rs.error })
18034
+ ) : /* @__PURE__ */ jsx("div", { style: { fontSize: 12, color: C10.sub, marginTop: 4, fontStyle: "italic" }, children: "\u2014" }),
18035
+ rs.error && /* @__PURE__ */ jsx("div", { style: { fontSize: 11, color: C10.red, marginTop: 2 }, children: rs.error })
17928
18036
  ] }),
17929
- /* @__PURE__ */ jsx("div", { style: { flexShrink: 0 }, children: rs.applied ? /* @__PURE__ */ jsx("span", { style: { fontSize: 11, fontWeight: 700, color: C9.green }, children: s.applied }) : rs.alt !== void 0 ? /* @__PURE__ */ jsx("button", { type: "button", onClick: () => void apply(item), disabled: rs.busy, style: btn(C9.green), children: rs.busy ? s.generating : s.apply }) : /* @__PURE__ */ jsx("button", { type: "button", onClick: () => void generate(item), disabled: rs.busy, style: btn(C9.violet), children: rs.busy ? s.generating : s.generate }) })
18037
+ /* @__PURE__ */ jsx("div", { style: { flexShrink: 0 }, children: rs.applied ? /* @__PURE__ */ jsx("span", { style: { fontSize: 11, fontWeight: 700, color: C10.green }, children: s.applied }) : rs.alt !== void 0 ? /* @__PURE__ */ jsx("button", { type: "button", onClick: () => void apply(item), disabled: rs.busy, style: btn(C10.green), children: rs.busy ? s.generating : s.apply }) : /* @__PURE__ */ jsx("button", { type: "button", onClick: () => void generate(item), disabled: rs.busy, style: btn(C10.violet), children: rs.busy ? s.generating : s.generate }) })
17930
18038
  ]
17931
18039
  },
17932
18040
  item.id
@@ -18348,6 +18456,7 @@ function PerformanceView() {
18348
18456
  ]
18349
18457
  }
18350
18458
  ),
18459
+ /* @__PURE__ */ jsx(HealthPanel, { locale }),
18351
18460
  /* @__PURE__ */ jsx(CoreWebVitalsPanel, { locale }),
18352
18461
  /* @__PURE__ */ jsx(GscPanel, { locale }),
18353
18462
  /* @__PURE__ */ jsx(RankTrackingPanel, { locale }),
@@ -18877,7 +18986,7 @@ function PerformanceView() {
18877
18986
  }
18878
18987
  );
18879
18988
  }
18880
- var C10 = {
18989
+ var C11 = {
18881
18990
  text: "var(--theme-text, #1a1a1a)",
18882
18991
  sub: "var(--theme-elevation-600, #6b7280)",
18883
18992
  card: "var(--theme-elevation-50, #f9fafb)",
@@ -18887,7 +18996,7 @@ var C10 = {
18887
18996
  red: "#ef4444",
18888
18997
  blue: "#3b82f6"
18889
18998
  };
18890
- var S7 = {
18999
+ var S8 = {
18891
19000
  fr: {
18892
19001
  title: "Brief de contenu IA",
18893
19002
  subtitle: "G\xE9n\xE8re un plan r\xE9dactionnel optimis\xE9 pour un mot-cl\xE9 (plan, entit\xE9s, questions, longueur cible).",
@@ -18922,7 +19031,7 @@ var S7 = {
18922
19031
  }
18923
19032
  };
18924
19033
  function ContentBriefPanel({ locale }) {
18925
- const s = S7[locale] ?? S7.fr;
19034
+ const s = S8[locale] ?? S8.fr;
18926
19035
  const [keyword, setKeyword] = useState("");
18927
19036
  const [brief, setBrief] = useState(null);
18928
19037
  const [busy, setBusy] = useState(false);
@@ -18958,8 +19067,8 @@ function ContentBriefPanel({ locale }) {
18958
19067
  const card = {
18959
19068
  padding: 16,
18960
19069
  borderRadius: 12,
18961
- border: `1px solid ${C10.border}`,
18962
- backgroundColor: C10.card,
19070
+ border: `1px solid ${C11.border}`,
19071
+ backgroundColor: C11.card,
18963
19072
  marginBottom: 20
18964
19073
  };
18965
19074
  const chip = {
@@ -18968,14 +19077,14 @@ function ContentBriefPanel({ locale }) {
18968
19077
  padding: "3px 8px",
18969
19078
  borderRadius: 999,
18970
19079
  backgroundColor: "rgba(59,130,246,0.12)",
18971
- color: C10.blue,
18972
- border: `1px solid ${C10.border}`,
19080
+ color: C11.blue,
19081
+ border: `1px solid ${C11.border}`,
18973
19082
  margin: "0 6px 6px 0"
18974
19083
  };
18975
- const h4 = { fontSize: 12, fontWeight: 800, color: C10.text, margin: "14px 0 6px", textTransform: "uppercase" };
19084
+ const h4 = { fontSize: 12, fontWeight: 800, color: C11.text, margin: "14px 0 6px", textTransform: "uppercase" };
18976
19085
  return /* @__PURE__ */ jsxs("div", { style: card, children: [
18977
- /* @__PURE__ */ jsx("div", { style: { fontSize: 16, fontWeight: 800, color: C10.text }, children: s.title }),
18978
- /* @__PURE__ */ jsx("div", { style: { fontSize: 12, color: C10.sub, marginTop: 2, marginBottom: 12 }, children: s.subtitle }),
19086
+ /* @__PURE__ */ jsx("div", { style: { fontSize: 16, fontWeight: 800, color: C11.text }, children: s.title }),
19087
+ /* @__PURE__ */ jsx("div", { style: { fontSize: 12, color: C11.sub, marginTop: 2, marginBottom: 12 }, children: s.subtitle }),
18979
19088
  /* @__PURE__ */ jsxs("div", { style: { display: "flex", gap: 8, flexWrap: "wrap" }, children: [
18980
19089
  /* @__PURE__ */ jsx(
18981
19090
  "input",
@@ -18992,9 +19101,9 @@ function ContentBriefPanel({ locale }) {
18992
19101
  padding: "8px 12px",
18993
19102
  fontSize: 13,
18994
19103
  borderRadius: 8,
18995
- border: `1px solid ${C10.border}`,
18996
- backgroundColor: C10.bg,
18997
- color: C10.text
19104
+ border: `1px solid ${C11.border}`,
19105
+ backgroundColor: C11.bg,
19106
+ color: C11.text
18998
19107
  }
18999
19108
  }
19000
19109
  ),
@@ -19007,8 +19116,8 @@ function ContentBriefPanel({ locale }) {
19007
19116
  style: {
19008
19117
  padding: "8px 14px",
19009
19118
  borderRadius: 8,
19010
- border: `1px solid ${C10.violet}`,
19011
- backgroundColor: C10.violet,
19119
+ border: `1px solid ${C11.violet}`,
19120
+ backgroundColor: C11.violet,
19012
19121
  color: "#fff",
19013
19122
  fontSize: 12,
19014
19123
  fontWeight: 700,
@@ -19019,12 +19128,12 @@ function ContentBriefPanel({ locale }) {
19019
19128
  }
19020
19129
  )
19021
19130
  ] }),
19022
- error && /* @__PURE__ */ jsx("div", { style: { color: C10.red, fontSize: 13, fontWeight: 600, marginTop: 10 }, children: error }),
19131
+ error && /* @__PURE__ */ jsx("div", { style: { color: C11.red, fontSize: 13, fontWeight: 600, marginTop: 10 }, children: error }),
19023
19132
  brief && /* @__PURE__ */ jsxs("div", { style: { marginTop: 8 }, children: [
19024
- brief.recommendedWordCount > 0 && /* @__PURE__ */ jsxs("div", { style: { fontSize: 12, color: C10.sub, marginTop: 10 }, children: [
19133
+ brief.recommendedWordCount > 0 && /* @__PURE__ */ jsxs("div", { style: { fontSize: 12, color: C11.sub, marginTop: 10 }, children: [
19025
19134
  s.words,
19026
19135
  ": ",
19027
- /* @__PURE__ */ jsxs("b", { style: { color: C10.text }, children: [
19136
+ /* @__PURE__ */ jsxs("b", { style: { color: C11.text }, children: [
19028
19137
  "~",
19029
19138
  brief.recommendedWordCount,
19030
19139
  " ",
@@ -19033,7 +19142,7 @@ function ContentBriefPanel({ locale }) {
19033
19142
  ] }),
19034
19143
  brief.outline.length > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
19035
19144
  /* @__PURE__ */ jsx("div", { style: h4, children: s.outline }),
19036
- /* @__PURE__ */ jsx("ul", { style: { margin: 0, paddingLeft: 18, fontSize: 13, color: C10.text, lineHeight: 1.6 }, children: brief.outline.map((o, i) => /* @__PURE__ */ 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)) })
19145
+ /* @__PURE__ */ jsx("ul", { style: { margin: 0, paddingLeft: 18, fontSize: 13, color: C11.text, lineHeight: 1.6 }, children: brief.outline.map((o, i) => /* @__PURE__ */ 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)) })
19037
19146
  ] }),
19038
19147
  brief.entities.length > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
19039
19148
  /* @__PURE__ */ jsx("div", { style: h4, children: s.entities }),
@@ -19041,7 +19150,7 @@ function ContentBriefPanel({ locale }) {
19041
19150
  ] }),
19042
19151
  brief.questions.length > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
19043
19152
  /* @__PURE__ */ jsx("div", { style: h4, children: s.questions }),
19044
- /* @__PURE__ */ jsx("ul", { style: { margin: 0, paddingLeft: 18, fontSize: 13, color: C10.text, lineHeight: 1.6 }, children: brief.questions.map((q, i) => /* @__PURE__ */ jsx("li", { children: q }, i)) })
19153
+ /* @__PURE__ */ jsx("ul", { style: { margin: 0, paddingLeft: 18, fontSize: 13, color: C11.text, lineHeight: 1.6 }, children: brief.questions.map((q, i) => /* @__PURE__ */ jsx("li", { children: q }, i)) })
19045
19154
  ] }),
19046
19155
  brief.internalLinkIdeas.length > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
19047
19156
  /* @__PURE__ */ jsx("div", { style: h4, children: s.links }),
@@ -19049,7 +19158,7 @@ function ContentBriefPanel({ locale }) {
19049
19158
  ] }),
19050
19159
  brief.notes.length > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
19051
19160
  /* @__PURE__ */ jsx("div", { style: h4, children: s.notes }),
19052
- /* @__PURE__ */ jsx("ul", { style: { margin: 0, paddingLeft: 18, fontSize: 12, color: C10.sub, lineHeight: 1.6 }, children: brief.notes.map((n, i) => /* @__PURE__ */ jsx("li", { children: n }, i)) })
19161
+ /* @__PURE__ */ jsx("ul", { style: { margin: 0, paddingLeft: 18, fontSize: 12, color: C11.sub, lineHeight: 1.6 }, children: brief.notes.map((n, i) => /* @__PURE__ */ jsx("li", { children: n }, i)) })
19053
19162
  ] })
19054
19163
  ] })
19055
19164
  ] });
@@ -20191,7 +20300,7 @@ var controlBtnStyle = {
20191
20300
  cursor: "pointer",
20192
20301
  lineHeight: 1.4
20193
20302
  };
20194
- var C11 = {
20303
+ var C12 = {
20195
20304
  cyan: "#00E5FF",
20196
20305
  black: "#000",
20197
20306
  green: "#22c55e",
@@ -20206,10 +20315,10 @@ var C11 = {
20206
20315
  var TITLE_MIN = 30;
20207
20316
  var TITLE_MAX = 60;
20208
20317
  function getCharColor(len) {
20209
- if (len === 0) return C11.textSecondary;
20210
- if (len >= TITLE_MIN && len <= TITLE_MAX) return C11.green;
20211
- if (len > 0 && len < TITLE_MIN) return C11.orange;
20212
- return C11.red;
20318
+ if (len === 0) return C12.textSecondary;
20319
+ if (len >= TITLE_MIN && len <= TITLE_MAX) return C12.green;
20320
+ if (len > 0 && len < TITLE_MIN) return C12.orange;
20321
+ return C12.red;
20213
20322
  }
20214
20323
  function getProgressPercent(len) {
20215
20324
  if (len === 0) return 0;
@@ -20217,9 +20326,9 @@ function getProgressPercent(len) {
20217
20326
  }
20218
20327
  function getProgressColor(len) {
20219
20328
  if (len === 0) return "var(--theme-elevation-200, #e5e7eb)";
20220
- if (len >= TITLE_MIN && len <= TITLE_MAX) return C11.green;
20221
- if (len < TITLE_MIN) return C11.orange;
20222
- return C11.red;
20329
+ if (len >= TITLE_MIN && len <= TITLE_MAX) return C12.green;
20330
+ if (len < TITLE_MIN) return C12.orange;
20331
+ return C12.red;
20223
20332
  }
20224
20333
  function MetaTitleField({
20225
20334
  path,
@@ -20290,7 +20399,7 @@ function MetaTitleField({
20290
20399
  style: {
20291
20400
  fontSize: 13,
20292
20401
  fontWeight: 700,
20293
- color: C11.textPrimary
20402
+ color: C12.textPrimary
20294
20403
  },
20295
20404
  children: t.metaTitle.label
20296
20405
  }
@@ -20330,9 +20439,9 @@ function MetaTitleField({
20330
20439
  fontSize: 14,
20331
20440
  fontFamily: "inherit",
20332
20441
  borderRadius: 8,
20333
- border: `2px solid ${C11.border}`,
20334
- backgroundColor: C11.surfaceBg,
20335
- color: C11.textPrimary,
20442
+ border: `2px solid ${C12.border}`,
20443
+ backgroundColor: C12.surfaceBg,
20444
+ color: C12.textPrimary,
20336
20445
  outline: "none",
20337
20446
  boxShadow: "2px 2px 0 0 var(--theme-border-color, rgba(0,0,0,1))"
20338
20447
  }
@@ -20350,9 +20459,9 @@ function MetaTitleField({
20350
20459
  gap: 5,
20351
20460
  padding: "8px 14px",
20352
20461
  borderRadius: 8,
20353
- border: `2px solid ${C11.border}`,
20354
- backgroundColor: loading ? C11.surface50 : C11.cyan,
20355
- color: loading ? C11.textSecondary : C11.black,
20462
+ border: `2px solid ${C12.border}`,
20463
+ backgroundColor: loading ? C12.surface50 : C12.cyan,
20464
+ color: loading ? C12.textSecondary : C12.black,
20356
20465
  fontWeight: 800,
20357
20466
  fontSize: 11,
20358
20467
  textTransform: "uppercase",
@@ -20399,7 +20508,7 @@ function MetaTitleField({
20399
20508
  justifyContent: "space-between",
20400
20509
  marginTop: 4,
20401
20510
  fontSize: 10,
20402
- color: C11.textSecondary
20511
+ color: C12.textSecondary
20403
20512
  },
20404
20513
  children: [
20405
20514
  /* @__PURE__ */ jsxs("span", { children: [
@@ -20433,9 +20542,9 @@ function MetaTitleField({
20433
20542
  borderRadius: 6,
20434
20543
  fontSize: 11,
20435
20544
  fontWeight: 600,
20436
- color: C11.red,
20545
+ color: C12.red,
20437
20546
  backgroundColor: "rgba(239,68,68,0.08)",
20438
- border: `1px solid ${C11.red}`
20547
+ border: `1px solid ${C12.red}`
20439
20548
  },
20440
20549
  children: error
20441
20550
  }
@@ -20444,7 +20553,7 @@ function MetaTitleField({
20444
20553
  }
20445
20554
  );
20446
20555
  }
20447
- var C12 = {
20556
+ var C13 = {
20448
20557
  cyan: "#00E5FF",
20449
20558
  black: "#000",
20450
20559
  green: "#22c55e",
@@ -20459,10 +20568,10 @@ var C12 = {
20459
20568
  var DESC_MIN = 120;
20460
20569
  var DESC_MAX = 160;
20461
20570
  function getCharColor2(len) {
20462
- if (len === 0) return C12.textSecondary;
20463
- if (len >= DESC_MIN && len <= DESC_MAX) return C12.green;
20464
- if (len > 0 && len < DESC_MIN) return C12.orange;
20465
- return C12.red;
20571
+ if (len === 0) return C13.textSecondary;
20572
+ if (len >= DESC_MIN && len <= DESC_MAX) return C13.green;
20573
+ if (len > 0 && len < DESC_MIN) return C13.orange;
20574
+ return C13.red;
20466
20575
  }
20467
20576
  function getProgressPercent2(len) {
20468
20577
  if (len === 0) return 0;
@@ -20470,9 +20579,9 @@ function getProgressPercent2(len) {
20470
20579
  }
20471
20580
  function getProgressColor2(len) {
20472
20581
  if (len === 0) return "var(--theme-elevation-200, #e5e7eb)";
20473
- if (len >= DESC_MIN && len <= DESC_MAX) return C12.green;
20474
- if (len < DESC_MIN) return C12.orange;
20475
- return C12.red;
20582
+ if (len >= DESC_MIN && len <= DESC_MAX) return C13.green;
20583
+ if (len < DESC_MIN) return C13.orange;
20584
+ return C13.red;
20476
20585
  }
20477
20586
  function MetaDescriptionField({
20478
20587
  path,
@@ -20543,7 +20652,7 @@ function MetaDescriptionField({
20543
20652
  style: {
20544
20653
  fontSize: 13,
20545
20654
  fontWeight: 700,
20546
- color: C12.textPrimary
20655
+ color: C13.textPrimary
20547
20656
  },
20548
20657
  children: t.metaDescription.label
20549
20658
  }
@@ -20583,9 +20692,9 @@ function MetaDescriptionField({
20583
20692
  fontSize: 14,
20584
20693
  fontFamily: "inherit",
20585
20694
  borderRadius: 8,
20586
- border: `2px solid ${C12.border}`,
20587
- backgroundColor: C12.surfaceBg,
20588
- color: C12.textPrimary,
20695
+ border: `2px solid ${C13.border}`,
20696
+ backgroundColor: C13.surfaceBg,
20697
+ color: C13.textPrimary,
20589
20698
  outline: "none",
20590
20699
  resize: "vertical",
20591
20700
  lineHeight: 1.5,
@@ -20605,9 +20714,9 @@ function MetaDescriptionField({
20605
20714
  gap: 5,
20606
20715
  padding: "8px 14px",
20607
20716
  borderRadius: 8,
20608
- border: `2px solid ${C12.border}`,
20609
- backgroundColor: loading ? C12.surface50 : C12.cyan,
20610
- color: loading ? C12.textSecondary : C12.black,
20717
+ border: `2px solid ${C13.border}`,
20718
+ backgroundColor: loading ? C13.surface50 : C13.cyan,
20719
+ color: loading ? C13.textSecondary : C13.black,
20611
20720
  fontWeight: 800,
20612
20721
  fontSize: 11,
20613
20722
  textTransform: "uppercase",
@@ -20655,7 +20764,7 @@ function MetaDescriptionField({
20655
20764
  justifyContent: "space-between",
20656
20765
  marginTop: 4,
20657
20766
  fontSize: 10,
20658
- color: C12.textSecondary
20767
+ color: C13.textSecondary
20659
20768
  },
20660
20769
  children: [
20661
20770
  /* @__PURE__ */ jsxs("span", { children: [
@@ -20689,9 +20798,9 @@ function MetaDescriptionField({
20689
20798
  borderRadius: 6,
20690
20799
  fontSize: 11,
20691
20800
  fontWeight: 600,
20692
- color: C12.red,
20801
+ color: C13.red,
20693
20802
  backgroundColor: "rgba(239,68,68,0.08)",
20694
- border: `1px solid ${C12.red}`
20803
+ border: `1px solid ${C13.red}`
20695
20804
  },
20696
20805
  children: error
20697
20806
  }
@@ -20700,7 +20809,7 @@ function MetaDescriptionField({
20700
20809
  }
20701
20810
  );
20702
20811
  }
20703
- var C13 = {
20812
+ var C14 = {
20704
20813
  cyan: "#00E5FF",
20705
20814
  black: "#000",
20706
20815
  white: "#fff",
@@ -20777,8 +20886,8 @@ function MetaImageField({
20777
20886
  gap: 10,
20778
20887
  padding: "10px 14px",
20779
20888
  borderRadius: 8,
20780
- border: `2px solid ${C13.border}`,
20781
- backgroundColor: C13.surfaceBg,
20889
+ border: `2px solid ${C14.border}`,
20890
+ backgroundColor: C14.surfaceBg,
20782
20891
  boxShadow: "2px 2px 0 0 var(--theme-border-color, rgba(0,0,0,1))"
20783
20892
  },
20784
20893
  children: [
@@ -20797,7 +20906,7 @@ function MetaImageField({
20797
20906
  fontWeight: 900,
20798
20907
  backgroundColor: hasImage ? "rgba(34,197,94,0.15)" : "rgba(255,138,0,0.15)",
20799
20908
  color: hasImage ? "#16a34a" : "#d97706",
20800
- border: `1px solid ${hasImage ? C13.green : C13.orange}`
20909
+ border: `1px solid ${hasImage ? C14.green : C14.orange}`
20801
20910
  },
20802
20911
  children: hasImage ? "\u2713" : "!"
20803
20912
  }
@@ -20809,7 +20918,7 @@ function MetaImageField({
20809
20918
  style: {
20810
20919
  fontSize: 12,
20811
20920
  fontWeight: 700,
20812
- color: C13.textPrimary
20921
+ color: C14.textPrimary
20813
20922
  },
20814
20923
  children: t.metaImage.label
20815
20924
  }
@@ -20819,7 +20928,7 @@ function MetaImageField({
20819
20928
  {
20820
20929
  style: {
20821
20930
  fontSize: 10,
20822
- color: C13.textSecondary,
20931
+ color: C14.textSecondary,
20823
20932
  lineHeight: 1.4
20824
20933
  },
20825
20934
  children: hasImage ? t.metaImage.imageSet : t.metaImage.noImage
@@ -20839,9 +20948,9 @@ function MetaImageField({
20839
20948
  gap: 5,
20840
20949
  padding: "8px 14px",
20841
20950
  borderRadius: 8,
20842
- border: `2px solid ${C13.border}`,
20843
- backgroundColor: loading ? C13.surface50 : success ? C13.green : C13.cyan,
20844
- color: loading ? C13.textSecondary : success ? C13.white : C13.black,
20951
+ border: `2px solid ${C14.border}`,
20952
+ backgroundColor: loading ? C14.surface50 : success ? C14.green : C14.cyan,
20953
+ color: loading ? C14.textSecondary : success ? C14.white : C14.black,
20845
20954
  fontWeight: 800,
20846
20955
  fontSize: 11,
20847
20956
  textTransform: "uppercase",
@@ -20868,9 +20977,9 @@ function MetaImageField({
20868
20977
  borderRadius: 6,
20869
20978
  fontSize: 11,
20870
20979
  fontWeight: 600,
20871
- color: C13.red,
20980
+ color: C14.red,
20872
20981
  backgroundColor: "rgba(239,68,68,0.08)",
20873
- border: `1px solid ${C13.red}`
20982
+ border: `1px solid ${C14.red}`
20874
20983
  },
20875
20984
  children: error
20876
20985
  }
@@ -20879,7 +20988,7 @@ function MetaImageField({
20879
20988
  }
20880
20989
  );
20881
20990
  }
20882
- var C14 = {
20991
+ var C15 = {
20883
20992
  black: "#000",
20884
20993
  white: "#fff",
20885
20994
  green: "#22c55e",
@@ -20893,15 +21002,15 @@ var C14 = {
20893
21002
  function getCompletenessColor(count) {
20894
21003
  switch (count) {
20895
21004
  case 0:
20896
- return C14.red;
21005
+ return C15.red;
20897
21006
  case 1:
20898
- return C14.orange;
21007
+ return C15.orange;
20899
21008
  case 2:
20900
- return C14.yellow;
21009
+ return C15.yellow;
20901
21010
  case 3:
20902
- return C14.green;
21011
+ return C15.green;
20903
21012
  default:
20904
- return C14.textSecondary;
21013
+ return C15.textSecondary;
20905
21014
  }
20906
21015
  }
20907
21016
  function getCompletenessLabel(count, ov) {
@@ -20959,8 +21068,8 @@ function OverviewField({
20959
21068
  fontFamily: "var(--font-body, Inter, system-ui, sans-serif)",
20960
21069
  padding: "12px 14px",
20961
21070
  borderRadius: 10,
20962
- border: `2px solid ${C14.border}`,
20963
- backgroundColor: C14.surfaceBg,
21071
+ border: `2px solid ${C15.border}`,
21072
+ backgroundColor: C15.surfaceBg,
20964
21073
  boxShadow: "3px 3px 0 0 var(--theme-border-color, rgba(0,0,0,1))",
20965
21074
  marginBottom: 12
20966
21075
  },
@@ -20983,7 +21092,7 @@ function OverviewField({
20983
21092
  fontWeight: 800,
20984
21093
  textTransform: "uppercase",
20985
21094
  letterSpacing: "0.04em",
20986
- color: C14.textPrimary
21095
+ color: C15.textPrimary
20987
21096
  },
20988
21097
  children: t.overview.metaCompleteness
20989
21098
  }
@@ -20998,8 +21107,8 @@ function OverviewField({
20998
21107
  fontSize: 11,
20999
21108
  fontWeight: 800,
21000
21109
  backgroundColor: completenessColor,
21001
- color: completenessColor === C14.yellow ? C14.black : C14.white,
21002
- border: `2px solid ${C14.border}`,
21110
+ color: completenessColor === C15.yellow ? C15.black : C15.white,
21111
+ border: `2px solid ${C15.border}`,
21003
21112
  textTransform: "uppercase",
21004
21113
  letterSpacing: "0.03em"
21005
21114
  },
@@ -21097,7 +21206,7 @@ function OverviewField({
21097
21206
  style: {
21098
21207
  fontSize: 12,
21099
21208
  fontWeight: 600,
21100
- color: item.filled ? C14.textPrimary : C14.textSecondary
21209
+ color: item.filled ? C15.textPrimary : C15.textSecondary
21101
21210
  },
21102
21211
  children: item.label
21103
21212
  }
@@ -21109,7 +21218,7 @@ function OverviewField({
21109
21218
  marginLeft: "auto",
21110
21219
  fontSize: 10,
21111
21220
  fontWeight: 700,
21112
- color: item.filled ? C14.green : C14.red,
21221
+ color: item.filled ? C15.green : C15.red,
21113
21222
  textTransform: "uppercase",
21114
21223
  letterSpacing: "0.03em"
21115
21224
  },
@@ -21126,7 +21235,7 @@ function OverviewField({
21126
21235
  }
21127
21236
  );
21128
21237
  }
21129
- var C15 = {
21238
+ var C16 = {
21130
21239
  cyan: "#00E5FF",
21131
21240
  black: "#000",
21132
21241
  white: "#fff",
@@ -21145,10 +21254,10 @@ var G = {
21145
21254
  descGrey: "#4d5156",
21146
21255
  faviconBg: "#e8eaed"};
21147
21256
  function charCountColor2(len, min, max) {
21148
- if (len >= min && len <= max) return C15.green;
21149
- if (len > 0 && len < min) return C15.orange;
21150
- if (len > max) return C15.red;
21151
- return C15.textSecondary;
21257
+ if (len >= min && len <= max) return C16.green;
21258
+ if (len > 0 && len < min) return C16.orange;
21259
+ if (len > max) return C16.red;
21260
+ return C16.textSecondary;
21152
21261
  }
21153
21262
  function truncateText(text, maxChars) {
21154
21263
  if (text.length <= maxChars) return text;
@@ -21203,8 +21312,8 @@ function SerpPreview({
21203
21312
  padding: "10px 12px",
21204
21313
  cursor: "pointer",
21205
21314
  borderRadius: 8,
21206
- border: `2px solid ${C15.border}`,
21207
- backgroundColor: C15.surface50,
21315
+ border: `2px solid ${C16.border}`,
21316
+ backgroundColor: C16.surface50,
21208
21317
  userSelect: "none"
21209
21318
  },
21210
21319
  children: [
@@ -21219,7 +21328,7 @@ function SerpPreview({
21219
21328
  fontWeight: 800,
21220
21329
  textTransform: "uppercase",
21221
21330
  letterSpacing: "0.04em",
21222
- color: C15.textPrimary
21331
+ color: C16.textPrimary
21223
21332
  },
21224
21333
  children: [
21225
21334
  /* @__PURE__ */ jsxs(
@@ -21251,7 +21360,7 @@ function SerpPreview({
21251
21360
  transition: "transform 0.2s",
21252
21361
  display: "inline-block",
21253
21362
  transform: open ? "rotate(90deg)" : "none",
21254
- color: C15.textSecondary
21363
+ color: C16.textSecondary
21255
21364
  },
21256
21365
  children: "\u25B6"
21257
21366
  }
@@ -21284,10 +21393,10 @@ function SerpPreview({
21284
21393
  "div",
21285
21394
  {
21286
21395
  style: {
21287
- backgroundColor: C15.white,
21288
- border: `2px solid ${C15.border}`,
21396
+ backgroundColor: C16.white,
21397
+ border: `2px solid ${C16.border}`,
21289
21398
  borderRadius: 12,
21290
- boxShadow: `3px 3px 0 0 ${C15.border}`,
21399
+ boxShadow: `3px 3px 0 0 ${C16.border}`,
21291
21400
  padding: isDesktop ? 20 : 14,
21292
21401
  maxWidth: isDesktop ? 650 : 380,
21293
21402
  overflow: "hidden"
@@ -21350,7 +21459,7 @@ function SerpPreview({
21350
21459
  style: {
21351
21460
  fontSize: 14,
21352
21461
  fontWeight: 400,
21353
- color: C15.black,
21462
+ color: C16.black,
21354
21463
  lineHeight: 1.3,
21355
21464
  whiteSpace: "nowrap",
21356
21465
  overflow: "hidden",
@@ -21414,7 +21523,7 @@ function SerpPreview({
21414
21523
  "span",
21415
21524
  {
21416
21525
  style: {
21417
- color: C15.textSecondary,
21526
+ color: C16.textSecondary,
21418
21527
  fontStyle: "italic",
21419
21528
  fontSize: titleFontSize - 2
21420
21529
  },
@@ -21443,7 +21552,7 @@ function SerpPreview({
21443
21552
  "span",
21444
21553
  {
21445
21554
  style: {
21446
- color: C15.textSecondary,
21555
+ color: C16.textSecondary,
21447
21556
  fontStyle: "italic",
21448
21557
  fontSize: descFontSize - 1
21449
21558
  },
@@ -21476,7 +21585,7 @@ function SerpPreview({
21476
21585
  fontSize: 11
21477
21586
  },
21478
21587
  children: [
21479
- /* @__PURE__ */ jsx("span", { style: { color: C15.textSecondary, fontWeight: 600 }, children: t.serpPreview.previewTitle }),
21588
+ /* @__PURE__ */ jsx("span", { style: { color: C16.textSecondary, fontWeight: 600 }, children: t.serpPreview.previewTitle }),
21480
21589
  /* @__PURE__ */ jsxs(
21481
21590
  "span",
21482
21591
  {
@@ -21505,7 +21614,7 @@ function SerpPreview({
21505
21614
  fontSize: 11
21506
21615
  },
21507
21616
  children: [
21508
- /* @__PURE__ */ jsx("span", { style: { color: C15.textSecondary, fontWeight: 600 }, children: t.serpPreview.previewDescription }),
21617
+ /* @__PURE__ */ jsx("span", { style: { color: C16.textSecondary, fontWeight: 600 }, children: t.serpPreview.previewDescription }),
21509
21618
  /* @__PURE__ */ jsxs(
21510
21619
  "span",
21511
21620
  {
@@ -21534,14 +21643,14 @@ function SerpPreview({
21534
21643
  fontSize: 11
21535
21644
  },
21536
21645
  children: [
21537
- /* @__PURE__ */ jsx("span", { style: { color: C15.textSecondary, fontWeight: 600 }, children: t.serpPreview.url }),
21646
+ /* @__PURE__ */ jsx("span", { style: { color: C16.textSecondary, fontWeight: 600 }, children: t.serpPreview.url }),
21538
21647
  /* @__PURE__ */ jsxs(
21539
21648
  "span",
21540
21649
  {
21541
21650
  style: {
21542
21651
  fontWeight: 700,
21543
21652
  fontVariantNumeric: "tabular-nums",
21544
- color: fullUrl.length <= 75 ? C15.green : C15.red
21653
+ color: fullUrl.length <= 75 ? C16.green : C16.red
21545
21654
  },
21546
21655
  children: [
21547
21656
  fullUrl.length,
@@ -21576,13 +21685,13 @@ function DeviceButton({
21576
21685
  gap: 5,
21577
21686
  padding: "4px 12px",
21578
21687
  borderRadius: 6,
21579
- border: `2px solid ${C15.border}`,
21688
+ border: `2px solid ${C16.border}`,
21580
21689
  fontSize: 11,
21581
21690
  fontWeight: 700,
21582
21691
  cursor: "pointer",
21583
- backgroundColor: active ? C15.cyan : C15.surfaceBg,
21584
- color: active ? C15.black : C15.textPrimary,
21585
- boxShadow: active ? `2px 2px 0 0 ${C15.border}` : "none",
21692
+ backgroundColor: active ? C16.cyan : C16.surfaceBg,
21693
+ color: active ? C16.black : C16.textPrimary,
21694
+ boxShadow: active ? `2px 2px 0 0 ${C16.border}` : "none",
21586
21695
  transition: "background-color 0.15s"
21587
21696
  },
21588
21697
  children: [