1<!doctype html> 2<html lang="pt-BR"> 3 4<head> 5 <meta charset="UTF-8" /> 6 <meta name="robots" content="noindex, nofollow" /> 7 8 <link rel="icon" type="image/x-icon" href="/favicon.ico"> 9 <meta name="viewport" 10 content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, viewport-fit=cover"> 11 <title>Stoqui</title> 12 13 <!-- Google Fonts - loaded async to not block rendering. Weights 400/500/700 14 so storefront font previews render the regular + bold roles authentically 15 (font-synthesis: none in index.css, so missing weights would silently 16 render at the wrong thickness). --> 17 <link rel="preconnect" href="https://fonts.googleapis.com"> 18 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 19 <link rel="preload" as="style" 20 href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;500;700&family=Outfit:wght@400;500;700&family=Bitter:wght@400;500;700&family=Quicksand:wght@400;500;700&display=swap" 21 onload="this.onload=null;this.rel='stylesheet'"> 22 <noscript> 23 <link 24 href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;500;700&family=Outfit:wght@400;500;700&family=Bitter:wght@400;500;700&family=Quicksand:wght@400;500;700&display=swap" 25 rel="stylesheet"> 26 </noscript> 27 28 <!-- Polyfill for older browsers --> 29 30 <!-- Pre-React layer. Paints before a single module is parsed and depends on 31 nothing: no React, no MUI, no bundle code. It shows the spinner and 32 nothing else, for as long as the boot takes, and hides it once React 33 commits. It never removes a node, so it cannot leave a blank screen the 34 way the old 5s loader.remove() timer did. --> 35 <style> 36 body { 37 margin: 0; 38 background-color: #F6F6FA; 39 } 40 41 /* #root deliberately gets NO position/z-index rule. 42 Giving it `position: relative; z-index: 1` (to lift it over the shell 43 below) turned it into a STACKING CONTEXT, and every fixed overlay 44 rendered inside it was then trapped in a layer painted at z-index 1 of 45 the root. MUI modals portal to document.body at z-index 1300, so they 46 started covering in-tree overlays that used to win - ClockSkewBanner 47 asks for 2147483647 and is the only way to reach /clock-skew, which is 48 exactly the screen a merchant needs when a wrong device clock is 49 breaking their JWT. It has to be able to sit above a dialog. 50 51 The shell is pushed behind with a NEGATIVE z-index instead. It still 52 paints (negative-z children sit above the canvas background, which is 53 where body's #F6F6FA ends up), and any real in-flow content in #root 54 paints over it without #root needing to be positioned at all. */ 55 #app-shell { 56 position: fixed; 57 inset: 0; 58 z-index: -1; 59 display: flex; 60 align-items: center; 61 justify-content: center; 62 background: #F6F6FA; 63 pointer-events: none; 64 -webkit-touch-callout: none; 65 -webkit-user-select: none; 66 user-select: none; 67 } 68 69 .shell-spinner { 70 width: 48px; 71 height: 48px; 72 border: 5px solid #8865FE66; 73 border-radius: 50%; 74 border-top-color: #8865FE; 75 animation: spin 1s ease-in-out infinite; 76 } 77 78 @keyframes spin { 79 to { 80 transform: rotate(360deg); 81 } 82 } 83 84 /* React committed - stop drawing ENTIRELY: hide the spinner AND drop the 85 background. 86 87 Dropping the background matters. #root is not a stacking context, so 88 in-app elements using `z-index: -1` (the decorative gradients on 89 onboarding, login and the registration flow, plus FabHint and 90 BirthdayHomeCard) share the root's negative layer with #app-shell - and 91 #app-shell comes LATER in the DOM, so it paints on top of them. Left 92 opaque, it would quietly cover every one of those backgrounds for the 93 whole session. Transparent, the shell contributes no paint at all once 94 React is up. */ 95 html.react-up .shell-spinner { 96 display: none; 97 } 98 99 html.react-up #app-shell { 100 background: transparent; 101 } 102 103 /* React committed and then emptied #root. Put the spinner and the backdrop 104 back rather than show a blank screen. The load-bearing net is 105 RootErrorBoundary; this is a bonus layer. Re-verify on every React 106 upgrade. */ 107 html.react-up #root:empty~#app-shell { 108 background: #F6F6FA; 109 } 110 111 html.react-up #root:empty~#app-shell .shell-spinner { 112 display: block; 113 } 114 </style> 115
115<script type="module" crossorigin src="/assets/index-TALscxEc.js"></script>
115 116 <link rel="modulepreload" crossorigin href="/assets/vendor-Dwao9eNC.js"> 117 <link rel="modulepreload" crossorigin href="/assets/mui-CRsYZxVY.js"> 118 <link rel="modulepreload" crossorigin href="/assets/query-8ViTdhdk.js"> 119 <link rel="modulepreload" crossorigin href="/assets/datePickers-BIJXYOKG.js"> 120 <link rel="modulepreload" crossorigin href="/assets/icons-D8aatgQ4.js"> 121 <link rel="modulepreload" crossorigin href="/assets/lab-DSem1Osk.js"> 122 <link rel="stylesheet" crossorigin href="/assets/index-TuPg2doO.css"> 123</head> 124 125<body> 126 <!-- #root MUST come first: the #root:empty sibling selector above depends on it. --> 127 <div id="root"></div> 128 129 <!-- Painted before any JS module executes. Never removed, only hidden. --> 130 <div id="app-shell"> 131 <div class="shell-spinner" aria-hidden="true"></div> 132 </div> 133 134 135 <!-- Handshake with React. MUST stay at the end of <body>: it reads elements 136 above it, and being a classic script it runs before the deferred module 137 above ever evaluates, so window.__stoquiBoot always exists by the time 138 main.tsx calls it. Fully guarded - if this throws, the app still boots. --> 139
139<script> 140 (function () { 141 try { 142 var html = document.documentElement; 143 var BOOT_START = Date.now(); 144 var settled = false; 145 146 window.__stoquiBoot = { 147 ready: function () { 148 if (settled) return; 149 settled = true; 150 html.classList.add('react-up'); 151 // Time from "index.html parsed" to "React's first commit". The only 152 // place this can be read on a real device - visible in the Xcode / 153 // Android Studio console. 154 var ms = Date.now() - BOOT_START; 155 window.__stoquiBoot.readyMs = ms; 156 try { console.log('[boot] React up in ' + ms + 'ms'); } catch (e) { } 157 } 158 }; 159 160 // Nothing may DEPEND on bundle code to hide the spinner, so watch #root 161 // directly. signalReactUp() from the bundle is an earlier, additional 162 // signal; whichever fires first wins and ready() is idempotent. 163 var rootEl = document.getElementById('root'); 164 var settleIfPainted = function () { 165 if (!rootEl || !rootEl.firstElementChild) return false; 166 window.__stoquiBoot.ready(); 167 return true; 168 }; 169 170 if (!settleIfPainted()) { 171 if (rootEl && window.MutationObserver) { 172 var obs = new MutationObserver(function () { 173 if (settleIfPainted()) obs.disconnect(); 174 }); 175 obs.observe(rootEl, { childList: true }); 176 } else { 177 var poll = setInterval(function () { 178 if (settleIfPainted()) clearInterval(poll); 179 }, 100); 180 setTimeout(function () { clearInterval(poll); }, 30000); 181 } 182 } 183 } catch (e) { /* bonus layer, never a dependency */ } 184 })(); 185 </script>
185 186</body> 187 188</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.