Layout4.2.5


SUBMITTED BY: hyperloko21

DATE: Nov. 5, 2022, 1:18 a.m.

UPDATED: March 18, 2024, 7:48 p.m.

FORMAT: Text only

SIZE: 81.0 kB

HITS: 717

  1. [
  2. {
  3. "id": 14253,
  4. "label": "Nome do app",
  5. "name": "APP_NAME",
  6. "value": null,
  7. "type": "STRING",
  8. "status": "ACTIVE",
  9. "user_id": "2a6b1d78-e6f3-4956-be98-29d1d70278fe"
  10. },
  11. {
  12. "id": 14254,
  13. "label": "Logo do app",
  14. "name": "APP_LOGO",
  15. "value": "https://atlantus.com.br/miracle/update/drawing/heKKjOTX7Ij5AAD94RHwauipYdHEH4hcj2pgoJlpS7VFr9AkTwXpvDqnSrXRc0bhXT3BeQvw92JUsPtLGj5lGhidnAf8zVVG7MacA0av3HfCJQqYFDK1tYCBddSGNPdKA5DAIaMQnrYZa28EXSWl75TH6f4sCg0Elz8GpXHYO793JnCcv1Om6A6m8HgtK7Q5dVuEnlUPgwaUKWliL5FmeJTZnFg3yksmRzL1yCGc6Ct04P3x.png",
  16. "type": "IMAGE",
  17. "status": "ACTIVE",
  18. "user_id": "2a6b1d78-e6f3-4956-be98-29d1d70278fe"
  19. },
  20. {
  21. "id": 14255,
  22. "label": "Imagem de fundo",
  23. "name": "APP_BACKGROUND_IMAGE",
  24. "value": "https://i.pinimg.com/originals/0c/8b/7d/0c8b7dbbaa53f94e56fd597c482cba96.jpg",
  25. "type": "IMAGE",
  26. "status": "ACTIVE",
  27. "user_id": "2a6b1d78-e6f3-4956-be98-29d1d70278fe"
  28. },
  29. {
  30. "id": 14256,
  31. "label": "Tipo do fundo do app",
  32. "name": "APP_BACKGROUND_TYPE",
  33. "value": {
  34. "options": [
  35. {
  36. "label": "Imagem",
  37. "value": "IMAGE"
  38. },
  39. {
  40. "label": "Cor",
  41. "value": "COLOR"
  42. }
  43. ],
  44. "selected": "COLOR"
  45. },
  46. "type": "SELECT",
  47. "status": "ACTIVE",
  48. "user_id": "2a6b1d78-e6f3-4956-be98-29d1d70278fe"
  49. },
  50. {
  51. "id": 14257,
  52. "label": "Cor de fundo",
  53. "name": "APP_BACKGROUND_COLOR",
  54. "value": "#080e16c7",
  55. "type": "COLOR",
  56. "status": "ACTIVE",
  57. "user_id": "2a6b1d78-e6f3-4956-be98-29d1d70278fe"
  58. },
  59. {
  60. "id": 14258,
  61. "label": "Cor do card inicial",
  62. "name": "APP_CARD_COLOR",
  63. "value": "#b0a7ae00",
  64. "type": "COLOR",
  65. "status": "ACTIVE",
  66. "user_id": "2a6b1d78-e6f3-4956-be98-29d1d70278fe"
  67. },
  68. {
  69. "id": 14259,
  70. "label": "Raio do card inicial",
  71. "name": "APP_CARD_RADIUS",
  72. "value": 20,
  73. "type": "INTEGER",
  74. "status": "ACTIVE",
  75. "user_id": "2a6b1d78-e6f3-4956-be98-29d1d70278fe"
  76. },
  77. {
  78. "id": 14260,
  79. "label": "Cor do card de status",
  80. "name": "APP_CARD_STATUS_COLOR",
  81. "value": "#ffa72b00",
  82. "type": "COLOR",
  83. "status": "ACTIVE",
  84. "user_id": "2a6b1d78-e6f3-4956-be98-29d1d70278fe"
  85. },
  86. {
  87. "id": 14261,
  88. "label": "Raio do card de status",
  89. "name": "APP_CARD_STATUS_RADIUS",
  90. "value": 25,
  91. "type": "INTEGER",
  92. "status": "ACTIVE",
  93. "user_id": "2a6b1d78-e6f3-4956-be98-29d1d70278fe"
  94. },
  95. {
  96. "id": 14262,
  97. "label": "Cor do card de configurações",
  98. "name": "APP_CARD_CONFIG_COLOR",
  99. "value": "#7d7775c9",
  100. "type": "COLOR",
  101. "status": "ACTIVE",
  102. "user_id": "2a6b1d78-e6f3-4956-be98-29d1d70278fe"
  103. },
  104. {
  105. "id": 14263,
  106. "label": "Cor do fundo dos dialogs",
  107. "name": "APP_DIALOG_BACKGROUND_COLOR",
  108. "value": "#000000e8",
  109. "type": "COLOR",
  110. "status": "ACTIVE",
  111. "user_id": "2a6b1d78-e6f3-4956-be98-29d1d70278fe"
  112. },
  113. {
  114. "id": 14264,
  115. "label": "Cor do fundo do dialog de log",
  116. "name": "APP_DIALOG_LOGGER_COLOR",
  117. "value": "#080e16c7",
  118. "type": "COLOR",
  119. "status": "ACTIVE",
  120. "user_id": "2a6b1d78-e6f3-4956-be98-29d1d70278fe"
  121. },
  122. {
  123. "id": 14265,
  124. "label": "Cor das bordas",
  125. "name": "APP_BORDER_COLOR",
  126. "value": "#1d242e73",
  127. "type": "COLOR",
  128. "status": "ACTIVE",
  129. "user_id": "2a6b1d78-e6f3-4956-be98-29d1d70278fe"
  130. },
  131. {
  132. "id": 14266,
  133. "label": "Cor dos inputs",
  134. "name": "APP_INPUT_COLOR",
  135. "value": "#1d242e73",
  136. "type": "COLOR",
  137. "status": "ACTIVE",
  138. "user_id": "2a6b1d78-e6f3-4956-be98-29d1d70278fe"
  139. },
  140. {
  141. "id": 14267,
  142. "label": "Raio dos inputs",
  143. "name": "APP_INPUT_RADIUS",
  144. "value": 25,
  145. "type": "INTEGER",
  146. "status": "ACTIVE",
  147. "user_id": "2a6b1d78-e6f3-4956-be98-29d1d70278fe"
  148. },
  149. {
  150. "id": 14268,
  151. "label": "Cor dos textos",
  152. "name": "APP_TEXT_COLOR",
  153. "value": "#f9fff2ff",
  154. "type": "COLOR",
  155. "status": "ACTIVE",
  156. "user_id": "2a6b1d78-e6f3-4956-be98-29d1d70278fe"
  157. },
  158. {
  159. "id": 14269,
  160. "label": "Cor dos botões",
  161. "name": "APP_BUTTON_COLOR",
  162. "value": "#2b2b2b9e",
  163. "type": "COLOR",
  164. "status": "ACTIVE",
  165. "user_id": "2a6b1d78-e6f3-4956-be98-29d1d70278fe"
  166. },
  167. {
  168. "id": 14270,
  169. "label": "Raio dos botões",
  170. "name": "APP_BUTTON_RADIUS",
  171. "value": 25,
  172. "type": "INTEGER",
  173. "status": "ACTIVE",
  174. "user_id": "2a6b1d78-e6f3-4956-be98-29d1d70278fe"
  175. },
  176. {
  177. "id": 14271,
  178. "label": "Cor dos icones",
  179. "name": "APP_ICON_COLOR",
  180. "value": "#fff7fbff",
  181. "type": "COLOR",
  182. "status": "ACTIVE",
  183. "user_id": "2a6b1d78-e6f3-4956-be98-29d1d70278fe"
  184. },
  185. {
  186. "id": 14272,
  187. "label": "Exibir modo de conexão",
  188. "name": "APP_SHOW_CONNECTION_MODE",
  189. "value": false,
  190. "type": "BOOLEAN",
  191. "status": "ACTIVE",
  192. "user_id": "2a6b1d78-e6f3-4956-be98-29d1d70278fe"
  193. },
  194. {
  195. "id": 22645,
  196. "label": "Atualizar automaticamente as configurações ao lançar uma atualização.",
  197. "name": "APP_CONFIG_AUTO_UPDATE",
  198. "value": true,
  199. "type": "BOOLEAN",
  200. "status": "ACTIVE",
  201. "user_id": "2a6b1d78-e6f3-4956-be98-29d1d70278fe"
  202. },
  203. {
  204. "id": 14273,
  205. "label": "Iniciar o app automaticamente ao reiniciar o dispositivo",
  206. "name": "APP_AUTO_START",
  207. "value": false,
  208. "type": "BOOLEAN",
  209. "status": "ACTIVE",
  210. "user_id": "2a6b1d78-e6f3-4956-be98-29d1d70278fe"
  211. },
  212. {
  213. "id": 14274,
  214. "label": "Usar limiter de conexão",
  215. "name": "APP_CONNECTION_LIMITER",
  216. "value": true,
  217. "type": "BOOLEAN",
  218. "status": "ACTIVE",
  219. "user_id": "2a6b1d78-e6f3-4956-be98-29d1d70278fe"
  220. },
  221. {
  222. "id": 14275,
  223. "label": "Usar botão de atualizações",
  224. "name": "APP_BTN_UPDATE_ENABLED",
  225. "value": true,
  226. "type": "BOOLEAN",
  227. "status": "ACTIVE",
  228. "user_id": "2a6b1d78-e6f3-4956-be98-29d1d70278fe"
  229. },
  230. {
  231. "id": 14276,
  232. "label": "Usar botão de registros",
  233. "name": "APP_BTN_LOGGER_ENABLED",
  234. "value": true,
  235. "type": "BOOLEAN",
  236. "status": "ACTIVE",
  237. "user_id": "2a6b1d78-e6f3-4956-be98-29d1d70278fe"
  238. },
  239. {
  240. "id": 14277,
  241. "label": "Usar botão de pagina webview",
  242. "name": "APP_BTN_PAGE_ENABLED",
  243. "value": false,
  244. "type": "BOOLEAN",
  245. "status": "ACTIVE",
  246. "user_id": "2a6b1d78-e6f3-4956-be98-29d1d70278fe"
  247. },
  248. {
  249. "id": 14278,
  250. "label": "Ativar dialog de erros",
  251. "name": "APP_DIALOG_ERROR_ENABLED",
  252. "value": false,
  253. "type": "BOOLEAN",
  254. "status": "ACTIVE",
  255. "user_id": "2a6b1d78-e6f3-4956-be98-29d1d70278fe"
  256. },
  257. {
  258. "id": 14279,
  259. "label": "Ativar dialog de checkuser",
  260. "name": "APP_CHECKUSER_DIALOG_ENABLED",
  261. "value": true,
  262. "type": "BOOLEAN",
  263. "status": "ACTIVE",
  264. "user_id": "2a6b1d78-e6f3-4956-be98-29d1d70278fe"
  265. },
  266. {
  267. "id": 14280,
  268. "label": "Ativar toast de sucesso",
  269. "name": "APP_SUCCESS_TOAST_ENABLED",
  270. "value": true,
  271. "type": "BOOLEAN",
  272. "status": "ACTIVE",
  273. "user_id": "2a6b1d78-e6f3-4956-be98-29d1d70278fe"
  274. },
  275. {
  276. "id": 14281,
  277. "label": "Ativar toast de erro",
  278. "name": "APP_ERROR_TOAST_ENABLED",
  279. "value": true,
  280. "type": "BOOLEAN",
  281. "status": "ACTIVE",
  282. "user_id": "2a6b1d78-e6f3-4956-be98-29d1d70278fe"
  283. },
  284. {
  285. "id": 14282,
  286. "label": "Usar layout webview",
  287. "name": "APP_LAYOUT_WEBVIEW_ENABLED",
  288. "value": false,
  289. "type": "BOOLEAN",
  290. "status": "ACTIVE",
  291. "user_id": "2a6b1d78-e6f3-4956-be98-29d1d70278fe"
  292. },
  293. {
  294. "id": 14283,
  295. "label": "Mensagem",
  296. "name": "APP_MESSAGE",
  297. "value": null,
  298. "type": "TEXT",
  299. "status": "ACTIVE",
  300. "user_id": "2a6b1d78-e6f3-4956-be98-29d1d70278fe"
  301. },
  302. {
  303. "id": 14284,
  304. "label": "URL de atualização do aplicativo",
  305. "name": "APP_UPDATE_URL",
  306. "value": null,
  307. "type": "URL",
  308. "status": "ACTIVE",
  309. "user_id": "2a6b1d78-e6f3-4956-be98-29d1d70278fe"
  310. },
  311. {
  312. "id": 14285,
  313. "label": "Tipo de mensagem",
  314. "name": "APP_MESSAGE_TYPE",
  315. "value": {
  316. "options": [
  317. {
  318. "label": "Alerta",
  319. "value": "ALERT"
  320. },
  321. {
  322. "label": "Informação",
  323. "value": "INFO"
  324. },
  325. {
  326. "label": "Boas vindas",
  327. "value": "WELCOME"
  328. },
  329. {
  330. "label": "Sem mensagem",
  331. "value": "NONE"
  332. }
  333. ],
  334. "selected": "NONE"
  335. },
  336. "type": "SELECT",
  337. "status": "ACTIVE",
  338. "user_id": "2a6b1d78-e6f3-4956-be98-29d1d70278fe"
  339. },
  340. {
  341. "id": 14286,
  342. "label": "LAYOUT WEBVIEW (POR SUA CONTA E RISCO)",
  343. "name": "APP_LAYOUT_WEBVIEW",
  344. "value": null,
  345. "type": "HTML",
  346. "status": "ACTIVE",
  347. "user_id": "2a6b1d78-e6f3-4956-be98-29d1d70278fe"
  348. },
  349. {
  350. "id": 14287,
  351. "label": "ANDROID WEBVIEW (POR SUA CONTA E RISCO)",
  352. "name": "APP_SUPPORT_BUTTON",
  353. "value": "<!DOCTYPE html>
  354. <html class="w-full h-full" lang="pt-BR">
  355. <head>
  356. <meta charset="UTF-8" />
  357. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  358. <title>780890715 - @RagnarVps | @alexdsgmoura</title>
  359. <style>
  360. *,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:initial;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:initial}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,::backdrop,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.absolute{position:absolute}.relative{position:relative}.bottom-1{bottom:.25rem}.left-1\/2{left:50%}.right-1{right:.25rem}.top-1{top:.25rem}.top-1\/2{top:50%}.my-3{margin-top:.75rem;margin-bottom:.75rem}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.ml-auto{margin-left:auto}.mt-14{margin-top:3.5rem}.mt-2{margin-top:.5rem}.mt-2\.5{margin-top:.625rem}.mt-3{margin-top:.75rem}.mt-5{margin-top:1.25rem}.mt-8{margin-top:2rem}.mt-auto{margin-top:auto}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.h-1\/5{height:20%}.h-10{height:2.5rem}.h-12{height:3rem}.h-2\/3{height:66.666667%}.h-2\/4{height:50%}.h-20{height:5rem}.h-3{height:.75rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-\[100\%\]{height:100%}.h-\[40px\]{height:40px}.h-\[90\%\]{height:90%}.h-\[calc\(100\%-160px\)\]{height:calc(100% - 160px)}.h-auto{height:auto}.h-full{height:100%}.max-h-8{max-height:2rem}.max-h-\[10\%\]{max-height:10%}.max-h-\[66\.666667\%\]{max-height:66.666667%}.min-h-\[40px\]{min-height:40px}.w-10{width:2.5rem}.w-11\/12{width:91.666667%}.w-14{width:3.5rem}.w-2\/4{width:50%}.w-20{width:5rem}.w-4{width:1rem}.w-4\/5{width:80%}.w-5{width:1.25rem}.w-5\/6{width:83.333333%}.w-6{width:1.5rem}.w-8{width:2rem}.w-\[40px\]{width:40px}.w-\[calc\(100\%-30px\)\]{width:calc(100% - 30px)}.w-\[calc\(100\%-40px\)\]{width:calc(100% - 40px)}.w-auto{width:auto}.w-full{width:100%}.flex-1{flex:1 1 0%}.-translate-x-1\/2{--tw-translate-x:-50%}.-translate-x-1\/2,.-translate-x-full{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-full{--tw-translate-x:-100%}.-translate-y-1\/2{--tw-translate-y:-50%}.-translate-y-1\/2,.scale-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-0{--tw-scale-x:0;--tw-scale-y:0}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-none{cursor:none}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-items-center{justify-items:center}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-5{gap:1.25rem}.overflow-auto{overflow:auto}.overflow-hidden,.truncate{overflow:hidden}.truncate{text-overflow:ellipsis;white-space:nowrap}.rounded-full{border-radius:9999px}.rounded-md{border-radius:.375rem}.rounded-t-md{border-top-left-radius:.375rem;border-top-right-radius:.375rem}.border{border-width:1px}.border-b{border-bottom-width:1px}.border-\[\#01010342\]{border-color:#01010342}.border-\[\#767881\]{--tw-border-opacity:1;border-color:rgb(118 120 129/var(--tw-border-opacity))}.bg-\[\#070610\]{--tw-bg-opacity:1;background-color:rgb(7 6 16/var(--tw-bg-opacity))}.bg-\[\#0a0c17ab\]{background-color:#0a0c17ab}.bg-\[\#0c0d18e0\]{background-color:#0c0d18e0}.bg-\[\#121c28\]{--tw-bg-opacity:1;background-color:rgb(18 28 40/var(--tw-bg-opacity))}.bg-\[\#14141489\]{background-color:#14141489}.bg-\[\#414cb8\]{--tw-bg-opacity:1;background-color:rgb(65 76 184/var(--tw-bg-opacity))}.bg-\[\#575e81\]{--tw-bg-opacity:1;background-color:rgb(87 94 129/var(--tw-bg-opacity))}.bg-red-900{--tw-bg-opacity:1;background-color:rgb(127 29 29/var(--tw-bg-opacity))}.bg-transparent{background-color:initial}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.from-\[\#0a0c17ab\]{--tw-gradient-from:#0a0c17ab var(--tw-gradient-from-position);--tw-gradient-to:#0a0c1700 var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.to-transparent{--tw-gradient-to:#0000 var(--tw-gradient-to-position)}.stroke-\[\#FFFFFF\],.stroke-white{stroke:#fff}.p-2{padding:.5rem}.px-1{padding-left:.25rem;padding-right:.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-\[10\%\]{padding-left:10%;padding-right:10%}.px-\[10px\]{padding-left:10px;padding-right:10px}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.pb-\[30px\]{padding-bottom:30px}.pl-1{padding-left:.25rem}.pr-6{padding-right:1.5rem}.pt-\[10px\]{padding-top:10px}.text-center{text-align:center}.text-\[0\.5rem\]{font-size:.5rem}.text-\[0\.65rem\]{font-size:.65rem}.text-\[0\.6rem\]{font-size:.6rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.font-medium{font-weight:500}.leading-7{line-height:1.75rem}.text-\[\#11c9ff\]{--tw-text-opacity:1;color:rgb(17 201 255/var(--tw-text-opacity))}.text-\[\#767881\]{--tw-text-opacity:1;color:rgb(118 120 129/var(--tw-text-opacity))}.text-\[\#7d7f81\]{--tw-text-opacity:1;color:rgb(125 127 129/var(--tw-text-opacity))}.text-\[\#FF0000\]{--tw-text-opacity:1;color:rgb(255 0 0/var(--tw-text-opacity))}.text-\[\#FFFFFF\],.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.shadow-\[0px_0px_10px_0px_rgba\(18\2c 22\2c 34\2c 1\)\]{--tw-shadow:0px 0px 10px 0px #121622;--tw-shadow-colored:0px 0px 10px 0px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid #0000;outline-offset:2px}.transition-\[max-height\]{transition-property:max-height;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-1000{transition-duration:1s}@media (max-width:300px){.max-\[300px\]\:text-sm{font-size:.875rem;line-height:1.25rem}}@media (min-width:280px){.min-\[280px\]\:text-sm{font-size:.875rem;line-height:1.25rem}.min-\[280px\]\:text-xs{font-size:.75rem;line-height:1rem}}
  361. </style>
  362. </head>
  363. <body class="w-full h-full">
  364. <main class="w-full h-full flex flex-col relative">
  365. <section class="w-full h-full flex flex-col px-[10px] pt-[10px] pb-[30px] overflow-hidden" id="container-home">
  366. <section class="flex justify-between items-center relative">
  367. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="text-[#FFFFFF] w-8 h-8" id="open-menu" viewBox="0 0 16 16">
  368. <path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5m0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5m0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5" />
  369. </svg>
  370. <div class="absolute left-1/2 top-1/2 transform -translate-x-1/2 -translate-y-1/2">
  371. <span class="text-[#FFFFFF] min-[280px]:text-xs text-sm" id="carrier-details">AG SSH BRAZIL </span>
  372. </div>
  373. <div>
  374. <span class="text-[#FFFFFF] min-[280px]:text-xs text-sm" id="vpn-status">Inativo</span>
  375. </div>
  376. </section>
  377. <section class="w-full h-1/5 flex justify-center">
  378. <img class="w-4/5" id="app-logo" src="https://s13.gifyu.com/images/S05Y3.gif" alt="logo" />
  379. </section>
  380. <section class="w-full h-[40px] flex justify-between items-center gap-2 mt-2.5">
  381. <button class="w-[calc(100%-40px)] h-full flex items-center justify-between gap-1 px-1 rounded-md cursor-none outline-none bg-[#070610]" id="button-of-list-carrier" type="button" title="Selecionar Configuração">
  382. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="w-6 h-6 text-[#FFFFFF]" viewBox="0 0 16 16">
  383. <path d="M8 16s6-5.686 6-10A6 6 0 0 0 2 6c0 4.314 6 10 6 10m0-7a3 3 0 1 1 0-6 3 3 0 0 1 0 6" />
  384. </svg>
  385. <span class="w-full text-[#FFFFFF] text-xs truncate" id="value-of-carrier">ESCOLHA UMA CONFIGURAÇÃO</span>
  386. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="text-[#FFFFFF] w-5 h-5" viewBox="0 0 16 16">
  387. <path fill-rule="evenodd" d="M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z" />
  388. </svg>
  389. </button>
  390. <button class="w-[40px] h-full flex items-center justify-center rounded-md cursor-none outline-none bg-[#070610]" id="button-open-checkuser" type="button" title="checkuser">
  391. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="text-[#FFFFFF]" viewBox="0 0 16 16">
  392. <path d="M4.684 11.523v-2.3h2.261v-.61H4.684V6.801h2.464v-.61H4v5.332zm3.296 0h.676V8.98c0-.554.227-1.007.953-1.007.125 0 .258.004.329.015v-.613a1.806 1.806 0 0 0-.254-.02c-.582 0-.891.32-1.012.567h-.02v-.504H7.98v4.105zm2.805-5.093c0 .238.192.425.43.425a.428.428 0 1 0 0-.855.426.426 0 0 0-.43.43m.094 5.093h.672V7.418h-.672z" />
  393. <path d="M3.5 0a.5.5 0 0 1 .5.5V1h8V.5a.5.5 0 0 1 1 0V1h1a2 2 0 0 1 2 2v11a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V3a2 2 0 0 1 2-2h1V.5a.5.5 0 0 1 .5-.5M1 4v10a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V4z" />
  394. </svg>
  395. </button>
  396. </section>
  397. <section class="w-full h-auto flex flex-col items-center gap-3 mt-2.5 py-2.5 bg-[#14141489] rounded-md">
  398. <h1 class="text-[#7d7f81] text-lg font-medium">Dados de Acesso</h1>
  399. <div class="w-11/12 h-9 overflow-hidden border border-[#01010342] rounded-md bg-gradient-to-r from-[#0a0c17ab] to-transparent" id="container-input-username">
  400. <input class="w-full h-full pl-1 outline-none text-[#FFFFFF] bg-transparent" id="input-username" type="text" placeholder="Usuário" />
  401. </div>
  402. <div class="w-11/12 h-9 flex items-center relative overflow-hidden border border-[#01010342] rounded-md bg-gradient-to-r from-[#0a0c17ab] to-transparent" id="container-input-password">
  403. <input class="w-[calc(100%-30px)] h-full pl-1 outline-none text-[#FFFFFF] bg-transparent" id="input-password" type="password" placeholder="Senha" />
  404. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="w-5 h-5 absolute right-1 text-[#FFFFFF]" id="eye-view-password" viewBox="0 0 16 16">
  405. <path d="M16 8s-3-5.5-8-5.5S0 8 0 8s3 5.5 8 5.5S16 8 16 8M1.173 8a13.133 13.133 0 0 1 1.66-2.043C4.12 4.668 5.88 3.5 8 3.5c2.12 0 3.879 1.168 5.168 2.457A13.133 13.133 0 0 1 14.828 8c-.058.087-.122.183-.195.288-.335.48-.83 1.12-1.465 1.755C11.879 11.332 10.119 12.5 8 12.5c-2.12 0-3.879-1.168-5.168-2.457A13.134 13.134 0 0 1 1.172 8z" />
  406. <path d="M8 5.5a2.5 2.5 0 1 0 0 5 2.5 2.5 0 0 0 0-5M4.5 8a3.5 3.5 0 1 1 7 0 3.5 3.5 0 0 1-7 0" />
  407. </svg>
  408. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="w-5 h-5 absolute right-1 text-[#FFFFFF] hidden" id="eye-not-view-password" viewBox="0 0 16 16">
  409. <path d="M13.359 11.238C15.06 9.72 16 8 16 8s-3-5.5-8-5.5a7.028 7.028 0 0 0-2.79.588l.77.771A5.944 5.944 0 0 1 8 3.5c2.12 0 3.879 1.168 5.168 2.457A13.134 13.134 0 0 1 14.828 8c-.058.087-.122.183-.195.288-.335.48-.83 1.12-1.465 1.755-.165.165-.337.328-.517.486z" />
  410. <path d="M11.297 9.176a3.5 3.5 0 0 0-4.474-4.474l.823.823a2.5 2.5 0 0 1 2.829 2.829zm-2.943 1.299.822.822a3.5 3.5 0 0 1-4.474-4.474l.823.823a2.5 2.5 0 0 0 2.829 2.829" />
  411. <path d="M3.35 5.47c-.18.16-.353.322-.518.487A13.134 13.134 0 0 0 1.172 8l.195.288c.335.48.83 1.12 1.465 1.755C4.121 11.332 5.881 12.5 8 12.5c.716 0 1.39-.133 2.02-.36l.77.772A7.029 7.029 0 0 1 8 13.5C3 13.5 0 8 0 8s.939-1.721 2.641-3.238l.708.709zm10.296 8.884-12-12 .708-.708 12 12-.708.708" />
  412. </svg>
  413. </div>
  414. <div class="w-11/12 h-9 hidden items-center relative overflow-hidden border border-[#01010342] rounded-md bg-gradient-to-r from-[#0a0c17ab] to-transparent" id="container-input-uuid">
  415. <input class="w-[calc(100%-30px)] h-full pl-1 outline-none text-[#FFFFFF] bg-transparent" id="input-uuid" type="password" placeholder="UUID" />
  416. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="w-5 h-5 absolute right-1 text-[#FFFFFF]" id="eye-view-uuid" viewBox="0 0 16 16">
  417. <path d="M16 8s-3-5.5-8-5.5S0 8 0 8s3 5.5 8 5.5S16 8 16 8M1.173 8a13.133 13.133 0 0 1 1.66-2.043C4.12 4.668 5.88 3.5 8 3.5c2.12 0 3.879 1.168 5.168 2.457A13.133 13.133 0 0 1 14.828 8c-.058.087-.122.183-.195.288-.335.48-.83 1.12-1.465 1.755C11.879 11.332 10.119 12.5 8 12.5c-2.12 0-3.879-1.168-5.168-2.457A13.134 13.134 0 0 1 1.172 8z" />
  418. <path d="M8 5.5a2.5 2.5 0 1 0 0 5 2.5 2.5 0 0 0 0-5M4.5 8a3.5 3.5 0 1 1 7 0 3.5 3.5 0 0 1-7 0" />
  419. </svg>
  420. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="w-5 h-5 absolute right-1 text-[#FFFFFF] hidden" id="eye-not-view-uuid" viewBox="0 0 16 16">
  421. <path d="M13.359 11.238C15.06 9.72 16 8 16 8s-3-5.5-8-5.5a7.028 7.028 0 0 0-2.79.588l.77.771A5.944 5.944 0 0 1 8 3.5c2.12 0 3.879 1.168 5.168 2.457A13.134 13.134 0 0 1 14.828 8c-.058.087-.122.183-.195.288-.335.48-.83 1.12-1.465 1.755-.165.165-.337.328-.517.486z" />
  422. <path d="M11.297 9.176a3.5 3.5 0 0 0-4.474-4.474l.823.823a2.5 2.5 0 0 1 2.829 2.829zm-2.943 1.299.822.822a3.5 3.5 0 0 1-4.474-4.474l.823.823a2.5 2.5 0 0 0 2.829 2.829" />
  423. <path d="M3.35 5.47c-.18.16-.353.322-.518.487A13.134 13.134 0 0 0 1.172 8l.195.288c.335.48.83 1.12 1.465 1.755C4.121 11.332 5.881 12.5 8 12.5c.716 0 1.39-.133 2.02-.36l.77.772A7.029 7.029 0 0 1 8 13.5C3 13.5 0 8 0 8s.939-1.721 2.641-3.238l.708.709zm10.296 8.884-12-12 .708-.708 12 12-.708.708" />
  424. </svg>
  425. </div>
  426. <button class="w-11/12 h-9 rounded-md shadow-[0px_0px_10px_0px_rgba(18,22,34,1)] bg-[#0a0c17ab] cursor-none" id="button-vpn-start-stop" type="button" title="conectar ou desconectar vpn">
  427. <span class="text-sm font-medium text-[#FFFFFF]" id="status-button-vpn">Conectar</span>
  428. </button>
  429. </section>
  430. <section class="w-full h-auto grid grid-cols-2 justify-items-center mt-auto py-2.5">
  431. <span class="text-[#FFFFFF]">Download</span>
  432. <span class="text-[#FFFFFF]">Upload</span>
  433. <span class="text-[#FFFFFF]" id="download-value">0 B/s</span>
  434. <span class="text-[#FFFFFF]" id="upload-value">0 B/s</span>
  435. </section>
  436. <section class="w-full h-10 flex items-center justify-center gap-2 mt-auto rounded-md bg-[#070610]" id="button-logs">
  437. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="text-[#FFFFFF] w-4 h-4" viewBox="0 0 16 16">
  438. <path d="M5.5 7a.5.5 0 0 0 0 1h5a.5.5 0 0 0 0-1zM5 9.5a.5.5 0 0 1 .5-.5h5a.5.5 0 0 1 0 1h-5a.5.5 0 0 1-.5-.5m0 2a.5.5 0 0 1 .5-.5h2a.5.5 0 0 1 0 1h-2a.5.5 0 0 1-.5-.5" />
  439. <path d="M9.5 0H4a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V4.5zm0 1v2A1.5 1.5 0 0 0 11 4.5h2V14a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1z" />
  440. </svg>
  441. <span class="text-[#FFFFFF] text-sm font-medium">V 1.2 REGISTRO </span>
  442. </section>
  443. </section>
  444. <section class="w-5/6 h-full flex flex-col items-center absolute transition-all bg-[#0c0d18e0] -translate-x-full" id="container-menu">
  445. <section class="w-full h-10 flex justify-between items-center px-1">
  446. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="ml-auto text-[#FFFFFF] w-8 h-8" id="hidden-menu" viewBox="0 0 16 16">
  447. <path fill-rule="evenodd" d="M2.5 12a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5m0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5m0-4a.5.5 0 0 1 .5-.5h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5" />
  448. </svg>
  449. </section>
  450. <section class="w-full h-20 flex justify-center items-center mt-5">
  451. <div class="w-20 h-20 flex justify-center items-center rounded-full bg-[#575e81]">
  452. <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="h-2/4 stroke-[#FFFFFF]">
  453. <path stroke-linecap="round" stroke-linejoin="round" d="M15.75 6a3.75 3.75 0 11-7.5 0 3.75 3.75 0 017.5 0zM4.501 20.118a7.5 7.5 0 0114.998 0A17.933 17.933 0 0112 21.75c-2.676 0-5.216-.584-7.499-1.632z" />
  454. </svg>
  455. </div>
  456. </section>
  457. <section class="w-full h-10 flex items-center justify-center">
  458. <span class="text-[#767881] text-sm font-medium px-[10%] border-b border-[#767881]" id="expires-date-user-in-menu">Expira em: 24/12/2023</span>
  459. </section>
  460. <section class="w-full h-[calc(100%-160px)] flex flex-col mt-5 px-2">
  461. <nav class="w-11/12 h-5 flex items-center gap-3" class="w-11/12 h-5 flex items-center gap-1" id="nav-checkuser">
  462. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="text-[#FFFFFF] w-5 h-5" viewBox="0 0 16 16">
  463. <path d="M3 14s-1 0-1-1 1-4 6-4 6 3 6 4-1 1-1 1zm5-6a3 3 0 1 0 0-6 3 3 0 0 0 0 6" />
  464. </svg>
  465. <span class="text-[#FFFFFF] font-medium">Informações do perfil</span>
  466. </nav>
  467. <nav class="w-11/12 h-5 flex items-center gap-3 mt-8" id="nav-whatsapp">
  468. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="text-[#FFFFFF]" viewBox="0 0 16 16">
  469. <path d="M13.601 2.326A7.854 7.854 0 0 0 7.994 0C3.627 0 .068 3.558.064 7.926c0 1.399.366 2.76 1.057 3.965L0 16l4.204-1.102a7.933 7.933 0 0 0 3.79.965h.004c4.368 0 7.926-3.558 7.93-7.93A7.898 7.898 0 0 0 13.6 2.326zM7.994 14.521a6.573 6.573 0 0 1-3.356-.92l-.24-.144-2.494.654.666-2.433-.156-.251a6.56 6.56 0 0 1-1.007-3.505c0-3.626 2.957-6.584 6.591-6.584a6.56 6.56 0 0 1 4.66 1.931 6.557 6.557 0 0 1 1.928 4.66c-.004 3.639-2.961 6.592-6.592 6.592zm3.615-4.934c-.197-.099-1.17-.578-1.353-.646-.182-.065-.315-.099-.445.099-.133.197-.513.646-.627.775-.114.133-.232.148-.43.05-.197-.1-.836-.308-1.592-.985-.59-.525-.985-1.175-1.103-1.372-.114-.198-.011-.304.088-.403.087-.088.197-.232.296-.346.1-.114.133-.198.198-.33.065-.134.034-.248-.015-.347-.05-.099-.445-1.076-.612-1.47-.16-.389-.323-.335-.445-.34-.114-.007-.247-.007-.38-.007a.729.729 0 0 0-.529.247c-.182.198-.691.677-.691 1.654 0 .977.71 1.916.81 2.049.098.133 1.394 2.132 3.383 2.992.47.205.84.326 1.129.418.475.152.904.129 1.246.08.38-.058 1.171-.48 1.338-.943.164-.464.164-.86.114-.943-.049-.084-.182-.133-.38-.232z" />
  470. </svg>
  471. <span class="text-[#FFFFFF] font-medium">Whatsapp</span>
  472. </nav>
  473. <nav class="w-11/12 h-5 flex items-center gap-3 mt-8" id="nav-telegram">
  474. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="text-[#FFFFFF]" viewBox="0 0 16 16">
  475. <path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0M8.287 5.906q-1.168.486-4.666 2.01-.567.225-.595.442c-.03.243.275.339.69.47l.175.055c.408.133.958.288 1.243.294q.39.01.868-.32 3.269-2.206 3.374-2.23c.05-.012.12-.026.166.016s.042.12.037.141c-.03.129-1.227 1.241-1.846 1.817-.193.18-.33.307-.358.336a8 8 0 0 1-.188.186c-.38.366-.664.64.015 1.088.327.216.589.393.85.571.284.194.568.387.936.629q.14.092.27.187c.331.236.63.448.997.414.214-.02.435-.22.547-.82.265-1.417.786-4.486.906-5.751a1.4 1.4 0 0 0-.013-.315.34.34 0 0 0-.114-.217.53.53 0 0 0-.31-.093c-.3.005-.763.166-2.984 1.09" />
  476. </svg>
  477. <span class="text-[#FFFFFF] font-medium">Suporte</span>
  478. </nav>
  479. <nav class="w-11/12 h-5 flex items-center gap-3 mt-8" id="nav-renew">
  480. <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="stroke-[#FFFFFF] w-5 h-5">
  481. <path stroke-linecap="round" stroke-linejoin="round" d="M2.25 18.75a60.07 60.07 0 0115.797 2.101c.727.198 1.453-.342 1.453-1.096V18.75M3.75 4.5v.75A.75.75 0 013 6h-.75m0 0v-.375c0-.621.504-1.125 1.125-1.125H20.25M2.25 6v9m18-10.5v.75c0 .414.336.75.75.75h.75m-1.5-1.5h.375c.621 0 1.125.504 1.125 1.125v9.75c0 .621-.504 1.125-1.125 1.125h-.375m1.5-1.5H21a.75.75 0 00-.75.75v.75m0 0H3.75m0 0h-.375a1.125 1.125 0 01-1.125-1.125V15m1.5 1.5v-.75A.75.75 0 003 15h-.75M15 10.5a3 3 0 11-6 0 3 3 0 016 0zm3 0h.008v.008H18V10.5zm-12 0h.008v.008H6V10.5z" />
  482. </svg>
  483. <span class="text-[#FFFFFF] font-medium">Renovar</span>
  484. </nav>
  485. <nav class="w-11/12 h-5 flex items-center gap-3 mt-8" id="nav-test">
  486. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="text-[#FFFFFF] w-5 h-5" viewBox="0 0 16 16">
  487. <path d="M6.5 0a.5.5 0 0 0 0 1H7v1.07A7.001 7.001 0 0 0 8 16a7 7 0 0 0 5.29-11.584.531.531 0 0 0 .013-.012l.354-.354.353.354a.5.5 0 1 0 .707-.707l-1.414-1.415a.5.5 0 1 0-.707.707l.354.354-.354.354a.717.717 0 0 0-.012.012A6.973 6.973 0 0 0 9 2.071V1h.5a.5.5 0 0 0 0-1zm2 5.6V9a.5.5 0 0 1-.5.5H4.5a.5.5 0 0 1 0-1h3V5.6a.5.5 0 1 1 1 0" />
  488. </svg>
  489. <span class="text-[#FFFFFF] font-medium">Gerar teste</span>
  490. </nav>
  491. <nav class="w-11/12 h-5 flex items-center gap-3 mt-8" id="nav-update">
  492. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="text-[#FFFFFF] w-5 h-5" viewBox="0 0 16 16">
  493. <path d="M11.473 9a4.5 4.5 0 0 0-8.72-.99A3 3 0 0 0 3 14h8.5a2.5 2.5 0 1 0-.027-5" />
  494. <path d="M14.544 9.772a3.506 3.506 0 0 0-2.225-1.676 5.502 5.502 0 0 0-6.337-4.002 4.002 4.002 0 0 1 7.392.91 2.5 2.5 0 0 1 1.17 4.769z" />
  495. </svg>
  496. <span class="text-[#FFFFFF] font-medium">Verificar atualizações</span>
  497. </nav>
  498. <nav class="w-11/12 h-5 flex items-center gap-3 mt-8" id="nav-terms">
  499. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="text-[#FFFFFF] w-5 h-5" viewBox="0 0 16 16">
  500. <path d="M8 1.783C7.015.936 5.587.81 4.287.94c-1.514.153-3.042.672-3.994 1.105A.5.5 0 0 0 0 2.5v11a.5.5 0 0 0 .707.455c.882-.4 2.303-.881 3.68-1.02 1.409-.142 2.59.087 3.223.877a.5.5 0 0 0 .78 0c.633-.79 1.814-1.019 3.222-.877 1.378.139 2.8.62 3.681 1.02A.5.5 0 0 0 16 13.5v-11a.5.5 0 0 0-.293-.455c-.952-.433-2.48-.952-3.994-1.105C10.413.809 8.985.936 8 1.783" />
  501. </svg>
  502. <span class="text-[#FFFFFF] font-medium">Termos de uso</span>
  503. </nav>
  504. <nav class="w-11/12 h-5 flex items-center gap-3 mt-8" id="nav-hotspot">
  505. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="text-[#FFFFFF] w-5 h-5" viewBox="0 0 16 16">
  506. <path d="M5.525 3.025a3.5 3.5 0 0 1 4.95 0 .5.5 0 1 0 .707-.707 4.5 4.5 0 0 0-6.364 0 .5.5 0 0 0 .707.707Z" />
  507. <path d="M6.94 4.44a1.5 1.5 0 0 1 2.12 0 .5.5 0 0 0 .708-.708 2.5 2.5 0 0 0-3.536 0 .5.5 0 0 0 .707.707Z" />
  508. <path d="M2.974 2.342a.5.5 0 1 0-.948.316L3.806 8H1.5A1.5 1.5 0 0 0 0 9.5v2A1.5 1.5 0 0 0 1.5 13H2a.5.5 0 0 0 .5.5h2A.5.5 0 0 0 5 13h6a.5.5 0 0 0 .5.5h2a.5.5 0 0 0 .5-.5h.5a1.5 1.5 0 0 0 1.5-1.5v-2A1.5 1.5 0 0 0 14.5 8h-2.306l1.78-5.342a.5.5 0 1 0-.948-.316L11.14 8H4.86L2.974 2.342ZM2.5 11a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1m4.5-.5a.5.5 0 1 1 1 0 .5.5 0 0 1-1 0m2.5.5a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1m1.5-.5a.5.5 0 1 1 1 0 .5.5 0 0 1-1 0m2 0a.5.5 0 1 1 1 0 .5.5 0 0 1-1 0" />
  509. <path d="M8.5 5.5a.5.5 0 1 1-1 0 .5.5 0 0 1 1 0" />
  510. </svg>
  511. <span class="text-[#FFFFFF] font-medium">ROTEAR VPN </span>
  512. </nav>
  513. <nav class="w-11/12 h-5 flex items-center gap-3 mt-8" id="nav-access-point">
  514. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="text-[#FFFFFF] w-5 h-5" viewBox="0 0 16 16">
  515. <path d="M16 4.5a4.492 4.492 0 0 1-1.703 3.526L13 5l2.959-1.11c.027.2.041.403.041.61" />
  516. <path d="M11.5 9c.653 0 1.273-.139 1.833-.39L12 5.5 11 3l3.826-1.53A4.5 4.5 0 0 0 7.29 6.092l-6.116 5.096a2.583 2.583 0 1 0 3.638 3.638L9.908 8.71A4.49 4.49 0 0 0 11.5 9m-1.292-4.361-.596.893.809-.27a.25.25 0 0 1 .287.377l-.596.893.809-.27.158.475-1.5.5a.25.25 0 0 1-.287-.376l.596-.893-.809.27a.25.25 0 0 1-.287-.377l.596-.893-.809.27-.158-.475 1.5-.5a.25.25 0 0 1 .287.376M3 14a1 1 0 1 1 0-2 1 1 0 0 1 0 2" />
  517. </svg>
  518. <span class="text-[#FFFFFF] font-medium">Ajustes de APN</span>
  519. </nav>
  520. <nav class="w-11/12 h-5 flex items-center gap-3 mt-8" id="nav-app-clean-data">
  521. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="text-[#FFFFFF] w-5 h-5" viewBox="0 0 16 16">
  522. <path d="M11 1.5v1h3.5a.5.5 0 0 1 0 1h-.538l-.853 10.66A2 2 0 0 1 11.115 16h-6.23a2 2 0 0 1-1.994-1.84L2.038 3.5H1.5a.5.5 0 0 1 0-1H5v-1A1.5 1.5 0 0 1 6.5 0h3A1.5 1.5 0 0 1 11 1.5m-5 0v1h4v-1a.5.5 0 0 0-.5-.5h-3a.5.5 0 0 0-.5.5M4.5 5.029l.5 8.5a.5.5 0 1 0 .998-.06l-.5-8.5a.5.5 0 1 0-.998.06Zm6.53-.528a.5.5 0 0 0-.528.47l-.5 8.5a.5.5 0 0 0 .998.058l.5-8.5a.5.5 0 0 0-.47-.528ZM8 4.5a.5.5 0 0 0-.5.5v8.5a.5.5 0 0 0 1 0V5a.5.5 0 0 0-.5-.5" />
  523. </svg>
  524. <span class="text-[#FFFFFF] font-medium">Limpar dados</span>
  525. </nav>
  526. </section>
  527. </section>
  528. <section class="w-full h-full flex flex-col items-center justify-center absolute transition-all scale-0 bg-[#0c0d18e0]" id="container-terms">
  529. <section class="w-11/12 h-2/3 flex flex-col relative rounded-md bg-[#121c28]">
  530. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="absolute top-1 left-1/2 transform -translate-x-1/2 -translate-y-1/2 text-[#FF0000] w-20 h-20" viewBox="0 0 16 16">
  531. <path d="M11.46.146A.5.5 0 0 0 11.107 0H4.893a.5.5 0 0 0-.353.146L.146 4.54A.5.5 0 0 0 0 4.893v6.214a.5.5 0 0 0 .146.353l4.394 4.394a.5.5 0 0 0 .353.146h6.214a.5.5 0 0 0 .353-.146l4.394-4.394a.5.5 0 0 0 .146-.353V4.893a.5.5 0 0 0-.146-.353L11.46.146zM8 4c.535 0 .954.462.9.995l-.35 3.507a.552.552 0 0 1-1.1 0L7.1 4.995A.905.905 0 0 1 8 4m.002 6a1 1 0 1 1 0 2 1 1 0 0 1 0-2" />
  532. </svg>
  533. <h1 class="w-full mt-14 text-[#FF0000] text-center text-lg font-medium">TERMOS DE USO</h1>
  534. <section class="w-full h-full mt-3 mb-3 px-3 overflow-auto text-center">
  535. <p class="text-[#FFFFFF]">A AGSSHBR envidará esforços razoáveis para garantir a disponibilidade contínua de nossos serviços de VPN. No entanto, o Cliente reconhece que, devido à natureza da Internet e de outros fatores que estão além do nosso controle, não podemos garantir que os serviços de VPN estarão livres de interrupções ou quedas de conexão. O Cliente entende e concorda que quedas de conexão ou interrupções podem ocorrer devido a circunstâncias imprevistas, manutenção de rotina, atualizações de software, eventos de força maior ou outras situações semelhantes. A AGSSHBR não assume qualquer responsabilidade por perdas, danos ou inconveniências que o Cliente possa sofrer como resultado de quedas de conexão ou interrupções nos serviços de VPN. O Cliente concorda em isentar a AGSSHBR de qualquer responsabilidade relacionada a tais eventos.</p>
  536. </section>
  537. <section class="w-full h-auto flex items-center justify-center my-3">
  538. <button class="w-2/4 h-9 rounded-md cursor-none bg-[#414cb8]" id="close-terms-container" type="button">
  539. <span class="text-[#FFFFFF]">CONCORDO</span>
  540. </button>
  541. </section>
  542. </section>
  543. </section>
  544. <section class="w-full h-full flex flex-col items-center justify-center absolute transition-all scale-0 bg-[#0c0d18e0]" id="container-hotspot">
  545. <section class="w-11/12 h-auto flex flex-col relative rounded-md bg-[#121c28]">
  546. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="absolute top-1 left-1/2 transform -translate-x-1/2 -translate-y-1/2 text-[#11c9ff] w-20 h-20" viewBox="0 0 16 16">
  547. <path d="M5.525 3.025a3.5 3.5 0 0 1 4.95 0 .5.5 0 1 0 .707-.707 4.5 4.5 0 0 0-6.364 0 .5.5 0 0 0 .707.707Z" />
  548. <path d="M6.94 4.44a1.5 1.5 0 0 1 2.12 0 .5.5 0 0 0 .708-.708 2.5 2.5 0 0 0-3.536 0 .5.5 0 0 0 .707.707Z" />
  549. <path d="M2.974 2.342a.5.5 0 1 0-.948.316L3.806 8H1.5A1.5 1.5 0 0 0 0 9.5v2A1.5 1.5 0 0 0 1.5 13H2a.5.5 0 0 0 .5.5h2A.5.5 0 0 0 5 13h6a.5.5 0 0 0 .5.5h2a.5.5 0 0 0 .5-.5h.5a1.5 1.5 0 0 0 1.5-1.5v-2A1.5 1.5 0 0 0 14.5 8h-2.306l1.78-5.342a.5.5 0 1 0-.948-.316L11.14 8H4.86L2.974 2.342ZM2.5 11a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1m4.5-.5a.5.5 0 1 1 1 0 .5.5 0 0 1-1 0m2.5.5a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1m1.5-.5a.5.5 0 1 1 1 0 .5.5 0 0 1-1 0m2 0a.5.5 0 1 1 1 0 .5.5 0 0 1-1 0" />
  550. <path d="M8.5 5.5a.5.5 0 1 1-1 0 .5.5 0 0 1 1 0" />
  551. </svg>
  552. <h1 class="w-full mt-14 text-[#11c9ff] text-center text-lg font-medium">ROTEAMENTO POR PROXY</h1>
  553. <section class="w-full h-full mt-3 mb-3 px-3 overflow-auto text-center">
  554. <p class="text-[#FFFFFF]">Essa função serve para rotear para outros dispositivos o hotspot, caso queira ativar ou precise desativar é só apertar no botão a baixo.</p>
  555. </section>
  556. <section class="w-full h-auto flex items-center justify-center gap-5 my-3">
  557. <button class="w-auto h-9 px-2 rounded-md cursor-none bg-[#414cb8]" id="button-hotspot" type="button">
  558. <span class="text-[#FFFFFF]" id="value-of-button-hotspot">ATIVAR HOTSPOT</span>
  559. </button>
  560. <button class="w-auto h-9 px-2 rounded-md cursor-none bg-red-900" id="close-hotspot-container" type="button">
  561. <span class="text-[#FFFFFF]">FECHAR</span>
  562. </button>
  563. </section>
  564. </section>
  565. </section>
  566. <section class="w-full h-full flex flex-col items-center justify-center absolute transition-all scale-0 bg-[#0c0d18e0]" id="container-configs">
  567. <section class="w-11/12 max-h-[66.666667%] flex flex-col relative rounded-md bg-[#121c28]">
  568. <header class="w-full min-h-[40px] max-h-[10%] flex items-center mb-2 border-b border-[#01010342] rounded-t-md">
  569. <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-6 h-6 stroke-white" id="hidden-container-configs">
  570. <path stroke-linecap="round" stroke-linejoin="round" d="M15.75 19.5L8.25 12l7.5-7.5" />
  571. </svg>
  572. <h1 class="flex-1 pr-6 text-white text-center text-sm font-medium">CONFIGURAÇÕES</h1>
  573. </header>
  574. <section class="w-full h-[90%] overflow-auto px-1 mb-1 rounded-md">
  575. <section class="w-full h-auto flex flex-col gap-2" id="area-carrier-list">
  576. <div class="flex items-center">
  577. <input class="peer hidden" type="radio" name="config" id="tim-premium-cf" />
  578. <label class="w-full max-h-8 p-2 border border-[#01010342] rounded-md transition-[max-height] duration-1000 overflow-hidden" for="tim-premium-cf">
  579. <header class="w-full h-3 flex items-center justify-center p-2">
  580. <h1 class="text-xs font-medium text-white truncate">VIVO PREMIUM ACF</h1>
  581. </header>
  582. <ul class="w-full h-auto flex flex-col gap-2 mt-3 overflow-hidden">
  583. <li class="w-full h-12 flex items-center gap-2 px-1 rounded-md overflow-hidden bg-[#0c0d18e0]">
  584. <div class="w-10 h-[100%] flex items-center">
  585. <img src="https://i.ibb.co/TkC0rCH/DT7ixvcjh0.png" alt="icon" />
  586. </div>
  587. <div class="flex-1 flex flex-col gap-1 truncate">
  588. <h1 class="text-white text-xs truncate">TIM 1 ➜ CONFIG 1 ➜ SV01.OCI (COPY)</h1>
  589. <span class="text-white text-[0.65rem] truncate">SERVIDOR: 🇧🇷 ➜ LATÊNCIA BAIXA </span>
  590. </div>
  591. <div class="w-14 h-[100%] flex gap-1 items-end truncate">
  592. <span class="text-white text-[0.5rem] leading-7 truncate">OVPN_SSL_PROXY</span>
  593. </div>
  594. </li>
  595. <li class="w-full h-12 flex items-center gap-2 px-1 rounded-md overflow-hidden bg-[#0c0d18e0]">
  596. <div class="w-10 h-[100%] flex items-center">
  597. <img src="https://i.ibb.co/TkC0rCH/DT7ixvcjh0.png" alt="icon" />
  598. </div>
  599. <div class="flex-1 flex flex-col gap-1 truncate">
  600. <h1 class="text-white text-xs truncate">TIM 1 ➜ CONFIG 1 ➜ SV01.OCI (COPY)</h1>
  601. <span class="text-white text-[0.65rem] truncate">SERVIDOR: 🇧🇷 ➜ LATÊNCIA BAIXA </span>
  602. </div>
  603. <div class="w-14 h-[100%] relative truncate">
  604. <span class="text-white text-[0.6rem] truncate absolute bottom-1 right-1">SSH_PROXY</span>
  605. </div>
  606. </li>
  607. </ul>
  608. </label>
  609. </div>
  610. <div class="flex items-center">
  611. <input class="peer hidden" type="radio" name="config" id="vivo-premium-cf" />
  612. <label class="w-full max-h-8 p-2 border border-[#01010342] rounded-md transition-[max-height] duration-1000 overflow-hidden" for="vivo-premium-cf">
  613. <header class="w-full h-3 flex items-center justify-center p-2">
  614. <h1 class="text-sm text-white truncate">TIM PREMIUM ACF</h1>
  615. </header>
  616. <section class="w-full h-auto"></section>
  617. </label>
  618. </div>
  619. </section>
  620. </section>
  621. </section>
  622. </section>
  623. </main>
  624. <!-- FUNÇÕES DO APP -->
  625. <script>
  626. function appGetStatusbarHeightSize() {
  627. if (window?.DtGetStatusBarHeight?.execute && typeof window?.DtGetStatusBarHeight.execute === "function") {
  628. return DtGetStatusBarHeight.execute();
  629. }
  630. return 0;
  631. }
  632. function appGetNavbarHeightSize() {
  633. if (window?.DtGetNavigationBarHeight?.execute && typeof window?.DtGetNavigationBarHeight?.execute === "function") {
  634. return DtGetNavigationBarHeight.execute();
  635. }
  636. return 0;
  637. }
  638. function appTranslateText(label) {
  639. if (window?.DtTranslateText?.execute && typeof window?.DtTranslateText?.execute === "function") {
  640. return DtTranslateText.execute(label);
  641. }
  642. return null;
  643. }
  644. function appGetConfigLabel(label) {
  645. if (window?.DtGetAppConfig?.execute && typeof window?.DtGetAppConfig?.execute === "function") {
  646. return DtGetAppConfig.execute(label);
  647. }
  648. return null;
  649. }
  650. function appGetCarrierName() {
  651. if (window?.Android?.getNetworkName && typeof window?.Android?.getNetworkName === "function") {
  652. return Android.getNetworkName();
  653. }
  654. return null;
  655. }
  656. function appGetLocalIp() {
  657. if (window?.Android?.getLocalIP && typeof window?.Android.getLocalIP === "function") {
  658. return Android.getLocalIP();
  659. }
  660. return null;
  661. }
  662. function appGetConfigVersion() {
  663. if (window?.DtGetLocalConfigVersion?.execute && typeof window?.DtGetLocalConfigVersion?.execute === "function") {
  664. return DtGetLocalConfigVersion.execute();
  665. }
  666. return null;
  667. }
  668. function appOpenDialogConfig() {
  669. if (window?.DtExecuteDialogConfig?.execute && typeof window?.DtExecuteDialogConfig?.execute === "function") {
  670. return DtExecuteDialogConfig.execute();
  671. }
  672. return null;
  673. }
  674. function appGetDefaultConfig() {
  675. if (window?.DtGetDefaultConfig?.execute && typeof window?.DtGetDefaultConfig?.execute) {
  676. return DtGetDefaultConfig.execute();
  677. }
  678. return null;
  679. }
  680. function appGetAllConfigs() {
  681. if (window?.DtGetConfigs?.execute && typeof window?.DtGetConfigs?.execute === "function") {
  682. return JSON.parse(DtGetConfigs.execute());
  683. }
  684. return null;
  685. }
  686. function appSetConfig(id) {
  687. if (window?.DtSetConfig?.execute && typeof window?.DtSetConfig?.execute === "function") {
  688. window?.DtSetConfig?.execute(id);
  689. }
  690. return null;
  691. }
  692. function appOpenDialogDialogs() {
  693. if (window?.DtShowLoggerDialog?.execute && typeof window?.DtShowLoggerDialog?.execute === "function") {
  694. return window?.DtShowLoggerDialog.execute();
  695. }
  696. return null;
  697. }
  698. function appGetUsername() {
  699. if (window?.DtUsername && typeof window?.DtUsername.get === "function") {
  700. return DtUsername.get();
  701. }
  702. return "";
  703. }
  704. function appGetPassword() {
  705. if (window?.DtPassword && typeof window?.DtPassword?.get === "function") {
  706. return DtPassword.get();
  707. }
  708. return "";
  709. }
  710. function appGetUUID() {
  711. if (window?.DtUuid?.get && typeof window?.DtUuid.get === "function") {
  712. return DtUuid.get();
  713. }
  714. return "";
  715. }
  716. function appSetUsername(username) {
  717. if (window?.DtUsername?.set && typeof window?.DtUsername?.set === "function") {
  718. return window.DtUsername.set(username);
  719. }
  720. return null;
  721. }
  722. function appSetPassword(password) {
  723. if (window?.DtPassword?.set && typeof window?.DtPassword?.set === "function") {
  724. return window.DtPassword.set(password);
  725. }
  726. return null;
  727. }
  728. function appSetUUID(UUID) {
  729. if (window?.DtUuid.set && typeof window?.DtUuid?.set === "function") {
  730. return window.DtUuid.set(UUID);
  731. }
  732. return null;
  733. }
  734. function appGetConnectionState() {
  735. if (window?.DtGetVpnState?.execute && typeof window?.DtGetVpnState?.execute === "function") {
  736. return DtGetVpnState.execute();
  737. }
  738. return null;
  739. }
  740. function appStartConnection() {
  741. if (window?.DtExecuteVpnStart?.execute && typeof window?.DtExecuteVpnStart?.execute === "function") {
  742. return DtExecuteVpnStart.execute();
  743. }
  744. return null;
  745. }
  746. function appStopConnection() {
  747. if (window?.DtExecuteVpnStop?.execute && typeof window?.DtExecuteVpnStop?.execute === "function") {
  748. return DtExecuteVpnStop.execute();
  749. }
  750. return null;
  751. }
  752. function appGetDownloadBytes() {
  753. if (window?.DtGetNetworkDownloadBytes?.execute && typeof window?.DtGetNetworkDownloadBytes?.execute === "function") {
  754. return window?.DtGetNetworkDownloadBytes?.execute();
  755. }
  756. return "0 B/s";
  757. }
  758. function appGetUploadBytes() {
  759. if (window?.DtGetNetworkUploadBytes?.execute && typeof window?.DtGetNetworkUploadBytes?.execute === "function") {
  760. return Number(window?.DtGetNetworkUploadBytes?.execute());
  761. }
  762. return "0 B/s";
  763. }
  764. function appGetStatusHotspot() {
  765. if (window?.DtGetStatusHotSpotService?.execute && typeof window?.DtGetStatusHotSpotService?.execute === "function") {
  766. return window?.DtGetStatusHotSpotService.execute();
  767. }
  768. return null;
  769. }
  770. function appStartHotspot() {
  771. if (window?.DtStartHotSpotService?.execute && typeof window?.DtStartHotSpotService?.execute === "function") {
  772. return window.DtStartHotSpotService.execute();
  773. }
  774. return null;
  775. }
  776. function appStopHotspot() {
  777. if (window?.DtStopHotSpotService?.execute && typeof window?.DtStopHotSpotService?.execute === "function") {
  778. return window?.DtStopHotSpotService.execute();
  779. }
  780. return null;
  781. }
  782. function AppUpdate() {
  783. if (window?.DtStartAppUpdate?.execute && typeof window?.DtStartAppUpdate?.execute === "function") {
  784. return window.DtStartAppUpdate.execute();
  785. }
  786. return null;
  787. }
  788. function appIntoBrowser(url) {
  789. if (window?.DtStartWebViewActivity?.execute && typeof window?.DtStartWebViewActivity?.execute === "function") {
  790. return DtStartWebViewActivity.execute(url);
  791. }
  792. window.open(url, "_blank");
  793. }
  794. function appCheckuser() {
  795. if (window?.DtStartCheckUser?.execute && typeof window?.DtStartCheckUser?.execute === "function") {
  796. return window.DtStartCheckUser.execute();
  797. }
  798. return null;
  799. }
  800. function appApnConfiguration() {
  801. if (window?.DtStartApnActivity?.execute && typeof window?.DtStartApnActivity?.execute == "function") {
  802. return window?.DtStartApnActivity.execute();
  803. }
  804. return null;
  805. }
  806. function appBatteryOptimize() {
  807. if (window?.DtIgnoreBatteryOptimizations?.execute && typeof window?.DtIgnoreBatteryOptimizations?.execute === "function") {
  808. return DtIgnoreBatteryOptimizations.execute();
  809. }
  810. return null;
  811. }
  812. function appClearData() {
  813. if (window?.DtCleanApp?.execute && typeof window?.DtCleanApp?.execute === "function") {
  814. return DtCleanApp.execute();
  815. }
  816. return null;
  817. }
  818. function networkName() {
  819. if (window?.Android?.getNetworkName && typeof window?.Android?.getNetworkName === "function") {
  820. return Android.getNetworkName();
  821. }
  822. return null;
  823. }
  824. function internetProtocol() {
  825. if (window?.Android?.getLocalIP && typeof window?.Android?.getLocalIP === "function") {
  826. return Android.getLocalIP();
  827. }
  828. return null;
  829. }
  830. </script>
  831. <!-- DOM WRAPPER -->
  832. <script>
  833. const Dom = (selector) => {
  834. const _elements = document.querySelectorAll(selector);
  835. const wrapper = {
  836. on(listeners) {
  837. for (const [event, listener] of Object.entries(listeners)) {
  838. _elements.forEach((element) => {
  839. element.addEventListener(event, listener);
  840. });
  841. }
  842. return wrapper;
  843. },
  844. addClass: (...tokens) => {
  845. _elements.forEach((element) => {
  846. element.classList.add(...tokens);
  847. });
  848. return wrapper;
  849. },
  850. removeClass: (...tokens) => {
  851. _elements.forEach((element) => {
  852. element.classList.remove(...tokens);
  853. });
  854. return wrapper;
  855. },
  856. toggleClass: (token, force) => {
  857. _elements.forEach((element) => {
  858. element.classList.toggle(token, force);
  859. });
  860. return wrapper;
  861. },
  862. style(styles) {
  863. for (const [property, value] of Object.entries(styles)) {
  864. _elements.forEach((element) => {
  865. element.style[property] = value;
  866. });
  867. }
  868. return wrapper;
  869. },
  870. attr(attrs) {
  871. for (const [name, value] of Object.entries(attrs)) {
  872. _elements.forEach((element) => element.setAttribute(name, value));
  873. }
  874. return wrapper;
  875. },
  876. html(value) {
  877. _elements.forEach((element) => (element.innerHTML = value));
  878. return wrapper;
  879. },
  880. /**
  881. * @return {Element|null}
  882. */
  883. element() {
  884. return _elements.length > 0 ? _elements[0] : null;
  885. },
  886. allElements: _elements,
  887. };
  888. return wrapper;
  889. };
  890. </script>
  891. <!-- VÁRIAVIES -->
  892. <script>
  893. const body = Dom("body");
  894. const containerHome = Dom("#container-home");
  895. const openMenuButton = Dom("#open-menu");
  896. const carrierDetails = Dom("#carrier-details");
  897. const vpnStatusValue = Dom("#vpn-status");
  898. const appLogo = Dom("#app-logo");
  899. const buttonOfListCarrier = Dom("#button-of-list-carrier");
  900. const valueOnButtonOfCarrierList = Dom("#value-of-carrier");
  901. const buttonOfCheckUser = Dom("#button-open-checkuser");
  902. const containerInputUsername = Dom("#container-input-username");
  903. const containerInputPassword = Dom("#container-input-password");
  904. const containerInputUUID = Dom("#container-input-uuid");
  905. const inputUsername = Dom("#input-username");
  906. const inputPassword = Dom("#input-password");
  907. const inputUUID = Dom("#input-uuid");
  908. const eyeViewPasswordInput = Dom("#eye-view-password");
  909. const eyeNotViewPasswordInput = Dom("#eye-not-view-password");
  910. const eyeViewUUID = Dom("#eye-view-uuid");
  911. const eyeNotViewUUID = Dom("#eye-not-view-uuid");
  912. const buttonStartStopVpn = Dom("#button-vpn-start-stop");
  913. const buttonStartStopValue = Dom("#status-button-vpn");
  914. const downloadValue = Dom("#download-value");
  915. const uploadValue = Dom("#upload-value");
  916. const buttonLogs = Dom("#button-logs");
  917. const containerMenu = Dom("#container-menu");
  918. const hiddenContainerMenuButton = Dom("#hidden-menu");
  919. const expiresDateUserInMenu = Dom("#expires-date-user-in-menu");
  920. const navCheckuser = Dom("#nav-checkuser");
  921. const navWhatsapp = Dom("#nav-whatsapp");
  922. const navTelegram = Dom("#nav-telegram");
  923. const navRenew = Dom("#nav-renew");
  924. const navTest = Dom("#nav-test");
  925. const navUpdate = Dom("#nav-update");
  926. const navTerms = Dom("#nav-terms");
  927. const navHotspot = Dom("#nav-hotspot");
  928. const navAccessPoint = Dom("#nav-access-point");
  929. const navAppCleanData = Dom("#nav-app-clean-data");
  930. const containerTerms = Dom("#container-terms");
  931. const closeContainerTerms = Dom("#close-terms-container");
  932. const containerHotspot = Dom("#container-hotspot");
  933. const closeContainerHotspotButton = Dom("#close-hotspot-container");
  934. const buttonStartOrStopHotspot = Dom("#button-hotspot");
  935. const valueOfButtonHotspot = Dom("#value-of-button-hotspot");
  936. const containerConfigs = Dom("#container-configs");
  937. const closeContainerConfigs = Dom("#hidden-container-configs");
  938. const containerAreaCarrierList = Dom("#area-carrier-list");
  939. const inputsPeer = Dom("input.peer");
  940. const labelsFor = Dom("label[for]");
  941. </script>
  942. <!-- VÁRIAVEIS DO SISTEMA -->
  943. <script>
  944. const currentNetworkDownload = parseFloat(localStorage.getItem("networkDownload") ?? appGetDownloadBytes());
  945. const currentNetworkUpload = parseFloat(localStorage.getItem("networkUpload") ?? appGetUploadBytes());
  946. </script>
  947. <!-- FUNÇÕES -->
  948. <script>
  949. function getAppBackground() {
  950. const background_type = appGetConfigLabel("APP_BACKGROUND_TYPE");
  951. const background_color = appGetConfigLabel("APP_BACKGROUND_COLOR");
  952. const background_image = appGetConfigLabel("APP_BACKGROUND_IMAGE");
  953. if (!background_type) {
  954. return "url('../dist/bg.jpeg')";
  955. }
  956. if (JSON.parse(background_type)?.value === "COLOR") {
  957. return JSON.parse(background_color).value;
  958. }
  959. return `url(${JSON.parse(background_image).value})`;
  960. }
  961. function getAppLogo() {
  962. const logo = appGetConfigLabel("APP_LOGO");
  963. if (!logo) {
  964. return "../dist/logo.png";
  965. }
  966. return JSON.parse(logo)?.value;
  967. }
  968. function getConfigName() {
  969. const config = appGetDefaultConfig();
  970. if (!config) {
  971. return {
  972. name: appTranslateText("LBL_CHOOSE_CONFIG"),
  973. mode: "",
  974. };
  975. }
  976. if (JSON.parse(config)?.name && JSON.parse(config)?.mode) {
  977. return {
  978. name: JSON.parse(config)?.name,
  979. mode: JSON.parse(config)?.mode,
  980. };
  981. }
  982. return {
  983. name: appTranslateText("LBL_CHOOSE_CONFIG"),
  984. mode: "",
  985. };
  986. }
  987. function writeConfigValueOnButton() {
  988. valueOnButtonOfCarrierList.html(getConfigName()?.name);
  989. }
  990. function writeCarrierStatus() {
  991. setInterval(() => {
  992. carrierDetails.html(`${appGetCarrierName()}: ${internetProtocol()}`);
  993. });
  994. }
  995. function connectionState(state) {
  996. const connectionValue = `${state || appGetConnectionState()}`;
  997. switch (connectionValue) {
  998. case "DISCONNECTED":
  999. buttonStartStopValue.html(appTranslateText("LBL_BTN_START"));
  1000. vpnStatusValue.html(appTranslateText("LBL_STATE_DISCONNECTED"));
  1001. break;
  1002. case "CONNECTING":
  1003. buttonStartStopValue.html(appTranslateText("LBL_BTN_STOP"));
  1004. vpnStatusValue.html(appTranslateText("LBL_STATE_CONNECTING"));
  1005. break;
  1006. case "CONNECTED":
  1007. buttonStartStopValue.html(appTranslateText("LBL_BTN_STOP"));
  1008. vpnStatusValue.html(appTranslateText("LBL_STATE_CONNECTED"));
  1009. break;
  1010. case "STOPPING":
  1011. buttonStartStopValue.html(appTranslateText("LBL_BTN_STOPPING"));
  1012. vpnStatusValue.html(appTranslateText("LBL_STATE_STOPPING"));
  1013. break;
  1014. case "NO_NETWORK":
  1015. buttonStartStopValue.html(appTranslateText("LBL_BTN_STOP"));
  1016. vpnStatusValue.html(appTranslateText("LBL_STATE_NO_NETWORK"));
  1017. break;
  1018. case "AUTH":
  1019. buttonStartStopValue.html(appTranslateText("LBL_BTN_STOP"));
  1020. vpnStatusValue.html(appTranslateText("LBL_STATE_AUTH"));
  1021. break;
  1022. case "AUTH_FAILED":
  1023. buttonStartStopValue.html(appTranslateText("LBL_BTN_START"));
  1024. vpnStatusValue.html(appTranslateText("LBL_STATE_AUTH_FAILED"));
  1025. break;
  1026. }
  1027. }
  1028. function startStopConnection() {
  1029. const state = appGetConnectionState();
  1030. state !== "CONNECTED" ? appStartConnection() : appStopConnection();
  1031. }
  1032. function startHotspot() {
  1033. appStartHotspot();
  1034. valueOfButtonHotspot.html("DESATIVAR HOTSPOT");
  1035. return;
  1036. }
  1037. function stopHotspot() {
  1038. appStopHotspot();
  1039. valueOfButtonHotspot.html("ATIVAR HOTSPOT");
  1040. return;
  1041. }
  1042. function toggleHotspot() {
  1043. appGetStatusHotspot() === "STOPPED" ? startHotspot() : stopHotspot();
  1044. return;
  1045. }
  1046. function setStatusHotspot() {
  1047. if (appGetStatusHotspot() === "STOPPED") {
  1048. valueOfButtonHotspot.html("ATIVAR HOTSPOT");
  1049. return;
  1050. } else {
  1051. valueOfButtonHotspot.html("DESATIVAR HOTSPOT");
  1052. return;
  1053. }
  1054. return;
  1055. }
  1056. function showInputPasswordValue() {
  1057. eyeViewPasswordInput.addClass("hidden");
  1058. eyeNotViewPasswordInput.removeClass("hidden");
  1059. inputPassword.attr({ type: "text" });
  1060. }
  1061. function hiddenInputPasswordValue() {
  1062. eyeViewPasswordInput.removeClass("hidden");
  1063. eyeNotViewPasswordInput.addClass("hidden");
  1064. inputPassword.attr({ type: "password" });
  1065. }
  1066. function showInputUUIDValue() {
  1067. eyeViewUUID.addClass("hidden");
  1068. eyeNotViewUUID.removeClass("hidden");
  1069. inputUUID.attr({ type: "text" });
  1070. }
  1071. function hiddenInputUUIDValue() {
  1072. eyeViewUUID.removeClass("hidden");
  1073. eyeNotViewUUID.addClass("hidden");
  1074. inputUUID.attr({ type: "password" });
  1075. }
  1076. function showContainerMenu() {
  1077. containerMenu.removeClass("-translate-x-full");
  1078. return;
  1079. }
  1080. function hiddenContainerMenu() {
  1081. containerMenu.addClass("-translate-x-full");
  1082. return;
  1083. }
  1084. function showContainerTerms() {
  1085. containerTerms.removeClass("scale-0");
  1086. return;
  1087. }
  1088. function hiddenContainerTerms() {
  1089. containerTerms.addClass("scale-0");
  1090. return;
  1091. }
  1092. function showContainerHotspot() {
  1093. containerHotspot.removeClass("scale-0");
  1094. return;
  1095. }
  1096. function hiddenContainerHotspot() {
  1097. containerHotspot.addClass("scale-0");
  1098. return;
  1099. }
  1100. function writeCarrierList() {
  1101. const data = appGetAllConfigs();
  1102. if (data) {
  1103. containerAreaCarrierList.html("");
  1104. data.sort((a, b) => a.sorter - b.sorter);
  1105. data.forEach((item, index) => item.items.sort((a, b) => a.sorter - b.sorter));
  1106. const labels = [];
  1107. let selectedLabel = null;
  1108. data.forEach((category) => {
  1109. const div = document.createElement("div");
  1110. const input = document.createElement("input");
  1111. const label = document.createElement("label");
  1112. const header = document.createElement("header");
  1113. const h1 = document.createElement("h1");
  1114. const ul = document.createElement("ul");
  1115. div.classList.add("flex", "items-center");
  1116. input.classList.add("hidden");
  1117. label.classList.add("w-full", "max-h-8", "p-2", "border", "border-[#01010342]", "rounded-md", "transition-[max-height]", "duration-1000", "overflow-hidden");
  1118. header.classList.add("w-full", "h-3", "flex", "items-center", "justify-center", "p-2");
  1119. h1.classList.add("text-xs", "font-medium", "text-white", "truncate");
  1120. ul.classList.add("w-full", "h-auto", "flex", "flex-col", "gap-2", "mt-3", "overflow-hidden");
  1121. input.type = "radio";
  1122. input.name = "config";
  1123. input.id = category.name.trim();
  1124. label.htmlFor = category.name.trim();
  1125. h1.textContent = category.name;
  1126. category.items.forEach((item) => {
  1127. const li = document.createElement("li");
  1128. const liDivLeft = document.createElement("div");
  1129. const carrierIcon = document.createElement("img");
  1130. const liDivCenter = document.createElement("div");
  1131. const configTitle = document.createElement("h1");
  1132. const configDescription = document.createElement("span");
  1133. const liDivRight = document.createElement("div");
  1134. const configType = document.createElement("span");
  1135. li.classList.add("w-full", "h-12", "flex", "items-center", "gap-2", "px-1", "rounded-md", "overflow-hidden", "bg-[#0c0d18e0]");
  1136. liDivLeft.classList.add("w-10", "h-[100%]", "flex", "items-center");
  1137. liDivCenter.classList.add("flex-1", "flex", "flex-col", "gap-1", "truncate");
  1138. configTitle.classList.add("text-white", "text-xs", "truncate");
  1139. configDescription.classList.add("text-white", "text-[0.65rem]", "truncate");
  1140. liDivRight.classList.add("w-14", "h-[100%]", "flex", "items-end", "truncate");
  1141. configType.classList.add("text-white", "text-[0.5rem]", "leading-7", "truncate");
  1142. carrierIcon.src = item.icon;
  1143. carrierIcon.alt = item.name;
  1144. configTitle.textContent = item.name;
  1145. configDescription.textContent = item.description;
  1146. configType.textContent = item.mode;
  1147. liDivLeft.appendChild(carrierIcon);
  1148. liDivCenter.appendChild(configTitle);
  1149. liDivCenter.appendChild(configDescription);
  1150. liDivRight.appendChild(configType);
  1151. li.appendChild(liDivLeft);
  1152. li.appendChild(liDivCenter);
  1153. li.appendChild(liDivRight);
  1154. li.addEventListener("click", () => {
  1155. appSetConfig(item.id);
  1156. hiddenContainerConfigs();
  1157. });
  1158. ul.appendChild(li);
  1159. });
  1160. header.appendChild(h1);
  1161. label.appendChild(header);
  1162. label.appendChild(ul);
  1163. input.addEventListener("change", () => {
  1164. if (input.checked) {
  1165. labels.forEach((otherLabel) => {
  1166. if (otherLabel !== label) {
  1167. otherLabel.style.maxHeight = "32px";
  1168. }
  1169. });
  1170. label.style.maxHeight = label.scrollHeight + "px";
  1171. selectedLabel = label;
  1172. }
  1173. });
  1174. labels.push(label);
  1175. div.appendChild(input);
  1176. div.appendChild(label);
  1177. containerAreaCarrierList.element().appendChild(div);
  1178. });
  1179. }
  1180. }
  1181. function showContainerConfigs() {
  1182. writeCarrierList();
  1183. containerConfigs.removeClass("scale-0");
  1184. return;
  1185. }
  1186. function hiddenContainerConfigs() {
  1187. containerConfigs.addClass("scale-0");
  1188. return;
  1189. }
  1190. function checkV2ray() {
  1191. const data = JSON.parse(appGetDefaultConfig());
  1192. if (!data) {
  1193. return false;
  1194. }
  1195. if (data.mode?.toLowerCase().startsWith("v2ray")) {
  1196. if (data.auth?.v2ray_uuid) {
  1197. return "exists v2ray config";
  1198. }
  1199. return true;
  1200. }
  1201. return false;
  1202. }
  1203. function toggleInput() {
  1204. const v2rayUUID = checkV2ray();
  1205. if (v2rayUUID === "exists v2ray config") {
  1206. containerInputUsername.addClass("hidden");
  1207. containerInputPassword.addClass("hidden");
  1208. containerInputUUID.addClass("hidden");
  1209. } else if (v2rayUUID) {
  1210. containerInputUsername.addClass("hidden");
  1211. containerInputPassword.addClass("hidden");
  1212. containerInputUUID.removeClass("hidden");
  1213. containerInputUUID.addClass("flex");
  1214. } else {
  1215. containerInputUsername.removeClass("hidden");
  1216. containerInputPassword.removeClass("hidden");
  1217. containerInputUUID.addClass("flex");
  1218. containerInputUUID.addClass("hidden");
  1219. }
  1220. }
  1221. function formatBytes(bytes) {
  1222. const sizes = ["B/s", "KB/s", "MB/s", "GB/s", "TB/s"];
  1223. if (bytes === 0) return "0 B/s";
  1224. const i = parseInt(Math.floor(Math.log(bytes) / Math.log(1024)));
  1225. return (bytes / Math.pow(1024, i)).toPrecision(3) + " " + sizes[i];
  1226. }
  1227. function updateNetworkStats() {
  1228. setInterval(() => {
  1229. const newNetworkDownload = appGetDownloadBytes();
  1230. const newNetworkUpload = appGetUploadBytes();
  1231. downloadValue.html(formatBytes(newNetworkDownload - currentNetworkDownload));
  1232. uploadValue.html(formatBytes(newNetworkUpload - currentNetworkUpload));
  1233. localStorage.setItem("networkDownload", formatBytes(newNetworkDownload - currentNetworkDownload));
  1234. localStorage.setItem("networkUpload", formatBytes(newNetworkUpload - currentNetworkUpload));
  1235. }, 500);
  1236. }
  1237. function getExpirationDateOfUser() {
  1238. const expirationDate = localStorage.getItem("expirationDate");
  1239. if (expirationDate) {
  1240. expiresDateUserInMenu.style({ display: "block" });
  1241. return `Expira em: ${expirationDate}`;
  1242. }
  1243. expiresDateUserInMenu.style({ display: "none" });
  1244. return "";
  1245. }
  1246. function toggleLabelHeight(inputId) {
  1247. const input = document.getElementById(inputId);
  1248. const label = document.querySelector(`label[for="${inputId}"]`);
  1249. if (input.checked) {
  1250. // Se o input estiver selecionado, ajuste a altura máxima do label
  1251. label.style.maxHeight = label.scrollHeight + "px";
  1252. } else {
  1253. // Se o input não estiver selecionado, redefina a altura máxima
  1254. label.style.maxHeight = "32px";
  1255. }
  1256. }
  1257. function toggleMoreInputs() {
  1258. const data = JSON.parse(appGetDefaultConfig());
  1259. if (!data) return null;
  1260. containerInputUsername.removeClass("hidden");
  1261. containerInputPassword.removeClass("hidden");
  1262. containerInputUUID.addClass("hidden");
  1263. if (data?.auth?.username) {
  1264. containerInputUsername.addClass("hidden");
  1265. }
  1266. if (data?.auth?.password) {
  1267. containerInputPassword.addClass("hidden");
  1268. }
  1269. if (!data?.auth?.username) {
  1270. containerInputUsername.removeClass("hidden");
  1271. }
  1272. if (!data?.auth?.password) {
  1273. containerInputPassword.removeClass("hidden");
  1274. }
  1275. if (data.mode?.toLowerCase().startsWith("v2ray")) {
  1276. if (data?.auth?.v2ray_uuid) {
  1277. containerInputUUID.addClass("hidden");
  1278. containerInputUsername.addClass("hidden");
  1279. containerInputPassword.addClass("hidden");
  1280. }
  1281. if (!data?.auth?.v2ray_uuid) {
  1282. containerInputUUID.removeClass("hidden");
  1283. containerInputUsername.addClass("hidden");
  1284. containerInputPassword.addClass("hidden");
  1285. }
  1286. }
  1287. }
  1288. </script>
  1289. <!-- AÇÕES -->
  1290. <script>
  1291. body.style({
  1292. background: getAppBackground(),
  1293. backgroundSize: "cover",
  1294. backgroundPosition: "center",
  1295. backgroundRepeat: "no-repeat",
  1296. });
  1297. containerHome.style({
  1298. padding: `${appGetStatusbarHeightSize() + 10}px 10px ${appGetNavbarHeightSize() + 10}px 10px`,
  1299. });
  1300. appLogo.attr({ src: getAppLogo() });
  1301. appLogo.on({ click: () => AppUpdate() });
  1302. buttonOfListCarrier.on({ click: () => showContainerConfigs() });
  1303. valueOnButtonOfCarrierList.html(getConfigName()?.name);
  1304. closeContainerConfigs.on({ click: () => hiddenContainerConfigs() });
  1305. buttonOfCheckUser.on({ click: () => appCheckuser() });
  1306. inputUsername.attr({ placeholder: appTranslateText("LBL_USERNAME") });
  1307. inputPassword.attr({ placeholder: appTranslateText("LBL_PASSWORD") });
  1308. inputUUID.attr({ placeholder: appTranslateText("LBL_UUID") });
  1309. inputUsername.attr({ value: appGetUsername() });
  1310. inputPassword.attr({ value: appGetPassword() });
  1311. inputUUID.attr({ value: appGetUUID() });
  1312. inputUsername.on({ input: (e) => appSetUsername(e.target.value) });
  1313. inputPassword.on({ input: (e) => appSetPassword(e.target.value) });
  1314. inputUUID.on({ input: (e) => appSetUUID(e.target.value) });
  1315. eyeViewPasswordInput.on({ click: () => showInputPasswordValue() });
  1316. eyeNotViewPasswordInput.on({ click: () => hiddenInputPasswordValue() });
  1317. eyeViewUUID.on({ click: () => showInputUUIDValue() });
  1318. eyeNotViewUUID.on({ click: () => hiddenInputUUIDValue() });
  1319. buttonStartStopVpn.on({ click: () => startStopConnection() });
  1320. buttonLogs.on({ click: () => appOpenDialogDialogs() });
  1321. containerMenu.style({
  1322. padding: `${appGetStatusbarHeightSize() + 10}px 10px ${appGetNavbarHeightSize() + 10}px 10px`,
  1323. });
  1324. openMenuButton.on({ click: () => showContainerMenu() });
  1325. hiddenContainerMenuButton.on({ click: () => hiddenContainerMenu() });
  1326. expiresDateUserInMenu.html(getExpirationDateOfUser());
  1327. navCheckuser.on({ click: () => appCheckuser() });
  1328. navWhatsapp.on({ click: () => appIntoBrowser("https://wa.me/15996311570") });
  1329. navTelegram.on({ click: () => appIntoBrowser("https://t.me/wesley898") });
  1330. navRenew.on({ click: () => appIntoBrowser("https://t.me/agvendasbr_bot") });
  1331. navTest.on({ click: () => appIntoBrowser("https://t.me/agvendasbr_bot") });
  1332. navUpdate.on({ click: () => AppUpdate() });
  1333. navTerms.on({ click: () => showContainerTerms() });
  1334. closeContainerTerms.on({ click: () => hiddenContainerTerms() });
  1335. navHotspot.on({ click: () => showContainerHotspot() });
  1336. buttonStartOrStopHotspot.on({ click: () => toggleHotspot() });
  1337. closeContainerHotspotButton.on({ click: () => hiddenContainerHotspot() });
  1338. navAccessPoint.on({ click: () => appApnConfiguration() });
  1339. navAppCleanData.on({ click: () => appClearData() });
  1340. connectionState();
  1341. setStatusHotspot();
  1342. updateNetworkStats();
  1343. toggleMoreInputs();
  1344. writeCarrierStatus();
  1345. </script>
  1346. <!-- FUNÇÕES PARA O APP -->
  1347. <script>
  1348. function dtConfigClickListener() {
  1349. writeConfigValueOnButton();
  1350. toggleMoreInputs();
  1351. inputUsername.attr({ value: appGetUsername() });
  1352. inputPassword.attr({ value: appGetPassword() });
  1353. inputUUID.attr({ value: appGetUUID() });
  1354. }
  1355. function dtVpnStateListener(state) {
  1356. connectionState(state);
  1357. }
  1358. const dtCheckUserModelListener = (model) => {
  1359. const data = JSON.parse(model);
  1360. expiresDateUserInMenu.html(`Expira em: ${data.expiration_date}`);
  1361. expiresDateUserInMenu.style({ display: "block" });
  1362. localStorage.setItem("expirationDate", data.expiration_date);
  1363. };
  1364. </script>
  1365. </body>
  1366. </html>
  1367. ",
  1368. "type": "HTML",
  1369. "status": "ACTIVE",
  1370. "user_id": "2a6b1d78-e6f3-4956-be98-29d1d70278fe"
  1371. },
  1372. {
  1373. "id": 14288,
  1374. "label": "PAGINA WEBVIEW (POR SUA CONTA E RISCO)",
  1375. "name": "APP_WEB_VIEW",
  1376. "value": null,
  1377. "type": "HTML",
  1378. "status": "ACTIVE",
  1379. "user_id": "2a6b1d78-e6f3-4956-be98-29d1d70278fe"
  1380. }
  1381. ]

comments powered by Disqus