{
  "version": 3,
  "sources": ["review-customer.js"],
  "sourcesContent": ["/* review-customer.js: what a customer reads in a page room (/reviewroom/<room>).\n *\n * A customer is anyone in the room who isn't on the team: a commenter or a viewer\n * (review-room.js customer()). The copy they see says Resonate, we and you. It never\n * names the person on the team who made or shared the page, never says (client), and\n * never uses the team's words for how the work gets done: Klaude, the Klaude tab,\n * drips, turns, runners, slots, IndexNow. The team's view keeps all of those.\n *\n * Plain functions and strings, no DOM, so test/review-customer-copy.test.js can check\n * every line a customer reads.\n */\n\nexport const BY = \"Resonate\";\nexport const SHARED_BY = \"Shared by Resonate\";\nexport const LATEST_DRAFT = \"Latest draft\";\n// The customer's pages and their settings: the company's home (/account/brand/, account/brand/brand.js), the one\n// customer home since 2026-10-10 (Matt). /account/your-pages/ and Spotlight open it (account/home-redirect.js), so\n// the links already sent in emails land there too.\nexport const YOUR_PAGES_HREF = \"/account/brand/#pages\";\nexport const SETTINGS_HREF = \"/account/brand/#settings\";\nexport const PAGES_HREF = YOUR_PAGES_HREF;\nexport const ALL_PAGES = \"All your pages\";\n// The email says \"Review and approve\"; the button it leads to says Approve.\nexport const APPROVE = \"Approve\";\nexport const APPROVED = \"Approved\";\n\n// Header subline: \"First draft · Shared by Resonate\".\nexport const headerLine = (versionName) => `${versionName || \"Not ready yet\"} · ${SHARED_BY}`;\n\n// A name on a note, a reply or a version, for a customer.\n// mine: the viewer wrote it. team: someone on the team (or Klaude) did.\nexport function nameFor(name, { mine = false, team = false } = {}) {\n  if (mine) return \"You\";\n  if (team) return BY;\n  return cleanName(name);\n}\n// \"Dana (client)\" → \"Dana\". A role in brackets is the team's label, not the person's name.\nexport const cleanName = (name) => String(name || \"Someone\").replace(/\\s*\\((client|customer|guest)\\)\\s*$/i, \"\").trim() || \"Someone\";\n\n// Where a note stands after Klaude has been through it: [class, icon, label].\nconst KST_TEAM = {\n  sent: [\"st-open\", \"loader\", \"With Klaude\"],\n  done: [\"st-ok\", \"circle-check\", \"Done\"],\n  question: [\"st-warn\", \"message-circle\", \"Klaude has a question\"],\n  skipped: [\"st-late\", \"triangle-alert\", \"Left for the team\"],\n  unreported: [\"st-draft\", \"eye\", \"Klaude worked on this\"],\n  failed: [\"st-late\", \"triangle-alert\", \"Didn't finish\"],\n};\nconst KST_CUSTOMER = {\n  sent: [\"st-open\", \"loader\", \"We're on it\"],\n  done: [\"st-ok\", \"circle-check\", \"Done\"],\n  question: [\"st-warn\", \"message-circle\", \"A question for you\"],\n  skipped: [\"st-open\", \"user-round\", \"We'll handle this\"],\n  unreported: [\"st-draft\", \"eye\", \"We worked on this\"],\n  failed: [\"st-open\", \"user-round\", \"We'll handle this\"],\n};\nexport const klaudeStates = (customer) => (customer ? KST_CUSTOMER : KST_TEAM);\n\n// The line under a note's state, when Klaude said nothing of its own.\nexport function stateLine(state, customer) {\n  if (state === \"unreported\") return customer ? \"Look at the newest version to check it.\" : \"Klaude didn't say how this one went. Check the draft.\";\n  if (state === \"failed\") return customer ? \"We'll pick this one up.\" : \"Send it again when you're ready.\";\n  return \"\";\n}\n\n// The summary of the last pass: its title and its counts (\"1 done, 1 question for you, 1 we'll handle\").\nexport function passTitle(customer) { return customer ? \"We made your changes\" : \"Klaude worked through the feedback\"; }\nexport function passParts(c, customer) {\n  const parts = [];\n  if (c.done) parts.push(`${c.done} done`);\n  if (c.question) parts.push(`${c.question} ${c.question === 1 ? \"question\" : \"questions\"} for you`);\n  if (c.skipped) parts.push(customer ? `${c.skipped} we'll handle` : `${c.skipped} left for the team`);\n  if (c.unreported) parts.push(`${c.unreported} to check`);\n  if (c.failed) parts.push(customer ? `${c.failed} we're on` : `${c.failed} didn't finish`);\n  return parts;\n}\n\n// Notes waiting out the quiet spell before they go: the line, and the button that sends them now.\nexport function waitingLine(n, when, quiet, customer) {\n  const notes = `${n} ${n === 1 ? \"note\" : \"notes\"}`;\n  if (customer) return `We pick up your ${n === 1 ? \"note\" : \"notes\"} ${when === \"soon\" ? \"in a moment\" : `at ${when}`}, ${quiet} minutes after your last one. Keep going, or:`;\n  return `${notes} ${n === 1 ? \"goes\" : \"go\"} to Klaude ${when === \"soon\" ? \"in a moment\" : `at ${when}`}, ${quiet} minutes after your last one. Keep going, or:`;\n}\nexport function sendNowLabel(n, customer) {\n  if (customer) return \"Send my notes now\";\n  return `Send ${n === 1 ? \"it\" : `all ${n}`} to Klaude now`;\n}\n\n// The hint at the top of a customer's feedback list.\nexport function panelHint(loop) {\n  return loop\n    ? \"Click any part of the page and say what should change. We make the changes and answer on each note, and you get an email when they're done.\"\n    : \"Click any part of the page and say what should change. Our replies show under each note, and you get an email when there's a new version.\";\n}\nexport const SEES_IT = \"We see it right away.\";\nexport const SENT_TOAST = \"Sent. We have it.\";\nexport const NOT_READY = \"We're still working on it. You'll get an email when there's a version for you to look at.\";\nexport const WELCOME_LINE = \"Resonate shared\";\nexport const ANSWER_PLACEHOLDER = \"Answer the question\";\nexport const ANSWER = \"Answer\";\n// Pinned above the page on a phone: our question, and how many are waiting.\nexport const questionPinTitle = (n) => (n > 1 ? `A question for you (1 of ${n}):` : \"A question for you:\");\nexport const BACK_FROM_US = \"Our answers\";\nexport const rulesLine = (n, company) => `We follow ${n === 1 ? \"it\" : \"them\"} on every page${company ? ` for ${company}` : \"\"}`;\nexport const APPROVED_TOAST = \"Approved. Thanks, we have it.\";\n\n// ── Approving a page that still has a gap ────────────────────────────────────\n// A sample answer can leave \"[number]\" or \"[Customer quote]\" on the page. A page with one of those can't be\n// approved: it would go live with the brackets in it (functions/api/review/_blanks.js finds them).\nexport const blanksLine = (n) => `${n} ${n === 1 ? \"thing still needs\" : \"things still need\"} a real number`;\nexport const BLANKS_HINT = \"Tell us what it should say in your feedback, and we'll put it in.\";\n\n// ── A done note, and where its change is on the page ─────────────────────────\nexport const SHOW_CHANGE = \"Show the change\";\nexport const SHOW_BEFORE = \"Show before\";\nexport const CHANGE_GONE = \"We couldn't find that change on this version of the page.\";\n// Of a pass's changes, the one a note asked for: the most words shared with what the note pointed at, what it\n// said and what we said we changed. A removed block isn't on the page to go to. -1 when there's none.\nconst words = (t) => new Set(String(t || \"\").toLowerCase().match(/[a-z0-9']{3,}/g) || []);\nexport function bestChange(list, note) {\n  const k = (note && note.klaude) || {}, a = (note && note.anchor) || {};\n  const want = words([a.exact, a.hint, note && note.suggestion, ((note && note.messages) || [])[0]?.body, ...(k.blocks || []), k.said].filter(Boolean).join(\" \"));\n  let best = -1, score = -1;\n  (list || []).forEach((c, i) => {\n    if (!c || c.kind === \"removed\") return;\n    const have = words(`${c.before || \"\"} ${c.after || \"\"} ${c.section || \"\"}`);\n    let n = 0;\n    for (const w of want) if (have.has(w)) n++;\n    if (n > score) { score = n; best = i; }\n  });\n  return best;\n}\n\n// ── Review (/account/your-pages/) ────────────────────────────────────────────\n// A to-do list, not a dashboard: the pages waiting on them first (each with the one thing it needs), then what's\n// coming, then what's live and being read. Customers get two tabs, Review and Settings; the team's console\n// (/account/drips/) holds every other control.\nexport const REVIEW_HREF = YOUR_PAGES_HREF;\n// Where a page stands. statusLine and the Review screen use these states (functions/api/_customer-pages.js).\nexport const STATUS = {\n  needs: \"Needs you\", scheduled: \"Scheduled\", writing: \"Being written\", live: \"Live\", planned: \"Planned\", skipped: \"Skipped\",\n};\nexport const STATUS_ORDER = [\"needs\", \"scheduled\", \"writing\", \"live\", \"planned\", \"skipped\"];\nexport const PAGES_TITLE = \"Your new pages\";\nexport const ACT = {\n  review: \"Review\", skip: \"Skip this page\", hold: \"Hold\", release: \"Release\", unpublish: \"Unpublish\", putback: \"Put back\", view: \"View live\",\n};\nexport const MENU = \"More for this page\";\n// \"Your new pages · 3 a week\", or paused / not running.\nexport function reviewHead(plan, pausedDay = \"\") {\n  if (plan && plan.enabled === false) return `${PAGES_TITLE} · not running`;\n  if (plan && !plan.running && pausedDay) return `${PAGES_TITLE} · paused until ${pausedDay}`;\n  return `${PAGES_TITLE} · ${(plan && plan.per_week) || 3} a week`;\n}\nexport const toReview = (n) => `${n} ${n === 1 ? \"page\" : \"pages\"} to review`;\nexport const NOTHING_TO_REVIEW = \"Nothing to review right now. We'll email you when the next page is ready.\";\nexport const NO_PAGES_YET = \"Your first pages are on their way. You'll get an email as each one is ready for you.\";\n// Under a waiting page's title: when it goes live, and what decides it.\nexport function goesLive(date, { auto = false } = {}) {\n  // A dated page goes live on its day unless they step in, approval or not (Kolin, 2026-10-04; _drip.js publishDue).\n  if (!date) return auto ? \"Goes live on its date unless you hold it\" : \"Waiting for your review\";\n  return auto ? `Goes live ${date} unless you hold it` : `Goes live ${date} unless you hold it or ask for changes`;\n}\n// The ONE thing a waiting page needs from them: [tone, words]. A question we asked comes first, then the changes\n// our newest pass made from their notes, else it's waiting for their review.\nexport function askLine(ask) {\n  const q = (ask && ask.questions) || 0, c = (ask && ask.changes) || 0;\n  if (q) return [\"ask\", `${q} ${q === 1 ? \"question\" : \"questions\"} for you`];\n  if (c) return [\"done\", c === 1 ? \"We made your change\" : `We made your ${c} changes`];\n  return [\"wait\", \"Waiting for your review\"];\n}\nexport const COMING = \"Coming next\";\n// \"Help us build\": the next pages from their report, each with a Build button (functions/api/your-pages.js \"build\").\nexport const BUILD = {\n  head: \"Help us build your next pages\",\n  intro: \"These come from your report, in the order we'd make them. Press Build to start one now. It's ready for you to review in about a day.\",\n  btn: \"Build this now\", started: (t) => `We started \"${t}\". We'll email you when it's ready to review.`,\n  left: (n) => (n ? `You can start ${n} more today.` : \"You've started three today. Start more tomorrow.\"),\n  full: \"Plenty is on its way already. Review a few, then start more.\",\n  next: \"Next up\", when: (ready, live) => [ready ? `Ready for you ~${ready}` : \"\", live ? `live ~${live}` : \"\"].filter(Boolean).join(\" · \"),\n  improve: \"Improves a page on your site\", more: (n) => `and ${n} more in your report`,\n};\nexport const COMING_MAX = 3;\n// A page on its way. about: the day we'll send it (\"Oct 9\"); date: its go-live day (\"Thu, Oct 8\").\nexport function comingLine(p, { about = \"\", date = \"\" } = {}) {\n  if (p.status === \"scheduled\") return date ? `Approved · goes live ${date}` : \"Approved. We'll give it a date.\";\n  if (p.status === \"writing\") return about ? `We're writing it · about ${about}` : \"We're writing it\";\n  return about ? `Planned · about ${about}` : \"Planned\";\n}\nexport const andMore = (n) => `and ${n} more`;\nexport const liveHead = (n) => `Live · ${n}`;\nexport const NONE_LIVE = \"No pages are live yet. They show here once they are, with who's reading them.\";\n// \"Live since Sep 30 · read by ChatGPT and Claude\"\nconst and = (xs) => (xs.length <= 1 ? xs.join(\"\") : `${xs.slice(0, -1).join(\", \")} and ${xs[xs.length - 1]}`);\nexport function liveLine(date, readers = []) {\n  const since = date ? `Live since ${date}` : \"Live\";\n  if (!readers.length) return `${since} · not read by AI assistants yet`;\n  return `${since} · read by ${and(readers.slice(0, 3))}${readers.length > 3 ? \" and others\" : \"\"}`;\n}\n// The line under a page's title in every other case (held, unpublished, skipped, live without proof).\nexport function statusLine(p, date, { auto = false } = {}) {\n  if (p.status === \"needs\") return goesLive(date, { auto });\n  if (p.status === \"scheduled\") return date ? `Goes live ${date}` : \"Approved. We'll give it a date.\";\n  if (p.status === \"writing\") return \"We're writing it. You'll get an email when it's ready.\";\n  if (p.status === \"live\") return date ? `Live since ${date}` : \"Live\";\n  if (p.status === \"skipped\") return \"Skipped. We won't make this page.\";\n  if (p.unpublished) return \"Unpublished. Put it back any time.\";\n  if (p.held) return \"On hold. It won't go live until you release it.\";\n  return date ? `Planned for ${date}` : \"Planned\";\n}\n// Proof it's working, on a live page.\nexport function readsLine(readers, n) {\n  if (!n) return \"Not read by AI assistants yet\";\n  return `Read by ${and(readers.slice(0, 3))}${readers.length > 3 ? \" and others\" : \"\"} · ${n} ${n === 1 ? \"time\" : \"times\"}`;\n}\nexport const visitsLine = (n) => `${n} ${n === 1 ? \"visit\" : \"visits\"}`;\nexport function citedLine(n, nextCheck) {\n  if (n) return `Cited in ${n} ${n === 1 ? \"answer\" : \"answers\"}`;\n  return nextCheck ? `Not cited yet · we'll check again ${nextCheck}` : \"Not cited yet\";\n}\n\n// ── How a live page is doing: the chain, step by step (functions/api/_proof.js forCustomer) ──────────────────\n// Each step is yes, not_yet (we can see, nothing so far), early (no report since it went live) or unknown (nothing\n// tells us yet). A number always carries what it's out of and its window; unknown is never said as zero.\n// fmt: { date(iso) → \"Oct 8\", day(ymd) → \"Nov 4\" }, from the screen (New York time).\nconst times = (n, one, many) => `${n} ${n === 1 ? one : many}`;\nconst plain = { date: (x) => String(x || \"\").slice(0, 10), day: (x) => String(x || \"\") };\n// \"1 min 20 s\", \"45 s\"\nexport const seconds = (s) => { const n = Math.round(Number(s) || 0); return n >= 60 ? `${Math.floor(n / 60)} min${n % 60 ? ` ${n % 60} s` : \"\"}` : `${n} s`; };\nexport const PROOF = {\n  open: \"How it's doing\",\n  label: { discovered: \"Found\", indexed: \"In search\", shown: \"Shown in search\", assistant: \"Read by AI for someone\", cited: \"Cited in your report\", visits: \"Visits from AI\", engaged: \"Read\", clicked: \"On to your site\" },\n  order: [\"discovered\", \"indexed\", \"shown\", \"assistant\", \"cited\", \"visits\", \"engaged\", \"clicked\"],\n  searches: \"Searches it showed for\",\n  questions: \"Questions it was cited for\",\n  state: { yes: \"Done\", not_yet: \"Waiting\", early: \"Too early\", unknown: \"Can't see\" },\n  intro: \"Each page goes through these steps. Most new pages are found within two weeks; search and AI assistants take longer to show and cite them.\",\n};\nconst nextReport = (c, f) => (c.next_check ? `Checked in your next report, about ${f.day(c.next_check)}` : \"Checked in your next report\");\n// One step in words: [state, sentence]. A step we can't measure on this page says so plainly.\nexport function proofStep(k, s, { fmt = plain, liveDay = \"\" } = {}) {\n  const f = fmt, since = liveDay ? ` since ${liveDay}` : \"\";\n  if (!s) return [\"unknown\", \"\"];\n  const st = s.state;\n  if (k === \"discovered\") {\n    if (st === \"yes\") return [st, `Found by ${and(s.by.slice(0, 3))}${s.by.length > 3 ? \" and others\" : \"\"}${s.at ? ` on ${f.date(s.at)}` : \"\"}`];\n    if (st === \"not_yet\") return [st, \"Search engines and AI assistants haven't found it so far. Most find a new page within two weeks.\"];\n    return [st, \"We can't see who reads this page from here.\"];\n  }\n  if (k === \"indexed\") {\n    if (st === \"yes\") return [st, `In ${and(s.engines)}'s search index${s.at ? ` since ${f.date(s.at)}` : \"\"}`];\n    if (st === \"not_yet\") return [st, \"Google and Bing know of it and haven't added it to search so far.\"];\n    return [st, \"Shows here once Google or Bing confirm it's in their search.\"];\n  }\n  if (k === \"shown\") {\n    if (st === \"yes\") return [st, `Shown ${times(s.impressions, \"time\", \"times\")} in search in the last ${s.days} days, ${times(s.clicks, \"click\", \"clicks\")}`];\n    if (st === \"not_yet\") return [st, `Not shown in search in the last ${s.days} days`];\n    return [st, \"Shows here once Google or Bing report how often it's shown.\"];\n  }\n  if (k === \"assistant\") {\n    if (st === \"yes\") {\n      const who = s.by.map((b) => (s.by.length > 1 ? `${b.name} (${b.n})` : b.name));\n      return [st, `${and(who.slice(0, 3))} opened it ${times(s.total, \"time\", \"times\")} to answer someone's question${since}${s.last ? `, last on ${f.date(s.last)}` : \"\"}`];\n    }\n    if (st === \"not_yet\") return [st, `No AI assistant has opened it to answer someone${since}`];\n    return [st, \"We can't see this on this page from here.\"];\n  }\n  if (k === \"cited\") {\n    const l = s.latest, of = l && l.of ? ` of ${l.of}` : \"\", when = l && l.at ? `your ${f.date(l.at)} report` : \"your report\";\n    if (st === \"yes\") {\n      const now = l ? `Cited for ${l.count}${of} questions in ${when}` : \"Cited in your report\";\n      const first = s.first_at && (!l || s.first_at !== l.at) ? `, first in your ${f.date(s.first_at)} report` : \"\";\n      return [st, `${now}${first}${l && l.engines && l.engines.length ? ` (${and(l.engines)})` : \"\"}`];\n    }\n    if (st === \"early\") return [st, `It went live after your last report. ${nextReport(s, f)}.`];\n    if (st === \"not_yet\") return [st, `Not cited for any${l && l.of ? ` of the ${l.of}` : \"\"} questions in ${when}. ${nextReport(s, f)}.`];\n    return [st, \"Shows here once we've checked your reports for it.\"];\n  }\n  if (k === \"visits\") {\n    if (st === \"yes\") return [st, `${times(s.total, \"visit\", \"visits\")} from ${and(s.by.slice(0, 3).map((b) => b.label))}${since}`];\n    if (st === \"not_yet\") return [st, `No visits from AI assistants${since}`];\n    return [st, \"Visits from AI assistants show here once we can count them on this page.\"];\n  }\n  if (k === \"engaged\") {\n    if (st === \"yes\") return [st, `${times(s.readers, \"reader\", \"readers\")}${since}${s.median_seconds != null ? `, the middle one stayed ${seconds(s.median_seconds)}` : \"\"}${s.of ? `; ${s.past_half} of ${s.of} read past halfway` : \"\"}`];\n    if (st === \"not_yet\") return [st, `No one has stayed to read it${since}`];\n    return [st, \"\"];\n  }\n  if (k === \"clicked\") {\n    if (st === \"yes\") return [st, `${times(s.to_company, \"reader\", \"readers\")} went on to your site${since}`];\n    if (st === \"not_yet\") return [st, `No reader has gone on to your site from it${since}`];\n    return [st, \"\"];\n  }\n  return [\"unknown\", \"\"];\n}\n// Every step worth showing, in order: [key, label, state, sentence]. Reading and clicking through show only where\n// the page can measure them.\nexport function proofSteps(chain, opts = {}) {\n  if (!chain || !chain.steps) return [];\n  return PROOF.order.map((k) => [k, PROOF.label[k], ...proofStep(k, chain.steps[k], opts)])\n    .filter(([k, , st, line]) => line && !([\"engaged\", \"clicked\"].includes(k) && st === \"unknown\"));\n}\n// Under a live page's title: up to three things that are true, the strongest proof first.\nexport function proofLine(chain, { visits = 0, cited = 0, nextCheck = \"\", fmt = plain } = {}) {\n  const s = chain && chain.steps;\n  if (!s) return [visitsLine(visits), citedLine(cited, nextCheck)].join(\" · \");\n  const bits = [];\n  const c = s.cited;\n  if (c.state === \"yes\" && c.latest) bits.push(`Cited for ${c.latest.count}${c.latest.of ? ` of ${c.latest.of}` : \"\"} questions`);\n  if (s.assistant.state === \"yes\") bits.push(`${s.assistant.by[0].name} read it for someone`);\n  if (s.indexed.state === \"yes\") bits.push(`In ${and(s.indexed.engines)}`);\n  else if (s.discovered.state === \"yes\") bits.push(`Found by ${and(s.discovered.by.slice(0, 2))}`);\n  bits.push(s.visits.state === \"yes\" ? `${times(s.visits.total, \"visit\", \"visits\")} from AI` : visitsLine(visits));\n  if (c.state === \"early\") bits.push(c.next_check ? `First report check about ${fmt.day(c.next_check)}` : \"First report check soon\");\n  else if (c.state !== \"yes\") bits.push(citedLine(0, c.next_check ? fmt.day(c.next_check) : nextCheck));\n  return bits.slice(0, 3).join(\" · \");\n}\n// Above the live pages: \"Your 8 live pages: 5 in Google, 2 read by ChatGPT for someone, none cited so far. Next\n// report about Nov 4.\"\nexport function proofSummary(r, { fmt = plain } = {}) {\n  if (!r || !r.pages) return \"\";\n  const parts = [];\n  if (r.indexed.known) parts.push(`${r.indexed.google} in Google${r.indexed.bing ? `, ${r.indexed.bing} in Bing` : \"\"}`);\n  else if (r.discovered.known) parts.push(`${r.discovered.yes} found by search and AI`);\n  if (r.assistant.known) {\n    const top = r.assistant.by[0];\n    parts.push(top ? `${top.pages} read by ${top.name} for someone` : \"none read by an AI assistant for someone so far\");\n  }\n  if (r.visits.known && r.visits.total) parts.push(`${times(r.visits.total, \"visit\", \"visits\")} from AI`);\n  if (r.cited.known) {\n    const l = r.cited.latest;\n    parts.push(r.cited.yes ? `${r.cited.yes} cited${l && l.of ? ` (${l.count} of ${l.of} questions in your ${fmt.date(l.at)} report)` : \"\"}` : \"none cited so far\");\n  }\n  const next = r.next_check ? ` Next report about ${fmt.day(r.next_check)}.` : \"\";\n  return `Your ${times(r.pages, \"live page\", \"live pages\")}: ${parts.join(\", \") || \"it's early days\"}.${next}`;\n}\n// Since the report before: \"+3 questions citing your pages since your Sep 9 report\".\nexport function proofTrend(r, { fmt = plain } = {}) {\n  const c = r && r.cited;\n  if (!c || !c.latest || !c.previous) return \"\";\n  const d = c.latest.count - c.previous.count;\n  return d ? `${d > 0 ? \"+\" : \"\"}${d} ${Math.abs(d) === 1 ? \"question\" : \"questions\"} citing your pages since your ${fmt.date(c.previous.at)} report`\n    : `As many questions cite your pages as in your ${fmt.date(c.previous.at)} report`;\n}\n\n// The sheets that ask before something happens.\nexport const SKIP_SHEET = { title: \"Skip this page?\", body: \"We won't make it, and it comes off your schedule.\", label: \"Why skip it? (optional)\", go: \"Skip this page\", keep: \"Keep it\" };\nexport const UNPUBLISH_SHEET = {\n  title: \"Unpublish this page?\",\n  bodyNew: \"It comes off your site right away, and search engines are told it's gone. You can put it back any time.\",\n  bodyImprove: \"Your page goes back to how it was before our changes. You can put our version back any time.\",\n  go: \"Unpublish\", keep: \"Keep it live\",\n};\nexport const AUTO_SHEET = {\n  title: \"Publish without waiting for you?\",\n  body: \"Each page goes live on its date unless you hold it. You still get every page by email first, and you can hold or unpublish any of them.\",\n  go: \"Yes, publish unless I hold it\", keep: \"Keep waiting for my approval\",\n};\nexport const TOAST = {\n  skipped: \"Skipped. We won't make this page.\", held: \"On hold. It won't go live until you release it.\", released: \"Released. It's back on your schedule.\",\n  unpublished: \"Unpublished. It's off your site.\", putback: \"It's live again.\", saved: \"Saved\", paused: \"Paused. No new pages or emails until then.\", running: \"Running again\",\n};\n\n// ── Your settings (/account/your-pages/settings/) ────────────────────────────\n// One short screen, in this order. The server takes only these (functions/api/_customer-pages.js\n// customerSettingsFrom); every save shows in the team's Activity.\nexport const SETTINGS_FIELDS = [\"run\", \"pace\", \"approval\", \"reviewers\", \"emails\", \"rules\"];\nexport const SETTINGS = {\n  title: \"Your settings\",\n  newPages: \"New pages\", running: \"Running\", pause: \"Pause until…\", pausedUntil: (d) => `Paused until ${d}`, startOn: \"Start again on\",\n  pauseNote: \"Pausing stops new emails and keeps scheduled pages on hold.\",\n  howMany: \"How many\", aWeek: \"a week\", days: \"Days they can go live\",\n  before: \"Before a page goes live\", wait: \"Wait for my approval\", auto: \"Publish unless I hold it\",\n  who: \"Who reviews\", you: \"You\", add: \"Add a colleague\", addHint: \"They get each page by email and can review it.\",\n  emails: \"Emails\", perPage: \"Each page\", weekly: \"Weekly\",\n  weeklyNote: \"Weekly summaries are on their way. Until they start, each page still comes in its own email.\",\n  rules: \"Always and never\", rulesHint: \"Rules every page follows\", addRule: \"Add a rule\", rulePlaceholder: \"e.g. Never call us a vendor\",\n  save: \"Save\", unsaved: \"You have changes to save.\", readOnly: \"You can see these settings. Ask the person who owns your account to change them.\",\n  notRunning: \"Your page plan isn't running. Reply to any of our emails to start it again.\",\n};\nexport const DAYS = [\"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\"];\n\n// The account's top bar for someone with a page plan (account/account-nav.js): Review and Settings, with Team,\n// Email preferences and Billing behind the avatar.\n// The calendar (account/your-pages/views.js calendarHtml): every page on its day, so they see what goes when and can\n// step in before it does. Pages go live on their day unless they hold one or ask for changes.\nexport const CAL = {\n  list: \"List\", calendar: \"Calendar\", today: \"Today\", prev: \"Previous month\", next: \"Next month\",\n  intro: \"Each page goes live on its day, and you get an email when it does. Open any page to review it, hold it or ask for a change before then.\",\n  summary: (live, coming, needs) => [live ? `${live} live this month` : \"\", coming ? `${coming} going live` : \"\", needs ? `${needs} need${needs === 1 ? \"s\" : \"\"} your review` : \"\"].filter(Boolean).join(\" · \") || \"Nothing on the calendar this month yet\",\n  legend: { needs: \"Needs your review\", scheduled: \"Goes live\", writing: \"Being written\", live: \"Live\", planned: \"Planned\", held: \"On hold\" },\n  more: (n) => `+${n} more`,\n  plannedTitle: \"Planned from your report\",\n  plannedLine: (ready, live) => [ready ? `We start writing it about ${ready}` : \"\", live ? `it goes live about ${live}` : \"\"].filter(Boolean).join(\", and \") + \".\",\n  reviewIt: \"Review it\", openLive: \"View it live\", close: \"Close\",\n  stepIn: \"Want something different? Open it to leave a note, or hold it, before its day.\",\n  quiet: \"If we don't hear from you, it goes live on its day as planned.\",\n  dayEmpty: \"Nothing on this day.\",\n};\nexport const NAV = { review: \"Your pages\", settings: \"Settings\", team: \"Team\", emails: \"Email preferences\", billing: \"Billing\" };\n\n// ── A revision: what changed, and the one decision it asks for ───────────────\n// The client's review link (functions/api/review/_revision.js) opens on the newest revision with its changes marked\n// green and listed; they can flip back to the one before, see the two side by side, and approve or ask for more.\nexport const WHAT_CHANGED = (name) => `What changed in ${name}`;\nexport const SINCE = (name) => `Since ${name}`;\nexport const FOR_YOU = \"Your changes\";\nexport const MARK_CHANGES = \"Mark the changes on the page\";\nexport const SIDE_BY_SIDE = \"Side by side\";\nexport const ASK_MORE = \"Ask for more changes\";\nexport const onPage = (n) => `${n} ${n === 1 ? \"change\" : \"changes\"} on the page`;\nexport const FIRST_REVISION = \"The first version we shared with you. Changes show from the next revision on.\";\nexport const OLDER = (newest) => `An earlier revision. ${newest} is the newest.`;\nexport const SEE_NEWEST = (newest) => `See ${newest}`;\nexport const moreNotes = (n) => `${n} more ${n === 1 ? \"change\" : \"changes\"} we made`;\nexport const NO_CHANGES = \"No changes to the words since the revision before.\";\nexport const approveRevision = (name) => `Approve ${name}`;\nexport const APPROVED_REVISION = (name) => `You approved ${name}`;\nexport const PASS_GONE = \"This review link has run out. Sign in to see the page, or reply to our email for a new link.\";\n// Signing in brings their own tools: editing the words, or asking for changes and seeing them made.\nexport const SIGN_IN_TO_EDIT = \"Sign in any time to make changes yourself.\";\nexport const SIGN_IN_BUTTON = \"Sign in to edit\";\nexport const PASS_HELLO = (first) => `${first ? `Hi ${first}. ` : \"\"}No sign-in needed: look over the changes, then approve or ask for more.`;\nconst KIND_WORD = { added: \"New\", changed: \"Rewritten\", removed: \"Taken out\" };\nexport const kindWord = (k) => KIND_WORD[k] || \"Changed\";\n\n// A version's note as a list a client reads: the bullets under \"What I changed\" (or every bullet when there's no\n// such heading, or its paragraphs when there are no bullets), never the team's own sections (\"Look at\", \"Needs you\").\n// Each item keeps **bold** for boldHtml. Em dashes become commas: what a customer reads never has them.\nexport function noteBullets(note, { max = 12 } = {}) {\n  const lines = String(note || \"\").replace(/\\r/g, \"\").split(\"\\n\").map((l) => l.trim());\n  const head = (l) => /^(#{1,4}\\s*)?\\*{0,2}[A-Z][^.!?]{0,40}\\*{0,2}:?$/.test(l) && !/^[-*•]\\s/.test(l);\n  const name = (l) => l.replace(/^#+\\s*/, \"\").replace(/\\*\\*/g, \"\").replace(/:$/, \"\").trim().toLowerCase();\n  let pick = lines;\n  const at = lines.findIndex((l) => head(l) && name(l) === \"what i changed\");\n  if (at >= 0) { const end = lines.findIndex((l, i) => i > at && head(l)); pick = lines.slice(at + 1, end < 0 ? undefined : end); }\n  else pick = lines.filter((l, i) => !(head(l) && [\"look at\", \"needs you\"].includes(name(l))) && !lines.slice(0, i).some((p) => head(p) && [\"look at\", \"needs you\"].includes(name(p))));\n  const clean = (l) => l.replace(/\\s*—\\s*/g, \", \").replace(/–/g, \"-\").trim();\n  const bullets = pick.filter((l) => /^[-*•]\\s+/.test(l)).map((l) => clean(l.replace(/^[-*•]\\s+/, \"\")));\n  const items = bullets.length ? bullets : pick.filter((l) => l && !head(l)).map(clean);\n  return items.filter(Boolean).slice(0, max).map((x) => (x.length > 600 ? `${x.slice(0, 597)}...` : x));\n}\n// One item as HTML: escaped first, then **bold** made bold.\nexport const boldHtml = (s, esc) => esc(s).replace(/\\*\\*([^*]{1,200})\\*\\*/g, \"<strong>$1</strong>\").replace(/\\*\\*/g, \"\");\n"],
  "mappings": "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",
  "names": ["versionName", "name", "mine", "team", "KST_TEAM", "KST_CUSTOMER", "customer", "state", "c", "parts", "n", "when", "quiet", "notes", "loop", "company", "words", "t", "list", "note", "k", "a", "want", "best", "score", "i", "have", "w", "plan", "pausedDay", "date", "auto", "ask", "q", "ready", "live", "p", "about", "and", "xs", "readers", "since", "nextCheck", "times", "one", "many", "plain", "x", "s", "nextReport", "f", "fmt", "liveDay", "st", "who", "b", "l", "of", "now", "first", "chain", "opts", "line", "visits", "cited", "bits", "r", "top", "next", "d", "coming", "needs", "newest", "KIND_WORD", "max", "lines", "head", "pick", "at", "end", "clean", "bullets", "esc"]
}
