/* ═══════════ 黄婷 · 生日快乐 · 星空魔法夜 ═══════════ */
:root{
  --night-0:#05030f;
  --night-1:#0b0a24;
  --night-2:#1a1040;
  --night-3:#2d1b4e;
  --gold:#ffd98a;
  --gold-2:#e9b95c;
  --warm:#ffb56b;
  --ink:#f5eee2;
  --ink-dim:#b8b2c8;
  --paper:#fdf8ee;
  --paper-edge:#e8dcc4;
}
*{margin:0;padding:0;box-sizing:border-box}
html,body{height:100%;overflow:hidden}
body{
  background:radial-gradient(ellipse 120% 90% at 50% 110%, var(--night-3) 0%, var(--night-2) 30%, var(--night-1) 62%, var(--night-0) 100%);
  font-family:'Noto Serif SC','Songti SC','SimSun',serif;
  color:var(--ink);
  user-select:none;
  -webkit-user-select:none;
  cursor:default;
}

#stage{position:fixed;inset:0}

/* ── 夜空 ── */
#stars{position:absolute;inset:0;width:100%;height:100%;opacity:0;pointer-events:none}
#nebula{
  position:absolute;inset:0;pointer-events:none;opacity:.85;
  background:
    radial-gradient(ellipse 46% 34% at 18% 24%, rgba(84,58,150,.34), transparent 70%),
    radial-gradient(ellipse 40% 30% at 82% 18%, rgba(40,80,160,.26), transparent 70%),
    radial-gradient(ellipse 55% 40% at 70% 78%, rgba(150,70,120,.18), transparent 70%);
}
#moon{
  position:absolute;top:12%;right:14%;width:96px;height:96px;border-radius:50%;
  background:radial-gradient(circle at 38% 36%, #fffbe9 0%, #f7ecc8 55%, #e8d8a8 100%);
  box-shadow:0 0 40px rgba(255,244,200,.45),0 0 120px rgba(255,244,200,.22);
  opacity:0;pointer-events:none;
}
#moon-shadow{
  position:absolute;top:-8px;left:-14px;width:100px;height:100px;border-radius:50%;
  background:radial-gradient(circle at 42% 42%, rgba(11,10,36,.96) 52%, rgba(11,10,36,0) 68%);
}
#vignette{
  position:absolute;inset:0;pointer-events:none;z-index:40;
  background:radial-gradient(ellipse 95% 85% at 50% 50%, transparent 55%, rgba(3,2,10,.55) 100%);
  transition:background 1.2s ease;
}
#vignette.deep{background:radial-gradient(ellipse 80% 70% at 50% 50%, rgba(3,2,10,.35) 40%, rgba(2,1,8,.9) 100%)}

/* ── 场景框架 ── */
.scene{
  position:absolute;inset:0;z-index:10;
  display:flex;flex-direction:column;align-items:center;justify-content:center;
  opacity:0;visibility:hidden;
}
.scene.active{visibility:visible;opacity:1}
.scene-head{position:absolute;top:7vh;left:0;right:0;text-align:center;z-index:5}
.scene-head h2{
  font-family:'ZCOOL XiaoWei','Noto Serif SC',serif;font-weight:400;
  font-size:clamp(28px,3.6vw,44px);letter-spacing:.35em;text-indent:.35em;
  color:var(--ink);text-shadow:0 0 24px rgba(255,217,138,.35);
}
.scene-head p{margin-top:14px;font-size:clamp(13px,1.15vw,16px);line-height:2;color:var(--ink-dim);letter-spacing:.14em}
.scene-head b{color:var(--gold);font-weight:600}

/* ═══════════ 第一幕 · 开场 ═══════════ */
#open-hint{
  position:absolute;inset:0;display:flex;flex-direction:column;gap:22px;
  align-items:center;justify-content:center;text-align:center;
  font-size:clamp(15px,1.3vw,19px);letter-spacing:.5em;text-indent:.5em;color:#8d87a8;
  animation:breathe 3.2s ease-in-out infinite;
}
#open-hint span{font-size:clamp(11px,.95vw,14px);letter-spacing:.34em;text-indent:.34em;color:#5f5a7a}
@keyframes breathe{0%,100%{opacity:.55}50%{opacity:1}}

