@font-face{font-family:sa-mono;src:url('./fonts/jetbrains-mono-normal-latin.woff2') format('woff2');font-style:normal;font-weight:100 900;font-display:swap}
@font-face{font-family:sa-serif;src:url('./fonts/source-serif-4-italic-latin.woff2') format('woff2');font-style:italic;font-weight:200 900;font-display:swap}
.sa{--paper:#efe6d2;--ink:#1b1a1f;--teal:#2f6f73;--brick:#b5523b;--mustard:#d9a23a;margin:0;background:#0f1114;color:var(--paper);font:14px/1.55 sa-mono,monospace}
.sa *{box-sizing:border-box}.sa [hidden]{display:none!important}.sa header{height:50px;padding:10px 22px;display:flex;justify-content:space-between;align-items:center;font-size:12px}.sa header a{color:var(--paper)}.sa main{position:relative;max-width:1600px;margin:auto}.sa h1,.sa h2,.sa h3,.sa p{margin:0 0 14px}.sa h2{font-size:23px}.sa h3{font-size:16px}.sa a{color:var(--teal)}
.sa .paper{background:var(--paper);color:var(--ink);border:3px solid var(--ink);border-radius:10px;box-shadow:4px 4px 0 var(--ink)}
.sa button,.sa input,.sa select{font:inherit;color:var(--ink);background:var(--paper);border:2px solid var(--ink);border-radius:5px;box-shadow:none;min-height:42px;padding:9px 12px}.sa button{cursor:pointer;text-align:left;line-height:1.35}.sa button:hover,.sa button:focus-visible{background:var(--mustard);border:2px solid var(--ink);box-shadow:none}.sa :focus-visible{outline:3px solid var(--teal);outline-offset:2px}.sa button:disabled{opacity:.55;cursor:default}.sa button small{display:block;font-size:11px;font-weight:400;margin-top:5px}.sa button[aria-pressed=true],.sa button[aria-selected=true]{background:var(--mustard)}.sa input{max-width:100%;width:100%}.sa label{display:block}.sa small{font-size:11px}.sa .full-art{position:absolute;inset:0;overflow:hidden;background:#d6cbb0}.sa .full-art img{height:100%;width:100%;object-fit:cover;object-position:right center}.sa .eyebrow{font-size:10px;letter-spacing:.08em;color:var(--teal)}
.sa #title{position:relative;min-height:calc(100svh - 50px);padding:clamp(20px,5vw,72px);display:flex;align-items:center}.sa #title-art{background:#1f3a52}.sa .title-card{position:relative;width:430px;max-width:100%;padding:30px}.sa h1{font-size:clamp(56px,7vw,88px);line-height:.95;letter-spacing:-.07em;margin-bottom:22px}.sa .title-actions{display:grid;gap:10px;margin:20px 0}.sa .player-name-entry{color:var(--ink);max-width:none}.sa .player-name__hint{color:#55504a;font-size:10px}.sa .player-name__label{font:inherit}.sa #profile{border-top:2px solid var(--ink);padding-top:14px;font-size:11px}.sa #profile ul{padding-left:20px}.sa #title-notice:empty{display:none}
.sa #stage{position:relative;height:calc(100svh - 50px);min-height:480px;overflow:hidden;border-top:2px solid var(--ink);isolation:isolate}.sa #street{width:100%;height:100%;display:block;touch-action:none;background:#d6cbb0}.sa #place{position:absolute;inset:0}.sa #place-card{position:absolute;z-index:2;left:20px;top:96px;bottom:22px;width:370px;max-width:calc(100% - 40px);overflow-y:auto;padding:21px}.sa .blurb,.sa #ending p{font-family:sa-serif,serif;font-style:italic;font-size:19px;line-height:1.5}.sa #place-actions{display:grid;gap:9px}.sa .action{display:flex;align-items:center;gap:10px;width:100%}.sa .action-copy{flex:1}.sa .sa-icon{flex-shrink:0;display:inline-block;width:32px;height:32px;vertical-align:middle}.sa .person{display:flex;align-items:center;gap:12px;margin-bottom:15px}.sa .person img{width:70px;height:70px;object-fit:contain}.sa .hearts{color:#9c352e;letter-spacing:2px}.sa #inside-player{position:absolute;left:42%;bottom:7%;width:105px;height:144px;pointer-events:none}.sa #receipt{position:relative;border-top:2px dashed #8e806d;margin-top:18px;padding-top:14px;font-size:11px}.sa #receipt p{margin-bottom:8px}.sa .delta{position:absolute;right:0;bottom:5px;background:var(--mustard);border:2px solid var(--ink);padding:3px 6px;animation:sa-rise 900ms ease-out both;pointer-events:none}.sa .delta:nth-child(2n){right:35px;bottom:32px}@keyframes sa-rise{to{transform:translateY(-12px);opacity:0}}
.sa #hud{position:absolute;inset:0;pointer-events:none;z-index:8}.sa .hud-time,.sa .hud-cash,.sa .hud-vitals{position:absolute;padding:8px 13px;font-size:12px}.sa .hud-time{top:16px;left:18px}.sa .hud-time strong{display:block;color:var(--teal)}.sa .hud-cash{top:16px;right:18px}.sa .hud-vitals{left:18px;bottom:20px;width:225px}.sa .meter-label{display:flex;justify-content:space-between;font-size:11px}.sa .meter{height:11px;background:#c6bba7;border:2px solid var(--ink);margin:3px 0 8px}.sa .meter-fill{height:100%;background:#6b8a4a}.sa .hp .meter-fill{background:var(--brick)}.sa #street-tools{position:absolute;left:18px;top:104px;display:flex;gap:7px;z-index:9}.sa #street-tools button{font-size:11px;min-height:35px}
.sa #phone{position:absolute;z-index:30;width:310px;height:580px;right:16px;bottom:-476px;color:var(--paper);background:#1b1a1f;border:4px solid #101014;border-radius:26px 26px 0 0;box-shadow:4px 4px 0 #1b1a1f;transition:bottom 200ms ease}.sa #phone.raised{bottom:-4px}.sa #phone-art{position:absolute;inset:0;pointer-events:none;z-index:-1}.sa #phone-art img{height:100%;width:100%;object-fit:fill}.sa #phone-handle{display:flex;flex-wrap:wrap;gap:4px;justify-content:space-between;width:100%;color:var(--paper);background:var(--ink);border:2px solid var(--ink);border-radius:20px 20px 0 0;padding:15px 17px;min-height:88px;font-size:11px}.sa #phone-handle:hover,.sa #phone-handle:focus-visible{color:var(--ink);background:var(--mustard)}.sa #phone-handle-label{display:block;width:100%;font-size:10px}.sa #unread:not(:empty){background:var(--brick);color:#fff;padding:1px 7px;border-radius:20px}.sa #phone-body{height:calc(100% - 88px);display:flex;flex-direction:column;padding:0 13px 15px}.sa #phone-content{overflow-y:auto;flex:1;font-size:11px;padding:8px 5px;scrollbar-color:#d9a23a #1b1a1f}.sa #phone-content h2{font-size:18px}.sa #phone-content h3{font-size:13px;color:var(--mustard)}.sa #phone-content button{min-height:32px;padding:5px 8px;font-size:10px}.sa #phone-content .phone-row{border-bottom:1px solid #6c665a;padding:12px 0}.sa #phone-content .meter{border-color:var(--paper);background:#45413b}.sa #phone-content .person{gap:8px}.sa #phone-content .person img{width:48px;height:48px}.sa #phone-content .hearts{color:#d98a8a}.sa #phone-content a{color:#d9a23a}.sa #phone-tabs{display:grid;grid-template-columns:repeat(4,1fr);gap:4px;padding-top:9px;border-top:1px solid #6c665a}.sa #phone-tabs button{font-size:9px;min-height:32px;padding:5px 3px;text-align:center}.sa .wiggle{animation:sa-wiggle 300ms ease-out}@keyframes sa-wiggle{25%{transform:rotate(-2deg)}50%{transform:rotate(2deg)}75%{transform:rotate(-1deg)}}
.sa dialog{width:min(720px,calc(100% - 28px));max-height:85svh;padding:25px;overflow:auto}.sa dialog::backdrop{background:#0f1114b8}.sa dialog button{margin:5px 5px 5px 0}.sa #travel-content section{margin-bottom:20px;border-bottom:2px dashed #9d927b;padding-bottom:15px}.sa .travel-modes{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:7px}.sa #doors-content{display:grid;gap:6px}.sa #scene-content>img{width:120px;float:left;margin:0 18px 10px 0}.sa #scene-content .choices{clear:both;display:grid;gap:7px}.sa #scene-content .choices button{margin:0}.sa .sa-how{position:fixed;z-index:70;inset:75px max(16px,calc((100vw - 760px)/2)) 70px;background:var(--paper);color:var(--ink);border:3px solid var(--ink);border-radius:10px;box-shadow:4px 4px 0 var(--ink);padding:26px;overflow:auto}.sa .sa-how li{margin-bottom:12px}.sa #close-how{position:fixed;bottom:15px;left:50%;transform:translateX(-50%);z-index:71}.sa #ending{position:relative;min-height:calc(100svh - 50px);padding:clamp(20px,5vw,70px);display:flex;align-items:end}.sa #ending .paper{position:relative;padding:25px;width:640px;max-width:100%}.sa #ending button{margin:5px}.sa .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.sa #fight,.sa #casino,.sa #minigame{position:absolute;inset:0;z-index:12;color:var(--ink)}
.sa #action-notice{position:absolute;left:50%;top:95px;transform:translateX(-50%);width:max-content;max-width:calc(100% - 24px);padding:10px 14px;z-index:45;font-size:12px;pointer-events:none}
.sa #phone{bottom:calc(-580px * 2 / 3)}.sa #phone:not(.raised) #phone-handle{height:calc(580px / 3);align-content:start}.sa #phone.raised{bottom:-4px}.sa #phone-handle{height:88px}
.sa #street.arrival{animation:sa-arrival 220ms ease-out both}@keyframes sa-arrival{from{opacity:0}to{opacity:1}}
.sa .sa-fight .fight-strip,.sa .sa-fight .fight-intent,.sa .sa-fight .fight-paper{background:var(--paper);color:var(--ink)}.sa .sa-fight .fight-strip,.sa .sa-fight .fight-intent{border:3px solid var(--ink);border-radius:8px;box-shadow:4px 4px 0 var(--ink)}.sa .sa-fight .fight-health span{background:var(--brick)}.sa .sa-fight button{border:2px solid var(--ink);box-shadow:none}.sa .sa-fight .fight-paper{bottom:12px;left:12px;right:340px}.sa .sa-fight .fight-intent{top:27%;right:18%}.sa .sa-fight .fight-strip{top:16%}.sa .sa-fight .fight-focus{top:25%}
@media(max-width:699px){.sa #phone{bottom:calc(-570px * 2 / 3)}.sa #phone:not(.raised) #phone-handle{height:190px}.sa #phone.raised{bottom:0}.sa #place-card{padding-bottom:210px}.sa .sa-fight .fight-focus{top:24%}.sa .sa-fight .fight-intent{top:30%;right:8%}.sa .sa-fight .fight-paper{bottom:200px;right:12px;max-height:26%}.sa #casino .sa-casino,.sa #minigame .sa-mini{inset:90px 10px 200px}}
@media(max-width:699px){.sa{font-size:12px}.sa header{height:42px;padding:8px 12px;font-size:10px}.sa #title{min-height:calc(100svh - 42px);padding:20px}.sa .title-card{padding:23px}.sa #stage{height:calc(100svh - 42px);min-height:440px}.sa #place-card{top:auto;bottom:12px;left:10px;max-height:60%;width:calc(100% - 20px);max-width:none;padding:17px}.sa #inside-player{bottom:61%;left:15%;width:70px;height:96px}.sa .hud-time{left:10px;top:10px;font-size:10px}.sa .hud-cash{right:10px;top:10px;font-size:11px}.sa .hud-vitals{left:10px;bottom:12px;width:156px;padding:6px 9px}.sa #stage.inside .hud-vitals{display:none}.sa #street-tools{left:10px;top:88px}.sa #phone{width:200px;height:570px;right:10px;bottom:-479px}.sa #phone.raised{position:fixed;inset:0;width:100%;height:100svh;border-radius:0;z-index:60}.sa #phone-handle{font-size:10px;padding:10px 12px}.sa #phone.raised #phone-handle{border-radius:0}.sa #phone.raised #phone-content{font-size:13px;padding:16px}.sa #phone.raised #phone-content button{font-size:12px;min-height:40px}.sa #phone-tabs button{font-size:11px;min-height:42px}.sa dialog{padding:18px}.sa .travel-modes{grid-template-columns:1fr}.sa #ending{min-height:calc(100svh - 42px)}.sa #ending .paper{padding:18px}.sa #ending p{font-size:17px}}
@media(prefers-reduced-motion:reduce){.sa:not([data-motion=full]) *,.sa:not([data-motion=full]) *::before,.sa:not([data-motion=full]) *::after{animation:none!important;transition:none!important;scroll-behavior:auto!important}}
@media(max-width:699px){.sa #phone{bottom:calc(-570px * 2 / 3)}.sa #phone.raised{bottom:0}.sa #place-card{padding-bottom:210px}}

/* Claude pass: readable paper text, a real phone object, a stage that fits the window, vitals clear of the menu card. */
.sa main{padding:0;margin:0 auto}
.sa .paper p,.sa .paper li,.sa .paper small,.sa .paper label,.sa .sa-how p,.sa .sa-how li{color:inherit}
.sa #receipt{color:#3d3a36}
.sa .title-card>p:not(.eyebrow){color:#4a463f}
.sa .hud-vitals{left:50%;bottom:auto;top:16px;transform:translateX(-50%);width:250px;padding:6px 12px 2px}
.sa .hud-vitals .meter{margin:2px 0 5px}
.sa #phone{width:290px;height:615px;right:14px;bottom:-488px;background:none;border:0;border-radius:0;box-shadow:none;filter:drop-shadow(4px 4px 0 #1b1a1f)}
.sa #phone.raised{bottom:-6px}
.sa #phone-art{z-index:0}
.sa #phone-handle,.sa #phone-body{position:absolute;left:8.6%;right:8.6%;z-index:1}
.sa #phone-handle,.sa #phone:not(.raised) #phone-handle{top:10.6%;height:auto;min-height:0;border:0;border-radius:3px 3px 0 0;background:#1b1a1f;padding:12px 12px 8px}
.sa #phone-body{top:calc(10.6% + 62px);bottom:13.6%;height:auto;background:#1b1a1f;padding:0 8px 8px}
.sa #phone-handle:hover,.sa #phone-handle:focus-visible{background:#26323a;color:var(--paper)}
@media(max-width:699px){
 .sa #phone{width:250px;height:530px;bottom:-372px;right:8px}
 .sa #phone.raised{width:100%;right:0;height:calc(100% + 0px);bottom:0}
 .sa .hud-vitals{top:auto;bottom:12px;left:12px;transform:none;width:170px}
}
.sa #phone-handle{width:auto}
@media(max-width:699px){
 .sa #phone{width:200px;height:424px;bottom:-346px;right:8px}
 .sa #phone-handle,.sa #phone:not(.raised) #phone-handle{padding:8px 10px 6px;font-size:10px}
 .sa #phone-handle-label{display:none}
 .sa .hud-vitals{width:150px;left:10px;bottom:10px;padding:5px 9px 1px}
 .sa #place-card{bottom:86px;padding-bottom:21px}
 .sa .sa-mini,.sa .sa-casino.sa-cabinet{top:48%;max-height:72%}
}
.sa .rules-link{font-size:11px;margin:-6px 0 14px}.sa .rules-link a{color:var(--teal)}
/* the key art's stick figure sits on the left third, so the title card stands on the right */
.sa #title{justify-content:flex-end}
.sa #title-art img{object-position:30% 50%}
@media(max-width:699px){.sa #title{justify-content:center;align-items:flex-end}}

/* familiar faces, little paper conversations, and the town's phone feed */
.sa .town-here{display:flex;flex-wrap:wrap;align-items:center;gap:5px;margin:0 0 14px;font-size:11px}
.sa .town-here .town-person{display:inline-flex;align-items:center;gap:5px;padding:4px 6px;min-height:42px;font-size:11px}
.sa .town-portrait{width:32px;height:32px;object-fit:contain;flex-shrink:0}
.sa .town-speech{padding:12px;margin:0 0 16px;border-radius:5px;box-shadow:none;font-size:12px}
.sa .town-speech h3{font-size:13px;margin-bottom:8px}
.sa .town-speech p{margin-bottom:9px;white-space:pre-line}
.sa .town-speech-actions{display:flex;flex-wrap:wrap;gap:5px}
.sa .town-speech-actions button{padding:6px 8px;font-size:11px}
.sa .town-person,.sa .town-speech-actions button{border-top:2px solid var(--ink);border-right:2px solid var(--ink);border-bottom:2px solid var(--ink);border-left:2px solid var(--ink);box-shadow:none}
.sa #phone-content .town-known p{margin:2px 0;font-size:10px}
.sa #phone-content .town-known .town-portrait{width:32px;height:32px}
.sa #phone-content .feed-by{display:flex;align-items:center;gap:7px;margin-bottom:8px}
.sa #phone-content .feed-by .town-portrait{width:28px;height:28px}
.sa .feed-by strong{flex:1;min-width:0}
.sa .feed-by small{font-size:9px;white-space:nowrap}
.sa #phone-content .town-post p{margin-bottom:0;overflow-wrap:anywhere}
.sa .town-rep{margin-bottom:9px}
.sa .town-rep-track{position:relative;height:9px;margin:5px 3px 10px;overflow:visible}
.sa .town-rep-track::before{content:'';position:absolute;top:0;bottom:0;left:50%;border-left:1px solid var(--paper)}
.sa .town-rep-mark{position:absolute;top:-4px;bottom:-4px;width:4px;transform:translateX(-50%);background:var(--mustard)}
.sa #place-actions .festival-heading{font-size:12px;margin:10px 0 0;color:#805a0b}
.sa .policy-paper{padding:12px;border-radius:5px;box-shadow:none}
.sa .policy-paper fieldset{border:0;padding:0;margin:0;min-width:0}
.sa .policy-paper legend{font-size:12px;margin-bottom:10px}
.sa .policy-option{display:flex;align-items:flex-start;gap:9px;padding:9px 0;font-size:12px;cursor:pointer}
.sa .policy-option input{width:20px;height:20px;min-height:20px;flex-shrink:0;padding:0;margin:2px 0;accent-color:var(--teal)}
.sa .policy-option strong,.sa .policy-option span span{display:block}
.sa .policy-option span span{font-size:11px;margin-top:3px}
.sa .policy-status{font-size:11px;margin-top:12px}
.sa .policy-paper button{border-top:2px solid var(--ink);border-right:2px solid var(--ink);border-bottom:2px solid var(--ink);border-left:2px solid var(--ink);box-shadow:none}
.sa #phone-content .festival-today{color:var(--mustard)}
.sa .work-choice{display:flex;flex-wrap:wrap;align-items:stretch;gap:8px}.sa .work-choice>button,.sa .work-choice>button:hover,.sa .work-choice>button:focus-visible{flex:1 1 180px;border-top:2px solid var(--ink);border-right:2px solid var(--ink);border-bottom:2px solid var(--ink);border-left:2px solid var(--ink);box-shadow:none}.sa #scene-content .scene-art{display:block;float:none;width:100%;height:auto;max-height:38vh;object-fit:contain;margin:0 auto 12px}

/* Home objects share the right-anchored cover transform of the 1280x853 room painting. */
.sa #furniture-layer{position:absolute;pointer-events:none}
.sa #furniture-layer img{position:absolute;height:auto;max-width:none;object-fit:contain;transform:translate(-50%,-100%)}
.sa .hobby-icon{display:inline-block;flex:0 0 32px;width:32px;height:32px;background-repeat:no-repeat;vertical-align:middle}
.sa .fish-collection{list-style:none;padding:0;margin:10px 0}
.sa .fish-collection li{display:flex;align-items:center;gap:8px;margin:5px 0}
.sa .fish-collection .uncaught .item-icon,.sa .fish-collection .uncaught .hobby-icon{filter:grayscale(1);opacity:.4}
.sa .sa-casino button.sa-card[aria-pressed=true]{outline:3px solid var(--mustard);outline-offset:2px;transform:translateY(-5px)}
.sa .sa-casino button.sa-card,.sa .sa-mini button{border-top:2px solid var(--ink);border-right:2px solid var(--ink);border-bottom:2px solid var(--ink);border-left:2px solid var(--ink);box-shadow:none}
.sa .karaoke-lane{position:relative;margin:12px auto;width:min(240px,100%);height:200px;overflow:hidden;background:#263d49;color:var(--paper);border:2px solid var(--ink)}
.sa .karaoke-line{position:absolute;left:0;right:0;top:80%;border-top:3px solid var(--mustard);text-align:center;font-size:11px}
.sa .karaoke-note{position:absolute;left:50%;transform:translate(-50%,-50%);font-size:26px;line-height:1}
.sa .karaoke-still{height:90px;display:grid;place-items:center}
.sa .karaoke-still .karaoke-note{display:none}
.sa .karaoke-still .karaoke-line{position:static;border:0;font-size:14px}

.sa .family-names{display:block;opacity:.75;margin:.3rem 0;overflow-wrap:anywhere}.sa .resume-generation{display:block;font-size:.75rem;opacity:.8}.sa .handover-form{display:grid;gap:1rem}.sa .handover-form>label{display:grid;gap:.4rem}.sa .handover-form fieldset{border:1px solid #807465;padding:.75rem;min-width:0}.sa .keepsake-choice{display:flex;align-items:flex-start;gap:.6rem;margin:.7rem 0}.sa .keepsake-choice input{width:auto;flex:none}.sa .keepsake-choice span,.sa .keepsake-choice small{display:block}.sa .keepsake-choice small{margin-top:.25rem;opacity:.8}.sa .family-current{font-style:italic}


.sa .handover-form button,.sa .handover-form button:hover,.sa .handover-form button:focus-visible{border-top:2px solid var(--ink);border-right:2px solid var(--ink);border-bottom:2px solid var(--ink);border-left:2px solid var(--ink);box-shadow:none}

/* Shared Lowtide uses the same paper and ink as the local room. */
.sa #shared-status{position:relative;z-index:40;display:flex;flex-wrap:wrap;gap:8px;align-items:center;padding:7px 14px;border-radius:0;box-shadow:none;font-size:11px}
.sa #shared-status>span{flex:1}.sa #shared-status button{min-height:34px;padding:5px 8px;font-size:11px}
.sa #sleeping-card{position:absolute;z-index:15;left:20px;top:110px;width:370px;max-width:calc(100% - 40px);padding:22px;box-shadow:none}
.sa .room-entry{display:grid;gap:10px}.sa .room-entry label{font-size:11px}.sa .room-neighbours{padding:10px 0;margin:10px 0;border-top:1px dashed var(--ink)}.sa .room-neighbours .town-speech-actions{margin-bottom:10px}
.sa #city-watch{margin:24px auto;padding:24px;width:min(740px,calc(100% - 28px));box-shadow:none}.sa #city-watch p{overflow-wrap:anywhere}
.sa #stage.room-offline #street{filter:grayscale(1)}.sa #stage.room-offline::after{content:'connection interrupted. waiting for the host.';position:absolute;left:50%;top:94px;transform:translateX(-50%);z-index:29;padding:10px 16px;max-width:90%;background:var(--paper);color:var(--ink);border:2px solid var(--ink);font-size:12px}
.sa .room-chat{background:var(--paper);color:var(--ink);border-color:var(--ink);box-shadow:none;backdrop-filter:none}.sa .room-chat button,.sa #shared-status button,.sa .room-entry button,.sa .room-neighbours button,.sa .room-texts button{border-top:2px solid var(--ink);border-right:2px solid var(--ink);border-bottom:2px solid var(--ink);border-left:2px solid var(--ink);box-shadow:none}
@media(max-width:699px){.sa #sleeping-card{left:10px;top:92px;width:calc(100% - 20px);max-width:none}.sa #shared-status{font-size:10px}}

.sa .room-chat{--chat-bg:var(--paper);--chat-panel:var(--paper);--chat-line:var(--ink);--chat-ink:var(--ink);--chat-muted:var(--ink);--chat-accent:var(--teal);font-family:sa-mono,monospace;filter:none}.sa .room-chat--floating{left:50%;right:auto;bottom:12px;transform:translateX(-50%)}.sa .room-chat h2{font-family:sa-mono,monospace;font-size:15px}.sa .room-chat__panel{border:2px solid var(--ink)}
.sa .room-chat--floating{width:auto;background:transparent;border:0}.sa .room-chat--floating .room-chat__panel{background:var(--paper);border:2px solid var(--ink);width:min(320px,calc(100vw - 32px))}
.sa #your-cities{padding:18px;margin-top:20px;text-align:left;box-shadow:none}.sa #your-cities h2{font-size:18px}.sa .saved-city{padding:14px 0;border-bottom:1px dashed var(--ink);overflow-wrap:anywhere}.sa .saved-city h3,.sa .saved-city p{margin:0 0 8px}.sa .saved-city small{display:block;margin-bottom:10px}.sa .city-actions{display:flex;flex-wrap:wrap;gap:7px}.sa .city-dialog{background:var(--paper);color:var(--ink);max-width:min(600px,calc(100vw - 28px));width:100%;padding:20px;border:2px solid var(--ink)}.sa .city-dialog form,.sa .city-dialog label{display:grid;gap:12px}.sa .city-dialog textarea{width:100%;min-height:180px;resize:vertical;font:inherit}.sa .city-dialog input{width:100%}.sa .room-away{opacity:.65}.sa #your-cities button,.sa .city-dialog button{border-top:2px solid var(--ink);border-right:2px solid var(--ink);border-bottom:2px solid var(--ink);border-left:2px solid var(--ink);box-shadow:none}
.sa #your-cities{padding:0;margin:14px 0 18px}.sa #your-cities.empty{margin:8px 0 14px}.sa #your-cities.empty button{font-size:11px;min-height:30px;padding:5px 10px}

/* Relationship details sit beside the familiar hearts and wrap on the phone. */
.sa .person>div{min-width:0}
.sa .friend-affection{display:flex;flex-wrap:wrap;align-items:center;gap:5px 12px}
.sa .romance-details{display:grid;gap:4px;min-width:0;font-size:10px;line-height:1.4;overflow-wrap:anywhere}
.sa .romance-closeness{display:flex;flex-wrap:wrap;align-items:center;gap:4px 7px}
.sa .romance-closeness meter{width:72px;max-width:100%;height:12px;accent-color:var(--brick)}
/* The tank's paper scorecard stays readable above the painted ring. */
.sa .sa-fight .fight-wind{position:absolute;top:23%;width:29%;padding:3px 9px;background:#eadbb9;box-sizing:border-box}
.sa .sa-fight .fight-wind .fight-health{height:5px;margin-top:2px}.sa .sa-fight .fight-wind .fight-health span{background:#397b7a}
.sa .sa-fight .fight-focus{top:29%;font-size:16px}.sa .sa-fight .fight-match{position:absolute;top:5%;left:8%;display:grid;gap:4px;padding:6px 8px;background:#eadbb9;font:12px monospace}
.sa .sa-fight .fight-moves>div{flex:1 1 110px;min-width:0;overflow-wrap:anywhere}.sa .sa-fight .fight-moves button{width:100%;white-space:normal}.sa .sa-fight .fight-paper{max-height:40%;box-sizing:border-box}.sa .sa-fight .fight-paper h3{margin:6px 0;font-size:14px}
.sa .arena-opponent{display:flex;gap:10px;align-items:flex-start}.sa .arena-opponent .portrait{width:72px;height:84px;object-fit:contain;flex:none}.sa .arena-opponent p{font-size:12px}.sa .dojo-move{padding:9px 0;border-bottom:1px dashed var(--ink)}.sa .dojo-move button{border-top:2px solid var(--ink);border-right:2px solid var(--ink);border-bottom:2px solid var(--ink);border-left:2px solid var(--ink);box-shadow:none}
@media(max-width:600px){.sa .sa-fight .fight-wind{width:37%;top:23%;padding:3px 7px}.sa .sa-fight .fight-match{left:4%;font-size:10px}.sa .sa-fight .fight-moves>div{flex-basis:100px}.sa .sa-fight .fight-paper{max-height:43%;padding:8px}.sa .sa-fight .fight-focus{top:30%;left:7%;width:37%}}

.sa .sa-fight .fight-hype{height:7px;min-width:100px;background:#c6b695}.sa .sa-fight .fight-hype span{display:block;height:100%;background:#b5523b}
/* The exchange stays on the bank's paper card. */
.sa .exchange-board{min-width:0;font-size:11px}
.sa .exchange-company{border-top:1px dashed var(--ink);padding:15px 0;min-width:0;overflow-wrap:anywhere}
.sa .exchange-company h4{font-size:13px;margin:0 0 8px}
.sa .exchange-company p{margin:6px 0}
.sa .exchange-history{margin:10px 0}
.sa .exchange-history svg{display:block;width:100%;height:64px;color:var(--teal)}
.sa .exchange-history polyline{fill:none;stroke:currentColor;stroke-width:2;stroke-linejoin:round;stroke-linecap:round}
.sa .exchange-history circle{fill:currentColor}
.sa .exchange-history figcaption,.sa .exchange-fees{font-size:10px}
.sa .exchange-trade{margin:12px 0;display:grid;gap:7px;min-width:0}
.sa .exchange-trade label{display:flex;align-items:center;justify-content:space-between;gap:10px}
.sa .exchange-trade input{width:100px;min-width:0;min-height:40px}
.sa .exchange-presets{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:5px}
.sa .exchange-presets button{min-width:0;padding:7px 3px}
.sa .exchange-trade button,.sa .exchange-trade button:hover,.sa .exchange-trade button:focus-visible{border-top:2px solid var(--ink);border-right:2px solid var(--ink);border-bottom:2px solid var(--ink);border-left:2px solid var(--ink);box-shadow:none;min-height:40px}
.sa .exchange-quote{font-size:10px;min-height:28px}
.sa .gazette-mark{display:inline-flex;align-items:center;justify-content:center;font:700 8px/1 sa-mono,monospace;letter-spacing:.02em;background:var(--cream,#efe6d2);color:var(--ink,#1b1a1f);border:1.5px solid var(--ink,#1b1a1f);border-radius:3px;text-transform:uppercase}
