1<!doctype html> 2<html lang="en"> 3 <head> 4 <meta charset="utf-8" /> 5 <link rel="icon" type="image/png" href="/static/favicon.png" crossorigin="use-credentials" /> 6 <link 7 rel="icon" 8 type="image/png" 9 href="/static/favicon-96x96.png" 10 sizes="96x96" 11 crossorigin="use-credentials" 12 /> 13 <link 14 rel="icon" 15 type="image/svg+xml" 16 href="/static/favicon.svg" 17 crossorigin="use-credentials" 18 /> 19 <link rel="shortcut icon" href="/static/favicon.ico" crossorigin="use-credentials" /> 20 <link 21 rel="apple-touch-icon" 22 sizes="180x180" 23 href="/static/apple-touch-icon.png" 24 crossorigin="use-credentials" 25 /> 26 <link rel="manifest" href="/manifest.json" crossorigin="use-credentials" /> 27 <meta 28 name="viewport" 29 content="width=device-width, initial-scale=1, maximum-scale=1, viewport-fit=cover, interactive-widget=resizes-content" 30 /> 31 <meta name="theme-color" content="#171717" /> 32 <meta name="robots" content="noindex,nofollow" /> 33 34
34<script src="/static/loader.js" defer crossorigin="use-credentials"></script>
34 35 <link rel="stylesheet" href="/static/custom.css" crossorigin="use-credentials" /> 36 37
37<script> 38 function resizeIframe(obj) { 39 obj.style.height = obj.contentWindow.document.documentElement.scrollHeight + 'px'; 40 } 41 </script>
41 42 43
43<script> 44 // On page load or when changing themes, best to add inline in `head` to avoid FOUC 45 (() => { 46 const metaThemeColorTag = document.querySelector('meta[name="theme-color"]'); 47 const prefersDarkTheme = window.matchMedia('(prefers-color-scheme: dark)').matches; 48 49 if (!localStorage?.theme) { 50 localStorage.theme = 'system'; 51 } 52 53 if (localStorage.theme === 'system') { 54 document.documentElement.classList.add(prefersDarkTheme ? 'dark' : 'light'); 55 metaThemeColorTag.setAttribute('content', prefersDarkTheme ? '#171717' : '#ffffff'); 56 } else if (localStorage.theme === 'oled-dark') { 57 document.documentElement.style.setProperty('--color-gray-800', '#101010'); 58 document.documentElement.style.setProperty('--color-gray-850', '#050505'); 59 document.documentElement.style.setProperty('--color-gray-900', '#000000'); 60 document.documentElement.style.setProperty('--color-gray-950', '#000000'); 61 document.documentElement.classList.add('dark'); 62 metaThemeColorTag.setAttribute('content', '#000000'); 63 } else if (localStorage.theme === 'light') { 64 document.documentElement.classList.add('light'); 65 metaThemeColorTag.setAttribute('content', '#ffffff'); 66 } else if (localStorage.theme === 'her') { 67 document.documentElement.classList.add('her'); 68 metaThemeColorTag.setAttribute('content', '#983724'); 69 } else { 70 document.documentElement.classList.add('dark'); 71 metaThemeColorTag.setAttribute('content', '#171717'); 72 } 73 74 const preloadHref = document.documentElement.classList.contains('dark') 75 ? '/static/splash-dark.png' 76 : '/static/splash.png'; 77 const preload = document.createElement('link'); 78 preload.rel = 'preload'; 79 preload.as = 'image'; 80 preload.href = preloadHref; 81 preload.setAttribute('fetchpriority', 'high'); 82 document.head.appendChild(preload); 83 84 window.matchMedia('(prefers-color-scheme: dark)').addListener((e) => { 85 if (localStorage.theme === 'system') { 86 if (e.matches) { 87 document.documentElement.classList.add('dark'); 88 document.documentElement.classList.remove('light'); 89 metaThemeColorTag.setAttribute('content', '#171717'); 90 } else { 91 document.documentElement.classList.add('light'); 92 document.documentElement.classList.remove('dark'); 93 metaThemeColorTag.setAttribute('content', '#ffffff'); 94 } 95 } 96 }); 97 const isDarkMode = document.documentElement.classList.contains('dark'); 98 99 const logo = document.createElement('img'); 100 logo.id = 'logo'; 101 logo.style = 102 'position: absolute; width: auto; height: 6rem; top: 44%; left: 50%; transform: translateX(-50%); display:block;'; 103 logo.loading = 'eager'; 104 logo.fetchPriority = 'high'; 105 logo.src = isDarkMode ? '/static/splash-dark.png' : '/static/splash.png'; 106 107 document.addEventListener('DOMContentLoaded', function () { 108 const splash = document.getElementById('splash-screen'); 109 if (document.documentElement.classList.contains('her')) { 110 return; 111 } 112 113 if (splash) splash.prepend(logo); 114 }); 115 })(); 116 </script>
116 117 118 <title>Open WebUI</title> 119 120 <link href="/_app/immutable/entry/start.BcfU-xkP.js" rel="modulepreload"> 121 <link href="/_app/immutable/chunks/BUXarC_9.js" rel="modulepreload"> 122 <link href="/_app/immutable/chunks/DAutZaRy.js" rel="modulepreload"> 123 <link href="/_app/immutable/chunks/DIeogL5L.js" rel="modulepreload"> 124 <link href="/_app/immutable/entry/app.WPjxzi0v.js" rel="modulepreload"> 125 <link href="/_app/immutable/chunks/C1FmrZbK.js" rel="modulepreload"> 126 <link href="/_app/immutable/chunks/kXSiLDwZ.js" rel="modulepreload"> 127 <link href="/_app/immutable/chunks/CWj6FrbW.js" rel="modulepreload"> 128 <link href="/_app/immutable/chunks/DTtvsU5y.js" rel="modulepreload"> 129 <link href="/_app/immutable/chunks/B2dQbMI5.js" rel="modulepreload"> 130 <link href="/_app/immutable/chunks/DxlqTe30.js" rel="modulepreload"> 131 <link href="/_app/immutable/nodes/0.B9umtSoe.js" rel="modulepreload"> 132 <link href="/_app/immutable/chunks/69_IOA4Y.js" rel="modulepreload"> 133 <link href="/_app/immutable/chunks/DU8Bp34v.js" rel="modulepreload"> 134 <link href="/_app/immutable/chunks/CL05SSCs.js" rel="modulepreload"> 135 <link href="/_app/immutable/chunks/Cui6wHWG.js" rel="modulepreload"> 136 <link href="/_app/immutable/chunks/DjewLkXc.js" rel="modulepreload"> 137 <link href="/_app/immutable/chunks/dm1FmSOd.js" rel="modulepreload"> 138 <link href="/_app/immutable/chunks/D39laNvF.js" rel="modulepreload"> 139 <link href="/_app/immutable/chunks/DNymOMGx.js" rel="modulepreload"> 140 <link href="/_app/immutable/chunks/DsrNSnzV.js" rel="modulepreload"> 141 <link href="/_app/immutable/chunks/DKTrf9D6.js" rel="modulepreload"> 142 <link href="/_app/immutable/chunks/Bn968l-9.js" rel="modulepreload"> 143 <link href="/_app/immutable/chunks/CpYI-2uV.js" rel="modulepreload"> 144 <link href="/_app/immutable/chunks/xnKOsXw6.js" rel="modulepreload"> 145 <link href="/_app/immutable/chunks/CTLxwMto.js" rel="modulepreload"> 146 <link href="/_app/immutable/chunks/RK711yvG.js" rel="modulepreload"> 147 <link href="/_app/immutable/chunks/CWY7lA_3.js" rel="modulepreload"> 148 <link href="/_app/immutable/chunks/BT28bLwl.js" rel="modulepreload"> 149 <link href="/_app/immutable/chunks/QjJsDpFa.js" rel="modulepreload"> 150 <link href="/_app/immutable/chunks/BFa6rpEj.js" rel="modulepreload"> 151 <link href="/_app/immutable/chunks/D5RA0Xlt.js" rel="modulepreload"> 152 <link href="/_app/immutable/chunks/CiRmt06n.js" rel="modulepreload"> 153 <link href="/_app/immutable/chunks/CjaAhkWq.js" rel="modulepreload"> 154 <link href="/_app/immutable/chunks/BNQpdipO.js" rel="modulepreload"> 155 <link href="/_app/immutable/chunks/-e3nE0iP.js" rel="modulepreload"> 156 <link href="/_app/immutable/chunks/Bfc47y5P.js" rel="modulepreload"> 157 <link href="/_app/immutable/chunks/Ctkpzgax.js" rel="modulepreload"> 158 <link href="/_app/immutable/chunks/fQv7DDzW.js" rel="modulepreload"> 159 <link href="/_app/immutable/chunks/s3OjpUZ5.js" rel="modulepreload"> 160 <link href="/_app/immutable/chunks/FVE7zArq.js" rel="modulepreload"> 161 <link href="/_app/immutable/chunks/Bre5lY_g.js" rel="modulepreload"> 162 <link href="/_app/immutable/chunks/BfvxFurb.js" rel="modulepreload"> 163 <link href="/_app/immutable/chunks/89RotG5n.js" rel="modulepreload"> 164 165 <link href="/_app/immutable/assets/Toaster.DKF17Rty.css" rel="stylesheet"> 166 <link href="/_app/immutable/assets/Modal.CSlFhZkq.css" rel="stylesheet"> 167 <link href="/_app/immutable/assets/0.D-1LH_Ar.css" rel="stylesheet"> 168 </head> 169 170 <body data-sveltekit-preload-data="hover"> 171 <div style="display: contents"> 172
172<script> 173 { 174 __sveltekit_1nlhk8n = { 175 base: "" 176 }; 177 178 const element = document.currentScript.parentElement; 179 180 Promise.all([ 181 import("/_app/immutable/entry/start.BcfU-xkP.js"), 182 import("/_app/immutable/entry/app.WPjxzi0v.js") 183 ]).then(([kit, app]) => { 184 kit.start(app, element); 185 }); 186 } 187 </script>
187 188 </div> 189 190 <div 191 id="splash-screen" 192 style="position: fixed; z-index: 100; top: 0; left: 0; width: 100%; height: 100%" 193 > 194 <style type="text/css" nonce=""> 195 html { 196 overflow-y: scroll !important; 197 } 198 </style> 199 200 <div 201 style=" 202 position: absolute; 203 top: 33%; 204 left: 50%; 205 206 width: 24rem; 207 transform: translateX(-50%); 208 209 display: flex; 210 flex-direction: column; 211 align-items: center; 212 " 213 > 214 <img 215 id="logo-her" 216 style="width: auto; height: 13rem" 217 src="/static/splash.png" 218 loading="eager" 219 fetchpriority="high" 220 class="animate-pulse-fast" 221 /> 222 223 <div style="position: relative; width: 24rem; margin-top: 0.5rem"> 224 <div 225 id="progress-background" 226 style=" 227 position: absolute; 228 width: 100%; 229 height: 0.75rem; 230 231 border-radius: 9999px; 232 background-color: #fafafa9a; 233 " 234 ></div> 235 236 <div 237 id="progress-bar" 238 style=" 239 position: absolute; 240 width: 0%; 241 height: 0.75rem; 242 border-radius: 9999px; 243 background-color: #fff; 244 " 245 class="bg-white" 246 ></div> 247 </div> 248 </div> 249 250 <!-- <span style="position: absolute; bottom: 32px; left: 50%; margin: -36px 0 0 -36px"> 251 Footer content 252 </span> --> 253 </div> 254 </body> 255 256 <style type="text/css" nonce=""> 257 html { 258 overflow-y: hidden !important; 259 overscroll-behavior-y: none; 260 } 261 262 #splash-screen { 263 background: #fff; 264 } 265 266 html.dark #splash-screen { 267 background: #000; 268 } 269 270 html.her #splash-screen { 271 background: #983724; 272 } 273 274 #logo-her { 275 display: none; 276 } 277 278 #progress-background { 279 display: none; 280 } 281 282 #progress-bar { 283 display: none; 284 } 285 286 html.her #logo { 287 display: none; 288 } 289 290 html.her #logo-her { 291 display: block; 292 filter: invert(1); 293 } 294 295 html.her #progress-background { 296 display: block; 297 } 298 299 html.her #progress-bar { 300 display: block; 301 } 302 303 @media (max-width: 24rem) { 304 html.her #progress-background { 305 display: none; 306 } 307 308 html.her #progress-bar { 309 display: none; 310 } 311 } 312 313 @keyframes pulse { 314 50% { 315 opacity: 0.65; 316 } 317 } 318 319 .animate-pulse-fast { 320 animation: pulse 1.5s cubic-bezier(0.4, 0, 0.6, 1) infinite; 321 } 322 </style> 323</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.