1<!DOCTYPE html> 2<html lang="en"> 3 <head> 4
4<script> 5 (function(){var o=Storage.prototype.removeItem;Storage.prototype.removeItem=function(k){k==='base44_access_token'&&(document.cookie='base44_logout_signal=true;path=/;max-age=60;SameSite=Lax');return o.call(this,k)}})(); 6 </script>
6 7
7<script> 8 self["MonacoEnvironment"] = (function (paths) { 9 return { 10 globalAPI: false, 11 getWorkerUrl : function (moduleId, label) { 12 var result = paths[label]; 13 if (/^((http:)|(https:)|(file:)|(\/\/))/.test(result)) { 14 var currentUrl = String(window.location); 15 var currentOrigin = currentUrl.substr(0, currentUrl.length - window.location.hash.length - window.location.search.length - window.location.pathname.length); 16 if (result.substring(0, currentOrigin.length) !== currentOrigin) { 17 var js = '/*' + label + '*/importScripts("' + result + '");'; 18 var blob = new Blob([js], { type: 'application/javascript' }); 19 return URL.createObjectURL(blob); 20 } 21 } 22 return result; 23 } 24 }; 25 })({ 26 "editorWorkerService": "/monacoeditorwork/editor.worker.bundle.js", 27 "typescript": "/monacoeditorwork/ts.worker.bundle.js", 28 "json": "/monacoeditorwork/json.worker.bundle.js", 29 "css": "/monacoeditorwork/css.worker.bundle.js", 30 "html": "/monacoeditorwork/html.worker.bundle.js", 31 "javascript": "/monacoeditorwork/ts.worker.bundle.js", 32 "less": "/monacoeditorwork/css.worker.bundle.js", 33 "scss": "/monacoeditorwork/css.worker.bundle.js", 34 "handlebars": "/monacoeditorwork/html.worker.bundle.js", 35 "razor": "/monacoeditorwork/html.worker.bundle.js" 36}); 37 </script>
37 38 <!-- Runtime config â must execute before the Vite module scripts read 39 window.__APP_CONFIG__. `defer` keeps that order (deferred classic 40 scripts and module scripts run in document order after parsing) while 41 unblocking the HTML parser, so asset preloads start immediately 42 instead of stalling ~160ms (p75) on this API round trip. 43 Back on the .js path: Render's extension-keyed edge cache rule twice 44 pinned a wrong body under this URL despite `no-store` (2026-08-20 and 45 2026-08-24); Render has since removed that cache rule for us, so the 46 suffix is safe again. If poisoning recurs: bump the `?v=` cache key, 47 or switch the src to the extension-less /api/frontend-config route 48 (kept serving as an escape hatch). --> 49
49<script defer="" src="/api/frontend-config.js?v=3"> 50 </script>
50 51 <!-- Usercentrics CMP --> 52
52<script type="application/javascript"> 53 var isBypassEnabled = document.cookie.split(';').some(function(cookie) { 54 return cookie.trim().indexOf('no_cmp=') === 0; 55 }); 56 var UC_UI_SUPPRESS_CMP_DISPLAY = isBypassEnabled; 57 </script>
57 58
58<script async="" src="https://accounts.google.com/gsi/client"> 59 </script>
59 60 <meta charset="utf-8"/> 61 <!-- Platform favicon: a real multi-size ICO (16/32/48) of the current sun 62 mark, served from public/. This is the ONLY rel="icon" link, and it 63 must stay that way â App.js rewrites the first match for backoffice. 64 Crawlers and link scrapers read this tag (and probe /favicon.ico 65 directly) with no JS, so the brand has to be correct statically. --> 66 <link href="https://qtrypzzcjebvfcihiynt.supabase.co/storage/v1/object/public/base44-prod/public/69adeba305aa0bb27f92af60/6043de611_K3Logo.jpg" rel="icon" sizes="any"/> 67
67<script> 68 // Pre-paint theme stamp for the demo Appearance (demo-appearance-themes) 69 // cohort: on a hard load the theme is applied by React (DemoThemeApplier) 70 // only after auth resolves, so the document boots light â a white flash, 71 // then light route skeletons (the FOUC this removes). DemoThemeApplier 72 // persists 'demo-display-theme-applied' only while the feature is active, 73 // so every other cohort (flag-off, native, backoffice, runtime apps) 74 // never sets it and this stays a no-op. React stays the source of truth 75 // after mount: DemoThemeApplier 76 // re-applies or clears these exact attributes. Keys must stay byte-identical 77 // with components/settings/useDemoTheme.ts â BOOT_STAMP_CONTRACT there is 78 // asserted against this file by useDemoTheme.spec.ts, so update both. 79 // 80 // Kill-switch caveat: the marker is written while the feature is active and 81 // only cleared once /me resolves. On the FIRST load after a user loses the 82 // flag â or after the kill switch is flipped mid-incident â this still 83 // stamps dark, then React settles to light: one darkâlight flash, which 84 // self-heals from the next load on. Flipping the switch does not repaint 85 // already-open tabs pre-paint; it collapses them on their next load. 86 try { 87 if (localStorage.getItem('demo-display-theme-applied') === '1') { 88 var demoTheme = localStorage.getItem('demo-display-theme'); 89 var demoDark = demoTheme === 'dark' || 90 (demoTheme === 'system' && window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches); 91 if (demoDark) { 92 var demoRoot = document.documentElement; 93 demoRoot.setAttribute('data-ds', 'base44'); 94 demoRoot.setAttribute('data-theme', 'dark'); 95 demoRoot.classList.add('dark'); 96 // Kill the pre-CSS white document flash; the app paints over it. 97 demoRoot.style.backgroundColor = '#09090b'; 98 } 99 } 100 } catch (e) {} 101 </script>
101 102 <meta content="width=device-width, initial-scale=1.0, viewport-fit=cover" name="viewport"/> 103 <meta content="#000000" name="theme-color"/> 104 <meta content="Comprehensive Accounting Management System With Custom Workflow Design and Management." name="description"/> 105 <meta content="yes" name="mobile-web-app-capable"/> 106 <meta content="black" name="apple-mobile-web-app-status-bar-style"/> 107 <meta content="K3 TPM" name="apple-mobile-web-app-title"/> 108 <link href="https://qtrypzzcjebvfcihiynt.supabase.co/storage/v1/object/public/base44-prod/public/69adeba305aa0bb27f92af60/6043de611_K3Logo.jpg" rel="apple-touch-icon" sizes="180x180"/> 109 <link href="https://otezok.com/manifest.json" rel="manifest"/> 110 <title> 111 K3 TPM 112 </title> 113 <!-- Open Graph / Facebook --> 114 <meta content="website" property="og:type"/> 115 <meta content="https://otezok.com/login" property="og:url"/> 116 <meta content="K3 TPM" property="og:title"/> 117 <meta content="K3 TPM" property="og:site_name"/> 118 <meta content="Comprehensive Accounting Management System With Custom Workflow Design and Management." property="og:description"/> 119 <meta content="https://qtrypzzcjebvfcihiynt.supabase.co/storage/v1/render/image/public/base44-prod/public/69adeba305aa0bb27f92af60/6043de611_K3Logo.jpg?width=1200&height=630&resize=contain" property="og:image"/> 120 <meta content="1200" property="og:image:width"/> 121 <meta content="630" property="og:image:height"/> 122 <meta content="Base44 link preview" property="og:image:alt"/> 123 <!-- Twitter --> 124 <meta content="summary_large_image" name="twitter:card"/> 125 <meta content="https://otezok.com/login" name="twitter:url"/> 126 <meta content="K3 TPM" name="twitter:title"/> 127 <meta content="Comprehensive Accounting Management System With Custom Workflow Design and Management." name="twitter:description"/> 128 <meta content="https://qtrypzzcjebvfcihiynt.supabase.co/storage/v1/render/image/public/base44-prod/public/69adeba305aa0bb27f92af60/6043de611_K3Logo.jpg?width=1200&height=630&resize=contain" name="twitter:image"/> 129 <meta content="Base44 link preview" name="twitter:image:alt"/> 130
130<script crossorigin="" src="/static/index-BXVnhd6w.js" type="module"> 131 </script>
131 132 <link crossorigin="" href="/static/rolldown-runtime-C0FnF6B9.js" rel="modulepreload"/> 133 <link crossorigin="" href="/static/runtime-QtgwY_nV.js" rel="modulepreload"/> 134 <link crossorigin="" href="/static/backend-lAz2jGEC.js" rel="modulepreload"/> 135 <link crossorigin="" href="/static/vendor-react-DpRoP2jP.js" rel="modulepreload"/> 136 <link crossorigin="" href="/static/preload-helper-BZ1Pz5am.js" rel="modulepreload"/> 137 <link crossorigin="" href="/static/vendor-data-cHhjBKlt.js" rel="modulepreload"/> 138 <link crossorigin="" href="/static/errorReporting-BhjFQ-A7.js" rel="modulepreload"/> 139 <link crossorigin="" href="/static/i18n-BkG2BqhN.js" rel="modulepreload"/> 140 <link crossorigin="" href="/static/vendor-utils-COHSilIG.js" rel="modulepreload"/> 141 <link crossorigin="" href="/static/mixpanelUtils-BhSkz7JY.js" rel="modulepreload"/> 142 <link crossorigin="" href="/static/bridge-Cq_Szqk4.js" rel="modulepreload"/> 143 <link crossorigin="" href="/static/axiosClient-Dhm2tAPZ.js" rel="modulepreload"/> 144 <link crossorigin="" href="/static/domainValidation-FMKryCR2.js" rel="modulepreload"/> 145 <link crossorigin="" href="/static/vendor-ui-5dZ4Cido.js" rel="modulepreload"/> 146 <link crossorigin="" href="/static/base-R2RdlUYo.js" rel="modulepreload"/> 147 <link crossorigin="" href="/static/AuthAPI-DrZEp5ec.js" rel="modulepreload"/> 148 <link crossorigin="" href="/static/useDesignSystem-6Kcl9LIZ.js" rel="modulepreload"/> 149 <link crossorigin="" href="/static/logoutReturnPath-HjtsxsFd.js" rel="modulepreload"/> 150 <link crossorigin="" href="/static/AuthContext-B3CPqY3u.js" rel="modulepreload"/> 151 <link crossorigin="" href="/static/dist-cuG6tbCo.js" rel="modulepreload"/> 152 <link crossorigin="" href="/static/featureFlags-Bk9SQ7aO.js" rel="modulepreload"/> 153 <link crossorigin="" href="/static/useHideNativeBottomTabs-1BpAstUW.js" rel="modulepreload"/> 154 <link crossorigin="" href="/static/native-mobile-app-J-txITCo.js" rel="modulepreload"/> 155 <link crossorigin="" href="/static/prop-types-D9WxI36-.js" rel="modulepreload"/> 156 <link crossorigin="" href="/static/esm-BblLZPXW.js" rel="modulepreload"/> 157 <link crossorigin="" href="/static/use-mobile-DhrgWcQS.js" rel="modulepreload"/> 158 <link crossorigin="" href="/static/create-zustand-store-BXwVBFFR.js" rel="modulepreload"/> 159 <link crossorigin="" href="/static/persist-to-storage-Der3pj-g.js" rel="modulepreload"/> 160 <link crossorigin="" href="/static/actions.middleware-D_eRWZoy.js" rel="modulepreload"/> 161 <link crossorigin="" href="/static/WorkspaceAPI-BPJRhCRI.js" rel="modulepreload"/> 162 <link crossorigin="" href="/static/useWorkspaceUnlockState-Cg67Ec9B.js" rel="modulepreload"/> 163 <link crossorigin="" href="/static/WorkspaceContext-Oy-ngS46.js" rel="modulepreload"/> 164 <link crossorigin="" href="/static/usePlatform-CeQ0MESx.js" rel="modulepreload"/> 165 <link crossorigin="" href="/static/react-Bs5oj7HH.js" rel="modulepreload"/> 166 <link crossorigin="" href="/static/useFeatureFlags-CMRMVy1m.js" rel="modulepreload"/> 167 <link crossorigin="" href="/static/utils-Idi6bWLx.js" rel="modulepreload"/> 168 <link crossorigin="" href="/static/toast-D08eStqq.js" rel="modulepreload"/> 169 <link crossorigin="" href="/static/index-BXHT-hnJ.css" rel="stylesheet"/> 170
170<script id="base44-runtime-tailwind-config"> 171 window.tailwind = window.tailwind || {}; window.tailwind.config = { darkMode: 'class' }; 172 </script>
172 173
173<script id="base44-runtime-tailwind-cdn" src="https://cdn.tailwindcss.com"> 174 </script>
174 175
175<script> 176 (function () { 177 var titles = {"/": "K3 TPM", "/admin": "Admin | K3 TPM", "/analytics": "Analytics | K3 TPM", "/appsettings": "App Settings | K3 TPM", "/app-settings": "App Settings | K3 TPM", "/batch-generate-templates": "Batch Generate Templates | K3 TPM", "/batchgeneratetemplates": "Batch Generate Templates | K3 TPM", "/billing": "Billing | K3 TPM", "/calendar": "Calendar | K3 TPM", "/checklists": "Checklists | K3 TPM", "/client-portal": "Client Portal | K3 TPM", "/clientportal": "Client Portal | K3 TPM", "/clientworkspace": "Client Workspace | K3 TPM", "/client-workspace": "Client Workspace | K3 TPM", "/clients": "Clients | K3 TPM", "/document-requests": "Document Requests | K3 TPM", "/documentrequests": "Document Requests | K3 TPM", "/documents": "Documents | K3 TPM", "/engagement-registry": "Engagement Registry | K3 TPM", "/engagementregistry": "Engagement Registry | K3 TPM", "/engagements": "Engagements | K3 TPM", "/outlook-inbox": "Outlook Inbox | K3 TPM", "/outlookinbox": "Outlook Inbox | K3 TPM", "/profile": "Profile | K3 TPM", "/projects": "Projects | K3 TPM", "/staffworkload": "Staff Workload | K3 TPM", "/staff-workload": "Staff Workload | K3 TPM", "/tasks": "Tasks | K3 TPM", "/templates": "Templates | K3 TPM", "/time-tracking": "Time Tracking | K3 TPM", "/timetracking": "Time Tracking | K3 TPM", "/reports": "Reports | K3 TPM", "/reportdesigner": "Report Designer | K3 TPM", "/report-designer": "Report Designer | K3 TPM", "/home": "K3 TPM"}; 178 // PascalCase boundaries -> "-", mirroring _PASCAL_BOUNDARY_RE without lookbehind 179 // (old Safari fails to PARSE a lookbehind, taking the whole script down). 180 var dashed = function (s) { 181 return s.replace(/([a-z0-9])([A-Z])/g, "$1-$2").replace(/([A-Z])([A-Z][a-z])/g, "$1-$2"); 182 }; 183 var decode = function (s) { 184 // A %2F inside ONE segment must not become a structural separator: /blog/foo%2Fbar is a 185 // dynamic slug, and letting it split would match a static /blog/foo/bar and write ITS title. 186 try { var d = decodeURIComponent(s); return d.indexOf("/") < 0 ? d : s; } catch (e) { return s; } 187 }; 188 var segments = function (path) { return path.split("/").filter(Boolean).map(decode); }; 189 var norm = function (path) { 190 var parts = segments(path).map(function (s) { return dashed(s).toLowerCase(); }); 191 return parts.length ? "/" + parts.join("/") : "/"; 192 }; 193 var lastPath = location.pathname, written = document.title, on = true; 194 var sync = function () { 195 // Path only: a hash/query change is the same page, and the SDK strips its own auth 196 // params with replaceState -- neither must clobber a server-rendered title in place. 197 if (!on || location.pathname === lastPath) return; 198 lastPath = location.pathname; 199 if (document.title !== written) { on = false; return; } 200 // Write ONLY a title the map proves. An unmapped path is a dynamic route (/blog/:slug) the 201 // map cannot carry, and writing a placeholder there is destructive, not merely vague: the 202 // prerender worker runs no setUserAgent, so its capture browser reads as human and executes 203 // this script, and coordinator.js's settle wait explicitly tolerates a full navigation -- 204 // a redirect landing on an unmapped path would bake the placeholder into the stored 205 // snapshot. Leaving the title alone degrades to today's behavior instead. 206 // Exact lookup only. A dash-stripped retry here would let a genuinely different /set-up 207 // claim /setup: the map carries a dash-free key only where a PascalCase boundary put the 208 // dashes there, and the client cannot tell the two apart. The map emits every reachable 209 // shape per segment instead (_client_url_variants). 210 var title = titles[norm(location.pathname)]; 211 if (title === undefined) return; 212 document.title = title; 213 // Re-read: the setter stores verbatim but the getter strips and collapses whitespace, so 214 // keeping the assigned string would make the next sync() read our own write as the app's. 215 written = document.title; 216 }; 217 var wrap = function (fn) { 218 // The history entry is already pushed by the time sync() runs, so a throw here would 219 // surface inside the host app's router and break navigation. This is injected into apps 220 // we cannot test, so it swallows rather than trusting the trace. 221 return function () { 222 var r = fn.apply(this, arguments);
223 try { sync(); } catch (e) {} 224 return r; 225 }; 226 }; 227 history.pushState = wrap(history.pushState); 228 history.replaceState = wrap(history.replaceState); 229 window.addEventListener("popstate", sync); 230})(); 231 </script>
231 232 <meta content="noindex, nofollow" name="robots"/> 233 </head> 234 <body> 235 <noscript> 236 You need to enable JavaScript to run this app. 237 </noscript> 238 <div id="root"> 239 </div> 240 </body> 241</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.