첫 커밋: 로컬 프로젝트 업로드
This commit is contained in:
198
baron-sso/userfront/web/index.html
Normal file
198
baron-sso/userfront/web/index.html
Normal file
@@ -0,0 +1,198 @@
|
||||
<!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="/" />
|
||||
|
||||
<meta charset="UTF-8" />
|
||||
<meta content="IE=Edge" http-equiv="X-UA-Compatible" />
|
||||
<meta name="description" content="바론 SW 포털" />
|
||||
|
||||
<!-- 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="Baron 로그인" />
|
||||
<link rel="apple-touch-icon" href="icons/Icon-192.png" />
|
||||
|
||||
<!-- Favicon -->
|
||||
<link rel="icon" type="image/x-icon" href="favicon.ico" />
|
||||
|
||||
<title>Baron 로그인</title>
|
||||
<link rel="manifest" href="manifest.json" />
|
||||
<style>
|
||||
html,
|
||||
body {
|
||||
height: 100%;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
body {
|
||||
background: #f8fafc;
|
||||
color: #111827;
|
||||
font-family:
|
||||
Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont,
|
||||
"Segoe UI", sans-serif;
|
||||
}
|
||||
|
||||
#baron-bootstrap-shell {
|
||||
align-items: center;
|
||||
background:
|
||||
linear-gradient(180deg, rgba(248, 250, 252, 0.98), rgba(241, 245, 249, 0.98));
|
||||
box-sizing: border-box;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 18px;
|
||||
inset: 0;
|
||||
justify-content: center;
|
||||
min-height: 100%;
|
||||
padding: 32px;
|
||||
pointer-events: none;
|
||||
position: fixed;
|
||||
text-align: center;
|
||||
transition: opacity 180ms ease;
|
||||
z-index: 0;
|
||||
}
|
||||
|
||||
body.flutter-ready #baron-bootstrap-shell {
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
#baron-bootstrap-shell h1 {
|
||||
font-size: clamp(36px, 10vw, 72px);
|
||||
font-weight: 800;
|
||||
line-height: 1.05;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
#baron-bootstrap-shell p {
|
||||
color: #475569;
|
||||
font-size: clamp(16px, 4vw, 24px);
|
||||
font-weight: 600;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
#baron-bootstrap-shell .signin-preview {
|
||||
align-items: center;
|
||||
background: #1d4ed8;
|
||||
border-radius: 8px;
|
||||
color: #ffffff;
|
||||
display: flex;
|
||||
font-size: clamp(15px, 3vw, 18px);
|
||||
font-weight: 700;
|
||||
justify-content: center;
|
||||
min-height: 48px;
|
||||
min-width: min(280px, 80vw);
|
||||
padding: 0 24px;
|
||||
}
|
||||
|
||||
#baron-bootstrap-shell .loader {
|
||||
animation: baron-spin 880ms linear infinite;
|
||||
border: 5px solid #cbd5e1;
|
||||
border-top-color: #1e40af;
|
||||
border-radius: 50%;
|
||||
height: 48px;
|
||||
width: 48px;
|
||||
}
|
||||
|
||||
@keyframes baron-spin {
|
||||
to {
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<main id="baron-bootstrap-shell" aria-live="polite">
|
||||
<h1>Baron SW Portal</h1>
|
||||
<div class="loader" aria-hidden="true"></div>
|
||||
<p>Loading sign-in</p>
|
||||
<div class="signin-preview" aria-hidden="true">Sign in</div>
|
||||
</main>
|
||||
<script>
|
||||
var baronBootstrapStartedAt = performance.now();
|
||||
var baronMinimumShellMs = 0;
|
||||
window.addEventListener("flutter-first-frame", function () {
|
||||
var elapsedMs = performance.now() - baronBootstrapStartedAt;
|
||||
window.setTimeout(
|
||||
function () {
|
||||
document.body.classList.add("flutter-ready");
|
||||
window.setTimeout(function () {
|
||||
document.getElementById("baron-bootstrap-shell")?.remove();
|
||||
}, 220);
|
||||
},
|
||||
Math.max(0, baronMinimumShellMs - elapsedMs),
|
||||
);
|
||||
});
|
||||
</script>
|
||||
<script>
|
||||
(function () {
|
||||
function loadFlutter() {
|
||||
var script = document.createElement("script");
|
||||
script.src = "flutter_bootstrap.js";
|
||||
script.async = true;
|
||||
document.body.appendChild(script);
|
||||
}
|
||||
|
||||
var hostname = window.location.hostname;
|
||||
var isLocalhost =
|
||||
hostname === "localhost" || hostname === "127.0.0.1" || hostname === "::1";
|
||||
if (!isLocalhost || !("serviceWorker" in navigator)) {
|
||||
loadFlutter();
|
||||
return;
|
||||
}
|
||||
|
||||
navigator.serviceWorker
|
||||
.getRegistrations()
|
||||
.then(function (registrations) {
|
||||
return Promise.all(
|
||||
registrations.map(function (registration) {
|
||||
return registration.unregister();
|
||||
}),
|
||||
);
|
||||
})
|
||||
.then(function () {
|
||||
if (!window.caches) {
|
||||
return;
|
||||
}
|
||||
return caches.keys().then(function (keys) {
|
||||
return Promise.all(
|
||||
keys
|
||||
.filter(function (key) {
|
||||
return (
|
||||
key.indexOf("baron-userfront-") === 0 ||
|
||||
key.indexOf("flutter-app-cache") === 0
|
||||
);
|
||||
})
|
||||
.map(function (key) {
|
||||
return caches.delete(key);
|
||||
}),
|
||||
);
|
||||
});
|
||||
})
|
||||
.then(function () {
|
||||
if (navigator.serviceWorker.controller) {
|
||||
window.location.reload();
|
||||
return;
|
||||
}
|
||||
loadFlutter();
|
||||
})
|
||||
.catch(function (error) {
|
||||
console.warn("[baron] failed to clear local service worker", error);
|
||||
loadFlutter();
|
||||
});
|
||||
})();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user