auto-save 2026-05-15 15:59 (~4)
This commit is contained in:
@@ -1,18 +1,5 @@
|
||||
{
|
||||
"entries": [
|
||||
{
|
||||
"files_changed": 1,
|
||||
"hash": "5c9c80e",
|
||||
"message": "auto-save 2026-05-14 00:31 (~1)",
|
||||
"ts": "2026-05-14T00:31:52+08:00",
|
||||
"type": "commit"
|
||||
},
|
||||
{
|
||||
"files_changed": 1,
|
||||
"message": "Claude 会话活跃 · 最近命令:claude · 1 项未提交变更 · 最近提交:auto-save 2026-05-14 00:31 (~1)",
|
||||
"ts": "2026-05-13T16:33:09Z",
|
||||
"type": "session-heartbeat"
|
||||
},
|
||||
{
|
||||
"files_changed": 3,
|
||||
"hash": "302b0ed",
|
||||
@@ -3251,6 +3238,19 @@
|
||||
"message": "auto-save 2026-05-15 15:48 (~1)",
|
||||
"hash": "beeed42",
|
||||
"files_changed": 1
|
||||
},
|
||||
{
|
||||
"ts": "2026-05-15T15:54:34+08:00",
|
||||
"type": "commit",
|
||||
"message": "auto-save 2026-05-15 15:54 (~4)",
|
||||
"hash": "eabec39",
|
||||
"files_changed": 4
|
||||
},
|
||||
{
|
||||
"ts": "2026-05-15T07:54:47Z",
|
||||
"type": "session-heartbeat",
|
||||
"message": "Codex 会话活跃 · 最近命令:codex · 1 项未提交变更 · 最近提交:auto-save 2026-05-15 15:54 (~4)",
|
||||
"files_changed": 1
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -941,6 +941,16 @@ SubjectAsset {
|
||||
<h2>变更记录</h2>
|
||||
<p>这个记录不是 git log 的替代品。它记录“产品理解发生了什么变化、影响了哪些源码、你以后描述需求时该怎么说”。后续每次改功能都要补一条。</p>
|
||||
<div class="changelog">
|
||||
<article class="change">
|
||||
<header>
|
||||
<h3>2026-05-15 · 登录页角色眼神幅度增强</h3>
|
||||
<span class="tag rose">UI</span>
|
||||
</header>
|
||||
<div class="body">
|
||||
<p><strong>改动:</strong>放大登录页动画角色的鼠标跟随瞳孔位移,并加大显示密码时眼睛整体看向目标的偏移;同时略微放大白眼球,避免瞳孔大幅移动时显得被裁切。</p>
|
||||
<p><strong>影响:</strong><code>web/app/login/page.tsx</code>、<code>web/app/globals.css</code>、<code>docs/source-analysis.html</code>。</p>
|
||||
</div>
|
||||
</article>
|
||||
<article class="change">
|
||||
<header>
|
||||
<h3>2026-05-15 · 登录页动画角色改回风格库原版几何结构</h3>
|
||||
|
||||
@@ -286,16 +286,16 @@
|
||||
}
|
||||
.login-eye {
|
||||
position: relative;
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
width: 22px;
|
||||
height: 22px;
|
||||
border-radius: 999px;
|
||||
background: white;
|
||||
overflow: hidden;
|
||||
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25);
|
||||
}
|
||||
.login-eye--small {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
}
|
||||
.login-eye::after,
|
||||
.login-pupil::after {
|
||||
@@ -303,15 +303,15 @@
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
top: 50%;
|
||||
width: 7px;
|
||||
height: 7px;
|
||||
width: 8px;
|
||||
height: 8px;
|
||||
border-radius: 50%;
|
||||
background: #2d2d2d;
|
||||
transform: translate(var(--eye-x), var(--eye-y));
|
||||
transition: transform 0.08s linear, opacity 0.2s ease;
|
||||
}
|
||||
.login-eye::after {
|
||||
margin: -3.5px 0 0 -3.5px;
|
||||
margin: -4px 0 0 -4px;
|
||||
}
|
||||
.login-pupil {
|
||||
position: relative;
|
||||
@@ -392,24 +392,24 @@
|
||||
transform: skewX(0deg) translateY(-10px);
|
||||
}
|
||||
.login-page[data-mood="peek"] .login-eyes--purple {
|
||||
left: 50px;
|
||||
top: 20px;
|
||||
left: 40px;
|
||||
top: 14px;
|
||||
}
|
||||
.login-page[data-mood="peek"] .login-eyes--black {
|
||||
left: 2px;
|
||||
top: 20px;
|
||||
}
|
||||
.login-page[data-mood="peek"] .login-eyes--orange {
|
||||
left: 68px;
|
||||
top: 48px;
|
||||
}
|
||||
.login-page[data-mood="peek"] .login-eyes--yellow {
|
||||
left: 10px;
|
||||
top: 28px;
|
||||
}
|
||||
.login-page[data-mood="peek"] .login-eyes--orange {
|
||||
left: 80px;
|
||||
top: 55px;
|
||||
}
|
||||
.login-page[data-mood="peek"] .login-eyes--yellow {
|
||||
left: 20px;
|
||||
top: 35px;
|
||||
}
|
||||
.login-page[data-mood="peek"] .login-eye::after,
|
||||
.login-page[data-mood="peek"] .login-pupil::after {
|
||||
transform: translate(-5px, -4px);
|
||||
transform: translate(-8px, -6px);
|
||||
}
|
||||
.login-page[data-mood="error"] .login-characters-container {
|
||||
animation: login-stage-breathe 7s ease-in-out infinite, login-shake 0.28s ease-in-out 2;
|
||||
|
||||
@@ -33,7 +33,7 @@ export default function LoginPage() {
|
||||
const centerY = window.innerHeight / 2
|
||||
const nextX = Math.max(-1, Math.min(1, (event.clientX - centerX) / centerX))
|
||||
const nextY = Math.max(-1, Math.min(1, (event.clientY - centerY) / centerY))
|
||||
setEyeOffset({ x: nextX * 5, y: nextY * 3 })
|
||||
setEyeOffset({ x: nextX * 8, y: nextY * 5.5 })
|
||||
}
|
||||
window.addEventListener("pointermove", onPointerMove)
|
||||
return () => window.removeEventListener("pointermove", onPointerMove)
|
||||
|
||||
Reference in New Issue
Block a user