#match{position:absolute;left:calc(34% - 120px);bottom:30%;width:150px;height:40px;opacity:0;pointer-events:none;z-index:6}
#match-stick{
  position:absolute;left:0;top:16px;width:120px;height:5px;border-radius:3px;
  background:linear-gradient(180deg,#d8c9a8,#a3906c);
  transform:rotate(-32deg);transform-origin:left center;
}
#match-head{
  position:absolute;left:112px;top:2px;width:17px;height:17px;border-radius:50% 60% 55% 45%;
  background:radial-gradient(circle at 35% 35%, #8a4a3a, #57241c 70%);
  transform:rotate(-32deg);
}
#spark{
  position:absolute;left:114px;top:-2px;width:12px;height:12px;border-radius:50%;
  background:radial-gradient(circle,#fff,rgba(255,220,150,.9) 40%,transparent 70%);
  opacity:0;transform:scale(.2);
}
#match-flame{
  position:absolute;left:107px;top:-30px;width:26px;height:40px;
  background:radial-gradient(circle at 50% 78%, #fffbe6 0%, #ffd36b 40%, #ff9d3c 72%, rgba(255,120,40,0) 100%);
  border-radius:50% 50% 50% 50%/64% 64% 36% 36%;
  transform-origin:50% 100%;transform:scale(0);
  filter:drop-shadow(0 0 10px #ffb347) drop-shadow(0 0 26px rgba(255,160,60,.6));
  animation:flick .3s ease-in-out infinite alternate;
}
@keyframes flick{
  from{transform:scale(1) rotate(-2.5deg) skewX(-3deg)}
  to{transform:scale(1.07,.93) rotate(3deg) skewX(4deg)}
}
#light-bloom{
  position:absolute;left:36%;bottom:28%;width:60vmax;height:60vmax;border-radius:50%;
  background:radial-gradient(circle, rgba(255,196,110,.5) 0%, rgba(255,170,90,.22) 30%, rgba(120,80,160,.08) 55%, transparent 70%);
  transform:scale(0);opacity:0;pointer-events:none;z-index:5;
}

