.town-egg-layer{position:absolute;inset:0;z-index:7;pointer-events:none;container-type:inline-size}
.town-egg-defs{position:absolute}
.town-egg-target{position:absolute;left:var(--egg-x);top:var(--egg-y);translate:-50% -70%;display:grid;place-items:center;width:max(48px,var(--egg-size));height:max(48px,var(--egg-size));margin:0;padding:0;border:0;background:none;pointer-events:auto;cursor:pointer;touch-action:manipulation;-webkit-tap-highlight-color:transparent}
.town-egg-target[data-egg="mirror"],.town-egg-target[data-egg="mistletoe"]{translate:-50% -50%}
.town-egg-target[aria-disabled=true]{cursor:default}
.town-egg-target:focus-visible{outline:2px dashed #fff0c9;outline-offset:-3px;border-radius:12px}
.town-egg-art{width:var(--egg-size);height:var(--egg-size);max-width:none;overflow:visible;pointer-events:none;filter:drop-shadow(1px 2px 1px #4a332855)}
body[data-lighting=night] .town-egg-art{filter:brightness(.64) saturate(.81) drop-shadow(1px 2px 1px #201b3080)}
body[data-lighting=twilight] .town-egg-art{filter:brightness(.82) saturate(.88) drop-shadow(1px 2px 1px #332c36a0)}
.egg-actor,.egg-eyes,.egg-flipper,.egg-lid,.egg-ribbon,.egg-snow-body,.egg-snow-hat{transform-box:fill-box}
.egg-hearts,.egg-spark,.egg-fallen-carrot,.egg-fallen-arm,.egg-drips,.egg-puddle{opacity:0}
[data-motion=mistletoe] .egg-actor{transform-origin:50% 0%;animation:egg-swing .6s ease-out}
[data-motion=mistletoe] .egg-hearts,[data-phase=answer] .egg-hearts{animation:egg-rise .85s ease-out both}
[data-motion=present] .egg-actor,[data-motion=penguin] .egg-actor{transform-origin:50% 90%;animation:egg-swing .55s ease-out}
[data-motion=present] .egg-lid{transform-origin:86% 85%;animation:egg-open 1.4s ease-out both}
[data-motion=present] .egg-ribbon{animation:egg-ribbon 1.4s ease-out both}
[data-motion=present] .egg-spark{animation:egg-rise .8s .22s ease-out both}
[data-motion=penguin] .egg-eyes{transform-origin:center;animation:egg-blink .45s ease-out}
[data-motion=penguin] .egg-flipper{transform-origin:20% 80%;animation:egg-swing .65s ease-out}
.egg-snow-body{transform-origin:50% 100%;transform:scale(var(--snow-size,1));transition:transform .4s cubic-bezier(.23,.9,.44,1),opacity .28s}
.egg-snow-hat{transform-origin:center;transform:translateY(var(--hat-drop,0)) rotate(var(--hat-tilt,0deg));transition:transform .45s cubic-bezier(.2,.95,.32,1.18)}
[data-stage="1"]{--snow-size:.94;--hat-drop:3px;--hat-tilt:-4deg}
[data-stage="2"]{--snow-size:.77;--hat-drop:13px;--hat-tilt:5deg}
[data-stage="3"]{--snow-size:.62;--hat-drop:24px;--hat-tilt:12deg}
[data-stage="4"]{--snow-size:.36;--hat-drop:45px;--hat-tilt:-18deg}
[data-stage="5"]{--snow-size:.05;--hat-drop:66px;--hat-tilt:20deg}
[data-stage="5"] .egg-snow-body{opacity:0}
[data-stage]:not([data-stage="0"]) .egg-puddle{opacity:1;transition:opacity .25s}
:is([data-stage="3"],[data-stage="4"],[data-stage="5"]) .egg-fallen-carrot,:is([data-stage="4"],[data-stage="5"]) .egg-fallen-arm{opacity:1}
:is([data-stage="3"],[data-stage="4"],[data-stage="5"]) .egg-carrot,:is([data-stage="4"],[data-stage="5"]) .egg-arm{opacity:0}
[data-stage="3"][data-motion=snow] .egg-fallen-carrot,[data-stage="4"][data-motion=snow] .egg-fallen-arm{animation:egg-fall .43s cubic-bezier(.4,0,.8,1) both}
[data-motion=snow]:is([data-stage="1"],[data-stage="2"]) .egg-drips{animation:egg-drip .62s ease-out both}
[data-motion=restore] .town-egg-art{animation:egg-reappear .45s ease-out}
[data-phase=wake] .egg-glass,[data-phase=search] .egg-glass,[data-phase=answer] .egg-glass{filter:brightness(1.27) saturate(1.12)}
[data-phase=search] .egg-spark{animation:egg-rise .95s ease-out 2}
[data-phase=wake] .egg-glint,[data-phase=search] .egg-glint{animation:egg-shimmer .85s ease-in-out 2 alternate}
[data-phase=error] .egg-actor{transform-origin:center;animation:egg-swing .43s ease-out}
[data-phase=error] .egg-glass{fill:#c76860}
.town-egg-bubble{position:fixed;z-index:90;isolation:isolate;max-width:min(255px,calc(100vw - 20px));padding:9px 13px 10px;border:1.5px solid #624238;border-radius:15px 12px 17px 9px;background:#fff0cc url('modal-paper-material-v1.webp') center/cover;color:#38291f;box-shadow:2px 4px 0 #47332742;box-sizing:border-box;font:650 15px/1.32 system-ui,sans-serif;pointer-events:none;animation:egg-reappear .18s ease-out}
.town-egg-bubble::after{content:'';position:absolute;z-index:-1;left:var(--egg-tail);top:100%;width:12px;height:12px;background:#f7e9cc;border-right:1.5px solid #624238;border-bottom:1.5px solid #624238;transform:translate(-50%,-6px) rotate(45deg)}
.town-egg-bubble[data-below=true]::after{top:0;transform:translate(-50%,-7px) rotate(225deg)}
.town-egg-bubble[data-style=tag]{border-color:#94613d;border-radius:4px 12px 4px 12px}
.town-egg-bubble[data-style=jake]{background:#fff0a7;border-color:#785532}
.town-egg-bubble strong{display:block;margin-bottom:4px;color:#813e36;font:17px/1.13 'Lilita One',Georgia,serif}
.town-egg-bubble[hidden],.town-egg-bubble strong[hidden],.town-achievement-toast[hidden]{display:none}
.town-achievement-toast{position:fixed;z-index:110;top:max(12px,env(safe-area-inset-top));left:50%;translate:-50% 0;max-width:calc(100vw - 112px);width:max-content;pointer-events:none;padding:7px 12px;text-align:center;background:#284b43;border:2px solid #ddaa5a;border-radius:8px;color:#fff0c6;box-shadow:0 4px 14px #211a3866;animation:egg-reappear .23s ease-out;font:750 14px/1.3 system-ui,sans-serif}
.town-achievement-toast strong,.town-achievement-toast span{display:block}
.town-achievement-toast strong{color:#f3c474;font-size:11px;letter-spacing:.09em;text-transform:uppercase}
.town-achievement-toast strong::before,.town-achievement-toast strong::after{content:'✧';margin-inline:5px}
dialog.resident-dialog.town-frame:has(.town-achievement-book){width:min(780px,calc(100% - 40px));max-width:none}
.town-frame .resident-portrait:has(.town-achievement-book){max-width:none}
.town-frame .frame-scroll:has(.town-achievement-book){scrollbar-width:thin;scrollbar-color:#8b9779 transparent}
.town-achievement-book{display:grid;gap:20px;text-align:left;color:#343b33}
.town-achievement-summary{display:grid;gap:9px;padding:13px 14px;background:#244e48;color:#ffefcb;border-radius:9px;font:750 15px/1.25 system-ui,sans-serif}
.town-achievement-book progress{display:block;width:100%;height:7px;appearance:none;border:0;border-radius:8px;background:var(--badge-track,#ded4be);--badge-fill:#287166}
.town-achievement-book progress::-webkit-progress-bar{background:var(--badge-track,#ded4be);border-radius:8px}
.town-achievement-book progress::-webkit-progress-value{background:var(--badge-fill);border-radius:8px}
.town-achievement-book progress::-moz-progress-bar{background:var(--badge-fill);border-radius:8px}
.town-achievement-summary progress{--badge-track:#426961;--badge-fill:#ffd37e}
.town-achievement-book section>h3{margin:0 0 8px;color:#765234;font:700 17px/1.2 Georgia,serif}
.town-achievement-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(185px,100%),1fr));gap:8px}
.town-achievement-card{display:grid;grid-template-columns:37px minmax(0,1fr);align-content:start;gap:10px;padding:10px;background:#fff8e8b8;border:1px solid #936a443d;border-radius:9px;overflow-wrap:anywhere}
.town-achievement-card[data-earned=true]{background:#fff1cc;border-color:#b08245}
.town-achievement-card h4{margin:0 0 4px;color:#32483e;font:750 15px/1.2 system-ui,sans-serif}
.town-achievement-card p,.town-achievement-card small{margin:0;font:500 13px/1.35 system-ui,sans-serif}
.town-achievement-card .town-achievement-meta{color:#72462f;font-weight:700;font-size:11px;margin-bottom:3px}
.town-achievement-card progress{margin:7px 0 2px}
.town-achievement-medal{display:grid;place-items:center;width:37px;height:41px;background:#ddd8c8;color:#565d51;clip-path:polygon(50% 0,96% 24%,96% 76%,50% 100%,4% 76%,4% 24%)}
.town-achievement-card[data-earned=true] .town-achievement-medal{background:linear-gradient(145deg,#f9da80,#d49a48);color:#593d2c}
.town-achievement-medal svg{width:22px;height:22px;fill:none;stroke:currentColor;stroke-width:1.55;stroke-linejoin:round;stroke-linecap:round}
@keyframes egg-swing{0%,100%{transform:rotate(0)}23%{transform:rotate(-12deg)}52%{transform:rotate(9deg)}75%{transform:rotate(-4deg)}}
@keyframes egg-rise{0%{opacity:0;transform:translateY(10px) scale(.75)}30%{opacity:1}100%{opacity:0;transform:translateY(-20px) scale(1.08)}}
@keyframes egg-open{0%,100%{transform:none}20%{transform:translate(4px,-21px) rotate(23deg)}64%{transform:translate(4px,-15px) rotate(19deg)}}
@keyframes egg-ribbon{0%,100%{opacity:1;transform:none}30%,72%{opacity:.28;transform:translate(-4px,7px) rotate(-14deg)}}
@keyframes egg-blink{0%,100%{transform:none}45%{transform:scaleY(.12)}}
@keyframes egg-fall{0%{opacity:0;transform:translate(-8px,-19px) rotate(-15deg)}65%{opacity:1;transform:translateY(1px)}80%{transform:translateY(-5px)}}
@keyframes egg-drip{0%{opacity:0}30%{opacity:1}100%{opacity:0;transform:translateY(18px)}}
@keyframes egg-shimmer{from{opacity:.32;transform:translateY(4px)}to{opacity:1;transform:translateY(-3px)}}
@keyframes egg-reappear{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}
@media(prefers-reduced-motion:reduce){.town-egg-art *, .town-egg-art,.town-egg-bubble,.town-achievement-toast{animation:none!important;transition:none!important}}
