:root{
  --blue:#3ea4e8;--blue-dark:#0878b9;--blue-ink:#075d8d;--orange:#f08b2f;
  --ink:#182735;--muted:#657481;--paper:#f4f7f8;--white:#fff;--green:#118c7e;
  --line:#dbe5ea;--shadow:0 12px 34px rgba(14,35,50,.22);
  --safe-top:env(safe-area-inset-top,0px);--safe-bottom:env(safe-area-inset-bottom,0px);
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{width:100%;height:100%;margin:0;overflow:hidden;background:var(--paper);color:var(--ink);font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif}
button,input{font:inherit}button{touch-action:manipulation}button:focus-visible,input:focus-visible{outline:3px solid rgba(8,120,185,.28);outline-offset:2px}
.app{height:100dvh;min-height:100vh;display:grid;grid-template-rows:calc(58px + var(--safe-top)) 1fr;background:var(--paper)}
.topbar{height:calc(58px + var(--safe-top));padding:var(--safe-top) 10px 0 9px;display:flex;align-items:center;gap:9px;background:rgba(255,255,255,.96);border-bottom:1px solid rgba(219,229,234,.95);z-index:1000;box-shadow:0 2px 12px rgba(20,40,55,.07)}
.brand-logo{width:43px;height:43px;object-fit:contain;flex:0 0 auto}.brand-copy{min-width:0;display:flex;flex-direction:column;line-height:1.08}.brand-copy strong{font-size:17px;letter-spacing:.01em}.brand-copy span{font-size:12px;color:var(--muted);margin-top:3px}.icon-btn{margin-left:auto;width:44px;height:44px;border:0;border-radius:13px;background:#eef6fa;color:var(--blue-dark);font-size:26px;font-weight:900;display:grid;place-items:center}
.map-shell{position:relative;min-height:0;overflow:hidden}#map{position:absolute;inset:0;background:#dfe8e6;z-index:1}.leaflet-container{font-family:inherit}.leaflet-control-attribution{font-size:8px!important;background:rgba(255,255,255,.78)!important}.leaflet-control-zoom{display:none}.leaflet-control-container .leaflet-bottom{bottom:calc(10px + var(--safe-bottom))}
.search-panel{position:absolute;z-index:700;top:10px;left:10px;right:10px;max-width:620px;margin:0 auto;background:rgba(255,255,255,.97);border:1px solid rgba(219,229,234,.9);border-radius:17px;box-shadow:var(--shadow);overflow:hidden;backdrop-filter:blur(10px)}
.search-row{height:54px;display:flex;align-items:center;gap:8px;padding:0 8px 0 12px}.search-icon{font-size:27px;color:var(--blue-dark);line-height:1;transform:rotate(-20deg)}#searchInput{min-width:0;flex:1;border:0;background:transparent;padding:0;font-size:16px;color:var(--ink);outline:none}#searchInput::placeholder{color:#7a8a96}.clear-btn{width:40px;height:40px;border:0;background:transparent;color:#82909a;border-radius:50%;font-size:25px;display:none}.clear-btn.show{display:grid;place-items:center}
.results{max-height:min(48dvh,390px);overflow:auto;overscroll-behavior:contain;border-top:1px solid var(--line);scrollbar-width:thin}.result{width:100%;border:0;border-bottom:1px solid #edf1f3;background:#fff;text-align:left;padding:11px 13px;display:block;color:var(--ink)}.result:active{background:#f3f8fb}.result:last-child{border-bottom:0}.result-top{display:flex;align-items:center;gap:8px;margin-bottom:4px}.result-code{font-size:11px;font-weight:900;color:var(--orange);letter-spacing:.06em}.result-venue{margin-left:auto;font-size:10px;font-weight:900;color:var(--blue-dark);background:#eaf5fb;padding:4px 7px;border-radius:999px}.result-title{font-size:13px;font-weight:800;line-height:1.25;margin-bottom:4px}.result-authors{font-size:11px;color:var(--muted);line-height:1.3}.result-schedule{display:flex;align-items:center;gap:5px;flex-wrap:wrap;margin-top:7px;color:#52636f;font-size:10px;line-height:1.2}.result-schedule strong{color:var(--orange);font-size:11px}.result-schedule>span:first-child{font-size:13px;color:var(--orange)}.no-results{padding:15px;text-align:center;color:var(--muted);font-size:13px}
.map-actions{position:absolute;z-index:650;right:11px;top:82px;display:flex;flex-direction:column;align-items:flex-end;gap:9px}.fab{border:0;min-height:46px;border-radius:15px;background:rgba(255,255,255,.96);color:var(--blue-dark);box-shadow:0 7px 20px rgba(20,40,55,.18);font-weight:850;display:flex;align-items:center;justify-content:center;gap:7px;padding:0 13px}.fab-location span:first-child{font-size:23px}.fab-small{width:46px;padding:0;font-size:22px}.fab.active{background:var(--green);color:#fff}.fab-label{font-size:12px}.status-chip{position:absolute;z-index:640;right:11px;top:188px;background:rgba(255,255,255,.94);border-radius:999px;box-shadow:0 5px 16px rgba(20,40,55,.14);padding:7px 10px;font-size:10px;font-weight:800;color:var(--green)}
.offline-notice{position:absolute;z-index:720;left:10px;right:10px;top:76px;max-width:620px;margin:0 auto;padding:9px 12px;border-radius:12px;background:#fff3d7;color:#6e5218;border:1px solid #f1d286;font-size:12px;box-shadow:0 6px 16px rgba(20,40,55,.12)}
.venue-name-tooltip{background:rgba(255,255,255,.97)!important;color:var(--ink)!important;border:0!important;border-radius:10px!important;box-shadow:0 5px 16px rgba(20,40,55,.20)!important;padding:6px 9px!important;font-size:11px!important;font-weight:850!important;line-height:1.2!important;white-space:nowrap!important}.venue-name-tooltip::before{border-top-color:rgba(255,255,255,.97)!important}
.user-marker{position:relative;width:22px;height:22px;border-radius:50%;background:var(--green);border:5px solid #fff;box-shadow:0 0 0 2px rgba(17,140,126,.28),0 3px 12px rgba(0,0,0,.25)}.user-marker::after{content:"";position:absolute;inset:-11px;border:2px solid rgba(17,140,126,.23);border-radius:50%;animation:userPulse 1.8s infinite}@keyframes userPulse{0%{transform:scale(.6);opacity:1}100%{transform:scale(1.2);opacity:0}}
.detail-sheet{position:absolute;z-index:800;left:8px;right:8px;bottom:calc(8px + var(--safe-bottom));max-height:min(52dvh,500px);overflow:auto;background:rgba(255,255,255,.98);border:1px solid rgba(219,229,234,.95);border-radius:22px 22px 18px 18px;padding:10px 16px 15px;box-shadow:0 -12px 40px rgba(20,40,55,.24);overscroll-behavior:contain;animation:sheetUp .22s ease-out}@keyframes sheetUp{from{transform:translateY(25px);opacity:0}to{transform:none;opacity:1}}.sheet-handle{width:42px;height:4px;background:#ccd6dc;border-radius:999px;margin:0 auto 9px}.sheet-close{position:absolute;right:10px;top:9px;border:0;width:40px;height:40px;border-radius:50%;background:#eef3f5;color:#596874;font-size:24px}.destination-row{display:flex;align-items:flex-start;gap:10px;padding-right:38px}.destination-dot{width:13px;height:13px;border-radius:50%;background:var(--orange);box-shadow:0 0 0 5px rgba(240,139,47,.16);margin-top:10px;flex:0 0 auto}.destination-kicker{display:block;color:var(--orange);font-size:9px;font-weight:950;letter-spacing:.12em}.destination-row h2{margin:2px 0 0;font-size:17px;line-height:1.15}.work-code{display:inline-block;margin-top:11px;color:#fff;background:var(--orange);border-radius:999px;padding:4px 8px;font-size:10px;font-weight:950;letter-spacing:.07em}.detail-sheet h3{font-size:15px;line-height:1.28;margin:8px 0 5px}.authors{margin:0;color:var(--muted);font-size:12px;line-height:1.35}.detail-grid{display:grid;grid-template-columns:1fr 1fr;gap:7px;margin-top:12px}.detail-grid>div{background:#f4f8fa;border-radius:11px;padding:8px 9px;min-width:0}.detail-grid span{display:block;font-size:9px;color:var(--muted);text-transform:uppercase;font-weight:900;letter-spacing:.06em;margin-bottom:3px}.detail-grid strong{display:block;font-size:11px;line-height:1.25}.detail-grid .time-box{background:#fff3e7;border:1px solid rgba(240,139,47,.22)}.detail-grid .time-box span{color:#a95d16}.detail-grid .time-box strong{color:#d86f12;font-size:13px}.sheet-actions{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:12px}.primary-btn,.secondary-btn{min-height:44px;border-radius:12px;font-size:12px;font-weight:900}.primary-btn{border:0;background:var(--blue-dark);color:#fff}.secondary-btn{border:1px solid #b9cbd4;background:#fff;color:var(--blue-dark)}
.layer-menu{position:absolute;z-index:850;right:9px;top:8px;width:min(270px,calc(100% - 18px));background:#fff;border:1px solid var(--line);border-radius:16px;padding:7px;box-shadow:var(--shadow)}.layer-choice{width:100%;min-height:58px;border:0;border-radius:12px;background:#fff;display:flex;align-items:center;gap:10px;text-align:left;padding:8px 10px;color:var(--ink)}.layer-choice+ .layer-choice{margin-top:4px}.layer-choice.active{background:#eaf6fb;color:var(--blue-dark)}.layer-choice>span{width:34px;height:34px;border-radius:9px;background:#edf3f6;display:grid;place-items:center;font-size:20px}.layer-choice strong,.layer-choice small{display:block}.layer-choice strong{font-size:13px}.layer-choice small{font-size:10px;color:var(--muted);margin-top:2px}
.toast{position:absolute;z-index:1000;left:50%;bottom:calc(20px + var(--safe-bottom));transform:translateX(-50%);max-width:calc(100% - 24px);background:rgba(24,39,53,.94);color:#fff;border-radius:999px;padding:9px 13px;font-size:11px;font-weight:750;box-shadow:0 6px 20px rgba(0,0,0,.22);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
@media(min-width:700px){.app{grid-template-rows:64px 1fr}.topbar{height:64px;padding-top:0}.brand-logo{width:48px;height:48px}.search-panel{top:16px;left:16px;right:auto;width:390px;margin:0}.map-actions{top:16px;right:16px}.detail-sheet{left:auto;right:16px;bottom:16px;width:390px}.status-chip{right:16px;top:126px}.leaflet-control-zoom{display:block}.layer-menu{top:16px;right:16px}}
@media(prefers-reduced-motion:reduce){*{animation-duration:.001ms!important;animation-iteration-count:1!important;scroll-behavior:auto!important}}

/* Modo incrustado para la web oficial del congreso */
.embed-mode .app{grid-template-rows:1fr}
.embed-mode .topbar{display:none}
.embed-mode .map-shell{height:100dvh;min-height:520px}
.embed-mode .search-panel{top:10px;left:10px;right:10px}
.embed-mode .map-actions{top:82px}
.embed-mode .layer-menu{top:8px}
.embed-open-full{display:none}
.embed-mode .embed-open-full{display:block;position:absolute;z-index:675;left:12px;bottom:calc(12px + var(--safe-bottom));padding:9px 12px;border-radius:999px;background:rgba(255,255,255,.94);color:var(--blue-dark);box-shadow:0 5px 16px rgba(20,40,55,.16);font-size:11px;font-weight:900;text-decoration:none}
.embed-mode .detail-sheet:not([hidden])~.embed-open-full{display:none}
@media(min-width:700px){.embed-mode .search-panel{top:16px}.embed-mode .map-actions{top:16px}.embed-mode .layer-menu{top:16px}}
