:root{
  --ink:#2f2430;
  --ink-soft:#8a7683;
  --ink-faint:#b5a3ae;
  --line:rgba(88,52,74,.10);
  --line-soft:rgba(88,52,74,.06);

  --rose:#ff7ea6;
  --rose-deep:#f2568d;
  --plum:#c98bff;
  --periwinkle:#8fa8ff;

  --card:rgba(255,255,255,.74);

  --shadow-sm:0 1px 2px rgba(70,30,50,.05), 0 6px 16px -10px rgba(70,30,50,.16);
  --shadow:0 1px 2px rgba(70,30,50,.05), 0 16px 34px -18px rgba(70,30,50,.22);
  --shadow-lg:0 24px 60px -24px rgba(70,30,50,.30);

  --radius:24px;
  --serif:ui-serif,Georgia,"Songti SC","Noto Serif SC",serif;
}

*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{margin:0;padding:0;overflow-x:hidden;max-width:100%}

body{
  font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","Segoe UI",sans-serif;
  color:var(--ink);
  background:#fbf4f7;
  min-height:100vh;
  -webkit-font-smoothing:antialiased;
  text-rendering:optimizeLegibility;
  padding-bottom:calc(28px + env(safe-area-inset-bottom));
  position:relative;
}

/* 背景：渐变 + 光斑 + 细噪点 */
body::before{
  content:"";position:fixed;inset:-10% -20%;z-index:-2;pointer-events:none;
  background:
    radial-gradient(38% 30% at 14% 6%, rgba(255,183,208,.85) 0%, rgba(255,183,208,0) 62%),
    radial-gradient(34% 26% at 88% 2%, rgba(198,178,255,.72) 0%, rgba(198,178,255,0) 60%),
    radial-gradient(46% 34% at 78% 88%, rgba(168,196,255,.55) 0%, rgba(168,196,255,0) 62%),
    radial-gradient(40% 30% at 6% 84%, rgba(255,199,196,.60) 0%, rgba(255,199,196,0) 60%),
    linear-gradient(180deg,#fff8fa 0%,#f7f2fb 45%,#f2f4fd 100%);
  animation:drift 26s ease-in-out infinite alternate;
}
body::after{
  content:"";position:fixed;inset:0;z-index:-1;pointer-events:none;opacity:.5;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='3'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='140' height='140' filter='url(%23n)' opacity='.05'/%3E%3C/svg%3E");
}
@keyframes drift{
  from{transform:translate3d(0,0,0) scale(1)}
  to{transform:translate3d(-1.6%,1.2%,0) scale(1.05)}
}

.hidden{display:none !important}
h1,h2,h3,h4{margin:0;font-weight:650;letter-spacing:.2px}
p{margin:0}
button{font-family:inherit;cursor:pointer;border:none;background:none;color:inherit}

/* ============ 登录 ============ */
.gate{
  min-height:100vh;min-height:100dvh;display:flex;align-items:center;justify-content:center;
  padding:28px 22px calc(28px + env(safe-area-inset-bottom));
  position:relative;overflow:hidden
}
.gate .petals{position:absolute;inset:0;pointer-events:none;overflow:hidden;z-index:0}
.gate .petals i{
  position:absolute;display:block;width:9px;height:9px;opacity:0;
  background:#ffb0c8;border-radius:2px;transform:rotate(45deg);
  animation:fall linear infinite;
}
.gate .petals i::before,.gate .petals i::after{
  content:"";position:absolute;width:9px;height:9px;border-radius:50%;background:inherit
}
.gate .petals i::before{left:-4.5px}
.gate .petals i::after{top:-4.5px}
@keyframes fall{
  0%{opacity:0;transform:translateY(-10vh) rotate(45deg) scale(.7)}
  12%{opacity:.5}
  80%{opacity:.28}
  100%{opacity:0;transform:translateY(104vh) rotate(170deg) scale(1)}
}

.gate-card{
  position:relative;z-index:1;width:100%;max-width:372px;
  background:linear-gradient(180deg, rgba(255,255,255,.88), rgba(255,255,255,.72));
  border:1px solid rgba(255,255,255,.9);
  border-radius:30px;
  padding:32px 26px 26px;
  box-shadow:var(--shadow-lg), inset 0 1px 0 rgba(255,255,255,.9);
  backdrop-filter:blur(24px) saturate(1.2);
  -webkit-backdrop-filter:blur(24px) saturate(1.2);
  text-align:center;
  animation:rise .6s cubic-bezier(.22,.9,.24,1) both;
}
.gate-card.shake{animation:shake .42s cubic-bezier(.36,.07,.19,.97)}

.seal{
  width:66px;height:66px;margin:0 auto 14px;border-radius:22px;
  background:linear-gradient(140deg,#ff9dbb,#ff6f9c 55%,#c98bff);
  box-shadow:0 12px 26px -10px rgba(242,86,141,.6), inset 0 1px 0 rgba(255,255,255,.55);
  display:flex;align-items:center;justify-content:center;font-size:28px;
  animation:breathe 4.5s ease-in-out infinite;
}
@keyframes breathe{
  0%,100%{transform:translateY(0) scale(1)}
  50%{transform:translateY(-3px) scale(1.03)}
}

.gate-card h1{
  font-size:20px;letter-spacing:1px;
  background:linear-gradient(100deg,#e0568c,#8f6ff0 70%);
  -webkit-background-clip:text;background-clip:text;color:transparent;
}
.gate-sub{margin-top:7px;font-size:12.5px;color:var(--ink-soft);letter-spacing:.4px}
.gate-card .hint{color:var(--ink-soft);font-size:13px;margin:18px 0 10px}
.hint.small{font-size:12px;line-height:1.65;margin:0}

.pw-field{
  position:relative;display:flex;align-items:center;
  background:#fdf8fa;border:1px solid var(--line);
  border-radius:16px;padding:2px 4px 2px 14px;
  transition:border-color .18s, box-shadow .18s, background .18s;
}
.pw-field:focus-within{
  background:#fff;border-color:#ffb8cf;
  box-shadow:0 0 0 4px rgba(255,126,166,.13), 0 8px 20px -14px rgba(242,86,141,.5);
}
.pw-field input{
  border:none;background:transparent;box-shadow:none;padding:13px 4px;font-size:16px;
  letter-spacing:2px;flex:1;min-width:0;border-radius:0
}
.pw-field input:focus{box-shadow:none;border:none;background:transparent}
.eye{
  width:40px;height:40px;border-radius:12px;flex:none;display:flex;align-items:center;justify-content:center;
  color:var(--ink-faint);font-size:15px;transition:background .15s,color .15s
}
.eye:hover{background:rgba(255,126,166,.10);color:var(--rose-deep)}

input,textarea{
  width:100%;border:1px solid var(--line);background:#fdf8fa;border-radius:14px;
  padding:12px 14px;font-size:15px;color:var(--ink);outline:none;font-family:inherit;
  transition:border-color .18s, box-shadow .18s, background .18s;
  -webkit-appearance:none;
}
input:focus,textarea:focus{
  background:#fff;border-color:#ffb8cf;
  box-shadow:0 0 0 4px rgba(255,126,166,.12);
}
input::placeholder,textarea::placeholder{color:#c6b4bf}
textarea{resize:vertical;line-height:1.65}

.who-pick{display:flex;gap:9px;margin:14px 0 18px}
.who{
  flex:1;padding:10px 0;border-radius:14px;border:1px solid var(--line);
  background:rgba(255,255,255,.7);color:var(--ink-soft);font-size:13.5px;
  transition:all .18s
}
.who.active{
  background:linear-gradient(135deg,#ffe1ec,#ffd0e2);color:#a63f68;border-color:transparent;
  font-weight:650;box-shadow:0 8px 18px -12px rgba(242,86,141,.7)
}

.primary{
  width:100%;padding:13px 18px;border-radius:15px;font-size:15px;font-weight:650;color:#fff;
  background:linear-gradient(135deg,#ff93b4,#f2568d 70%);
  box-shadow:0 14px 26px -14px rgba(242,86,141,.85), inset 0 1px 0 rgba(255,255,255,.4);
  transition:transform .12s ease, filter .18s, box-shadow .18s;
  letter-spacing:.5px
}
.primary:hover{filter:brightness(1.04)}
.primary:active{transform:scale(.978)}
.primary[disabled]{opacity:.62;filter:grayscale(.15)}
.primary.small{width:auto;padding:9px 16px;font-size:13.5px;border-radius:12px;flex:none}

.ghost{
  padding:9px 14px;border-radius:12px;background:rgba(255,255,255,.72);
  border:1px solid var(--line);color:var(--ink-soft);font-size:13.5px;
  transition:background .16s,border-color .16s,color .16s
}
.ghost:hover{background:#fff;color:var(--ink)}
.ghost.small{padding:7px 12px;font-size:12.5px}
.ghost:active{transform:scale(.98)}

.err{color:#e0526f;font-size:12.5px;margin-top:12px;min-height:16px;letter-spacing:.3px}

/* ============ 主结构 ============ */
.app{max-width:600px;margin:0 auto;padding:0 16px}

.hero{
  position:relative;border-radius:28px;overflow:hidden;margin:16px 0 14px;
  background:linear-gradient(140deg,#ff9bba 0%,#e77fd0 42%,#a888f5 78%,#8fa8ff 100%);
  box-shadow:0 22px 44px -22px rgba(180,90,150,.65), inset 0 1px 0 rgba(255,255,255,.32);
  animation:rise .55s cubic-bezier(.22,.9,.24,1) both;
}
.hero::before{
  content:"";position:absolute;inset:0;pointer-events:none;
  background:
    radial-gradient(60% 50% at 88% 6%, rgba(255,255,255,.5), transparent 60%),
    radial-gradient(50% 40% at 6% 96%, rgba(255,214,232,.42), transparent 60%),
    radial-gradient(40% 32% at 50% 120%, rgba(120,90,220,.42), transparent 70%);
  mix-blend-mode:screen
}
.hero-bg{position:absolute;inset:0;background-size:cover;background-position:center;opacity:.95}
.hero-bg.has-image{opacity:1}
.hero-bg.has-image::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,rgba(50,14,34,.10),rgba(50,14,34,.52))}
.hero-inner{position:relative;padding:24px 22px;color:#fff;text-shadow:0 1px 12px rgba(90,30,60,.22)}
.couple-line{font-size:13px;letter-spacing:2.5px;opacity:.92;display:flex;align-items:center;gap:8px}
.heart{font-size:11px;color:#ffd9e7;filter:drop-shadow(0 0 6px rgba(255,255,255,.55))}
.days{display:flex;align-items:baseline;gap:7px;margin:10px 0 3px}
.days b{
  font-family:var(--serif);font-size:58px;line-height:.92;font-weight:600;
  letter-spacing:-2px;text-shadow:0 10px 30px rgba(90,20,50,.25)
}
.days span{font-size:14px;opacity:.9;letter-spacing:2px}
.since{font-size:12px;opacity:.8;letter-spacing:.6px}
.tagline{
  font-size:13px;margin-top:12px;opacity:.95;letter-spacing:.4px;
  display:inline-block;padding:6px 12px;border-radius:999px;
  background:rgba(255,255,255,.18);border:1px solid rgba(255,255,255,.3);
  backdrop-filter:blur(6px)
}

.tabs{
  display:flex;gap:3px;padding:4px;margin-bottom:16px;
  background:rgba(255,255,255,.62);border:1px solid rgba(255,255,255,.9);
  border-radius:17px;backdrop-filter:blur(18px) saturate(1.15);
  box-shadow:var(--shadow-sm);
  position:sticky;top:10px;z-index:20;
}
.tab{
  flex:1;padding:9px 0;border-radius:13px;color:var(--ink-soft);
  font-size:13.5px;font-weight:550;letter-spacing:.5px;transition:all .2s ease
}
.tab.active{
  color:#fff;font-weight:650;
  background:linear-gradient(135deg,#ff8fb2,#f2568d);
  box-shadow:0 10px 20px -12px rgba(242,86,141,.9)
}

.view{animation:fade .28s ease}
.card{
  background:var(--card);border:1px solid rgba(255,255,255,.85);
  border-radius:var(--radius);padding:19px;margin-bottom:15px;
  box-shadow:var(--shadow);
  backdrop-filter:blur(20px) saturate(1.15);
  -webkit-backdrop-filter:blur(20px) saturate(1.15);
}
.card-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:14px}
.card-head h2{font-size:15px;letter-spacing:.6px}
.sub{font-size:11.5px;color:var(--ink-faint);letter-spacing:.4px}
.row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}

/* 心情 */
.moods{display:flex;gap:8px;margin-bottom:12px}
.moods button{
  flex:1;padding:9px 0;font-size:19px;border-radius:15px;
  background:#fdf8fa;border:1px solid var(--line-soft);
  transition:transform .14s cubic-bezier(.3,.9,.3,1), box-shadow .18s, background .18s
}
.moods button:active{transform:scale(.92)}
.moods button.on{
  background:linear-gradient(135deg,#ffe4ee,#ffd3e3);border-color:transparent;
  box-shadow:0 10px 20px -14px rgba(242,86,141,.9);
  transform:translateY(-2px) scale(1.03)
}
#moodText{margin-bottom:11px}
.mood-list{margin-top:15px;display:flex;flex-direction:column;gap:8px}
.mood-row{
  display:flex;gap:10px;align-items:flex-start;font-size:13.5px;padding:11px 13px;
  background:rgba(255,255,255,.72);border:1px solid var(--line-soft);border-radius:14px
}
.mood-row .d{color:var(--ink-faint);font-size:11.5px;flex:none;min-width:42px;letter-spacing:.3px}
.mood-row .m{font-size:16px;flex:none}

/* 留言 */
.note-input{display:flex;gap:9px;margin-bottom:13px}
.note-input input{flex:1;width:auto;min-width:0}
.notes{display:flex;flex-direction:column;gap:10px}
.note{
  position:relative;background:rgba(255,255,255,.78);
  border:1px solid var(--line-soft);border-radius:16px;padding:12px 14px
}
.note .meta{display:flex;justify-content:space-between;font-size:11px;color:var(--ink-faint);margin-bottom:6px;letter-spacing:.4px}
.note .body{font-size:14px;line-height:1.7;white-space:pre-wrap;word-break:break-word;color:#43303c}

/* 删按钮 */
.del{
  position:absolute;top:7px;right:9px;background:transparent;color:#d3c1cb;font-size:15px;
  line-height:1;padding:5px;border-radius:9px;opacity:0;transition:opacity .16s,color .16s
}
.del:hover{color:#e0526f}
.note:hover .del,.wish-row:hover .del,.ev:hover .del{opacity:1}
@media (hover:none){.del{opacity:.45}}

/* 时光 */
.timeline{position:relative;padding-left:20px}
.timeline::before{
  content:"";position:absolute;left:5px;top:8px;bottom:8px;width:2px;border-radius:2px;
  background:linear-gradient(180deg,rgba(255,126,166,.75),rgba(201,139,255,.55),rgba(143,168,255,.4))
}
.ev{
  position:relative;margin-bottom:14px;background:rgba(255,255,255,.82);
  border:1px solid var(--line-soft);border-radius:18px;padding:14px 15px;
  box-shadow:var(--shadow-sm);transition:transform .16s,box-shadow .18s
}
.ev:hover{transform:translateY(-1px);box-shadow:var(--shadow)}
.ev::before{
  content:"";position:absolute;left:-19px;top:20px;width:10px;height:10px;border-radius:50%;
  background:linear-gradient(135deg,#ff9dbb,#f2568d);box-shadow:0 0 0 3px rgba(255,126,166,.16)
}
.ev .date{font-size:11px;color:var(--rose-deep);font-weight:650;letter-spacing:.9px}
.ev h4{margin:5px 0 6px;font-size:15px;font-weight:650}
.ev .desc{font-size:13.5px;color:var(--ink-soft);line-height:1.7;white-space:pre-wrap;word-break:break-word}
.ev img{width:100%;border-radius:14px;margin-top:11px;display:block;box-shadow:0 10px 24px -16px rgba(70,30,50,.5)}
.ev .by{font-size:10.5px;color:var(--ink-faint);margin-top:9px;letter-spacing:.4px}

/* 心愿 */
.wish-input{display:flex;gap:9px;margin-bottom:13px}
.wish-input input{flex:1;width:auto;min-width:0}
.wishes{display:flex;flex-direction:column;gap:9px}
.wish-row{
  display:flex;align-items:center;gap:11px;background:rgba(255,255,255,.78);
  border:1px solid var(--line-soft);border-radius:15px;padding:12px 13px;position:relative;
  transition:background .18s
}
.wish-row .box{
  width:22px;height:22px;border-radius:8px;border:1.6px solid #ffc6d8;background:#fff;flex:none;
  display:flex;align-items:center;justify-content:center;color:#fff;font-size:12px;
  transition:all .18s cubic-bezier(.3,.9,.3,1)
}
.wish-row.done .box{background:linear-gradient(135deg,#ff8fb2,#f2568d);border-color:transparent;transform:scale(1.05)}
.wish-row .txt{flex:1;font-size:14.5px;line-height:1.5}
.wish-row.done .txt{text-decoration:line-through;color:#c2aeba}

/* 相册 */
.photos{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.photos figure{
  margin:0;position:relative;aspect-ratio:1;border-radius:14px;overflow:hidden;
  background:#f3e9ef;box-shadow:var(--shadow-sm)
}
.photos img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .35s ease}
.photos figure:hover img{transform:scale(1.05)}
.photos .cap{position:absolute;left:0;right:0;bottom:0;padding:6px 8px;font-size:11px;color:#fff;background:linear-gradient(0deg,rgba(0,0,0,.6),transparent)}
.photos .del{opacity:.85;color:#fff;text-shadow:0 1px 4px rgba(0,0,0,.6)}

/* 设置 */
.field{display:flex;align-items:center;gap:12px;margin-bottom:12px}
.field > span:first-child{width:78px;flex:none;font-size:13px;color:var(--ink-soft);letter-spacing:.4px}
.field input{flex:1;width:auto;min-width:0}
.foot{text-align:center;font-size:11.5px;color:var(--ink-faint);padding:8px 0 22px;letter-spacing:.5px}
.file{cursor:pointer;display:inline-flex;align-items:center}

/* 弹窗 */
.modal{
  position:fixed;inset:0;background:rgba(46,22,36,.38);
  backdrop-filter:blur(5px);-webkit-backdrop-filter:blur(5px);
  display:flex;align-items:center;justify-content:center;padding:18px;z-index:60
}
.modal-card{
  width:100%;max-width:420px;background:#fffdfe;border-radius:24px;padding:22px;
  box-shadow:0 30px 70px -24px rgba(60,20,40,.5), inset 0 1px 0 #fff;
  animation:rise .3s cubic-bezier(.22,.9,.24,1)
}
.modal-card h3{font-size:16px;margin-bottom:16px;letter-spacing:.6px}
.modal-card .field{margin-bottom:11px}
.modal-actions{display:flex;gap:10px;margin-top:18px}
.modal-actions .ghost{flex:1}
.modal-actions .primary{flex:1.5}

/* toast */
.toast{
  position:fixed;left:50%;bottom:calc(32px + env(safe-area-inset-bottom));transform:translateX(-50%);
  background:rgba(47,36,48,.92);color:#fff;font-size:13px;padding:11px 20px;border-radius:999px;z-index:80;
  box-shadow:0 18px 40px -16px rgba(0,0,0,.55);letter-spacing:.5px;
  animation:toastIn .24s cubic-bezier(.22,.9,.24,1)
}
@keyframes toastIn{from{opacity:0;transform:translate(-50%,10px) scale(.96)}to{opacity:1;transform:translate(-50%,0) scale(1)}}

@keyframes rise{from{opacity:0;transform:translateY(14px) scale(.985)}to{opacity:1;transform:none}}
@keyframes fade{from{opacity:0}to{opacity:1}}
@keyframes shake{
  10%,90%{transform:translateX(-2px)}
  20%,80%{transform:translateX(4px)}
  30%,50%,70%{transform:translateX(-6px)}
  40%,60%{transform:translateX(6px)}
}

@media (min-width:700px){
  .app{max-width:640px}
  .days b{font-size:66px}
}

@media (prefers-reduced-motion:reduce){
  *{animation-duration:.001ms !important;animation-iteration-count:1 !important;transition-duration:.001ms !important}
}


/* ================= 精修层 ================= */
body{padding-top:env(safe-area-inset-top)}

.hero{
  background:linear-gradient(142deg,#ff9ec0 0%,#f077d3 36%,#b58cf2 70%,#8fa8ff 100%);
  border:1px solid rgba(255,255,255,.26);
}
.hero::after{
  content:"";position:absolute;left:0;right:0;top:0;height:52%;pointer-events:none;
  border-radius:28px 28px 0 0;
  background:linear-gradient(180deg,rgba(255,255,255,.26),rgba(255,255,255,0));
}
.hero-inner{padding:26px 22px 24px}
.days b{
  background:linear-gradient(180deg,#ffffff,#fff0f6 55%,#ffdcea);
  -webkit-background-clip:text;background-clip:text;color:transparent;
  filter:drop-shadow(0 8px 20px rgba(80,16,44,.28));
}
.days span{margin-left:2px}
.since{opacity:.78;letter-spacing:.8px}
.tagline{font-size:12.5px}

.card{
  border:1px solid rgba(255,255,255,.92);
  box-shadow:0 1px 2px rgba(70,30,50,.05), 0 18px 40px -24px rgba(70,30,50,.32), inset 0 1px 0 #fff;
}
.card-head h2{display:flex;align-items:center;gap:9px}
.card-head h2::before{
  content:"";width:3px;height:13px;border-radius:2px;flex:none;
  background:linear-gradient(180deg,#ff9dbb,#c98bff)
}
.moods button{font-size:20px}
.photos figure{border:1px solid rgba(255,255,255,.7)}

/* 登录页微调 */
.gate-card{padding:30px 24px 24px}
.gate-card .hint{margin:16px 0 8px;font-size:12.5px;letter-spacing:1px;color:var(--ink-faint)}
.gate-sub{margin-top:8px}
.pw-field input::placeholder{color:#c9b3c0;letter-spacing:3px;font-size:15px}
.who-pick{margin:13px 0 16px}
.gate-note{margin-top:14px;font-size:11px;color:var(--ink-faint);letter-spacing:.6px}


/* 空态：去掉时间轴竖线 */
.empty-state{line-height:1.8}
.timeline:has(.empty){padding-left:0}
.timeline:has(.empty)::before{display:none}
.hint.small{padding-left:2px}


/* ================= 佳期渐近 ================= */
.coming{display:flex;flex-direction:column;gap:10px}
.cd-item{
  position:relative;display:flex;align-items:center;justify-content:space-between;gap:12px;
  padding:14px 16px;border-radius:18px;
  background:linear-gradient(135deg,rgba(255,255,255,.92),rgba(252,246,255,.92));
  border:1px solid rgba(255,255,255,.95);
  box-shadow:0 1px 2px rgba(70,30,50,.04),0 10px 24px -18px rgba(120,60,90,.55);
  transition:transform .16s,box-shadow .18s;
}
.cd-item:hover{transform:translateY(-1px);box-shadow:0 1px 2px rgba(70,30,50,.05),0 16px 30px -18px rgba(120,60,90,.6)}
.cd-item.top{
  background:linear-gradient(135deg,#ffedf4,#f3eaff);
  border-color:rgba(255,186,214,.85);
}
.cd-item.today{
  background:linear-gradient(135deg,#ffd9e7,#f0dcff);
  border-color:rgba(242,86,141,.5);
  box-shadow:0 14px 30px -18px rgba(242,86,141,.75);
}
.cd-left{min-width:0}
.cd-title{font-size:14.5px;font-weight:650;letter-spacing:.3px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cd-date{font-size:11.5px;color:var(--ink-faint);margin-top:5px;letter-spacing:.5px}
.cd-right{display:flex;align-items:baseline;gap:3px;flex:none}
.cd-label{font-size:11px;color:var(--ink-soft);margin-right:2px}
.cd-num{
  font-family:var(--serif);font-size:30px;line-height:1;font-weight:600;
  background:linear-gradient(180deg,#ff7ea6,#b58cf2);
  -webkit-background-clip:text;background-clip:text;color:transparent;
}
.cd-num.small{font-size:20px}
.cd-unit{font-size:11.5px;color:var(--ink-soft);margin-left:1px}

/* 弹窗里的勾选行 */
.field.check-field{justify-content:flex-start;gap:9px}
.field.check-field input[type=checkbox]{
  width:18px;height:18px;flex:none;accent-color:#f2568d;border-radius:5px;
  -webkit-appearance:auto;padding:0
}
.field.check-field span{font-size:13px;color:var(--ink-soft);width:auto}

/* ================= v5：身份 / 头像 / 评论 ================= */

/* 登录页身份按钮（带小头像） */
.who{display:flex;align-items:center;justify-content:center;gap:7px}
.who-av{
  width:22px;height:22px;border-radius:50%;overflow:hidden;flex:none;
  background:#ffe1ec;display:inline-flex;align-items:center;justify-content:center;
  font-size:11px;color:#a63f68;font-weight:650
}
.who-av img{width:100%;height:100%;object-fit:cover}
.who.active .who-av{background:#fff}

/* hero：两个人并排带头像 */
.couple-row{display:flex;align-items:center;gap:13px;font-size:13px;letter-spacing:1px;opacity:.96}
.couple-person{display:flex;align-items:center;gap:7px}
.av-wrap{display:inline-flex}
.hero-av{
  width:34px;height:34px;border-radius:50%;object-fit:cover;flex:none;
  border:2px solid rgba(255,255,255,.78);
  box-shadow:0 6px 16px rgba(80,20,50,.28)
}

/* 通用头像 */
.av{
  display:inline-flex;align-items:center;justify-content:center;flex:none;
  border-radius:50%;object-fit:cover;overflow:hidden;
  background:linear-gradient(135deg,#ffe0ec,#f2e6ff);
  color:#a63f68;font-weight:650
}
.av-text{font-size:12px}
.av.xs{width:20px;height:20px;font-size:10px}
.av.sm{width:30px;height:30px;font-size:12px}

/* 设置页头像编辑 */
.avatar-editor{display:flex;align-items:center;gap:16px}
.av-wrap.big .hero-av{width:64px;height:64px;border-width:3px;border-color:rgba(255,255,255,.95)}
.av-wrap.big .av-text{width:64px;height:64px;font-size:24px}

/* 留言作者行 */
.note-head{display:flex;align-items:center;gap:9px;margin-bottom:8px}
.note-meta{display:flex;flex-direction:column;line-height:1.25}
.note-meta b{font-size:12.5px;font-weight:650;color:#5a3d4c}
.note-meta span{font-size:10.5px;color:var(--ink-faint)}

/* 事件作者行 */
.ev-by{display:flex;align-items:center;gap:6px;font-size:10.5px;color:var(--ink-faint);margin-top:9px}

/* 相册：图 + 图下评论 */
.photos{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.ph-cell{min-width:0}
.ph-cell figure{
  position:relative;aspect-ratio:1;border-radius:14px;overflow:hidden;
  background:#f3e9ef;box-shadow:var(--shadow-sm);margin:0
}
.ph-cell .cmts{margin-top:5px;gap:3px}
.ph-cell .cmt{font-size:10.5px;gap:4px}
.ph-cell .cmt .av.xs{width:14px;height:14px;font-size:8px}
.ph-cell .cmt-del{display:none}
.ph-cell .cmt-add{font-size:10px;padding:2px 8px}
.ph-cell .cmt-input{font-size:11px;padding:5px 8px}
.ph-cell .cmt-send{padding:5px 9px !important;font-size:11px !important}

/* 心愿块（含评论） */
.wish-block{margin-bottom:8px}
.wish-block .cmts{margin-top:4px}

/* 评论区 */
.cmts{margin-top:9px;display:flex;flex-direction:column;gap:6px}
.cmt{display:flex;align-items:flex-start;gap:7px;font-size:12.5px;line-height:1.55}
.cmt-body{flex:1;min-width:0}
.cmt-name{color:#a5657f;font-weight:600;margin-right:6px;font-size:11.5px}
.cmt-text{color:#4a3541;word-break:break-word;white-space:pre-wrap}
.cmt-del{
  background:transparent;color:#dccbd5;font-size:13px;line-height:1;
  padding:0 3px;flex:none;transition:color .15s
}
.cmt-del:hover{color:#e0526f}
.cmt-add{
  align-self:flex-start;background:transparent;color:#b98aa0;font-size:11.5px;
  padding:3px 10px;border-radius:999px;border:1px solid rgba(200,150,175,.3);
  transition:background .15s,color .15s
}
.cmt-add:hover{background:rgba(255,180,205,.16);color:#e0568c}
.cmt-count{margin-left:4px;opacity:.75}
.cmt-form{display:flex;gap:7px;align-items:center;width:100%;margin-top:3px}
.cmt-input{flex:1;min-width:0;padding:8px 11px;font-size:13px;border-radius:11px;background:#fdf8fa}
.cmt-send{flex:none;padding:8px 13px !important;font-size:12.5px !important;border-radius:10px !important}

/* 登录页身份按钮文字（有头像后不再需要粉色底上的字色偏移） */
.who span:last-child{white-space:nowrap}


/* 无头像时的统一占位：渐变底 + 白心 */
.av-heart{
  background:linear-gradient(135deg,#ffb4cd,#c9a6ff);
  color:#fff;font-size:11px;line-height:1;
  text-shadow:0 1px 3px rgba(150,60,100,.35)
}
.av-heart.xs{font-size:9px}
.av-heart.sm{font-size:14px}
.av-heart.hero-av{font-size:16px;border-color:rgba(255,255,255,.85)}
