/* Visitor experience: keep the map dominant; scope everything to this additive layer. */
.visitor-bar{display:flex;align-items:center;gap:18px;flex-wrap:wrap;padding:13px 18px;background:linear-gradient(110deg,#102b28,#0a1c1d);border:1px solid #34524b;border-radius:12px;margin:0 0 10px;color:#e6f4ed;font:14px/1.45 system-ui,sans-serif}
.visitor-presence{display:flex;align-items:center;gap:12px}.visitor-number{font-size:32px;font-variant-numeric:tabular-nums;color:#bbec97;min-width:30px}.visitor-presence small,.visitor-state,.visitor-active{display:block;color:#a8c4b9;font-size:11px}.visitor-status{flex:1;min-width:140px}.visitor-state{max-width:260px}.visitor-controls{display:flex;flex-wrap:wrap;gap:7px;align-items:center}
.visitor-bar button,.experience-dialog button{appearance:none;font:inherit;color:#e9f3e9;border:1px solid #446057;background:#172f2b;border-radius:9px;padding:9px 12px;cursor:pointer;min-height:38px}.visitor-bar button:hover,.experience-dialog button:hover{background:#25483d;border-color:#9acb95}.visitor-bar button:focus-visible,.experience-dialog button:focus-visible,.experience-dialog input:focus-visible{outline:3px solid #dbed95;outline-offset:3px}.visitor-bar .passport-button{background:#c6df99;color:#132718;border-color:#c6df99;font-weight:700}.visitor-bar [hidden],.experience-dialog [hidden]{display:none!important}.visitor-bar[data-presence=offline] .visitor-number{color:#adbbbc}.visitor-short{display:none!important}
.experience-dialog{box-sizing:border-box;width:min(710px,calc(100% - 28px));max-width:710px;max-height:88dvh;overflow:auto;border:1px solid #557163;border-radius:20px;background:#10231f;color:#edf5ef;padding:24px;font:15px/1.55 system-ui,sans-serif;box-shadow:0 28px 100px #0009}.experience-dialog::backdrop{background:#020e0bd9;backdrop-filter:blur(5px)}.xp-dialog-head{display:flex;gap:16px;align-items:center;justify-content:space-between}.xp-dialog-head h2{margin:0;font-size:24px;line-height:1.25}.xp-dialog-body h3{font-size:16px;margin:24px 0 8px}.xp-dialog-body p{margin:12px 0}.xp-dialog-body>.xp-muted{color:#a7c0b1;font-size:13px}.xp-mode{padding:12px;border-radius:10px;border:1px solid #8d8248;color:#e3d8ac}.xp-rank{color:#cfe5a4}.experience-dialog progress{display:block;width:100%;height:12px;accent-color:#b7db8c;margin-bottom:20px}.xp-stamps{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.xp-stamp{padding:13px 10px;border:1px dashed #4e6255;border-radius:10px;text-align:center;opacity:.65}.xp-stamp b,.xp-stamp small{display:block}.xp-stamp-sign{display:block;font-size:25px;line-height:1.2}.xp-stamp small{font-size:11px}.xp-stamp.earned{background:#264531;border:1px solid #96be75;color:#ddf6ba;opacity:1}.xp-sections{display:flex;gap:7px;flex-wrap:wrap}.xp-sections span{font-size:12px;padding:5px 9px;border-radius:20px;border:1px solid #48584e;color:#adc0b3}.xp-sections .earned{color:#d3eba9;background:#2c452e}.xp-badges{display:grid;gap:7px}.xp-badge{padding:9px 12px;border-left:3px solid #3e5345;background:#172e27;opacity:.65}.xp-badge b,.xp-badge small{display:block}.xp-badge small{font-size:12px}.xp-badge.earned{border-color:#bfdb85;color:#d2eba9;opacity:1}.xp-daily{display:grid;gap:8px;margin-bottom:16px}.xp-daily div{padding:10px;border:1px solid #476151;border-radius:9px}.xp-daily .earned{color:#c7e5a5}.xp-dialog-body>button{margin:5px 7px 5px 0}.experience-dialog .xp-primary{background:#bad88b;color:#162616;border-color:#bad88b;font-weight:650}.experience-dialog .xp-reset{background:transparent;color:#adc1b6;font-size:12px;border:none}.xp-quiz fieldset{margin:18px 0;padding:12px;border:1px solid #526756;border-radius:10px}.xp-quiz legend{font-weight:650;padding:0 5px}.xp-quiz label{display:flex;align-items:flex-start;gap:10px;padding:9px;border-radius:7px;cursor:pointer;font-size:14px}.xp-quiz label:has(input:checked){background:#30472d}.xp-quiz input{accent-color:#c6de9c;margin-top:5px;flex-shrink:0}.xp-explanation{color:#d0e4a6;font-size:13px}.xp-notice{position:fixed;z-index:150;bottom:24px;left:50%;transform:translateX(-50%) translateY(20px);padding:12px 20px;border:1px solid #a1ca7b;border-radius:12px;background:#193626;color:#e3f5c7;box-shadow:0 10px 40px #0007;opacity:0;pointer-events:none;transition:.2s;max-width:calc(100% - 32px);font:14px/1.5 system-ui,sans-serif}.xp-notice.visible{opacity:1;transform:translateX(-50%)}.bot-marker.visitor.xp-focus{outline:4px solid #fcf2a3!important;outline-offset:5px;z-index:100!important}#reserve:has(.visitor) .map-empty{display:none}
@media(max-width:700px){.visitor-bar{gap:10px;padding:12px}.visitor-status{min-width:110px}.visitor-controls{width:100%}.visitor-controls button{flex:1;padding:8px;font-size:12px}.visitor-bar .visitor-number{font-size:28px}.experience-dialog{padding:18px}.xp-dialog-head h2{font-size:20px}.xp-stamps{grid-template-columns:repeat(2,1fr)}}
@media(prefers-reduced-motion:reduce){.xp-notice{transition:none}}
/* Desktop: visitors.js moves the bar into the map toolbar, so it costs the map no height. */
.map-toolbar>.visitor-bar{flex:none;flex-wrap:nowrap;gap:10px;margin:0 auto 0 0;padding:0;background:none;border:0;border-radius:0;font-size:12px;min-width:0}
.map-toolbar>.visitor-bar~.map-actions{margin-left:auto}
.map-toolbar>div:first-child+.visitor-bar{margin-left:16px;padding-left:16px;border-left:1px solid var(--line,#34524b);border-radius:0}
.map-toolbar>.visitor-bar .visitor-presence{gap:6px;white-space:nowrap}
.map-toolbar>.visitor-bar .visitor-number{font-size:18px;min-width:0;line-height:1}
.map-toolbar>.visitor-bar .visitor-label,.map-toolbar>.visitor-bar .visitor-presence small,.map-toolbar>.visitor-bar .visitor-active{display:none}
.map-toolbar>.visitor-bar .visitor-short{display:inline!important;font-weight:600;color:#a8c4b9}
.map-toolbar>.visitor-bar:not([data-presence=offline]) .visitor-status{display:none}
.map-toolbar>.visitor-bar .visitor-status{flex:0 1 auto;min-width:0}
.map-toolbar>.visitor-bar .visitor-state{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:160px}
.map-toolbar>.visitor-bar .visitor-controls{flex-wrap:nowrap;gap:6px}
.map-toolbar>.visitor-bar button{padding:3px 9px;min-height:26px;font-size:12px;border-radius:999px;white-space:nowrap}
.map-toolbar>.visitor-bar .visitor-help{width:26px;padding:0;font-size:0}
.map-toolbar>.visitor-bar .visitor-help::before{content:"?";font-size:13px;font-weight:700}
/* Narrower map: the topbar tab and mode indicator already say what the heading and badge say, so they leave the eye (not the screen reader). */
@container (max-width:1180px){.map-toolbar:has(>.visitor-bar)>div:first-child{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}.map-toolbar>div:first-child+.visitor-bar{margin-left:0;padding-left:0;border-left:0}}
/* Too narrow even for that: the toolbar keeps its heading and the strip takes its own thin row under it. */
@container (max-width:820px){.map-toolbar:has(>.visitor-bar){flex-wrap:wrap;row-gap:6px}.map-toolbar:has(>.visitor-bar)>div:first-child{position:static;width:auto;height:auto;overflow:visible;clip-path:none}.map-toolbar>.visitor-bar{order:3;flex:1 1 100%}}
