{
  "slug": "credential-provider",
  "meta": {
    "title": "Credential Provider | ChromVoid",
    "description": "Local-first autofill на поддерживаемых платформах."
  },
  "hero": {
    "label": "Credential Provider",
    "title": "Нативный autofill без cloud backplane.",
    "description": "Поверхность ОС остаётся тонким слоем, а local Core решает, может ли секрет покинуть vault в рамках короткой provider-сессии.",
    "audience": "Для поддерживаемых платформ, где нужен system autofill с локальной выдачей секретов."
  },
  "useCases": {
    "title": "Когда это подходит",
    "intro": "Путь provider полезен там, где важнее native autofill, чем browser-side workflow.",
    "cards": [
      {
        "title": "System autofill",
        "body": "Используйте нативную поверхность на поддерживаемых платформах без переноса доверия в cloud."
      },
      {
        "title": "Выдача только из открытого vault",
        "body": "Только разблокированный vault может выпустить секрет в provider session."
      },
      {
        "title": "Детерминированные проверки",
        "body": "Policy, reachability и session state fail closed, если цепочка ломается."
      }
    ]
  },
  "howItWorks": {
    "title": "Жизненный цикл запроса",
    "intro": "OS вызывает provider, Core валидирует локальное состояние, и сессия сразу закрывается после выдачи.",
    "steps": [
      {
        "title": "OS вызывает provider surface",
        "body": "Локальный adapter получает запрос от поддерживаемой платформы."
      },
      {
        "title": "Core проверяет локальное состояние",
        "body": "Состояние vault и policy валидируются до выдачи секрета."
      },
      {
        "title": "Открывается короткая provider-сессия",
        "body": "Секрет выдаётся, после чего сессия снова исчезает."
      }
    ],
    "diagrams": [
      {
        "src": "/assets/diagrams/credential-provider-flow.svg",
        "alt": "Жизненный цикл credential provider",
        "title": "Поток credential provider",
        "description": "Локальная provider surface, vault session и policy gates."
      }
    ]
  },
  "security": {
    "title": "Локальная цепочка",
    "cards": [
      {
        "title": "Локальный adapter",
        "body": "Запрос попадает только через локальный OS adapter на том же устройстве."
      },
      {
        "title": "Нужен открытый vault",
        "body": "Если vault закрыт, provider path останавливается до release."
      },
      {
        "title": "Policy gate",
        "body": "Контекст приложения или домена обязан пройти локальную policy-проверку."
      }
    ]
  },
  "limitations": {
    "title": "Ограничения и scope",
    "intro": "Provider path намеренно узкий.",
    "items": [
      "Нативная provider surface доступна только на поддерживаемых платформах.",
      "Заблокированный vault не разблокируется в фоне.",
      "Provider session короткоживущая и существует только на время запроса."
    ],
    "notTitle": "Не cloud autofill",
    "notBody": "Это локальная provider chain, а не sync-backed cloud credential service."
  },
  "cta": {
    "title": "Используйте system autofill через локальный provider path.",
    "body": "Provider session остаётся короткоживущей и fail closed, если vault или policy gate не готовы."
  },
  "ui": {
    "generic": {
      "audience": "Для кого",
      "useCases": "Сценарии",
      "how": "Как это работает",
      "security": "Безопасность",
      "limitations": "Ограничения",
      "threatModel": "Модель угроз",
      "download": "Скачать",
      "backHome": "На главную",
      "technicalDiagram": "Техническая диаграмма",
      "badges": {
        "inDevelopment": "В разработке",
        "pro": "PRO"
      }
    },
    "credentialProvider": {
      "localOnlyChip": "Только локальный путь",
      "audienceTitle": "Нативный autofill без облачного backplane.",
      "runtimeTitle": "Нативная поверхность ОС остаётся тонким слоем над локальным Core.",
      "gateTitle": "Секрет выходит из vault только после полной локальной цепочки проверок.",
      "gateIntro": "Кандидаты могут выглядеть как обычный autofill, но реальная выдача секрета идёт через детерминированный локальный контракт, а не через скрытый кэш.",
      "lifecycleLabel": "Жизненный цикл запроса",
      "lifecycleIntro": "Сначала система вызывает provider surface, затем ChromVoid проверяет локальное состояние Core и выпускает короткую provider-сессию без фоновой разблокировки.",
      "diagramBadge": "Техническая диаграмма",
      "diagramSupportBadge": "Только локальный поток",
      "outcomeLabel": "Выдача секрета",
      "outcomeTitle": "Секрет проходит только через короткую provider-сессию.",
      "outcomeBody": "После `credential_provider:getSecret` не остаётся постоянного кэша вне жизненного цикла открытого vault.",
      "platformLane": "Адаптеры платформ",
      "sessionLane": "Сессия vault",
      "policyLane": "Проверка политики",
      "boundaryPillars": [
        "Транспорт",
        "Цепочка проверок",
        "TTL сессии"
      ],
      "metrics": [
        {
          "label": "Транспорт",
          "value": "Локальный",
          "body": "Никаких WebRTC, WSS, USB или relay."
        },
        {
          "label": "Разблокировка",
          "value": "Vault открыт",
          "body": "Заблокированный vault означает fail closed."
        },
        {
          "label": "Кэш",
          "value": "Короткоживущий",
          "body": "Provider session живёт только в рамках запроса."
        }
      ],
      "gates": [
        {
          "key": "local_core",
          "title": "Локальный Core",
          "detail": "Запрос принимается только от локального адаптера ОС на этом же устройстве."
        },
        {
          "key": "core_alive",
          "title": "Core доступен",
          "detail": "Surface сначала убеждается, что Core жив, иначе цепочка останавливается до выдачи."
        },
        {
          "key": "vault_open",
          "title": "Vault открыт",
          "detail": "Если vault закрыт, ChromVoid не делает background unlock от имени ОС."
        },
        {
          "key": "provider_enabled",
          "title": "Провайдер включён",
          "detail": "Провайдер можно выключить явно, и тогда путь выдачи секрета закрывается полностью."
        },
        {
          "key": "allowlist_ok",
          "title": "Контекст разрешён",
          "detail": "Контекст домена или приложения обязан пройти policy check внутри provider session."
        }
      ]
    }
  }
}
