{
  "session_id": "20260621_223702_f63a59",
  "model": "kimi-k2.7-code",
  "base_url": "https://ollama.com/v1",
  "platform": "telegram",
  "session_start": "2026-06-21T22:37:02.311524",
  "last_updated": "2026-06-21T22:42:59.200512",
  "system_prompt": "You are Hermes Agent, an intelligent AI assistant created by Nous Research. You are helpful, knowledgeable, and direct. You assist users with a wide range of tasks including answering questions, writing and editing code, analyzing information, creative work, and executing actions via your tools. You communicate clearly, admit uncertainty when appropriate, and prioritize being genuinely useful over being verbose unless otherwise directed below. Be targeted and efficient in your exploration and investigations.\n\nIf the user asks about configuring, setting up, or using Hermes Agent itself, load the `hermes-agent` skill with skill_view(name='hermes-agent') before answering. Docs: https://hermes-agent.nousresearch.com/docs\n\nConversation started: Sunday, June 21, 2026 10:37 PM\nModel: kimi-k2.7-code\nProvider: custom\n\nYou are on a text messaging communication platform, Telegram. Standard markdown is automatically converted to Telegram format. Supported: **bold**, *italic*, ~~strikethrough~~, ||spoiler||, `inline code`, ```code blocks```, [links](url), and ## headers. Telegram has NO table syntax — prefer bullet lists or labeled key: value pairs over pipe tables (any tables you do emit are auto-rewritten into row-group bullets, which you can produce directly for cleaner output). You can send media files natively: to deliver a file to the user, include MEDIA:/absolute/path/to/file in your response. Images (.png, .jpg, .webp) appear as photos, audio (.ogg) sends as voice bubbles, and videos (.mp4) play inline. You can also include image URLs in markdown format ![alt](url) and they will be sent as native photos.",
  "tools": [
    {
      "type": "function",
      "function": {
        "name": "patch",
        "description": "Targeted find-and-replace edits in files. Use this instead of sed/awk in terminal. Uses fuzzy matching (9 strategies) so minor whitespace/indentation differences won't break it. Returns a unified diff. Auto-runs syntax checks after editing.\n\nReplace mode (default): find a unique string and replace it.\nPatch mode: apply V4A multi-file patches for bulk changes.",
        "parameters": {
          "type": "object",
          "properties": {
            "mode": {
              "type": "string",
              "enum": [
                "replace",
                "patch"
              ],
              "description": "Edit mode: 'replace' for targeted find-and-replace, 'patch' for V4A multi-file patches",
              "default": "replace"
            },
            "path": {
              "type": "string",
              "description": "File path to edit (required for 'replace' mode)"
            },
            "old_string": {
              "type": "string",
              "description": "Text to find in the file (required for 'replace' mode). Must be unique in the file unless replace_all=true. Include enough surrounding context to ensure uniqueness."
            },
            "new_string": {
              "type": "string",
              "description": "Replacement text (required for 'replace' mode). Can be empty string to delete the matched text."
            },
            "replace_all": {
              "type": "boolean",
              "description": "Replace all occurrences instead of requiring a unique match (default: false)",
              "default": false
            },
            "patch": {
              "type": "string",
              "description": "V4A format patch content (required for 'patch' mode). Format:\n*** Begin Patch\n*** Update File: path/to/file\n@@ context hint @@\n context line\n-removed line\n+added line\n*** End Patch"
            }
          },
          "required": [
            "mode"
          ]
        }
      }
    },
    {
      "type": "function",
      "function": {
        "name": "process",
        "description": "Manage background processes started with terminal(background=true). Actions: 'list' (show all), 'poll' (check status + new output), 'log' (full output with pagination), 'wait' (block until done or timeout), 'kill' (terminate), 'write' (send raw stdin data without newline), 'submit' (send data + Enter, for answering prompts), 'close' (close stdin/send EOF).",
        "parameters": {
          "type": "object",
          "properties": {
            "action": {
              "type": "string",
              "enum": [
                "list",
                "poll",
                "log",
                "wait",
                "kill",
                "write",
                "submit",
                "close"
              ],
              "description": "Action to perform on background processes"
            },
            "session_id": {
              "type": "string",
              "description": "Process session ID (from terminal background output). Required for all actions except 'list'."
            },
            "data": {
              "type": "string",
              "description": "Text to send to process stdin (for 'write' and 'submit' actions)"
            },
            "timeout": {
              "type": "integer",
              "description": "Max seconds to block for 'wait' action. Returns partial output on timeout.",
              "minimum": 1
            },
            "offset": {
              "type": "integer",
              "description": "Line offset for 'log' action (default: last 200 lines)"
            },
            "limit": {
              "type": "integer",
              "description": "Max lines to return for 'log' action",
              "minimum": 1
            }
          },
          "required": [
            "action"
          ]
        }
      }
    },
    {
      "type": "function",
      "function": {
        "name": "read_file",
        "description": "Read a text file with line numbers and pagination. Use this instead of cat/head/tail in terminal. Output format: 'LINE_NUM|CONTENT'. Suggests similar filenames if not found. Use offset and limit for large files. Reads exceeding ~100K characters are rejected; use offset and limit to read specific sections of large files. NOTE: Cannot read images or binary files — use vision_analyze for images.",
        "parameters": {
          "type": "object",
          "properties": {
            "path": {
              "type": "string",
              "description": "Path to the file to read (absolute, relative, or ~/path)"
            },
            "offset": {
              "type": "integer",
              "description": "Line number to start reading from (1-indexed, default: 1)",
              "default": 1,
              "minimum": 1
            },
            "limit": {
              "type": "integer",
              "description": "Maximum number of lines to read (default: 500, max: 2000)",
              "default": 500,
              "maximum": 2000
            }
          },
          "required": [
            "path"
          ]
        }
      }
    },
    {
      "type": "function",
      "function": {
        "name": "search_files",
        "description": "Search file contents or find files by name. Use this instead of grep/rg/find/ls in terminal. Ripgrep-backed, faster than shell equivalents.\n\nContent search (target='content'): Regex search inside files. Output modes: full matches with line numbers, file paths only, or match counts.\n\nFile search (target='files'): Find files by glob pattern (e.g., '*.py', '*config*'). Also use this instead of ls — results sorted by modification time.",
        "parameters": {
          "type": "object",
          "properties": {
            "pattern": {
              "type": "string",
              "description": "Regex pattern for content search, or glob pattern (e.g., '*.py') for file search"
            },
            "target": {
              "type": "string",
              "enum": [
                "content",
                "files"
              ],
              "description": "'content' searches inside file contents, 'files' searches for files by name",
              "default": "content"
            },
            "path": {
              "type": "string",
              "description": "Directory or file to search in (default: current working directory)",
              "default": "."
            },
            "file_glob": {
              "type": "string",
              "description": "Filter files by pattern in grep mode (e.g., '*.py' to only search Python files)"
            },
            "limit": {
              "type": "integer",
              "description": "Maximum number of results to return (default: 50)",
              "default": 50
            },
            "offset": {
              "type": "integer",
              "description": "Skip first N results for pagination (default: 0)",
              "default": 0
            },
            "output_mode": {
              "type": "string",
              "enum": [
                "content",
                "files_only",
                "count"
              ],
              "description": "Output format for grep mode: 'content' shows matching lines with line numbers, 'files_only' lists file paths, 'count' shows match counts per file",
              "default": "content"
            },
            "context": {
              "type": "integer",
              "description": "Number of context lines before and after each match (grep mode only)",
              "default": 0
            }
          },
          "required": [
            "pattern"
          ]
        }
      }
    },
    {
      "type": "function",
      "function": {
        "name": "terminal",
        "description": "Execute shell commands on a Linux environment. Filesystem usually persists between calls.\n\nDo NOT use cat/head/tail to read files — use read_file instead.\nDo NOT use grep/rg/find to search — use search_files instead.\nDo NOT use ls to list directories — use search_files(target='files') instead.\nDo NOT use sed/awk to edit files — use patch instead.\nDo NOT use echo/cat heredoc to create files — use write_file instead.\nReserve terminal for: builds, installs, git, processes, scripts, network, package managers, and anything that needs a shell.\n\nForeground (default): Commands return INSTANTLY when done, even if the timeout is high. Set timeout=300 for long builds/scripts — you'll still get the result in seconds if it's fast. Prefer foreground for short commands.\nBackground: Set background=true to get a session_id. Two patterns:\n  (1) Long-lived processes that never exit (servers, watchers).\n  (2) Long-running tasks with notify_on_complete=true — you can keep working on other things and the system auto-notifies you when the task finishes. Great for test suites, builds, deployments, or anything that takes more than a minute.\nFor servers/watchers, do NOT use shell-level background wrappers (nohup/disown/setsid/trailing '&') in foreground mode. Use background=true so Hermes can track lifecycle and output.\nAfter starting a server, verify readiness with a health check or log signal, then run tests in a separate terminal() call. Avoid blind sleep loops.\nUse process(action=\"poll\") for progress checks, process(action=\"wait\") to block until done.\nWorking directory: Use 'workdir' for per-command cwd.\nPTY mode: Set pty=true for interactive CLI tools (Codex, Claude Code, Python REPL).\n\nDo NOT use vim/nano/interactive tools without pty=true — they hang without a pseudo-terminal. Pipe git output to cat if it might page.\n",
        "parameters": {
          "type": "object",
          "properties": {
            "command": {
              "type": "string",
              "description": "The command to execute on the VM"
            },
            "background": {
              "type": "boolean",
              "description": "Run the command in the background. Two patterns: (1) Long-lived processes that never exit (servers, watchers). (2) Long-running tasks paired with notify_on_complete=true — you can keep working and get notified when the task finishes. For short commands, prefer foreground with a generous timeout instead.",
              "default": false
            },
            "timeout": {
              "type": "integer",
              "description": "Max seconds to wait (default: 180, foreground max: 600). Returns INSTANTLY when command finishes — set high for long tasks, you won't wait unnecessarily. Foreground timeout above 600s is rejected; use background=true for longer commands.",
              "minimum": 1
            },
            "workdir": {
              "type": "string",
              "description": "Working directory for this command (absolute path). Defaults to the session working directory."
            },
            "pty": {
              "type": "boolean",
              "description": "Run in pseudo-terminal (PTY) mode for interactive CLI tools like Codex, Claude Code, or Python REPL. Only works with local and SSH backends. Default: false.",
              "default": false
            },
            "notify_on_complete": {
              "type": "boolean",
              "description": "When true (and background=true), you'll be automatically notified exactly once when the process finishes. **This is the right choice for almost every long-running task** — tests, builds, deployments, multi-item batch jobs, anything that takes over a minute and has a defined end. Use this and keep working on other things; the system notifies you on exit. MUTUALLY EXCLUSIVE with watch_patterns — when both are set, watch_patterns is dropped.",
              "default": false
            },
            "watch_patterns": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "description": "Strings to watch for in background process output. HARD RATE LIMIT: at most 1 notification per 15 seconds per process — matches arriving inside the cooldown are dropped. After 3 consecutive 15-second windows with dropped matches, watch_patterns is automatically disabled for that process and promoted to notify_on_complete behavior (one notification on exit, no more mid-process spam). USE ONLY for truly rare, one-shot mid-process signals on LONG-LIVED processes that will never exit on their own — e.g. ['Application startup complete'] on a server so you know when to hit its endpoint, or ['migration done'] on a daemon. DO NOT use for: (1) end-of-run markers like 'DONE'/'PASS' — use notify_on_complete instead; (2) error patterns like 'ERROR'/'Traceback' in loops or multi-item batch jobs — they fire on every iteration and you'll hit the strike limit fast; (3) anything you'd ever combine with notify_on_complete. When in doubt, choose notify_on_complete. MUTUALLY EXCLUSIVE with notify_on_complete — set one, not both."
            }
          },
          "required": [
            "command"
          ]
        }
      }
    },
    {
      "type": "function",
      "function": {
        "name": "write_file",
        "description": "Write content to a file, completely replacing existing content. Use this instead of echo/cat heredoc in terminal. Creates parent directories automatically. OVERWRITES the entire file — use 'patch' for targeted edits. Auto-runs syntax checks on .py/.json/.yaml/.toml and other linted languages; only NEW errors introduced by this write are surfaced (pre-existing errors are filtered out).",
        "parameters": {
          "type": "object",
          "properties": {
            "path": {
              "type": "string",
              "description": "Path to the file to write (will be created if it doesn't exist, overwritten if it does)"
            },
            "content": {
              "type": "string",
              "description": "Complete content to write to the file"
            }
          },
          "required": [
            "path",
            "content"
          ]
        }
      }
    }
  ],
  "message_count": 16,
  "messages": [
    {
      "role": "user",
      "content": "Rebuild `/DATA/veritas-website.html` with Palantir-inspired design: Inter font, near-black background (#0a0a0f), single blue accent (#00a3bf), data-dense intelligence-platform aesthetic, thin borders, geometric precision. Read current file for content, completely rewrite HTML/CSS. Must be valid, complete, self-contained single file."
    },
    {
      "role": "assistant",
      "content": "",
      "reasoning": "I need to read the current `/DATA/veritas-website.html` file, understand its content, then completely rewrite it with Palantir-inspired design. Let me start by reading the file.",
      "finish_reason": "tool_calls",
      "reasoning_content": "I need to read the current `/DATA/veritas-website.html` file, understand its content, then completely rewrite it with Palantir-inspired design. Let me start by reading the file.",
      "tool_calls": [
        {
          "id": "functions.read_file:0",
          "call_id": "functions.read_file:0",
          "response_item_id": "fc_functionsread_file0",
          "type": "function",
          "function": {
            "name": "read_file",
            "arguments": "{\"path\":\"/DATA/veritas-website.html\"}"
          }
        }
      ]
    },
    {
      "role": "tool",
      "name": "read_file",
      "content": "{\"content\": \"     1|<!DOCTYPE html>\\n     2|<html lang=\\\"en\\\">\\n     3|<head>\\n     4|  <meta charset=\\\"UTF-8\\\" />\\n     5|  <meta name=\\\"viewport\\\" content=\\\"width=device-width, initial-scale=1.0\\\" />\\n     6|  <title>VERITAS — AI Counter-Disinformation Platform</title>\\n     7|  <link rel=\\\"preconnect\\\" href=\\\"https://fonts.googleapis.com\\\" />\\n     8|  <link rel=\\\"preconnect\\\" href=\\\"https://fonts.gstatic.com\\\" crossorigin />\\n     9|  <link href=\\\"https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@300;400;500;600;700&display=swap\\\" rel=\\\"stylesheet\\\" />\\n    10|  <style>\\n    11|    :root {\\n    12|      --bg: #020617;\\n    13|      --card: #0f172a;\\n    14|      --border: #1e293b;\\n    15|      --text: #e2e8f0;\\n    16|      --muted: #94a3b8;\\n    17|      --cyan: #22d3ee;\\n    18|      --emerald: #34d399;\\n    19|      --rose: #fb7185;\\n    20|      --amber: #fbbf24;\\n    21|      --violet: #a78bfa;\\n    22|      --orange: #fb923c;\\n    23|    }\\n    24|    * { box-sizing: border-box; }\\n    25|    html { scroll-behavior: smooth; }\\n    26|    body {\\n    27|      margin: 0;\\n    28|      background: var(--bg);\\n    29|      color: var(--text);\\n    30|      font-family: \\\"JetBrains Mono\\\", monospace;\\n    31|      font-size: 15px;\\n    32|      line-height: 1.65;\\n    33|    }\\n    34|    a { color: var(--cyan); text-decoration: none; }\\n    35|    a:hover { text-decoration: underline; }\\n    36|    code, pre {\\n    37|      font-family: \\\"JetBrains Mono\\\", monospace;\\n    38|      background: #1e293b;\\n    39|      border-radius: 6px;\\n    40|    }\\n    41|    code { padding: 2px 6px; font-size: 0.9em; }\\n    42|    pre {\\n    43|      padding: 16px;\\n    44|      overflow-x: auto;\\n    45|      border: 1px solid var(--border);\\n    46|      font-size: 0.85em;\\n    47|      line-height: 1.5;\\n    48|    }\\n    49|    .topbar {\\n    50|      position: sticky;\\n    51|      top: 0;\\n    52|      z-index: 1000;\\n    53|      background: rgba(2, 6, 23, 0.92);\\n    54|      backdrop-filter: blur(10px);\\n    55|      border-bottom: 1px solid var(--border);\\n    56|    }\\n    57|    .topbar-inner {\\n    58|      max-width: 1280px;\\n    59|      margin: 0 auto;\\n    60|      padding: 14px 24px;\\n    61|      display: flex;\\n    62|      align-items: center;\\n    63|      justify-content: space-between;\\n    64|      gap: 20px;\\n    65|    }\\n    66|    .brand {\\n    67|      display: flex;\\n    68|      align-items: center;\\n    69|      gap: 10px;\\n    70|      font-weight: 700;\\n    71|      font-size: 1.1rem;\\n    72|      color: var(--text);\\n    73|      white-space: nowrap;\\n    74|    }\\n    75|    .brand-dot {\\n    76|      width: 10px; height: 10px;\\n    77|      border-radius: 50%;\\n    78|      background: var(--cyan);\\n    79|      box-shadow: 0 0 12px var(--cyan);\\n    80|      animation: pulse 2s infinite;\\n    81|    }\\n    82|    @keyframes pulse {\\n    83|      0%, 100% { opacity: 0.6; transform: scale(1); }\\n    84|      50% { opacity: 1; transform: scale(1.2); }\\n    85|    }\\n    86|    .nav-links {\\n    87|      display: flex;\\n    88|      gap: 18px;\\n    89|      flex-wrap: wrap;\\n    90|      justify-content: flex-end;\\n    91|    }\\n    92|    .nav-links a {\\n    93|      font-size: 0.78rem;\\n    94|      color: var(--muted);\\n    95|      font-weight: 500;\\n    96|    }\\n    97|    .nav-links a:hover { color: var(--cyan); }\\n    98|    .wrapper {\\n    99|      max-width: 1280px;\\n   100|      margin: 0 auto;\\n   101|      padding: 32px 24px 80px;\\n   102|    }\\n   103|    section { margin-bottom: 64px; }\\n   104|    h1, h2, h3, h4 {\\n   105|      margin: 0 0 16px;\\n   106|      font-weight: 700;\\n   107|      line-height: 1.3;\\n   108|    }\\n   109|    h1 { font-size: 2.6rem; color: var(--cyan); }\\n   110|    h2 {\\n   111|      font-size: 1.6rem;\\n   112|      color: var(--cyan);\\n   113|      border-bottom: 1px solid var(--border);\\n   114|      padding-bottom: 10px;\\n   115|      margin-top: 48px;\\n   116|    }\\n   117|    h3 { font-size: 1.15rem; color: var(--emerald); margin-top: 28px; }\\n   118|    h4 { font-size: 1rem; color: var(--amber); margin-top: 22px; }\\n   119|    p { margin: 0 0 14px; color: var(--text); }\\n   120|    .lead { font-size: 1.15rem; color: var(--muted); }\\n   121|    .card {\\n   122|      background: var(--card);\\n   123|      border: 1px solid var(--border);\\n   124|      border-radius: 12px;\\n   125|      padding: 22px 24px;\\n   126|      margin: 18px 0;\\n   127|    }\\n   128|    .card h3 { margin-top: 0; }\\n   129|    .wedge {\\n   130|      background: linear-gradient(135deg, rgba(251, 113, 133, 0.08) 0%, var(--card) 60%);\\n   131|      border: 1px solid rgba(251, 113, 133, 0.45);\\n   132|      box-shadow: 0 0 30px rgba(251, 113, 133, 0.12);\\n   133|      position: relative;\\n   134|    }\\n   135|    .wedge::before {\\n   136|      content: \\\"PRIMARY WEDGE\\\";\\n   137|      position: absolute;\\n   138|      top: -12px;\\n   139|      right: 24px;\\n   140|      background: var(--rose);\\n   141|      color: #020617;\\n   142|      font-size: 0.65rem;\\n   143|      font-weight: 700;\\n   144|      padding: 4px 10px;\\n   145|      border-radius: 4px;\\n   146|      letter-spacing: 0.05em;\\n   147|    }\\n   148|    .wedge h2 { color: var(--rose); border-color: rgba(251, 113, 133, 0.3); }\\n   149|    .wedge h3 { color: var(--rose); }\\n   150|    table {\\n   151|      width: 100%;\\n   152|      border-collapse: collapse;\\n   153|      margin: 18px 0;\\n   154|      font-size: 0.9rem;\\n   155|    }\\n   156|    th, td {\\n   157|      border: 1px solid var(--border);\\n   158|      padding: 12px 14px;\\n   159|      text-align: left;\\n   160|      vertical-align: top;\\n   161|    }\\n   162|    th {\\n   163|      background: rgba(30, 41, 59, 0.6);\\n   164|      color: var(--cyan);\\n   165|      font-weight: 600;\\n   166|    }\\n   167|    tr:nth-child(even) td { background: rgba(15, 23, 42, 0.5); }\\n   168|    ul, ol { margin: 12px 0; padding-left: 24px; }\\n   169|    li { margin-bottom: 8px; }\\n   170|    .phases {\\n   171|      display: grid;\\n   172|      grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));\\n   173|      gap: 16px;\\n   174|      margin: 24px 0;\\n   175|    }\\n   176|    .phase {\\n   177|      background: var(--card);\\n   178|      border: 1px solid var(--border);\\n   179|      border-top: 3px solid var(--emerald);\\n   180|      border-radius: 10px;\\n   181|      padding: 18px;\\n   182|    }\\n   183|    .phase .num {\\n   184|      display: inline-block;\\n   185|      width: 28px; height: 28px;\\n   186|      line-height: 28px;\\n   187|      text-align: center;\\n   188|      border-radius: 50%;\\n   189|      background: var(--emerald);\\n   190|      color: #020617;\\n   191|      font-weight: 700;\\n   192|      font-size: 0.85rem;\\n   193|      margin-bottom: 10px;\\n   194|    }\\n   195|    .phase h4 { margin: 0 0 8px; color: var(--emerald); }\\n   196|    .hero {\\n   197|      padding: 64px 0 40px;\\n   198|      text-align: center;\\n   199|    }\\n   200|    .hero h1 { margin-bottom: 14px; }\\n   201|    .hero .tagline {\\n   202|      font-size: 1.25rem;\\n   203|      color: var(--rose);\\n   204|      font-weight: 600;\\n   205|      margin-bottom: 22px;\\n   206|    }\\n   207|    .hero .summary {\\n   208|      max-width: 900px;\\n   209|      margin: 0 auto;\\n   210|      color: var(--muted);\\n   211|      font-size: 1.05rem;\\n   212|    }\\n   213|    .hero-stats {\\n   214|      display: flex;\\n   215|      justify-content: center;\\n   216|      gap: 40px;\\n   217|      flex-wrap: wrap;\\n   218|      margin-top: 36px;\\n   219|    }\\n   220|    .stat { text-align: center; }\\n   221|    .stat .value {\\n   222|      font-size: 1.8rem;\\n   223|      font-weight: 700;\\n   224|      color: var(--cyan);\\n   225|    }\\n   226|    .stat .label { font-size: 0.8rem; color: var(--muted); }\\n   227|    .svg-wrap {\\n   228|      background: var(--bg);\\n   229|      border: 1px solid var(--border);\\n   230|      border-radius: 12px;\\n   231|      padding: 10px;\\n   232|      overflow-x: auto;\\n   233|      box-shadow: 0 0 40px rgba(34, 211, 238, 0.06);\\n   234|    }\\n   235|    .svg-wrap svg {\\n   236|      width: 100%;\\n   237|      height: auto;\\n   238|      min-width: 1100px;\\n   239|      display: block;\\n   240|    }\\n   241|    footer {\\n   242|      border-top: 1px solid var(--border);\\n   243|      padding: 40px 24px;\\n   244|      text-align: center;\\n   245|      color: var(--muted);\\n   246|      font-size: 0.85rem;\\n   247|    }\\n   248|    @media (max-width: 900px) {\\n   249|      .topbar-inner { flex-direction: column; align-items: flex-start; }\\n   250|      .nav-links { justify-content: flex-start; }\\n   251|      h1 { font-size: 2rem; }\\n   252|      .svg-wrap svg { min-width: 900px; }\\n   253|    }\\n   254|  </style>\\n   255|</head>\\n   256|<body>\\n   257|  <nav class=\\\"topbar\\\">\\n   258|    <div class=\\\"topbar-inner\\\">\\n   259|      <a href=\\\"#top\\\" class=\\\"brand\\\"><span class=\\\"brand-dot\\\"></span>VERITAS</a>\\n   260|      <div class=\\\"nav-links\\\">\\n   261|        <a href=\\\"#overview\\\">Overview</a>\\n   262|        <a href=\\\"#problem\\\">Problem</a>\\n   263|        <a href=\\\"#how-it-works\\\">How It Works</a>\\n   264|        <a href=\\\"#architecture\\\">Architecture</a>\\n   265|        <a href=\\\"#ai-pipeline\\\">AI/ML</a>\\n   266|        <a href=\\\"#context-model\\\">Context Model</a>\\n   267|        <a href=\\\"#attribution\\\">Attribution</a>\\n   268|        <a href=\\\"#sources\\\">Sources</a>\\n   269|        <a href=\\\"#products\\\">Products</a>\\n   270|        <a href=\\\"#deployment\\\">Deploy</a>\\n   271|        <a href=\\\"#business\\\">Business</a>\\n   272|        <a href=\\\"#competition\\\">Competition</a>\\n   273|        <a href=\\\"#mvp\\\">MVP</a>\\n   274|        <a href=\\\"#roadmap\\\">Roadmap</a>\\n   275|      </div>\\n   276|    </div>\\n   277|  </nav>\\n   278|  <main class=\\\"wrapper\\\" id=\\\"top\\\">\\n   279|    <section class=\\\"hero\\\" id=\\\"overview\\\">\\n   280|      <h1>VERITAS</h1>\\n   281|      <div class=\\\"tagline\\\">Detect, attribute, and counter coordinated disinformation in real time.</div>\\n   282|      <p class=\\\"summary\\\">\\n   283|        A sovereign AI platform for democratic governments that ingests multi-source social and dark-web signals,\\n   284|        extracts and attributes malign information campaigns, and produces machine-readable intelligence products\\n   285|        in STIX/MISP format. VERITAS closes the blind spot Western tools cannot see: non-English, culturally encoded\\n   286|        influence operations in the Turkish and broader Islamosphere information spaces.\\n   287|      </p>\\n   288|      <div class=\\\"hero-stats\\\">\\n   289|        <div class=\\\"stat\\\"><div class=\\\"value\\\">€5B+</div><div class=\\\"label\\\">adversarial annual spend</div></div>\\n   290|        <div class=\\\"stat\\\"><div class=\\\"value\\\">24–72h</div><div class=\\\"label\\\">current detection latency</div></div>\\n   291|        <div class=\\\"stat\\\"><div class=\\\"value\\\"><15 min</div><div class=\\\"label\\\">VERITAS attribution target</div></div>\\n   292|        <div class=\\\"stat\\\"><div class=\\\"value\\\">€2M–€10M</div><div class=\\\"label\\\">target ARR per customer</div></div>\\n   293|      </div>\\n   294|    </section>\\n   295|\\n   296|    <section id=\\\"problem\\\">\\n   297|      <h2>The Problem</h2>\\n   298|      <p class=\\\"lead\\\">Disinformation is no longer a social-media nuisance. It is a financed, staffed, and measured component of state and proxy hybrid warfare.</p>\\n   299|\\n   300|      <h3>Scale and Spend</h3>\\n   301|      <p>EU disinformation researchers estimate adversarial annual spending on influence operations at roughly <strong>€5 billion</strong>, covering troll farms, fake media outlets, botnet infrastructure, paid opinion leaders, and synthetic media production. The ROI is asymmetric: a single well-timed false narrative can shift electoral behavior or inflame civil unrest at a cost measured in thousands of euros.</p>\\n   302|\\n   303|      <h3>Detection Latency</h3>\\n   304|      <p>Manual OSINT monitoring often surfaces a campaign only after it has crossed into mainstream media. Automated brand-safety classifiers miss new-narrative seeding, coordinated inauthentic behavior, and culturally encoded incitement. Average time-to-detection for a new state-backed campaign is <strong>24–72 hours</strong> — by then the narrative has been seeded, amplified, and laundered into mainstream discourse.</p>\\n   305|\\n   306|      <h3>Real Examples</h3>\\n   307|      <ul>\\n   308|        <li><strong>Ukraine war IO:</strong> Russian and proxy actors seed false narratives about refugee crime, NATO biolabs, and fabricated atrocities first in German-, Turkish-, and Arabic-language Telegram and X channels, then launder them into domestic communities.</li>\\n   309|        <li><strong>Iranian IRGC/IOPI operations:</strong> Proxy networks use Turkish-language “anti-imperialist” framing to reach Sunni-majority European diaspora audiences, mixing legitimate criticism with fabricated atrocity content. Western tools classify the religious/historical references as neutral.</li>\\n   310|        <li><strong>Chinese covert influence:</strong> Operations targeting the Turkish diaspora in Germany exploit honor/shame dynamics and kinship networks — detection requires native cultural models, not keyword lists.</li>\\n   311|      </ul>\\n   312|\\n   313|      <h3>Why Current Tools Fail</h3>\\n   314|      <ul>\\n   315|        <li><strong>Language:</strong> Most classifiers are trained predominantly on English data. Low-resource but high-threat languages such as Turkish, Kurdish, and Arabic dialects are under-modeled.</li>\\n   316|        <li><strong>Cultural context:</strong> References to Srebrenica, the Crusades, or Ottoman history are used as coded incitement and misread as historical discussion.</li>\\n   317|        <li><strong>Coordination awareness:</strong> The threat is synchronized seeding across hundreds of accounts and platforms. This requires temporal graph analysis, not sentiment analysis.</li>\\n   318|        <li><strong>Attribution gap:</strong> Knowing something is false is not enough. Analysts need evidence chains identifying who is pushing it, why, and through which proxy infrastructure.</li>\\n   319|      </ul>\\n   320|    </section>\\n   321|\\n   322|    <section id=\\\"how-it-works\\\">\\n   323|      <h2>How VERITAS Works</h2>\\n   324|      <p class=\\\"lead\\\">VERITAS is organized as a five-phase pipeline: Collect → Detect → Attribute → Produce → Deliver.</p>\\n   325|      <div class=\\\"phases\\\">\\n   326|        <div class=\\\"phase\\\">\\n   327|          <div class=\\\"num\\\">1</div>\\n   328|          <h4>Collect</h4>\\n   329|          <p>Ingest signals from Telegram, X, TikTok, YouTube, licensed news wires (Reuters, AFP, DPA), and dark-web/onion sources. Each source uses adapters that normalize content into a canonical event schema.</p>\\n   330|        </div>\\n   331|        <div class=\\\"phase\\\">\\n   332|          <div class=\\\"num\\\">2</div>\\n   333|          <h4>Detect</h4>\\n   334|          <p>Normalize language, transcribe audio/video via Whisper, run OCR on memes, tag dialects, and flag coordinated inauthentic behavior through burst detection and semantic clustering.</p>\\n   335|        </div>\\n   336|        <div class=\\\"phase\\\">\\n   337|          <div class=\\\"num\\\">3</div>\\n   338|          <h4>Attribute</h4>\\n   339|          <p>Move from content to actor. Linguistic forensics, TTP fingerprint matching, and the Cross-Cultural Context Model produce structured attribution hypotheses with confidence intervals.</p>\\n   340|        </div>\\n   341|        <div class=\\\"phase\\\">\\n   342|          <div class=\\\"num\\\">4</div>\\n   343|          <h4>Produce</h4>\\n   344|          <p>Persist campaigns to the Campaign Knowledge Graph. Generate dashboards, automated STIX 2.1/MISP reports, counter-narrative suggestions, and early-warning alerts.</p>\\n   345|        </div>\\n   346|        <div class=\\\"phase\\\">\\n   347|          <div class=\\\"num\\\">5</div>\\n   348|          <h4>Deliver</h4>\\n   349|          <p>Consume intelligence through a secure government portal (mTLS + SAML/OIDC), a scoped REST API for SOC/CERT workflows, or an air-gapped classified variant.</p>\\n   350|        </div>\\n   351|      </div>\\n   352|    </section>\\n   353|    <section id=\\\"architecture\\\">\\n   354|      <h2>Technical Architecture</h2>\\n   355|      <p class=\\\"lead\\\">A log-centric, graph-native intelligence architecture built for throughput, replay, and auditability.</p>\\n   356|      <div class=\\\"svg-wrap\\\">\\n   357|    <svg viewBox=\\\"0 0 1300 900\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n   358|      <defs>\\n   359|        <pattern id=\\\"grid\\\" width=\\\"40\\\" height=\\\"40\\\" patternUnits=\\\"userSpaceOnUse\\\">\\n   360|          <path d=\\\"M 40 0 L 0 0 0 40\\\" fill=\\\"none\\\" stroke=\\\"#0f172a\\\" stroke-width=\\\"1\\\"/>\\n   361|        </pattern>\\n   362|        <filter id=\\\"glow\\\" x=\\\"-20%\\\" y=\\\"-20%\\\" width=\\\"140%\\\" height=\\\"140%\\\">\\n   363|          <feGaussianBlur stdDeviation=\\\"2\\\" result=\\\"blur\\\" />\\n   364|          <feComposite in=\\\"SourceGraphic\\\" in2=\\\"blur\\\" operator=\\\"over\\\" />\\n   365|        </filter>\\n   366|        <marker id=\\\"arrow\\\" markerWidth=\\\"8\\\" markerHeight=\\\"8\\\" refX=\\\"7\\\" refY=\\\"4\\\" orient=\\\"auto\\\">\\n   367|          <path d=\\\"M0,0 L8,4 L0,8 L2,4 z\\\" fill=\\\"#64748b\\\" />\\n   368|        </marker>\\n   369|        <marker id=\\\"arrow-amber\\\" markerWidth=\\\"8\\\" markerHeight=\\\"8\\\" refX=\\\"7\\\" refY=\\\"4\\\" orient=\\\"auto\\\">\\n   370|          <path d=\\\"M0,0 L8,4 L0,8 L2,4 z\\\" fill=\\\"#fbbf24\\\" />\\n   371|        </marker>\\n   372|        <marker id=\\\"arrow-cyan\\\" markerWidth=\\\"8\\\" markerHeight=\\\"8\\\" refX=\\\"7\\\" refY=\\\"4\\\" orient=\\\"auto\\\">\\n   373|          <path d=\\\"M0,0 L8,4 L0,8 L2,4 z\\\" fill=\\\"#22d3ee\\\" />\\n   374|        </marker>\\n   375|      </defs>\\n   376|\\n   377|      <!-- Background -->\\n   378|      <rect x=\\\"0\\\" y=\\\"0\\\" width=\\\"1300\\\" height=\\\"900\\\" fill=\\\"#020617\\\" />\\n   379|      <rect x=\\\"0\\\" y=\\\"0\\\" width=\\\"1300\\\" height=\\\"900\\\" fill=\\\"url(#grid)\\\" />\\n   380|\\n   381|      <!-- Header -->\\n   382|      <g transform=\\\"translate(40,30)\\\">\\n   383|        <circle cx=\\\"0\\\" cy=\\\"10\\\" r=\\\"4\\\" fill=\\\"#22d3ee\\\" class=\\\"pulse\\\" />\\n   384|        <text x=\\\"18\\\" y=\\\"16\\\" font-family=\\\"'JetBrains Mono', monospace\\\" font-size=\\\"22\\\" font-weight=\\\"700\\\" fill=\\\"#f8fafc\\\">VERITAS</text>\\n   385|        <text x=\\\"130\\\" y=\\\"16\\\" font-family=\\\"'JetBrains Mono', monospace\\\" font-size=\\\"14\\\" font-weight=\\\"400\\\" fill=\\\"#94a3b8\\\">— AI Counter-Disinformation Platform</text>\\n   386|        <text x=\\\"18\\\" y=\\\"40\\\" font-family=\\\"'JetBrains Mono', monospace\\\" font-size=\\\"11\\\" fill=\\\"#64748b\\\">Real-time disinformation detection, attribution, and counter-narrative generation for democratic governments</text>\\n   387|      </g>\\n   388|\\n   389|      <!-- Tier labels -->\\n   390|      <g font-family=\\\"'JetBrains Mono', monospace\\\" font-size=\\\"10\\\" font-weight=\\\"700\\\" fill=\\\"#475569\\\" text-anchor=\\\"middle\\\">\\n   391|        <text x=\\\"130\\\" y=\\\"90\\\">TIER 1 — DATA SOURCES</text>\\n   392|        <text x=\\\"320\\\" y=\\\"90\\\">TIER 2 — COLLECTION</text>\\n   393|        <text x=\\\"480\\\" y=\\\"90\\\">TIER 3 — MESSAGE BUS</text>\\n   394|        <text x=\\\"660\\\" y=\\\"90\\\">TIER 4 — AI ANALYSIS PIPELINE</text>\\n   395|        <text x=\\\"870\\\" y=\\\"90\\\">TIER 5 — KNOWLEDGE STORE</text>\\n   396|        <text x=\\\"1065\\\" y=\\\"90\\\">TIER 6 — PRODUCTION</text>\\n   397|        <text x=\\\"1065\\\" y=\\\"655\\\">TIER 7 — DELIVERY</text>\\n   398|      </g>\\n   399|\\n   400|      <!-- Security boundary: AI Pipeline + Knowledge Store -->\\n   401|      <rect x=\\\"545\\\" y=\\\"105\\\" width=\\\"410\\\" height=\\\"430\\\" rx=\\\"12\\\" fill=\\\"none\\\" stroke=\\\"#fb7185\\\" stroke-width=\\\"2\\\" stroke-dasharray=\\\"10,6\\\" opacity=\\\"0.9\\\" />\\n   402|      <text x=\\\"560\\\" y=\\\"125\\\" font-family=\\\"'JetBrains Mono', monospace\\\" font-size=\\\"10\\\" font-weight=\\\"700\\\" fill=\\\"#fb7185\\\">CLASSIFIED PROCESSING BOUNDARY</text>\\n   403|\\n   404|      <!-- Kafka vertical bus -->\\n   405|      <rect x=\\\"450\\\" y=\\\"145\\\" width=\\\"60\\\" height=\\\"585\\\" rx=\\\"6\\\" fill=\\\"#431407\\\" opacity=\\\"0.6\\\" />\\n   406|      <rect x=\\\"455\\\" y=\\\"150\\\" width=\\\"50\\\" height=\\\"575\\\" rx=\\\"4\\\" fill=\\\"none\\\" stroke=\\\"#fb923c\\\" stroke-width=\\\"2\\\" />\\n   407|      <text x=\\\"480\\\" y=\\\"175\\\" font-family=\\\"'JetBrains Mono', monospace\\\" font-size=\\\"11\\\" font-weight=\\\"700\\\" fill=\\\"#fb923c\\\" text-anchor=\\\"middle\\\" transform=\\\"rotate(-90,480,175)\\\">APACHE KAFKA EVENT MESH</text>\\n   408|      <g stroke=\\\"#fb923c\\\" stroke-width=\\\"1\\\" opacity=\\\"0.4\\\">\\n   409|        <line x1=\\\"465\\\" y1=\\\"190\\\" x2=\\\"465\\\" y2=\\\"725\\\" />\\n   410|        <line x1=\\\"480\\\" y1=\\\"190\\\" x2=\\\"480\\\" y2=\\\"725\\\" />\\n   411|        <line x1=\\\"495\\\" y1=\\\"190\\\" x2=\\\"495\\\" y2=\\\"725\\\" />\\n   412|      </g>\\n   413|\\n   414|      <!-- Helper: box -->\\n   415|      <defs>\\n   416|        <style>\\n   417|          .box { rx: 6; stroke-width: 1.5; }\\n   418|          .box-text { font-family: 'JetBrains Mono', monospace; font-size: 9px; font-weight: 600; }\\n   419|          .box-sub { font-family: 'JetBrains Mono', monospace; font-size: 7px; font-weight: 400; fill: #cbd5e1; opacity: 0.85; }\\n   420|        </style>\\n   421|      </defs>\\n   422|\\n   423|      <!-- Tier 1: Data Sources (slate) -->\\n   424|      <g id=\\\"tier1\\\">\\n   425|        <rect x=\\\"40\\\" y=\\\"145\\\" width=\\\"160\\\" height=\\\"36\\\" class=\\\"box\\\" fill=\\\"#1e293b\\\" stroke=\\\"#94a3b8\\\" />\\n   426|        <text x=\\\"120\\\" y=\\\"168\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#94a3b8\\\">Telegram Channels &amp; Groups</text>\\n   427|\\n   428|        <rect x=\\\"40\\\" y=\\\"195\\\" width=\\\"160\\\" height=\\\"36\\\" class=\\\"box\\\" fill=\\\"#1e293b\\\" stroke=\\\"#94a3b8\\\" />\\n   429|        <text x=\\\"120\\\" y=\\\"218\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#94a3b8\\\">X/Twitter Firehose</text>\\n   430|\\n   431|        <rect x=\\\"40\\\" y=\\\"245\\\" width=\\\"160\\\" height=\\\"36\\\" class=\\\"box\\\" fill=\\\"#1e293b\\\" stroke=\\\"#94a3b8\\\" />\\n   432|        <text x=\\\"120\\\" y=\\\"268\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#94a3b8\\\">TikTok Trends</text>\\n   433|\\n   434|        <rect x=\\\"40\\\" y=\\\"295\\\" width=\\\"160\\\" height=\\\"36\\\" class=\\\"box\\\" fill=\\\"#1e293b\\\" stroke=\\\"#94a3b8\\\" />\\n   435|        <text x=\\\"120\\\" y=\\\"318\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#94a3b8\\\">YouTube Transcripts</text>\\n   436|\\n   437|        <rect x=\\\"40\\\" y=\\\"345\\\" width=\\\"160\\\" height=\\\"36\\\" class=\\\"box\\\" fill=\\\"#1e293b\\\" stroke=\\\"#94a3b8\\\" />\\n   438|        <text x=\\\"120\\\" y=\\\"365\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#94a3b8\\\">News Wire APIs</text>\\n   439|        <text x=\\\"120\\\" y=\\\"376\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\">Reuters, AFP, DPA</text>\\n   440|\\n   441|        <rect x=\\\"40\\\" y=\\\"395\\\" width=\\\"160\\\" height=\\\"36\\\" class=\\\"box\\\" fill=\\\"#1e293b\\\" stroke=\\\"#94a3b8\\\" />\\n   442|        <text x=\\\"120\\\" y=\\\"415\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#94a3b8\\\">Dark Web / Telegram Deep</text>\\n   443|        <text x=\\\"120\\\" y=\\\"426\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\">Onion / private channels</text>\\n   444|      </g>\\n   445|\\n   446|      <!-- Tier 2: Collection (amber) -->\\n   447|      <g id=\\\"tier2\\\">\\n   448|        <rect x=\\\"250\\\" y=\\\"160\\\" width=\\\"160\\\" height=\\\"46\\\" class=\\\"box\\\" fill=\\\"#2a1d0a\\\" stroke=\\\"#fbbf24\\\" />\\n   449|        <text x=\\\"330\\\" y=\\\"182\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#fbbf24\\\">Multi-Platform Ingestion</text>\\n   450|        <text x=\\\"330\\\" y=\\\"195\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\">Engine (Telegram MTProto, X API)</text>\\n   451|\\n   452|        <rect x=\\\"250\\\" y=\\\"230\\\" width=\\\"160\\\" height=\\\"46\\\" class=\\\"box\\\" fill=\\\"#2a1d0a\\\" stroke=\\\"#fbbf24\\\" />\\n   453|        <text x=\\\"330\\\" y=\\\"252\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#fbbf24\\\">Real-time Stream Processor</text>\\n   454|        <text x=\\\"330\\\" y=\\\"265\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\">Flink / Kafka Streams</text>\\n   455|\\n   456|        <rect x=\\\"250\\\" y=\\\"300\\\" width=\\\"160\\\" height=\\\"46\\\" class=\\\"box\\\" fill=\\\"#2a1d0a\\\" stroke=\\\"#fbbf24\\\" />\\n   457|        <text x=\\\"330\\\" y=\\\"322\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#fbbf24\\\">Media Transcriber</text>\\n   458|        <text x=\\\"330\\\" y=\\\"335\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\">Whisper → text, image OCR</text>\\n   459|\\n   460|        <rect x=\\\"250\\\" y=\\\"370\\\" width=\\\"160\\\" height=\\\"46\\\" class=\\\"box\\\" fill=\\\"#2a1d0a\\\" stroke=\\\"#fbbf24\\\" />\\n   461|        <text x=\\\"330\\\" y=\\\"392\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#fbbf24\\\">Language Detector &amp; Normalizer</text>\\n   462|        <text x=\\\"330\\\" y=\\\"405\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\">fastText / CLD3 / transliteration</text>\\n   463|      </g>\\n   464|\\n   465|      <!-- Tier 4: AI Analysis Pipeline (emerald) -->\\n   466|      <g id=\\\"tier4\\\">\\n   467|        <rect x=\\\"565\\\" y=\\\"145\\\" width=\\\"175\\\" height=\\\"42\\\" class=\\\"box\\\" fill=\\\"#064e3b\\\" stroke=\\\"#34d399\\\" />\\n   468|        <text x=\\\"652\\\" y=\\\"165\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#34d399\\\">Narrative Extraction LLM</text>\\n   469|        <text x=\\\"652\\\" y=\\\"178\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\">fine-tuned 70B / Mixtral 8x22B</text>\\n   470|\\n   471|        <rect x=\\\"565\\\" y=\\\"205\\\" width=\\\"175\\\" height=\\\"42\\\" class=\\\"box\\\" fill=\\\"#064e3b\\\" stroke=\\\"#34d399\\\" />\\n   472|        <text x=\\\"652\\\" y=\\\"225\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#34d399\\\">Bot Coordination Detector</text>\\n   473|        <text x=\\\"652\\\" y=\\\"238\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\">temporal burst + graph clustering</text>\\n   474|\\n   475|        <rect x=\\\"565\\\" y=\\\"265\\\" width=\\\"175\\\" height=\\\"42\\\" class=\\\"box\\\" fill=\\\"#064e3b\\\" stroke=\\\"#34d399\\\" />\\n   476|        <text x=\\\"652\\\" y=\\\"285\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#34d399\\\">State Actor Attribution Engine</text>\\n   477|        <text x=\\\"652\\\" y=\\\"298\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\">TTP fingerprint matching</text>\\n   478|\\n   479|        <rect x=\\\"565\\\" y=\\\"325\\\" width=\\\"175\\\" height=\\\"42\\\" class=\\\"box\\\" fill=\\\"#064e3b\\\" stroke=\\\"#34d399\\\" />\\n   480|        <text x=\\\"652\\\" y=\\\"345\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#34d399\\\">Linguistic Forensic Analyzer</text>\\n   481|        <text x=\\\"652\\\" y=\\\"358\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\">syntax + idiolect signatures</text>\\n   482|\\n   483|        <rect x=\\\"565\\\" y=\\\"385\\\" width=\\\"175\\\" height=\\\"52\\\" class=\\\"box\\\" fill=\\\"#064e3b\\\" stroke=\\\"#34d399\\\" filter=\\\"url(#glow)\\\" />\\n   484|        <text x=\\\"652\\\" y=\\\"405\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#34d399\\\">Cross-Cultural Context Model</text>\\n   485|        <text x=\\\"652\\\" y=\\\"420\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\">Turkish / Islamosphere nuances</text>\\n   486|        <text x=\\\"652\\\" y=\\\"431\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\">religious code, honor/shame</text>\\n   487|\\n   488|        <rect x=\\\"565\\\" y=\\\"455\\\" width=\\\"175\\\" height=\\\"42\\\" class=\\\"box\\\" fill=\\\"#064e3b\\\" stroke=\\\"#34d399\\\" />\\n   489|        <text x=\\\"652\\\" y=\\\"475\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#34d399\\\">Factuality Scorer</text>\\n   490|        <text x=\\\"652\\\" y=\\\"488\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\">claims vs verified ground truth</text>\\n   491|      </g>\\n   492|\\n   493|      <!-- Tier 5: Knowledge Store (violet) -->\\n   494|      <g id=\\\"tier5\\\">\\n   495|        <rect x=\\\"805\\\" y=\\\"145\\\" width=\\\"170\\\" height=\\\"52\\\" class=\\\"box\\\" fill=\\\"#2e1065\\\" stroke=\\\"#a78bfa\\\" />\\n   496|        <text x=\\\"890\\\" y=\\\"168\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#a78bfa\\\">Campaign Knowledge Graph</text>\\n   497|        <text x=\\\"890\\\" y=\\\"183\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\">Neo4j — actors, narratives, channels</text>\\n   498|\\n   499|        <rect x=\\\"805\\\" y=\\\"220\\\" width=\\\"170\\\" height=\\\"52\\\" class=\\\"box\\\" fill=\\\"#2e1065\\\" stroke=\\\"#a78bfa\\\" />\\n   500|        <text x=\\\"890\\\" y=\\\"243\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#a78bfa\\\">Evidence Vault</text>\\n   501|\", \"total_lines\": 1041, \"file_size\": 61201, \"truncated\": true, \"hint\": \"Use offset=501 to continue reading (showing 1-500 of 1041 lines)\", \"is_binary\": false, \"is_image\": false}",
      "tool_call_id": "functions.read_file:0"
    },
    {
      "role": "assistant",
      "content": "",
      "reasoning": "We need rebuild file. Need read remaining content. We have read lines 1-500. Need full content. Continue reading 501-1041.",
      "finish_reason": "tool_calls",
      "reasoning_content": "We need rebuild file. Need read remaining content. We have read lines 1-500. Need full content. Continue reading 501-1041.",
      "tool_calls": [
        {
          "id": "functions.read_file:1",
          "call_id": "functions.read_file:1",
          "response_item_id": "fc_functionsread_file1",
          "type": "function",
          "function": {
            "name": "read_file",
            "arguments": "{\"path\":\"/DATA/veritas-website.html\",\"offset\":501,\"limit\":600}"
          }
        }
      ]
    },
    {
      "role": "tool",
      "name": "read_file",
      "content": "{\"content\": \"   501|        <text x=\\\"890\\\" y=\\\"258\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\">immutable, chain-of-custody</text>\\n   502|\\n   503|        <rect x=\\\"805\\\" y=\\\"295\\\" width=\\\"170\\\" height=\\\"52\\\" class=\\\"box\\\" fill=\\\"#2e1065\\\" stroke=\\\"#a78bfa\\\" />\\n   504|        <text x=\\\"890\\\" y=\\\"318\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#a78bfa\\\">Fingerprint Database</text>\\n   505|        <text x=\\\"890\\\" y=\\\"333\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\">known campaign signatures</text>\\n   506|      </g>\\n   507|\\n   508|      <!-- Tier 6: Production (rose) -->\\n   509|      <g id=\\\"tier6\\\">\\n   510|        <rect x=\\\"985\\\" y=\\\"145\\\" width=\\\"175\\\" height=\\\"42\\\" class=\\\"box\\\" fill=\\\"#4c0519\\\" stroke=\\\"#fb7185\\\" />\\n   511|        <text x=\\\"1072\\\" y=\\\"165\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#fb7185\\\">Real-time Threat Dashboard</text>\\n   512|        <text x=\\\"1072\\\" y=\\\"178\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\">live campaign topology</text>\\n   513|\\n   514|        <rect x=\\\"985\\\" y=\\\"205\\\" width=\\\"175\\\" height=\\\"52\\\" class=\\\"box\\\" fill=\\\"#4c0519\\\" stroke=\\\"#fb7185\\\" />\\n   515|        <text x=\\\"1072\\\" y=\\\"225\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#fb7185\\\">Automated Intelligence Reports</text>\\n   516|        <text x=\\\"1072\\\" y=\\\"240\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\">STIX 2.1 / MISP format</text>\\n   517|\\n   518|        <rect x=\\\"985\\\" y=\\\"280\\\" width=\\\"175\\\" height=\\\"42\\\" class=\\\"box\\\" fill=\\\"#4c0519\\\" stroke=\\\"#fb7185\\\" />\\n   519|        <text x=\\\"1072\\\" y=\\\"300\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#fb7185\\\">Counter-Narrative Generator</text>\\n   520|        <text x=\\\"1072\\\" y=\\\"313\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\">audience-tailored rebuttals</text>\\n   521|\\n   522|        <rect x=\\\"985\\\" y=\\\"345\\\" width=\\\"175\\\" height=\\\"42\\\" class=\\\"box\\\" fill=\\\"#4c0519\\\" stroke=\\\"#fb7185\\\" />\\n   523|        <text x=\\\"1072\\\" y=\\\"365\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#fb7185\\\">Early Warning Alert System</text>\\n   524|        <text x=\\\"1072\\\" y=\\\"378\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\">threshold-based + anomaly</text>\\n   525|      </g>\\n   526|\\n   527|      <!-- Tier 7: Delivery (cyan) -->\\n   528|      <g id=\\\"tier7\\\">\\n   529|        <rect x=\\\"985\\\" y=\\\"675\\\" width=\\\"175\\\" height=\\\"42\\\" class=\\\"box\\\" fill=\\\"#083344\\\" stroke=\\\"#22d3ee\\\" />\\n   530|        <text x=\\\"1072\\\" y=\\\"695\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#22d3ee\\\">Government Secure Portal</text>\\n   531|        <text x=\\\"1072\\\" y=\\\"708\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\">mTLS + SSO (SAML/OIDC)</text>\\n   532|\\n   533|        <rect x=\\\"985\\\" y=\\\"735\\\" width=\\\"175\\\" height=\\\"42\\\" class=\\\"box\\\" fill=\\\"#083344\\\" stroke=\\\"#22d3ee\\\" />\\n   534|        <text x=\\\"1072\\\" y=\\\"755\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#22d3ee\\\">REST API for Platform Integration</text>\\n   535|        <text x=\\\"1072\\\" y=\\\"768\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\">rate-limited, scoped keys</text>\\n   536|\\n   537|        <rect x=\\\"985\\\" y=\\\"795\\\" width=\\\"175\\\" height=\\\"42\\\" class=\\\"box\\\" fill=\\\"#083344\\\" stroke=\\\"#22d3ee\\\" />\\n   538|        <text x=\\\"1072\\\" y=\\\"815\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#22d3ee\\\">Air-Gapped Classified Variant</text>\\n   539|        <text x=\\\"1072\\\" y=\\\"828\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\">offline LLM + T5-tier hardware</text>\\n   540|      </g>\\n   541|\\n   542|      <!-- Data flow arrows -->\\n   543|      <!-- Tier 1 -> Tier 2 -->\\n   544|      <g stroke=\\\"#fbbf24\\\" stroke-width=\\\"1.5\\\" marker-end=\\\"url(#arrow-amber)\\\" opacity=\\\"0.8\\\">\\n   545|        <line x1=\\\"200\\\" y1=\\\"163\\\" x2=\\\"250\\\" y2=\\\"183\\\" />\\n   546|        <line x1=\\\"200\\\" y1=\\\"213\\\" x2=\\\"250\\\" y2=\\\"233\\\" />\\n   547|        <line x1=\\\"200\\\" y1=\\\"263\\\" x2=\\\"250\\\" y2=\\\"253\\\" />\\n   548|        <line x1=\\\"200\\\" y1=\\\"313\\\" x2=\\\"250\\\" y2=\\\"313\\\" />\\n   549|        <line x1=\\\"200\\\" y1=\\\"363\\\" x2=\\\"250\\\" y2=\\\"343\\\" />\\n   550|        <line x1=\\\"200\\\" y1=\\\"413\\\" x2=\\\"250\\\" y2=\\\"393\\\" />\\n   551|      </g>\\n   552|\\n   553|      <!-- Tier 2 -> Kafka -->\\n   554|      <g stroke=\\\"#fb923c\\\" stroke-width=\\\"1.5\\\" marker-end=\\\"url(#arrow)\\\" opacity=\\\"0.8\\\">\\n   555|        <line x1=\\\"410\\\" y1=\\\"183\\\" x2=\\\"450\\\" y2=\\\"200\\\" />\\n   556|        <line x1=\\\"410\\\" y1=\\\"253\\\" x2=\\\"450\\\" y2=\\\"270\\\" />\\n   557|        <line x1=\\\"410\\\" y1=\\\"323\\\" x2=\\\"450\\\" y2=\\\"340\\\" />\\n   558|        <line x1=\\\"410\\\" y1=\\\"393\\\" x2=\\\"450\\\" y2=\\\"410\\\" />\\n   559|      </g>\\n   560|\\n   561|      <!-- Kafka -> Tier 4 -->\\n   562|      <g stroke=\\\"#fb923c\\\" stroke-width=\\\"1.5\\\" marker-end=\\\"url(#arrow)\\\" opacity=\\\"0.8\\\">\\n   563|        <line x1=\\\"510\\\" y1=\\\"180\\\" x2=\\\"565\\\" y2=\\\"166\\\" />\\n   564|        <line x1=\\\"510\\\" y1=\\\"240\\\" x2=\\\"565\\\" y2=\\\"226\\\" />\\n   565|        <line x1=\\\"510\\\" y1=\\\"300\\\" x2=\\\"565\\\" y2=\\\"286\\\" />\\n   566|        <line x1=\\\"510\\\" y1=\\\"360\\\" x2=\\\"565\\\" y2=\\\"346\\\" />\\n   567|        <line x1=\\\"510\\\" y1=\\\"420\\\" x2=\\\"565\\\" y2=\\\"411\\\" />\\n   568|        <line x1=\\\"510\\\" y1=\\\"480\\\" x2=\\\"565\\\" y2=\\\"466\\\" />\\n   569|      </g>\\n   570|\\n   571|      <!-- Tier 4 -> Tier 5 -->\\n   572|      <g stroke=\\\"#a78bfa\\\" stroke-width=\\\"1.5\\\" marker-end=\\\"url(#arrow)\\\" opacity=\\\"0.8\\\">\\n   573|        <line x1=\\\"740\\\" y1=\\\"166\\\" x2=\\\"805\\\" y2=\\\"171\\\" />\\n   574|        <line x1=\\\"740\\\" y1=\\\"226\\\" x2=\\\"805\\\" y2=\\\"246\\\" />\\n   575|        <line x1=\\\"740\\\" y1=\\\"286\\\" x2=\\\"805\\\" y2=\\\"321\\\" />\\n   576|        <line x1=\\\"740\\\" y1=\\\"411\\\" x2=\\\"805\\\" y2=\\\"296\\\" />\\n   577|        <line x1=\\\"740\\\" y1=\\\"476\\\" x2=\\\"805\\\" y2=\\\"331\\\" />\\n   578|      </g>\\n   579|\\n   580|      <!-- Tier 5 -> Tier 6 -->\\n   581|      <g stroke=\\\"#fb7185\\\" stroke-width=\\\"1.5\\\" marker-end=\\\"url(#arrow)\\\" opacity=\\\"0.8\\\">\\n   582|        <line x1=\\\"975\\\" y1=\\\"171\\\" x2=\\\"985\\\" y2=\\\"166\\\" />\\n   583|        <line x1=\\\"975\\\" y1=\\\"246\\\" x2=\\\"985\\\" y2=\\\"231\\\" />\\n   584|        <line x1=\\\"975\\\" y1=\\\"321\\\" x2=\\\"985\\\" y2=\\\"301\\\" />\\n   585|        <line x1=\\\"975\\\" y1=\\\"321\\\" x2=\\\"985\\\" y2=\\\"366\\\" />\\n   586|      </g>\\n   587|\\n   588|      <!-- Tier 6 -> Tier 7 (dashed auth-flow) -->\\n   589|      <g stroke=\\\"#22d3ee\\\" stroke-width=\\\"1.5\\\" stroke-dasharray=\\\"6,4\\\" marker-end=\\\"url(#arrow-cyan)\\\" opacity=\\\"0.85\\\">\\n   590|        <line x1=\\\"1072\\\" y1=\\\"505\\\" x2=\\\"1072\\\" y2=\\\"675\\\" />\\n   591|      </g>\\n   592|      <text x=\\\"1095\\\" y=\\\"600\\\" font-family=\\\"'JetBrains Mono', monospace\\\" font-size=\\\"9\\\" fill=\\\"#22d3ee\\\" transform=\\\"rotate(90,1095,600)\\\">secure channel</text>\\n   593|\\n   594|      <!-- Feedback loop: Knowledge Store -> AI Pipeline -->\\n   595|      <path d=\\\"M 805 380 Q 740 420 740 350\\\" fill=\\\"none\\\" stroke=\\\"#a78bfa\\\" stroke-width=\\\"1.5\\\" stroke-dasharray=\\\"4,4\\\" marker-end=\\\"url(#arrow)\\\" opacity=\\\"0.6\\\" />\\n   596|      <text x=\\\"770\\\" y=\\\"410\\\" font-family=\\\"'JetBrains Mono', monospace\\\" font-size=\\\"8\\\" fill=\\\"#a78bfa\\\">fingerprints</text>\\n   597|\\n   598|      <!-- Legend (bottom-right) -->\\n   599|      <g transform=\\\"translate(1080, 520)\\\">\\n   600|        <rect x=\\\"0\\\" y=\\\"0\\\" width=\\\"190\\\" height=\\\"110\\\" rx=\\\"8\\\" fill=\\\"#0f172a\\\" stroke=\\\"#1e293b\\\" />\\n   601|        <text x=\\\"10\\\" y=\\\"18\\\" font-family=\\\"'JetBrains Mono', monospace\\\" font-size=\\\"10\\\" font-weight=\\\"700\\\" fill=\\\"#e2e8f0\\\">LEGEND</text>\\n   602|\\n   603|        <rect x=\\\"10\\\" y=\\\"28\\\" width=\\\"10\\\" height=\\\"10\\\" rx=\\\"2\\\" fill=\\\"#94a3b8\\\" />\\n   604|        <text x=\\\"26\\\" y=\\\"37\\\" font-family=\\\"'JetBrains Mono', monospace\\\" font-size=\\\"8\\\" fill=\\\"#cbd5e1\\\">External Data Sources</text>\\n   605|\\n   606|        <rect x=\\\"10\\\" y=\\\"44\\\" width=\\\"10\\\" height=\\\"10\\\" rx=\\\"2\\\" fill=\\\"#fbbf24\\\" />\\n   607|        <text x=\\\"26\\\" y=\\\"53\\\" font-family=\\\"'JetBrains Mono', monospace\\\" font-size=\\\"8\\\" fill=\\\"#cbd5e1\\\">Collection / Ingestion</text>\\n   608|\\n   609|        <rect x=\\\"10\\\" y=\\\"60\\\" width=\\\"10\\\" height=\\\"10\\\" rx=\\\"2\\\" fill=\\\"#34d399\\\" />\\n   610|        <text x=\\\"26\\\" y=\\\"69\\\" font-family=\\\"'JetBrains Mono', monospace\\\" font-size=\\\"8\\\" fill=\\\"#cbd5e1\\\">AI / ML Processing</text>\\n   611|\\n   612|        <rect x=\\\"100\\\" y=\\\"28\\\" width=\\\"10\\\" height=\\\"10\\\" rx=\\\"2\\\" fill=\\\"#fb7185\\\" />\\n   613|        <text x=\\\"116\\\" y=\\\"37\\\" font-family=\\\"'JetBrains Mono', monospace\\\" font-size=\\\"8\\\" fill=\\\"#cbd5e1\\\">Detection / Attribution</text>\\n   614|\\n   615|        <rect x=\\\"100\\\" y=\\\"44\\\" width=\\\"10\\\" height=\\\"10\\\" rx=\\\"2\\\" fill=\\\"#a78bfa\\\" />\\n   616|        <text x=\\\"116\\\" y=\\\"53\\\" font-family=\\\"'JetBrains Mono', monospace\\\" font-size=\\\"8\\\" fill=\\\"#cbd5e1\\\">Knowledge Store</text>\\n   617|\\n   618|        <rect x=\\\"100\\\" y=\\\"60\\\" width=\\\"10\\\" height=\\\"10\\\" rx=\\\"2\\\" fill=\\\"#22d3ee\\\" />\\n   619|        <text x=\\\"116\\\" y=\\\"69\\\" font-family=\\\"'JetBrains Mono', monospace\\\" font-size=\\\"8\\\" fill=\\\"#cbd5e1\\\">Delivery / API</text>\\n   620|\\n   621|        <rect x=\\\"10\\\" y=\\\"76\\\" width=\\\"10\\\" height=\\\"10\\\" rx=\\\"2\\\" fill=\\\"#fb923c\\\" />\\n   622|        <text x=\\\"26\\\" y=\\\"85\\\" font-family=\\\"'JetBrains Mono', monospace\\\" font-size=\\\"8\\\" fill=\\\"#cbd5e1\\\">Message Bus</text>\\n   623|\\n   624|        <line x1=\\\"10\\\" y1=\\\"96\\\" x2=\\\"30\\\" y2=\\\"96\\\" stroke=\\\"#22d3ee\\\" stroke-width=\\\"1.5\\\" stroke-dasharray=\\\"4,3\\\" />\\n   625|        <text x=\\\"36\\\" y=\\\"100\\\" font-family=\\\"'JetBrains Mono', monospace\\\" font-size=\\\"8\\\" fill=\\\"#cbd5e1\\\">auth flow</text>\\n   626|      </g>\\n   627|\\n   628|      <!-- Info cards below diagram -->\\n   629|      <g transform=\\\"translate(40, 760)\\\">\\n   630|        <rect x=\\\"0\\\" y=\\\"0\\\" width=\\\"390\\\" height=\\\"110\\\" rx=\\\"8\\\" fill=\\\"#0f172a\\\" stroke=\\\"#1e293b\\\" />\\n   631|        <text x=\\\"15\\\" y=\\\"22\\\" font-family=\\\"'JetBrains Mono', monospace\\\" font-size=\\\"11\\\" font-weight=\\\"700\\\" fill=\\\"#fb7185\\\">Detection Pipeline</text>\\n   632|        <text x=\\\"15\\\" y=\\\"42\\\" font-family=\\\"'JetBrains Mono', monospace\\\" font-size=\\\"8\\\" fill=\\\"#94a3b8\\\">\\n   633|          <tspan x=\\\"15\\\" dy=\\\"0\\\">Raw content is normalized, transcribed, and language-</tspan>\\n   634|          <tspan x=\\\"15\\\" dy=\\\"14\\\">tagged. Burst detection identifies coordinated posting;</tspan>\\n   635|          <tspan x=\\\"15\\\" dy=\\\"14\\\">LLMs extract narratives and score factuality against</tspan>\\n   636|          <tspan x=\\\"15\\\" dy=\\\"14\\\">ground-truth databases. Anomaly alerts fire within 90s.</tspan>\\n   637|        </text>\\n   638|\\n   639|        <rect x=\\\"420\\\" y=\\\"0\\\" width=\\\"390\\\" height=\\\"110\\\" rx=\\\"8\\\" fill=\\\"#0f172a\\\" stroke=\\\"#1e293b\\\" />\\n   640|        <text x=\\\"435\\\" y=\\\"22\\\" font-family=\\\"'JetBrains Mono', monospace\\\" font-size=\\\"11\\\" font-weight=\\\"700\\\" fill=\\\"#34d399\\\">Attribution Methodology</text>\\n   641|        <text x=\\\"435\\\" y=\\\"42\\\" font-family=\\\"'JetBrains Mono', monospace\\\" font-size=\\\"8\\\" fill=\\\"#94a3b8\\\">\\n   642|          <tspan x=\\\"435\\\" dy=\\\"0\\\">Linguistic forensics + TTP fingerprints + infrastructure</tspan>\\n   643|          <tspan x=\\\"435\\\" dy=\\\"14\\\">overlap build an evidence chain. The Cross-Cultural</tspan>\\n   644|          <tspan x=\\\"435\\\" dy=\\\"14\\\">Context Model flags native-speaker markers that Western</tspan>\\n   645|          <tspan x=\\\"435\\\" dy=\\\"14\\\">tools miss. Confidence scores are expressed per STIX 2.1.</tspan>\\n   646|        </text>\\n   647|\\n   648|        <rect x=\\\"840\\\" y=\\\"0\\\" width=\\\"320\\\" height=\\\"110\\\" rx=\\\"8\\\" fill=\\\"#0f172a\\\" stroke=\\\"#1e293b\\\" />\\n   649|        <text x=\\\"855\\\" y=\\\"22\\\" font-family=\\\"'JetBrains Mono', monospace\\\" font-size=\\\"11\\\" font-weight=\\\"700\\\" fill=\\\"#22d3ee\\\">Deployment Models</text>\\n   650|        <text x=\\\"855\\\" y=\\\"42\\\" font-family=\\\"'JetBrains Mono', monospace\\\" font-size=\\\"8\\\" fill=\\\"#94a3b8\\\">\\n   651|          <tspan x=\\\"855\\\" dy=\\\"0\\\">1. SaaS (EU-hosted, GDPR)</tspan>\\n   652|          <tspan x=\\\"855\\\" dy=\\\"14\\\">2. On-premise government stack</tspan>\\n   653|          <tspan x=\\\"855\\\" dy=\\\"14\\\">3. Air-gapped classified variant</tspan>\\n   654|          <tspan x=\\\"855\\\" dy=\\\"14\\\">All models export STIX/MISP and REST.</tspan>\\n   655|        </text>\\n   656|      </g>\\n   657|\\n   658|      <!-- Footer / identifiers -->\\n   659|      <text x=\\\"1240\\\" y=\\\"745\\\" font-family=\\\"'JetBrains Mono', monospace\\\" font-size=\\\"8\\\" fill=\\\"#334155\\\" text-anchor=\\\"end\\\">VERITAS ARCH v1.0</text>\\n   660|    </svg>\\n   661|      </div>\\n   662|      <h3>Component Breakdown</h3>\\n   663|      <table>\\n   664|        <tr><th>Tier</th><th>Component</th><th>Technology</th><th>Purpose</th></tr>\\n   665|        <tr><td>Sources</td><td>Telegram, X, TikTok, YouTube, News Wires, Dark Web</td><td>MTProto, X API v2, scraping mesh, RSS/API, Tor/onion</td><td>Signal acquisition</td></tr>\\n   666|        <tr><td>Collection</td><td>Ingestion Engine, Stream Processor, Transcriber, Normalizer</td><td>Python/FastAPI, Apache Flink, OpenAI Whisper, Tesseract, fastText/CLD3</td><td>Normalize and enrich raw content</td></tr>\\n   667|        <tr><td>Bus</td><td>Apache Kafka Event Mesh</td><td>Kafka + Kafka Streams</td><td>Durable, ordered, replayable event routing</td></tr>\\n   668|        <tr><td>AI Pipeline</td><td>Narrative LLM, Bot Detector, Attribution Engine, Forensic Analyzer, Context Model, Factuality Scorer</td><td>Mixtral 8x22B / LLaMA-3 70B fine-tunes, scikit-learn/xgboost, Neo4j GDS, custom embeddings</td><td>Intelligence extraction</td></tr>\\n   669|        <tr><td>Knowledge</td><td>Campaign KG, Evidence Vault, Fingerprint DB</td><td>Neo4j, immudb/Amazon QLDB, PostgreSQL</td><td>Persistent, queryable, auditable memory</td></tr>\\n   670|        <tr><td>Production</td><td>Dashboard, Reports, Counter-Narrative, Alerts</td><td>React/TypeScript, Python, STIX2 lib, MISP</td><td>Actionable outputs</td></tr>\\n   671|        <tr><td>Delivery</td><td>Portal, API, Air-Gapped Variant</td><td>FastAPI, Keycloak/Authentik, Offline LLM on classified hardware</td><td>Secure access</td></tr>\\n   672|      </table>\\n   673|      <div class=\\\"card\\\">\\n   674|        <h3>Why Kafka over RabbitMQ?</h3>\\n   675|        <p>VERITAS is a <strong>log-centric system</strong>, not a job queue. Kafka provides the high throughput needed for tens of thousands of posts per minute, long-term replay for investigations, per-channel partition ordering for temporal coordination detection, and independent consumers that do not block each other. RabbitMQ is excellent for complex task routing but less suitable for log retention, high fan-out replay, and backpressure during burst events.</p>\\n   676|      </div>\\n   677|      <div class=\\\"card\\\">\\n   678|        <h3>Why Neo4j over PostgreSQL for the Graph?</h3>\\n   679|        <p>The core intelligence object in VERITAS is a <strong>campaign graph</strong>: actors post through channels, channels amplify narratives, narratives share media hashes, and infrastructure overlaps across campaigns. Native graph queries — “Find all channels that posted the same synthetic image within 30 minutes” or “What is the shortest path from this proxy channel to a known state actor TTP?” — are expensive in relational databases. Neo4j GDS provides performant community detection, similarity scoring, and pattern matching. PostgreSQL remains for structured evidence metadata and tenant management.</p>\\n   680|      </div>\\n   681|      <div class=\\\"card\\\">\\n   682|        <h3>LLM Choices for Multi-Language</h3>\\n   683|        <ul>\\n   684|          <li><strong>Base model:</strong> Mixtral 8x22B or LLaMA-3 70B fine-tuned on multilingual disinformation datasets (German, Turkish, Arabic, English, Kurdish, Russian).</li>\\n   685|          <li><strong>Reasoning / attribution:</strong> Smaller fine-tuned models (13B–34B) where latency matters, such as bot coordination and first-pass classification.</li>\\n   686|          <li><strong>Embedding model:</strong> Multilingual E5 or a domain-tuned contrastive model for semantic search across languages and dialects.</li>\\n   687|          <li><strong>Whisper:</strong> Audio/video transcription across Arabic, Turkish, Kurdish, and Russian.</li>\\n   688|        </ul>\\n   689|        <p>The Cross-Cultural Context Model is separately trained/fine-tuned on native-speaker annotations, operating as a gating classifier and explanation generator alongside the main LLM.</p>\\n   690|      </div>\\n   691|    </section>\\n   692|\\n   693|    <section id=\\\"ai-pipeline\\\">\\n   694|      <h2>AI/ML Pipeline Deep-Dive</h2>\\n   695|      <p class=\\\"lead\\\">Fine-tuned multilingual models, forensic linguistics, and probabilistic attribution scoring.</p>\\n   696|\\n   697|      <div class=\\\"card\\\">\\n   698|        <h3>Narrative Extraction LLM</h3>\\n   699|        <p>The Narrative Extraction LLM transforms a cluster of related posts into a structured narrative object. It is fine-tuned on labeled influence-operation narratives, with special attention to claim decontextualization — taking a real photo or event and assigning a false narrative wrapper.</p>\\n   700|        <pre><code>{\\n   701|  \\\"narrative_id\\\": \\\"narr_2026_0612_a\\\",\\n   702|  \\\"headline\\\": \\\"NATO-supplied weapons used against civilians in Donbas\\\",\\n   703|  \\\"claims\\\": [...],\\n   704|  \\\"target_audience\\\": [\\\"DE far-left\\\", \\\"TR nationalist\\\"],\\n   705|  \\\"emotional_frames\\\": [\\\"outrage\\\", \\\"betrayal\\\"],\\n   706|  \\\"source_languages\\\": [\\\"de\\\", \\\"tr\\\"],\\n   707|  \\\"confidence\\\": 0.87\\n   708|}</code></pre>\\n   709|      </div>\\n   710|\\n   711|      <div class=\\\"card\\\">\\n   712|        <h3>Bot Coordination Detector</h3>\\n   713|        <p>Coordination is detected by combining three signals:</p>\\n   714|        <ol>\\n   715|          <li><strong>Temporal burst:</strong> A set of accounts/channels posts semantically similar content within a short window, measured via inter-post time distribution and a Poisson burst test.</li>\\n   716|          <li><strong>Graph clustering:</strong> Accounts that repeatedly co-amplify the same URLs, hashtags, or media hashes within a sliding window form a coordination graph; Leiden community detection partitions it.</li>\\n   717|          <li><strong>Content similarity:</strong> Multilingual embeddings cluster near-duplicate or template-variant content, even when translated or paraphrased.</li>\\n   718|        </ol>\\n   719|        <pre><code>S_coord = α · burst_score + β · graph_density + γ · content_similarity + δ · temporal_entropy_penalty\\n   720|\\n   721|Typical threshold for analyst review: S_coord > 0.75</code></pre>\\n   722|      </div>\\n   723|\\n   724|      <div class=\\\"card\\\">\\n   725|        <h3>Attribution Methodology</h3>\\n   726|        <p>Attribution is probabilistic and evidence-based, not deterministic. The State Actor Attribution Engine evaluates:</p>\\n   727|        <ul>\\n   728|          <li><strong>TTP match:</strong> Posting schedule, URL shortener pattern, media production style, or channel-naming convention vs. known fingerprints.</li>\\n   729|          <li><strong>Infrastructure overlap:</strong> Shared phone-number prefixes, email domains, wallet addresses, hosting ASNs, or proxy channel admin patterns.</li>\\n   730|          <li><strong>Linguistic forensics:</strong> Idiolect, syntactic preferences, translation artifacts, and calque patterns suggest origin language or translation chain.</li>\\n   731|          <li><strong>Geopolitical intent mapping:</strong> Does the narrative serve a known adversarial strategic objective?</li>\\n   732|        </ul>\\n   733|        <p>Output is a structured STIX 2.1 Threat Actor object with a confidence score, alternative hypotheses, and an evidence list.</p>\\n   734|      </div>\\n   735|\\n   736|      <div class=\\\"card\\\">\\n   737|        <h3>Factuality Scorer</h3>\\n   738|        <p>Claims extracted by the Narrative LLM are matched against verified ground-truth databases (fact-checkers, government sources, trusted wire services), previously adjudicated claims in the Evidence Vault, and multimedia provenance (reverse image search, video keyframe matching, metadata forensics). Output is a score from 0 (fabricated) to 1 (verified), plus conflicting sources and an uncertainty flag when ground truth is unavailable.</p>\\n   739|      </div>\\n   740|    </section>\\n   741|\\n   742|    <section id=\\\"context-model\\\" class=\\\"card wedge\\\">\\n   743|      <h2>Cross-Cultural Context Model</h2>\\n   744|      <p class=\\\"lead\\\">This is VERITAS's primary technical wedge. Western tools fail on Turkish/Islamosphere content because they lack a cultural-semantic layer.</p>\\n   745|\\n   746|      <p>Examples where context changes meaning:</p>\\n   747|      <ul>\\n   748|        <li>A post discussing the \\\"martyrs of Gaza\\\" in a specific historical register may be organic solidarity, imported incitement, or a recruitment dog-whistle. The difference depends on timing, surrounding hashtags, channel history, and audience replies.</li>\\n   749|        <li>References to \\\"Srebrenica,\\\" \\\"Andalus,\\\" or \\\"the Crusades\\\" can function as coded calls to action within diaspora communities.</li>\\n   750|        <li>Honor/shame framing (\\\"the state humiliated our community\\\") drives virality differently than individual-rights framing common in English-language discourse.</li>\\n   751|        <li>Regional code words such as \\\"deep state\\\" (<em>derin devlet</em>), \\\"parallel structure,\\\" or \\\"traitors to the nation\\\" carry different valences in Turkish political memory than literal translations suggest.</li>\\n   752|      </ul>\\n   753|\\n   754|      <h3>Training Data & Taxonomies</h3>\\n   755|      <ul>\\n   756|        <li>Native-annotated datasets of Turkish, Arabic dialect, Kurdish, Persian, and Urdu disinformation.</li>\\n   757|        <li>Historical grievance and religious reference lexicons with region-specific sense tags.</li>\\n   758|        <li>Honor/shame, kinship, and sectarian framing taxonomies.</li>\\n   759|        <li>Temporal context: what events are happening now that make a previously benign reference inflammatory.</li>\\n   760|      </ul>\\n   761|\\n   762|      <h3>Classifier + Explanation Generator</h3>\\n   763|      <p>The model operates as both a classifier and an explanation generator. When it flags content, it outputs a human-readable rationale — for example:</p>\\n   764|      <blockquote style=\\\"border-left:3px solid var(--rose); padding-left:16px; color:var(--muted); font-style:italic;\\\">\\n   765|        \\\"This phrase is a known Iranian proxy framing device used after mosque attacks; combined with the hashtag cluster and 45-minute post timing, it indicates imported incitement rather than organic grief.\\\"\\n   766|      </blockquote>\\n   767|      <p>This is why VERITAS can detect campaigns that GPT-4 classifies as \\\"benign religious discussion.\\\"</p>\\n   768|    </section>\\n   769|\\n   770|    <section id=\\\"attribution\\\">\\n   771|      <h2>Attribution Framework</h2>\\n   772|      <p class=\\\"lead\\\">How we go from \\\"this is fake\\\" to \\\"this is FSB Unit 54777 operating through proxy channels in Iran.\\\"</p>\\n   773|\\n   774|      <h3>Stage 1 — Campaign Detection</h3>\\n   775|      <p>A coordinated cluster is identified. We know a set of channels/accounts are pushing a consistent false narrative in a synchronized way.</p>\\n   776|\\n   777|      <h3>Stage 2 — Infrastructure Fingerprinting</h3>\\n   778|      <p>Shared infrastructure is extracted: Telegram channel admin patterns, X account registration metadata, linked websites, URL shorteners, hosting providers, cryptocurrency donation addresses, and phone numbers exposed in channel metadata. This is compared to the Fingerprint Database.</p>\\n   779|\\n   780|      <h3>Stage 3 — Linguistic Origin</h3>\\n   781|      <p>The Linguistic Forensic Analyzer and Cross-Cultural Context Model identify native-language markers of the <em>author</em> (not the target audience), translation artifacts indicating content was produced in one language and translated into another, and cultural framing suggesting a specific origin actor (e.g., IRGC-style anti-imperialist religious framing vs. FSB-style \\\"decadent West\\\" framing).</p>\\n   782|\\n   783|      <h3>Stage 4 — TTP Correlation</h3>\\n   784|      <p>Observed tactics are matched against known actor profiles: GRU Unit 29155, FSB Center 16 / Unit 54777, Iranian IOPI / IRA, Chinese MSS proxy networks. Matches are scored across dozens of indicators.</p>\\n   785|\\n   786|      <h3>Stage 5 — Confidence Assessment</h3>\\n   787|      <pre><code>{\\n   788|  \\\"attribution_id\\\": \\\"attr_2026_0612_b\\\",\\n   789|  \\\"primary_hypothesis\\\": {\\n   790|    \\\"actor\\\": \\\"FSB Unit 54777 proxy operation\\\",\\n   791|    \\\"proxy_infrastructure\\\": \\\"Iran-based Telegram network\\\",\\n   792|    \\\"confidence\\\": 0.72\\n   793|  },\\n   794|  \\\"alternative_hypotheses\\\": [...],\\n   795|  \\\"evidence_chain\\\": [...],\\n   796|  \\\"uncertainties\\\": [\\\"no direct IP/ASN overlap yet\\\", \\\"voice-over artist unidentified\\\"]\\n   797|}</code></pre>\\n   798|      <p>Analysts can accept, reject, or adjust hypotheses. Each decision feeds back into model training.</p>\\n   799|    </section>\\n   800|\\n   801|    <section id=\\\"sources\\\">\\n   802|      <h2>Data Sources & Collection</h2>\\n   803|      <p class=\\\"lead\\\">Multi-platform, multi-modal, ethically scoped collection built for European threat monitoring.</p>\\n   804|\\n   805|      <div class=\\\"card\\\">\\n   806|        <h3>Telegram</h3>\\n   807|        <p>The dominant platform for far-right, jihadist, state-proxy, and diaspora influence networks in Germany, Turkey, and the broader Islamosphere. Collection uses MTProto-based clients, channel monitoring via public invite links, and metadata extraction from forwarded-message chains. Private groups require lawful or consensual access; the SaaS deployment does not attempt unauthorized collection.</p>\\n   808|      </div>\\n   809|\\n   810|      <div class=\\\"card\\\">\\n   811|        <h3>X / Twitter</h3>\\n   812|        <p>X API v2 provides filtered stream access and historical search, but coverage is limited by cost tiers and rate limits. VERITAS augments API data with compliant public sampling and engagement metadata. The platform remains valuable for real-time narrative seeding and journalist/policy-maker amplification.</p>\\n   813|      </div>\\n   814|\\n   815|      <div class=\\\"card\\\">\\n   816|        <h3>TikTok</h3>\\n   817|        <p>Increasingly used for short-form incitement and youth-targeting campaigns. Collection uses a rotating residential-proxy research scraping mesh, video download, Whisper transcription, and OCR on frames. Ethical and legal compliance is maintained; no unauthorized private accounts are targeted.</p>\\n   818|      </div>\\n   819|\\n   820|      <div class=\\\"card\\\">\\n   821|        <h3>YouTube</h3>\\n   822|        <p>Long-form video is a laundering channel: false narratives start in Telegram/TikTok, then are legitimized via YouTube \\\"analysis\\\" videos. Collection focuses on transcripts (Whisper), comments, channel-level metadata, and recommendation-graph exploration.</p>\\n   823|      </div>\\n   824|\\n   825|      <div class=\\\"card\\\">\\n   826|        <h3>News Wires</h3>\\n   827|        <p>Licensed feeds from Reuters, AFP, and DPA serve two roles: (1) ground-truth reference for factuality scoring, and (2) early indicators of real events that adversaries will later miscontextualize.</p>\\n   828|      </div>\\n   829|\\n   830|      <div class=\\\"card\\\">\\n   831|        <h3>Dark Web / Telegram Deep</h3>\\n   832|        <p>Onion forums, private Telegram invite-only channels, and closed messaging groups are sources for campaign pre-seeding, synthetic-media tooling, and actor chatter. Collection is limited to lawful OSINT methods and customer-defined scopes.</p>\\n   833|      </div>\\n   834|    </section>\\n   835|\\n   836|    <section id=\\\"products\\\">\\n   837|      <h2>Intelligence Products</h2>\\n   838|      <p class=\\\"lead\\\">Four product lines transform raw detections into actionable government intelligence.</p>\\n   839|\\n   840|      <div class=\\\"card\\\">\\n   841|        <h3>Real-Time Threat Dashboard</h3>\\n   842|        <p>A React-based analyst dashboard showing:</p>\\n   843|        <ul>\\n   844|          <li>Live campaign topology graph.</li>\\n   845|          <li>Language and platform distribution.</li>\\n   846|          <li>Burst velocity, reach estimates, and sentiment trajectory.</li>\\n   847|          <li>Attribution hypotheses ranked by confidence.</li>\\n   848|          <li>Drill-down to original posts, media, and evidence chain.</li>\\n   849|        </ul>\\n   850|      </div>\\n   851|\\n   852|      <div class=\\\"card\\\">\\n   853|        <h3>Automated Intelligence Reports (STIX 2.1 / MISP)</h3>\\n   854|        <p>Machine-readable reports for ingestion into national SOC, CERT, or fusion-center workflows. Includes STIX Threat-Actor, Campaign, Indicator, Observed-Data, and Relationship objects. MISP events are generated with Galaxy tags for disinformation/misinformation taxonomies.</p>\\n   855|      </div>\\n   856|\\n   857|      <div class=\\\"card\\\">\\n   858|        <h3>Counter-Narrative Generator</h3>\\n   859|        <p>Given a detected narrative and target audience segment, the generator produces:</p>\\n   860|        <ul>\\n   861|          <li>Key message points grounded in verified facts.</li>\\n   862|          <li>Platform-specific format recommendations (thread, short video script, infographic).</li>\\n   863|          <li>Linguistic and cultural tailoring via the Cross-Cultural Context Model.</li>\\n   864|          <li>Risk flags (e.g., avoid amplifying the false claim directly).</li>\\n   865|        </ul>\\n   866|        <p>Counter-narratives are suggestions for government communications teams; VERITAS does not auto-publish content.</p>\\n   867|      </div>\\n   868|\\n   869|      <div class=\\\"card\\\">\\n   870|        <h3>Early Warning Alert System</h3>\\n   871|        <p>Alerts fire when:</p>\\n   872|        <ul>\\n   873|          <li>Coordination score exceeds a configured threshold.</li>\\n   874|          <li>A known campaign fingerprint reappears.</li>\\n   875|          <li>A narrative reaches a reach-velocity threshold (e.g., 10,000 engagements in 30 minutes in a target language).</li>\\n   876|          <li>Factuality score drops below 0.2 while reach is accelerating.</li>\\n   877|        </ul>\\n   878|        <p>Alerts are delivered via the portal, webhook, email, or STIX/MISP push.</p>\\n   879|      </div>\\n   880|    </section>\\n   881|\\n   882|    <section id=\\\"deployment\\\">\\n   883|      <h2>Deployment Models</h2>\\n   884|      <p class=\\\"lead\\\">Three sovereign deployment options matched to classification and data-sovereignty requirements.</p>\\n   885|\\n   886|      <div class=\\\"phases\\\">\\n   887|        <div class=\\\"phase\\\">\\n   888|          <div class=\\\"num\\\" style=\\\"background:var(--cyan)\\\">1</div>\\n   889|          <h4 style=\\\"color:var(--cyan)\\\">SaaS (EU-Hosted, GDPR-Compliant)</h4>\\n   890|          <p>Multi-tenant cloud deployment in EU regions. Suitable for federal ministries, EU institutions, and mid-sized agencies. Data residency, encryption at rest and in transit, role-based access, and audit logging are standard.</p>\\n   891|        </div>\\n   892|        <div class=\\\"phase\\\">\\n   893|          <div class=\\\"num\\\" style=\\\"background:var(--cyan)\\\">2</div>\\n   894|          <h4 style=\\\"color:var(--cyan)\\\">On-Premise Government Stack</h4>\\n   895|          <p>Full software stack deployed inside customer infrastructure or a sovereign cloud provider. Customer controls data, encryption keys, and model weights. Used by ministries requiring national data-sovereignty guarantees.</p>\\n   896|        </div>\\n   897|        <div class=\\\"phase\\\">\\n   898|          <div class=\\\"num\\\" style=\\\"background:var(--cyan)\\\">3</div>\\n   899|          <h4 style=\\\"color:var(--cyan)\\\">Air-Gapped Classified Variant</h4>\\n   900|          <p>For top-secret / VS-NfD environments. Runs on classified hardware with no external network connectivity. Uses offline LLM weights, local model inference, and manual data-diode ingestion. STIX/MISP export is via one-way media or approved secure transfer.</p>\\n   901|        </div>\\n   902|      </div>\\n   903|    </section>\\n   904|\\n   905|    <section id=\\\"business\\\">\\n   906|      <h2>Business Model</h2>\\n   907|      <p class=\\\"lead\\\">Enterprise annual contracts priced on scope and classification requirements.</p>\\n   908|\\n   909|      <h3>Pricing Tiers</h3>\\n   910|      <table>\\n   911|        <tr><th>Tier</th><th>Annual Price</th><th>Scope</th></tr>\\n   912|        <tr><td>Monitor</td><td>€500K–€1M</td><td>2–3 platforms, 1–2 languages, dashboard, basic alerts</td></tr>\\n   913|        <tr><td>Analyze</td><td>€2M–€4M</td><td>All core platforms, 5+ languages, attribution engine, STIX/MISP reports</td></tr>\\n   914|        <tr><td>Disrupt</td><td>€6M–€10M+</td><td>Full stack, counter-narrative generation, air-gapped option, custom model fine-tuning, dedicated analyst support</td></tr>\\n   915|      </table>\\n   916|\\n   917|      <h3>Initial Target Customers</h3>\\n   918|      <ul>\\n   919|        <li>European Commission (DSA enforcement, strategic communication, hybrid-threat monitoring)</li>\\n   920|        <li>German Federal Ministry of the Interior (BMI) and domestic intelligence-adjacent units</li>\\n   921|        <li>NATO STRATCOM / DIANA-funded pilot programs</li>\\n   922|        <li>National CERTs and strategic-communication directorates in the Baltics, Nordics, and Visegrád states</li>\\n   923|      </ul>\\n   924|\\n   925|      <h3>Revenue Logic</h3>\\n   926|      <p>The market is not price-sensitive on the buyer side; it is trust- and capability-sensitive. A single prevented election-interference incident or early warning ahead of a civil-unrest flashpoint justifies the contract. Expansion revenue comes from additional languages, platforms, classified variants, and custom counter-narrative playbooks.</p>\\n   927|    </section>\\n   928|\\n   929|    <section id=\\\"competition\\\">\\n   930|      <h2>Competitive Landscape</h2>\\n   931|      <p class=\\\"lead\\\">Existing tools were built for English-language brand safety and generic \\\"fake news\\\" classification. VERITAS is built for state-sponsored attribution.</p>\\n   932|      <table>\\n   933|        <tr><th>Competitor</th><th>Strength</th><th>What They Miss</th></tr>\\n   934|        <tr><td><strong>Recorded Future</strong></td><td>Excellent dark-web and IOC intelligence</td><td>Disinformation is a secondary use case; weak cultural/contextual analysis for non-English influence ops</td></tr>\\n   935|        <tr><td><strong>Logically</strong></td><td>Strong fact-checking and narrative monitoring</td><td>Primarily English and Western-context; limited attribution to state actors</td></tr>\\n   936|        <tr><td><strong>Graphika</strong></td><td>Deep social-network analysis and actor mapping</td><td>High cost, slow turnaround, less real-time production pipeline</td></tr>\\n   937|        <tr><td><strong>Blackbird.AI</strong></td><td>Narrative-risk scoring for enterprises</td><td>Corporate risk framing, not intelligence-grade attribution; weak on Turkish/Islamosphere</td></tr>\\n   938|        <tr><td><strong>EU East StratCom / National Labs</strong></td><td>Domain expertise and access</td><td>Often manual, under-resourced, no productized platform</td></tr>\\n   939|      </table>\\n   940|\\n   941|      <h3>VERITAS Wedge</h3>\\n   942|      <ol>\\n   943|        <li><strong>Cross-Cultural Context Model</strong> — the only productized capability built specifically for Turkish/Islamosphere disinformation semantics.</li>\\n   944|        <li><strong>Speed-to-attribution</strong> — from detection to STIX report in minutes, not days.</li>\\n   945|        <li><strong>Sovereign deployment</strong> — EU data residency, on-premise, and air-gapped options purpose-built for classified government use.</li>\\n   946|        <li><strong>Counter-narrative production</strong> — moves beyond detection to actionable response recommendations.</li>\\n   947|      </ol>\\n   948|    </section>\\n   949|\\n   950|    <section id=\\\"mvp\\\">\\n   951|      <h2>MVP Definition</h2>\\n   952|      <p class=\\\"lead\\\">A 6-week MVP scoped to prove the core pipeline and win an initial government pilot.</p>\\n   953|\\n   954|      <h3>In Scope</h3>\\n   955|      <ul>\\n   956|        <li><strong>Collection:</strong> Telegram public channels + X API monitoring, German and Turkish language pairs.</li>\\n   957|        <li><strong>Stream processing:</strong> Kafka event mesh, basic normalization, language detection.</li>\\n   958|        <li><strong>AI pipeline:</strong> Narrative extraction using a fine-tuned 13B–34B model; first-pass bot coordination detector; basic factuality scoring against Reuters/AFP/DPA.</li>\\n   959|        <li><strong>Knowledge store:</strong> Neo4j campaign graph + PostgreSQL evidence metadata.</li>\\n   960|        <li><strong>Dashboard:</strong> React real-time dashboard showing detected campaigns, language distribution, and reach.</li>\\n   961|        <li><strong>Output:</strong> JSON reports; STIX 2.1 export is a stretch goal.</li>\\n   962|      </ul>\\n   963|\\n   964|      <h3>Out of Scope for MVP</h3>\\n   965|      <ul>\\n   966|        <li>TikTok and dark-web collection.</li>\\n   967|        <li>Full Cross-Cultural Context Model (delivered as rule-based + small fine-tuned classifier; full model in Phase 2).</li>\\n   968|        <li>Air-gapped variant.</li>\\n   969|        <li>Counter-narrative generator (manual analyst notes only).</li>\\n   970|      </ul>\\n   971|\\n   972|      <h3>Success Criteria</h3>\\n   973|      <ul>\\n   974|        <li>Detect at least one coordinated German/Turkish bilingual campaign within 60 minutes of seeding.</li>\\n   975|        <li>Produce a credible attribution hypothesis with evidence chain.</li>\\n   976|        <li>Demonstrate STIX-ready structured output.</li>\\n   977|        <li>Secure a paid pilot or LOI from BMI or an EU Commission directorate.</li>\\n   978|      </ul>\\n   979|    </section>\\n   980|\\n   981|    <section id=\\\"roadmap\\\">\\n   982|      <h2>18-Month Roadmap</h2>\\n   983|      <table>\\n   984|        <tr><th>Quarter</th><th>Milestone</th></tr>\\n   985|        <tr><td><strong>Q1</strong></td><td>MVP live: Telegram + X, DE/TR, dashboard, basic attribution. First pilot contract signed.</td></tr>\\n   986|        <tr><td><strong>Q2</strong></td><td>Add YouTube transcripts, TikTok scraping module. Launch Cross-Cultural Context Model v1.0. STIX/MISP export GA.</td></tr>\\n   987|        <tr><td><strong>Q3</strong></td><td>Dark-web/onion collection. Add Arabic, Kurdish, Russian. First on-premise government deployment.</td></tr>\\n   988|        <tr><td><strong>Q4</strong></td><td>Counter-Narrative Generator GA. Air-gapped classified variant pilot. €3M ARR target.</td></tr>\\n   989|        <tr><td><strong>Q5–Q6</strong></td><td>Scale to 10+ government/EU customers. Real-time multilingual campaign attribution under 15 minutes. SOC 2 Type II / ISO 27001 certification. Series A preparation.</td></tr>\\n   990|      </table>\\n   991|    </section>\\n   992|\\n   993|    <section id=\\\"team\\\">\\n   994|      <h2>Team Requirements</h2>\\n   995|      <p class=\\\"lead\\\">Founding team of 5–7 people.</p>\\n   996|      <table>\\n   997|        <tr><th>Role</th><th>Responsibility</th></tr>\\n   998|        <tr><td><strong>ML Engineer / Lead Scientist</strong></td><td>LLM fine-tuning, bot-detection models, attribution scoring</td></tr>\\n   999|        <tr><td><strong>OSINT Specialist</strong></td><td>Source access, Telegram/X/TikTok collection, actor TTP research</td></tr>\\n  1000|        <tr><td><strong>Backend Engineer</strong></td><td>Kafka, Neo4j, FastAPI, data pipeline reliability</td></tr>\\n  1001|        <tr><td><strong>Frontend Engineer</strong></td><td>React dashboard, visualization, secure portal</td></tr>\\n  1002|        <tr><td><strong>Linguist / Forensic Analyst</strong></td><td>Turkish/Arabic/Kurdish annotation, cultural context model design, evidence review</td></tr>\\n  1003|        <tr><td><strong>Sales / Government Relations</strong></td><td>BMI, EU Commission, NATO, procurement navigation</td></tr>\\n  1004|        <tr><td><strong>Security / Compliance Lead</strong> (fractional initially)</td><td>Air-gapped deployments, classified handling, ISO/SOC2</td></tr>\\n  1005|      </table>\\n  1006|    </section>\\n  1007|\\n  1008|    <section id=\\\"risk\\\">\\n  1009|      <h2>Risk & Mitigation</h2>\\n  1010|      <table>\\n  1011|        <tr><th>Risk</th><th>Likelihood</th><th>Mitigation</th></tr>\\n  1012|        <tr><td>Platform API changes / blocks</td><td>High</td><td>Build adapter abstraction; maintain multiple collection paths; use public/ethical scraping where API is insufficient.</td></tr>\\n  1013|        <tr><td>Legal challenges (GDPR, platform ToS)</td><td>Medium</td><td>Legal review; data minimization; EU data residency; no unauthorized private data collection; transparent terms.</td></tr>\\n  1014|        <tr><td>Adversarial adaptation</td><td>High</td><td>Continuous retraining; red-team exercises; fingerprint versioning; human-in-the-loop attribution.</td></tr>\\n  1015|        <tr><td>Model hallucination in attribution</td><td>Medium</td><td>Probabilistic confidence scores; structured evidence chains; mandatory analyst review before formal reporting.</td></tr>\\n  1016|        <tr><td>False positives overwhelming analysts</td><td>Medium</td><td>Tunable thresholds; feedback loops; confidence calibration; analyst workload metrics.</td></tr>\\n  1017|        <tr><td>Classified-deployment complexity</td><td>Medium</td><td>Modular offline architecture; pre-certified hardware partners; air-gap data-diode procedures.</td></tr>\\n  1018|      </table>\\n  1019|    </section>\\n  1020|\\n  1021|    <section id=\\\"why-now\\\">\\n  1022|      <h2>Why Now</h2>\\n  1023|      <p class=\\\"lead\\\">Several independent forces make 2026 the right entry window for VERITAS:</p>\\n  1024|      <ul>\\n  1025|        <li><strong>EU Digital Services Act enforcement (2026):</strong> Large platforms must provide vetted researcher access and algorithmic transparency, creating both data-access opportunities and policy demand for independent monitoring.</li>\\n  1026|        <li><strong>German federal elections (2027):</strong> Disinformation campaigns targeting German-Turkish and German-Arab communities will intensify. Early detection and attribution will be politically valuable.</li>\\n  1027|        <li><strong>Ongoing Ukraine war information operations:</strong> Russian and proxy actors continue to target European audiences with false narratives around refugees, energy, and NATO. The threat is sustained, not hypothetical.</li>\\n  1028|        <li><strong>NATO DIANA / innovation funding:</strong> NATO and EU defense-innovation programs are actively funding dual-use AI and counter-disinformation capabilities. VERITAS is well aligned.</li>\\n  1029|        <li><strong>Western tool failure is now visible:</strong> Fact-checkers, intelligence analysts, and platform trust-and-safety teams openly acknowledge the non-English cultural-context gap. The buyer pain is validated.</li>\\n  1030|      </ul>\\n  1031|      <p>VERITAS is designed to capture this window: a sovereign, multilingual, attribution-grade AI platform that fills the blind spot Western tools cannot see.</p>\\n  1032|    </section>\\n  1033|\\n  1034|  </main>\\n  1035|\\n  1036|  <footer>\\n  1037|    <p><strong>VERITAS — AI Counter-Disinformation Platform</strong></p>\\n  1038|    <p>Document version 1.0 · Built for democratic governments · STIX 2.1 / MISP compatible · EU data residency · Air-gapped ready</p>\\n  1039|  </footer>\\n  1040|</body>\\n  1041|</html>\\n  1042|\", \"total_lines\": 1041, \"file_size\": 61201, \"truncated\": false, \"is_binary\": false, \"is_image\": false}",
      "tool_call_id": "functions.read_file:1"
    },
    {
      "role": "assistant",
      "content": "",
      "reasoning": "Now I have the complete content. I need to rewrite the entire HTML/CSS with a Palantir-inspired design. Key changes:\n- Inter font\n- #0a0a0f background\n- Single blue accent #00a3bf\n- Dark cards #13141a\n- Thin borders rgba(255,255,255,0.04)\n- Geometric precision, data-dense\n- Remove pulsing dot\n- Subtle dot grid background\n- Navigation: minimal thin top bar\n- Wedge section: subtle left-border accent, slightly elevated\n- Tables like intelligence briefings\n- Hero like platform login screen\n- 90% monochromatic blue, with only amber for warnings and rose for threats\n\nI need to keep all content. This is a substantial rewrite. Let me construct the new HTML file carefully.\n\nI need to rewrite the SVG too to match Palantir style - mostly monochromatic blue with amber/rose accents. But the SVG is complex. I'll preserve the structure but change colors to the new palette.\n\nLet me think about the color system:\n- bg: #0a0a0f\n- surface: #13141a\n- surface-elevated: #16171d\n- border: rgba(255,255,255,0.06)\n- text: #e8e8ed\n- muted: #8a8b99\n- accent: #00a3bf\n- amber: #d97706 (muted amber for warnings)\n- rose: #be4a4a or #b45353 (muted red for threats)\n\nActually the user says single blue accent with maybe one muted gold/amber for warnings, one muted red for threats. So I'll keep:\n- primary: #00a3bf\n- amber: #b47d1b or #d4a017 (muted gold)\n- rose: #a84646 (muted red)\n\nFor the wedge, it should use subtle left-border accent or slightly elevated card, not glowing rose box. I'll make it have left border #00a3bf or maybe a slightly lighter surface.\n\nFor the hero: platform login screen feel - minimal, powerful. Maybe a centered hero with very thin lines, large logo, small tagline, key stats.\n\nNavigation: minimal, almost hidden - thin top bar, not chunky sticky nav.\n\nRemove pulsing dot.\n\nAdd subtle geometric pattern or dot grid to background.\n\nLet me build the file. I'll need to be very careful with content preservation. The SVG is the trickiest part - I need to update colors while keeping the same structure.\n\nActually, I should probably simplify/Redesign the SVG to use the new palette. I'll keep the same boxes and labels but use monochromatic blue scheme with amber for Kafka/bus and rose for the classified boundary.\n\nLet me plan the sections:\n1. Top nav minimal\n2. Hero\n3. Problem\n4. How It Works (phases)\n5. Technical Architecture (SVG + table + cards)\n6. AI/ML Pipeline Deep-Dive\n7. Cross-Cultural Context Model (wedge)\n8. Attribution Framework\n9. Data Sources & Collection\n10. Intelligence Products\n11. Deployment Models\n12. Business Model\n13. Competitive Landscape\n14. MVP Definition\n15. 18-Month Roadmap\n16. Team Requirements\n17. Risk & Mitigation\n18. Why Now\n19. Footer\n\nLet me write the new file. I'll use write_file since it's a complete rewrite.\n\nFor the SVG, I'll redesign with Palantir palette:\n- Background: #0a0a0f\n- Grid: #1a1b22\n- Boxes: #13141a with #00a3bf border for primary, muted borders otherwise\n- Use blue for everything mostly\n- Kafka/Collection: amber\n- Classified boundary: rose dashed\n- Delivery: blue\n\nActually to match Palantir better, I think the entire diagram should be mostly blue/cyan monochromatic. But the original has multiple colors for different tiers. The user wants single blue accent but allows amber for warnings and rose for threats. The classified boundary could be rose (threat/security). The bus could be amber. But most boxes can be blue.\n\nLet me make it cleaner - all boxes have very subtle borders, with blue text labels and only key accents.\n\nI'll now construct the file. Given its size, I'll be methodical.\n\nOne important thing: the user says \"Must be valid, complete, self-contained single file.\" So I need to ensure all CSS is inline, only Google Fonts external dependency.\n\nLet me write it now.",
      "finish_reason": "tool_calls",
      "reasoning_content": "Now I have the complete content. I need to rewrite the entire HTML/CSS with a Palantir-inspired design. Key changes:\n- Inter font\n- #0a0a0f background\n- Single blue accent #00a3bf\n- Dark cards #13141a\n- Thin borders rgba(255,255,255,0.04)\n- Geometric precision, data-dense\n- Remove pulsing dot\n- Subtle dot grid background\n- Navigation: minimal thin top bar\n- Wedge section: subtle left-border accent, slightly elevated\n- Tables like intelligence briefings\n- Hero like platform login screen\n- 90% monochromatic blue, with only amber for warnings and rose for threats\n\nI need to keep all content. This is a substantial rewrite. Let me construct the new HTML file carefully.\n\nI need to rewrite the SVG too to match Palantir style - mostly monochromatic blue with amber/rose accents. But the SVG is complex. I'll preserve the structure but change colors to the new palette.\n\nLet me think about the color system:\n- bg: #0a0a0f\n- surface: #13141a\n- surface-elevated: #16171d\n- border: rgba(255,255,255,0.06)\n- text: #e8e8ed\n- muted: #8a8b99\n- accent: #00a3bf\n- amber: #d97706 (muted amber for warnings)\n- rose: #be4a4a or #b45353 (muted red for threats)\n\nActually the user says single blue accent with maybe one muted gold/amber for warnings, one muted red for threats. So I'll keep:\n- primary: #00a3bf\n- amber: #b47d1b or #d4a017 (muted gold)\n- rose: #a84646 (muted red)\n\nFor the wedge, it should use subtle left-border accent or slightly elevated card, not glowing rose box. I'll make it have left border #00a3bf or maybe a slightly lighter surface.\n\nFor the hero: platform login screen feel - minimal, powerful. Maybe a centered hero with very thin lines, large logo, small tagline, key stats.\n\nNavigation: minimal, almost hidden - thin top bar, not chunky sticky nav.\n\nRemove pulsing dot.\n\nAdd subtle geometric pattern or dot grid to background.\n\nLet me build the file. I'll need to be very careful with content preservation. The SVG is the trickiest part - I need to update colors while keeping the same structure.\n\nActually, I should probably simplify/Redesign the SVG to use the new palette. I'll keep the same boxes and labels but use monochromatic blue scheme with amber for Kafka/bus and rose for the classified boundary.\n\nLet me plan the sections:\n1. Top nav minimal\n2. Hero\n3. Problem\n4. How It Works (phases)\n5. Technical Architecture (SVG + table + cards)\n6. AI/ML Pipeline Deep-Dive\n7. Cross-Cultural Context Model (wedge)\n8. Attribution Framework\n9. Data Sources & Collection\n10. Intelligence Products\n11. Deployment Models\n12. Business Model\n13. Competitive Landscape\n14. MVP Definition\n15. 18-Month Roadmap\n16. Team Requirements\n17. Risk & Mitigation\n18. Why Now\n19. Footer\n\nLet me write the new file. I'll use write_file since it's a complete rewrite.\n\nFor the SVG, I'll redesign with Palantir palette:\n- Background: #0a0a0f\n- Grid: #1a1b22\n- Boxes: #13141a with #00a3bf border for primary, muted borders otherwise\n- Use blue for everything mostly\n- Kafka/Collection: amber\n- Classified boundary: rose dashed\n- Delivery: blue\n\nActually to match Palantir better, I think the entire diagram should be mostly blue/cyan monochromatic. But the original has multiple colors for different tiers. The user wants single blue accent but allows amber for warnings and rose for threats. The classified boundary could be rose (threat/security). The bus could be amber. But most boxes can be blue.\n\nLet me make it cleaner - all boxes have very subtle borders, with blue text labels and only key accents.\n\nI'll now construct the file. Given its size, I'll be methodical.\n\nOne important thing: the user says \"Must be valid, complete, self-contained single file.\" So I need to ensure all CSS is inline, only Google Fonts external dependency.\n\nLet me write it now.",
      "tool_calls": [
        {
          "id": "functions.write_file:2",
          "call_id": "functions.write_file:2",
          "response_item_id": "fc_functionswrite_file2",
          "type": "function",
          "function": {
            "name": "write_file",
            "arguments": "{\"path\":\"/DATA/veritas-website.html\",\"content\":\"\\u003c!DOCTYPE html\\u003e\\n\\u003chtml lang=\\\"en\\\"\\u003e\\n\\u003chead\\u003e\\n  \\u003cmeta charset=\\\"UTF-8\\\" /\\u003e\\n  \\u003cmeta name=\\\"viewport\\\" content=\\\"width=device-width, initial-scale=1.0\\\" /\\u003e\\n  \\u003ctitle\\u003eVERITAS — AI Counter-Disinformation Platform\\u003c/title\\u003e\\n  \\u003clink rel=\\\"preconnect\\\" href=\\\"https://fonts.googleapis.com\\\" /\\u003e\\n  \\u003clink rel=\\\"preconnect\\\" href=\\\"https://fonts.gstatic.com\\\" crossorigin /\\u003e\\n  \\u003clink href=\\\"https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700\\u0026display=swap\\\" rel=\\\"stylesheet\\\" /\\u003e\\n  \\u003cstyle\\u003e\\n    :root {\\n      --bg: #0a0a0f;\\n      --surface: #13141a;\\n      --surface-elevated: #16171d;\\n      --border: rgba(255,255,255,0.06);\\n      --border-strong: rgba(255,255,255,0.12);\\n      --text: #e8e8ed;\\n      --muted: #8a8b99;\\n      --accent: #00a3bf;\\n      --accent-dim: rgba(0,163,191,0.12);\\n      --amber: #b47d1b;\\n      --amber-dim: rgba(180,125,27,0.12);\\n      --rose: #a84646;\\n      --rose-dim: rgba(168,70,70,0.12);\\n    }\\n    * { box-sizing: border-box; }\\n    html { scroll-behavior: smooth; }\\n    body {\\n      margin: 0;\\n      background: var(--bg);\\n      color: var(--text);\\n      font-family: \\\"Inter\\\", system-ui, -apple-system, BlinkMacSystemFont, sans-serif;\\n      font-size: 15px;\\n      line-height: 1.55;\\n      -webkit-font-smoothing: antialiased;\\n    }\\n    a { color: var(--accent); text-decoration: none; }\\n    a:hover { opacity: 0.85; }\\n    code, pre {\\n      font-family: \\\"Inter\\\", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;\\n      background: var(--surface);\\n      border: 1px solid var(--border);\\n      border-radius: 4px;\\n      font-size: 0.85em;\\n    }\\n    code { padding: 2px 6px; }\\n    pre {\\n      padding: 16px;\\n      overflow-x: auto;\\n      line-height: 1.5;\\n    }\\n\\n    /* Geometric background */\\n    body::before {\\n      content: \\\"\\\";\\n      position: fixed;\\n      inset: 0;\\n      pointer-events: none;\\n      z-index: 0;\\n      background:\\n        radial-gradient(circle at 20% 0%, rgba(0,163,191,0.06), transparent 35%),\\n        radial-gradient(circle at 80% 100%, rgba(0,163,191,0.03), transparent 30%);\\n    }\\n    .dot-grid {\\n      position: fixed;\\n      inset: 0;\\n      pointer-events: none;\\n      z-index: 0;\\n      background-image: radial-gradient(rgba(255,255,255,0.06) 1px, transparent 1px);\\n      background-size: 32px 32px;\\n      mask-image: linear-gradient(to bottom, rgba(0,0,0,0.25) 0%, rgba(0,0,0,0) 70%);\\n      -webkit-mask-image: linear-gradient(to bottom, rgba(0,0,0,0.25) 0%, rgba(0,0,0,0) 70%);\\n    }\\n\\n    /* Minimal top bar */\\n    .topbar {\\n      position: sticky;\\n      top: 0;\\n      z-index: 1000;\\n      background: rgba(10,10,15,0.92);\\n      backdrop-filter: blur(8px);\\n      border-bottom: 1px solid var(--border);\\n    }\\n    .topbar-inner {\\n      max-width: 1280px;\\n      margin: 0 auto;\\n      padding: 12px 24px;\\n      display: flex;\\n      align-items: center;\\n      justify-content: space-between;\\n      gap: 20px;\\n    }\\n    .brand {\\n      display: flex;\\n      align-items: center;\\n      gap: 10px;\\n      font-weight: 600;\\n      font-size: 0.95rem;\\n      letter-spacing: 0.04em;\\n      color: var(--text);\\n      white-space: nowrap;\\n    }\\n    .brand-mark {\\n      width: 8px; height: 8px;\\n      background: var(--accent);\\n      transform: rotate(45deg);\\n    }\\n    .nav-links {\\n      display: flex;\\n      gap: 20px;\\n      flex-wrap: wrap;\\n      justify-content: flex-end;\\n    }\\n    .nav-links a {\\n      font-size: 0.72rem;\\n      color: var(--muted);\\n      font-weight: 500;\\n      letter-spacing: 0.02em;\\n      text-transform: uppercase;\\n    }\\n    .nav-links a:hover { color: var(--accent); }\\n\\n    .wrapper {\\n      position: relative;\\n      z-index: 1;\\n      max-width: 1280px;\\n      margin: 0 auto;\\n      padding: 0 24px 80px;\\n    }\\n    section { margin-bottom: 80px; }\\n\\n    h1, h2, h3, h4 {\\n      margin: 0 0 14px;\\n      font-weight: 600;\\n      line-height: 1.25;\\n      letter-spacing: -0.01em;\\n    }\\n    h1 { font-size: 3rem; font-weight: 300; letter-spacing: -0.03em; }\\n    h2 {\\n      font-size: 1.35rem;\\n      font-weight: 500;\\n      color: var(--text);\\n      border-bottom: 1px solid var(--border);\\n      padding-bottom: 12px;\\n      margin-top: 56px;\\n      display: flex;\\n      align-items: baseline;\\n      gap: 12px;\\n    }\\n    h2::before {\\n      content: attr(data-num);\\n      color: var(--accent);\\n      font-size: 0.75rem;\\n      font-weight: 600;\\n      letter-spacing: 0.08em;\\n      text-transform: uppercase;\\n    }\\n    h3 { font-size: 1.05rem; font-weight: 500; color: var(--text); margin-top: 28px; }\\n    h4 { font-size: 0.95rem; font-weight: 500; color: var(--muted); margin-top: 22px; }\\n    p { margin: 0 0 14px; color: var(--text); }\\n    .lead { font-size: 1.1rem; color: var(--muted); font-weight: 400; line-height: 1.6; }\\n\\n    .card {\\n      background: var(--surface);\\n      border: 1px solid var(--border);\\n      border-radius: 4px;\\n      padding: 22px 24px;\\n      margin: 18px 0;\\n    }\\n    .card h3 { margin-top: 0; }\\n\\n    .wedge {\\n      background: var(--surface-elevated);\\n      border-left: 2px solid var(--accent);\\n      position: relative;\\n    }\\n    .wedge::before {\\n      content: \\\"PRIMARY WEDGE\\\";\\n      position: absolute;\\n      top: -1px;\\n      right: 20px;\\n      background: var(--accent-dim);\\n      color: var(--accent);\\n      font-size: 0.6rem;\\n      font-weight: 700;\\n      padding: 4px 10px;\\n      letter-spacing: 0.08em;\\n      border: 1px solid var(--border);\\n      border-top: none;\\n    }\\n    .wedge h2 { border-color: rgba(0,163,191,0.18); }\\n    .wedge h2::before { color: var(--accent); }\\n\\n    table {\\n      width: 100%;\\n      border-collapse: collapse;\\n      margin: 18px 0;\\n      font-size: 0.88rem;\\n    }\\n    th, td {\\n      border: 1px solid var(--border);\\n      padding: 12px 14px;\\n      text-align: left;\\n      vertical-align: top;\\n    }\\n    th {\\n      background: rgba(255,255,255,0.03);\\n      color: var(--accent);\\n      font-weight: 600;\\n      font-size: 0.75rem;\\n      letter-spacing: 0.04em;\\n      text-transform: uppercase;\\n    }\\n    tr:nth-child(even) td { background: rgba(255,255,255,0.015); }\\n    ul, ol { margin: 12px 0; padding-left: 22px; }\\n    li { margin-bottom: 8px; }\\n    strong { color: var(--text); font-weight: 600; }\\n    blockquote {\\n      border-left: 1px solid var(--accent);\\n      padding-left: 18px;\\n      color: var(--muted);\\n      font-style: italic;\\n      margin: 18px 0;\\n    }\\n\\n    .phases {\\n      display: grid;\\n      grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));\\n      gap: 1px;\\n      margin: 24px 0;\\n      background: var(--border);\\n      border: 1px solid var(--border);\\n    }\\n    .phase {\\n      background: var(--surface);\\n      padding: 20px;\\n    }\\n    .phase .num {\\n      display: inline-flex;\\n      align-items: center;\\n      justify-content: center;\\n      width: 24px; height: 24px;\\n      border: 1px solid var(--accent);\\n      color: var(--accent);\\n      font-weight: 600;\\n      font-size: 0.75rem;\\n      margin-bottom: 12px;\\n    }\\n    .phase h4 { margin: 0 0 8px; color: var(--text); font-weight: 500; }\\n    .phase p { font-size: 0.88rem; color: var(--muted); margin: 0; }\\n\\n    .hero {\\n      min-height: 70vh;\\n      display: flex;\\n      flex-direction: column;\\n      justify-content: center;\\n      align-items: center;\\n      text-align: center;\\n      border-bottom: 1px solid var(--border);\\n      padding: 80px 0 60px;\\n      margin-bottom: 80px;\\n    }\\n    .hero .logo {\\n      display: flex;\\n      align-items: center;\\n      justify-content: center;\\n      gap: 14px;\\n      margin-bottom: 18px;\\n    }\\n    .hero .logo-mark {\\n      width: 14px; height: 14px;\\n      background: var(--accent);\\n      transform: rotate(45deg);\\n    }\\n    .hero h1 { margin: 0; font-size: 4rem; font-weight: 300; letter-spacing: 0.12em; }\\n    .hero .tagline {\\n      font-size: 1.05rem;\\n      color: var(--accent);\\n      font-weight: 500;\\n      letter-spacing: 0.04em;\\n      margin-bottom: 28px;\\n      text-transform: uppercase;\\n    }\\n    .hero .summary {\\n      max-width: 760px;\\n      margin: 0 auto;\\n      color: var(--muted);\\n      font-size: 1.05rem;\\n      line-height: 1.7;\\n    }\\n    .hero-stats {\\n      display: flex;\\n      justify-content: center;\\n      gap: 48px;\\n      flex-wrap: wrap;\\n      margin-top: 48px;\\n      padding-top: 40px;\\n      border-top: 1px solid var(--border);\\n    }\\n    .stat { text-align: left; min-width: 140px; }\\n    .stat .value {\\n      font-size: 1.6rem;\\n      font-weight: 300;\\n      color: var(--text);\\n      letter-spacing: -0.02em;\\n    }\\n    .stat .label {\\n      font-size: 0.7rem;\\n      color: var(--muted);\\n      text-transform: uppercase;\\n      letter-spacing: 0.06em;\\n      margin-top: 4px;\\n    }\\n\\n    .svg-wrap {\\n      background: var(--surface);\\n      border: 1px solid var(--border);\\n      border-radius: 2px;\\n      padding: 10px;\\n      overflow-x: auto;\\n      margin: 24px 0;\\n    }\\n    .svg-wrap svg {\\n      width: 100%;\\n      height: auto;\\n      min-width: 1100px;\\n      display: block;\\n    }\\n\\n    .notice {\\n      border: 1px solid var(--amber-dim);\\n      background: var(--amber-dim);\\n      padding: 14px 18px;\\n      font-size: 0.85rem;\\n      color: var(--text);\\n    }\\n    .notice strong { color: var(--amber); }\\n\\n    footer {\\n      position: relative;\\n      z-index: 1;\\n      border-top: 1px solid var(--border);\\n      padding: 40px 24px;\\n      text-align: center;\\n      color: var(--muted);\\n      font-size: 0.8rem;\\n      letter-spacing: 0.02em;\\n    }\\n    footer p { margin: 6px 0; }\\n\\n    @media (max-width: 900px) {\\n      .topbar-inner { flex-direction: column; align-items: flex-start; gap: 10px; }\\n      .nav-links { justify-content: flex-start; gap: 14px; }\\n      h1, .hero h1 { font-size: 2.4rem; }\\n      .hero { min-height: auto; padding: 48px 0; }\\n      .hero-stats { gap: 24px; }\\n      .svg-wrap svg { min-width: 900px; }\\n    }\\n  \\u003c/style\\u003e\\n\\u003c/head\\u003e\\n\\u003cbody\\u003e\\n  \\u003cdiv class=\\\"dot-grid\\\"\\u003e\\u003c/div\\u003e\\n  \\u003cnav class=\\\"topbar\\\"\\u003e\\n    \\u003cdiv class=\\\"topbar-inner\\\"\\u003e\\n      \\u003ca href=\\\"#top\\\" class=\\\"brand\\\"\\u003e\\u003cspan class=\\\"brand-mark\\\"\\u003e\\u003c/span\\u003eVERITAS\\u003c/a\\u003e\\n      \\u003cdiv class=\\\"nav-links\\\"\\u003e\\n        \\u003ca href=\\\"#overview\\\"\\u003eOverview\\u003c/a\\u003e\\n        \\u003ca href=\\\"#problem\\\"\\u003eProblem\\u003c/a\\u003e\\n        \\u003ca href=\\\"#how-it-works\\\"\\u003eHow It Works\\u003c/a\\u003e\\n        \\u003ca href=\\\"#architecture\\\"\\u003eArchitecture\\u003c/a\\u003e\\n        \\u003ca href=\\\"#ai-pipeline\\\"\\u003eAI/ML\\u003c/a\\u003e\\n        \\u003ca href=\\\"#context-model\\\"\\u003eContext Model\\u003c/a\\u003e\\n        \\u003ca href=\\\"#attribution\\\"\\u003eAttribution\\u003c/a\\u003e\\n        \\u003ca href=\\\"#sources\\\"\\u003eSources\\u003c/a\\u003e\\n        \\u003ca href=\\\"#products\\\"\\u003eProducts\\u003c/a\\u003e\\n        \\u003ca href=\\\"#deployment\\\"\\u003eDeploy\\u003c/a\\u003e\\n        \\u003ca href=\\\"#business\\\"\\u003eBusiness\\u003c/a\\u003e\\n        \\u003ca href=\\\"#competition\\\"\\u003eCompetition\\u003c/a\\u003e\\n        \\u003ca href=\\\"#mvp\\\"\\u003eMVP\\u003c/a\\u003e\\n        \\u003ca href=\\\"#roadmap\\\"\\u003eRoadmap\\u003c/a\\u003e\\n      \\u003c/div\\u003e\\n    \\u003c/div\\u003e\\n  \\u003c/nav\\u003e\\n  \\u003cmain class=\\\"wrapper\\\" id=\\\"top\\\"\\u003e\\n    \\u003csection class=\\\"hero\\\" id=\\\"overview\\\"\\u003e\\n      \\u003cdiv class=\\\"logo\\\"\\u003e\\u003cspan class=\\\"logo-mark\\\"\\u003e\\u003c/span\\u003e\\u003ch1\\u003eVERITAS\\u003c/h1\\u003e\\u003c/div\\u003e\\n      \\u003cdiv class=\\\"tagline\\\"\\u003eDetect, attribute, and counter coordinated disinformation in real time.\\u003c/div\\u003e\\n      \\u003cp class=\\\"summary\\\"\\u003e\\n        A sovereign AI platform for democratic governments that ingests multi-source social and dark-web signals,\\n        extracts and attributes malign information campaigns, and produces machine-readable intelligence products\\n        in STIX/MISP format. VERITAS closes the blind spot Western tools cannot see: non-English, culturally encoded\\n        influence operations in the Turkish and broader Islamosphere information spaces.\\n      \\u003c/p\\u003e\\n      \\u003cdiv class=\\\"hero-stats\\\"\\u003e\\n        \\u003cdiv class=\\\"stat\\\"\\u003e\\u003cdiv class=\\\"value\\\"\\u003e€5B+\\u003c/div\\u003e\\u003cdiv class=\\\"label\\\"\\u003eadversarial annual spend\\u003c/div\\u003e\\u003c/div\\u003e\\n        \\u003cdiv class=\\\"stat\\\"\\u003e\\u003cdiv class=\\\"value\\\"\\u003e24–72h\\u003c/div\\u003e\\u003cdiv class=\\\"label\\\"\\u003ecurrent detection latency\\u003c/div\\u003e\\u003c/div\\u003e\\n        \\u003cdiv class=\\\"stat\\\"\\u003e\\u003cdiv class=\\\"value\\\"\\u003e\\u0026lt;15 min\\u003c/div\\u003e\\u003cdiv class=\\\"label\\\"\\u003eVERITAS attribution target\\u003c/div\\u003e\\u003c/div\\u003e\\n        \\u003cdiv class=\\\"stat\\\"\\u003e\\u003cdiv class=\\\"value\\\"\\u003e€2M–€10M\\u003c/div\\u003e\\u003cdiv class=\\\"label\\\"\\u003etarget ARR per customer\\u003c/div\\u003e\\u003c/div\\u003e\\n      \\u003c/div\\u003e\\n    \\u003c/section\\u003e\\n\\n    \\u003csection id=\\\"problem\\\"\\u003e\\n      \\u003ch2 data-num=\\\"01\\\"\\u003eThe Problem\\u003c/h2\\u003e\\n      \\u003cp class=\\\"lead\\\"\\u003eDisinformation is no longer a social-media nuisance. It is a financed, staffed, and measured component of state and proxy hybrid warfare.\\u003c/p\\u003e\\n\\n      \\u003ch3\\u003eScale and Spend\\u003c/h3\\u003e\\n      \\u003cp\\u003eEU disinformation researchers estimate adversarial annual spending on influence operations at roughly \\u003cstrong\\u003e€5 billion\\u003c/strong\\u003e, covering troll farms, fake media outlets, botnet infrastructure, paid opinion leaders, and synthetic media production. The ROI is asymmetric: a single well-timed false narrative can shift electoral behavior or inflame civil unrest at a cost measured in thousands of euros.\\u003c/p\\u003e\\n\\n      \\u003ch3\\u003eDetection Latency\\u003c/h3\\u003e\\n      \\u003cp\\u003eManual OSINT monitoring often surfaces a campaign only after it has crossed into mainstream media. Automated brand-safety classifiers miss new-narrative seeding, coordinated inauthentic behavior, and culturally encoded incitement. Average time-to-detection for a new state-backed campaign is \\u003cstrong\\u003e24–72 hours\\u003c/strong\\u003e — by then the narrative has been seeded, amplified, and laundered into mainstream discourse.\\u003c/p\\u003e\\n\\n      \\u003ch3\\u003eReal Examples\\u003c/h3\\u003e\\n      \\u003cul\\u003e\\n        \\u003cli\\u003e\\u003cstrong\\u003eUkraine war IO:\\u003c/strong\\u003e Russian and proxy actors seed false narratives about refugee crime, NATO biolabs, and fabricated atrocities first in German-, Turkish-, and Arabic-language Telegram and X channels, then launder them into domestic communities.\\u003c/li\\u003e\\n        \\u003cli\\u003e\\u003cstrong\\u003eIranian IRGC/IOPI operations:\\u003c/strong\\u003e Proxy networks use Turkish-language “anti-imperialist” framing to reach Sunni-majority European diaspora audiences, mixing legitimate criticism with fabricated atrocity content. Western tools classify the religious/historical references as neutral.\\u003c/li\\u003e\\n        \\u003cli\\u003e\\u003cstrong\\u003eChinese covert influence:\\u003c/strong\\u003e Operations targeting the Turkish diaspora in Germany exploit honor/shame dynamics and kinship networks — detection requires native cultural models, not keyword lists.\\u003c/li\\u003e\\n      \\u003c/ul\\u003e\\n\\n      \\u003ch3\\u003eWhy Current Tools Fail\\u003c/h3\\u003e\\n      \\u003cul\\u003e\\n        \\u003cli\\u003e\\u003cstrong\\u003eLanguage:\\u003c/strong\\u003e Most classifiers are trained predominantly on English data. Low-resource but high-threat languages such as Turkish, Kurdish, and Arabic dialects are under-modeled.\\u003c/li\\u003e\\n        \\u003cli\\u003e\\u003cstrong\\u003eCultural context:\\u003c/strong\\u003e References to Srebrenica, the Crusades, or Ottoman history are used as coded incitement and misread as historical discussion.\\u003c/li\\u003e\\n        \\u003cli\\u003e\\u003cstrong\\u003eCoordination awareness:\\u003c/strong\\u003e The threat is synchronized seeding across hundreds of accounts and platforms. This requires temporal graph analysis, not sentiment analysis.\\u003c/li\\u003e\\n        \\u003cli\\u003e\\u003cstrong\\u003eAttribution gap:\\u003c/strong\\u003e Knowing something is fake is not enough. Analysts need evidence chains identifying who is pushing it, why, and through which proxy infrastructure.\\u003c/li\\u003e\\n      \\u003c/ul\\u003e\\n    \\u003c/section\\u003e\\n\\n    \\u003csection id=\\\"how-it-works\\\"\\u003e\\n      \\u003ch2 data-num=\\\"02\\\"\\u003eHow VERITAS Works\\u003c/h2\\u003e\\n      \\u003cp class=\\\"lead\\\"\\u003eVERITAS is organized as a five-phase pipeline: Collect → Detect → Attribute → Produce → Deliver.\\u003c/p\\u003e\\n      \\u003cdiv class=\\\"phases\\\"\\u003e\\n        \\u003cdiv class=\\\"phase\\\"\\u003e\\n          \\u003cdiv class=\\\"num\\\"\\u003e1\\u003c/div\\u003e\\n          \\u003ch4\\u003eCollect\\u003c/h4\\u003e\\n          \\u003cp\\u003eIngest signals from Telegram, X, TikTok, YouTube, licensed news wires (Reuters, AFP, DPA), and dark-web/onion sources. Each source uses adapters that normalize content into a canonical event schema.\\u003c/p\\u003e\\n        \\u003c/div\\u003e\\n        \\u003cdiv class=\\\"phase\\\"\\u003e\\n          \\u003cdiv class=\\\"num\\\"\\u003e2\\u003c/div\\u003e\\n          \\u003ch4\\u003eDetect\\u003c/h4\\u003e\\n          \\u003cp\\u003eNormalize language, transcribe audio/video via Whisper, run OCR on memes, tag dialects, and flag coordinated inauthentic behavior through burst detection and semantic clustering.\\u003c/p\\u003e\\n        \\u003c/div\\u003e\\n        \\u003cdiv class=\\\"phase\\\"\\u003e\\n          \\u003cdiv class=\\\"num\\\"\\u003e3\\u003c/div\\u003e\\n          \\u003ch4\\u003eAttribute\\u003c/h4\\u003e\\n          \\u003cp\\u003eMove from content to actor. Linguistic forensics, TTP fingerprint matching, and the Cross-Cultural Context Model produce structured attribution hypotheses with confidence intervals.\\u003c/p\\u003e\\n        \\u003c/div\\u003e\\n        \\u003cdiv class=\\\"phase\\\"\\u003e\\n          \\u003cdiv class=\\\"num\\\"\\u003e4\\u003c/div\\u003e\\n          \\u003ch4\\u003eProduce\\u003c/h4\\u003e\\n          \\u003cp\\u003ePersist campaigns to the Campaign Knowledge Graph. Generate dashboards, automated STIX 2.1/MISP reports, counter-narrative suggestions, and early-warning alerts.\\u003c/p\\u003e\\n        \\u003c/div\\u003e\\n        \\u003cdiv class=\\\"phase\\\"\\u003e\\n          \\u003cdiv class=\\\"num\\\"\\u003e5\\u003c/div\\u003e\\n          \\u003ch4\\u003eDeliver\\u003c/h4\\u003e\\n          \\u003cp\\u003eConsume intelligence through a secure government portal (mTLS + SAML/OIDC), a scoped REST API for SOC/CERT workflows, or an air-gapped classified variant.\\u003c/p\\u003e\\n        \\u003c/div\\u003e\\n      \\u003c/div\\u003e\\n    \\u003c/section\\u003e\\n\\n    \\u003csection id=\\\"architecture\\\"\\u003e\\n      \\u003ch2 data-num=\\\"03\\\"\\u003eTechnical Architecture\\u003c/h2\\u003e\\n      \\u003cp class=\\\"lead\\\"\\u003eA log-centric, graph-native intelligence architecture built for throughput, replay, and auditability.\\u003c/p\\u003e\\n      \\u003cdiv class=\\\"svg-wrap\\\"\\u003e\\n    \\u003csvg viewBox=\\\"0 0 1300 900\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"\\u003e\\n      \\u003cdefs\\u003e\\n        \\u003cpattern id=\\\"grid\\\" width=\\\"40\\\" height=\\\"40\\\" patternUnits=\\\"userSpaceOnUse\\\"\\u003e\\n          \\u003cpath d=\\\"M 40 0 L 0 0 0 40\\\" fill=\\\"none\\\" stroke=\\\"#1a1b22\\\" stroke-width=\\\"1\\\"/\\u003e\\n        \\u003c/pattern\\u003e\\n        \\u003cmarker id=\\\"arrow\\\" markerWidth=\\\"8\\\" markerHeight=\\\"8\\\" refX=\\\"7\\\" refY=\\\"4\\\" orient=\\\"auto\\\"\\u003e\\n          \\u003cpath d=\\\"M0,0 L8,4 L0,8 L2,4 z\\\" fill=\\\"#4a4b55\\\" /\\u003e\\n        \\u003c/marker\\u003e\\n        \\u003cmarker id=\\\"arrow-accent\\\" markerWidth=\\\"8\\\" markerHeight=\\\"8\\\" refX=\\\"7\\\" refY=\\\"4\\\" orient=\\\"auto\\\"\\u003e\\n          \\u003cpath d=\\\"M0,0 L8,4 L0,8 L2,4 z\\\" fill=\\\"#00a3bf\\\" /\\u003e\\n        \\u003c/marker\\u003e\\n        \\u003cmarker id=\\\"arrow-amber\\\" markerWidth=\\\"8\\\" markerHeight=\\\"8\\\" refX=\\\"7\\\" refY=\\\"4\\\" orient=\\\"auto\\\"\\u003e\\n          \\u003cpath d=\\\"M0,0 L8,4 L0,8 L2,4 z\\\" fill=\\\"#b47d1b\\\" /\\u003e\\n        \\u003c/marker\\u003e\\n      \\u003c/defs\\u003e\\n\\n      \\u003c!-- Background --\\u003e\\n      \\u003crect x=\\\"0\\\" y=\\\"0\\\" width=\\\"1300\\\" height=\\\"900\\\" fill=\\\"#0a0a0f\\\" /\\u003e\\n      \\u003crect x=\\\"0\\\" y=\\\"0\\\" width=\\\"1300\\\" height=\\\"900\\\" fill=\\\"url(#grid)\\\" /\\u003e\\n\\n      \\u003c!-- Header --\\u003e\\n      \\u003cg transform=\\\"translate(40,30)\\\"\\u003e\\n        \\u003crect x=\\\"0\\\" y=\\\"2\\\" width=\\\"10\\\" height=\\\"10\\\" fill=\\\"#00a3bf\\\" transform=\\\"rotate(45,5,7)\\\" /\\u003e\\n        \\u003ctext x=\\\"22\\\" y=\\\"15\\\" font-family=\\\"'Inter', sans-serif\\\" font-size=\\\"20\\\" font-weight=\\\"500\\\" fill=\\\"#e8e8ed\\\" letter-spacing=\\\"0.08em\\\"\\u003eVERITAS\\u003c/text\\u003e\\n        \\u003ctext x=\\\"120\\\" y=\\\"15\\\" font-family=\\\"'Inter', sans-serif\\\" font-size=\\\"13\\\" font-weight=\\\"400\\\" fill=\\\"#8a8b99\\\"\\u003e— AI Counter-Disinformation Platform\\u003c/text\\u003e\\n        \\u003ctext x=\\\"22\\\" y=\\\"36\\\" font-family=\\\"'Inter', sans-serif\\\" font-size=\\\"10\\\" fill=\\\"#6a6b75\\\"\\u003eReal-time disinformation detection, attribution, and counter-narrative generation for democratic governments\\u003c/text\\u003e\\n      \\u003c/g\\u003e\\n\\n      \\u003c!-- Tier labels --\\u003e\\n      \\u003cg font-family=\\\"'Inter', sans-serif\\\" font-size=\\\"9\\\" font-weight=\\\"600\\\" fill=\\\"#6a6b75\\\" text-anchor=\\\"middle\\\" letter-spacing=\\\"0.06em\\\"\\u003e\\n        \\u003ctext x=\\\"130\\\" y=\\\"90\\\"\\u003eTIER 1 — DATA SOURCES\\u003c/text\\u003e\\n        \\u003ctext x=\\\"320\\\" y=\\\"90\\\"\\u003eTIER 2 — COLLECTION\\u003c/text\\u003e\\n        \\u003ctext x=\\\"480\\\" y=\\\"90\\\"\\u003eTIER 3 — MESSAGE BUS\\u003c/text\\u003e\\n        \\u003ctext x=\\\"660\\\" y=\\\"90\\\"\\u003eTIER 4 — AI ANALYSIS PIPELINE\\u003c/text\\u003e\\n        \\u003ctext x=\\\"870\\\" y=\\\"90\\\"\\u003eTIER 5 — KNOWLEDGE STORE\\u003c/text\\u003e\\n        \\u003ctext x=\\\"1065\\\" y=\\\"90\\\"\\u003eTIER 6 — PRODUCTION\\u003c/text\\u003e\\n        \\u003ctext x=\\\"1065\\\" y=\\\"655\\\"\\u003eTIER 7 — DELIVERY\\u003c/text\\u003e\\n      \\u003c/g\\u003e\\n\\n      \\u003c!-- Security boundary: AI Pipeline + Knowledge Store --\\u003e\\n      \\u003crect x=\\\"545\\\" y=\\\"105\\\" width=\\\"410\\\" height=\\\"430\\\" rx=\\\"2\\\" fill=\\\"none\\\" stroke=\\\"#a84646\\\" stroke-width=\\\"1\\\" stroke-dasharray=\\\"8,5\\\" opacity=\\\"0.7\\\" /\\u003e\\n      \\u003ctext x=\\\"560\\\" y=\\\"122\\\" font-family=\\\"'Inter', sans-serif\\\" font-size=\\\"9\\\" font-weight=\\\"600\\\" fill=\\\"#a84646\\\" letter-spacing=\\\"0.05em\\\"\\u003eCLASSIFIED PROCESSING BOUNDARY\\u003c/text\\u003e\\n\\n      \\u003c!-- Kafka vertical bus --\\u003e\\n      \\u003crect x=\\\"450\\\" y=\\\"145\\\" width=\\\"60\\\" height=\\\"585\\\" rx=\\\"2\\\" fill=\\\"rgba(180,125,27,0.08)\\\" /\\u003e\\n      \\u003crect x=\\\"455\\\" y=\\\"150\\\" width=\\\"50\\\" height=\\\"575\\\" rx=\\\"2\\\" fill=\\\"none\\\" stroke=\\\"#b47d1b\\\" stroke-width=\\\"1\\\" /\\u003e\\n      \\u003ctext x=\\\"480\\\" y=\\\"175\\\" font-family=\\\"'Inter', sans-serif\\\" font-size=\\\"10\\\" font-weight=\\\"600\\\" fill=\\\"#b47d1b\\\" text-anchor=\\\"middle\\\" transform=\\\"rotate(-90,480,175)\\\" letter-spacing=\\\"0.05em\\\"\\u003eAPACHE KAFKA EVENT MESH\\u003c/text\\u003e\\n      \\u003cg stroke=\\\"#b47d1b\\\" stroke-width=\\\"1\\\" opacity=\\\"0.25\\\"\\u003e\\n        \\u003cline x1=\\\"465\\\" y1=\\\"190\\\" x2=\\\"465\\\" y2=\\\"725\\\" /\\u003e\\n        \\u003cline x1=\\\"480\\\" y1=\\\"190\\\" x2=\\\"480\\\" y2=\\\"725\\\" /\\u003e\\n        \\u003cline x1=\\\"495\\\" y1=\\\"190\\\" x2=\\\"495\\\" y2=\\\"725\\\" /\\u003e\\n      \\u003c/g\\u003e\\n\\n      \\u003c!-- Helper: box --\\u003e\\n      \\u003cdefs\\u003e\\n        \\u003cstyle\\u003e\\n          .box { rx: 2; stroke-width: 1; }\\n          .box-text { font-family: 'Inter', sans-serif; font-size: 9px; font-weight: 500; letter-spacing: 0.02em; }\\n          .box-sub { font-family: 'Inter', sans-serif; font-size: 7px; font-weight: 400; fill: #8a8b99; opacity: 0.9; }\\n        \\u003c/style\\u003e\\n      \\u003c/defs\\u003e\\n\\n      \\u003c!-- Tier 1: Data Sources --\\u003e\\n      \\u003cg id=\\\"tier1\\\"\\u003e\\n        \\u003crect x=\\\"40\\\" y=\\\"145\\\" width=\\\"160\\\" height=\\\"36\\\" class=\\\"box\\\" fill=\\\"#13141a\\\" stroke=\\\"rgba(255,255,255,0.08)\\\" /\\u003e\\n        \\u003ctext x=\\\"120\\\" y=\\\"168\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#e8e8ed\\\"\\u003eTelegram Channels \\u0026amp; Groups\\u003c/text\\u003e\\n\\n        \\u003crect x=\\\"40\\\" y=\\\"195\\\" width=\\\"160\\\" height=\\\"36\\\" class=\\\"box\\\" fill=\\\"#13141a\\\" stroke=\\\"rgba(255,255,255,0.08)\\\" /\\u003e\\n        \\u003ctext x=\\\"120\\\" y=\\\"218\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#e8e8ed\\\"\\u003eX/Twitter Firehose\\u003c/text\\u003e\\n\\n        \\u003crect x=\\\"40\\\" y=\\\"245\\\" width=\\\"160\\\" height=\\\"36\\\" class=\\\"box\\\" fill=\\\"#13141a\\\" stroke=\\\"rgba(255,255,255,0.08)\\\" /\\u003e\\n        \\u003ctext x=\\\"120\\\" y=\\\"268\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#e8e8ed\\\"\\u003eTikTok Trends\\u003c/text\\u003e\\n\\n        \\u003crect x=\\\"40\\\" y=\\\"295\\\" width=\\\"160\\\" height=\\\"36\\\" class=\\\"box\\\" fill=\\\"#13141a\\\" stroke=\\\"rgba(255,255,255,0.08)\\\" /\\u003e\\n        \\u003ctext x=\\\"120\\\" y=\\\"318\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#e8e8ed\\\"\\u003eYouTube Transcripts\\u003c/text\\u003e\\n\\n        \\u003crect x=\\\"40\\\" y=\\\"345\\\" width=\\\"160\\\" height=\\\"36\\\" class=\\\"box\\\" fill=\\\"#13141a\\\" stroke=\\\"rgba(255,255,255,0.08)\\\" /\\u003e\\n        \\u003ctext x=\\\"120\\\" y=\\\"365\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#e8e8ed\\\"\\u003eNews Wire APIs\\u003c/text\\u003e\\n        \\u003ctext x=\\\"120\\\" y=\\\"376\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\"\\u003eReuters, AFP, DPA\\u003c/text\\u003e\\n\\n        \\u003crect x=\\\"40\\\" y=\\\"395\\\" width=\\\"160\\\" height=\\\"36\\\" class=\\\"box\\\" fill=\\\"#13141a\\\" stroke=\\\"rgba(255,255,255,0.08)\\\" /\\u003e\\n        \\u003ctext x=\\\"120\\\" y=\\\"415\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#e8e8ed\\\"\\u003eDark Web / Telegram Deep\\u003c/text\\u003e\\n        \\u003ctext x=\\\"120\\\" y=\\\"426\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\"\\u003eOnion / private channels\\u003c/text\\u003e\\n      \\u003c/g\\u003e\\n\\n      \\u003c!-- Tier 2: Collection (amber) --\\u003e\\n      \\u003cg id=\\\"tier2\\\"\\u003e\\n        \\u003crect x=\\\"250\\\" y=\\\"160\\\" width=\\\"160\\\" height=\\\"46\\\" class=\\\"box\\\" fill=\\\"rgba(180,125,27,0.08)\\\" stroke=\\\"#b47d1b\\\" /\\u003e\\n        \\u003ctext x=\\\"330\\\" y=\\\"182\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#e8e8ed\\\"\\u003eMulti-Platform Ingestion\\u003c/text\\u003e\\n        \\u003ctext x=\\\"330\\\" y=\\\"195\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\"\\u003eEngine (Telegram MTProto, X API)\\u003c/text\\u003e\\n\\n        \\u003crect x=\\\"250\\\" y=\\\"230\\\" width=\\\"160\\\" height=\\\"46\\\" class=\\\"box\\\" fill=\\\"rgba(180,125,27,0.08)\\\" stroke=\\\"#b47d1b\\\" /\\u003e\\n        \\u003ctext x=\\\"330\\\" y=\\\"252\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#e8e8ed\\\"\\u003eReal-time Stream Processor\\u003c/text\\u003e\\n        \\u003ctext x=\\\"330\\\" y=\\\"265\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\"\\u003eFlink / Kafka Streams\\u003c/text\\u003e\\n\\n        \\u003crect x=\\\"250\\\" y=\\\"300\\\" width=\\\"160\\\" height=\\\"46\\\" class=\\\"box\\\" fill=\\\"rgba(180,125,27,0.08)\\\" stroke=\\\"#b47d1b\\\" /\\u003e\\n        \\u003ctext x=\\\"330\\\" y=\\\"322\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#e8e8ed\\\"\\u003eMedia Transcriber\\u003c/text\\u003e\\n        \\u003ctext x=\\\"330\\\" y=\\\"335\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\"\\u003eWhisper → text, image OCR\\u003c/text\\u003e\\n\\n        \\u003crect x=\\\"250\\\" y=\\\"370\\\" width=\\\"160\\\" height=\\\"46\\\" class=\\\"box\\\" fill=\\\"rgba(180,125,27,0.08)\\\" stroke=\\\"#b47d1b\\\" /\\u003e\\n        \\u003ctext x=\\\"330\\\" y=\\\"392\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#e8e8ed\\\"\\u003eLanguage Detector \\u0026amp; Normalizer\\u003c/text\\u003e\\n        \\u003ctext x=\\\"330\\\" y=\\\"405\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\"\\u003efastText / CLD3 / transliteration\\u003c/text\\u003e\\n      \\u003c/g\\u003e\\n\\n      \\u003c!-- Tier 4: AI Analysis Pipeline (accent) --\\u003e\\n      \\u003cg id=\\\"tier4\\\"\\u003e\\n        \\u003crect x=\\\"565\\\" y=\\\"145\\\" width=\\\"175\\\" height=\\\"42\\\" class=\\\"box\\\" fill=\\\"#13141a\\\" stroke=\\\"rgba(0,163,191,0.35)\\\" /\\u003e\\n        \\u003ctext x=\\\"652\\\" y=\\\"165\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#00a3bf\\\"\\u003eNarrative Extraction LLM\\u003c/text\\u003e\\n        \\u003ctext x=\\\"652\\\" y=\\\"178\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\"\\u003efine-tuned 70B / Mixtral 8x22B\\u003c/text\\u003e\\n\\n        \\u003crect x=\\\"565\\\" y=\\\"205\\\" width=\\\"175\\\" height=\\\"42\\\" class=\\\"box\\\" fill=\\\"#13141a\\\" stroke=\\\"rgba(0,163,191,0.35)\\\" /\\u003e\\n        \\u003ctext x=\\\"652\\\" y=\\\"225\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#00a3bf\\\"\\u003eBot Coordination Detector\\u003c/text\\u003e\\n        \\u003ctext x=\\\"652\\\" y=\\\"238\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\"\\u003etemporal burst + graph clustering\\u003c/text\\u003e\\n\\n        \\u003crect x=\\\"565\\\" y=\\\"265\\\" width=\\\"175\\\" height=\\\"42\\\" class=\\\"box\\\" fill=\\\"#13141a\\\" stroke=\\\"rgba(0,163,191,0.35)\\\" /\\u003e\\n        \\u003ctext x=\\\"652\\\" y=\\\"285\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#00a3bf\\\"\\u003eState Actor Attribution Engine\\u003c/text\\u003e\\n        \\u003ctext x=\\\"652\\\" y=\\\"298\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\"\\u003eTTP fingerprint matching\\u003c/text\\u003e\\n\\n        \\u003crect x=\\\"565\\\" y=\\\"325\\\" width=\\\"175\\\" height=\\\"42\\\" class=\\\"box\\\" fill=\\\"#13141a\\\" stroke=\\\"rgba(0,163,191,0.35)\\\" /\\u003e\\n        \\u003ctext x=\\\"652\\\" y=\\\"345\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#00a3bf\\\"\\u003eLinguistic Forensic Analyzer\\u003c/text\\u003e\\n        \\u003ctext x=\\\"652\\\" y=\\\"358\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\"\\u003esyntax + idiolect signatures\\u003c/text\\u003e\\n\\n        \\u003crect x=\\\"565\\\" y=\\\"385\\\" width=\\\"175\\\" height=\\\"52\\\" class=\\\"box\\\" fill=\\\"rgba(0,163,191,0.10)\\\" stroke=\\\"#00a3bf\\\" /\\u003e\\n        \\u003ctext x=\\\"652\\\" y=\\\"405\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#00a3bf\\\"\\u003eCross-Cultural Context Model\\u003c/text\\u003e\\n        \\u003ctext x=\\\"652\\\" y=\\\"420\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\"\\u003eTurkish / Islamosphere nuances\\u003c/text\\u003e\\n        \\u003ctext x=\\\"652\\\" y=\\\"431\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\"\\u003ereligious code, honor/shame\\u003c/text\\u003e\\n\\n        \\u003crect x=\\\"565\\\" y=\\\"455\\\" width=\\\"175\\\" height=\\\"42\\\" class=\\\"box\\\" fill=\\\"#13141a\\\" stroke=\\\"rgba(0,163,191,0.35)\\\" /\\u003e\\n        \\u003ctext x=\\\"652\\\" y=\\\"475\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#00a3bf\\\"\\u003eFactuality Scorer\\u003c/text\\u003e\\n        \\u003ctext x=\\\"652\\\" y=\\\"488\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\"\\u003eclaims vs verified ground truth\\u003c/text\\u003e\\n      \\u003c/g\\u003e\\n\\n      \\u003c!-- Tier 5: Knowledge Store --\\u003e\\n      \\u003cg id=\\\"tier5\\\"\\u003e\\n        \\u003crect x=\\\"805\\\" y=\\\"145\\\" width=\\\"170\\\" height=\\\"52\\\" class=\\\"box\\\" fill=\\\"#13141a\\\" stroke=\\\"rgba(255,255,255,0.08)\\\" /\\u003e\\n        \\u003ctext x=\\\"890\\\" y=\\\"168\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#e8e8ed\\\"\\u003eCampaign Knowledge Graph\\u003c/text\\u003e\\n        \\u003ctext x=\\\"890\\\" y=\\\"183\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\"\\u003eNeo4j — actors, narratives, channels\\u003c/text\\u003e\\n\\n        \\u003crect x=\\\"805\\\" y=\\\"220\\\" width=\\\"170\\\" height=\\\"52\\\" class=\\\"box\\\" fill=\\\"#13141a\\\" stroke=\\\"rgba(255,255,255,0.08)\\\" /\\u003e\\n        \\u003ctext x=\\\"890\\\" y=\\\"243\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#e8e8ed\\\"\\u003eEvidence Vault\\u003c/text\\u003e\\n        \\u003ctext x=\\\"890\\\" y=\\\"258\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\"\\u003eimmutable, chain-of-custody\\u003c/text\\u003e\\n\\n        \\u003crect x=\\\"805\\\" y=\\\"295\\\" width=\\\"170\\\" height=\\\"52\\\" class=\\\"box\\\" fill=\\\"#13141a\\\" stroke=\\\"rgba(255,255,255,0.08)\\\" /\\u003e\\n        \\u003ctext x=\\\"890\\\" y=\\\"318\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#e8e8ed\\\"\\u003eFingerprint Database\\u003c/text\\u003e\\n        \\u003ctext x=\\\"890\\\" y=\\\"333\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\"\\u003eknown campaign signatures\\u003c/text\\u003e\\n      \\u003c/g\\u003e\\n\\n      \\u003c!-- Tier 6: Production --\\u003e\\n      \\u003cg id=\\\"tier6\\\"\\u003e\\n        \\u003crect x=\\\"985\\\" y=\\\"145\\\" width=\\\"175\\\" height=\\\"42\\\" class=\\\"box\\\" fill=\\\"#13141a\\\" stroke=\\\"rgba(255,255,255,0.08)\\\" /\\u003e\\n        \\u003ctext x=\\\"1072\\\" y=\\\"165\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#e8e8ed\\\"\\u003eReal-time Threat Dashboard\\u003c/text\\u003e\\n        \\u003ctext x=\\\"1072\\\" y=\\\"178\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\"\\u003elive campaign topology\\u003c/text\\u003e\\n\\n        \\u003crect x=\\\"985\\\" y=\\\"205\\\" width=\\\"175\\\" height=\\\"52\\\" class=\\\"box\\\" fill=\\\"#13141a\\\" stroke=\\\"rgba(255,255,255,0.08)\\\" /\\u003e\\n        \\u003ctext x=\\\"1072\\\" y=\\\"225\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#e8e8ed\\\"\\u003eAutomated Intelligence Reports\\u003c/text\\u003e\\n        \\u003ctext x=\\\"1072\\\" y=\\\"240\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\"\\u003eSTIX 2.1 / MISP format\\u003c/text\\u003e\\n\\n        \\u003crect x=\\\"985\\\" y=\\\"280\\\" width=\\\"175\\\" height=\\\"42\\\" class=\\\"box\\\" fill=\\\"#13141a\\\" stroke=\\\"rgba(255,255,255,0.08)\\\" /\\u003e\\n        \\u003ctext x=\\\"1072\\\" y=\\\"300\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#e8e8ed\\\"\\u003eCounter-Narrative Generator\\u003c/text\\u003e\\n        \\u003ctext x=\\\"1072\\\" y=\\\"313\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\"\\u003eaudience-tailored rebuttals\\u003c/text\\u003e\\n\\n        \\u003crect x=\\\"985\\\" y=\\\"345\\\" width=\\\"175\\\" height=\\\"42\\\" class=\\\"box\\\" fill=\\\"#13141a\\\" stroke=\\\"rgba(255,255,255,0.08)\\\" /\\u003e\\n        \\u003ctext x=\\\"1072\\\" y=\\\"365\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#e8e8ed\\\"\\u003eEarly Warning Alert System\\u003c/text\\u003e\\n        \\u003ctext x=\\\"1072\\\" y=\\\"378\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\"\\u003ethreshold-based + anomaly\\u003c/text\\u003e\\n      \\u003c/g\\u003e\\n\\n      \\u003c!-- Tier 7: Delivery (accent) --\\u003e\\n      \\u003cg id=\\\"tier7\\\"\\u003e\\n        \\u003crect x=\\\"985\\\" y=\\\"675\\\" width=\\\"175\\\" height=\\\"42\\\" class=\\\"box\\\" fill=\\\"#13141a\\\" stroke=\\\"rgba(0,163,191,0.35)\\\" /\\u003e\\n        \\u003ctext x=\\\"1072\\\" y=\\\"695\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#00a3bf\\\"\\u003eGovernment Secure Portal\\u003c/text\\u003e\\n        \\u003ctext x=\\\"1072\\\" y=\\\"708\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\"\\u003emTLS + SSO (SAML/OIDC)\\u003c/text\\u003e\\n\\n        \\u003crect x=\\\"985\\\" y=\\\"735\\\" width=\\\"175\\\" height=\\\"42\\\" class=\\\"box\\\" fill=\\\"#13141a\\\" stroke=\\\"rgba(0,163,191,0.35)\\\" /\\u003e\\n        \\u003ctext x=\\\"1072\\\" y=\\\"755\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#00a3bf\\\"\\u003eREST API for Platform Integration\\u003c/text\\u003e\\n        \\u003ctext x=\\\"1072\\\" y=\\\"768\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\"\\u003erate-limited, scoped keys\\u003c/text\\u003e\\n\\n        \\u003crect x=\\\"985\\\" y=\\\"795\\\" width=\\\"175\\\" height=\\\"42\\\" class=\\\"box\\\" fill=\\\"#13141a\\\" stroke=\\\"rgba(0,163,191,0.35)\\\" /\\u003e\\n        \\u003ctext x=\\\"1072\\\" y=\\\"815\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#00a3bf\\\"\\u003eAir-Gapped Classified Variant\\u003c/text\\u003e\\n        \\u003ctext x=\\\"1072\\\" y=\\\"828\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\"\\u003eoffline LLM + T5-tier hardware\\u003c/text\\u003e\\n      \\u003c/g\\u003e\\n\\n      \\u003c!-- Data flow arrows --\\u003e\\n      \\u003c!-- Tier 1 -\\u003e Tier 2 --\\u003e\\n      \\u003cg stroke=\\\"#b47d1b\\\" stroke-width=\\\"1.5\\\" marker-end=\\\"url(#arrow-amber)\\\" opacity=\\\"0.7\\\"\\u003e\\n        \\u003cline x1=\\\"200\\\" y1=\\\"163\\\" x2=\\\"250\\\" y2=\\\"183\\\" /\\u003e\\n        \\u003cline x1=\\\"200\\\" y1=\\\"213\\\" x2=\\\"250\\\" y2=\\\"233\\\" /\\u003e\\n        \\u003cline x1=\\\"200\\\" y1=\\\"263\\\" x2=\\\"250\\\" y2=\\\"253\\\" /\\u003e\\n        \\u003cline x1=\\\"200\\\" y1=\\\"313\\\" x2=\\\"250\\\" y2=\\\"313\\\" /\\u003e\\n        \\u003cline x1=\\\"200\\\" y1=\\\"363\\\" x2=\\\"250\\\" y2=\\\"343\\\" /\\u003e\\n        \\u003cline x1=\\\"200\\\" y1=\\\"413\\\" x2=\\\"250\\\" y2=\\\"393\\\" /\\u003e\\n      \\u003c/g\\u003e\\n\\n      \\u003c!-- Tier 2 -\\u003e Kafka --\\u003e\\n      \\u003cg stroke=\\\"#b47d1b\\\" stroke-width=\\\"1.5\\\" marker-end=\\\"url(#arrow-amber)\\\" opacity=\\\"0.7\\\"\\u003e\\n        \\u003cline x1=\\\"410\\\" y1=\\\"183\\\" x2=\\\"450\\\" y2=\\\"200\\\" /\\u003e\\n        \\u003cline x1=\\\"410\\\" y1=\\\"253\\\" x2=\\\"450\\\" y2=\\\"270\\\" /\\u003e\\n        \\u003cline x1=\\\"410\\\" y1=\\\"323\\\" x2=\\\"450\\\" y2=\\\"340\\\" /\\u003e\\n        \\u003cline x1=\\\"410\\\" y1=\\\"393\\\" x2=\\\"450\\\" y2=\\\"410\\\" /\\u003e\\n      \\u003c/g\\u003e\\n\\n      \\u003c!-- Kafka -\\u003e Tier 4 --\\u003e\\n      \\u003cg stroke=\\\"#b47d1b\\\" stroke-width=\\\"1.5\\\" marker-end=\\\"url(#arrow-amber)\\\" opacity=\\\"0.7\\\"\\u003e\\n        \\u003cline x1=\\\"510\\\" y1=\\\"180\\\" x2=\\\"565\\\" y2=\\\"166\\\" /\\u003e\\n        \\u003cline x1=\\\"510\\\" y1=\\\"240\\\" x2=\\\"565\\\" y2=\\\"226\\\" /\\u003e\\n        \\u003cline x1=\\\"510\\\" y1=\\\"300\\\" x2=\\\"565\\\" y2=\\\"286\\\" /\\u003e\\n        \\u003cline x1=\\\"510\\\" y1=\\\"360\\\" x2=\\\"565\\\" y2=\\\"346\\\" /\\u003e\\n        \\u003cline x1=\\\"510\\\" y1=\\\"420\\\" x2=\\\"565\\\" y2=\\\"411\\\" /\\u003e\\n        \\u003cline x1=\\\"510\\\" y1=\\\"480\\\" x2=\\\"565\\\" y2=\\\"466\\\" /\\u003e\\n      \\u003c/g\\u003e\\n\\n      \\u003c!-- Tier 4 -\\u003e Tier 5 --\\u003e\\n      \\u003cg stroke=\\\"#00a3bf\\\" stroke-width=\\\"1.5\\\" marker-end=\\\"url(#arrow-accent)\\\" opacity=\\\"0.6\\\"\\u003e\\n        \\u003cline x1=\\\"740\\\" y1=\\\"166\\\" x2=\\\"805\\\" y2=\\\"171\\\" /\\u003e\\n        \\u003cline x1=\\\"740\\\" y1=\\\"226\\\" x2=\\\"805\\\" y2=\\\"246\\\" /\\u003e\\n        \\u003cline x1=\\\"740\\\" y1=\\\"286\\\" x2=\\\"805\\\" y2=\\\"321\\\" /\\u003e\\n        \\u003cline x1=\\\"740\\\" y1=\\\"411\\\" x2=\\\"805\\\" y2=\\\"296\\\" /\\u003e\\n        \\u003cline x1=\\\"740\\\" y1=\\\"476\\\" x2=\\\"805\\\" y2=\\\"331\\\" /\\u003e\\n      \\u003c/g\\u003e\\n\\n      \\u003c!-- Tier 5 -\\u003e Tier 6 --\\u003e\\n      \\u003cg stroke=\\\"#00a3bf\\\" stroke-width=\\\"1.5\\\" marker-end=\\\"url(#arrow-accent)\\\" opacity=\\\"0.6\\\"\\u003e\\n        \\u003cline x1=\\\"975\\\" y1=\\\"171\\\" x2=\\\"985\\\" y2=\\\"166\\\" /\\u003e\\n        \\u003cline x1=\\\"975\\\" y1=\\\"246\\\" x2=\\\"985\\\" y2=\\\"231\\\" /\\u003e\\n        \\u003cline x1=\\\"975\\\" y1=\\\"321\\\" x2=\\\"985\\\" y2=\\\"301\\\" /\\u003e\\n        \\u003cline x1=\\\"975\\\" y1=\\\"321\\\" x2=\\\"985\\\" y2=\\\"366\\\" /\\u003e\\n      \\u003c/g\\u003e\\n\\n      \\u003c!-- Tier 6 -\\u003e Tier 7 (dashed auth-flow) --\\u003e\\n      \\u003cg stroke=\\\"#00a3bf\\\" stroke-width=\\\"1.5\\\" stroke-dasharray=\\\"6,4\\\" marker-end=\\\"url(#arrow-accent)\\\" opacity=\\\"0.7\\\"\\u003e\\n        \\u003cline x1=\\\"1072\\\" y1=\\\"505\\\" x2=\\\"1072\\\" y2=\\\"675\\\" /\\u003e\\n      \\u003c/g\\u003e\\n      \\u003ctext x=\\\"1095\\\" y=\\\"600\\\" font-family=\\\"'Inter', sans-serif\\\" font-size=\\\"9\\\" fill=\\\"#00a3bf\\\" transform=\\\"rotate(90,1095,600)\\\" letter-spacing=\\\"0.05em\\\"\\u003esecure channel\\u003c/text\\u003e\\n\\n      \\u003c!-- Feedback loop: Knowledge Store -\\u003e AI Pipeline --\\u003e\\n      \\u003cpath d=\\\"M 805 380 Q 740 420 740 350\\\" fill=\\\"none\\\" stroke=\\\"#00a3bf\\\" stroke-width=\\\"1.5\\\" stroke-dasharray=\\\"4,4\\\" marker-end=\\\"url(#arrow-accent)\\\" opacity=\\\"0.5\\\" /\\u003e\\n      \\u003ctext x=\\\"770\\\" y=\\\"410\\\" font-family=\\\"'Inter', sans-serif\\\" font-size=\\\"8\\\" fill=\\\"#00a3bf\\\"\\u003efingerprints\\u003c/text\\u003e\\n\\n      \\u003c!-- Legend (bottom-right) --\\u003e\\n      \\u003cg transform=\\\"translate(1080, 520)\\\"\\u003e\\n        \\u003crect x=\\\"0\\\" y=\\\"0\\\" width=\\\"190\\\" height=\\\"110\\\" rx=\\\"2\\\" fill=\\\"#13141a\\\" stroke=\\\"rgba(255,255,255,0.08)\\\" /\\u003e\\n        \\u003ctext x=\\\"10\\\" y=\\\"18\\\" font-family=\\\"'Inter', sans-serif\\\" font-size=\\\"10\\\" font-weight=\\\"600\\\" fill=\\\"#e8e8ed\\\" letter-spacing=\\\"0.04em\\\"\\u003eLEGEND\\u003c/text\\u003e\\n\\n        \\u003crect x=\\\"10\\\" y=\\\"28\\\" width=\\\"10\\\" height=\\\"10\\\" rx=\\\"1\\\" fill=\\\"#13141a\\\" stroke=\\\"rgba(255,255,255,0.12)\\\" /\\u003e\\n        \\u003ctext x=\\\"26\\\" y=\\\"37\\\" font-family=\\\"'Inter', sans-serif\\\" font-size=\\\"8\\\" fill=\\\"#8a8b99\\\"\\u003eExternal Data Sources\\u003c/text\\u003e\\n\\n        \\u003crect x=\\\"10\\\" y=\\\"44\\\" width=\\\"10\\\" height=\\\"10\\\" rx=\\\"1\\\" fill=\\\"rgba(180,125,27,0.2)\\\" stroke=\\\"#b47d1b\\\" /\\u003e\\n        \\u003ctext x=\\\"26\\\" y=\\\"53\\\" font-family=\\\"'Inter', sans-serif\\\" font-size=\\\"8\\\" fill=\\\"#8a8b99\\\"\\u003eCollection / Ingestion\\u003c/text\\u003e\\n\\n        \\u003crect x=\\\"10\\\" y=\\\"60\\\" width=\\\"10\\\" height=\\\"10\\\" rx=\\\"1\\\" fill=\\\"rgba(0,163,191,0.15)\\\" stroke=\\\"#00a3bf\\\" /\\u003e\\n        \\u003ctext x=\\\"26\\\" y=\\\"69\\\" font-family=\\\"'Inter', sans-serif\\\" font-size=\\\"8\\\" fill=\\\"#8a8b99\\\"\\u003eAI / ML Processing\\u003c/text\\u003e\\n\\n        \\u003crect x=\\\"100\\\" y=\\\"28\\\" width=\\\"10\\\" height=\\\"10\\\" rx=\\\"1\\\" fill=\\\"#13141a\\\" stroke=\\\"rgba(255,255,255,0.12)\\\" /\\u003e\\n        \\u003ctext x=\\\"116\\\" y=\\\"37\\\" font-family=\\\"'Inter', sans-serif\\\" font-size=\\\"8\\\" fill=\\\"#8a8b99\\\"\\u003eKnowledge Store\\u003c/text\\u003e\\n\\n        \\u003crect x=\\\"100\\\" y=\\\"44\\\" width=\\\"10\\\" height=\\\"10\\\" rx=\\\"1\\\" fill=\\\"#13141a\\\" stroke=\\\"rgba(255,255,255,0.12)\\\" /\\u003e\\n        \\u003ctext x=\\\"116\\\" y=\\\"53\\\" font-family=\\\"'Inter', sans-serif\\\" font-size=\\\"8\\\" fill=\\\"#8a8b99\\\"\\u003eProduction\\u003c/text\\u003e\\n\\n        \\u003crect x=\\\"100\\\" y=\\\"60\\\" width=\\\"10\\\" height=\\\"10\\\" rx=\\\"1\\\" fill=\\\"rgba(0,163,191,0.15)\\\" stroke=\\\"#00a3bf\\\" /\\u003e\\n        \\u003ctext x=\\\"116\\\" y=\\\"69\\\" font-family=\\\"'Inter', sans-serif\\\" font-size=\\\"8\\\" fill=\\\"#8a8b99\\\"\\u003eDelivery / API\\u003c/text\\u003e\\n\\n        \\u003crect x=\\\"10\\\" y=\\\"76\\\" width=\\\"10\\\" height=\\\"10\\\" rx=\\\"1\\\" fill=\\\"rgba(168,70,70,0.12)\\\" stroke=\\\"#a84646\\\" /\\u003e\\n        \\u003ctext x=\\\"26\\\" y=\\\"85\\\" font-family=\\\"'Inter', sans-serif\\\" font-size=\\\"8\\\" fill=\\\"#8a8b99\\\"\\u003eClassified Boundary\\u003c/text\\u003e\\n\\n        \\u003cline x1=\\\"10\\\" y1=\\\"96\\\" x2=\\\"30\\\" y2=\\\"96\\\" stroke=\\\"#00a3bf\\\" stroke-width=\\\"1.5\\\" stroke-dasharray=\\\"4,3\\\" /\\u003e\\n        \\u003ctext x=\\\"36\\\" y=\\\"100\\\" font-family=\\\"'Inter', sans-serif\\\" font-size=\\\"8\\\" fill=\\\"#8a8b99\\\"\\u003eauth flow\\u003c/text\\u003e\\n      \\u003c/g\\u003e\\n\\n      \\u003c!-- Info cards below diagram --\\u003e\\n      \\u003cg transform=\\\"translate(40, 760)\\\"\\u003e\\n        \\u003crect x=\\\"0\\\" y=\\\"0\\\" width=\\\"390\\\" height=\\\"110\\\" rx=\\\"2\\\" fill=\\\"#13141a\\\" stroke=\\\"rgba(255,255,255,0.08)\\\" /\\u003e\\n        \\u003ctext x=\\\"15\\\" y=\\\"22\\\" font-family=\\\"'Inter', sans-serif\\\" font-size=\\\"11\\\" font-weight=\\\"600\\\" fill=\\\"#e8e8ed\\\" letter-spacing=\\\"0.03em\\\"\\u003eDetection Pipeline\\u003c/text\\u003e\\n        \\u003ctext x=\\\"15\\\" y=\\\"42\\\" font-family=\\\"'Inter', sans-serif\\\" font-size=\\\"8\\\" fill=\\\"#8a8b99\\\"\\u003e\\n          \\u003ctspan x=\\\"15\\\" dy=\\\"0\\\"\\u003eRaw content is normalized, transcribed, and language-\\u003c/tspan\\u003e\\n          \\u003ctspan x=\\\"15\\\" dy=\\\"14\\\"\\u003etagged. Burst detection identifies coordinated posting;\\u003c/tspan\\u003e\\n          \\u003ctspan x=\\\"15\\\" dy=\\\"14\\\"\\u003eLLMs extract narratives and score factuality against\\u003c/tspan\\u003e\\n          \\u003ctspan x=\\\"15\\\" dy=\\\"14\\\"\\u003eground-truth databases. Anomaly alerts fire within 90s.\\u003c/tspan\\u003e\\n        \\u003c/text\\u003e\\n\\n        \\u003crect x=\\\"420\\\" y=\\\"0\\\" width=\\\"390\\\" height=\\\"110\\\" rx=\\\"2\\\" fill=\\\"#13141a\\\" stroke=\\\"rgba(255,255,255,0.08)\\\" /\\u003e\\n        \\u003ctext x=\\\"435\\\" y=\\\"22\\\" font-family=\\\"'Inter', sans-serif\\\" font-size=\\\"11\\\" font-weight=\\\"600\\\" fill=\\\"#e8e8ed\\\" letter-spacing=\\\"0.03em\\\"\\u003eAttribution Methodology\\u003c/text\\u003e\\n        \\u003ctext x=\\\"435\\\" y=\\\"42\\\" font-family=\\\"'Inter', sans-serif\\\" font-size=\\\"8\\\" fill=\\\"#8a8b99\\\"\\u003e\\n          \\u003ctspan x=\\\"435\\\" dy=\\\"0\\\"\\u003eLinguistic forensics + TTP fingerprints + infrastructure\\u003c/tspan\\u003e\\n          \\u003ctspan x=\\\"435\\\" dy=\\\"14\\\"\\u003eoverlap build an evidence chain. The Cross-Cultural\\u003c/tspan\\u003e\\n          \\u003ctspan x=\\\"435\\\" dy=\\\"14\\\"\\u003eContext Model flags native-speaker markers that Western\\u003c/tspan\\u003e\\n          \\u003ctspan x=\\\"435\\\" dy=\\\"14\\\"\\u003etools miss. Confidence scores are expressed per STIX 2.1.\\u003c/tspan\\u003e\\n        \\u003c/text\\u003e\\n\\n        \\u003crect x=\\\"840\\\" y=\\\"0\\\" width=\\\"320\\\" height=\\\"110\\\" rx=\\\"2\\\" fill=\\\"#13141a\\\" stroke=\\\"rgba(255,255,255,0.08)\\\" /\\u003e\\n        \\u003ctext x=\\\"855\\\" y=\\\"22\\\" font-family=\\\"'Inter', sans-serif\\\" font-size=\\\"11\\\" font-weight=\\\"600\\\" fill=\\\"#e8e8ed\\\" letter-spacing=\\\"0.03em\\\"\\u003eDeployment Models\\u003c/text\\u003e\\n        \\u003ctext x=\\\"855\\\" y=\\\"42\\\" font-family=\\\"'Inter', sans-serif\\\" font-size=\\\"8\\\" fill=\\\"#8a8b99\\\"\\u003e\\n          \\u003ctspan x=\\\"855\\\" dy=\\\"0\\\"\\u003e1. SaaS (EU-hosted, GDPR)\\u003c/tspan\\u003e\\n          \\u003ctspan x=\\\"855\\\" dy=\\\"14\\\"\\u003e2. On-premise government stack\\u003c/tspan\\u003e\\n          \\u003ctspan x=\\\"855\\\" dy=\\\"14\\\"\\u003e3. Air-gapped classified variant\\u003c/tspan\\u003e\\n          \\u003ctspan x=\\\"855\\\" dy=\\\"14\\\"\\u003eAll models export STIX/MISP and REST.\\u003c/tspan\\u003e\\n        \\u003c/text\\u003e\\n      \\u003c/g\\u003e\\n\\n      \\u003c!-- Footer / identifiers --\\u003e\\n      \\u003ctext x=\\\"1240\\\" y=\\\"745\\\" font-family=\\\"'Inter', sans-serif\\\" font-size=\\\"8\\\" fill=\\\"#4a4b55\\\" text-anchor=\\\"end\\\" letter-spacing=\\\"0.04em\\\"\\u003eVERITAS ARCH v1.0\\u003c/text\\u003e\\n    \\u003c/svg\\u003e\\n      \\u003c/div\\u003e\\n      \\u003ch3\\u003eComponent Breakdown\\u003c/h3\\u003e\\n      \\u003ctable\\u003e\\n        \\u003ctr\\u003e\\u003cth\\u003eTier\\u003c/th\\u003e\\u003cth\\u003eComponent\\u003c/th\\u003e\\u003cth\\u003eTechnology\\u003c/th\\u003e\\u003cth\\u003ePurpose\\u003c/th\\u003e\\u003c/tr\\u003e\\n        \\u003ctr\\u003e\\u003ctd\\u003eSources\\u003c/td\\u003e\\u003ctd\\u003eTelegram, X, TikTok, YouTube, News Wires, Dark Web\\u003c/td\\u003e\\u003ctd\\u003eMTProto, X API v2, scraping mesh, RSS/API, Tor/onion\\u003c/td\\u003e\\u003ctd\\u003eSignal acquisition\\u003c/td\\u003e\\u003c/tr\\u003e\\n        \\u003ctr\\u003e\\u003ctd\\u003eCollection\\u003c/td\\u003e\\u003ctd\\u003eIngestion Engine, Stream Processor, Transcriber, Normalizer\\u003c/td\\u003e\\u003ctd\\u003ePython/FastAPI, Apache Flink, OpenAI Whisper, Tesseract, fastText/CLD3\\u003c/td\\u003e\\u003ctd\\u003eNormalize and enrich raw content\\u003c/td\\u003e\\u003c/tr\\u003e\\n        \\u003ctr\\u003e\\u003ctd\\u003eBus\\u003c/td\\u003e\\u003ctd\\u003eApache Kafka Event Mesh\\u003c/td\\u003e\\u003ctd\\u003eKafka + Kafka Streams\\u003c/td\\u003e\\u003ctd\\u003eDurable, ordered, replayable event routing\\u003c/td\\u003e\\u003c/tr\\u003e\\n        \\u003ctr\\u003e\\u003ctd\\u003eAI Pipeline\\u003c/td\\u003e\\u003ctd\\u003eNarrative LLM, Bot Detector, Attribution Engine, Forensic Analyzer, Context Model, Factuality Scorer\\u003c/td\\u003e\\u003ctd\\u003eMixtral 8x22B / LLaMA-3 70B fine-tunes, scikit-learn/xgboost, Neo4j GDS, custom embeddings\\u003c/td\\u003e\\u003ctd\\u003eIntelligence extraction\\u003c/td\\u003e\\u003c/tr\\u003e\\n        \\u003ctr\\u003e\\u003ctd\\u003eKnowledge\\u003c/td\\u003e\\u003ctd\\u003eCampaign KG, Evidence Vault, Fingerprint DB\\u003c/td\\u003e\\u003ctd\\u003eNeo4j, immudb/Amazon QLDB, PostgreSQL\\u003c/td\\u003e\\u003ctd\\u003ePersistent, queryable, auditable memory\\u003c/td\\u003e\\u003c/tr\\u003e\\n        \\u003ctr\\u003e\\u003ctd\\u003eProduction\\u003c/td\\u003e\\u003ctd\\u003eDashboard, Reports, Counter-Narrative, Alerts\\u003c/td\\u003e\\u003ctd\\u003eReact/TypeScript, Python, STIX2 lib, MISP\\u003c/td\\u003e\\u003ctd\\u003eActionable outputs\\u003c/td\\u003e\\u003c/tr\\u003e\\n        \\u003ctr\\u003e\\u003ctd\\u003eDelivery\\u003c/td\\u003e\\u003ctd\\u003ePortal, API, Air-Gapped Variant\\u003c/td\\u003e\\u003ctd\\u003eFastAPI, Keycloak/Authentik, Offline LLM on classified hardware\\u003c/td\\u003e\\u003ctd\\u003eSecure access\\u003c/td\\u003e\\u003c/tr\\u003e\\n      \\u003c/table\\u003e\\n      \\u003cdiv class=\\\"card\\\"\\u003e\\n        \\u003ch3\\u003eWhy Kafka over RabbitMQ?\\u003c/h3\\u003e\\n        \\u003cp\\u003eVERITAS is a \\u003cstrong\\u003elog-centric system\\u003c/strong\\u003e, not a job queue. Kafka provides the high throughput needed for tens of thousands of posts per minute, long-term replay for investigations, per-channel partition ordering for temporal coordination detection, and independent consumers that do not block each other. RabbitMQ is excellent for complex task routing but less suitable for log retention, high fan-out replay, and backpressure during burst events.\\u003c/p\\u003e\\n      \\u003c/div\\u003e\\n      \\u003cdiv class=\\\"card\\\"\\u003e\\n        \\u003ch3\\u003eWhy Neo4j over PostgreSQL for the Graph?\\u003c/h3\\u003e\\n        \\u003cp\\u003eThe core intelligence object in VERITAS is a \\u003cstrong\\u003ecampaign graph\\u003c/strong\\u003e: actors post through channels, channels amplify narratives, narratives share media hashes, and infrastructure overlaps across campaigns. Native graph queries — “Find all channels that posted the same synthetic image within 30 minutes” or “What is the shortest path from this proxy channel to a known state actor TTP?” — are expensive in relational databases. Neo4j GDS provides performant community detection, similarity scoring, and pattern matching. PostgreSQL remains for structured evidence metadata and tenant management.\\u003c/p\\u003e\\n      \\u003c/div\\u003e\\n      \\u003cdiv class=\\\"card\\\"\\u003e\\n        \\u003ch3\\u003eLLM Choices for Multi-Language\\u003c/h3\\u003e\\n        \\u003cul\\u003e\\n          \\u003cli\\u003e\\u003cstrong\\u003eBase model:\\u003c/strong\\u003e Mixtral 8x22B or LLaMA-3 70B fine-tuned on multilingual disinformation datasets (German, Turkish, Arabic, English, Kurdish, Russian).\\u003c/li\\u003e\\n          \\u003cli\\u003e\\u003cstrong\\u003eReasoning / attribution:\\u003c/strong\\u003e Smaller fine-tuned models (13B–34B) where latency matters, such as bot coordination and first-pass classification.\\u003c/li\\u003e\\n          \\u003cli\\u003e\\u003cstrong\\u003eEmbedding model:\\u003c/strong\\u003e Multilingual E5 or a domain-tuned contrastive model for semantic search across languages and dialects.\\u003c/li\\u003e\\n          \\u003cli\\u003e\\u003cstrong\\u003eWhisper:\\u003c/strong\\u003e Audio/video transcription across Arabic, Turkish, Kurdish, and Russian.\\u003c/li\\u003e\\n        \\u003c/ul\\u003e\\n        \\u003cp\\u003eThe Cross-Cultural Context Model is separately trained/fine-tuned on native-speaker annotations, operating as a gating classifier and explanation generator alongside the main LLM.\\u003c/p\\u003e\\n      \\u003c/div\\u003e\\n    \\u003c/section\\u003e\\n\\n    \\u003csection id=\\\"ai-pipeline\\\"\\u003e\\n      \\u003ch2 data-num=\\\"04\\\"\\u003eAI/ML Pipeline Deep-Dive\\u003c/h2\\u003e\\n      \\u003cp class=\\\"lead\\\"\\u003eFine-tuned multilingual models, forensic linguistics, and probabilistic attribution scoring.\\u003c/p\\u003e\\n\\n      \\u003cdiv class=\\\"card\\\"\\u003e\\n        \\u003ch3\\u003eNarrative Extraction LLM\\u003c/h3\\u003e\\n        \\u003cp\\u003eThe Narrative Extraction LLM transforms a cluster of related posts into a structured narrative object. It is fine-tuned on labeled influence-operation narratives, with special attention to claim decontextualization — taking a real photo or event and assigning a false narrative wrapper.\\u003c/p\\u003e\\n        \\u003cpre\\u003e\\u003ccode\\u003e{\\n  \\\"narrative_id\\\": \\\"narr_2026_0612_a\\\",\\n  \\\"headline\\\": \\\"NATO-supplied weapons used against civilians in Donbas\\\",\\n  \\\"claims\\\": [...],\\n  \\\"target_audience\\\": [\\\"DE far-left\\\", \\\"TR nationalist\\\"],\\n  \\\"emotional_frames\\\": [\\\"outrage\\\", \\\"betrayal\\\"],\\n  \\\"source_languages\\\": [\\\"de\\\", \\\"tr\\\"],\\n  \\\"confidence\\\": 0.87\\n}\\u003c/code\\u003e\\u003c/pre\\u003e\\n      \\u003c/div\\u003e\\n\\n      \\u003cdiv class=\\\"card\\\"\\u003e\\n        \\u003ch3\\u003eBot Coordination Detector\\u003c/h3\\u003e\\n        \\u003cp\\u003eCoordination is detected by combining three signals:\\u003c/p\\u003e\\n        \\u003col\\u003e\\n          \\u003cli\\u003e\\u003cstrong\\u003eTemporal burst:\\u003c/strong\\u003e A set of accounts/channels posts semantically similar content within a short window, measured via inter-post time distribution and a Poisson burst test.\\u003c/li\\u003e\\n          \\u003cli\\u003e\\u003cstrong\\u003eGraph clustering:\\u003c/strong\\u003e Accounts that repeatedly co-amplify the same URLs, hashtags, or media hashes within a sliding window form a coordination graph; Leiden community detection partitions it.\\u003c/li\\u003e\\n          \\u003cli\\u003e\\u003cstrong\\u003eContent similarity:\\u003c/strong\\u003e Multilingual embeddings cluster near-duplicate or template-variant content, even when translated or paraphrased.\\u003c/li\\u003e\\n        \\u003c/ol\\u003e\\n        \\u003cpre\\u003e\\u003ccode\\u003eS_coord = α · burst_score + β · graph_density + γ · content_similarity + δ · temporal_entropy_penalty\\n\\nTypical threshold for analyst review: S_coord \\u003e 0.75\\u003c/code\\u003e\\u003c/pre\\u003e\\n      \\u003c/div\\u003e\\n\\n      \\u003cdiv class=\\\"card\\\"\\u003e\\n        \\u003ch3\\u003eAttribution Methodology\\u003c/h3\\u003e\\n        \\u003cp\\u003eAttribution is probabilistic and evidence-based, not deterministic. The State Actor Attribution Engine evaluates:\\u003c/p\\u003e\\n        \\u003cul\\u003e\\n          \\u003cli\\u003e\\u003cstrong\\u003eTTP match:\\u003c/strong\\u003e Posting schedule, URL shortener pattern, media production style, or channel-naming convention vs. known fingerprints.\\u003c/li\\u003e\\n          \\u003cli\\u003e\\u003cstrong\\u003eInfrastructure overlap:\\u003c/strong\\u003e Shared phone-number prefixes, email domains, wallet addresses, hosting ASNs, or proxy channel admin patterns.\\u003c/li\\u003e\\n          \\u003cli\\u003e\\u003cstrong\\u003eLinguistic forensics:\\u003c/strong\\u003e Idiolect, syntactic preferences, translation artifacts, and calque patterns suggest origin language or translation chain.\\u003c/li\\u003e\\n          \\u003cli\\u003e\\u003cstrong\\u003eGeopolitical intent mapping:\\u003c/strong\\u003e Does the narrative serve a known adversarial strategic objective?\\u003c/li\\u003e\\n        \\u003c/ul\\u003e\\n        \\u003cp\\u003eOutput is a structured STIX 2.1 Threat Actor object with a confidence score, alternative hypotheses, and an evidence list.\\u003c/p\\u003e\\n      \\u003c/div\\u003e\\n\\n      \\u003cdiv class=\\\"card\\\"\\u003e\\n        \\u003ch3\\u003eFactuality Scorer\\u003c/h3\\u003e\\n        \\u003cp\\u003eClaims extracted by the Narrative LLM are matched against verified ground-truth databases (fact-checkers, government sources, trusted wire services), previously adjudicated claims in the Evidence Vault, and multimedia provenance (reverse image search, video keyframe matching, metadata forensics). Output is a score from 0 (fabricated) to 1 (verified), plus conflicting sources and an uncertainty flag when ground truth is unavailable.\\u003c/p\\u003e\\n      \\u003c/div\\u003e\\n    \\u003c/section\\u003e\\n\\n    \\u003csection id=\\\"context-model\\\" class=\\\"card wedge\\\"\\u003e\\n      \\u003ch2 data-num=\\\"05\\\"\\u003eCross-Cultural Context Model\\u003c/h2\\u003e\\n      \\u003cp class=\\\"lead\\\"\\u003eThis is VERITAS's primary technical wedge. Western tools fail on Turkish/Islamosphere content because they lack a cultural-semantic layer.\\u003c/p\\u003e\\n\\n      \\u003cp\\u003eExamples where context changes meaning:\\u003c/p\\u003e\\n      \\u003cul\\u003e\\n        \\u003cli\\u003eA post discussing the \\\"martyrs of Gaza\\\" in a specific historical register may be organic solidarity, imported incitement, or a recruitment dog-whistle. The difference depends on timing, surrounding hashtags, channel history, and audience replies.\\u003c/li\\u003e\\n        \\u003cli\\u003eReferences to \\\"Srebrenica,\\\" \\\"Andalus,\\\" or \\\"the Crusades\\\" can function as coded calls to action within diaspora communities.\\u003c/li\\u003e\\n        \\u003cli\\u003eHonor/shame framing (\\\"the state humiliated our community\\\") drives virality differently than individual-rights framing common in English-language discourse.\\u003c/li\\u003e\\n        \\u003cli\\u003eRegional code words such as \\\"deep state\\\" (\\u003cem\\u003ederin devlet\\u003c/em\\u003e), \\\"parallel structure,\\\" or \\\"traitors to the nation\\\" carry different valences in Turkish political memory than literal translations suggest.\\u003c/li\\u003e\\n      \\u003c/ul\\u003e\\n\\n      \\u003ch3\\u003eTraining Data \\u0026amp; Taxonomies\\u003c/h3\\u003e\\n      \\u003cul\\u003e\\n        \\u003cli\\u003eNative-annotated datasets of Turkish, Arabic dialect, Kurdish, Persian, and Urdu disinformation.\\u003c/li\\u003e\\n        \\u003cli\\u003eHistorical grievance and religious reference lexicons with region-specific sense tags.\\u003c/li\\u003e\\n        \\u003cli\\u003eHonor/shame, kinship, and sectarian framing taxonomies.\\u003c/li\\u003e\\n        \\u003cli\\u003eTemporal context: what events are happening now that make a previously benign reference inflammatory.\\u003c/li\\u003e\\n      \\u003c/ul\\u003e\\n\\n      \\u003ch3\\u003eClassifier + Explanation Generator\\u003c/h3\\u003e\\n      \\u003cp\\u003eThe model operates as both a classifier and an explanation generator. When it flags content, it outputs a human-readable rationale — for example:\\u003c/p\\u003e\\n      \\u003cblockquote\\u003e\\n        \\\"This phrase is a known Iranian proxy framing device used after mosque attacks; combined with the hashtag cluster and 45-minute post timing, it indicates imported incitement rather than organic grief.\\\"\\n      \\u003c/blockquote\\u003e\\n      \\u003cp\\u003eThis is why VERITAS can detect campaigns that GPT-4 classifies as \\\"benign religious discussion.\\\"\\u003c/p\\u003e\\n    \\u003c/section\\u003e\\n\\n    \\u003csection id=\\\"attribution\\\"\\u003e\\n      \\u003ch2 data-num=\\\"06\\\"\\u003eAttribution Framework\\u003c/h2\\u003e\\n      \\u003cp class=\\\"lead\\\"\\u003eHow we go from \\\"this is fake\\\" to \\\"this is FSB Unit 54777 operating through proxy channels in Iran.\\\"\\u003c/p\\u003e\\n\\n      \\u003ch3\\u003eStage 1 — Campaign Detection\\u003c/h3\\u003e\\n      \\u003cp\\u003eA coordinated cluster is identified. We know a set of channels/accounts are pushing a consistent false narrative in a synchronized way.\\u003c/p\\u003e\\n\\n      \\u003ch3\\u003eStage 2 — Infrastructure Fingerprinting\\u003c/h3\\u003e\\n      \\u003cp\\u003eShared infrastructure is extracted: Telegram channel admin patterns, X account registration metadata, linked websites, URL shorteners, hosting providers, cryptocurrency donation addresses, and phone numbers exposed in channel metadata. This is compared to the Fingerprint Database.\\u003c/p\\u003e\\n\\n      \\u003ch3\\u003eStage 3 — Linguistic Origin\\u003c/h3\\u003e\\n      \\u003cp\\u003eThe Linguistic Forensic Analyzer and Cross-Cultural Context Model identify native-language markers of the \\u003cem\\u003eauthor\\u003c/em\\u003e (not the target audience), translation artifacts indicating content was produced in one language and translated into another, and cultural framing suggesting a specific origin actor (e.g., IRGC-style anti-imperialist religious framing vs. FSB-style \\\"decadent West\\\" framing).\\u003c/p\\u003e\\n\\n      \\u003ch3\\u003eStage 4 — TTP Correlation\\u003c/h3\\u003e\\n      \\u003cp\\u003eObserved tactics are matched against known actor profiles: GRU Unit 29155, FSB Center 16 / Unit 54777, Iranian IOPI / IRA, Chinese MSS proxy networks. Matches are scored across dozens of indicators.\\u003c/p\\u003e\\n\\n      \\u003ch3\\u003eStage 5 — Confidence Assessment\\u003c/h3\\u003e\\n      \\u003cpre\\u003e\\u003ccode\\u003e{\\n  \\\"attribution_id\\\": \\\"attr_2026_0612_b\\\",\\n  \\\"primary_hypothesis\\\": {\\n    \\\"actor\\\": \\\"FSB Unit 54777 proxy operation\\\",\\n    \\\"proxy_infrastructure\\\": \\\"Iran-based Telegram network\\\",\\n    \\\"confidence\\\": 0.72\\n  },\\n  \\\"alternative_hypotheses\\\": [...],\\n  \\\"evidence_chain\\\": [...],\\n  \\\"uncertainties\\\": [\\\"no direct IP/ASN overlap yet\\\", \\\"voice-over artist unidentified\\\"]\\n}\\u003c/code\\u003e\\u003c/pre\\u003e\\n      \\u003cp\\u003eAnalysts can accept, reject, or adjust hypotheses. Each decision feeds back into model training.\\u003c/p\\u003e\\n    \\u003c/section\\u003e\\n\\n    \\u003csection id=\\\"sources\\\"\\u003e\\n      \\u003ch2 data-num=\\\"07\\\"\\u003eData Sources \\u0026amp; Collection\\u003c/h2\\u003e\\n      \\u003cp class=\\\"lead\\\"\\u003eMulti-platform, multi-modal, ethically scoped collection built for European threat monitoring.\\u003c/p\\u003e\\n\\n      \\u003cdiv class=\\\"card\\\"\\u003e\\n        \\u003ch3\\u003eTelegram\\u003c/h3\\u003e\\n        \\u003cp\\u003eThe dominant platform for far-right, jihadist, state-proxy, and diaspora influence networks in Germany, Turkey, and the broader Islamosphere. Collection uses MTProto-based clients, channel monitoring via public invite links, and metadata extraction from forwarded-message chains. Private groups require lawful or consensual access; the SaaS deployment does not attempt unauthorized collection.\\u003c/p\\u003e\\n      \\u003c/div\\u003e\\n\\n      \\u003cdiv class=\\\"card\\\"\\u003e\\n        \\u003ch3\\u003eX / Twitter\\u003c/h3\\u003e\\n        \\u003cp\\u003eX API v2 provides filtered stream access and historical search, but coverage is limited by cost tiers and rate limits. VERITAS augments API data with compliant public sampling and engagement metadata. The platform remains valuable for real-time narrative seeding and journalist/policy-maker amplification.\\u003c/p\\u003e\\n      \\u003c/div\\u003e\\n\\n      \\u003cdiv class=\\\"card\\\"\\u003e\\n        \\u003ch3\\u003eTikTok\\u003c/h3\\u003e\\n        \\u003cp\\u003eIncreasingly used for short-form incitement and youth-targeting campaigns. Collection uses a rotating residential-proxy research scraping mesh, video download, Whisper transcription, and OCR on frames. Ethical and legal compliance is maintained; no unauthorized private accounts are targeted.\\u003c/p\\u003e\\n      \\u003c/div\\u003e\\n\\n      \\u003cdiv class=\\\"card\\\"\\u003e\\n        \\u003ch3\\u003eYouTube\\u003c/h3\\u003e\\n        \\u003cp\\u003eLong-form video is a laundering channel: false narratives start in Telegram/TikTok, then are legitimized via YouTube \\\"analysis\\\" videos. Collection focuses on transcripts (Whisper), comments, channel-level metadata, and recommendation-graph exploration.\\u003c/p\\u003e\\n      \\u003c/div\\u003e\\n\\n      \\u003cdiv class=\\\"card\\\"\\u003e\\n        \\u003ch3\\u003eNews Wires\\u003c/h3\\u003e\\n        \\u003cp\\u003eLicensed feeds from Reuters, AFP, and DPA serve two roles: (1) ground-truth reference for factuality scoring, and (2) early indicators of real events that adversaries will later miscontextualize.\\u003c/p\\u003e\\n      \\u003c/div\\u003e\\n\\n      \\u003cdiv class=\\\"card\\\"\\u003e\\n        \\u003ch3\\u003eDark Web / Telegram Deep\\u003c/h3\\u003e\\n        \\u003cp\\u003eOnion forums, private Telegram invite-only channels, and closed messaging groups are sources for campaign pre-seeding, synthetic-media tooling, and actor chatter. Collection is limited to lawful OSINT methods and customer-defined scopes.\\u003c/p\\u003e\\n      \\u003c/div\\u003e\\n    \\u003c/section\\u003e\\n\\n    \\u003csection id=\\\"products\\\"\\u003e\\n      \\u003ch2 data-num=\\\"08\\\"\\u003eIntelligence Products\\u003c/h2\\u003e\\n      \\u003cp class=\\\"lead\\\"\\u003eFour product lines transform raw detections into actionable government intelligence.\\u003c/p\\u003e\\n\\n      \\u003cdiv class=\\\"card\\\"\\u003e\\n        \\u003ch3\\u003eReal-Time Threat Dashboard\\u003c/h3\\u003e\\n        \\u003cp\\u003eA React-based analyst dashboard showing:\\u003c/p\\u003e\\n        \\u003cul\\u003e\\n          \\u003cli\\u003eLive campaign topology graph.\\u003c/li\\u003e\\n          \\u003cli\\u003eLanguage and platform distribution.\\u003c/li\\u003e\\n          \\u003cli\\u003eBurst velocity, reach estimates, and sentiment trajectory.\\u003c/li\\u003e\\n          \\u003cli\\u003eAttribution hypotheses ranked by confidence.\\u003c/li\\u003e\\n          \\u003cli\\u003eDrill-down to original posts, media, and evidence chain.\\u003c/li\\u003e\\n        \\u003c/ul\\u003e\\n      \\u003c/div\\u003e\\n\\n      \\u003cdiv class=\\\"card\\\"\\u003e\\n        \\u003ch3\\u003eAutomated Intelligence Reports (STIX 2.1 / MISP)\\u003c/h3\\u003e\\n        \\u003cp\\u003eMachine-readable reports for ingestion into national SOC, CERT, or fusion-center workflows. Includes STIX Threat-Actor, Campaign, Indicator, Observed-Data, and Relationship objects. MISP events are generated with Galaxy tags for disinformation/misinformation taxonomies.\\u003c/p\\u003e\\n      \\u003c/div\\u003e\\n\\n      \\u003cdiv class=\\\"card\\\"\\u003e\\n        \\u003ch3\\u003eCounter-Narrative Generator\\u003c/h3\\u003e\\n        \\u003cp\\u003eGiven a detected narrative and target audience segment, the generator produces:\\u003c/p\\u003e\\n        \\u003cul\\u003e\\n          \\u003cli\\u003eKey message points grounded in verified facts.\\u003c/li\\u003e\\n          \\u003cli\\u003ePlatform-specific format recommendations (thread, short video script, infographic).\\u003c/li\\u003e\\n          \\u003cli\\u003eLinguistic and cultural tailoring via the Cross-Cultural Context Model.\\u003c/li\\u003e\\n          \\u003cli\\u003eRisk flags (e.g., avoid amplifying the false claim directly).\\u003c/li\\u003e\\n        \\u003c/ul\\u003e\\n        \\u003cp\\u003eCounter-narratives are suggestions for government communications teams; VERITAS does not auto-publish content.\\u003c/p\\u003e\\n      \\u003c/div\\u003e\\n\\n      \\u003cdiv class=\\\"card\\\"\\u003e\\n        \\u003ch3\\u003eEarly Warning Alert System\\u003c/h3\\u003e\\n        \\u003cp\\u003eAlerts fire when:\\u003c/p\\u003e\\n        \\u003cul\\u003e\\n          \\u003cli\\u003eCoordination score exceeds a configured threshold.\\u003c/li\\u003e\\n          \\u003cli\\u003eA known campaign fingerprint reappears.\\u003c/li\\u003e\\n          \\u003cli\\u003eA narrative reaches a reach-velocity threshold (e.g., 10,000 engagements in 30 minutes in a target language).\\u003c/li\\u003e\\n          \\u003cli\\u003eFactuality score drops below 0.2 while reach is accelerating.\\u003c/li\\u003e\\n        \\u003c/ul\\u003e\\n        \\u003cp\\u003eAlerts are delivered via the portal, webhook, email, or STIX/MISP push.\\u003c/p\\u003e\\n      \\u003c/div\\u003e\\n    \\u003c/section\\u003e\\n\\n    \\u003csection id=\\\"deployment\\\"\\u003e\\n      \\u003ch2 data-num=\\\"09\\\"\\u003eDeployment Models\\u003c/h2\\u003e\\n      \\u003cp class=\\\"lead\\\"\\u003eThree sovereign deployment options matched to classification and data-sovereignty requirements.\\u003c/p\\u003e\\n\\n      \\u003cdiv class=\\\"phases\\\"\\u003e\\n        \\u003cdiv class=\\\"phase\\\"\\u003e\\n          \\u003cdiv class=\\\"num\\\"\\u003e1\\u003c/div\\u003e\\n          \\u003ch4\\u003eSaaS (EU-Hosted, GDPR-Compliant)\\u003c/h4\\u003e\\n          \\u003cp\\u003eMulti-tenant cloud deployment in EU regions. Suitable for federal ministries, EU institutions, and mid-sized agencies. Data residency, encryption at rest and in transit, role-based access, and audit logging are standard.\\u003c/p\\u003e\\n        \\u003c/div\\u003e\\n        \\u003cdiv class=\\\"phase\\\"\\u003e\\n          \\u003cdiv class=\\\"num\\\"\\u003e2\\u003c/div\\u003e\\n          \\u003ch4\\u003eOn-Premise Government Stack\\u003c/h4\\u003e\\n          \\u003cp\\u003eFull software stack deployed inside customer infrastructure or a sovereign cloud provider. Customer controls data, encryption keys, and model weights. Used by ministries requiring national data-sovereignty guarantees.\\u003c/p\\u003e\\n        \\u003c/div\\u003e\\n        \\u003cdiv class=\\\"phase\\\"\\u003e\\n          \\u003cdiv class=\\\"num\\\"\\u003e3\\u003c/div\\u003e\\n          \\u003ch4\\u003eAir-Gapped Classified Variant\\u003c/h4\\u003e\\n          \\u003cp\\u003eFor top-secret / VS-NfD environments. Runs on classified hardware with no external network connectivity. Uses offline LLM weights, local model inference, and manual data-diode ingestion. STIX/MISP export is via one-way media or approved secure transfer.\\u003c/p\\u003e\\n        \\u003c/div\\u003e\\n      \\u003c/div\\u003e\\n    \\u003c/section\\u003e\\n\\n    \\u003csection id=\\\"business\\\"\\u003e\\n      \\u003ch2 data-num=\\\"10\\\"\\u003eBusiness Model\\u003c/h2\\u003e\\n      \\u003cp class=\\\"lead\\\"\\u003eEnterprise annual contracts priced on scope and classification requirements.\\u003c/p\\u003e\\n\\n      \\u003ch3\\u003ePricing Tiers\\u003c/h3\\u003e\\n      \\u003ctable\\u003e\\n        \\u003ctr\\u003e\\u003cth\\u003eTier\\u003c/th\\u003e\\u003cth\\u003eAnnual Price\\u003c/th\\u003e\\u003cth\\u003eScope\\u003c/th\\u003e\\u003c/tr\\u003e\\n        \\u003ctr\\u003e\\u003ctd\\u003eMonitor\\u003c/td\\u003e\\u003ctd\\u003e€500K–€1M\\u003c/td\\u003e\\u003ctd\\u003e2–3 platforms, 1–2 languages, dashboard, basic alerts\\u003c/td\\u003e\\u003c/tr\\u003e\\n        \\u003ctr\\u003e\\u003ctd\\u003eAnalyze\\u003c/td\\u003e\\u003ctd\\u003e€2M–€4M\\u003c/td\\u003e\\u003ctd\\u003eAll core platforms, 5+ languages, attribution engine, STIX/MISP reports\\u003c/td\\u003e\\u003c/tr\\u003e\\n        \\u003ctr\\u003e\\u003ctd\\u003eDisrupt\\u003c/td\\u003e\\u003ctd\\u003e€6M–€10M+\\u003c/td\\u003e\\u003ctd\\u003eFull stack, counter-narrative generation, air-gapped option, custom model fine-tuning, dedicated analyst support\\u003c/td\\u003e\\u003c/tr\\u003e\\n      \\u003c/table\\u003e\\n\\n      \\u003ch3\\u003eInitial Target Customers\\u003c/h3\\u003e\\n      \\u003cul\\u003e\\n        \\u003cli\\u003eEuropean Commission (DSA enforcement, strategic communication, hybrid-threat monitoring)\\u003c/li\\u003e\\n        \\u003cli\\u003eGerman Federal Ministry of the Interior (BMI) and domestic intelligence-adjacent units\\u003c/li\\u003e\\n        \\u003cli\\u003eNATO STRATCOM / DIANA-funded pilot programs\\u003c/li\\u003e\\n        \\u003cli\\u003eNational CERTs and strategic-communication directorates in the Baltics, Nordics, and Visegrád states\\u003c/li\\u003e\\n      \\u003c/ul\\u003e\\n\\n      \\u003ch3\\u003eRevenue Logic\\u003c/h3\\u003e\\n      \\u003cp\\u003eThe market is not price-sensitive on the buyer side; it is trust- and capability-sensitive. A single prevented election-interference incident or early warning ahead of a civil-unrest flashpoint justifies the contract. Expansion revenue comes from additional languages, platforms, classified variants, and custom counter-narrative playbooks.\\u003c/p\\u003e\\n    \\u003c/section\\u003e\\n\\n    \\u003csection id=\\\"competition\\\"\\u003e\\n      \\u003ch2 data-num=\\\"11\\\"\\u003eCompetitive Landscape\\u003c/h2\\u003e\\n      \\u003cp class=\\\"lead\\\"\\u003eExisting tools were built for English-language brand safety and generic \\\"fake news\\\" classification. VERITAS is built for state-sponsored attribution.\\u003c/p\\u003e\\n      \\u003ctable\\u003e\\n        \\u003ctr\\u003e\\u003cth\\u003eCompetitor\\u003c/th\\u003e\\u003cth\\u003eStrength\\u003c/th\\u003e\\u003cth\\u003eWhat They Miss\\u003c/th\\u003e\\u003c/tr\\u003e\\n        \\u003ctr\\u003e\\u003ctd\\u003e\\u003cstrong\\u003eRecorded Future\\u003c/strong\\u003e\\u003c/td\\u003e\\u003ctd\\u003eExcellent dark-web and IOC intelligence\\u003c/td\\u003e\\u003ctd\\u003eDisinformation is a secondary use case; weak cultural/contextual analysis for non-English influence ops\\u003c/td\\u003e\\u003c/tr\\u003e\\n        \\u003ctr\\u003e\\u003ctd\\u003e\\u003cstrong\\u003eLogically\\u003c/strong\\u003e\\u003c/td\\u003e\\u003ctd\\u003eStrong fact-checking and narrative monitoring\\u003c/td\\u003e\\u003ctd\\u003ePrimarily English and Western-context; limited attribution to state actors\\u003c/td\\u003e\\u003c/tr\\u003e\\n        \\u003ctr\\u003e\\u003ctd\\u003e\\u003cstrong\\u003eGraphika\\u003c/strong\\u003e\\u003c/td\\u003e\\u003ctd\\u003eDeep social-network analysis and actor mapping\\u003c/td\\u003e\\u003ctd\\u003eHigh cost, slow turnaround, less real-time production pipeline\\u003c/td\\u003e\\u003c/tr\\u003e\\n        \\u003ctr\\u003e\\u003ctd\\u003e\\u003cstrong\\u003eBlackbird.AI\\u003c/strong\\u003e\\u003c/td\\u003e\\u003ctd\\u003eNarrative-risk scoring for enterprises\\u003c/td\\u003e\\u003ctd\\u003eCorporate risk framing, not intelligence-grade attribution; weak on Turkish/Islamosphere\\u003c/td\\u003e\\u003c/tr\\u003e\\n        \\u003ctr\\u003e\\u003ctd\\u003e\\u003cstrong\\u003eEU East StratCom / National Labs\\u003c/strong\\u003e\\u003c/td\\u003e\\u003ctd\\u003eDomain expertise and access\\u003c/td\\u003e\\u003ctd\\u003eOften manual, under-resourced, no productized platform\\u003c/td\\u003e\\u003c/tr\\u003e\\n      \\u003c/table\\u003e\\n\\n      \\u003ch3\\u003eVERITAS Wedge\\u003c/h3\\u003e\\n      \\u003col\\u003e\\n        \\u003cli\\u003e\\u003cstrong\\u003eCross-Cultural Context Model\\u003c/strong\\u003e — the only productized capability built specifically for Turkish/Islamosphere disinformation semantics.\\u003c/li\\u003e\\n        \\u003cli\\u003e\\u003cstrong\\u003eSpeed-to-attribution\\u003c/strong\\u003e — from detection to STIX report in minutes, not days.\\u003c/li\\u003e\\n        \\u003cli\\u003e\\u003cstrong\\u003eSovereign deployment\\u003c/strong\\u003e — EU data residency, on-premise, and air-gapped options purpose-built for classified government use.\\u003c/li\\u003e\\n        \\u003cli\\u003e\\u003cstrong\\u003eCounter-narrative production\\u003c/strong\\u003e — moves beyond detection to actionable response recommendations.\\u003c/li\\u003e\\n      \\u003c/ol\\u003e\\n    \\u003c/section\\u003e\\n\\n    \\u003csection id=\\\"mvp\\\"\\u003e\\n      \\u003ch2 data-num=\\\"12\\\"\\u003eMVP Definition\\u003c/h2\\u003e\\n      \\u003cp class=\\\"lead\\\"\\u003eA 6-week MVP scoped to prove the core pipeline and win an initial government pilot.\\u003c/p\\u003e\\n\\n      \\u003ch3\\u003eIn Scope\\u003c/h3\\u003e\\n      \\u003cul\\u003e\\n        \\u003cli\\u003e\\u003cstrong\\u003eCollection:\\u003c/strong\\u003e Telegram public channels + X API monitoring, German and Turkish language pairs.\\u003c/li\\u003e\\n        \\u003cli\\u003e\\u003cstrong\\u003eStream processing:\\u003c/strong\\u003e Kafka event mesh, basic normalization, language detection.\\u003c/li\\u003e\\n        \\u003cli\\u003e\\u003cstrong\\u003eAI pipeline:\\u003c/strong\\u003e Narrative extraction using a fine-tuned 13B–34B model; first-pass bot coordination detector; basic factuality scoring against Reuters/AFP/DPA.\\u003c/li\\u003e\\n        \\u003cli\\u003e\\u003cstrong\\u003eKnowledge store:\\u003c/strong\\u003e Neo4j campaign graph + PostgreSQL evidence metadata.\\u003c/li\\u003e\\n        \\u003cli\\u003e\\u003cstrong\\u003eDashboard:\\u003c/strong\\u003e React real-time dashboard showing detected campaigns, language distribution, and reach.\\u003c/li\\u003e\\n        \\u003cli\\u003e\\u003cstrong\\u003eOutput:\\u003c/strong\\u003e JSON reports; STIX 2.1 export is a stretch goal.\\u003c/li\\u003e\\n      \\u003c/ul\\u003e\\n\\n      \\u003ch3\\u003eOut of Scope for MVP\\u003c/h3\\u003e\\n      \\u003cul\\u003e\\n        \\u003cli\\u003eTikTok and dark-web collection.\\u003c/li\\u003e\\n        \\u003cli\\u003eFull Cross-Cultural Context Model (delivered as rule-based + small fine-tuned classifier; full model in Phase 2).\\u003c/li\\u003e\\n        \\u003cli\\u003eAir-gapped variant.\\u003c/li\\u003e\\n        \\u003cli\\u003eCounter-narrative generator (manual analyst notes only).\\u003c/li\\u003e\\n      \\u003c/ul\\u003e\\n\\n      \\u003ch3\\u003eSuccess Criteria\\u003c/h3\\u003e\\n      \\u003cul\\u003e\\n        \\u003cli\\u003eDetect at least one coordinated German/Turkish bilingual campaign within 60 minutes of seeding.\\u003c/li\\u003e\\n        \\u003cli\\u003eProduce a credible attribution hypothesis with evidence chain.\\u003c/li\\u003e\\n        \\u003cli\\u003eDemonstrate STIX-ready structured output.\\u003c/li\\u003e\\n        \\u003cli\\u003eSecure a paid pilot or LOI from BMI or an EU Commission directorate.\\u003c/li\\u003e\\n      \\u003c/ul\\u003e\\n    \\u003c/section\\u003e\\n\\n    \\u003csection id=\\\"roadmap\\\"\\u003e\\n      \\u003ch2 data-num=\\\"13\\\"\\u003e18-Month Roadmap\\u003c/h2\\u003e\\n      \\u003ctable\\u003e\\n        \\u003ctr\\u003e\\u003cth\\u003eQuarter\\u003c/th\\u003e\\u003cth\\u003eMilestone\\u003c/th\\u003e\\u003c/tr\\u003e\\n        \\u003ctr\\u003e\\u003ctd\\u003e\\u003cstrong\\u003eQ1\\u003c/strong\\u003e\\u003c/td\\u003e\\u003ctd\\u003eMVP live: Telegram + X, DE/TR, dashboard, basic attribution. First pilot contract signed.\\u003c/td\\u003e\\u003c/tr\\u003e\\n        \\u003ctr\\u003e\\u003ctd\\u003e\\u003cstrong\\u003eQ2\\u003c/strong\\u003e\\u003c/td\\u003e\\u003ctd\\u003eAdd YouTube transcripts, TikTok scraping module. Launch Cross-Cultural Context Model v1.0. STIX/MISP export GA.\\u003c/td\\u003e\\u003c/tr\\u003e\\n        \\u003ctr\\u003e\\u003ctd\\u003e\\u003cstrong\\u003eQ3\\u003c/strong\\u003e\\u003c/td\\u003e\\u003ctd\\u003eDark-web/onion collection. Add Arabic, Kurdish, Russian. First on-premise government deployment.\\u003c/td\\u003e\\u003c/tr\\u003e\\n        \\u003ctr\\u003e\\u003ctd\\u003e\\u003cstrong\\u003eQ4\\u003c/strong\\u003e\\u003c/td\\u003e\\u003ctd\\u003eCounter-Narrative Generator GA. Air-gapped classified variant pilot. €3M ARR target.\\u003c/td\\u003e\\u003c/tr\\u003e\\n        \\u003ctr\\u003e\\u003ctd\\u003e\\u003cstrong\\u003eQ5–Q6\\u003c/strong\\u003e\\u003c/td\\u003e\\u003ctd\\u003eScale to 10+ government/EU customers. Real-time multilingual campaign attribution under 15 minutes. SOC 2 Type II / ISO 27001 certification. Series A preparation.\\u003c/td\\u003e\\u003c/tr\\u003e\\n      \\u003c/table\\u003e\\n    \\u003c/section\\u003e\\n\\n    \\u003csection id=\\\"team\\\"\\u003e\\n      \\u003ch2 data-num=\\\"14\\\"\\u003eTeam Requirements\\u003c/h2\\u003e\\n      \\u003cp class=\\\"lead\\\"\\u003eFounding team of 5–7 people.\\u003c/p\\u003e\\n      \\u003ctable\\u003e\\n        \\u003ctr\\u003e\\u003cth\\u003eRole\\u003c/th\\u003e\\u003cth\\u003eResponsibility\\u003c/th\\u003e\\u003c/tr\\u003e\\n        \\u003ctr\\u003e\\u003ctd\\u003e\\u003cstrong\\u003eML Engineer / Lead Scientist\\u003c/strong\\u003e\\u003c/td\\u003e\\u003ctd\\u003eLLM fine-tuning, bot-detection models, attribution scoring\\u003c/td\\u003e\\u003c/tr\\u003e\\n        \\u003ctr\\u003e\\u003ctd\\u003e\\u003cstrong\\u003eOSINT Specialist\\u003c/strong\\u003e\\u003c/td\\u003e\\u003ctd\\u003eSource access, Telegram/X/TikTok collection, actor TTP research\\u003c/td\\u003e\\u003c/tr\\u003e\\n        \\u003ctr\\u003e\\u003ctd\\u003e\\u003cstrong\\u003eBackend Engineer\\u003c/strong\\u003e\\u003c/td\\u003e\\u003ctd\\u003eKafka, Neo4j, FastAPI, data pipeline reliability\\u003c/td\\u003e\\u003c/tr\\u003e\\n        \\u003ctr\\u003e\\u003ctd\\u003e\\u003cstrong\\u003eFrontend Engineer\\u003c/strong\\u003e\\u003c/td\\u003e\\u003ctd\\u003eReact dashboard, visualization, secure portal\\u003c/td\\u003e\\u003c/tr\\u003e\\n        \\u003ctr\\u003e\\u003ctd\\u003e\\u003cstrong\\u003eLinguist / Forensic Analyst\\u003c/strong\\u003e\\u003c/td\\u003e\\u003ctd\\u003eTurkish/Arabic/Kurdish annotation, cultural context model design, evidence review\\u003c/td\\u003e\\u003c/tr\\u003e\\n        \\u003ctr\\u003e\\u003ctd\\u003e\\u003cstrong\\u003eSales / Government Relations\\u003c/strong\\u003e\\u003c/td\\u003e\\u003ctd\\u003eBMI, EU Commission, NATO, procurement navigation\\u003c/td\\u003e\\u003c/tr\\u003e\\n        \\u003ctr\\u003e\\u003ctd\\u003e\\u003cstrong\\u003eSecurity / Compliance Lead\\u003c/strong\\u003e (fractional initially)\\u003c/td\\u003e\\u003ctd\\u003eAir-gapped deployments, classified handling, ISO/SOC2\\u003c/td\\u003e\\u003c/tr\\u003e\\n      \\u003c/table\\u003e\\n    \\u003c/section\\u003e\\n\\n    \\u003csection id=\\\"risk\\\"\\u003e\\n      \\u003ch2 data-num=\\\"15\\\"\\u003eRisk \\u0026amp; Mitigation\\u003c/h2\\u003e\\n      \\u003ctable\\u003e\\n        \\u003ctr\\u003e\\u003cth\\u003eRisk\\u003c/th\\u003e\\u003cth\\u003eLikelihood\\u003c/th\\u003e\\u003cth\\u003eMitigation\\u003c/th\\u003e\\u003c/tr\\u003e\\n        \\u003ctr\\u003e\\u003ctd\\u003ePlatform API changes / blocks\\u003c/td\\u003e\\u003ctd\\u003eHigh\\u003c/td\\u003e\\u003ctd\\u003eBuild adapter abstraction; maintain multiple collection paths; use public/ethical scraping where API is insufficient.\\u003c/td\\u003e\\u003c/tr\\u003e\\n        \\u003ctr\\u003e\\u003ctd\\u003eLegal challenges (GDPR, platform ToS)\\u003c/td\\u003e\\u003ctd\\u003eMedium\\u003c/td\\u003e\\u003ctd\\u003eLegal review; data minimization; EU data residency; no unauthorized private data collection; transparent terms.\\u003c/td\\u003e\\u003c/tr\\u003e\\n        \\u003ctr\\u003e\\u003ctd\\u003eAdversarial adaptation\\u003c/td\\u003e\\u003ctd\\u003eHigh\\u003c/td\\u003e\\u003ctd\\u003eContinuous retraining; red-team exercises; fingerprint versioning; human-in-the-loop attribution.\\u003c/td\\u003e\\u003c/tr\\u003e\\n        \\u003ctr\\u003e\\u003ctd\\u003eModel hallucination in attribution\\u003c/td\\u003e\\u003ctd\\u003eMedium\\u003c/td\\u003e\\u003ctd\\u003eProbabilistic confidence scores; structured evidence chains; mandatory analyst review before formal reporting.\\u003c/td\\u003e\\u003c/tr\\u003e\\n        \\u003ctr\\u003e\\u003ctd\\u003eFalse positives overwhelming analysts\\u003c/td\\u003e\\u003ctd\\u003eMedium\\u003c/td\\u003e\\u003ctd\\u003eTunable thresholds; feedback loops; confidence calibration; analyst workload metrics.\\u003c/td\\u003e\\u003c/tr\\u003e\\n        \\u003ctr\\u003e\\u003ctd\\u003eClassified-deployment complexity\\u003c/td\\u003e\\u003ctd\\u003eMedium\\u003c/td\\u003e\\u003ctd\\u003eModular offline architecture; pre-certified hardware partners; air-gap data-diode procedures.\\u003c/td\\u003e\\u003c/tr\\u003e\\n      \\u003c/table\\u003e\\n    \\u003c/section\\u003e\\n\\n    \\u003csection id=\\\"why-now\\\"\\u003e\\n      \\u003ch2 data-num=\\\"16\\\"\\u003eWhy Now\\u003c/h2\\u003e\\n      \\u003cp class=\\\"lead\\\"\\u003eSeveral independent forces make 2026 the right entry window for VERITAS:\\u003c/p\\u003e\\n      \\u003cul\\u003e\\n        \\u003cli\\u003e\\u003cstrong\\u003eEU Digital Services Act enforcement (2026):\\u003c/strong\\u003e Large platforms must provide vetted researcher access and algorithmic transparency, creating both data-access opportunities and policy demand for independent monitoring.\\u003c/li\\u003e\\n        \\u003cli\\u003e\\u003cstrong\\u003eGerman federal elections (2027):\\u003c/strong\\u003e Disinformation campaigns targeting German-Turkish and German-Arab communities will intensify. Early detection and attribution will be politically valuable.\\u003c/li\\u003e\\n        \\u003cli\\u003e\\u003cstrong\\u003eOngoing Ukraine war information operations:\\u003c/strong\\u003e Russian and proxy actors continue to target European audiences with false narratives around refugees, energy, and NATO. The threat is sustained, not hypothetical.\\u003c/li\\u003e\\n        \\u003cli\\u003e\\u003cstrong\\u003eNATO DIANA / innovation funding:\\u003c/strong\\u003e NATO and EU defense-innovation programs are actively funding dual-use AI and counter-disinformation capabilities. VERITAS is well aligned.\\u003c/li\\u003e\\n        \\u003cli\\u003e\\u003cstrong\\u003eWestern tool failure is now visible:\\u003c/strong\\u003e Fact-checkers, intelligence analysts, and platform trust-and-safety teams openly acknowledge the non-English cultural-context gap. The buyer pain is validated.\\u003c/li\\u003e\\n      \\u003c/ul\\u003e\\n      \\u003cp\\u003eVERITAS is designed to capture this window: a sovereign, multilingual, attribution-grade AI platform that fills the blind spot Western tools cannot see.\\u003c/p\\u003e\\n    \\u003c/section\\u003e\\n\\n  \\u003c/main\\u003e\\n\\n  \\u003cfooter\\u003e\\n    \\u003cp\\u003e\\u003cstrong\\u003eVERITAS — AI Counter-Disinformation Platform\\u003c/strong\\u003e\\u003c/p\\u003e\\n    \\u003cp\\u003eDocument version 1.0 · Built for democratic governments · STIX 2.1 / MISP compatible · EU data residency · Air-gapped ready\\u003c/p\\u003e\\n  \\u003c/footer\\u003e\\n\\u003c/body\\u003e\\n\\u003c/html\\u003e\\n\"}"
          }
        }
      ]
    },
    {
      "role": "tool",
      "name": "write_file",
      "content": "{\"bytes_written\": 0, \"dirs_created\": false, \"error\": \"Failed to write file: /usr/bin/bash: line 3: /DATA/veritas-website.html: Permission denied\\n\", \"_warning\": \"/DATA/veritas-website.html was last read with offset/limit pagination (partial view). Re-read the whole file before overwriting it.\"}",
      "tool_call_id": "functions.write_file:2"
    },
    {
      "role": "assistant",
      "content": "",
      "reasoning": "The write_file tool failed with permission denied. Let me try using terminal with sudo or check permissions.",
      "finish_reason": "tool_calls",
      "reasoning_content": "The write_file tool failed with permission denied. Let me try using terminal with sudo or check permissions.",
      "tool_calls": [
        {
          "id": "functions.terminal:3",
          "call_id": "functions.terminal:3",
          "response_item_id": "fc_functionsterminal3",
          "type": "function",
          "function": {
            "name": "terminal",
            "arguments": "{\"command\":\"ls -la /DATA/veritas-website.html \\u0026\\u0026 stat /DATA/veritas-website.html\"}"
          }
        }
      ]
    },
    {
      "role": "tool",
      "name": "terminal",
      "content": "{\"output\": \"-rw-r--r-- 1 root root 61201 Jun 21 22:29 /DATA/veritas-website.html\\n  File: /DATA/veritas-website.html\\n  Size: 61201     \\tBlocks: 128        IO Block: 4096   regular file\\nDevice: 8,24\\tInode: 23          Links: 1\\nAccess: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)\\nAccess: 2026-06-21 22:29:06.374798509 +0200\\nModify: 2026-06-21 22:29:03.722798566 +0200\\nChange: 2026-06-21 22:29:03.722798566 +0200\\n Birth: 2026-06-21 22:26:41.622801603 +0200\", \"exit_code\": 0, \"error\": null}",
      "tool_call_id": "functions.terminal:3"
    },
    {
      "role": "assistant",
      "content": "",
      "reasoning": null,
      "finish_reason": "tool_calls",
      "tool_calls": [
        {
          "id": "functions.terminal:4",
          "call_id": "functions.terminal:4",
          "response_item_id": "fc_functionsterminal4",
          "type": "function",
          "function": {
            "name": "terminal",
            "arguments": "{\"command\":\"sudo -n true 2\\u003e/dev/null \\u0026\\u0026 echo \\\"sudo available\\\" || echo \\\"no sudo\\\"; id; pwd\"}"
          }
        }
      ]
    },
    {
      "role": "tool",
      "name": "terminal",
      "content": "{\"output\": \"sudo available\\nuid=999(az-a) gid=1000(samba) groups=1000(samba),10(wheel),104(docker)\\n/\", \"exit_code\": 0, \"error\": null}",
      "tool_call_id": "functions.terminal:4"
    },
    {
      "role": "assistant",
      "content": "",
      "reasoning": null,
      "finish_reason": "tool_calls",
      "tool_calls": [
        {
          "id": "functions.terminal:5",
          "call_id": "functions.terminal:5",
          "response_item_id": "fc_functionsterminal5",
          "type": "function",
          "function": {
            "name": "terminal",
            "arguments": "{\"command\":\"sudo tee /DATA/veritas-website.html \\u003e /dev/null \\u003c\\u003c 'EOF'\\n\\u003c!DOCTYPE html\\u003e\\n\\u003chtml lang=\\\"en\\\"\\u003e\\n\\u003chead\\u003e\\n  \\u003cmeta charset=\\\"UTF-8\\\" /\\u003e\\n  \\u003cmeta name=\\\"viewport\\\" content=\\\"width=device-width, initial-scale=1.0\\\" /\\u003e\\n  \\u003ctitle\\u003eVERITAS — AI Counter-Disinformation Platform\\u003c/title\\u003e\\n  \\u003clink rel=\\\"preconnect\\\" href=\\\"https://fonts.googleapis.com\\\" /\\u003e\\n  \\u003clink rel=\\\"preconnect\\\" href=\\\"https://fonts.gstatic.com\\\" crossorigin /\\u003e\\n  \\u003clink href=\\\"https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700\\u0026display=swap\\\" rel=\\\"stylesheet\\\" /\\u003e\\n  \\u003cstyle\\u003e\\n    :root {\\n      --bg: #0a0a0f;\\n      --surface: #13141a;\\n      --surface-elevated: #16171d;\\n      --border: rgba(255,255,255,0.06);\\n      --border-strong: rgba(255,255,255,0.12);\\n      --text: #e8e8ed;\\n      --muted: #8a8b99;\\n      --accent: #00a3bf;\\n      --accent-dim: rgba(0,163,191,0.12);\\n      --amber: #b47d1b;\\n      --amber-dim: rgba(180,125,27,0.12);\\n      --rose: #a84646;\\n      --rose-dim: rgba(168,70,70,0.12);\\n    }\\n    * { box-sizing: border-box; }\\n    html { scroll-behavior: smooth; }\\n    body {\\n      margin: 0;\\n      background: var(--bg);\\n      color: var(--text);\\n      font-family: \\\"Inter\\\", system-ui, -apple-system, BlinkMacSystemFont, sans-serif;\\n      font-size: 15px;\\n      line-height: 1.55;\\n      -webkit-font-smoothing: antialiased;\\n    }\\n    a { color: var(--accent); text-decoration: none; }\\n    a:hover { opacity: 0.85; }\\n    code, pre {\\n      font-family: \\\"Inter\\\", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;\\n      background: var(--surface);\\n      border: 1px solid var(--border);\\n      border-radius: 4px;\\n      font-size: 0.85em;\\n    }\\n    code { padding: 2px 6px; }\\n    pre {\\n      padding: 16px;\\n      overflow-x: auto;\\n      line-height: 1.5;\\n    }\\n\\n    /* Geometric background */\\n    body::before {\\n      content: \\\"\\\";\\n      position: fixed;\\n      inset: 0;\\n      pointer-events: none;\\n      z-index: 0;\\n      background:\\n        radial-gradient(circle at 20% 0%, rgba(0,163,191,0.06), transparent 35%),\\n        radial-gradient(circle at 80% 100%, rgba(0,163,191,0.03), transparent 30%);\\n    }\\n    .dot-grid {\\n      position: fixed;\\n      inset: 0;\\n      pointer-events: none;\\n      z-index: 0;\\n      background-image: radial-gradient(rgba(255,255,255,0.06) 1px, transparent 1px);\\n      background-size: 32px 32px;\\n      mask-image: linear-gradient(to bottom, rgba(0,0,0,0.25) 0%, rgba(0,0,0,0) 70%);\\n      -webkit-mask-image: linear-gradient(to bottom, rgba(0,0,0,0.25) 0%, rgba(0,0,0,0) 70%);\\n    }\\n\\n    /* Minimal top bar */\\n    .topbar {\\n      position: sticky;\\n      top: 0;\\n      z-index: 1000;\\n      background: rgba(10,10,15,0.92);\\n      backdrop-filter: blur(8px);\\n      border-bottom: 1px solid var(--border);\\n    }\\n    .topbar-inner {\\n      max-width: 1280px;\\n      margin: 0 auto;\\n      padding: 12px 24px;\\n      display: flex;\\n      align-items: center;\\n      justify-content: space-between;\\n      gap: 20px;\\n    }\\n    .brand {\\n      display: flex;\\n      align-items: center;\\n      gap: 10px;\\n      font-weight: 600;\\n      font-size: 0.95rem;\\n      letter-spacing: 0.04em;\\n      color: var(--text);\\n      white-space: nowrap;\\n    }\\n    .brand-mark {\\n      width: 8px; height: 8px;\\n      background: var(--accent);\\n      transform: rotate(45deg);\\n    }\\n    .nav-links {\\n      display: flex;\\n      gap: 20px;\\n      flex-wrap: wrap;\\n      justify-content: flex-end;\\n    }\\n    .nav-links a {\\n      font-size: 0.72rem;\\n      color: var(--muted);\\n      font-weight: 500;\\n      letter-spacing: 0.02em;\\n      text-transform: uppercase;\\n    }\\n    .nav-links a:hover { color: var(--accent); }\\n\\n    .wrapper {\\n      position: relative;\\n      z-index: 1;\\n      max-width: 1280px;\\n      margin: 0 auto;\\n      padding: 0 24px 80px;\\n    }\\n    section { margin-bottom: 80px; }\\n\\n    h1, h2, h3, h4 {\\n      margin: 0 0 14px;\\n      font-weight: 600;\\n      line-height: 1.25;\\n      letter-spacing: -0.01em;\\n    }\\n    h1 { font-size: 3rem; font-weight: 300; letter-spacing: -0.03em; }\\n    h2 {\\n      font-size: 1.35rem;\\n      font-weight: 500;\\n      color: var(--text);\\n      border-bottom: 1px solid var(--border);\\n      padding-bottom: 12px;\\n      margin-top: 56px;\\n      display: flex;\\n      align-items: baseline;\\n      gap: 12px;\\n    }\\n    h2::before {\\n      content: attr(data-num);\\n      color: var(--accent);\\n      font-size: 0.75rem;\\n      font-weight: 600;\\n      letter-spacing: 0.08em;\\n      text-transform: uppercase;\\n    }\\n    h3 { font-size: 1.05rem; font-weight: 500; color: var(--text); margin-top: 28px; }\\n    h4 { font-size: 0.95rem; font-weight: 500; color: var(--muted); margin-top: 22px; }\\n    p { margin: 0 0 14px; color: var(--text); }\\n    .lead { font-size: 1.1rem; color: var(--muted); font-weight: 400; line-height: 1.6; }\\n\\n    .card {\\n      background: var(--surface);\\n      border: 1px solid var(--border);\\n      border-radius: 4px;\\n      padding: 22px 24px;\\n      margin: 18px 0;\\n    }\\n    .card h3 { margin-top: 0; }\\n\\n    .wedge {\\n      background: var(--surface-elevated);\\n      border-left: 2px solid var(--accent);\\n      position: relative;\\n    }\\n    .wedge::before {\\n      content: \\\"PRIMARY WEDGE\\\";\\n      position: absolute;\\n      top: -1px;\\n      right: 20px;\\n      background: var(--accent-dim);\\n      color: var(--accent);\\n      font-size: 0.6rem;\\n      font-weight: 700;\\n      padding: 4px 10px;\\n      letter-spacing: 0.08em;\\n      border: 1px solid var(--border);\\n      border-top: none;\\n    }\\n    .wedge h2 { border-color: rgba(0,163,191,0.18); }\\n    .wedge h2::before { color: var(--accent); }\\n\\n    table {\\n      width: 100%;\\n      border-collapse: collapse;\\n      margin: 18px 0;\\n      font-size: 0.88rem;\\n    }\\n    th, td {\\n      border: 1px solid var(--border);\\n      padding: 12px 14px;\\n      text-align: left;\\n      vertical-align: top;\\n    }\\n    th {\\n      background: rgba(255,255,255,0.03);\\n      color: var(--accent);\\n      font-weight: 600;\\n      font-size: 0.75rem;\\n      letter-spacing: 0.04em;\\n      text-transform: uppercase;\\n    }\\n    tr:nth-child(even) td { background: rgba(255,255,255,0.015); }\\n    ul, ol { margin: 12px 0; padding-left: 22px; }\\n    li { margin-bottom: 8px; }\\n    strong { color: var(--text); font-weight: 600; }\\n    blockquote {\\n      border-left: 1px solid var(--accent);\\n      padding-left: 18px;\\n      color: var(--muted);\\n      font-style: italic;\\n      margin: 18px 0;\\n    }\\n\\n    .phases {\\n      display: grid;\\n      grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));\\n      gap: 1px;\\n      margin: 24px 0;\\n      background: var(--border);\\n      border: 1px solid var(--border);\\n    }\\n    .phase {\\n      background: var(--surface);\\n      padding: 20px;\\n    }\\n    .phase .num {\\n      display: inline-flex;\\n      align-items: center;\\n      justify-content: center;\\n      width: 24px; height: 24px;\\n      border: 1px solid var(--accent);\\n      color: var(--accent);\\n      font-weight: 600;\\n      font-size: 0.75rem;\\n      margin-bottom: 12px;\\n    }\\n    .phase h4 { margin: 0 0 8px; color: var(--text); font-weight: 500; }\\n    .phase p { font-size: 0.88rem; color: var(--muted); margin: 0; }\\n\\n    .hero {\\n      min-height: 70vh;\\n      display: flex;\\n      flex-direction: column;\\n      justify-content: center;\\n      align-items: center;\\n      text-align: center;\\n      border-bottom: 1px solid var(--border);\\n      padding: 80px 0 60px;\\n      margin-bottom: 80px;\\n    }\\n    .hero .logo {\\n      display: flex;\\n      align-items: center;\\n      justify-content: center;\\n      gap: 14px;\\n      margin-bottom: 18px;\\n    }\\n    .hero .logo-mark {\\n      width: 14px; height: 14px;\\n      background: var(--accent);\\n      transform: rotate(45deg);\\n    }\\n    .hero h1 { margin: 0; font-size: 4rem; font-weight: 300; letter-spacing: 0.12em; }\\n    .hero .tagline {\\n      font-size: 1.05rem;\\n      color: var(--accent);\\n      font-weight: 500;\\n      letter-spacing: 0.04em;\\n      margin-bottom: 28px;\\n      text-transform: uppercase;\\n    }\\n    .hero .summary {\\n      max-width: 760px;\\n      margin: 0 auto;\\n      color: var(--muted);\\n      font-size: 1.05rem;\\n      line-height: 1.7;\\n    }\\n    .hero-stats {\\n      display: flex;\\n      justify-content: center;\\n      gap: 48px;\\n      flex-wrap: wrap;\\n      margin-top: 48px;\\n      padding-top: 40px;\\n      border-top: 1px solid var(--border);\\n    }\\n    .stat { text-align: left; min-width: 140px; }\\n    .stat .value {\\n      font-size: 1.6rem;\\n      font-weight: 300;\\n      color: var(--text);\\n      letter-spacing: -0.02em;\\n    }\\n    .stat .label {\\n      font-size: 0.7rem;\\n      color: var(--muted);\\n      text-transform: uppercase;\\n      letter-spacing: 0.06em;\\n      margin-top: 4px;\\n    }\\n\\n    .svg-wrap {\\n      background: var(--surface);\\n      border: 1px solid var(--border);\\n      border-radius: 2px;\\n      padding: 10px;\\n      overflow-x: auto;\\n      margin: 24px 0;\\n    }\\n    .svg-wrap svg {\\n      width: 100%;\\n      height: auto;\\n      min-width: 1100px;\\n      display: block;\\n    }\\n\\n    .notice {\\n      border: 1px solid var(--amber-dim);\\n      background: var(--amber-dim);\\n      padding: 14px 18px;\\n      font-size: 0.85rem;\\n      color: var(--text);\\n    }\\n    .notice strong { color: var(--amber); }\\n\\n    footer {\\n      position: relative;\\n      z-index: 1;\\n      border-top: 1px solid var(--border);\\n      padding: 40px 24px;\\n      text-align: center;\\n      color: var(--muted);\\n      font-size: 0.8rem;\\n      letter-spacing: 0.02em;\\n    }\\n    footer p { margin: 6px 0; }\\n\\n    @media (max-width: 900px) {\\n      .topbar-inner { flex-direction: column; align-items: flex-start; gap: 10px; }\\n      .nav-links { justify-content: flex-start; gap: 14px; }\\n      h1, .hero h1 { font-size: 2.4rem; }\\n      .hero { min-height: auto; padding: 48px 0; }\\n      .hero-stats { gap: 24px; }\\n      .svg-wrap svg { min-width: 900px; }\\n    }\\n  \\u003c/style\\u003e\\n\\u003c/head\\u003e\\n\\u003cbody\\u003e\\n  \\u003cdiv class=\\\"dot-grid\\\"\\u003e\\u003c/div\\u003e\\n  \\u003cnav class=\\\"topbar\\\"\\u003e\\n    \\u003cdiv class=\\\"topbar-inner\\\"\\u003e\\n      \\u003ca href=\\\"#top\\\" class=\\\"brand\\\"\\u003e\\u003cspan class=\\\"brand-mark\\\"\\u003e\\u003c/span\\u003eVERITAS\\u003c/a\\u003e\\n      \\u003cdiv class=\\\"nav-links\\\"\\u003e\\n        \\u003ca href=\\\"#overview\\\"\\u003eOverview\\u003c/a\\u003e\\n        \\u003ca href=\\\"#problem\\\"\\u003eProblem\\u003c/a\\u003e\\n        \\u003ca href=\\\"#how-it-works\\\"\\u003eHow It Works\\u003c/a\\u003e\\n        \\u003ca href=\\\"#architecture\\\"\\u003eArchitecture\\u003c/a\\u003e\\n        \\u003ca href=\\\"#ai-pipeline\\\"\\u003eAI/ML\\u003c/a\\u003e\\n        \\u003ca href=\\\"#context-model\\\"\\u003eContext Model\\u003c/a\\u003e\\n        \\u003ca href=\\\"#attribution\\\"\\u003eAttribution\\u003c/a\\u003e\\n        \\u003ca href=\\\"#sources\\\"\\u003eSources\\u003c/a\\u003e\\n        \\u003ca href=\\\"#products\\\"\\u003eProducts\\u003c/a\\u003e\\n        \\u003ca href=\\\"#deployment\\\"\\u003eDeploy\\u003c/a\\u003e\\n        \\u003ca href=\\\"#business\\\"\\u003eBusiness\\u003c/a\\u003e\\n        \\u003ca href=\\\"#competition\\\"\\u003eCompetition\\u003c/a\\u003e\\n        \\u003ca href=\\\"#mvp\\\"\\u003eMVP\\u003c/a\\u003e\\n        \\u003ca href=\\\"#roadmap\\\"\\u003eRoadmap\\u003c/a\\u003e\\n      \\u003c/div\\u003e\\n    \\u003c/div\\u003e\\n  \\u003c/nav\\u003e\\n  \\u003cmain class=\\\"wrapper\\\" id=\\\"top\\\"\\u003e\\n    \\u003csection class=\\\"hero\\\" id=\\\"overview\\\"\\u003e\\n      \\u003cdiv class=\\\"logo\\\"\\u003e\\u003cspan class=\\\"logo-mark\\\"\\u003e\\u003c/span\\u003e\\u003ch1\\u003eVERITAS\\u003c/h1\\u003e\\u003c/div\\u003e\\n      \\u003cdiv class=\\\"tagline\\\"\\u003eDetect, attribute, and counter coordinated disinformation in real time.\\u003c/div\\u003e\\n      \\u003cp class=\\\"summary\\\"\\u003e\\n        A sovereign AI platform for democratic governments that ingests multi-source social and dark-web signals,\\n        extracts and attributes malign information campaigns, and produces machine-readable intelligence products\\n        in STIX/MISP format. VERITAS closes the blind spot Western tools cannot see: non-English, culturally encoded\\n        influence operations in the Turkish and broader Islamosphere information spaces.\\n      \\u003c/p\\u003e\\n      \\u003cdiv class=\\\"hero-stats\\\"\\u003e\\n        \\u003cdiv class=\\\"stat\\\"\\u003e\\u003cdiv class=\\\"value\\\"\\u003e€5B+\\u003c/div\\u003e\\u003cdiv class=\\\"label\\\"\\u003eadversarial annual spend\\u003c/div\\u003e\\u003c/div\\u003e\\n        \\u003cdiv class=\\\"stat\\\"\\u003e\\u003cdiv class=\\\"value\\\"\\u003e24–72h\\u003c/div\\u003e\\u003cdiv class=\\\"label\\\"\\u003ecurrent detection latency\\u003c/div\\u003e\\u003c/div\\u003e\\n        \\u003cdiv class=\\\"stat\\\"\\u003e\\u003cdiv class=\\\"value\\\"\\u003e\\u0026lt;15 min\\u003c/div\\u003e\\u003cdiv class=\\\"label\\\"\\u003eVERITAS attribution target\\u003c/div\\u003e\\u003c/div\\u003e\\n        \\u003cdiv class=\\\"stat\\\"\\u003e\\u003cdiv class=\\\"value\\\"\\u003e€2M–€10M\\u003c/div\\u003e\\u003cdiv class=\\\"label\\\"\\u003etarget ARR per customer\\u003c/div\\u003e\\u003c/div\\u003e\\n      \\u003c/div\\u003e\\n    \\u003c/section\\u003e\\n\\n    \\u003csection id=\\\"problem\\\"\\u003e\\n      \\u003ch2 data-num=\\\"01\\\"\\u003eThe Problem\\u003c/h2\\u003e\\n      \\u003cp class=\\\"lead\\\"\\u003eDisinformation is no longer a social-media nuisance. It is a financed, staffed, and measured component of state and proxy hybrid warfare.\\u003c/p\\u003e\\n\\n      \\u003ch3\\u003eScale and Spend\\u003c/h3\\u003e\\n      \\u003cp\\u003eEU disinformation researchers estimate adversarial annual spending on influence operations at roughly \\u003cstrong\\u003e€5 billion\\u003c/strong\\u003e, covering troll farms, fake media outlets, botnet infrastructure, paid opinion leaders, and synthetic media production. The ROI is asymmetric: a single well-timed false narrative can shift electoral behavior or inflame civil unrest at a cost measured in thousands of euros.\\u003c/p\\u003e\\n\\n      \\u003ch3\\u003eDetection Latency\\u003c/h3\\u003e\\n      \\u003cp\\u003eManual OSINT monitoring often surfaces a campaign only after it has crossed into mainstream media. Automated brand-safety classifiers miss new-narrative seeding, coordinated inauthentic behavior, and culturally encoded incitement. Average time-to-detection for a new state-backed campaign is \\u003cstrong\\u003e24–72 hours\\u003c/strong\\u003e — by then the narrative has been seeded, amplified, and laundered into mainstream discourse.\\u003c/p\\u003e\\n\\n      \\u003ch3\\u003eReal Examples\\u003c/h3\\u003e\\n      \\u003cul\\u003e\\n        \\u003cli\\u003e\\u003cstrong\\u003eUkraine war IO:\\u003c/strong\\u003e Russian and proxy actors seed false narratives about refugee crime, NATO biolabs, and fabricated atrocities first in German-, Turkish-, and Arabic-language Telegram and X channels, then launder them into domestic communities.\\u003c/li\\u003e\\n        \\u003cli\\u003e\\u003cstrong\\u003eIranian IRGC/IOPI operations:\\u003c/strong\\u003e Proxy networks use Turkish-language “anti-imperialist” framing to reach Sunni-majority European diaspora audiences, mixing legitimate criticism with fabricated atrocity content. Western tools classify the religious/historical references as neutral.\\u003c/li\\u003e\\n        \\u003cli\\u003e\\u003cstrong\\u003eChinese covert influence:\\u003c/strong\\u003e Operations targeting the Turkish diaspora in Germany exploit honor/shame dynamics and kinship networks — detection requires native cultural models, not keyword lists.\\u003c/li\\u003e\\n      \\u003c/ul\\u003e\\n\\n      \\u003ch3\\u003eWhy Current Tools Fail\\u003c/h3\\u003e\\n      \\u003cul\\u003e\\n        \\u003cli\\u003e\\u003cstrong\\u003eLanguage:\\u003c/strong\\u003e Most classifiers are trained predominantly on English data. Low-resource but high-threat languages such as Turkish, Kurdish, and Arabic dialects are under-modeled.\\u003c/li\\u003e\\n        \\u003cli\\u003e\\u003cstrong\\u003eCultural context:\\u003c/strong\\u003e References to Srebrenica, the Crusades, or Ottoman history are used as coded incitement and misread as historical discussion.\\u003c/li\\u003e\\n        \\u003cli\\u003e\\u003cstrong\\u003eCoordination awareness:\\u003c/strong\\u003e The threat is synchronized seeding across hundreds of accounts and platforms. This requires temporal graph analysis, not sentiment analysis.\\u003c/li\\u003e\\n        \\u003cli\\u003e\\u003cstrong\\u003eAttribution gap:\\u003c/strong\\u003e Knowing something is fake is not enough. Analysts need evidence chains identifying who is pushing it, why, and through which proxy infrastructure.\\u003c/li\\u003e\\n      \\u003c/ul\\u003e\\n    \\u003c/section\\u003e\\n\\n    \\u003csection id=\\\"how-it-works\\\"\\u003e\\n      \\u003ch2 data-num=\\\"02\\\"\\u003eHow VERITAS Works\\u003c/h2\\u003e\\n      \\u003cp class=\\\"lead\\\"\\u003eVERITAS is organized as a five-phase pipeline: Collect → Detect → Attribute → Produce → Deliver.\\u003c/p\\u003e\\n      \\u003cdiv class=\\\"phases\\\"\\u003e\\n        \\u003cdiv class=\\\"phase\\\"\\u003e\\n          \\u003cdiv class=\\\"num\\\"\\u003e1\\u003c/div\\u003e\\n          \\u003ch4\\u003eCollect\\u003c/h4\\u003e\\n          \\u003cp\\u003eIngest signals from Telegram, X, TikTok, YouTube, licensed news wires (Reuters, AFP, DPA), and dark-web/onion sources. Each source uses adapters that normalize content into a canonical event schema.\\u003c/p\\u003e\\n        \\u003c/div\\u003e\\n        \\u003cdiv class=\\\"phase\\\"\\u003e\\n          \\u003cdiv class=\\\"num\\\"\\u003e2\\u003c/div\\u003e\\n          \\u003ch4\\u003eDetect\\u003c/h4\\u003e\\n          \\u003cp\\u003eNormalize language, transcribe audio/video via Whisper, run OCR on memes, tag dialects, and flag coordinated inauthentic behavior through burst detection and semantic clustering.\\u003c/p\\u003e\\n        \\u003c/div\\u003e\\n        \\u003cdiv class=\\\"phase\\\"\\u003e\\n          \\u003cdiv class=\\\"num\\\"\\u003e3\\u003c/div\\u003e\\n          \\u003ch4\\u003eAttribute\\u003c/h4\\u003e\\n          \\u003cp\\u003eMove from content to actor. Linguistic forensics, TTP fingerprint matching, and the Cross-Cultural Context Model produce structured attribution hypotheses with confidence intervals.\\u003c/p\\u003e\\n        \\u003c/div\\u003e\\n        \\u003cdiv class=\\\"phase\\\"\\u003e\\n          \\u003cdiv class=\\\"num\\\"\\u003e4\\u003c/div\\u003e\\n          \\u003ch4\\u003eProduce\\u003c/h4\\u003e\\n          \\u003cp\\u003ePersist campaigns to the Campaign Knowledge Graph. Generate dashboards, automated STIX 2.1/MISP reports, counter-narrative suggestions, and early-warning alerts.\\u003c/p\\u003e\\n        \\u003c/div\\u003e\\n        \\u003cdiv class=\\\"phase\\\"\\u003e\\n          \\u003cdiv class=\\\"num\\\"\\u003e5\\u003c/div\\u003e\\n          \\u003ch4\\u003eDeliver\\u003c/h4\\u003e\\n          \\u003cp\\u003eConsume intelligence through a secure government portal (mTLS + SAML/OIDC), a scoped REST API for SOC/CERT workflows, or an air-gapped classified variant.\\u003c/p\\u003e\\n        \\u003c/div\\u003e\\n      \\u003c/div\\u003e\\n    \\u003c/section\\u003e\\n\\n    \\u003csection id=\\\"architecture\\\"\\u003e\\n      \\u003ch2 data-num=\\\"03\\\"\\u003eTechnical Architecture\\u003c/h2\\u003e\\n      \\u003cp class=\\\"lead\\\"\\u003eA log-centric, graph-native intelligence architecture built for throughput, replay, and auditability.\\u003c/p\\u003e\\n      \\u003cdiv class=\\\"svg-wrap\\\"\\u003e\\n    \\u003csvg viewBox=\\\"0 0 1300 900\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"\\u003e\\n      \\u003cdefs\\u003e\\n        \\u003cpattern id=\\\"grid\\\" width=\\\"40\\\" height=\\\"40\\\" patternUnits=\\\"userSpaceOnUse\\\"\\u003e\\n          \\u003cpath d=\\\"M 40 0 L 0 0 0 40\\\" fill=\\\"none\\\" stroke=\\\"#1a1b22\\\" stroke-width=\\\"1\\\"/\\u003e\\n        \\u003c/pattern\\u003e\\n        \\u003cmarker id=\\\"arrow\\\" markerWidth=\\\"8\\\" markerHeight=\\\"8\\\" refX=\\\"7\\\" refY=\\\"4\\\" orient=\\\"auto\\\"\\u003e\\n          \\u003cpath d=\\\"M0,0 L8,4 L0,8 L2,4 z\\\" fill=\\\"#4a4b55\\\" /\\u003e\\n        \\u003c/marker\\u003e\\n        \\u003cmarker id=\\\"arrow-accent\\\" markerWidth=\\\"8\\\" markerHeight=\\\"8\\\" refX=\\\"7\\\" refY=\\\"4\\\" orient=\\\"auto\\\"\\u003e\\n          \\u003cpath d=\\\"M0,0 L8,4 L0,8 L2,4 z\\\" fill=\\\"#00a3bf\\\" /\\u003e\\n        \\u003c/marker\\u003e\\n        \\u003cmarker id=\\\"arrow-amber\\\" markerWidth=\\\"8\\\" markerHeight=\\\"8\\\" refX=\\\"7\\\" refY=\\\"4\\\" orient=\\\"auto\\\"\\u003e\\n          \\u003cpath d=\\\"M0,0 L8,4 L0,8 L2,4 z\\\" fill=\\\"#b47d1b\\\" /\\u003e\\n        \\u003c/marker\\u003e\\n      \\u003c/defs\\u003e\\n\\n      \\u003c!-- Background --\\u003e\\n      \\u003crect x=\\\"0\\\" y=\\\"0\\\" width=\\\"1300\\\" height=\\\"900\\\" fill=\\\"#0a0a0f\\\" /\\u003e\\n      \\u003crect x=\\\"0\\\" y=\\\"0\\\" width=\\\"1300\\\" height=\\\"900\\\" fill=\\\"url(#grid)\\\" /\\u003e\\n\\n      \\u003c!-- Header --\\u003e\\n      \\u003cg transform=\\\"translate(40,30)\\\"\\u003e\\n        \\u003crect x=\\\"0\\\" y=\\\"2\\\" width=\\\"10\\\" height=\\\"10\\\" fill=\\\"#00a3bf\\\" transform=\\\"rotate(45,5,7)\\\" /\\u003e\\n        \\u003ctext x=\\\"22\\\" y=\\\"15\\\" font-family=\\\"'Inter', sans-serif\\\" font-size=\\\"20\\\" font-weight=\\\"500\\\" fill=\\\"#e8e8ed\\\" letter-spacing=\\\"0.08em\\\"\\u003eVERITAS\\u003c/text\\u003e\\n        \\u003ctext x=\\\"120\\\" y=\\\"15\\\" font-family=\\\"'Inter', sans-serif\\\" font-size=\\\"13\\\" font-weight=\\\"400\\\" fill=\\\"#8a8b99\\\"\\u003e— AI Counter-Disinformation Platform\\u003c/text\\u003e\\n        \\u003ctext x=\\\"22\\\" y=\\\"36\\\" font-family=\\\"'Inter', sans-serif\\\" font-size=\\\"10\\\" fill=\\\"#6a6b75\\\"\\u003eReal-time disinformation detection, attribution, and counter-narrative generation for democratic governments\\u003c/text\\u003e\\n      \\u003c/g\\u003e\\n\\n      \\u003c!-- Tier labels --\\u003e\\n      \\u003cg font-family=\\\"'Inter', sans-serif\\\" font-size=\\\"9\\\" font-weight=\\\"600\\\" fill=\\\"#6a6b75\\\" text-anchor=\\\"middle\\\" letter-spacing=\\\"0.06em\\\"\\u003e\\n        \\u003ctext x=\\\"130\\\" y=\\\"90\\\"\\u003eTIER 1 — DATA SOURCES\\u003c/text\\u003e\\n        \\u003ctext x=\\\"320\\\" y=\\\"90\\\"\\u003eTIER 2 — COLLECTION\\u003c/text\\u003e\\n        \\u003ctext x=\\\"480\\\" y=\\\"90\\\"\\u003eTIER 3 — MESSAGE BUS\\u003c/text\\u003e\\n        \\u003ctext x=\\\"660\\\" y=\\\"90\\\"\\u003eTIER 4 — AI ANALYSIS PIPELINE\\u003c/text\\u003e\\n        \\u003ctext x=\\\"870\\\" y=\\\"90\\\"\\u003eTIER 5 — KNOWLEDGE STORE\\u003c/text\\u003e\\n        \\u003ctext x=\\\"1065\\\" y=\\\"90\\\"\\u003eTIER 6 — PRODUCTION\\u003c/text\\u003e\\n        \\u003ctext x=\\\"1065\\\" y=\\\"655\\\"\\u003eTIER 7 — DELIVERY\\u003c/text\\u003e\\n      \\u003c/g\\u003e\\n\\n      \\u003c!-- Security boundary: AI Pipeline + Knowledge Store --\\u003e\\n      \\u003crect x=\\\"545\\\" y=\\\"105\\\" width=\\\"410\\\" height=\\\"430\\\" rx=\\\"2\\\" fill=\\\"none\\\" stroke=\\\"#a84646\\\" stroke-width=\\\"1\\\" stroke-dasharray=\\\"8,5\\\" opacity=\\\"0.7\\\" /\\u003e\\n      \\u003ctext x=\\\"560\\\" y=\\\"122\\\" font-family=\\\"'Inter', sans-serif\\\" font-size=\\\"9\\\" font-weight=\\\"600\\\" fill=\\\"#a84646\\\" letter-spacing=\\\"0.05em\\\"\\u003eCLASSIFIED PROCESSING BOUNDARY\\u003c/text\\u003e\\n\\n      \\u003c!-- Kafka vertical bus --\\u003e\\n      \\u003crect x=\\\"450\\\" y=\\\"145\\\" width=\\\"60\\\" height=\\\"585\\\" rx=\\\"2\\\" fill=\\\"rgba(180,125,27,0.08)\\\" /\\u003e\\n      \\u003crect x=\\\"455\\\" y=\\\"150\\\" width=\\\"50\\\" height=\\\"575\\\" rx=\\\"2\\\" fill=\\\"none\\\" stroke=\\\"#b47d1b\\\" stroke-width=\\\"1\\\" /\\u003e\\n      \\u003ctext x=\\\"480\\\" y=\\\"175\\\" font-family=\\\"'Inter', sans-serif\\\" font-size=\\\"10\\\" font-weight=\\\"600\\\" fill=\\\"#b47d1b\\\" text-anchor=\\\"middle\\\" transform=\\\"rotate(-90,480,175)\\\" letter-spacing=\\\"0.05em\\\"\\u003eAPACHE KAFKA EVENT MESH\\u003c/text\\u003e\\n      \\u003cg stroke=\\\"#b47d1b\\\" stroke-width=\\\"1\\\" opacity=\\\"0.25\\\"\\u003e\\n        \\u003cline x1=\\\"465\\\" y1=\\\"190\\\" x2=\\\"465\\\" y2=\\\"725\\\" /\\u003e\\n        \\u003cline x1=\\\"480\\\" y1=\\\"190\\\" x2=\\\"480\\\" y2=\\\"725\\\" /\\u003e\\n        \\u003cline x1=\\\"495\\\" y1=\\\"190\\\" x2=\\\"495\\\" y2=\\\"725\\\" /\\u003e\\n      \\u003c/g\\u003e\\n\\n      \\u003c!-- Helper: box --\\u003e\\n      \\u003cdefs\\u003e\\n        \\u003cstyle\\u003e\\n          .box { rx: 2; stroke-width: 1; }\\n          .box-text { font-family: 'Inter', sans-serif; font-size: 9px; font-weight: 500; letter-spacing: 0.02em; }\\n          .box-sub { font-family: 'Inter', sans-serif; font-size: 7px; font-weight: 400; fill: #8a8b99; opacity: 0.9; }\\n        \\u003c/style\\u003e\\n      \\u003c/defs\\u003e\\n\\n      \\u003c!-- Tier 1: Data Sources --\\u003e\\n      \\u003cg id=\\\"tier1\\\"\\u003e\\n        \\u003crect x=\\\"40\\\" y=\\\"145\\\" width=\\\"160\\\" height=\\\"36\\\" class=\\\"box\\\" fill=\\\"#13141a\\\" stroke=\\\"rgba(255,255,255,0.08)\\\" /\\u003e\\n        \\u003ctext x=\\\"120\\\" y=\\\"168\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#e8e8ed\\\"\\u003eTelegram Channels \\u0026amp; Groups\\u003c/text\\u003e\\n\\n        \\u003crect x=\\\"40\\\" y=\\\"195\\\" width=\\\"160\\\" height=\\\"36\\\" class=\\\"box\\\" fill=\\\"#13141a\\\" stroke=\\\"rgba(255,255,255,0.08)\\\" /\\u003e\\n        \\u003ctext x=\\\"120\\\" y=\\\"218\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#e8e8ed\\\"\\u003eX/Twitter Firehose\\u003c/text\\u003e\\n\\n        \\u003crect x=\\\"40\\\" y=\\\"245\\\" width=\\\"160\\\" height=\\\"36\\\" class=\\\"box\\\" fill=\\\"#13141a\\\" stroke=\\\"rgba(255,255,255,0.08)\\\" /\\u003e\\n        \\u003ctext x=\\\"120\\\" y=\\\"268\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#e8e8ed\\\"\\u003eTikTok Trends\\u003c/text\\u003e\\n\\n        \\u003crect x=\\\"40\\\" y=\\\"295\\\" width=\\\"160\\\" height=\\\"36\\\" class=\\\"box\\\" fill=\\\"#13141a\\\" stroke=\\\"rgba(255,255,255,0.08)\\\" /\\u003e\\n        \\u003ctext x=\\\"120\\\" y=\\\"318\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#e8e8ed\\\"\\u003eYouTube Transcripts\\u003c/text\\u003e\\n\\n        \\u003crect x=\\\"40\\\" y=\\\"345\\\" width=\\\"160\\\" height=\\\"36\\\" class=\\\"box\\\" fill=\\\"#13141a\\\" stroke=\\\"rgba(255,255,255,0.08)\\\" /\\u003e\\n        \\u003ctext x=\\\"120\\\" y=\\\"365\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#e8e8ed\\\"\\u003eNews Wire APIs\\u003c/text\\u003e\\n        \\u003ctext x=\\\"120\\\" y=\\\"376\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\"\\u003eReuters, AFP, DPA\\u003c/text\\u003e\\n\\n        \\u003crect x=\\\"40\\\" y=\\\"395\\\" width=\\\"160\\\" height=\\\"36\\\" class=\\\"box\\\" fill=\\\"#13141a\\\" stroke=\\\"rgba(255,255,255,0.08)\\\" /\\u003e\\n        \\u003ctext x=\\\"120\\\" y=\\\"415\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#e8e8ed\\\"\\u003eDark Web / Telegram Deep\\u003c/text\\u003e\\n        \\u003ctext x=\\\"120\\\" y=\\\"426\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\"\\u003eOnion / private channels\\u003c/text\\u003e\\n      \\u003c/g\\u003e\\n\\n      \\u003c!-- Tier 2: Collection (amber) --\\u003e\\n      \\u003cg id=\\\"tier2\\\"\\u003e\\n        \\u003crect x=\\\"250\\\" y=\\\"160\\\" width=\\\"160\\\" height=\\\"46\\\" class=\\\"box\\\" fill=\\\"rgba(180,125,27,0.08)\\\" stroke=\\\"#b47d1b\\\" /\\u003e\\n        \\u003ctext x=\\\"330\\\" y=\\\"182\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#e8e8ed\\\"\\u003eMulti-Platform Ingestion\\u003c/text\\u003e\\n        \\u003ctext x=\\\"330\\\" y=\\\"195\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\"\\u003eEngine (Telegram MTProto, X API)\\u003c/text\\u003e\\n\\n        \\u003crect x=\\\"250\\\" y=\\\"230\\\" width=\\\"160\\\" height=\\\"46\\\" class=\\\"box\\\" fill=\\\"rgba(180,125,27,0.08)\\\" stroke=\\\"#b47d1b\\\" /\\u003e\\n        \\u003ctext x=\\\"330\\\" y=\\\"252\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#e8e8ed\\\"\\u003eReal-time Stream Processor\\u003c/text\\u003e\\n        \\u003ctext x=\\\"330\\\" y=\\\"265\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\"\\u003eFlink / Kafka Streams\\u003c/text\\u003e\\n\\n        \\u003crect x=\\\"250\\\" y=\\\"300\\\" width=\\\"160\\\" height=\\\"46\\\" class=\\\"box\\\" fill=\\\"rgba(180,125,27,0.08)\\\" stroke=\\\"#b47d1b\\\" /\\u003e\\n        \\u003ctext x=\\\"330\\\" y=\\\"322\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#e8e8ed\\\"\\u003eMedia Transcriber\\u003c/text\\u003e\\n        \\u003ctext x=\\\"330\\\" y=\\\"335\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\"\\u003eWhisper → text, image OCR\\u003c/text\\u003e\\n\\n        \\u003crect x=\\\"250\\\" y=\\\"370\\\" width=\\\"160\\\" height=\\\"46\\\" class=\\\"box\\\" fill=\\\"rgba(180,125,27,0.08)\\\" stroke=\\\"#b47d1b\\\" /\\u003e\\n        \\u003ctext x=\\\"330\\\" y=\\\"392\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#e8e8ed\\\"\\u003eLanguage Detector \\u0026amp; Normalizer\\u003c/text\\u003e\\n        \\u003ctext x=\\\"330\\\" y=\\\"405\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\"\\u003efastText / CLD3 / transliteration\\u003c/text\\u003e\\n      \\u003c/g\\u003e\\n\\n      \\u003c!-- Tier 4: AI Analysis Pipeline (accent) --\\u003e\\n      \\u003cg id=\\\"tier4\\\"\\u003e\\n        \\u003crect x=\\\"565\\\" y=\\\"145\\\" width=\\\"175\\\" height=\\\"42\\\" class=\\\"box\\\" fill=\\\"#13141a\\\" stroke=\\\"rgba(0,163,191,0.35)\\\" /\\u003e\\n        \\u003ctext x=\\\"652\\\" y=\\\"165\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#00a3bf\\\"\\u003eNarrative Extraction LLM\\u003c/text\\u003e\\n        \\u003ctext x=\\\"652\\\" y=\\\"178\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\"\\u003efine-tuned 70B / Mixtral 8x22B\\u003c/text\\u003e\\n\\n        \\u003crect x=\\\"565\\\" y=\\\"205\\\" width=\\\"175\\\" height=\\\"42\\\" class=\\\"box\\\" fill=\\\"#13141a\\\" stroke=\\\"rgba(0,163,191,0.35)\\\" /\\u003e\\n        \\u003ctext x=\\\"652\\\" y=\\\"225\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#00a3bf\\\"\\u003eBot Coordination Detector\\u003c/text\\u003e\\n        \\u003ctext x=\\\"652\\\" y=\\\"238\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\"\\u003etemporal burst + graph clustering\\u003c/text\\u003e\\n\\n        \\u003crect x=\\\"565\\\" y=\\\"265\\\" width=\\\"175\\\" height=\\\"42\\\" class=\\\"box\\\" fill=\\\"#13141a\\\" stroke=\\\"rgba(0,163,191,0.35)\\\" /\\u003e\\n        \\u003ctext x=\\\"652\\\" y=\\\"285\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#00a3bf\\\"\\u003eState Actor Attribution Engine\\u003c/text\\u003e\\n        \\u003ctext x=\\\"652\\\" y=\\\"298\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\"\\u003eTTP fingerprint matching\\u003c/text\\u003e\\n\\n        \\u003crect x=\\\"565\\\" y=\\\"325\\\" width=\\\"175\\\" height=\\\"42\\\" class=\\\"box\\\" fill=\\\"#13141a\\\" stroke=\\\"rgba(0,163,191,0.35)\\\" /\\u003e\\n        \\u003ctext x=\\\"652\\\" y=\\\"345\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#00a3bf\\\"\\u003eLinguistic Forensic Analyzer\\u003c/text\\u003e\\n        \\u003ctext x=\\\"652\\\" y=\\\"358\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\"\\u003esyntax + idiolect signatures\\u003c/text\\u003e\\n\\n        \\u003crect x=\\\"565\\\" y=\\\"385\\\" width=\\\"175\\\" height=\\\"52\\\" class=\\\"box\\\" fill=\\\"rgba(0,163,191,0.10)\\\" stroke=\\\"#00a3bf\\\" /\\u003e\\n        \\u003ctext x=\\\"652\\\" y=\\\"405\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#00a3bf\\\"\\u003eCross-Cultural Context Model\\u003c/text\\u003e\\n        \\u003ctext x=\\\"652\\\" y=\\\"420\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\"\\u003eTurkish / Islamosphere nuances\\u003c/text\\u003e\\n        \\u003ctext x=\\\"652\\\" y=\\\"431\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\"\\u003ereligious code, honor/shame\\u003c/text\\u003e\\n\\n        \\u003crect x=\\\"565\\\" y=\\\"455\\\" width=\\\"175\\\" height=\\\"42\\\" class=\\\"box\\\" fill=\\\"#13141a\\\" stroke=\\\"rgba(0,163,191,0.35)\\\" /\\u003e\\n        \\u003ctext x=\\\"652\\\" y=\\\"475\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#00a3bf\\\"\\u003eFactuality Scorer\\u003c/text\\u003e\\n        \\u003ctext x=\\\"652\\\" y=\\\"488\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\"\\u003eclaims vs verified ground truth\\u003c/text\\u003e\\n      \\u003c/g\\u003e\\n\\n      \\u003c!-- Tier 5: Knowledge Store --\\u003e\\n      \\u003cg id=\\\"tier5\\\"\\u003e\\n        \\u003crect x=\\\"805\\\" y=\\\"145\\\" width=\\\"170\\\" height=\\\"52\\\" class=\\\"box\\\" fill=\\\"#13141a\\\" stroke=\\\"rgba(255,255,255,0.08)\\\" /\\u003e\\n        \\u003ctext x=\\\"890\\\" y=\\\"168\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#e8e8ed\\\"\\u003eCampaign Knowledge Graph\\u003c/text\\u003e\\n        \\u003ctext x=\\\"890\\\" y=\\\"183\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\"\\u003eNeo4j — actors, narratives, channels\\u003c/text\\u003e\\n\\n        \\u003crect x=\\\"805\\\" y=\\\"220\\\" width=\\\"170\\\" height=\\\"52\\\" class=\\\"box\\\" fill=\\\"#13141a\\\" stroke=\\\"rgba(255,255,255,0.08)\\\" /\\u003e\\n        \\u003ctext x=\\\"890\\\" y=\\\"243\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#e8e8ed\\\"\\u003eEvidence Vault\\u003c/text\\u003e\\n        \\u003ctext x=\\\"890\\\" y=\\\"258\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\"\\u003eimmutable, chain-of-custody\\u003c/text\\u003e\\n\\n        \\u003crect x=\\\"805\\\" y=\\\"295\\\" width=\\\"170\\\" height=\\\"52\\\" class=\\\"box\\\" fill=\\\"#13141a\\\" stroke=\\\"rgba(255,255,255,0.08)\\\" /\\u003e\\n        \\u003ctext x=\\\"890\\\" y=\\\"318\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#e8e8ed\\\"\\u003eFingerprint Database\\u003c/text\\u003e\\n        \\u003ctext x=\\\"890\\\" y=\\\"333\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\"\\u003eknown campaign signatures\\u003c/text\\u003e\\n      \\u003c/g\\u003e\\n\\n      \\u003c!-- Tier 6: Production --\\u003e\\n      \\u003cg id=\\\"tier6\\\"\\u003e\\n        \\u003crect x=\\\"985\\\" y=\\\"145\\\" width=\\\"175\\\" height=\\\"42\\\" class=\\\"box\\\" fill=\\\"#13141a\\\" stroke=\\\"rgba(255,255,255,0.08)\\\" /\\u003e\\n        \\u003ctext x=\\\"1072\\\" y=\\\"165\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#e8e8ed\\\"\\u003eReal-time Threat Dashboard\\u003c/text\\u003e\\n        \\u003ctext x=\\\"1072\\\" y=\\\"178\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\"\\u003elive campaign topology\\u003c/text\\u003e\\n\\n        \\u003crect x=\\\"985\\\" y=\\\"205\\\" width=\\\"175\\\" height=\\\"52\\\" class=\\\"box\\\" fill=\\\"#13141a\\\" stroke=\\\"rgba(255,255,255,0.08)\\\" /\\u003e\\n        \\u003ctext x=\\\"1072\\\" y=\\\"225\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#e8e8ed\\\"\\u003eAutomated Intelligence Reports\\u003c/text\\u003e\\n        \\u003ctext x=\\\"1072\\\" y=\\\"240\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\"\\u003eSTIX 2.1 / MISP format\\u003c/text\\u003e\\n\\n        \\u003crect x=\\\"985\\\" y=\\\"280\\\" width=\\\"175\\\" height=\\\"42\\\" class=\\\"box\\\" fill=\\\"#13141a\\\" stroke=\\\"rgba(255,255,255,0.08)\\\" /\\u003e\\n        \\u003ctext x=\\\"1072\\\" y=\\\"300\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#e8e8ed\\\"\\u003eCounter-Narrative Generator\\u003c/text\\u003e\\n        \\u003ctext x=\\\"1072\\\" y=\\\"313\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\"\\u003eaudience-tailored rebuttals\\u003c/text\\u003e\\n\\n        \\u003crect x=\\\"985\\\" y=\\\"345\\\" width=\\\"175\\\" height=\\\"42\\\" class=\\\"box\\\" fill=\\\"#13141a\\\" stroke=\\\"rgba(255,255,255,0.08)\\\" /\\u003e\\n        \\u003ctext x=\\\"1072\\\" y=\\\"365\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#e8e8ed\\\"\\u003eEarly Warning Alert System\\u003c/text\\u003e\\n        \\u003ctext x=\\\"1072\\\" y=\\\"378\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\"\\u003ethreshold-based + anomaly\\u003c/text\\u003e\\n      \\u003c/g\\u003e\\n\\n      \\u003c!-- Tier 7: Delivery (accent) --\\u003e\\n      \\u003cg id=\\\"tier7\\\"\\u003e\\n        \\u003crect x=\\\"985\\\" y=\\\"675\\\" width=\\\"175\\\" height=\\\"42\\\" class=\\\"box\\\" fill=\\\"#13141a\\\" stroke=\\\"rgba(0,163,191,0.35)\\\" /\\u003e\\n        \\u003ctext x=\\\"1072\\\" y=\\\"695\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#00a3bf\\\"\\u003eGovernment Secure Portal\\u003c/text\\u003e\\n        \\u003ctext x=\\\"1072\\\" y=\\\"708\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\"\\u003emTLS + SSO (SAML/OIDC)\\u003c/text\\u003e\\n\\n        \\u003crect x=\\\"985\\\" y=\\\"735\\\" width=\\\"175\\\" height=\\\"42\\\" class=\\\"box\\\" fill=\\\"#13141a\\\" stroke=\\\"rgba(0,163,191,0.35)\\\" /\\u003e\\n        \\u003ctext x=\\\"1072\\\" y=\\\"755\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#00a3bf\\\"\\u003eREST API for Platform Integration\\u003c/text\\u003e\\n        \\u003ctext x=\\\"1072\\\" y=\\\"768\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\"\\u003erate-limited, scoped keys\\u003c/text\\u003e\\n\\n        \\u003crect x=\\\"985\\\" y=\\\"795\\\" width=\\\"175\\\" height=\\\"42\\\" class=\\\"box\\\" fill=\\\"#13141a\\\" stroke=\\\"rgba(0,163,191,0.35)\\\" /\\u003e\\n        \\u003ctext x=\\\"1072\\\" y=\\\"815\\\" text-anchor=\\\"middle\\\" class=\\\"box-text\\\" fill=\\\"#00a3bf\\\"\\u003eAir-Gapped Classified Variant\\u003c/text\\u003e\\n        \\u003ctext x=\\\"1072\\\" y=\\\"828\\\" text-anchor=\\\"middle\\\" class=\\\"box-sub\\\"\\u003eoffline LLM + T5-tier hardware\\u003c/text\\u003e\\n      \\u003c/g\\u003e\\n\\n      \\u003c!-- Data flow arrows --\\u003e\\n      \\u003c!-- Tier 1 -\\u003e Tier 2 --\\u003e\\n      \\u003cg stroke=\\\"#b47d1b\\\" stroke-width=\\\"1.5\\\" marker-end=\\\"url(#arrow-amber)\\\" opacity=\\\"0.7\\\"\\u003e\\n        \\u003cline x1=\\\"200\\\" y1=\\\"163\\\" x2=\\\"250\\\" y2=\\\"183\\\" /\\u003e\\n        \\u003cline x1=\\\"200\\\" y1=\\\"213\\\" x2=\\\"250\\\" y2=\\\"233\\\" /\\u003e\\n        \\u003cline x1=\\\"200\\\" y1=\\\"263\\\" x2=\\\"250\\\" y2=\\\"253\\\" /\\u003e\\n        \\u003cline x1=\\\"200\\\" y1=\\\"313\\\" x2=\\\"250\\\" y2=\\\"313\\\" /\\u003e\\n        \\u003cline x1=\\\"200\\\" y1=\\\"363\\\" x2=\\\"250\\\" y2=\\\"343\\\" /\\u003e\\n        \\u003cline x1=\\\"200\\\" y1=\\\"413\\\" x2=\\\"250\\\" y2=\\\"393\\\" /\\u003e\\n      \\u003c/g\\u003e\\n\\n      \\u003c!-- Tier 2 -\\u003e Kafka --\\u003e\\n      \\u003cg stroke=\\\"#b47d1b\\\" stroke-width=\\\"1.5\\\" marker-end=\\\"url(#arrow-amber)\\\" opacity=\\\"0.7\\\"\\u003e\\n        \\u003cline x1=\\\"410\\\" y1=\\\"183\\\" x2=\\\"450\\\" y2=\\\"200\\\" /\\u003e\\n        \\u003cline x1=\\\"410\\\" y1=\\\"253\\\" x2=\\\"450\\\" y2=\\\"270\\\" /\\u003e\\n        \\u003cline x1=\\\"410\\\" y1=\\\"323\\\" x2=\\\"450\\\" y2=\\\"340\\\" /\\u003e\\n        \\u003cline x1=\\\"410\\\" y1=\\\"393\\\" x2=\\\"450\\\" y2=\\\"410\\\" /\\u003e\\n      \\u003c/g\\u003e\\n\\n      \\u003c!-- Kafka -\\u003e Tier 4 --\\u003e\\n      \\u003cg stroke=\\\"#b47d1b\\\" stroke-width=\\\"1.5\\\" marker-end=\\\"url(#arrow-amber)\\\" opacity=\\\"0.7\\\"\\u003e\\n        \\u003cline x1=\\\"510\\\" y1=\\\"180\\\" x2=\\\"565\\\" y2=\\\"166\\\" /\\u003e\\n        \\u003cline x1=\\\"510\\\" y1=\\\"240\\\" x2=\\\"565\\\" y2=\\\"226\\\" /\\u003e\\n        \\u003cline x1=\\\"510\\\" y1=\\\"300\\\" x2=\\\"565\\\" y2=\\\"286\\\" /\\u003e\\n        \\u003cline x1=\\\"510\\\" y1=\\\"360\\\" x2=\\\"565\\\" y2=\\\"346\\\" /\\u003e\\n        \\u003cline x1=\\\"510\\\" y1=\\\"420\\\" x2=\\\"565\\\" y2=\\\"411\\\" /\\u003e\\n        \\u003cline x1=\\\"510\\\" y1=\\\"480\\\" x2=\\\"565\\\" y2=\\\"466\\\" /\\u003e\\n      \\u003c/g\\u003e\\n\\n      \\u003c!-- Tier 4 -\\u003e Tier 5 --\\u003e\\n      \\u003cg stroke=\\\"#00a3bf\\\" stroke-width=\\\"1.5\\\" marker-end=\\\"url(#arrow-accent)\\\" opacity=\\\"0.6\\\"\\u003e\\n        \\u003cline x1=\\\"740\\\" y1=\\\"166\\\" x2=\\\"805\\\" y2=\\\"171\\\" /\\u003e\\n        \\u003cline x1=\\\"740\\\" y1=\\\"226\\\" x2=\\\"805\\\" y2=\\\"246\\\" /\\u003e\\n        \\u003cline x1=\\\"740\\\" y1=\\\"286\\\" x2=\\\"805\\\" y2=\\\"321\\\" /\\u003e\\n        \\u003cline x1=\\\"740\\\" y1=\\\"411\\\" x2=\\\"805\\\" y2=\\\"296\\\" /\\u003e\\n        \\u003cline x1=\\\"740\\\" y1=\\\"476\\\" x2=\\\"805\\\" y2=\\\"331\\\" /\\u003e\\n      \\u003c/g\\u003e\\n\\n      \\u003c!-- Tier 5 -\\u003e Tier 6 --\\u003e\\n      \\u003cg stroke=\\\"#00a3bf\\\" stroke-width=\\\"1.5\\\" marker-end=\\\"url(#arrow-accent)\\\" opacity=\\\"0.6\\\"\\u003e\\n        \\u003cline x1=\\\"975\\\" y1=\\\"171\\\" x2=\\\"985\\\" y2=\\\"166\\\" /\\u003e\\n        \\u003cline x1=\\\"975\\\" y1=\\\"246\\\" x2=\\\"985\\\" y2=\\\"231\\\" /\\u003e\\n        \\u003cline x1=\\\"975\\\" y1=\\\"321\\\" x2=\\\"985\\\" y2=\\\"301\\\" /\\u003e\\n        \\u003cline x1=\\\"975\\\" y1=\\\"321\\\" x2=\\\"985\\\" y2=\\\"366\\\" /\\u003e\\n      \\u003c/g\\u003e\\n\\n      \\u003c!-- Tier 6 -\\u003e Tier 7 (dashed auth-flow) --\\u003e\\n      \\u003cg stroke=\\\"#00a3bf\\\" stroke-width=\\\"1.5\\\" stroke-dasharray=\\\"6,4\\\" marker-end=\\\"url(#arrow-accent)\\\" opacity=\\\"0.7\\\"\\u003e\\n        \\u003cline x1=\\\"1072\\\" y1=\\\"505\\\" x2=\\\"1072\\\" y2=\\\"675\\\" /\\u003e\\n      \\u003c/g\\u003e\\n      \\u003ctext x=\\\"1095\\\" y=\\\"600\\\" font-family=\\\"'Inter', sans-serif\\\" font-size=\\\"9\\\" fill=\\\"#00a3bf\\\" transform=\\\"rotate(90,1095,600)\\\" letter-spacing=\\\"0.05em\\\"\\u003esecure channel\\u003c/text\\u003e\\n\\n      \\u003c!-- Feedback loop: Knowledge Store -\\u003e AI Pipeline --\\u003e\\n      \\u003cpath d=\\\"M 805 380 Q 740 420 740 350\\\" fill=\\\"none\\\" stroke=\\\"#00a3bf\\\" stroke-width=\\\"1.5\\\" stroke-dasharray=\\\"4,4\\\" marker-end=\\\"url(#arrow-accent)\\\" opacity=\\\"0.5\\\" /\\u003e\\n      \\u003ctext x=\\\"770\\\" y=\\\"410\\\" font-family=\\\"'Inter', sans-serif\\\" font-size=\\\"8\\\" fill=\\\"#00a3bf\\\"\\u003efingerprints\\u003c/text\\u003e\\n\\n      \\u003c!-- Legend (bottom-right) --\\u003e\\n      \\u003cg transform=\\\"translate(1080, 520)\\\"\\u003e\\n        \\u003crect x=\\\"0\\\" y=\\\"0\\\" width=\\\"190\\\" height=\\\"110\\\" rx=\\\"2\\\" fill=\\\"#13141a\\\" stroke=\\\"rgba(255,255,255,0.08)\\\" /\\u003e\\n        \\u003ctext x=\\\"10\\\" y=\\\"18\\\" font-family=\\\"'Inter', sans-serif\\\" font-size=\\\"10\\\" font-weight=\\\"600\\\" fill=\\\"#e8e8ed\\\" letter-spacing=\\\"0.04em\\\"\\u003eLEGEND\\u003c/text\\u003e\\n\\n        \\u003crect x=\\\"10\\\" y=\\\"28\\\" width=\\\"10\\\" height=\\\"10\\\" rx=\\\"1\\\" fill=\\\"#13141a\\\" stroke=\\\"rgba(255,255,255,0.12)\\\" /\\u003e\\n        \\u003ctext x=\\\"26\\\" y=\\\"37\\\" font-family=\\\"'Inter', sans-serif\\\" font-size=\\\"8\\\" fill=\\\"#8a8b99\\\"\\u003eExternal Data Sources\\u003c/text\\u003e\\n\\n        \\u003crect x=\\\"10\\\" y=\\\"44\\\" width=\\\"10\\\" height=\\\"10\\\" rx=\\\"1\\\" fill=\\\"rgba(180,125,27,0.2)\\\" stroke=\\\"#b47d1b\\\" /\\u003e\\n        \\u003ctext x=\\\"26\\\" y=\\\"53\\\" font-family=\\\"'Inter', sans-serif\\\" font-size=\\\"8\\\" fill=\\\"#8a8b99\\\"\\u003eCollection / Ingestion\\u003c/text\\u003e\\n\\n        \\u003crect x=\\\"10\\\" y=\\\"60\\\" width=\\\"10\\\" height=\\\"10\\\" rx=\\\"1\\\" fill=\\\"rgba(0,163,191,0.15)\\\" stroke=\\\"#00a3bf\\\" /\\u003e\\n        \\u003ctext x=\\\"26\\\" y=\\\"69\\\" font-family=\\\"'Inter', sans-serif\\\" font-size=\\\"8\\\" fill=\\\"#8a8b99\\\"\\u003eAI / ML Processing\\u003c/text\\u003e\\n\\n        \\u003crect x=\\\"100\\\" y=\\\"28\\\" width=\\\"10\\\" height=\\\"10\\\" rx=\\\"1\\\" fill=\\\"#13141a\\\" stroke=\\\"rgba(255,255,255,0.12)\\\" /\\u003e\\n        \\u003ctext x=\\\"116\\\" y=\\\"37\\\" font-family=\\\"'Inter', sans-serif\\\" font-size=\\\"8\\\" fill=\\\"#8a8b99\\\"\\u003eKnowledge Store\\u003c/text\\u003e\\n\\n        \\u003crect x=\\\"100\\\" y=\\\"44\\\" width=\\\"10\\\" height=\\\"10\\\" rx=\\\"1\\\" fill=\\\"#13141a\\\" stroke=\\\"rgba(255,255,255,0.12)\\\" /\\u003e\\n        \\u003ctext x=\\\"116\\\" y=\\\"53\\\" font-family=\\\"'Inter', sans-serif\\\" font-size=\\\"8\\\" fill=\\\"#8a8b99\\\"\\u003eProduction\\u003c/text\\u003e\\n\\n        \\u003crect x=\\\"100\\\" y=\\\"60\\\" width=\\\"10\\\" height=\\\"10\\\" rx=\\\"1\\\" fill=\\\"rgba(0,163,191,0.15)\\\" stroke=\\\"#00a3bf\\\" /\\u003e\\n        \\u003ctext x=\\\"116\\\" y=\\\"69\\\" font-family=\\\"'Inter', sans-serif\\\" font-size=\\\"8\\\" fill=\\\"#8a8b99\\\"\\u003eDelivery / API\\u003c/text\\u003e\\n\\n        \\u003crect x=\\\"10\\\" y=\\\"76\\\" width=\\\"10\\\" height=\\\"10\\\" rx=\\\"1\\\" fill=\\\"rgba(168,70,70,0.12)\\\" stroke=\\\"#a84646\\\" /\\u003e\\n        \\u003ctext x=\\\"26\\\" y=\\\"85\\\" font-family=\\\"'Inter', sans-serif\\\" font-size=\\\"8\\\" fill=\\\"#8a8b99\\\"\\u003eClassified Boundary\\u003c/text\\u003e\\n\\n        \\u003cline x1=\\\"10\\\" y1=\\\"96\\\" x2=\\\"30\\\" y2=\\\"96\\\" stroke=\\\"#00a3bf\\\" stroke-width=\\\"1.5\\\" stroke-dasharray=\\\"4,3\\\" /\\u003e\\n        \\u003ctext x=\\\"36\\\" y=\\\"100\\\" font-family=\\\"'Inter', sans-serif\\\" font-size=\\\"8\\\" fill=\\\"#8a8b99\\\"\\u003eauth flow\\u003c/text\\u003e\\n      \\u003c/g\\u003e\\n\\n      \\u003c!-- Info cards below diagram --\\u003e\\n      \\u003cg transform=\\\"translate(40, 760)\\\"\\u003e\\n        \\u003crect x=\\\"0\\\" y=\\\"0\\\" width=\\\"390\\\" height=\\\"110\\\" rx=\\\"2\\\" fill=\\\"#13141a\\\" stroke=\\\"rgba(255,255,255,0.08)\\\" /\\u003e\\n        \\u003ctext x=\\\"15\\\" y=\\\"22\\\" font-family=\\\"'Inter', sans-serif\\\" font-size=\\\"11\\\" font-weight=\\\"600\\\" fill=\\\"#e8e8ed\\\" letter-spacing=\\\"0.03em\\\"\\u003eDetection Pipeline\\u003c/text\\u003e\\n        \\u003ctext x=\\\"15\\\" y=\\\"42\\\" font-family=\\\"'Inter', sans-serif\\\" font-size=\\\"8\\\" fill=\\\"#8a8b99\\\"\\u003e\\n          \\u003ctspan x=\\\"15\\\" dy=\\\"0\\\"\\u003eRaw content is normalized, transcribed, and language-\\u003c/tspan\\u003e\\n          \\u003ctspan x=\\\"15\\\" dy=\\\"14\\\"\\u003etagged. Burst detection identifies coordinated posting;\\u003c/tspan\\u003e\\n          \\u003ctspan x=\\\"15\\\" dy=\\\"14\\\"\\u003eLLMs extract narratives and score factuality against\\u003c/tspan\\u003e\\n          \\u003ctspan x=\\\"15\\\" dy=\\\"14\\\"\\u003eground-truth databases. Anomaly alerts fire within 90s.\\u003c/tspan\\u003e\\n        \\u003c/text\\u003e\\n\\n        \\u003crect x=\\\"420\\\" y=\\\"0\\\" width=\\\"390\\\" height=\\\"110\\\" rx=\\\"2\\\" fill=\\\"#13141a\\\" stroke=\\\"rgba(255,255,255,0.08)\\\" /\\u003e\\n        \\u003ctext x=\\\"435\\\" y=\\\"22\\\" font-family=\\\"'Inter', sans-serif\\\" font-size=\\\"11\\\" font-weight=\\\"600\\\" fill=\\\"#e8e8ed\\\" letter-spacing=\\\"0.03em\\\"\\u003eAttribution Methodology\\u003c/text\\u003e\\n        \\u003ctext x=\\\"435\\\" y=\\\"42\\\" font-family=\\\"'Inter', sans-serif\\\" font-size=\\\"8\\\" fill=\\\"#8a8b99\\\"\\u003e\\n          \\u003ctspan x=\\\"435\\\" dy=\\\"0\\\"\\u003eLinguistic forensics + TTP fingerprints + infrastructure\\u003c/tspan\\u003e\\n          \\u003ctspan x=\\\"435\\\" dy=\\\"14\\\"\\u003eoverlap build an evidence chain. The Cross-Cultural\\u003c/tspan\\u003e\\n          \\u003ctspan x=\\\"435\\\" dy=\\\"14\\\"\\u003eContext Model flags native-speaker markers that Western\\u003c/tspan\\u003e\\n          \\u003ctspan x=\\\"435\\\" dy=\\\"14\\\"\\u003etools miss. Confidence scores are expressed per STIX 2.1.\\u003c/tspan\\u003e\\n        \\u003c/text\\u003e\\n\\n        \\u003crect x=\\\"840\\\" y=\\\"0\\\" width=\\\"320\\\" height=\\\"110\\\" rx=\\\"2\\\" fill=\\\"#13141a\\\" stroke=\\\"rgba(255,255,255,0.08)\\\" /\\u003e\\n        \\u003ctext x=\\\"855\\\" y=\\\"22\\\" font-family=\\\"'Inter', sans-serif\\\" font-size=\\\"11\\\" font-weight=\\\"600\\\" fill=\\\"#e8e8ed\\\" letter-spacing=\\\"0.03em\\\"\\u003eDeployment Models\\u003c/text\\u003e\\n        \\u003ctext x=\\\"855\\\" y=\\\"42\\\" font-family=\\\"'Inter', sans-serif\\\" font-size=\\\"8\\\" fill=\\\"#8a8b99\\\"\\u003e\\n          \\u003ctspan x=\\\"855\\\" dy=\\\"0\\\"\\u003e1. SaaS (EU-hosted, GDPR)\\u003c/tspan\\u003e\\n          \\u003ctspan x=\\\"855\\\" dy=\\\"14\\\"\\u003e2. On-premise government stack\\u003c/tspan\\u003e\\n          \\u003ctspan x=\\\"855\\\" dy=\\\"14\\\"\\u003e3. Air-gapped classified variant\\u003c/tspan\\u003e\\n          \\u003ctspan x=\\\"855\\\" dy=\\\"14\\\"\\u003eAll models export STIX/MISP and REST.\\u003c/tspan\\u003e\\n        \\u003c/text\\u003e\\n      \\u003c/g\\u003e\\n\\n      \\u003c!-- Footer / identifiers --\\u003e\\n      \\u003ctext x=\\\"1240\\\" y=\\\"745\\\" font-family=\\\"'Inter', sans-serif\\\" font-size=\\\"8\\\" fill=\\\"#4a4b55\\\" text-anchor=\\\"end\\\" letter-spacing=\\\"0.04em\\\"\\u003eVERITAS ARCH v1.0\\u003c/text\\u003e\\n    \\u003c/svg\\u003e\\n      \\u003c/div\\u003e\\n      \\u003ch3\\u003eComponent Breakdown\\u003c/h3\\u003e\\n      \\u003ctable\\u003e\\n        \\u003ctr\\u003e\\u003cth\\u003eTier\\u003c/th\\u003e\\u003cth\\u003eComponent\\u003c/th\\u003e\\u003cth\\u003eTechnology\\u003c/th\\u003e\\u003cth\\u003ePurpose\\u003c/th\\u003e\\u003c/tr\\u003e\\n        \\u003ctr\\u003e\\u003ctd\\u003eSources\\u003c/td\\u003e\\u003ctd\\u003eTelegram, X, TikTok, YouTube, News Wires, Dark Web\\u003c/td\\u003e\\u003ctd\\u003eMTProto, X API v2, scraping mesh, RSS/API, Tor/onion\\u003c/td\\u003e\\u003ctd\\u003eSignal acquisition\\u003c/td\\u003e\\u003c/tr\\u003e\\n        \\u003ctr\\u003e\\u003ctd\\u003eCollection\\u003c/td\\u003e\\u003ctd\\u003eIngestion Engine, Stream Processor, Transcriber, Normalizer\\u003c/td\\u003e\\u003ctd\\u003ePython/FastAPI, Apache Flink, OpenAI Whisper, Tesseract, fastText/CLD3\\u003c/td\\u003e\\u003ctd\\u003eNormalize and enrich raw content\\u003c/td\\u003e\\u003c/tr\\u003e\\n        \\u003ctr\\u003e\\u003ctd\\u003eBus\\u003c/td\\u003e\\u003ctd\\u003eApache Kafka Event Mesh\\u003c/td\\u003e\\u003ctd\\u003eKafka + Kafka Streams\\u003c/td\\u003e\\u003ctd\\u003eDurable, ordered, replayable event routing\\u003c/td\\u003e\\u003c/tr\\u003e\\n        \\u003ctr\\u003e\\u003ctd\\u003eAI Pipeline\\u003c/td\\u003e\\u003ctd\\u003eNarrative LLM, Bot Detector, Attribution Engine, Forensic Analyzer, Context Model, Factuality Scorer\\u003c/td\\u003e\\u003ctd\\u003eMixtral 8x22B / LLaMA-3 70B fine-tunes, scikit-learn/xgboost, Neo4j GDS, custom embeddings\\u003c/td\\u003e\\u003ctd\\u003eIntelligence extraction\\u003c/td\\u003e\\u003c/tr\\u003e\\n        \\u003ctr\\u003e\\u003ctd\\u003eKnowledge\\u003c/td\\u003e\\u003ctd\\u003eCampaign KG, Evidence Vault, Fingerprint DB\\u003c/td\\u003e\\u003ctd\\u003eNeo4j, immudb/Amazon QLDB, PostgreSQL\\u003c/td\\u003e\\u003ctd\\u003ePersistent, queryable, auditable memory\\u003c/td\\u003e\\u003c/tr\\u003e\\n        \\u003ctr\\u003e\\u003ctd\\u003eProduction\\u003c/td\\u003e\\u003ctd\\u003eDashboard, Reports, Counter-Narrative, Alerts\\u003c/td\\u003e\\u003ctd\\u003eReact/TypeScript, Python, STIX2 lib, MISP\\u003c/td\\u003e\\u003ctd\\u003eActionable outputs\\u003c/td\\u003e\\u003c/tr\\u003e\\n        \\u003ctr\\u003e\\u003ctd\\u003eDelivery\\u003c/td\\u003e\\u003ctd\\u003ePortal, API, Air-Gapped Variant\\u003c/td\\u003e\\u003ctd\\u003eFastAPI, Keycloak/Authentik, Offline LLM on classified hardware\\u003c/td\\u003e\\u003ctd\\u003eSecure access\\u003c/td\\u003e\\u003c/tr\\u003e\\n      \\u003c/table\\u003e\\n      \\u003cdiv class=\\\"card\\\"\\u003e\\n        \\u003ch3\\u003eWhy Kafka over RabbitMQ?\\u003c/h3\\u003e\\n        \\u003cp\\u003eVERITAS is a \\u003cstrong\\u003elog-centric system\\u003c/strong\\u003e, not a job queue. Kafka provides the high throughput needed for tens of thousands of posts per minute, long-term replay for investigations, per-channel partition ordering for temporal coordination detection, and independent consumers that do not block each other. RabbitMQ is excellent for complex task routing but less suitable for log retention, high fan-out replay, and backpressure during burst events.\\u003c/p\\u003e\\n      \\u003c/div\\u003e\\n      \\u003cdiv class=\\\"card\\\"\\u003e\\n        \\u003ch3\\u003eWhy Neo4j over PostgreSQL for the Graph?\\u003c/h3\\u003e\\n        \\u003cp\\u003eThe core intelligence object in VERITAS is a \\u003cstrong\\u003ecampaign graph\\u003c/strong\\u003e: actors post through channels, channels amplify narratives, narratives share media hashes, and infrastructure overlaps across campaigns. Native graph queries — “Find all channels that posted the same synthetic image within 30 minutes” or “What is the shortest path from this proxy channel to a known state actor TTP?” — are expensive in relational databases. Neo4j GDS provides performant community detection, similarity scoring, and pattern matching. PostgreSQL remains for structured evidence metadata and tenant management.\\u003c/p\\u003e\\n      \\u003c/div\\u003e\\n      \\u003cdiv class=\\\"card\\\"\\u003e\\n        \\u003ch3\\u003eLLM Choices for Multi-Language\\u003c/h3\\u003e\\n        \\u003cul\\u003e\\n          \\u003cli\\u003e\\u003cstrong\\u003eBase model:\\u003c/strong\\u003e Mixtral 8x22B or LLaMA-3 70B fine-tuned on multilingual disinformation datasets (German, Turkish, Arabic, English, Kurdish, Russian).\\u003c/li\\u003e\\n          \\u003cli\\u003e\\u003cstrong\\u003eReasoning / attribution:\\u003c/strong\\u003e Smaller fine-tuned models (13B–34B) where latency matters, such as bot coordination and first-pass classification.\\u003c/li\\u003e\\n          \\u003cli\\u003e\\u003cstrong\\u003eEmbedding model:\\u003c/strong\\u003e Multilingual E5 or a domain-tuned contrastive model for semantic search across languages and dialects.\\u003c/li\\u003e\\n          \\u003cli\\u003e\\u003cstrong\\u003eWhisper:\\u003c/strong\\u003e Audio/video transcription across Arabic, Turkish, Kurdish, and Russian.\\u003c/li\\u003e\\n        \\u003c/ul\\u003e\\n        \\u003cp\\u003eThe Cross-Cultural Context Model is separately trained/fine-tuned on native-speaker annotations, operating as a gating classifier and explanation generator alongside the main LLM.\\u003c/p\\u003e\\n      \\u003c/div\\u003e\\n    \\u003c/section\\u003e\\n\\n    \\u003csection id=\\\"ai-pipeline\\\"\\u003e\\n      \\u003ch2 data-num=\\\"04\\\"\\u003eAI/ML Pipeline Deep-Dive\\u003c/h2\\u003e\\n      \\u003cp class=\\\"lead\\\"\\u003eFine-tuned multilingual models, forensic linguistics, and probabilistic attribution scoring.\\u003c/p\\u003e\\n\\n      \\u003cdiv class=\\\"card\\\"\\u003e\\n        \\u003ch3\\u003eNarrative Extraction LLM\\u003c/h3\\u003e\\n        \\u003cp\\u003eThe Narrative Extraction LLM transforms a cluster of related posts into a structured narrative object. It is fine-tuned on labeled influence-operation narratives, with special attention to claim decontextualization — taking a real photo or event and assigning a false narrative wrapper.\\u003c/p\\u003e\\n        \\u003cpre\\u003e\\u003ccode\\u003e{\\n  \\\"narrative_id\\\": \\\"narr_2026_0612_a\\\",\\n  \\\"headline\\\": \\\"NATO-supplied weapons used against civilians in Donbas\\\",\\n  \\\"claims\\\": [...],\\n  \\\"target_audience\\\": [\\\"DE far-left\\\", \\\"TR nationalist\\\"],\\n  \\\"emotional_frames\\\": [\\\"outrage\\\", \\\"betrayal\\\"],\\n  \\\"source_languages\\\": [\\\"de\\\", \\\"tr\\\"],\\n  \\\"confidence\\\": 0.87\\n}\\u003c/code\\u003e\\u003c/pre\\u003e\\n      \\u003c/div\\u003e\\n\\n      \\u003cdiv class=\\\"card\\\"\\u003e\\n        \\u003ch3\\u003eBot Coordination Detector\\u003c/h3\\u003e\\n        \\u003cp\\u003eCoordination is detected by combining three signals:\\u003c/p\\u003e\\n        \\u003col\\u003e\\n          \\u003cli\\u003e\\u003cstrong\\u003eTemporal burst:\\u003c/strong\\u003e A set of accounts/channels posts semantically similar content within a short window, measured via inter-post time distribution and a Poisson burst test.\\u003c/li\\u003e\\n          \\u003cli\\u003e\\u003cstrong\\u003eGraph clustering:\\u003c/strong\\u003e Accounts that repeatedly co-amplify the same URLs, hashtags, or media hashes within a sliding window form a coordination graph; Leiden community detection partitions it.\\u003c/li\\u003e\\n          \\u003cli\\u003e\\u003cstrong\\u003eContent similarity:\\u003c/strong\\u003e Multilingual embeddings cluster near-duplicate or template-variant content, even when translated or paraphrased.\\u003c/li\\u003e\\n        \\u003c/ol\\u003e\\n        \\u003cpre\\u003e\\u003ccode\\u003eS_coord = α · burst_score + β · graph_density + γ · content_similarity + δ · temporal_entropy_penalty\\n\\nTypical threshold for analyst review: S_coord \\u0026gt; 0.75\\u003c/code\\u003e\\u003c/pre\\u003e\\n      \\u003c/div\\u003e\\n\\n      \\u003cdiv class=\\\"card\\\"\\u003e\\n        \\u003ch3\\u003eAttribution Methodology\\u003c/h3\\u003e\\n        \\u003cp\\u003eAttribution is probabilistic and evidence-based, not deterministic. The State Actor Attribution Engine evaluates:\\u003c/p\\u003e\\n        \\u003cul\\u003e\\n          \\u003cli\\u003e\\u003cstrong\\u003eTTP match:\\u003c/strong\\u003e Posting schedule, URL shortener pattern, media production style, or channel-naming convention vs. known fingerprints.\\u003c/li\\u003e\\n          \\u003cli\\u003e\\u003cstrong\\u003eInfrastructure overlap:\\u003c/strong\\u003e Shared phone-number prefixes, email domains, wallet addresses, hosting ASNs, or proxy channel admin patterns.\\u003c/li\\u003e\\n          \\u003cli\\u003e\\u003cstrong\\u003eLinguistic forensics:\\u003c/strong\\u003e Idiolect, syntactic preferences, translation artifacts, and calque patterns suggest origin language or translation chain.\\u003c/li\\u003e\\n          \\u003cli\\u003e\\u003cstrong\\u003eGeopolitical intent mapping:\\u003c/strong\\u003e Does the narrative serve a known adversarial strategic objective?\\u003c/li\\u003e\\n        \\u003c/ul\\u003e\\n        \\u003cp\\u003eOutput is a structured STIX 2.1 Threat Actor object with a confidence score, alternative hypotheses, and an evidence list.\\u003c/p\\u003e\\n      \\u003c/div\\u003e\\n\\n      \\u003cdiv class=\\\"card\\\"\\u003e\\n        \\u003ch3\\u003eFactuality Scorer\\u003c/h3\\u003e\\n        \\u003cp\\u003eClaims extracted by the Narrative LLM are matched against verified ground-truth databases (fact-checkers, government sources, trusted wire services), previously adjudicated claims in the Evidence Vault, and multimedia provenance (reverse image search, video keyframe matching, metadata forensics). Output is a score from 0 (fabricated) to 1 (verified), plus conflicting sources and an uncertainty flag when ground truth is unavailable.\\u003c/p\\u003e\\n      \\u003c/div\\u003e\\n    \\u003c/section\\u003e\\n\\n    \\u003csection id=\\\"context-model\\\" class=\\\"card wedge\\\"\\u003e\\n      \\u003ch2 data-num=\\\"05\\\"\\u003eCross-Cultural Context Model\\u003c/h2\\u003e\\n      \\u003cp class=\\\"lead\\\"\\u003eThis is VERITAS's primary technical wedge. Western tools fail on Turkish/Islamosphere content because they lack a cultural-semantic layer.\\u003c/p\\u003e\\n\\n      \\u003cp\\u003eExamples where context changes meaning:\\u003c/p\\u003e\\n      \\u003cul\\u003e\\n        \\u003cli\\u003eA post discussing the \\\"martyrs of Gaza\\\" in a specific historical register may be organic solidarity, imported incitement, or a recruitment dog-whistle. The difference depends on timing, surrounding hashtags, channel history, and audience replies.\\u003c/li\\u003e\\n        \\u003cli\\u003eReferences to \\\"Srebrenica,\\\" \\\"Andalus,\\\" or \\\"the Crusades\\\" can function as coded calls to action within diaspora communities.\\u003c/li\\u003e\\n        \\u003cli\\u003eHonor/shame framing (\\\"the state humiliated our community\\\") drives virality differently than individual-rights framing common in English-language discourse.\\u003c/li\\u003e\\n        \\u003cli\\u003eRegional code words such as \\\"deep state\\\" (\\u003cem\\u003ederin devlet\\u003c/em\\u003e), \\\"parallel structure,\\\" or \\\"traitors to the nation\\\" carry different valences in Turkish political memory than literal translations suggest.\\u003c/li\\u003e\\n      \\u003c/ul\\u003e\\n\\n      \\u003ch3\\u003eTraining Data \\u0026amp; Taxonomies\\u003c/h3\\u003e\\n      \\u003cul\\u003e\\n        \\u003cli\\u003eNative-annotated datasets of Turkish, Arabic dialect, Kurdish, Persian, and Urdu disinformation.\\u003c/li\\u003e\\n        \\u003cli\\u003eHistorical grievance and religious reference lexicons with region-specific sense tags.\\u003c/li\\u003e\\n        \\u003cli\\u003eHonor/shame, kinship, and sectarian framing taxonomies.\\u003c/li\\u003e\\n        \\u003cli\\u003eTemporal context: what events are happening now that make a previously benign reference inflammatory.\\u003c/li\\u003e\\n      \\u003c/ul\\u003e\\n\\n      \\u003ch3\\u003eClassifier + Explanation Generator\\u003c/h3\\u003e\\n      \\u003cp\\u003eThe model operates as both a classifier and an explanation generator. When it flags content, it outputs a human-readable rationale — for example:\\u003c/p\\u003e\\n      \\u003cblockquote\\u003e\\n        \\\"This phrase is a known Iranian proxy framing device used after mosque attacks; combined with the hashtag cluster and 45-minute post timing, it indicates imported incitement rather than organic grief.\\\"\\n      \\u003c/blockquote\\u003e\\n      \\u003cp\\u003eThis is why VERITAS can detect campaigns that GPT-4 classifies as \\\"benign religious discussion.\\\"\\u003c/p\\u003e\\n    \\u003c/section\\u003e\\n\\n    \\u003csection id=\\\"attribution\\\"\\u003e\\n      \\u003ch2 data-num=\\\"06\\\"\\u003eAttribution Framework\\u003c/h2\\u003e\\n      \\u003cp class=\\\"lead\\\"\\u003eHow we go from \\\"this is fake\\\" to \\\"this is FSB Unit 54777 operating through proxy channels in Iran.\\\"\\u003c/p\\u003e\\n\\n      \\u003ch3\\u003eStage 1 — Campaign Detection\\u003c/h3\\u003e\\n      \\u003cp\\u003eA coordinated cluster is identified. We know a set of channels/accounts are pushing a consistent false narrative in a synchronized way.\\u003c/p\\u003e\\n\\n      \\u003ch3\\u003eStage 2 — Infrastructure Fingerprinting\\u003c/h3\\u003e\\n      \\u003cp\\u003eShared infrastructure is extracted: Telegram channel admin patterns, X account registration metadata, linked websites, URL shorteners, hosting providers, cryptocurrency donation addresses, and phone numbers exposed in channel metadata. This is compared to the Fingerprint Database.\\u003c/p\\u003e\\n\\n      \\u003ch3\\u003eStage 3 — Linguistic Origin\\u003c/h3\\u003e\\n      \\u003cp\\u003eThe Linguistic Forensic Analyzer and Cross-Cultural Context Model identify native-language markers of the \\u003cem\\u003eauthor\\u003c/em\\u003e (not the target audience), translation artifacts indicating content was produced in one language and translated into another, and cultural framing suggesting a specific origin actor (e.g., IRGC-style anti-imperialist religious framing vs. FSB-style \\\"decadent West\\\" framing).\\u003c/p\\u003e\\n\\n      \\u003ch3\\u003eStage 4 — TTP Correlation\\u003c/h3\\u003e\\n      \\u003cp\\u003eObserved tactics are matched against known actor profiles: GRU Unit 29155, FSB Center 16 / Unit 54777, Iranian IOPI / IRA, Chinese MSS proxy networks. Matches are scored across dozens of indicators.\\u003c/p\\u003e\\n\\n      \\u003ch3\\u003eStage 5 — Confidence Assessment\\u003c/h3\\u003e\\n      \\u003cpre\\u003e\\u003ccode\\u003e{\\n  \\\"attribution_id\\\": \\\"attr_2026_0612_b\\\",\\n  \\\"primary_hypothesis\\\": {\\n    \\\"actor\\\": \\\"FSB Unit 54777 proxy operation\\\",\\n    \\\"proxy_infrastructure\\\": \\\"Iran-based Telegram network\\\",\\n    \\\"confidence\\\": 0.72\\n  },\\n  \\\"alternative_hypotheses\\\": [...],\\n  \\\"evidence_chain\\\": [...],\\n  \\\"uncertainties\\\": [\\\"no direct IP/ASN overlap yet\\\", \\\"voice-over artist unidentified\\\"]\\n}\\u003c/code\\u003e\\u003c/pre\\u003e\\n      \\u003cp\\u003eAnalysts can accept, reject, or adjust hypotheses. Each decision feeds back into model training.\\u003c/p\\u003e\\n    \\u003c/section\\u003e\\n\\n    \\u003csection id=\\\"sources\\\"\\u003e\\n      \\u003ch2 data-num=\\\"07\\\"\\u003eData Sources \\u0026amp; Collection\\u003c/h2\\u003e\\n      \\u003cp class=\\\"lead\\\"\\u003eMulti-platform, multi-modal, ethically scoped collection built for European threat monitoring.\\u003c/p\\u003e\\n\\n      \\u003cdiv class=\\\"card\\\"\\u003e\\n        \\u003ch3\\u003eTelegram\\u003c/h3\\u003e\\n        \\u003cp\\u003eThe dominant platform for far-right, jihadist, state-proxy, and diaspora influence networks in Germany, Turkey, and the broader Islamosphere. Collection uses MTProto-based clients, channel monitoring via public invite links, and metadata extraction from forwarded-message chains. Private groups require lawful or consensual access; the SaaS deployment does not attempt unauthorized collection.\\u003c/p\\u003e\\n      \\u003c/div\\u003e\\n\\n      \\u003cdiv class=\\\"card\\\"\\u003e\\n        \\u003ch3\\u003eX / Twitter\\u003c/h3\\u003e\\n        \\u003cp\\u003eX API v2 provides filtered stream access and historical search, but coverage is limited by cost tiers and rate limits. VERITAS augments API data with compliant public sampling and engagement metadata. The platform remains valuable for real-time narrative seeding and journalist/policy-maker amplification.\\u003c/p\\u003e\\n      \\u003c/div\\u003e\\n\\n      \\u003cdiv class=\\\"card\\\"\\u003e\\n        \\u003ch3\\u003eTikTok\\u003c/h3\\u003e\\n        \\u003cp\\u003eIncreasingly used for short-form incitement and youth-targeting campaigns. Collection uses a rotating residential-proxy research scraping mesh, video download, Whisper transcription, and OCR on frames. Ethical and legal compliance is maintained; no unauthorized private accounts are targeted.\\u003c/p\\u003e\\n      \\u003c/div\\u003e\\n\\n      \\u003cdiv class=\\\"card\\\"\\u003e\\n        \\u003ch3\\u003eYouTube\\u003c/h3\\u003e\\n        \\u003cp\\u003eLong-form video is a laundering channel: false narratives start in Telegram/TikTok, then are legitimized via YouTube \\\"analysis\\\" videos. Collection focuses on transcripts (Whisper), comments, channel-level metadata, and recommendation-graph exploration.\\u003c/p\\u003e\\n      \\u003c/div\\u003e\\n\\n      \\u003cdiv class=\\\"card\\\"\\u003e\\n        \\u003ch3\\u003eNews Wires\\u003c/h3\\u003e\\n        \\u003cp\\u003eLicensed feeds from Reuters, AFP, and DPA serve two roles: (1) ground-truth reference for factuality scoring, and (2) early indicators of real events that adversaries will later miscontextualize.\\u003c/p\\u003e\\n      \\u003c/div\\u003e\\n\\n      \\u003cdiv class=\\\"card\\\"\\u003e\\n        \\u003ch3\\u003eDark Web / Telegram Deep\\u003c/h3\\u003e\\n        \\u003cp\\u003eOnion forums, private Telegram invite-only channels, and closed messaging groups are sources for campaign pre-seeding, synthetic-media tooling, and actor chatter. Collection is limited to lawful OSINT methods and customer-defined scopes.\\u003c/p\\u003e\\n      \\u003c/div\\u003e\\n    \\u003c/section\\u003e\\n\\n    \\u003csection id=\\\"products\\\"\\u003e\\n      \\u003ch2 data-num=\\\"08\\\"\\u003eIntelligence Products\\u003c/h2\\u003e\\n      \\u003cp class=\\\"lead\\\"\\u003eFour product lines transform raw detections into actionable government intelligence.\\u003c/p\\u003e\\n\\n      \\u003cdiv class=\\\"card\\\"\\u003e\\n        \\u003ch3\\u003eReal-Time Threat Dashboard\\u003c/h3\\u003e\\n        \\u003cp\\u003eA React-based analyst dashboard showing:\\u003c/p\\u003e\\n        \\u003cul\\u003e\\n          \\u003cli\\u003eLive campaign topology graph.\\u003c/li\\u003e\\n          \\u003cli\\u003eLanguage and platform distribution.\\u003c/li\\u003e\\n          \\u003cli\\u003eBurst velocity, reach estimates, and sentiment trajectory.\\u003c/li\\u003e\\n          \\u003cli\\u003eAttribution hypotheses ranked by confidence.\\u003c/li\\u003e\\n          \\u003cli\\u003eDrill-down to original posts, media, and evidence chain.\\u003c/li\\u003e\\n        \\u003c/ul\\u003e\\n      \\u003c/div\\u003e\\n\\n      \\u003cdiv class=\\\"card\\\"\\u003e\\n        \\u003ch3\\u003eAutomated Intelligence Reports (STIX 2.1 / MISP)\\u003c/h3\\u003e\\n        \\u003cp\\u003eMachine-readable reports for ingestion into national SOC, CERT, or fusion-center workflows. Includes STIX Threat-Actor, Campaign, Indicator, Observed-Data, and Relationship objects. MISP events are generated with Galaxy tags for disinformation/misinformation taxonomies.\\u003c/p\\u003e\\n      \\u003c/div\\u003e\\n\\n      \\u003cdiv class=\\\"card\\\"\\u003e\\n        \\u003ch3\\u003eCounter-Narrative Generator\\u003c/h3\\u003e\\n        \\u003cp\\u003eGiven a detected narrative and target audience segment, the generator produces:\\u003c/p\\u003e\\n        \\u003cul\\u003e\\n          \\u003cli\\u003eKey message points grounded in verified facts.\\u003c/li\\u003e\\n          \\u003cli\\u003ePlatform-specific format recommendations (thread, short video script, infographic).\\u003c/li\\u003e\\n          \\u003cli\\u003eLinguistic and cultural tailoring via the Cross-Cultural Context Model.\\u003c/li\\u003e\\n          \\u003cli\\u003eRisk flags (e.g., avoid amplifying the false claim directly).\\u003c/li\\u003e\\n        \\u003c/ul\\u003e\\n        \\u003cp\\u003eCounter-narratives are suggestions for government communications teams; VERITAS does not auto-publish content.\\u003c/p\\u003e\\n      \\u003c/div\\u003e\\n\\n      \\u003cdiv class=\\\"card\\\"\\u003e\\n        \\u003ch3\\u003eEarly Warning Alert System\\u003c/h3\\u003e\\n        \\u003cp\\u003eAlerts fire when:\\u003c/p\\u003e\\n        \\u003cul\\u003e\\n          \\u003cli\\u003eCoordination score exceeds a configured threshold.\\u003c/li\\u003e\\n          \\u003cli\\u003eA known campaign fingerprint reappears.\\u003c/li\\u003e\\n          \\u003cli\\u003eA narrative reaches a reach-velocity threshold (e.g., 10,000 engagements in 30 minutes in a target language).\\u003c/li\\u003e\\n          \\u003cli\\u003eFactuality score drops below 0.2 while reach is accelerating.\\u003c/li\\u003e\\n        \\u003c/ul\\u003e\\n        \\u003cp\\u003eAlerts are delivered via the portal, webhook, email, or STIX/MISP push.\\u003c/p\\u003e\\n      \\u003c/div\\u003e\\n    \\u003c/section\\u003e\\n\\n    \\u003csection id=\\\"deployment\\\"\\u003e\\n      \\u003ch2 data-num=\\\"09\\\"\\u003eDeployment Models\\u003c/h2\\u003e\\n      \\u003cp class=\\\"lead\\\"\\u003eThree sovereign deployment options matched to classification and data-sovereignty requirements.\\u003c/p\\u003e\\n\\n      \\u003cdiv class=\\\"phases\\\"\\u003e\\n        \\u003cdiv class=\\\"phase\\\"\\u003e\\n          \\u003cdiv class=\\\"num\\\"\\u003e1\\u003c/div\\u003e\\n          \\u003ch4\\u003eSaaS (EU-Hosted, GDPR-Compliant)\\u003c/h4\\u003e\\n          \\u003cp\\u003eMulti-tenant cloud deployment in EU regions. Suitable for federal ministries, EU institutions, and mid-sized agencies. Data residency, encryption at rest and in transit, role-based access, and audit logging are standard.\\u003c/p\\u003e\\n        \\u003c/div\\u003e\\n        \\u003cdiv class=\\\"phase\\\"\\u003e\\n          \\u003cdiv class=\\\"num\\\"\\u003e2\\u003c/div\\u003e\\n          \\u003ch4\\u003eOn-Premise Government Stack\\u003c/h4\\u003e\\n          \\u003cp\\u003eFull software stack deployed inside customer infrastructure or a sovereign cloud provider. Customer controls data, encryption keys, and model weights. Used by ministries requiring national data-sovereignty guarantees.\\u003c/p\\u003e\\n        \\u003c/div\\u003e\\n        \\u003cdiv class=\\\"phase\\\"\\u003e\\n          \\u003cdiv class=\\\"num\\\"\\u003e3\\u003c/div\\u003e\\n          \\u003ch4\\u003eAir-Gapped Classified Variant\\u003c/h4\\u003e\\n          \\u003cp\\u003eFor top-secret / VS-NfD environments. Runs on classified hardware with no external network connectivity. Uses offline LLM weights, local model inference, and manual data-diode ingestion. STIX/MISP export is via one-way media or approved secure transfer.\\u003c/p\\u003e\\n        \\u003c/div\\u003e\\n      \\u003c/div\\u003e\\n    \\u003c/section\\u003e\\n\\n    \\u003csection id=\\\"business\\\"\\u003e\\n      \\u003ch2 data-num=\\\"10\\\"\\u003eBusiness Model\\u003c/h2\\u003e\\n      \\u003cp class=\\\"lead\\\"\\u003eEnterprise annual contracts priced on scope and classification requirements.\\u003c/p\\u003e\\n\\n      \\u003ch3\\u003ePricing Tiers\\u003c/h3\\u003e\\n      \\u003ctable\\u003e\\n        \\u003ctr\\u003e\\u003cth\\u003eTier\\u003c/th\\u003e\\u003cth\\u003eAnnual Price\\u003c/th\\u003e\\u003cth\\u003eScope\\u003c/th\\u003e\\u003c/tr\\u003e\\n        \\u003ctr\\u003e\\u003ctd\\u003eMonitor\\u003c/td\\u003e\\u003ctd\\u003e€500K–€1M\\u003c/td\\u003e\\u003ctd\\u003e2–3 platforms, 1–2 languages, dashboard, basic alerts\\u003c/td\\u003e\\u003c/tr\\u003e\\n        \\u003ctr\\u003e\\u003ctd\\u003eAnalyze\\u003c/td\\u003e\\u003ctd\\u003e€2M–€4M\\u003c/td\\u003e\\u003ctd\\u003eAll core platforms, 5+ languages, attribution engine, STIX/MISP reports\\u003c/td\\u003e\\u003c/tr\\u003e\\n        \\u003ctr\\u003e\\u003ctd\\u003eDisrupt\\u003c/td\\u003e\\u003ctd\\u003e€6M–€10M+\\u003c/td\\u003e\\u003ctd\\u003eFull stack, counter-narrative generation, air-gapped option, custom model fine-tuning, dedicated analyst support\\u003c/td\\u003e\\u003c/tr\\u003e\\n      \\u003c/table\\u003e\\n\\n      \\u003ch3\\u003eInitial Target Customers\\u003c/h3\\u003e\\n      \\u003cul\\u003e\\n        \\u003cli\\u003eEuropean Commission (DSA enforcement, strategic communication, hybrid-threat monitoring)\\u003c/li\\u003e\\n        \\u003cli\\u003eGerman Federal Ministry of the Interior (BMI) and domestic intelligence-adjacent units\\u003c/li\\u003e\\n        \\u003cli\\u003eNATO STRATCOM / DIANA-funded pilot programs\\u003c/li\\u003e\\n        \\u003cli\\u003eNational CERTs and strategic-communication directorates in the Baltics, Nordics, and Visegrád states\\u003c/li\\u003e\\n      \\u003c/ul\\u003e\\n\\n      \\u003ch3\\u003eRevenue Logic\\u003c/h3\\u003e\\n      \\u003cp\\u003eThe market is not price-sensitive on the buyer side; it is trust- and capability-sensitive. A single prevented election-interference incident or early warning ahead of a civil-unrest flashpoint justifies the contract. Expansion revenue comes from additional languages, platforms, classified variants, and custom counter-narrative playbooks.\\u003c/p\\u003e\\n    \\u003c/section\\u003e\\n\\n    \\u003csection id=\\\"competition\\\"\\u003e\\n      \\u003ch2 data-num=\\\"11\\\"\\u003eCompetitive Landscape\\u003c/h2\\u003e\\n      \\u003cp class=\\\"lead\\\"\\u003eExisting tools were built for English-language brand safety and generic \\\"fake news\\\" classification. VERITAS is built for state-sponsored attribution.\\u003c/p\\u003e\\n      \\u003ctable\\u003e\\n        \\u003ctr\\u003e\\u003cth\\u003eCompetitor\\u003c/th\\u003e\\u003cth\\u003eStrength\\u003c/th\\u003e\\u003cth\\u003eWhat They Miss\\u003c/th\\u003e\\u003c/tr\\u003e\\n        \\u003ctr\\u003e\\u003ctd\\u003e\\u003cstrong\\u003eRecorded Future\\u003c/strong\\u003e\\u003c/td\\u003e\\u003ctd\\u003eExcellent dark-web and IOC intelligence\\u003c/td\\u003e\\u003ctd\\u003eDisinformation is a secondary use case; weak cultural/contextual analysis for non-English influence ops\\u003c/td\\u003e\\u003c/tr\\u003e\\n        \\u003ctr\\u003e\\u003ctd\\u003e\\u003cstrong\\u003eLogically\\u003c/strong\\u003e\\u003c/td\\u003e\\u003ctd\\u003eStrong fact-checking and narrative monitoring\\u003c/td\\u003e\\u003ctd\\u003ePrimarily English and Western-context; limited attribution to state actors\\u003c/td\\u003e\\u003c/tr\\u003e\\n        \\u003ctr\\u003e\\u003ctd\\u003e\\u003cstrong\\u003eGraphika\\u003c/strong\\u003e\\u003c/td\\u003e\\u003ctd\\u003eDeep social-network analysis and actor mapping\\u003c/td\\u003e\\u003ctd\\u003eHigh cost, slow turnaround, less real-time production pipeline\\u003c/td\\u003e\\u003c/tr\\u003e\\n        \\u003ctr\\u003e\\u003ctd\\u003e\\u003cstrong\\u003eBlackbird.AI\\u003c/strong\\u003e\\u003c/td\\u003e\\u003ctd\\u003eNarrative-risk scoring for enterprises\\u003c/td\\u003e\\u003ctd\\u003eCorporate risk framing, not intelligence-grade attribution; weak on Turkish/Islamosphere\\u003c/td\\u003e\\u003c/tr\\u003e\\n        \\u003ctr\\u003e\\u003ctd\\u003e\\u003cstrong\\u003eEU East StratCom / National Labs\\u003c/strong\\u003e\\u003c/td\\u003e\\u003ctd\\u003eDomain expertise and access\\u003c/td\\u003e\\u003ctd\\u003eOften manual, under-resourced, no productized platform\\u003c/td\\u003e\\u003c/tr\\u003e\\n      \\u003c/table\\u003e\\n\\n      \\u003ch3\\u003eVERITAS Wedge\\u003c/h3\\u003e\\n      \\u003col\\u003e\\n        \\u003cli\\u003e\\u003cstrong\\u003eCross-Cultural Context Model\\u003c/strong\\u003e — the only productized capability built specifically for Turkish/Islamosphere disinformation semantics.\\u003c/li\\u003e\\n        \\u003cli\\u003e\\u003cstrong\\u003eSpeed-to-attribution\\u003c/strong\\u003e — from detection to STIX report in minutes, not days.\\u003c/li\\u003e\\n        \\u003cli\\u003e\\u003cstrong\\u003eSovereign deployment\\u003c/strong\\u003e — EU data residency, on-premise, and air-gapped options purpose-built for classified government use.\\u003c/li\\u003e\\n        \\u003cli\\u003e\\u003cstrong\\u003eCounter-narrative production\\u003c/strong\\u003e — moves beyond detection to actionable response recommendations.\\u003c/li\\u003e\\n      \\u003c/ol\\u003e\\n    \\u003c/section\\u003e\\n\\n    \\u003csection id=\\\"mvp\\\"\\u003e\\n      \\u003ch2 data-num=\\\"12\\\"\\u003eMVP Definition\\u003c/h2\\u003e\\n      \\u003cp class=\\\"lead\\\"\\u003eA 6-week MVP scoped to prove the core pipeline and win an initial government pilot.\\u003c/p\\u003e\\n\\n      \\u003ch3\\u003eIn Scope\\u003c/h3\\u003e\\n      \\u003cul\\u003e\\n        \\u003cli\\u003e\\u003cstrong\\u003eCollection:\\u003c/strong\\u003e Telegram public channels + X API monitoring, German and Turkish language pairs.\\u003c/li\\u003e\\n        \\u003cli\\u003e\\u003cstrong\\u003eStream processing:\\u003c/strong\\u003e Kafka event mesh, basic normalization, language detection.\\u003c/li\\u003e\\n        \\u003cli\\u003e\\u003cstrong\\u003eAI pipeline:\\u003c/strong\\u003e Narrative extraction using a fine-tuned 13B–34B model; first-pass bot coordination detector; basic factuality scoring against Reuters/AFP/DPA.\\u003c/li\\u003e\\n        \\u003cli\\u003e\\u003cstrong\\u003eKnowledge store:\\u003c/strong\\u003e Neo4j campaign graph + PostgreSQL evidence metadata.\\u003c/li\\u003e\\n        \\u003cli\\u003e\\u003cstrong\\u003eDashboard:\\u003c/strong\\u003e React real-time dashboard showing detected campaigns, language distribution, and reach.\\u003c/li\\u003e\\n        \\u003cli\\u003e\\u003cstrong\\u003eOutput:\\u003c/strong\\u003e JSON reports; STIX 2.1 export is a stretch goal.\\u003c/li\\u003e\\n      \\u003c/ul\\u003e\\n\\n      \\u003ch3\\u003eOut of Scope for MVP\\u003c/h3\\u003e\\n      \\u003cul\\u003e\\n        \\u003cli\\u003eTikTok and dark-web collection.\\u003c/li\\u003e\\n        \\u003cli\\u003eFull Cross-Cultural Context Model (delivered as rule-based + small fine-tuned classifier; full model in Phase 2).\\u003c/li\\u003e\\n        \\u003cli\\u003eAir-gapped variant.\\u003c/li\\u003e\\n        \\u003cli\\u003eCounter-narrative generator (manual analyst notes only).\\u003c/li\\u003e\\n      \\u003c/ul\\u003e\\n\\n      \\u003ch3\\u003eSuccess Criteria\\u003c/h3\\u003e\\n      \\u003cul\\u003e\\n        \\u003cli\\u003eDetect at least one coordinated German/Turkish bilingual campaign within 60 minutes of seeding.\\u003c/li\\u003e\\n        \\u003cli\\u003eProduce a credible attribution hypothesis with evidence chain.\\u003c/li\\u003e\\n        \\u003cli\\u003eDemonstrate STIX-ready structured output.\\u003c/li\\u003e\\n        \\u003cli\\u003eSecure a paid pilot or LOI from BMI or an EU Commission directorate.\\u003c/li\\u003e\\n      \\u003c/ul\\u003e\\n    \\u003c/section\\u003e\\n\\n    \\u003csection id=\\\"roadmap\\\"\\u003e\\n      \\u003ch2 data-num=\\\"13\\\"\\u003e18-Month Roadmap\\u003c/h2\\u003e\\n      \\u003ctable\\u003e\\n        \\u003ctr\\u003e\\u003cth\\u003eQuarter\\u003c/th\\u003e\\u003cth\\u003eMilestone\\u003c/th\\u003e\\u003c/tr\\u003e\\n        \\u003ctr\\u003e\\u003ctd\\u003e\\u003cstrong\\u003eQ1\\u003c/strong\\u003e\\u003c/td\\u003e\\u003ctd\\u003eMVP live: Telegram + X, DE/TR, dashboard, basic attribution. First pilot contract signed.\\u003c/td\\u003e\\u003c/tr\\u003e\\n        \\u003ctr\\u003e\\u003ctd\\u003e\\u003cstrong\\u003eQ2\\u003c/strong\\u003e\\u003c/td\\u003e\\u003ctd\\u003eAdd YouTube transcripts, TikTok scraping module. Launch Cross-Cultural Context Model v1.0. STIX/MISP export GA.\\u003c/td\\u003e\\u003c/tr\\u003e\\n        \\u003ctr\\u003e\\u003ctd\\u003e\\u003cstrong\\u003eQ3\\u003c/strong\\u003e\\u003c/td\\u003e\\u003ctd\\u003eDark-web/onion collection. Add Arabic, Kurdish, Russian. First on-premise government deployment.\\u003c/td\\u003e\\u003c/tr\\u003e\\n        \\u003ctr\\u003e\\u003ctd\\u003e\\u003cstrong\\u003eQ4\\u003c/strong\\u003e\\u003c/td\\u003e\\u003ctd\\u003eCounter-Narrative Generator GA. Air-gapped classified variant pilot. €3M ARR target.\\u003c/td\\u003e\\u003c/tr\\u003e\\n        \\u003ctr\\u003e\\u003ctd\\u003e\\u003cstrong\\u003eQ5–Q6\\u003c/strong\\u003e\\u003c/td\\u003e\\u003ctd\\u003eScale to 10+ government/EU customers. Real-time multilingual campaign attribution under 15 minutes. SOC 2 Type II / ISO 27001 certification. Series A preparation.\\u003c/td\\u003e\\u003c/tr\\u003e\\n      \\u003c/table\\u003e\\n    \\u003c/section\\u003e\\n\\n    \\u003csection id=\\\"team\\\"\\u003e\\n      \\u003ch2 data-num=\\\"14\\\"\\u003eTeam Requirements\\u003c/h2\\u003e\\n      \\u003cp class=\\\"lead\\\"\\u003eFounding team of 5–7 people.\\u003c/p\\u003e\\n      \\u003ctable\\u003e\\n        \\u003ctr\\u003e\\u003cth\\u003eRole\\u003c/th\\u003e\\u003cth\\u003eResponsibility\\u003c/th\\u003e\\u003c/tr\\u003e\\n        \\u003ctr\\u003e\\u003ctd\\u003e\\u003cstrong\\u003eML Engineer / Lead Scientist\\u003c/strong\\u003e\\u003c/td\\u003e\\u003ctd\\u003eLLM fine-tuning, bot-detection models, attribution scoring\\u003c/td\\u003e\\u003c/tr\\u003e\\n        \\u003ctr\\u003e\\u003ctd\\u003e\\u003cstrong\\u003eOSINT Specialist\\u003c/strong\\u003e\\u003c/td\\u003e\\u003ctd\\u003eSource access, Telegram/X/TikTok collection, actor TTP research\\u003c/td\\u003e\\u003c/tr\\u003e\\n        \\u003ctr\\u003e\\u003ctd\\u003e\\u003cstrong\\u003eBackend Engineer\\u003c/strong\\u003e\\u003c/td\\u003e\\u003ctd\\u003eKafka, Neo4j, FastAPI, data pipeline reliability\\u003c/td\\u003e\\u003c/tr\\u003e\\n        \\u003ctr\\u003e\\u003ctd\\u003e\\u003cstrong\\u003eFrontend Engineer\\u003c/strong\\u003e\\u003c/td\\u003e\\u003ctd\\u003eReact dashboard, visualization, secure portal\\u003c/td\\u003e\\u003c/tr\\u003e\\n        \\u003ctr\\u003e\\u003ctd\\u003e\\u003cstrong\\u003eLinguist / Forensic Analyst\\u003c/strong\\u003e\\u003c/td\\u003e\\u003ctd\\u003eTurkish/Arabic/Kurdish annotation, cultural context model design, evidence review\\u003c/td\\u003e\\u003c/tr\\u003e\\n        \\u003ctr\\u003e\\u003ctd\\u003e\\u003cstrong\\u003eSales / Government Relations\\u003c/strong\\u003e\\u003c/td\\u003e\\u003ctd\\u003eBMI, EU Commission, NATO, procurement navigation\\u003c/td\\u003e\\u003c/tr\\u003e\\n        \\u003ctr\\u003e\\u003ctd\\u003e\\u003cstrong\\u003eSecurity / Compliance Lead\\u003c/strong\\u003e (fractional initially)\\u003c/td\\u003e\\u003ctd\\u003eAir-gapped deployments, classified handling, ISO/SOC2\\u003c/td\\u003e\\u003c/tr\\u003e\\n      \\u003c/table\\u003e\\n    \\u003c/section\\u003e\\n\\n    \\u003csection id=\\\"risk\\\"\\u003e\\n      \\u003ch2 data-num=\\\"15\\\"\\u003eRisk \\u0026amp; Mitigation\\u003c/h2\\u003e\\n      \\u003ctable\\u003e\\n        \\u003ctr\\u003e\\u003cth\\u003eRisk\\u003c/th\\u003e\\u003cth\\u003eLikelihood\\u003c/th\\u003e\\u003cth\\u003eMitigation\\u003c/th\\u003e\\u003c/tr\\u003e\\n        \\u003ctr\\u003e\\u003ctd\\u003ePlatform API changes / blocks\\u003c/td\\u003e\\u003ctd\\u003eHigh\\u003c/td\\u003e\\u003ctd\\u003eBuild adapter abstraction; maintain multiple collection paths; use public/ethical scraping where API is insufficient.\\u003c/td\\u003e\\u003c/tr\\u003e\\n        \\u003ctr\\u003e\\u003ctd\\u003eLegal challenges (GDPR, platform ToS)\\u003c/td\\u003e\\u003ctd\\u003eMedium\\u003c/td\\u003e\\u003ctd\\u003eLegal review; data minimization; EU data residency; no unauthorized private data collection; transparent terms.\\u003c/td\\u003e\\u003c/tr\\u003e\\n        \\u003ctr\\u003e\\u003ctd\\u003eAdversarial adaptation\\u003c/td\\u003e\\u003ctd\\u003eHigh\\u003c/td\\u003e\\u003ctd\\u003eContinuous retraining; red-team exercises; fingerprint versioning; human-in-the-loop attribution.\\u003c/td\\u003e\\u003c/tr\\u003e\\n        \\u003ctr\\u003e\\u003ctd\\u003eModel hallucination in attribution\\u003c/td\\u003e\\u003ctd\\u003eMedium\\u003c/td\\u003e\\u003ctd\\u003eProbabilistic confidence scores; structured evidence chains; mandatory analyst review before formal reporting.\\u003c/td\\u003e\\u003c/tr\\u003e\\n        \\u003ctr\\u003e\\u003ctd\\u003eFalse positives overwhelming analysts\\u003c/td\\u003e\\u003ctd\\u003eMedium\\u003c/td\\u003e\\u003ctd\\u003eTunable thresholds; feedback loops; confidence calibration; analyst workload metrics.\\u003c/td\\u003e\\u003c/tr\\u003e\\n        \\u003ctr\\u003e\\u003ctd\\u003eClassified-deployment complexity\\u003c/td\\u003e\\u003ctd\\u003eMedium\\u003c/td\\u003e\\u003ctd\\u003eModular offline architecture; pre-certified hardware partners; air-gap data-diode procedures.\\u003c/td\\u003e\\u003c/tr\\u003e\\n      \\u003c/table\\u003e\\n    \\u003c/section\\u003e\\n\\n    \\u003csection id=\\\"why-now\\\"\\u003e\\n      \\u003ch2 data-num=\\\"16\\\"\\u003eWhy Now\\u003c/h2\\u003e\\n      \\u003cp class=\\\"lead\\\"\\u003eSeveral independent forces make 2026 the right entry window for VERITAS:\\u003c/p\\u003e\\n      \\u003cul\\u003e\\n        \\u003cli\\u003e\\u003cstrong\\u003eEU Digital Services Act enforcement (2026):\\u003c/strong\\u003e Large platforms must provide vetted researcher access and algorithmic transparency, creating both data-access opportunities and policy demand for independent monitoring.\\u003c/li\\u003e\\n        \\u003cli\\u003e\\u003cstrong\\u003eGerman federal elections (2027):\\u003c/strong\\u003e Disinformation campaigns targeting German-Turkish and German-Arab communities will intensify. Early detection and attribution will be politically valuable.\\u003c/li\\u003e\\n        \\u003cli\\u003e\\u003cstrong\\u003eOngoing Ukraine war information operations:\\u003c/strong\\u003e Russian and proxy actors continue to target European audiences with false narratives around refugees, energy, and NATO. The threat is sustained, not hypothetical.\\u003c/li\\u003e\\n        \\u003cli\\u003e\\u003cstrong\\u003eNATO DIANA / innovation funding:\\u003c/strong\\u003e NATO and EU defense-innovation programs are actively funding dual-use AI and counter-disinformation capabilities. VERITAS is well aligned.\\u003c/li\\u003e\\n        \\u003cli\\u003e\\u003cstrong\\u003eWestern tool failure is now visible:\\u003c/strong\\u003e Fact-checkers, intelligence analysts, and platform trust-and-safety teams openly acknowledge the non-English cultural-context gap. The buyer pain is validated.\\u003c/li\\u003e\\n      \\u003c/ul\\u003e\\n      \\u003cp\\u003eVERITAS is designed to capture this window: a sovereign, multilingual, attribution-grade AI platform that fills the blind spot Western tools cannot see.\\u003c/p\\u003e\\n    \\u003c/section\\u003e\\n\\n  \\u003c/main\\u003e\\n\\n  \\u003cfooter\\u003e\\n    \\u003cp\\u003e\\u003cstrong\\u003eVERITAS — AI Counter-Disinformation Platform\\u003c/strong\\u003e\\u003c/p\\u003e\\n    \\u003cp\\u003eDocument version 1.0 · Built for democratic governments · STIX 2.1 / MISP compatible · EU data residency · Air-gapped ready\\u003c/p\\u003e\\n  \\u003c/footer\\u003e\\n\\u003c/body\\u003e\\n\\u003c/html\\u003e\\nEOF\\nls -la /DATA/veritas-website.html\"}"
          }
        }
      ]
    },
    {
      "role": "tool",
      "name": "terminal",
      "content": "{\"output\": \"-rw-r--r-- 1 root root 64649 Jun 21 22:42 /DATA/veritas-website.html\", \"exit_code\": 0, \"error\": null}",
      "tool_call_id": "functions.terminal:5"
    },
    {
      "role": "assistant",
      "content": "",
      "reasoning": null,
      "finish_reason": "tool_calls",
      "tool_calls": [
        {
          "id": "functions.terminal:6",
          "call_id": "functions.terminal:6",
          "response_item_id": "fc_functionsterminal6",
          "type": "function",
          "function": {
            "name": "terminal",
            "arguments": "{\"command\":\"python3 - \\u003c\\u003c'PY'\\nfrom html.parser import HTMLParser\\n\\nclass Validator(HTMLParser):\\n    def error(self, message): raise Exception(message)\\n\\nwith open('/DATA/veritas-website.html','r',encoding='utf-8') as f:\\n    data=f.read()\\n\\nprint('Size:', len(data))\\nprint('Has doctype:', data.startswith('\\u003c!DOCTYPE html\\u003e'))\\nprint('Contains JetBrains Mono:', 'JetBrains Mono' in data)\\nprint('Contains Inter font:', 'Inter' in data)\\nprint('Contains 00a3bf:', '#00a3bf' in data)\\nprint('Contains pulse/dot:', 'animation: pulse' in data or 'brand-dot' in data)\\n\\n# parse\\nValidator().feed(data)\\nprint('HTML parse: OK')\\n\\n# section count\\nimport re\\nprint('Sections:', len(re.findall(r'\\u003csection', data)))\\nprint('h2 data-num:', len(re.findall(r'\\u003ch2 data-num=', data)))\\nPY\"}"
          }
        }
      ]
    },
    {
      "role": "tool",
      "name": "terminal",
      "content": "{\"output\": \"Size: 64516\\nHas doctype: True\\nContains JetBrains Mono: False\\nContains Inter font: True\\nContains 00a3bf: True\\nContains pulse/dot: False\\nHTML parse: OK\\nSections: 17\\nh2 data-num: 16\", \"exit_code\": 0, \"error\": null}",
      "tool_call_id": "functions.terminal:6"
    },
    {
      "role": "assistant",
      "content": "Done. Rebuilt `/DATA/veritas-website.html` with a Palantir-inspired design.\n\n**What changed:**\n- **Font:** Replaced JetBrains Mono with Inter (Google Fonts only external dependency).\n- **Color system:** Near-black background `#0a0a0f`, dark charcoal cards `#13141a`, single cold blue accent `#00a3bf`. Reduced secondary accents to muted amber for collection/Kafka and muted rose only for the classified boundary / threat label.\n- **Aesthetic:** Data-dense, grid-structured, geometric precision — thin 1px borders, subtle dot-grid background, sharp corners instead of rounded startup cards, section numbers as thin uppercase labels.\n- **Hero:** Minimal platform-login style with rotated diamond mark and spaced-out wordmark.\n- **Navigation:** Thin minimal top bar with uppercase links.\n- **Wedge section:** Cross-Cultural Context Model now uses a left blue border accent and a subtle “PRIMARY WEDGE” tab instead of glowing rose box.\n- **Architecture SVG:** Recolored to the Palantir palette, swapped JetBrains Mono font references to Inter, reduced glow effects, thinned borders, simplified arrows.\n- **Removed:** Pulsing dot, rainbow accents, chunky rounded cards, colored top borders.\n\n**Validation:**\n- Single self-contained HTML file, valid parse.\n- All 17 sections / original content preserved.\n- File size: ~64.5 KB at `/DATA/veritas-website.html`.",
      "reasoning": null,
      "finish_reason": "stop"
    }
  ]
}