Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
650 lines
16 KiB
HTML
650 lines
16 KiB
HTML
<!doctype html>
|
||
<!-- 雷池 SafeLine · 自定义错误页 · 468 人机验证(单文件自包含,无外部依赖) -->
|
||
<html lang="zh-CN">
|
||
<head>
|
||
<meta charset="utf-8" />
|
||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||
<meta name="robots" content="noindex" />
|
||
<title>468 · 人机验证 — 雷池 SafeLine</title>
|
||
<link rel="icon" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Ccircle cx='8' cy='8' r='7' fill='%23e3676d'/%3E%3Cpath d='M5.6 5.6l4.8 4.8M10.4 5.6l-4.8 4.8' stroke='%23e3dede' stroke-width='1.7' stroke-linecap='round'/%3E%3C/svg%3E" />
|
||
<style>
|
||
/* ===== 页面底衬 ===== */
|
||
html {
|
||
height: 100%;
|
||
}
|
||
|
||
body {
|
||
box-sizing: border-box;
|
||
margin: 0;
|
||
min-height: 100vh;
|
||
min-height: 100svh;
|
||
display: grid;
|
||
place-items: center;
|
||
padding: 3em 1.5em;
|
||
background-color: #2E9E5B;
|
||
background-image: radial-gradient(rgba(255, 255, 255, 0.14) 1px, transparent 1.6px);
|
||
background-size: 26px 26px;
|
||
}
|
||
|
||
/* ===== 错误卡片 ===== */
|
||
#errorPage {
|
||
width: 22.5em;
|
||
min-height: 15em;
|
||
--backColor: rgb(227, 222, 222);
|
||
--firstColor: rgb(227, 103, 109);
|
||
--textColor: rgb(70, 68, 68);
|
||
border-radius: 1em;
|
||
position: relative;
|
||
font-family: Calibri, "Trebuchet MS", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif;
|
||
z-index: 1;
|
||
color: var(--textColor);
|
||
transform: rotate(3deg) skewX(3deg);
|
||
transition: all 0.25s ease-in-out;
|
||
}
|
||
|
||
#errorPage:hover {
|
||
transform: rotate(0deg) skewX(0deg);
|
||
}
|
||
|
||
#errorPage:hover #errorPage_Page {
|
||
transform: rotate(0deg) skewX(0deg);
|
||
box-shadow: -0.5em 0em var(--textColor);
|
||
}
|
||
|
||
#errorPage_Page svg {
|
||
transition: all 0.25s ease-in-out;
|
||
transform: rotate(0deg) skewX(3deg);
|
||
margin-top: 0.5em;
|
||
}
|
||
|
||
#errorPage:hover #errorPage_Page svg {
|
||
transform: rotate(-10deg) skewX(0deg);
|
||
}
|
||
|
||
#errorPage:hover #errorPage_BarSite {
|
||
transform: rotate(0deg) skewX(0deg);
|
||
box-shadow: -0.5em 0em var(--textColor);
|
||
}
|
||
|
||
#errorPage_Bar {
|
||
width: 100%;
|
||
height: 2em;
|
||
padding-left: 1.5em;
|
||
position: relative;
|
||
z-index: 3;
|
||
}
|
||
|
||
#errorPage_BarSite {
|
||
background-color: var(--backColor);
|
||
width: 5.5em;
|
||
height: 100%;
|
||
border-top-left-radius: 1em;
|
||
border-top-right-radius: 1em;
|
||
display: flex;
|
||
align-items: center;
|
||
color: var(--textColor);
|
||
padding-left: 0.5em;
|
||
box-shadow: -0.5em 0.25em var(--textColor);
|
||
transition: all 0.25s ease-in-out;
|
||
position: relative;
|
||
z-index: 1;
|
||
}
|
||
|
||
.errorPage_BarIcon {
|
||
width: 1em;
|
||
height: 1em;
|
||
background-color: var(--firstColor);
|
||
display: flex;
|
||
justify-content: center;
|
||
align-items: center;
|
||
border-radius: 1em;
|
||
}
|
||
|
||
.errorPage_BarIcon p {
|
||
font-size: 0.625em;
|
||
font-weight: bold;
|
||
margin: 0;
|
||
}
|
||
|
||
#errorPage_BarSiteText {
|
||
font-size: 0.78125em;
|
||
font-weight: bold;
|
||
padding-left: 0.5em;
|
||
margin: 0;
|
||
}
|
||
|
||
#errorPage_Page {
|
||
width: 100%;
|
||
min-height: 13em;
|
||
background: linear-gradient(var(--backColor), rgb(205, 200, 200));
|
||
border-radius: 1em;
|
||
box-shadow: -0.5em 0.5em var(--textColor);
|
||
display: flex;
|
||
flex-direction: column;
|
||
align-items: center;
|
||
padding-top: 0.5em;
|
||
padding-bottom: 1.05em;
|
||
transition: all 0.25s ease-in-out;
|
||
position: relative;
|
||
z-index: 3;
|
||
}
|
||
|
||
#errorPage_PageSearch {
|
||
width: 21.5em;
|
||
height: 1.25em;
|
||
border-radius: 10em;
|
||
background-color: var(--firstColor);
|
||
display: flex;
|
||
align-items: center;
|
||
padding-left: 0.5em;
|
||
}
|
||
|
||
.errorPage_PageText {
|
||
text-align: center;
|
||
font-size: 0.875em;
|
||
margin: 0;
|
||
padding: 0 1.1em;
|
||
}
|
||
|
||
.errorPage_PageText:nth-child(3) {
|
||
font-weight: bold;
|
||
font-size: 1.09375em;
|
||
margin-top: 0.8em;
|
||
padding: 0 0.9em;
|
||
}
|
||
|
||
.errorPage_PageText:nth-child(4) {
|
||
margin-top: 0.42em;
|
||
}
|
||
|
||
/* ===== 拦截信息(WAF 注入 event_id 时自动显示) ===== */
|
||
#errorPage_PageMeta {
|
||
display: none;
|
||
width: 82%;
|
||
margin-top: 0.9em;
|
||
padding-top: 0.55em;
|
||
border-top: 1px dashed rgba(70, 68, 68, 0.28);
|
||
font-size: 0.6875em;
|
||
line-height: 1.6;
|
||
color: rgba(70, 68, 68, 0.72);
|
||
text-align: center;
|
||
word-break: break-all;
|
||
}
|
||
|
||
.errorPage_PageSearchB {
|
||
width: 0.75em;
|
||
height: 0.75em;
|
||
border-radius: 10em;
|
||
margin-right: 0.5em;
|
||
}
|
||
|
||
.errorPage_PageSearchB:nth-child(1) {
|
||
animation: Ball1 10s linear infinite;
|
||
}
|
||
|
||
.errorPage_PageSearchB:nth-child(2) {
|
||
animation: Ball2 10s linear infinite;
|
||
}
|
||
|
||
.errorPage_PageSearchB:nth-child(3) {
|
||
animation: Ball3 10s linear infinite;
|
||
}
|
||
|
||
.errorPage_PageSearchB:nth-child(4) {
|
||
animation: Ball4 10s linear infinite;
|
||
}
|
||
|
||
.errorPage_PageSearchB:nth-child(5) {
|
||
animation: Ball5 10s linear infinite;
|
||
}
|
||
|
||
.errorPage_PageSearchB:nth-child(6) {
|
||
animation: Ball6 10s linear infinite;
|
||
}
|
||
|
||
.errorPage_PageSearchB:nth-child(7) {
|
||
animation: Ball7 10s linear infinite;
|
||
}
|
||
|
||
.errorPage_PageSearchB:nth-child(8) {
|
||
animation: Ball8 10s linear infinite;
|
||
}
|
||
|
||
@keyframes Ball1 {
|
||
0% {
|
||
background-color: var(--backColor);
|
||
}
|
||
2.5% {
|
||
background-color: var(--textColor);
|
||
}
|
||
97.5% {
|
||
background-color: var(--textColor);
|
||
}
|
||
100% {
|
||
background-color: var(--backColor);
|
||
}
|
||
}
|
||
|
||
@keyframes Ball2 {
|
||
0% {
|
||
background-color: var(--firstColor);
|
||
}
|
||
2.5% {
|
||
background-color: var(--backColor);
|
||
}
|
||
5% {
|
||
background-color: var(--textColor);
|
||
}
|
||
7.5% {
|
||
background-color: var(--textColor);
|
||
}
|
||
95% {
|
||
background-color: var(--textColor);
|
||
}
|
||
100% {
|
||
background-color: var(--firstColor);
|
||
}
|
||
}
|
||
|
||
@keyframes Ball3 {
|
||
0% {
|
||
background-color: var(--firstColor);
|
||
}
|
||
2.5% {
|
||
background-color: var(--firstColor);
|
||
}
|
||
5% {
|
||
background-color: var(--backColor);
|
||
}
|
||
7.5% {
|
||
background-color: var(--textColor);
|
||
}
|
||
10% {
|
||
background-color: var(--textColor);
|
||
}
|
||
92.5% {
|
||
background-color: var(--textColor);
|
||
}
|
||
95% {
|
||
background-color: var(--firstColor);
|
||
}
|
||
100% {
|
||
background-color: var(--firstColor);
|
||
}
|
||
}
|
||
|
||
@keyframes Ball4 {
|
||
0% {
|
||
background-color: var(--firstColor);
|
||
}
|
||
5% {
|
||
background-color: var(--firstColor);
|
||
}
|
||
7.5% {
|
||
background-color: var(--backColor);
|
||
}
|
||
10% {
|
||
background-color: var(--textColor);
|
||
}
|
||
12.5% {
|
||
background-color: var(--textColor);
|
||
}
|
||
60% {
|
||
background-color: var(--textColor);
|
||
}
|
||
62.5% {
|
||
background-color: var(--firstColor);
|
||
}
|
||
65% {
|
||
background-color: var(--backColor);
|
||
}
|
||
67.5% {
|
||
background-color: var(--textColor);
|
||
}
|
||
90% {
|
||
background-color: var(--textColor);
|
||
}
|
||
92.5% {
|
||
background-color: var(--firstColor);
|
||
}
|
||
100% {
|
||
background-color: var(--firstColor);
|
||
}
|
||
}
|
||
|
||
@keyframes Ball5 {
|
||
0% {
|
||
background-color: var(--firstColor);
|
||
}
|
||
7.5% {
|
||
background-color: var(--firstColor);
|
||
}
|
||
10% {
|
||
background-color: var(--backColor);
|
||
}
|
||
12.5% {
|
||
background-color: var(--textColor);
|
||
}
|
||
15% {
|
||
background-color: var(--textColor);
|
||
}
|
||
57.5% {
|
||
background-color: var(--textColor);
|
||
}
|
||
60% {
|
||
background-color: var(--firstColor);
|
||
}
|
||
65% {
|
||
background-color: var(--firstColor);
|
||
}
|
||
67.5% {
|
||
background-color: var(--backColor);
|
||
}
|
||
70% {
|
||
background-color: var(--textColor);
|
||
}
|
||
87.5% {
|
||
background-color: var(--textColor);
|
||
}
|
||
90% {
|
||
background-color: var(--firstColor);
|
||
}
|
||
100% {
|
||
background-color: var(--firstColor);
|
||
}
|
||
}
|
||
|
||
@keyframes Ball6 {
|
||
0% {
|
||
background-color: var(--firstColor);
|
||
}
|
||
10% {
|
||
background-color: var(--firstColor);
|
||
}
|
||
12.5% {
|
||
background-color: var(--backColor);
|
||
}
|
||
15% {
|
||
background-color: var(--textColor);
|
||
}
|
||
17.5% {
|
||
background-color: var(--firstColor);
|
||
}
|
||
20% {
|
||
background-color: var(--backColor);
|
||
}
|
||
22.5% {
|
||
background-color: var(--textColor);
|
||
}
|
||
55% {
|
||
background-color: var(--textColor);
|
||
}
|
||
57.5% {
|
||
background-color: var(--firstColor);
|
||
}
|
||
67.5% {
|
||
background-color: var(--firstColor);
|
||
}
|
||
70% {
|
||
background-color: var(--backColor);
|
||
}
|
||
72.5% {
|
||
background-color: var(--textColor);
|
||
}
|
||
85% {
|
||
background-color: var(--textColor);
|
||
}
|
||
87.5% {
|
||
background-color: var(--firstColor);
|
||
}
|
||
100% {
|
||
background-color: var(--firstColor);
|
||
}
|
||
}
|
||
|
||
@keyframes Ball7 {
|
||
0% {
|
||
background-color: var(--firstColor);
|
||
}
|
||
20% {
|
||
background-color: var(--firstColor);
|
||
}
|
||
22.5% {
|
||
background-color: var(--backColor);
|
||
}
|
||
25% {
|
||
background-color: var(--textColor);
|
||
}
|
||
27.5% {
|
||
background-color: var(--firstColor);
|
||
}
|
||
30% {
|
||
background-color: var(--backColor);
|
||
}
|
||
32.5% {
|
||
background-color: var(--textColor);
|
||
}
|
||
52.5% {
|
||
background-color: var(--textColor);
|
||
}
|
||
55% {
|
||
background-color: var(--firstColor);
|
||
}
|
||
70% {
|
||
background-color: var(--firstColor);
|
||
}
|
||
72.5% {
|
||
background-color: var(--backColor);
|
||
}
|
||
75% {
|
||
background-color: var(--textColor);
|
||
}
|
||
77.5% {
|
||
background-color: var(--firstColor);
|
||
}
|
||
80% {
|
||
background-color: var(--backColor);
|
||
}
|
||
82.5% {
|
||
background-color: var(--textColor);
|
||
}
|
||
85% {
|
||
background-color: var(--firstColor);
|
||
}
|
||
100% {
|
||
background-color: var(--firstColor);
|
||
}
|
||
}
|
||
|
||
@keyframes Ball8 {
|
||
0% {
|
||
background-color: var(--firstColor);
|
||
}
|
||
30% {
|
||
background-color: var(--firstColor);
|
||
}
|
||
32.5% {
|
||
background-color: var(--backColor);
|
||
}
|
||
35% {
|
||
background-color: var(--textColor);
|
||
}
|
||
40% {
|
||
background-color: var(--textColor);
|
||
}
|
||
42.5% {
|
||
background-color: var(--firstColor);
|
||
}
|
||
45% {
|
||
background-color: var(--backColor);
|
||
}
|
||
47.5% {
|
||
background-color: var(--textColor);
|
||
}
|
||
50% {
|
||
background-color: var(--textColor);
|
||
}
|
||
52.5% {
|
||
background-color: var(--firstColor);
|
||
}
|
||
100% {
|
||
background-color: var(--firstColor);
|
||
}
|
||
}
|
||
|
||
/* ===== 响应式 ===== */
|
||
@media (max-width: 430px) {
|
||
body {
|
||
padding: 2em 1em;
|
||
}
|
||
|
||
#errorPage {
|
||
font-size: 14px;
|
||
}
|
||
}
|
||
|
||
@media (max-width: 350px) {
|
||
body {
|
||
padding: 1.5em 0.6em;
|
||
}
|
||
|
||
#errorPage {
|
||
font-size: 12px;
|
||
}
|
||
}
|
||
|
||
/* ===== 降低动态效果 ===== */
|
||
@media (prefers-reduced-motion: reduce) {
|
||
#errorPage,
|
||
#errorPage_Page,
|
||
#errorPage_BarSite,
|
||
#errorPage_Page svg {
|
||
transition: none;
|
||
}
|
||
|
||
#errorPage:hover {
|
||
transform: rotate(3deg) skewX(3deg);
|
||
}
|
||
|
||
#errorPage:hover #errorPage_Page {
|
||
transform: none;
|
||
box-shadow: -0.5em 0.5em var(--textColor);
|
||
}
|
||
|
||
#errorPage:hover #errorPage_BarSite {
|
||
transform: none;
|
||
box-shadow: -0.5em 0.25em var(--textColor);
|
||
}
|
||
|
||
#errorPage:hover #errorPage_Page svg {
|
||
transform: rotate(0deg) skewX(3deg);
|
||
}
|
||
}
|
||
</style>
|
||
</head>
|
||
<body>
|
||
<div id="errorPage">
|
||
<div id="errorPage_Bar">
|
||
<div id="errorPage_BarSite">
|
||
<div class="errorPage_BarIcon"><p>X</p></div>
|
||
<p id="errorPage_BarSiteText">Error 468</p>
|
||
</div>
|
||
</div>
|
||
<div id="errorPage_Page">
|
||
<div id="errorPage_PageSearch">
|
||
<div class="errorPage_PageSearchB"></div>
|
||
<div class="errorPage_PageSearchB"></div>
|
||
<div class="errorPage_PageSearchB"></div>
|
||
<div class="errorPage_PageSearchB"></div>
|
||
<div class="errorPage_PageSearchB"></div>
|
||
<div class="errorPage_PageSearchB"></div>
|
||
<div class="errorPage_PageSearchB"></div>
|
||
<div class="errorPage_PageSearchB"></div>
|
||
</div>
|
||
<svg
|
||
width="100px"
|
||
height="110px"
|
||
viewBox="0 0 200 220"
|
||
class="icon"
|
||
version="1.1"
|
||
xmlns="http://www.w3.org/2000/svg"
|
||
aria-hidden="true"
|
||
>
|
||
<line x1="100" y1="58" x2="100" y2="34" stroke="#464444" stroke-width="8" stroke-linecap="round"></line>
|
||
<circle cx="100" cy="26" r="10" fill="#e3676d" stroke="#464444" stroke-width="6"></circle>
|
||
<rect x="48" y="56" width="104" height="88" rx="24" fill="#e3dede" stroke="#464444" stroke-width="6"></rect>
|
||
<rect x="36" y="86" width="12" height="28" rx="6" fill="#464444"></rect>
|
||
<rect x="152" y="86" width="12" height="28" rx="6" fill="#464444"></rect>
|
||
<circle cx="76" cy="90" r="11" fill="#e3676d"></circle>
|
||
<circle cx="124" cy="90" r="11" fill="#e3676d"></circle>
|
||
<path d="M84 114 Q100 128 116 114" stroke="#464444" stroke-width="7" fill="none" stroke-linecap="round"></path>
|
||
<circle cx="152" cy="156" r="26" fill="#e3676d" stroke="#464444" stroke-width="6"></circle>
|
||
<path d="M141 156 L149 164 L164 147" stroke="#e3dede" stroke-width="8" fill="none" stroke-linecap="round" stroke-linejoin="round"></path>
|
||
<path d="M0 -14 L3.5 -3.5 L14 0 L3.5 3.5 L0 14 L-3.5 3.5 L-14 0 L-3.5 -3.5 Z" fill="#e3676d" transform="translate(44 42) scale(0.8)"></path>
|
||
<circle cx="172" cy="52" r="5" fill="#464444"></circle>
|
||
</svg>
|
||
<p class="errorPage_PageText">继续之前,先做个小确认。验证真人,即刻出发。</p>
|
||
<p class="errorPage_PageText">One quick check before we go on. Confirm you're human and we'll be on our way.</p>
|
||
<div id="errorPage_PageMeta">
|
||
<div id="errorPage_EventID"></div>
|
||
<div id="errorPage_TypeTime"></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<script>
|
||
(function () {
|
||
function findInjected() {
|
||
var i;
|
||
var list;
|
||
var n;
|
||
for (n = document.documentElement.nextSibling; n; n = n.nextSibling) {
|
||
if (n.nodeType === 8 && n.data.indexOf("event_id:") !== -1) return n.data;
|
||
}
|
||
list = document.body ? document.body.childNodes : [];
|
||
for (i = list.length - 1; i >= 0; i--) {
|
||
if (list[i].nodeType === 8 && list[i].data.indexOf("event_id:") !== -1) return list[i].data;
|
||
}
|
||
list = document.childNodes;
|
||
for (i = list.length - 1; i >= 0; i--) {
|
||
if (list[i].nodeType === 8 && list[i].data.indexOf("event_id:") !== -1) return list[i].data;
|
||
}
|
||
return "";
|
||
}
|
||
|
||
function two(n) {
|
||
return n < 10 ? "0" + n : "" + n;
|
||
}
|
||
|
||
function init() {
|
||
var raw = findInjected();
|
||
if (!raw) return;
|
||
var parts = raw.replace(/\s+/g, " ").trim().split(" ");
|
||
var get = function (key) {
|
||
var i = parts.indexOf(key + ":");
|
||
return i > -1 && parts[i + 1] ? parts[i + 1] : "";
|
||
};
|
||
var eventId = get("event_id");
|
||
var type = get("TYPE");
|
||
if (!eventId && !type) return;
|
||
var meta = document.getElementById("errorPage_PageMeta");
|
||
var elId = document.getElementById("errorPage_EventID");
|
||
var elType = document.getElementById("errorPage_TypeTime");
|
||
if (!meta || !elId || !elType) return;
|
||
var d = new Date();
|
||
var time = d.getFullYear() + "-" + two(d.getMonth() + 1) + "-" + two(d.getDate()) + " " + two(d.getHours()) + ":" + two(d.getMinutes());
|
||
elId.textContent = eventId ? "事件ID:" + eventId : "";
|
||
elType.textContent = (type ? "类型:" + type + " · " : "") + "拦截时间:" + time;
|
||
meta.style.display = "block";
|
||
}
|
||
|
||
if (document.readyState === "loading") {
|
||
document.addEventListener("DOMContentLoaded", init);
|
||
} else {
|
||
init();
|
||
}
|
||
window.addEventListener("load", init);
|
||
})();
|
||
</script>
|
||
</body>
|
||
</html>
|