#title-block{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;opacity:0;z-index:8}
.t-pre{font-size:clamp(12px,1.1vw,15px);letter-spacing:.8em;text-indent:.8em;color:var(--gold);opacity:.85}
.t-name{
  margin:3vh 0 1vh;font-family:'Ma Shan Zheng','Kaiti SC','KaiTi','STKaiti',serif;font-weight:400;
  font-size:clamp(84px,13vw,190px);line-height:1.15;letter-spacing:.08em;
  background:linear-gradient(180deg,#fff8e8 15%,var(--gold) 55%,var(--gold-2) 100%);
  -webkit-background-clip:text;background-clip:text;color:transparent;
  filter:drop-shadow(0 4px 26px rgba(255,200,110,.35));
}
/* 逐字入场时 GSAP 会在 span 上留 transform,Chromium 下 transform 的后代会令
   父元素的 background-clip:text 失效(名字凭空消失)。让每个 span 自带同款
   渐变,绕开此渲染 bug -- 动画中/动画后都可见。 */
.t-name span{
  background:inherit;
  -webkit-background-clip:text;background-clip:text;
}
.t-wish{
  font-family:'ZCOOL XiaoWei','Noto Serif SC',serif;
  font-size:clamp(26px,3.4vw,46px);letter-spacing:.62em;text-indent:.62em;color:var(--ink);
}
.t-wish span{display:inline-block}
.t-sub{margin-top:3.2vh;font-size:clamp(13px,1.1vw,16px);letter-spacing:.4em;text-indent:.4em;color:var(--ink-dim)}
.t-go{
  position:absolute;bottom:9vh;left:0;right:0;
  font-size:clamp(13px,1.1vw,16px);letter-spacing:.3em;color:var(--gold);
  opacity:0;animation:pulse-go 2.4s ease-in-out infinite;
}
@keyframes pulse-go{0%,100%{opacity:.35}50%{opacity:.95}}

/* ═══════════ 第二幕 · 许愿灯 ═══════════ */
#lantern-layer{position:absolute;inset:0;z-index:4}
.lantern{
  position:absolute;width:56px;height:76px;
  background:radial-gradient(ellipse at 50% 62%, #ffdf9e 0%, #ff9d4d 48%, #d96a2e 82%, #a34a22 100%);
  border-radius:44% 44% 40% 40% / 30% 30% 52% 52%;
  box-shadow:0 0 22px rgba(255,170,80,.75),0 0 60px rgba(255,150,70,.35);
  opacity:0;
}
.lantern::after{
  content:'';position:absolute;left:50%;bottom:-7px;transform:translateX(-50%);
  width:22px;height:12px;border-radius:0 0 12px 12px;
  background:linear-gradient(180deg,rgba(60,25,10,.85),rgba(40,16,6,.9));
}
.lantern .wish-word{
  position:absolute;top:-34px;left:50%;transform:translateX(-50%);
  white-space:nowrap;font-size:13px;letter-spacing:.24em;color:#ffd98a;
  text-shadow:0 0 10px rgba(255,180,90,.8);opacity:0;
}
/* ═══════════ 魔法书卷（写愿望） ═══════════ */
#scroll{
  position:absolute;inset:0;z-index:9;display:flex;align-items:center;justify-content:center;
  opacity:0;pointer-events:none;
}
#scroll.show{opacity:1;pointer-events:auto}
#scroll-roll{
  position:relative;width:min(560px,86vw);
  padding:0 26px;text-align:center;
  filter:drop-shadow(0 20px 40px rgba(0,0,0,.5));
}
#scroll-rod-top,#scroll-rod-bottom{
  height:20px;border-radius:10px;margin:0 -30px;
  background:linear-gradient(180deg,#8a5a2e,#5e3a17 60%,#4a2c12);
  box-shadow:inset 0 2px 3px rgba(255,220,160,.4),0 4px 10px rgba(0,0,0,.45);
}
#scroll-rod-bottom{margin-top:-1px}
#scroll-paper{
  position:relative;padding:30px 34px 26px;color:#3a2a18;
  background:
    linear-gradient(180deg, rgba(255,244,214,.98), rgba(244,226,178,.97) 60%, rgba(236,214,160,.97)),
    #f4e2b2;
  border-right:2px solid rgba(180,150,90,.5);
  border-left:2px solid rgba(180,150,90,.5);
  box-shadow:inset 0 0 30px rgba(150,120,60,.35);
}
#scroll-paper::before,#scroll-paper::after{
  content:'';position:absolute;top:0;bottom:0;width:8px;
  background:linear-gradient(90deg,rgba(90,60,25,.35),rgba(236,214,160,0));
}
#scroll-paper::before{left:0}
#scroll-paper::after{right:0;transform:scaleX(-1)}
.scroll-title{font-family:'ZCOOL XiaoWei','Noto Serif SC',serif;font-size:24px;letter-spacing:.5em;text-indent:.5em;color:#7a3b16;margin-bottom:8px}
.scroll-ornament{font-size:14px;letter-spacing:.24em;color:#a8844e;margin-bottom:18px}
#wish-input{
  display:block;width:100%;min-height:120px;box-sizing:border-box;padding:14px 16px;
  font-family:'Ma Shan Zheng','Kaiti SC','KaiTi',serif;font-size:21px;line-height:1.7;color:#3a2a18;
  text-align:center;resize:none;outline:none;border:none;background:transparent;
}
#wish-input::placeholder{color:#b79a63;opacity:.7}
/* 书卷里的按钮不走 .show 机制，需始终可见可点；双类提高优先级压过 .btn-star */
.btn-star.wish-send{position:relative;bottom:auto;left:auto;transform:none;margin-top:8px;opacity:1;pointer-events:auto}
.btn-star.wish-send:active{transform:scale(.94)}

/* ═══════════ 按钮通用 ═══════════ */
.btn-star{
  position:absolute;bottom:12vh;left:50%;transform:translateX(-50%);
  z-index:6; /* 盖过全屏的 #lantern-layer(z-index:4)，否则按钮点不到 */
  padding:14px 34px;border:1px solid rgba(255,217,138,.45);border-radius:999px;
  background:rgba(255,217,138,.07);color:var(--gold);
  font-family:inherit;font-size:15px;letter-spacing:.22em;text-indent:.22em;
  cursor:pointer;opacity:0;pointer-events:none;
  transition:background .35s,box-shadow .35s,border-color .35s;
  backdrop-filter:blur(2px);
}
.btn-star.show{pointer-events:auto}
.btn-star:hover{background:rgba(255,217,138,.16);box-shadow:0 0 26px rgba(255,200,110,.28);border-color:var(--gold)}
.btn-star:active{transform:translateX(-50%) scale(.94)}
.btn-ghost{
  position:absolute;bottom:5.5vh;left:50%;transform:translateX(-50%);
  z-index:6;
  padding:8px 22px;border:none;border-radius:999px;background:transparent;
  color:#8d87a8;font-family:inherit;font-size:13px;letter-spacing:.2em;
  cursor:pointer;opacity:0;pointer-events:none;transition:color .3s;
}
.btn-ghost.show{pointer-events:auto}
.btn-ghost:hover{color:var(--gold)}

/* 写完愿望后"愿望已寄出"按钮：无边框、文字式、呼吸脉搏（同首屏提示） */
#lantern-go{
  position:absolute;top:50%;bottom:auto;left:50%;transform:translate(-50%,-50%);
  z-index:6; /* 盖过全屏 #lantern-layer(z-index:4)，否则点不中 */
  padding:6px 12px;border:none;border-radius:0;background:transparent;
  box-shadow:none;backdrop-filter:none;cursor:pointer;
  color:var(--gold);font-family:inherit;font-size:clamp(15px,1.4vw,20px);
  letter-spacing:.3em;text-indent:.3em;
  opacity:0;visibility:hidden;              /* 隐藏，等书写后由 .show 点亮 */
  animation:pulse-go 2.4s ease-in-out infinite;
}
#lantern-go.show{visibility:visible}
#lantern-go:active{transform:translate(-50%,-50%) scale(.96)}

