Cachy / app /web /index.html
Vatxzz's picture
Fix 500 on GET /cards when a stored card predates the current schema
648fe7f unverified
Raw
History Blame Contribute Delete
6.06 kB
<!DOCTYPE html><html><head>
<!--
If you are serving your web app in a path other than the root, change the
href value below to reflect the base path you are serving from.
The path provided below has to start and end with a slash "/" in order for
it to work correctly.
For more details:
* https://developer.mozilla.org/en-US/docs/Web/HTML/Element/base
This is a placeholder for base href that will be replaced by the value of
the `--base-href` argument provided to `flutter build`.
-->
<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.">
<!-- iOS meta tags & icons -->
<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">
<!-- Favicon -->
<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);
// This script runs in <head>, so document.body does not exist yet — observing
// it directly threw "parameter 1 is not of type 'Node'" and killed the rest of
// this script, leaving splash removal to the slower load-event fallback.
// documentElement is always present and subtree:true still sees body's children.
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>
<!--
You can customize the "flutter_bootstrap.js" script.
This is useful to provide a custom configuration to the Flutter loader
or to give the user feedback during the initialization process.
For more details:
* https://docs.flutter.dev/platform-integration/web/initialization
-->
<script src="flutter_bootstrap.js" async=""></script>
</body></html>