:root {
  --ink: #1b1410;        /* 玄黑 */
  --ink-2: #2a1f18;
  --gold: #c9a24a;       /* 古金 */
  --gold-light: #f1d27a;
  --red: #b3261e;        /* 朱红 */
  --red-deep: #7d1a14;
  --paper: #ecdcb4;
  --paper-2: #e2cf9f;
  --on-paper: #2b1d12;
  --muted: #6b5640;
  --serif: "LXGW WenKai", "Noto Serif SC", "Kaiti SC", "STKaiti", "KaiTi", "Songti SC", serif;   /* 2026-11-06：楷体做标题 / 掣（参考 baibai.live） */
  --sans: "Noto Sans SC", "PingFang SC", "Microsoft YaHei", system-ui, sans-serif;
  --safe-b: env(safe-area-inset-bottom, 0px);
  --cream: #ecdcb4;
  --panel: rgba(16, 11, 8, .78);      /* 所有浮喺画面上嘅掣 / 面板：半透明近黑 */
  --line: rgba(201, 162, 74, .45);    /* 一条细金线 */
  --gold-grad: linear-gradient(180deg, #e8cc7e, #c9a24a 55%, #a8782a);   /* 唯一嘅主掣 */
}
* { box-sizing: border-box; }
html, body { margin: 0; height: 100%; background: var(--ink); color: #f4e6c8; font-family: var(--sans); overflow: hidden; -webkit-tap-highlight-color: transparent; }
button { font: inherit; color: inherit; cursor: pointer; }
button:focus-visible, textarea:focus-visible, input:focus-visible, [tabindex]:focus-visible { outline: 3px solid var(--gold-light); outline-offset: 2px; }
#world { position: fixed; inset: 0; }
#world canvas { display: block; }
[hidden] { display: none !important; }

/* 入殿页（2026-11-06）：3D 殿喺后面，前面一层暗纱 + 大字 + 金掣 */
.splash { position: fixed; inset: 0; z-index: 50; display: grid; place-items: center; background: radial-gradient(circle at 50% 45%, #3a2414 0%, var(--ink) 62%); transition: opacity .9s ease, background 1.2s ease; }
.splash.ready { background: transparent; }
.splash-veil { position: absolute; inset: 0; background: linear-gradient(180deg, rgba(10,7,5,.78) 0%, rgba(10,7,5,.38) 42%, rgba(10,7,5,.46) 62%, rgba(10,7,5,.92) 100%); opacity: 0; transition: opacity 1.2s ease; }
.splash.ready .splash-veil { opacity: 1; }
.splash.out { opacity: 0; pointer-events: none; }
.splash-inner { position: relative; text-align: center; padding: 0 28px; max-width: 420px; width: 100%; transform: translateY(-4vh); }
.splash-kicker, .splash-en { margin: 0; font-family: var(--sans); font-weight: 500; font-size: 11px; letter-spacing: .38em; color: #cdb98a; text-transform: uppercase; }
.splash-kicker { margin-bottom: 14px; }
.splash-plaque { margin: 0; font-family: var(--serif); font-weight: 700; font-size: clamp(40px, 12.5vw, 72px); line-height: 1.1; letter-spacing: .16em; padding-left: .16em; white-space: nowrap; color: #efd48c; text-shadow: 0 2px 14px rgba(0,0,0,.6), 0 0 36px rgba(232,182,76,.25); }
.splash-en { margin-top: 10px; letter-spacing: .3em; }
.splash-div { display: flex; align-items: center; gap: 12px; margin: 22px auto 18px; width: 180px; color: var(--gold); font-size: 10px; }
.splash-div i { flex: 1; height: 1px; background: linear-gradient(90deg, transparent, var(--gold)); }
.splash-div i:last-child { background: linear-gradient(90deg, var(--gold), transparent); }
.splash-desc { margin: 0 auto; font-family: var(--serif); font-size: 15.5px; line-height: 1.9; color: var(--cream); letter-spacing: .04em; }
.splash-go { position: relative; margin: 30px auto 0; min-width: 220px; min-height: 56px; padding: 0 30px; border: 0; border-radius: 4px; background: var(--gold-grad); color: #2a1a08; font-family: var(--serif); font-weight: 700; font-size: 20px; letter-spacing: .22em; padding-left: calc(30px + .22em); clip-path: polygon(10px 0, 100% 0, calc(100% - 10px) 100%, 0 100%); box-shadow: 0 10px 30px rgba(0,0,0,.45); transition: opacity .4s; }
.splash-go:disabled { background: rgba(16,11,8,.6); color: #bfa77a; box-shadow: none; outline: 1px solid var(--line); letter-spacing: .3em; }
.splash-go:disabled #splashLine { animation: breathe 1.8s ease-in-out infinite; display: inline-block; }
.splash-go:not(:disabled):active { transform: translateY(1px); }
.splash-foot { margin: 18px 0 0; font-size: 12px; color: #a9977a; letter-spacing: .08em; }
.splash-foot b { color: var(--gold-light); font-weight: 600; }
.splash-line { font-family: var(--serif); color: #bfa77a; letter-spacing: .3em; }
@keyframes breathe { 50% { opacity: .35; } }
/* 四角角花：任何面板加 .frame */
.frame { position: relative; }
.frame::before { content: ""; position: absolute; inset: 6px; pointer-events: none; --c: rgba(201,162,74,.85);
  background: linear-gradient(var(--c), var(--c)) 0 0 / 14px 1px no-repeat, linear-gradient(var(--c), var(--c)) 0 0 / 1px 14px no-repeat,
    linear-gradient(var(--c), var(--c)) 100% 0 / 14px 1px no-repeat, linear-gradient(var(--c), var(--c)) 100% 0 / 1px 14px no-repeat,
    linear-gradient(var(--c), var(--c)) 0 100% / 14px 1px no-repeat, linear-gradient(var(--c), var(--c)) 0 100% / 1px 14px no-repeat,
    linear-gradient(var(--c), var(--c)) 100% 100% / 14px 1px no-repeat, linear-gradient(var(--c), var(--c)) 100% 100% / 1px 14px no-repeat; }

/* HUD（2026-11-06 减负）：全部掣同一个样 —— 半透明近黑底、一条细金线、米金字；冇色块 */
.hud { position: fixed; top: 0; left: 0; right: 0; z-index: 10; display: flex; justify-content: space-between; align-items: flex-start; gap: 8px; padding: calc(10px + env(safe-area-inset-top, 0px)) 12px 0; pointer-events: none; }
.hud > * { pointer-events: auto; }
.hud-left { display: flex; flex-direction: column; align-items: flex-start; gap: 6px; min-width: 0; flex: 1 1 auto; }
.hud-right { display: flex; flex-direction: column; align-items: flex-end; gap: 6px; flex: none; }
.chip, .lore-btn, .sound-btn, .me-btn, .coins, .menu-btn, .hall-chip, .rail button, .emote-btn, .photo-btn { background: var(--panel); border: 1px solid var(--line); color: var(--cream); backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px); box-shadow: 0 2px 10px rgba(0,0,0,.25); }
.chip, .lore-btn, .sound-btn { white-space: nowrap; font-family: var(--serif); font-weight: 400; font-size: 13.5px; letter-spacing: .04em; padding: 6px 12px; border-radius: 8px; }
.hall-chip { display: flex; flex-direction: column; align-items: flex-start; gap: 1px; padding: 7px 14px 7px 12px; border-radius: 8px; text-align: left; cursor: pointer; }
.hall-chip strong { white-space: nowrap; font-family: var(--serif); font-weight: 700; font-size: 17px; letter-spacing: .14em; color: #efd48c; }
.hall-chip span { font-size: 11.5px; color: #c6b48e; display: flex; align-items: center; gap: 6px; letter-spacing: .02em; }
.dot { width: 6px; height: 6px; border-radius: 50%; background: #8a7a62; display: inline-block; }
.dot.on { background: #8fd49a; box-shadow: 0 0 6px #6fcf7a; }
.hud-row { display: flex; gap: 6px; flex-wrap: wrap; }
.sound-btn[aria-pressed=false] { color: #8a7a62; }
.menu-btn { display: inline-flex; align-items: center; gap: 8px; height: 40px; padding: 0 14px 0 12px; border-radius: 8px; font-family: var(--serif); font-size: 14px; letter-spacing: .06em; }
.menu-btn i { width: 18px; height: 12px; position: relative; display: block; }
.menu-btn i::before, .menu-btn i::after { content: ""; position: absolute; left: 0; right: 0; height: 1.5px; background: var(--gold-light); box-shadow: 0 5.25px 0 var(--gold-light); }
.menu-btn i::before { top: 0; } .menu-btn i::after { top: 10.5px; box-shadow: none; }
.coins { display: inline-flex; align-items: center; gap: 6px; font-size: 12px; color: var(--cream); padding: 0 8px 0 10px; height: 36px; border-radius: 8px; white-space: nowrap; cursor: pointer; }
.coins b { color: var(--gold-light); font-size: 15px; font-family: var(--serif); }
.coins em { font-style: normal; width: 20px; height: 20px; border-radius: 50%; border: 1px solid var(--line); color: var(--gold-light); font-size: 15px; line-height: 18px; text-align: center; }
.me-btn { border-radius: 8px; padding: 7px 12px; color: var(--gold-light); font-family: var(--serif); max-width: 40vw; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.daily-chip.all-done { color: #ffe9a8; }
/* 右边一列圆掣 */
.rail { position: fixed; z-index: 9; right: 10px; top: 44%; transform: translateY(-50%); display: flex; flex-direction: column; gap: 8px; align-items: center; }
.rail button, .emote-btn, .photo-btn { width: 40px; height: 40px; border-radius: 50%; padding: 0; display: grid; place-items: center; color: var(--gold-light); font-size: 20px; font-weight: 400; line-height: 1; }
.rail button:active, .emote-btn:active, .photo-btn:active { background: rgba(120,70,20,.7); }
.rail svg { width: 20px; height: 20px; }
#soundRail[aria-pressed=false] { color: #8a7a62; }
#soundRail[aria-pressed=false] .sr-w { display: none; }
#railSlot { display: contents; }
body.sheet-open .rail, body.xg-open .rail { display: none; }

.thursday-band, .demo-band { position: fixed; z-index: 9; left: 50%; transform: translateX(-50%); top: calc(116px + env(safe-area-inset-top, 0px)); padding: 6px 14px; border-radius: 999px; font-size: 13px; white-space: nowrap; }
.thursday-band { background: var(--panel); border: 1px solid var(--line); color: var(--gold-light); font-family: var(--serif); font-weight: 400; backdrop-filter: blur(8px); }
.demo-band { background: var(--panel); border: 1px solid var(--line); color: #cdbb98; top: calc(200px + env(safe-area-inset-top, 0px)); font-size: 12px; }

/* 殿内字幕 */
.ticker { position: fixed; z-index: 9; left: 12px; right: 12px; bottom: calc(100px + var(--safe-b)); display: flex; flex-direction: column; align-items: center; gap: 6px; pointer-events: none; }
.ticker p { margin: 0; padding: 6px 14px; background: var(--panel); border: 1px solid rgba(201,162,74,.25); border-radius: 999px; font-size: 13px; color: #f4e6c8; animation: tick 6s ease forwards; max-width: 100%; white-space: normal; text-align: center; line-height: 1.45; border-radius: 14px; }   /* 手机直放唔够阔：换行显示全句，唔再变「…」 */
.ticker p b { color: var(--gold-light); font-weight: 600; }
.ticker p.big { border-color: var(--line); color: var(--gold-light); font-family: var(--serif); font-weight: 400; letter-spacing: .03em; }
@keyframes tick { 0% { opacity: 0; transform: translateY(8px); } 8%, 82% { opacity: 1; transform: none; } 100% { opacity: 0; } }

/* 底部动作（2026-11-06）：一条深色底栏，四个图标掣 + 一个金色主掣 */
.actions { position: fixed; z-index: 10; left: 0; right: 0; bottom: 0; display: flex; justify-content: center; padding: 0 10px calc(10px + var(--safe-b)); pointer-events: none; background: linear-gradient(180deg, transparent, rgba(10,7,5,.78) 55%); }
.act-bar { pointer-events: auto; display: flex; align-items: center; justify-content: center; gap: 4px; width: min(100%, 440px); padding: 6px 6px; border-radius: 14px; background: var(--panel); border: 1px solid var(--line); backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px); box-shadow: 0 10px 30px rgba(0,0,0,.45); }
.act-group { display: contents; }
.act { pointer-events: auto; border: 0; background: transparent; color: var(--cream); }
.act-side { flex: 1 1 0; min-width: 0; height: 58px; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 3px; border-radius: 10px; font-family: var(--serif); font-size: 12px !important; letter-spacing: .04em; padding: 0 2px; }
.act-side i { font-style: normal; width: 30px; height: 30px; border-radius: 50%; border: 1px solid var(--line); display: grid; place-items: center; font-size: 17px; color: var(--gold-light); line-height: 1; }
.act-side span { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 100%; }
.act-side:active { background: rgba(201,162,74,.15); }
/* 老板：只有「问卦」保留红底金字 */
.act-main { flex: 0 0 auto; min-width: 112px; height: 58px; padding: 0 14px; border-radius: 10px; background: linear-gradient(180deg, #c22d22, #8e1a12); color: var(--gold-light); display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 2px; box-shadow: 0 4px 14px rgba(0,0,0,.35), inset 0 0 0 1px rgba(232,182,76,.55), inset 0 1px 0 rgba(255,220,160,.25); clip-path: polygon(8px 0, 100% 0, calc(100% - 8px) 100%, 0 100%); }
.act-main-title { font-family: var(--serif); font-weight: 700; font-size: 23px; letter-spacing: .25em; padding-left: .25em; line-height: 1.1; }
.act-main-sub { font-size: 11px; color: #f3d9a8; white-space: nowrap; }
.act-main:active { transform: translateY(1px); }
.hint { position: fixed; z-index: 9; left: 0; right: 0; bottom: calc(100px + var(--safe-b)); text-align: center; font-size: 12px; color: #bfa77a; margin: 0; pointer-events: none; text-shadow: 0 1px 3px #000; }

/* 面板 */
.sheet-backdrop { position: fixed; inset: 0; z-index: 20; background: rgba(10,7,5,.55); }
.sheet { position: fixed; z-index: 21; left: 50%; bottom: 0; transform: translateX(-50%); width: min(560px, 100%); max-height: 92dvh; overflow-y: auto; overscroll-behavior: contain;
  background: var(--paper); color: var(--on-paper); border-top: 6px solid var(--red); border-radius: 16px 16px 0 0; padding: 22px 22px calc(26px + var(--safe-b));
  box-shadow: 0 -20px 60px rgba(0,0,0,.55); animation: rise .32s cubic-bezier(.2,.8,.2,1); }
/* 2026-11-06 深色面板（参考 baibai.live）：近黑底、细金线、角花、楷体标题。纸样嘅嘢（签纸、命盘、金纸）保持浅色，似放喺黑台上 */
.sheet { --paper: #17110c; --paper-2: #211913; --on-paper: var(--cream); --muted: #a8906a; --panel-in: rgba(255,255,255,.04); --line-in: rgba(201,162,74,.35);
  background: rgba(20,14,10,.96); color: var(--cream); border: 1px solid var(--line); border-bottom: 0; border-top-width: 1px; border-radius: 18px 18px 0 0; backdrop-filter: blur(14px); -webkit-backdrop-filter: blur(14px); }
.sheet::after { content: ""; position: absolute; left: 10px; top: 10px; width: 14px; height: 14px; border-top: 1px solid var(--gold); border-left: 1px solid var(--gold); pointer-events: none; }
.sheet > .sheet-body::after { content: ""; position: absolute; right: 10px; top: 10px; width: 14px; height: 14px; border-top: 1px solid var(--gold); border-right: 1px solid var(--gold); pointer-events: none; }
@keyframes rise { from { transform: translate(-50%, 40px); opacity: 0; } }
.sheet-close { position: absolute; top: 16px; right: 16px; width: 38px; height: 38px; border-radius: 4px; border: 1px solid var(--line); background: transparent; color: var(--gold-light); font-size: 22px; line-height: 1; z-index: 2; }
.sheet h2 { padding-right: 48px; font-family: var(--serif); font-weight: 700; font-size: 25px; margin: 2px 0 14px; color: #efd48c; letter-spacing: .12em; line-height: 1.3; position: relative; padding-bottom: 12px; }
.sheet h2::after { content: "◆"; position: absolute; left: 0; right: 48px; bottom: -6px; text-align: center; font-size: 8px; color: var(--gold); line-height: 1; background: linear-gradient(90deg, transparent, var(--line) 30%, var(--line) 70%, transparent) center / 100% 1px no-repeat; }
.sheet h2 + .muted { margin-top: 12px; }
.sheet h3 { font-family: var(--serif); font-weight: 400; font-size: 17px; margin: 22px 0 8px; color: #efd48c; letter-spacing: .08em; display: flex; align-items: center; gap: 8px; }
.sheet h3::before { content: "◆"; font-size: 8px; color: var(--gold); }
.sheet p { line-height: 1.75; margin: 0 0 12px; }
.sheet .lead { font-family: var(--serif); font-size: 17px; line-height: 1.9; color: var(--on-paper); }
.sheet .muted { color: var(--muted); font-size: 13px; line-height: 1.6; }
.sheet label.field { display: block; font-weight: 600; font-size: 14px; margin: 16px 0 6px; }
.sheet textarea, .sheet input[type=text], .sheet input[type=search], .sheet input:not([type]), .sheet input[type=number], .sheet input[type=date], .sheet input[type=time], .sheet select { width: 100%; color-scheme: dark; font: inherit; font-size: 16px; padding: 12px 14px; border-radius: 6px; border: 1px solid var(--line-in); background: rgba(0,0,0,.35); color: var(--cream); resize: vertical; }
.sheet textarea::placeholder, .sheet input::placeholder { color: #7f6b4e; }
.sheet textarea { min-height: 84px; line-height: 1.6; }
.counter { text-align: right; font-size: 12px; color: var(--muted); margin-top: 4px; }

.btn { text-decoration: none; display: inline-flex; align-items: center; justify-content: center; gap: 6px; min-height: 48px; padding: 0 20px; border-radius: 10px; border: 0; font-weight: 600; font-size: 16px; }
.btn-primary { background: var(--gold-grad); color: #2a1a08; font-family: var(--serif); font-weight: 700; letter-spacing: .14em; font-size: 19px; width: 100%; min-height: 56px; border-radius: 4px; clip-path: polygon(8px 0, 100% 0, calc(100% - 8px) 100%, 0 100%); box-shadow: inset 0 1px 0 rgba(255,255,255,.35); }
.btn-primary:disabled { opacity: .5; }
.btn-ghost { background: transparent; border: 1px solid var(--line); color: var(--cream); border-radius: 4px; font-family: var(--serif); letter-spacing: .06em; }
.btn-wa { background: #1f8f4e; color: #fff; }
.btn-fb { background: #2d5aa8; color: #fff; }
.btn-ink { background: rgba(201,162,74,.14); border: 1px solid var(--line); color: var(--gold-light); border-radius: 4px; font-family: var(--serif); letter-spacing: .06em; }
.btn-row { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin-top: 12px; }

.chips { display: flex; flex-wrap: wrap; gap: 8px; }
.sheet .chip { padding: 10px 16px; border-radius: 6px; border: 1px solid var(--line-in); background: transparent; font-family: var(--serif); font-weight: 400; font-size: 15px; color: var(--cream); backdrop-filter: none; box-shadow: none; }
.sheet .chip[aria-pressed=true] { background: rgba(201,162,74,.18); border-color: var(--gold); color: #efd48c; }
.check { display: flex; align-items: center; gap: 8px; font-size: 14px; margin: 12px 0 18px; color: var(--muted); }
.check input { width: 20px; height: 20px; accent-color: var(--gold); }

/* 头像选择 */
.avatars { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; }
.avatar { border: 1px solid var(--line-in); border-radius: 8px; background: var(--panel-in); padding: 10px 4px 8px; display: flex; flex-direction: column; align-items: center; gap: 6px; font-size: 13px; color: var(--cream); }
.avatar[aria-pressed=true] { border-color: var(--gold); background: rgba(201,162,74,.14); }
.avatar-face { width: 52px; height: 64px; position: relative; }
.avatar-face .h { position: absolute; left: 6px; top: 0; width: 40px; height: 40px; border-radius: 50%; background: #e8c39e; }
.avatar-face .hr { position: absolute; left: 4px; top: -2px; width: 44px; height: 24px; border-radius: 22px 22px 6px 6px; }
.avatar-face .b { position: absolute; left: 10px; top: 38px; width: 32px; height: 26px; border-radius: 10px 10px 4px 4px; }
.avatar-face .e { position: absolute; top: 22px; width: 4px; height: 4px; border-radius: 50%; background: #15100c; }

/* 掷铜钱 */
.toss { text-align: center; }
.coins-row { display: flex; justify-content: center; gap: 18px; margin: 18px 0 10px; height: 92px; perspective: 600px; }
.coin { width: 84px; height: 84px; border-radius: 50%; position: relative; transform-style: preserve-3d; }
.coin.spin { animation: flip .9s cubic-bezier(.3,.6,.3,1); }
@keyframes flip { 0% { transform: translateY(0) rotateX(0); } 40% { transform: translateY(-60px) rotateX(900deg); } 100% { transform: translateY(0) rotateX(1800deg); } }
.coin .face { position: absolute; inset: 0; border-radius: 50%; backface-visibility: hidden; display: grid; place-items: center; background: radial-gradient(circle at 35% 30%, #e6bf62, #a37625 70%); border: 4px solid #7a5418; box-shadow: inset 0 0 0 3px rgba(255,230,160,.35); font-family: var(--serif); font-weight: 900; color: #5a3c10; }
.coin .face::after { content: ""; position: absolute; width: 20px; height: 20px; background: var(--paper); border: 3px solid #7a5418; }
.coin .face span { position: absolute; font-size: 15px; }
.coin .face .t { top: 6px; } .coin .face .bt { bottom: 6px; } .coin .face .l { left: 9px; } .coin .face .r { right: 9px; }
.coin .back { transform: rotateX(180deg); background: radial-gradient(circle at 35% 30%, #d9b45a, #8e6620 70%); }
.coin .back span { font-size: 13px; opacity: .8; }
.coin-label { font-size: 13px; color: var(--muted); min-height: 1.6em; }
.lines { display: flex; flex-direction: column-reverse; gap: 9px; width: 210px; margin: 14px auto 18px; }
.line { height: 16px; display: flex; gap: 16%; position: relative; }
.line i { flex: 1; background: rgba(236,220,180,.12); border-radius: 2px; }
.line.yang i, .line.yin i { background: #efd48c; }
.line.moving::after { content: ""; position: absolute; right: -26px; top: 3px; width: 10px; height: 10px; border-radius: 50%; background: #e05a3a; }
.line .lbl { position: absolute; left: -78px; top: -3px; font-size: 12px; color: var(--muted); width: 70px; text-align: right; }
.line.in i { animation: ink .4s ease; }
@keyframes ink { from { opacity: 0; transform: scaleX(.6); } }

/* 结果 */
.sign-img { display: block; width: 100%; border-radius: 6px; box-shadow: 0 6px 24px rgba(43,29,18,.35); margin: 6px 0 16px; background: var(--paper-2); aspect-ratio: 2 / 3; object-fit: contain; }
.number-why { font-size: 12px; color: var(--muted); }
/* 福缘四字：签诗 + 号码由来 + 下下签 */
.fy-poem { display: grid; grid-template-columns: 1fr 1fr; gap: 6px 14px; margin: 6px 0 12px; padding: 12px 14px; background: var(--panel-in); border-left: 2px solid var(--gold); color: #efd48c; font-family: var(--serif); font-size: 17px; font-weight: 700; letter-spacing: .08em; }
.fy-why { margin: 4px 0 8px; padding-left: 18px; font-size: 13px; line-height: 1.6; }
.fy-why b { color: #efd48c; }
.fy-no { padding: 12px 14px; border: 1px dashed var(--gold); border-radius: 6px; font-weight: 600; }
.prompt-box { background: rgba(0,0,0,.3); border: 1px dashed var(--line-in); border-radius: 6px; padding: 12px; font-size: 13px; line-height: 1.6; max-height: 150px; overflow-y: auto; white-space: pre-wrap; color: #cdbb98; }
.ai-row { display: flex; gap: 10px; align-items: center; margin-top: 10px; }
.ai-row .btn { flex: 1; }

.lore p { font-family: var(--serif); font-size: 16px; line-height: 2; }
.lore blockquote { margin: 12px 0; padding: 8px 14px; border-left: 2px solid var(--gold); font-family: var(--serif); font-weight: 400; color: #efd48c; }
.precepts { display: grid; gap: 10px; margin: 8px 0; }
.precepts div { padding: 10px 14px; background: var(--panel-in); border: 1px solid var(--line-in); border-radius: 6px; }
.precepts b { font-family: var(--serif); color: #efd48c; display: block; }

.offerings { display: grid; grid-template-columns: repeat(4, 1fr); gap: 8px; }
.offer { border: 1px solid var(--line-in); border-radius: 6px; background: transparent; padding: 8px 2px; font-size: 13px; color: var(--cream); display: flex; flex-direction: column; align-items: center; gap: 4px; }
.offer i { width: 26px; height: 26px; border-radius: 50%; display: block; }
.offer[aria-pressed=true] { background: rgba(201,162,74,.18); color: #efd48c; border-color: var(--gold); }
.vow-list { list-style: none; padding: 0; margin: 0; display: grid; gap: 8px; }
.vow-list li { background: #9c1f17; color: var(--gold-light); padding: 10px 14px; border-radius: 6px; font-family: var(--serif); }
.vow-list li small { display: block; color: #e7c991; font-family: var(--sans); font-size: 12px; margin-top: 2px; }

.toast { position: fixed; z-index: 40; left: 50%; top: calc(110px + env(safe-area-inset-top, 0px)); transform: translateX(-50%); background: rgba(16,11,8,.92); color: var(--gold-light); border: 1px solid var(--gold); padding: 10px 18px; border-radius: 6px; font-family: var(--serif); letter-spacing: .03em; font-size: 14px; max-width: 90vw; text-align: center; }

@media (min-width: 900px) {
  .sheet { bottom: 50%; transform: translate(-50%, 50%); border-radius: 16px; max-height: 88vh; animation: none; border-bottom: 1px solid var(--line); }
}
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation-duration: .01ms !important; transition-duration: .01ms !important; }
}

/* 点灯 */
.lamps-pick { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
.lamp-opt { text-align: left; border: 1px solid var(--line-in); border-radius: 8px; background: var(--panel-in); padding: 12px; color: var(--cream); display: grid; grid-template-columns: 34px 1fr; gap: 2px 10px; align-items: center; }
.lamp-opt i { grid-row: span 2; width: 34px; height: 34px; border-radius: 50%; box-shadow: 0 0 14px 2px currentColor; }
.lamp-opt b { font-family: var(--serif); font-size: 17px; }
.lamp-opt small { color: var(--muted); font-size: 12px; }
.lamp-opt[aria-pressed=true] { background: rgba(201,162,74,.16); border-color: var(--gold); color: var(--gold-light); }
.lamp-opt[aria-pressed=true] small { color: #cdbb98; }
.lamp-count { font-family: var(--serif); font-size: 15px; color: var(--muted); }
.lamp-count b { color: #efd48c; font-size: 22px; }
.my-lamps { list-style: none; padding: 0; margin: 0; display: grid; gap: 8px; }
.my-lamps li { display: flex; align-items: center; gap: 12px; padding: 10px 14px; background: var(--panel-in); border: 1px solid var(--line-in); color: var(--gold-light); border-radius: 8px; font-family: var(--serif); }
.my-lamps li i { width: 14px; height: 14px; border-radius: 50%; flex: none; box-shadow: 0 0 10px 2px currentColor; }
.my-lamps li span { flex: 1; }
.my-lamps li small { color: #cdbb98; font-family: var(--sans); font-size: 12px; display: block; }

/* 罗兰姐 · 打小人 */
.xr-chant { margin-top: 12px; padding: 10px 14px; background: var(--panel-in); border-left: 2px solid var(--gold); border-radius: 0 8px 8px 0; }
.xr-chant p { margin: 0; font-family: var(--serif); font-weight: 400; color: #efd48c; line-height: 1.9; }
.xr-give { display: grid; place-items: center; height: 150px; }
.xr-give-slipper { width: 220px; animation: give .8s cubic-bezier(.2,.9,.3,1.2); }
@keyframes give { from { transform: translate(-160px, -60px) rotate(-40deg); opacity: 0; } }
.xr-stage { position: relative; height: 290px; margin: 6px 0 4px; border-radius: 12px; overflow: hidden; cursor: pointer; touch-action: manipulation; user-select: none; -webkit-user-select: none;
  background: radial-gradient(ellipse at 50% 85%, #6b5a4a 0%, #3b2f26 60%, #241b14 100%); }
.xr-brick { position: absolute; left: 50%; bottom: 22px; width: 220px; height: 52px; transform: translateX(-50%); background: #9c3a24; border-radius: 4px;
  box-shadow: inset 0 -8px 0 #7a2a18, inset 0 4px 0 #b84c32, 0 8px 18px rgba(0,0,0,.5); }
.xr-paper { position: absolute; left: 50%; bottom: 62px; width: 150px; height: 206px; transform: translateX(-50%) rotate(-3deg); transform-origin: 50% 100%; transition: filter .3s; }
.xr-paper-svg { width: 100%; height: 100%; display: block; filter: drop-shadow(0 4px 6px rgba(0,0,0,.4)); }
.xr-paper-name { position: absolute; left: 50%; top: 84px; transform: translateX(-50%); writing-mode: vertical-rl; font-family: var(--serif); font-weight: 900; font-size: 28px; line-height: 1; color: #b3261e; letter-spacing: 3px; max-height: 120px; overflow: hidden; padding: 6px 3px; background: rgba(243,231,196,.92); border: 2px solid #b3261e; border-radius: 3px; }
.xr-cracks { opacity: 0; transition: opacity .2s; }
.xr-paper[data-dmg="1"] .xr-cracks { opacity: .35; }
.xr-paper[data-dmg="2"] .xr-cracks { opacity: .7; }
.xr-paper[data-dmg="2"] { filter: sepia(.3); }
.xr-paper[data-dmg="3"], .xr-paper[data-dmg="4"] { filter: sepia(.5) brightness(.92); }
.xr-paper[data-dmg="3"] .xr-cracks, .xr-paper[data-dmg="4"] .xr-cracks { opacity: 1; }
.xr-paper[data-dmg="4"] { clip-path: polygon(0 4%, 18% 0, 40% 6%, 62% 0, 100% 3%, 96% 40%, 100% 72%, 94% 100%, 60% 96%, 30% 100%, 4% 96%, 0 60%); }
.xr-paper.shake { animation: shake .22s ease; }
@keyframes shake { 0% { transform: translateX(-50%) rotate(-3deg) scaleY(1); } 30% { transform: translateX(-50%) rotate(2deg) scaleY(.9); } 60% { transform: translateX(-51%) rotate(-5deg) scaleY(1.02); } 100% { transform: translateX(-50%) rotate(-3deg); } }
.xr-paper.burning { animation: burnup 1.5s ease-in forwards; }
@keyframes burnup { 0% { filter: sepia(.6) brightness(1); } 40% { filter: sepia(1) brightness(.6) drop-shadow(0 -10px 20px #ff7a2e); } 100% { filter: brightness(0) drop-shadow(0 -30px 30px #ff7a2e); opacity: 0; transform: translateX(-50%) scale(.6) translateY(30px); } }
.xr-slipper { position: absolute; right: 8%; top: 18px; width: 170px; transform: rotate(-35deg); transform-origin: 85% 50%; pointer-events: none; }
.xr-slipper.whack { animation: whack .22s ease-out; }
@keyframes whack { 0% { transform: rotate(-35deg); } 40% { transform: translate(-70px, 120px) rotate(8deg); } 100% { transform: rotate(-35deg); } }
.xr-pops { position: absolute; inset: 0; pointer-events: none; }
.xr-pop { position: absolute; font-family: var(--serif); font-weight: 900; color: #ffdf7a; -webkit-text-stroke: 2px var(--red); text-shadow: 0 3px 0 var(--red-deep), 0 0 18px rgba(255,120,40,.8); transform: translate(-50%, -50%) rotate(var(--r)); animation: pop .7s ease-out forwards; white-space: nowrap; }
@keyframes pop { 0% { transform: translate(-50%, -50%) rotate(var(--r)) scale(.3); opacity: 0; } 20% { transform: translate(-50%, -50%) rotate(var(--r)) scale(1.25); opacity: 1; } 60% { transform: translate(-50%, -60%) rotate(var(--r)) scale(1); opacity: 1; } 100% { transform: translate(-50%, -90%) rotate(var(--r)) scale(.9); opacity: 0; } }
.xr-line { text-align: center; font-family: var(--serif); font-weight: 400; color: #efd48c; font-size: 18px; min-height: 1.6em; margin: 8px 0 2px; }
.xr-count { text-align: center; color: var(--muted); font-size: 14px; margin-bottom: 10px; }
.xr-count b { font-family: var(--serif); font-size: 26px; color: #f08a5a; }
.xr-hit { width: 100%; min-height: 72px; background: var(--red); color: var(--gold-light); font-family: var(--serif); font-weight: 900; font-size: 32px; letter-spacing: .4em; padding-left: .4em; box-shadow: 0 6px 0 var(--red-deep); }
.xr-hit:active { transform: translateY(4px); box-shadow: 0 2px 0 var(--red-deep); }
.btn-ink:disabled { opacity: .45; }

/* 很窄的手机（320–359px） */
@media (max-width: 359px) {
  .actions { gap: 4px; padding-left: 4px; padding-right: 4px; }
  .act-side { width: 46px; height: 46px; font-size: 12px !important; }
  .act-main { min-width: 88px; height: 56px; padding: 0 8px; }
  .act-main-title { font-size: 20px; }
}
.xr-chant small { display: block; font-size: 12px; color: var(--muted); margin-bottom: 4px; font-family: var(--sans); }

/* 紫竹林大仙姑 */
.act-xg { border-color: rgba(200,170,255,.6) !important; color: #e6d6ff !important; }
.bubble { position: fixed; z-index: 15; left: 50%; top: 26%; transform: translateX(-50%); max-width: min(86vw, 420px); padding: 14px 18px; border-radius: 16px; background: #f6efff; color: #3a1f4a; border: 3px solid #b89ad8; font-family: var(--serif); font-weight: 900; font-size: 18px; line-height: 1.5; text-align: center; box-shadow: 0 10px 30px rgba(60,20,90,.5), 0 0 30px rgba(220,200,255,.6); pointer-events: none; }
.bubble::after { content: ""; position: absolute; left: 50%; bottom: -14px; width: 22px; height: 22px; background: #f6efff; border-right: 3px solid #b89ad8; border-bottom: 3px solid #b89ad8; transform: translateX(-50%) rotate(45deg); }
.bubble.show { animation: bubble .45s cubic-bezier(.2,1.4,.4,1); }
@keyframes bubble { from { transform: translateX(-50%) scale(.4) rotate(-6deg); opacity: 0; } }
.xg-panel { position: fixed; z-index: 11; left: 50%; transform: translateX(-50%); bottom: calc(86px + var(--safe-b)); display: flex; gap: 6px; padding: 6px; border-radius: 14px; background: rgba(40,20,55,.88); border: 1px solid rgba(200,170,255,.5); }
.xg-panel button { border: 0; border-radius: 10px; padding: 9px 12px; background: #6a3a7a; color: #f3e8ff; font-family: var(--serif); font-weight: 700; font-size: 14px; white-space: nowrap; }
.xg-panel button:last-child { background: transparent; color: #cdbbe0; }

.xg-open .ticker { bottom: calc(150px + var(--safe-b)); }
.wet-screen { position: fixed; inset: 0; z-index: 14; pointer-events: none; animation: wetfade 2.6s ease forwards; }
.wet-screen::before { content: ""; position: absolute; inset: 0; background: radial-gradient(ellipse at 50% 40%, rgba(160,210,255,.28), rgba(120,170,230,.12) 60%, transparent); }
.wet-word { position: absolute; left: 50%; top: 46%; transform: translate(-50%, -50%) rotate(-8deg); font-family: var(--serif); font-weight: 900; font-size: 64px; color: #dff3ff; -webkit-text-stroke: 3px #2f6fb0; text-shadow: 0 4px 0 #1f4f86, 0 0 24px rgba(160,210,255,.9); animation: wetword .7s cubic-bezier(.2,1.5,.4,1); white-space: nowrap; }
.wet-screen i { position: absolute; width: var(--s); height: calc(var(--s) * 1.3); border-radius: 50% 50% 50% 50% / 60% 60% 40% 40%; background: radial-gradient(circle at 35% 30%, rgba(255,255,255,.9), rgba(170,215,255,.55) 40%, rgba(120,170,230,.25)); box-shadow: inset 0 -2px 4px rgba(30,80,140,.35); animation: drip var(--d) ease-in forwards; }
@keyframes wetword { from { transform: translate(-50%, -50%) rotate(-8deg) scale(.2); opacity: 0; } }
@keyframes drip { 0% { transform: translateY(0) scaleY(1); } 100% { transform: translateY(45vh) scaleY(1.6); opacity: 0; } }
@keyframes wetfade { 0%, 70% { opacity: 1; } 100% { opacity: 0; } }

/* 冤家灵堂 */
.lt-chip { background: rgba(240,236,228,.88); color: #111; border-color: #111; }
.fade { position: fixed; inset: 0; z-index: 30; background: #000; opacity: 0; pointer-events: none; transition: opacity .55s ease; }
.fade.on { opacity: 1; pointer-events: auto; }
.lt-hud { position: fixed; inset: 0; z-index: 8; pointer-events: none; }
.lt-top { position: absolute; left: 50%; top: calc(12px + var(--safe-t, 0px)); transform: translateX(-50%); display: flex; flex-direction: column; align-items: center; padding: 8px 10px; background: #f4f1ea; color: #111; border: 2px solid #111; border-radius: 4px; font-family: var(--serif); box-shadow: 0 6px 20px rgba(0,0,0,.5); }
.lt-top strong { font-size: 17px; font-weight: 900; }
.lt-top span { font-size: 12px; color: #444; }
.lt-actions { position: absolute; left: 50%; transform: translateX(-50%); bottom: calc(18px + var(--safe-b)); display: flex; gap: 8px; align-items: center; pointer-events: auto; }
.lt-actions button { border-radius: 12px; font-family: var(--serif); font-weight: 900; white-space: nowrap; }
.lt-side { padding: 12px 12px; background: rgba(15,15,18,.85); color: #e8e4da; border: 1px solid #8d8778; font-size: 14px; font-weight: 400; border-radius: 6px; }
.lt-main { padding: 14px 18px; background: #f4f1ea; color: #111; border: 1px solid #111; font-size: 17px; font-weight: 700; border-radius: 6px; clip-path: polygon(8px 0, 100% 0, calc(100% - 8px) 100%, 0 100%); }
body.lt-on #hud, body.lt-on #actions, body.lt-on #ticker, body.lt-on #xgPanel, body.lt-on #bubble, body.lt-on #thursdayBand, body.lt-on #demoBand { display: none !important; }
.lt-gender { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
.lt-gender button { display: flex; align-items: center; gap: 10px; padding: 10px; border-radius: 8px; border: 1px solid var(--line-in); background: transparent; font-family: var(--serif); font-weight: 400; font-size: 16px; color: var(--cream); }
.lt-gender button[aria-pressed=true] { background: rgba(201,162,74,.16); color: #f1d27a; border-color: var(--gold); }
.lt-gender svg { width: 44px; height: 54px; flex: none; border-radius: 4px; }
.lt-tpls { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
.lt-tpls button { text-align: left; padding: 9px 11px; border-radius: 8px; border: 1px solid var(--line-in); background: transparent; font-family: var(--serif); font-weight: 400; font-size: 14px; color: var(--cream); }
.lt-tpls button[aria-pressed=true] { background: rgba(201,162,74,.16); color: #f1d27a; border-color: var(--gold); }
.lt-card { display: flex; gap: 14px; align-items: flex-start; margin-top: 8px; }
.lt-card svg { width: 72px; height: 88px; flex: none; border: 4px solid #e8e2d6; outline: 2px solid #1c1612; }
.lt-card dl { margin: 0; font-size: 14px; line-height: 1.6; }
.lt-card dt { color: var(--muted); font-size: 12px; }
.lt-card dd { margin: 0 0 6px; font-family: var(--serif); font-weight: 700; }
.lt-curse { margin-top: 12px; padding: 12px 14px; background: rgba(0,0,0,.35); border: 1px solid var(--line-in); color: #f1d27a; border-radius: 8px; font-family: var(--serif); font-weight: 400; line-height: 1.8; }
.lt-list { list-style: none; padding: 0; margin: 10px 0 0; display: grid; gap: 8px; }
.lt-list button { width: 100%; display: flex; justify-content: space-between; align-items: center; padding: 10px 12px; border-radius: 8px; border: 1px solid var(--line-in); background: transparent; font-family: var(--serif); font-weight: 400; font-size: 15px; color: var(--cream); }
.lt-list small { color: var(--muted); font-family: var(--sans); font-weight: 400; }

/* 平安币 + */
.coins { display: inline-flex; align-items: center; gap: 4px; }
.coin-plus { margin-left: 4px; width: 24px; height: 24px; border-radius: 50%; border: 0; background: var(--gold-light, #f1d27a); color: #3a1a0c; font-weight: 900; font-size: 17px; line-height: 1; display: grid; place-items: center; padding: 0; }
.coins.bump { animation: coinbump .5s ease; }
@keyframes coinbump { 40% { transform: scale(1.18); } }
.price-list { list-style: none; padding: 0; margin: 8px 0; }
.price-list li { display: flex; justify-content: space-between; padding: 8px 0; border-bottom: 1px dashed var(--line-in); }
.ad-btn { font-size: 17px; }
.ad-overlay { position: fixed; inset: 0; z-index: 40; background: rgba(0,0,0,.88); display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 18px; padding: 24px; }
.ad-card { position: relative; width: min(92vw, 420px); min-height: 360px; border-radius: 18px; padding: 70px 24px 28px; color: #fff4dc; text-align: center; box-shadow: 0 20px 60px rgba(0,0,0,.6); transition: background .6s; }
.ad-card h2 { font-family: var(--serif); font-size: 30px; margin: 16px 0 10px; }
.ad-card p { font-size: 17px; line-height: 1.7; margin: 0; }
.ad-tag { position: absolute; left: 14px; top: 12px; font-size: 12px; padding: 2px 8px; border-radius: 4px; background: rgba(255,255,255,.2); }
.ad-ring { --p: 0; width: 84px; height: 84px; margin: 0 auto; border-radius: 50%; display: grid; place-items: center; background: conic-gradient(#f1d27a calc(var(--p) * 360deg), rgba(255,255,255,.18) 0); }
.ad-ring span { width: 68px; height: 68px; border-radius: 50%; background: rgba(0,0,0,.55); display: grid; place-items: center; font-size: 28px; font-weight: 900; }
.ad-btns { display: flex; gap: 10px; width: min(92vw, 420px); }
.ad-btns .btn { flex: 1; }
.ad-btns .btn-ghost { color: #ddd; border-color: #777; }
.acct-code { margin: 10px 0; padding: 14px; border: 1px dashed var(--gold); border-radius: 8px; text-align: center; font-family: ui-monospace, Menlo, monospace; font-size: 22px; font-weight: 700; letter-spacing: .06em; background: rgba(0,0,0,.3); color: #efd48c; user-select: all; }
/* 十殿切换 */
.lt-top { pointer-events: auto; }
.lt-hallnav { display: flex; align-items: center; gap: 10px; }
.lt-hallnav strong { font-size: 17px; letter-spacing: .1em; padding-left: 0; white-space: nowrap; }
.lt-hallnav button { width: 34px; height: 34px; border-radius: 50%; border: 2px solid #111; background: #111; color: #f4f1ea; font-size: 14px; display: grid; place-items: center; padding: 0; }
.lt-hallnav button:disabled { opacity: .25; }

.coin-dot { width: 18px; height: 18px; border-radius: 50%; background: radial-gradient(circle at 35% 35%, #ffe9a6, #c9a24a 70%); color: #5a3a0c; font-style: normal; font-size: 11px; font-weight: 900; display: grid; place-items: center; font-family: var(--serif); }
.me-btn { max-width: 34vw; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
@media (max-width: 440px) { .coins-label { display: none; } .coins { padding: 6px 8px; } }
.hud-right { flex-direction: column; align-items: flex-end; gap: 6px; }
.me-btn { max-width: 42vw; font-size: 14px; padding: 6px 12px; }
.me-btn::after { content: " ›"; color: #cdbb98; }

.lt-top { min-width: min(94vw, 380px); }
.lt-hallnav { justify-content: space-between; width: 100%; }
.lt-hallnav strong { flex: 1; text-align: center; font-size: 16px; letter-spacing: .04em; }

.btn-ig { background: linear-gradient(45deg, #f58529, #dd2a7b 50%, #8134af); color: #fff; border: 0; }
.btn-th { background: #000; color: #fff; }

.hall-chip { cursor: pointer; }
.online-list { list-style: none; padding: 0; margin: 10px 0; display: grid; gap: 8px; }
.online-list li { display: flex; align-items: center; gap: 10px; padding: 8px 10px; border-radius: 8px; border: 1px solid var(--line-in); font-family: var(--serif); font-weight: 400; }
.online-list li.me { background: rgba(201,162,74,.14); }
.online-list small { margin-left: auto; color: var(--muted); font-family: var(--sans); font-weight: 400; }
.online-list .avatar-face { transform: scale(.62); margin: -12px -10px; }

.vol { width: 100%; accent-color: var(--gold); height: 32px; }

/* ---------- 求签 + 今日一字 ---------- */
.qian-chip { background: var(--red); color: var(--gold-light); border-color: var(--gold); }
.link-btn { background: none; border: 0; padding: 0 0 0 6px; color: #efd48c; font: inherit; font-weight: 700; text-decoration: underline; cursor: pointer; }
.qian-stage { min-height: 230px; display: flex; flex-direction: column; align-items: center; justify-content: center; margin-top: 12px; text-align: center; }
.qian-msg { margin: 10px 0 0; font-family: var(--serif); font-weight: 400; color: var(--cream); }
.qian-msg b { color: #efd48c; font-size: 1.15em; }
.qian-tube { position: relative; width: 96px; height: 190px; margin-top: 10px; transform-origin: 50% 90%; }
.qian-tube.shaking { animation: qianShake .16s ease-in-out infinite alternate; }
@keyframes qianShake { from { transform: rotate(-11deg) translateY(2px); } to { transform: rotate(11deg) translateY(-3px); } }
.qian-sticks { position: absolute; left: 14px; right: 14px; top: 0; height: 90px; display: flex; justify-content: space-around; align-items: flex-end; }
.qian-sticks i { display: block; width: 6px; height: 80px; background: linear-gradient(#e7c98e, #b98a4c); border-radius: 2px 2px 0 0; }
.qian-sticks i:nth-child(odd) { height: 70px; transform: rotate(-4deg); }
.qian-sticks i:nth-child(3n) { height: 88px; transform: rotate(5deg); }
.qian-body { position: absolute; left: 0; right: 0; bottom: 0; height: 120px; background: linear-gradient(90deg, #7d1a14, #c0392b 45%, #7d1a14); border-radius: 10px 10px 16px 16px; border-top: 6px solid var(--gold); display: flex; align-items: center; justify-content: center; box-shadow: 0 8px 18px rgba(0,0,0,.25); }
.qian-body span { writing-mode: vertical-rl; color: var(--gold-light); font-family: var(--serif); font-weight: 900; font-size: 22px; letter-spacing: .2em; }
.qian-out { position: absolute; left: 50%; top: -40px; transform: translateX(-50%) rotate(8deg); background: linear-gradient(#f0d9a6, #c89a5a); color: #7d1a14; font-family: var(--serif); font-weight: 900; font-size: 15px; writing-mode: vertical-rl; padding: 10px 4px; border-radius: 3px; box-shadow: 0 4px 10px rgba(0,0,0,.25); animation: qianPop .5s cubic-bezier(.2,1.6,.4,1) both; }
@keyframes qianPop { from { top: 40px; opacity: 0; } to { top: -40px; opacity: 1; } }
.jiao-drop { animation: jiaoDrop .7s cubic-bezier(.3,1.4,.5,1) both; }
@keyframes jiaoDrop { from { transform: translateY(-120px) rotate(-200deg); opacity: 0; } to { transform: none; opacity: 1; } }
.jiao-pair { display: flex; gap: 22px; justify-content: center; }
.jiao { margin: 0; width: 96px; text-align: center; }
.jiao svg { width: 96px; height: 56px; display: block; filter: drop-shadow(0 6px 6px rgba(0,0,0,.3)); }
.jiao.flip svg { transform: scaleX(-1) rotate(-6deg); }
.jiao:not(.flip) svg { transform: rotate(5deg); }
.jiao figcaption { font-family: var(--serif); font-weight: 900; font-size: 14px; color: #6b5a3e; margin-top: 2px; }
.qian-card { --on-paper: #2b1d12; --muted: #6b5640; color: #2b1d12; width: 100%; background: #f6ead0; border: 2px solid var(--gold); border-radius: 12px; padding: 14px 14px 10px; box-shadow: inset 0 0 0 4px #f6ead0, inset 0 0 0 5px rgba(179,38,30,.35); }
.qian-no { margin: 0; font-family: var(--serif); font-weight: 900; font-size: 20px; color: var(--red-deep); }
.qian-grade { display: inline-block; margin: 8px 0; padding: 4px 16px; border-radius: 999px; color: var(--gold-light); font-family: var(--serif); font-weight: 900; font-size: 18px; letter-spacing: .1em; }
.qian-poem { display: flex; flex-direction: row-reverse; justify-content: center; gap: 14px; margin: 10px 0; }
.qian-poem span { writing-mode: vertical-rl; font-family: var(--serif); font-weight: 900; font-size: 22px; letter-spacing: .12em; color: #1b1410; }
.qian-jie { margin: 6px 0; font-family: var(--serif); color: #3a2416; }
.qian-jie b { color: var(--red); }
.qian-aspects { list-style: none; padding: 0; margin: 8px 0 0; display: grid; grid-template-columns: repeat(auto-fit, minmax(92px, 1fr)); gap: 6px; }
.qian-aspects li { background: #fff8e8; border: 1px solid #e5cf9a; border-radius: 8px; padding: 6px 4px; display: flex; flex-direction: column; gap: 2px; font-size: 13px; }
.qian-aspects li span { color: #8a7350; }
.qian-aspects li b { color: #3a2416; font-weight: 700; }
.word-seal { width: 150px; height: 150px; margin: 16px auto 10px; background: var(--red); color: var(--gold-light); font-family: var(--serif); font-weight: 900; font-size: 104px; line-height: 150px; text-align: center; border-radius: 12px; box-shadow: inset 0 0 0 7px var(--red), inset 0 0 0 10px var(--gold-light), 0 10px 24px rgba(125,26,20,.35); animation: sealIn .6s cubic-bezier(.2,1.5,.4,1) both; }
@keyframes sealIn { from { transform: scale(1.6) rotate(-8deg); opacity: 0; } to { transform: none; opacity: 1; } }
.word-say { text-align: center; font-family: var(--serif); font-weight: 400; font-size: 17px; color: var(--cream); margin: 6px 0; }
.word-yiji { display: flex; justify-content: center; gap: 18px; font-family: var(--serif); font-weight: 700; }
.word-yiji .yi { color: #8fd49a; }
.word-yiji .ji { color: #f08a5a; }
.word-gift { text-align: center; margin: 10px 0 0; color: #cdb98a; }
.word-gift b { color: #efd48c; }
.qian-stage > p { width: 100%; }
.qian-stage .qian-tube { margin-top: 48px; }

/* ---------- 连续上香 + 四方拿督 ---------- */
.name-badge { display: inline-flex; align-items: center; justify-content: center; width: 20px; height: 20px; margin-right: 4px; border-radius: 50%; border: 1.5px solid var(--gold-light); color: var(--gold-light); font-family: var(--serif); font-weight: 900; font-size: 12px; font-style: normal; vertical-align: -3px; }
.streak-box { margin: 14px 0 0; padding: 10px 12px; background: var(--panel-in); border: 1px solid var(--line-in); border-radius: 8px; text-align: center; }
.streak-box p { margin: 6px 0 0; font-family: var(--serif); color: var(--cream); }
.streak-box p b { color: #efd48c; }
.streak-box .muted { font-family: inherit; font-size: 12px; }
.streak-dots { display: flex; justify-content: center; gap: 8px; }
.streak-dots i { width: 22px; height: 22px; border-radius: 50%; background: rgba(255,255,255,.06); box-shadow: inset 0 0 0 1px var(--line-in); }
.streak-dots i.on { background: radial-gradient(circle at 50% 35%, #ffd27a, #c0392b 70%); box-shadow: 0 0 8px rgba(255,160,60,.6); }
.badge-box { margin: 10px 0 4px; padding: 8px 12px; background: var(--panel-in); border: 1px solid var(--line-in); border-radius: 8px; }
.badge-box p { margin: 4px 0; font-size: 14px; color: var(--cream); }
.badge-box b { color: #efd48c; }
.sf-chips { display: flex; justify-content: center; gap: 10px; margin: 12px 0 6px; }
.sf-chip { width: 44px; height: 44px; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-family: var(--serif); font-weight: 700; font-size: 20px; background: rgba(255,255,255,.05); color: #8a7a62; box-shadow: inset 0 0 0 1px var(--line-in); }
.sf-chip.on { background: #2f6b4f; color: var(--gold-light); box-shadow: inset 0 0 0 2px var(--gold-light), 0 0 10px rgba(47,107,79,.5); }
.online-list .name-badge { width: 18px; height: 18px; font-size: 11px; }

/* ---------- 灵雾林 · 放天灯 ---------- */
.td-chip { background: #1d3a30; color: #d6f5e6; border-color: #6fbf9a; }
.install-chip { background: #c9a24a; color: #1b1410; border-color: #f1d27a; font-weight: 700; }
body.fs-on #hud, body.fs-on #actions, body.fs-on #ticker, body.fs-on #xgPanel, body.fs-on #bubble, body.fs-on #thursdayBand, body.fs-on #demoBand, body.fs-on #zoomCtl { display: none !important; }
.fs-hud { position: fixed; inset: 0; z-index: 8; pointer-events: none; }
.fs-top { position: absolute; left: 50%; top: calc(14px + var(--safe-t, 0px)); transform: translateX(-50%); display: flex; flex-direction: column; align-items: center; gap: 2px; padding: 8px 18px; background: var(--panel); color: var(--cream); border: 1px solid var(--line); border-radius: 8px; font-family: var(--serif); box-shadow: 0 6px 20px rgba(0,0,0,.4); white-space: nowrap; backdrop-filter: blur(8px); }
.fs-top strong { font-size: 17px; font-weight: 700; letter-spacing: .12em; color: #efd48c; }
.fs-top span { font-size: 12px; color: #a9cfc0; }
.fs-actions { position: absolute; left: 50%; transform: translateX(-50%); bottom: calc(20px + var(--safe-b, 0px)); display: flex; gap: 10px; align-items: center; pointer-events: auto; transition: opacity .6s; }
.fs-actions button { border-radius: 6px; font-family: var(--serif); font-weight: 400; white-space: nowrap; letter-spacing: .06em; }
.fs-main { padding: 15px 22px; background: var(--gold-grad); color: #2a1a08; border: 0; font-size: 17px; font-weight: 700; box-shadow: 0 6px 18px rgba(0,0,0,.4); clip-path: polygon(8px 0, 100% 0, calc(100% - 8px) 100%, 0 100%); }
.fs-side { padding: 12px 14px; background: var(--panel); color: var(--cream); border: 1px solid var(--line); font-size: 14px; backdrop-filter: blur(8px); }
body.fs-flying .fs-actions, body.fs-flying .fs-top { opacity: 0; pointer-events: none; }
/* HUD 五个掣：手机窄就细啲、放唔落就落第二行 */
.hud-left { min-width: 0; flex: 1 1 auto; }
.hud-row { flex-wrap: wrap; }
@media (max-width: 430px) { .hud-row .lore-btn, .hud-row .sound-btn { font-size: 12px; padding: 5px 8px; } }
.hud-right { flex: none; }

/* ---------- 手机走路摇杆 ---------- */
.joy { position: fixed; z-index: 9; right: 16px; bottom: calc(100px + var(--safe-b, 0px)); width: 88px; height: 88px; border-radius: 50%; background: radial-gradient(circle, rgba(255,255,255,.05), rgba(255,255,255,.12)); border: 1.5px solid rgba(241,210,122,.35); touch-action: none; -webkit-user-select: none; user-select: none; display: flex; align-items: center; justify-content: center; opacity: .5; transition: opacity .2s; }
.joy.on { opacity: .95; }
.joy-knob { width: 42px; height: 42px; border-radius: 50%; background: radial-gradient(circle at 40% 35%, rgba(255,236,180,.75), rgba(201,162,74,.55)); border: 1.5px solid rgba(255,240,200,.6); box-shadow: 0 2px 8px rgba(0,0,0,.35); pointer-events: none; transition: transform .12s ease-out; }
.joy.on .joy-knob { transition: none; }
.joy[hidden], body.sheet-open .joy, body.lt-on .joy, body.fs-on .joy { display: none; }
body.xg-open .joy { bottom: calc(150px + var(--safe-b, 0px)); }   /* 许愿后底下有「再许愿/抛钱币/离开」，摇杆移高啲 */
@media (hover: hover) and (pointer: fine) { .joy { display: none; } }

/* ---------- 三昧真火烧小人 ---------- */
.xr-fire { position: absolute; inset: 0; width: 100%; height: 100%; pointer-events: none; z-index: 5; }
.xr-fire-glow { position: absolute; inset: 0; pointer-events: none; z-index: 4; background: radial-gradient(ellipse at 50% 70%, rgba(255,140,40,.55), rgba(255,60,20,.15) 55%, rgba(0,0,0,0) 80%); opacity: 0; transition: opacity .4s; }
.xr-fire-glow.on { opacity: 1; animation: fireFlicker .12s infinite alternate; }
@keyframes fireFlicker { from { filter: brightness(1); } to { filter: brightness(1.25); } }
.xr-fire-say { position: absolute; left: 0; right: 0; top: 14px; z-index: 6; text-align: center; font-family: var(--serif); font-weight: 900; font-size: 30px; letter-spacing: .12em; color: #fff3c0; text-shadow: 0 0 10px #ff8a00, 0 0 22px #ff3a00, 0 2px 0 #7d1a14; animation: sayIn .45s cubic-bezier(.2,1.6,.4,1) both; pointer-events: none; }
.xr-fire-say.end { color: #e8e2d6; text-shadow: 0 0 8px rgba(0,0,0,.8); font-size: 24px; animation: sayIn .4s ease-out both; }
@keyframes sayIn { from { transform: scale(1.8); opacity: 0; } to { transform: none; opacity: 1; } }
.xr-stage.xr-shake { animation: xrShake .09s infinite alternate; }
@keyframes xrShake { from { transform: translate(-2px, 1px); } to { transform: translate(2px, -1px); } }

/* ---------- 锦旗 / 祈福树 ---------- */
.banner-pick { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 6px; }
.banner-pick button { padding: 7px 10px; border-radius: 6px; border: 1px solid var(--line-in); background: transparent; color: var(--cream); font-family: var(--serif); font-weight: 400; font-size: 14px; }
.banner-pick button[aria-pressed="true"] { background: rgba(201,162,74,.18); color: #f1d27a; border-color: var(--gold); }
.ribbon-list { list-style: none; padding: 0; margin: 6px 0; max-height: 220px; overflow: auto; }
.ribbon-list li { padding: 7px 10px; margin-bottom: 5px; background: linear-gradient(90deg, #c0201a 0 4px, var(--panel-in) 4px); border: 1px solid var(--line-in); border-radius: 6px; font-size: 14px; color: var(--cream); }
.ribbon-list li b { color: #efd48c; }
.ribbon-list small { display: block; color: #8a7350; font-size: 11px; }
/* 手机：字幕让位俾右下角摇杆 */
@media (hover: none), (pointer: coarse) { body:not(.lt-on):not(.fs-on) .ticker { right: 124px; } }
.fs-main.off { background: rgba(60,60,60,.85); color: #ddd; border-color: #888; box-shadow: none; }
.td-notice { font-family: var(--serif); font-weight: 400; font-size: 19px; color: #efd48c; text-align: center; padding: 12px; border: 1px solid var(--gold); border-radius: 8px; background: var(--panel-in); }

/* ---------- 紫微先生 ---------- */
.zw-form { display: grid; gap: 8px; }
.zw-row { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; margin-top: 6px; }
.zw-lb { font-weight: 700; font-size: 14px; min-width: 64px; color: var(--on-paper); }
.chip-r { position: relative; }
.chip-r input { position: absolute; opacity: 0; pointer-events: none; }
.chip-r span { display: inline-block; padding: 7px 14px; border-radius: 6px; border: 1px solid var(--line-in); background: transparent; color: var(--cream); font-size: 14px; font-weight: 500; }
.chip-r input:checked + span { background: rgba(201,162,74,.18); border-color: var(--gold); color: #efd48c; }
.chip-r input:focus-visible + span { outline: 3px solid var(--gold-light); outline-offset: 2px; }
.sheet .zw-form input[type=date], .sheet .zw-form input[type=time], .sheet .zw-form input[type=number], .sheet .zw-form select {
  width: 100%; font: inherit; font-size: 16px; padding: 10px 12px; border-radius: 6px; border: 1px solid var(--line-in); background: rgba(0,0,0,.35); color: var(--cream); color-scheme: dark; }
.zw-inline { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; }
.sheet .zw-inline select { width: auto; flex: 1 1 80px; }
.sheet .zw-inline input[type=number] { width: auto; flex: 1 1 120px; }
.zw-inline > span { color: var(--on-paper); }
.zw-inline .muted, .zw-form .muted { flex-basis: 100%; margin: 4px 0 0; font-size: 12.5px; }
.zw-leap { display: inline-flex; align-items: center; gap: 4px; font-size: 14px; color: var(--on-paper); }
.zw-warn { background: rgba(224,160,64,.12); border: 1px solid #e0a040; border-radius: 8px; padding: 10px 12px; color: #f0c890; font-size: 14px; line-height: 1.6; margin-bottom: 10px; }
.zw-warn .btn { margin-top: 8px; width: 100%; }
.zw-grid { --on-paper: #2b1d12; --muted: #6b5640; display: grid; grid-template-columns: repeat(4, 1fr); gap: 2px; background: #7a5a30; border: 2px solid #7a5a30; border-radius: 8px; overflow: hidden; font-family: var(--serif); }
.zw-cell { background: #fbf3df; min-height: 92px; padding: 4px; display: flex; flex-direction: column; color: var(--on-paper); }
.zw-cell.ming { background: #ffe9c4; box-shadow: inset 0 0 0 2px var(--red); }
.zw-st { display: flex; flex-direction: column; gap: 1px; }
.zw-st i, .zw-ax i { font-style: normal; white-space: nowrap; }
.zw-st .mj { font-weight: 800; font-size: 13.5px; color: #7d1a14; }
.zw-st .kong { color: #a08a6a; font-size: 12px; }
.zw-st small { font-size: 10px; color: #8a6a40; margin-left: 1px; font-weight: 600; }
.zw-ax { display: flex; flex-wrap: wrap; gap: 0 4px; margin-top: 2px; font-size: 11px; color: #4a3a2a; }
.zw-cell em { font-style: normal; font-size: 10px; color: #fff; border-radius: 3px; padding: 0 2px; margin-left: 2px; font-weight: 700; }
.zw-cell em.lu { background: #2f8a4a; } .zw-cell em.quan { background: #8a3ab8; } .zw-cell em.ke { background: #2f6fb8; } .zw-cell em.ji { background: #c0201a; }
.zw-dx { margin-top: auto; font-size: 10px; color: #8a7458; font-family: var(--sans); }
.zw-foot { display: flex; justify-content: space-between; align-items: flex-end; font-size: 10.5px; color: #6b5640; gap: 2px; }
.zw-foot span:first-child { font-weight: 800; color: var(--red-deep); font-size: 12px; }
.zw-foot b { background: var(--red); color: var(--gold-light); border-radius: 3px; padding: 0 2px; margin-left: 2px; font-size: 10px; }
.zw-center { grid-column: 2 / span 2; grid-row: 2 / span 2; background: #2a1f18; color: #f1d27a; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 4px; text-align: center; padding: 8px; font-size: 13px; }
.zw-center b { font-size: 15px; }
.zw-center .muted { color: #c9b48a; }
.zw-text { font-size: 12px !important; font-family: ui-monospace, Menlo, monospace !important; }
@media (max-width: 380px) { .zw-cell { min-height: 84px; } .zw-st .mj { font-size: 12.5px; } }

/* ===== English 模式：字长咗，收细啲、唔好拉阔字距，排位同中文一样 ===== */
.lang-en .hall-chip strong { font-size: 15px; letter-spacing: .02em; }
.lang-en .act-side { font-size: 11.5px !important; line-height: 1.05; letter-spacing: 0; padding: 0 3px; }
.lang-en .act-main-title { letter-spacing: .06em; padding-left: .06em; }
.lang-en .btn-primary, .lang-en .xr-hit { letter-spacing: .03em; padding-left: 0; }
.lang-en .xr-hit { font-size: 28px; }
.lang-en .splash-plaque { font-size: clamp(26px, 7.5vw, 52px); letter-spacing: .04em; padding: .3em .6em; }
.lang-en .splash-line { letter-spacing: .08em; }
.lang-en .sheet h2 { letter-spacing: 0; font-size: 24px; }
.lang-en .qian-grade, .lang-en .lt-hallnav strong, .lang-en .fs-top strong { letter-spacing: .02em; }
.lang-en .xr-paper-name { writing-mode: horizontal-tb; font-size: 18px; letter-spacing: 0; max-width: 120px; max-height: none; word-break: break-word; line-height: 1.1; }
.lang-en .xr-fire-say { font-size: 24px; letter-spacing: .02em; }
.lang-en .lore-btn { font-size: 12.5px; padding: 5px 10px; }
@media (max-width: 380px) { .lang-en .act-side { font-size: 10.5px !important; } .lang-en .hall-chip strong { font-size: 13.5px; } }
.lang-en .lamp-opt b { font-size: 15px; line-height: 1.15; }
.lang-en .banner-pick button { font-size: 13px; }

/* 英文游戏字体（自带，唔靠 Google Fonts）：Fredoka = 标题、按钮；Nunito = 内文。中文字自动跌返 Noto */
@font-face { font-family: "Fredoka"; src: url("../fonts/fredoka.woff2") format("woff2"); font-weight: 300 700; font-display: swap; }
@font-face { font-family: "Nunito"; src: url("../fonts/nunito.woff2") format("woff2"); font-weight: 200 1000; font-display: swap; }
:root.lang-en {
  --serif: "Fredoka", "Noto Serif SC", "Songti SC", serif;
  --sans: "Nunito", "Noto Sans SC", "PingFang SC", system-ui, sans-serif;
}
.lang-en .sheet h2, .lang-en .sheet h3 { font-weight: 600; }
.lang-en .btn-primary, .lang-en .act-main-title, .lang-en .act-side, .lang-en .hall-chip strong { font-weight: 600; }
.lang-en .sheet p, .lang-en .sheet li { font-weight: 500; }
/* 英文：签诗横排、今日一字下面加英文字 */
.lang-en .qian-poem { display: block; text-align: center; }
.lang-en .qian-poem span { writing-mode: horizontal-tb; display: block; font-size: 17px; letter-spacing: 0; line-height: 1.5; font-weight: 600; }
.lang-en .word-seal { display: flex; flex-direction: column; align-items: center; justify-content: center; }
.lang-en .word-seal small { display: block; font-family: var(--serif); font-size: 18px; letter-spacing: .08em; text-transform: uppercase; line-height: 1; margin-top: 2px; }
.lang-en .word-seal { line-height: 1; font-size: 84px; }
/* 今日一字掣（主画面） */
.word-chip { background: rgba(179,38,30,.88); border-color: rgba(241,210,122,.7); color: #f7e3a8; }
/* 英文：问卦掣副题分两行，唔好贴边 */
.lang-en .act-main { padding: 0 10px; }
.lang-en .act-main-sub { white-space: normal; max-width: 112px; text-align: center; line-height: 1.15; font-size: 10.5px; }
/* 敲木鱼掣（右上，名下面） */
.muyu-btn { background: linear-gradient(180deg, #b7682f, #7a3a14); border: 1px solid rgba(241,210,122,.7); color: #fff1c8; border-radius: 999px; padding: 6px 14px; font-family: var(--serif); font-weight: 700; font-size: 14px; box-shadow: 0 3px 0 #4a2008, 0 6px 14px rgba(0,0,0,.35); animation: muyuNudge 4s ease-in-out infinite; }
.muyu-btn:active { transform: translateY(2px); box-shadow: 0 1px 0 #4a2008; }
.muyu-btn:disabled { opacity: .6; }
@keyframes muyuNudge { 0%, 88%, 100% { transform: rotate(0); } 91% { transform: rotate(-6deg); } 94% { transform: rotate(6deg); } 97% { transform: rotate(-3deg); } }
/* 破庙 */
body.rm-on #hud, body.rm-on #actions, body.rm-on #ticker, body.rm-on #xgPanel, body.rm-on #bubble, body.rm-on #thursdayBand, body.rm-on #demoBand, body.rm-on #zoomCtl { display: none !important; }
body.rm-on .joy { display: none; }
.rm-hud .fs-top { background: rgba(20,14,10,.78); border-color: rgba(241,210,122,.45); }
.rm-hud .fs-top span { color: #d8c79a; }
.rm-hud .fs-main { background: linear-gradient(#c98a4a, #8a4a1c); color: #fff3d0; border-color: #f1d27a; box-shadow: 0 0 22px rgba(255,190,90,.45); }
.rm-hud .fs-side { background: rgba(20,14,10,.82); color: #f1d27a; border-color: #b8945a; }
/* 地洞 · 问水婆婆 */
body.cl-on #hud, body.cl-on #actions, body.cl-on #ticker, body.cl-on #xgPanel, body.cl-on #bubble, body.cl-on #thursdayBand, body.cl-on #demoBand, body.cl-on #zoomCtl { display: none !important; }
body.cl-on .joy { display: none; }
.cl-hud .fs-top { background: rgba(8,22,28,.8); border-color: rgba(140,220,255,.45); }
.cl-hud .fs-top span { color: #a8d8e8; }
.cl-hud .fs-main { background: linear-gradient(#7ad8f0, #2a8aa8); color: #04161c; border-color: #c8f4ff; box-shadow: 0 0 22px rgba(90,210,255,.45); }
.cl-hud .fs-side { background: rgba(8,22,28,.85); color: #c8f0ff; border-color: #5aa8c0; }
body.cl-rite .cl-hud .fs-top, body.cl-rite .cl-hud .fs-actions { opacity: 0; pointer-events: none; }
.cl-sub { position: absolute; left: 50%; bottom: calc(40px + var(--safe-b, 0px)); transform: translateX(-50%); width: min(88vw, 520px); text-align: center; padding: 10px 16px; border-radius: 12px; background: rgba(6,14,18,.72); color: #e8f6ff; font-family: var(--serif); font-weight: 700; font-size: 16px; line-height: 1.5; text-shadow: 0 0 8px rgba(80,200,255,.5); pointer-events: none; }
.cl-sub.in { animation: clSub .7s ease both; }
@keyframes clSub { from { opacity: 0; transform: translate(-50%, 10px); } to { opacity: 1; transform: translate(-50%, 0); } }
.cl-dir { display: flex; align-items: center; justify-content: center; gap: 14px; margin: 10px 0 6px; }
.cl-dir span { color: var(--muted); font-size: 14px; }
.cl-dir b { font-family: var(--serif); font-weight: 700; font-size: 44px; color: #7ad8f0; letter-spacing: .06em; text-shadow: 0 0 14px rgba(90,200,240,.4); }
.cl-list { list-style: none; padding: 0; margin: 6px 0 10px; }
.cl-list li { padding: 8px 2px; border-bottom: 1px dashed rgba(122,90,48,.35); line-height: 1.5; }
.cl-list li span { display: inline-block; min-width: 76px; color: #7ad8f0; font-weight: 700; margin-right: 6px; }
.cl-safety { background: rgba(192,57,43,.14); border: 1px solid #c0392b; color: #f0b0a0; border-radius: 8px; padding: 8px 12px; font-weight: 700; }
.lang-en .cl-dir b { font-size: 36px; letter-spacing: 0; }
.cl-person { background: rgba(31,111,136,.14); border: 1px solid rgba(122,216,240,.35); border-radius: 8px; padding: 10px 14px; margin: 8px 0; }
.cl-person h3 { margin: 0 0 4px; color: #7ad8f0; font-family: var(--serif); }
.cl-person p { margin: 4px 0; line-height: 1.6; }
/* 宠物灵堂（毛孩天堂）：入面可以用摇杆行，所以唔收摇杆同缩放掣 */
body.pt-on #hud, body.pt-on #actions, body.pt-on #ticker, body.pt-on #xgPanel, body.pt-on #bubble, body.pt-on #thursdayBand, body.pt-on #demoBand { display: none !important; }
.pt-hud .fs-top { background: rgba(255,248,252,.88); border-color: rgba(255,160,190,.6); }
.pt-hud .fs-top strong { color: #c0506a; }
.pt-hud .fs-top span { color: #8a6a7a; }
.pt-hud .fs-main { background: linear-gradient(#ffb0c8, #f07a9a); color: #4a0e20; border-color: #fff0f4; box-shadow: 0 0 18px rgba(255,150,180,.5); }
.pt-hud .fs-side { background: rgba(255,248,252,.92); color: #c0506a; border-color: #f0a0b8; }
.pt-preview { display: block; width: 100%; height: 220px; border-radius: 14px; background: radial-gradient(circle at 50% 60%, #fff6f8, #fde2ea); margin: 6px 0 10px; }
.pt-chips { flex-wrap: wrap; }
.pt-chips .chip { font-size: 13px; padding: 5px 10px; }
.pt-sw { display: flex; flex-wrap: wrap; gap: 6px; }
.pt-sw button { width: 30px; height: 30px; border-radius: 50%; border: 2px solid rgba(0,0,0,.15); }
.pt-sw button[aria-pressed=true] { outline: 3px solid #c0506a; outline-offset: 2px; }
.pt-sw button.auto { width: auto; padding: 0 10px; border-radius: 15px; background: rgba(255,255,255,.12); color: var(--cream); font-size: 12px; }
.pt-msg { margin: 8px 0; padding: 8px 12px; border-left: 2px solid #f0a0b8; background: rgba(240,160,184,.1); color: var(--cream); font-family: var(--serif); }
.pt-stats { display: flex; gap: 14px; justify-content: center; margin: 8px 0 10px; font-weight: 700; color: #f0b0c8; }
.pt-vis { list-style: none; padding: 0; margin: 6px 0; max-height: 200px; overflow-y: auto; }
.pt-vis li { display: flex; gap: 8px; align-items: center; padding: 5px 2px; border-bottom: 1px dashed rgba(122,90,48,.3); font-size: 14px; }
.pt-vis li span { color: var(--muted); font-size: 12px; min-width: 40px; }
.pt-vis li b { margin-left: auto; color: #f0b0c8; font-weight: 700; }
/* 录天灯短片 */
.film-ov { position: fixed; inset: 0; z-index: 90; display: flex; align-items: flex-end; justify-content: center; padding: 0 16px calc(env(safe-area-inset-bottom) + 24px); pointer-events: none; }
.film-box { pointer-events: auto; background: rgba(20,14,30,.88); color: #ffe9b0; border: 1px solid rgba(255,210,122,.5); border-radius: 16px; padding: 12px 16px; display: flex; flex-direction: column; gap: 8px; align-items: center; min-width: 240px; font-family: var(--serif); }
.film-box i { display: block; width: 100%; height: 6px; border-radius: 3px; background: rgba(255,255,255,.15); overflow: hidden; }
.film-box s { display: block; height: 100%; width: 0; background: #ffd27a; }
.film-prev { width: 100%; max-height: 52vh; border-radius: 12px; background: #000; display: block; margin: 6px 0 10px; }
/* 冤家灵堂超度字幕 */
#ltSub { position: fixed; z-index: 60; bottom: calc(60px + env(safe-area-inset-bottom)); color: #f4f1ea; text-shadow: 0 0 8px rgba(255,200,120,.5); background: rgba(10,10,14,.72); }
body.lt-rite #ltHud { display: none !important; }
/* 录短片掣：一行显示晒 */
#tdFilm, #clFilm, #ptFilm, #ltFilm, #bcFilm, #zwFilm { font-size: 14px; white-space: nowrap; padding-left: 8px; padding-right: 8px; overflow: hidden; text-overflow: ellipsis; }

/* 紫微先生 · 天罡北斗阵过场 */
.zw-show { position: fixed; inset: 0; z-index: 9000; background: #05060f; }
.zw-show canvas { width: 100%; height: 100%; display: block; }
.zw-skip { position: absolute; top: calc(12px + env(safe-area-inset-top)); right: 12px; padding: 8px 14px; border-radius: 99px; border: 1px solid rgba(255,255,255,.35); background: rgba(0,0,0,.45); color: #fff; font-size: 14px; }

/* 毛孩相片：椭圆 */
.pt-photo { display: block; width: 150px; height: 200px; object-fit: cover; border-radius: 50%; border: 5px solid #d8a860; box-shadow: 0 0 0 3px #fff8ec inset; margin: 4px auto 10px; background: #f3e7da; }
.pt-photo.sm { width: 60px; height: 80px; border-width: 3px; margin: 0; }
.pt-ph-row { display: flex; align-items: center; gap: 12px; }
.pc-ov { position: fixed; inset: 0; z-index: 9500; background: rgba(10,7,5,.75); display: flex; align-items: center; justify-content: center; padding: 16px; }
.pc-box { background: #17110c; color: var(--cream); border: 1px solid var(--line); border-radius: 12px; padding: 16px; width: min(320px, 100%); display: grid; gap: 12px; justify-items: center; }
.pc-box b { font-size: 15px; text-align: center; }
.pc-stage { touch-action: none; border-radius: 12px; cursor: grab; max-width: 100%; }
.pc-zoom { width: 100%; }
.pc-box .btn-row { width: 100%; }

/* 分享：细圆掣（40px 圆 + 细字），一排排开，中间留位 */
.share-round { display: flex; flex-wrap: wrap; justify-content: center; gap: 10px 6px; margin: 6px 0 4px; }
.sh-r { display: flex; flex-direction: column; align-items: center; gap: 4px; width: 44px; padding: 0; border: 0; background: none; color: var(--cream); text-decoration: none; cursor: pointer; font: inherit; -webkit-tap-highlight-color: transparent; }
.sh-r i { width: 42px; height: 42px; border-radius: 50%; display: grid; place-items: center; color: #fff; box-shadow: 0 2px 6px rgba(0,0,0,.18); transition: transform .12s; }
.sh-r:active i { transform: scale(.9); }
.sh-r svg { width: 22px; height: 22px; }
.sh-r span { font-size: 9.5px; line-height: 1.1; white-space: nowrap; opacity: .85; letter-spacing: -.2px; }
.sh-r:disabled { opacity: .5; }
.sh-img i { background: #b0291f; }
.sh-save i { background: #5a4a38; }
.sh-copy i { background: #7a6a55; }
.sh-wa i { background: #1faa55; }
.sh-fb i { background: #1877f2; }
.sh-ig i { background: radial-gradient(circle at 30% 107%, #fdf497 0%, #fd5949 45%, #d6249f 60%, #285aeb 90%); }
.sh-th i { background: #000; }

/* 点灯：搜名、我的灯、添油 */
.lamp-search-row { display: flex; gap: 8px; }
.lamp-search-row input { flex: 1; min-width: 0; }
.lamp-search-row .btn { flex: 0 0 auto; padding-left: 18px; padding-right: 18px; }
.lamp-found { list-style: none; margin: 8px 0 0; padding: 0; display: grid; gap: 6px; }
.lamp-found button { width: 100%; display: flex; align-items: center; gap: 10px; padding: 9px 12px; border-radius: 8px; border: 1px solid var(--line-in); background: var(--panel-in); color: var(--cream); text-align: left; font: inherit; }
.lamp-found i { width: 14px; height: 14px; border-radius: 50%; box-shadow: 0 0 8px currentColor; flex: 0 0 auto; }
.lamp-found b { font-size: 16px; }
.lamp-found small { margin-left: auto; opacity: .7; font-size: 12px; }
.lamp-mine-go { margin-left: auto; flex: 0 0 auto; border: 0; border-radius: 99px; padding: 6px 12px; background: #b0291f; color: #fff; font: inherit; font-size: 13px; white-space: nowrap; }
.lamp-oil-n { font-size: 16px; font-weight: 700; color: #efd48c; margin: 6px 0 10px; }
.my-lamps .lamp-mine-go { flex-basis: 100%; margin: 2px 0 0; padding: 8px 12px; }
.my-lamps li { flex-wrap: wrap; }

/* 第一次免费 */
.free-note { margin: 6px 0 0; color: #8fd49a; font-weight: 700; font-size: 13px; }
.btn.is-free { box-shadow: 0 0 0 3px rgba(60,170,90,.35); }
/* 新手引导：气泡 + 按钮发光 */
.guide-bubble { position: fixed; z-index: 60; background: rgba(16,11,8,.94); color: var(--cream); border: 1px solid var(--gold); border-radius: 8px; padding: 10px 34px 10px 12px; font-size: 14px; line-height: 1.45; box-shadow: 0 8px 24px rgba(0,0,0,.35); animation: gbIn .3s ease-out; }
.guide-bubble::after { content: ""; position: absolute; left: calc(var(--ax, 50%) - 8px); bottom: -9px; border: 8px solid transparent; border-top-color: var(--gold); border-bottom: 0; }
.guide-bubble.below::after { bottom: auto; top: -9px; border-top: 0; border-bottom: 8px solid var(--gold); }
.guide-bubble button { position: absolute; top: 4px; right: 6px; width: 26px; height: 26px; border: 0; background: none; font-size: 20px; color: #a8906a; }
.guide-pulse { animation: gPulse 1.2s ease-in-out infinite; }
@keyframes gPulse { 0%, 100% { box-shadow: 0 0 0 0 rgba(255,210,110,.9); } 50% { box-shadow: 0 0 0 12px rgba(255,210,110,0); } }
@keyframes gbIn { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }
/* 有「录短片」圆掣：8 个排成 4 × 2，整齐 */
.share-round.has-film { display: grid; grid-template-columns: repeat(4, 1fr); justify-items: center; gap: 10px 6px; max-width: 300px; margin-left: auto; margin-right: auto; }
.sh-film i { background: linear-gradient(135deg, #ff3b5c, #8a2be2); }
body.sheet-open .guide-bubble, body.rm-on .guide-bubble, body.fs-on .guide-bubble, body.lt-on .guide-bubble, body.cl-on .guide-bubble, body.pt-on .guide-bubble { display: none; }

/* 点灯：大图卡（唔预选） */
.lamp-card { grid-template-columns: 1fr; text-align: center; justify-items: center; padding: 10px 8px 12px; gap: 2px; position: relative; }
.lamp-card .lamp-pic { width: 72px; height: 62px; display: block; }
.lamp-card .lamp-pic svg { width: 100%; height: 100%; }
.lamp-card small { line-height: 1.35; }
.lamp-card em { font-style: normal; font-size: 11px; font-weight: 700; color: #8fd49a; margin-top: 2px; }
.lamp-card.paid { border-color: #d4a017; background: linear-gradient(180deg, rgba(255,220,100,.12), transparent); }
.lamp-card.paid em { color: #e8c060; }
.lamp-card.paid { grid-column: 1 / -1; }
.lamp-card[aria-pressed=true] em { color: #ffd890; }

/* 深夜模式 */
.night-acts { display: grid; gap: 10px; margin: 14px 0 10px; }
.night-acts .btn-ghost { color: var(--cream); }

/* 留住玩家：底部提示条 */
.keep-bar { position: fixed; left: 12px; right: 12px; bottom: calc(env(safe-area-inset-bottom) + 96px); z-index: 55; max-width: 520px; margin: 0 auto; display: flex; align-items: center; gap: 8px; background: rgba(16,11,8,.94); color: var(--cream); border: 1px solid var(--gold); border-radius: 8px; padding: 10px 8px 10px 12px; box-shadow: 0 8px 24px rgba(0,0,0,.35); font-size: 13.5px; line-height: 1.4; animation: gbIn .3s ease-out; }
.keep-bar span { flex: 1; }
.keep-bar .kb-go { flex: none; border: 0; border-radius: 4px; background: var(--gold-grad); color: #2a1a08; font: inherit; font-weight: 700; padding: 8px 12px; white-space: nowrap; }
.keep-bar .kb-x { flex: none; border: 0; background: none; font-size: 20px; color: #a8906a; width: 28px; height: 28px; }
body.sheet-open .keep-bar, body.rm-on .keep-bar, body.fs-on .keep-bar, body.lt-on .keep-bar, body.cl-on .keep-bar, body.pt-on .keep-bar { display: none; }
.xfer-pic { display: flex; align-items: center; justify-content: center; gap: 10px; margin: 10px 0; font-weight: 700; }
.xfer-pic span { background: rgba(0,0,0,.35); border: 1px solid var(--line-in); color: #ffe9b0; border-radius: 8px; padding: 8px 12px; }
.xfer-url { width: 100%; font-size: 13px; }
body.guiding .keep-bar { display: none; }

/* 周四天尊夜 · 集体上香 */
.thursday-band { display: flex; flex-wrap: wrap; justify-content: center; align-items: center; gap: 4px 8px; white-space: normal; text-align: center; border-radius: 16px; width: max-content; max-width: calc(100vw - 24px); pointer-events: auto; top: calc(150px + env(safe-area-inset-top, 0px)); box-shadow: 0 4px 14px rgba(0,0,0,.35); }
.thursday-band[hidden] { display: none; }
.thursday-band small { font-size: 11px; opacity: .85; font-family: var(--sans); }
.thursday-band .thu-go { border: 0; border-radius: 4px; background: var(--gold-grad); color: #2a1a08; font: inherit; font-weight: 700; padding: 4px 10px; }
.thursday-band .thu-done { font-size: 12px; color: #ffe9b0; }
.fw-canvas { position: fixed; inset: 0; width: 100vw; height: 100vh; z-index: 45; pointer-events: none; }
.fw-banner { position: fixed; left: 0; right: 0; top: 30%; z-index: 46; text-align: center; pointer-events: none; padding: 0 20px; font-family: var(--serif); font-weight: 900; font-size: clamp(19px, 6vw, 26px); line-height: 1.35; color: #fff3c0; text-shadow: 0 0 12px #ff8a00, 0 0 26px #ff3a00, 0 3px 0 #7d1a14; animation: myBan2 6.4s ease both; }
@keyframes myBan2 { 0% { opacity: 0; transform: scale(.5); } 8% { opacity: 1; transform: scale(1.1); } 14% { transform: scale(1); } 85% { opacity: 1; } 100% { opacity: 0; transform: translateY(-30px); } }
/* 藏经阁抄经（sutra.js 全画面）：分享经卷嘅表格同提示要浮喺抄经画面上面 */
body.su-open .sheet-backdrop { z-index: 62; }
body.su-open .sheet { z-index: 63; }
body.su-open .toast { z-index: 64; }
/* 扫落叶（leaves.js）：行近有叶先出扫把掣；扫地时收起其他掣 */
.sweep-btn { position: fixed; z-index: 12; left: 12px; top: 56%; display: flex; flex-direction: column; align-items: center; gap: 2px; padding: 10px 12px; border-radius: 18px; border: 1.5px solid #e8c25a; background: linear-gradient(#5a7a2a, #2f4a14); color: #fff3d0; font-family: var(--serif); box-shadow: 0 6px 18px rgba(0,0,0,.4), 0 0 18px rgba(200,230,120,.35); animation: swBob 2.4s ease-in-out infinite; }
.sweep-btn[hidden] { display: none; }
.sweep-btn span { font-size: 26px; line-height: 1; }
.sweep-btn b { font-size: 13px; letter-spacing: .06em; }
@keyframes swBob { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-4px); } }
body.sw-on #hud, body.sw-on #actions, body.sw-on #ticker, body.sw-on #bubble, body.sw-on #thursdayBand, body.sw-on #demoBand, body.sw-on #zoomCtl, body.sw-on #xgPanel, body.sw-on .joy, body.sw-on .guide-bubble, body.sw-on .keep-bar { display: none !important; }
.sw-hud[hidden] { display: none; }
.sw-hud { position: fixed; inset: 0; z-index: 11; pointer-events: none; font-family: var(--serif); }
.sw-top { position: absolute; left: 50%; top: calc(14px + env(safe-area-inset-top, 0px)); transform: translateX(-50%); display: flex; flex-direction: column; align-items: center; gap: 2px; padding: 8px 18px; border-radius: 14px; background: rgba(28,36,14,.78); border: 1px solid rgba(220,230,140,.5); color: #f1e8b0; white-space: nowrap; }
.sw-top strong { font-size: 17px; color: #f1d27a; letter-spacing: .08em; }
.sw-top span { font-size: 13px; }
.sw-pop { position: absolute; left: 50%; top: calc(86px + env(safe-area-inset-top, 0px)); transform: translateX(-50%); font-size: 22px; font-weight: 900; color: #fff3c0; text-shadow: 0 0 10px #a8c040, 0 2px 0 #2f4a14; opacity: 0; white-space: nowrap; }
.sw-pop.on { animation: swPop .9s ease-out; }
@keyframes swPop { 0% { opacity: 0; transform: translate(-50%, 10px) scale(.7); } 20% { opacity: 1; transform: translate(-50%, 0) scale(1.1); } 100% { opacity: 0; transform: translate(-50%, -24px) scale(1); } }
.sw-tip { position: absolute; left: 0; right: 0; bottom: calc(86px + env(safe-area-inset-bottom, 0px)); text-align: center; margin: 0; font-size: 13px; color: #f1e8c0; text-shadow: 0 1px 3px #000; }
.sw-actions { position: absolute; left: 0; right: 0; bottom: calc(22px + env(safe-area-inset-bottom, 0px)); display: flex; justify-content: center; gap: 12px; pointer-events: auto; }
.sw-actions button { padding: 12px 20px; border-radius: 999px; border: 1.5px solid #c9b060; background: rgba(28,36,14,.85); color: #f1e8b0; font: 700 15px var(--serif); }
.sw-actions button.main { background: linear-gradient(#7a9a3a, #3f5a1a); color: #fff3d0; border-color: #e8c25a; }
.sw-board { list-style: none; padding: 0; margin: 10px 0; }
.sw-board li { display: flex; align-items: center; gap: 10px; padding: 8px 10px; border-bottom: 1px solid rgba(0,0,0,.08); }
.sw-board li span { width: 22px; text-align: center; font-weight: 900; color: #8a6a2a; }
.sw-board li b { flex: 1; }
.sw-board li em { font-style: normal; font-weight: 900; color: #3f5a1a; }
.sw-board li.me { background: rgba(232,194,90,.14); border-radius: 8px; }
.sw-board li span { color: #cdb98a; } .sw-board li em { color: #8fd49a; }
/* 敲木鱼下面嘅「抄心经」掣：墨蓝色，同木鱼一对 */
.sutra-btn { background: linear-gradient(180deg, #3a4a7a, #1e2848); box-shadow: 0 3px 0 #10162a, 0 6px 14px rgba(0,0,0,.35); animation: none; }
.sutra-btn:active { box-shadow: 0 1px 0 #10162a; }
body.sw-on #sutraBtn { display: none; }

.welcome-sub { margin: -4px 0 10px; color: #a8906a; font-size: 12px; letter-spacing: .12em; text-transform: uppercase; font-family: var(--sans); }
.fn-h { margin: 16px 0 8px; font-size: 15px; }
.fn-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(96px, 1fr)); gap: 10px; }
.fn { display: flex; flex-direction: column; align-items: center; gap: 4px; min-height: 104px; padding: 12px 6px 10px; border-radius: 8px; border: 1px solid var(--line-in); background: var(--panel-in); color: var(--cream); font: inherit; cursor: pointer; -webkit-tap-highlight-color: transparent; }
.fn:active { transform: scale(.97); }
.fn i { font-style: normal; width: 44px; height: 44px; border-radius: 50%; display: grid; place-items: center; background: transparent; color: #efd48c; font-family: var(--serif); font-weight: 700; font-size: 22px; box-shadow: inset 0 0 0 1.5px var(--gold); }
.fn b { font-family: var(--serif); font-size: 15px; font-weight: 400; color: #efd48c; }
.fn small { font-size: 11px; line-height: 1.3; color: var(--muted); text-align: center; }
.tour { position: fixed; inset: 0; z-index: 90; touch-action: none; }
.tour-hole { position: fixed; border-radius: 16px; box-shadow: 0 0 0 9999px rgba(10,6,4,.62), 0 0 0 3px #f1d27a, 0 0 24px 6px rgba(241,210,122,.6); transition: all .35s ease; pointer-events: none; }
.tour.no-hole .tour-hole { width: 0 !important; height: 0 !important; left: 50% !important; top: 50% !important; box-shadow: 0 0 0 9999px rgba(10,6,4,.62); }
.tour-card { position: fixed; background: rgba(20,14,10,.96); color: #f1e2c0; border: 1px solid var(--line); border-radius: 8px; padding: 16px 16px 14px; box-shadow: 0 12px 40px rgba(0,0,0,.5); transition: top .35s ease, left .35s ease; }
.tour-card h3 { margin: 4px 0 6px; font-family: var(--serif); color: #f6dc8a; font-size: 18px; }
.tour-card p { margin: 0; font-size: 14px; line-height: 1.6; }
.tour-n { font-size: 12px; color: #b89a6a; }
.tour-btns { display: flex; justify-content: space-between; gap: 10px; margin-top: 14px; }
.tour-btns button { min-height: 44px; padding: 0 18px; border-radius: 4px; font: inherit; font-weight: 700; }
.tour-skip { background: transparent; border: 1px solid rgba(226,184,90,.4); color: #cdb488; }
.tour-next { flex: 1; background: var(--gold-grad); border: 0; color: #2a1a08; font-family: var(--serif); letter-spacing: .1em; }
.tour.busy .tour-next { opacity: .5; pointer-events: none; }

/* 今日祈福进度卡 */
.dl-entry { width: 100%; margin: 6px 0 4px; min-height: 46px; border-radius: 8px; border: 1px solid var(--gold); background: rgba(201,162,74,.12); color: #efd48c; font-family: var(--serif); font-weight: 400; font-size: 16px; letter-spacing: .06em; text-align: left; padding: 0 16px; }
.dl-bar { display: flex; gap: 6px; margin: 14px 0 6px; }
.dl-bar i { flex: 1; height: 6px; border-radius: 3px; background: rgba(255,255,255,.08); }
.dl-bar i.on { background: linear-gradient(90deg, #d9a43a, #f1d27a); }
.dl-count { font-size: 13px; color: var(--muted); margin: 0 0 10px; }
.dl-list { display: flex; flex-direction: column; gap: 8px; }
.dl-item { display: flex; align-items: center; gap: 12px; min-height: 60px; padding: 8px 14px 8px 10px; border-radius: 8px; border: 1px solid var(--line-in); background: var(--panel-in); color: var(--cream); font: inherit; text-align: left; }
.dl-item i { font-style: normal; flex: none; width: 40px; height: 40px; border-radius: 50%; display: grid; place-items: center; background: transparent; box-shadow: inset 0 0 0 1.5px var(--gold); color: #efd48c; font-family: var(--serif); font-weight: 700; font-size: 19px; }
.dl-item span { flex: 1; display: flex; flex-direction: column; }
.dl-item b { font-family: var(--serif); font-size: 15px; font-weight: 400; color: #efd48c; }
.dl-item small { font-size: 12px; color: var(--muted); }
.dl-item em { font-style: normal; font-size: 20px; color: var(--gold); }
.dl-item.done { opacity: .75; }
.dl-item.done i { background: var(--gold-grad); box-shadow: none; color: #3a2008; }
.dl-item.done em { color: #8fd49a; font-weight: 900; }
.dl-item:disabled { opacity: 1; }
/* 金纸炉（?test=1） */
.jz-list { display: flex; flex-direction: column; gap: 10px; margin-top: 10px; }
.jz-kind { display: flex; gap: 12px; align-items: center; text-align: left; padding: 10px; border-radius: 8px; border: 1px solid var(--line-in); background: var(--panel-in); color: var(--cream); font: inherit; }
.jz-kind[aria-pressed=true] { border: 1px solid var(--gold); box-shadow: 0 0 0 2px rgba(201,162,74,.25); background: rgba(201,162,74,.12); }
.jz-kind img { width: 64px; height: 64px; flex: none; border-radius: 4px; box-shadow: 0 2px 6px rgba(0,0,0,.2); }
.jz-kind b { display: block; font-family: var(--serif); font-size: 16px; color: #efd48c; }
.jz-kind small { font-size: 13px; line-height: 1.45; color: var(--muted); }
body.jz-on .hud, body.jz-on .actions, body.jz-on #joy, body.jz-on .ticker, body.jz-on .sweep-btn, body.jz-on .thursday-band, body.jz-on .demo-band, body.jz-on .thu-bar { display: none !important; }
.jz-ui { position: fixed; inset: 0; z-index: 70; touch-action: none; user-select: none; -webkit-user-select: none; }
.jz-top { position: absolute; top: calc(env(safe-area-inset-top, 0px) + 14px); left: 14px; right: 14px; display: flex; align-items: center; gap: 12px; padding: 10px 14px; border-radius: 14px; background: rgba(36,22,14,.75); color: #f1d9a0; border: 1px solid rgba(226,184,90,.55); }
.jz-top b { font-family: var(--serif); font-size: 17px; }
.jz-top span { flex: 1; font-size: 14px; }
.jz-x { width: 40px; height: 40px; border-radius: 50%; border: 1px solid rgba(226,184,90,.5); background: transparent; color: #f1d9a0; font-size: 18px; }
.jz-hint { position: absolute; left: 0; right: 0; bottom: calc(env(safe-area-inset-bottom, 0px) + 230px); text-align: center; color: #fff1c8; font-family: var(--serif); font-size: 17px; text-shadow: 0 2px 8px rgba(0,0,0,.8); animation: jzHint 1.6s ease-in-out infinite; }
@keyframes jzHint { 0%,100% { transform: translateY(0); opacity: .8 } 50% { transform: translateY(-8px); opacity: 1 } }
.jz-stack { position: absolute; left: 50%; bottom: calc(env(safe-area-inset-bottom, 0px) + 40px); width: 150px; height: 150px; transform: translateX(-50%); transition: opacity .4s; }
.jz-stack img { position: absolute; inset: 0; width: 100%; height: 100%; border-radius: 4px; box-shadow: 0 6px 18px rgba(0,0,0,.45); }
.jz-stack img:nth-child(1) { transform: rotate(-6deg) translate(-4px, 6px); }
.jz-stack img:nth-child(2) { transform: rotate(4deg) translate(4px, 3px); }
.jz-top-sheet.fly { animation: jzFly .45s ease-in forwards; }
@keyframes jzFly { 0% { transform: none; opacity: 1 } 100% { transform: translateY(-260px) scale(.4) rotate(-20deg); opacity: 0 } }

/* 拍照模式（2026-11-05） */
.photo-btn { padding: 0; }
.photo-btn i, .photo-shot i { display: block; width: 16px; height: 13px; border: 2px solid #f1d27a; border-radius: 3px; position: relative; }
.photo-btn i::before, .photo-shot i::before { content: ''; position: absolute; left: 3px; top: 1px; width: 6px; height: 6px; border: 2px solid #f1d27a; border-radius: 50%; }
.photo-btn i::after, .photo-shot i::after { content: ''; position: absolute; left: 4px; top: -5px; width: 6px; height: 3px; background: #f1d27a; border-radius: 1px 1px 0 0; }
body.sheet-open .photo-btn, body.xg-open .photo-btn, body.sw-on .photo-btn, body.jz-on .photo-btn, body.photo-on .photo-btn, body.su-open .photo-btn, body.cl-rite .photo-btn, body.lt-rite .photo-btn, body.fs-flying .photo-btn, body.guiding .photo-btn { display: none; }
body.photo-on #hud, body.photo-on #actions, body.photo-on #ticker, body.photo-on #xgPanel, body.photo-on #bubble, body.photo-on #thursdayBand, body.photo-on #demoBand, body.photo-on #zoomCtl, body.photo-on .joy, body.photo-on .guide-bubble, body.photo-on .keep-bar, body.photo-on .fs-hud, body.photo-on .lt-hud, body.photo-on .pt-hud, body.photo-on .cl-hud, body.photo-on .rm-hud, body.photo-on .lb-hud, body.photo-on .sweep-btn, body.photo-on .pd-hud { display: none !important; }
.photo-bar { position: fixed; z-index: 12; left: 0; right: 0; bottom: 0; padding: 10px 16px calc(env(safe-area-inset-bottom, 0px) + 16px); background: linear-gradient(transparent, rgba(0,0,0,.55)); pointer-events: none; }
.photo-hint { text-align: center; color: #f1d27a; font-size: 13px; margin-bottom: 14px; text-shadow: 0 1px 3px #000; transition: opacity .6s; }
.photo-hint.off { opacity: 0; }
.photo-btns { display: flex; align-items: center; justify-content: space-between; max-width: 420px; margin: 0 auto; pointer-events: auto; }
.photo-side { min-width: 72px; padding: 9px 12px; border-radius: 6px; border: 1px solid var(--line); background: var(--panel); color: #f1d27a; font-size: 14px; font-family: var(--serif); letter-spacing: .04em; }
.photo-shot { width: 72px; height: 72px; border-radius: 50%; border: 4px solid #fff; background: var(--gold-grad); display: grid; place-items: center; box-shadow: 0 0 0 3px rgba(0,0,0,.4); padding: 0; }
.photo-shot i { width: 22px; height: 18px; border-color: #fff; }
.photo-shot i::before, .photo-shot i::after { border-color: #fff; background: #fff; }
.photo-shot i::before { background: transparent; }
.photo-shot:active { transform: scale(.94); }
.photo-flash { position: fixed; inset: 0; z-index: 40; background: #fff; animation: photoFlash .45s ease-out forwards; pointer-events: none; }
@keyframes photoFlash { from { opacity: .9; } to { opacity: 0; } }
.photo-prev { display: block; width: 100%; max-height: 52vh; object-fit: contain; border-radius: 12px; background: #000; margin: 6px 0 10px; }

/* 表达心意（2026-11-05；2026-11-06 搬入右边一列） */
.emote-wrap { position: relative; display: flex; align-items: center; }
.emote-btn { font-size: 20px; }
.emote-row { position: absolute; right: 48px; top: 50%; transform: translateY(-50%); display: flex; gap: 2px; padding: 4px; border-radius: 999px; background: rgba(16,11,8,.9); border: 1px solid var(--line); animation: emoteIn .18s ease-out; }
.emote-row[hidden] { display: none; }
@keyframes emoteIn { from { opacity: 0; transform: translate(6px, -50%); } to { opacity: 1; transform: translateY(-50%); } }
.emote-chip { display: flex; flex-direction: column; align-items: center; gap: 1px; width: 50px; padding: 3px 0; border: 0; background: transparent; color: var(--cream); font-size: 10.5px; }
.emote-chip i { font-style: normal; font-size: 22px; line-height: 1; }
.emote-chip:active { background: rgba(201,162,74,.2); border-radius: 10px; }
/* 表情排喺 .rail 入面，唔好俾「.rail button」变成 40px 圆钮（字会漏出去） */
.rail .emote-chip { width: auto; min-width: 50px; height: auto; padding: 4px 5px; border-radius: 12px; display: flex; flex-direction: column; align-items: center; gap: 2px; background: transparent; border: 0; box-shadow: none; backdrop-filter: none; -webkit-backdrop-filter: none; color: var(--cream); font-size: 11px; white-space: nowrap; }
.rail .emote-chip:active { background: rgba(201,162,74,.2); }
body.sheet-open .emote-wrap, body.xg-open .emote-wrap, body.sw-on .emote-wrap, body.jz-on .emote-wrap, body.photo-on .emote-wrap, body.su-open .emote-wrap, body.cl-rite .emote-wrap, body.lt-rite .emote-wrap, body.fs-on .emote-wrap, body.lt-on .emote-wrap, body.cl-on .emote-wrap, body.rm-on .emote-wrap, body.guiding .emote-wrap, body.pd-on .emote-wrap { display: none; }
#hud[hidden] ~ .rail { display: none; }

/* 放生池（2026-11-05） */
body.pd-on #hud, body.pd-on #actions, body.pd-on #ticker, body.pd-on #xgPanel, body.pd-on #bubble, body.pd-on #thursdayBand, body.pd-on #demoBand, body.pd-on #zoomCtl, body.pd-on .joy, body.pd-on .guide-bubble, body.pd-on .keep-bar, body.pd-on .sweep-btn { display: none !important; }
.pd-hud .fs-top { background: rgba(8,28,30,.74); border-color: rgba(140,220,200,.45); }
.pd-hud .fs-main { background: linear-gradient(#7fd8c0, #2f8a6a); color: #062018; border-color: #d6fff0; box-shadow: 0 0 22px rgba(120,220,190,.5); }
body.pd-busy .pd-hud .fs-actions { opacity: 0; pointer-events: none; }
.pd-kind.on { outline: 1px solid #7fd8c0; background: rgba(127,216,192,.12); }
.pd-kind i { font-style: normal; font-size: 38px; width: 56px; text-align: center; flex: none; }
.pd-kind b { color: #9fe8d0; }

/* ===== 2026-11-06 换皮（参考 baibai.live）：全部功能入面嘅设定列、净手静心卡 ===== */
.menu-tools { display: grid; grid-template-columns: repeat(auto-fit, minmax(96px, 1fr)); gap: 8px; margin: 2px 0 14px; }
.mt { display: flex; flex-direction: column; align-items: center; gap: 2px; padding: 10px 6px 8px; border-radius: 8px; border: 1px solid var(--line-in); background: var(--panel-in); color: var(--cream); font: inherit; min-width: 0; }
.mt i { font-style: normal; width: 34px; height: 34px; border-radius: 50%; display: grid; place-items: center; box-shadow: inset 0 0 0 1px var(--gold); color: #efd48c; font-family: var(--serif); font-size: 17px; }
.mt span { font-family: var(--serif); font-size: 14px; color: #efd48c; max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.mt small { font-size: 10.5px; color: var(--muted); }
.jx-card { position: fixed; z-index: 58; left: 12px; right: 12px; bottom: calc(14px + var(--safe-b)); max-width: 460px; margin: 0 auto; padding: 18px 18px 16px; border-radius: 10px; background: rgba(20,14,10,.96); border: 1px solid var(--line); color: var(--cream); box-shadow: 0 16px 50px rgba(0,0,0,.6); animation: gbIn .4s ease-out; backdrop-filter: blur(12px); }
.jx-kicker { margin: 0 0 4px; font-size: 10.5px; letter-spacing: .34em; color: #a8906a; font-family: var(--sans); font-weight: 500; }
.jx-card h3 { margin: 0 0 10px; font-family: var(--serif); font-weight: 700; font-size: 24px; letter-spacing: .14em; color: #efd48c; position: relative; padding-bottom: 12px; }
.jx-card h3::after { content: "◆"; position: absolute; left: 0; right: 0; bottom: -4px; text-align: center; font-size: 8px; color: var(--gold); line-height: 1; background: linear-gradient(90deg, transparent, var(--line) 30%, var(--line) 70%, transparent) center / 100% 1px no-repeat; }
.jx-text { margin: 10px 0 8px; font-size: 14px; line-height: 1.75; color: #d6c6a2; }
.jx-line { margin: 0 0 14px; font-family: var(--serif); font-size: 18px; color: #efd48c; letter-spacing: .04em; min-height: 1.6em; transition: opacity .4s; }
.jx-card.breathe .jx-line { animation: jxBreathe 3.4s ease-in-out infinite; }
@keyframes jxBreathe { 0%, 100% { opacity: .55; transform: translateY(1px); } 50% { opacity: 1; transform: translateY(-1px); } }
.jx-btns { display: flex; gap: 10px; }
.jx-btns button { min-height: 48px; border-radius: 4px; font: inherit; font-family: var(--serif); letter-spacing: .08em; font-size: 15px; }
.jx-skip { flex: 1; background: transparent; border: 1px solid var(--line); color: var(--cream); }
.jx-go { flex: 1.2; background: var(--gold-grad); border: 0; color: #2a1a08; font-weight: 700; clip-path: polygon(8px 0, 100% 0, calc(100% - 8px) 100%, 0 100%); }
.jx-btns button:disabled { opacity: .55; }
body.sheet-open .jx-card, body.photo-on .jx-card, body.fs-on .jx-card, body.lt-on .jx-card, body.cl-on .jx-card, body.pt-on .jx-card, body.rm-on .jx-card, body.pd-on .jx-card, body.jz-on .jx-card { display: none; }
/* 英文：楷体冇英文，英文用 Fredoka；掣字短啲 */
.lang-en .act-side { font-size: 11px !important; }
.lang-en .act-side i { font-size: 15px; }
.lang-en .splash-plaque { font-size: clamp(34px, 9.5vw, 60px); letter-spacing: .06em; padding-left: 0; }
.lang-en .hall-chip strong { letter-spacing: .04em; }
.lang-en .act-main-title { letter-spacing: .08em; padding-left: .08em; font-size: 21px; }
.lang-en .sheet h2 { letter-spacing: .02em; }
.lang-en .menu-btn, .lang-en .chip { letter-spacing: .02em; }
.lang-en .splash-plaque { white-space: normal; font-size: clamp(30px, 8.6vw, 52px); line-height: 1.15; }
.lang-en .splash-en { display: none; }
.lang-en .fs-side { padding: 12px 10px; font-size: 13px; }
.lang-en .fs-main { padding: 14px 16px; font-size: 16px; }
.fs-actions { max-width: calc(100vw - 12px); }
/* 给作者的话 */
.fb-count { text-align: right; font-size: 12px; margin: 4px 2px 10px; }
/* 天尊公细说（AI 解卦） */
.ai-read { margin: 10px 0 14px; }
.ai-read #aiBtn { width: 100%; }
.ai-read .ai-note { margin: 6px 2px 0; font-size: 12px; }
.ai-out { margin-top: 10px; padding: 14px 16px; border: 1px solid var(--line-in, rgba(201,162,74,.45)); border-radius: 12px; background: rgba(201,162,74,.08); }
.ai-out p { margin: 0 0 10px; line-height: 1.75; font-family: var(--serif); }
.ai-out p:last-child { margin-bottom: 0; }
/* 邀请朋友（2026-11-07） */
.inv-stats { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin: 12px 0 14px; }
.inv-stats div { background: rgba(0,0,0,.28); border: 1px solid rgba(201,162,74,.45); border-radius: 12px; padding: 10px 8px; text-align: center; }
.inv-stats b { display: block; font-size: 28px; color: var(--gold, #e8c46a); font-family: var(--serif); }
.inv-stats small { font-size: 12px; opacity: .8; }
.inv-link { display: flex; gap: 8px; align-items: stretch; margin-bottom: 12px; }
.inv-link input { flex: 1; min-width: 0; font-size: 13px; }
.inv-link .btn { flex: none; padding: 0 16px; }
/* 离线抄经（2026-11-07） */
.off-prog { height: 8px; border-radius: 4px; background: rgba(255,255,255,.12); overflow: hidden; margin: 6px 0 10px; }
.off-prog i { display: block; height: 100%; width: 0; background: linear-gradient(90deg, #c9a24a, #f1d27a); transition: width .2s; }
.off-list b { font-weight: 600; }
/* 藏经阁：离线抄经（左）· 抄心经（正中）· 离开（右）——抄心经永远喺画面正中 */
#jgHud .fs-actions { display: grid; grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr); width: min(96vw, 560px); gap: 8px; align-items: center; }
#jgHud .fs-actions button { white-space: normal; line-height: 1.25; }
#jgHud .fs-actions .fs-main { max-width: 52vw; }
html.lang-en #jgHud .fs-actions .fs-main { font-size: 15px; padding: 13px 16px; }
html.lang-en #jgHud .fs-actions .fs-side { font-size: 12.5px; padding: 8px 10px; }
#jgHud .fs-actions #jgOff { justify-self: end; }
#jgHud .fs-actions #jgLeave { justify-self: start; }
@media (max-width: 420px) { #jgHud .fs-actions .fs-side { padding: 10px 10px; font-size: 13px; letter-spacing: .02em; } }
/* 毛孩纪念馆（2026-11-07） */
.pm-hero { text-align: center; margin-bottom: 8px; }
.pm-photo { display: block; width: 168px; height: 224px; object-fit: cover; margin: 4px auto 10px; border-radius: 50%; border: 3px solid #f1d27a; box-shadow: 0 6px 22px rgba(0,0,0,.45), 0 0 0 6px rgba(255,190,210,.18); cursor: zoom-in; }
.pm-noph { display: flex; align-items: center; justify-content: center; font-size: 64px; background: rgba(255,190,210,.12); cursor: default; }
.pm-name { margin: 2px 0 2px; font-size: 26px; }
.pm-dates { margin: 0 0 4px; color: #f1d27a; font-family: var(--serif); letter-spacing: .06em; }
.pm-anniv { margin: 8px auto 0; padding: 8px 12px; border-radius: 10px; background: rgba(241,210,122,.14); border: 1px solid rgba(241,210,122,.45); color: #f6e3b0; }
.pm-story { background: rgba(0,0,0,.22); border-radius: 12px; padding: 4px 14px 10px; margin: 10px 0; }
.pm-story h3 { margin: 10px 0 4px; font-size: 15px; }
.pm-story p { margin: 0; white-space: pre-wrap; line-height: 1.7; }
.pm-gal { display: grid; grid-template-columns: repeat(auto-fill, minmax(72px, 1fr)); gap: 8px; margin: 10px 0; }
.pm-gal img { width: 100%; aspect-ratio: 3 / 4; object-fit: cover; border-radius: 10px; border: 1px solid rgba(241,210,122,.4); cursor: zoom-in; }
.pm-gal.sm span { display: flex; flex-direction: column; align-items: center; gap: 2px; font-size: 12px; }
.pm-tally { display: flex; flex-wrap: wrap; justify-content: center; gap: 6px 14px; margin: 12px 0 10px; font-size: 14px; color: #f1e2c0; }
.pm-hour { margin: 6px 0; padding: 8px 12px; border-radius: 10px; background: rgba(255,176,96,.15); color: #ffd9a0; text-align: center; }
.pm-acts { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; }
.pm-acts .btn { padding-left: 6px; padding-right: 6px; white-space: nowrap; }
.pm-glow { box-shadow: 0 0 0 2px #ffb060, 0 0 18px rgba(255,176,96,.6); }
.pm-free { text-align: center; margin: 6px 0 8px; }
.pm-snack summary { cursor: pointer; padding: 8px 0; color: #f1d27a; }
.pm-note-in { display: flex; gap: 8px; align-items: stretch; }
.pm-note-in input { flex: 1 1 0; width: auto; min-width: 0; }
.pm-note-in .btn { flex: none; width: auto; min-height: 48px; padding: 0 18px; font-size: 16px; letter-spacing: .06em; }
.pm-notes { list-style: none; padding: 0; margin: 10px 0 4px; display: grid; gap: 8px; max-height: 320px; overflow-y: auto; }
.pm-notes li { background: rgba(0,0,0,.22); border-radius: 10px; padding: 8px 12px; }
.pm-notes li p { margin: 0 0 2px; line-height: 1.6; }
.pm-notes small { color: #b8a07a; }
.pm-letter { background: #fbf3e2; color: #3a2418; border-radius: 12px; padding: 6px 14px; margin: 10px 0; }
.pm-letter summary { cursor: pointer; color: #8a5a30; padding: 4px 0; }
.pm-letter-body p { margin: 0 0 10px; line-height: 1.8; font-family: var(--serif); }
.pm-letter .btn { margin: 4px 0 8px; color: #8a5a30; border-color: #c9a24a; }
.pm-lb { position: fixed; inset: 0; z-index: 200; background: rgba(0,0,0,.92); display: flex; align-items: center; justify-content: center; }
.pm-lb img { max-width: 94vw; max-height: 86vh; border-radius: 12px; }
.pm-lb-n { position: absolute; bottom: calc(env(safe-area-inset-bottom, 0px) + 20px); left: 0; right: 0; text-align: center; color: #e8d6aa; }
.pm-lb-x { position: absolute; top: calc(env(safe-area-inset-top, 0px) + 12px); right: 14px; width: 44px; height: 44px; border-radius: 50%; border: 1px solid rgba(255,255,255,.4); background: rgba(0,0,0,.5); color: #fff; font-size: 26px; }
/* 纪念馆近镜（2026-11-07 第二版）：少字、多画面 */
body.pm-on #ptHud, body.pm-on #joy, body.pm-on .rail, body.pm-on #emoteBtn { display: none !important; }
#pmUi { position: fixed; inset: 0; z-index: 40; pointer-events: none; }
#pmUi > * { pointer-events: auto; }
#pmUi.busy .pm-bar { opacity: .5; pointer-events: none; }
.pm-top { position: absolute; left: 50%; top: calc(env(safe-area-inset-top, 0px) + 14px); transform: translateX(-50%); width: min(86vw, 520px); text-align: center; pointer-events: none !important; text-shadow: 0 2px 10px rgba(0,0,0,.75), 0 0 2px rgba(0,0,0,.9); }
.pm-top b { display: block; font-family: var(--serif); font-size: 30px; font-weight: 900; color: #fff4d6; letter-spacing: .06em; }
.pm-top span { display: inline-block; margin-top: 2px; font-size: 15px; color: #f1d27a; letter-spacing: .08em; }
.pm-top em { display: block; margin-top: 6px; font-style: normal; font-size: 15px; color: #fff; line-height: 1.5; }
.pm-top .pm-ann { display: inline-block; margin-top: 8px; padding: 3px 12px; border-radius: 999px; background: rgba(241,210,122,.85); color: #3a2208; text-shadow: none; font-size: 13px; font-weight: 700; }
.pm-x { position: absolute; top: calc(env(safe-area-inset-top, 0px) + 12px); right: 12px; width: 42px; height: 42px; border-radius: 50%; border: 1px solid rgba(255,255,255,.5); background: rgba(20,12,8,.55); color: #fff; font-size: 26px; line-height: 1; }
.pm-nav { position: absolute; top: 46%; width: 44px; height: 44px; border-radius: 50%; border: 1px solid rgba(255,255,255,.5); background: rgba(20,12,8,.45); color: #fff; font-size: 28px; line-height: 1; }
.pm-nav.l { left: 8px; } .pm-nav.r { right: 8px; }
.pm-bar { position: absolute; left: 50%; bottom: calc(env(safe-area-inset-bottom, 0px) + 12px); transform: translateX(-50%); width: min(94vw, 460px); background: rgba(255,250,240,.94); border-radius: 22px; padding: 8px 8px 6px; box-shadow: 0 8px 28px rgba(0,0,0,.45); transition: opacity .2s; }
.pm-main { display: grid; grid-template-columns: repeat(4, 1fr); gap: 4px; }
.pm-main button { position: relative; display: flex; flex-direction: column; align-items: center; gap: 2px; padding: 8px 0 6px; border: 0; border-radius: 14px; background: transparent; color: #5a3a28; }
.pm-main button:active { background: rgba(241,210,122,.35); }
.pm-main button span { font-size: 30px; line-height: 1.1; }
.pm-main button small { font-size: 13px; font-weight: 700; }
.pm-main button i, .pm-sub button i { position: absolute; top: 2px; right: 50%; transform: translateX(26px); min-width: 20px; padding: 0 5px; border-radius: 999px; background: #e0864a; color: #fff; font-style: normal; font-size: 11px; font-weight: 800; line-height: 18px; text-align: center; }
.pm-main button.done { opacity: .55; }
.pm-main button.done::after { content: '✓'; position: absolute; top: 4px; left: 50%; transform: translateX(-24px); width: 18px; height: 18px; border-radius: 50%; background: #5aa05a; color: #fff; font-size: 11px; line-height: 18px; }
.pm-main button.hot { box-shadow: 0 0 0 2px #ffb060, 0 0 16px rgba(255,176,96,.7); }
/* 2026-11-10：加咗「装饰」之后一行五个会挤到字直排 → 改成「图标在上、字在下」嘅五格，字唔换行，数字角标贴住图标右上 */
.pm-sub { display: grid; grid-auto-flow: column; grid-auto-columns: 1fr; border-top: 1px solid rgba(90,58,40,.15); margin-top: 4px; padding-top: 4px; }
.pm-sub button { position: relative; display: flex; flex-direction: column; align-items: center; gap: 1px; padding: 5px 2px 3px; border: 0; background: transparent; color: #5a3a28; font-size: 19px; line-height: 1.15; min-width: 0; }
.pm-sub button small { font-size: 12px; font-weight: 700; white-space: nowrap; }
.pm-sub button i { position: absolute; top: 0; right: 50%; transform: translateX(24px); margin: 0; font-size: 10px; line-height: 16px; min-width: 16px; padding: 0 4px; }
.pm-snacks { display: grid; grid-template-columns: repeat(4, 1fr); gap: 8px; margin: 10px 0; }
.pm-snacks button { padding: 14px 4px; border-radius: 12px; border: 1px solid rgba(241,210,122,.45); background: rgba(0,0,0,.25); color: #f1e2c0; font-size: 14px; }
body.sheet-open #pmUi { display: none; }
/* 数字仙翁 · 生命密码（2026-11-07）：画面优先 */
.xw-head { display: flex; gap: 12px; align-items: center; }
.xw-head h2 { margin: 0; }
.xw-head p { margin: 2px 0 0; }
.xw-abacus { font-size: 44px; filter: drop-shadow(0 4px 10px rgba(232,182,76,.4)); }
.xw-priv { text-align: center; font-size: 12.5px; margin-top: 10px; }
.xw-old { display: grid; grid-template-columns: repeat(auto-fill, minmax(130px, 1fr)); gap: 8px; }
.xw-old button { display: flex; flex-direction: column; gap: 2px; padding: 10px; border-radius: 12px; border: 1px solid rgba(241,210,122,.4); background: rgba(0,0,0,.25); color: #f1e2c0; }
.xw-old small { color: #b8a07a; }
.xw-chart { max-width: 340px; margin: 4px auto 0; }
.nc-svg { display: block; overflow: visible; }
.nc-l { stroke: rgba(241,210,122,.55); stroke-width: 2; }
.nc-l.up { stroke: rgba(255,200,120,.75); }
.nc-l.dash { stroke-dasharray: 5 5; fill: none; }
.nc-b { cursor: pointer; }
.nc-b circle { stroke: rgba(255,255,255,.65); stroke-width: 1.5; }
.nc-b .nc-halo { stroke: none; opacity: .28; animation: ncGlow 2.6s ease-in-out infinite; }
.nc-b.big .nc-halo { opacity: .4; }
.nc-b.on circle:not(.nc-halo) { stroke: #fff; stroke-width: 3; }
.nc-b text { text-anchor: middle; font-weight: 900; fill: #2a1608; font-family: var(--serif); pointer-events: none; }
.nc-b .nc-tag { fill: #d8c49a; font-weight: 700; font-family: system-ui, sans-serif; }
.nc-metal circle { fill: #efe6c8; } .nc-water circle { fill: #8cc4f0; } .nc-fire circle { fill: #f39a7a; } .nc-wood circle { fill: #9ad49a; } .nc-earth circle { fill: #d9b27a; }
@keyframes ncGlow { 50% { opacity: .12; } }
.xw-tip { display: flex; align-items: center; gap: 12px; margin: 6px 0 10px; padding: 10px 12px; border-radius: 14px; background: linear-gradient(180deg, rgba(60,40,18,.85), rgba(30,20,10,.85)); border: 1px solid #c9a24a; color: #f6e7c4; text-align: left; animation: xwTipIn .25s ease-out; }
.xw-tip[hidden] { display: none; }
.xw-tip-n { flex: none; width: 46px; height: 46px; border-radius: 50%; display: grid; place-items: center; font: 900 26px var(--serif); color: #2a1608; border: 2px solid #fff; box-shadow: 0 0 12px rgba(255,220,140,.5); }
.xw-tip-n.nc-metal { background: #efe6c8; } .xw-tip-n.nc-water { background: #8cc4f0; } .xw-tip-n.nc-fire { background: #f39a7a; } .xw-tip-n.nc-wood { background: #9ad49a; } .xw-tip-n.nc-earth { background: #d9b27a; }
.xw-tip small { display: block; color: #d8c49a; font-size: 12px; }
.xw-tip b { display: block; font-size: 17px; color: #ffe7a8; margin: 1px 0; }
.xw-tip em { display: block; font-style: normal; font-size: 14px; line-height: 1.4; }
@keyframes xwTipIn { from { opacity: 0; transform: translateY(-4px); } to { opacity: 1; transform: none; } }
.xw-hint { text-align: center; margin: 0 0 2px; color: #ffe7a8; font-size: 14px; }
.nc-b:focus, .nc-b:focus-visible { outline: none; }
.xw-elem { display: grid; grid-template-columns: repeat(5, 1fr); gap: 6px; margin: 10px 0; }
.xw-e { display: flex; flex-direction: column; align-items: center; gap: 2px; }
.xw-e span { font-size: 22px; }
.xw-e i { display: block; width: 14px; height: 46px; border-radius: 7px; background: rgba(255,255,255,.08); position: relative; overflow: hidden; }
.xw-e i::after { content: ''; position: absolute; left: 0; right: 0; bottom: 0; height: var(--h); background: linear-gradient(#f1d27a, #c9902e); border-radius: 7px; }
.xw-e b { font-size: 15px; color: #f1d27a; } .xw-e small { font-size: 12px; color: #d8c49a; }
.xw-e.zero { opacity: .45; }
.xw-lack { display: grid; gap: 6px; margin: 8px 0 12px; }
.xw-lack div { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.xw-lack small { color: #d8c49a; min-width: 44px; }
.lk { display: inline-flex; align-items: center; justify-content: center; width: 30px; height: 30px; padding: 0; border-radius: 50%; font-weight: 900; font-size: 15px; font-family: var(--serif); cursor: pointer; }
.xw-how { text-align: center; font-size: 13px; margin: 0 0 8px; }
.xw-lack small { min-width: 64px; }
.lk.out { background: #1a1210; border: 2px dashed #7a6a5a; color: #7a6a5a; }
.lk.in { background: linear-gradient(90deg, #c9a24a 50%, #4a3424 50%); color: #fff; text-shadow: 0 1px 3px #000, 0 0 2px #000; border: 1px solid #f1d27a; }
.lk.ok { background: rgba(90,160,90,.3); color: #bfe8bf; }
.lk.yr { background: #b3261e; color: #fff4d6; } .lk.yr.dim { background: rgba(179,38,30,.4); }
.xw-wait { text-align: center; padding: 10px 0; }
.xw-abacus-anim { display: flex; justify-content: center; gap: 8px; height: 40px; align-items: center; }
.xw-abacus-anim i { width: 22px; height: 16px; border-radius: 50%; background: #c0392b; animation: xwBead .9s ease-in-out infinite; }
.xw-abacus-anim i:nth-child(2n) { background: #2c2c34; animation-delay: .15s; } .xw-abacus-anim i:nth-child(3) { animation-delay: .3s; } .xw-abacus-anim i:nth-child(5) { animation-delay: .45s; }
@keyframes xwBead { 50% { transform: translateY(-12px); } }
.xw-hook { display: flex; gap: 10px; align-items: center; padding: 14px; border-radius: 14px; background: linear-gradient(135deg, rgba(241,210,122,.22), rgba(179,38,30,.18)); border: 1px solid rgba(241,210,122,.5); }
.xw-hook span { font-size: 34px; }
.xw-hook p { margin: 0; font-family: var(--serif); font-size: 18px; font-weight: 700; color: #fff4d6; line-height: 1.5; }
.xw-mini { max-width: 200px; margin: 6px auto 0; }
.xw-cards { display: flex; overflow-x: auto; scroll-snap-type: x mandatory; gap: 12px; margin: 10px -4px 4px; padding: 4px; scrollbar-width: none; }
.xw-cards::-webkit-scrollbar { display: none; }
.xw-card { flex: 0 0 100%; scroll-snap-align: center; box-sizing: border-box; background: #fbf3e2; color: #3a2418; border-radius: 16px; padding: 16px 16px 10px; min-height: 220px; position: relative; }
.xw-card .xw-ic { font-size: 40px; line-height: 1; }
.xw-card h3 { margin: 6px 0 6px; color: #7d1a14; font-size: 18px; }
.xw-card p { margin: 0 0 8px; line-height: 1.75; font-size: 15px; }
.xw-card small { position: absolute; right: 14px; top: 14px; color: #a08060; }
.xw-card.xw-verify { background: #fff0d6; border: 2px dashed #c9902e; }
.xw-dots { display: flex; justify-content: center; gap: 6px; margin-bottom: 8px; }
.xw-dots i { width: 7px; height: 7px; border-radius: 50%; background: rgba(241,210,122,.3); } .xw-dots i.on { background: #f1d27a; width: 18px; border-radius: 4px; }
.xw-ask-h { display: flex; align-items: center; gap: 8px; }
.xw-left { color: #f1d27a; letter-spacing: 3px; font-size: 14px; }
.xw-chat { display: flex; flex-direction: column; gap: 8px; margin: 6px 0 10px; }
.xw-chat p { margin: 0; padding: 9px 12px; border-radius: 14px; line-height: 1.6; max-width: 86%; }
.xw-chat .me { align-self: flex-end; background: #b3261e; color: #fff4d6; border-bottom-right-radius: 4px; }
.xw-chat .xw { align-self: flex-start; background: #fbf3e2; color: #3a2418; border-bottom-left-radius: 4px; }
.xw-hook { margin-right: 44px; }   /* 不要压住右上角关闭键 */

/* 周末特写卡（2026-11-08） */
.spot-card { bottom: calc(14px + var(--safe-b)); }
.spot-free { margin: 8px 0 12px; padding: 8px 10px; border-radius: 8px; background: rgba(179,38,30,.22); border: 1px solid rgba(241,210,122,.5); color: #ffe7a8; font-weight: 700; text-align: center; }
/* 问天尊公（2026-11-09）：细说 / 解签下面的 3 句对话，样式跟数字仙翁一样 */
.tz-chat { margin-top: 12px; padding-top: 10px; border-top: 1px dashed rgba(241,210,122,.35); }
.tz-chat .xw-ask-h { margin: 0 0 6px; font-size: 16px; }
.tz-chat-note { font-size: 12px; margin: 4px 0 0; }
.tz-chat .xw-chat p { text-align: left; }
/* 纪念馆「谁来过」（2026-11-10） */
.pm-who { display: block; width: 100%; margin: 0 0 6px; padding: 7px 10px; border: 0; border-radius: 14px; background: #fff0dc; color: #7a4a20; font: 600 14px/1.3 var(--sans, inherit); text-align: center; }
button.pm-who { cursor: pointer; } .pm-who b { color: #c0506a; margin-left: 4px; }
.pm-who-d { margin: 14px 0 6px; font-size: 15px; color: #f1d27a; }
.pm-who-l { list-style: none; margin: 0; padding: 0; }
.pm-who-l li { display: grid; grid-template-columns: auto 1fr auto; gap: 4px 10px; align-items: baseline; padding: 8px 0; border-bottom: 1px solid rgba(241,210,122,.15); }
.pm-who-l li span { font-size: 13px; color: #e8dcc4; } .pm-who-l li small { color: #a89878; }
/* 纪念馆装饰（2026-11-10）：灯笼 / 相框颜色色板 */
.pm-deco { display: grid; grid-template-columns: repeat(6, 1fr); gap: 6px; }
.pm-deco button { display: flex; flex-direction: column; align-items: center; gap: 4px; padding: 6px 0; border: 0; background: none; color: #e8dcc4; cursor: pointer; }
.pm-deco i { width: 38px; height: 38px; border-radius: 50%; border: 2px solid rgba(255,255,255,.35); box-shadow: inset 0 -4px 8px rgba(0,0,0,.18); }
.pm-deco button.on i { border: 3px solid #f1d27a; box-shadow: 0 0 0 3px rgba(241,210,122,.35); }
.pm-deco small { font-size: 11px; white-space: nowrap; }
/* 2026-11-10 寄托：功德、毛孩一句话、书信三格、寄信动画、安息中 */
.pm-merit { display: inline-block; margin-top: 4px; padding: 2px 10px; border-radius: 999px; background: rgba(255,196,216,.25); color: #ffe4ee; font-size: 13px; text-shadow: 0 1px 3px rgba(0,0,0,.6); }
.pm-say { position: absolute; left: 50%; top: 22%; transform: translateX(-50%); max-width: min(82vw, 380px); padding: 10px 16px; border-radius: 18px; background: rgba(255,250,240,.95); color: #5a3a28; font-size: 15px; line-height: 1.45; text-align: center; box-shadow: 0 6px 20px rgba(0,0,0,.35); animation: pmSayIn .5s ease-out; transition: opacity .8s; pointer-events: none; }
.pm-say::after { content: ''; position: absolute; left: 50%; bottom: -8px; transform: translateX(-50%); border: 8px solid transparent; border-bottom: 0; border-top-color: rgba(255,250,240,.95); }
.pm-say b { display: block; color: #c0506a; font-size: 13px; margin-bottom: 2px; }
.pm-say.out { opacity: 0; }
@keyframes pmSayIn { from { opacity: 0; transform: translate(-50%, 8px) scale(.9); } to { opacity: 1; transform: translate(-50%, 0) scale(1); } }
.pm-tabs { display: flex; gap: 6px; margin: 0 0 12px; }
.pm-tabs button { flex: 1; padding: 8px 4px; border-radius: 10px; border: 1px solid rgba(241,210,122,.35); background: transparent; color: #e8dcc4; font-size: 14px; cursor: pointer; }
.pm-tabs button.on { background: #f1d27a; color: #2a1608; font-weight: 700; border-color: #f1d27a; }
#pmToPet { width: 100%; box-sizing: border-box; padding: 10px; border-radius: 10px; border: 1px solid rgba(241,210,122,.4); background: rgba(0,0,0,.25); color: #f6e7c4; font: inherit; font-size: 15px; resize: vertical; }
.pm-bless .pm-letter-body { border-left: 3px solid #c0281e; background: rgba(244,210,74,.08); }
.pm-env { position: fixed; left: 50%; bottom: 30%; z-index: 60; font-size: 54px; transform: translateX(-50%); animation: pmEnv 2.4s ease-in forwards; pointer-events: none; filter: drop-shadow(0 0 12px rgba(255,220,160,.9)); }
@keyframes pmEnv { 0% { opacity: 0; transform: translate(-50%, 30px) scale(.6); } 20% { opacity: 1; transform: translate(-50%, 0) scale(1.1); } 100% { opacity: 0; transform: translate(-50%, -38vh) scale(.3) rotate(-12deg); } }
.pm-rest { list-style: none; margin: 0; padding: 0; }
.pm-rest li { padding: 10px 0; border-bottom: 1px solid rgba(241,210,122,.15); }
.pm-rest li div { display: flex; justify-content: space-between; align-items: baseline; margin-bottom: 6px; }
.pm-rest li small { color: #a89878; } .pm-rest li span { display: flex; gap: 8px; } .pm-rest li span .btn { flex: 1; }
