241 lines
6.4 KiB
HTML
241 lines
6.4 KiB
HTML
<!DOCTYPE html>
|
|
<html xmlns:th="http://www.thymeleaf.org" lang="ko">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
|
|
<meta http-equiv="Cache-Control" content="no-cache">
|
|
<meta http-equiv="Pragma" content="no-cache">
|
|
<meta http-equiv="Expires" content="0">
|
|
<title>서비스 오류 - API Portal</title>
|
|
<style>
|
|
/* Reset */
|
|
* {
|
|
margin: 0;
|
|
padding: 0;
|
|
box-sizing: border-box;
|
|
}
|
|
|
|
/* Font */
|
|
@font-face {
|
|
font-family: 'Noto Sans KR';
|
|
font-weight: 400;
|
|
src: local('Noto Sans KR Regular');
|
|
}
|
|
@font-face {
|
|
font-family: 'Noto Sans KR';
|
|
font-weight: 700;
|
|
src: local('Noto Sans KR Bold');
|
|
}
|
|
|
|
body {
|
|
font-family: 'Noto Sans KR', 'Malgun Gothic', -apple-system, BlinkMacSystemFont, sans-serif;
|
|
background-color: #f8f9fa;
|
|
min-height: 100vh;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
padding: 20px;
|
|
}
|
|
|
|
.error-container {
|
|
background-color: #ebfbff;
|
|
border-radius: 12px;
|
|
padding: 70px 53px 60px;
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
gap: 50px;
|
|
max-width: 700px;
|
|
width: 100%;
|
|
}
|
|
|
|
.error-icon {
|
|
width: 220px;
|
|
height: 220px;
|
|
}
|
|
|
|
.error-icon img {
|
|
width: 100%;
|
|
height: 100%;
|
|
object-fit: contain;
|
|
}
|
|
|
|
.error-title {
|
|
font-size: 26px;
|
|
font-weight: 700;
|
|
color: #212529;
|
|
text-align: center;
|
|
line-height: 1.4;
|
|
}
|
|
|
|
.error-description {
|
|
font-size: 20px;
|
|
font-weight: 400;
|
|
color: #212529;
|
|
text-align: center;
|
|
line-height: 1.6;
|
|
}
|
|
|
|
.error-buttons {
|
|
display: flex;
|
|
gap: 24px;
|
|
flex-wrap: wrap;
|
|
justify-content: center;
|
|
}
|
|
|
|
.btn {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
gap: 12px;
|
|
height: 50px;
|
|
padding: 10px 24px;
|
|
border-radius: 12px;
|
|
border: none;
|
|
cursor: pointer;
|
|
text-decoration: none;
|
|
font-family: 'Noto Sans KR', 'Malgun Gothic', sans-serif;
|
|
font-size: 22px;
|
|
font-weight: 700;
|
|
color: #ffffff;
|
|
transition: opacity 0.2s ease, transform 0.2s ease;
|
|
}
|
|
|
|
.btn:hover {
|
|
opacity: 0.9;
|
|
transform: translateY(-2px);
|
|
}
|
|
|
|
.btn:active {
|
|
transform: translateY(0);
|
|
}
|
|
|
|
.btn-retry {
|
|
background-color: #d4a553;
|
|
}
|
|
|
|
.btn-home {
|
|
background-color: #00a1d7;
|
|
}
|
|
|
|
.btn-icon {
|
|
width: 24px;
|
|
height: 24px;
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
/* Error Message Box */
|
|
.error-message-box {
|
|
background-color: #fff5f5;
|
|
border: 1px solid #feb2b2;
|
|
border-radius: 8px;
|
|
padding: 16px 24px;
|
|
max-width: 100%;
|
|
width: 100%;
|
|
}
|
|
|
|
.error-message-label {
|
|
font-size: 14px;
|
|
font-weight: 700;
|
|
color: #c53030;
|
|
margin-bottom: 8px;
|
|
}
|
|
|
|
.error-message-text {
|
|
font-size: 14px;
|
|
color: #742a2a;
|
|
line-height: 1.5;
|
|
word-break: break-word;
|
|
white-space: pre-wrap;
|
|
}
|
|
|
|
/* Responsive */
|
|
@media screen and (max-width: 600px) {
|
|
.error-container {
|
|
padding: 50px 30px 40px;
|
|
gap: 35px;
|
|
}
|
|
|
|
.error-icon {
|
|
width: 160px;
|
|
height: 160px;
|
|
}
|
|
|
|
.error-title {
|
|
font-size: 20px;
|
|
}
|
|
|
|
.error-description {
|
|
font-size: 16px;
|
|
}
|
|
|
|
.error-buttons {
|
|
flex-direction: column;
|
|
gap: 16px;
|
|
width: 100%;
|
|
}
|
|
|
|
.btn {
|
|
font-size: 18px;
|
|
height: 46px;
|
|
width: 100%;
|
|
}
|
|
|
|
.btn-icon {
|
|
width: 20px;
|
|
height: 20px;
|
|
}
|
|
|
|
.error-message-box {
|
|
padding: 12px 16px;
|
|
}
|
|
|
|
.error-message-label {
|
|
font-size: 13px;
|
|
}
|
|
|
|
.error-message-text {
|
|
font-size: 13px;
|
|
}
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<div class="error-container">
|
|
<!-- Error Icon -->
|
|
<div class="error-icon">
|
|
<!-- 3D Speech Bubble Error Icon - Base64 encoded or use th:src for server image -->
|
|
<img th:src="@{/img/error_3d.png}" alt="에러">
|
|
</div>
|
|
|
|
<!-- Error Title -->
|
|
<h1 class="error-title">일시적인 장애로 서비스가 중단되었습니다.</h1>
|
|
|
|
<!-- Error Description -->
|
|
<p class="error-description">
|
|
서비스 이용에 불편을 드려 죄송합니다.<br>
|
|
빠른 서비스를 제공할 수 있게 준비하겠습니다.
|
|
</p>
|
|
|
|
<!-- Error Message (서버에서 전달된 에러 메시지가 있을 경우 표시) -->
|
|
<div th:if="${errorMessage}" class="error-message-box">
|
|
<p class="error-message-label">오류 상세</p>
|
|
<p class="error-message-text" th:text="${errorMessage}"></p>
|
|
</div>
|
|
|
|
<!-- Action Buttons -->
|
|
<div class="error-buttons">
|
|
<!-- Home Button -->
|
|
<a th:href="@{/}" href="/" class="btn btn-home">
|
|
<svg class="btn-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">
|
|
<path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/>
|
|
<polyline points="9 22 9 12 15 12 15 22"/>
|
|
</svg>
|
|
<span>홈으로 돌아가기</span>
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</body>
|
|
</html>
|