| <!DOCTYPE html><html><head> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <base href="$FLUTTER_BASE_HREF"> |
|
|
| <meta charset="UTF-8"> |
| <meta content="IE=Edge" http-equiv="X-UA-Compatible"> |
| <meta name="description" content="A new Flutter project."> |
|
|
| |
| <meta name="mobile-web-app-capable" content="yes"> |
| <meta name="apple-mobile-web-app-status-bar-style" content="black"> |
| <meta name="apple-mobile-web-app-title" content="cachy"> |
| <link rel="apple-touch-icon" href="icons/Icon-192.png"> |
|
|
| |
| <link rel="icon" type="image/png" href="favicon.png"> |
|
|
| <title>cachy</title> |
| <link rel="manifest" href="manifest.json"> |
| <link rel="preconnect" href="https://fonts.googleapis.com"> |
| <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> |
| <link href="https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,600&display=swap" rel="stylesheet"> |
| <style id="splash-screen-style"> |
| html, body { |
| width: 100%; |
| height: 100%; |
| margin: 0; |
| padding: 0; |
| background-color: #F5F0E8; |
| overflow: hidden; |
| font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; |
| } |
| body { |
| display: flex; |
| align-items: center; |
| justify-content: center; |
| } |
| @media (prefers-color-scheme: dark) { |
| html, body { |
| background-color: #181818; |
| } |
| } |
| #splash { |
| display: flex; |
| flex-direction: column; |
| align-items: center; |
| justify-content: center; |
| pointer-events: none !important; |
| z-index: 9999; |
| } |
| .cachy-logo-svg { |
| width: 92px; |
| height: 92px; |
| margin-bottom: 20px; |
| } |
| .glyph-bracket { |
| stroke: #1C1917; |
| } |
| .glyph-reel-group { |
| animation: reelDrop 0.72s cubic-bezier(0.22, 1, 0.36, 1) forwards; |
| } |
| @keyframes reelDrop { |
| 0% { transform: translateY(-44px); } |
| 100% { transform: translateY(0px); } |
| } |
| .glyph-reel { |
| fill: #7D8472; |
| opacity: 0.55; |
| } |
| @media (prefers-color-scheme: dark) { |
| .glyph-bracket { |
| stroke: #EDE8DF; |
| } |
| .glyph-reel { |
| fill: #96A885; |
| } |
| } |
| .cachy-wordmark { |
| font-size: 44px; |
| font-weight: 600; |
| letter-spacing: -0.8px; |
| color: #1C1917; |
| margin: 0; |
| font-family: "Fraunces", "Georgia", "Times New Roman", serif; |
| opacity: 0; |
| animation: wordmarkReveal 0.65s ease-out 0.65s forwards; |
| } |
| @keyframes wordmarkReveal { |
| 0% { opacity: 0; transform: translateY(10px); } |
| 100% { opacity: 1; transform: translateY(0px); } |
| } |
| @media (prefers-color-scheme: dark) { |
| .cachy-wordmark { |
| color: #EDE8DF; |
| } |
| } |
| </style> |
| <script id="splash-screen-script"> |
| let minTimeElapsed = false; |
| let flutterReady = false; |
| |
| function removeSplashFromWeb() { |
| const splash = document.getElementById("splash"); |
| if (splash && !splash.classList.contains("removing")) { |
| splash.classList.add("removing"); |
| splash.style.transition = "opacity 0.25s ease-out"; |
| splash.style.opacity = "0"; |
| setTimeout(() => splash.remove(), 250); |
| } |
| document.body.style.background = "transparent"; |
| } |
| |
| function tryRemoveSplash() { |
| if (minTimeElapsed && flutterReady) { |
| removeSplashFromWeb(); |
| } |
| } |
| |
| setTimeout(() => { |
| minTimeElapsed = true; |
| tryRemoveSplash(); |
| }, 1300); |
| |
| |
| |
| |
| |
| const observer = new MutationObserver((mutations) => { |
| for (const mutation of mutations) { |
| for (const node of mutation.addedNodes) { |
| if (node.nodeName && (node.nodeName.toLowerCase() === 'flutter-view' || node.nodeName.toLowerCase() === 'flt-glass-pane' || node.nodeName.toLowerCase() === 'canvas')) { |
| flutterReady = true; |
| tryRemoveSplash(); |
| observer.disconnect(); |
| return; |
| } |
| } |
| } |
| }); |
| observer.observe(document.documentElement, { childList: true, subtree: true }); |
| |
| window.addEventListener('load', function() { |
| setTimeout(() => { |
| flutterReady = true; |
| tryRemoveSplash(); |
| }, 3500); |
| }); |
| window.addEventListener('removeSplashFromWeb', removeSplashFromWeb); |
| </script> |
| <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" name="viewport"> |
| </head> |
| <body> |
| <div id="splash"> |
| <svg class="cachy-logo-svg" viewBox="0 0 100 100" fill="none" xmlns="http://www.w3.org/2000/svg"> |
| <path class="glyph-bracket" d="M 18 30 L 18 66 A 16 16 0 0 0 34 82 L 66 82 A 16 16 0 0 0 82 66 L 82 30" stroke-width="13" stroke-linecap="round" stroke-linejoin="round"/> |
| <g class="glyph-reel-group"> |
| <rect class="glyph-reel" x="35" y="35" width="30" height="30" rx="9.6"/> |
| </g> |
| </svg> |
| <div class="cachy-wordmark">cachy</div> |
| </div> |
| |
| |
| |
| |
| |
| |
| |
| |
| <script src="flutter_bootstrap.js" async=""></script> |
|
|
|
|
| </body></html> |