
.v2-tag{display:inline-block;font-size:.62em;vertical-align:middle;border:1px solid #b9874d;border-radius:999px;padding:.2em .6em;color:#e9bf7d;margin-left:.6em}
.v2-layout{display:grid;gap:14px}.v2-card{background:rgba(12,20,30,.45);border:1px solid rgba(191,152,96,.32);border-radius:12px;padding:16px}.v2-head{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap}.v2-mapgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(165px,1fr));gap:8px;margin-top:14px}.v2-map{background:rgba(23,32,44,.7);color:inherit;border:1px solid #56606a;border-radius:9px;padding:12px;text-align:left;min-height:70px;cursor:pointer}.v2-map:disabled{opacity:.48;cursor:not-allowed}.v2-map.current{border-color:#d8a459;box-shadow:inset 0 0 0 1px #d8a459}.v2-map.done{border-color:#538d65}.v2-map small{display:block;opacity:.75;margin-top:5px}.v2-bar{height:12px;border-radius:9px;background:#263441;overflow:hidden;margin:10px 0}.v2-bar>span{height:100%;background:#ba8b4c;display:block}.v2-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}.v2-actions button{padding:10px 14px}.v2-muted{opacity:.78;font-size:.92em}.v2-stats{display:flex;gap:12px;flex-wrap:wrap}.v2-stats>div{background:rgba(255,255,255,.04);border-radius:8px;padding:9px 12px;flex:1;min-width:130px}

/* Campaign route, positioned nodes and progression integrated into the map */
.v2-world{position:relative;min-height:490px;overflow:hidden;border:2px solid #6c5738;border-radius:16px;background:radial-gradient(ellipse at 20% 22%,rgba(103,136,88,.65),transparent 34%),radial-gradient(ellipse at 74% 75%,rgba(136,69,48,.7),transparent 35%),radial-gradient(ellipse at 67% 15%,rgba(90,105,111,.55),transparent 38%),linear-gradient(135deg,#384b3a,#514b38 54%,#2d3d39);box-shadow:inset 0 0 75px rgba(0,0,0,.55);margin-top:12px}
.v2-world:before{content:'';position:absolute;inset:0;pointer-events:none;opacity:.2;background:repeating-linear-gradient(115deg,transparent 0 26px,rgba(255,255,255,.12) 27px,transparent 29px)}
.v2-trail{position:absolute;inset:0;width:100%;height:100%;overflow:visible;pointer-events:none}
.v2-node{position:absolute;transform:translate(-50%,-50%);z-index:1;width:94px;min-height:65px;border:0;background:none;color:#f5e5bf;cursor:pointer;text-align:center;padding:0;display:flex;flex-direction:column;align-items:center;gap:3px;text-shadow:0 2px 4px #000}
.v2-node-icon{display:grid;place-items:center;width:35px;height:35px;border:2px solid #888b82;border-radius:50%;background:#25323a;box-shadow:0 2px 8px #161a17;font-weight:800}
.v2-node.current .v2-node-icon{background:#a66b2e;border-color:#f9d188;box-shadow:0 0 0 4px rgba(237,178,71,.18),0 0 20px rgba(255,187,71,.5)}
.v2-node.done .v2-node-icon{background:#376746;border-color:#b0d6a3}
.v2-node:disabled{opacity:.65;cursor:not-allowed}
.v2-node-name{font-size:11px;line-height:1.12;max-width:110px;font-weight:700;overflow-wrap:anywhere}
.v2-node:focus-visible .v2-node-icon{outline:3px solid white;outline-offset:3px}
.v2-map-status{margin-top:12px;padding:12px;background:rgba(20,30,34,.7);border-radius:9px;border:1px solid #887451}
@media(max-width:620px){.v2-world{min-height:540px}.v2-node{width:68px}.v2-node-name{font-size:9px}.v2-node-icon{width:30px;height:30px}}

/* V2 illustrated map and location dialog */
.v2-landscape{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}
.v2-node-progress{font-size:10px;font-weight:800;color:#fff2d5;background:rgba(10,18,18,.78);border-radius:6px;padding:2px 6px;white-space:nowrap}
.v2-overlay:not([hidden]){position:fixed;inset:0;z-index:99999;display:grid;place-items:center;padding:18px;background:rgba(3,7,12,.78);backdrop-filter:blur(4px)}
.v2-dialog{position:relative;width:min(580px,100%);max-height:90vh;overflow-y:auto;background:linear-gradient(145deg,#28343b,#17232a);border:2px solid #a78350;border-radius:16px;box-shadow:0 20px 90px #000;padding:26px;color:#f4e6cf}
.v2-dialog h3{margin:0 45px 12px 0}.v2-dialog-progress{margin:18px 0}.v2-close{position:absolute;right:14px;top:12px;border:1px solid #957c59;background:#202e35;color:#fff;border-radius:8px;padding:8px 12px;cursor:pointer}
.v2-world{background:#61765e}.v2-node{min-height:75px}.v2-node-name{background:rgba(12,24,20,.8);border-radius:5px;padding:3px 5px}
@media(max-width:620px){.v2-node-progress{font-size:9px;padding:2px 3px}.v2-dialog{padding:18px}.v2-world{min-height:600px}}

.v2-world{min-height:620px;border:7px solid #6d5134;box-shadow:inset 0 0 85px #21190f,0 12px 32px #0008;background:#667458}
.v2-world:after{content:"";position:absolute;inset:0;pointer-events:none;background:radial-gradient(ellipse at center,transparent 38%,#24190f99 100%);z-index:0}
.v2-landscape{filter:saturate(1.13) contrast(1.06)}
.v2-trail{z-index:1}.v2-node{z-index:3;width:118px}
.v2-node-icon{width:42px;height:42px;border-width:3px;font-size:17px}
.v2-node-name{font-size:12px;padding:5px 7px;border:1px solid #d3ae704a;background:#1b2520dc}
.v2-node-progress{font-size:11px}
.v2-overlay[hidden]{display:none!important}
.v2-overlay{position:fixed!important;inset:0!important;z-index:2147483640!important;display:grid;place-items:center;padding:20px;background:#05090ce8}
.v2-dialog{max-width:620px;width:100%;background:linear-gradient(145deg,#344239,#1b2828 75%);border:3px double #d4a85d;box-shadow:0 25px 110px #000;padding:30px}
@media(max-width:700px){.v2-world{min-height:580px}.v2-node{width:82px}.v2-node-name{font-size:10px}.v2-node-progress{font-size:9px}}

.v2-node:active:not(:disabled){transform:translate(-50%,-50%)!important}
.v2-overlay:not([hidden]){display:grid!important;pointer-events:auto!important}

.v2-battle-scene{position:relative;min-height:250px;display:flex;align-items:end;justify-content:space-around;padding:24px 10px;background:linear-gradient(#36584c 0%,#6d8b6d 62%,#384d32 63%,#293e2c 100%);border:3px solid #ae8953;border-radius:12px;overflow:hidden}
.v2-fighter{display:flex;flex-direction:column;align-items:center;gap:7px;color:#fff;text-shadow:0 2px 3px #000;transition:transform .3s,filter .3s}
.v2-sprite{font-size:76px;filter:drop-shadow(0 8px 3px #0008)}
.v2-mini-hp{width:100px;height:9px;border:1px solid #ffe4a6;background:#622b2b;border-radius:8px;overflow:hidden}
.v2-mini-hp i{display:block;height:100%;background:#70c86f;transition:width .3s}
.v2-strike{animation:v2lunge .55s ease-in-out}.v2-hit{animation:v2hurt .55s ease-in-out}
@keyframes v2lunge{50%{transform:translateX(50px)}}@keyframes v2hurt{50%{transform:translateX(15px);filter:brightness(2)}}
.v2-battle-flash{position:absolute;left:48%;top:30%;font-size:32px;color:#ffe5a2;text-shadow:0 0 12px #e9822a}
.v2-battle-controls{display:flex;gap:12px;align-items:center;flex-wrap:wrap;margin:16px 0}
.v2-battle-controls select{padding:9px;background:#192a27;color:#fff;border:1px solid #bca06e;border-radius:6px}
.v2-battle-controls button{padding:10px 15px;background:#8b5833;color:#fff;border:1px solid #c7a16d;border-radius:6px;cursor:pointer}

/* Výpravy V2 – illustrated combat and post-battle report */
.v2-battle-scene{isolation:isolate;min-height:315px;background:linear-gradient(180deg,#233d45 0%,#587968 47%,#90a47a 68%,#354a35 69%,#263b30 100%);border:3px solid #b9a277;box-shadow:inset 0 0 45px #152922,0 10px 24px #0005}
.v2-battle-trees{position:absolute;inset:0;z-index:-1;opacity:.65;background:repeating-linear-gradient(104deg,transparent 0 43px,#203e34 44px 53px,transparent 54px 95px),radial-gradient(ellipse at 25% 30%,#254d39 0 19%,transparent 20%),radial-gradient(ellipse at 77% 22%,#284d3c 0 25%,transparent 26%);pointer-events:none}
.v2-battle-mist{position:absolute;inset:10% -50%;z-index:-1;background:linear-gradient(90deg,transparent,#dce8ce33,transparent);animation:v2mist 9s linear infinite;pointer-events:none}
.v2-fighter{position:relative;z-index:2;gap:5px;min-width:112px;transition:transform .3s,filter .3s}
.v2-fighter .v2-sprite{width:140px;max-width:31vw;height:195px;display:block;font-size:initial;filter:drop-shadow(0 10px 4px #07190d77)}
.v2-fighter .v2-sprite svg{width:100%;height:100%}
.v2-fighter b{font-size:14px;white-space:nowrap}
.v2-mini-hp{width:112px;max-width:100%}
.v2-strike{animation:v2heroattack .9s ease-in-out}
.v2-hit{animation:v2enemyhurt .9s ease-in-out}
.v2-battle-flash{left:50%;top:33%;transform:translateX(-50%);font-size:21px;z-index:4;white-space:nowrap;color:#ffdf92;animation:v2battleflash .9s ease-out}
.v2-battle-flash.v2-critical{font-size:23px;color:#ffb86a}
.v2-battle-status{display:flex;justify-content:space-between;gap:12px;margin-top:10px;color:#dfcda7;font-size:14px}
.v2-victory{text-align:center;padding:10px 4px 16px;background:linear-gradient(#3b4c3d,#253a32);border-radius:12px;border:1px solid #a9925b}
.v2-victory h3{color:#f3d993;margin:4px 0;font-size:28px}
.v2-victory p{margin:4px 0;color:#f3e8d1}
.v2-victory-icon{font-size:48px;animation:v2win 1.5s ease-in-out infinite alternate}
.v2-result-table{border-collapse:collapse;width:100%;margin:16px 0;font-size:14px}
.v2-result-table tr{border-bottom:1px solid #a9925b55}
.v2-result-table th,.v2-result-table td{padding:10px 8px;text-align:left}
.v2-result-table td{text-align:right;color:#f3d993;font-weight:700}
.v2-reward-notice{font-size:12px;line-height:1.55;padding:10px 12px;background:#473c2c;border-left:3px solid #d6a75b;color:#f0dfc1;border-radius:5px}
@keyframes v2heroattack{0%,100%{transform:translateX(0) rotate(0)}40%{transform:translateX(70px) rotate(7deg)}60%{transform:translateX(58px) rotate(-5deg)}}
@keyframes v2enemyhurt{0%,100%{transform:translateX(0);filter:none}40%{transform:translateX(17px) rotate(7deg);filter:brightness(1.8)}}
@keyframes v2battleflash{0%{opacity:0;transform:translate(-50%,15px) scale(.7)}30%{opacity:1;transform:translate(-50%,-5px) scale(1.15)}100%{opacity:0;transform:translate(-50%,-35px) scale(1)}}
@keyframes v2mist{from{transform:translateX(-20%)}to{transform:translateX(20%)}}
@keyframes v2win{to{transform:translateY(-7px) scale(1.08)}}
@media(max-width:520px){.v2-battle-scene{min-height:255px;padding:14px 5px}.v2-fighter .v2-sprite{height:145px;width:100px}.v2-fighter{min-width:88px}.v2-battle-flash{font-size:15px}.v2-result-table{font-size:12px}}
@media(prefers-reduced-motion:reduce){.v2-battle-mist,.v2-strike,.v2-hit,.v2-battle-flash,.v2-victory-icon{animation:none}}

/* V5: location progression and improved alternating combat */
.v2-combat-progress{padding:12px 14px;margin:10px 0 14px;border:1px solid #b89b69;border-radius:10px;background:linear-gradient(135deg,#253d35,#324637);color:#f4e5c8}
.v2-combat-progress-label{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:7px;font-size:13px}
.v2-combat-progress-label span{font-variant-numeric:tabular-nums;font-weight:800;color:#f5d486}
.v2-combat-progress-bar{height:11px;margin:9px 0 5px;border-radius:20px;overflow:hidden;background:#162820;border:1px solid #7d7955}
.v2-combat-progress-bar span{display:block;height:100%;background:linear-gradient(90deg,#80ae69,#e7c46f);transition:width .4s}
.v2-combat-progress small{font-size:11px;color:#c9d4b7}
.v2-hero-hit{animation:v2herohurt .95s ease-in-out}
.v2-enemy-strike{animation:v2enemyattack .95s ease-in-out}
.v2-idle .v2-sprite{animation:v2breathing 2.8s ease-in-out infinite}
.v2-phase-3 .v2-battle-flash{filter:drop-shadow(0 0 10px #f3ac4c)}
.v2-phase-4 .v2-enemy{filter:grayscale(.5);opacity:.7;transform:rotate(8deg) translateY(12px)}
@keyframes v2herohurt{0%,100%{transform:translateX(0);filter:none}42%{transform:translateX(-15px) rotate(-6deg);filter:brightness(1.7)}}
@keyframes v2enemyattack{0%,100%{transform:translateX(0) rotate(0)}42%{transform:translateX(-55px) rotate(-8deg)}65%{transform:translateX(-35px) rotate(5deg)}}
@keyframes v2breathing{0%,100%{transform:translateY(0)}50%{transform:translateY(-4px)}}
@media(prefers-reduced-motion:reduce){.v2-hero-hit,.v2-enemy-strike,.v2-idle .v2-sprite{animation:none}}

/* V6: detailed illustrated combatants */
.v2-fighter .v2-sprite{width:178px;height:244px;max-width:36vw;transform-origin:50% 95%}
.v2-fighter .v2-sprite img{width:100%;height:100%;object-fit:contain;display:block;user-select:none;pointer-events:none;filter:drop-shadow(0 9px 5px #07190b66)}
.v2-battle-scene{min-height:360px;padding-top:15px}
.v2-hero .v2-sprite{transform:scaleX(1)}
.v2-enemy .v2-sprite{transform:scaleX(-1)}
.v2-idle .v2-sprite{animation:v2breathing 2.8s ease-in-out infinite}
@media(max-width:520px){.v2-battle-scene{min-height:275px}.v2-fighter .v2-sprite{height:180px;width:128px}}

/* V7 – weapon arm rotates separately from body */
.v2-fighter .v2-sprite svg{width:100%;height:100%;overflow:visible;display:block;filter:drop-shadow(0 9px 5px #07190b66)}
.v2-weapon-arm{transform-box:view-box;transform-origin:175px 150px;will-change:transform}
.v2-hero .v2-weapon-arm{transform-origin:177px 150px}
.v2-enemy .v2-weapon-arm{transform-origin:194px 153px}
.v2-strike .v2-weapon-arm{animation:v2swordswing .9s cubic-bezier(.3,.1,.25,1) both}
.v2-enemy-strike .v2-weapon-arm{animation:v2axeswing .95s cubic-bezier(.3,.1,.25,1) both}
@keyframes v2swordswing{0%,12%{transform:rotate(-16deg)}30%{transform:rotate(-44deg)}52%{transform:rotate(60deg)}67%{transform:rotate(85deg)}100%{transform:rotate(0)}}
@keyframes v2axeswing{0%,10%{transform:rotate(-14deg)}32%{transform:rotate(-48deg)}57%{transform:rotate(67deg)}74%{transform:rotate(88deg)}100%{transform:rotate(0)}}
@media(prefers-reduced-motion:reduce){.v2-strike .v2-weapon-arm,.v2-enemy-strike .v2-weapon-arm{animation:none}}

/* V8 - sword trails, sparks, enchanted forest atmosphere */
.v2-battle-scene{box-shadow:inset 0 0 85px #0b1d18aa,0 10px 26px #0007}
.v2-battle-vignette{position:absolute;inset:0;pointer-events:none;background:radial-gradient(ellipse at 50% 55%,transparent 28%,#0718108a 100%);z-index:1}
.v2-battle-ambience{position:absolute;inset:0;z-index:1;pointer-events:none;overflow:hidden}
.v2-battle-ambience span{position:absolute;color:#e5c78999;text-shadow:0 0 9px #ffda83;animation:v2firefly 4s ease-in-out infinite alternate}
.v2-battle-ambience span:nth-child(1){left:12%;top:19%}.v2-battle-ambience span:nth-child(2){left:81%;top:25%;animation-delay:-1s}.v2-battle-ambience span:nth-child(3){left:49%;top:11%;animation-delay:-2s}.v2-battle-ambience span:nth-child(4){left:28%;top:59%;animation-delay:-3s}
.v2-battle-swipe{position:absolute;left:47%;top:20%;width:85px;height:150px;z-index:4;pointer-events:none;opacity:0;border-right:9px solid #fff2b3;border-radius:50%;filter:drop-shadow(0 0 8px #f5ad4c);transform:rotate(-40deg)}
.v2-battle-impact .v2-battle-swipe,.v2-battle-counter .v2-battle-swipe{animation:v2swipe .9s ease-out}
.v2-battle-sparks{position:absolute;left:52%;top:48%;width:1px;height:1px;z-index:5;pointer-events:none}
.v2-battle-sparks i{position:absolute;opacity:0;width:5px;height:15px;background:#fff0b0;border-radius:3px;box-shadow:0 0 9px #ffc968}
.v2-battle-impact .v2-battle-sparks i,.v2-battle-counter .v2-battle-sparks i{animation:v2spark .8s ease-out}
.v2-battle-sparks i:nth-child(1){--sx:46px;--sy:-46px;--rot:20deg}.v2-battle-sparks i:nth-child(2){--sx:-45px;--sy:-25px;--rot:-45deg}.v2-battle-sparks i:nth-child(3){--sx:40px;--sy:40px;--rot:60deg}.v2-battle-sparks i:nth-child(4){--sx:-25px;--sy:50px;--rot:-20deg}.v2-battle-sparks i:nth-child(5){--sx:5px;--sy:-65px;--rot:80deg}.v2-battle-sparks i:nth-child(6){--sx:-65px;--sy:12px;--rot:30deg}
.v2-battle-impact,.v2-battle-counter{animation:v2camerahit .65s ease-out}
@keyframes v2firefly{from{transform:translateY(10px);opacity:.15}to{transform:translateY(-18px);opacity:.85}}
@keyframes v2swipe{0%,24%{opacity:0;transform:rotate(-65deg) scale(.65)}40%,62%{opacity:1;transform:rotate(30deg) scale(1.15)}100%{opacity:0;transform:rotate(65deg) scale(1.4)}}
@keyframes v2spark{0%,25%{opacity:0;transform:translate(0,0) rotate(0) scale(.2)}40%{opacity:1}100%{opacity:0;transform:translate(var(--sx),var(--sy)) rotate(var(--rot)) scale(.4)}}
@keyframes v2camerahit{0%,28%,100%{filter:none}35%{filter:brightness(1.3)}43%{filter:brightness(.9)}}
@media(prefers-reduced-motion:reduce){.v2-battle-ambience span,.v2-battle-impact,.v2-battle-counter,.v2-battle-impact .v2-battle-swipe,.v2-battle-counter .v2-battle-swipe,.v2-battle-impact .v2-battle-sparks i,.v2-battle-counter .v2-battle-sparks i{animation:none}}

/* V9: correctly anchored directional attack trails and impacts */
.v2-battle-swipe{left:59%;top:25%;width:66px;height:120px;border-right:8px solid #fff4c3;transform:rotate(-40deg);transform-origin:50% 60%}
.v2-battle-sparks{left:66%;top:48%}
.v2-battle-impact .v2-battle-swipe{animation:v2hero-trail .9s ease-out both}
.v2-battle-counter .v2-battle-swipe{left:29%;top:25%;border-right:0;border-left:8px solid #c9f6ab;filter:drop-shadow(0 0 9px #79b95c);animation:v2enemy-trail .95s ease-out both}
.v2-battle-counter .v2-battle-sparks{left:34%;top:48%}
.v2-battle-counter .v2-battle-sparks i{background:#d7ffb7;box-shadow:0 0 10px #a7dd7c}
.v2-battle-counter .v2-battle-flash{left:35%;color:#c9f6ab}
.v2-battle-impact .v2-battle-flash{left:65%}
@keyframes v2hero-trail{
0%,24%{opacity:0;transform:rotate(-65deg) scale(.65)}
40%,62%{opacity:1;transform:rotate(30deg) scale(1.15)}
100%{opacity:0;transform:rotate(65deg) scale(1.4)}
}
@keyframes v2enemy-trail{
0%,24%{opacity:0;transform:rotate(65deg) scale(.65)}
40%,62%{opacity:1;transform:rotate(-30deg) scale(1.15)}
100%{opacity:0;transform:rotate(-65deg) scale(1.4)}
}
.v2-fighter .v2-sprite svg{filter:drop-shadow(0 8px 3px #06180cbb) drop-shadow(0 0 3px #e0c88b55)}
@media(max-width:520px){
.v2-battle-impact .v2-battle-flash{left:65%}
.v2-battle-counter .v2-battle-flash{left:35%}
.v2-battle-swipe{width:44px;height:90px}
}
@media(prefers-reduced-motion:reduce){
.v2-battle-impact .v2-battle-swipe,.v2-battle-counter .v2-battle-swipe{animation:none;opacity:0}
}

/* V10 – real player avatar from the in-game character creator */
.v2-player-avatar{position:relative;isolation:isolate;overflow:visible}
.v2-player-portrait{position:absolute;inset:0 4% 1%;overflow:hidden;border-radius:42% 42% 9% 9%;-webkit-mask-image:linear-gradient(to bottom,#000 0%,#000 82%,transparent 99%);mask-image:linear-gradient(to bottom,#000 0%,#000 82%,transparent 99%)}
.v2-player-portrait>svg{width:100%;height:100%;display:block;object-fit:contain}
.v2-player-weapon{position:absolute;inset:0;width:100%;height:100%;overflow:visible;pointer-events:none}
.v2-player-avatar .v2-weapon-arm{transform-origin:179px 174px}
.v2-strike .v2-player-avatar .v2-weapon-arm{animation:v2swordswing .9s cubic-bezier(.3,.1,.25,1) both}
.v2-player-avatar .v2-player-portrait svg{filter:drop-shadow(0 8px 3px #07170caa)}

/* V11: portrait background removed only in V2 combat; sword attached to shoulder */
.v2-player-portrait{inset:0 0 0 0;border-radius:0;overflow:visible;mask-image:none;-webkit-mask-image:none}
.v2-player-portrait>svg{width:100%;height:100%;object-fit:contain;overflow:visible}
.v2-player-avatar .v2-player-weapon{z-index:2}
.v2-player-avatar .v2-weapon-arm{transform-box:view-box;transform-origin:202px 265px}
.v2-strike .v2-player-avatar .v2-weapon-arm{animation:v2battle-shoulder-swing .9s cubic-bezier(.24,.15,.25,1) both}
@keyframes v2battle-shoulder-swing{
0%,12%{transform:rotate(-12deg)}
30%{transform:rotate(-45deg)}
53%{transform:rotate(64deg)}
72%{transform:rotate(78deg)}
100%{transform:rotate(0deg)}
}
@media(prefers-reduced-motion:reduce){.v2-strike .v2-player-avatar .v2-weapon-arm{animation:none}}

/* V12: smaller ordinary goblin, preserving animation and boss proportions */
.v2-enemy-goblin .v2-sprite svg{transform:scale(.76);transform-origin:50% 100%;}

/* V13: separate bow draw and magic staff cast */
.v2-class-hunter .v2-weapon-arm{transform-origin:202px 265px}
.v2-class-mage .v2-weapon-arm{transform-origin:202px 265px}
.v2-strike .v2-class-hunter .v2-weapon-arm{animation:v2bow-draw .95s ease-in-out both}
.v2-strike .v2-class-mage .v2-weapon-arm{animation:v2staff-cast .95s ease-in-out both}
@keyframes v2bow-draw{0%,100%{transform:rotate(0)}18%{transform:rotate(-20deg)}40%{transform:rotate(-32deg)}55%{transform:rotate(-28deg)}70%{transform:rotate(6deg)}}
@keyframes v2staff-cast{0%,100%{transform:rotate(0)}18%{transform:rotate(-24deg)}44%{transform:rotate(-40deg)}62%{transform:rotate(22deg)}}
.v2-magic-orb{filter:drop-shadow(0 0 9px #c6a2ff);animation:v2orbglow 1.6s ease-in-out infinite alternate}
@keyframes v2orbglow{to{opacity:.9;filter:drop-shadow(0 0 16px #a47bff)}}
.v2-projectile{position:absolute;z-index:6;pointer-events:none;opacity:0}
.v2-projectile-arrow{left:40%;top:51%;width:60px;height:4px;background:linear-gradient(90deg,#a57c50,#f7e4a6);box-shadow:0 0 6px #e6d49d;transform:translateX(-10px)}
.v2-projectile-arrow:after{content:'';position:absolute;right:-10px;top:-5px;border-top:7px solid transparent;border-bottom:7px solid transparent;border-left:12px solid #e3e8e5}
.v2-projectile-magic{left:39%;top:43%;width:30px;height:30px;border-radius:50%;background:radial-gradient(circle,#fff,#c4a5ff 40%,#7a47dd 78%);box-shadow:0 0 20px 7px #ad81ff}
.v2-battle-impact .v2-projectile-arrow,.v2-battle-impact .v2-projectile-magic{animation:v2projectile .9s ease-in forwards}
@keyframes v2projectile{0%,22%{opacity:0;transform:translateX(-20px) scale(.65)}32%{opacity:1}70%{opacity:1;transform:translateX(130px) scale(1)}85%,100%{opacity:0;transform:translateX(155px) scale(.5)}}
.v2-battle-impact .v2-swipe-arrow,.v2-battle-impact .v2-swipe-magic{animation:none;opacity:0}
.v2-battle-impact:has(.v2-projectile-magic) .v2-battle-sparks i{background:#c9b1ff;box-shadow:0 0 10px #9c77f5}
@media(prefers-reduced-motion:reduce){.v2-strike .v2-class-hunter .v2-weapon-arm,.v2-strike .v2-class-mage .v2-weapon-arm,.v2-battle-impact .v2-projectile{animation:none}}

/* V14: ranged classes remain planted; only warrior lunges */
.v2-hero-hunter.v2-strike,.v2-hero-mage.v2-strike{animation:none!important;transform:none!important}
.v2-hero-hunter.v2-strike .v2-player-portrait,.v2-hero-mage.v2-strike .v2-player-portrait{animation:none!important}
/* Bow stays aimed at goblin (right); the string and arrow pull back, then release */
.v2-hero-hunter .v2-weapon-bow .v2-weapon-arm{transform-origin:202px 265px}
.v2-hero-hunter.v2-strike .v2-weapon-bow .v2-weapon-arm{animation:v2bow-steady .95s ease-in-out both!important}
.v2-hero-hunter.v2-strike .v2-bow-arrow{animation:v2bow-arrow-draw .95s ease-in-out both}
.v2-hero-hunter.v2-strike .v2-bow-string{animation:v2bow-string-draw .95s ease-in-out both}
.v2-bow-pull{opacity:0}
.v2-hero-hunter.v2-strike .v2-bow-pull{animation:v2bow-pull .95s ease-in-out both}
@keyframes v2bow-steady{0%,100%{transform:rotate(0)}25%,62%{transform:rotate(-3deg)}70%{transform:rotate(2deg)}}
@keyframes v2bow-arrow-draw{0%,12%{transform:translateX(0)}32%,62%{transform:translateX(-30px)}72%,100%{transform:translateX(0);opacity:0}}
@keyframes v2bow-string-draw{0%,12%{opacity:1}32%,62%{opacity:.3}72%,100%{opacity:1}}
@keyframes v2bow-pull{0%,15%,72%,100%{opacity:0}32%,62%{opacity:1}}
/* Mage casts in place: wrist/staff only, no lunge or sword-like overhand swing */
.v2-hero-mage.v2-strike .v2-weapon-staff .v2-weapon-arm{animation:v2staff-flick .95s ease-in-out both!important}
@keyframes v2staff-flick{0%,15%{transform:rotate(0)}36%{transform:rotate(-15deg)}57%{transform:rotate(18deg)}75%{transform:rotate(6deg)}100%{transform:rotate(0)}}
@media(prefers-reduced-motion:reduce){.v2-hero-hunter.v2-strike .v2-bow-arrow,.v2-hero-hunter.v2-strike .v2-bow-string,.v2-hero-hunter.v2-strike .v2-bow-pull,.v2-hero-mage.v2-strike .v2-weapon-staff .v2-weapon-arm{animation:none!important}}

/* V18: clearer cartographic hierarchy, dungeon pins and AFK claim confirmation */
.v2-world{isolation:isolate;min-height:690px;border:9px ridge #9b7745;background:#4c654c;box-shadow:0 18px 42px #0009,inset 0 0 80px #20150a}
.v2-landscape{filter:saturate(1.2) contrast(1.08)}
.v2-trail{filter:drop-shadow(0 2px 2px #0009)}
.v2-node{transition:filter .2s ease,opacity .2s ease;filter:drop-shadow(0 4px 5px #0009)}
.v2-node:hover:not(:disabled){filter:drop-shadow(0 0 10px #f4c770)}
.v2-node-icon{width:48px;height:48px;background:radial-gradient(circle at 30% 25%,#5b6d62,#172b2b);border:3px solid #d6b47b}
.v2-node.current .v2-node-icon{animation:v2pulse 2.8s ease-in-out infinite}
@keyframes v2pulse{50%{box-shadow:0 0 0 7px #f6c56530,0 0 25px #f9c45a}}
.v2-dungeon{position:absolute;z-index:4;transform:translate(-50%,-50%);width:95px;display:flex;flex-direction:column;align-items:center;gap:3px;background:#281d34e8;border:2px solid #b89de0;border-radius:11px;color:#f6e9ff;padding:7px 4px;cursor:pointer;box-shadow:0 4px 12px #000a}
.v2-dungeon span{font-size:25px}.v2-dungeon small{font-size:10px;line-height:1.1;font-weight:700}.v2-dungeon:hover{background:#50346a;outline:2px solid #dfc3ff}.v2-dungeon:focus-visible{outline:3px solid white}
.v2-claim-result,.v2-dungeon-hint{margin:12px 0;padding:12px;border-radius:9px;border:1px solid #c8a65b;background:#3a3927;color:#f6e5b6}
.variantGearIcon{display:inline-grid;place-items:center;width:36px;height:36px;border-radius:8px;font-size:23px;vertical-align:middle;border:1px solid #c1b4d2}.variantGearIcon-mage{background:#322752}.variantGearIcon-hunter{background:#294a36}
@media(max-width:700px){.v2-world{min-height:640px}.v2-dungeon{width:65px;padding:4px 2px}.v2-dungeon span{font-size:18px}.v2-dungeon small{font-size:8px}}

/* V20: separated campaign and dungeon atlases */
.v2-mode-tabs{display:flex;gap:10px;margin:0 0 18px;flex-wrap:wrap}
.v2-mode-tabs button{background:#272f2d;color:#d5d8c8;border:2px solid #78816a;border-radius:12px;padding:12px 22px;font-weight:800;cursor:pointer;letter-spacing:.03em}
.v2-mode-tabs button.active{background:linear-gradient(145deg,#a77c39,#664822);border-color:#f5d28b;color:#fff5d5;box-shadow:0 0 18px #e6a44d55}
.v2-world{border:10px ridge #b18c51;outline:2px solid #332618;outline-offset:3px;box-shadow:inset 0 0 120px #160e08aa,0 20px 44px #000a}
.v2-world .v2-landscape{filter:saturate(1.24) contrast(1.12)}
.v2-world .v2-node{filter:drop-shadow(0 4px 5px #080b0a);transition:transform .18s,filter .18s}
.v2-world .v2-node:not(:disabled):hover{transform:translate(-50%,-50%) scale(1.11);filter:drop-shadow(0 0 12px #ffe0a8)}
.v2-dungeon-world{background:radial-gradient(ellipse at 60% 20%,#44485a,#272c37 70%);min-height:650px}
.v2-dungeon-world .v2-landscape{filter:grayscale(.55) hue-rotate(25deg) brightness(.5)}
.v2-dungeon-world:after{background:radial-gradient(ellipse at 50% 50%,transparent 20%,#170e26dd 100%)}
.v2-dungeon-location{width:150px;min-height:108px;border:3px solid #c7a3ec;background:linear-gradient(145deg,#513a6e,#231d33);box-shadow:0 0 18px #8b65c277,0 8px 16px #000a;z-index:5}
.v2-dungeon-location strong{font-size:12px}.v2-dungeon-location small{font-size:11px}
.v2-dungeon-location.v2-dungeon-complete{border-color:#7cd9a4;background:linear-gradient(145deg,#285a4c,#1c2c2b)}
@media(max-width:700px){.v2-dungeon-location{width:98px;min-height:82px}.v2-dungeon-location strong{font-size:10px}.v2-dungeon-location small{font-size:9px}}

/* V21: keep hit targets aligned with the visible map and above decorations. */
.v2-world{overflow:visible;isolation:isolate}
.v2-world .v2-landscape,.v2-world .v2-biomes,.v2-world .v2-trail,.v2-world .v2-dungeon-route{pointer-events:none!important}
.v2-biomes{position:absolute;inset:0;width:100%;height:100%;z-index:1;pointer-events:none}
.v2-world .v2-node,.v2-world .v2-dungeon-location{z-index:10;pointer-events:auto;touch-action:manipulation}
.v2-world .v2-node:hover:not(:disabled){transform:translate(-50%,-50%) scale(1.06)}
.v2-world .v2-dungeon-location:hover{transform:translate(-50%,-50%) scale(1.04)}
.v2-world::before,.v2-world::after{pointer-events:none!important}

/* V22: unified cartographic treatment. Layered parchment/biome relief, clearer labels,
   and explicit hit targets independent of the decorative SVG elements. */
.v2-world{position:relative;overflow:hidden!important;min-height:720px;border:7px solid #a68b62!important;border-radius:22px!important;
 background:radial-gradient(ellipse at 20% 72%,#4a725e 0%,transparent 45%),
 radial-gradient(ellipse at 18% 20%,#77936e 0%,transparent 42%),
 radial-gradient(ellipse at 80% 20%,#796a65 0%,transparent 45%),
 linear-gradient(145deg,#829476 0%,#556b5c 52%,#64544c 100%)!important;
 box-shadow:inset 0 0 0 3px #382e26,inset 0 0 95px #171b18a8,0 18px 42px #0008!important}
.v2-world .v2-landscape{z-index:0;opacity:.93;filter:saturate(.75) contrast(1.07) drop-shadow(0 2px 3px #19251a66)}
.v2-world .v2-biomes{z-index:1;opacity:.92;filter:drop-shadow(0 3px 4px #151b1866)}
.v2-world .v2-trail{z-index:2;filter:drop-shadow(0 1px 3px #151b16)}
.v2-world::before{content:"";position:absolute;inset:0;z-index:3;pointer-events:none!important;
 background:repeating-linear-gradient(0deg,transparent 0 3px,#161f1510 4px 5px),
 radial-gradient(ellipse at center,transparent 42%,#1e211d70 100%);opacity:.6}
.v2-world::after{content:"";position:absolute;inset:10px;z-index:3;pointer-events:none!important;border:1px solid #e7d1a258;border-radius:12px;background:none!important}
.v2-world .v2-node,.v2-world .v2-dungeon-location{position:absolute;z-index:20!important;pointer-events:auto!important;cursor:pointer;touch-action:manipulation}
.v2-world .v2-node{width:116px;min-height:76px;transform:translate(-50%,-50%);filter:drop-shadow(0 4px 7px #0009)}
.v2-world .v2-node-name{border:1px solid #bda476aa;border-radius:7px;padding:5px 8px;background:#172921f2;
 box-shadow:inset 0 1px #e5d1a02a,0 3px 9px #0008;color:#f4e8c9;line-height:1.2}
.v2-world .v2-node-icon{background:linear-gradient(155deg,#4c5c51,#1a2b28);border:3px solid #cfb889;box-shadow:0 3px 8px #0009}
.v2-world .v2-node.current .v2-node-icon{background:linear-gradient(135deg,#e0ae5d,#744b22);box-shadow:0 0 0 4px #e6bb6177,0 0 19px #f0ba4e}
.v2-world .v2-node.done .v2-node-icon{background:linear-gradient(135deg,#54865e,#284733)}
.v2-world .v2-node:hover{filter:drop-shadow(0 0 12px #f1d39b);transform:translate(-50%,-50%) scale(1.06)}
.v2-dungeon-world{background:radial-gradient(ellipse at 25% 70%,#404e49,transparent 50%),
 radial-gradient(ellipse at 75% 20%,#625268,transparent 55%),linear-gradient(145deg,#404c4b,#272a37)!important}
.v2-dungeon-world .v2-landscape{opacity:.32;filter:grayscale(.6) contrast(1.2)}
.v2-world .v2-dungeon-location{width:154px;min-height:112px;border:2px solid #c6b28b;border-radius:13px;
 background:linear-gradient(145deg,#4e4254f5,#202832f5);box-shadow:inset 0 1px #f8e6b544,0 9px 22px #000b}
.v2-world .v2-dungeon-location:hover{border-color:#f3d19c;box-shadow:0 0 18px #e2c38b66,0 9px 22px #000b}
.v2-overlay{overscroll-behavior:contain}
.v2-dialog{overscroll-behavior:contain}
@media(max-width:720px){.v2-world{min-height:650px}.v2-world .v2-node{width:79px}.v2-world .v2-node-name{font-size:9px;padding:4px}.v2-world .v2-dungeon-location{width:105px;min-height:90px}}

/* V23: map painting is in the SVG itself, not CSS overlays. */
.v2-world{background:#385949!important;min-height:760px!important;border:5px solid #806a49!important;box-shadow:0 20px 55px #000a,inset 0 0 28px #0b201a!important}
.v2-world .v2-landscape{opacity:1!important;filter:none!important;z-index:0!important;pointer-events:none!important}
.v2-world .v2-trail{opacity:.22!important;z-index:1!important;pointer-events:none!important}
.v2-world .v2-node,.v2-world .v2-dungeon-location{z-index:20!important;pointer-events:auto!important}
.v2-world::before,.v2-world::after{pointer-events:none!important;opacity:.12!important}
.v2-dungeon-world .v2-landscape{opacity:.65!important;filter:saturate(.7) brightness(.7)!important}
@media(max-width:720px){.v2-world{min-height:670px!important}}

/* V24 map: remove legacy translucent overlays that flatten the new cartography. */
.v2-world{background:#465b4a!important;border:5px solid #b5a47b!important;box-shadow:inset 0 0 0 2px #2c332c,0 12px 36px #0008!important}
.v2-world::before{background:radial-gradient(ellipse at center,transparent 63%,#101e1b65 100%)!important;opacity:.7!important}
.v2-world .v2-landscape{opacity:1!important;filter:none!important;z-index:1!important}
.v2-world .v2-trail{opacity:0!important;pointer-events:none!important}
.v2-world .v2-node,.v2-world .v2-dungeon-location{z-index:25!important}
.v2-dungeon-world{background:#343c39!important}

/* V25: completely redrawn in-game atlas; map controls are separate accessible buttons */
.v2-world:not(.v2-dungeon-world){background:#a49a75!important;border:9px ridge #a28c65!important;min-height:800px!important;box-shadow:inset 0 0 50px #211e17,0 18px 40px #0009!important}
.v2-world:not(.v2-dungeon-world) .v2-landscape{position:absolute!important;inset:0!important;width:100%!important;height:100%!important;opacity:1!important;filter:none!important;pointer-events:none!important;z-index:0!important}
.v2-world:not(.v2-dungeon-world) .v2-trail{display:none!important}
.v2-world:not(.v2-dungeon-world)::before,.v2-world:not(.v2-dungeon-world)::after{display:none!important}
.v2-world:not(.v2-dungeon-world) .v2-node{z-index:30!important;pointer-events:auto!important;position:absolute!important;cursor:pointer!important}
.v2-world:not(.v2-dungeon-world) .v2-node-name{background:#242b27f2!important;color:#f5e5bf!important;border:1px solid #b5a17d!important}
@media(max-width:720px){.v2-world:not(.v2-dungeon-world){min-height:690px!important}}

/* V26: nový typ mapy – ilustrované kapitoly, nikoli původní SVG podklad */
.v26-atlas{margin-top:14px;padding:22px;background:linear-gradient(155deg,#101b20,#19262b 54%,#111c22);border:1px solid #9e8154;border-radius:18px;box-shadow:0 15px 35px #0007;color:#eee4d0}
.v26-atlas-head{display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid #b9a16a55;margin-bottom:20px;padding:0 2px 17px}
.v26-eyebrow{font:700 10px Georgia,serif;letter-spacing:.3em;color:#d6ad71}
.v26-atlas-head h3{font:700 clamp(23px,3vw,36px) Georgia,serif;margin:5px 0;color:#f6e6c7}
.v26-atlas-head p{font-size:13px;color:#afc0bd;margin:0}
.v26-atlas-mark{font-size:55px;color:#b89b62;opacity:.7}
.v26-region-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}
.v26-region{position:relative;overflow:hidden;min-width:0;padding:0;border:1px solid #61726d;border-radius:12px;background:#1b292c;color:inherit;cursor:pointer;text-align:left;transition:transform .18s,border-color .18s,box-shadow .18s}
.v26-region:hover{transform:translateY(-3px);border-color:#e5bd77;box-shadow:0 8px 25px #0009}
.v26-region:focus-visible{outline:3px solid #f3cf84;outline-offset:3px}
.v26-region-landscape{position:relative;display:block;height:175px;overflow:hidden;background:linear-gradient(#8eafae,#c6c7a4 55%,#5b7655)}
.v26-region-landscape>span:not(.v26-feature){position:absolute;display:block;inset:0}
.v26-sky{background:radial-gradient(circle at 75% 24%,#fff6cfaa 0 8%,transparent 9%),linear-gradient(#9bb6b7,#d9d4b3 75%)}
.v26-back{clip-path:polygon(0 65%,15% 44%,29% 65%,42% 38%,58% 70%,73% 35%,88% 62%,100% 43%,100% 100%,0 100%);background:#7b8c79}
.v26-mid{clip-path:polygon(0 81%,16% 65%,30% 77%,50% 55%,68% 80%,84% 61%,100% 73%,100% 100%,0 100%);background:#466858}
.v26-front{clip-path:polygon(0 86%,24% 79%,45% 92%,68% 74%,100% 83%,100% 100%,0 100%);background:#253e36}
.v26-feature{position:absolute;left:50%;top:52%;transform:translate(-50%,-50%);font-size:65px;filter:drop-shadow(0 9px 7px #14251b99);z-index:2}
.v26-region-content{display:flex;flex-direction:column;gap:5px;padding:13px 16px 15px;background:linear-gradient(#213237,#17262c)}
.v26-region-num{font-size:10px;letter-spacing:.19em;font-weight:800;color:#d8b477}
.v26-region-content strong{font:700 21px Georgia,serif;color:#fff0d5}
.v26-region-content small{font-size:12px;color:#b9c7c0}
.v26-region-status{display:flex;justify-content:space-between;gap:10px;margin-top:9px;padding-top:10px;border-top:1px solid #ffffff25;font-size:10px;font-weight:800;letter-spacing:.07em;color:#e5b875}
.v26-current{border:2px solid #e9bb67;box-shadow:0 0 0 3px #dba75330}
.v26-done .v26-region-status{color:#8bdb9d}
.v26-locked .v26-region-landscape{filter:saturate(.48) brightness(.75)}
.v26-atlas-foot{text-align:center;font:italic 13px Georgia,serif;color:#ad9a78;padding-top:20px}
.v26-village .v26-sky{background:linear-gradient(#87b2cf,#edcfa3)}
.v26-village .v26-back{background:#8d9b73}.v26-village .v26-mid{background:#a48763}.v26-village .v26-front{background:#52674b}
.v26-marsh .v26-sky{background:linear-gradient(#627e7c,#9caaa0)}.v26-marsh .v26-back{background:#647f75}.v26-marsh .v26-mid{background:#3a6866}.v26-marsh .v26-front{background:#254c4d}
.v26-crypt .v26-sky{background:linear-gradient(#4c5767,#97949b)}.v26-crypt .v26-back{background:#6a666f}.v26-crypt .v26-mid{background:#49444e}.v26-crypt .v26-front{background:#2d303a}
.v26-darkforest .v26-sky{background:linear-gradient(#30494c,#779079)}.v26-darkforest .v26-back{background:#31574a}.v26-darkforest .v26-mid{background:#1b4937}.v26-darkforest .v26-front{background:#102e28}
.v26-fortress .v26-sky{background:linear-gradient(#8597a4,#c3b6a2)}.v26-fortress .v26-back{background:#8a9290}.v26-fortress .v26-mid{background:#5d6665}.v26-fortress .v26-front{background:#343e42}
.v26-wasteland .v26-sky{background:linear-gradient(#9c4c3d,#e6a76b)}.v26-wasteland .v26-back{background:#a55a43}.v26-wasteland .v26-mid{background:#733e38}.v26-wasteland .v26-front{background:#3e2d30}
.v26-pass .v26-sky{background:linear-gradient(#7394ae,#c8d3d5)}.v26-pass .v26-back{background:#b3bfc2}.v26-pass .v26-mid{background:#657b8a}.v26-pass .v26-front{background:#394b57}
.v26-lair .v26-sky{background:linear-gradient(#4d3239,#b4684b)}.v26-lair .v26-back{background:#78525a}.v26-lair .v26-mid{background:#5c3739}.v26-lair .v26-front{background:#282329}
.v26-throne .v26-sky{background:linear-gradient(#27233d,#865e6d)}.v26-throne .v26-back{background:#584459}.v26-throne .v26-mid{background:#3e3049}.v26-throne .v26-front{background:#1e1c2b}
@media(max-width:650px){.v26-region-grid{grid-template-columns:1fr}.v26-atlas{padding:12px}.v26-region-landscape{height:150px}}

/* V27: one contiguous interactive geographic map, never region cards */
.v27-map-shell{margin-top:15px;padding:16px;background:#111f24;border:1px solid #a98d60;border-radius:14px;color:#eadcc0}
.v27-map-header{display:flex;justify-content:space-between;align-items:center;gap:12px;margin:0 2px 12px}.v27-map-header small{color:#c9ad7c;letter-spacing:2px}.v27-map-header h3{font:700 28px Georgia,serif;margin:4px 0;color:#f3e4c4}.v27-map-header p{font-size:13px;margin:0;color:#afbfbb}.v27-map-header>span{white-space:nowrap;color:#d3bd91}
.v27-world.v2-world{min-height:680px!important;aspect-ratio:1200/850;max-height:850px;background:#204958!important;border:8px solid #8c7955!important;border-radius:10px!important;box-shadow:0 14px 35px #0008,inset 0 0 18px #071d24!important}
.v27-world .v27-landscape{position:absolute;inset:0;width:100%;height:100%;z-index:0;pointer-events:none}
.v27-world .v2-node{z-index:5!important;width:100px;min-height:55px;filter:drop-shadow(0 3px 4px #000);cursor:pointer!important}
.v27-world .v2-node-icon{width:32px;height:32px;font-size:14px;background:#263a3b;border:2px solid #d2c09c}.v27-world .v2-node.current .v2-node-icon{background:#a86d32;border-color:#ffe0a0}.v27-world .v2-node.done .v2-node-icon{background:#326a50}.v27-world .v2-node-name{font:700 11px/1.2 Georgia,serif;background:#182b2bea!important;border:1px solid #d7bd8b!important;color:#f9eaca!important;padding:4px 6px;border-radius:5px;max-width:110px}.v27-world .v2-node.locked{opacity:.85}.v27-world .v2-node:focus-visible{outline:3px solid #fff0ac;outline-offset:5px}.v27-map-legend{display:flex;gap:16px;flex-wrap:wrap;font-size:12px;color:#d5c9ad;padding-top:12px}
@media(max-width:650px){.v27-map-shell{padding:7px}.v27-world.v2-world{min-height:560px!important;aspect-ratio:auto}.v27-world .v2-node{width:70px}.v27-world .v2-node-name{font-size:9px;padding:3px}.v27-map-header h3{font-size:22px}.v27-map-header>span{display:none}}

/* V28: hotová ilustrovaná mapa jako podklad; samostatná neviditelná interaktivní vrstva. */
.v28-world.v2-world{position:relative!important;aspect-ratio:3/2!important;min-height:0!important;max-height:none!important;height:auto!important;overflow:hidden!important;border:4px solid #80613b!important;background:#1a2021!important}
.v28-map-image{display:block;position:relative;width:100%;height:auto;pointer-events:none;user-select:none}
.v28-world .v28-hotspot{position:absolute;z-index:10;transform:translate(-50%,-50%);width:7%;height:10%;min-width:28px;min-height:32px;padding:0;border:0;background:transparent;cursor:pointer;border-radius:50%}
.v28-world .v28-hotspot-ring{display:block;position:absolute;inset:18%;border-radius:50%;border:2px solid transparent;transition:background .15s,border-color .15s,box-shadow .15s}
.v28-world .v28-hotspot:hover .v28-hotspot-ring,.v28-world .v28-hotspot:focus-visible .v28-hotspot-ring{background:#f8d87855;border-color:#ffe5a2;box-shadow:0 0 0 5px #ffdf7333}
.v28-world .v28-hotspot:focus-visible{outline:2px solid #fff3c3;outline-offset:2px}
@media(max-width:650px){.v28-world.v2-world{min-height:0!important;aspect-ratio:3/2!important}.v28-world .v28-hotspot{min-width:20px;min-height:20px}}

/* V29: zřetelné a skutečně klikací body, bez překrytí dekoracemi */
.v28-world.v2-world{isolation:isolate!important}
.v28-world .v28-map-image{z-index:0!important}
.v28-world .v28-hotspot{z-index:100!important;display:grid!important;place-items:center!important;pointer-events:auto!important;opacity:1!important;color:#fff5dc!important;touch-action:manipulation}
.v28-world .v28-hotspot-number{position:relative;z-index:2;display:grid;place-items:center;width:25px;height:25px;border-radius:50%;background:#231c15e6;border:2px solid #e8c381;font:bold 14px Georgia,serif;text-shadow:0 1px 3px #000;box-shadow:0 2px 8px #000a;pointer-events:none}
.v28-world .v28-hotspot.current .v28-hotspot-number{background:#966324;border-color:#ffe39a}
.v28-world .v28-hotspot.done .v28-hotspot-number{background:#326949;border-color:#a5e6a6}
.v28-world .v28-hotspot-ring{pointer-events:none}

/* V30: čísla jsou odstraněna z podkladového PNG a kreslí se jen jako HTML tlačítka. */
.v28-world .v28-hotspot-number{width:30px!important;height:30px!important;font-size:15px!important;background:#171711!important;border:2px solid #e6c47d!important}
.v28-world .v28-hotspot.current .v28-hotspot-number{background:#93601e!important}
.v28-world .v28-hotspot.done .v28-hotspot-number{background:#24633d!important}
/* Detail lokace překrývá mapu neprůhlednou clonou; pozadí již neruší čtení. */
.v2-overlay:not([hidden]){background:#070b0f!important;backdrop-filter:none!important}

/* V31: keep clickable labels exactly on the original medallion positions. */
.v28-world .v28-hotspot{animation:none!important;transition:none!important;transform:translate(-50%,-50%)!important}
.v28-world .v28-hotspot-number{animation:none!important;transform:none!important;transition:none!important}

/* V32: popisky kampaně jsou živé HTML prvky, nikoli součást obrázku */
.v28-world .v28-hotspot{overflow:visible!important}
.v28-world .v32-campaign-name{position:absolute;left:50%;top:calc(50% + 20px);transform:translateX(-50%);z-index:5;display:block;white-space:normal;min-width:78px;width:max-content;max-width:150px;padding:5px 8px;background:#130f0ced;border:2px solid #b99b63;border-radius:4px;color:#fff0d3;font:700 clamp(8px,1.2vw,14px)/1.12 Georgia,serif;text-shadow:0 1px 3px #000;box-shadow:0 3px 8px #000b;pointer-events:none}
.v28-world .v28-hotspot:hover .v32-campaign-name{border-color:#ffdf8c}
.v32-dungeon-shell{margin-top:14px;padding:12px;border:1px solid #9f7a46;border-radius:12px;background:#111b22;max-width:640px;margin-inline:auto}
.v32-dungeon-map{position:relative;isolation:isolate;width:100%;aspect-ratio:322/697;border:3px solid #987449;border-radius:8px;overflow:hidden;background:#07121b}
.v32-dungeon-map>img{display:block;width:100%;height:100%;object-fit:fill;pointer-events:none}
.v32-dungeon-pin{position:absolute;z-index:4;transform:translate(-50%,-50%);width:32%;min-width:92px;padding:4px 3px;border:1px solid #d9b66b;border-radius:6px;background:#100f14ed;color:#f8e7bd;display:flex;flex-direction:column;align-items:center;gap:2px;cursor:pointer;box-shadow:0 3px 12px #000c;font-family:Georgia,serif}
.v32-dungeon-dot{width:29px;height:29px;border-radius:50%;display:grid;place-items:center;border:2px solid #efce83;background:#2b241b;font-weight:bold;font-size:16px;margin-top:-18px}
.v32-dungeon-pin strong{font-size:clamp(10px,1.6vw,15px);line-height:1.1}.v32-dungeon-pin small{font:10px Arial,sans-serif;color:#d7c8aa}
.v32-dungeon-pin:hover,.v32-dungeon-pin:focus-visible{border-color:#fff1a6;background:#3d2d23;outline:2px solid #ffd98d}
.v32-dungeon-pin.complete .v32-dungeon-dot{background:#24613b}
@media(max-width:650px){.v28-world .v32-campaign-name{font-size:8px;min-width:52px;max-width:83px;padding:3px}.v32-dungeon-pin{min-width:82px}}

/* V33: nápisy kampaně jsou text hry; podklad neobsahuje staré textové pixely. */
.v28-world .v33-campaign-label{position:absolute;z-index:102;transform:translate(-50%,-50%);color:#f4e4c2;font:bold clamp(7px,1.15vw,15px)/1.05 Georgia,serif;text-shadow:0 1px 3px #000;white-space:nowrap;pointer-events:none}
.v28-world .v33-label-hit{position:absolute;z-index:103;transform:translate(-50%,-50%);width:18%;height:5%;border:0;background:transparent;cursor:pointer}
.v28-world .v33-label-hit:hover{outline:1px solid #e9c477;border-radius:5px}
.v33-dungeon-map .v33-dungeon-location{position:absolute;z-index:10;transform:translate(-50%,-50%);display:flex;flex-direction:column;align-items:center;justify-content:center;min-width:110px;max-width:145px;padding:7px 5px 5px;background:#120f10f2;color:#f9e8c5;border:2px solid #c9a65f;border-radius:7px;cursor:pointer;box-shadow:0 4px 13px #000c;font-family:Georgia,serif}
.v33-dungeon-map .v33-dungeon-location strong{font-size:13px;line-height:1.2}.v33-dungeon-map .v33-dungeon-location small{font-size:10px;margin-top:4px;color:#c8c3b4}.v33-dungeon-map .v33-dungeon-marker{width:28px;height:28px;display:grid;place-items:center;border-radius:50%;border:2px solid #f4d791;background:#32210c;font-weight:bold;font-size:15px;margin-top:-22px;margin-bottom:5px}.v33-dungeon-map .v33-dungeon-location:hover,.v33-dungeon-map .v33-dungeon-location:focus-visible{background:#49301b;border-color:#fff1ad;outline:2px solid #ffdf8c}
@media(max-width:600px){.v33-dungeon-map .v33-dungeon-location{min-width:85px;max-width:100px;padding:5px 3px}.v33-dungeon-map .v33-dungeon-location strong{font-size:10px}.v33-dungeon-map .v33-dungeon-location small{font-size:8px}}

/* V34 – skutečně nové podklady obou map, rozměry podle rozdělených panelů */
.v28-world.v2-world{aspect-ratio:1053/1013!important}
.v32-dungeon-map.v33-dungeon-map{aspect-ratio:463/1013!important}
.v28-world .v28-map-image,.v33-dungeon-map>img{width:100%;height:100%;object-fit:fill}


/* V36 – jediná SVG trasa nad čistým obrazovým podkladem. */
.v36-world.v2-world{position:relative!important;isolation:isolate!important;aspect-ratio:1348/1167!important;min-height:0!important;max-height:none!important;height:auto!important;overflow:hidden!important;border:4px ridge #967047!important;box-shadow:0 16px 45px #000b!important;background:#172322!important}
.v36-world .v28-map-image{display:block!important;position:relative!important;z-index:0!important;width:100%!important;height:auto!important;object-fit:contain!important;pointer-events:none!important;user-select:none!important}
.v36-world.v2-world::before,.v36-world.v2-world::after{display:none!important}
.v36-route-svg{position:absolute;inset:0;z-index:4;width:100%;height:100%;overflow:visible;pointer-events:none!important;}
.v36-route-svg path{fill:none;stroke-linecap:round;stroke-linejoin:round;vector-effect:non-scaling-stroke;pointer-events:none!important}
.v36-route-halo path{stroke:#ff9e27;stroke-width:12;opacity:.85;filter:url(#v36-route-light)}
.v36-route-main path{stroke:#ffe7a7;stroke-width:3.6;stroke-dasharray:7 10;filter:drop-shadow(0 0 2px #ff8400)}
.v36-world .v36-map-node{position:absolute!important;z-index:12!important;left:0;top:0;transform:translate(-50%,-50%)!important;animation:none!important;min-width:32px;min-height:32px;width:42px;height:42px;display:flex!important;align-items:center;justify-content:center;overflow:visible!important;cursor:pointer!important;touch-action:manipulation;background:transparent!important;border:0!important;padding:0!important;color:#fff1d4!important;opacity:1!important;filter:none!important}
.v36-world .v36-node-number{position:relative;z-index:2;display:grid;place-items:center;width:32px;height:32px;flex:0 0 32px;background:#262017;border:3px solid #f4d899;border-radius:50%;box-shadow:0 0 0 3px #17120cb3,0 0 13px #f8b34f;color:#fff8dc;font:bold 16px Georgia,serif;text-shadow:0 1px 2px #000;pointer-events:none}
.v36-world .v36-map-node.current .v36-node-number{background:#9c5d12;border-color:#ffdf78;box-shadow:0 0 0 3px #27150c,0 0 20px #ffd261}
.v36-world .v36-map-node.done .v36-node-number{background:#267343;border-color:#b6f1a7}
.v36-world .v36-node-label{position:absolute;top:calc(50% + 23px);left:50%;transform:translateX(-50%);z-index:4;border:1px solid #d5b17b;border-radius:4px;background:#161712e8;box-shadow:0 3px 8px #000b;padding:4px 6px;min-width:75px;max-width:145px;width:max-content;text-align:center;white-space:normal;line-height:1.06;color:#fff0cc;font:700 clamp(9px,1.25vw,14px)/1.16 Georgia,serif;text-shadow:0 1px 3px #000;pointer-events:none}
.v36-world .v36-map-node:hover .v36-node-number,.v36-world .v36-map-node:focus-visible .v36-node-number{background:#e8a540;color:#231609;box-shadow:0 0 0 5px #fff2bc90,0 0 25px #ffe4a7}
.v36-world .v36-map-node:focus-visible{outline:2px solid #fff4bc;outline-offset:2px}
.v36-world .v36-map-node:nth-of-type(9) .v36-node-label,.v36-world .v36-map-node:nth-of-type(10) .v36-node-label{left:auto;right:4px;transform:none;}
.v36-world .v36-map-node:nth-of-type(7) .v36-node-label{top:calc(50% + 20px)}
@media(max-width:620px){.v36-world .v36-map-node{width:28px;height:28px;min-width:28px;min-height:28px}.v36-world .v36-node-number{width:23px;height:23px;flex-basis:23px;border-width:2px;font-size:11px}.v36-world .v36-node-label{font-size:8px;min-width:44px;max-width:75px;padding:2px 3px;top:calc(50% + 15px)}}

/* V37 — podzemní mapa: stejné oddělení SVG trasy, HTML uzlů a ilustrace jako V36 kampaň. */
.v37-dungeon-shell{max-width:585px!important;margin:14px auto!important;padding:13px!important}
.v37-dungeon-world{position:relative;isolation:isolate;aspect-ratio:463/1013;width:100%;height:auto;overflow:hidden;border:4px ridge #997c50;border-radius:8px;background:#0b131c;box-shadow:0 15px 40px #000b}
.v37-dungeon-world .v37-dungeon-art{display:block;width:100%;height:auto;user-select:none;pointer-events:none;object-fit:contain;filter:brightness(.90)}
.v37-dungeon-svg{position:absolute;inset:0;width:100%;height:100%;z-index:3;overflow:hidden;pointer-events:none!important}
.v37-dungeon-svg path{fill:none;stroke-linecap:round;stroke-linejoin:round;vector-effect:non-scaling-stroke;pointer-events:none!important}
.v37-dungeon-halo path{stroke:#ffa736;stroke-width:11;opacity:.85;filter:url(#v37-dungeon-glow)}
.v37-dungeon-route path{stroke:#ffeab1;stroke-width:3.5;stroke-dasharray:7 10;filter:drop-shadow(0 0 3px #ff9d23)}
.v37-dungeon-node{position:absolute;z-index:12;transform:translate(-50%,-50%)!important;animation:none!important;display:grid;place-items:center;min-width:40px;min-height:40px;width:42px;height:42px;border:0;background:transparent!important;color:#fff2d6;cursor:pointer;touch-action:manipulation;padding:0!important;overflow:visible!important;filter:none!important}
.v37-dungeon-number{position:relative;z-index:2;display:grid;place-items:center;width:34px;height:34px;flex:0 0 34px;border:3px solid #e9c584;border-radius:50%;background:#28201b;box-shadow:0 0 0 3px #17120db8,0 0 16px #edac4c;font:bold 16px Georgia,serif;text-shadow:0 2px 2px #000;pointer-events:none}
.v37-dungeon-node.done .v37-dungeon-number{border-color:#b7eea7;background:#23653b}
.v37-dungeon-label{position:absolute;z-index:5;left:50%;top:calc(50% + 24px);transform:translateX(-50%);min-width:135px;max-width:180px;width:max-content;white-space:normal;padding:6px 8px;text-align:center;border:1px solid #d6b273;border-radius:5px;background:#13151aef;box-shadow:0 4px 11px #000d;color:#fbe8c8;pointer-events:none;font-family:Georgia,serif;line-height:1.2}
.v37-dungeon-label strong{display:block;font-size:clamp(11px,1.5vw,15px);font-weight:700}
.v37-dungeon-label small{display:block;font:10px Arial,sans-serif;color:#d7c49f;margin-top:3px}
.v37-dungeon-node:hover .v37-dungeon-number,.v37-dungeon-node:focus-visible .v37-dungeon-number{background:#bb8027;border-color:#fff0b8;box-shadow:0 0 0 5px #ffe5b471,0 0 25px #ffd581}
.v37-dungeon-node:focus-visible{outline:2px solid #fff2bc;outline-offset:3px}
@media(max-width:550px){.v37-dungeon-node{width:32px;height:32px;min-width:32px;min-height:32px}.v37-dungeon-number{width:26px;height:26px;border-width:2px;font-size:12px}.v37-dungeon-label{top:calc(50% + 18px);min-width:86px;max-width:112px;padding:4px 5px}.v37-dungeon-label strong{font-size:10px}.v37-dungeon-label small{font-size:9px}}

/* V38: čisté ilustrované podzemí, cesta a všechny popisky jsou živé UI prvky. */
.v38-dungeon-shell{max-width:585px!important;margin:14px auto!important;padding:13px!important}
.v38-dungeon-world{position:relative;isolation:isolate;width:100%;aspect-ratio:887/1774;height:auto;overflow:hidden;border:4px ridge #997c50;border-radius:8px;background:#0b131c;box-shadow:0 15px 40px #000b}
.v38-dungeon-art{display:block;width:100%;height:100%;object-fit:fill;user-select:none;pointer-events:none;filter:brightness(.94)}
.v38-dungeon-svg{position:absolute;inset:0;width:100%;height:100%;z-index:3;overflow:hidden;pointer-events:none!important}
.v38-dungeon-svg path{fill:none;stroke-linecap:round;stroke-linejoin:round;vector-effect:non-scaling-stroke;pointer-events:none!important}
.v38-dungeon-halo path{stroke:#ee9e2c;stroke-width:10;opacity:.72;filter:url(#v38-dungeon-glow)}
.v38-dungeon-route path{stroke:#ffebbb;stroke-width:3.5;stroke-dasharray:7 10;filter:drop-shadow(0 0 3px #ff9d23)}
.v38-dungeon-node{position:absolute;z-index:12;transform:translate(-50%,-15%)!important;animation:none!important;display:flex;flex-direction:column;align-items:center;min-width:150px;max-width:195px;width:29%;min-height:67px;padding:0!important;border:0!important;background:transparent!important;color:#fff2d6;cursor:pointer;touch-action:manipulation;overflow:visible!important;filter:none!important}
.v38-dungeon-number{position:relative;z-index:2;display:grid;place-items:center;width:36px;height:36px;min-width:36px;min-height:36px;border:3px solid #e9c584;border-radius:50%;background:#28201b;box-shadow:0 0 0 3px #17120db8,0 0 16px #edac4c;font:bold 17px Georgia,serif;text-shadow:0 2px 2px #000;pointer-events:none}
.v38-dungeon-label{display:flex;flex-direction:column;align-items:center;justify-content:center;width:100%;margin-top:-2px;padding:6px 8px;text-align:center;border:2px solid #d6b273;border-radius:6px;background:linear-gradient(120deg,#13151af7,#21160eea);box-shadow:0 4px 11px #000d;color:#fbe8c8;pointer-events:none;font-family:Georgia,serif;line-height:1.2}
.v38-dungeon-label strong{font-size:clamp(10px,1.5vw,15px);font-weight:700;white-space:normal}
.v38-dungeon-label small{display:block;font:10px Arial,sans-serif;color:#d7c49f;margin-top:3px}
.v38-dungeon-node.done .v38-dungeon-number{border-color:#b7eea7;background:#23653b}
.v38-dungeon-node:hover .v38-dungeon-number,.v38-dungeon-node:focus-visible .v38-dungeon-number{background:#bb8027;border-color:#fff0b8;box-shadow:0 0 0 5px #ffe5b471,0 0 25px #ffd581}
.v38-dungeon-node:hover .v38-dungeon-label,.v38-dungeon-node:focus-visible .v38-dungeon-label{border-color:#fff1ab;background:#3a2415ef}
.v38-dungeon-node:focus-visible{outline:2px solid #fff2bc;outline-offset:3px;border-radius:5px}
@media(max-width:550px){.v38-dungeon-node{min-width:83px;max-width:115px;min-height:47px}.v38-dungeon-number{width:26px;height:26px;min-height:26px;min-width:26px;border-width:2px;font-size:12px}.v38-dungeon-label{padding:3px 5px;border-width:1px}.v38-dungeon-label strong{font-size:10px}.v38-dungeon-label small{font-size:9px}}
