/* 게임 화면 — 작은 서울 색감·배치(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(460px,60vh,700px);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;--art-top:#D68239;height:104px;position:relative;overflow:hidden;margin:10px -3px 12px;border-radius:15px;background:var(--surface-sunk)}
.art-sun{position:absolute;right:30px;top:16px;width:36px;height:36px;border-radius:50%;background:#F5C55C}
.art-ground{position:absolute;width:80%;height:18px;border-radius:50%;background:#C7D39C;bottom:8px;left:8%}
.tower{position:absolute;bottom:16px;background:repeating-linear-gradient(0deg,transparent 0 10px,#B1B8B455 10px 12px),#FEF4DB;border-right:10px solid var(--art);border-top:6px solid var(--art-top);border-radius:4px 4px 0 0;z-index:1;box-shadow:6px 4px 0 #60442B0F}
.t1{left:14%;height:62px;width:40px}.t2{left:37%;height:86px;width:46px}.t3{left:62%;height:50px;width:38px}
.property-art.special .tower{display:none}
.art-stamp{position:absolute;right:10px;bottom:9px;font-size:8px;letter-spacing:2px;z-index:2;color:#8F7856}
.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)}
#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:16px}
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}
}
