/* Series detail-page effects shared by every book (Vivi 2026-09-23): tap-to-zoom glass card, scroll reveal, book-page hover. */
.gav-codex{--gfx-tint:24,38,64}
.gav-coach{--gfx-tint:24,44,34}
.gav-bookb{--gfx-tint:28,26,24}
.gfx-zoom{cursor:zoom-in}
.gfx-zoom-wrap{position:relative;display:block}
.gfx-zoom-wrap::after{content:"";position:absolute;right:10px;bottom:10px;width:34px;height:34px;border-radius:50%;background:rgba(255,255,255,.72) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23232321' stroke-width='2' stroke-linecap='round'%3E%3Cpath d='M15 3h6v6M9 21H3v-6M21 3l-7 7M3 21l7-7'/%3E%3C/svg%3E") center/16px no-repeat;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);box-shadow:0 4px 14px rgba(0,0,0,.14);opacity:.9;transition:transform .25s,opacity .25s;pointer-events:none}
.gfx-zoom-wrap:hover::after{transform:scale(1.08);opacity:1}
.gfx-lb{position:fixed;inset:0;z-index:99999;display:flex;align-items:center;justify-content:center;padding:28px;background:rgba(var(--gfx-tint),.55);-webkit-backdrop-filter:blur(22px) saturate(1.4);backdrop-filter:blur(22px) saturate(1.4);opacity:0;transition:opacity .28s ease}
.gfx-lb.on{opacity:1}
.gfx-card{position:relative;max-width:min(1080px,94vw);max-height:92vh;display:flex;flex-direction:column;gap:14px;padding:14px 14px 18px;border-radius:24px;background:linear-gradient(145deg,rgba(255,255,255,.34),rgba(255,255,255,.12));border:1px solid rgba(255,255,255,.45);box-shadow:inset 0 1px 0 rgba(255,255,255,.6),0 30px 80px rgba(10,16,30,.35)}
.gfx-frame{border-radius:14px;overflow:hidden;cursor:zoom-in;background:#fff;box-shadow:0 8px 24px rgba(0,0,0,.12);-webkit-overflow-scrolling:touch}
.gfx-frame img{display:block;max-width:100%;max-height:calc(92vh - 96px);object-fit:contain}
.gfx-frame.z{overflow:auto;cursor:grab;max-height:calc(92vh - 96px);width:min(1052px,calc(94vw - 28px))}
.gfx-frame.z img{max-width:none;max-height:none;width:230%}
.gfx-lb.one .gfx-prev,.gfx-lb.one .gfx-next,.gfx-lb.one .gfx-dots{display:none}
.gfx-cap{display:flex;align-items:baseline;justify-content:space-between;gap:16px;padding:0 6px;color:#fff;text-shadow:0 1px 8px rgba(0,0,0,.25)}
.gfx-cap b{font:600 19px/1.4 "Songti TC","Noto Serif TC",serif}
.gfx-cap span{font-size:13px;opacity:.85;white-space:nowrap}
.gfx-btn{position:absolute;width:44px;height:44px;padding:0;border-radius:50%;border:1px solid rgba(255,255,255,.5);cursor:pointer;background:rgba(255,255,255,.28);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);color:#fff;font:22px/1 -apple-system,sans-serif;display:flex;align-items:center;justify-content:center;box-shadow:0 6px 18px rgba(0,0,0,.15);transition:background .2s,transform .2s}
.gfx-btn:hover{background:rgba(255,255,255,.45);transform:scale(1.06)}
.gfx-x{top:-16px;right:-16px}
.gfx-prev{left:-64px;top:50%;margin-top:-22px}
.gfx-next{right:-64px;top:50%;margin-top:-22px}
.gfx-dots{display:flex;gap:6px;justify-content:center}
.gfx-dots i{width:6px;height:6px;border-radius:50%;background:rgba(255,255,255,.45)}
.gfx-dots i.on{background:#fff;width:18px;border-radius:3px}
.gfx-rise{opacity:0;transform:translateY(28px);transition:opacity .7s ease,transform .7s cubic-bezier(.2,.7,.2,1)}
.gfx-rise.in{opacity:1;transform:none}
.gfx-root .wall .page{transition:transform .35s cubic-bezier(.2,.7,.2,1),box-shadow .35s,opacity .7s ease}
@media(hover:hover){.gfx-root .wall .page:hover{transform:rotate(0) translateY(-6px) scale(1.015);box-shadow:0 22px 50px #1a223430}}
@media(max-width:700px){.gfx-lb{padding:12px}.gfx-card{max-width:100%;padding:10px 10px 14px;border-radius:20px}.gfx-x{top:-10px;right:-6px}.gfx-prev,.gfx-next{display:none}.gfx-cap b{font-size:17px}.gfx-frame.z{width:calc(100vw - 44px);height:62vh;max-height:none}.gfx-frame.z img{width:300%}}
@media(prefers-reduced-motion:reduce){.gfx-rise{opacity:1;transform:none;transition:none}}
