{
  "copy.inputPlaceholder": {
    "type": "text",
    "value": "Ask about your portfolio — balances, holdings, P&L, asset allocation…",
    "vars": [],
    "description": "Placeholder in the message box."
  },
  "copy.keyEnter": {
    "type": "text",
    "value": "Enter",
    "vars": [],
    "description": "Key name in the hint under the message box."
  },
  "copy.hintSend": {
    "type": "text",
    "value": "to send",
    "vars": [],
    "description": "Hint under the message box, after the Enter key."
  },
  "copy.keyShiftEnter": {
    "type": "text",
    "value": "Shift Enter",
    "vars": [],
    "description": "Key name in the hint under the message box."
  },
  "copy.hintNewLine": {
    "type": "text",
    "value": "for new line",
    "vars": [],
    "description": "Hint under the message box, after Shift Enter."
  },
  "copy.inputFeatureHint": {
    "type": "text",
    "value": "SQL runs only when you press Run",
    "vars": [],
    "description": "Last part of the hint under the message box."
  },
  "copy.understoodAs": {
    "type": "text",
    "value": "Understood as",
    "vars": [],
    "description": "Label on the chip above a reply showing how the question was understood."
  },
  "copy.understoodAsTitle": {
    "type": "text",
    "value": "How your question was understood",
    "vars": [],
    "description": "Tooltip on that chip."
  },
  "copy.welcomeTitle": {
    "type": "text",
    "value": "Ask me about your portfolio",
    "vars": [],
    "description": "Heading on the empty chat screen."
  },
  "copy.welcomeBody": {
    "type": "text",
    "value": "I know your full {{company}} schema — ask about balances, holdings, P&L, or asset allocation. I'll write SQL queries for you to review and run, and render flow diagrams. Start by telling me which customer you want to look at, by name or customer number.",
    "vars": [
      "company"
    ],
    "description": "Text under the heading on the empty chat screen."
  },
  "copy.untitledConversation": {
    "type": "text",
    "value": "Conversation",
    "vars": [],
    "description": "Header title for a conversation that has no saved title."
  },
  "copy.newConversation": {
    "type": "text",
    "value": "New Conversation",
    "vars": [],
    "description": "Header title before the first message of a new conversation."
  },
  "copy.metaTitle": {
    "type": "text",
    "value": "{{appName}} — SQL & Data Visualization",
    "vars": [
      "appName"
    ],
    "description": "Browser tab title."
  },
  "copy.metaDescription": {
    "type": "text",
    "value": "AI-powered financial portfolio assistant served by Ollama on the Athena GPU server",
    "vars": [],
    "description": "Page description for search engines and link previews."
  },
  "header.streaming": {
    "type": "text",
    "value": "streaming",
    "vars": [],
    "description": "Status pill while a reply is arriving."
  },
  "header.ready": {
    "type": "text",
    "value": "ready",
    "vars": [],
    "description": "Status pill when idle."
  },
  "notice.dismiss": {
    "type": "text",
    "value": "Dismiss",
    "vars": [],
    "description": "Button that closes the notice bar."
  },
  "sidebar.newConversation": {
    "type": "text",
    "value": "New conversation",
    "vars": [],
    "description": "Button that starts a new chat."
  },
  "sidebar.empty": {
    "type": "text",
    "value": "No conversations yet.",
    "vars": [],
    "description": "Shown in the sidebar when there are no saved chats."
  },
  "sidebar.suggestions": {
    "type": "text",
    "value": "Suggestions",
    "vars": [],
    "description": "Heading of the suggestions list in the sidebar."
  },
  "sidebar.deleteConversation": {
    "type": "text",
    "value": "Delete conversation",
    "vars": [],
    "description": "Tooltip on a conversation's delete button."
  },
  "sidebar.clearAll": {
    "type": "text",
    "value": "Clear all history",
    "vars": [],
    "description": "Button that deletes every conversation."
  },
  "sidebar.clearAllConfirm": {
    "type": "text",
    "value": "Clear all history?",
    "vars": [],
    "description": "Confirmation question before deleting every conversation."
  },
  "sidebar.yes": {
    "type": "text",
    "value": "Yes",
    "vars": [],
    "description": "Confirms clearing history."
  },
  "sidebar.no": {
    "type": "text",
    "value": "No",
    "vars": [],
    "description": "Cancels clearing history."
  },
  "status.checking": {
    "type": "text",
    "value": "checking…",
    "vars": [],
    "description": "Model status before the first answer."
  },
  "status.offline": {
    "type": "text",
    "value": "Ollama offline",
    "vars": [],
    "description": "Model status when Ollama cannot be reached."
  },
  "status.noModel": {
    "type": "text",
    "value": "model not pulled",
    "vars": [],
    "description": "Model status when Ollama is up but the model is not installed."
  },
  "status.online": {
    "type": "text",
    "value": "online",
    "vars": [],
    "description": "Model status when ready."
  },
  "copy.guestTitle": {
    "type": "text",
    "value": "Guest",
    "vars": [],
    "description": "Account box title when not signed in."
  },
  "copy.guestBody": {
    "type": "text",
    "value": "Your chats are saved on this browser. Sign in to keep them on every device.",
    "vars": [],
    "description": "Account box text when not signed in."
  },
  "copy.signIn": {
    "type": "text",
    "value": "Sign in",
    "vars": [],
    "description": "Sign-in button and dialog title."
  },
  "copy.signUp": {
    "type": "text",
    "value": "Create account",
    "vars": [],
    "description": "Sign-up button and dialog title."
  },
  "copy.signOut": {
    "type": "text",
    "value": "Sign out",
    "vars": [],
    "description": "Sign-out button."
  },
  "auth.noteSignUp": {
    "type": "text",
    "value": "Your guest conversations are added to the new account.",
    "vars": [],
    "description": "Under the title of the sign-up dialog."
  },
  "auth.noteSignIn": {
    "type": "text",
    "value": "Your guest conversations are added to your account.",
    "vars": [],
    "description": "Under the title of the sign-in dialog."
  },
  "auth.namePlaceholder": {
    "type": "text",
    "value": "Name (optional)",
    "vars": [],
    "description": "Name field in the sign-up dialog."
  },
  "auth.emailPlaceholder": {
    "type": "text",
    "value": "Email",
    "vars": [],
    "description": "Email field."
  },
  "auth.passwordPlaceholder": {
    "type": "text",
    "value": "Password",
    "vars": [],
    "description": "Password field when signing in."
  },
  "auth.newPasswordPlaceholder": {
    "type": "text",
    "value": "Password (at least {{min}} characters)",
    "vars": [
      "min"
    ],
    "description": "Password field when creating an account."
  },
  "auth.haveAccount": {
    "type": "text",
    "value": "Already have an account? ",
    "vars": [],
    "description": "Link text at the bottom of the sign-up dialog (before the Sign in link)."
  },
  "auth.newHere": {
    "type": "text",
    "value": "New here? ",
    "vars": [],
    "description": "Link text at the bottom of the sign-in dialog (before the Create account link)."
  },
  "sql.run": {
    "type": "text",
    "value": "Run",
    "vars": [],
    "description": "Run button on a SQL block."
  },
  "sql.running": {
    "type": "text",
    "value": "Running…",
    "vars": [],
    "description": "Run button while the query runs."
  },
  "sql.notRun": {
    "type": "text",
    "value": "Not run yet. Review the query above; it is only sent to the database when you press Run.",
    "vars": [],
    "description": "Reminder under a SQL block that has not been run."
  },
  "sql.runQuery": {
    "type": "text",
    "value": "Run query",
    "vars": [],
    "description": "Button in that reminder."
  },
  "sql.executing": {
    "type": "text",
    "value": "Executing query…",
    "vars": [],
    "description": "Shown while a query runs."
  },
  "copy.copy": {
    "type": "text",
    "value": "Copy",
    "vars": [],
    "description": "Copy button."
  },
  "copy.copied": {
    "type": "text",
    "value": "Copied",
    "vars": [],
    "description": "Copy button right after copying."
  },
  "table.empty": {
    "type": "text",
    "value": "Query returned 0 rows",
    "vars": [],
    "description": "Shown when a query returns nothing."
  },
  "table.results": {
    "type": "text",
    "value": "Results",
    "vars": [],
    "description": "Heading of the results table."
  },
  "table.row": {
    "type": "text",
    "value": "{{count}}{{plus}} row",
    "vars": [
      "count",
      "plus"
    ],
    "description": "One row (singular). {{plus}} is '+' when results were cut off."
  },
  "table.rows": {
    "type": "text",
    "value": "{{count}}{{plus}} rows",
    "vars": [
      "count",
      "plus"
    ],
    "description": "Several rows."
  },
  "table.col": {
    "type": "text",
    "value": "{{count}} col",
    "vars": [
      "count"
    ],
    "description": "One column."
  },
  "table.cols": {
    "type": "text",
    "value": "{{count}} cols",
    "vars": [
      "count"
    ],
    "description": "Several columns."
  },
  "table.summary": {
    "type": "text",
    "value": "{{rows}} · {{cols}}",
    "vars": [
      "rows",
      "cols"
    ],
    "description": "How the row and column counts are joined."
  },
  "table.truncated": {
    "type": "text",
    "value": "Showing the first {{count}} rows. Add a filter or LIMIT to narrow the query.",
    "vars": [
      "count"
    ],
    "description": "Shown when results were cut off."
  },
  "sankey.title": {
    "type": "text",
    "value": "Flow Diagram",
    "vars": [],
    "description": "Badge on a flow diagram."
  },
  "sankey.stats": {
    "type": "text",
    "value": "{{nodes}} nodes · {{flows}} flows",
    "vars": [
      "nodes",
      "flows"
    ],
    "description": "Size of a flow diagram."
  },
  "sankey.unverified": {
    "type": "text",
    "value": "Unverified: not from your data",
    "vars": [],
    "description": "Warning on a diagram drawn from the model's own figures."
  },
  "unverified.message": {
    "type": "text",
    "value": "A chart was drawn from figures in the model's text. They can't be checked against your data, so it's hidden. Run a query above to chart real results.",
    "vars": [],
    "description": "Shown instead of a chart whose figures came from the model's text."
  },
  "unverified.show": {
    "type": "text",
    "value": "Show anyway",
    "vars": [],
    "description": "Button that reveals that chart."
  },
  "header.customer": {
    "type": "text",
    "value": "Customer",
    "vars": [],
    "description": "Label before the customer's name in the page header."
  },
  "header.noCustomer": {
    "type": "text",
    "value": "No customer chosen",
    "vars": [],
    "description": "Shown in the page header until a customer has been chosen (by saying their name in the chat)."
  }
}
