/* Transform avatar children only: MapLibre owns each marker's map transform. */
/* The orbit rotates in a circular SVG, flattened into a ring at the feet. */
.person-marker .foot-halo{position:absolute;left:50%;bottom:-1px;width:82px;height:36px;transform:translateX(-50%);color:var(--c,#9861dc);pointer-events:none;z-index:-1;opacity:1;filter:drop-shadow(0 0 2px currentColor) drop-shadow(0 0 5px currentColor)}
.foot-halo svg{display:block;width:100%;height:100%;overflow:visible}
.foot-halo circle{fill:none;stroke:currentColor}
.foot-halo .energy-base{stroke-width:1.5;opacity:.45}
.foot-halo .energy-trail{stroke-width:4;stroke-linecap:round;stroke-dasharray:64 25 17 34 45 54;opacity:.95}
.foot-halo .energy-inner{stroke-width:1.8;stroke-linecap:round;stroke-dasharray:40 28 18 90;opacity:.8}
.foot-halo .energy-spark{fill:currentColor;stroke:#fff;stroke-width:1.2}
.foot-halo .energy-orbit{transform-origin:50px 50px;animation:energy-orbit 10s linear infinite}
.foot-halo .energy-counter{animation-direction:reverse;animation-duration:14s}
.foot-halo .magic-floor{fill:currentColor;fill-opacity:.1;stroke:none}
.foot-halo .energy-base{stroke-width:.65;opacity:.85}
.foot-halo .energy-trail{stroke-width:1.8;stroke-dasharray:75 10 20 12 54 30;stroke:color-mix(in srgb,currentColor 65%,white)}
.foot-halo .energy-inner{stroke-width:.9;stroke-dasharray:45 8 24 9;stroke:color-mix(in srgb,currentColor 70%,white)}
.foot-halo .magic-ticks,.foot-halo .magic-glyphs{fill:none;stroke:color-mix(in srgb,currentColor 60%,white);stroke-width:.7;stroke-linecap:round;stroke-linejoin:round}
.foot-halo .magic-star{fill:none;stroke:currentColor;stroke-width:.9;opacity:.9}
.foot-halo .magic-facet{fill:none;stroke:color-mix(in srgb,currentColor 40%,white);stroke-width:1}
.foot-halo .magic-shine{fill:none;stroke:#fff;stroke-width:.75;stroke-linecap:round;opacity:.85}
.foot-halo .magic-core{animation-duration:7s}
.foot-halo .magic-center{fill:#fff;stroke:currentColor}
.person-marker.stale .foot-halo{opacity:.35;filter:none}
.person-marker.stale .energy-orbit{animation-play-state:paused}
.person-marker.fix-pulse .foot-halo,.person-marker.wave-once .foot-halo{animation:energy-flare 1.8s ease-out}
.character-preview .foot-halo{width:82px;bottom:-1px}
@keyframes energy-orbit{to{transform:rotate(360deg)}}
@keyframes energy-flare{0%,100%{opacity:1}40%{opacity:1;filter:drop-shadow(0 0 5px currentColor) drop-shadow(0 0 10px currentColor)}}
.person-marker.little-spin:not(.moving) .head,.person-marker.little-spin:not(.moving) .torso{animation:member-pirouette 2s ease-in-out!important;transform-origin:50% 75%}
.person-marker.wave-once .head,.person-marker.wave-once .torso{animation:coucou-dance 1.8s ease-in-out!important}

.flag-marker{display:flex;align-items:center;flex-direction:column;gap:3px;padding:9px 13px;background:#fffafef5;color:#62418b;border-color:#eadcf8}
.flag-time{font-size:14px;font-weight:800;color:#6d3bb2;white-space:nowrap;background:#eee1fc;border-radius:9px;padding:5px 8px}
.flag-cloth{display:block;align-self:center;width:39px;height:31px;margin:6px 0 3px 7px;border-left:3px solid #79569b;position:relative}
.flag-cloth:after{content:'';position:absolute;left:0;top:0;width:32px;height:22px;background:linear-gradient(110deg,#a365ea,#7840bb);clip-path:polygon(0 0,100% 10%,82% 50%,100% 95%,0 100%);transform-origin:left center;animation:purple-flag 3.8s ease-in-out infinite}
.flag-place{font-size:12px;max-width:190px}.activity-pop{animation:activity-arrival 1.8s ease-out}.activity-spark{position:absolute;left:60%;top:-20px;color:#9865c6;font-size:20px;animation:activity-spark 2s ease-out forwards;white-space:nowrap}
@keyframes foot-pulse{0%{box-shadow:0 0 0 0 #a568e880;opacity:.5}45%{box-shadow:0 0 0 13px #a568e810;opacity:1}100%{box-shadow:0 0 0 20px transparent}}
@keyframes member-pirouette{0%,100%{transform:rotateY(0) translateY(0)}25%{transform:rotateY(75deg) translateY(-3px)}70%{transform:rotateY(360deg) translateY(-5px)}85%{transform:rotateY(360deg) translateY(0)}}
@keyframes coucou-dance{0%,100%{transform:translateX(0) rotate(0)}20%{transform:translateX(-4px) rotate(-8deg)}45%{transform:translateX(4px) translateY(-5px) rotate(8deg)}70%{transform:translateX(-3px) rotate(-6deg)}}
@keyframes purple-flag{0%,100%{transform:perspective(80px) rotateY(-13deg) skewY(-3deg)}50%{transform:perspective(80px) rotateY(15deg) skewY(4deg)}}
@keyframes activity-arrival{0%{transform:translateX(-10%) scale(.7)}35%{transform:translateX(-10%) scale(1.14)}100%{transform:translateX(-10%) scale(1)}}
@keyframes activity-spark{0%{opacity:0;transform:translateY(8px)}30%{opacity:1}100%{opacity:0;transform:translateY(-22px)}}
@media(prefers-reduced-motion:reduce){.flag-cloth:after,.person-marker.little-spin .head,.person-marker.little-spin .torso,.person-marker.wave-once .head,.person-marker.wave-once .torso,.activity-pop,.activity-spark,.person-marker.fix-pulse .foot-halo{animation:none!important}}

@media(prefers-reduced-motion:reduce){.foot-halo .energy-orbit,.person-marker.fix-pulse .foot-halo,.person-marker.wave-once .foot-halo{animation:none!important}}

/* Bare map landmark. Animate fabric only; MapLibre positions the button. */
.flag-marker{position:relative;display:flex;align-items:center;flex-direction:column;gap:0;width:154px;max-width:154px;padding:0 0 22px;border:0;border-radius:0;background:transparent;box-shadow:none;color:var(--flag-color,#8850d4);overflow:visible;cursor:pointer;-webkit-tap-highlight-color:transparent}
.flag-marker:hover,.flag-marker:active{background:transparent;box-shadow:none}
.flag-marker:focus-visible{outline:2px solid white;outline-offset:4px}
.flag-marker .flag-time{position:relative;margin:0 0 4px;padding:0;background:none;border:0;border-radius:0;color:var(--flag-color);font-size:15px;font-weight:900;line-height:1.4;text-shadow:0 1px 2px white,0 -1px 2px white,1px 0 2px white,-1px 0 2px white,0 0 9px white;animation:flag-label-float 4s ease-in-out infinite}
.flag-marker .flag-cloth{display:block;position:relative;align-self:center;width:144px;height:148px;margin:0;border:0;filter:drop-shadow(0 2px 2px #16082e66)}
.flag-marker .flag-cloth:after{content:none;animation:none}
.flag-cloth svg{display:block;width:100%;height:100%;overflow:visible}
.flag-fabric{filter:drop-shadow(0 0 3px currentColor)}
.flag-ground{fill:currentColor;opacity:.45;filter:blur(2px)}
.flag-marker .flag-place{position:absolute;bottom:0;left:50%;transform:translateX(-50%);width:190px;max-width:190px;color:#362844;font-size:12px;font-weight:800;line-height:1.3;text-align:center;text-shadow:0 1px 2px white,0 -1px 2px white,1px 0 2px white,-1px 0 2px white,0 0 7px white}
@keyframes flag-label-float{0%,100%{transform:translateY(0)}50%{transform:translateY(-3px)}}
@media(prefers-reduced-motion:reduce){.flag-marker .flag-time{animation:none}}

.flag-marker .flag-cloth svg{transform:translateX(38px)}
