/* Structural + functional rules shared by every design. Designs own all visuals. */
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;min-height:100dvh}
[hidden]{display:none!important}
button,input{font:inherit;color:inherit}
button{cursor:pointer}
button:disabled{cursor:not-allowed;opacity:.5}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
input[type=radio],input[type=checkbox]{position:absolute;opacity:0;pointer-events:none}
.mode,.deck,.region{position:relative;cursor:pointer;display:block}
.app{min-height:100dvh;display:flex;flex-direction:column}
.stage{flex:1;width:100%}
.map{display:block;width:100%;height:auto}
.visual img.flag{display:block;width:100%;height:auto}
.mini .map{width:100%}
img.flag.tiny{width:28px;height:auto}
kbd{font:inherit;font-size:.72em}
.chips{display:flex;gap:.5rem}
.rate{display:grid;grid-template-columns:repeat(4,1fr);gap:.5rem}
.rate button{display:flex;flex-direction:column;align-items:center}
.meter-bar{height:3px}.meter-bar i{display:block;height:100%}
.bar{display:flex;height:6px;overflow:hidden}.bar i{display:block;height:100%}
.missed{list-style:none;padding:0;margin:0}
.missed li{display:flex;align-items:center;gap:.75rem;flex-wrap:wrap}
.pin-ring{fill:none;stroke-width:2}
@media (prefers-reduced-motion:no-preference){.pin-ring{animation:ring 1.8s ease-out infinite;transform-box:fill-box;transform-origin:center}@keyframes ring{0%{transform:scale(.5);opacity:1}100%{transform:scale(1.6);opacity:0}}}

/* maps: zoom + fill-the-map functional rules */
.map path,.map circle{vector-effect:non-scaling-stroke}
.visual-map{position:relative;user-select:none;-webkit-user-select:none}
.visual-map svg.map{cursor:zoom-in;touch-action:pan-y}
.visual-map.zoomed svg.map{cursor:grab}
.visual-map.zoomed svg.map{touch-action:none}
.visual-map.grabbing svg.map{cursor:grabbing}
.zoom{position:absolute;top:10px;right:10px;display:flex;gap:4px}
.zoom button{min-width:32px;height:32px;padding:0 .5rem;line-height:1}
.miss-dot{r:calc(var(--u,1px)*4.5)}
.hide-dots .miss-dot{display:none}
.pin-ring{r:calc(var(--u,1px)*13)}.pin-dot{r:calc(var(--u,1px)*3.4)}
.c{fill:none;pointer-events:none}
.card-fill{display:grid}
.fill-form{display:grid;grid-template-columns:1fr auto;gap:.6rem}
.fill-tools{display:flex;align-items:center;justify-content:space-between;gap:1rem;flex-wrap:wrap}
.toggle{display:inline-flex;align-items:center;cursor:pointer;position:relative}
.found-list{list-style:none;margin:0;padding:0}
.missed-names{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:.3rem 1.4rem}
.missed-names li{display:flex;align-items:center;gap:.5rem}
.fill-msg:empty{display:none}
