.tmvx{--bg:#050712;--card:rgba(255,255,255,.08);--card2:rgba(255,255,255,.12);--line:rgba(255,255,255,.16);--txt:#f8fafc;--muted:#b6c2d6;--a:#61dafb;--b:#7c3aed;--c:#22c55e;--danger:#fb7185;font-family:-apple-system,BlinkMacSystemFont,"SF Pro Display","Segoe UI",Roboto,Arial,sans-serif;color:var(--txt);box-sizing:border-box}.tmvx *{box-sizing:border-box}.tmvx-shell{position:relative;overflow:hidden;border-radius:34px;padding:28px;background:radial-gradient(circle at 20% 0%,rgba(97,218,251,.22),transparent 32%),radial-gradient(circle at 92% 8%,rgba(124,58,237,.22),transparent 34%),linear-gradient(135deg,#071022,#030712 62%,#07111f);box-shadow:0 28px 90px rgba(0,0,0,.35);isolation:isolate}.tmvx h2,.tmvx h3{margin:0;color:#fff;letter-spacing:-.04em}.tmvx p{color:var(--muted)}.tmvx-hero{position:relative;min-height:340px;padding:42px;border:1px solid var(--line);border-radius:30px;background:linear-gradient(135deg,rgba(255,255,255,.10),rgba(255,255,255,.035));overflow:hidden;display:grid;grid-template-columns:1.05fr .95fr;gap:26px;align-items:center;box-shadow:inset 0 1px 0 rgba(255,255,255,.18)}.tmvx-hero:before{content:"";position:absolute;inset:-1px;background:linear-gradient(115deg,transparent 0 30%,rgba(255,255,255,.2) 43%,transparent 58%);transform:translateX(-90%);animation:tmvxSweep 7s ease-in-out infinite;pointer-events:none}.tmvx-aurora,.tmvx-grid-glow,.tmvx-scanline,.tmvx-orb{position:absolute;pointer-events:none}.tmvx-aurora{inset:-40%;background:conic-gradient(from 120deg,rgba(97,218,251,.08),rgba(124,58,237,.18),rgba(34,197,94,.12),rgba(97,218,251,.08));filter:blur(34px);animation:tmvxRotate 24s linear infinite}.tmvx-grid-glow{inset:0;background-image:linear-gradient(rgba(255,255,255,.055) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.055) 1px,transparent 1px);background-size:46px 46px;mask-image:radial-gradient(circle at 60% 45%,black,transparent 72%)}.tmvx-scanline{inset:0;background:linear-gradient(to bottom,transparent,rgba(255,255,255,.08),transparent);height:34%;animation:tmvxScan 6s ease-in-out infinite}.tmvx-orb{width:210px;height:210px;border-radius:999px;background:radial-gradient(circle,rgba(97,218,251,.35),transparent 62%);filter:blur(8px)}.tmvx-orb-a{right:16%;top:-70px}.tmvx-orb-b{right:-45px;bottom:-60px;background:radial-gradient(circle,rgba(124,58,237,.35),transparent 62%)}.tmvx-hero-copy,.tmvx-device{position:relative;z-index:1}.tmvx-eyebrow{display:inline-flex;align-items:center;gap:8px;text-transform:uppercase;font-size:11px;letter-spacing:.16em;color:#93c5fd;font-weight:800}.tmvx-hero h2{font-size:clamp(36px,6vw,72px);line-height:.92;max-width:740px}.tmvx-hero p{font-size:17px;line-height:1.65;max-width:640px}.tmvx-hero-pills{display:flex;flex-wrap:wrap;gap:10px;margin-top:22px}.tmvx-hero-pills span,.tmvx-chip-select button,.tmvx-live-actions button,.tmvx-map-view-controls button{border:1px solid rgba(255,255,255,.16);background:rgba(255,255,255,.08);color:#fff;border-radius:999px;padding:10px 13px;backdrop-filter:blur(14px)}.tmvx-device{min-height:250px;border:1px solid rgba(255,255,255,.18);border-radius:28px;background:linear-gradient(145deg,rgba(255,255,255,.18),rgba(255,255,255,.05));box-shadow:0 32px 80px rgba(0,0,0,.36),inset 0 1px rgba(255,255,255,.3);transform:perspective(900px) rotateY(-10deg) rotateX(5deg);overflow:hidden}.tmvx-device-top{height:44px;border-bottom:1px solid rgba(255,255,255,.12);display:flex;align-items:center;gap:8px;padding:0 16px;color:#c7d2fe}.tmvx-device-top i{width:10px;height:10px;border-radius:99px;background:#fb7185}.tmvx-device-top i:nth-child(2){background:#fbbf24}.tmvx-device-top i:nth-child(3){background:#34d399}.tmvx-device-screen{position:absolute;inset:44px 0 0;display:grid;place-items:center}.tmvx-radar{position:relative;width:150px;height:150px;border:1px solid rgba(125,211,252,.35);border-radius:50%;background:radial-gradient(circle,rgba(125,211,252,.16),transparent 65%)}.tmvx-radar:before{content:"";position:absolute;inset:50% 0 0 50%;background:linear-gradient(45deg,rgba(125,211,252,.75),transparent);transform-origin:0 0;animation:tmvxRotate 3s linear infinite}.tmvx-radar b{position:absolute;inset:20px;border:1px solid rgba(255,255,255,.12);border-radius:50%}.tmvx-radar b:nth-child(2){inset:46px}.tmvx-radar b:nth-child(3){inset:68px}.tmvx-device-copy{position:absolute;left:24px;bottom:22px}.tmvx-device-copy span{color:#93c5fd}.tmvx-device-copy strong{display:block;font-size:24px}.tmvx-mini-bars{position:absolute;right:28px;bottom:28px;display:flex;align-items:end;gap:7px}.tmvx-mini-bars i{width:8px;border-radius:6px;background:linear-gradient(#67e8f9,#2563eb);animation:tmvxBars 1.6s ease-in-out infinite}.tmvx-mini-bars i:nth-child(1){height:36px}.tmvx-mini-bars i:nth-child(2){height:62px;animation-delay:.1s}.tmvx-mini-bars i:nth-child(3){height:44px;animation-delay:.2s}.tmvx-mini-bars i:nth-child(4){height:78px;animation-delay:.3s}.tmvx-mini-bars i:nth-child(5){height:52px;animation-delay:.4s}.tmvx-premium-strip{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin:18px 0}.tmvx-premium-strip>div{padding:18px;border:1px solid var(--line);border-radius:24px;background:rgba(255,255,255,.06);backdrop-filter:blur(16px)}.tmvx-premium-strip span{color:#67e8f9;font-weight:900}.tmvx-premium-strip strong{display:block;font-size:20px}.tmvx-premium-strip small{color:var(--muted)}.tmvx-tabs{display:flex;gap:10px;padding:8px;margin:20px 0;border:1px solid var(--line);border-radius:999px;background:rgba(255,255,255,.06);width:max-content;max-width:100%;overflow:auto}.tmvx-tabs button{border:0;border-radius:999px;padding:13px 18px;background:transparent;color:#cbd5e1;font-weight:800;cursor:pointer}.tmvx-tabs button.is-active{background:#fff;color:#071022;box-shadow:0 10px 34px rgba(125,211,252,.25)}.tmvx-tab-panel{display:none}.tmvx-tab-panel.is-active{display:block}.tmvx-module{position:relative;margin-top:18px;border:1px solid var(--line);border-radius:30px;padding:22px;background:rgba(255,255,255,.075);box-shadow:inset 0 1px rgba(255,255,255,.13);backdrop-filter:blur(20px)}.tmvx-searchbar,.tmvx-filter-grid{display:flex;gap:12px;align-items:center;flex-wrap:wrap}.tmvx-filter-grid{display:grid;grid-template-columns:repeat(6,minmax(0,1fr))}.tmvx-input-wrap{position:relative;flex:1;min-width:240px}.tmvx-input-wrap span{position:absolute;left:16px;top:50%;transform:translateY(-50%);color:#93c5fd}.tmvx input,.tmvx select{width:100%;height:48px;border:1px solid rgba(255,255,255,.16);background:rgba(2,6,23,.55);color:#fff;border-radius:16px;padding:0 15px}.tmvx-input-wrap input{padding-left:42px}.tmvx button{cursor:pointer}.tmvx-searchbar>button,.tmvx-filter-grid button,.tmvx-btn-ghost{height:48px;border:0;border-radius:16px;padding:0 18px;font-weight:900;background:linear-gradient(135deg,#67e8f9,#2563eb);color:#04111f}.tmvx-btn-ghost{background:rgba(255,255,255,.08)!important;color:#fff!important;border:1px solid var(--line)!important}.tmvx-chip-select{display:flex;gap:8px;flex-wrap:wrap}.tmvx-chip-select button{height:40px}.tmvx-chip-select button.is-active{background:#fff;color:#071022}.tmvx-kpi-row{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin:18px 0}.tmvx-kpi{padding:16px;border:1px solid var(--line);border-radius:22px;background:linear-gradient(145deg,rgba(255,255,255,.12),rgba(255,255,255,.05))}.tmvx-kpi strong{display:block;font-size:28px}.tmvx-kpi span{color:var(--muted);font-size:13px}.tmvx-results{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px}.tmvx-card{position:relative;overflow:hidden;border:1px solid var(--line);border-radius:24px;padding:18px;background:linear-gradient(145deg,rgba(255,255,255,.13),rgba(255,255,255,.045));box-shadow:0 16px 36px rgba(0,0,0,.18);transition:transform .28s ease,border-color .28s ease}.tmvx-card:hover{transform:translateY(-6px);border-color:rgba(125,211,252,.55)}.tmvx-card:before{content:"";position:absolute;inset:0;background:radial-gradient(circle at var(--mx,50%) var(--my,0%),rgba(125,211,252,.18),transparent 32%);opacity:.85;pointer-events:none}.tmvx-card h3{position:relative;font-size:21px}.tmvx-card p,.tmvx-card div{position:relative}.tmvx-badges{display:flex;flex-wrap:wrap;gap:6px;margin:12px 0}.tmvx-badge{border:1px solid rgba(125,211,252,.2);background:rgba(14,165,233,.12);border-radius:999px;padding:6px 9px;color:#dff7ff;font-size:12px}.tmvx-card-links{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px}.tmvx-card-links a{color:#fff;text-decoration:none;border:1px solid var(--line);border-radius:999px;padding:8px 10px;background:rgba(255,255,255,.08)}.tmvx-skeleton{height:170px;border-radius:24px;background:linear-gradient(90deg,rgba(255,255,255,.06),rgba(255,255,255,.15),rgba(255,255,255,.06));background-size:240% 100%;animation:tmvxShimmer 1.25s linear infinite}.tmvx-pagination{display:flex;gap:8px;margin-top:16px}.tmvx-pagination button{border:1px solid var(--line);background:rgba(255,255,255,.08);color:#fff;border-radius:12px;padding:9px 12px}.tmvx-pagination button.is-active{background:#fff;color:#071022}.tmvx-chart-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-top:18px}.tmvx-chart-card{border:1px solid var(--line);border-radius:24px;padding:18px;background:rgba(255,255,255,.06)}.tmvx-chart-wide{grid-column:1/-1}.tmvx-bar{display:flex;align-items:center;gap:12px;margin:11px 0}.tmvx-bar span{width:160px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#cbd5e1}.tmvx-bar i{height:14px;border-radius:999px;background:linear-gradient(90deg,#67e8f9,#2563eb);min-width:4px;animation:tmvxGrow .8s ease-out both}.tmvx-donut{width:190px;height:190px;margin:18px auto;border-radius:50%;background:conic-gradient(#67e8f9 var(--p,55%),rgba(255,255,255,.1) 0);display:grid;place-items:center}.tmvx-donut:after{content:attr(data-label);width:120px;height:120px;border-radius:50%;background:#071022;display:grid;place-items:center;color:#fff;font-weight:900}.tmvx-table-wrap{overflow:auto}.tmvx table{width:100%;border-collapse:collapse;color:#fff}.tmvx td,.tmvx th{border-bottom:1px solid rgba(255,255,255,.11);padding:12px;text-align:left}.tmvx-safe-notice{padding:18px;border-radius:18px;background:#fff3cd;color:#7a4b00}.tmvx-safe-notice p{color:#7a4b00;margin-bottom:0}.tmvx-live-module{padding:0;overflow:hidden;background:#030712}.tmvx-live-toolbar{display:flex;align-items:center;justify-content:space-between;gap:18px;padding:22px;border-bottom:1px solid var(--line);background:linear-gradient(135deg,rgba(255,255,255,.12),rgba(255,255,255,.04))}.tmvx-live-title h3{font-size:30px}.tmvx-live-title p{margin:.35rem 0 0}.tmvx-live-actions{display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-end}.tmvx-live-layout{display:grid;grid-template-columns:minmax(0,1fr) 360px;min-height:650px}.tmvx-live-stage{position:relative;overflow:hidden;background:#07111f;cursor:grab}.tmvx-live-stage:active{cursor:grabbing}.tmvx-live-tiles{position:absolute;inset:0;transform-origin:0 0}.tmvx-live-tile{position:absolute;width:256px;height:256px;object-fit:cover;filter:saturate(.95) contrast(1.02) brightness(.82)}.tmvx-live-overlay{position:absolute;inset:0;pointer-events:none}.tmvx-live-building{position:absolute;pointer-events:auto;border:1px solid rgba(125,211,252,.45);background:linear-gradient(135deg,rgba(103,232,249,.56),rgba(37,99,235,.46));color:#fff;border-radius:14px;box-shadow:0 18px 48px rgba(34,211,238,.22),inset 0 1px rgba(255,255,255,.42);transform:translate(-50%,-50%) rotateX(62deg) rotateZ(-18deg);transform-style:preserve-3d;display:grid;place-items:center;text-align:center;font-weight:900;letter-spacing:-.03em;min-width:92px;min-height:52px;padding:9px;transition:transform .25s ease,filter .25s ease;animation:tmvxFloat 4s ease-in-out infinite}.tmvx-live-building:before{content:"";position:absolute;left:7px;right:-12px;top:100%;height:var(--h,28px);background:linear-gradient(90deg,rgba(14,116,144,.7),rgba(15,23,42,.9));transform:skewX(-28deg);transform-origin:top;z-index:-1;border-radius:0 0 12px 12px}.tmvx-live-building:after{content:"";position:absolute;inset:-18px;border-radius:24px;background:radial-gradient(circle,rgba(103,232,249,.35),transparent 66%);z-index:-2;animation:tmvxPulse 2.5s ease-in-out infinite}.tmvx-live-building:hover,.tmvx-live-building.is-active{filter:brightness(1.25);transform:translate(-50%,-56%) rotateX(62deg) rotateZ(-18deg) scale(1.08)}.tmvx-live-building small{display:block;font-size:10px;color:#e0f2fe;font-weight:700}.tmvx-live-panel{border-left:1px solid var(--line);padding:24px;background:linear-gradient(180deg,rgba(255,255,255,.12),rgba(255,255,255,.04));backdrop-filter:blur(20px)}.tmvx-live-panel h3{font-size:30px}.tmvx-panel-micro{display:flex;gap:10px;margin-top:18px;padding:14px;border:1px solid var(--line);border-radius:18px;background:rgba(255,255,255,.06);color:#dbeafe}.tmvx-panel-micro i{width:12px;height:12px;border-radius:50%;background:#67e8f9;box-shadow:0 0 18px #67e8f9;flex:0 0 auto;margin-top:3px}.tmvx-live-atmosphere{position:absolute;inset:0;pointer-events:none;background:radial-gradient(circle at 50% 45%,transparent 25%,rgba(3,7,18,.36) 70%)}.tmvx-live-atmosphere i{position:absolute;width:260px;height:260px;border-radius:50%;background:radial-gradient(circle,rgba(125,211,252,.16),transparent 65%);filter:blur(12px);animation:tmvxFloat 8s ease-in-out infinite}.tmvx-live-atmosphere i:nth-child(1){left:10%;top:12%}.tmvx-live-atmosphere i:nth-child(2){right:10%;top:28%;animation-delay:1s}.tmvx-live-atmosphere i:nth-child(3){left:42%;bottom:6%;animation-delay:2s}.tmvx-live-hud{position:absolute;left:18px;top:18px;padding:14px 16px;border:1px solid rgba(255,255,255,.16);border-radius:18px;background:rgba(2,6,23,.72);backdrop-filter:blur(18px);box-shadow:0 18px 46px rgba(0,0,0,.25)}.tmvx-live-hud strong{display:block}.tmvx-live-hud span,.tmvx-live-hud small{display:block;color:#cbd5e1}.tmvx-live-attribution{position:absolute;right:12px;bottom:10px;background:rgba(255,255,255,.82);color:#111827;border-radius:8px;padding:4px 7px;font-size:11px}.tmvx-live-fallback{margin:16px;border:1px solid var(--line);border-radius:18px;padding:12px;background:rgba(255,255,255,.06)}.tmvx-map-layout{display:grid;grid-template-columns:1fr 340px;gap:16px}.tmvx-map-stage{position:relative;min-height:560px;border-radius:24px;overflow:hidden;background:#020617}.tmvx-map-viewport{transition:transform .4s ease}.tmvx-svg-map{width:100%;height:auto;display:block}.tmvx-map-panel{padding:20px;border:1px solid var(--line);border-radius:24px;background:rgba(255,255,255,.07)}.tmvx-zone{cursor:pointer}.tmvx-face-top{fill:url(#tmvxTop);stroke:rgba(255,255,255,.5)}.tmvx-face-front{fill:#0f3674}.tmvx-face-right{fill:#082a5c}.tmvx-building-pulse{fill:url(#tmvxPulse);opacity:.32}.tmvx-iso-road{fill:none;stroke:rgba(255,255,255,.16);stroke-width:10;stroke-linecap:round}.tmvx-iso-road.major{stroke:rgba(125,211,252,.2);stroke-width:14}.tmvx-iso-districts path{fill:rgba(255,255,255,.035);stroke:rgba(255,255,255,.07)}.tmvx-iso-building text{fill:#fff;text-anchor:middle;dominant-baseline:middle;pointer-events:none;font-weight:900}.tmvx-map-glow{fill:rgba(56,189,248,.13)}.tmvx-starfield circle{fill:#fff}.tmvx-compass circle{fill:rgba(255,255,255,.06);stroke:rgba(255,255,255,.18)}.tmvx-compass path{fill:#67e8f9}.tmvx-compass text{fill:#fff;text-anchor:middle;font-weight:900}.tmvx-map-labels text{fill:#dbeafe;font-size:18px;font-weight:900;opacity:.75}.tmvx-error{padding:14px;border-radius:16px;background:rgba(251,113,133,.14);border:1px solid rgba(251,113,133,.32);color:#fecdd3}.tmvx-empty{padding:18px;border-radius:18px;background:rgba(255,255,255,.06);border:1px solid var(--line);color:#dbeafe}@keyframes tmvxRotate{to{transform:rotate(360deg)}}@keyframes tmvxScan{0%,100%{transform:translateY(-120%)}50%{transform:translateY(260%)}}@keyframes tmvxSweep{0%,35%{transform:translateX(-90%)}65%,100%{transform:translateX(90%)}}@keyframes tmvxBars{50%{transform:scaleY(.55)}}@keyframes tmvxShimmer{to{background-position:-240% 0}}@keyframes tmvxGrow{from{width:0}}@keyframes tmvxFloat{50%{translate:0 -8px}}@keyframes tmvxPulse{50%{opacity:.45;transform:scale(1.08)}}@media (max-width:1000px){.tmvx-hero,.tmvx-live-layout,.tmvx-map-layout{grid-template-columns:1fr}.tmvx-device{display:none}.tmvx-premium-strip,.tmvx-results,.tmvx-kpi-row,.tmvx-chart-grid{grid-template-columns:1fr 1fr}.tmvx-live-panel{border-left:0;border-top:1px solid var(--line)}.tmvx-filter-grid{grid-template-columns:1fr 1fr}.tmvx-live-layout{min-height:auto}.tmvx-live-stage{min-height:520px}}@media (max-width:680px){.tmvx-shell{padding:14px;border-radius:22px}.tmvx-hero{padding:24px;border-radius:22px}.tmvx-premium-strip,.tmvx-results,.tmvx-kpi-row,.tmvx-chart-grid,.tmvx-filter-grid{grid-template-columns:1fr}.tmvx-tabs{width:100%;border-radius:20px}.tmvx-live-toolbar{align-items:flex-start;flex-direction:column}.tmvx-live-stage{min-height:430px}.tmvx-live-building{min-width:78px;font-size:12px}.tmvx-hero h2{font-size:38px}}

/* v2.0 premium SVG map */
.tmvx-map-module{background:linear-gradient(180deg,rgba(255,255,255,.10),rgba(255,255,255,.06));}
.tmvx-map-stage{background:linear-gradient(180deg,#f8fafc,#eef2f7);border:1px solid rgba(255,255,255,.28);box-shadow:inset 0 1px 0 rgba(255,255,255,.5),0 18px 54px rgba(15,23,42,.18)}
.tmvx-map-stage:before{content:"";position:absolute;inset:14px;border-radius:18px;pointer-events:none;border:1px solid rgba(255,255,255,.5)}
.tmvx-map-stage-hud{position:absolute;left:18px;top:18px;z-index:4;padding:12px 14px;border-radius:16px;background:rgba(255,255,255,.72);backdrop-filter:blur(10px);box-shadow:0 12px 28px rgba(15,23,42,.12)}
.tmvx-map-stage-hud span{display:block;font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:#475569;font-weight:800}
.tmvx-map-stage-hud strong{display:block;font-size:20px;color:#0f172a}
.tmvx-map-stage-hud small{display:block;color:#64748b}
.tmvx-map-viewport{transform-origin:0 0;will-change:transform;cursor:grab}
.tmvx-map-viewport:active{cursor:grabbing}
.tmvx-svg-map-plan{filter:drop-shadow(0 30px 40px rgba(148,163,184,.24))}
.tmvx-map-panel{background:linear-gradient(180deg,rgba(255,255,255,.18),rgba(255,255,255,.08));backdrop-filter:blur(18px);box-shadow:0 18px 40px rgba(2,6,23,.16)}
.tmvx-map-legend{display:grid;grid-template-columns:1fr;gap:10px;margin:16px 0 18px}
.tmvx-map-legend div{display:flex;align-items:center;gap:10px;padding:10px 12px;border:1px solid rgba(255,255,255,.14);border-radius:14px;background:rgba(255,255,255,.08)}
.tmvx-map-legend i{display:block;width:16px;height:16px;border-radius:5px;box-shadow:inset 0 1px 0 rgba(255,255,255,.45),0 4px 10px rgba(15,23,42,.14)}
.tmvx-map-legend i.fish{background:#2d8ac7}.tmvx-map-legend i.fruits{background:#59a84d}.tmvx-map-legend i.meat{background:#c53951}.tmvx-map-legend i.ctm{background:#8f98a6}.tmvx-map-legend i.services{background:#d99dc0}
.tmvx-map-perimeter{stroke:#eef2f7;stroke-width:8}
.tmvx-land-edge{stroke:rgba(255,255,255,.75);stroke-width:6;filter:url(#tmvxSoftGlow)}
.tmvx-road{fill:none;stroke-linecap:round;stroke-linejoin:round}
.tmvx-road-major{stroke:#b0bac8;stroke-width:34}.tmvx-road-major+*{}
.tmvx-road-secondary{stroke:#ffffff;stroke-width:14}.tmvx-road-tertiary{stroke:#ffffff;stroke-width:10;opacity:.92}
.tmvx-roundabout{fill:#ffffff;stroke:#b9c4d2;stroke-width:6}
.tmvx-map-title text{font-family:-apple-system,BlinkMacSystemFont,"SF Pro Display","Segoe UI",Roboto,Arial,sans-serif;font-size:54px;font-weight:300;letter-spacing:-.04em;fill:#2d66a7}
.tmvx-parkings rect{fill:#5aa7dd;stroke:#fff;stroke-width:3}.tmvx-parkings text{font-size:16px;font-weight:800;fill:#fff;text-anchor:middle}
.tmvx-plan-block rect{stroke:rgba(255,255,255,.9);stroke-width:3;transition:transform .28s ease,filter .28s ease,stroke .28s ease}
.tmvx-plan-block text{fill:#fff;font-weight:800;text-anchor:middle;dominant-baseline:middle;pointer-events:none;letter-spacing:.01em}
.tmvx-plan-block.is-active rect,.tmvx-plan-block:hover rect{stroke:#0f172a;filter:brightness(1.06)}
.tmvx-plan-block.is-active{filter:drop-shadow(0 12px 20px rgba(15,23,42,.22))}
.tmvx-plan-block.is-fish rect{fill:#2d8ac7}.tmvx-plan-block.is-acts_fish rect{fill:#6db7ea}.tmvx-plan-block.is-fruits rect{fill:#56a94d}.tmvx-plan-block.is-fruits2 rect{fill:#96bf44}.tmvx-plan-block.is-meat rect{fill:#c53951}.tmvx-plan-block.is-cold rect{fill:#745189}.tmvx-plan-block.is-purchase rect{fill:#a882b0}.tmvx-plan-block.is-logistics rect{fill:#e7b1cf}.tmvx-plan-block.is-cash rect{fill:#df6f97}.tmvx-plan-block.is-hotel rect{fill:#d89400}.tmvx-plan-block.is-commercial rect{fill:#5cb6b8}.tmvx-plan-block.is-other rect{fill:#ead05d;color:#0f172a}.tmvx-plan-block.is-other text{fill:#304155}.tmvx-plan-block.is-parking rect{fill:#b9bec7}.tmvx-plan-block.is-misc rect{fill:#ebce59}.tmvx-plan-block.is-ctm rect{fill:#8f98a6}.tmvx-plan-block.is-ctmoutline rect{fill:rgba(143,152,166,.12);stroke:#8f98a6;stroke-width:4;stroke-dasharray:8 8}.tmvx-plan-block.is-ctmoutline text{fill:#0f172a;font-size:32px;font-weight:900}
.tmvx-area-labels text{font-size:18px;font-weight:800;fill:#255d2b;opacity:.86}
.tmvx-site-labels text{font-size:16px;font-weight:700;fill:#6b7280}
@media (max-width:1000px){.tmvx-map-stage-hud{position:static;margin:10px 10px 0}.tmvx-map-viewport{overflow:auto}.tmvx-map-legend{grid-template-columns:1fr 1fr}}


/* v2.1 official image map premium layer */
.tmvx-map-stage-image{
  background:#f8fafc;
  min-height:auto;
  aspect-ratio:1216/832;
  border-radius:28px;
  overflow:hidden;
}
.tmvx-map-stage-image:after{
  content:"";
  position:absolute;
  inset:0;
  pointer-events:none;
  background:
    radial-gradient(circle at 22% 18%,rgba(59,130,246,.18),transparent 32%),
    radial-gradient(circle at 66% 60%,rgba(34,197,94,.14),transparent 28%),
    linear-gradient(120deg,rgba(255,255,255,.18),transparent 45%,rgba(255,255,255,.16));
  mix-blend-mode:multiply;
  opacity:.75;
}
.tmvx-map-image-viewport{
  position:relative;
  width:100%;
  height:100%;
  transform-origin:0 0;
}
.tmvx-map-base-image{
  display:block;
  width:100%;
  height:100%;
  object-fit:contain;
  border-radius:28px;
  user-select:none;
  -webkit-user-drag:none;
}
.tmvx-map-image-layer{
  position:absolute;
  inset:0;
  z-index:3;
  pointer-events:none;
}
.tmvx-map-hotspot{
  position:absolute;
  border:1px solid rgba(255,255,255,.85);
  border-radius:14px;
  background:rgba(37,99,235,.16);
  color:#fff;
  pointer-events:auto;
  box-shadow:
    0 12px 35px rgba(15,23,42,.18),
    inset 0 1px 0 rgba(255,255,255,.45);
  backdrop-filter:blur(2px);
  cursor:pointer;
  transform:translateZ(0);
  transition:transform .26s ease, box-shadow .26s ease, background .26s ease, border-color .26s ease, opacity .26s ease;
  animation:tmvxHotspotIn .72s ease both;
}
.tmvx-map-hotspot:before{
  content:"";
  position:absolute;
  inset:-7px;
  border-radius:18px;
  border:1px solid currentColor;
  opacity:.14;
  animation:tmvxHotspotPulse 2.2s ease-in-out infinite;
}
.tmvx-map-hotspot span{
  position:absolute;
  left:50%;
  top:50%;
  transform:translate(-50%,-50%);
  display:inline-flex;
  align-items:center;
  justify-content:center;
  min-width:max-content;
  padding:7px 11px;
  border-radius:999px;
  background:rgba(2,6,23,.76);
  color:#fff;
  font-size:12px;
  line-height:1;
  font-weight:900;
  text-shadow:0 1px 2px rgba(0,0,0,.35);
  box-shadow:0 10px 22px rgba(15,23,42,.22);
}
.tmvx-map-hotspot:hover,
.tmvx-map-hotspot.is-active{
  transform:translateY(-3px) scale(1.03);
  background:rgba(14,165,233,.26);
  border-color:#fff;
  box-shadow:
    0 22px 46px rgba(15,23,42,.25),
    0 0 0 5px rgba(255,255,255,.18),
    inset 0 1px 0 rgba(255,255,255,.7);
  z-index:5;
}
.tmvx-map-hotspot.is-fish{color:#2196d3;background:rgba(45,138,199,.22)}
.tmvx-map-hotspot.is-fruits{color:#43a047;background:rgba(86,169,77,.22)}
.tmvx-map-hotspot.is-meat{color:#c53951;background:rgba(197,57,81,.22)}
.tmvx-map-hotspot.is-ctm{color:#667080;background:rgba(102,112,128,.22)}
.tmvx-map-hotspot.is-logistics{color:#e7b1cf;background:rgba(231,177,207,.22)}
.tmvx-map-hotspot.is-services{color:#d9b64f;background:rgba(234,208,93,.24)}
.tmvx-map-hotspot.is-commercial{color:#4db6b4;background:rgba(92,182,184,.22)}
.tmvx-map-hotspot.is-hotel{color:#d89400;background:rgba(216,148,0,.23)}
.tmvx-map-hotspot.is-cold{color:#745189;background:rgba(116,81,137,.24)}
.tmvx-map-hotspot.is-purchase{color:#a882b0;background:rgba(168,130,176,.24)}
.tmvx-map-hotspot.is-cash{color:#df6f97;background:rgba(223,111,151,.24)}
.tmvx-map-hotspot.is-horto{color:#96bf44;background:rgba(150,191,68,.24)}
.tmvx-map-hotspot.is-parking{color:#8f98a6;background:rgba(143,152,166,.24)}
.tmvx-map-stage-image .tmvx-map-stage-hud{
  background:rgba(255,255,255,.78);
  color:#0f172a;
}
.tmvx-map-stage-image .tmvx-map-stage-hud strong{color:#0f172a}
.tmvx-map-stage-image .tmvx-map-stage-hud small{color:#475569}
@keyframes tmvxHotspotPulse{50%{opacity:.34;transform:scale(1.035)}}
@keyframes tmvxHotspotIn{from{opacity:0;transform:translateY(8px) scale(.96)}to{opacity:1;transform:none}}
@media (max-width:1000px){
  .tmvx-map-stage-image{min-height:420px;aspect-ratio:auto}
  .tmvx-map-base-image{object-fit:contain}
  .tmvx-map-hotspot span{font-size:10px;padding:6px 8px}
}


/* ==========================================================
   TMVX v3.0 — Clean Editorial UI
   Dirección visual: limpio, cuadrado, bordes 1px, iconografía fina,
   color principal corporativo #003366.
   ========================================================== */

.tmvx{
  --tmvx-primary:#003366;
  --tmvx-primary-2:#004a8f;
  --tmvx-ink:#20282f;
  --tmvx-text:#26313a;
  --tmvx-muted:#66727d;
  --tmvx-soft:#f6f7f8;
  --tmvx-soft-2:#eef2f5;
  --tmvx-line:#d9dee3;
  --tmvx-line-strong:#c8d0d8;
  --tmvx-white:#ffffff;
  --tmvx-success:#688c77;
  --tmvx-warning:#b68b37;
  --tmvx-danger:#a84a5a;
  font-family:-apple-system,BlinkMacSystemFont,"SF Pro Display","SF Pro Text","Segoe UI",Roboto,Arial,sans-serif!important;
  color:var(--tmvx-text)!important;
  letter-spacing:-.01em;
}

.tmvx *,
.tmvx *:before,
.tmvx *:after{
  box-sizing:border-box;
}

.tmvx-shell{
  border-radius:0!important;
  padding:0!important;
  background:#fff!important;
  color:var(--tmvx-text)!important;
  box-shadow:none!important;
  border:1px solid var(--tmvx-line)!important;
  overflow:hidden!important;
  isolation:isolate;
}

.tmvx h2,
.tmvx h3{
  color:var(--tmvx-ink)!important;
  letter-spacing:-.045em!important;
  font-weight:500!important;
}

.tmvx p{
  color:var(--tmvx-muted)!important;
  line-height:1.7!important;
}

/* Hero limpio */
.tmvx-hero{
  min-height:0!important;
  display:grid!important;
  grid-template-columns:1.05fr .95fr!important;
  gap:0!important;
  align-items:stretch!important;
  padding:0!important;
  border:0!important;
  border-bottom:1px solid var(--tmvx-line)!important;
  border-radius:0!important;
  background:#fff!important;
  box-shadow:none!important;
  overflow:hidden!important;
}

.tmvx-hero:before,
.tmvx-aurora,
.tmvx-grid-glow,
.tmvx-scanline,
.tmvx-orb{
  display:none!important;
}

.tmvx-hero-copy{
  padding:76px 72px 68px!important;
  position:relative!important;
}

.tmvx-eyebrow{
  color:var(--tmvx-primary)!important;
  font-size:11px!important;
  letter-spacing:.18em!important;
  font-weight:700!important;
  text-transform:uppercase!important;
}

.tmvx-hero h2{
  font-size:clamp(38px,5vw,68px)!important;
  line-height:1.02!important;
  max-width:760px!important;
  margin:18px 0 22px!important;
}

.tmvx-hero p{
  font-size:18px!important;
  max-width:620px!important;
  margin:0!important;
}

.tmvx-hero-pills{
  display:flex!important;
  flex-wrap:wrap!important;
  gap:0!important;
  margin-top:36px!important;
  border-top:1px solid var(--tmvx-line)!important;
  border-left:1px solid var(--tmvx-line)!important;
  width:max-content!important;
  max-width:100%!important;
}

.tmvx-hero-pills span{
  border:0!important;
  border-right:1px solid var(--tmvx-line)!important;
  border-bottom:1px solid var(--tmvx-line)!important;
  border-radius:0!important;
  background:#fff!important;
  color:var(--tmvx-primary)!important;
  padding:12px 16px!important;
  font-size:13px!important;
  font-weight:600!important;
  backdrop-filter:none!important;
}

/* Panel derecho tipo gráfico/editorial */
.tmvx-device{
  min-height:360px!important;
  border:0!important;
  border-left:1px solid var(--tmvx-line)!important;
  border-radius:0!important;
  background:#f8f9fa!important;
  box-shadow:none!important;
  transform:none!important;
  overflow:hidden!important;
}

.tmvx-device-top{
  height:50px!important;
  border-bottom:1px solid var(--tmvx-line)!important;
  color:var(--tmvx-muted)!important;
  background:#fff!important;
}

.tmvx-device-top i{
  width:8px!important;
  height:8px!important;
  border-radius:50%!important;
  background:transparent!important;
  border:1px solid var(--tmvx-primary)!important;
}

.tmvx-device-top span{
  color:var(--tmvx-muted)!important;
  font-size:13px!important;
}

.tmvx-device-screen{
  inset:50px 0 0!important;
  padding:42px!important;
  display:grid!important;
  grid-template-columns:1fr 1fr!important;
  gap:28px!important;
  align-items:center!important;
}

.tmvx-radar{
  width:146px!important;
  height:146px!important;
  border:1px solid var(--tmvx-line-strong)!important;
  background:#fff!important;
  border-radius:50%!important;
}

.tmvx-radar:before{
  background:linear-gradient(45deg,rgba(0,51,102,.22),transparent)!important;
  animation:tmvxRotate 8s linear infinite!important;
}

.tmvx-radar b{
  border-color:var(--tmvx-line)!important;
}

.tmvx-radar em{
  position:absolute;
  left:50%;
  top:50%;
  width:9px;
  height:9px;
  margin:-4px 0 0 -4px;
  border-radius:50%;
  background:var(--tmvx-primary);
}

.tmvx-device-copy{
  position:static!important;
}

.tmvx-device-copy span{
  color:var(--tmvx-primary)!important;
  font-size:13px!important;
  font-weight:700!important;
  text-transform:uppercase!important;
  letter-spacing:.12em!important;
}

.tmvx-device-copy strong{
  color:var(--tmvx-ink)!important;
  font-size:30px!important;
  line-height:1.08!important;
  font-weight:500!important;
  margin-top:8px!important;
}

.tmvx-device-copy small{
  display:block!important;
  margin-top:12px!important;
  color:var(--tmvx-muted)!important;
}

.tmvx-mini-bars{
  right:42px!important;
  bottom:42px!important;
  gap:10px!important;
}

.tmvx-mini-bars i{
  width:14px!important;
  border-radius:0!important;
  background:#cfd9df!important;
  animation:none!important;
}
.tmvx-mini-bars i:nth-child(2),
.tmvx-mini-bars i:nth-child(4){
  background:#9badb4!important;
}
.tmvx-mini-bars i:nth-child(5){
  background:var(--tmvx-primary)!important;
}

/* Bento superior limpio */
.tmvx-premium-strip{
  display:grid!important;
  grid-template-columns:repeat(4,1fr)!important;
  gap:0!important;
  margin:0!important;
  border-bottom:1px solid var(--tmvx-line)!important;
}

.tmvx-premium-strip>div{
  min-height:156px!important;
  padding:36px 34px!important;
  border:0!important;
  border-right:1px solid var(--tmvx-line)!important;
  border-radius:0!important;
  background:#fff!important;
  backdrop-filter:none!important;
  position:relative!important;
}

.tmvx-premium-strip>div:last-child{
  border-right:0!important;
}

.tmvx-premium-strip>div:before{
  content:"";
  display:block;
  width:54px;
  height:54px;
  margin-bottom:28px;
  background:
    linear-gradient(var(--tmvx-ink),var(--tmvx-ink)) center 14px/1px 26px no-repeat,
    linear-gradient(var(--tmvx-ink),var(--tmvx-ink)) center/32px 1px no-repeat;
  border:1px solid transparent;
  opacity:.9;
}

.tmvx-premium-strip>div:nth-child(1):before{
  clip-path:polygon(50% 0,90% 22%,90% 72%,50% 100%,10% 72%,10% 22%);
  border:1px solid var(--tmvx-ink);
  background:none;
}
.tmvx-premium-strip>div:nth-child(2):before{
  border:1px solid var(--tmvx-ink);
  border-radius:50%;
  background:
    radial-gradient(circle at 50% 50%,transparent 0 9px,var(--tmvx-ink) 10px,transparent 11px),
    linear-gradient(45deg,transparent 0 47%,var(--tmvx-ink) 48% 52%,transparent 53%);
}
.tmvx-premium-strip>div:nth-child(3):before{
  border-left:1px solid var(--tmvx-ink);
  border-right:1px solid var(--tmvx-ink);
  transform:skew(-18deg);
}
.tmvx-premium-strip>div:nth-child(4):before{
  border:1px solid var(--tmvx-ink);
  border-radius:50%;
  background:
    linear-gradient(45deg,transparent 58%,var(--tmvx-ink) 59% 62%,transparent 63%),
    radial-gradient(circle at 70% 70%,var(--tmvx-ink) 0 3px,transparent 4px);
}

.tmvx-premium-strip span{
  display:none!important;
}

.tmvx-premium-strip strong{
  font-size:21px!important;
  line-height:1.2!important;
  color:var(--tmvx-ink)!important;
  font-weight:500!important;
  letter-spacing:-.03em!important;
}

.tmvx-premium-strip small{
  display:block!important;
  margin-top:10px!important;
  color:var(--tmvx-muted)!important;
  font-size:15px!important;
  line-height:1.5!important;
}

/* Tabs */
.tmvx-tabs{
  display:flex!important;
  gap:0!important;
  padding:0!important;
  margin:0!important;
  width:100%!important;
  max-width:100%!important;
  overflow:auto!important;
  border:0!important;
  border-bottom:1px solid var(--tmvx-line)!important;
  border-radius:0!important;
  background:#fff!important;
}

.tmvx-tabs button{
  min-height:58px!important;
  padding:0 30px!important;
  border:0!important;
  border-right:1px solid var(--tmvx-line)!important;
  border-radius:0!important;
  background:#fff!important;
  color:var(--tmvx-muted)!important;
  font-weight:500!important;
  font-size:15px!important;
  position:relative!important;
}

.tmvx-tabs button.is-active{
  background:#f2f5f7!important;
  color:var(--tmvx-primary)!important;
  box-shadow:none!important;
}

.tmvx-tabs button.is-active:after{
  content:"";
  position:absolute;
  left:0;
  right:0;
  bottom:0;
  height:2px;
  background:var(--tmvx-primary);
}

/* Módulos */
.tmvx-module{
  margin:0!important;
  padding:42px!important;
  border:0!important;
  border-bottom:1px solid var(--tmvx-line)!important;
  border-radius:0!important;
  background:#fff!important;
  box-shadow:none!important;
  backdrop-filter:none!important;
}

/* Formularios */
.tmvx-searchbar,
.tmvx-filter-grid{
  gap:0!important;
  align-items:stretch!important;
}

.tmvx-searchbar{
  border:1px solid var(--tmvx-line)!important;
  display:flex!important;
}

.tmvx-filter-grid{
  display:grid!important;
  grid-template-columns:repeat(6,minmax(0,1fr))!important;
  border:1px solid var(--tmvx-line)!important;
}

.tmvx-input-wrap{
  min-width:260px!important;
}

.tmvx-input-wrap span{
  color:var(--tmvx-primary)!important;
  left:18px!important;
}

.tmvx input,
.tmvx select{
  height:58px!important;
  border:0!important;
  border-right:1px solid var(--tmvx-line)!important;
  border-radius:0!important;
  background:#fff!important;
  color:var(--tmvx-ink)!important;
  padding:0 18px!important;
  outline:none!important;
  font-size:15px!important;
}

.tmvx-input-wrap input{
  padding-left:46px!important;
}

.tmvx input:focus,
.tmvx select:focus{
  box-shadow:inset 0 -2px 0 var(--tmvx-primary)!important;
}

.tmvx-searchbar>button,
.tmvx-filter-grid button,
.tmvx-btn-ghost{
  height:58px!important;
  border:0!important;
  border-right:1px solid var(--tmvx-line)!important;
  border-radius:0!important;
  padding:0 24px!important;
  font-weight:600!important;
  background:var(--tmvx-primary)!important;
  color:#fff!important;
  min-width:136px!important;
}

.tmvx-btn-ghost{
  background:#fff!important;
  color:var(--tmvx-primary)!important;
  border-left:1px solid var(--tmvx-line)!important;
}

.tmvx-searchbar>button:hover,
.tmvx-filter-grid button:hover{
  background:var(--tmvx-primary-2)!important;
}

.tmvx-btn-ghost:hover{
  background:#f4f7f9!important;
}

/* Chips */
.tmvx-chip-select{
  display:flex!important;
  gap:0!important;
  border-right:1px solid var(--tmvx-line)!important;
}

.tmvx-chip-select button{
  height:58px!important;
  border:0!important;
  border-right:1px solid var(--tmvx-line)!important;
  border-radius:0!important;
  background:#fff!important;
  color:var(--tmvx-muted)!important;
  padding:0 16px!important;
  font-weight:500!important;
}

.tmvx-chip-select button.is-active{
  background:#eef3f7!important;
  color:var(--tmvx-primary)!important;
}

/* KPIs */
.tmvx-kpi-row{
  display:grid!important;
  grid-template-columns:repeat(4,1fr)!important;
  gap:0!important;
  margin:42px 0 0!important;
  border-top:1px solid var(--tmvx-line)!important;
  border-left:1px solid var(--tmvx-line)!important;
}

.tmvx-kpi{
  padding:26px 24px!important;
  border:0!important;
  border-right:1px solid var(--tmvx-line)!important;
  border-bottom:1px solid var(--tmvx-line)!important;
  border-radius:0!important;
  background:#fff!important;
}

.tmvx-kpi strong{
  color:var(--tmvx-primary)!important;
  font-size:34px!important;
  line-height:1!important;
  font-weight:500!important;
}

.tmvx-kpi span{
  display:block!important;
  margin-top:10px!important;
  color:var(--tmvx-muted)!important;
  font-size:14px!important;
}

/* Cards */
.tmvx-results{
  display:grid!important;
  grid-template-columns:repeat(3,minmax(0,1fr))!important;
  gap:0!important;
  margin-top:42px!important;
  border-top:1px solid var(--tmvx-line)!important;
  border-left:1px solid var(--tmvx-line)!important;
}

.tmvx-card{
  min-height:220px!important;
  padding:32px 30px!important;
  border:0!important;
  border-right:1px solid var(--tmvx-line)!important;
  border-bottom:1px solid var(--tmvx-line)!important;
  border-radius:0!important;
  background:#fff!important;
  box-shadow:none!important;
  transition:background .18s ease, transform .18s ease!important;
}

.tmvx-card:before{
  display:none!important;
}

.tmvx-card:hover{
  transform:none!important;
  background:#f7f9fa!important;
  border-color:var(--tmvx-line)!important;
}

.tmvx-card:after{
  content:"";
  display:block;
  width:56px;
  height:56px;
  margin-bottom:28px;
  border:1px solid var(--tmvx-ink);
  background:
    linear-gradient(var(--tmvx-ink),var(--tmvx-ink)) center/28px 1px no-repeat,
    linear-gradient(var(--tmvx-ink),var(--tmvx-ink)) center/1px 28px no-repeat;
  opacity:.9;
}

.tmvx-card h3{
  color:var(--tmvx-ink)!important;
  font-size:22px!important;
  line-height:1.25!important;
  font-weight:500!important;
  margin:0 0 14px!important;
}

.tmvx-badges{
  display:flex!important;
  flex-wrap:wrap!important;
  gap:6px!important;
  margin:18px 0 0!important;
}

.tmvx-badge{
  border:1px solid var(--tmvx-line)!important;
  border-radius:0!important;
  background:#fff!important;
  color:var(--tmvx-primary)!important;
  padding:7px 9px!important;
  font-size:12px!important;
  font-weight:600!important;
}

.tmvx-card-links{
  display:flex!important;
  gap:0!important;
  flex-wrap:wrap!important;
  margin-top:22px!important;
  border-top:1px solid var(--tmvx-line)!important;
  border-left:1px solid var(--tmvx-line)!important;
}

.tmvx-card-links a{
  color:var(--tmvx-primary)!important;
  text-decoration:none!important;
  border:0!important;
  border-right:1px solid var(--tmvx-line)!important;
  border-bottom:1px solid var(--tmvx-line)!important;
  border-radius:0!important;
  padding:10px 12px!important;
  background:#fff!important;
  font-weight:600!important;
  font-size:13px!important;
}

.tmvx-card-links a:hover{
  background:#eef3f7!important;
}

/* Skeleton / errores */
.tmvx-skeleton{
  height:220px!important;
  border-radius:0!important;
  border-right:1px solid var(--tmvx-line)!important;
  border-bottom:1px solid var(--tmvx-line)!important;
  background:linear-gradient(90deg,#f0f2f4,#fafafa,#f0f2f4)!important;
}

.tmvx-error,
.tmvx-empty{
  border-radius:0!important;
  border:1px solid var(--tmvx-line)!important;
  background:#fff!important;
  color:var(--tmvx-muted)!important;
  padding:18px!important;
}

.tmvx-error{
  border-color:#e3bcc4!important;
  color:#8d3142!important;
}

/* Paginación */
.tmvx-pagination{
  display:flex!important;
  gap:0!important;
  margin-top:28px!important;
  border-left:1px solid var(--tmvx-line)!important;
}

.tmvx-pagination button{
  border:0!important;
  border-top:1px solid var(--tmvx-line)!important;
  border-right:1px solid var(--tmvx-line)!important;
  border-bottom:1px solid var(--tmvx-line)!important;
  border-radius:0!important;
  background:#fff!important;
  color:var(--tmvx-muted)!important;
  padding:12px 16px!important;
}

.tmvx-pagination button.is-active{
  background:var(--tmvx-primary)!important;
  color:#fff!important;
}

/* Gráficos */
.tmvx-chart-grid{
  display:grid!important;
  grid-template-columns:1fr 1fr!important;
  gap:0!important;
  margin-top:42px!important;
  border-top:1px solid var(--tmvx-line)!important;
  border-left:1px solid var(--tmvx-line)!important;
}

.tmvx-chart-card{
  border:0!important;
  border-right:1px solid var(--tmvx-line)!important;
  border-bottom:1px solid var(--tmvx-line)!important;
  border-radius:0!important;
  background:#fff!important;
  padding:34px!important;
}

.tmvx-chart-card h3{
  font-size:24px!important;
  margin-bottom:24px!important;
}

.tmvx-chart-wide{
  grid-column:1/-1!important;
}

.tmvx-bar{
  display:grid!important;
  grid-template-columns:170px 1fr auto!important;
  gap:14px!important;
  align-items:center!important;
  margin:14px 0!important;
}

.tmvx-bar span{
  width:auto!important;
  color:var(--tmvx-muted)!important;
  font-size:14px!important;
}

.tmvx-bar i{
  height:18px!important;
  border-radius:0!important;
  background:#b7c6ca!important;
  min-width:4px!important;
}

.tmvx-bar b{
  color:var(--tmvx-ink)!important;
  font-weight:500!important;
  font-size:13px!important;
}

.tmvx-donut{
  border-radius:0!important;
  background:conic-gradient(var(--tmvx-primary) var(--p,55%),#e4e9ec 0)!important;
}

.tmvx-table-wrap{
  border:1px solid var(--tmvx-line)!important;
  overflow:auto!important;
}

.tmvx table{
  width:100%!important;
  border-collapse:collapse!important;
  color:var(--tmvx-text)!important;
}

.tmvx th,
.tmvx td{
  border-bottom:1px solid var(--tmvx-line)!important;
  padding:14px 16px!important;
  text-align:left!important;
  font-size:14px!important;
}

.tmvx th{
  color:var(--tmvx-primary)!important;
  font-weight:700!important;
  background:#f4f7f9!important;
}

/* Mapa: por ahora lo dejamos más sobrio, sin cargar el foco visual */
.tmvx-map-stage,
.tmvx-map-stage-image{
  border-radius:0!important;
  border:1px solid var(--tmvx-line)!important;
  box-shadow:none!important;
}

.tmvx-map-panel{
  border-radius:0!important;
  background:#fff!important;
  border:1px solid var(--tmvx-line)!important;
  box-shadow:none!important;
}

.tmvx-map-hotspot{
  border-radius:0!important;
}

.tmvx-map-hotspot span{
  border-radius:0!important;
}

/* Aviso seguro */
.tmvx-safe-notice{
  border:1px solid var(--tmvx-line)!important;
  border-radius:0!important;
  background:#fff!important;
  padding:24px!important;
  color:var(--tmvx-text)!important;
}

/* Responsive */
@media (max-width:1100px){
  .tmvx-hero{
    grid-template-columns:1fr!important;
  }
  .tmvx-device{
    border-left:0!important;
    border-top:1px solid var(--tmvx-line)!important;
  }
  .tmvx-premium-strip,
  .tmvx-results,
  .tmvx-kpi-row,
  .tmvx-chart-grid{
    grid-template-columns:1fr 1fr!important;
  }
  .tmvx-filter-grid{
    grid-template-columns:1fr 1fr!important;
  }
}

@media (max-width:720px){
  .tmvx-hero-copy{
    padding:44px 28px!important;
  }
  .tmvx-device{
    display:none!important;
  }
  .tmvx-module{
    padding:26px!important;
  }
  .tmvx-premium-strip,
  .tmvx-results,
  .tmvx-kpi-row,
  .tmvx-chart-grid,
  .tmvx-filter-grid{
    grid-template-columns:1fr!important;
  }
  .tmvx-searchbar{
    display:grid!important;
    grid-template-columns:1fr!important;
  }
  .tmvx-searchbar>button,
  .tmvx-filter-grid button,
  .tmvx-btn-ghost,
  .tmvx input,
  .tmvx select{
    border-right:0!important;
    border-bottom:1px solid var(--tmvx-line)!important;
  }
  .tmvx-premium-strip>div{
    border-right:0!important;
  }
  .tmvx-bar{
    grid-template-columns:1fr!important;
  }
}


/* ==========================================================
   TMVX v3.1 — Leroux-style sliding tab underline
   Tabs limpias con línea fina móvil en #003366
   ========================================================== */

.tmvx-tabs{
  position:relative!important;
  display:flex!important;
  align-items:flex-end!important;
  justify-content:flex-start!important;
  gap:44px!important;
  width:100%!important;
  max-width:100%!important;
  min-height:88px!important;
  margin:0!important;
  padding:0 70px!important;
  overflow-x:auto!important;
  overflow-y:hidden!important;
  border:0!important;
  border-bottom:1px solid var(--tmvx-line)!important;
  border-radius:0!important;
  background:#fff!important;
  scrollbar-width:none;
}

.tmvx-tabs::-webkit-scrollbar{
  display:none;
}

.tmvx-tabs button{
  position:relative!important;
  min-height:88px!important;
  padding:0!important;
  border:0!important;
  border-radius:0!important;
  background:transparent!important;
  color:var(--tmvx-ink)!important;
  font-size:17px!important;
  font-weight:400!important;
  letter-spacing:-.015em!important;
  white-space:nowrap!important;
  box-shadow:none!important;
  transition:color .24s ease, opacity .24s ease!important;
}

.tmvx-tabs button span{
  position:relative!important;
  display:inline-flex!important;
  align-items:center!important;
  height:88px!important;
}

.tmvx-tabs button:hover,
.tmvx-tabs button:focus,
.tmvx-tabs button.is-active{
  color:var(--tmvx-primary)!important;
  background:transparent!important;
  outline:none!important;
}

.tmvx-tabs button.is-active{
  font-weight:500!important;
}

.tmvx-tabs button.is-active:after{
  display:none!important;
}

.tmvx-tabs button:before{
  content:"";
  position:absolute;
  left:0;
  right:0;
  bottom:-1px;
  height:1px;
  background:var(--tmvx-primary);
  transform:scaleX(0);
  transform-origin:left center;
  opacity:.55;
  transition:transform .35s cubic-bezier(.22,.61,.36,1),opacity .2s ease;
}

.tmvx-tabs button:hover:before,
.tmvx-tabs button:focus:before{
  transform:scaleX(1);
}

.tmvx-tab-indicator{
  position:absolute;
  left:0;
  bottom:-1px;
  width:24px;
  height:1px;
  background:var(--tmvx-primary);
  transform:translateX(70px);
  opacity:0;
  pointer-events:none;
  transition:
    transform .42s cubic-bezier(.22,.61,.36,1),
    width .42s cubic-bezier(.22,.61,.36,1),
    opacity .2s ease;
  z-index:2;
}

.tmvx-tab-panel{
  border-top:0!important;
}

@media (max-width:720px){
  .tmvx-tabs{
    gap:28px!important;
    min-height:72px!important;
    padding:0 28px!important;
  }
  .tmvx-tabs button,
  .tmvx-tabs button span{
    min-height:72px!important;
    height:72px!important;
    font-size:16px!important;
  }
}


/* ==========================================================
   TMVX v3.1.1 — Sliding underline fix
   Línea móvil única, visible y suave en hover/active.
   ========================================================== */

.tmvx-tabs{
  position:relative!important;
  display:grid!important;
  grid-template-columns:repeat(4,1fr)!important;
  gap:0!important;
  min-height:94px!important;
  padding:0!important;
  overflow:hidden!important;
  border-bottom:1px solid var(--tmvx-line)!important;
  background:#fff!important;
}

.tmvx-tabs button{
  min-height:94px!important;
  height:94px!important;
  padding:0 24px!important;
  border:0!important;
  border-right:0!important;
  background:transparent!important;
  color:var(--tmvx-ink)!important;
  font-size:18px!important;
  font-weight:400!important;
  line-height:1!important;
  text-align:center!important;
  display:flex!important;
  align-items:center!important;
  justify-content:center!important;
  position:relative!important;
  z-index:2!important;
}

.tmvx-tabs button span{
  height:auto!important;
  min-height:0!important;
  display:inline-block!important;
}

.tmvx-tabs button:before,
.tmvx-tabs button:after,
.tmvx-tabs button.is-active:after{
  display:none!important;
  content:none!important;
}

.tmvx-tabs button:hover,
.tmvx-tabs button:focus,
.tmvx-tabs button.is-active{
  color:var(--tmvx-primary)!important;
  background:transparent!important;
  outline:none!important;
}

.tmvx-tabs button.is-active{
  font-weight:500!important;
}

.tmvx-tab-indicator{
  position:absolute!important;
  left:0!important;
  bottom:-1px!important;
  width:var(--tmvx-tab-width,25%)!important;
  height:1px!important;
  background:var(--tmvx-primary)!important;
  transform:translate3d(var(--tmvx-tab-left,0px),0,0)!important;
  opacity:1!important;
  display:block!important;
  pointer-events:none!important;
  z-index:5!important;
  transition:
    transform .48s cubic-bezier(.22,.61,.36,1),
    width .48s cubic-bezier(.22,.61,.36,1),
    opacity .18s ease!important;
}

.tmvx-tab-indicator.is-instant{
  transition:none!important;
}

@media (max-width:720px){
  .tmvx-tabs{
    grid-template-columns:repeat(4,max-content)!important;
    overflow-x:auto!important;
    overflow-y:hidden!important;
    min-height:74px!important;
    scrollbar-width:none!important;
  }
  .tmvx-tabs::-webkit-scrollbar{
    display:none!important;
  }
  .tmvx-tabs button{
    min-height:74px!important;
    height:74px!important;
    padding:0 22px!important;
    font-size:15px!important;
  }
}


/* ==========================================================
   TMVX v3.1.2 — Tabs estilo Leroux, línea visible en hover
   Solución CSS robusta: línea propia por pestaña.
   ========================================================== */

.tmvx-tabs{
  position:relative!important;
  display:grid!important;
  grid-template-columns:repeat(4,1fr)!important;
  gap:0!important;
  min-height:94px!important;
  padding:0!important;
  margin:0!important;
  overflow:visible!important;
  border:0!important;
  border-bottom:1px solid var(--tmvx-line)!important;
  background:#fff!important;
}

.tmvx-tabs button{
  position:relative!important;
  z-index:2!important;
  display:flex!important;
  align-items:center!important;
  justify-content:center!important;
  min-height:94px!important;
  height:94px!important;
  padding:0 24px!important;
  margin:0!important;
  border:0!important;
  border-radius:0!important;
  background:transparent!important;
  color:var(--tmvx-ink)!important;
  font-size:18px!important;
  font-weight:400!important;
  line-height:1!important;
  text-align:center!important;
  white-space:nowrap!important;
  box-shadow:none!important;
  transition:color .22s ease!important;
}

.tmvx-tabs button span{
  position:relative!important;
  display:inline-flex!important;
  align-items:center!important;
  justify-content:center!important;
  height:94px!important;
  min-height:94px!important;
  pointer-events:none!important;
}

.tmvx-tabs button:before,
.tmvx-tabs button.is-active:before{
  content:""!important;
  position:absolute!important;
  left:0!important;
  right:0!important;
  bottom:-1px!important;
  display:block!important;
  width:100%!important;
  height:1px!important;
  background:var(--tmvx-primary)!important;
  transform:scaleX(0)!important;
  transform-origin:left center!important;
  opacity:1!important;
  transition:transform .42s cubic-bezier(.22,.61,.36,1)!important;
  z-index:4!important;
}

.tmvx-tabs button:hover:before,
.tmvx-tabs button:focus:before,
.tmvx-tabs button.is-active:before{
  transform:scaleX(1)!important;
}

.tmvx-tabs button:after,
.tmvx-tabs button.is-active:after{
  display:none!important;
  content:none!important;
}

.tmvx-tabs button:hover,
.tmvx-tabs button:focus,
.tmvx-tabs button.is-active{
  color:var(--tmvx-primary)!important;
  background:transparent!important;
  outline:none!important;
}

.tmvx-tabs button.is-active{
  font-weight:500!important;
}

/* Ocultamos el indicador JS para evitar conflictos visuales con la línea CSS */
.tmvx-tab-indicator{
  display:none!important;
}

@media (max-width:720px){
  .tmvx-tabs{
    display:flex!important;
    min-height:74px!important;
    overflow-x:auto!important;
    overflow-y:visible!important;
    scrollbar-width:none!important;
  }
  .tmvx-tabs::-webkit-scrollbar{
    display:none!important;
  }
  .tmvx-tabs button{
    flex:0 0 auto!important;
    min-height:74px!important;
    height:74px!important;
    padding:0 24px!important;
    font-size:15px!important;
  }
  .tmvx-tabs button span{
    height:74px!important;
    min-height:74px!important;
  }
}


/* ==========================================================
   TMVX v3.2 — Sin hero superior
   La interfaz comienza directamente con navegación y contenido.
   ========================================================== */

.tmvx-no-hero{
  background:#fff!important;
}

.tmvx-no-hero .tmvx-tabs{
  border-top:0!important;
}

.tmvx-no-hero .tmvx-module:first-child{
  border-top:0!important;
}

.tmvx-no-hero > .tmvx-module{
  border-top:0!important;
}

/* En shortcodes individuales, sin pestañas, reducimos el aire superior */
.tmvx-no-hero:not([data-tmvx-dashboard]) .tmvx-module{
  padding-top:36px!important;
}

/* Ya no se utiliza en la experiencia principal */
.tmvx-no-hero .tmvx-premium-strip,
.tmvx-no-hero .tmvx-hero{
  display:none!important;
}


/* ==========================================================
   TMVX v3.3 — Cards con hover de contraste estilo Leroux
   Bordes 1px, icono lineal grande, máscara oscura en hover.
   ========================================================== */

.tmvx-results{
  margin-top:42px!important;
  display:grid!important;
  grid-template-columns:repeat(3,minmax(0,1fr))!important;
  gap:0!important;
  border-top:1px solid var(--tmvx-line)!important;
  border-left:1px solid var(--tmvx-line)!important;
  background:#fff!important;
}

.tmvx-card{
  position:relative!important;
  min-height:285px!important;
  padding:38px 34px 30px!important;
  border:0!important;
  border-right:1px solid var(--tmvx-line)!important;
  border-bottom:1px solid var(--tmvx-line)!important;
  border-radius:0!important;
  background:#fff!important;
  color:var(--tmvx-text)!important;
  box-shadow:none!important;
  overflow:hidden!important;
  isolation:isolate!important;
  transition:color .34s ease!important;
}

/* Máscara de contraste */
.tmvx-card:before{
  content:""!important;
  position:absolute!important;
  inset:-1px!important;
  display:block!important;
  background:#223236!important;
  transform:translateY(101%)!important;
  transition:transform .46s cubic-bezier(.22,.61,.36,1)!important;
  z-index:0!important;
  pointer-events:none!important;
}

/* Icono lineal grande */
.tmvx-card:after{
  content:""!important;
  position:relative!important;
  z-index:1!important;
  display:block!important;
  width:66px!important;
  height:66px!important;
  margin:0 0 28px!important;
  border:1px solid currentColor!important;
  background:
    linear-gradient(currentColor,currentColor) 50% 20%/1px 22px no-repeat,
    linear-gradient(currentColor,currentColor) 50% 80%/1px 18px no-repeat,
    linear-gradient(currentColor,currentColor) 18% 50%/22px 1px no-repeat,
    linear-gradient(currentColor,currentColor) 82% 50%/22px 1px no-repeat;
  color:#20282f!important;
  clip-path:polygon(50% 0,88% 21%,88% 72%,50% 100%,12% 72%,12% 21%)!important;
  opacity:.98!important;
  transition:color .34s ease, transform .34s ease!important;
}

/* Variación suave para cards pares */
.tmvx-card:nth-child(3n+2):after{
  clip-path:none!important;
  border-radius:50%!important;
  background:
    radial-gradient(circle at 68% 68%,currentColor 0 3px,transparent 4px),
    linear-gradient(45deg,transparent 57%,currentColor 58% 61%,transparent 62%) center/100% 100% no-repeat;
}

.tmvx-card:nth-child(3n+3):after{
  clip-path:none!important;
  border:0!important;
  background:
    linear-gradient(currentColor,currentColor) 10px 12px/42px 1px no-repeat,
    linear-gradient(currentColor,currentColor) 10px 32px/42px 1px no-repeat,
    linear-gradient(currentColor,currentColor) 10px 52px/42px 1px no-repeat,
    linear-gradient(currentColor,currentColor) 10px 12px/1px 40px no-repeat,
    linear-gradient(currentColor,currentColor) 52px 12px/1px 40px no-repeat;
}

/* Contenido siempre por encima de la máscara */
.tmvx-card > *{
  position:relative!important;
  z-index:2!important;
}

.tmvx-card h3{
  color:var(--tmvx-ink)!important;
  font-size:22px!important;
  line-height:1.22!important;
  font-weight:500!important;
  letter-spacing:-.035em!important;
  margin:0 0 12px!important;
  transition:color .34s ease!important;
}

.tmvx-card p,
.tmvx-card div,
.tmvx-card span{
  transition:color .34s ease,border-color .34s ease,background .34s ease!important;
}

/* Como el icono es pseudo-elemento posterior, lo recolocamos visualmente arriba */
.tmvx-card{
  display:flex!important;
  flex-direction:column!important;
}

.tmvx-card:after{
  order:-1!important;
}

/* Hover */
.tmvx-card:hover{
  background:#fff!important;
  transform:none!important;
  color:#fff!important;
}

.tmvx-card:hover:before{
  transform:translateY(0)!important;
}

.tmvx-card:hover:after{
  color:#fff!important;
  transform:translateY(-2px)!important;
}

.tmvx-card:hover h3,
.tmvx-card:hover p,
.tmvx-card:hover div,
.tmvx-card:hover span{
  color:#fff!important;
}

.tmvx-card:hover .tmvx-badge{
  color:#fff!important;
  border-color:rgba(255,255,255,.36)!important;
  background:rgba(255,255,255,.06)!important;
}

.tmvx-card:hover .tmvx-card-links{
  border-color:rgba(255,255,255,.25)!important;
}

.tmvx-card:hover .tmvx-card-links a{
  color:#fff!important;
  border-color:rgba(255,255,255,.25)!important;
  background:transparent!important;
}

.tmvx-card:hover .tmvx-card-links a:hover{
  background:rgba(255,255,255,.08)!important;
}

/* Ajuste de badges y enlaces dentro del estilo */
.tmvx-badges{
  margin-top:18px!important;
}

.tmvx-badge{
  background:transparent!important;
  border:1px solid var(--tmvx-line)!important;
  color:var(--tmvx-primary)!important;
}

.tmvx-card-links{
  margin-top:auto!important;
  padding-top:24px!important;
  border-top:0!important;
  border-left:0!important;
  gap:8px!important;
}

.tmvx-card-links a{
  border:1px solid var(--tmvx-line)!important;
  background:#fff!important;
  color:var(--tmvx-primary)!important;
  padding:9px 11px!important;
}

@media (max-width:1100px){
  .tmvx-results{
    grid-template-columns:repeat(2,minmax(0,1fr))!important;
  }
}

@media (max-width:720px){
  .tmvx-results{
    grid-template-columns:1fr!important;
  }
  .tmvx-card{
    min-height:240px!important;
    padding:30px 26px!important;
  }
}


/* ==========================================================
   TMVX v3.4 — Cards corporativas con iconos por mercado
   ========================================================== */

/* Máscara hover en color corporativo */
.tmvx-card:before{
  background:#003366!important;
}

/* Desactivamos el icono pseudo anterior y usamos SVG real como máscara */
.tmvx-card:after{
  display:none!important;
  content:none!important;
}

.tmvx-card-icon{
  position:relative!important;
  z-index:2!important;
  display:block!important;
  width:76px!important;
  height:76px!important;
  margin:0 0 28px!important;
  color:var(--tmvx-ink)!important;
  background:currentColor!important;
  -webkit-mask:center / contain no-repeat;
  mask:center / contain no-repeat;
  transition:color .34s ease, transform .34s ease!important;
  flex:0 0 auto!important;
}

/* Iconos por tipo de mercado */
.tmvx-card-market-frutas .tmvx-card-icon{
  -webkit-mask-image:url("../icons/frutas.svg");
  mask-image:url("../icons/frutas.svg");
}

.tmvx-card-market-pescados .tmvx-card-icon{
  -webkit-mask-image:url("../icons/pescados.svg");
  mask-image:url("../icons/pescados.svg");
}

.tmvx-card-market-carnes .tmvx-card-icon{
  -webkit-mask-image:url("../icons/carnes.svg");
  mask-image:url("../icons/carnes.svg");
}

.tmvx-card-market-varios .tmvx-card-icon{
  -webkit-mask-image:url("../icons/varios.svg");
  mask-image:url("../icons/varios.svg");
}

.tmvx-card:hover .tmvx-card-icon{
  color:#fff!important;
  transform:translateY(-2px)!important;
}

/* Ajuste para que el icono quede visualmente grande y fino */
.tmvx-card{
  justify-content:flex-start!important;
}

.tmvx-card h3{
  margin-top:0!important;
}


/* ==========================================================
   TMVX v3.5 — Iconos ampliados y reposo en gris claro
   ========================================================== */

.tmvx-card-icon{
  color:#b8c0c7!important;
}

.tmvx-card:hover .tmvx-card-icon{
  color:#ffffff!important;
}

.tmvx-card-market-hosteleria .tmvx-card-icon{
  -webkit-mask-image:url("../icons/hosteleria.svg");
  mask-image:url("../icons/hosteleria.svg");
}

.tmvx-card-market-logistica .tmvx-card-icon{
  -webkit-mask-image:url("../icons/logistica.svg");
  mask-image:url("../icons/logistica.svg");
}

.tmvx-card-market-servicios .tmvx-card-icon{
  -webkit-mask-image:url("../icons/servicios.svg");
  mask-image:url("../icons/servicios.svg");
}

.tmvx-card-market-comercial .tmvx-card-icon{
  -webkit-mask-image:url("../icons/comercial.svg");
  mask-image:url("../icons/comercial.svg");
}

.tmvx-card-market-frio .tmvx-card-icon{
  -webkit-mask-image:url("../icons/frio.svg");
  mask-image:url("../icons/frio.svg");
}

.tmvx-card-market-parking .tmvx-card-icon{
  -webkit-mask-image:url("../icons/parking.svg");
  mask-image:url("../icons/parking.svg");
}

/* Un poco más discreto en reposo: el título manda, el icono acompaña */
.tmvx-card:not(:hover) .tmvx-card-icon{
  opacity:.9!important;
}

.tmvx-card:hover .tmvx-card-icon{
  opacity:1!important;
}


/* ==========================================================
   TMVX v3.6 — Iconos sustituidos y tamaño más discreto
   ========================================================== */

.tmvx-card-icon{
  width:58px!important;
  height:58px!important;
  margin-bottom:24px!important;
}

@media (max-width:720px){
  .tmvx-card-icon{
    width:52px!important;
    height:52px!important;
    margin-bottom:20px!important;
  }
}


/* ==========================================================
   TMVX v3.7 — Icono "varios" nuevo + enlaces por iconos
   ========================================================== */

/* El icono de "varios" pasa al nuevo SVG */
.tmvx-card-market-varios .tmvx-card-icon{
  -webkit-mask-image:url("../icons/varios.svg");
  mask-image:url("../icons/varios.svg");
}

/* Sustituimos botones de contacto por iconos en fila */
.tmvx-card-links{
  margin-top:auto!important;
  padding-top:18px!important;
  border:0!important;
  border-left:0!important;
  display:flex!important;
  align-items:center!important;
  gap:14px!important;
  flex-wrap:wrap!important;
}

.tmvx-card-links a,
.tmvx-card-links a:hover{
  border:0!important;
  background:transparent!important;
  padding:0!important;
  width:auto!important;
  min-width:0!important;
  line-height:1!important;
  text-decoration:none!important;
  color:#003366!important;
  display:inline-flex!important;
  align-items:center!important;
  justify-content:center!important;
}

.tmvx-card-link{
  opacity:.95!important;
  transition:transform .2s ease, opacity .2s ease, color .3s ease!important;
}

.tmvx-card-link:hover{
  transform:translateY(-1px)!important;
  opacity:1!important;
}

.tmvx-link-icon{
  display:block!important;
  width:18px!important;
  height:18px!important;
  background:currentColor!important;
  -webkit-mask:center / contain no-repeat;
  mask:center / contain no-repeat;
}

.tmvx-link-phone .tmvx-link-icon{
  -webkit-mask-image:url("../icons/phone.svg");
  mask-image:url("../icons/phone.svg");
}

.tmvx-link-email .tmvx-link-icon{
  -webkit-mask-image:url("../icons/email.svg");
  mask-image:url("../icons/email.svg");
}

.tmvx-link-web .tmvx-link-icon{
  -webkit-mask-image:url("../icons/web.svg");
  mask-image:url("../icons/web.svg");
}

/* En hover de tarjeta, los iconos de enlace pasan a blanco */
.tmvx-card:hover .tmvx-card-links a{
  color:#ffffff!important;
}


/* ==========================================================
   TMVX v3.8 — Tooltips personalizados en iconos de contacto
   ========================================================== */

.tmvx-card-links{
  overflow:visible!important;
}

.tmvx-card-link{
  position:relative!important;
  overflow:visible!important;
}

.tmvx-card-link::before{
  content:attr(data-tooltip);
  position:absolute;
  left:50%;
  bottom:calc(100% + 12px);
  transform:translateX(-50%) translateY(6px);
  display:block;
  max-width:260px;
  width:max-content;
  padding:8px 10px;
  background:#ffffff;
  color:#26313a;
  border:1px solid var(--tmvx-line);
  font-size:12px;
  font-weight:500;
  line-height:1.25;
  letter-spacing:0;
  white-space:nowrap;
  opacity:0;
  visibility:hidden;
  pointer-events:none;
  box-shadow:0 12px 24px rgba(0,0,0,.08);
  transition:opacity .18s ease, transform .18s ease, visibility .18s ease;
  z-index:30;
}

.tmvx-card-link::after{
  content:"";
  position:absolute;
  left:50%;
  bottom:calc(100% + 7px);
  width:8px;
  height:8px;
  background:#ffffff;
  border-right:1px solid var(--tmvx-line);
  border-bottom:1px solid var(--tmvx-line);
  transform:translateX(-50%) rotate(45deg) translateY(6px);
  opacity:0;
  visibility:hidden;
  pointer-events:none;
  transition:opacity .18s ease, transform .18s ease, visibility .18s ease;
  z-index:29;
}

.tmvx-card-link:hover::before,
.tmvx-card-link:focus::before,
.tmvx-card-link:hover::after,
.tmvx-card-link:focus::after{
  opacity:1;
  visibility:visible;
  transform:translateX(-50%) translateY(0);
}

.tmvx-card-link:hover::after,
.tmvx-card-link:focus::after{
  transform:translateX(-50%) rotate(45deg) translateY(0);
}

/* En hover de card, tooltip con contraste inverso sobre azul corporativo */
.tmvx-card:hover .tmvx-card-link::before{
  background:#ffffff;
  color:#003366;
  border-color:rgba(255,255,255,.85);
}

.tmvx-card:hover .tmvx-card-link::after{
  background:#ffffff;
  border-color:rgba(255,255,255,.85);
}

@media (max-width:720px){
  .tmvx-card-link::before{
    max-width:210px;
    white-space:normal;
    text-align:center;
  }
}


/* ==========================================================
   TMVX v3.9 — Iconos centrados + selector Grid/Listado
   ========================================================== */

/* Selector de vista */
.tmvx-viewbar{
  display:flex;
  align-items:center;
  justify-content:flex-end;
  gap:0;
  margin-top:18px;
  color:var(--tmvx-muted);
  font-size:13px;
}

.tmvx-viewbar > span{
  margin-right:12px;
  color:var(--tmvx-muted);
}

.tmvx-viewbar button{
  height:38px;
  padding:0 15px;
  border:1px solid var(--tmvx-line);
  border-right:0;
  border-radius:0;
  background:#fff;
  color:var(--tmvx-primary);
  font-size:13px;
  font-weight:500;
}

.tmvx-viewbar button:last-child{
  border-right:1px solid var(--tmvx-line);
}

.tmvx-viewbar button.is-active{
  background:var(--tmvx-primary);
  color:#fff;
}

/* Iconos de contacto centrados abajo en grid */
.tmvx-view-grid .tmvx-card{
  padding-bottom:34px!important;
}

.tmvx-view-grid .tmvx-card-links{
  justify-content:center!important;
  width:100%!important;
  margin-top:auto!important;
  padding-top:26px!important;
  gap:18px!important;
}

/* Tooltips: al estar centrados pueden ser más anchos */
.tmvx-view-grid .tmvx-card-link::before{
  max-width:320px;
  white-space:normal;
  text-align:center;
  overflow-wrap:anywhere;
}

/* Vista listado */
.tmvx-results.tmvx-view-list{
  display:block!important;
  margin-top:30px!important;
  border:0!important;
  background:#fff!important;
}

.tmvx-list-table{
  width:100%;
  border-top:1px solid var(--tmvx-line);
  border-left:1px solid var(--tmvx-line);
}

.tmvx-list-head,
.tmvx-list-row{
  display:grid;
  grid-template-columns:1.45fr .72fr 1.15fr 1.15fr 1.4fr;
}

.tmvx-list-head{
  background:#f4f7f9;
  color:var(--tmvx-primary);
  font-size:12px;
  letter-spacing:.04em;
  text-transform:uppercase;
  font-weight:700;
}

.tmvx-list-head span,
.tmvx-list-row > div{
  min-width:0;
  padding:16px 18px;
  border-right:1px solid var(--tmvx-line);
  border-bottom:1px solid var(--tmvx-line);
}

.tmvx-list-row{
  background:#fff;
  color:var(--tmvx-text);
  transition:background .18s ease;
}

.tmvx-list-row:hover{
  background:#f8fafc;
}

.tmvx-list-company strong{
  display:block;
  color:var(--tmvx-ink);
  font-size:15px;
  font-weight:500;
  line-height:1.25;
}

.tmvx-list-company small{
  display:block;
  margin-top:6px;
  color:var(--tmvx-muted);
  font-size:12px;
  line-height:1.35;
}

.tmvx-list-row a{
  color:var(--tmvx-primary);
  text-decoration:none;
  overflow-wrap:anywhere;
}

.tmvx-list-row a:hover{
  text-decoration:underline;
  text-underline-offset:3px;
}

.tmvx-list-modules{
  color:var(--tmvx-muted);
  font-size:13px;
  line-height:1.45;
}

@media (max-width:1100px){
  .tmvx-list-head{
    display:none;
  }
  .tmvx-list-row{
    grid-template-columns:1fr;
    border-right:1px solid var(--tmvx-line);
    border-bottom:1px solid var(--tmvx-line);
    padding:18px;
  }
  .tmvx-list-row > div{
    border:0;
    padding:7px 0;
  }
  .tmvx-list-row > div:nth-child(2)::before{content:"Teléfono: ";font-weight:600;color:var(--tmvx-primary);}
  .tmvx-list-row > div:nth-child(3)::before{content:"Email: ";font-weight:600;color:var(--tmvx-primary);}
  .tmvx-list-row > div:nth-child(4)::before{content:"Web: ";font-weight:600;color:var(--tmvx-primary);}
  .tmvx-list-row > div:nth-child(5)::before{content:"Parcela/s: ";font-weight:600;color:var(--tmvx-primary);}
}

@media (max-width:720px){
  .tmvx-viewbar{
    justify-content:flex-start;
  }
}


/* ==========================================================
   TMVX v3.9.1 — Ajuste tipográfico en vista listado
   ========================================================== */

/* Teléfono, email y web más discretos */
.tmvx-list-row > div:nth-child(2),
.tmvx-list-row > div:nth-child(3),
.tmvx-list-row > div:nth-child(4){
  font-size:12px!important;
  line-height:1.45!important;
}

/* Enlaces sin subrayado también en hover */
.tmvx-list-row a,
.tmvx-list-row a:hover,
.tmvx-list-row a:focus{
  text-decoration:none!important;
  text-underline-offset:0!important;
}

/* Hover más fino: baja un poco la opacidad del texto */
.tmvx-list-row a{
  transition:opacity .18s ease, color .18s ease!important;
}

.tmvx-list-row a:hover,
.tmvx-list-row a:focus{
  opacity:.62!important;
  color:var(--tmvx-primary)!important;
}

/* Mantener empresa y parcelas algo más legibles */
.tmvx-list-company strong{
  font-size:15px!important;
}

.tmvx-list-modules{
  font-size:12px!important;
}


/* ==========================================================
   TMVX v4.0 — Estadísticas: fechas nativas, gráfica limpia y precios
   ========================================================== */

.tmvx-stats-filter-grid{
  grid-template-columns:1.1fr 1.1fr 1.1fr .9fr .9fr 1fr 1fr!important;
}

.tmvx input[type="date"]{
  color:var(--tmvx-ink)!important;
  font-size:14px!important;
}

.tmvx input[type="date"]::-webkit-calendar-picker-indicator{
  cursor:pointer;
  opacity:.75;
  filter:none;
}

.tmvx input[type="date"]:hover::-webkit-calendar-picker-indicator{
  opacity:1;
}

.tmvx-variety-chart{
  display:grid;
  grid-template-columns:150px 1fr;
  gap:26px;
  align-items:start;
}

.tmvx-variety-total{
  min-height:150px;
  border:1px solid var(--tmvx-line);
  display:flex;
  flex-direction:column;
  align-items:center;
  justify-content:center;
  color:var(--tmvx-primary);
  background:#f7f9fa;
}

.tmvx-variety-total strong{
  display:block;
  font-size:42px;
  line-height:1;
  font-weight:500;
  letter-spacing:-.04em;
}

.tmvx-variety-total span{
  display:block;
  margin-top:8px;
  color:var(--tmvx-muted);
  font-size:13px;
}

.tmvx-variety-list{
  display:grid;
  gap:12px;
}

.tmvx-variety-item{
  display:grid;
  grid-template-columns:150px 1fr 92px;
  gap:12px;
  align-items:center;
  font-size:12px;
  color:var(--tmvx-muted);
}

.tmvx-variety-item span{
  white-space:nowrap;
  overflow:hidden;
  text-overflow:ellipsis;
}

.tmvx-variety-item i{
  display:block;
  height:14px;
  background:#eef2f5;
  position:relative;
}

.tmvx-variety-item i b{
  display:block;
  height:100%;
  background:#b7c6ca;
}

.tmvx-variety-item em{
  font-style:normal;
  text-align:right;
  color:var(--tmvx-ink);
  font-size:12px;
}

.tmvx-stats-filter-grid button{
  min-width:0!important;
}

@media (max-width:1200px){
  .tmvx-stats-filter-grid{
    grid-template-columns:1fr 1fr!important;
  }
}

@media (max-width:720px){
  .tmvx-stats-filter-grid{
    grid-template-columns:1fr!important;
  }
  .tmvx-variety-chart{
    grid-template-columns:1fr;
  }
  .tmvx-variety-item{
    grid-template-columns:1fr;
    gap:6px;
  }
  .tmvx-variety-item em{
    text-align:left;
  }
}


/* ==========================================================
   TMVX v4.1 — Estadísticas: donut, barras finas y líneas de precios
   ========================================================== */

.tmvx-bar.tmvx-bar-slim{
  grid-template-columns:170px 1fr auto!important;
  gap:14px!important;
  margin:10px 0!important;
}

.tmvx-bar.tmvx-bar-slim i{
  height:8px!important;
  background:#dfe7eb!important;
}

.tmvx-bar.tmvx-bar-slim i{
  position:relative;
}

.tmvx-bar.tmvx-bar-slim i::after{
  content:"";
  display:block;
  width:100%;
  height:100%;
  background:#9fb4bc;
}

/* Circular chart limpio */
.tmvx-donut-layout{
  display:grid;
  grid-template-columns:190px 1fr;
  gap:28px;
  align-items:center;
}

.tmvx-donut-clean{
  width:178px;
  height:178px;
  border-radius:50%;
  display:grid;
  place-items:center;
  position:relative;
}

.tmvx-donut-clean::before{
  content:"";
  position:absolute;
  inset:38px;
  border-radius:50%;
  background:#fff;
  border:1px solid var(--tmvx-line);
}

.tmvx-donut-clean > div{
  position:relative;
  z-index:1;
  text-align:center;
}

.tmvx-donut-clean strong{
  display:block;
  color:var(--tmvx-primary);
  font-size:34px;
  line-height:1;
  font-weight:500;
}

.tmvx-donut-clean span{
  display:block;
  margin-top:6px;
  color:var(--tmvx-muted);
  font-size:12px;
}

.tmvx-donut-legend{
  display:grid;
  gap:10px;
}

.tmvx-donut-legend div{
  display:grid;
  grid-template-columns:12px 1fr auto;
  align-items:center;
  gap:10px;
  font-size:12px;
  color:var(--tmvx-muted);
}

.tmvx-donut-legend i{
  display:block;
  width:10px;
  height:10px;
}

.tmvx-donut-legend span{
  white-space:nowrap;
  overflow:hidden;
  text-overflow:ellipsis;
}

.tmvx-donut-legend em{
  font-style:normal;
  color:var(--tmvx-ink);
}

/* Line chart */
.tmvx-line-chart-wrap{
  width:100%;
}

.tmvx-line-chart{
  width:100%;
  height:auto;
  display:block;
  overflow:visible;
}

.tmvx-line-grid line{
  stroke:#e1e6ea;
  stroke-width:1;
}

.tmvx-line-series path{
  fill:none;
  stroke-width:1.8;
  vector-effect:non-scaling-stroke;
}

.tmvx-line-series circle{
  stroke:#fff;
  stroke-width:1.5;
}

.tmvx-line-axis text{
  font-size:11px;
  fill:#6b7580;
}

.tmvx-line-legend{
  display:flex;
  flex-wrap:wrap;
  gap:12px 20px;
  margin-top:16px;
}

.tmvx-line-legend span{
  display:inline-flex;
  align-items:center;
  gap:8px;
  font-size:12px;
  color:var(--tmvx-muted);
}

.tmvx-line-legend i{
  width:18px;
  height:2px;
  display:block;
}

.tmvx-table-wrap th:nth-child(3),
.tmvx-table-wrap th:nth-child(4),
.tmvx-table-wrap td:nth-child(3),
.tmvx-table-wrap td:nth-child(4){
  white-space:nowrap;
}

@media (max-width:900px){
  .tmvx-donut-layout{
    grid-template-columns:1fr;
  }
  .tmvx-donut-clean{
    margin:auto;
  }
}


/* ==========================================================
   TMVX v4.2 — Todos los productos/variedades + tooltips en gráficos
   ========================================================== */

.tmvx-chart-card [data-tmvx-chart]{
  position:relative;
}

.tmvx-bars-scroll{
  max-height:380px;
  overflow:auto;
  padding-right:6px;
}

.tmvx-bars-scroll::-webkit-scrollbar,
.tmvx-donut-legend-all::-webkit-scrollbar,
.tmvx-line-legend-all::-webkit-scrollbar{
  width:6px;
  height:6px;
}

.tmvx-bars-scroll::-webkit-scrollbar-thumb,
.tmvx-donut-legend-all::-webkit-scrollbar-thumb,
.tmvx-line-legend-all::-webkit-scrollbar-thumb{
  background:#cbd5dc;
}

/* Pie circular con todas las secciones */
.tmvx-pie-layout{
  display:grid;
  grid-template-columns:220px 1fr;
  gap:28px;
  align-items:start;
}

.tmvx-pie-wrap{
  position:relative;
}

.tmvx-pie-chart{
  display:block;
  width:220px;
  height:220px;
  overflow:visible;
}

.tmvx-pie-chart path{
  cursor:pointer;
  transition:opacity .18s ease, transform .18s ease;
  transform-origin:100px 100px;
}

.tmvx-pie-chart path:hover,
.tmvx-pie-chart path:focus{
  opacity:.78;
  outline:none;
}

.tmvx-pie-chart circle{
  fill:#fff;
  stroke:var(--tmvx-line);
  stroke-width:1;
}

.tmvx-pie-chart text{
  text-anchor:middle;
  fill:var(--tmvx-primary);
  font-weight:500;
}

.tmvx-pie-chart text:nth-of-type(1){
  font-size:28px;
}

.tmvx-pie-chart text:nth-of-type(2){
  font-size:11px;
  fill:var(--tmvx-muted);
  font-weight:400;
}

.tmvx-donut-legend-all{
  max-height:260px;
  overflow:auto;
  padding-right:6px;
}

.tmvx-donut-legend-all div{
  cursor:default;
}

/* Líneas y leyenda con todos los productos */
.tmvx-line-chart-wrap{
  position:relative;
  overflow:auto;
  padding-bottom:4px;
}

.tmvx-line-chart{
  min-width:900px;
}

.tmvx-line-series path{
  opacity:.72;
}

.tmvx-line-series circle{
  cursor:pointer;
  transition:r .18s ease, opacity .18s ease;
}

.tmvx-line-series circle:hover,
.tmvx-line-series circle:focus{
  r:5;
  opacity:.9;
  outline:none;
}

.tmvx-line-legend-all{
  max-height:92px;
  overflow:auto;
  padding-right:6px;
}

/* Tooltip de gráficos */
.tmvx-chart-tooltip{
  position:absolute;
  z-index:40;
  min-width:120px;
  max-width:260px;
  padding:9px 11px;
  background:#fff;
  color:var(--tmvx-ink);
  border:1px solid var(--tmvx-line);
  box-shadow:0 14px 30px rgba(0,0,0,.10);
  font-size:12px;
  line-height:1.35;
  pointer-events:none;
  opacity:0;
  visibility:hidden;
  transform:translate(-50%,calc(-100% - 14px));
  transition:opacity .18s ease, transform .18s ease, visibility .18s ease;
}

.tmvx-chart-tooltip.is-visible{
  opacity:1;
  visibility:visible;
  transform:translate(-50%,calc(-100% - 18px));
}

.tmvx-chart-tooltip strong{
  display:block;
  color:var(--tmvx-primary);
  font-size:12px;
  line-height:1.25;
  margin-bottom:4px;
}

.tmvx-chart-tooltip span{
  display:block;
  color:var(--tmvx-muted);
}

@media (max-width:900px){
  .tmvx-pie-layout{
    grid-template-columns:1fr;
  }
  .tmvx-pie-chart{
    margin:auto;
  }
}


/* ==========================================================
   TMVX v4.3 — Toggles, colores coherentes, scroll visible y preload
   ========================================================== */

.tmvx-chart-head{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:18px;
  margin-bottom:24px;
}

.tmvx-chart-head h3{
  margin:0!important;
}

.tmvx-chart-toggle{
  display:flex;
  border:1px solid var(--tmvx-line);
}

.tmvx-chart-toggle button{
  height:34px;
  padding:0 12px;
  border:0;
  border-right:1px solid var(--tmvx-line);
  background:#fff;
  color:var(--tmvx-primary);
  font-size:12px;
  font-weight:500;
}

.tmvx-chart-toggle button:last-child{
  border-right:0;
}

.tmvx-chart-toggle button.is-active{
  background:var(--tmvx-primary);
  color:#fff;
}

.tmvx-bar.tmvx-bar-slim i{
  height:7px!important;
  background:#eef2f5!important;
  position:relative;
}

.tmvx-bar.tmvx-bar-slim i em{
  display:block;
  width:100%;
  height:100%;
}

.tmvx-scroll-hint{
  display:flex;
  align-items:center;
  gap:8px;
  margin:-8px 0 16px;
  color:#7a8791;
  font-size:12px;
}

.tmvx-scroll-hint span{
  width:32px;
  height:7px;
  border:1px solid var(--tmvx-line);
  position:relative;
}

.tmvx-scroll-hint span:after{
  content:"";
  position:absolute;
  top:2px;
  left:3px;
  width:9px;
  height:1px;
  background:var(--tmvx-primary);
  animation:tmvxScrollHint 1.25s ease-in-out infinite;
}

@keyframes tmvxScrollHint{
  50%{left:18px}
}

.tmvx-bars-scroll,
.tmvx-donut-legend-all,
.tmvx-line-legend-all,
.tmvx-line-chart-wrap{
  scrollbar-color:#003366 #edf1f4;
  scrollbar-width:thin;
}

.tmvx-line-chart-wrap{
  border-bottom:1px solid var(--tmvx-line);
  padding-bottom:10px;
}

.tmvx-chart-loading{
  min-height:180px;
  display:flex;
  flex-direction:column;
  align-items:center;
  justify-content:center;
  gap:8px;
  color:var(--tmvx-muted);
  border:1px solid var(--tmvx-line);
  background:#fff;
}

.tmvx-chart-loading span,
.tmvx-stats-loading span{
  width:32px;
  height:32px;
  border:1px solid #ccd5dc;
  border-top-color:var(--tmvx-primary);
  border-radius:50%;
  animation:tmvxSpin .85s linear infinite;
}

.tmvx-chart-loading strong,
.tmvx-stats-loading strong{
  color:var(--tmvx-primary);
  font-size:13px;
  font-weight:600;
}

.tmvx-chart-loading small,
.tmvx-stats-loading small{
  color:var(--tmvx-muted);
  font-size:12px;
}

.tmvx-stats-loading{
  position:absolute;
  inset:0;
  z-index:20;
  display:none;
  align-items:center;
  justify-content:center;
  background:rgba(255,255,255,.72);
  backdrop-filter:blur(2px);
}

.tmvx-stats-loading.is-active{
  display:flex;
}

.tmvx-stats-loading > div{
  min-width:260px;
  padding:28px;
  border:1px solid var(--tmvx-line);
  background:#fff;
  display:flex;
  flex-direction:column;
  align-items:center;
  gap:9px;
  box-shadow:0 18px 38px rgba(0,0,0,.08);
}

.tmvx select.is-loading{
  background-image:linear-gradient(90deg,#fff,#eef3f7,#fff)!important;
  background-size:220% 100%!important;
  animation:tmvxLoadingField 1s linear infinite;
}

@keyframes tmvxSpin{to{transform:rotate(360deg)}}
@keyframes tmvxLoadingField{to{background-position:-220% 0}}

@media (max-width:720px){
  .tmvx-chart-head{
    align-items:flex-start;
    flex-direction:column;
  }
}


/* ==========================================================
   TMVX v4.4 — Precargas globales, scroll horizontal y XLS
   ========================================================== */

.tmvx-module{position:relative!important}

.tmvx-module-loading{
  position:absolute;
  inset:0;
  z-index:35;
  display:none;
  align-items:center;
  justify-content:center;
  background:rgba(255,255,255,.72);
  backdrop-filter:blur(2px);
}

.tmvx-module-loading.is-active{display:flex}

.tmvx-module-loading > div{
  min-width:260px;
  padding:26px;
  border:1px solid var(--tmvx-line);
  background:#fff;
  display:flex;
  flex-direction:column;
  align-items:center;
  gap:8px;
  box-shadow:0 18px 38px rgba(0,0,0,.08);
}

.tmvx-module-loading span{
  width:30px;
  height:30px;
  border:1px solid #ccd5dc;
  border-top-color:var(--tmvx-primary);
  border-radius:50%;
  animation:tmvxSpin .85s linear infinite;
}

.tmvx-module-loading strong{color:var(--tmvx-primary);font-size:13px;font-weight:600}
.tmvx-module-loading small{color:var(--tmvx-muted);font-size:12px}

.tmvx-chart-toggle,
.tmvx-chart-toggle button,
.tmvx-viewbar button{
  border-radius:0!important;
}

.tmvx-bars-scroll,
.tmvx-donut-legend-all,
.tmvx-line-legend-all{
  padding-left:12px!important;
  margin-left:-12px!important;
  padding-right:12px!important;
}

.tmvx-line-chart-wrap{
  padding-left:14px!important;
  margin-left:-14px!important;
}

.tmvx-scroll-hint span{
  width:42px!important;
  height:8px!important;
  border:1px solid var(--tmvx-line)!important;
  position:relative!important;
  background:#fff!important;
}

.tmvx-scroll-hint span:after{
  content:""!important;
  position:absolute!important;
  top:3px!important;
  left:4px!important;
  width:13px!important;
  height:1px!important;
  background:var(--tmvx-primary)!important;
  animation:tmvxScrollHintX 1.25s ease-in-out infinite!important;
}

.tmvx-scroll-hint span:before{
  content:""!important;
  position:absolute!important;
  right:4px!important;
  top:2px!important;
  width:4px!important;
  height:4px!important;
  border-top:1px solid var(--tmvx-primary)!important;
  border-right:1px solid var(--tmvx-primary)!important;
  transform:rotate(45deg)!important;
  opacity:.75!important;
}

@keyframes tmvxScrollHintX{
  0%,100%{left:4px}
  50%{left:24px}
}

.tmvx-inline-loading{min-height:220px!important}


/* ==========================================================
   TMVX v4.5 — Scroll anterior, barras finas limpias y XLSX
   ========================================================== */

/* Recupera el indicador animado anterior, más limpio */
.tmvx-scroll-hint span{
  width:32px!important;
  height:7px!important;
  border:1px solid var(--tmvx-line)!important;
  position:relative!important;
  background:#fff!important;
}

.tmvx-scroll-hint span:before{
  display:none!important;
  content:none!important;
}

.tmvx-scroll-hint span:after{
  content:""!important;
  position:absolute!important;
  top:2px!important;
  left:3px!important;
  width:9px!important;
  height:1px!important;
  background:var(--tmvx-primary)!important;
  animation:tmvxScrollHint 1.25s ease-in-out infinite!important;
}

@keyframes tmvxScrollHint{
  0%,100%{left:3px}
  50%{left:18px}
}

/* Barras: solo línea fina de color, sin banda inferior/fondo doble */
.tmvx-bar.tmvx-bar-slim i{
  height:7px!important;
  background:transparent!important;
  position:relative!important;
  overflow:visible!important;
}

.tmvx-bar.tmvx-bar-slim i::after{
  display:none!important;
  content:none!important;
}

.tmvx-bar.tmvx-bar-slim i em{
  display:block!important;
  width:100%!important;
  height:7px!important;
  background:currentColor;
}



/* ==========================================================
   TMVX v4.6 — Scroll animado visible, más aire y preload toggle
   ========================================================== */

/* Más separación entre contenido y barras de scroll */
.tmvx-bars-scroll,
.tmvx-donut-legend-all,
.tmvx-line-legend-all{
  padding-left:18px!important;
  margin-left:-18px!important;
  padding-right:22px!important;
}

.tmvx-line-chart-wrap{
  padding-left:20px!important;
  margin-left:-20px!important;
  padding-bottom:18px!important;
}

/* Indicador de desplazamiento más llamativo y animado */
.tmvx-scroll-hint{
  gap:10px!important;
  margin-bottom:18px!important;
}

.tmvx-scroll-hint span{
  width:54px!important;
  height:16px!important;
  border:1px solid var(--tmvx-line)!important;
  background:#fff!important;
  position:relative!important;
  overflow:hidden!important;
}

.tmvx-scroll-hint span:before{
  content:""!important;
  display:block!important;
  position:absolute!important;
  left:8px!important;
  top:50%!important;
  width:12px!important;
  height:12px!important;
  border-top:1px solid var(--tmvx-primary)!important;
  border-right:1px solid var(--tmvx-primary)!important;
  transform:translateY(-50%) rotate(45deg)!important;
  opacity:.35!important;
  animation:tmvxScrollArrowX 1.35s cubic-bezier(.45,0,.25,1) infinite!important;
}

.tmvx-scroll-hint span:after{
  content:""!important;
  position:absolute!important;
  left:8px!important;
  top:50%!important;
  width:18px!important;
  height:1px!important;
  background:var(--tmvx-primary)!important;
  transform:translateY(-50%)!important;
  animation:tmvxScrollLineX 1.35s cubic-bezier(.45,0,.25,1) infinite!important;
}

@keyframes tmvxScrollArrowX{
  0%{left:7px;opacity:.15}
  35%{opacity:.85}
  70%{left:35px;opacity:.85}
  100%{left:35px;opacity:.12}
}

@keyframes tmvxScrollLineX{
  0%{left:7px;width:10px;opacity:.2}
  35%{width:22px;opacity:1}
  70%{left:21px;width:22px;opacity:1}
  100%{left:35px;width:8px;opacity:.15}
}

/* Refuerzo visual del overlay en toggles */
.tmvx-stats-loading.is-active{
  display:flex!important;
}

.tmvx-stats-loading > div{
  animation:tmvxPreloadIn .18s ease both;
}

@keyframes tmvxPreloadIn{
  from{opacity:0;transform:translateY(6px)}
  to{opacity:1;transform:translateY(0)}
}


/* ==========================================================
   TMVX v4.7 — indicador v4.4 + preload centrado en pantalla + XLSX válido
   ========================================================== */

/* Preloader centrado en el viewport, no dentro del componente */
.tmvx-module-loading,
.tmvx-stats-loading{
  position:fixed!important;
  inset:0!important;
  z-index:999999!important;
  align-items:center!important;
  justify-content:center!important;
  background:rgba(255,255,255,.72)!important;
  backdrop-filter:blur(2px)!important;
}

.tmvx-module-loading > div,
.tmvx-stats-loading > div{
  margin:auto!important;
}

/* Recupera exactamente el indicador de desplazamiento de la v4.4 */
.tmvx-scroll-hint span{
  width:42px!important;
  height:8px!important;
  border:1px solid var(--tmvx-line)!important;
  position:relative!important;
  background:#fff!important;
  overflow:visible!important;
}

.tmvx-scroll-hint span:after{
  content:""!important;
  position:absolute!important;
  top:3px!important;
  left:4px!important;
  width:13px!important;
  height:1px!important;
  background:var(--tmvx-primary)!important;
  animation:tmvxScrollHintX 1.25s ease-in-out infinite!important;
}

.tmvx-scroll-hint span:before{
  content:""!important;
  display:block!important;
  position:absolute!important;
  right:4px!important;
  top:2px!important;
  width:4px!important;
  height:4px!important;
  border-top:1px solid var(--tmvx-primary)!important;
  border-right:1px solid var(--tmvx-primary)!important;
  transform:rotate(45deg)!important;
  opacity:.75!important;
  animation:none!important;
}

@keyframes tmvxScrollHintX{
  0%,100%{left:4px}
  50%{left:24px}
}

/* Más aire entre contenido y scrollbar */
.tmvx-bars-scroll,
.tmvx-donut-legend-all,
.tmvx-line-legend-all{
  padding-left:22px!important;
  margin-left:-22px!important;
  padding-right:28px!important;
}

.tmvx-line-chart-wrap{
  padding-left:24px!important;
  margin-left:-24px!important;
  padding-bottom:22px!important;
}


/* ==========================================================
   TMVX v4.7.2 — Indicador de scroll v4.4 restaurado correctamente
   ========================================================== */

.tmvx .tmvx-scroll-hint {
  display: flex !important;
  align-items: center !important;
  gap: 8px !important;
}

.tmvx .tmvx-scroll-hint span {
  width: 42px !important;
  height: 8px !important;
  min-width: 42px !important;
  border: 1px solid var(--tmvx-line) !important;
  position: relative !important;
  display: inline-block !important;
  background: #fff !important;
  overflow: visible !important;
  border-radius: 0 !important;
}

.tmvx .tmvx-scroll-hint span::after {
  content: "" !important;
  position: absolute !important;
  top: 3px !important;
  left: 4px !important;
  width: 13px !important;
  height: 1px !important;
  background: var(--tmvx-primary) !important;
  display: block !important;
  opacity: 1 !important;
  transform: none !important;
  animation: tmvxScrollHintX_v472 1.25s ease-in-out infinite !important;
}

.tmvx .tmvx-scroll-hint span::before {
  content: "" !important;
  position: absolute !important;
  right: 4px !important;
  top: 2px !important;
  width: 4px !important;
  height: 4px !important;
  display: block !important;
  border-top: 1px solid var(--tmvx-primary) !important;
  border-right: 1px solid var(--tmvx-primary) !important;
  border-left: 0 !important;
  border-bottom: 0 !important;
  background: transparent !important;
  transform: rotate(45deg) !important;
  opacity: .75 !important;
  animation: none !important;
}

@keyframes tmvxScrollHintX_v472 {
  0%, 100% {
    left: 4px;
  }
  50% {
    left: 24px;
  }
}


/* ==========================================================
   TMVX v4.7.3 — Indicador exacto: línea azul móvil dentro de la barra
   ========================================================== */

.tmvx .tmvx-scroll-hint {
  display: flex !important;
  align-items: center !important;
  gap: 8px !important;
}

.tmvx .tmvx-scroll-hint span {
  width: 42px !important;
  height: 8px !important;
  min-width: 42px !important;
  display: inline-block !important;
  position: relative !important;
  overflow: hidden !important;
  border: 1px solid var(--tmvx-line) !important;
  background: #fff !important;
  border-radius: 0 !important;
}

/* Quitamos la flecha estática. Solo debe verse la línea azul moviéndose. */
.tmvx .tmvx-scroll-hint span::before {
  display: none !important;
  content: none !important;
}

/* Línea azul interna animada de izquierda a derecha y vuelta */
.tmvx .tmvx-scroll-hint span::after {
  content: "" !important;
  position: absolute !important;
  top: 3px !important;
  left: 4px !important;
  width: 13px !important;
  height: 1px !important;
  display: block !important;
  background: var(--tmvx-primary) !important;
  opacity: 1 !important;
  transform: translateX(0) !important;
  animation: tmvxScrollLineExact_v473 1.15s ease-in-out infinite alternate !important;
}

@keyframes tmvxScrollLineExact_v473 {
  from {
    left: 4px;
  }
  to {
    left: 24px;
  }
}


/* ==========================================================
   TMVX v4.7.4 — Movimiento de scroll forzado por JS
   ========================================================== */

.tmvx .tmvx-scroll-hint span{
  width:42px!important;
  height:8px!important;
  min-width:42px!important;
  display:inline-block!important;
  position:relative!important;
  overflow:hidden!important;
  border:1px solid var(--tmvx-line)!important;
  background:#fff!important;
  border-radius:0!important;
}

/* Anulamos pseudo-elementos para evitar conflictos. La línea real la inserta JS. */
.tmvx .tmvx-scroll-hint span::before,
.tmvx .tmvx-scroll-hint span::after{
  display:none!important;
  content:none!important;
  animation:none!important;
}

.tmvx .tmvx-scroll-hint-line{
  position:absolute!important;
  left:4px!important;
  top:50%!important;
  width:13px!important;
  height:1px!important;
  display:block!important;
  background:var(--tmvx-primary)!important;
  pointer-events:none!important;
  will-change:transform!important;
}


/* ==========================================================
   TMVX v5.0 — Origen en gráficos + tooltip en barras
   ========================================================== */

.tmvx-bar.tmvx-bar-slim{
  cursor:default;
  outline:none;
}

.tmvx-bar.tmvx-bar-slim:hover span,
.tmvx-bar.tmvx-bar-slim:focus span{
  color:var(--tmvx-primary)!important;
}

.tmvx-bar.tmvx-bar-slim:hover em,
.tmvx-bar.tmvx-bar-slim:focus em{
  filter:brightness(.92);
}

.tmvx-chart-toggle button{
  min-width:74px;
}


/* ==========================================================
   TMVX v5.1 — Paleta viva + gráfico precio / volumen
   ========================================================== */

.tmvx-scatter-wrap{
  overflow:auto;
  padding-left:24px;
  margin-left:-24px;
  padding-bottom:18px;
  border-bottom:1px solid var(--tmvx-line);
}

.tmvx-scatter-chart{
  min-width:900px;
  width:100%;
  height:auto;
  display:block;
}

.tmvx-scatter-chart circle{
  opacity:.78;
  stroke:#fff;
  stroke-width:1.5;
  cursor:pointer;
  transition:opacity .18s ease;
}

.tmvx-scatter-chart circle:hover,
.tmvx-scatter-chart circle:focus{
  opacity:1;
  outline:none;
}

.tmvx-bar.tmvx-bar-slim i em{
  opacity:.96;
}

.tmvx-donut-legend i,
.tmvx-line-legend i{
  box-shadow:0 0 0 1px rgba(0,0,0,.04);
}


/* ==========================================================
   TMVX v5.1.3 — Animación en distribución y evolución + KPI limpio
   ========================================================== */

.tmvx-chart-animate{
  animation:tmvxChartFadeUp .42s ease both;
}

@keyframes tmvxChartFadeUp{
  from{
    opacity:0;
    transform:translateY(10px);
  }
  to{
    opacity:1;
    transform:translateY(0);
  }
}

/* Distribución circular: entrada suave de sectores */
.tmvx-animate-pie .tmvx-pie-chart path{
  transform-origin:100px 100px;
  animation:tmvxPieSliceIn .52s cubic-bezier(.22,.61,.36,1) both;
}

.tmvx-animate-pie .tmvx-pie-chart path:nth-of-type(2){animation-delay:.035s}
.tmvx-animate-pie .tmvx-pie-chart path:nth-of-type(3){animation-delay:.07s}
.tmvx-animate-pie .tmvx-pie-chart path:nth-of-type(4){animation-delay:.105s}
.tmvx-animate-pie .tmvx-pie-chart path:nth-of-type(5){animation-delay:.14s}
.tmvx-animate-pie .tmvx-pie-chart path:nth-of-type(6){animation-delay:.175s}
.tmvx-animate-pie .tmvx-pie-chart path:nth-of-type(7){animation-delay:.21s}
.tmvx-animate-pie .tmvx-pie-chart path:nth-of-type(8){animation-delay:.245s}

@keyframes tmvxPieSliceIn{
  from{
    opacity:0;
    transform:scale(.92);
  }
  to{
    opacity:.78;
    transform:scale(1);
  }
}

/* Evolución de precios: dibujo de líneas y aparición de puntos */
.tmvx-animate-lines .tmvx-line-series path{
  stroke-dasharray:1000;
  stroke-dashoffset:1000;
  animation:tmvxLineDraw 1.05s ease forwards;
}

.tmvx-animate-lines .tmvx-line-series circle{
  opacity:0;
  animation:tmvxPointIn .32s ease forwards;
  animation-delay:.55s;
}

@keyframes tmvxLineDraw{
  to{
    stroke-dashoffset:0;
  }
}

@keyframes tmvxPointIn{
  from{
    opacity:0;
    transform:scale(.7);
  }
  to{
    opacity:1;
    transform:scale(1);
  }
}


/* ==========================================================
   TMVX v5.1.4 — KPIs adaptados al ancho disponible
   ========================================================== */

.tmvx-kpi-row{
  grid-template-columns:repeat(auto-fit,minmax(220px,1fr))!important;
}

.tmvx-kpi{
  min-width:0!important;
}

/* En estadísticas quedan 3 KPIs: ocupan todo el ancho */
.tmvx-stats [data-tmvx-stats-kpis],
[data-tmvx-stats] [data-tmvx-stats-kpis]{
  grid-template-columns:repeat(3,minmax(0,1fr))!important;
}

/* En productos quedan 3 KPIs: ocupan todo el ancho */
[data-tmvx-products] [data-tmvx-product-kpis]{
  grid-template-columns:repeat(3,minmax(0,1fr))!important;
}

/* En empresas quedan 2 KPIs: ocupan todo el ancho */
[data-tmvx-companies] [data-tmvx-company-kpis]{
  grid-template-columns:repeat(2,minmax(0,1fr))!important;
}

@media (max-width:720px){
  [data-tmvx-stats] [data-tmvx-stats-kpis],
  [data-tmvx-products] [data-tmvx-product-kpis],
  [data-tmvx-companies] [data-tmvx-company-kpis]{
    grid-template-columns:1fr!important;
  }
}


/* ==========================================================
   TMVX v5.1.5 — Donut circular claro + export arriba derecha
   ========================================================== */

/* Botones export fuera de buscadores/filtros */
.tmvx-results-head{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:18px;
  margin-top:22px;
  margin-bottom:0;
}

.tmvx-results-head-in-card{
  margin-top:0;
  margin-bottom:24px;
}

.tmvx-results-head-in-card h3{
  margin:0!important;
}

.tmvx-btn-export{
  height:38px;
  padding:0 16px;
  border:1px solid var(--tmvx-line);
  border-radius:0;
  background:#fff;
  color:var(--tmvx-primary);
  font-size:13px;
  font-weight:600;
  white-space:nowrap;
}

.tmvx-btn-export:hover,
.tmvx-btn-export:focus{
  background:var(--tmvx-primary);
  color:#fff;
  outline:none;
}

/* La viewbar queda debajo del botón export y alineada */
.tmvx-results-head + .tmvx-viewbar{
  margin-top:14px!important;
}

/* Donut circular más claro */
.tmvx-donut-modern-layout{
  display:grid;
  grid-template-columns:230px 1fr;
  gap:30px;
  align-items:center;
}

.tmvx-donut-modern{
  width:220px;
  height:220px;
  border-radius:50%;
  position:relative;
  display:grid;
  place-items:center;
  box-shadow:inset 0 0 0 1px rgba(0,0,0,.04);
  animation:tmvxDonutSpinIn .75s cubic-bezier(.22,.61,.36,1) both;
}

.tmvx-donut-modern::before{
  content:"";
  position:absolute;
  inset:54px;
  border-radius:50%;
  background:#fff;
  border:1px solid var(--tmvx-line);
  z-index:1;
}

.tmvx-donut-modern > div{
  position:relative;
  z-index:2;
  text-align:center;
}

.tmvx-donut-modern strong{
  display:block;
  color:var(--tmvx-primary);
  font-size:36px;
  line-height:1;
  font-weight:500;
}

.tmvx-donut-modern span{
  display:block;
  margin-top:6px;
  color:var(--tmvx-muted);
  font-size:12px;
}

.tmvx-donut-hit{
  position:absolute;
  z-index:4;
  width:18px;
  height:18px;
  margin:-9px 0 0 -9px;
  border:0;
  background:transparent;
  border-radius:50%;
  cursor:pointer;
}

.tmvx-donut-hit:focus{
  outline:1px solid var(--tmvx-primary);
  outline-offset:2px;
}

@keyframes tmvxDonutSpinIn{
  from{
    opacity:0;
    transform:rotate(-18deg) scale(.94);
  }
  to{
    opacity:1;
    transform:rotate(0) scale(1);
  }
}

@media (max-width:900px){
  .tmvx-donut-modern-layout{
    grid-template-columns:1fr;
  }
  .tmvx-donut-modern{
    margin:auto;
  }
}

@media (max-width:720px){
  .tmvx-results-head{
    align-items:flex-start;
    flex-direction:column;
  }
}


/* ==========================================================
   TMVX v5.1.6 — Export en Empresas/Productos justo sobre resultados
   ========================================================== */

[data-tmvx-companies] .tmvx-kpi-row + .tmvx-results-head,
[data-tmvx-products] .tmvx-kpi-row + .tmvx-results-head{
  margin-top:26px!important;
  margin-bottom:-18px!important;
}

[data-tmvx-companies] .tmvx-results-head + .tmvx-results,
[data-tmvx-products] .tmvx-results-head + .tmvx-results{
  margin-top:42px!important;
}


/* ==========================================================
   TMVX v5.1.7 — Filtros de Estadísticas a ancho completo
   ========================================================== */

[data-tmvx-stats] .tmvx-stats-filter-grid{
  grid-template-columns:
    minmax(180px, 1.2fr)
    minmax(180px, 1.4fr)
    minmax(180px, 1.4fr)
    minmax(150px, .9fr)
    minmax(150px, .9fr)
    minmax(190px, .9fr) !important;
  width:100%!important;
}

[data-tmvx-stats] .tmvx-stats-filter-grid select,
[data-tmvx-stats] .tmvx-stats-filter-grid input,
[data-tmvx-stats] .tmvx-stats-filter-grid button{
  width:100%!important;
  min-width:0!important;
}

[data-tmvx-stats] .tmvx-stats-filter-grid button[data-tmvx-stats-submit]{
  white-space:nowrap!important;
}

@media (max-width:1200px){
  [data-tmvx-stats] .tmvx-stats-filter-grid{
    grid-template-columns:repeat(3,minmax(0,1fr))!important;
  }
}

@media (max-width:760px){
  [data-tmvx-stats] .tmvx-stats-filter-grid{
    grid-template-columns:1fr!important;
  }
}


/* ==========================================================
   TMVX v5.1.8 — Filtros más finos + donut tipo serpentín
   ========================================================== */

/* Selects: flecha fina, con más aire a la derecha */
.tmvx select{
  appearance:none!important;
  -webkit-appearance:none!important;
  -moz-appearance:none!important;
  padding-right:48px!important;
  background-image:
    linear-gradient(45deg, transparent 50%, var(--tmvx-primary) 50%),
    linear-gradient(135deg, var(--tmvx-primary) 50%, transparent 50%)!important;
  background-position:
    calc(100% - 27px) 50%,
    calc(100% - 21px) 50%!important;
  background-size:
    6px 6px,
    6px 6px!important;
  background-repeat:no-repeat!important;
}

.tmvx select:focus{
  background-image:
    linear-gradient(45deg, transparent 50%, var(--tmvx-primary) 50%),
    linear-gradient(135deg, var(--tmvx-primary) 50%, transparent 50%)!important;
}

/* En filtros de estadísticas dejamos más aire visual entre flecha y borde/botón */
[data-tmvx-stats] .tmvx-stats-filter-grid select{
  padding-right:54px!important;
  background-position:
    calc(100% - 31px) 50%,
    calc(100% - 25px) 50%!important;
}

/* Donut: animación de formación circular desde blanco */
.tmvx-donut-modern{
  position:relative!important;
  overflow:hidden!important;
  animation:none!important;
}

.tmvx-donut-modern::after{
  content:"";
  position:absolute;
  inset:-2px;
  z-index:3;
  border-radius:50%;
  background:conic-gradient(
    transparent 0deg,
    transparent var(--tmvx-donut-reveal, 0deg),
    #fff var(--tmvx-donut-reveal, 0deg),
    #fff 360deg
  );
  animation:tmvxDonutSerpentine 1.15s cubic-bezier(.22,.61,.36,1) forwards;
  pointer-events:none;
}

.tmvx-donut-modern::before{
  z-index:4!important;
}

.tmvx-donut-modern > div,
.tmvx-donut-hit{
  z-index:5!important;
}

@keyframes tmvxDonutSerpentine{
  0%{
    --tmvx-donut-reveal:0deg;
    transform:rotate(-90deg);
  }
  100%{
    --tmvx-donut-reveal:360deg;
    transform:rotate(-90deg);
  }
}

/* Fallback para navegadores que no animan custom properties: giro suave de la máscara */
@supports not (background: conic-gradient(red 0deg, blue 360deg)){
  .tmvx-donut-modern::after{
    display:none!important;
  }
}

/* La leyenda entra después del dibujo */
.tmvx-donut-modern-layout .tmvx-donut-legend{
  animation:tmvxLegendFadeIn .45s ease .55s both;
}

@keyframes tmvxLegendFadeIn{
  from{
    opacity:0;
    transform:translateY(8px);
  }
  to{
    opacity:1;
    transform:translateY(0);
  }
}


/* ==========================================================
   TMVX v5.1.9 — Animaciones de gráficos más lentas
   ========================================================== */

/* Entrada general de gráficos */
.tmvx-chart-animate{
  animation-duration:.9s!important;
}

/* Distribución circular: formación más lenta y visible */
.tmvx-donut-modern::after{
  animation-duration:2.35s!important;
  animation-timing-function:cubic-bezier(.18,.7,.22,1)!important;
}

/* Donut: entrada base más pausada */
.tmvx-donut-modern{
  animation-duration:1.15s!important;
}

/* Leyenda del donut entra después de que el círculo ya se haya formado bastante */
.tmvx-donut-modern-layout .tmvx-donut-legend{
  animation-delay:1.25s!important;
  animation-duration:.75s!important;
}

/* Evolución de precios: dibujo más pausado de líneas */
.tmvx-animate-lines .tmvx-line-series path{
  animation-duration:2.25s!important;
}

/* Puntos aparecen al final del dibujo, no tan rápido */
.tmvx-animate-lines .tmvx-line-series circle{
  animation-delay:1.55s!important;
  animation-duration:.55s!important;
}

/* Circular SVG antiguo, si aparece en alguna vista/cache, también más lento */
.tmvx-animate-pie .tmvx-pie-chart path{
  animation-duration:1.45s!important;
}

.tmvx-animate-pie .tmvx-pie-chart path:nth-of-type(2){animation-delay:.09s!important}
.tmvx-animate-pie .tmvx-pie-chart path:nth-of-type(3){animation-delay:.18s!important}
.tmvx-animate-pie .tmvx-pie-chart path:nth-of-type(4){animation-delay:.27s!important}
.tmvx-animate-pie .tmvx-pie-chart path:nth-of-type(5){animation-delay:.36s!important}
.tmvx-animate-pie .tmvx-pie-chart path:nth-of-type(6){animation-delay:.45s!important}
.tmvx-animate-pie .tmvx-pie-chart path:nth-of-type(7){animation-delay:.54s!important}
.tmvx-animate-pie .tmvx-pie-chart path:nth-of-type(8){animation-delay:.63s!important}


/* ==========================================================
   TMVX v5.1.10 — Donut de distribución mucho más lento
   ========================================================== */

/* El donut se dibuja de forma más perceptible */
.tmvx-donut-modern::after{
  animation-duration:4.2s!important;
  animation-timing-function:cubic-bezier(.12,.72,.18,1)!important;
}

/* El círculo completo entra con más calma */
.tmvx-donut-modern{
  animation-duration:1.6s!important;
}

/* La leyenda espera claramente a que el donut esté casi formado */
.tmvx-donut-modern-layout .tmvx-donut-legend{
  animation-delay:2.7s!important;
  animation-duration:.9s!important;
}

/* Evita que otros efectos de entrada hagan parecer que la animación acaba antes */
.tmvx-donut-modern-layout.tmvx-chart-animate{
  animation-duration:1.1s!important;
}


/* ==========================================================
   TMVX v5.1.11 — Donut por tramos secuenciales tipo dominó
   ========================================================== */

.tmvx-donut-modern-layout{
  display:grid;
  grid-template-columns:240px 1fr;
  gap:30px;
  align-items:center;
}

.tmvx-donut-domino{
  width:240px;
  height:240px;
  position:relative;
  display:grid;
  place-items:center;
  margin:auto;
}

.tmvx-donut-svg{
  width:240px;
  height:240px;
  display:block;
  overflow:visible;
  transform:rotate(0deg);
}

.tmvx-donut-track{
  fill:none;
  stroke:#eef2f5;
  stroke-width:52;
}

.tmvx-donut-seg{
  opacity:0;
  transform-origin:120px 120px;
  animation:tmvxDonutDomino .8s cubic-bezier(.22,.61,.36,1) forwards;
}

@keyframes tmvxDonutDomino{
  0%{
    opacity:0;
    transform:rotate(-10deg) scale(.96);
    filter:brightness(1.12);
  }
  35%{
    opacity:1;
  }
  100%{
    opacity:1;
    transform:rotate(0deg) scale(1);
    filter:brightness(1);
  }
}

.tmvx-donut-domino > div{
  position:absolute;
  inset:0;
  display:grid;
  place-items:center;
  text-align:center;
  z-index:3;
}

.tmvx-donut-domino > div strong{
  display:block;
  color:var(--tmvx-primary);
  font-size:36px;
  line-height:1;
  font-weight:500;
}

.tmvx-donut-domino > div span{
  display:block;
  margin-top:6px;
  color:var(--tmvx-muted);
  font-size:12px;
}

.tmvx-donut-hit{
  position:absolute;
  z-index:4;
  width:18px;
  height:18px;
  margin:-9px 0 0 -9px;
  border:0;
  background:transparent;
  border-radius:50%;
  cursor:pointer;
}

.tmvx-donut-hit:focus{
  outline:1px solid var(--tmvx-primary);
  outline-offset:2px;
}

/* La leyenda puede salir pronto; no la retrasamos */
.tmvx-donut-modern-layout .tmvx-donut-legend{
  animation:tmvxLegendFadeInFast .35s ease .2s both;
}

@keyframes tmvxLegendFadeInFast{
  from{opacity:0;transform:translateY(6px)}
  to{opacity:1;transform:translateY(0)}
}

@media (max-width:900px){
  .tmvx-donut-modern-layout{
    grid-template-columns:1fr;
  }
}


/* ==========================================================
   TMVX v5.1.12 — Texto centrado en donut + leyenda inmediata
   ========================================================== */

/* Forzamos el bloque central del donut a estar exactamente en el hueco interior */
.tmvx-donut-domino > div{
  position:absolute!important;
  left:50%!important;
  top:50%!important;
  width:104px!important;
  height:104px!important;
  transform:translate(-50%,-50%)!important;
  inset:auto!important;
  display:flex!important;
  flex-direction:column!important;
  align-items:center!important;
  justify-content:center!important;
  text-align:center!important;
  z-index:5!important;
  pointer-events:none!important;
}

.tmvx-donut-domino > div strong{
  display:block!important;
  color:var(--tmvx-primary)!important;
  font-size:34px!important;
  line-height:1!important;
  font-weight:500!important;
  margin:0!important;
  padding:0!important;
}

.tmvx-donut-domino > div span{
  display:block!important;
  margin:7px 0 0!important;
  color:var(--tmvx-muted)!important;
  font-size:12px!important;
  line-height:1.1!important;
}

/* La leyenda aparece prácticamente al cargar, sin esperar al efecto dominó */
.tmvx-donut-modern-layout .tmvx-donut-legend,
.tmvx-donut-modern-layout .tmvx-donut-legend-all{
  animation:tmvxLegendAlmostInstant .18s ease .05s both!important;
}

@keyframes tmvxLegendAlmostInstant{
  from{
    opacity:0;
    transform:translateY(3px);
  }
  to{
    opacity:1;
    transform:translateY(0);
  }
}


/* ==========================================================
   TMVX v5.1.13 — Centrado robusto del texto del donut
   ========================================================== */

.tmvx-donut-domino .tmvx-donut-center{
  position:absolute!important;
  left:50%!important;
  top:50%!important;
  width:96px!important;
  height:96px!important;
  min-width:96px!important;
  min-height:96px!important;
  transform:translate(-50%,-50%)!important;
  display:flex!important;
  flex-direction:column!important;
  align-items:center!important;
  justify-content:center!important;
  text-align:center!important;
  z-index:20!important;
  pointer-events:none!important;
  margin:0!important;
  padding:0!important;
  inset:auto!important;
  background:transparent!important;
}

.tmvx-donut-domino .tmvx-donut-center strong{
  display:block!important;
  width:100%!important;
  color:var(--tmvx-primary)!important;
  font-size:34px!important;
  line-height:1!important;
  font-weight:500!important;
  margin:0!important;
  padding:0!important;
  text-align:center!important;
}

.tmvx-donut-domino .tmvx-donut-center span{
  display:block!important;
  width:100%!important;
  margin:7px 0 0!important;
  padding:0!important;
  color:var(--tmvx-muted)!important;
  font-size:12px!important;
  line-height:1.1!important;
  text-align:center!important;
}


/* ==========================================================
   TMVX v5.1.14 — Fix definitivo de centrado del texto del donut
   ========================================================== */

.tmvx-donut-domino{
  position:relative!important;
}

.tmvx-donut-domino > .tmvx-donut-center{
  position:absolute!important;
  left:50%!important;
  top:50%!important;
  transform:translate(-50%,-50%)!important;
  transform-origin:center center!important;
  width:128px!important;
  height:88px!important;
  margin:0!important;
  padding:0!important;
  display:flex!important;
  flex-direction:column!important;
  align-items:center!important;
  justify-content:center!important;
  text-align:center!important;
  z-index:30!important;
  pointer-events:none!important;
  inset:auto!important;
}

.tmvx-donut-domino > .tmvx-donut-center strong{
  display:block!important;
  width:100%!important;
  margin:0 auto!important;
  padding:0!important;
  text-align:center!important;
  font-size:34px!important;
  line-height:1!important;
  font-weight:500!important;
  color:var(--tmvx-primary)!important;
}

.tmvx-donut-domino > .tmvx-donut-center span{
  display:block!important;
  width:100%!important;
  margin:6px auto 0!important;
  padding:0!important;
  text-align:center!important;
  white-space:nowrap!important;
  font-size:13px!important;
  line-height:1.1!important;
  color:var(--tmvx-muted)!important;
}

/* Anulamos reglas anteriores más genéricas que puedan desplazarlo */
.tmvx-donut-domino > div:not(.tmvx-donut-center){
  z-index:auto!important;
}


/* ==========================================================
   TMVX v5.1.15 — Texto del donut dentro del SVG
   ========================================================== */

/* Ocultamos cualquier bloque HTML central antiguo si quedara en caché */
.tmvx-donut-center{
  display:none!important;
}

/* Agujero blanco y textos centrados por coordenadas SVG */
.tmvx-donut-hole{
  fill:#fff!important;
  stroke:var(--tmvx-line)!important;
  stroke-width:1!important;
}

.tmvx-donut-svg-number{
  fill:var(--tmvx-primary)!important;
  font-size:34px!important;
  font-weight:500!important;
  dominant-baseline:middle!important;
  font-family:inherit!important;
}

.tmvx-donut-svg-label{
  fill:var(--tmvx-muted)!important;
  font-size:12px!important;
  font-weight:400!important;
  dominant-baseline:middle!important;
  font-family:inherit!important;
}

/* Garantiza que el SVG no hereda text-align/position externos */
.tmvx-donut-svg text{
  transform:none!important;
  animation:none!important;
}


/* ==========================================================
   TMVX v5.2.0 — Mapa original Mercamadrid funcional
   ========================================================== */

.tmvx-original-map-module{
  background:#fff!important;
}

.tmvx-original-map-head{
  display:flex;
  justify-content:space-between;
  align-items:flex-end;
  gap:24px;
  margin-bottom:28px;
}

.tmvx-original-map-head h3{
  margin:0!important;
  color:var(--tmvx-ink)!important;
  font-size:28px!important;
  font-weight:400!important;
  letter-spacing:-.04em!important;
}

.tmvx-original-map-head p{
  margin:0!important;
  max-width:720px;
  color:var(--tmvx-muted)!important;
  font-size:14px!important;
  line-height:1.5!important;
}

.tmvx-original-map-html{
  position:relative;
  border:1px solid var(--tmvx-line);
  background:#fff;
  overflow:auto;
  padding:18px;
}

.tmvx-original-map-html .map-container{
  width:100%;
  min-width:960px;
}

.tmvx-original-map-html img[usemap]{
  max-width:100%;
  height:auto;
  display:block;
}

.tmvx-original-map-html area{
  cursor:pointer;
}

.tmvx-original-map-html #div-mapa-background{
  position:fixed!important;
  inset:0!important;
  z-index:999998!important;
  background:rgba(0,0,0,.36)!important;
}

.tmvx-original-map-html .div-mapa{
  display:none;
  position:fixed!important;
  left:50%!important;
  top:50%!important;
  transform:translate(-50%,-50%)!important;
  z-index:999999!important;
  width:min(1100px,92vw)!important;
  max-height:88vh!important;
  overflow:auto!important;
  background:#fff!important;
  border:1px solid var(--tmvx-line)!important;
  box-shadow:0 30px 70px rgba(0,0,0,.22)!important;
  padding:24px!important;
}

.tmvx-original-map-html .div-mapa.is-active,
.tmvx-original-map-html .div-mapa.zindex{
  display:block!important;
}

.tmvx-original-map-html .contenedor-div-mapa{
  position:relative!important;
}

.tmvx-original-map-html .div-cerrar-mapa{
  position:sticky!important;
  top:0!important;
  margin-left:auto!important;
  width:34px!important;
  height:34px!important;
  border:1px solid var(--tmvx-line)!important;
  background:#fff!important;
  cursor:pointer!important;
  z-index:3!important;
}

.tmvx-original-map-html .div-cerrar-mapa:before,
.tmvx-original-map-html .div-cerrar-mapa:after{
  content:"";
  position:absolute;
  left:9px;
  top:16px;
  width:14px;
  height:1px;
  background:var(--tmvx-primary);
}

.tmvx-original-map-html .div-cerrar-mapa:before{transform:rotate(45deg)}
.tmvx-original-map-html .div-cerrar-mapa:after{transform:rotate(-45deg)}

.tmvx-original-map-html .mapa-texto{
  display:grid;
  gap:14px;
}

.tmvx-original-map-html .tmvx-map-result,
.tmvx-original-map-html .mapa-texto > div{
  border:1px solid var(--tmvx-line);
  padding:18px;
  background:#fff;
}

.tmvx-original-map-html .mapa-texto h3{
  margin:0 0 10px!important;
  color:var(--tmvx-primary)!important;
  font-size:20px!important;
  font-weight:500!important;
}

.tmvx-original-map-html .mapa-texto p{
  margin:6px 0!important;
  color:var(--tmvx-text)!important;
  font-size:14px!important;
}

.tmvx-original-map-html .mapa-texto a{
  color:var(--tmvx-primary)!important;
  text-decoration:none!important;
}

.tmvx-original-map-html .mapa-texto a:hover{
  opacity:.7;
}

@media (max-width:900px){
  .tmvx-original-map-head{
    align-items:flex-start;
    flex-direction:column;
  }
  .tmvx-original-map-html{
    padding:10px;
  }
}


/* ==========================================================
   TMVX v5.2.1 — Mapa original: header limpio y áreas activas
   ========================================================== */

.tmvx-original-map-head{
  margin-bottom:20px!important;
}

.tmvx-original-map-head p:empty{
  display:none!important;
}

.tmvx-original-map-html map,
.tmvx-original-map-html area{
  cursor:pointer!important;
  pointer-events:auto!important;
}

.tmvx-original-map-html img[usemap]{
  cursor:default!important;
  user-select:none!important;
}


/* ==========================================================
   TMVX v5.2.2 — Capa visible/clicable sobre mapas originales
   ========================================================== */

.tmvx-map-img-wrap{
  position:relative!important;
  display:inline-block!important;
  max-width:100%!important;
  line-height:0!important;
}

.tmvx-map-img-wrap > img{
  display:block!important;
  max-width:100%!important;
  height:auto!important;
}

.tmvx-map-click-layer{
  position:absolute!important;
  inset:0!important;
  z-index:5!important;
  pointer-events:none!important;
}

.tmvx-map-hotspot{
  position:absolute!important;
  z-index:6!important;
  display:block!important;
  border:1px solid rgba(0,51,102,.38)!important;
  background:rgba(0,51,102,.08)!important;
  cursor:pointer!important;
  padding:0!important;
  margin:0!important;
  border-radius:0!important;
  opacity:.18!important;
  pointer-events:auto!important;
  transition:opacity .15s ease, background .15s ease, border-color .15s ease!important;
}

.tmvx-map-hotspot:hover,
.tmvx-map-hotspot:focus{
  opacity:1!important;
  background:rgba(0,51,102,.18)!important;
  border-color:rgba(0,51,102,.8)!important;
  outline:none!important;
}

.tmvx-map-hotspot:focus{
  box-shadow:0 0 0 2px rgba(0,51,102,.18)!important;
}


/* ==========================================================
   TMVX v5.2.3 — Hotspots mapa: coordenadas reales visibles
   ========================================================== */

/* Temporalmente más visibles para validar que las zonas están donde deben */
.tmvx-map-hotspot{
  opacity:.32!important;
  background:rgba(0,51,102,.12)!important;
  border-color:rgba(0,51,102,.52)!important;
}

.tmvx-map-hotspot:hover,
.tmvx-map-hotspot:focus{
  opacity:1!important;
  background:rgba(0,51,102,.24)!important;
  border-color:rgba(0,51,102,.9)!important;
}


/* ==========================================================
   TMVX v5.2.4 — Recalculo de hotspots al mostrar pestaña Mapa
   ========================================================== */

.tmvx-original-map-html .tmvx-map-img-wrap{
  min-height:1px!important;
}


/* ==========================================================
   TMVX v5.3.0 — Mapa: navegación, tooltips, cards y zoom
   ========================================================== */

.tmvx-original-map-head{
  justify-content:center!important;
  text-align:center!important;
}

.tmvx-original-map-html{
  overflow:hidden!important;
}

.tmvx-map-toolbar{
  display:flex;
  align-items:flex-start;
  justify-content:space-between;
  gap:20px;
  margin-bottom:20px;
  border:1px solid var(--tmvx-line);
  background:#fff;
  padding:14px;
}

.tmvx-map-legend{
  display:flex;
  flex-wrap:wrap;
  gap:8px;
}

.tmvx-map-legend button{
  height:34px;
  padding:0 12px;
  border:1px solid var(--tmvx-line);
  background:#fff;
  color:var(--tmvx-muted);
  font-size:12px;
  font-weight:500;
  border-radius:0!important;
  cursor:pointer;
  transition:background .18s ease,color .18s ease,border-color .18s ease;
}

.tmvx-map-legend button:hover,
.tmvx-map-legend button.is-active{
  background:var(--tmvx-primary);
  border-color:var(--tmvx-primary);
  color:#fff;
}

.tmvx-map-zoom{
  display:flex;
  align-items:center;
  flex:0 0 auto;
  border:1px solid var(--tmvx-line);
  background:#fff;
}

.tmvx-map-zoom button{
  width:38px;
  height:34px;
  border:0;
  background:#fff;
  color:var(--tmvx-primary);
  font-size:20px;
  font-weight:300;
  line-height:1;
  cursor:pointer;
  border-radius:0!important;
}

.tmvx-map-zoom button:first-child{
  border-right:1px solid var(--tmvx-line);
}

.tmvx-map-zoom button:last-child{
  border-left:1px solid var(--tmvx-line);
}

.tmvx-map-zoom button:hover{
  background:var(--tmvx-primary);
  color:#fff;
}

.tmvx-map-zoom span{
  min-width:56px;
  text-align:center;
  color:var(--tmvx-muted);
  font-size:12px;
  font-weight:600;
}

.tmvx-map-stage{
  position:relative;
  width:100%;
  min-height:360px;
  overflow:auto;
  display:flex;
  justify-content:center;
  align-items:flex-start;
  border:1px solid var(--tmvx-line);
  background:#fff;
  padding:22px;
}

.tmvx-map-panel{
  display:none!important;
  position:static!important;
  left:auto!important;
  top:auto!important;
  transform:none!important;
  z-index:auto!important;
  width:auto!important;
  max-width:none!important;
  max-height:none!important;
  overflow:visible!important;
  box-shadow:none!important;
  border:0!important;
  padding:0!important;
  background:transparent!important;
  margin:0 auto!important;
  text-align:center;
}

.tmvx-map-panel.is-active{
  display:block!important;
}

.tmvx-map-panel .div-cerrar-mapa{
  display:none!important;
}

.tmvx-map-panel h3{
  margin:0 0 18px!important;
  color:var(--tmvx-primary)!important;
  font-size:22px!important;
  font-weight:400!important;
  text-align:center!important;
}

.tmvx-map-panel .contenedor-div-mapa{
  display:flex!important;
  flex-direction:column!important;
  align-items:center!important;
}

.tmvx-map-img-wrap{
  margin-left:auto!important;
  margin-right:auto!important;
}

.tmvx-map-panel img[usemap]{
  margin-left:auto!important;
  margin-right:auto!important;
}

.tmvx-map-click-layer{
  z-index:10!important;
}

.tmvx-map-hotspot{
  opacity:.18!important;
  background:rgba(0,51,102,.10)!important;
  border:1px solid rgba(0,51,102,.38)!important;
}

.tmvx-map-hotspot:hover,
.tmvx-map-hotspot:focus{
  opacity:1!important;
  background:rgba(0,51,102,.22)!important;
  border-color:rgba(0,51,102,.9)!important;
}

.tmvx-map-tooltip{
  position:absolute;
  z-index:999999;
  min-width:130px;
  max-width:260px;
  padding:9px 11px;
  background:#fff;
  color:var(--tmvx-ink);
  border:1px solid var(--tmvx-line);
  box-shadow:0 14px 30px rgba(0,0,0,.10);
  font-size:12px;
  line-height:1.35;
  pointer-events:none;
  opacity:0;
  visibility:hidden;
  transform:translate(-50%,calc(-100% - 14px));
  transition:opacity .18s ease, transform .18s ease, visibility .18s ease;
}

.tmvx-map-tooltip.is-visible{
  opacity:1;
  visibility:visible;
  transform:translate(-50%,calc(-100% - 18px));
}

.tmvx-map-tooltip strong{
  display:block;
  color:var(--tmvx-primary);
  font-size:12px;
  line-height:1.25;
  margin-bottom:4px;
}

.tmvx-map-tooltip span{
  display:block;
  color:var(--tmvx-muted);
}

.tmvx-map-info{
  margin-top:22px;
}

.tmvx-map-info-empty,
.tmvx-map-info-loading{
  border:1px solid var(--tmvx-line);
  background:#fff;
  padding:18px;
  color:var(--tmvx-muted);
  font-size:14px;
  text-align:center;
}

.tmvx-map-info-empty strong{
  display:block;
  color:var(--tmvx-primary);
  margin-bottom:4px;
}

.tmvx-map-info-empty span{
  display:block;
}

.tmvx-map-info-loading span{
  width:20px;
  height:20px;
  border:1px solid var(--tmvx-line);
  border-top-color:var(--tmvx-primary);
  display:inline-block;
  border-radius:50%;
  animation:tmvxSpin .8s linear infinite;
  vertical-align:middle;
  margin-right:8px;
}

.tmvx-map-info-loading strong{
  color:var(--tmvx-primary);
  font-weight:500;
}

.tmvx-map-info-loading small{
  display:block;
  margin-top:6px;
  color:var(--tmvx-muted);
}

.tmvx-map-info-head{
  border:1px solid var(--tmvx-line);
  border-bottom:0;
  padding:16px 18px;
  background:#fff;
}

.tmvx-map-info-head span{
  color:var(--tmvx-muted);
  font-size:13px;
}

.tmvx-map-info-grid{
  border:1px solid var(--tmvx-line);
  padding:18px;
  background:#fff;
}

@media (max-width:900px){
  .tmvx-map-toolbar{
    flex-direction:column;
  }
  .tmvx-map-stage{
    justify-content:flex-start;
  }
}


/* ==========================================================
   TMVX v5.3.1 — Mapa en el mismo contenedor, sin modales
   ========================================================== */

/* Anula de forma más específica los estilos heredados de modal del mapa original */
.tmvx-original-map-html .tmvx-map-stage .tmvx-map-panel,
.tmvx-original-map-html .tmvx-map-stage .div-mapa.tmvx-map-panel,
.tmvx-original-map-html .tmvx-map-stage .map-container.tmvx-map-panel{
  display:none!important;
  position:static!important;
  left:auto!important;
  top:auto!important;
  right:auto!important;
  bottom:auto!important;
  inset:auto!important;
  transform:none!important;
  z-index:auto!important;
  width:auto!important;
  max-width:none!important;
  max-height:none!important;
  min-width:0!important;
  overflow:visible!important;
  background:transparent!important;
  border:0!important;
  box-shadow:none!important;
  padding:0!important;
  margin:0 auto!important;
}

.tmvx-original-map-html .tmvx-map-stage .tmvx-map-panel.is-active,
.tmvx-original-map-html .tmvx-map-stage .div-mapa.tmvx-map-panel.is-active,
.tmvx-original-map-html .tmvx-map-stage .map-container.tmvx-map-panel.is-active{
  display:block!important;
}

/* Fondo/modal antiguo desactivado */
.tmvx-original-map-html #div-mapa-background{
  display:none!important;
}

.tmvx-map-stage{
  min-height:520px!important;
  align-items:center!important;
}

.tmvx-map-stage-view{
  display:none!important;
  width:100%!important;
  max-width:1180px!important;
  margin:0 auto!important;
}

.tmvx-map-stage-view.is-active{
  display:block!important;
}

.tmvx-map-info{
  margin-top:0!important;
}

.tmvx-map-info-top{
  display:flex;
  justify-content:flex-start;
  margin-bottom:14px;
}

.tmvx-map-back{
  height:36px;
  padding:0 14px;
  border:1px solid var(--tmvx-line);
  background:#fff;
  color:var(--tmvx-primary);
  font-size:13px;
  font-weight:500;
  border-radius:0!important;
  cursor:pointer;
  transition:background .18s ease,color .18s ease,border-color .18s ease;
}

.tmvx-map-back:hover{
  background:var(--tmvx-primary);
  border-color:var(--tmvx-primary);
  color:#fff;
}

.tmvx-map-info-grid{
  max-height:none!important;
}

/* La leyenda siempre abre mapas dentro del stage */
.tmvx-map-legend button.is-active{
  background:var(--tmvx-primary)!important;
  color:#fff!important;
}


/* ==========================================================
   TMVX v5.3.2 — Ajustes Distribución y Evolución
   ========================================================== */

/* Distribución: reactivar el indicador de scroll animado en el bloque y la leyenda */
.tmvx-donut-modern-layout,
.tmvx-donut-legend-all,
[data-tmvx-scroll-animated]{
  position:relative;
}

.tmvx-donut-legend-all[data-tmvx-scroll-animated]{
  padding-bottom:22px;
}

/* Evita duplicar el indicador en contenedores que no tengan overflow útil */
.tmvx-scroll-hint[data-tmvx-scroll-animated]::before,
.tmvx-scroll-hint[data-tmvx-scroll-animated]::after{
  content:none!important;
}

/* Tooltip de gráficos: siempre ligado al cursor real, no al offset interno del wrapper */
.tmvx-chart-tooltip-fixed,
body > .tmvx-chart-tooltip{
  position:fixed!important;
  z-index:999999!important;
  pointer-events:none!important;
  transform:translate(-50%, calc(-100% - 16px))!important;
  border-radius:0!important;
}

body > .tmvx-chart-tooltip.is-visible{
  opacity:1!important;
  visibility:visible!important;
  transform:translate(-50%, calc(-100% - 18px))!important;
}

/* El tooltip se dispara sobre la porción de color real del donut */
.tmvx-donut-seg{
  cursor:pointer;
  pointer-events:stroke;
  outline:none!important;
  filter:none!important;
  box-shadow:none!important;
}

.tmvx-donut-seg:hover,
.tmvx-donut-seg:focus,
.tmvx-donut-seg:focus-visible{
  outline:none!important;
  filter:none!important;
  box-shadow:none!important;
  opacity:.92;
}

/* Elimina la elipse/sombra rara de focus de los antiguos puntos invisibles */
.tmvx-donut-hit,
.tmvx-donut-hit:focus,
.tmvx-donut-hit:focus-visible{
  outline:none!important;
  box-shadow:none!important;
  filter:none!important;
  background:transparent!important;
}

.tmvx-donut-domino button,
.tmvx-donut-domino button:focus,
.tmvx-donut-domino button:focus-visible{
  outline:none!important;
  box-shadow:none!important;
}

/* Evolución: deja el precio mínimo por debajo del área de dibujo, como el máximo queda por encima */
.tmvx-line-chart-wrap{
  padding-bottom:18px!important;
  overflow:visible auto!important;
}

.tmvx-line-chart{
  overflow:visible!important;
}

.tmvx-line-axis .tmvx-line-axis-min-price{
  dominant-baseline:auto;
}

.tmvx-line-axis text:last-child{
  transform:translateY(8px);
}


/* ==========================================================
   TMVX — Escalado visual SOLO del mapa general JPG
   ----------------------------------------------------------
   No modifica hotspots, coordenadas, áreas, JS ni lógica.
   El nuevo JPG es 4775x3376, pero el mapa lógico/hotspots
   trabajan sobre 1191x842.
   ========================================================== */

#tmvx-map-main > .tmvx-map-img-wrap,
#tmvx-map-main .tmvx-map-img-wrap:has(#img-mapa),
#tmvx-map-main div[style*="map-screenshot.jpg"] {
  width: 1191px !important;
  height: 842px !important;
  max-width: none !important;
  max-height: none !important;
}

#tmvx-map-main div[style*="map-screenshot.jpg"] {
  background-size: 1191px 842px !important;
  background-repeat: no-repeat !important;
  background-position: left top !important;
}

#tmvx-map-main .tmvx-map-click-layer {
  width: 1191px !important;
  height: 842px !important;
}


/* ==========================================================
   TMVX v5.3.6 — Zoom suave centrado del mapa
   ========================================================== */

.tmvx-map-panel{
  transform-origin:center center;
  transition:transform .26s cubic-bezier(.22,.61,.36,1);
  will-change:transform;
}

.tmvx-map-stage{
  overflow:auto!important;
  overscroll-behavior:contain;
}

.tmvx-map-zoom{
  align-items:center!important;
}

.tmvx-map-zoom button{
  display:flex!important;
  align-items:center!important;
  justify-content:center!important;
  line-height:1!important;
  padding:0!important;
}

.tmvx-map-zoom span{
  display:flex!important;
  align-items:center!important;
  justify-content:center!important;
  height:34px!important;
  line-height:1!important;
}


/* ==========================================================
   TMVX v5.3.7 — Aplicar zoom al wrapper real del mapa
   ========================================================== */

.tmvx-map-panel > .tmvx-map-img-wrap,
.tmvx-map-panel .tmvx-map-img-wrap,
.tmvx-map-panel .maphilighted{
  transform-origin:center center;
  transition:transform .26s cubic-bezier(.22,.61,.36,1);
  will-change:transform;
}


/* ==========================================================
   TMVX v5.3.10 — Zoom abajo a la derecha dentro de toolbar
   ========================================================== */

.tmvx-map-toolbar{
  position:relative!important;
  display:flex!important;
  flex-direction:column!important;
  align-items:stretch!important;
  justify-content:flex-start!important;
  gap:12px!important;
}

.tmvx-map-toolbar .tmvx-map-legend{
  width:100%!important;
}

.tmvx-map-toolbar .tmvx-map-zoom,
.tmvx-map-zoom-toolbar-bottom{
  position:static!important;
  top:auto!important;
  right:auto!important;
  bottom:auto!important;
  left:auto!important;
  align-self:flex-end!important;
  margin:0!important;
  z-index:auto!important;
  box-shadow:none!important;
  backdrop-filter:none!important;
}


/* ==========================================================
   TMVX v5.3.11 — Mapa draggable solo con zoom > 100%
   ========================================================== */

.tmvx-map-panel.tmvx-map-is-zoomed{
  cursor:grab;
}

.tmvx-map-panel.tmvx-map-is-dragging{
  cursor:grabbing!important;
}

.tmvx-map-stage{
  touch-action:none;
  user-select:none;
}


/* ==========================================================
   TMVX v5.3.12 — Límites de arrastre y cursor mano
   ========================================================== */

.tmvx-map-panel.tmvx-map-is-dragging,
.tmvx-map-panel.tmvx-map-is-dragging .tmvx-map-img-wrap,
.tmvx-map-panel.tmvx-map-is-dragging .maphilighted,
.tmvx-map-panel.tmvx-map-is-dragging .tmvx-map-click-layer,
.tmvx-map-panel.tmvx-map-is-dragging .tmvx-map-hotspot,
.tmvx-map-stage-is-dragging,
.tmvx-map-global-dragging,
.tmvx-map-global-dragging *{
  cursor:grabbing!important;
}

.tmvx-map-stage{
  overflow:hidden!important;
}


/* ==========================================================
   TMVX v5.3.13 — Cursor de mano solo durante arrastre real
   ========================================================== */

.tmvx-map-panel.tmvx-map-is-zoomed:not(.tmvx-map-is-dragging),
.tmvx-map-panel.tmvx-map-is-zoomed:not(.tmvx-map-is-dragging) .tmvx-map-img-wrap,
.tmvx-map-panel.tmvx-map-is-zoomed:not(.tmvx-map-is-dragging) .maphilighted,
.tmvx-map-panel.tmvx-map-is-zoomed:not(.tmvx-map-is-dragging) .tmvx-map-click-layer,
.tmvx-map-panel.tmvx-map-is-zoomed:not(.tmvx-map-is-dragging) .tmvx-map-hotspot{
  cursor:default!important;
}

.tmvx-map-panel.tmvx-map-is-dragging,
.tmvx-map-panel.tmvx-map-is-dragging .tmvx-map-img-wrap,
.tmvx-map-panel.tmvx-map-is-dragging .maphilighted,
.tmvx-map-panel.tmvx-map-is-dragging .tmvx-map-click-layer,
.tmvx-map-panel.tmvx-map-is-dragging .tmvx-map-hotspot,
.tmvx-map-stage-is-dragging,
.tmvx-map-global-dragging,
.tmvx-map-global-dragging *{
  cursor:grabbing!important;
}


/* ==========================================================
   TMVX v5.3.14 — Hotspots clicables aunque el mapa esté ampliado
   ========================================================== */

.tmvx-map-panel.tmvx-map-is-zoomed .tmvx-map-hotspot{
  pointer-events:auto!important;
}


/* ==========================================================
   TMVX v5.3.15 — Cursor pointer en hotspots con mapa ampliado
   ========================================================== */

.tmvx-map-panel.tmvx-map-is-zoomed:not(.tmvx-map-is-dragging) .tmvx-map-hotspot,
.tmvx-map-panel.tmvx-map-is-zoomed:not(.tmvx-map-is-dragging) .tmvx-map-hotspot:hover,
.tmvx-map-panel.tmvx-map-is-zoomed:not(.tmvx-map-is-dragging) .tmvx-map-hotspot:focus{
  cursor:pointer!important;
}


/* ==========================================================
   TMVX v5.3.16 — Tooltip con línea superior y pico
   ========================================================== */

.tmvx-map-tooltip{
  position:absolute;
  overflow:visible!important;
  border-top:2px solid var(--tmvx-primary)!important;
  transform:translate(-50%, calc(-100% - 18px))!important;
}

.tmvx-map-tooltip::before{
  content:"";
  position:absolute;
  left:50%;
  bottom:-9px;
  width:16px;
  height:16px;
  background:#fff;
  border-right:1px solid var(--tmvx-line);
  border-bottom:1px solid var(--tmvx-line);
  transform:translateX(-50%) rotate(45deg);
  z-index:-1;
}

.tmvx-map-tooltip::after{
  content:"";
  position:absolute;
  left:50%;
  bottom:-16px;
  width:1px;
  height:1px;
  transform:translateX(-50%);
}


/* ==========================================================
   TMVX v5.3.17 — Hotspots invisibles, borde solo hover
   ========================================================== */

/*
 * Reposo: el hotspot existe para capturar hover/click,
 * pero visualmente no pinta absolutamente nada.
 */
.tmvx-map-hotspot,
.tmvx-map-panel .tmvx-map-hotspot,
.tmvx-map-click-layer .tmvx-map-hotspot,
.tmvx-map-panel.tmvx-map-is-zoomed .tmvx-map-hotspot{
  background: none !important;
  background-color: transparent !important;
  background-image: none !important;
  border: 0 !important;
  box-shadow: none !important;
  outline: 0 !important;
  filter: none !important;
  backdrop-filter: none !important;
  -webkit-backdrop-filter: none !important;
  opacity: 1 !important;
  appearance: none !important;
  -webkit-appearance: none !important;
}

/* Quitar cualquier capa/punto/halo heredado */
.tmvx-map-hotspot::before,
.tmvx-map-hotspot::after,
.tmvx-map-panel .tmvx-map-hotspot::before,
.tmvx-map-panel .tmvx-map-hotspot::after,
.tmvx-map-click-layer .tmvx-map-hotspot::before,
.tmvx-map-click-layer .tmvx-map-hotspot::after{
  content: none !important;
  display: none !important;
}

/*
 * Hover: única señal visual permitida.
 * Sin fondo, sin sombra, sin desenfoque.
 */
.tmvx-map-hotspot:hover,
.tmvx-map-panel .tmvx-map-hotspot:hover,
.tmvx-map-click-layer .tmvx-map-hotspot:hover,
.tmvx-map-panel.tmvx-map-is-zoomed .tmvx-map-hotspot:hover{
  background: none !important;
  background-color: transparent !important;
  background-image: none !important;
  border: 0 !important;
  box-shadow: none !important;
  outline: 0 !important;
  filter: none !important;
  backdrop-filter: none !important;
  -webkit-backdrop-filter: none !important;
}

/* Evitar que el navegador pinte foco/halo salvo navegación por teclado */
.tmvx-map-hotspot:focus{
  outline: 0 !important;
  box-shadow: none !important;
}

.tmvx-map-hotspot:focus-visible{
  border: 0 !important;
  background: none !important;
  box-shadow: none !important;
  outline: 0 !important;
}




/* ==========================================================
   TMVX v5.3.19 — Hover de hotspots con fondo blanco translúcido
   ========================================================== */

/* Reposo: sigue completamente invisible */
.tmvx-map-hotspot,
.tmvx-map-panel .tmvx-map-hotspot,
.tmvx-map-click-layer .tmvx-map-hotspot,
.tmvx-map-panel.tmvx-map-is-zoomed .tmvx-map-hotspot{
  background: none !important;
  background-color: transparent !important;
  background-image: none !important;
  border: 0 !important;
  box-shadow: none !important;
  outline: 0 !important;
  filter: none !important;
  backdrop-filter: none !important;
  -webkit-backdrop-filter: none !important;
}

/* Hover/focus: solo fondo blanco con transparencia, sin borde */
.tmvx-map-hotspot:hover,
.tmvx-map-panel .tmvx-map-hotspot:hover,
.tmvx-map-click-layer .tmvx-map-hotspot:hover,
.tmvx-map-panel.tmvx-map-is-zoomed .tmvx-map-hotspot:hover,
.tmvx-map-hotspot:focus-visible,
.tmvx-map-panel .tmvx-map-hotspot:focus-visible,
.tmvx-map-click-layer .tmvx-map-hotspot:focus-visible{
  background: rgba(255,255,255,.34) !important;
  background-color: rgba(255,255,255,.34) !important;
  background-image: none !important;
  border: 0 !important;
  box-shadow: none !important;
  outline: 0 !important;
  filter: none !important;
  backdrop-filter: none !important;
  -webkit-backdrop-filter: none !important;
}


/* ==========================================================
   TMVX v5.3.20 — Botón guía de zonas disponibles
   ========================================================== */

.tmvx-map-controls{
  display:flex!important;
  align-items:center!important;
  justify-content:flex-end!important;
  gap:8px!important;
  align-self:flex-end!important;
  margin:0!important;
}

.tmvx-map-guide-btn{
  height:36px!important;
  padding:0 14px!important;
  border:1px solid var(--tmvx-line)!important;
  background:#fff!important;
  color:var(--tmvx-muted)!important;
  font-size:12px!important;
  font-weight:600!important;
  line-height:1!important;
  border-radius:0!important;
  cursor:pointer!important;
  display:flex!important;
  align-items:center!important;
  justify-content:center!important;
  transition:background .18s ease,color .18s ease,border-color .18s ease!important;
}

.tmvx-map-guide-btn:hover,
.tmvx-map-guide-btn:focus-visible{
  background:var(--tmvx-primary)!important;
  border-color:var(--tmvx-primary)!important;
  color:#fff!important;
  outline:0!important;
}

/*
 * Mientras se pasa el ratón por el botón guía, todas las zonas disponibles
 * se muestran con el mismo estilo visual que el hover individual.
 */
.tmvx-map-guide-active .tmvx-map-hotspot,
.tmvx-map-panel.tmvx-map-guide-active .tmvx-map-hotspot{
  background:rgba(0,51,102,.16)!important;
  background-color:rgba(0,51,102,.16)!important;
  background-image:none!important;
  border:0!important;
  box-shadow:none!important;
  outline:0!important;
  filter:none!important;
  backdrop-filter:none!important;
  -webkit-backdrop-filter:none!important;
}


/* ==========================================================
   TMVX v5.3.21 — Modo guía con tinte azul corporativo
   ========================================================== */

.tmvx-map-guide-active .tmvx-map-hotspot,
.tmvx-map-panel.tmvx-map-guide-active .tmvx-map-hotspot{
  background:rgba(0,51,102,.16)!important;
  background-color:rgba(0,51,102,.16)!important;
  background-image:none!important;
  border:0!important;
  box-shadow:none!important;
  outline:0!important;
  filter:none!important;
  backdrop-filter:none!important;
  -webkit-backdrop-filter:none!important;
}


/* ==========================================================
   TMVX v5.3.22 — Modo guía con tinte azul y borde corporativo
   ========================================================== */

.tmvx-map-guide-active .tmvx-map-hotspot,
.tmvx-map-panel.tmvx-map-guide-active .tmvx-map-hotspot{
  background:rgba(0,51,102,.16)!important;
  background-color:rgba(0,51,102,.16)!important;
  background-image:none!important;
  border:1px solid var(--tmvx-primary)!important;
  box-shadow:none!important;
  outline:0!important;
  filter:none!important;
  backdrop-filter:none!important;
  -webkit-backdrop-filter:none!important;
}


/* ==========================================================
   TMVX v5.3.24 — Hotspots en mapas secundarios con coords nativas
   ========================================================== */

.tmvx-map-panel:not(.tmvx-map-panel-main) .maphilighted,
.tmvx-map-panel:not(.tmvx-map-panel-main) .tmvx-map-img-wrap{
  position:relative!important;
  overflow:visible!important;
}

.tmvx-map-panel:not(.tmvx-map-panel-main) .tmvx-map-click-layer{
  position:absolute!important;
  left:0!important;
  top:0!important;
  z-index:40!important;
  pointer-events:auto!important;
}

.tmvx-map-panel:not(.tmvx-map-panel-main) .tmvx-map-hotspot{
  display:block!important;
  visibility:visible!important;
  pointer-events:auto!important;
  background:none!important;
  background-color:transparent!important;
  background-image:none!important;
  border:0!important;
  box-shadow:none!important;
  outline:0!important;
  filter:none!important;
  backdrop-filter:none!important;
  -webkit-backdrop-filter:none!important;
}

.tmvx-map-panel:not(.tmvx-map-panel-main) .tmvx-map-hotspot:hover,
.tmvx-map-panel:not(.tmvx-map-panel-main) .tmvx-map-hotspot:focus-visible{
  background:rgba(255,255,255,.34)!important;
  background-color:rgba(255,255,255,.34)!important;
  background-image:none!important;
  border:0!important;
  box-shadow:none!important;
  outline:0!important;
}

.tmvx-map-panel:not(.tmvx-map-panel-main).tmvx-map-guide-active .tmvx-map-hotspot{
  background:rgba(0,51,102,.16)!important;
  background-color:rgba(0,51,102,.16)!important;
  background-image:none!important;
  border:1px solid var(--tmvx-primary)!important;
  box-shadow:none!important;
  outline:0!important;
  filter:none!important;
  backdrop-filter:none!important;
  -webkit-backdrop-filter:none!important;
}


/* ==========================================================
   TMVX v5.3.26.3 — Botón Zonas solo visual
   ========================================================== */

.tmvx-map-guide-active .tmvx-map-hotspot,
.tmvx-map-panel.tmvx-map-guide-active .tmvx-map-hotspot{
  background:rgba(0,51,102,.16)!important;
  background-color:rgba(0,51,102,.16)!important;
  background-image:none!important;
  border:1px solid var(--tmvx-primary)!important;
  box-shadow:none!important;
  outline:0!important;
  filter:none!important;
  backdrop-filter:none!important;
  -webkit-backdrop-filter:none!important;
  transform:none!important;
}

/* El botón Zonas no debe provocar transiciones raras sobre las áreas */
.tmvx-map-guide-active .tmvx-map-click-layer,
.tmvx-map-panel.tmvx-map-guide-active .tmvx-map-click-layer{
  transform:none!important;
}


/* ==========================================================
   TMVX v5.3.26.24 — Bloqueo temporal zoom secundarios
   ========================================================== */

.tmvx-secondary-zoom-locking [data-tmvx-map-zoom]{
  opacity:.55!important;
  cursor:wait!important;
}


/* ==========================================================
   TMVX v5.3.26.27 — Estadísticas: fechas obligatorias
   ========================================================== */

.tmvx-stats-help{
  margin:8px 0 14px;
  padding:10px 12px;
  border:1px solid var(--tmvx-line);
  background:rgba(255,255,255,.72);
  color:var(--tmvx-muted);
  font-size:12px;
  font-weight:600;
  line-height:1.35;
}

[data-tmvx-stats-submit]:disabled{
  opacity:.45!important;
  cursor:not-allowed!important;
  filter:grayscale(.15);
}


/* ==========================================================
   TMVX v5.3.26.28 — Estadísticas: producto y fechas obligatorios
   ========================================================== */
