/* ============================================================
   base.css —— token、reset、字体、光斑、通用底子
   ============================================================ */
:root{
  --paper:#FBF6F0; --cream:#FFFDF9; --ink:#3A3138; --ink60:#8C8189;
  --line:#E4DAD3; --rose:#FF6B9D; --violet:#A66BFF; --lav:#E8DCF5;
  --note-yellow:#FFF6D6; --note-purple:#EFE6FA; --note-pink:#FFE8EE;
  --ticket:#FBF4E6; --quiet:#F7F5F2; --danger:#D9534F;
  --night:#14101A; --night-ink:#EDE6F2; --night-ink2:rgba(237,230,242,.55);
  --grad:linear-gradient(135deg,#FF6B9D 0%,#A66BFF 100%);
  --grad-night:linear-gradient(135deg,#C86A8E 0%,#7E5BB5 100%);
  --serif:"Noto Serif SC","Songti SC","STSong",SimSun,serif;
  --sans:"Noto Sans SC","PingFang SC","Microsoft YaHei",sans-serif;
  --hand:"Kaiti SC","KaiTi","STKaiti",serif;
  --paper-shadow:0 1px 2px rgba(58,49,56,.06),0 8px 24px -12px rgba(58,49,56,.28);
  --ease:cubic-bezier(.2,.7,.2,1);
}
*{box-sizing:border-box;margin:0;padding:0}
html{-webkit-text-size-adjust:100%}
body{background:var(--paper);color:var(--ink);font-family:var(--sans);
  -webkit-font-smoothing:antialiased;font-size:15px;line-height:1.8}
img{display:block;max-width:100%}
button{font-family:inherit;cursor:pointer}
input,textarea{font-family:inherit;color:var(--ink);outline:none}
a{color:inherit;text-decoration:none}
::placeholder{color:#C4B8BE}

/* ---- 光斑（只在光里出现的渐变，文档 6.4） ---- */
.glow{position:absolute;border-radius:50%;filter:blur(70px);pointer-events:none;z-index:0}
.g1{width:520px;height:520px;left:-140px;top:-160px;background:radial-gradient(circle,rgba(255,107,157,.55),transparent 68%);animation:drift1 24s ease-in-out infinite alternate}
.g2{width:460px;height:460px;right:-120px;top:220px;background:radial-gradient(circle,rgba(166,107,255,.42),transparent 68%);animation:drift2 32s ease-in-out infinite alternate}
.g3{width:420px;height:420px;left:22%;bottom:-180px;background:radial-gradient(circle,rgba(232,220,245,.9),transparent 70%);animation:drift3 40s ease-in-out infinite alternate}
@keyframes drift1{to{transform:translate(60px,40px)}}
@keyframes drift2{to{transform:translate(-50px,-40px)}}
@keyframes drift3{to{transform:translate(40px,-60px)}}
@media (max-width:700px){.glow{opacity:.55}}

/* ---- 通用按钮 / 输入 ---- */
.btn{width:100%;height:52px;border:0;border-radius:999px;background:var(--grad);color:#fff;
  font-size:15px;font-weight:500;letter-spacing:.18em;
  box-shadow:0 10px 26px -12px rgba(255,107,157,.9);
  transition:transform .22s var(--ease),box-shadow .22s var(--ease),opacity .22s}
.btn:hover{transform:translateY(-1px);box-shadow:0 16px 32px -12px rgba(255,107,157,.95)}
.btn[disabled]{opacity:.7;cursor:default;transform:none}
.btn.ink{background:transparent;color:var(--ink);border:1px solid var(--ink);box-shadow:none;letter-spacing:.1em}
.btn.ink:hover{box-shadow:none;background:rgba(58,49,56,.04)}
.field-line{position:relative}
.field-line input{width:100%;border:0;border-bottom:1px solid var(--line);background:transparent;
  padding:10px 2px;font-size:17px;letter-spacing:.28em;text-align:center}
.field-line::after{content:"";position:absolute;left:0;right:0;bottom:0;height:1px;
  background:var(--grad);opacity:.55;transition:opacity .3s}
.field-line:focus-within::after{opacity:1}
.field-line.plain input{text-align:left;letter-spacing:.02em;font-size:15px}

/* ---- 动效 ---- */
@keyframes shakeX{0%{transform:translateX(0)}25%{transform:translateX(-6px)}50%{transform:translateX(6px)}75%{transform:translateX(-3px)}100%{transform:translateX(0)}}
.shake{animation:shakeX .4s var(--ease)}
@keyframes fadeUp{from{opacity:0;transform:translateY(18px)}to{opacity:1;transform:translateY(0)}}
@keyframes fadeIn{from{opacity:0}to{opacity:1}}
@keyframes breathe{0%,100%{opacity:.15}50%{opacity:.5}}
@keyframes spin{to{transform:rotate(360deg)}}
.reveal{opacity:0;transform:translateY(18px);transition:opacity .6s var(--ease),transform .6s var(--ease)}
.reveal.in{opacity:1;transform:translateY(0)}

/* 减少动态（文档 7） */
@media (prefers-reduced-motion:reduce){
  .glow{animation:none!important}
  .reveal{opacity:1;transform:none;transition:none}
  .scroll-hint{animation:none!important}
  *{transition-duration:.01ms!important}
}
