@font-face{font-family:"InterUI";font-weight:400;font-display:swap;src:url(fonts/Inter-Regular.woff2) format("woff2")}
@font-face{font-family:"InterUI";font-weight:600 700;font-display:swap;src:url(fonts/Inter-SemiBold.woff2) format("woff2")}
:root{--bg:#070b12;--sheet:#152238;--text:#eef2f8;--mut:#b4bfcf;--dim:#94a1b4;--crit:#ef9a9a;--line:rgba(255,255,255,.07);--line2:rgba(255,255,255,.16);color-scheme:dark}
*{box-sizing:border-box;margin:0}
html{-webkit-text-size-adjust:100%;background:var(--bg)}
body{min-height:100vh;min-height:100dvh;color:var(--text);font:15px/1.6 "InterUI","Segoe UI","PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;font-variant-numeric:tabular-nums;-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:transparent;overflow-x:hidden}
/* 背景：两片很淡的环境光，极慢地来回漂移，让画面不是死的 */
body::before,body::after{content:"";position:fixed;z-index:-1;pointer-events:none;border-radius:50%;will-change:transform}
body::before{left:-30vmax;top:-34vmax;width:80vmax;height:80vmax;background:radial-gradient(closest-side,rgba(46,104,170,.36),rgba(46,104,170,.12) 55%,transparent)}
body::after{right:-36vmax;bottom:-40vmax;width:84vmax;height:84vmax;background:radial-gradient(closest-side,rgba(24,118,108,.20),rgba(24,118,108,.07) 55%,transparent)}
@media (prefers-reduced-motion:no-preference){
  body::before{animation:driftA 26s ease-in-out infinite alternate}
  body::after{animation:driftB 32s ease-in-out infinite alternate}
}
@keyframes driftA{from{transform:translate(0,0) scale(1)}to{transform:translate(9vmax,6vmax) scale(1.12)}}
@keyframes driftB{from{transform:translate(0,0) scale(1.08)}to{transform:translate(-8vmax,-7vmax) scale(1)}}
main{max-width:460px;min-height:100vh;min-height:100dvh;margin:0 auto;padding:22px 14px max(22px,env(safe-area-inset-bottom));display:flex;flex-direction:column}
main::before{content:"";flex:2 0 0}main::after{content:"";flex:3 0 0}
section{flex:none;display:flex;flex-direction:column}
@media (prefers-reduced-motion:no-preference){section>.hero{animation:fadeIn .3s ease-out both}}
@keyframes fadeIn{from{opacity:0}to{opacity:1}}
/* 上半屏：头像 + 文字，直接放在背景上 */
.hero{--tone:#b4bfcf;display:flex;flex-direction:column;align-items:center;padding:8px 20px 28px;text-align:center;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}
.hero[data-tone=active]{--tone:#8fb4e3}
.hero[data-tone=act]{--tone:#eef2f8}
.hero[data-tone=ok]{--tone:#62c79c}
.hero[data-tone=off]{--tone:#7f8b9d}
.who{position:relative;width:108px;height:108px}
.face{display:block;width:100%;height:100%;padding:0;border:0;background:none;border-radius:50%;cursor:pointer;touch-action:manipulation;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;transition:transform .18s cubic-bezier(.3,1.5,.5,1)}
.face img{display:block;width:100%;height:100%;border-radius:50%;object-fit:cover;box-shadow:0 0 0 4px var(--bg),0 0 0 5px rgba(255,255,255,.2);pointer-events:none;-webkit-user-drag:none}
/* 按下：缩一点并一直保持；按住不放：再缩一点并轻轻晃；松手：弹回来 */
.who.press .face{transform:scale(.92);transition-duration:.09s}
.who.held .face{transform:scale(.84)}
@media (prefers-reduced-motion:no-preference){
  .who.held .face img{animation:wobble .5s ease-in-out infinite}
  .who.b1 .face{animation:bounceA .5s cubic-bezier(.3,1.4,.5,1)}
  .who.b2 .face{animation:bounceB .5s cubic-bezier(.3,1.4,.5,1)}
  .who.b3 .face{animation:release .65s cubic-bezier(.3,1.4,.5,1)}
  .hero[data-tone=active] .who:not(.press):not(.held) .face img{animation:nod 5s ease-in-out infinite}
  /* 等待中：头像慢慢浮着、左右张望；状态点一圈一圈往外荡 */
  .hero[data-tone=wait] .who:not(.press):not(.held) .face img{animation:lookaround 6s ease-in-out infinite}
  .hero[data-tone=wait] .badge i::after,.hero[data-tone=active] .badge i::after{content:"";position:absolute;inset:0;border-radius:50%;background:var(--tone);animation:ripple 2.4s ease-out infinite}
}
@keyframes wobble{0%,100%{transform:rotate(-3deg)}50%{transform:rotate(3deg)}}
@keyframes bounceA{0%{transform:scale(.92)}45%{transform:scale(1.08) rotate(3deg)}100%{transform:scale(1)}}
@keyframes bounceB{0%{transform:scale(.92)}45%{transform:scale(1.08) rotate(-3deg)}100%{transform:scale(1)}}
@keyframes release{0%{transform:scale(.84)}35%{transform:scale(1.16)}60%{transform:scale(.96)}100%{transform:scale(1)}}
@keyframes lookaround{0%,100%{transform:translateY(0) rotate(0)}22%{transform:translateY(-4px) rotate(-4deg)}45%{transform:translateY(0) rotate(0)}68%{transform:translateY(-4px) rotate(4deg)}}
@keyframes ripple{0%{transform:scale(1);opacity:.7}70%,100%{transform:scale(3.2);opacity:0}}
@keyframes nod{0%,84%,100%{transform:rotate(0)}89%{transform:rotate(-6deg)}94%{transform:rotate(4deg)}}
/* 头像下的状态小标签（代替原来的小圆点） */
.badge{position:absolute;left:50%;bottom:-11px;transform:translateX(-50%);display:flex;align-items:center;gap:6px;height:24px;padding:0 10px;border-radius:999px;background:var(--sheet);border:1px solid rgba(255,255,255,.14);font-size:12px;line-height:1;color:var(--text);white-space:nowrap;pointer-events:none}
.badge i{position:relative;width:6px;height:6px;border-radius:50%;background:var(--tone)}
.badge:empty{display:none}
.say{position:absolute;left:50%;bottom:calc(100% + 10px);z-index:3;white-space:nowrap;padding:6px 13px;border-radius:999px;background:#1c2532;border:1px solid rgba(255,255,255,.16);font-size:13px;line-height:1.5;pointer-events:none;transform:translateX(-50%);animation:sayIn .2s ease-out both}
.say.out{animation:sayOut .35s ease-in both}
@keyframes sayIn{from{opacity:0;transform:translate(-50%,6px) scale(.9)}to{opacity:1;transform:translate(-50%,0) scale(1)}}
@keyframes sayOut{from{opacity:1;transform:translate(-50%,0)}to{opacity:0;transform:translate(-50%,-10px)}}
.name{margin-top:26px;font-size:13px;color:var(--dim);letter-spacing:.08em}
.eyebrow{margin-top:18px;font-size:13px;color:var(--mut)}
h1,.status{font-size:36px;font-weight:600;line-height:1.2;letter-spacing:.02em}
.status{margin-top:2px}
.hint{max-width:19em;margin-top:10px;font-size:15px;color:var(--mut);white-space:pre-line}
.hint:empty{display:none}
/* 下半屏：底部升起的面板 */
.sheet{padding:8px 20px 14px;border-radius:26px;background:var(--sheet)}
@media (prefers-reduced-motion:no-preference){.sheet{animation:sheet .4s cubic-bezier(.2,.8,.2,1) both}}
@keyframes sheet{from{transform:translateY(14px);opacity:0}to{transform:none;opacity:1}}
.row{display:flex;justify-content:space-between;align-items:center;gap:16px;min-height:52px;border-top:1px solid var(--line)}
.row:first-of-type{border-top:0}
.row>span:first-child{flex:none;font-size:14px;color:var(--dim)}
.row b{display:flex;align-items:center;gap:8px;font-size:15px;font-weight:400;text-align:right;overflow-wrap:anywhere}
.row b.going,.row b.none{color:var(--mut)}
.chip{position:relative;flex:none;height:28px;padding:0 11px;border-radius:999px;border:1px solid var(--line2);background:rgba(255,255,255,.06);color:var(--mut);font:inherit;font-size:13px;cursor:pointer;transition:transform .12s,background .12s}
.chip::after{content:"";position:absolute;inset:-8px}
.chip:active,.pill:active{transform:scale(.96);background:rgba(255,255,255,.1)}
.pill{display:inline-flex;align-items:center;gap:6px;height:40px;padding:0 16px;border-radius:999px;border:1px solid rgba(255,255,255,.14);background:rgba(255,255,255,.06);color:var(--text);font:inherit;font-size:14px;cursor:pointer;transition:transform .12s,background .12s}
.pill svg{width:15px;height:15px}
.pill:disabled{opacity:.6}
@media (prefers-reduced-motion:no-preference){.pill.busy svg{animation:spin .8s linear infinite}}
@keyframes spin{to{transform:rotate(360deg)}}
.status,.hint,.row b,.badge{transition:opacity .22s}
.refreshing .status,.refreshing .hint,.refreshing .row b,.refreshing .badge{opacity:.3}
.help{margin-top:8px;padding:14px 16px;border-radius:20px;background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.09)}
.help b{display:block;font-size:14px;font-weight:400}
.help span{display:block;font-size:13px;color:var(--dim)}
.link{display:flex;align-items:center;justify-content:center;width:100%;min-height:44px;margin-top:4px;color:var(--mut);font:inherit;font-size:14px;text-decoration:underline;text-underline-offset:4px;background:none;border:0;cursor:pointer}
label{display:block;font-size:13px;color:var(--dim);margin:8px 0 6px}
input{width:100%;height:52px;padding:0 16px;border-radius:14px;border:1px solid var(--line2);background:rgba(8,13,20,.6);color:var(--text);font:inherit;font-size:16px;letter-spacing:.06em;outline:none;transition:border-color .12s,box-shadow .12s}
input::placeholder{color:#6f7c90;letter-spacing:0}
input:focus{border-color:rgba(255,255,255,.4);box-shadow:0 0 0 3px rgba(255,255,255,.08)}
input.bad{border-color:rgba(239,154,154,.6)}
.btn{display:flex;align-items:center;justify-content:center;width:100%;height:52px;margin-top:14px;padding:0 24px;border:1px solid rgba(255,255,255,.2);border-radius:999px;color:var(--text);font:inherit;font-size:16px;font-weight:600;text-decoration:none;cursor:pointer;background:rgba(255,255,255,.09);transition:transform .12s,background .12s}
.btn:hover{background:rgba(255,255,255,.13)}
.btn:active{transform:scale(.98);background:rgba(255,255,255,.07)}
.btn:disabled{opacity:.6;cursor:default}
.btn:focus-visible,.face:focus-visible,summary:focus-visible,a:focus-visible,button:focus-visible{outline:2px solid rgba(255,255,255,.7);outline-offset:3px}
.err{margin-top:12px;padding:10px 12px;border-radius:12px;background:rgba(239,154,154,.08);border:1px solid rgba(239,154,154,.25);color:var(--crit);font-size:13.5px}
.err:empty{display:none}
.tip{margin:14px 0 6px;font-size:13px;color:var(--dim);text-align:center;white-space:pre-line}
/* 配色：深海蓝。背景、面板、分隔线、按钮统一带蓝调，不用灰 */
html{background:#070b12}
body::before{background:radial-gradient(closest-side,rgba(60,120,200,.30),transparent 62%)}
body::after{left:0;top:0;right:auto;bottom:auto;width:100%;height:100%;border-radius:0;z-index:-2;animation:none!important;background:linear-gradient(180deg,#0e1d33 0%,#081120 60%,#070b12 100%)}
.sheet{background:linear-gradient(180deg,#182840,#111c2e);box-shadow:inset 0 1px 0 rgba(160,195,240,.22)}
.row,details,.tool,.note{border-top-color:rgba(150,185,235,.10)}
.face img{box-shadow:0 0 0 4px #0c192c,0 0 0 5px rgba(160,195,240,.35)}
.badge{background:#182840;border-color:rgba(160,195,240,.25)}
.btn{background:#223756;border-color:rgba(160,195,240,.30)}
input{background:#0c1727;border-color:rgba(160,195,240,.22)}
.help{background:#0e1a2c;border-color:rgba(160,195,240,.12)}
.chip,.pill{background:rgba(160,195,240,.10);border-color:rgba(160,195,240,.22)}
@media (min-width:760px){main{padding:32px 0}.sheet{padding:10px 24px 16px}}
