> ## Documentation Index
> Fetch the complete documentation index at: https://docs.rev.iq/llms.txt
> Use this file to discover all available pages before exploring further.

# 简介

> 欢迎使用 RevIQ 文档！

export const heroHtml = `<!DOCTYPE html>
<html lang="en"><head><meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1"><title>RevIQ</title>
<style>
 html,body{margin:0;height:100%;background:#151515;overflow:hidden}
 #wrap{position:fixed;inset:0;background:#151515;border-radius:16px;overflow:hidden;cursor:crosshair}
 canvas{display:block;width:100%;height:100%}
</style></head>
<body><div id="wrap"><canvas id="c"></canvas></div>
<script>
const ICON="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMDQxIiBoZWlnaHQ9IjEyMDAiIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjExIDkgMjYgMzAiPjxtYXNrIGlkPSJyaV9fYiIgd2lkdGg9IjgiIGhlaWdodD0iMTQiIHg9IjI5IiB5PSIxNyIgbWFza1VuaXRzPSJ1c2VyU3BhY2VPblVzZSIgc3R5bGU9Im1hc2stdHlwZTphbHBoYSI+PHBhdGggZmlsbD0iIzljOWM5YyIgZD0iTTM2LjYyNSAzMC40ODl2LTguMTc2YTQgNCAwIDAgMC0yLjc0LTMuNzk2bC0zLjYxLTEuMTk4YS44NzUuODc1IDAgMCAwLTEuMTUuODN2OS44MnoiLz48cGF0aCBmaWxsPSJ1cmwoI3JpX19hKSIgZD0iTTM2LjYyNSAzMC40ODl2LTguMTc2YTQgNCAwIDAgMC0yLjc0LTMuNzk2bC0zLjYxLTEuMTk4YS44NzUuODc1IDAgMCAwLTEuMTUuODN2OS44MnoiLz48L21hc2s+PGcgbWFzaz0idXJsKCNyaV9fYikiPjxjaXJjbGUgY3g9IjMyLjgzNiIgY3k9IjIxLjkwMiIgcj0iMTAuNjc2IiBmaWxsPSIjZmZhOTI3IiB0cmFuc2Zvcm09InJvdGF0ZSgtMTY4LjY0NyAzMi44MzYgMjEuOTAyKSIvPjxjaXJjbGUgY3g9IjMyLjgzNiIgY3k9IjIxLjkwMiIgcj0iMTAuNjc2IiBmaWxsPSJ1cmwoI3JpX19jKSIgdHJhbnNmb3JtPSJyb3RhdGUoLTE2OC42NDcgMzIuODM2IDIxLjkwMikiLz48Y2lyY2xlIGN4PSIzMi44MzYiIGN5PSIyMS45MDIiIHI9IjEwLjY3NiIgZmlsbD0idXJsKCNyaV9fZCkiIHRyYW5zZm9ybT0icm90YXRlKC0xNjguNjQ3IDMyLjgzNiAyMS45MDIpIi8+PGcgZmlsdGVyPSJ1cmwoI3JpX19lKSIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOnBsdXMtbGlnaHRlciI+PHBhdGggc3Ryb2tlPSJ1cmwoI3JpX19mKSIgc3Ryb2tlLW9wYWNpdHk9Ii4zIiBzdHJva2Utd2lkdGg9Ii41MDgiIGQ9Ik0zNi42MjUgMzAuNDg5di04LjE3NmE0IDQgMCAwIDAtMi43NC0zLjc5NmwtMy42MS0xLjE5OGEuODc1Ljg3NSAwIDAgMC0xLjE1LjgzdjkuODJ6Ii8+PC9nPjwvZz48bWFzayBpZD0icmlfX2ciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNyIgeD0iMjEiIHk9IjIyIiBtYXNrVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBzdHlsZT0ibWFzay10eXBlOmFscGhhIj48cGF0aCBmaWxsPSIjZmZmIiBkPSJtMzMuNDQ2IDM1LjY2Mi05Ljg1MiAzLjI0M2ExLjUgMS41IDAgMCAxLTEuOTY5LTEuNDI1di03LjA1YzAtLjcyNS41MTYtMS4zNTMgMS4yMi0xLjUyNSAxLjAxMy0uMjQ3IDIuNjUtLjY4NyA0LjkwNS0xLjQxNSA0LjA2My0xLjMxMiA4Ljg3NS0yLjYyNSA4Ljg3NS01djguNzc5YTQuNjI1IDQuNjI1IDAgMCAxLTMuMTc5IDQuMzkzIi8+PC9tYXNrPjxnIG1hc2s9InVybCgjcmlfX2cpIj48Y2lyY2xlIGN4PSIyOS44NzUiIGN5PSIzMC43NSIgcj0iMTIiIGZpbGw9IiNmZmE5MjciLz48Y2lyY2xlIGN4PSIyOS44NzUiIGN5PSIzMC43NSIgcj0iMTIiIGZpbGw9InVybCgjcmlfX2gpIi8+PGcgZmlsdGVyPSJ1cmwoI3JpX19pKSIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm92ZXJsYXkiPjxwYXRoIHN0cm9rZT0idXJsKCNyaV9faikiIHN0cm9rZS1vcGFjaXR5PSIuNSIgc3Ryb2tlLXdpZHRoPSIxLjA2MyIgZD0ibTMzLjQ0NiAzNS42NjItOS44NTIgMy4yNDNhMS41IDEuNSAwIDAgMS0xLjk2OS0xLjQyNXYtNy4wNWMwLS43MjUuNTE2LTEuMzUzIDEuMjItMS41MjUgMS4wMTMtLjI0NyAyLjY1LS42ODcgNC45MDUtMS40MTUgNC4wNjMtMS4zMTIgOC44NzUtMi42MjUgOC44NzUtNXY4Ljc3OWE0LjYyNSA0LjYyNSAwIDAgMS0zLjE3OSA0LjM5M1oiLz48L2c+PHBhdGggc3Ryb2tlPSJ1cmwoI3JpX19rKSIgc3Ryb2tlLW9wYWNpdHk9Ii41IiBzdHJva2Utd2lkdGg9Ii42OTciIGQ9Im0zMy40NDYgMzUuNjYyLTkuODUyIDMuMjQzYTEuNSAxLjUgMCAwIDEtMS45NjktMS40MjV2LTcuMDVjMC0uNzI1LjUxNi0xLjM1MyAxLjIyLTEuNTI1IDEuMDEzLS4yNDcgMi42NS0uNjg3IDQuOTA1LTEuNDE1IDQuMDYzLTEuMzEyIDguODc1LTIuNjI1IDguODc1LTV2OC43NzlhNC42MjUgNC42MjUgMCAwIDEtMy4xNzkgNC4zOTNaIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6b3ZlcmxheSIvPjxnIGZpbHRlcj0idXJsKCNyaV9fbCkiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpwbHVzLWxpZ2h0ZXIiPjxwYXRoIHN0cm9rZT0idXJsKCNyaV9fbSkiIHN0cm9rZS1vcGFjaXR5PSIuMTUiIHN0cm9rZS13aWR0aD0iLjUyNyIgZD0ibTMzLjQ0NiAzNS42NjItOS44NTIgMy4yNDNhMS41IDEuNSAwIDAgMS0xLjk2OS0xLjQyNXYtNy4wNWMwLS43MjUuNTE2LTEuMzUzIDEuMjItMS41MjUgMS4wMTMtLjI0NyAyLjY1LS42ODcgNC45MDUtMS40MTUgNC4wNjMtMS4zMTIgOC44NzUtMi42MjUgOC44NzUtNXY4Ljc3OWE0LjYyNSA0LjYyNSAwIDAgMS0zLjE3OSA0LjM5M1oiLz48L2c+PC9nPjxtYXNrIGlkPSJyaV9fbyIgd2lkdGg9IjgiIGhlaWdodD0iMTQiIHg9IjExIiB5PSIxNyIgbWFza1VuaXRzPSJ1c2VyU3BhY2VPblVzZSIgc3R5bGU9Im1hc2stdHlwZTphbHBoYSI+PHBhdGggZmlsbD0iIzljOWM5YyIgZD0iTTExLjM3NSAxNy41djguMTc2YTQgNCAwIDAgMCAyLjc0IDMuNzk2bDMuMjggMS4wODljLjcyOS4yNDIgMS40OC0uMyAxLjQ4LTEuMDY4di05LjQ3MnoiLz48cGF0aCBmaWxsPSJ1cmwoI3JpX19uKSIgZD0iTTExLjM3NSAxNy41djguMTc2YTQgNCAwIDAgMCAyLjc0IDMuNzk2bDMuMjggMS4wODljLjcyOS4yNDIgMS40OC0uMyAxLjQ4LTEuMDY4di05LjQ3MnoiLz48L21hc2s+PGcgbWFzaz0idXJsKCNyaV9fbykiPjxjaXJjbGUgY3g9IjE3LjMwOSIgY3k9IjI1Ljg0MiIgcj0iMTAuMzc1IiBmaWxsPSIjZmZhOTI3Ii8+PGNpcmNsZSBjeD0iMTcuMzA5IiBjeT0iMjUuODQyIiByPSIxMC4zNzUiIGZpbGw9InVybCgjcmlfX3ApIi8+PGNpcmNsZSBjeD0iMTcuMzA5IiBjeT0iMjUuODQyIiByPSIxMC4zNzUiIGZpbGw9InVybCgjcmlfX3EpIi8+PGcgZmlsdGVyPSJ1cmwoI3JpX19yKSIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOnBsdXMtbGlnaHRlciI+PHBhdGggc3Ryb2tlPSJ1cmwoI3JpX19zKSIgc3Ryb2tlLW9wYWNpdHk9Ii4zIiBzdHJva2Utd2lkdGg9Ii41MDgiIGQ9Ik0xMS4zNzUgMTcuNXY4LjE3NmE0IDQgMCAwIDAgMi43NCAzLjc5NmwzLjI4IDEuMDg5Yy43MjkuMjQyIDEuNDgtLjMgMS40OC0xLjA2OHYtOS40NzJ6Ii8+PC9nPjwvZz48bWFzayBpZD0icmlfX3QiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNyIgeD0iMTEiIHk9IjkiIG1hc2tVbml0cz0idXNlclNwYWNlT25Vc2UiIHN0eWxlPSJtYXNrLXR5cGU6YWxwaGEiPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Im0xNC41NTQgMTIuMzMgOS44NTItMy4yNDRhMS41IDEuNSAwIDAgMSAxLjk2OSAxLjQyNXY2LjYzM2MwIC45NjYtLjY4OCAxLjgwNS0xLjYyNSAyLjA0MmE3NCA3NCAwIDAgMC00LjUgMS4zMTRjLTQuMDYyIDEuMzEzLTguODc1IDIuNjI1LTguODc1IDV2LTguNzc4YTQuNjI1IDQuNjI1IDAgMCAxIDMuMTc5LTQuMzkzIi8+PC9tYXNrPjxnIG1hc2s9InVybCgjcmlfX3QpIj48Y2lyY2xlIGN4PSIxOC44NzUiIGN5PSIxNiIgcj0iMTAuMzc1IiBmaWxsPSIjMjcwNjAxIi8+PGNpcmNsZSBjeD0iMTguOTM0IiBjeT0iMTguMTMzIiByPSIxMiIgZmlsbD0iI2ZmYTkyNyIvPjxjaXJjbGUgY3g9IjE4LjkzNCIgY3k9IjE4LjEzMyIgcj0iMTIiIGZpbGw9InVybCgjcmlfX3UpIi8+PGcgZmlsdGVyPSJ1cmwoI3JpX192KSIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm92ZXJsYXkiPjxwYXRoIHN0cm9rZT0idXJsKCNyaV9fdykiIHN0cm9rZS1vcGFjaXR5PSIuMiIgc3Ryb2tlLXdpZHRoPSIxLjA2OSIgZD0ibTE0LjU1NCAxMi4zMyA5Ljg1Mi0zLjI0NGExLjUgMS41IDAgMCAxIDEuOTY5IDEuNDI1djYuNjMzYzAgLjk2Ni0uNjg4IDEuODA1LTEuNjI1IDIuMDQyYTc0IDc0IDAgMCAwLTQuNSAxLjMxNGMtNC4wNjIgMS4zMTMtOC44NzUgMi42MjUtOC44NzUgNXYtOC43NzhhNC42MjUgNC42MjUgMCAwIDEgMy4xNzktNC4zOTNaIi8+PC9nPjxnIGZpbHRlcj0idXJsKCNyaV9feCkiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpvdmVybGF5Ij48cGF0aCBzdHJva2U9InVybCgjcmlfX3kpIiBzdHJva2Utb3BhY2l0eT0iLjUiIHN0cm9rZS13aWR0aD0iLjQzOCIgZD0ibTE0LjU1NCAxMi4zMyA5Ljg1Mi0zLjI0NGExLjUgMS41IDAgMCAxIDEuOTY5IDEuNDI1djYuNjMzYzAgLjk2Ni0uNjg4IDEuODA1LTEuNjI1IDIuMDQyYTc0IDc0IDAgMCAwLTQuNSAxLjMxNGMtNC4wNjIgMS4zMTMtOC44NzUgMi42MjUtOC44NzUgNXYtOC43NzhhNC42MjUgNC42MjUgMCAwIDEgMy4xNzktNC4zOTNaIi8+PC9nPjxnIGZpbHRlcj0idXJsKCNyaV9feikiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpwbHVzLWxpZ2h0ZXIiPjxwYXRoIHN0cm9rZT0idXJsKCNyaV9fQSkiIHN0cm9rZS1vcGFjaXR5PSIuMTUiIHN0cm9rZS13aWR0aD0iLjUwOCIgZD0ibTE0LjU1NCAxMi4zMyA5Ljg1Mi0zLjI0NGExLjUgMS41IDAgMCAxIDEuOTY5IDEuNDI1djYuNjMzYzAgLjk2Ni0uNjg4IDEuODA1LTEuNjI1IDIuMDQyYTc0IDc0IDAgMCAwLTQuNSAxLjMxNGMtNC4wNjIgMS4zMTMtOC44NzUgMi42MjUtOC44NzUgNXYtOC43NzhhNC42MjUgNC42MjUgMCAwIDEgMy4xNzktNC4zOTNaIi8+PC9nPjwvZz48ZGVmcz48cmFkaWFsR3JhZGllbnQgaWQ9InJpX19hIiBjeD0iMCIgY3k9IjAiIHI9IjEiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMy45Mzc1IDguNTYyNSA4Ljk2NjkyIC00LjE1NzczIDMwLjc1IDE3LjgxMikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBzdG9wLWNvbG9yPSIjZmZiNjU3Ii8+PHN0b3Agb2Zmc2V0PSIuNjM0IiBzdG9wLWNvbG9yPSIjZmY1ZjNkIi8+PHN0b3Agb2Zmc2V0PSIuOTIzIiBzdG9wLWNvbG9yPSIjYzAyYjNjIi8+PC9yYWRpYWxHcmFkaWVudD48cmFkaWFsR3JhZGllbnQgaWQ9InJpX19jIiBjeD0iMCIgY3k9IjAiIHI9IjEiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTkuODM4NTUgMjcuODUzNiAtMzQuNTE1NSAtOS4zNzQ5MSAzOS44NzkgOC4xOTcpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agb2Zmc2V0PSIuMDY2IiBzdG9wLWNvbG9yPSIjZmZjNzAwIi8+PHN0b3Agb2Zmc2V0PSIuMjk1IiBzdG9wLWNvbG9yPSIjZmRhNDBjIi8+PHN0b3Agb2Zmc2V0PSIuNSIgc3RvcC1jb2xvcj0iI2ZjODQxNiIvPjxzdG9wIG9mZnNldD0iLjg5NiIgc3RvcC1jb2xvcj0iI2ZmYjE1MiIvPjwvcmFkaWFsR3JhZGllbnQ+PHJhZGlhbEdyYWRpZW50IGlkPSJyaV9fZCIgY3g9IjAiIGN5PSIwIiByPSIxIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0xOC4xNDAyIC0xMi4yMzE5IDIyLjMwODkgLTExLjExNTggNDQuMjY4IDMyLjg3NCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBzdG9wLWNvbG9yPSIjZmZiNjU3Ii8+PHN0b3Agb2Zmc2V0PSIuNjM0IiBzdG9wLWNvbG9yPSIjZmY1ZjNkIi8+PHN0b3Agb2Zmc2V0PSIuOTIzIiBzdG9wLWNvbG9yPSIjYzAyYjNjIi8+PC9yYWRpYWxHcmFkaWVudD48cmFkaWFsR3JhZGllbnQgaWQ9InJpX19oIiBjeD0iMCIgY3k9IjAiIHI9IjEiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTE5LjQ2NjcgMjYuMjY2NyAtMzMuNDY1MSAtMjEuMTQyNyAzOS44NjYgMTguNjY2KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIG9mZnNldD0iLjA2NiIgc3RvcC1jb2xvcj0iI2ZmYzcwMCIvPjxzdG9wIG9mZnNldD0iLjI5NSIgc3RvcC1jb2xvcj0iI2ZkYTQwYyIvPjxzdG9wIG9mZnNldD0iLjUiIHN0b3AtY29sb3I9IiNmYzg0MTYiLz48c3RvcCBvZmZzZXQ9Ii44OTYiIHN0b3AtY29sb3I9IiNmZmIxNTIiLz48L3JhZGlhbEdyYWRpZW50PjxyYWRpYWxHcmFkaWVudCBpZD0icmlfX24iIGN4PSIwIiBjeT0iMCIgcj0iMSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgtNi4xODc1IC03LjM3NSAtNy43MTQxIDYuNTEzNDkgMTguODc1IDI5LjgxMykiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBzdG9wLWNvbG9yPSIjZmZiNjU3Ii8+PHN0b3Agb2Zmc2V0PSIuNjM0IiBzdG9wLWNvbG9yPSIjZmY1ZjNkIi8+PHN0b3Agb2Zmc2V0PSIuOTIzIiBzdG9wLWNvbG9yPSIjYzAyYjNjIi8+PC9yYWRpYWxHcmFkaWVudD48cmFkaWFsR3JhZGllbnQgaWQ9InJpX19wIiBjeD0iMCIgY3k9IjAiIHI9IjEiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTkuNTYxMDkgMjcuMDY4MSAtMzMuNTQyMSAtOS4xMTA1MyAyNC4xNTMgMTIuNTIzKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIG9mZnNldD0iLjA2NiIgc3RvcC1jb2xvcj0iI2ZmYzcwMCIvPjxzdG9wIG9mZnNldD0iLjI5NSIgc3RvcC1jb2xvcj0iI2ZkYTQwYyIvPjxzdG9wIG9mZnNldD0iLjUiIHN0b3AtY29sb3I9IiNmYzg0MTYiLz48c3RvcCBvZmZzZXQ9Ii44OTYiIHN0b3AtY29sb3I9IiNmZmIxNTIiLz48L3JhZGlhbEdyYWRpZW50PjxyYWRpYWxHcmFkaWVudCBpZD0icmlfX3EiIGN4PSIwIiBjeT0iMCIgcj0iMSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgtMTcuNjI4NiAtMTEuODg2OSAyMS42Nzk4IC0xMC44MDIzIDI4LjQxOSAzNi41MDQpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agc3RvcC1jb2xvcj0iI2ZmYjY1NyIvPjxzdG9wIG9mZnNldD0iLjYzNCIgc3RvcC1jb2xvcj0iI2ZmNWYzZCIvPjxzdG9wIG9mZnNldD0iLjkyMyIgc3RvcC1jb2xvcj0iI2MwMmIzYyIvPjwvcmFkaWFsR3JhZGllbnQ+PHJhZGlhbEdyYWRpZW50IGlkPSJyaV9fdSIgY3g9IjAiIGN5PSIwIiByPSIxIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0xOS45MTY3IDI5LjY3MTYgLTM3LjYxNjggLTIxLjM3OTkgMjYuODUgMi43MjgpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agb2Zmc2V0PSIuMDY2IiBzdG9wLWNvbG9yPSIjZmZjNzAwIi8+PHN0b3Agb2Zmc2V0PSIuMjk1IiBzdG9wLWNvbG9yPSIjZmRhNDBjIi8+PHN0b3Agb2Zmc2V0PSIuNSIgc3RvcC1jb2xvcj0iI2ZjODQxNiIvPjxzdG9wIG9mZnNldD0iLjg5NiIgc3RvcC1jb2xvcj0iI2ZmYjE1MiIvPjwvcmFkaWFsR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJyaV9fZiIgeDE9IjI4LjA2OCIgeDI9IjM2LjEwNCIgeTE9IjE2LjU0MiIgeTI9IjIzLjUxMiIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIG9mZnNldD0iLjA1OSIgc3RvcC1jb2xvcj0iI2ZmZiIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1vcGFjaXR5PSIuNSIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJyaV9faiIgeDE9IjI0IiB4Mj0iMzYuNjI1IiB5MT0iMjYuNjg4IiB5Mj0iMzQuMDYzIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agb2Zmc2V0PSIuNTA1IiBzdG9wLWNvbG9yPSIjZmZmIi8+PHN0b3Agb2Zmc2V0PSIuOTI4IiBzdG9wLWNvbG9yPSIjZmZmIiBzdG9wLW9wYWNpdHk9IjAiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0icmlfX2siIHgxPSIyMi4wNjMiIHgyPSIzNy41NjMiIHkxPSIyOC42ODgiIHkyPSIzMy40MzgiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBvZmZzZXQ9Ii4xNTMiIHN0b3AtY29sb3I9IiNmZmYiLz48c3RvcCBvZmZzZXQ9Ii45MjgiIHN0b3AtY29sb3I9IiNmZmYiIHN0b3Atb3BhY2l0eT0iMCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJyaV9fbSIgeDE9IjI4LjgxMyIgeDI9IjM0IiB5MT0iMzguMjMxIiB5Mj0iMTguOTE4IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agb2Zmc2V0PSIuMDU5IiBzdG9wLWNvbG9yPSIjZmZmIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjZmZmIiBzdG9wLW9wYWNpdHk9IjAiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0icmlfX3MiIHgxPSIxMy45MTUiIHgyPSIyMC40MTIiIHkxPSIyOS4xNjkiIHkyPSIxOS44NzYiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBvZmZzZXQ9Ii4wNTkiIHN0b3AtY29sb3I9IiNmZmYiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3Atb3BhY2l0eT0iLjUiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0icmlfX3ciIHgxPSIxNi45MzgiIHgyPSIyNi4zNzUiIHkxPSIxOC42ODgiIHkyPSI2LjE4OCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIG9mZnNldD0iLjE1MyIgc3RvcC1jb2xvcj0iI2ZmZiIvPjxzdG9wIG9mZnNldD0iLjkyOCIgc3RvcC1jb2xvcj0iI2ZmZiIgc3RvcC1vcGFjaXR5PSIwIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9InJpX195IiB4MT0iMjUuMjUiIHgyPSIyMi4zNzUiIHkxPSI2LjM3NSIgeTI9IjE1LjEyNiIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIG9mZnNldD0iLjE1MyIgc3RvcC1jb2xvcj0iI2ZmZiIvPjxzdG9wIG9mZnNldD0iLjkyOCIgc3RvcC1jb2xvcj0iI2ZmZiIgc3RvcC1vcGFjaXR5PSIwIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9InJpX19BIiB4MT0iMTguNTYzIiB4Mj0iMjMuNzUiIHkxPSIyNC43NSIgeTI9IjUuNDM4IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agb2Zmc2V0PSIuMDU5IiBzdG9wLWNvbG9yPSIjZmZmIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjZmZmIiBzdG9wLW9wYWNpdHk9IjAiLz48L2xpbmVhckdyYWRpZW50PjxmaWx0ZXIgaWQ9InJpX19lIiB3aWR0aD0iOC4yNTgiIGhlaWdodD0iMTQuMDcyIiB4PSIyOC43NDYiIHk9IjE2Ljg5NSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIiBmaWx0ZXJVbml0cz0idXNlclNwYWNlT25Vc2UiPjxmZUZsb29kIGZsb29kLW9wYWNpdHk9IjAiIHJlc3VsdD0iQmFja2dyb3VuZEltYWdlRml4Ii8+PGZlQmxlbmQgaW49IlNvdXJjZUdyYXBoaWMiIGluMj0iQmFja2dyb3VuZEltYWdlRml4IiByZXN1bHQ9InNoYXBlIi8+PGZlR2F1c3NpYW5CbHVyIHJlc3VsdD0iZWZmZWN0MV9mb3JlZ3JvdW5kQmx1cl84MzFfNDIzOTAiIHN0ZERldmlhdGlvbj0iLjA2MyIvPjwvZmlsdGVyPjxmaWx0ZXIgaWQ9InJpX19pIiB3aWR0aD0iMjE2LjA2MiIgaGVpZ2h0PSIyMTcuMDIxIiB4PSItNzguOTA2IiB5PSItNzcuNTEiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiIgZmlsdGVyVW5pdHM9InVzZXJTcGFjZU9uVXNlIj48ZmVGbG9vZCBmbG9vZC1vcGFjaXR5PSIwIiByZXN1bHQ9IkJhY2tncm91bmRJbWFnZUZpeCIvPjxmZUJsZW5kIGluPSJTb3VyY2VHcmFwaGljIiBpbjI9IkJhY2tncm91bmRJbWFnZUZpeCIgcmVzdWx0PSJzaGFwZSIvPjxmZUdhdXNzaWFuQmx1ciByZXN1bHQ9ImVmZmVjdDFfZm9yZWdyb3VuZEJsdXJfODMxXzQyMzkwIiBzdGREZXZpYXRpb249IjUwIi8+PC9maWx0ZXI+PGZpbHRlciBpZD0icmlfX2wiIHdpZHRoPSIxNi41MjciIGhlaWdodD0iMTcuNzU0IiB4PSIyMC44NjEiIHk9IjIxLjk5IiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiIGZpbHRlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiLz48ZmVCbGVuZCBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJCYWNrZ3JvdW5kSW1hZ2VGaXgiIHJlc3VsdD0ic2hhcGUiLz48ZmVHYXVzc2lhbkJsdXIgcmVzdWx0PSJlZmZlY3QxX2ZvcmVncm91bmRCbHVyXzgzMV80MjM5MCIgc3RkRGV2aWF0aW9uPSIuMjUiLz48L2ZpbHRlcj48ZmlsdGVyIGlkPSJyaV9fciIgd2lkdGg9IjguMjU4IiBoZWlnaHQ9IjEzLjk3NyIgeD0iMTAuOTk2IiB5PSIxNy4wMjEiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiIgZmlsdGVyVW5pdHM9InVzZXJTcGFjZU9uVXNlIj48ZmVGbG9vZCBmbG9vZC1vcGFjaXR5PSIwIiByZXN1bHQ9IkJhY2tncm91bmRJbWFnZUZpeCIvPjxmZUJsZW5kIGluPSJTb3VyY2VHcmFwaGljIiBpbjI9IkJhY2tncm91bmRJbWFnZUZpeCIgcmVzdWx0PSJzaGFwZSIvPjxmZUdhdXNzaWFuQmx1ciByZXN1bHQ9ImVmZmVjdDFfZm9yZWdyb3VuZEJsdXJfODMxXzQyMzkwIiBzdGREZXZpYXRpb249Ii4wNjMiLz48L2ZpbHRlcj48ZmlsdGVyIGlkPSJyaV9fdiIgd2lkdGg9IjE4LjU2OCIgaGVpZ2h0PSIxOS41MjUiIHg9IjkuNTkxIiB5PSI3LjIyNSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIiBmaWx0ZXJVbml0cz0idXNlclNwYWNlT25Vc2UiPjxmZUZsb29kIGZsb29kLW9wYWNpdHk9IjAiIHJlc3VsdD0iQmFja2dyb3VuZEltYWdlRml4Ii8+PGZlQmxlbmQgaW49IlNvdXJjZUdyYXBoaWMiIGluMj0iQmFja2dyb3VuZEltYWdlRml4IiByZXN1bHQ9InNoYXBlIi8+PGZlR2F1c3NpYW5CbHVyIHJlc3VsdD0iZWZmZWN0MV9mb3JlZ3JvdW5kQmx1cl84MzFfNDIzOTAiIHN0ZERldmlhdGlvbj0iLjYyNSIvPjwvZmlsdGVyPjxmaWx0ZXIgaWQ9InJpX194IiB3aWR0aD0iMTYuNDM4IiBoZWlnaHQ9IjE3LjcwOSIgeD0iMTAuNjU2IiB5PSI4LjI5MSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIiBmaWx0ZXJVbml0cz0idXNlclNwYWNlT25Vc2UiPjxmZUZsb29kIGZsb29kLW9wYWNpdHk9IjAiIHJlc3VsdD0iQmFja2dyb3VuZEltYWdlRml4Ii8+PGZlQmxlbmQgaW49IlNvdXJjZUdyYXBoaWMiIGluMj0iQmFja2dyb3VuZEltYWdlRml4IiByZXN1bHQ9InNoYXBlIi8+PGZlR2F1c3NpYW5CbHVyIHJlc3VsdD0iZWZmZWN0MV9mb3JlZ3JvdW5kQmx1cl84MzFfNDIzOTAiIHN0ZERldmlhdGlvbj0iLjI1Ii8+PC9maWx0ZXI+PGZpbHRlciBpZD0icmlfX3oiIHdpZHRoPSIxNS43NTgiIGhlaWdodD0iMTYuOTk0IiB4PSIxMC45OTYiIHk9IjguNjMxIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiIGZpbHRlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiLz48ZmVCbGVuZCBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJCYWNrZ3JvdW5kSW1hZ2VGaXgiIHJlc3VsdD0ic2hhcGUiLz48ZmVHYXVzc2lhbkJsdXIgcmVzdWx0PSJlZmZlY3QxX2ZvcmVncm91bmRCbHVyXzgzMV80MjM5MCIgc3RkRGV2aWF0aW9uPSIuMDYzIi8+PC9maWx0ZXI+PC9kZWZzPjwvc3ZnPg==";
const SH={"aspect": 0.8675, "circles": [{"x": 0.2006, "y": 0.2632, "r": 0.1432}, {"x": 0.7964, "y": 0.7368, "r": 0.1431}]}, TAU=6.2831853;
const cv=document.getElementById('c'),ctx=cv.getContext('2d');
const clamp=(v,a,b)=>v<a?a:v>b?b:v;

// pre-render the SVG ONCE into a high-res bitmap -> crisp downscaled draws
const iconImg=new Image(); let occ=null,occRGBA=null,OW=0,OH=0,iconBmp=null;
iconImg.onload=()=>{
 const BH=1400, BW=Math.round(BH*SH.aspect);          // hi-res master bitmap
 const b=document.createElement('canvas');b.width=BW;b.height=BH;
 b.getContext('2d').drawImage(iconImg,0,0,BW,BH);iconBmp=b;
 OH=460;OW=Math.round(OH*SH.aspect);                  // occupancy + colour sample
 const o=document.createElement('canvas');o.width=OW;o.height=OH;
 const oc=o.getContext('2d');oc.drawImage(b,0,0,OW,OH);
 const d=oc.getImageData(0,0,OW,OH).data;occ=new Uint8Array(OW*OH);occRGBA=d;
 for(let i=0;i<OW*OH;i++)occ[i]=d[i*4+3]>40?1:0;};
iconImg.src=ICON;

let W,H,DPR,ix,iy,iw,ih;
function layout(){DPR=Math.min(window.devicePixelRatio||1,2.5);
 const r=cv.getBoundingClientRect();W=r.width;H=r.height;
 cv.width=Math.round(W*DPR);cv.height=Math.round(H*DPR);ctx.setTransform(DPR,0,0,DPR,0,0);
 ih=H*0.70; iw=ih*SH.aspect; ix=(W-iw)/2; iy=(H-ih)/2;}
new ResizeObserver(layout).observe(cv);layout();
function inside(px,py){if(!occ)return 0;const lx=((px-ix)/iw*OW)|0,ly=((py-iy)/ih*OH)|0;
 if(lx<0||ly<0||lx>=OW||ly>=OH)return 0;return occ[ly*OW+lx];}

// brand palette
const NEU=a=>'rgba(244,242,239,'+a+')';   // #F4F2EF warm off-white
const HAIR=a=>'rgba(156,156,156,'+a+')';  // #9C9C9C neutral
const ACC='#FFA927';                       // brand flame accent
const UNIT_h=()=>ih;
const ANG=-18.2*Math.PI/180;                 // measured slope of logo's top/bottom edges
const TOPPT=[0.314,0.060], BOTPT=[0.673,0.941]; // points on those edges (logo-normalized)
const angVal=(90+(-ANG*180/Math.PI)).toFixed(0);
const c0=SH.circles[0],c1=SH.circles[1];
const dimVal=(Math.hypot((c1.x-c0.x)*SH.aspect,(c1.y-c0.y))).toFixed(3); // in icon-height units
function txt(s,x,y,a,sz,al){ctx.fillStyle=NEU(a);ctx.font='500 '+(sz||12)+'px Arial,Helvetica,sans-serif';ctx.textAlign=al||'left';ctx.textBaseline='alphabetic';ctx.fillText(s,x,y);}

let mx=-999,my=-999,over=false;
cv.addEventListener('pointermove',e=>{const r=cv.getBoundingClientRect();mx=e.clientX-r.left;my=e.clientY-r.top;over=true;});
cv.addEventListener('pointerleave',()=>over=false);
const qp=new URLSearchParams(location.search);if(qp.has('mx'))over=true;

function drawBG(){ctx.fillStyle='#151515';ctx.fillRect(0,0,W,H);
 const g=ctx.createRadialGradient(W*0.5,H*0.46,10,W*0.5,H*0.5,W*0.72);
 g.addColorStop(0,'rgba(38,36,34,0.55)');g.addColorStop(1,'rgba(0,0,0,0)');
 ctx.fillStyle=g;ctx.fillRect(0,0,W,H);}
function drawFrame(){ctx.strokeStyle=HAIR(0.5);ctx.lineWidth=1;const p=nxp(14),t=nxp(9);
 [[p,p,1,1],[W-p,p,-1,1],[p,H-p,1,-1],[W-p,H-p,-1,-1]].forEach(([x,y,sx,sy])=>{
  ctx.beginPath();ctx.moveTo(x+sx*t,y);ctx.lineTo(x,y);ctx.lineTo(x,y+sy*t);ctx.stroke();});
 ctx.strokeStyle=HAIR(0.34);
 [[W*0.5,p],[W*0.5,H-p],[p,H*0.5],[W-p,H*0.5]].forEach(([x,y])=>{
  ctx.beginPath();ctx.moveTo(x-4,y);ctx.lineTo(x+4,y);ctx.moveTo(x,y-4);ctx.lineTo(x,y+4);ctx.stroke();});}
const nxp=v=>v/700*W;
function drawLines(t){
 const dx=Math.cos(ANG),dy=Math.sin(ANG),L=W*1.7,perp=[-dy,dx];
 ctx.lineWidth=1;
 // two dashed lines collinear with the logo's top & bottom diagonal edges
 [TOPPT,BOTPT].forEach(p=>{const ox=ix+p[0]*iw,oy=iy+p[1]*ih;
  ctx.strokeStyle=NEU(0.42);ctx.setLineDash([11,9]);ctx.lineDashOffset=-(t*30)%20;
  ctx.beginPath();ctx.moveTo(ox-dx*L,oy-dy*L);ctx.lineTo(ox+dx*L,oy+dy*L);ctx.stroke();});
 // two vertical dotted guides flanking the logo (left & right tangents)
 const y0=nxp(18), y1=H-nxp(18);
 [ix, ix+iw].forEach(vx=>{
  ctx.strokeStyle=HAIR(0.45);ctx.setLineDash([1,6]);ctx.lineDashOffset=-(t*16)%7;ctx.lineWidth=1.4;
  ctx.beginPath();ctx.moveTo(vx,y0);ctx.lineTo(vx,y1);ctx.stroke();});
 ctx.setLineDash([]);ctx.lineWidth=1;}
function drawSymbol(){if(!iconBmp)return;
 // soft brand glow behind
 ctx.save();ctx.shadowColor='rgba(255,95,61,0.5)';ctx.shadowBlur=nxp(26);
 ctx.drawImage(iconBmp,ix,iy,iw,ih);ctx.restore();
 ctx.drawImage(iconBmp,ix,iy,iw,ih);}
function drawCircles(t){ctx.lineWidth=1;
 SH.circles.forEach((c,i)=>{const x=ix+c.x*iw,y=iy+c.y*ih,r=c.r*ih;
  ctx.strokeStyle=NEU(0.62);ctx.setLineDash([5,5]);ctx.lineDashOffset=(t*12*(i%2?1:-1))%10;
  ctx.beginPath();ctx.arc(x,y,r,0,TAU);ctx.stroke();
  ctx.setLineDash([]);ctx.strokeStyle=NEU(0.7);
  ctx.beginPath();ctx.moveTo(x-4,y);ctx.lineTo(x+4,y);ctx.moveTo(x,y-4);ctx.lineTo(x,y+4);ctx.stroke();
  const dir=i?1:-1,ex=x+r*0.72*dir,ey=y-r*0.72;
  ctx.strokeStyle=NEU(0.5);ctx.beginPath();ctx.moveTo(x,y);ctx.lineTo(ex+14*dir,ey-8);ctx.stroke();
  txt('2x R'+c.r.toFixed(3),ex+16*dir,ey-6,0.82,12,dir<0?'right':'left');});
 ctx.setLineDash([]);}
function drawDims(){
 const ax=ix+c0.x*iw,ay=iy+c0.y*ih,bx=ix+c1.x*iw,by=iy+c1.y*ih;
 const dx=bx-ax,dy=by-ay,L=Math.hypot(dx,dy)||1,ox=-dy/L*nxp(28),oy=dx/L*nxp(28);
 ctx.strokeStyle=NEU(0.55);ctx.lineWidth=1;
 ctx.beginPath();ctx.moveTo(ax+ox,ay+oy);ctx.lineTo(bx+ox,by+oy);ctx.stroke();
 [[ax,ay,1],[bx,by,-1]].forEach(([px,py,s])=>{const ux=dx/L*s,uy=dy/L*s;
  ctx.beginPath();ctx.moveTo(px+ox,py+oy);ctx.lineTo(px+ox+ux*7-uy*3,py+oy+uy*7+ux*3);
  ctx.moveTo(px+ox,py+oy);ctx.lineTo(px+ox+ux*7+uy*3,py+oy+uy*7-ux*3);ctx.stroke();});
 txt(dimVal,(ax+bx)/2+ox+6,(ay+by)/2+oy+4,0.82,12);
 // angle arc at the RIGHT vertical x bottom diagonal — on the OPPOSITE wedge
 const vx=ix+iw, p0x=ix+BOTPT[0]*iw, p0y=iy+BOTPT[1]*ih;
 const s=(vx-p0x)/Math.cos(ANG), Ix=vx, Iy=p0y+s*Math.sin(ANG), R=nxp(34);
 ctx.strokeStyle=NEU(0.55);ctx.setLineDash([]);
 ctx.beginPath();ctx.arc(Ix,Iy,R,ANG,0.5*Math.PI,false);ctx.stroke();
 // place label beyond the arc, along the wedge bisector, clear of both lines
 const mid=ANG+ (0.5*Math.PI-ANG)/2;
 txt(angVal+'°',Ix+Math.cos(mid)*R*1.55,Iy+Math.sin(mid)*R*1.55+4,0.82,13,'left');}
function hashd(a,b,c){let h=(a*374761393+b*668265263+c*2246822519)>>>0;h=(h^(h>>13))*1274126177>>>0;return h%10;}
function drawCursor(t){if(!over||!occ)return;
 let cx=mx,cy=my;if(qp.has('mx')){cx=parseFloat(qp.get('mx'))*W;cy=parseFloat(qp.get('my'))*H;}
 const r=nxp(40); if(r<2)return;
 let near=inside(cx,cy);
 for(let a=0;a<TAU&&!near;a+=0.5)for(let rr=r*0.4;rr<=r&&!near;rr+=r*0.3)if(inside(cx+Math.cos(a)*rr,cy+Math.sin(a)*rr))near=true;
 if(!near)return;
 ctx.save();ctx.beginPath();ctx.arc(cx,cy,r,0,TAU);ctx.clip();
 drawBG();drawLines(t);
 const step=Math.max(3,nxp(8.5)),fs=nxp(9),bucket=(t*8)|0;
 ctx.font='700 '+fs+'px Arial,Helvetica,sans-serif';ctx.textAlign='center';ctx.textBaseline='middle';
 for(let gy=Math.floor((cy-r)/step)*step;gy<cy+r;gy+=step)for(let gx=Math.floor((cx-r)/step)*step;gx<cx+r;gx+=step){
  const dd=Math.hypot(gx-cx,gy-cy);if(dd>r)continue;if(!inside(gx,gy))continue;
  const d=hashd((gx/step)|0,(gy/step)|0,bucket),edge=1-dd/r;
  // colour each digit with the EXACT logo colour at this position
  const lx=clamp(((gx-ix)/iw*OW)|0,0,OW-1), ly=clamp(((gy-iy)/ih*OH)|0,0,OH-1), oi=(ly*OW+lx)*4;
  const cr=occRGBA[oi],cg=occRGBA[oi+1],cb=occRGBA[oi+2];
  const a=clamp(0.7+edge*0.3,0,1);
  ctx.shadowColor='rgba('+cr+','+cg+','+cb+',0.5)';ctx.shadowBlur=fs*0.35;
  ctx.fillStyle='rgba('+cr+','+cg+','+cb+','+a+')';ctx.fillText(d,gx,gy);}
 ctx.shadowBlur=0;ctx.restore();
 ctx.strokeStyle=NEU(0.22);ctx.lineWidth=1;ctx.beginPath();ctx.arc(cx,cy,r,0,TAU);ctx.stroke();}

let last=performance.now()/1000,t0=last;
function frame(now){now/=1000;let dt=now-last;last=now;if(dt>0.1)dt=0.1;const t=now-t0;
 ctx.setTransform(DPR,0,0,DPR,0,0);
 drawBG();drawFrame();drawLines(t);drawSymbol();drawCircles(t);drawDims();drawCursor(t);
 requestAnimationFrame(frame);}
requestAnimationFrame(frame);
</script></body></html>
`;

