cloudflare
tcp/443 tcp/80 tcp/8443
Open service 172.67.201.96:80 · newppom.ppoms.cloud
2026-01-09 06:20
HTTP/1.1 301 Moved Permanently
Date: Fri, 09 Jan 2026 06:20:21 GMT
Content-Length: 0
Connection: close
Location: https://newppom.ppoms.cloud/
Vary: accept-encoding
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=dYMfnC09BS3VHavpFxG9dgHCNloEASf65a2F890WWI91ExVqj8EyW1SuI4lV4klrRZMg5FCK7wwdc%2BzNedv6i%2ByIiyZh9R%2Bf0sWDfor1%2F6sY"}]}
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
Server: cloudflare
Server-Timing: cfCacheStatus;desc="DYNAMIC"
Server-Timing: cfEdge;dur=13,cfOrigin;dur=6
cf-cache-status: DYNAMIC
CF-RAY: 9bb1d40bce02fccc-EWR
alt-svc: h3=":443"; ma=86400
Open service 2606:4700:3032::ac43:c960:8443 · newppom.ppoms.cloud
2026-01-09 06:20
HTTP/1.1 200 OK
Date: Fri, 09 Jan 2026 06:20:21 GMT
Content-Type: text/html;charset=UTF-8
Transfer-Encoding: chunked
Connection: close
Vary: accept-encoding
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=8WZt245IDTkgV74gvag69JiOMxfAaMtfVMAoyhzYsu%2BOn%2BbsYoYw1QtEIHCDUxH%2B2nu52ciVRmXyaYVqtwrPK7N6%2FwI1SrD%2FUbjXK1V5vqtDSkmJPwKuRgmPRtohbn4%3D"}]}
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
Server: cloudflare
cf-cache-status: DYNAMIC
CF-RAY: 9bb1d40bbcd47a96-AMS
alt-svc: h3=":8443"; ma=86400
Page title: Admin Login
<!DOCTYPE html>
<html>
<head>
<title>Admin Login</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
body { font-family: sans-serif; display: flex; justify-content: center; align-items: center; height: 100vh; margin: 0; background: #f0f2f5; }
.card { background: white; padding: 2rem; border-radius: 12px; box-shadow: 0 8px 20px rgba(0,0,0,0.1); width: 100%; max-width: 320px; text-align: center; }
input { width: 100%; padding: 12px; margin: 8px 0; border: 1px solid #ddd; border-radius: 6px; box-sizing: border-box; }
button { width: 100%; padding: 12px; background: #1a73e8; color: white; border: none; border-radius: 6px; cursor: pointer; font-weight: bold; }
</style>
</head>
<body>
<div class="card">
<h2>Admin Login</h2>
<input type="text" id="id" placeholder="ID">
<input type="password" id="pw" placeholder="Password">
<button onclick="login()">Login</button>
</div>
<script>
async function login() {
const id = document.getElementById('id').value;
const pw = document.getElementById('pw').value;
const res = await fetch('/api/login', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ id, pw })
});
if (res.ok) location.reload(); else alert('로그인 실패');
}
</script>
</body>
</html>
Open service 104.21.36.242:80 · newppom.ppoms.cloud
2026-01-09 06:20
HTTP/1.1 301 Moved Permanently
Date: Fri, 09 Jan 2026 06:20:21 GMT
Content-Length: 0
Connection: close
Location: https://newppom.ppoms.cloud/
Vary: accept-encoding
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=0PmrGzfc70deJRyE0YQum%2FmY4ThIy96Ghlu93y59wuUu%2F%2FLouU9b9yTHs6ye4GrD4K61Rl05cQeao7L3SnovKEhKva254uERW3UF9dhGXVUoauQ%3D"}]}
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
Server: cloudflare
cf-cache-status: DYNAMIC
CF-RAY: 9bb1d40c0f9e57f0-AMS
alt-svc: h3=":443"; ma=86400
Open service 2606:4700:3032::ac43:c960:443 · newppom.ppoms.cloud
2026-01-09 06:20
HTTP/1.1 200 OK
Date: Fri, 09 Jan 2026 06:20:21 GMT
Content-Type: text/html;charset=UTF-8
Transfer-Encoding: chunked
Connection: close
Vary: accept-encoding
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=hZgUwB4M4o%2Bp9kztIzWPnvaz1KFfYcHd%2BU4bmwkpqoJgDsjd1UpPFVW0yvfJB5ruN%2FZt6pru6Rf6GKbup7NY5X3RTIgXxScc8gGYsDZww6PQGYbntiTvqM7oaEJSy64%3D"}]}
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
Server: cloudflare
Server-Timing: cfCacheStatus;desc="DYNAMIC"
Server-Timing: cfEdge;dur=15,cfOrigin;dur=29
cf-cache-status: DYNAMIC
CF-RAY: 9bb1d40b7f1f40c0-SIN
alt-svc: h3=":443"; ma=86400
Page title: Admin Login
<!DOCTYPE html>
<html>
<head>
<title>Admin Login</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
body { font-family: sans-serif; display: flex; justify-content: center; align-items: center; height: 100vh; margin: 0; background: #f0f2f5; }
.card { background: white; padding: 2rem; border-radius: 12px; box-shadow: 0 8px 20px rgba(0,0,0,0.1); width: 100%; max-width: 320px; text-align: center; }
input { width: 100%; padding: 12px; margin: 8px 0; border: 1px solid #ddd; border-radius: 6px; box-sizing: border-box; }
button { width: 100%; padding: 12px; background: #1a73e8; color: white; border: none; border-radius: 6px; cursor: pointer; font-weight: bold; }
</style>
</head>
<body>
<div class="card">
<h2>Admin Login</h2>
<input type="text" id="id" placeholder="ID">
<input type="password" id="pw" placeholder="Password">
<button onclick="login()">Login</button>
</div>
<script>
async function login() {
const id = document.getElementById('id').value;
const pw = document.getElementById('pw').value;
const res = await fetch('/api/login', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ id, pw })
});
if (res.ok) location.reload(); else alert('로그인 실패');
}
</script>
<script defer src="https://static.cloudflareinsights.com/beacon.min.js/vcd15cbe7772f49c399c6a5babf22c1241717689176015" integrity="sha512-ZpsOmlRQV6y907TI0dKBHq9Md29nnaEIPlkf84rnaERnq6zvWvPUqr2ft8M1aS28oN72PdrCzSjY4U6VaAw1EQ==" data-cf-beacon='{"version":"2024.11.0","token":"fac143926e694e649e7c62bd372e46e3","r":1,"server_timing":{"name":{"cfCacheStatus":true,"cfEdge":true,"cfExtPri":true,"cfL4":true,"cfOrigin":true,"cfSpeedBrain":true},"location_startswith":null}}' crossorigin="anonymous"></script>
</body>
</html>
Open service 104.21.36.242:8443 · newppom.ppoms.cloud
2026-01-09 06:20
HTTP/1.1 200 OK
Date: Fri, 09 Jan 2026 06:20:21 GMT
Content-Type: text/html;charset=UTF-8
Transfer-Encoding: chunked
Connection: close
Vary: accept-encoding
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=NFoTM8WDELo2nA6Eve%2BXtMTuUMz%2Bfit8ZtigPe8Kq%2FP2CcRC6ed5%2F%2BEKMG2PvFfsifN02dh5%2BmoQFpzdo6e3DNWKk%2B2T%2FjTdvgT7IWFWT5BO"}]}
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
Server: cloudflare
Server-Timing: cfCacheStatus;desc="DYNAMIC"
Server-Timing: cfEdge;dur=8,cfOrigin;dur=19
cf-cache-status: DYNAMIC
CF-RAY: 9bb1d40b783409ae-EWR
alt-svc: h3=":8443"; ma=86400
Page title: Admin Login
<!DOCTYPE html>
<html>
<head>
<title>Admin Login</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
body { font-family: sans-serif; display: flex; justify-content: center; align-items: center; height: 100vh; margin: 0; background: #f0f2f5; }
.card { background: white; padding: 2rem; border-radius: 12px; box-shadow: 0 8px 20px rgba(0,0,0,0.1); width: 100%; max-width: 320px; text-align: center; }
input { width: 100%; padding: 12px; margin: 8px 0; border: 1px solid #ddd; border-radius: 6px; box-sizing: border-box; }
button { width: 100%; padding: 12px; background: #1a73e8; color: white; border: none; border-radius: 6px; cursor: pointer; font-weight: bold; }
</style>
</head>
<body>
<div class="card">
<h2>Admin Login</h2>
<input type="text" id="id" placeholder="ID">
<input type="password" id="pw" placeholder="Password">
<button onclick="login()">Login</button>
</div>
<script>
async function login() {
const id = document.getElementById('id').value;
const pw = document.getElementById('pw').value;
const res = await fetch('/api/login', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ id, pw })
});
if (res.ok) location.reload(); else alert('로그인 실패');
}
</script>
<script defer src="https://static.cloudflareinsights.com/beacon.min.js/vcd15cbe7772f49c399c6a5babf22c1241717689176015" integrity="sha512-ZpsOmlRQV6y907TI0dKBHq9Md29nnaEIPlkf84rnaERnq6zvWvPUqr2ft8M1aS28oN72PdrCzSjY4U6VaAw1EQ==" data-cf-beacon='{"version":"2024.11.0","token":"fac143926e694e649e7c62bd372e46e3","r":1,"server_timing":{"name":{"cfCacheStatus":true,"cfEdge":true,"cfExtPri":true,"cfL4":true,"cfOrigin":true,"cfSpeedBrain":true},"location_startswith":null}}' crossorigin="anonymous"></script>
</body>
</html>
Open service 2606:4700:3034::6815:24f2:80 · newppom.ppoms.cloud
2026-01-09 06:20
HTTP/1.1 301 Moved Permanently
Date: Fri, 09 Jan 2026 06:20:21 GMT
Content-Length: 0
Connection: close
Location: https://newppom.ppoms.cloud/
Vary: accept-encoding
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=VPYYdihQ2niS7fDxGBiym9N4kZWSvnAhYRoitf3bYyVcMEBlLIQ7UhAn6Y8TpcxlUf1NErAke8SB5Ida7TuEwudEP0emE54m8axAD1tyL7WEjgL4WqOw5bfqO64wqQ0%3D"}]}
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
Server: cloudflare
Server-Timing: cfCacheStatus;desc="DYNAMIC"
Server-Timing: cfEdge;dur=17,cfOrigin;dur=8
cf-cache-status: DYNAMIC
CF-RAY: 9bb1d40b2f5baabd-YYZ
alt-svc: h3=":443"; ma=86400
Open service 2606:4700:3032::ac43:c960:80 · newppom.ppoms.cloud
2026-01-09 06:20
HTTP/1.1 301 Moved Permanently
Date: Fri, 09 Jan 2026 06:20:21 GMT
Content-Length: 0
Connection: close
Location: https://newppom.ppoms.cloud/
Vary: accept-encoding
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=klhyg37qw0KiWcZ55HoMJsA3FHyShgaZgxbz4C43jLFNE4Ka6j6IQNpY2FL3wGY1MH5TSh4qhNneDgGLcufE8gaThaJaeH2PDBYtfvbjO7ZmDd3EtuA5fy%2F6WwP4%2FIc%3D"}]}
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
Server: cloudflare
Server-Timing: cfCacheStatus;desc="DYNAMIC"
Server-Timing: cfEdge;dur=13,cfOrigin;dur=7
cf-cache-status: DYNAMIC
CF-RAY: 9bb1d40b2bab52cf-YYZ
alt-svc: h3=":443"; ma=86400
Open service 172.67.201.96:443 · newppom.ppoms.cloud
2026-01-09 06:20
HTTP/1.1 200 OK
Date: Fri, 09 Jan 2026 06:20:21 GMT
Content-Type: text/html;charset=UTF-8
Transfer-Encoding: chunked
Connection: close
Vary: accept-encoding
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=bBHRyTx8SQt8AgHZNeEoD6sC0LoReGPVt6uDaZAkn3YZWQPqNy7rNYSoDEx2WEKCL6QMdfFt7KnHmKg4IDhmZ5hJRwydQOdIcKDmionLgwETYlE%3D"}]}
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
Server: cloudflare
cf-cache-status: DYNAMIC
CF-RAY: 9bb1d40b4b0ed3a4-FRA
alt-svc: h3=":443"; ma=86400
Page title: Admin Login
<!DOCTYPE html>
<html>
<head>
<title>Admin Login</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
body { font-family: sans-serif; display: flex; justify-content: center; align-items: center; height: 100vh; margin: 0; background: #f0f2f5; }
.card { background: white; padding: 2rem; border-radius: 12px; box-shadow: 0 8px 20px rgba(0,0,0,0.1); width: 100%; max-width: 320px; text-align: center; }
input { width: 100%; padding: 12px; margin: 8px 0; border: 1px solid #ddd; border-radius: 6px; box-sizing: border-box; }
button { width: 100%; padding: 12px; background: #1a73e8; color: white; border: none; border-radius: 6px; cursor: pointer; font-weight: bold; }
</style>
</head>
<body>
<div class="card">
<h2>Admin Login</h2>
<input type="text" id="id" placeholder="ID">
<input type="password" id="pw" placeholder="Password">
<button onclick="login()">Login</button>
</div>
<script>
async function login() {
const id = document.getElementById('id').value;
const pw = document.getElementById('pw').value;
const res = await fetch('/api/login', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ id, pw })
});
if (res.ok) location.reload(); else alert('로그인 실패');
}
</script>
</body>
</html>
Open service 172.67.201.96:8443 · newppom.ppoms.cloud
2026-01-09 06:20
HTTP/1.1 200 OK
Date: Fri, 09 Jan 2026 06:20:21 GMT
Content-Type: text/html;charset=UTF-8
Transfer-Encoding: chunked
Connection: close
Vary: accept-encoding
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=FsSyqCcBe9Xjqkp4Ai1qcUhMyoGapXXQeolqoRvha5%2BbvK5xaLoVMoiLMkA%2F%2BVrYlDdqmWg9yLfs6TTvvUleEclNuSEZTjS5LHnkd%2FIIn44%2FF3A%3D"}]}
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
Server: cloudflare
Server-Timing: cfCacheStatus;desc="DYNAMIC"
Server-Timing: cfEdge;dur=9,cfOrigin;dur=12
cf-cache-status: DYNAMIC
CF-RAY: 9bb1d40b1b508075-SJC
alt-svc: h3=":8443"; ma=86400
Page title: Admin Login
<!DOCTYPE html>
<html>
<head>
<title>Admin Login</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
body { font-family: sans-serif; display: flex; justify-content: center; align-items: center; height: 100vh; margin: 0; background: #f0f2f5; }
.card { background: white; padding: 2rem; border-radius: 12px; box-shadow: 0 8px 20px rgba(0,0,0,0.1); width: 100%; max-width: 320px; text-align: center; }
input { width: 100%; padding: 12px; margin: 8px 0; border: 1px solid #ddd; border-radius: 6px; box-sizing: border-box; }
button { width: 100%; padding: 12px; background: #1a73e8; color: white; border: none; border-radius: 6px; cursor: pointer; font-weight: bold; }
</style>
</head>
<body>
<div class="card">
<h2>Admin Login</h2>
<input type="text" id="id" placeholder="ID">
<input type="password" id="pw" placeholder="Password">
<button onclick="login()">Login</button>
</div>
<script>
async function login() {
const id = document.getElementById('id').value;
const pw = document.getElementById('pw').value;
const res = await fetch('/api/login', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ id, pw })
});
if (res.ok) location.reload(); else alert('로그인 실패');
}
</script>
<script defer src="https://static.cloudflareinsights.com/beacon.min.js/vcd15cbe7772f49c399c6a5babf22c1241717689176015" integrity="sha512-ZpsOmlRQV6y907TI0dKBHq9Md29nnaEIPlkf84rnaERnq6zvWvPUqr2ft8M1aS28oN72PdrCzSjY4U6VaAw1EQ==" data-cf-beacon='{"version":"2024.11.0","token":"fac143926e694e649e7c62bd372e46e3","r":1,"server_timing":{"name":{"cfCacheStatus":true,"cfEdge":true,"cfExtPri":true,"cfL4":true,"cfOrigin":true,"cfSpeedBrain":true},"location_startswith":null}}' crossorigin="anonymous"></script>
</body>
</html>
Open service 2606:4700:3034::6815:24f2:8443 · newppom.ppoms.cloud
2026-01-09 06:20
HTTP/1.1 200 OK
Date: Fri, 09 Jan 2026 06:20:21 GMT
Content-Type: text/html;charset=UTF-8
Transfer-Encoding: chunked
Connection: close
Vary: accept-encoding
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=0cpWiPkF6pECu4HhWWQyQ0vm8JjIwVjPPX8HFetF5PjHznK8OCj6FtqVkNC%2F%2FijqxcNcwGmcHhlEBviMCBb9RpbwsC94zR1NwxOUlhWwUWMJb8yJW0XJi4RJqEsCa3k%3D"}]}
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
Server: cloudflare
cf-cache-status: DYNAMIC
CF-RAY: 9bb1d40abc003689-FRA
alt-svc: h3=":8443"; ma=86400
Page title: Admin Login
<!DOCTYPE html>
<html>
<head>
<title>Admin Login</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
body { font-family: sans-serif; display: flex; justify-content: center; align-items: center; height: 100vh; margin: 0; background: #f0f2f5; }
.card { background: white; padding: 2rem; border-radius: 12px; box-shadow: 0 8px 20px rgba(0,0,0,0.1); width: 100%; max-width: 320px; text-align: center; }
input { width: 100%; padding: 12px; margin: 8px 0; border: 1px solid #ddd; border-radius: 6px; box-sizing: border-box; }
button { width: 100%; padding: 12px; background: #1a73e8; color: white; border: none; border-radius: 6px; cursor: pointer; font-weight: bold; }
</style>
</head>
<body>
<div class="card">
<h2>Admin Login</h2>
<input type="text" id="id" placeholder="ID">
<input type="password" id="pw" placeholder="Password">
<button onclick="login()">Login</button>
</div>
<script>
async function login() {
const id = document.getElementById('id').value;
const pw = document.getElementById('pw').value;
const res = await fetch('/api/login', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ id, pw })
});
if (res.ok) location.reload(); else alert('로그인 실패');
}
</script>
</body>
</html>
Open service 104.21.36.242:443 · newppom.ppoms.cloud
2026-01-09 06:20
HTTP/1.1 200 OK
Date: Fri, 09 Jan 2026 06:20:21 GMT
Content-Type: text/html;charset=UTF-8
Transfer-Encoding: chunked
Connection: close
Vary: accept-encoding
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=5eRFs3JevLFIJzPFioxKDlhYweYu3cHRCrZXm6mpvziOJi%2FIuhJwUGUxkh8DOMcjHi0WfpxrMBNaqZn283jfcqcDnfvDfUmy04dP9FxPxpGodng%3D"}]}
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
Server: cloudflare
cf-cache-status: DYNAMIC
CF-RAY: 9bb1d40a9dd12ba6-FRA
alt-svc: h3=":443"; ma=86400
Page title: Admin Login
<!DOCTYPE html>
<html>
<head>
<title>Admin Login</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
body { font-family: sans-serif; display: flex; justify-content: center; align-items: center; height: 100vh; margin: 0; background: #f0f2f5; }
.card { background: white; padding: 2rem; border-radius: 12px; box-shadow: 0 8px 20px rgba(0,0,0,0.1); width: 100%; max-width: 320px; text-align: center; }
input { width: 100%; padding: 12px; margin: 8px 0; border: 1px solid #ddd; border-radius: 6px; box-sizing: border-box; }
button { width: 100%; padding: 12px; background: #1a73e8; color: white; border: none; border-radius: 6px; cursor: pointer; font-weight: bold; }
</style>
</head>
<body>
<div class="card">
<h2>Admin Login</h2>
<input type="text" id="id" placeholder="ID">
<input type="password" id="pw" placeholder="Password">
<button onclick="login()">Login</button>
</div>
<script>
async function login() {
const id = document.getElementById('id').value;
const pw = document.getElementById('pw').value;
const res = await fetch('/api/login', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ id, pw })
});
if (res.ok) location.reload(); else alert('로그인 실패');
}
</script>
</body>
</html>
Open service 2606:4700:3034::6815:24f2:443 · newppom.ppoms.cloud
2026-01-09 06:20
HTTP/1.1 200 OK
Date: Fri, 09 Jan 2026 06:20:21 GMT
Content-Type: text/html;charset=UTF-8
Transfer-Encoding: chunked
Connection: close
Vary: accept-encoding
Report-To: {"group":"cf-nel","max_age":604800,"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v4?s=qvEmu9StDB6X2JRGkft9tj72WR4SCEqa4CwNIs%2BLFTDzDH1mv%2FQAOHDaqw09ROsGHnxMv2%2BUu9UVxr03fXQV%2FOHEu7f%2Fj9VKstjiHgKvMwHcXZddD4lO1AE0AFaidxo%3D"}]}
Nel: {"report_to":"cf-nel","success_fraction":0.0,"max_age":604800}
Server: cloudflare
cf-cache-status: DYNAMIC
CF-RAY: 9bb1d40a4ae2003a-LHR
alt-svc: h3=":443"; ma=86400
Page title: Admin Login
<!DOCTYPE html>
<html>
<head>
<title>Admin Login</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
body { font-family: sans-serif; display: flex; justify-content: center; align-items: center; height: 100vh; margin: 0; background: #f0f2f5; }
.card { background: white; padding: 2rem; border-radius: 12px; box-shadow: 0 8px 20px rgba(0,0,0,0.1); width: 100%; max-width: 320px; text-align: center; }
input { width: 100%; padding: 12px; margin: 8px 0; border: 1px solid #ddd; border-radius: 6px; box-sizing: border-box; }
button { width: 100%; padding: 12px; background: #1a73e8; color: white; border: none; border-radius: 6px; cursor: pointer; font-weight: bold; }
</style>
</head>
<body>
<div class="card">
<h2>Admin Login</h2>
<input type="text" id="id" placeholder="ID">
<input type="password" id="pw" placeholder="Password">
<button onclick="login()">Login</button>
</div>
<script>
async function login() {
const id = document.getElementById('id').value;
const pw = document.getElementById('pw').value;
const res = await fetch('/api/login', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ id, pw })
});
if (res.ok) location.reload(); else alert('로그인 실패');
}
</script>
</body>
</html>