index.html (3481B)
1 <!doctype html> 2 <html lang="en"> 3 <head> 4 <meta charset="utf-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1"> 6 <title>iuna</title> 7 <style> 8 :root { 9 color-scheme: dark; 10 font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; 11 background: #101214; 12 color: #f4f0e8; 13 } 14 15 html { 16 width: 100%; 17 height: 100%; 18 overflow: hidden; 19 } 20 21 body { 22 width: 100%; 23 height: 100%; 24 min-height: 100%; 25 margin: 0; 26 display: grid; 27 place-items: center; 28 overflow: hidden; 29 background: 30 radial-gradient(circle at 50% 20%, rgba(219, 182, 109, 0.14), transparent 34rem), 31 linear-gradient(180deg, #151719 0%, #0d0f10 100%); 32 } 33 34 main { 35 width: min(26rem, calc(100vw - 3rem)); 36 text-align: center; 37 } 38 39 .mark { 40 width: 4.25rem; 41 height: 4.25rem; 42 margin: 0 auto 1.5rem; 43 border-radius: 1.25rem; 44 display: grid; 45 place-items: center; 46 background: linear-gradient(145deg, #dcb16a, #f4e5bd 48%, #8a5c2f); 47 color: #151719; 48 font-size: 2rem; 49 font-weight: 800; 50 box-shadow: 0 1.5rem 3rem rgba(0, 0, 0, 0.28); 51 } 52 53 .mark svg { 54 width: 2.65rem; 55 height: 2.65rem; 56 } 57 58 .mark-loop { 59 fill: none; 60 stroke: currentColor; 61 stroke-width: 4.2; 62 stroke-linecap: round; 63 stroke-linejoin: round; 64 } 65 66 .mark-dot { 67 fill: currentColor; 68 } 69 70 h1 { 71 margin: 0; 72 font-size: 1.5rem; 73 font-weight: 750; 74 letter-spacing: 0; 75 } 76 77 p { 78 margin: 0.75rem 0 0; 79 color: rgba(244, 240, 232, 0.72); 80 line-height: 1.55; 81 } 82 83 .status { 84 margin-top: 1.5rem; 85 font-size: 0.86rem; 86 color: rgba(244, 240, 232, 0.58); 87 } 88 89 button { 90 margin-top: 1.25rem; 91 border: 1px solid rgba(244, 240, 232, 0.2); 92 border-radius: 0.5rem; 93 padding: 0.72rem 0.95rem; 94 background: rgba(244, 240, 232, 0.08); 95 color: #f4f0e8; 96 font: inherit; 97 cursor: pointer; 98 } 99 100 button:hover { 101 background: rgba(244, 240, 232, 0.13); 102 } 103 </style> 104 </head> 105 <body> 106 <main> 107 <div class="mark" aria-hidden="true"> 108 <svg viewBox="0 0 32 32" focusable="false"> 109 <circle class="mark-dot" cx="9.4" cy="7.6" r="2.8"></circle> 110 <path class="mark-loop" d="M9.4 13v7.1c0 3.7 2.9 6.4 6.6 6.4s6.6-2.7 6.6-6.4V13"></path> 111 </svg> 112 </div> 113 <h1>Starting iuna</h1> 114 <p>The local node is starting. The management UI opens here when it is ready.</p> 115 <div id="status" class="status">Waiting for http://127.0.0.1:18661</div> 116 <button id="open" type="button">Open Management UI</button> 117 </main> 118 <script> 119 const managementUrl = "http://127.0.0.1:18661/"; 120 const statusEl = document.getElementById("status"); 121 const openButton = document.getElementById("open"); 122 let attempts = 0; 123 124 async function waitForNode() { 125 attempts += 1; 126 try { 127 await fetch(managementUrl, { method: "GET", mode: "no-cors", cache: "no-store" }); 128 window.location.replace(managementUrl); 129 } catch (error) { 130 statusEl.textContent = `Waiting for ${managementUrl} (${attempts})`; 131 window.setTimeout(waitForNode, 700); 132 } 133 } 134 135 openButton.addEventListener("click", () => { 136 window.location.href = managementUrl; 137 }); 138 139 waitForNode(); 140 </script> 141 </body> 142 </html>