.character-stage{
  height:auto;
  min-height:0;
  aspect-ratio:783 / 1014;
  display:grid;
  place-items:center;
  background:#f2eee8;
}

.template-scene{
  position:relative;
  height:100%;
  width:100%;
  aspect-ratio:783 / 1014;
  isolation:isolate;
  transform-origin:50% 78%;
}
.photo-scene{aspect-ratio:4 / 5;background:#eee7de;border-radius:8px;overflow:hidden}
.photo-scene .body-template{display:none}
.photo-scene .head-motion{left:5%;top:5%;width:90%;height:90%;aspect-ratio:auto;display:grid;place-items:center;border-radius:16px;overflow:hidden}
.photo-scene .template-head{width:100%;height:100%;object-fit:contain;border-radius:inherit;opacity:var(--photo-opacity,1);transform:translate(var(--photo-x,0%),var(--photo-y,0%)) scale(var(--photo-scale,1));transform-origin:center}
.photo-scene .head-upload-prompt{border-radius:16px;background:rgba(255,253,249,.88);font-size:13px}
.photo-scene .head-hit-target{left:5%;top:5%;width:90%;height:90%;aspect-ratio:auto;border-radius:16px}
.photo-scene.photo-tap{animation:photo-tap .42s ease}
.photo-scene.photo-action-poke{animation:photo-action-poke .5s ease}
.photo-scene.photo-action-pat{animation:photo-action-pat .55s ease}
.photo-scene.photo-action-feed{animation:photo-action-feed .65s ease}
.photo-scene.photo-action-sleep{animation:photo-action-sleep 1s ease forwards}
.message-button{width:100%;margin-top:8px;min-height:54px;border:1px solid var(--line);border-radius:8px;background:#fffdf9;display:grid;grid-template-columns:34px 1fr auto;align-items:center;text-align:left;padding:8px 12px;gap:10px}.message-button>span:first-child{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;background:#f2e7e0;color:#aa7165;font-size:18px}.message-button strong,.message-button small{display:block}.message-button strong{font-size:12px}.message-button small{font-size:9px;color:var(--muted);margin-top:3px}.message-button>b{font-size:19px;font-weight:400;color:#90877e}
.interaction-fx{position:absolute;inset:0;z-index:6;pointer-events:none;overflow:hidden}
.interaction-fx>span{position:absolute;left:50%;top:18%;display:grid;gap:2px;justify-items:center;color:#a65f55;text-shadow:0 1px 0 rgba(255,255,255,.8);animation:fx-rise 1.35s ease-out forwards}
.interaction-fx b{font-size:28px;line-height:1;font-weight:700}.interaction-fx small{font-size:10px;background:rgba(255,253,249,.9);padding:4px 7px;border-radius:99px;white-space:nowrap}
.interaction-fx .fx-poke{left:18%;top:42%;animation:fx-poke 1.1s ease-out forwards}.interaction-fx .fx-pat{left:68%;top:18%;color:#d4778b}.interaction-fx .fx-feed{left:44%;top:20%;color:#8c6d42}.interaction-fx .fx-sleep{left:72%;top:28%;color:#8076a4}.interaction-fx .fx-sleep b{font-size:22px}

.body-template{position:absolute;z-index:3;inset:0;width:100%;height:100%;object-fit:fill;pointer-events:none}
.head-motion{
  position:absolute;
  z-index:2;
  left:33.8%;top:8.4%;width:52%;aspect-ratio:1;
  overflow:visible;
  transform-origin:50% 57%;
  transition:filter .18s ease;
  transform:perspective(420px) rotateY(var(--camera-yaw,0deg)) rotateX(var(--camera-pitch,0deg)) rotateZ(var(--camera-roll,0deg));
}
.template-head{display:block;width:100%;height:100%;object-fit:contain;object-position:center}
.template-head[hidden]{display:none}
.head-upload-prompt{
  position:absolute;inset:0;width:100%;height:100%;
  border:0;border-radius:50%;background:rgba(255,255,255,.88);
  color:#756b62;font-size:clamp(10px,3.2vw,14px);font-weight:700;
}
.head-upload-prompt[hidden]{display:none}
.head-hit-target{position:absolute;z-index:4;left:33.8%;top:8.4%;width:52%;aspect-ratio:1;border:0;border-radius:50%;background:transparent;padding:0;touch-action:manipulation;-webkit-tap-highlight-color:transparent}
.head-hit-target[hidden]{display:none}
.head-hit-target:focus-visible{outline:3px solid #e8b933;outline-offset:3px}
.character-caption{z-index:5;bottom:10px;color:#6f675f;background:rgba(255,253,249,.92);padding:6px 10px;border-radius:99px;box-shadow:0 5px 16px rgba(65,47,34,.1);max-width:82%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.character-caption:empty{display:none}
.character-caption.caption-pop{animation:caption-pop .24s ease-out}
.head-motion.action-poke{animation:head-shake .55s ease}
.head-motion.action-pat{animation:head-nod .52s ease}
.head-motion.action-feed{animation:head-bob .6s ease}
.head-motion.action-sleep{animation:head-sleep 1s ease forwards}
.head-motion.action-dance{animation:head-dance .55s ease-in-out 3 alternate}
.head-motion.action-song{animation:head-sing .5s ease-in-out infinite alternate}
.head-motion.action-blessing{animation:head-nod .52s ease 2}
.template-scene.action-poke{animation:scene-shake .55s ease}
.template-scene.action-pat{animation:scene-pat .52s ease}
.template-scene.action-feed{animation:scene-feed .6s ease}
.template-scene.action-sleep{animation:scene-sleep 1s ease forwards}
.template-scene.action-dance{animation:scene-dance .55s ease-in-out 3 alternate}
.template-scene.action-song{animation:scene-song .5s ease-in-out infinite alternate}
.template-scene.action-blessing{animation:scene-pat .52s ease 2}
.editor-preview{gap:9px}
.editor-template{position:relative;width:62px;height:80px;flex:none;overflow:hidden}
.editor-template>img:first-child{width:100%;height:100%;object-fit:cover;object-position:center top}
.editor-template #editorFacePreview{position:absolute;left:20.9%;top:5.3%;width:53%;height:41%;border-radius:50%;object-fit:cover}
.editor-template #editorFacePreview[hidden]{display:none}
.editor-preview p{max-width:190px;line-height:1.5}
.upload-head-button{width:100%;margin-top:10px}
.upload-head-button[hidden]{display:none}
.interaction-settings{display:grid;gap:8px}.interaction-setting{padding:9px;border:1px solid var(--line);border-radius:8px;background:#fffdf9}.interaction-setting strong{display:block;font-size:11px;margin-bottom:6px}.interaction-setting-grid{display:grid;grid-template-columns:1fr 1.3fr 54px;gap:6px}.interaction-setting input{min-width:0;width:100%;height:34px;border:1px solid var(--line);border-radius:6px;background:#fff;padding:0 7px;font-size:10px}
.page-copy-settings{display:grid;gap:8px;margin-bottom:12px}.page-copy-settings label{display:grid;grid-template-columns:86px 1fr;align-items:center;gap:8px;padding:9px;border:1px solid var(--line);border-radius:10px;background:#fffdf9}.page-copy-settings span{font-size:12px;font-weight:700}.page-copy-settings input{min-width:0;width:100%;height:36px;border:1px solid var(--line);border-radius:10px;background:#fff;padding:0 9px;font-size:13px;color:var(--ink)}
.payment-code-preview,.donation-code{min-height:190px;border:1px dashed var(--line);border-radius:14px;background:#fffdf9;display:grid;place-items:center;padding:14px;text-align:center;color:var(--muted)}
.payment-code-preview img,.donation-code img{display:block;width:min(100%,260px);max-height:52svh;object-fit:contain;border-radius:12px;background:#fff}
.payment-code-preview img[hidden],.donation-code img[hidden]{display:none}
.payment-code-preview span,.donation-code p{margin:0;font-size:12px;line-height:1.55}
.payment-code-upload{width:100%;margin-top:10px}
.theme-wallpaper-layer{position:fixed;z-index:0;left:50%;top:0;width:min(100vw,520px);height:100svh;background:#e9e0d6 center/cover no-repeat;filter:none;transform:translateX(-50%);opacity:0;transition:opacity .25s ease;pointer-events:none}
.theme-wallpaper-layer::after{display:none}
.theme-wallpaper-layer.has-wallpaper{opacity:var(--wallpaper-opacity,1)}
body.theme-wallpaper-active{background:#d8cec3}
body.theme-wallpaper-disabled .theme-wallpaper-layer{opacity:0!important}
body.theme-main-image-disabled .photo-scene .head-motion,body.theme-main-image-disabled .photo-scene .head-hit-target,body.theme-main-image-disabled .photo-scene .interaction-fx{visibility:hidden}
body.theme-wallpaper-active .app-shell{position:relative;isolation:isolate;background:transparent}
body.theme-wallpaper-active .app-shell>.theme-wallpaper-layer{z-index:0}
body.theme-wallpaper-active .app-shell>:not(.theme-wallpaper-layer){position:relative;z-index:1}
body.theme-wallpaper-active .topbar{background:rgba(255,253,249,.48);border-color:rgba(255,255,255,.58);backdrop-filter:blur(18px) saturate(1.15);-webkit-backdrop-filter:blur(18px) saturate(1.15)}
body.theme-wallpaper-active .character-stage{background:rgba(255,255,255,.2);box-shadow:inset 0 0 0 1px rgba(255,255,255,.36);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}
body.theme-wallpaper-active .page-footer{background:rgba(255,255,255,.24);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px)}
.theme-text-light .wordmark,.theme-text-light .page-footer,.theme-text-light .page-footer button,.theme-text-light .character-caption{color:#fff;text-shadow:0 1px 3px rgba(0,0,0,.35)}
.theme-text-light .app-shell{background:rgba(25,22,30,.18)}
.theme-buttons-bright .interaction-button,.theme-buttons-bright .talent-button,.theme-buttons-bright .message-button,.theme-buttons-bright .donate-button{background:rgba(255,255,255,.86)}
.theme-buttons-glass .interaction-button,.theme-buttons-glass .talent-button,.theme-buttons-glass .message-button,.theme-buttons-glass .donate-button{background:rgba(255,255,255,.42);border-color:rgba(255,255,255,.75);backdrop-filter:blur(16px) saturate(1.2);-webkit-backdrop-filter:blur(16px) saturate(1.2)}
.theme-buttons-dark .interaction-button,.theme-buttons-dark .talent-button,.theme-buttons-dark .message-button,.theme-buttons-dark .donate-button{background:rgba(38,35,43,.72);border-color:rgba(255,255,255,.18);color:#fff}.theme-buttons-dark small{color:rgba(255,255,255,.78)}
.theme-panel-preview{min-height:170px}
.wallpaper-preview{min-height:170px;border:1px dashed var(--line);border-radius:14px;background:#fffdf9;display:grid;place-items:center;overflow:hidden;color:var(--muted);text-align:center}.wallpaper-preview img{width:100%;height:170px;object-fit:contain;background:#f5efe5}.wallpaper-preview img[hidden]{display:none}.wallpaper-preview span{font-size:12px}.wallpaper-upload{width:100%;margin-top:10px}
.theme-setting-row{display:grid;grid-template-columns:72px 1fr;gap:8px;align-items:center;margin-top:12px;font-size:12px;font-weight:700}.theme-segments{display:grid;grid-template-columns:repeat(3,1fr);gap:5px}.theme-segments button{min-height:36px;border:1px solid var(--line);border-radius:10px;background:#fffdf9;font-size:12px}.theme-segments button.active{border-color:#e48672;background:#fff2eb;color:#a85445}
.theme-opacity-control{display:grid;grid-template-columns:72px 1fr;gap:8px;align-items:center;margin-top:14px;font-size:12px;font-weight:700}.theme-opacity-control>div{display:grid;grid-template-columns:1fr 44px;gap:9px;align-items:center}.theme-opacity-control input{width:100%;accent-color:#e48672}.theme-opacity-control output{text-align:right;color:#7a7168;font:700 12px/1.25 'DM Sans',sans-serif}
.theme-toggle-row{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:12px}.theme-toggle{min-height:42px;display:flex;align-items:center;gap:8px;padding:0 10px;border:1px solid var(--line);border-radius:12px;background:#fffdf9;font-size:12px;font-weight:700;cursor:pointer}.theme-toggle input{position:absolute;opacity:0;pointer-events:none}.theme-toggle-track{position:relative;width:38px;height:22px;flex:none;border-radius:99px;background:#d7cec5;transition:background .15s ease}.theme-toggle-track::after{content:'';position:absolute;top:3px;left:3px;width:16px;height:16px;border-radius:50%;background:#fff;box-shadow:0 1px 3px rgba(42,31,23,.2);transition:transform .15s ease}.theme-toggle input:checked + .theme-toggle-track{background:#e48672}.theme-toggle input:checked + .theme-toggle-track::after{transform:translateX(16px)}.theme-toggle input:focus-visible + .theme-toggle-track{outline:3px solid rgba(228,134,114,.3);outline-offset:2px}

/* THEME-1: 顶部标题直接浮在壁纸上，不使用整条方框承载 */
body.theme-wallpaper-active .topbar{background:transparent;border-bottom:0;box-shadow:none;backdrop-filter:none;-webkit-backdrop-filter:none}
body.theme-wallpaper-active .wordmark{background:transparent;border:0;box-shadow:none;padding:0}
body.theme-wallpaper-active .quiet-button,body.theme-wallpaper-active .share-button{background:rgba(255,255,255,.42);border-color:rgba(255,255,255,.72);backdrop-filter:blur(16px) saturate(1.18);-webkit-backdrop-filter:blur(16px) saturate(1.18);box-shadow:inset 0 1px 0 rgba(255,255,255,.65),0 3px 0 rgba(105,92,84,.2)}

/* THEME-2: 移除主照片外框，只保留真正的照片/上传区域 */
body.theme-wallpaper-active .character-stage{padding:0;background:transparent;border:0;box-shadow:none;backdrop-filter:none;-webkit-backdrop-filter:none}
body.theme-wallpaper-active .photo-scene{width:100%;height:100%;background:transparent;border:0;border-radius:0;box-shadow:none;backdrop-filter:none;-webkit-backdrop-filter:none}
body.theme-wallpaper-active .photo-scene .template-head{border-radius:inherit}
body.theme-wallpaper-active .photo-scene .head-upload-prompt{background:rgba(255,255,255,.44);border:1px solid rgba(255,255,255,.64);color:#675f59;backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px)}

/* THEME-3: 玻璃按钮使用同一描边、高光和阴影语言 */
.theme-buttons-glass .interaction-button,.theme-buttons-glass .talent-button,.theme-buttons-glass .message-button{background:rgba(255,255,255,.38);border:1px solid rgba(255,255,255,.76);box-shadow:inset 0 1px 0 rgba(255,255,255,.72),0 4px 0 rgba(97,85,82,.18),0 10px 24px rgba(47,39,50,.08)}
.theme-buttons-glass .donate-button{background:rgba(247,207,91,.42);border:1px solid rgba(255,235,166,.84);color:#332f35;box-shadow:inset 0 1px 0 rgba(255,255,255,.68),0 4px 0 rgba(183,136,35,.45),0 12px 26px rgba(92,69,28,.1);backdrop-filter:blur(16px) saturate(1.24);-webkit-backdrop-filter:blur(16px) saturate(1.24)}
.theme-buttons-glass .interaction-button:active,.theme-buttons-glass .talent-button:active,.theme-buttons-glass .message-button:active{transform:scale(.985);box-shadow:inset 0 1px 0 rgba(255,255,255,.48)}
.theme-buttons-glass .donate-button:active{transform:scale(.985);box-shadow:inset 0 1px 0 rgba(255,255,255,.48)}
.donation-copy-settings{display:grid;gap:8px;margin-top:14px}.donation-copy-settings label{display:grid;gap:6px;padding:10px;border:1px solid var(--line);border-radius:10px;background:#fffdf9}.donation-copy-settings span{font-size:12px;font-weight:700;color:var(--ink)}.donation-copy-settings input,.donation-copy-settings textarea{width:100%;min-width:0;border:1px solid var(--line);border-radius:10px;background:#fff;padding:9px;font:13px/1.55 inherit;color:var(--ink);resize:vertical}.donation-copy-settings input{height:38px}.donation-copy-settings textarea{min-height:68px}
@keyframes head-shake{15%{transform:rotate(-12deg)}35%{transform:rotate(11deg)}58%{transform:rotate(-8deg)}80%{transform:rotate(5deg)}}
@keyframes head-nod{35%{transform:rotate(8deg) scale(.99)}70%{transform:rotate(-5deg) scale(1.01)}}
@keyframes head-bob{30%{transform:rotate(-4deg) scale(1.015)}65%{transform:rotate(4deg) scale(.995)}}
@keyframes head-sleep{50%{transform:rotate(-8deg) scale(.98);filter:brightness(.86)}}
@keyframes head-dance{to{transform:rotate(8deg) scale(1.015)}}
@keyframes head-sing{to{transform:scale(1.035) rotate(-3deg)}}
@keyframes caption-pop{from{opacity:0;transform:translateY(5px) scale(.96)}to{opacity:1;transform:translateY(0) scale(1)}}
@keyframes scene-shake{15%{transform:rotate(-2deg)}35%{transform:rotate(2deg)}58%{transform:rotate(-1.5deg)}80%{transform:rotate(1deg)}}
@keyframes scene-pat{35%{transform:rotate(1deg) scale(.99)}70%{transform:rotate(-1deg) scale(1.01)}}
@keyframes scene-feed{30%{transform:scale(1.015) rotate(-1deg)}65%{transform:scale(.995) rotate(1deg)}}
@keyframes scene-sleep{50%{transform:rotate(-1deg) scale(.98);filter:brightness(.9)}100%{transform:rotate(-.5deg) scale(1);filter:brightness(.94)}}
@keyframes scene-dance{to{transform:rotate(2deg) scale(1.01)}}
@keyframes scene-song{to{transform:scale(1.012) rotate(-1deg)}}
@keyframes photo-tap{0%{transform:scale(1)}35%{transform:scale(1.025) rotate(-1deg)}70%{transform:scale(.99) rotate(1deg)}100%{transform:scale(1)}}
@keyframes photo-action-poke{20%{transform:rotate(-2deg) translateX(-3px)}45%{transform:rotate(2deg) translateX(3px)}70%{transform:rotate(-1deg)}100%{transform:none}}
@keyframes photo-action-pat{35%{transform:rotate(1deg) scale(.99)}70%{transform:rotate(-1deg) scale(1.01)}100%{transform:none}}
@keyframes photo-action-feed{30%{transform:scale(1.03) rotate(-1deg)}65%{transform:scale(.99) rotate(1deg)}100%{transform:none}}
@keyframes photo-action-sleep{45%{transform:rotate(-1deg) scale(.98);filter:brightness(.92)}100%{transform:none;filter:none}}
@keyframes fx-rise{from{opacity:0;transform:translateY(16px) scale(.85)}20%{opacity:1}to{opacity:0;transform:translateY(-48px) scale(1.08)}}
@keyframes fx-poke{from{opacity:0;transform:translateX(-12px) scale(.8)}20%{opacity:1}55%{transform:translateX(10px) scale(1)}to{opacity:0;transform:translateX(0) translateY(-16px)}}
@media(max-width:360px){.head-upload-prompt{font-size:10px}}