/* ═══════════ 第三幕 · 蛋糕 ═══════════ */
#cake-wrap{position:relative;margin-top:2vh;transform-origin:50% 100%}
#cake-glow{
  position:absolute;left:50%;top:-30px;transform:translateX(-50%);
  width:420px;height:420px;border-radius:50%;pointer-events:none;
  background:radial-gradient(circle, rgba(255,190,110,.30) 0%, rgba(255,170,90,.12) 38%, transparent 65%);
  filter:blur(4px);
}
#cake{position:relative;width:340px;height:300px}

#candles{position:absolute;left:50%;transform:translateX(-50%);bottom:214px;display:flex;gap:34px;z-index:6}
.candle{
  position:relative;width:11px;height:58px;border-radius:4px 4px 2px 2px;
  background:repeating-linear-gradient(-32deg,#f8f1e4 0 6px,#e79ab2 6px 12px);
  box-shadow:inset -3px 0 4px rgba(120,60,60,.25);
}
.candle::after{ /* 灯芯 */
  content:'';position:absolute;top:-7px;left:50%;transform:translateX(-50%);
  width:2px;height:8px;background:#3a2a20;border-radius:1px;
}
.flame-wrap{
  position:absolute;top:-32px;left:50%;transform:translateX(-50%);
  width:16px;height:28px;transform-origin:50% 100%;
  transition:transform .5s cubic-bezier(.34,1.56,.64,1);
}
.flame{
  width:100%;height:100%;
  background:radial-gradient(circle at 50% 78%, #fffbe6 0%, #ffd36b 42%, #ff9d3c 74%, rgba(255,120,40,0) 100%);
  border-radius:50% 50% 50% 50%/64% 64% 36% 36%;
  transform-origin:50% 100%;
  filter:drop-shadow(0 0 8px #ffb347) drop-shadow(0 0 20px rgba(255,160,60,.55));
  animation:flick .32s ease-in-out infinite alternate;
}
.candle:nth-child(2) .flame{animation-duration:.27s;animation-delay:-.12s}
.candle:nth-child(3) .flame{animation-duration:.38s;animation-delay:-.05s}
.candle:nth-child(4) .flame{animation-duration:.29s;animation-delay:-.2s}
.candle:nth-child(5) .flame{animation-duration:.35s;animation-delay:-.16s}
.candle.out .flame-wrap{transform:translateX(-50%) scale(0)}
#cake.windy .flame-wrap{
  transform:translateX(-50%) translateX(-5px) skewX(-20deg) scale(.82,.92);
  transition:transform .45s cubic-bezier(.22,.9,.36,1);
}
#cake.windy .flame{animation-duration:.11s}

.smoke{
  position:absolute;top:-30px;left:50%;width:8px;height:8px;border-radius:50%;
  background:radial-gradient(circle, rgba(200,195,210,.55), transparent 70%);
  opacity:0;pointer-events:none;
}

.tier{position:absolute;left:50%;transform:translateX(-50%);border-radius:14px 14px 10px 10px}
.tier-bot{bottom:26px;width:340px;height:96px;
  background:linear-gradient(180deg,#6b4a86 0%,#54366d 60%,#472d5c 100%);
  box-shadow:inset 0 -14px 22px rgba(20,8,40,.5), inset 0 8px 12px rgba(255,220,255,.08);
}
.tier-mid{bottom:118px;width:260px;height:84px;
  background:linear-gradient(180deg,#865fa4 0%,#6b4a86 60%,#5d3f7a 100%);
  box-shadow:inset 0 -12px 18px rgba(20,8,40,.45), inset 0 8px 12px rgba(255,220,255,.1);
}
.tier-top{bottom:198px;width:184px;height:74px;
  background:linear-gradient(180deg,#a17cb8 0%,#865fa4 60%,#755193 100%);
  box-shadow:inset 0 -10px 16px rgba(20,8,40,.4), inset 0 8px 12px rgba(255,220,255,.12);
}
/* 奶油糖霜：顶部一层 + 垂下的波浪滴 */
.icing{
  position:absolute;left:-4px;right:-4px;top:-10px;height:30px;
  background:
    radial-gradient(circle 14px at 14px 100%, #fff4e2 98%, transparent) -14px 0/42px 26px repeat-x,
    linear-gradient(180deg,#fff8ea,#ffead0);
  border-radius:12px 12px 0 0;
  filter:drop-shadow(0 3px 5px rgba(30,10,50,.3));
}
.tier-top .icing{border-radius:26px 26px 0 0}
/* 金边 */
.tier::before{
  content:'';position:absolute;left:14px;right:14px;bottom:12px;height:2px;border-radius:2px;
  background:linear-gradient(90deg,transparent,rgba(255,217,138,.5),transparent);
}
/* 小星星装饰 */
.tier::after{
  content:'✦';position:absolute;color:rgba(255,225,160,.6);font-size:11px;
}
.tier-mid::after{left:22px;top:34px}
.tier-bot::after{right:26px;top:38px;font-size:13px}

#plate{
  position:absolute;left:50%;transform:translateX(-50%);bottom:8px;
  width:400px;height:26px;border-radius:50%;
  background:radial-gradient(ellipse at 50% 38%, #4a4258 0%, #332c44 55%, #241f33 100%);
  box-shadow:0 10px 30px rgba(0,0,0,.55);
}
#plate::after{
  content:'';position:absolute;left:50%;top:4px;transform:translateX(-50%);
  width:300px;height:12px;border-radius:50%;
  background:radial-gradient(ellipse, rgba(255,217,138,.28), transparent 70%);
}

#wish-received{
  position:absolute;top:22vh;left:0;right:0;text-align:center;opacity:0;pointer-events:none;
  font-family:'Great Vibes','Brush Script MT','Segoe Script',cursive;
  font-size:clamp(34px,4.2vw,60px);letter-spacing:.03em;color:var(--gold);
  text-shadow:0 0 26px rgba(255,200,110,.5);z-index:20;
}

/* ═══════════ 第四幕 · 礼物盒 & 信 ═══════════ */
#gift-area{position:relative;margin-top:4vh;display:flex;align-items:flex-end;justify-content:center;height:280px}
#gift-box{position:relative;width:190px;height:170px;cursor:pointer;z-index:6}
#gift-body{
  position:absolute;bottom:0;width:180px;height:118px;border-radius:8px;
  background:linear-gradient(160deg,#3a2f6e 0%,#2b2258 55%,#241c4a 100%);
  box-shadow:inset 0 10px 16px rgba(255,220,255,.08), inset 0 -10px 18px rgba(5,2,20,.5), 0 16px 40px rgba(0,0,0,.5);
}
.ribbon{
  position:absolute;left:50%;top:0;bottom:0;transform:translateX(-50%);width:30px;
  background:linear-gradient(90deg,#c98f2e,#f3c96b 45%,#c98f2e);
  box-shadow:0 0 14px rgba(255,210,120,.35);
}
#gift-lid{
  position:absolute;bottom:106px;left:-5px;width:190px;height:44px;border-radius:9px;z-index:2;
  background:linear-gradient(160deg,#463a85 0%,#332a63 60%,#2b2258 100%);
  box-shadow:inset 0 6px 10px rgba(255,220,255,.1), 0 8px 18px rgba(0,0,0,.4);
  transform-origin:50% 100%;
}
#gift-lid::after{
  content:'';position:absolute;left:50%;top:0;bottom:0;transform:translateX(-50%);width:30px;
  background:linear-gradient(90deg,#c98f2e,#f3c96b 45%,#c98f2e);
}
.bow{position:absolute;left:50%;top:-26px;transform:translateX(-50%);z-index:3}
.bow::before,.bow::after{
  content:'';position:absolute;top:6px;width:34px;height:26px;
  border:7px solid #f3c96b;border-radius:50% 50% 50% 50%/60% 60% 40% 40%;
  box-shadow:0 0 10px rgba(255,210,120,.4);
}
.bow::before{right:50%;transform:rotate(-24deg);border-color:#e0b04e #e0b04e #f3c96b #f3c96b}
.bow::after{left:50%;transform:rotate(24deg) scaleX(-1);border-color:#f3c96b #e0b04e #e0b04e #f3c96b}
.bow i{
  position:absolute;left:50%;top:10px;transform:translateX(-50%);
  width:16px;height:16px;border-radius:50%;
  background:radial-gradient(circle at 35% 35%,#ffe6a8,#d9a83f);
  box-shadow:0 0 10px rgba(255,210,120,.5);z-index:2;
}

/* 信纸 */
/* 第四幕展开后：左信纸 + 右边凯蒂托蛋糕 */
#letter-wrap{
  position:absolute;inset:0;z-index:15;pointer-events:none;
  display:flex;align-items:center;justify-content:center;gap:6vw;
  padding:8vh 6vw 6vh;
}
#letter{
  flex:1 1 48%;max-width:550px;min-width:0;height:100%;
  display:flex;align-items:center;justify-content:center;
  opacity:0;pointer-events:none;
}
#letter.open{pointer-events:auto}
#kitty{
  flex:0 0 52%;display:flex;align-items:center;justify-content:center;
  opacity:0;filter:drop-shadow(0 18px 30px rgba(0,0,0,.4));
}
#kitty img{display:block;width:min(100%,570px);max-height:470px;height:auto;border-radius:14px}
.letter-inner{
  position:relative;max-width:520px;width:100%;max-height:100%;overflow-y:auto;
  padding:56px 58px 40px;
  background:
    radial-gradient(ellipse 80% 12% at 50% 0%, rgba(233,185,92,.14), transparent),
    repeating-linear-gradient(0deg, rgba(180,150,90,.06) 0 1px, transparent 1px 44px),
    linear-gradient(160deg,#fdf8ee 0%,#f7efdd 60%,#f2e7cd 100%);
  border:1px solid var(--paper-edge);border-radius:6px;
  box-shadow:0 0 0 6px rgba(253,248,238,.06), 0 30px 80px rgba(0,0,0,.6), 0 0 60px rgba(255,200,110,.12);
  color:#4a3b28;text-align:left;
  scrollbar-width:thin;scrollbar-color:#d8c9a8 transparent;
}
.letter-inner::before{
  content:'';position:absolute;inset:10px;border:1px solid rgba(201,164,84,.5);border-radius:3px;pointer-events:none;
}
.letter-head{
  text-align:center;font-family:'ZCOOL XiaoWei','Noto Serif SC',serif;
  font-size:15px;letter-spacing:.5em;text-indent:.5em;color:#a4803a;margin-bottom:30px;
}
.letter-body{font-family:"Kaiti SC","KaiTi","STKaiti","Songti SC",'Noto Serif SC',serif;font-size:21px;line-height:2.15;letter-spacing:.04em}
.letter-body p{margin-bottom:1.1em;text-indent:0}
.letter-body .salutation{text-indent:0;font-size:23px}
.letter-body .sign{text-align:right;margin-top:2em;margin-bottom:0;color:#6d5a3c}
.letter-body .date{text-align:right;color:#8a7654;font-size:17px;margin-bottom:0}
.letter-foot{
  margin-top:34px;text-align:center;font-size:13px;letter-spacing:.5em;text-indent:.5em;color:#b39253;
}
.seal{
  position:absolute;top:-26px;right:44px;z-index:5;
  width:64px;height:64px;border-radius:50%;
  background:radial-gradient(circle at 38% 32%, #c0392b 0%, #92251a 55%, #7a1f15 100%);
  box-shadow:0 6px 16px rgba(0,0,0,.45), inset 0 0 12px rgba(0,0,0,.35);
  display:flex;align-items:center;justify-content:center;
  transform:rotate(-8deg);transform-origin:50% 50%;
}
.seal span{
  font-family:'Ma Shan Zheng','Kaiti SC','KaiTi',serif;font-size:34px;color:#f2c9b8;
  text-shadow:0 1px 2px rgba(60,5,0,.6);
}
#replay{position:static;display:block;margin:26px auto 0}

/* ── 鼠标星尘 ── */
#stardust-layer{position:absolute;inset:0;pointer-events:none;z-index:30;overflow:hidden}
.sparkle{
  position:absolute;width:6px;height:6px;color:var(--gold);
  text-shadow:0 0 8px rgba(255,215,130,.9);font-size:10px;pointer-events:none;
}

/* ── 音乐按钮 ── */
#music-btn{
  position:absolute;top:22px;right:26px;z-index:50;
  width:44px;height:44px;border-radius:50%;
  border:1px solid rgba(255,217,138,.35);background:rgba(10,8,28,.5);
  color:var(--gold);font-size:18px;cursor:pointer;
  opacity:.45;transition:opacity .3s,box-shadow .3s;
  backdrop-filter:blur(3px);
}
#music-btn:hover{opacity:1;box-shadow:0 0 18px rgba(255,210,120,.3)}
#music-btn.off{color:#6f6888;text-decoration:line-through}

/* 窄屏兜底 */
@media (max-width:760px){
  .letter-inner{padding:40px 26px 30px}
  .letter-body{font-size:18px}
  #candles{gap:16px;bottom:206px}
  #cake{transform:scale(.82)}
  #moon{width:64px;height:64px;right:9%}
}
