/* BLQCK 常駐核心樣式（全站共用，2026-10-06 從 shelf.css 搬出）：外層 .ifd-blq 管位置／進場（--bx 左右偏移），內層 .ifd-blq__b 管跳／呼吸／飄起落地，svg 內 g 管側頭（--tilt，液體 g 不轉＝水面水平），.eye 管瞄（--ex）與眨 */
.ifd-blq{position:fixed;right:14px;bottom:calc(10px + env(safe-area-inset-bottom,0px));width:64px;height:64px;z-index:99970;pointer-events:none;transform:translateY(120%) scale(1.25,.6);transform-origin:50% 100%;will-change:transform,opacity}
.ifd-blq svg{width:100%;height:100%;display:block;overflow:hidden!important;filter:drop-shadow(0 6px 10px rgba(0,0,0,.45))}   /* overflow:hidden＝保險：snippet 33 的液體波浪若裁切失效也不准畫到方塊外 */
.ifd-blq.is-in{transform:translateY(0) scale(1,1);transition:transform .18s cubic-bezier(.3,1.6,.5,1)}
@keyframes ifd-blq-idle{0%,100%{transform:translateY(0) rotate(0)}20%{transform:translateY(0) rotate(-7deg)}45%{transform:translateY(0) rotate(7deg)}70%{transform:translateY(-9px) scale(.96,1.05)}85%{transform:translateY(0) scale(1.06,.94)}}
.ifd-blq.is-idle{animation:ifd-blq-idle 1.1s ease-in-out infinite}
@keyframes ifd-blq-jump{0%{transform:translateY(0) scale(1.1,.85)}45%{transform:translateY(-34px) scale(.94,1.08)}85%{transform:translateY(0) scale(1.2,.72)}100%{transform:translateY(0) scale(1,1)}}
.ifd-blq.is-jump{animation:ifd-blq-jump .19s cubic-bezier(.3,.1,.4,1) both}
.ifd-blq.is-out{transition:opacity .32s ease .1s,transform .32s ease .1s;opacity:0;transform:translateY(40%) scale(1,1);animation:none}
/* BLQCK 常駐（2026-10-05）：外層管左右位置（--bx）與進場，內層 __b 管跳／呼吸，svg 管側頭（--tilt），眼睛各自瞄（--ex）與眨（is-blink） */
.ifd-blq.is-live{pointer-events:auto;cursor:pointer;animation:none;transform:translateX(var(--bx,0px));transition:transform .36s cubic-bezier(.3,1.35,.5,1);touch-action:manipulation;-webkit-tap-highlight-color:transparent;user-select:none;-webkit-user-select:none}
.ifd-blq__b{width:100%;height:100%;transform-origin:50% 100%;transition:transform .22s cubic-bezier(.2,.8,.3,1)}
/* 側頭時水面要維持水平（Han 2026-10-05「像真的水跟地心引力一樣」）：不轉整張 svg，只轉身體／眼睛那兩個 g 和裁切框；液體那個 g 不轉 */
.ifd-blq.is-live svg{transform:none}
.ifd-blq.is-live svg g[transform="rotate(0 60 60)"],.ifd-blq.is-live svg clipPath rect{transform:rotate(var(--tilt,0deg));transform-box:view-box;transform-origin:50% 50%;transition:transform .4s ease}
/* 滾動慣性：快速往下捲＝飄起拉長；快速往上捲＝壓扁延伸；停下各自落地／彈起 */
/* Han 2026-10-06：飄起要很 smooth 地慢慢升到三倍高（-48px），停下「咻蹦」快速落地；壓扁後自然彈一倍高（-16px）再落下 */
.ifd-blq__b.is-float{transform:translateY(-48px) scale(.92,1.12);transition:transform .75s cubic-bezier(.15,.6,.25,1)}
.ifd-blq__b.is-press{transform:translateY(3px) scale(1.16,.84);transition:transform .22s ease-out}
@keyframes ifd-blq-land{0%{transform:translateY(-48px) scale(.92,1.12);animation-timing-function:cubic-bezier(.6,0,.95,.45)}38%{transform:translateY(0) scale(1.26,.72);animation-timing-function:ease-out}56%{transform:translateY(-7px) scale(.92,1.1)}72%{transform:translateY(0) scale(1.12,.88)}86%{transform:translateY(-2px) scale(.97,1.04)}100%{transform:none}}
.ifd-blq__b.is-land{animation:ifd-blq-land .64s both}
@keyframes ifd-blq-pop{0%{transform:translateY(3px) scale(1.16,.84);animation-timing-function:cubic-bezier(.2,.7,.4,1)}40%{transform:translateY(-16px) scale(.95,1.07);animation-timing-function:cubic-bezier(.55,0,.9,.5)}72%{transform:translateY(0) scale(1.12,.88);animation-timing-function:ease-out}86%{transform:translateY(-2px) scale(.98,1.03)}100%{transform:none}}
.ifd-blq__b.is-pop{animation:ifd-blq-pop .6s both}
.ifd-blq .eye{animation:none!important;transform-box:fill-box;transform-origin:50% 50%;transform:translateX(var(--ex,0px));transition:transform .22s ease}   /* 開燈階段就關掉主題的眨眼動畫，接常駐時眼睛才不會跳一下 */
.ifd-blq.is-live.is-blink .eye{transform:translateX(var(--ex,0px)) scaleY(.08);transition-duration:.07s}
.ifd-blq.is-live .is-happy .eye{transform:translateX(var(--ex,0px)) translateY(-5px) scaleY(.38)}
@keyframes ifd-blq-breathe{0%,100%{transform:scale(1,1)}50%{transform:scale(1.03,.97)}}
.ifd-blq__b.is-breathe{animation:ifd-blq-breathe 3.4s ease-in-out infinite}
@keyframes ifd-blq-hop{0%{transform:scale(1.08,.88)}40%{transform:translateY(-20px) scale(.95,1.06)}80%{transform:translateY(0) scale(1.12,.84)}100%{transform:none}}
.ifd-blq__b.is-hop{animation:ifd-blq-hop .36s cubic-bezier(.3,.1,.4,1) both}
/* 開心跳（Han 2026-10-05）：用閒置跳步的速率感慢慢升到兩倍高（-44px），落下快一點，落地壓扁＋腳底火花 */
@keyframes ifd-blq-happy{0%{transform:scale(1.1,.85);animation-timing-function:ease-out}14%{transform:translateY(0) scale(.94,1.1);animation-timing-function:cubic-bezier(.2,.7,.4,1)}52%{transform:translateY(-44px) scale(.97,1.03);animation-timing-function:cubic-bezier(.6,0,.9,.4)}72%{transform:translateY(0) scale(1.24,.72);animation-timing-function:ease-out}84%{transform:translateY(-6px) scale(.96,1.06)}93%{transform:translateY(0) scale(1.05,.95)}100%{transform:none}}
.ifd-blq__b.is-happy{animation:ifd-blq-happy .9s both}
/* 撞牆（往右跳到畫面邊緣）：衝過去 → 壓扁貼牆 → 果凍彈回 → 落地晃兩下 */
@keyframes ifd-blq-bonk{0%{transform:scale(1.06,.9)}28%{transform:translate(8px,-18px) scale(.94,1.08)}40%{transform:translate(14px,-8px) scale(.68,1.26)}56%{transform:translate(-4px,-16px) scale(1.16,.86)}74%{transform:translate(0,0) scale(1.2,.78)}86%{transform:translateY(-5px) scale(.95,1.06)}100%{transform:none}}
.ifd-blq__b.is-bonk{animation:ifd-blq-bonk .95s cubic-bezier(.3,.2,.4,1) both}
.ifd-blq.is-live .is-bonk .eye{transform:translateX(var(--ex,0px)) scale(1.18)}
/* ✦ 用恐龍 logo 的亮黃、放大（Han 2026-10-05）；♥ 維持糖果粉 */
.ifd-blq__p{position:absolute;left:50%;bottom:72%;margin-left:-12px;font-size:24px;line-height:1;font-style:normal;color:var(--ifd-sun,#fff200);text-shadow:0 0 8px rgba(255,242,0,.55),0 2px 6px rgba(0,0,0,.5);pointer-events:none;animation:ifd-blq-p 1.1s ease-out both}
.ifd-blq__p--h{color:var(--ifd-candy,#ff7fa8);text-shadow:0 0 8px rgba(255,127,168,.5),0 2px 6px rgba(0,0,0,.5)}
@keyframes ifd-blq-p{0%{opacity:0;transform:translate(var(--px,0px),6px) scale(.6)}20%{opacity:1}100%{opacity:0;transform:translate(calc(var(--px,0px) * 1.6),-52px) scale(1.2)}}
/* 落地火花：腳底往左右兩側噴小黃點，弧線散開後消散 */
.ifd-blq__sk{position:absolute;left:50%;bottom:2px;margin-left:-4px;border-radius:50%;background:var(--ifd-sun,#fff200);box-shadow:0 0 8px var(--ifd-sun,#fff200),0 0 2px #fff;pointer-events:none;animation:ifd-blq-sk 1s ease-out both}
.ifd-blq__sk--h{background:var(--ifd-candy,#ff7fa8);box-shadow:0 0 8px var(--ifd-candy,#ff7fa8),0 0 2px #fff}
@keyframes ifd-blq-sk{0%{opacity:1;transform:translate(0,0) scale(.7)}35%{opacity:1;transform:translate(calc(var(--sx,20px) * .7),var(--sy,-12px)) scale(1.1)}75%{opacity:.8}100%{opacity:0;transform:translate(var(--sx,20px),calc(var(--sy,-12px) * -.5 + 8px)) scale(.4)}}
body:has(.ifd-shelf.has-gprompt) .ifd-blq{opacity:0;pointer-events:none;transition:opacity .2s}
@media (prefers-reduced-motion:reduce){.ifd-blq{display:none}}
