/* 게임 화면 — 작은 서울 색감·배치(2026-09-24, proto/casual-study 시안을 실제 게임에 옮김). 색은 ../theme/tokens.css */

/* ── 머리글: 로고 · 보드 게임/나의 서울 탭 · 규칙·설정·계정 */
.topbar{height:80px;padding:0 4%;display:flex;align-items:center;justify-content:space-between;gap:14px;border-bottom:1px solid var(--border-default);background:var(--surface-card)}
.brand{display:flex;align-items:center;gap:11px;font-size:21px;font-weight:900;letter-spacing:-1px;text-decoration:none;white-space:nowrap}
.brand small{display:block;font-size:11px;letter-spacing:0;font-weight:700;color:var(--text-warm);margin-top:2px}
.brand-mark{display:grid;place-items:center;width:44px;height:44px;border-radius:14px;background:var(--action-primary);color:#FFF9E7;font-size:28px;box-shadow:0 4px 0 #AF502A;transform:rotate(-7deg);letter-spacing:-3px;padding-right:4px;flex:none}
.tabs{display:flex;gap:5px;padding:5px;background:var(--surface-tab);border-radius:15px}
.tabs a{font-size:13px;font-weight:800;padding:10px 24px;border-radius:11px;text-decoration:none;white-space:nowrap}
.tabs a.active{background:var(--selection);color:var(--selection-text);box-shadow:0 3px 0 var(--selection-shadow)}
.tabs a:hover:not(.active){background:#FFF8E9}
.top-actions{display:flex;align-items:center;gap:4px}
.workspace{max-width:1600px;margin:auto;padding:20px 4% 12px}
.page-heading{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}
.page-heading h1{font-size:27px;letter-spacing:-1.3px;margin:6px 0 0}

/* ── 플레이어 카드 */
.players{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:18px}
.player{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:10px;background:var(--surface-card);padding:12px;border:1px solid var(--border-default);border-radius:17px;min-width:0;position:relative}
.player.active{border:2px solid var(--player);background:#FFF5E3;box-shadow:0 3px 0 #ECCDAF}
.player.out{opacity:.45}
.avatar{display:grid;place-items:center;width:37px;height:37px;border-radius:12px;background:var(--player);color:#fff;font-size:16px;font-weight:900;box-shadow:inset 0 -4px #00000013}
.player>div{min-width:0}
.player b{font-size:12px;white-space:nowrap}
.player b .you{font-size:9px;color:var(--action-text);margin-left:4px;font-weight:900}
.player small{display:block;color:var(--text-secondary);font-size:10px;margin-top:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.player strong{font-size:19px;text-align:right;white-space:nowrap;letter-spacing:-.5px}
.player strong small{font-size:9px;font-weight:500;text-align:right}
.player .owned{grid-column:1/-1;font-style:normal;font-size:10px;color:var(--text-warm);background:var(--surface-sunk);border-radius:8px;padding:3px 8px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

/* ── 보드 + 옆 카드 */
.game-layout{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:20px;align-items:start}
.board-area{border-radius:28px;background:var(--surface-board);border:1px solid var(--border-board);overflow:hidden;box-shadow:0 7px 0 var(--shadow-board);position:relative}
.board-top{position:absolute;top:16px;left:18px;right:18px;display:flex;justify-content:space-between;align-items:center;z-index:4;pointer-events:none;gap:8px}
.board-top>*{pointer-events:auto}
.round-pill{display:flex;align-items:center;gap:10px;background:#FFF9E9;padding:8px 13px;border:1px solid var(--action-ghost-border);border-radius:12px;font-size:10px;letter-spacing:1px;box-shadow:0 3px 0 var(--action-ghost-shadow);white-space:nowrap}
.round-pill b{font-size:18px;margin:0 3px}
.round-pill em{font-style:normal;letter-spacing:0;font-size:12px;font-weight:800}
.tools{display:flex;gap:7px}
.tools button{height:36px;min-width:36px;background:#FFF9E9;border:1px solid var(--action-ghost-border);border-radius:10px;font-size:12px;font-weight:700;padding:0 10px;box-shadow:0 2px 0 var(--action-ghost-shadow)}
.tools button[aria-pressed=true]{background:var(--selection);color:var(--selection-text);border-color:var(--selection)}
.tools button#rotate,.tools button#reset-view,.tools button#pan-view{font-size:20px;line-height:1}
#viewport{height:clamp(380px,calc(100vh - 380px),700px);/* 턴 바가 첫 화면 안에 들도록(2026-09-25) */position:relative;background:var(--board-gradient);touch-action:none}
canvas{display:block;cursor:grab}
canvas:active{cursor:grabbing}
#loading{position:absolute;top:45%;width:100%;text-align:center;font-size:14px}
#leaders,#labels{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}
#leaders{z-index:2}
#labels{z-index:3}
.board-hint{display:flex;justify-content:space-between;gap:10px;padding:0 20px 12px;font-size:10px;color:#806D52}
#performance{font-style:normal;margin-left:6px;opacity:.7}

/* ── 명패 */
.tile-label{position:absolute;width:90px;min-height:33px;padding:4px 6px;border:1px solid var(--label-border);border-bottom:3px solid var(--group);border-radius:8px;background:var(--label-surface);color:var(--text-primary);font-size:9px;line-height:1.2;pointer-events:auto;box-shadow:0 2px 3px #64422114;cursor:pointer}
.tile-label span{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-bottom:3px}
.tile-label b{font-size:11px;display:block}
.tile-label.selected{background:var(--selection);color:var(--selection-text);border:2px solid var(--label-selected-border);box-shadow:0 3px 0 #28324B55}
.tile-label.special{width:55px;background:var(--label-special);font-weight:700}
.tile-label.special.selected{background:var(--selection);color:var(--selection-text)}
.tile-label.small{width:62px;font-size:8px}
.tile-label.small span{font-size:8px;margin-bottom:1px}
.tile-label.small b{font-size:10px}
.tile-label.owned{border-left:4px solid var(--owner)}
.tile-label.chip{width:auto;min-width:28px;min-height:0;padding:3px 6px;border-bottom-width:3px}
.tile-label.chip b{font-size:10px;margin:0}
.tile-label.chip.special{width:auto;font-size:9px;background:var(--label-special)}
.tile-label.chip span{margin:0}

/* ── 턴 바(보드 아래) */
.turn-bar{display:flex;gap:14px;align-items:center;background:var(--surface-card);padding:16px 20px;border-top:1px solid var(--border-board)}
.turn-symbol{width:44px;height:44px;background:#FBE0B6;border-radius:14px;display:grid;place-items:center;transform:rotate(-7deg);color:#A76028;flex:none}
.turn-symbol .icon{width:24px;height:24px}
.turn-text{flex:1;min-width:0}
.turn-text small{display:block;font-size:11px;color:var(--text-secondary);margin-bottom:4px}
.turn-text b{font-size:15px;letter-spacing:-.3px}
.turn-text p{font-size:11px;margin:4px 0 0;color:var(--text-secondary)}
.turn-text p:empty{display:none}
.turn-controls{display:flex;gap:14px;align-items:center;flex:none}
.turn-controls .btn{min-width:168px}
#dice-values{font-size:18px;color:var(--text-warm);font-weight:900;white-space:nowrap}
#ai-summary{list-style:none;margin:8px 0 0;padding:8px 10px;border-radius:12px;background:var(--surface-sunk);font-size:11px;line-height:1.6;color:var(--text-warm);max-height:9.6em;overflow:auto}
#ai-summary li.me{color:var(--text-primary);font-weight:700}
#ai-summary li.me.gain::before{content:'+ ';color:var(--gain)}#ai-summary li.me.loss::before{content:'− ';color:var(--loss)}

/* ── 옆 카드: 단지 · 보상 · 살림 */
.board-sidebar{display:grid;gap:16px}
.property-card,.finance-card{background:var(--surface-card);border:1px solid var(--border-default);border-radius:25px;padding:20px;box-shadow:0 4px 0 var(--shadow-card)}
.card-kicker{display:flex;justify-content:space-between;align-items:center;font-size:11px;font-weight:700;color:#8B765D}
.property-art{--art:#E8B06A;height:136px;position:relative;overflow:hidden;margin:10px -3px 12px;border-radius:15px;background:var(--surface-sunk)}
/* 단지 그림(2026-09-25 소유자): 보드의 그 건물을 따로 찍은 그림(view.thumb) + 발전 단계 띠 */
.property-art{background:radial-gradient(ellipse at 50% 35%,#FFF8E8,#F1E4CB 78%)}
.property-art img,.choice-art img{display:block;width:100%;height:100%;object-fit:contain}
.property-art img{height:calc(100% - 22px)}
.stage-strip{position:absolute;left:8px;right:8px;bottom:6px;margin:0;padding:0;list-style:none;display:flex;justify-content:center;gap:4px}
.stage-strip li{min-width:18px;height:16px;padding:0 5px;border-radius:8px;display:grid;place-items:center;font-size:9px;font-weight:800;color:#B3A283;background:#FFFAF0B0;border:1px dashed #D8C6A2}
.stage-strip li.past{color:var(--text-warm);background:#F6DDA0;border:1px solid #E3C47E}
.stage-strip li.now{color:#fff;background:var(--action-primary);border:1px solid var(--action-primary-border);box-shadow:0 2px 0 var(--action-primary-shadow);padding:0 8px}
.property-card>small{font-size:11px;color:var(--text-secondary)}
.property-card h2{font-size:23px;letter-spacing:-1px;line-height:1.35;margin:6px 0 9px;word-break:keep-all}
.ownership{display:inline-block;font-size:11px;background:#EEEADF;padding:6px 9px;border-radius:7px;color:#5F6254}
.ownership:empty{display:none}
.price-row{display:flex;justify-content:space-between;gap:15px;margin:18px 0 14px}
.price-row small{display:block;font-size:11px;color:var(--text-secondary);margin-bottom:5px}
.price-row strong{font-size:27px;letter-spacing:-1px}
.price-row>div:last-child{text-align:right}
.price-row>div:last-child strong{font-size:22px}
/* 실거래: 핵심 둘은 늘 보이고(㎡당가·전세가율 — 이게 안 보이면 부루마블이다), 나머지는 접는다 */
#real-data{margin:0 0 14px}
.real-key{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.real-key div{background:var(--surface-sunk);border-radius:12px;padding:9px 11px}
.real-key small{display:block;font-size:10px;color:var(--text-warm);margin-bottom:3px}
.real-key b{font-size:15px}
.real-more{border-top:1px dashed #DDCFB8;margin-top:10px;padding-top:9px;font-size:12px}
.real-more summary{cursor:pointer;font-weight:700;color:var(--text-warm)}
.real-more dl{margin:6px 0 0}.real-more dl>div{display:flex;justify-content:space-between;margin-top:8px}
.real-more dt{color:var(--text-secondary)}.real-more dd{margin:0;font-weight:800}
.real-more p{font-size:10px;line-height:1.7;color:var(--text-secondary);margin:8px 0 0}
.special-description{background:var(--surface-sunk);border-radius:12px;padding:10px 12px;font-size:13px;font-weight:700}
.card-links{display:flex;justify-content:space-between;gap:8px;margin-top:4px}
.reward-card{display:flex;gap:12px;align-items:center;background:var(--reward-surface);border:1px solid var(--reward-border);border-radius:19px;padding:16px 15px;text-decoration:none;color:var(--text-primary)}
.reward-icon{color:var(--reward-icon)}.reward-icon .icon{width:28px;height:28px}
.reward-card small{display:block;font-size:10px;color:#92703D;margin-bottom:4px}
.reward-card b{font-size:13px}
.reward-card p{font-size:11px;margin:6px 0 0;color:var(--reward-text)}
.reward-arrow{margin-left:auto;font-size:22px}
.finance-card .card-kicker{margin-bottom:6px}
.finance-actions{display:flex;gap:7px;margin-top:16px}
.finance-actions .btn{font-size:12px;padding:9px;flex:1;min-height:38px}
#loan-status{font-size:11px;line-height:1.6;color:var(--text-secondary);margin:10px 0 0}

/* ── 기록 · 바닥글 */
.history{margin:22px 0 8px;font-size:12px;color:var(--text-secondary)}
.history summary{cursor:pointer;font-weight:700;color:var(--text-warm)}
#history{max-height:200px;overflow:auto;line-height:1.9}
footer{display:flex;justify-content:space-between;gap:12px;padding:8px 0 24px;font-size:10px;color:var(--text-faint)}
footer a{text-decoration:none}

/* ── 대화상자 */
.dialog-actions{display:flex;gap:10px;margin-top:22px}
.dialog-actions .btn{flex:1}
#choice-funds{background:var(--surface-sunk);border-radius:12px;padding:12px;font-size:12px;color:var(--text-warm)}
/* 매입 창(2026-09-25 소유자): 단지 이름과 가격이 가장 크게. 질문은 위에 한 줄 */
.choice-question{margin:8px 0 12px;font-size:15px;font-weight:800;color:var(--text-warm);line-height:1.5}
.choice-head{display:grid;grid-template-columns:1fr auto;align-items:end;gap:10px 12px;padding:10px 14px 14px;border-radius:18px;background:var(--surface-card);border:2px solid var(--border-default);box-shadow:0 4px 0 var(--shadow-card);margin-bottom:12px}
.choice-art{grid-column:1/-1;height:150px;margin:0 -4px;border-radius:12px;background:radial-gradient(ellipse at 50% 35%,#FFF8E8,#F1E4CB 78%);overflow:hidden}
.choice-name{min-width:0}
.choice-name small{display:block;font-size:11px;font-weight:700;color:var(--text-secondary)}
.choice-name h2{margin:2px 0 0;font-size:24px;line-height:1.25;letter-spacing:-1px;word-break:keep-all}
.choice-price{text-align:right;white-space:nowrap}
.choice-price small{display:block;font-size:10px;font-weight:700;color:var(--text-secondary)}
.choice-price strong{font-size:30px;letter-spacing:-1px;color:var(--action-text)}
.choice-price strong em{font-size:14px;font-style:normal}
#choice-description{margin:0 0 10px;font-size:13px;font-weight:700;color:var(--text-primary)}
@media (max-width:760px){.choice-art{height:124px}.choice-name h2{font-size:21px}.choice-price strong{font-size:26px}}
#ranking{padding-left:22px;line-height:2.3;font-size:14px}
dialog .fine{font-size:11px}
#settings-dialog label{display:block;font-size:13px;margin:15px 0}
#settings-dialog label small{display:block;margin:2px 0 0 22px;color:var(--text-secondary);font-weight:400}
select{padding:7px 9px;border:1px solid var(--border-board);border-radius:9px;color:var(--text-primary);background:#FFFDF6;max-width:100%}
.settings-buttons,#fx-buttons{display:flex;gap:8px;flex-wrap:wrap;margin:14px 0}
#settings-dialog h3{font-size:14px;margin:20px 0 8px}
#settings-dialog .dev{margin-top:18px;border-top:1px dashed #DDCFB8;padding-top:12px;font-size:12px}
#settings-dialog .dev summary{cursor:pointer;font-weight:700;color:var(--text-warm)}
#fx-buttons .btn,.dev .btn{font-size:11px;padding:8px 10px;min-height:36px}
.market{background:linear-gradient(135deg,#EAF2FF,#FBF3FF)}
.result{background:linear-gradient(135deg,#FFF3D1,var(--surface-card))}
.register{margin:14px 0;padding:14px 16px;border-radius:16px;background:#FFF7F0;border:1px solid #F3D3BD}
.register b{display:block;font-size:14px;color:var(--action-text)}
.register p{font-size:12px;color:var(--text-secondary);margin:6px 0 10px}
.register-options{display:flex;flex-wrap:wrap;gap:8px}
.register-options .btn,.register .btn{font-size:13px;padding:9px 14px}
.register-reward{font-size:13px!important;color:var(--gain)!important;font-weight:700;margin:0 0 8px!important}
.map-link{display:inline-block;font-size:12px;font-weight:700;color:var(--text-warm);text-decoration:none}

/* ── 알림(보드 위) */
#toast{position:absolute;left:50%;bottom:18px;transform:translateX(-50%);background:var(--toast);color:#fff;border-radius:14px;font-size:13px;padding:13px 19px;width:max-content;max-width:min(85%,640px);text-align:center;z-index:5;pointer-events:none;opacity:0;transition:opacity .2s;box-shadow:0 5px 20px #28324B22}
#toast.show{opacity:1}

/* ── 돈 흐름 알림 · 플레이어 카드 위 돈 이동 · 등기 등급 눈금 · 규칙 안내 (2026-09-24) */
#flows{position:fixed;inset:auto 16px 16px auto;margin:0;border:0;padding:0;background:transparent;overflow:visible;z-index:40;display:flex;flex-direction:column-reverse;gap:6px;align-items:flex-end;pointer-events:none;max-width:min(360px,calc(100vw - 32px))}
#flows .flow{display:flex;gap:8px;align-items:baseline;padding:9px 13px;border-radius:13px;background:#FFFDF6;border:1px solid var(--border-default);box-shadow:0 6px 18px #28324B26;font-size:12px;color:var(--text-primary);animation:flow-in .22s ease-out;transition:opacity .4s,transform .4s}
#flows .flow b{font-size:15px;letter-spacing:-.3px;white-space:nowrap;font-variant-numeric:tabular-nums}
#flows .flow.gain b{color:var(--gain)}#flows .flow.loss b{color:var(--loss)}#flows .flow.swap b{color:var(--swap)}
#flows .flow.gain{border-left:4px solid var(--gain-line)}#flows .flow.loss{border-left:4px solid var(--loss-line)}#flows .flow.swap{border-left:4px solid var(--swap-line)}
#flows .flow.out{opacity:0;transform:translateX(12px)}
@keyframes flow-in{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
.money-float{position:absolute;z-index:30;pointer-events:none;font-weight:900;font-size:15px;letter-spacing:-.3px;padding:3px 9px;border-radius:10px;background:#FFFDF6F0;box-shadow:0 4px 14px #28324B26;white-space:nowrap;font-variant-numeric:tabular-nums;animation:money-float var(--dur,1.8s) ease-out forwards}
.money-float.gain{color:var(--gain);border:1px solid #BFE9D3}.money-float.loss{color:var(--loss);border:1px solid #F7C9D0}
@keyframes money-float{0%{opacity:0;transform:translate(-100%,-30%)}14%{opacity:1;transform:translate(-100%,-50%)}72%{opacity:1;transform:translate(-100%,-95%)}100%{opacity:0;transform:translate(-100%,-125%)}}
.gauge.tiered{position:relative;overflow:visible}
.gauge.tiered em{position:absolute;top:-3px;bottom:-3px;width:2px;background:#28324B55;font-style:normal}
.gauge.tiered em span{position:absolute;top:100%;left:50%;transform:translateX(-50%);margin-top:3px;font-size:9px;font-weight:700;color:var(--text-warm);white-space:nowrap}
.gauge.tiered em:last-of-type span{left:auto;right:0;transform:none}
#goal{margin-bottom:30px}   /* 아래 눈금 글자(T3·T4·T5) 자리 — 대출 버튼과 겹치지 않게 */
dialog.rules{max-width:540px}
#rules-body{font-size:13px;line-height:1.65}
#rules-body h3{font-size:14px;margin:16px 0 4px}
#rules-body p,#rules-body ul{margin:4px 0;color:var(--text-primary)}#rules-body ul{padding-left:18px}
#rules-body table{border-collapse:collapse;width:100%;font-size:12px;margin:6px 0}
#rules-body td,#rules-body th{border:1px solid var(--border-default);padding:5px 7px;text-align:left}
#rules-body th{background:var(--surface-sunk)}
#rules-body .chip{display:inline-block;padding:1px 7px;border-radius:8px;font-weight:700;font-size:11px}
#rules-body .chip.gain{background:var(--gain-surface);color:var(--gain)}#rules-body .chip.loss{background:var(--loss-surface);color:var(--loss)}#rules-body .chip.swap{background:var(--swap-surface);color:var(--swap)}

/* ── 가로 1050 이하 */
@media(max-width:1050px){
  .game-layout{grid-template-columns:minmax(0,1fr) 260px;gap:14px}
  .player{gap:7px;padding:10px}.player strong{font-size:15px}
  .turn-symbol{display:none}
  .turn-controls .btn{min-width:140px}
  .workspace{padding-left:3%;padding-right:3%}
  .property-card,.finance-card{padding:17px}
}
/* ── 폰 */
@media(max-width:760px){
  .topbar{height:auto;min-height:68px;padding:10px 12px;gap:8px;flex-wrap:wrap}
  .brand{font-size:17px;gap:8px}.brand small{font-size:10px}
  .brand-mark{width:36px;height:36px;font-size:23px;border-radius:11px}
  .tabs a{font-size:12px;padding:9px 12px}
  .top-actions{width:100%;justify-content:flex-end;order:3}
  .top-actions .quiet{font-size:12px;padding:8px 10px}
  .workspace{padding:14px 12px 12px}
  .page-heading{margin-bottom:12px}.page-heading h1{font-size:21px}.overline{font-size:9px}
  .players{grid-template-columns:1fr 1fr;gap:8px;margin-bottom:14px}
  .player{padding:9px}.player b{font-size:11px}.avatar{width:28px;height:28px;border-radius:9px;font-size:12px}
  .player strong{font-size:14px}.player small{font-size:9px}.player .owned{font-size:9px}
  .game-layout{display:flex;flex-direction:column;gap:18px}
  .board-area{width:100%;border-radius:21px}
  #viewport{height:440px}
  .board-top{top:10px;left:10px;right:10px}
  .round-pill{padding:6px 9px;font-size:8px;gap:6px}.round-pill b{font-size:15px}.round-pill em{font-size:10px}
  .tools{gap:5px}.tools button{height:32px;min-width:32px;font-size:11px;padding:0 7px}
  .board-hint{padding:0 12px 10px;font-size:9px}.board-hint>span:first-child{display:none}
  .turn-bar{flex-wrap:wrap;padding:14px;gap:10px}
  .turn-controls{width:100%;justify-content:space-between}
  .turn-controls .btn{flex:1;max-width:260px;font-size:14px}
  .board-sidebar{width:100%;gap:14px}
  .property-card{display:grid;grid-template-columns:1fr 1fr;column-gap:14px}
  .property-card>.card-kicker,.property-card>.price-row,.property-card>#real-data,.property-card>.btn,.property-card>.card-links{grid-column:1/-1}
  .property-art{grid-column:2;grid-row:2/6;width:100%;height:116px;margin:9px 0}
  .property-card>small{margin-top:14px}
  .property-card h2{font-size:21px}
  .ownership{align-self:start;font-size:10px}
  .tile-label.chip{padding:2px 4px}.tile-label.chip b{font-size:9px}
  #flows{inset:auto 12px 12px 12px;max-width:none;align-items:stretch}#flows .flow{justify-content:space-between}
  .money-float{font-size:12px;padding:2px 7px}
  #toast{font-size:11px}
  dialog{padding:24px}
}

/* ── 손맛(2026-09-25): 순자산이 굴러갈 때 색, 부채 구간이 오르면 흔들림, 등기 등급이 오르면 반짝임 */
.player .net{display:inline-block;transition:color .2s}
.player .net.counting-up{color:var(--gain)}
.player .net.counting-down{color:var(--loss)}
.shake{animation:shake .5s cubic-bezier(.36,.07,.19,.97)}
@keyframes shake{10%,90%{transform:translateX(-1px)}20%,80%{transform:translateX(3px)}30%,50%,70%{transform:translateX(-5px)}40%,60%{transform:translateX(5px)}}
.glow{animation:glow 1.3s ease-out}
@keyframes glow{0%{box-shadow:0 0 0 0 #F8D274}35%{box-shadow:0 0 0 7px #F8D274AA}100%{box-shadow:0 0 0 14px #F8D27400}}
@media (prefers-reduced-motion:reduce){.shake,.glow{animation:none}}

/* ── 이웃들의 한마디(2026-09-25): 플레이어 카드 아래 말풍선. 테두리는 그 이웃의 색 */
.bubbles{position:absolute;top:0;left:0;width:0;height:0;z-index:40}
.bubble{position:absolute;width:max-content;max-width:228px;display:grid;gap:2px;padding:8px 12px 9px;background:var(--surface-card);border:2px solid var(--player);border-radius:14px;box-shadow:0 3px 0 var(--shadow-card),0 8px 18px #28324B1A;font-size:12px;font-weight:700;line-height:1.35;color:var(--text-primary);animation:bubble-in .32s cubic-bezier(.34,1.56,.64,1) both;transform-origin:var(--tail) 0;pointer-events:none}
.bubble::before{content:'';position:absolute;top:-8px;left:calc(var(--tail) - 7px);width:12px;height:12px;background:var(--surface-card);border-left:2px solid var(--player);border-top:2px solid var(--player);transform:rotate(45deg);border-radius:3px 0 0 0}
.bubble b{font-size:10px;color:var(--text-warm);font-weight:900}
.bubble.out{animation:bubble-out .28s ease-in both}
@keyframes bubble-in{from{opacity:0;transform:translateY(-6px) scale(.7)}to{opacity:1;transform:none}}
@keyframes bubble-out{to{opacity:0;transform:translateY(-4px) scale(.92)}}
@media (prefers-reduced-motion:reduce){.bubble,.bubble.out{animation-duration:.01s}}

/* ── 첫 판 안내(2026-09-25): 그 자리를 가리키는 작은 카드. 맨 위 층(popover) */
.coach{position:fixed;inset:auto;margin:0;padding:12px 14px 12px 12px;border:2px solid var(--action-primary);border-radius:16px;background:var(--surface-card);color:var(--text-primary);box-shadow:0 4px 0 var(--action-primary-shadow),0 14px 28px #28324B26;display:grid;grid-template-columns:auto 1fr;gap:10px;align-items:start;font-family:var(--font);overflow:visible;animation:coach-in .34s cubic-bezier(.34,1.56,.64,1)}
.coach:not(:popover-open){display:none}
.coach-mark{display:grid;place-items:center;width:30px;height:30px;border-radius:10px;background:var(--action-primary);color:#FFF9E7;font-weight:900;font-size:17px;letter-spacing:-2px;padding-right:2px;box-shadow:0 3px 0 #AF502A;transform:rotate(-7deg)}
.coach small{font-size:10px;font-weight:800;color:var(--overline);letter-spacing:.3px}
.coach p{margin:2px 0 8px;font-size:13px;line-height:1.5;font-weight:600}
.coach p b{color:var(--action-text)}
.coach-actions{display:flex;gap:6px;flex-wrap:wrap}
.coach-actions button{border-radius:10px;padding:6px 11px;font-size:12px;font-weight:800;font-family:inherit;cursor:pointer}
.coach-ok{background:var(--action-primary);color:#fff;border:1px solid var(--action-primary-border);box-shadow:0 2px 0 var(--action-primary-shadow)}
.coach-off{background:none;border:0;color:var(--text-secondary);text-decoration:underline;text-underline-offset:2px}
.coach-arrow{position:absolute;left:calc(var(--arrow) - 8px);width:14px;height:14px;background:var(--surface-card);border:2px solid var(--action-primary);transform:rotate(45deg)}
.coach[data-side=below] .coach-arrow{top:-9px;border-right:0;border-bottom:0;border-radius:3px 0 0 0}
.coach[data-side=above] .coach-arrow{bottom:-9px;border-left:0;border-top:0;border-radius:0 0 3px 0}
@keyframes coach-in{from{opacity:0;transform:translateY(6px) scale(.94)}to{opacity:1;transform:none}}
@media (prefers-reduced-motion:reduce){.coach{animation:none}}

/* ── 실거래 한 줄 · 이웃 차례 퀴즈(2026-09-25) */
.loading-fact{display:block;width:min(360px,86%);margin:12px auto 0;font-style:normal;font-size:12px;font-weight:700;line-height:1.5;color:var(--text-warm);background:#FFFAF0CC;border:1px solid var(--border-default);border-radius:12px;padding:8px 12px}
.choice-fact{margin:-2px 0 14px;padding:9px 12px;border-radius:12px;background:var(--gain-surface);color:#0E6B47;font-size:12px;font-weight:700;line-height:1.5}
.choice-fact::before{content:'진짜 서울 · ';font-weight:900}
.choice-fact[hidden]{display:none}
.quiz{margin-top:8px;padding:10px 12px;border-radius:14px;background:var(--surface-sunk);border:1px dashed var(--action-secondary-border);display:grid;gap:8px;animation:quiz-in .3s ease-out}
.quiz[hidden]{display:none}
.quiz-head{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;font-size:12px}
.quiz-head b{font-size:11px;color:#fff;background:var(--action-primary);border-radius:7px;padding:2px 7px;font-weight:900}
.quiz-head span{font-weight:800}
.quiz-head small{margin-left:auto;font-size:10px;color:var(--text-secondary);font-weight:700}
.quiz-choices{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.quiz-choice{display:grid;gap:2px;text-align:left;padding:9px 10px;border-radius:12px;border:1px solid var(--action-ghost-border);background:var(--action-ghost);box-shadow:0 3px 0 var(--action-ghost-shadow);font-family:inherit;color:var(--text-primary);cursor:pointer;min-width:0}
.quiz-choice:hover:not(:disabled){background:#FFF3DA}
.quiz-choice:active:not(:disabled){transform:translateY(2px);box-shadow:none}
.quiz-choice b{font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.quiz-choice small{font-size:10px;color:var(--text-secondary)}
.quiz-choice em{font-style:normal;font-size:12px;font-weight:900;margin-top:3px}
.quiz-choice:disabled{cursor:default}
.quiz-choice.win{border-color:var(--gain-line);background:var(--gain-surface);box-shadow:0 3px 0 #BFE5D0}
.quiz-choice.win em{color:var(--gain)}
.quiz-choice.lose{opacity:.75}
.quiz-choice.picked.lose{border-color:var(--loss-line);background:var(--loss-surface);opacity:1}
.quiz-note{margin:0;font-size:12px;font-weight:700;color:var(--text-warm)}
.quiz-note:empty{display:none}
@keyframes quiz-in{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}
@media (prefers-reduced-motion:reduce){.quiz{animation:none}}

/* ── 건물 올리기 칩(2026-09-25): 내 차례에 턴 바에서 바로. 점 다섯 개 = 1~4단계 + 랜드마크 */
.grow{margin-top:10px;display:grid;gap:6px}
.grow[hidden]{display:none}
.grow-head{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;font-size:11px}
.grow-head b{font-size:12px;color:var(--text-primary)}
.grow-head span{color:var(--text-secondary)}
.grow-chips{display:flex;gap:8px;overflow-x:auto;padding:2px 2px 6px;scrollbar-width:thin}
.grow-chip{flex:none;display:grid;gap:2px;text-align:left;min-width:150px;padding:9px 11px;border-radius:14px;border:1px solid var(--action-secondary-border);background:var(--action-secondary);box-shadow:0 3px 0 var(--action-secondary-shadow);font-family:inherit;color:var(--text-primary);cursor:pointer}
.grow-chip:hover:not(:disabled){background:#FBD99A}
.grow-chip:active:not(:disabled){transform:translateY(2px);box-shadow:none}
.grow-chip:disabled{opacity:.5;cursor:not-allowed;box-shadow:none}
.grow-chip.final{background:#FCE8B6;border-color:#E3B75A;box-shadow:0 3px 0 #D9A94B}
.grow-name{font-size:13px;font-weight:900;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:180px}
.grow-pips{display:flex;gap:3px;margin:2px 0}
.grow-pips i{width:14px;height:6px;border-radius:3px;background:#FFF6E2;border:1px solid #D7B57A}
.grow-pips i.on{background:var(--action-primary);border-color:var(--action-primary-border)}
.grow-pips i.next{background:#F6C68F;border-color:var(--action-primary);animation:pip 1.2s ease-in-out infinite}
.grow-pips i:last-child{width:18px}
.grow-step{font-size:12px;font-weight:800}
.grow-step em{font-style:normal;font-size:10px;color:var(--swap);background:var(--swap-surface);border-radius:5px;padding:0 4px;margin-left:2px}
.grow-rent{font-size:10px;color:var(--text-warm);font-weight:700}
@keyframes pip{50%{background:var(--action-primary)}}
@media (prefers-reduced-motion:reduce){.grow-pips i.next{animation:none}}

/* ── 행동 막대(2026-09-25): 턴 바가 화면 밖일 때만 아래에. 돈 흐름 알림은 그 위로 */
.dock{position:fixed;left:12px;right:12px;bottom:calc(12px + env(safe-area-inset-bottom));z-index:35;display:flex;align-items:center;gap:10px;padding:10px 10px 10px 16px;border-radius:20px;background:var(--surface-card);border:1px solid var(--border-default);box-shadow:0 6px 0 var(--shadow-card),0 14px 34px #28324B33;animation:dock-in .25s ease-out}
.dock[hidden]{display:none}
.dock-dice{font-size:15px;font-weight:900;letter-spacing:-.3px;white-space:nowrap;color:var(--text-warm)}
.dock-grow{flex:none;border-radius:12px;padding:9px 11px;font:inherit;font-size:12px;font-weight:800;border:1px solid var(--action-secondary-border);background:var(--action-secondary);box-shadow:0 2px 0 var(--action-secondary-shadow);color:var(--text-primary);cursor:pointer}
.dock .btn{flex:1;margin-left:auto;min-height:48px;font-size:15px}
@media (min-width:761px){.dock{left:auto;right:24px;width:420px}}
body.docked #flows{bottom:calc(92px + env(safe-area-inset-bottom))}
@keyframes dock-in{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}
@media (prefers-reduced-motion:reduce){.dock{animation:none}}

/* ── 난이도 사다리(2026-09-25): 라운드 옆 단계 칩 · 잠긴 등급 눈금 · 결과 창 승급/강등 한 줄 */
.level-chip{font-style:normal;font-size:10px;font-weight:900;letter-spacing:0;color:var(--tier-text);background:var(--tier-surface);border-radius:8px;padding:3px 7px;white-space:nowrap}
.level-chip[hidden]{display:none}
.gauge.tiered em.locked{background:#28324B22}
.gauge.tiered em.locked span{color:var(--text-faint)}
.ladder-note,.register-ladder{margin:6px 0 10px;padding:9px 12px;border-radius:12px;background:var(--reward-surface);border:1px solid var(--reward-border);color:var(--reward-text);font-size:13px;font-weight:800;line-height:1.5}
.ladder-note[hidden]{display:none}

/* ── 좁은 폰 머리글(2026-09-25 소유자): 로고는 ‘w.’ 마크만, 탭·규칙·설정·계정 칩을 한 줄에. 340px 이하는 탭을 ‘게임 · 지도’ 로 */
.tabs .short,.tools .short{display:none}
@media (max-width:480px){
  #turn-owner{display:none}   /* 누구 차례인지는 아래 턴 바에 */
  .tools .long{display:none}.tools .short{display:inline}
  .tools{gap:4px}.tools button{min-width:30px;height:30px;padding:0 6px}
  .topbar{flex-wrap:nowrap;gap:6px;padding:8px 10px;min-height:0}
  .brand>span:not(.brand-mark){display:none}
  .brand-mark{width:34px;height:34px;font-size:22px;border-radius:10px}
  .tabs{padding:4px;gap:3px}.tabs a{padding:8px 9px;font-size:12px}
  .top-actions{width:auto;order:0;gap:2px;margin-left:auto}
  .top-actions .quiet{padding:7px 6px;font-size:11px}
  .topbar .sound-btn{width:32px;height:32px}
}
/* 보드는 머리글 항목이 많아 480px 이하부터 탭을 줄인다. 단계 칩은 이름만, 도구 글자는 한 줄 */
@media (max-width:480px){.tabs .long{display:none}.tabs .short{display:inline}.top-actions .quiet{white-space:nowrap}.level-chip .cap{display:none}.level-chip b{font-weight:900}.tools button{white-space:nowrap}.round-pill{gap:6px}}
@media (max-width:360px){.board-top{flex-wrap:wrap;row-gap:6px}.tools{margin-left:auto}}   /* 아이폰 SE 1세대급: 도구는 라운드 아래 줄로 */

/* ── 결과 창 이번 주 순위 변화(2026-09-26) */
.register-week{margin:0 0 10px;font-size:13px;font-weight:800;color:var(--text-primary)}
.register-week a{margin-left:6px;color:var(--action-text);font-weight:800;text-decoration:none;white-space:nowrap}
