/* ==========================================================================
   鱼宝花园 · 花园场景样式
   来源：design/原型-花园互动设计-v2.html（v2.1）逐条移植，只去掉演示外壳
   （手机框 / 说明面板 / 演示按钮 / 原型 tabbar / 原型 toast）。
   落地差异（与原型对照时注意）：
     · 夜间作用域由 `.phone.night` 改为 `.garden-screen.night`（原型带手机框）
     · `.card` / `.muted` / `.chip` 基础样式在 css/styles.css，此处不重复
     · 新增 `.garden-pills` / `.blooms` / `.garden-hint`（落地新增的容器）
   ========================================================================== */

/* 花园屏根：昼夜类挂在它上面 */
.garden-screen{ position:relative; }

/* ==========================================================================
   场景 —— 天空通到顶，草地压底
   ========================================================================== */
.scene{
  position:relative; height:330px; border-radius:var(--r); overflow:hidden; margin-bottom:12px;
  border:2.5px solid var(--ink); box-shadow:var(--hard);
  background:linear-gradient(180deg,var(--sky-1) 0%, var(--sky-2) 46%, var(--sky-3) 68%, #E6F4D8 100%);
  touch-action:pan-y; user-select:none; -webkit-user-select:none;
  transition:background .8s ease;
}
.garden-screen.night .scene{ background:linear-gradient(180deg,var(--sky-n1) 0%, var(--sky-n2) 48%, var(--sky-n3) 70%, #35406B 100%); }

/* --- 天空元素 --- */
.sun{
  position:absolute; right:20px; top:64px; width:52px; height:52px;   /* 下移避开右上角两个 icbtn */ border-radius:50%;
  background:radial-gradient(circle at 36% 34%, #FFF3C4, #FFD84D 70%);
  border:2.5px solid var(--ink); box-shadow:0 0 0 8px rgba(255,216,77,.26);
  transition:all .8s ease;
}
.garden-screen.night .sun{
  background:radial-gradient(circle at 38% 36%, #FDFBEE, #D9D4BC);
  box-shadow:0 0 0 11px rgba(240,238,220,.13);
}
.garden-screen.night .sun::after{ content:''; position:absolute; left:11px; top:3px; width:38px; height:38px; border-radius:50%; background:var(--sky-n2); }
.cloud{ position:absolute; background:#fff; border-radius:999px; border:2.5px solid var(--ink); }
.cl1{ width:66px; height:24px; left:26px; top:30px; animation:drift 24s ease-in-out infinite; }
.cl1::before{ content:''; position:absolute; left:11px; top:-13px; width:28px; height:20px; border-radius:999px; background:#fff; border:2.5px solid var(--ink); border-bottom:none; }
.cl2{ width:46px; height:17px; left:118px; top:64px; opacity:.82; animation:drift 33s ease-in-out infinite reverse; }
@keyframes drift{ 0%,100%{ transform:translateX(0); } 50%{ transform:translateX(30px); } }
.garden-screen.night .cloud{ opacity:.25; }
.stars{ position:absolute; inset:0; opacity:0; transition:opacity .8s ease; pointer-events:none; }
.garden-screen.night .stars{ opacity:1; }
.stars i{ position:absolute; width:2.6px; height:2.6px; border-radius:50%; background:#fff; animation:twk 3.2s ease-in-out infinite; }
@keyframes twk{ 0%,100%{ opacity:.22; transform:scale(.7); } 50%{ opacity:1; transform:scale(1); } }

/* --- 草地 --- */
.hill{
  position:absolute; left:-4%; right:-4%; bottom:-2px; height:120px;
  background:linear-gradient(180deg,var(--grass-l),var(--grass));
  border-radius:48% 52% 0 0 / 40px 40px 0 0; border-top:2.5px solid var(--ink);
  transition:filter .8s ease;
}
.hill2{
  position:absolute; left:-24%; right:-24%; bottom:-2px; height:78px;
  background:linear-gradient(180deg,var(--grass),var(--grass-d));
  border-radius:50% 50% 0 0 / 30px 30px 0 0; border-top:2.5px solid var(--ink);
  transition:filter .8s ease;
}
.garden-screen.night .hill, .garden-screen.night .hill2{ filter:brightness(.56) saturate(.68) hue-rotate(-12deg); }
/* 草丛点缀（让草地不是一块塑料） */
.tufts{ position:absolute; left:0; right:0; bottom:2px; height:24px; pointer-events:none; z-index:3; }
.tuft{ position:absolute; bottom:0; width:22px; height:22px; }
.tuft i{ position:absolute; bottom:0; width:4px; height:15px; border-radius:3px 3px 0 0; background:var(--grass-d); opacity:.75; transform-origin:50% 100%; }
.tuft i:nth-child(1){ left:3px; transform:rotate(-24deg); }
.tuft i:nth-child(2){ left:9px; height:19px; }
.tuft i:nth-child(3){ left:15px; transform:rotate(24deg); }
.garden-screen.night .tuft i{ background:#3E6B2C; }

/* --- 永久花丛：种子种下的花，永久留在花园（决策 4） --- */
/* 层叠顺序（底层→上层）：hill(0) → blooms(1) → tufts(3) → plt(3) → critters(5) → pet(6) → secret(8) → study(9) → hud(11) → bubble(12) → fx(13) */
.blooms{ position:absolute; left:0; right:0; bottom:6px; height:60px; pointer-events:none; z-index:1; }
.blooms .bl{ position:absolute; bottom:0; font-size:19px; line-height:1; transform-origin:50% 100%; animation:bobY 2.4s ease-in-out infinite; }
@keyframes bobY{ 0%,100%{ transform:translate(-50%,0); } 50%{ transform:translate(-50%,-5px); } }

/* --- 植物 --- */
.plt{ position:absolute; bottom:22px; width:52px; height:104px; transform-origin:50% 100%;
  transition:left .55s var(--out); cursor:pointer; z-index:3; }
.plt svg{ width:100%; height:100%; display:block; overflow:visible; }
.plt .stem{ transform-origin:50% 100%; transition:transform .6s var(--pop); }
.plt .lf{ opacity:0; transition:opacity .45s ease, transform .45s var(--pop); transform-origin:50% 100%; }
.plt[data-stage="0"] .stem{ transform:scaleY(.1); }
.plt[data-stage="1"] .stem{ transform:scaleY(.34); }
.plt[data-stage="1"] .lf1{ opacity:1; }
.plt[data-stage="2"] .stem{ transform:scaleY(.62); }
.plt[data-stage="2"] .lf1,.plt[data-stage="2"] .lf2{ opacity:1; }
.plt[data-stage="3"] .stem{ transform:scaleY(.86); }
.plt[data-stage="3"] .lf1,.plt[data-stage="3"] .lf2,.plt[data-stage="3"] .lf3{ opacity:1; }
.plt[data-stage="4"] .stem{ transform:scaleY(1); }
.plt[data-stage="4"] .lf1,.plt[data-stage="4"] .lf2,.plt[data-stage="4"] .lf3{ opacity:1; }
.plt .bloom{ opacity:0; transform-origin:50% 100%; transform:scale(.3); transition:all .55s var(--pop); }
.plt[data-stage="3"] .bloom{ opacity:.78; transform:scale(.76); }
.plt[data-stage="4"] .bloom{ opacity:1; transform:scale(1); }
.plt .soil{ position:absolute; bottom:-3px; left:50%; transform:translateX(-50%); width:30px; height:10px; border-radius:50%;
  background:rgba(88,68,44,.3); border:2px solid rgba(46,74,56,.35); }
.plt.hit{ animation:pltShake .45s ease; }
@keyframes pltShake{ 0%,100%{ transform:rotate(0); } 25%{ transform:rotate(-5deg); } 60%{ transform:rotate(4deg); } }
.plt .ripe{ position:absolute; top:-8px; left:50%; transform:translateX(-50%); font-size:18px; opacity:0; transition:opacity .3s; }
.plt[data-stage="4"] .ripe{ opacity:1; animation:bobY 1.7s ease-in-out infinite; }
/* 需要浇水时植物冒汗滴提示 */
.plt.thirsty::after{ content:'💧'; position:absolute; top:-16px; left:50%; transform:translateX(-50%);
  font-size:15px; animation:bobY 1.5s ease-in-out infinite; filter:drop-shadow(0 1px 0 rgba(46,74,56,.3)); }

/* --- 活物层 --- */
.critters{ position:absolute; inset:0; z-index:5; pointer-events:none; }
.critter{ position:absolute; z-index:5; will-change:transform; }
/* 蝴蝶 */
.bf{ width:34px; height:28px; cursor:pointer; touch-action:none; }
.bf svg{ width:100%; height:100%; display:block; overflow:visible; }
.bf .wing-l{ transform-box:fill-box; transform-origin:100% 50%; animation:flapL .26s ease-in-out infinite alternate; }
.bf .wing-r{ transform-box:fill-box; transform-origin:0% 50%; animation:flapR .26s ease-in-out infinite alternate; }
@keyframes flapL{ from{ transform:scaleX(1); } to{ transform:scaleX(.32); } }
@keyframes flapR{ from{ transform:scaleX(1); } to{ transform:scaleX(.32); } }
.bf:active svg{ transform:scale(.86); }              /* 作用在 svg 上：不干扰内层飞行 transform */
.bf svg{ transition:transform .12s var(--pop); }
/* 瓢虫 */
.lb{ width:22px; height:19px; font-size:17px; line-height:1; cursor:pointer; }
/* 萤火虫（仅夜晚） */
.ff{ width:14px; height:14px; border-radius:50%; background:radial-gradient(circle at 40% 40%,#FFF8C8,#FFE55A);
  box-shadow:0 0 12px 4px rgba(255,229,90,.55); opacity:0; transition:opacity .8s ease; cursor:pointer; }
.garden-screen.night .ff{ opacity:1; }

/* --- 元宝 --- */
.pet-box{ position:absolute; bottom:26px; left:0; will-change:transform; z-index:6; touch-action:pan-y; cursor:grab; }
.pet-box:active{ cursor:grabbing; }
.pet-box svg{ display:block; overflow:visible; }
.pet-shadow{ position:absolute; bottom:-7px; left:50%; transform:translateX(-50%); width:82px; height:14px; border-radius:50%;
  background:rgba(46,74,56,.2); filter:blur(3px); animation:shdw 3.4s ease-in-out infinite; }
@keyframes shdw{ 0%,100%{ transform:translateX(-50%) scale(1); opacity:.2; } 50%{ transform:translateX(-50%) scale(.86); opacity:.11; } }
.pet-bob{ animation:float 3.4s ease-in-out infinite; }
@keyframes float{ 0%,100%{ transform:translateY(0); } 50%{ transform:translateY(-7px); } }
.pet-bob.run{ animation:runBob .3s linear infinite; }
@keyframes runBob{ 0%,100%{ transform:translateY(0) rotate(-1.6deg); } 50%{ transform:translateY(-10px) rotate(1.6deg); } }
.pet-bob.sleep{ animation:sleepBob 4.6s ease-in-out infinite; }
@keyframes sleepBob{ 0%,100%{ transform:translateY(0) scaleY(1); } 50%{ transform:translateY(3px) scaleY(.955); } }

.eye-g{ transform-box:fill-box; transform-origin:center; transition:transform .09s ease; }
.blink .eye-g{ transform:scaleY(.08); }
.eyeClosed{ opacity:0; transition:opacity .09s; }
.blink .eyeClosed{ opacity:1; }
.pupil{ transition:transform .28s var(--out); }
.brow-g{ transform-box:fill-box; transform-origin:center; transition:transform .3s ease; }
.head-g{ transition:transform .26s var(--out); }
.ear-g{ transform-box:fill-box; transition:transform .24s var(--pop); }
.ear-l{ transform-origin:78% 88%; }
.ear-r{ transform-origin:22% 88%; }
.tail-g{ transform-box:fill-box; transform-origin:8% 90%; }
.wag-fast .tail-g{ animation:wag .28s ease-in-out infinite; }
.wag-slow .tail-g{ animation:wag 1.15s ease-in-out infinite; }
@keyframes wag{ 0%,100%{ transform:rotate(-14deg); } 50%{ transform:rotate(14deg); } }
.tongue{ opacity:0; transition:opacity .2s; }
.eat .tongue,.love .tongue{ opacity:1; }
.blush{ opacity:0; transition:opacity .3s; }
.love .blush,.happy .blush{ opacity:.9; }
/* 情绪：难过/蔫（不惩罚，只心疼） */
.sad .head-g{ transform:translateY(2.6px) rotate(-3deg); }
.sad .brow-g{ transform:translateY(1.4px) rotate(-8deg); }
.sad .eye-g{ transform:scaleY(.82); }
/* 庆祝：原地跳 */
.celebrate .head-g{ animation:celebHead .5s ease-in-out infinite; }
@keyframes celebHead{ 0%,100%{ transform:translateY(0); } 50%{ transform:translateY(-4px); } }

/* --- 台词气泡 --- */
.bubble{ position:absolute; z-index:12; left:50%; top:56px; transform:translateX(-50%) scale(.85); opacity:0;
  background:var(--paper); border:2.5px solid var(--ink); border-radius:16px; padding:8px 14px;
  font-size:14px; font-weight:800; color:var(--ink); box-shadow:0 3px 0 var(--ink);
  max-width:78%; text-align:center; line-height:1.42;
  transition:opacity .22s, transform .22s var(--pop); pointer-events:none; }
.bubble.on{ opacity:1; transform:translateX(-50%) scale(1); }
.bubble::after{ content:''; position:absolute; bottom:-10px; left:50%; margin-left:-8px; width:0; height:0;
  border-left:8px solid transparent; border-right:8px solid transparent; border-top:10px solid var(--ink); }
/* 元宝"想要"气泡：用不同色强调"它主动找你" */
.bubble.want{ background:var(--sun); }

/* --- HUD --- */
.hud{ position:absolute; left:12px; top:12px; z-index:11; background:var(--paper); border:2.5px solid var(--ink);
  border-radius:15px; padding:7px 12px; box-shadow:0 3px 0 var(--ink); }
.hud .nm{ font-weight:800; font-size:14px; color:var(--ink); }
.hud .lv{ font-size:11.5px; color:var(--text-2); margin-top:2px; font-weight:700; }
.hud-r{ position:absolute; right:12px; top:12px; z-index:11; display:flex; gap:7px; }
.icbtn{ width:38px; height:38px; border-radius:13px; border:2.5px solid var(--ink); background:var(--paper);
  box-shadow:0 3px 0 var(--ink); font-size:17px; cursor:pointer; display:flex; align-items:center; justify-content:center;
  transition:transform .1s, box-shadow .1s; font-family:inherit; }
.icbtn:active{ transform:translateY(3px); box-shadow:0 0 0 var(--ink); }

/* --- 小书角：催学第 2 档「它先动」的视觉锚点 --- */
.study{ position:absolute; top:66px; left:12px; z-index:9;   /* 避开右上角太阳，落在 HUD 正下方 */ display:flex; align-items:center; gap:5px;
  padding:4px 9px; border-radius:12px; border:2.5px solid var(--ink); background:var(--paper);
  box-shadow:0 3px 0 var(--ink); font-size:11.5px; font-weight:800; color:var(--ink); opacity:.5;
  transition:opacity .35s ease, transform .35s var(--out); pointer-events:none; }
.study.on{ opacity:1; transform:scale(1.08); }
.study .e{ font-size:15px; }

/* --- 粒子层 --- */
.fx-layer{ position:absolute; inset:0; pointer-events:none; z-index:13; overflow:hidden; }
.fx{ position:absolute; font-size:20px; line-height:1; will-change:transform,opacity; }

/* --- 隐藏惊喜 --- */
.secret{ position:absolute; width:46px; height:46px; display:flex; align-items:center; justify-content:center;
  font-size:0; cursor:pointer; z-index:8; }
.secret::before{ content:''; width:10px; height:10px; border-radius:50%; background:rgba(255,255,255,.85);
  border:2px solid rgba(255,216,77,.9); animation:pulseS 2s ease-in-out infinite; }
@keyframes pulseS{ 0%,100%{ transform:scale(1); opacity:.72; } 50%{ transform:scale(1.5); opacity:1; } }
.secret.found{ pointer-events:none; }
.secret.found::before{ display:none; }

/* --- 彩虹 / 流星 --- */
.rainbow{ position:absolute; left:50%; bottom:52px; transform:translateX(-50%) scale(.5); opacity:0;
  transition:opacity .7s ease, transform .9s var(--pop); pointer-events:none; }
.rainbow.on{ opacity:.9; transform:translateX(-50%) scale(1); }
.meteor{ position:absolute; width:92px; height:3px; border-radius:3px; pointer-events:none;
  background:linear-gradient(90deg,rgba(255,255,255,0),#fff); opacity:0; }

/* ==========================================================================
   花园小事（花园内的轻目标，不发星星 —— 铁律 1）
   ========================================================================== */
.quest{
  background:linear-gradient(180deg,#EAF9E0,#DDF3CE);
  border:2.5px solid var(--ink); border-radius:var(--r); padding:13px 15px; margin-bottom:12px;
  box-shadow:var(--hard); transition:background .4s ease;
}
.quest.done{ background:linear-gradient(180deg,#FFF6D8,#FFEBAE); }
.q-h{ display:flex; align-items:center; justify-content:space-between; margin-bottom:9px; }
.q-t{ font-size:15px; font-weight:800; color:var(--ink); }
.q-n{ font-size:13px; font-weight:800; color:var(--ink); background:var(--paper); border:2px solid var(--ink);
  border-radius:999px; padding:2px 10px; font-variant-numeric:tabular-nums; }
.q-list{ display:flex; flex-direction:column; gap:7px; }
.q-item{ display:flex; align-items:center; gap:9px; font-size:14px; font-weight:700; color:var(--ink-2); }
.q-item .bx{
  width:23px; height:23px; flex:0 0 23px; border-radius:8px; border:2.5px solid var(--ink); background:var(--paper);
  display:flex; align-items:center; justify-content:center; font-size:14px; transition:all .3s var(--pop);
}
.q-item.ok{ color:var(--ink); }
.q-item.ok .bx{ background:var(--grass); transform:scale(1.08); }
.q-item.ok .tx{ text-decoration:line-through; text-decoration-thickness:2px; opacity:.72; }

/* ==========================================================================
   道具托盘 —— 玩具按钮（底边实色，按下位移）
   ========================================================================== */
.tray{ display:grid; grid-template-columns:repeat(4,1fr); gap:9px; margin-bottom:12px; }
.prop{
  height:66px; border-radius:var(--r-sm); border:2.5px solid var(--ink); background:var(--paper);
  box-shadow:var(--hard); font-size:27px; cursor:grab; display:flex; flex-direction:column;
  align-items:center; justify-content:center; gap:0; touch-action:none; font-family:inherit;
  transition:transform .1s, box-shadow .1s, background .15s;
}
.prop small{ font-size:11px; font-weight:700; color:var(--ink-2); margin-top:1px; }
.prop:active{ transform:translateY(4px); box-shadow:0 0 0 var(--ink); cursor:grabbing; }
.prop.on{ background:var(--sun); }
.prop-drag{ position:fixed; z-index:999; font-size:34px; pointer-events:none; transform:translate(-50%,-50%) scale(1.18);
  filter:drop-shadow(0 5px 0 rgba(46,74,56,.35)); }

/* ==========================================================================
   亲密度 / 图鉴
   ========================================================================== */
.bond-top{ display:flex; align-items:baseline; justify-content:space-between; margin-bottom:8px; }
.bond-top .lab{ font-size:14px; font-weight:700; color:var(--ink-2); }
.bond-top .val{ font-size:14px; font-weight:800; color:var(--coral-d); font-variant-numeric:tabular-nums; }
.bond-track{ position:relative; height:19px; background:var(--paper-2); border:2.5px solid var(--ink);
  border-radius:999px; overflow:hidden; }
.bond-track > i{ position:absolute; left:0; top:0; bottom:0; border-radius:999px;
  background:linear-gradient(90deg,#FFAE9E,var(--coral)); transition:width .45s var(--out); }
.bond-note{ font-size:12.5px; color:var(--text-2); margin-top:9px; line-height:1.55; font-weight:700; }
.bond-note.warn{ color:var(--coral-d); }
.chips{ display:flex; flex-wrap:wrap; gap:7px; }
.chips .chip.on{ background:var(--sun); color:var(--ink); border-color:var(--ink); box-shadow:0 2px 0 var(--ink); }
.card-h{ display:flex; align-items:center; justify-content:space-between; margin-bottom:10px; }
.card-h h3{ margin:0; font-size:15px; font-weight:800; color:var(--ink); }

/* ==========================================================================
   花园屏顶部小徽章（亲密度 / 种子）—— 落地新增
   ========================================================================== */
.garden-pills{ display:flex; gap:8px; margin:0 2px 10px; }
.garden-pills .pill{
  display:inline-flex; align-items:center; gap:5px;
  background:var(--paper); border:2.5px solid var(--ink); border-radius:999px;
  padding:4px 12px; font-size:13px; font-weight:800; color:var(--ink); box-shadow:0 2px 0 var(--ink);
}
.garden-pills .pill.heart{ color:var(--coral-d); }

/* ==========================================================================
   无障碍：尊重「减弱动态效果」（铁律 5）——关常驻循环，保留交互反馈
   ========================================================================== */
@media (prefers-reduced-motion: reduce){
  .pet-bob,.pet-bob.run,.pet-bob.sleep,.pet-shadow,
  .wag-slow .tail-g,.wag-fast .tail-g,.bf .wing-l,.bf .wing-r,
  .cloud,.stars i,.secret::before,.plt .ripe,.plt.hit,.celebrate .head-g,.plt.thirsty::after,
  .blooms .bl{ animation:none !important; }
  .fx{ display:none !important; }
}

/* ==========================================================================
   v3 新增：奖励小游戏（卡片 / 按钮 / 顶部 HUD / 游戏层）
   铁律 1 不变：小游戏【绝不发星星，也绝不发种子】——只加亲密度 + 图鉴 + 永久花。
   ========================================================================== */
.games{
  background:linear-gradient(180deg,#FFF1D6,#FFE3B0);
  border:2.5px solid var(--ink); border-radius:var(--r); padding:13px 15px; margin-bottom:12px;
  box-shadow:var(--hard); transition:background .4s ease;
}
.games.locked{ opacity:.94; }
.games .g-h{ display:flex; align-items:center; justify-content:space-between; margin-bottom:9px; }
.games .g-t{ font-size:15px; font-weight:800; color:var(--ink); }
.games .g-n{ font-size:12.5px; font-weight:800; color:var(--ink); background:var(--paper);
  border:2px solid var(--ink); border-radius:999px; padding:2px 10px; font-variant-numeric:tabular-nums; }
.games .g-list{ display:grid; grid-template-columns:repeat(3,1fr); gap:9px; }
.gbtn{
  position:relative; height:66px; border-radius:var(--r-sm); border:2.5px solid var(--ink); background:var(--paper);
  box-shadow:var(--hard); font-size:26px; cursor:pointer; display:flex; flex-direction:column;
  align-items:center; justify-content:center; gap:0; font-family:inherit; color:var(--ink);
  transition:transform .1s, box-shadow .1s, background .15s;
}
.gbtn small{ font-size:11px; font-weight:700; color:var(--ink-2); margin-top:1px; }
.gbtn:active{ transform:translateY(4px); box-shadow:0 0 0 var(--ink); }
.gbtn.locked,.gbtn:disabled{ opacity:.5; cursor:not-allowed; filter:grayscale(.3); box-shadow:var(--hard); transform:none; }
.gbtn .zero{ position:absolute; top:-8px; right:-8px; background:var(--coral); color:#fff;
  border:2px solid var(--ink); border-radius:999px; font-size:11px; font-weight:800; padding:1px 6px; font-style:normal; }
.g-tip{ font-size:12.5px; color:var(--text-2); margin-top:10px; font-weight:700; line-height:1.5; }
.g-tip.warn{ color:var(--coral-d); }

/* 游戏层 + 顶部 HUD（覆盖在场景上；子元素需点击时自己开 pointer-events） */
.gameLayer{ position:absolute; inset:0; z-index:10; pointer-events:none; }
.ghud{ position:absolute; top:12px; left:50%; transform:translateX(-50%); z-index:12; display:none;
  align-items:center; gap:8px; background:var(--paper); border:2.5px solid var(--ink); border-radius:999px;
  padding:5px 14px; box-shadow:0 3px 0 var(--ink); font-weight:800; font-size:14px; color:var(--ink); }
.ghud.on{ display:flex; }
.ghud-l{ color:var(--coral-d); }

/* 追泡泡 / 找骨头 游戏元素 */
.bub{ position:absolute; font-size:30px; pointer-events:auto; cursor:pointer;
  filter:drop-shadow(0 3px 0 rgba(46,74,56,.25)); will-change:transform; }
.bub.pop{ animation:bubPop .38s ease forwards; }
@keyframes bubPop{ to{ transform:scale(1.7); opacity:0; } }
.dig{ position:absolute; width:54px; height:30px; border-radius:14px; background:rgba(120,90,60,.26);
  border:2.5px dashed rgba(90,60,40,.55); pointer-events:auto; cursor:pointer; display:flex;
  align-items:center; justify-content:center; font-size:22px; box-shadow:inset 0 2px 6px rgba(60,40,20,.22); }
.dig.hot{ background:rgba(255,150,90,.5); border-color:var(--coral-d); }
.dig.hit{ background:rgba(120,200,120,.5); border-color:var(--grass); border-style:solid; }
.dig .mark{ animation:bubPop .3s var(--pop); }

/* 永久花（种下后一直在花园里） */
.flower{ position:absolute; bottom:62px; width:42px; transform:translateX(-50%); pointer-events:none;
  z-index:3; animation:flowerIn .5s var(--pop); }
@keyframes flowerIn{ from{ transform:translateX(-50%) scale(0); } to{ transform:translateX(-50%) scale(1); } }

/* ==========================================================================
   v3 新增：庆祝层（升级 / 打卡 / 全清）——应用级覆盖层（在 index.html，跨视图共用）
   ========================================================================== */
.celebrate{ position:fixed; inset:0; z-index:9999; display:none; align-items:center; justify-content:center;
  background:rgba(46,74,56,.42); backdrop-filter:blur(1px); padding:20px; }
.celebrate.on{ display:flex; }
.ce-card{ background:var(--paper); border:3px solid var(--ink); border-radius:22px; padding:22px 26px;
  text-align:center; box-shadow:0 6px 0 var(--ink); max-width:84%; animation:cePop .42s var(--pop); }
@keyframes cePop{ 0%{ transform:scale(.7); opacity:0; } 60%{ transform:scale(1.06); } 100%{ transform:scale(1); opacity:1; } }
.ce-badge{ font-size:48px; line-height:1; animation:ceBadge 1.6s ease-in-out infinite; }
@keyframes ceBadge{ 0%,100%{ transform:translateY(0) rotate(-4deg); } 50%{ transform:translateY(-6px) rotate(4deg); } }
.ce-card h3{ font-size:20px; font-weight:900; margin:12px 0 6px; color:var(--ink); }
.ce-card p{ font-size:14px; color:var(--ink-2); line-height:1.65; margin:0 0 16px; font-weight:700; }

/* 减弱动态效果：关掉一次性放大/弹跳，保留静态呈现 */
@media (prefers-reduced-motion: reduce){
  .flower,.bub,.dig .mark,.ce-card,.ce-badge{ animation:none !important; }
}