export const domain = (() => {
  const placeholder = "your-domain.com";
  if (typeof window !== "undefined" && !globalThis.__revDomainSetup) {
    globalThis.__revDomainSetup = true;
    function textNodes(node) {
      if (node.nodeType === Node.TEXT_NODE) return [node];
      const nodes = [];
      for (const child of node.childNodes) {
        nodes.push(...textNodes(child));
      }
      return nodes;
    }
    function anchorNodes(node) {
      if (node.nodeType === Node.ELEMENT_NODE && node.tagName === "A") return [node];
      const nodes = [];
      for (const child of node.childNodes) {
        nodes.push(...anchorNodes(child));
      }
      return nodes;
    }
    const domain = globalThis.__revDomain || new URLSearchParams(globalThis.location.search).get('domain') || "yourdomain.com";
    globalThis.__revDomain = domain;
    if (globalThis.__revDomainObs) return;
    const obs = globalThis.__revDomainObs || new MutationObserver(mutations => {
      for (const {addedNodes, removedNodes, target} of mutations) {
        for (const node of [...addedNodes, target]) {
          if (node instanceof HTMLScriptElement) continue;
          if (node instanceof HTMLStyleElement) continue;
          for (const textNode of textNodes(node)) {
            if (textNode.nodeValue && textNode.nodeValue.includes(placeholder)) {
              setTimeout(() => {
                textNode.nodeValue = textNode.nodeValue.replace(placeholder, domain);
              }, 100);
            }
          }
          for (const anchorNode of anchorNodes(node)) {
            if (anchorNode.href && anchorNode.href.includes(placeholder)) {
              setTimeout(() => {
                anchorNode.href = anchorNode.href.replace(placeholder, domain);
              }, 100);
            }
          }
        }
      }
    });
    obs.observe(document.body, {
      childList: true,
      subtree: true
    });
  }
  return placeholder;
})();

<iframe srcDoc={heroHtml} title="RevIQ" scrolling="no" className="block" style={{ display: "block", width: "100%", aspectRatio: "700 / 320", border: "none", borderRadius: "16px" }} />

## 快速开始

开始使用 RevIQ 之前，您需要完成以下几个步骤。

<CardGroup cols={3}>
  <Card title="网站管理员" icon="globe" href="/cn/quickstart/webmaster">
    批准我们对您网站的需求
  </Card>

  <Card title="前端" icon="image" href="/cn/quickstart/frontend">
    将我们的脚本添加到您的网站
  </Card>

  <Card title="桌面应用" icon="atom" href="/cn/quickstart/native">
    将我们的 SDK 集成到您的应用中
  </Card>
</CardGroup>
