:root{--bg: #0a0d13;--bg-panel: #141a24;--bg-elevated: #1c2430;--text: #eee7d6;--text-dim: #92a0b3;--cash: #f6f1e3;--networth: #2fae7a;--accent: #cda349;--accent-strong: #b5872f;--danger: #b3452f;--warning: #d9a441;--radius: 14px;--radius-sm: 8px;--font-display: "Playfair Display", Georgia, serif;font-family:Inter,Segoe UI,system-ui,sans-serif}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:radial-gradient(circle at 18% -8%,rgba(205,163,73,.08),transparent 42%),radial-gradient(circle at 82% 105%,rgba(47,174,122,.06),transparent 45%),var(--bg);color:var(--text)}button{font-family:inherit;cursor:pointer}.app-shell{min-height:100vh;display:flex;flex-direction:column;max-width:720px;margin:0 auto;padding:12px;gap:10px}.centered{justify-content:center;align-items:center}.card{background:linear-gradient(165deg,var(--bg-elevated),var(--bg-panel));border-radius:var(--radius);border:1px solid rgba(205,163,73,.18);padding:24px;box-shadow:0 14px 34px #00000080;width:100%;max-height:85vh;overflow-y:auto}.home-card,.lobby-card{max-width:420px}.brand-title{margin:0;font-family:var(--font-display);font-size:2.1rem;font-weight:700;letter-spacing:.3px;background:linear-gradient(100deg,#f3d883 0%,var(--accent) 45%,#a97c2f 100%);-webkit-background-clip:text;background-clip:text;color:transparent}.brand-subtitle{color:var(--text-dim);margin:4px 0 20px;font-size:.9rem;letter-spacing:.2px}.tabs{display:flex;gap:8px;margin-bottom:16px}.tab{flex:1;padding:10px;border-radius:var(--radius-sm);border:none;background:var(--bg-elevated);color:var(--text-dim);font-weight:600}.tab.active{background:linear-gradient(135deg,#e3c46c,var(--accent-strong));color:#1c1408}.form{display:flex;flex-direction:column;gap:14px}.field{display:flex;flex-direction:column;gap:6px;font-size:.85rem;color:var(--text-dim)}.field input,.field select{background:var(--bg-elevated);border:1px solid rgba(205,163,73,.25);color:var(--text);padding:10px 12px;border-radius:var(--radius-sm);font-size:1rem}.field input:focus,.field select:focus{outline:none;border-color:var(--accent)}.room-code-input{text-transform:uppercase;letter-spacing:4px;text-align:center;font-weight:700;font-family:var(--font-display)}.avatar-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}.avatar-choice{display:flex;align-items:center;justify-content:center;padding:10px 4px;border-radius:var(--radius-sm);border:2px solid transparent;background:var(--bg-elevated)}.avatar-choice.selected{border-color:var(--accent)}.pawn3d{position:relative;display:inline-block}.pawn3d-head{position:absolute;left:50%;top:0;transform:translate(-50%);width:52%;height:46%;border-radius:50%;background:radial-gradient(circle at 32% 28%,color-mix(in srgb,var(--pawn-color) 40%,white),var(--pawn-color) 58%,color-mix(in srgb,var(--pawn-color) 75%,black) 100%);box-shadow:inset -2px -2px 3px #00000059,inset 1px 1px 2px #ffffff80}.pawn3d-body{position:absolute;left:50%;bottom:10%;transform:translate(-50%);width:78%;height:56%;border-radius:40% 40% 50% 50%/55% 55% 45% 45%;background:radial-gradient(circle at 32% 20%,color-mix(in srgb,var(--pawn-color) 35%,white),var(--pawn-color) 55%,color-mix(in srgb,var(--pawn-color) 78%,black) 100%);box-shadow:inset -3px -3px 5px #00000059,inset 2px 2px 3px #ffffff59}.pawn3d-shadow{position:absolute;left:50%;bottom:-6%;transform:translate(-50%);width:74%;height:16%;border-radius:50%;background:radial-gradient(ellipse,rgba(0,0,0,.5),transparent 70%)}.error-text{color:var(--danger);font-size:.85rem;margin:0}.btn-primary,.btn-secondary{border:none;border-radius:var(--radius-sm);padding:12px 16px;font-weight:700;font-size:1rem}.btn-primary{background:linear-gradient(135deg,#e9c869,var(--accent) 55%,var(--accent-strong));color:#1c1408;box-shadow:0 4px 14px #cda34959}.btn-primary:disabled{opacity:.4;cursor:not-allowed;box-shadow:none}.btn-primary.big{padding:16px;font-size:1.1rem;width:100%}.btn-primary.small{padding:6px 10px;font-size:.8rem}.btn-secondary{background:var(--bg-elevated);color:var(--text);border:1px solid rgba(205,163,73,.3)}.btn-secondary.small{padding:6px 10px;font-size:.8rem}.room-code-display{display:flex;flex-direction:column;align-items:center;gap:4px;background:var(--bg-elevated);border:1px solid rgba(205,163,73,.3);border-radius:var(--radius-sm);padding:14px;margin-bottom:16px}.room-code-display strong{font-size:1.8rem;letter-spacing:6px;font-family:var(--font-display);color:var(--accent)}.lobby-players{list-style:none;margin:0 0 16px;padding:0;display:flex;flex-direction:column;gap:8px}.lobby-player{display:flex;align-items:center;gap:10px;background:var(--bg-elevated);border:1px solid rgba(205,163,73,.15);padding:8px 12px;border-radius:var(--radius-sm)}.lobby-player.empty{opacity:.4}.lobby-avatar{font-size:1.4rem}.lobby-name{flex:1}.lobby-host-badge{font-size:.7rem;background:var(--warning);color:#1c1408;padding:2px 8px;border-radius:10px;font-weight:700}.lobby-settings{display:flex;justify-content:space-between;color:var(--text-dim);font-size:.85rem;margin-bottom:16px}.hint-text{color:var(--text-dim);font-size:.85rem}.hint-text.small{font-size:.75rem}.game-shell{padding:8px;gap:8px}.game-header{display:flex;align-items:center;justify-content:space-between}.icon-btn{background:var(--bg-elevated);border:1px solid rgba(205,163,73,.25);color:var(--text);width:36px;height:36px;border-radius:50%}.icon-btn.placeholder{visibility:hidden}.turn-timer{min-width:36px;height:36px;display:flex;align-items:center;justify-content:center;border:1px solid rgba(205,163,73,.25);border-radius:50%;font-size:.8rem;font-weight:700;color:var(--text-dim)}.turn-timer-urgent{color:var(--danger);border-color:var(--danger)}.game-header-center{text-align:center;font-size:.85rem;color:var(--text-dim)}.objective-amount{color:var(--networth);font-weight:700;font-family:var(--font-display)}.round-label{font-size:.7rem}.afk-banner,.error-banner{background:var(--warning);color:#1c1408;font-weight:600;padding:6px 10px;border-radius:var(--radius-sm);font-size:.8rem;text-align:center}.error-banner{background:var(--danger);color:#fff}.player-row{display:flex;justify-content:space-around;gap:8px}.player-badge{display:flex;align-items:center;gap:8px;background:linear-gradient(165deg,var(--bg-elevated),var(--bg-panel));padding:6px 10px;border-radius:20px;border:2px solid rgba(205,163,73,.15);flex:1;max-width:48%}.player-badge.active{border-color:var(--accent);box-shadow:0 0 14px #cda3498c}.player-badge.eliminated{opacity:.35}.player-avatar-wrap{position:relative}.standings-row{display:inline-flex;align-items:center;gap:6px}.disconnect-dot,.jail-dot{position:absolute;bottom:-4px;right:-4px;font-size:.7rem}.player-info{display:flex;flex-direction:column;min-width:0}.player-name{font-size:.75rem;color:var(--text-dim);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.player-me-tag{color:var(--accent);font-weight:700}.player-cash{color:var(--cash);font-weight:700;font-size:.85rem}.player-networth{color:var(--networth);font-weight:600}.turn-indicator{width:8px;height:8px;border-radius:50%;background:var(--accent)}.board{position:relative;display:grid;gap:2px;background:linear-gradient(155deg,#171310,#0c0a08);border-radius:var(--radius);border:1px solid rgba(205,163,73,.35);box-shadow:0 0 0 6px #0c0a08,inset 0 0 24px #0009,0 18px 40px #0000008c;padding:2px;aspect-ratio:1;width:100%;min-height:0}.tile{position:relative;background:linear-gradient(165deg,var(--bg-elevated),var(--bg-panel));border:1px solid rgba(205,163,73,.12);border-radius:4px;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:2px;font-size:clamp(6.5px,1.9vw,11px);line-height:1.15;overflow:hidden;text-align:center;font-family:Inter,Segoe UI,system-ui,sans-serif}.tile-blank{background:#17171c}.tile-price{font-weight:800;color:var(--accent);font-size:1em}.tile-rent{font-weight:800;color:#7fbf6a;font-size:1em}.tile-tax{background:linear-gradient(165deg,#241d14,#171209)}.tile-tax-amount{font-weight:800;color:#d99a4e;font-size:.9em}.tile-tax-heist{color:#f0c869;font-size:1em;text-shadow:0 0 6px rgba(240,200,105,.5)}.tile-name{font-weight:700;line-height:1.15;letter-spacing:.1px;color:var(--text)}.tile-type-icon{font-size:clamp(10px,2.3vw,16px)}.tile-start{background:linear-gradient(165deg,#1c2b20,#131c16)}.tile-prison{background:linear-gradient(165deg,#2a1f1c,#1a1413)}.tile-trade{background:linear-gradient(165deg,#221f2c,#16141c)}.tile-chance{background:linear-gradient(165deg,#292415,#1a170e)}.tile.owned{outline:2px solid var(--owner-color, var(--accent));outline-offset:-2px}.tile-owner-dot{position:absolute;top:2px;right:2px;font-size:clamp(8px,1.6vw,12px)}.tile-buildings{position:absolute;bottom:1px;left:50%;transform:translate(-50%)}.tile-smoke{position:relative;width:22px;height:22px;pointer-events:none}.tile-smoke-puff{position:absolute;bottom:0;width:11px;height:11px;margin-left:-5.5px;border-radius:50%;background:radial-gradient(circle,rgba(255,255,255,.95),rgba(190,190,190,.55) 55%,transparent 75%);animation:tile-smoke-puff .85s ease-out forwards}.tile-smoke-puff:nth-child(1){left:50%;animation-delay:0ms}.tile-smoke-puff:nth-child(2){left:34%;animation-delay:.1s}.tile-smoke-puff:nth-child(3){left:66%;animation-delay:.18s}@keyframes tile-smoke-puff{0%{transform:scale(.4) translateY(0);opacity:.9}60%{opacity:.75}to{transform:scale(2.2) translateY(-16px);opacity:0}}.player-tokens-layer{position:absolute;top:2px;right:2px;bottom:2px;left:2px;pointer-events:none;z-index:5}.player-token{position:absolute;transform:translate(-50%,-50%);font-size:clamp(11px,2.6vw,18px);transition:left var(--hop-duration, .2s) ease-in-out,top var(--hop-duration, .2s) ease-in-out;filter:drop-shadow(0 1px 2px rgba(0,0,0,.6))}.player-token.hopping{animation:pawn-hop var(--hop-duration, .2s) ease-in-out infinite}@keyframes pawn-hop{0%,to{transform:translate(-50%,-50%) translateY(0) scale(1)}40%{transform:translate(-50%,-50%) translateY(-11px) scale(1.06,.94)}70%{transform:translate(-50%,-50%) translateY(0) scale(.94,1.08)}}.board-center{position:relative;display:flex;align-items:center;justify-content:center;padding:8px;border-radius:10px;overflow:hidden;background-image:url(/board-center-bg.png);background-size:195%;background-position:center;background-repeat:no-repeat;box-shadow:inset 0 0 46px 12px #000000b8}.center-card{background:linear-gradient(160deg,#f6efd9,#e7d8b2);color:#2b2013;border-radius:var(--radius);border:1px solid #b98f3e;width:100%;max-width:260px;overflow:hidden;box-shadow:0 16px 34px #0000008c,inset 0 0 0 1px #ffffff59;text-align:center;max-height:min(70vh,420px);display:flex;flex-direction:column}.center-card h3{font-family:var(--font-display);margin:2px 0}.center-card .hint-text{color:#6b5a3a}.center-card .price-label{color:#8a7444}.center-card .event-message{color:#4a3c22;font-weight:600}.center-card .btn-secondary{background:#0000000d;color:#3b2f1c;border:1px solid #b98f3e}.center-card .btn-primary{box-shadow:0 3px 10px #00000040}.center-card-header{padding:10px;font-weight:700;font-family:var(--font-display);color:#fff;background:var(--accent);text-shadow:0 1px 2px rgba(0,0,0,.3)}.city-banner{display:block;width:100%;height:72px}.city-banner-photo{width:100%;height:72px;overflow:hidden}.city-banner-photo img{width:100%;height:100%;object-fit:cover;display:block}.chance-header{background:var(--warning);color:#000}.jail-header{background:var(--danger)}.center-card-body{padding:12px;display:flex;flex-direction:column;gap:10px;overflow-y:auto;min-height:0}.price-row{display:flex;justify-content:space-between;gap:8px;font-size:.75rem}.price-row>div{display:flex;flex-direction:column;gap:2px}.price-label{color:var(--text-dim);font-size:.7rem}.card-actions{display:flex;gap:8px}.card-actions>*{flex:1}.building-levels{display:flex;justify-content:center;align-items:flex-end;gap:10px;margin:4px 0}.building-slot{display:flex;flex-direction:column;align-items:center;gap:4px;opacity:.35}.building-slot.filled{opacity:1}.building-slot-label{font-size:.6rem;color:#8a7444}.trade-property-list{display:flex;flex-direction:column;gap:6px}.trade-property-btn{background:#0000000d;color:#2b2013;border:1px solid #b98f3e;border-radius:var(--radius-sm);padding:8px;font-weight:600}.trade-proposal-list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:6px}.trade-proposal-list li{display:flex;justify-content:space-between;align-items:center;background:#0000000d;color:#2b2013;padding:6px 10px;border-radius:var(--radius-sm);font-size:.8rem}.dice-overlay{animation:dice-card-pop .25s ease-out}@keyframes dice-card-pop{0%{transform:scale(.85);opacity:0}to{transform:scale(1);opacity:1}}.die-3d-scene{width:60px;height:60px;margin:10px auto;perspective:400px}.die-3d-cube{position:relative;width:56px;height:56px;margin:2px;transform-style:preserve-3d;transition:transform .65s cubic-bezier(.22,.8,.24,1)}.die-3d-cube.tumbling{animation:die-tumble .5s linear infinite;transition:none}@keyframes die-tumble{0%{transform:rotateX(0) rotateY(0)}to{transform:rotateX(360deg) rotateY(360deg)}}.die-face{position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(155deg,#fffdf6,#f0e6cc);border-radius:9px;box-shadow:inset 0 0 0 1px #b48c3c66,0 2px 6px #00000059}.die-face.front{transform:translateZ(28px)}.die-face.back{transform:rotateY(180deg) translateZ(28px)}.die-face.right{transform:rotateY(90deg) translateZ(28px)}.die-face.left{transform:rotateY(-90deg) translateZ(28px)}.die-face.top{transform:rotateX(90deg) translateZ(28px)}.die-face.bottom{transform:rotateX(-90deg) translateZ(28px)}.die-face-grid{width:100%;height:100%;display:grid;grid-template-columns:repeat(3,1fr);grid-template-rows:repeat(3,1fr);padding:9px;box-sizing:border-box}.pip{display:flex;align-items:center;justify-content:center}.pip.on:after{content:"";width:68%;height:68%;border-radius:50%;background:#1c1c22;box-shadow:inset 0 1px 1px #ffffff26}.event-message{font-size:.8rem;color:var(--text-dim)}.monopoly-banner{font-weight:700;font-size:.85rem;color:#1c1408;background:linear-gradient(135deg,#f3d883,#cda349 60%,#a97c2f);border-radius:var(--radius-sm);padding:8px 10px;box-shadow:0 4px 14px #cda34980;animation:monopoly-pop .35s ease-out}@keyframes monopoly-pop{0%{transform:scale(.8);opacity:0}60%{transform:scale(1.05);opacity:1}to{transform:scale(1)}}.turn-status-card{padding:14px}.preroll-build-list{display:flex;gap:8px;overflow-x:auto;padding:2px;margin:2px 0}.preroll-build-chip{flex:0 0 auto;display:flex;flex-direction:column;align-items:center;gap:2px;background:#0000000d;border:1px solid #b98f3e;border-radius:var(--radius-sm);padding:6px 8px;min-width:64px}.preroll-build-chip:disabled{opacity:.4;cursor:not-allowed}.preroll-build-name{font-size:.65rem;font-weight:700;color:#2b2013}.preroll-build-price{font-size:.6rem;color:#8a7444}.action-bar{display:flex;justify-content:center;padding:6px 0}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0009;display:flex;align-items:center;justify-content:center;padding:20px;z-index:50}.modal-overlay.light{background:#00000073}.sell-panel{max-width:360px}.tile-detail-card{max-width:300px}.tile-detail-owner{display:flex;align-items:center;justify-content:center;gap:8px;font-size:.8rem;color:#3b2f1c}.sell-list{list-style:none;margin:0 0 12px;padding:0;display:flex;flex-direction:column;gap:8px}.sell-list li{display:flex;justify-content:space-between;align-items:center;background:var(--bg-elevated);border:1px solid rgba(205,163,73,.15);padding:8px 12px;border-radius:var(--radius-sm)}.rent-header{background:var(--danger)}.rent-tile-name{font-weight:700;font-family:var(--font-display)}.rent-flow{display:flex;align-items:center;justify-content:center;gap:10px}.rent-player{display:flex;flex-direction:column;align-items:center;gap:2px;flex:1}.rent-avatar{font-size:1.6rem}.rent-name{font-size:.75rem;color:#6b5a3a}.rent-amount{font-weight:800;font-size:.95rem}.rent-amount.negative{color:var(--danger)}.rent-amount.positive{color:var(--networth)}.rent-arrow{font-size:1.3rem;color:#8a7444}.game-over-card{max-width:380px;text-align:center}.game-over-card h1{font-family:var(--font-display);color:var(--accent)}.winner-text{font-size:1.1rem;margin:10px 0 16px}.standings-list{list-style:none;padding:0;margin:0 0 20px;display:flex;flex-direction:column;gap:8px}.standings-list li{display:flex;justify-content:space-between;background:var(--bg-elevated);border:1px solid rgba(205,163,73,.15);padding:8px 12px;border-radius:var(--radius-sm)}@media (min-width: 640px){.app-shell.game-shell{max-width:820px}.tile{font-size:clamp(8px,1.4vw,13px)}}
