/* Clear touch targets over the living town; room actions stay in their venue. */
.town-art-host,.town-3d-canvas,.town-fallback{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}
.town-art-host{z-index:0;overflow:hidden;background:#c8a573}
.town-fallback{display:block!important;object-fit:cover}
.town-3d-canvas{display:block;opacity:0}
.town-art-host[data-mode="3d"] .town-3d-canvas{opacity:1}
.town-art-host[data-mode="3d"] .town-fallback{visibility:hidden}
.map-app .town-scene .town-map .town-map-vignette{background:linear-gradient(#28160a18,transparent 25%,transparent 75%,#41291820);pointer-events:none}
.map-app .town-scene .town-map .town-hotspot{z-index:8;max-width:190px;min-height:52px;width:auto;filter:none;transform:translate(-50%,-50%)}

.map-app .town-scene .town-map .hotspot-label{position:relative;display:grid;grid-template-columns:24px minmax(0,1fr);gap:2px 8px;align-items:center;padding:11px 14px;min-height:50px;border:1px solid #f5e3b297;border-top:3px solid var(--place-color,#cfb174);border-radius:12px;background:#362112f0;color:#fff3dc;box-shadow:0 5px 14px #2f180844;text-shadow:none;white-space:normal;text-align:left;min-width:124px;max-width:182px}

.map-app .town-scene .town-map .hotspot-label>.icon{grid-row:1/3;width:23px;height:23px;color:var(--place-color,#cfb174)}

.map-app .town-scene .town-map .hotspot-label>b{font:700 13px/1.25 var(--font);color:#fff1d6}

.map-app .town-scene .town-map .hotspot-label>small{display:block;font-size:11px;line-height:1.3;color:#f2dcb6;grid-column:2;white-space:normal}

.map-app .town-scene .town-map .hotspot-label>small:empty{display:none}
.map-app .town-scene .town-map .hotspot-marker{display:block;width:8px;height:8px;background:#f5ddb0;border:2px solid #514839;box-shadow:0 2px 5px #0005;margin:5px auto 0}
.map-app .town-scene .town-map .map-online-entry .hotspot-label{background:#173b36f5;border-color:#7fd9c9;min-width:172px}
.map-app .town-scene .town-map .map-play-entry .hotspot-label{background:#3b2b20f5}
.town-hotspot:focus-visible .hotspot-label,.town-hotspot:hover .hotspot-label{outline:3px solid #fff1b9;outline-offset:3px;box-shadow:0 6px 18px #2f180877}
.map-app .town-scene .town-map .training-points{top:-10px;right:-7px;min-width:26px;height:26px;background:#f1cf8d;color:#2f2920;border:2px solid #5c3c22;font-size:11px;line-height:22px}
.town-district{position:absolute;font-size:11px;letter-spacing:.16em;font-weight:800;color:#603a1ab3;text-shadow:0 1px #e4debb80;pointer-events:none;transform:translateX(-50%)}
.district-north{left:50%;top:5%}.district-market{left:52%;top:58%}.district-south{left:52%;top:91%}
.town-walker{z-index:6!important;pointer-events:none}
.map-gesture-hint{color:#fff2d6!important;background:#4e2d12c9!important;border:1px solid #d7b6824d;border-radius:20px;padding:7px 12px!important;font-size:11.5px!important;max-width:calc(100% - 28px);text-shadow:none!important}
.mobile-app .game-menu>summary,.town-rankings>summary{background:#422611de!important;border:1px solid #e6d4a479!important;border-radius:12px!important;text-shadow:none}
.scene-profile{text-shadow:0 1px 2px #211004,0 2px 8px #211004,0 0 18px #211004}
/* Keep the fixed room heading visually separate from scrolling content. */
.venue-screen:before{content:'';position:absolute;inset:0 0 auto;height:calc(var(--venue-top) + var(--venue-header) + 7px);background:linear-gradient(#24160cec,#24170ee8 88%,#24170e00);z-index:3;pointer-events:none}
.venue-heading{gap:12px}.venue-heading h1{font-size:19px;line-height:1.25}
.venue-back{background:#452813f5;border-color:#dfc595;min-width:90px;min-height:48px;font-size:13px;box-shadow:0 3px 9px #0003;text-shadow:none}
.venue-intro{height:148px;padding-bottom:14px}.venue-character{width:140px}.venue-greeting>p{font-size:12px;color:#fff2db}
.venue-content{--venue-muted:#dedbc9;--venue-surface:#392313f0;text-shadow:none;padding-top:10px}
.venue-content .panel{background:#392313ed;border-color:#c6a87c5e;box-shadow:0 5px 12px #1d0a002b}
.venue-content :is(.primary,.secondary,.combat-action,.movement-button,.add-button){min-height:48px;border-radius:10px}
.venue-content .primary{background:#efd094;color:#382416;font-weight:750;border:1px solid #ffdea2;box-shadow:0 3px 0 #795e33}
.venue-content .secondary{background:#553821;color:#fff1ce;border-color:#c8a674;font-weight:650}
.venue-content button:disabled{opacity:1;filter:none!important;box-shadow:none!important;background:#553d2b!important;color:#d2bb96!important;border-color:#836547!important;cursor:not-allowed}
.venue-content button:focus-visible,summary:focus-visible,select:focus-visible{outline:3px solid #ffe3a1;outline-offset:3px}
.venue-content button:not(:disabled):active{transform:translateY(1px)}
.venue-content .game-dropdown{min-height:60px;background:#432712f5!important;border-color:#c3a06e!important;border-radius:10px;padding:8px 33px 7px 12px}
.venue-content .game-dropdown>span{font-size:10px;color:#ead6b1}.venue-content .game-dropdown>select{font-size:13px;min-height:33px}
.shop-location-note{background:#39200eed;border-left:3px solid #ccb57a;border-radius:7px;padding:11px 13px;font-size:12px;line-height:1.6;color:#ede8d5;margin:0 0 14px}
.venue-content .item-card{background:#442814f0;padding:14px 11px;display:flex;flex-direction:column;min-width:0;border:1px solid #ac875980}
.venue-content .item-card.equipped{border:2px solid #e6ca86;padding:13px 10px}
.venue-content .item-card h2{font-size:14px;line-height:1.35;overflow-wrap:anywhere;margin:7px 0}
.venue-content .item-card>p{font-size:11px;line-height:1.5;color:#ebd7b3;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;margin-bottom:9px}
.venue-content .item-power{font-size:11px;line-height:1.5;color:#ffe4a5;margin-bottom:14px;flex:1}
.venue-content .item-card>.primary,.venue-content .item-card>.secondary{width:100%;font-size:12px;padding:10px 6px;margin-top:auto}
.venue-content .item-rarity{font-size:10px;color:#efdab5;gap:4px;flex-wrap:wrap}
.venue-content .shop-item-art{margin:10px 0 4px!important;height:117px;background:#68472950;border:1px solid #ad885977}
.venue-content .shop-item-art>.item-model{height:88px}.venue-content .item-details-link{min-height:44px;font-size:11px;color:#f5dca7;margin-top:5px}
.venue-content .weapon-filter{gap:7px;flex-wrap:wrap}.venue-content .weapon-filter>button{min-height:44px;padding:8px 12px;background:#492b14f2;color:#f9e2b9;border-color:#c09d6b77}
.venue-content .weapon-filter>button.selected{background:#e4c98f;color:#462710}
.venue-duels .venue-layout,.venue-trials .venue-layout,.venue-rankings .venue-layout{display:block;max-width:1000px}.venue-duels .venue-content,.venue-trials .venue-content,.venue-rankings .venue-content{padding-top:16px}
.venue-duels .venue-background{filter:saturate(.72) hue-rotate(13deg)}.venue-trials .venue-background{filter:saturate(.78) sepia(.22)}
.online-layout{display:block!important}.duel-presence{display:flex;align-items:center;gap:7px;color:#c3ead6;font-size:12px;margin:0 0 14px}.duel-presence:before{content:'';width:7px;height:7px;background:#8dccaf;border-radius:50%}
.duel-primary-actions{display:grid;grid-template-columns:1fr;gap:12px;margin:18px 0}
.duel-primary-actions>button{display:flex;align-items:center;gap:14px;text-align:left;min-height:72px!important;padding:14px 17px!important;border-radius:12px!important}
.duel-primary-actions>button>.icon{width:28px;height:28px;flex-shrink:0}.duel-primary-actions>button span{display:block}.duel-primary-actions b{display:block;font-size:17px}.duel-primary-actions small{display:block;margin-top:4px;font-size:12px;font-weight:500}
.duel-loadout{margin:18px 0;border:1px solid #bf9c6a77;border-radius:12px;padding:0 14px;background:#3c210c99}.duel-loadout>summary{padding:13px 0;cursor:pointer;min-height:48px;font-weight:650;color:#f2deb5;font-size:13px}.duel-loadout .online-selects{padding:2px 0 12px}
.online-loadout{padding:20px!important}.online-loadout h2{font-size:23px;margin:4px 0 9px}.online-loadout>p{font-size:13px;line-height:1.5}.online-join{margin-top:18px}.online-join>div{gap:8px}.online-join input{min-width:0;flex:1;font-size:14px!important;letter-spacing:.03em!important;min-height:48px}.online-join .secondary{padding:10px 14px}
.online-record{margin-top:16px!important;padding:16px!important}.online-record .leaderboard-preview{display:none}.online-score{margin-bottom:0!important}.online-auth{padding:20px!important}.online-auth p{font-size:13px;line-height:1.5}
@media(min-width:700px){.duel-primary-actions{grid-template-columns:1fr 1fr}.venue-content .shop-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media(min-width:1000px) and (min-height:600px){.venue-intro{height:calc(100dvh - 190px)}.venue-character{width:min(31vw,330px)}.venue-content .shop-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.venue-heading h1{font-size:25px}}
@media(max-width:360px){.venue-content .shop-dropdowns{gap:7px}.venue-content .game-dropdown{padding-left:9px}.venue-content .item-card{padding:12px 9px}.venue-content .item-card h2{font-size:13px}.venue-heading h1{font-size:17px}.venue-back{min-width:78px;padding:8px 10px}
.map-app .town-scene .town-map .hotspot-label>b{font-size:12px}}
@media(max-height:500px){.venue-intro{height:120px}.map-gesture-hint{display:none!important}}
html[data-motion="off"] .town-map *{animation:none!important}html[data-motion="off"] .town-3d-canvas{transition:none}
.map-app .town-scene .town-map .training-points{position:absolute;display:grid;place-items:center;width:28px;min-width:28px;height:28px;right:-9px;top:-10px;border-radius:50%;line-height:1;padding:0}
.map-app .town-scene .town-walker{width:12%;max-width:100px}

/* The vector town stands in when 3D is unavailable, so it moves too: water
   shimmer and two banners. html[data-motion="off"] above still freezes them. */
@keyframes town-fallback-water{0%,100%{opacity:.7;transform:scale(1)}50%{opacity:1;transform:scale(1.12)}}
@keyframes town-fallback-flag{0%,100%{transform:rotate(-4deg)}50%{transform:rotate(5deg)}}
.town-fallback .town-fallback-water{transform-box:fill-box;transform-origin:center;animation:town-fallback-water 3.2s ease-in-out infinite}
.town-fallback .town-fallback-flag{transform-box:fill-box;transform-origin:left center;animation:town-fallback-flag 2.6s ease-in-out infinite}
.town-fallback .town-fallback-flag:nth-of-type(2){animation-delay:-1.3s}
/* 10.7: a gladiator without a win is pointed at the campaign arena; the online sign stays plain until 3 wins */
.map-app .town-scene .town-map .first-fight .hotspot-label{box-shadow:0 0 0 3px #ffd24a,0 0 18px 4px #ffd24a99,0 5px 14px #2f180844;animation:first-fight 1.6s ease-in-out infinite}
@keyframes first-fight{50%{box-shadow:0 0 0 4px #ffd24a,0 0 26px 8px #ffd24acc,0 5px 14px #2f180844}}
.map-app .town-scene .town-map .first-flag{position:absolute;top:-13px;right:10px;z-index:2;padding:1px 8px;border:2px solid #2b1709;border-radius:9px;background:linear-gradient(#ffe08f,#f0b955);color:#3a220f;font:800 11px/1.5 var(--font);font-style:normal;letter-spacing:.02em;box-shadow:0 2px 0 #2b1709;white-space:nowrap}
.map-app .town-scene .town-map .map-online-entry.quiet .hotspot-label{background:#362112f0;border-color:#f5e3b297;border-top-color:var(--place-color,#cfb174)}
html[data-motion="off"] .map-app .town-scene .town-map .first-fight .hotspot-label{animation:none}
@media (prefers-reduced-motion:reduce){.map-app .town-scene .town-map .first-fight .hotspot-label{animation:none}}
