/* Named badges are deliberate fallbacks until a configured cast portrait has decoded. */
#dialogue-portrait.cast-placeholder{display:grid;place-items:center;background-color:#f7dfb3;color:#345c53;font:700 40px Georgia,serif;background-repeat:no-repeat}
#dialogue-portrait .cast-photo{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
#dialogue-portrait .cast-photo[hidden]{display:none}
/* The generic sparkle read like AI-product chrome and could leak onto supporting portraits.
   Character expression should come from the portrait itself. */
#dialogue-portrait[data-mood="pleased"]::after,#dialogue-portrait[data-mood="smile"]::after{content:none!important;display:none!important}
/* Relationship feedback is important enough to read without squinting. Duration is set
   in game.js; these overrides only improve its visual weight. */
#toast.vibe{max-width:min(470px,calc(100% - 32px));padding:13px 24px!important;border-width:2px;box-shadow:0 10px 28px #102e3035}
#toast.vibe strong{font-size:18px!important;line-height:1.25!important}
#toast.vibe small{font-size:12px;line-height:1.4}
#game[data-mode="guitar"] .guitar-chords button{touch-action:manipulation}
.guitar-harmony{font-size:11px;letter-spacing:.08em;color:#617164;margin:6px 0 10px}
@media(max-width:600px){#toast.vibe{padding:11px 18px!important}#toast.vibe strong{font-size:16px!important}}
@media(prefers-reduced-motion:reduce){.guitar-card.pulse,.guitar-card.downbeat,.guitar-chords .flash,.guitar-chords .sour{animation:none!important;transform:none!important}}
/* The canvas says what's clickable: a pointer over people, markers and props, the plain arrow elsewhere. Mouse only (game.js never sets .hot from touch). */
#world.hot{cursor:pointer}
