/* Distrito Mafioso: midnight Bogotá, brass and warm paper. */
:root{--purple:#b69658;--text:#eee6d5;--muted:#a6a397}body{background:#151c22;color:#eee6d5;background-image:radial-gradient(ellipse at 50% 10%,#28343c 0,transparent 65%)}.topbar{background:#151c22ed;border-bottom:1px solid #b99a5933}.brand,.nav-link.active,.page-heading h1,.section-heading h2,.turn-info h2,.player-name{color:#eee6d5}.brand-name small,.page-heading h1 span{color:#d5b875}.panel,.turn-bar{background:#202930;border-color:#b6a88326;box-shadow:0 14px 35px #0002}.button-primary{background:#cfad64;color:#171e23}.button-white{background:#303941;color:#eee6d5;border:1px solid #d5b87533}.player{background:#182128}.player.active{background:#383829;border-color:#aa935d}.player-balance,.wallet-total,.price-grid strong{color:#e6d5ae}.topbar .nav-link,.page-heading p,.board-note,.player-status,.table-foot,.property-desc,.activity-item p{color:#b8b7ad}.board-viewport{background:radial-gradient(ellipse,#364847,#18252d 72%);border-radius:22px}.board-base{background:#101b21}.board-caption{color:#d8c695}.tile{color:#30343a}.inner-city{background:#819587}.city-title b{color:#253e37}.property-panel{overflow:hidden}.modal{background:#f8f5ed;color:#302d37}.modal h2,.modal h3{color:#302d37}.modal .button-white{background:#eee8db;color:#554a34}.modal .eyebrow{color:#877348}.modal select{width:100%;min-height:44px;margin:8px 0 16px;padding:10px;border:1px solid #dcd3bf;background:white;color:#3c3446;border-radius:9px;font-size:16px}.modal input[type=number]{width:100%;box-sizing:border-box}.modal .button{margin-top:9px}.modal .photo-credit{color:#82788e}.property-panel>.section-heading{padding-bottom:12px}.property-panel .property-title{color:#e8d7b3}.property-panel .ownership-label b{color:#cbb684}.invite-card{background:#394132;color:#e6d4ab}.play-navigation{position:fixed;bottom:0;left:0;right:0;height:58px;padding-bottom:env(safe-area-inset-bottom);display:flex;justify-content:center;gap:8px;z-index:70;background:#111a20f5;border-top:1px solid #b7a07344;backdrop-filter:blur(12px)}.play-navigation button{padding:12px 22px;background:transparent;color:#d8cba9;font-weight:600;font-size:12px;min-height:44px}.play-navigation button:hover{background:#cfad6422}.shell{padding-bottom:100px}.game-clock{font-size:10px;color:#d6bd83;white-space:nowrap;margin-left:8px}.reaction-bar{display:flex;gap:8px;align-items:center;justify-content:center;margin:15px 0}.reaction-bar span{font-size:10px;color:#b9b8ac}.reaction-bar button{height:40px;width:40px;background:#2d383c;border-radius:50%;font-size:19px;transition:transform .15s}.reaction-bar button:hover{transform:translateY(-4px)}.auction-photo{display:block;width:100%;height:180px;object-fit:cover;border-radius:13px}.trade-columns{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:12px}.trade-tile,.setting{display:flex!important;gap:8px;align-items:center;letter-spacing:0!important;font-size:12px!important;line-height:1.5;padding:10px 0;text-transform:none}.modal .trade-tile input,.modal .setting input{width:20px;height:20px;margin:0;flex-shrink:0}.trade-offer{padding:15px;background:#ede5d4;border:1px solid #cdbb92;border-radius:12px;margin-bottom:20px}.room-readiness{display:flex;flex-wrap:wrap;gap:8px;margin:15px 0}.room-readiness span{background:#ebe4d4;padding:7px;border-radius:7px;font-size:11px}.result-row{display:flex;justify-content:space-between;padding:15px 0;border-bottom:1px solid #e3dac7;font-size:14px}.result-row span{color:#91763b}#invite-qr{display:grid;place-items:center;background:white;padding:16px;margin:15px auto;width:max-content;max-width:100%}#invite-qr img{max-width:100%}.lobby-options{margin:18px 0}.deed-tabs{background:#eae3d5}.deed-tabs button{color:#756442}.deed-tabs [aria-pressed=true]{color:#5b4927}.deed-navigation button{background:#e9e1d1;color:#6a5733}.reduced-motion *{animation:none!important;transition:none!important;scroll-behavior:auto!important}
@media(max-width:740px){.play-navigation{height:52px;gap:0}.play-navigation button{padding:9px 14px;font-size:11px}.turn-bar{bottom:calc(52px + env(safe-area-inset-bottom));background:#1b262e;z-index:65}.shell{padding-bottom:190px}.topbar .brand-name{font-size:18px}.brand-name small{font-size:10px;letter-spacing:2px}.topbar nav{display:none}.game-clock{font-size:8px}.board-toolbar{flex-wrap:wrap;gap:6px}.board-viewport{border-radius:15px}.modal{padding-bottom:24px}.trade-columns{grid-template-columns:1fr}.toast{bottom:165px}.modal-backdrop{z-index:110}.auction-photo{height:145px}.reaction-bar{margin:8px 0 20px}.reaction-bar span{display:none}.reaction-bar button{height:44px;width:44px}.page-heading h1{font-size:24px}.property-panel .property-desc{color:#b8b7ad}}

[hidden]{display:none!important}

.deed-card{touch-action:pan-y}.token[data-emblem]::after{content:attr(data-emblem);position:absolute;color:#fff9e7;font-size:11px;left:2px;top:-3px;text-shadow:0 1px 2px #000;pointer-events:none}
/* A mobile game table occupies the viewport; information lives in sheets. */
@media(max-width:740px){
 html,body{height:100%;height:100dvh;overflow:hidden;overscroll-behavior:none}
 body{display:flex;flex-direction:column}.topbar{height:48px;min-height:48px;padding:0 14px;flex-shrink:0}.topbar .icon-btn,.topbar .avatar{width:40px;height:40px}
 .shell{width:100%;max-width:none;flex:1;min-height:0;padding:8px 10px calc(64px + env(safe-area-inset-bottom));display:flex;flex-direction:column;box-sizing:border-box;overflow:hidden}
 .page-heading,.shell>footer,.right-column,.wallet-panel,.invite-card,.board-note,.reaction-bar{display:none!important}
 .game-layout{display:flex;flex-direction:column;flex:1;min-height:0;gap:8px}.left-column{display:block;flex:none}.players-panel{padding:0;background:none;border:0;box-shadow:none}.players-panel .section-heading,.table-foot{display:none}.players{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:5px;padding:0}.player{min-height:52px;height:52px;display:grid;grid-template-columns:20px 1fr;padding:5px;gap:3px;align-items:center;border:1px solid #44514f;border-radius:10px}.player-avatar{width:20px;height:20px;font-size:12px;grid-row:1/3}.player>div:nth-child(2){min-width:0}.player-name{font-size:8px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.player-status,.you-tag,.player-indicator{display:none!important}.player-balance{font-size:10px;grid-column:2}.player.active{border-color:#d5b875;box-shadow:inset 0 0 0 1px #d5b87533}
 .board-column{flex:1;min-height:0;display:flex;flex-direction:column;gap:6px}.board-toolbar{height:24px;min-height:24px;padding:0 3px;flex-wrap:nowrap;gap:5px;overflow:hidden}.board-toolbar>span:first-child{font-size:7px;max-width:42%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.camera-button{font-size:0;padding:0;width:30px;min-height:24px}.camera-button span{font-size:18px}.game-clock{margin-left:auto;font-size:9px}
 .board-viewport{flex:1;min-height:0;height:auto!important;width:100%;overflow:hidden;margin:0;--board-size:240px}.board-world{top:48%;left:50%}.board-caption{display:none}.view-controls{bottom:8px;right:8px}.view-controls button{min-width:30px;min-height:30px}.view-controls button:first-child,.view-controls button:nth-of-type(2),#zoom-label{display:none}
 .turn-bar{position:relative;bottom:auto;left:auto;right:auto;flex:none;width:100%;min-height:100px;height:100px;padding:10px 12px;display:flex;flex-direction:column;align-items:stretch;gap:6px;border:1px solid #5a5a40;border-radius:16px;box-sizing:border-box;z-index:2}.turn-info{display:flex;gap:7px}.turn-info .turn-pawn{display:none}.turn-info .eyebrow{font-size:8px}.turn-info h2{font-size:11px;max-width:none;margin:2px 0;line-height:1.25;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.turn-info p{display:none!important}.dice-actions{display:flex;justify-content:space-between;gap:10px}.dice-actions .button{flex:1;min-height:44px;padding:10px;min-width:0;font-size:12px}.die{height:30px;width:30px;padding:5px}.dice-pair{gap:5px}.turn-bar .dice-actions{margin:0}
 .play-navigation{height:58px;box-sizing:content-box;padding:0 8px env(safe-area-inset-bottom);justify-content:space-around;align-items:center;gap:3px}.play-navigation button{flex:1;min-width:0;min-height:50px;padding:4px;color:#aeb6b4;font-size:9px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;border-radius:12px}.play-navigation .dock-icon{font-size:22px;line-height:1}.play-navigation .cards-dock{background:#cdb276;color:#17242a;flex:1.25;position:relative}.cards-badge{position:absolute;top:1px;right:12px;background:#1f3034;color:#f3e3bf;border-radius:10px;min-width:17px;padding:2px;font-size:9px}.play-navigation button[aria-current=page]{box-shadow:inset 0 0 0 1px #cdb27666;color:#ead6ac}.play-navigation .cards-dock[aria-current=page]{color:#17242a}
 .my-turn .turn-bar{border-color:#d4b776;background:linear-gradient(110deg,#343a2c,#1b292d);box-shadow:0 0 20px #cfad641c}.my-turn #roll-btn:not(:disabled){box-shadow:0 0 0 2px #d5b87522}.my-turn .board-viewport{border:1px solid #cbb06b66}
 .presence-banner{flex:none;font-size:9px;padding:6px 9px;margin:0 0 5px;max-height:50px;overflow:hidden}.presence-banner button{padding:5px;min-height:32px}.toast{bottom:calc(180px + env(safe-area-inset-bottom))}
 .modal-backdrop{align-items:flex-end;padding:8px;overscroll-behavior:contain}.modal{width:100%;max-height:calc(100dvh - 16px);border-radius:22px;padding:28px 18px 18px;overscroll-behavior:contain;scrollbar-width:thin}.modal-close{position:sticky;float:right;top:0;margin:-20px -8px -20px 0;z-index:5;background:#ece6d9;color:#443d30}
 .modal [data-kind=deed] h2{font-size:22px;margin:8px 0}.deed-tabs{margin:10px 0}.deed-hero{height:clamp(90px,18dvh,155px)}.deed-body{padding:12px}.deed-body p{font-size:11px!important;margin:7px 0!important}.deed-stats{padding-top:8px}.deed-stats b{font-size:21px}.deed-owner{margin-bottom:0!important;padding:7px}.deed-navigation{margin-top:8px}.deed-actions{margin-top:8px;gap:3px}.deed-actions .button{margin-top:3px}.deed-navigation button{min-height:44px}.mobile-card-summary{display:flex;justify-content:space-between;color:#857349;font-size:11px;margin-bottom:10px}.deed-credit-details{font-size:10px;margin-top:8px}.deed-credit-details summary{cursor:pointer;min-height:24px;color:#82704e}.deed-credit-details .photo-credit{margin:5px 0}.investment-row{padding-top:9px;padding-bottom:9px}
}
@media(max-width:740px) and (max-height:650px){.topbar{height:44px;min-height:44px}.shell{padding-top:4px}.game-layout{gap:4px}.player{height:44px;min-height:44px}.board-column{gap:4px}.board-toolbar{height:20px;min-height:20px}.turn-bar{height:90px;min-height:90px;padding:7px 10px}.turn-info h2{font-size:10px}.deed-body p{line-height:1.3!important}.deed-hero{height:85px}.deed-tabs button{min-height:38px}.modal [data-kind=deed] h2{font-size:19px}.deed-card .deed-owner{display:none}.deed-stats b{font-size:18px}.deed-body .eyebrow{font-size:8px}}

@media(max-width:740px){.mobile-card-summary{padding-right:54px;gap:8px;font-size:10px}.modal [data-kind=deed]>.eyebrow{padding-right:34px;font-size:8px;letter-spacing:1px}}
.character-grid{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:7px;margin:10px 0}.character-option{display:flex;flex-direction:column;align-items:center;padding:6px 2px;border:2px solid transparent;border-radius:12px;background:#eee8db;color:#39352d;min-height:82px}.character-option img{width:48px;height:48px}.character-option span{font-size:9px;line-height:1.2;margin-top:4px}.character-option[aria-pressed=true]{border-color:#a1803c;background:#e6d5ac;box-shadow:0 0 0 2px #cfad6422}.character-picker{margin:18px 0}.character-picker small{display:block;font-size:10px;color:#827349}.character-avatar{width:100%;height:100%;object-fit:contain}.token.character-token{width:30px;height:38px;margin:-20px 0 0 -15px;scale:1;filter:drop-shadow(2px 5px 2px #0008)}.token.character-token:before{display:none}.token.character-token:after{content:''!important;width:27px;height:8px;left:1px;top:30px;background:var(--token-color);border:2px solid #fff;border-radius:50%;z-index:0}.token.character-token img{width:32px;height:32px;position:relative;z-index:3;transform:rotateX(-18deg)}.token.character-token.is-active img{filter:drop-shadow(0 0 3px #fff)}
@media(max-width:380px){.character-grid{gap:3px}.character-option img{width:40px;height:40px}.character-option{min-height:75px}.character-option span{font-size:8px}}
/* Event decks and held cards */
.board-viewport{position:relative}.board-card-reveal{position:absolute;inset:0;z-index:40;display:grid;place-items:center;padding:16px;background:#101b21b8;backdrop-filter:blur(3px);cursor:pointer}.board-card-reveal-inner{width:min(360px,90%);filter:drop-shadow(0 16px 24px #0008)}.special-card{display:flex;flex-direction:column;justify-content:center;min-height:170px;padding:26px;border:7px double #9c763d;border-radius:16px;background:#f7e9c5;color:#3c2f28;text-align:center;box-sizing:border-box}.special-card-chance{border-color:#8b594e;background:#f9e5cd}.special-card-community{border-color:#55746b;background:#e8f0db}.special-card-deck{font-size:11px;font-weight:800;letter-spacing:2px;color:#7b6544}.special-card h3{font-family:Georgia,serif;font-size:23px;line-height:1.2;margin:16px 0 8px;color:#322d2a}.special-card p{font-size:15px;line-height:1.45;margin:0;color:#40382e}.board-card-dismiss{display:block;margin:10px auto 0;min-height:44px;padding:9px 22px;border-radius:11px;background:#d2ad66;color:#1b252b;font-weight:700}.held-cards,.card-catalog{margin:16px 0;padding:14px;background:#eee8d9;border:1px solid #dccdab;border-radius:14px}.held-cards>h3,.card-catalog>h3{margin:0 0 10px}.held-card{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px;background:#f8f3e8;border-radius:10px;margin:7px 0}.held-card strong,.held-card small{display:block}.held-card small,.special-card-note{color:#766e5f;font-size:12px}.held-card .button{margin:0;min-width:70px}.special-tabs{display:flex;gap:6px;margin:10px 0}.special-tabs button,.special-pager button{padding:10px;min-height:44px;border-radius:9px;background:#e1d7c2;color:#463e30;font-weight:700}.special-tabs button[aria-selected=true]{background:#b99756;color:#211e19}.card-catalog .special-card{min-height:190px}.special-pager{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:9px}.special-pager span{white-space:nowrap;font-weight:700;font-size:12px}.special-pager button:disabled{opacity:.45}.trade-columns h3{font-size:13px;margin:15px 0 4px}.trade-columns small{color:#867c6d}
@media(max-width:740px){.board-card-reveal{padding:8px}.board-card-reveal-inner{width:min(300px,90%)}.board-card-reveal .special-card{min-height:150px;padding:14px}.board-card-reveal .special-card h3{font-size:18px;margin:8px 0}.board-card-reveal .special-card p{font-size:12px}.card-catalog .special-card{min-height:155px;padding:15px}.card-catalog .special-card h3{font-size:19px;margin:8px 0}.card-catalog .special-card p{font-size:12px}.held-cards,.card-catalog{padding:10px;margin:9px 0}.special-tabs button{flex:1;font-size:12px}.special-pager button{font-size:11px}}
/* Event moods: motion follows the card, while text stays readable. */
.board-card-reveal{isolation:isolate;overflow:hidden}.board-card-reveal-inner{position:relative;z-index:2;animation:outcome-enter .55s ease-out both}.outcome-good{background:radial-gradient(ellipse at center,#426637d9,#091f22e8)}.outcome-bad{background:radial-gradient(ellipse at center,#653329df,#191c2aeb)}.outcome-route{background:radial-gradient(ellipse at center,#294c6fe0,#111e2be8)}.outcome-emblem{margin:0 auto 8px;width:60px;height:60px;border-radius:50%;display:grid;place-items:center;background:#edcd76;color:#243e31;font-size:42px;box-shadow:0 0 35px #f9d87588;animation:outcome-pop .7s ease-out both}.outcome-label{text-align:center;font-size:12px;font-weight:900;letter-spacing:2px;color:#fff0b7;margin-bottom:5px}.outcome-player{text-align:center;font-size:11px;color:#f6eedb;margin-bottom:12px}.outcome-good .special-card{border-color:#7e9f54;background:#f2f6df}.outcome-bad .special-card{border-color:#b86b51;background:#fce8d7;animation:outcome-shake .5s .15s both}.outcome-bad .outcome-emblem{background:#f3ac7c;color:#632d25;box-shadow:0 0 25px #e7794055}.outcome-route .outcome-emblem{background:#acdce2;color:#24455c;box-shadow:0 0 25px #7db6db55}.outcome-route .special-card{border-color:#638da1;background:#e8f4f5}.outcome-particles{position:absolute;inset:0;pointer-events:none;z-index:1}.outcome-particles i{position:absolute;left:var(--x);top:-30px;color:#f4d579;font-style:normal;font-size:18px;animation:outcome-rain 2.8s linear both;animation-delay:calc(var(--i)*45ms)}.outcome-bad .outcome-particles i{color:#9d7e77;font-size:13px}.outcome-route .outcome-particles i{color:#a5dce3;font-size:30px}.outcome-jail .outcome-particles{background:repeating-linear-gradient(90deg,transparent 0,transparent 42px,#a7adb32e 44px,#10182070 50px,transparent 53px);animation:outcome-bars .6s ease-out both}.outcome-fast *{animation-duration:.4s!important;animation-delay:0s!important}.outcome-still *,.reduced-motion .board-card-reveal *{animation:none!important}.outcome-still .outcome-particles{display:none}
@keyframes outcome-enter{from{opacity:0;transform:translateY(28px) scale(.9)}to{opacity:1;transform:none}}
@keyframes outcome-pop{0%{transform:scale(.2) rotate(-25deg)}65%{transform:scale(1.15) rotate(8deg)}100%{transform:scale(1) rotate(0)}}
@keyframes outcome-shake{0%,100%{transform:translateX(0)}25%{transform:translateX(-7px) rotate(-1deg)}50%{transform:translateX(6px) rotate(1deg)}75%{transform:translateX(-3px)}}
@keyframes outcome-rain{0%{opacity:0;transform:translateY(0) rotate(0)}10%{opacity:1}90%{opacity:.8}100%{opacity:0;transform:translate(var(--drift),600px) rotate(240deg)}}
@keyframes outcome-bars{from{transform:translateY(-100%)}to{transform:translateY(0)}}
@media(max-height:650px){.outcome-emblem{width:35px;height:35px;font-size:26px;margin-bottom:4px}.outcome-label{font-size:9px}.outcome-player{margin-bottom:5px}.board-card-reveal .special-card{min-height:100px;padding:9px}.board-card-dismiss{margin-top:5px}}
@media(prefers-reduced-motion:reduce){.board-card-reveal *{animation:none!important}.outcome-particles{display:none}}
/* Center the card itself on the physical board, rather than its surrounding notices. */
.board-card-reveal .board-card-reveal-inner{position:absolute;left:50%;top:50%;width:min(300px,82%);transform:translate(-50%,-50%);animation:card-center-enter .4s ease-out both}.board-card-reveal .outcome-heading{position:absolute;bottom:100%;left:0;right:0;padding-bottom:10px}.board-card-reveal .outcome-emblem{width:42px;height:42px;font-size:29px;margin-bottom:6px}.board-card-reveal .outcome-player{margin-bottom:0}.board-card-reveal .board-card-dismiss{position:absolute;top:100%;left:50%;transform:translateX(-50%);white-space:nowrap}.board-card-reveal{backdrop-filter:blur(1px)}
@keyframes card-center-enter{from{opacity:0;transform:translate(-50%,-50%) scale(.78)}to{opacity:1;transform:translate(-50%,-50%) scale(1)}}
@media(max-height:650px){.board-card-reveal .outcome-emblem{display:none}.board-card-reveal .outcome-heading{padding-bottom:6px}.board-card-reveal .outcome-player{display:none}.board-card-reveal .special-card{min-height:95px}.board-card-reveal .board-card-dismiss{min-height:36px;padding:6px 16px}}
#voice-toggle{color:#cbb16b;font-size:20px}.voice-connected{background:#315e45!important;color:#ddf8d8!important;border-radius:50%}.voice-people{display:flex;flex-wrap:wrap;gap:8px;margin:12px 0}.voice-people span{padding:8px;border-radius:9px;background:#e9e3d6;font-size:12px}.voice-people .voice-speaking{background:#c4e5bf;box-shadow:0 0 0 2px #72996a}

.bot-chooser{min-width:0;margin:18px 0;padding:16px;border:1px solid #d5c6a6;border-radius:12px;background:#f0eadc}.bot-chooser legend{padding:0 6px;font-weight:700;font-size:15px}.bot-chooser p{font-size:13px;line-height:1.5}.bot-chooser .bot-hint{margin-bottom:0}.modal .bot-chooser select{box-sizing:border-box}.bot-tag{display:inline-block;border:1px solid #b6965866;border-radius:4px;padding:2px 4px;color:#d5b875;font-size:9px;vertical-align:middle}.room-readiness span,.room-person{overflow-wrap:anywhere}.lobby-options,.trade-columns>div{min-width:0}

.modal .trade-columns select{min-width:0;box-sizing:border-box}.bot-chooser .button{white-space:normal;max-width:100%}
