/* Approved frames: artwork and content have independent, bounded geometry. */
dialog.resident-dialog.town-frame{width:min(520px,calc(100% - 40px));max-height:none;padding:0;border:0;border-radius:0;background:none;box-shadow:none;overflow:visible;color:#26394a}
dialog.resident-dialog.town-frame::before{content:none}
.town-frame::backdrop{background:#060d20e6;backdrop-filter:blur(5px)}
.town-frame .frame-panel{position:relative;isolation:isolate;text-align:center}
.town-frame .frame-scroll{position:relative;display:flex;flex-direction:column;gap:14px;max-height:calc(100dvh - 64px);overflow:auto;overscroll-behavior:contain;padding:54px 26px 34px;border-radius:12px}
.town-frame .frame-scroll>*{flex-shrink:0}
dialog.town-frame h2{order:0;font:400 clamp(24px,6vw,30px)/1.08 'Lilita One',sans-serif;color:#ae255e;margin:0;text-wrap:balance}
.town-frame .resident-portrait{order:1;margin:0;min-height:0}
.town-frame .resident-line{order:2;margin:0;font:15px/1.6 system-ui,sans-serif;white-space:pre-line}
.town-frame .mock-note{order:3}.town-frame .resident-help{order:4}
.town-frame.poster-dialog .resident-portrait>img{width:100%;height:auto;max-height:38dvh;object-fit:contain;display:block;border-radius:3px}
.town-frame:not(.poster-dialog) .resident-portrait>img{width:140px;height:140px;object-fit:contain}
.town-frame .frame-connected,.town-frame .frame-paper-surface{position:absolute;inset:-18px -16px;pointer-events:none}
.town-frame .frame-connected{z-index:2}.town-frame .frame-paper-surface{z-index:-1}
.town-frame .frame-connected>svg,.town-frame .frame-paper-surface>svg{width:100%;height:100%;display:block;overflow:hidden}
dialog.resident-dialog.town-frame[data-frame-theme="graffiti"]{width:min(440px,calc(100% - 40px),calc((100dvh - 56px)/2));--modal-control-ink:#d3286e}
.town-frame[data-frame-theme="graffiti"] .frame-panel{aspect-ratio:1/2}
.town-frame[data-frame-theme="graffiti"] .frame-panel::before{content:'';position:absolute;inset:-16px;z-index:-1;background:var(--family-art) center/contain no-repeat;pointer-events:none}
.town-frame[data-frame-theme="graffiti"] .frame-scroll{position:absolute;inset:clamp(130px,44vw,174px) 30px 96px;max-height:none;padding:8px 0 12px;border-radius:0}
.town-frame[data-frame-theme="graffiti"] h2{color:#173d42}
.town-frame[data-frame-theme="graffiti"] .resident-portrait>img{max-height:26dvh}
dialog.has-dismiss>.dialog-dismiss{background:transparent!important;color:var(--modal-control-ink,#50702b)!important;border:0!important;border-radius:0;box-shadow:none!important}
dialog.has-dismiss>.dialog-dismiss svg{width:27px;height:27px;overflow:visible;fill:currentColor;stroke:#fff2dd;stroke-width:1.2px;paint-order:stroke fill;opacity:.64;transform:rotate(-5deg)}
dialog.town-frame.has-dismiss>.dialog-dismiss{position:absolute;left:auto!important;right:12px;top:12px!important}
dialog.has-dismiss>.dialog-dismiss:is(:focus-visible,:active) svg{opacity:1}
.control-paint-drip{fill:currentColor;stroke:none}.control-paint-fleck{fill:#fffaf0;stroke:none}
@media(hover:hover) and (pointer:fine){dialog.has-dismiss>.dialog-dismiss:hover svg{opacity:1}}
@media(max-width:360px){.town-frame .frame-scroll{padding-inline:22px}.town-frame[data-frame-theme="graffiti"] .frame-scroll{padding-inline:0}.town-frame .resident-line{font-size:14px}}

/* Reviewed material families: fixed art proportions, independently scrolling content. */
.town-frame[data-frame-theme="sketchbook"]{--family-ink:#425b62;--family-inset:16% 13% 15%}
.town-frame[data-frame-theme="cutpaper"]{--family-ink:#126d76;--family-inset:21% 20% 17%}
.town-frame[data-frame-theme="travel"]{--family-ink:#6d4436;--family-inset:25% 13% 22%}
.town-frame[data-frame-theme="ceramic"]{--family-ink:#233c78;--family-inset:17% 13% 15%}
.town-frame[data-frame-theme="tinwork"]{--family-ink:#f0d8ad;--family-inset:12% 11% 15%;--family-paper:#202332}
.town-frame .frame-panel.frame-art-pending{background:var(--family-paper,#fff0db);border-radius:14px}
dialog.resident-dialog.town-frame:is([data-frame-theme="sketchbook"],[data-frame-theme="cutpaper"],[data-frame-theme="travel"],[data-frame-theme="ceramic"],[data-frame-theme="tinwork"]){width:min(520px,calc(100% - 40px),calc((100dvh - 56px)/2));color:var(--family-ink);--modal-control-ink:var(--family-ink)}
.town-frame:is([data-frame-theme="sketchbook"],[data-frame-theme="cutpaper"],[data-frame-theme="travel"],[data-frame-theme="ceramic"],[data-frame-theme="tinwork"]) .frame-panel{aspect-ratio:1/2}
.town-frame:is([data-frame-theme="sketchbook"],[data-frame-theme="cutpaper"],[data-frame-theme="travel"],[data-frame-theme="ceramic"],[data-frame-theme="tinwork"]) .frame-panel::before{content:'';position:absolute;inset:-16px;z-index:-1;background:var(--family-art) center/100% 100% no-repeat;pointer-events:none}
.town-frame:is([data-frame-theme="sketchbook"],[data-frame-theme="cutpaper"],[data-frame-theme="travel"],[data-frame-theme="ceramic"],[data-frame-theme="tinwork"]) .frame-scroll{position:absolute;inset:var(--family-inset);max-height:none;padding:8px 0 12px;border-radius:0}
.town-frame:is([data-frame-theme="sketchbook"],[data-frame-theme="cutpaper"],[data-frame-theme="travel"],[data-frame-theme="ceramic"],[data-frame-theme="tinwork"]) h2{color:var(--family-ink);font-size:clamp(22px,6vw,28px)}
.town-frame[data-frame-theme="travel"] h2{font-family:Georgia,serif;font-weight:600}
.town-frame:is([data-frame-theme="sketchbook"],[data-frame-theme="travel"],[data-frame-theme="ceramic"],[data-frame-theme="tinwork"]) :is(.dialog-dismiss,.memory-navigation button) svg{fill:none;stroke:currentColor;stroke-width:1.8;filter:none}
.town-frame[data-frame-theme="ceramic"] :is(.dialog-dismiss,.memory-navigation button) svg{stroke-width:2.5}
.town-frame :is(.memory-caption,.memory-status){color:inherit}
.town-frame[data-frame-theme="travel"] .travel-departures{background:none;border:0;padding:0;color:inherit}
.town-frame[data-frame-theme="travel"] .travel-departures button{color:inherit;gap:6px;border-color:#987c65}
.town-frame[data-frame-theme="travel"] .travel-departures strong{font-size:18px}
.town-frame[data-frame-theme="travel"] .travel-departures span{display:none}
.town-frame[data-frame-theme="travel"] .travel-another{background:none;border:0;border-top:1px solid #987c6570;border-radius:0;color:inherit;padding:8px;font:14px/1.4 Georgia,serif}

/* Gameplay keeps its usable width; the scalable floral paper replaces the old box shell. */
#surprise.town-frame{width:min(620px,calc(100% - 40px));max-width:none;max-height:none;padding:0;border:0;border-radius:0;background:none;box-shadow:none;color:#26394a;overflow:visible}
#surprise.town-frame::before{content:none}
#surprise.town-frame .frame-scroll{padding:54px 18px 24px;gap:12px}
#surprise.town-frame #day-label{margin:0;color:#735441;font-size:10px;letter-spacing:1.2px}
#surprise.town-frame #surprise-title{color:#ae255e;font:400 clamp(24px,6vw,32px)/1.08 'Lilita One',sans-serif;margin:0;text-wrap:balance}
#surprise.town-frame #surprise-body{min-width:0}
dialog.scene-game-dialog.town-frame{width:min(620px,calc(100% - 40px));max-width:none;max-height:none;padding:0;border:0;border-radius:0;background:none;box-shadow:none;color:#26394a;overflow:visible}
dialog.scene-game-dialog.town-frame .frame-scroll{padding:54px 18px 24px;gap:12px}
dialog.scene-game-dialog.town-frame .frame-scroll>h2{color:#ae255e;font:400 clamp(24px,6vw,32px)/1.08 'Lilita One',sans-serif;margin:0}
.town-frame.video-dialog .resident-portrait>iframe{display:block;width:100%;height:auto;aspect-ratio:16/9;border:0;border-radius:3px}
.town-frame .frame-scroll .resident-help:not([hidden]){background:transparent;border:1px solid currentColor;box-shadow:none;color:inherit;border-radius:4px;min-height:48px;padding:8px 12px}
