/* ===== BASE GLOBAL ===== */ .page, main, .content, article.content { margin: 0 !important; padding: 0 !important; } .btn-ghost.btn-icon { width: 35px; height: 35px; padding: 0; display: grid; place-items: center; font-size: 1rem; } .inspector-address-list { display: grid; gap: 4px; margin: 5px 0 7px; } .popup-parada-body .inspector-address-item { display: grid; grid-template-columns: 22px minmax(0, 1fr); align-items: center; gap: 6px; margin: 0; line-height: 1.25; } .inspector-address-number, .rt-inspector-place-marker { display: grid; place-items: center; box-sizing: border-box; border: 2px solid #ecfeff; border-radius: 50%; color: #ffffff; background: #0f766e; font-weight: 800; line-height: 1; box-shadow: 0 0 0 2px rgba(15, 23, 42, .78), 0 4px 10px rgba(15, 23, 42, .3); } .inspector-address-number { width: 20px; height: 20px; font-size: .68rem; } .inspector-address-item > span:last-child { min-width: 0; overflow-wrap: anywhere; } .rt-inspector-place-icon { border: 0 !important; background: transparent !important; } .rt-inspector-place-marker { width: 24px; height: 24px; font-size: .72rem; } .rt-inspector-tooltip { max-width: min(280px, calc(100vw - 28px)); white-space: normal; font-size: .75rem; } .history-open-icon { display: inline-block; font-size: 0.9rem; font-weight: 700; line-height: 1; letter-spacing: 0.01em; } html, body { height: 100%; margin: 0; padding: 0; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; } body { background: #020617; /* mismo fondo oscuro que el mapa */ } a, .btn-link { color: #006bb7; } /* El bloque del indicador en medio */ .leaflet-control-zoom.leaflet-bar { display: flex; align-items: stretch; } .leaflet-control-zoom a { float: none; display: grid; place-items: center; margin: 0 !important; border-radius: 0 !important; } .leaflet-control-zoom a.leaflet-control-zoom-in { border-top-left-radius: .4rem !important; border-bottom-left-radius: .4rem !important; } .leaflet-control-zoom a.leaflet-control-zoom-out { border-top-right-radius: .4rem !important; border-bottom-right-radius: .4rem !important; border-left: 0 !important; } .leaflet-control-zoom-indicator-inset { display: grid; place-items: center; width: 30px; /* Leaflet suele usar 30px en los botones */ height: 30px; font-weight: 800; font-size: .78rem; color: #e5e7eb; background: rgba(15,23,42,.96); border-left: 1px solid rgba(148,163,184,.35); border-right: 1px solid rgba(148,163,184,.35); border-radius: 0; user-select: none; pointer-events: none; } .leaflet-control-zoom a.leaflet-control-zoom-in + .leaflet-control-zoom-indicator-inset { border-left: 0; } .search-icon { position: relative; display: inline-block; } .search-icon.off::after { content: ""; position: absolute; left: -2px; right: -2px; top: 50%; height: 2px; background: currentColor; transform: rotate(-35deg); color:darkred; } .btn-primary { color: #fff; background-color: #1b6ec2; border-color: #1861ac; } .btn:focus, .btn:active:focus, .btn-link.nav-link:focus, .form-control:focus, .form-check-input:focus { box-shadow: 0 0 0 0.1rem white, 0 0 0 0.25rem #258cfb; } /* ===== LAYOUT BLAZOR ===== */ .page { min-height: 100vh; display: flex; flex-direction: column; } main { flex: 1; display: flex; } .content { padding: 0; margin: 0; width: 100%; max-width: none; } article.content { padding: 0; margin: 0; width: 100% !important; max-width: 100% !important; } .page, main, .full-page { width: 100%; } /* Contenedor de páginas que deben ocupar toda la altura disponible */ .full-page { display: flex; flex-direction: column; height: 100%; } /* ===== VALIDACIONES / ERRORES ===== */ h1:focus { outline: none; } .valid.modified:not([type=checkbox]) { outline: 1px solid #26b050; } .invalid { outline: 1px solid #e50000; } .validation-message { color: #e50000; } .blazor-error-boundary { background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNDkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG92ZXJmbG93PSJoaWRkZW4iPjxkZWZzPjxjbGlwUGF0aCBpZD0iY2xpcDAiPjxyZWN0IHg9IjIzNSIgeT0iNTEiIHdpZHRoPSI1NiIgaGVpZ2h0PSI0OSIvPjwvY2xpcFBhdGg+PC9kZWZzPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMzUgLTUxKSI+PHBhdGggZD0iTTI2My41MDYgNTFDMjY0LjcxNyA1MSAyNjUuODEzIDUxLjQ4MzcgMjY2LjYwNiA1Mi4yNjU4TDI2Ny4wNTIgNTIuNzk4NyAyNjcuNTM5IDUzLjYyODMgMjkwLjE4NSA5Mi4xODMxIDI5MC41NDUgOTIuNzk1IDI5MC42NTYgOTIuOTk2QzI5MC44NzcgOTMuNTEzIDI5MSA5NC4wODE1IDI5MSA5NC42NzgyIDI5MSA5Ny4wNjUxIDI4OS4wMzggOTkgMjg2LjYxNyA5OUwyNDAuMzgzIDk5QzIzNy45NjMgOTkgMjM2IDk3LjA2NTEgMjM2IDk0LjY3ODIgMjM2IDk0LjM3OTkgMjM2LjAzMSA5NC4wODg2IDIzNi4wODkgOTMuODA3MkwyMzYuMzM4IDkzLjAxNjIgMjM2Ljg1OCA5Mi4xMzE0IDI1OS40NzMgNTMuNjI5NCAyNTkuOTYxIDUyLjc5ODUgMjYwLjQwNyA1Mi4yNjU4QzI2MS4yIDUxLjQ4MzcgMjYyLjI5NiA1MSAyNjMuNTA2IDUxWk0yNjMuNTg2IDY2LjAxODNDMjYwLjczNyA2Ni4wMTgzIDI1OS4zMTMgNjcuMTI0NSAyNTkuMzEzIDY5LjMzNyAyNTkuMzEzIDY5LjYxMDIgMjU5LjMzMiA2OS44NjA4IDI1OS4zNzEgNzAuMDg4N0wyNjEuNzk1IDg0LjAxNjEgMjY1LjM4IDg0LjAxNjEgMjY3LjgyMSA2OS43NDc1QzI2Ny44NiA2OS43MzA5IDI2Ny44NzkgNjkuNTg3NyAyNjcuODc5IDY5LjMxNzkgMjY3Ljg3OSA2Ny4xMTgyIDI2Ni40NDggNjYuMDE4MyAyNjMuNTg2IDY2LjAxODNaTTI2My41NzYgODYuMDU0N0MyNjEuMDQ5IDg2LjA1NDcgMjU5Ljc4NiA4Ny4zMDA1IDI1OS43ODYgODkuNzkyMSAyNTkuNzg2IDky. . .) no-repeat 1rem/1.8rem, #b32121; padding: 1rem 1rem 1rem 3.7rem; color: white; } .blazor-error-boundary::after { content: "An error has occurred."; } .darker-border-checkbox.form-check-input { border-color: #929292; } /* ===== HEADER SUPERIOR RUTAS ===== */ .rutas-header { padding: 0.5rem 1rem; border-bottom: 1px solid rgba(0,0,0,.1); background: linear-gradient(90deg, #0f172a, #111827); color: #e5e7eb; display: flex; align-items: center; /* justify-content: space-between; ❌ quitar */ } .rutas-header h3 { margin: 0; font-size: 1.1rem; font-weight: 600; } .rutas-header small { display: block; font-size: 0.8rem; color: #9ca3af; } .pill-live { display: inline-flex; align-items: center; gap: .4rem; padding: .2rem .6rem; border-radius: 999px; background: rgba(16, 185, 129, .12); border: 1px solid rgba(16, 185, 129, .5); color: #a7f3d0; font-size: .75rem; } .pill-dot { width: .45rem; height: .45rem; border-radius: 999px; background: #22c55e; box-shadow: 0 0 0 3px rgba(34,197,94,.35); } .btn-ghost { border-radius: 999px; border: 1px solid rgba(148,163,184,.6); background: #111827; color: #e5e7eb; font-size: .78rem; padding: .3rem .9rem; cursor: pointer; } .btn-ghost:hover { background: #1d4ed8; color: #fff; } .btn-ghost:disabled, .btn-ghost:disabled:hover { background: #111827; color: #94a3b8; cursor: not-allowed; opacity: .48; } .page, main, .full-page, .content, article.content { overflow: hidden; } html, body { overflow: hidden; } .map-container .leaflet-control-layers { display: none !important; } /* ===== MAPA + CONTENEDOR PRINCIPAL ===== */ .map-container { position: relative; z-index: 0 !important; overflow: hidden !important; /* ✅ clave */ /* que rellene todo el espacio bajo el header */ flex: 1 1 auto; width: 100%; height: 100%; } /* Estado normal: mapa sin opacidad */ .map-container .leaflet-tile-pane { filter: opacity(1); transition: filter .25s ease; } /* Nivel 1: un poco más opaco */ .map-container.opacidad-1 .leaflet-tile-pane { filter: opacity(0.75); } /* Nivel 2: más oscuro */ .map-container.opacidad-2 .leaflet-tile-pane { filter: opacity(0.50); } /* Nivel 3: bastante oscuro */ .map-container.opacidad-3 .leaflet-tile-pane { filter: opacity(0.25); } /* Nivel 4: bastante oscuro */ .map-container.opacidad-4 .leaflet-tile-pane { filter: opacity(0.10); } /* ===== CURSOR DEL MAPA ===== */ /* Cursor SIEMPRE flecha */ .leaflet-container { cursor: default !important; } /* Las capas interactivas NO deben cambiar el cursor */ .leaflet-interactive { cursor: default !important; } /* Evitar cursor de mano en puntos, polilíneas, polígonos de Leaflet */ .leaflet-marker-icon, .leaflet-marker-shadow, .leaflet-clickable { cursor: default !important; } .rt-endpoint-icon { background: transparent !important; border: none !important; } .rt-endpoint-marker { border-radius: 999px; background: var(--endpoint-color, #22c55e); border: 2px solid rgba(255,255,255,.98); box-shadow: 0 0 0 2px rgba(15,23,42,.85), 0 8px 18px rgba(15,23,42,.4); cursor: grab !important; } .rt-endpoint-marker:active { cursor: grabbing !important; } .rt-endpoint-marker--origin { background: #22c55e; } .rt-endpoint-marker--destination { background: #ef4444; } /* ===== PANEL DE BÚSQUEDA TIPO GOOGLE MAPS ===== */ .gm-search-panel { position: absolute; top: 0.6rem; left: 50%; transform: translateX(-50%); background: rgba(15, 23, 42, 0.96); padding: 0.55rem 0.75rem 0.65rem; border-radius: 22px; box-shadow: 0 10px 30px rgba(0, 0, 0, .4); z-index: 1200; max-width: 980px; width: calc(100% - 2rem); } .gm-search-row { display: flex; align-items: center; gap: 0.5rem; } .gm-search-actions { display: flex; align-items: center; gap: 0.45rem; } .gm-search-inputs { display: flex; align-items: center; gap: 0.35rem; flex: 1; } .gm-input-group { display: flex; flex-direction: column; min-width: 0; flex: 1 1 0; /* ? para que Origen y Destino se estiren */ position: relative; } .gm-input-group label { font-size: 0.65rem; color: #9ca3af; margin-left: 0.25rem; } .gm-input-group input { width: 100%; /* ? para que el input rellene el grupo */ border-radius: 999px; border: 1px solid rgba(148, 163, 184, .6); padding: 0.25rem 0.6rem; font-size: 0.8rem; background-color: rgba(15, 23, 42, 0.95); color: #e5e7eb; min-width: 0; } .gm-input-group input::placeholder { color: #6b7280; } .gm-suggestions { position: absolute; top: calc(100% + 0.28rem); left: 0; right: 0; display: grid; gap: 0.18rem; max-height: min(320px, calc(100vh - 150px)); overflow: auto; padding: 0.28rem; border: 1px solid rgba(148, 163, 184, .36); border-radius: 10px; background: rgba(15, 23, 42, .98); box-shadow: 0 18px 34px rgba(0, 0, 0, .42); z-index: 1250; } .gm-suggestion { display: grid; grid-template-columns: 66px minmax(0, 1fr); align-items: center; gap: 0.42rem; width: 100%; min-height: 38px; padding: 0.28rem 0.36rem; border: 0; border-radius: 7px; background: transparent; color: #e5e7eb; text-align: left; cursor: pointer; } .gm-suggestion:hover, .gm-suggestion:focus-visible { outline: none; background: rgba(30, 64, 175, .56); } .gm-suggestion__type { display: inline-flex; align-items: center; justify-content: center; min-width: 0; height: 22px; padding: 0 0.34rem; border: 1px solid rgba(125, 211, 252, .32); border-radius: 5px; color: #bae6fd; background: rgba(14, 116, 144, .24); font-size: 0.62rem; font-weight: 700; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .gm-suggestion__text { display: grid; gap: 0.06rem; min-width: 0; } .gm-suggestion__title, .gm-suggestion__subtitle { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .gm-suggestion__title { color: #f8fafc; font-size: 0.76rem; font-weight: 700; } .gm-suggestion__subtitle { color: #94a3b8; font-size: 0.68rem; } .gm-swap-btn { border-radius: 999px; border: none; padding: 0.25rem 0.45rem; background: rgba(30, 64, 175, .9); color: white; font-size: 0.75rem; cursor: pointer; transform: rotate(90deg); } .gm-swap-btn:hover { background: rgba(37, 99, 235, 1); } .gm-search-button { border-radius: 999px; border: none; padding: 0.4rem 0.9rem; background: #22c55e; color: #022c22; font-weight: 600; font-size: 0.8rem; cursor: pointer; white-space: nowrap; } .gm-search-button:hover { background: #4ade80; } .gm-history-row { display: flex; gap: 0.6rem; margin-top: 0.55rem; flex-wrap: wrap; } .gm-history-group { flex: 1 1 340px; min-width: 0; } .gm-history-group label { display: block; font-size: 0.65rem; color: #9ca3af; margin: 0 0 0.18rem 0.25rem; } .gm-history-controls { display: flex; align-items: center; gap: 0.35rem; } .gm-history-select { flex: 1 1 auto; min-width: 0; height: 34px; font-size: 0.78rem; } .gm-history-btn { flex: 0 0 auto; min-width: 86px; white-space: nowrap; } .gm-history-feedback { margin-top: 0.45rem; font-size: 0.72rem; color: #93c5fd; padding-left: 0.25rem; } .gm-history-feedback--error { color: #fca5a5; } /* ===== PANEL LATERAL DE ESTADO / SELECCIÓN ===== */ .map-overlay-card { position: absolute; top: .75rem; left: .75rem; max-width: 320px; z-index: 1200; background: rgba(15,23,42,.96); color: #e5e7eb; border-radius: .75rem; padding: .75rem .9rem; box-shadow: 0 16px 40px rgba(15,23,42,.9); border: 1px solid rgba(148,163,184,.35); font-size: .82rem; } .map-overlay-card strong { font-size: .78rem; text-transform: uppercase; letter-spacing: .12em; color: #9ca3af; } .map-overlay-card p { margin: .25rem 0; font-size: .82rem; } .map-overlay-card .mini { font-size: .75rem; color: #9ca3af; } .titulo-app { display: flex; align-items: baseline; gap: .5rem; } .app-version-inline { font-size: 0.7rem; color: #9ca3af; font-weight: 400; } /* ===== POPUP PARADA ===== */ .popup-parada { position: absolute; top: 5.0rem; left: 8.5rem; max-width: 260px; background: rgba(15,23,42,.96); color: #e5e7eb; border-radius: .75rem; padding: .75rem .8rem .45rem .8rem; /* antes .6rem arriba */ box-shadow: 0 16px 30px rgba(15,23,42,.9); border: 1px solid rgba(148,163,184,.4); font-size: .82rem; z-index: 1200; } .popup-stack-left { position: absolute; top: 12rem; /* antes 5rem */ left: 1rem; z-index: auto; display: flex; flex-direction: column; gap: .6rem; pointer-events: none; max-width: calc(100vw - 2rem); } /* Cada popup dentro del stack vuelve a "flujo normal" */ .popup-stack-left .popup-parada { position: relative !important; /* 🔑 quita el absolute del CSS base */ top: auto !important; left: auto !important; margin: 0 !important; pointer-events: auto; /* sí se puede clicar */ width: auto; max-width: 380px; } /* Slots opcionales (por claridad) */ .popup-slot { position: relative; } /* Anchos específicos */ .popup-stack-left .popup-itinerario { max-width: 380px; } .popup-stack-left .popup-inspector { max-width: 280px; } /* Itinerario: bajar texto para que no choque con la X */ .popup-stack-left .popup-itinerario-body { padding-right: 2.2rem; } .popup-parada-header { font-weight: 600; font-size: .86rem; margin-bottom: .25rem; } .popup-parada-body { font-size: .8rem; } .popup-parada-body div { margin-bottom: .15rem; } .popup-parada-cerrar { position: absolute; top: .3rem; right: .45rem; border: none; background: transparent; color: #9ca3af; font-size: .9rem; cursor: pointer; } .popup-parada-cerrar:hover { color: #e5e7eb; } .draggable-popup-handle { cursor: grab; user-select: none; } .draggable-popup--dragging { box-shadow: 0 24px 55px rgba(0,0,0,.55); opacity: .98; } .draggable-popup--dragging .draggable-popup-handle { cursor: grabbing; } .popup-parada.draggable-popup--free, .popup-stack-left .popup-parada.draggable-popup--free, .popup-elev-topright.draggable-popup--free, .route-panel-overlay.draggable-popup--free, .history-panel.draggable-popup--free, .config-panel.draggable-popup--free { position: fixed !important; left: var(--drag-left) !important; top: var(--drag-top) !important; right: auto !important; bottom: auto !important; margin: 0 !important; transform: none !important; } /* ===== PANEL LATERAL DE RUTAS ===== */ .route-panel-overlay { position: absolute; top: 4.5rem; /* debajo de la barra de búsqueda */ right: 0.75rem; bottom: 1rem; width: 360px; max-width: 90vw; pointer-events: none !important; z-index: 1200; } .route-panel { pointer-events: auto; background: rgba(15, 23, 42, 0.96); border-radius: 1rem; padding: 0.75rem 0.85rem; box-shadow: 0 15px 40px rgba(0, 0, 0, .6); display: flex; flex-direction: column; height: 100%; color: #e5e7eb; } .route-panel-title { margin: 0; font-size: .9rem; font-weight: 600; color: #e5e7eb; white-space: nowrap; } .route-panel-header { display: flex; align-items: center; justify-content: space-between; flex-wrap: nowrap; gap: .5rem; margin: 0 0 .45rem; } .route-priority-switch { display: inline-grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 2px; padding: 2px; border: 1px solid rgba(148, 163, 184, .45); border-radius: 8px; background: rgba(2, 6, 23, .55); flex: 0 0 auto; } .route-priority-option { min-width: 62px; height: 24px; border: 0; border-radius: 6px; padding: 0 .28rem; background: transparent; color: #9ca3af; font-size: .64rem; font-weight: 700; cursor: pointer; pointer-events: auto; } .route-priority-option:hover { color: #f8fafc; background: rgba(30, 64, 175, .5); } .route-priority-option-active { color: #f8fafc; background: #2563eb; } .route-visual-options { position: relative; display: inline-flex; align-self: flex-start; align-items: center; justify-content: flex-start; flex-wrap: nowrap; width: fit-content; max-width: 100%; box-sizing: border-box; gap: .25rem; margin: -.15rem 0 .4rem; padding: 2px 3px 2px 5px; border: 1px solid rgba(148, 163, 184, .28); border-radius: 7px; background: rgba(2, 6, 23, .3); } .route-elevation-switch { display: inline-flex; align-items: center; gap: .38rem; min-height: 24px; color: #cbd5e1; font-size: .7rem; font-weight: 700; cursor: pointer; pointer-events: auto; user-select: none; white-space: nowrap; } .route-elevation-switch input { position: absolute; opacity: 0; pointer-events: none; } .route-elevation-switch-track { position: relative; width: 34px; height: 18px; flex: 0 0 34px; border-radius: 999px; border: 1px solid rgba(148, 163, 184, .5); background: rgba(2, 6, 23, .7); transition: background .15s ease, border-color .15s ease; } .route-elevation-switch-thumb { position: absolute; top: 2px; left: 2px; width: 12px; height: 12px; border-radius: 999px; background: #94a3b8; box-shadow: 0 1px 4px rgba(0, 0, 0, .35); transition: transform .15s ease, background .15s ease; } .route-elevation-switch--active { color: #f8fafc; } .route-elevation-switch--active .route-elevation-switch-track { border-color: rgba(251, 191, 36, .85); background: linear-gradient(90deg, rgba(56, 189, 248, .75), rgba(249, 115, 22, .85)); } .route-elevation-switch--active .route-elevation-switch-thumb { transform: translateX(16px); background: #f8fafc; } .route-elevation-switch:has(input:disabled) { cursor: default; opacity: .55; } .route-elevation-settings { display: inline-flex; align-items: center; margin-left: .05rem; padding-left: .3rem; border-left: 1px solid rgba(148, 163, 184, .35); pointer-events: auto; } .route-elevation-settings-trigger { display: grid; place-items: center; width: 26px; height: 24px; padding: 0; border: 1px solid rgba(148, 163, 184, .55); border-radius: 6px; background: rgba(2, 6, 23, .78); color: #cbd5e1; cursor: pointer; font-family: "Segoe UI Symbol", sans-serif; font-size: 1rem; line-height: 1; } .route-elevation-settings-trigger:hover, .route-elevation-settings-trigger--active { border-color: rgba(56, 189, 248, .9); background: rgba(30, 64, 175, .55); color: #f8fafc; } .route-elevation-settings-trigger:disabled { cursor: default; opacity: .55; } .route-elevation-settings-popover { position: absolute; z-index: 20; top: calc(100% + 6px); right: auto; left: 0; width: 238px; max-width: calc(100vw - 24px); box-sizing: border-box; padding: .55rem; border: 1px solid rgba(148, 163, 184, .55); border-radius: 7px; background: rgba(15, 23, 42, .99); box-shadow: 0 14px 32px rgba(0, 0, 0, .5); color: #e5e7eb; } .route-elevation-settings-header { display: flex; align-items: center; justify-content: space-between; gap: .5rem; margin-bottom: .45rem; font-size: .72rem; font-weight: 800; } .route-elevation-settings-close { display: grid; place-items: center; width: 22px; height: 22px; padding: 0; border: 0; border-radius: 4px; background: transparent; color: #cbd5e1; cursor: pointer; font-size: 1rem; line-height: 1; } .route-elevation-settings-close:hover { background: rgba(71, 85, 105, .55); color: #fff; } .route-elevation-settings-fields { display: grid; gap: .35rem; } .route-elevation-setting-row { display: grid; grid-template-columns: minmax(0, 1fr) 44px 32px; align-items: center; gap: .35rem; min-height: 26px; color: #cbd5e1; font-size: .68rem; font-weight: 700; } .route-elevation-setting-row input { width: 44px; height: 22px; box-sizing: border-box; border: 1px solid rgba(148, 163, 184, .55); border-radius: 6px; background: rgba(2, 6, 23, .78); color: #f8fafc; font-size: .68rem; font-weight: 800; text-align: center; padding: 0 .18rem; outline: none; } .route-elevation-setting-row input:focus { border-color: rgba(56, 189, 248, .95); box-shadow: 0 0 0 2px rgba(56, 189, 248, .18); } .route-elevation-setting-row input:disabled { opacity: .55; } .route-slope-warning { margin: 0 0 .45rem; padding: .36rem .5rem; border-left: 3px solid #f59e0b; border-radius: 4px; background: rgba(245, 158, 11, .13); color: #fde68a; font-size: .72rem; font-weight: 800; line-height: 1.25; } /* Lista de alternativas de ruta */ .route-alt-list { display: flex; flex-direction: column; gap: 0.35rem; margin-bottom: 0.4rem; } .route-alt-card { border-radius: 0.8rem; border: 1px solid rgba(148, 163, 184, .55); background: rgba(15, 23, 42, 0.9); padding: 0.35rem 0.5rem; cursor: pointer; text-align: left; width: 100%; display: flex; flex-direction: column; gap: 0.1rem; font-size: 0.78rem; color: #e5e7eb; pointer-events: auto; } .route-alt-card:hover { border-color: #3b82f6; background: rgba(30, 64, 175, 0.85); } .route-alt-card-selected { border-color: #22c55e; background: rgba(21, 128, 61, 0.85); } .route-alt-main { display: flex; align-items: baseline; gap: 0.35rem; } .route-alt-time { font-weight: 600; font-size: 0.85rem; } .route-alt-label { font-size: 0.75rem; color: #d1d5db; } .route-alt-sub { font-size: 0.7rem; color: #9ca3af; } .route-alt-walk { white-space: nowrap; } .route-alt-walk-emphasis { color: #f8fafc; font-weight: 800; } /* Separador fino dentro del panel */ .route-panel-divider { border: none; border-top: 1px solid rgba(148, 163, 184, .4); margin: 0.45rem 0; } /* Cuerpo con scroll propio */ .route-panel-body { flex: 1; overflow-y: auto; padding-right: 0.15rem; } /* TEXTO Y CHIPS DE LA RUTA */ .route-main-text { font-size: .86rem; margin-bottom: .4rem; } .route-main-text span.highlight { color: #facc15; font-weight: 500; } .chips-row { display: flex; flex-wrap: wrap; gap: .35rem; font-size: .75rem; } .chip { display: inline-flex; align-items: center; gap: .3rem; padding: .18rem .55rem; border-radius: 999px; border: 1px solid rgba(148,163,184,.5); background: #020617; } .chip-dot { width: .5rem; height: .5rem; border-radius: 999px; } .chip-dot-start { background: #22c55e; } .chip-dot-end { background: #ef4444; } .chip-dot-line { background: #38bdf8; } .chip-dot-walk { background: #f97316; } .muted { color: #9ca3af; } /* LISTA DE TRAMOS TIPO “DIRECCIONES” CON NÚMEROS */ .lista-tramos-ruta { list-style: none; margin: 0.4rem 0 0; padding: 0; font-size: .8rem; } .lista-tramos-ruta li { display: flex; align-items: flex-start; gap: 0.6rem; margin-bottom: 0.35rem; } .lista-tramos-ruta li .indice-tramo-ruta { display: inline-flex; align-items: center; justify-content: center; flex: 0 0 1.25rem; width: 1.25rem; height: 1.25rem; border-radius: 999px; background: #1d4ed8; color: #e5e7eb; font-size: 0.75rem; font-weight: 700; line-height: 1; margin-top: 0.18rem; } .lista-tramos-ruta li .detalle-tramo-ruta-contenido { flex: 1 1 auto; min-width: 0; } /* ===== PANEL DE CONFIGURACIÓN ===== */ .history-panel { position: absolute; top: 7rem; left: 1rem; width: 420px; max-width: calc(100vw - 2rem); background: rgba(15,23,42,0.96); border: 1px solid rgba(148,163,184,.35); border-radius: .85rem; padding: .85rem 1rem .8rem 1rem; color: #e5e7eb; box-shadow: 0 16px 40px rgba(15,23,42,.9); backdrop-filter: blur(4px); z-index: 1100; font-size: .85rem; } .history-panel-header { display: flex; align-items: center; justify-content: space-between; gap: .5rem; margin-bottom: .7rem; } .history-panel-header h5 { margin: 0; font-size: .92rem; font-weight: 600; letter-spacing: .03em; color: #9ca3af; text-transform: uppercase; } .history-panel-body { display: flex; flex-direction: column; gap: .75rem; } .history-section { display: flex; flex-direction: column; gap: .25rem; } .history-section-label { font-size: .92rem; font-weight: 700; color: #f8fafc; } .history-list { display: flex; flex-direction: column; gap: .32rem; max-height: 184px; overflow-y: auto; padding-right: .1rem; } .history-item { display: flex; align-items: stretch; gap: .3rem; } .history-item-main { flex: 1 1 auto; min-width: 0; text-align: left; border: 1px solid rgba(148,163,184,.28); background: rgba(15,23,42,.92); color: #e5e7eb; border-radius: .7rem; padding: .42rem .58rem; font-size: .74rem; line-height: 1.3; cursor: pointer; } .history-item-main--numbered { display: grid; grid-template-columns: auto minmax(0, 1fr); align-items: center; column-gap: .35rem; } .history-item-number { display: block; min-width: 0; color: #93c5fd; font-weight: 700; text-align: left; } .history-item-text { display: block; min-width: 0; } .history-item-main:hover { border-color: rgba(59,130,246,.75); background: rgba(30,41,59,.98); } .history-item--selected .history-item-main { border-color: rgba(34,197,94,.7); background: rgba(21,128,61,.18); } .history-item-action, .history-item-delete { flex: 0 0 32px; width: 32px; border: 1px solid rgba(148,163,184,.28); background: rgba(15,23,42,.92); color: #cbd5e1; border-radius: .7rem; cursor: pointer; font-size: .9rem; line-height: 1; } .history-item-action:hover { color: #bfdbfe; border-color: rgba(59,130,246,.75); background: rgba(30,64,175,.16); } .history-item-delete:hover { color: #fecaca; border-color: rgba(239,68,68,.7); background: rgba(127,29,29,.24); } .history-empty { font-size: .75rem; color: #94a3b8; padding: .25rem 0 .1rem; } .history-feedback { font-size: .76rem; color: #93c5fd; } .history-feedback--error { color: #fca5a5; } .config-panel { position: absolute; bottom: 2.4rem; left: .85rem; width: 292px; max-height: calc(100vh - 4rem); overflow-y: auto; box-sizing: border-box; background: rgba(15,23,42,0.96); border: 1px solid rgba(148,163,184,.35); border-radius: .75rem; padding: .85rem 1rem .8rem 1rem; color: #e5e7eb; box-shadow: 0 16px 40px rgba(15,23,42,.9); backdrop-filter: blur(4px); z-index: 1000; font-size: .85rem; } .config-panel h5 { margin: 0 0 .65rem 0; font-size: .92rem; font-weight: 600; letter-spacing: .03em; color: #9ca3af; text-transform: uppercase; } .config-row { display: grid; grid-template-columns: 1fr 140px; /* label | campo */ gap: .75rem; align-items: center; margin-bottom: .62rem; } .config-row label { font-size: .8rem; color: #cbd5e1; } .config-input { width: 90px; padding: .35rem .5rem; background: #0f172a; color: #e2e8f0; font-size: .8rem; border-radius: .5rem; border: 1px solid rgba(148,163,184,.5); text-align: left; outline: none; transition: border-color .15s, background .15s; } .config-input:focus { border-color: #38bdf8; background: #1e293b; } .config-input:disabled, .config-input[readonly] { opacity: .48; cursor: not-allowed; color: #94a3b8; background: rgba(15,23,42,.45); border-color: rgba(100,116,139,.28); filter: saturate(.65) blur(.15px); } .config-panel .btn-ghost { margin-top: .1rem; width: 100%; padding: .42rem .55rem; border-radius: .75rem; font-size: .82rem; background: #1d4ed8; border: 1px solid rgba(148,163,184,.4); color: #fff; text-align: center; transition: background .2s, box-shadow .2s; } .config-panel .btn-ghost:hover { background: #2563eb; box-shadow: 0 0 10px rgba(37,99,235,.4); } .config-panel .btn-ghost.btn-ghost--secondary { background: #334155; border-color: rgba(148,163,184,.35); color: #e5e7eb; } .config-panel .btn-ghost.btn-ghost--secondary:hover { background: #475569; box-shadow: 0 0 10px rgba(71,85,105,.35); } .config-actions-row { display: flex; align-items: center; gap: .44rem; margin-top: .1rem; } .config-actions-row .btn-ghost { flex: 1 1 0; width: 0; margin-top: 0; display: inline-flex; align-items: center; justify-content: center; white-space: nowrap; } .custom-modal-backdrop { position: fixed; inset: 0; z-index: 5000; display: flex; align-items: center; justify-content: center; padding: 1.25rem; background: rgba(2, 6, 23, .58); backdrop-filter: blur(6px); } .custom-modal-card { width: min(420px, calc(100vw - 2rem)); border-radius: 18px; border: 1px solid rgba(148,163,184,.26); background: linear-gradient(180deg, rgba(15,23,42,.98), rgba(17,24,39,.98)); color: #e5e7eb; box-shadow: 0 22px 60px rgba(2,6,23,.55); padding: 1rem 1rem .9rem; } /* Scrollbars compactas para paneles y modales de la aplicacion. */ :where( .route-panel, .route-panel *, .history-panel, .history-panel *, .config-panel, .config-panel *, .custom-modal-card, .custom-modal-card *, .popup-stack-left, .popup-stack-left *, .popup-parada, .popup-parada * ) { scrollbar-width: thin; scrollbar-color: rgba(100, 116, 139, .78) rgba(2, 6, 23, .18); } :where( .route-panel, .route-panel *, .history-panel, .history-panel *, .config-panel, .config-panel *, .custom-modal-card, .custom-modal-card *, .popup-stack-left, .popup-stack-left *, .popup-parada, .popup-parada * )::-webkit-scrollbar { width: 6px; height: 6px; } :where( .route-panel, .route-panel *, .history-panel, .history-panel *, .config-panel, .config-panel *, .custom-modal-card, .custom-modal-card *, .popup-stack-left, .popup-stack-left *, .popup-parada, .popup-parada * )::-webkit-scrollbar-track { border-radius: 999px; background: rgba(2, 6, 23, .18); } :where( .route-panel, .route-panel *, .history-panel, .history-panel *, .config-panel, .config-panel *, .custom-modal-card, .custom-modal-card *, .popup-stack-left, .popup-stack-left *, .popup-parada, .popup-parada * )::-webkit-scrollbar-thumb { border: 1px solid rgba(15, 23, 42, .88); border-radius: 999px; background: rgba(100, 116, 139, .78); } :where( .route-panel, .route-panel *, .history-panel, .history-panel *, .config-panel, .config-panel *, .custom-modal-card, .custom-modal-card *, .popup-stack-left, .popup-stack-left *, .popup-parada, .popup-parada * )::-webkit-scrollbar-thumb:hover { background: rgba(56, 189, 248, .78); } :where( .route-panel, .route-panel *, .history-panel, .history-panel *, .config-panel, .config-panel *, .custom-modal-card, .custom-modal-card *, .popup-stack-left, .popup-stack-left *, .popup-parada, .popup-parada * )::-webkit-scrollbar-corner { background: transparent; } .custom-modal-title { font-size: 1rem; font-weight: 700; color: #f8fafc; margin-bottom: .45rem; } .custom-modal-text { font-size: .9rem; line-height: 1.45; color: #cbd5e1; margin-bottom: .9rem; } .custom-modal-actions { display: flex; justify-content: flex-end; gap: .5rem; } .custom-modal-actions .btn-ghost { min-width: 110px; } /* Botón flotante para abrir la configuración avanzada */ .config-toggle-btn { position: absolute; bottom: 2.4rem; left: .85rem; width: 2.5rem; height: 2.5rem; border-radius: 999px; border: 1px solid rgba(148,163,184,.6); background: #111827; color: #e5e7eb; font-size: 1.25rem; display: flex; align-items: center; justify-content: center; cursor: pointer; box-shadow: 0 10px 25px rgba(15,23,42,.8); z-index: 1300; } .config-toggle-btn:hover { background: #1d4ed8; color: #fff; } /* Cabecera del panel de configuración con botón de cierre */ .config-panel-header { display: flex; align-items: center; justify-content: space-between; gap: .5rem; margin-bottom: .75rem; } .config-panel-header h5 { margin: 0; } .config-close-btn { border: none; background: transparent; color: #9ca3af; font-size: 1.1rem; cursor: pointer; padding: 0; line-height: 1; } .config-close-btn:hover { color: #e5e7eb; } .coords-bar { position: absolute; bottom: 6px; left: 10px; padding: 4px 8px; background: #000000; /* negro total */ color: #fff; font-size: 12px; border-radius: 4px; pointer-events: none; /* para no bloquear clics en el mapa */ z-index: 500; } .rt-arrow-icon { background: transparent; border: none; } .rt-stop-direction-icon { border: 0; background: transparent; pointer-events: none; } .rt-stop-direction-arrow { position: absolute; top: 50%; left: 50%; width: 10px; height: 12px; transform: translate(-50%, -50%) rotate(var(--stop-bearing, 0deg)); transform-origin: 50% 50%; filter: drop-shadow(0 0 1px #0f172a) drop-shadow(0 1px 0 #0f172a); } .rt-stop-direction-arrow::before { content: ""; position: absolute; top: 0; left: 50%; width: 0; height: 0; transform: translateX(-50%); border-right: 3px solid transparent; border-bottom: 6px solid #f8fafc; border-left: 3px solid transparent; } .rt-stop-direction-arrow::after { content: ""; position: absolute; top: 5px; left: 4px; width: 2px; height: 6px; border-radius: 1px; background: #f8fafc; } .rt-arrow { position: relative; transform-origin: 50% 50%; } .rt-arrow::before { content: ""; position: absolute; left: 50%; top: 50%; transform: translate(-50%, -75%); width: 0; height: 0; /* tu punta */ border-left: 8px solid transparent; border-right: 8px solid transparent; border-bottom: 18px solid var(--arrow-color, rgba(239, 68, 68, 0.95)); /* ✅ borde negro (simulado) */ filter: drop-shadow( 2px 0 0 #000) drop-shadow(-2px 0 0 #000) drop-shadow( 0 1px 0 #000) drop-shadow( 0 -1px 0 #000); } .rt-arrow::after { content: ""; position: absolute; left: 50%; top: 60%; transform: translateX(-50%); /* Cuerpo un poco más largo */ width: 4px; height: 10px; background: var(--arrow-color, rgba(239, 68, 68, 0.95)); border-radius: 1px; } .rt-arrow--dashed::before { border-left: 8px solid transparent; border-right: 8px solid transparent; border-bottom: 18px solid var(--arrow-color, rgba(239, 68, 68, 0.95)); filter: drop-shadow( 2px 0 0 #000) drop-shadow(-2px 0 0 #000) drop-shadow( 0 1px 0 #000) drop-shadow( 0 -1px 0 #000); } .rt-arrow--dashed .rt-arrow-dash-head { display: none; } .rt-arrow--dashed::after { background: repeating-linear-gradient(180deg, var(--arrow-color, rgba(239, 68, 68, 0.95)) 0 4px, #fff 4px 8px); box-shadow: 0 0 0 1px #000; } /* Ocultar spinners nativos */ .config-input::-webkit-outer-spin-button, .config-input::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; } .config-input[type="number"] { -moz-appearance: textfield; } .num-inline { display: grid; grid-template-columns: 1fr 1.6rem 1.6rem; /* input | ? | ? */ gap: .25rem; align-items: center; min-width: 0; } .num-inline .config-input { width: 100% !important; /* pisa width:90px anterior */ min-width: 0; box-sizing: border-box; } .config-dual-inline { display: grid; grid-template-columns: 1fr 1fr; gap: .5rem; align-items: center; min-width: 0; } .config-dual-inline .config-input { width: 100% !important; min-width: 0; box-sizing: border-box; text-align: center; } .config-dual-inline--bare { grid-template-columns: repeat(2, minmax(0, 4.2rem)); justify-content: end; gap: .35rem; } .config-dual-inline--bare .config-input { max-width: none; text-align: center; padding-left: .35rem; padding-right: .35rem; } .config-dual-inline--bare .config-input::placeholder { color: #94a3b8; opacity: 1; font-size: .72rem; } .config-dual-labeled { display: grid; grid-template-columns: repeat(2, minmax(0, 4.2rem)); justify-content: end; gap: .35rem; min-width: 0; } .config-dual-labeled__field { display: grid; gap: .18rem; min-width: 0; } .config-dual-labeled__field span { color: #94a3b8; font-size: .62rem; line-height: 1; text-align: center; white-space: nowrap; } .config-dual-labeled__field .config-input { width: 100% !important; min-width: 0; box-sizing: border-box; padding-left: .35rem; padding-right: .35rem; text-align: center; } .config-dual-labeled--equilibrado { grid-template-columns: minmax(0, 4rem); align-items: end; justify-content: start; } /* ✅ Solo esta fila: label arriba + control abajo, ancho completo */ .config-row.config-row-full { grid-template-columns: 1fr !important; } .config-row-map-opacity { margin-top: .7rem !important; margin-bottom: 0; } /* Asegura que el contenedor derecho pueda encoger y no desborde */ .config-row > * { min-width: 0; } /* Ajuste del range: ahora sí, columnas estables */ .line-filter { max-width: 100%; min-width: 0; } .modelos-horarios { display: grid; gap: .42rem; min-width: 0; } .modelos-horarios__toggle { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; gap: .42rem; width: 100%; min-height: 34px; padding: .3rem .46rem; border: 1px solid rgba(148, 163, 184, .42); border-radius: 6px; background: rgba(15, 23, 42, .78); color: #e5e7eb; cursor: pointer; text-align: left; } .modelos-horarios__toggle:hover { border-color: rgba(56, 189, 248, .75); background: rgba(30, 41, 59, .9); } .modelos-horarios__toggle-label { color: #cbd5e1; font-size: .78rem; font-weight: 600; white-space: nowrap; } .modelos-horarios__toggle-action { align-self: center; padding: .18rem .45rem; border-radius: 5px; background: rgba(37, 99, 235, .86); color: #f8fafc; font-size: .72rem; font-weight: 700; } .modelos-horarios-modal-backdrop { z-index: 5600; } .custom-modal-card.modelos-horarios-modal { width: min(540px, calc(100vw - 2rem)); padding: .9rem; } .modelos-horarios-modal__header { display: flex; align-items: flex-start; justify-content: space-between; gap: .75rem; margin-bottom: .75rem; } .modelos-horarios-modal__activo { max-width: 420px; overflow: hidden; color: #93c5fd; font-size: .78rem; text-overflow: ellipsis; white-space: nowrap; } .modelos-horarios-modal__close { margin-top: .1rem; font-size: 1.25rem; } .modelos-horarios__panel { display: grid; gap: .5rem; min-width: 0; padding: .55rem; border: 1px solid rgba(148, 163, 184, .28); border-radius: 6px; background: rgba(15, 23, 42, .62); } .modelos-horarios__panel--modal { gap: .65rem; padding: .7rem; background: rgba(15, 23, 42, .5); } .modelos-horarios__field { display: grid; gap: .22rem; color: #cbd5e1; font-size: .74rem; } .modelos-horarios__activo { min-width: 0; color: #93c5fd; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .modelos-horarios__select { width: 100% !important; min-width: 0; } .modelos-horarios__meta { display: grid; gap: .25rem; max-height: 78px; overflow: auto; margin-top: .35rem; padding-right: .15rem; } .modelos-horarios__meta--modal { max-height: 150px; } .modelos-horarios__details { min-width: 0; color: #94a3b8; font-size: .74rem; } .modelos-horarios__details summary { cursor: pointer; user-select: none; } .modelos-horarios__item { display: grid; grid-template-columns: minmax(0, 1fr); gap: .08rem; padding: .25rem .35rem; border-radius: 5px; color: #94a3b8; background: rgba(30, 41, 59, .5); font-size: .72rem; } .modelos-horarios__item span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .modelos-horarios__item--activo { color: #e0f2fe; background: rgba(14, 116, 144, .42); } .modelos-horarios__actions { display: grid; grid-template-columns: 1fr 1fr; gap: .4rem; } .modelos-horarios__button { min-height: 31px; border-radius: 6px; border: 1px solid rgba(148, 163, 184, .38); background: rgba(51, 65, 85, .92); color: #e5e7eb; font-size: .78rem; font-weight: 700; cursor: pointer; } .modelos-horarios__button:hover { background: rgba(71, 85, 105, .96); } .modelos-horarios__button--primary { background: rgba(37, 99, 235, .94); color: #fff; } .modelos-horarios__button--primary:hover { background: rgba(59, 130, 246, .98); } .modelos-horarios__maintenance { display: flex; justify-content: flex-end; } .modelos-horarios__button--danger { padding: 0 .7rem; border-color: rgba(248, 113, 113, .46); background: rgba(127, 29, 29, .86); color: #fee2e2; } .modelos-horarios__button--danger:hover { background: rgba(185, 28, 28, .92); } .modelos-horarios__button:disabled, .modelos-horarios__toggle:disabled { opacity: .52; cursor: not-allowed; } .modelos-horarios__upload { display: grid; gap: .25rem; min-width: 0; color: #cbd5e1; font-size: .78rem; } .modelos-horarios__upload input { max-width: 100%; color: #cbd5e1; font-size: .72rem; } .modelos-horarios__upload input::file-selector-button { margin-right: .45rem; padding: .24rem .48rem; border: 1px solid rgba(148, 163, 184, .38); border-radius: 5px; background: rgba(51, 65, 85, .92); color: #e5e7eb; cursor: pointer; } .modelos-horarios__mensaje { color: #93c5fd; font-size: .74rem; line-height: 1.25; } .line-filter__range { display: grid; grid-template-columns: auto 1fr auto 1fr; /* Rango | min | a | max */ gap: 8px; align-items: center; max-width: 100%; min-width: 0; } .line-filter__range .config-input { width: 100% !important; /* pisa el 90px */ min-width: 0; } .line-filter__selector-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-bottom: .45rem; } .line-filter__dropdown { position: relative; margin-top: .45rem; } .line-filter__summary { display: flex; align-items: center; justify-content: space-between; min-height: 34px; padding: .35rem .55rem; border: 1px solid rgba(148, 163, 184, .45); border-radius: 6px; background: rgba(15, 23, 42, .78); color: #e5e7eb; font-size: .84rem; cursor: pointer; user-select: none; } .line-filter__summary--readonly { margin-top: .45rem; cursor: default; opacity: .72; } .line-filter__dropdown-panel { position: absolute; top: calc(100% + .35rem); left: 0; right: 0; z-index: 30; padding: .55rem; border: 1px solid rgba(148, 163, 184, .42); border-radius: 6px; background: rgba(15, 23, 42, .94); box-shadow: 0 14px 28px rgba(15, 23, 42, .26); } .line-filter__list { display: flex; flex-wrap: wrap; gap: 6px; max-height: 132px; overflow: auto; padding: 2px; } .line-option { display: inline-flex; align-items: center; gap: 5px; min-height: 28px; padding: .22rem .48rem; border: 1px solid rgba(148, 163, 184, .5); border-radius: 6px; background: rgba(15, 23, 42, .72); color: #e5e7eb; font-size: .82rem; line-height: 1; cursor: pointer; user-select: none; } .line-option input { width: 13px; height: 13px; margin: 0; } .line-option--active { border-color: rgba(56, 189, 248, .95); background: rgba(14, 116, 144, .52); color: #f8fafc; } .config-mini-button { min-height: 28px; padding: .22rem .55rem; border: 1px solid rgba(148, 163, 184, .45); border-radius: 6px; background: rgba(15, 23, 42, .85); color: #e5e7eb; font-size: .78rem; line-height: 1; } .config-mini-button:hover { border-color: rgba(56, 189, 248, .85); color: #f8fafc; } /* En muy estrecho, que pase a 2 columnas */ @media (max-width: 520px) { .line-filter__range { grid-template-columns: 1fr 1fr; } } .rt-elev-label { background: none; /* 🔑 sin tarjeta */ color: #facc15; /* amarillo suave */ font-size: .6rem; font-weight: 700; text-shadow: 0 1px 3px rgba(0,0,0,.85); /* legible sobre mapa */ padding: 0; border: none; box-shadow: none; user-select: none; pointer-events: none; } .rt-elev-label:before { display:none; } /* Tooltip Leaflet sin tarjeta */ .leaflet-tooltip.rt-elev-label { background: transparent !important; border: none !important; box-shadow: none !important; padding: 0 !important; } .leaflet-tooltip.rt-elev-label:before { display: none !important; } /* Número negro con contorno blanco */ .rt-elev-label { color: #020617 !important; /* negro azulado */ font-size: .6rem !important; font-weight: 700 !important; /* contorno blanco */ text-shadow: -1px -1px 0 rgba(255,255,255,.95), 1px -1px 0 rgba(255,255,255,.95), -1px 1px 0 rgba(255,255,255,.95), 1px 1px 0 rgba(255,255,255,.95); user-select: none; pointer-events: none; } .leaflet-tooltip.rt-elev-tooltip { background: rgba(15, 23, 42, .92) !important; border: 1px solid rgba(226, 232, 240, .35) !important; border-radius: 6px !important; color: #f8fafc !important; font-size: .68rem !important; font-weight: 800 !important; line-height: 1.3 !important; white-space: nowrap; padding: 2px 6px !important; box-shadow: 0 8px 18px rgba(0, 0, 0, .35) !important; } .leaflet-tooltip.rt-elev-tooltip:before { display: none !important; } .leaflet-control-zoom-indicator { background: rgba(15,23,42,.96); color: #e5e7eb; border: 1px solid rgba(148,163,184,.55); border-radius: .4rem; padding: .15rem .45rem; font-size: .8rem; font-weight: 700; line-height: 1.2; margin: 0; /* se alinea con los botones */ box-shadow: 0 10px 25px rgba(15,23,42,.6); } .elev-bubble { position: fixed; left: 14px; bottom: 50px; /* MISMA referencia que el popup */ top: auto; /* anulamos el top antiguo */ z-index: 9999; display: inline-flex; align-items: center; gap: .5rem; padding: .55rem .75rem; border-radius: 999px; background: rgba(20,20,20,.92); border: 1px solid rgba(255,255,255,.12); color: #fff; font-size: .85rem; cursor: pointer; box-shadow: 0 10px 25px rgba(0,0,0,.35); } .elev-bubble:hover { transform: translateY(-1px); } .popup-elev-header { display: flex; align-items: center; justify-content: space-between; gap: .5rem; margin-bottom: .25rem; } .popup-elev-title { flex: 1 1 auto; min-width: 0; display: flex; align-items: baseline; gap: .45rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .popup-elev-title-main { flex: 0 0 auto; font-size: .95rem; font-weight: 700; } .popup-elev-title-threshold { min-width: 0; overflow: hidden; color: #94a3b8; font-size: .68rem; font-weight: 400; text-overflow: ellipsis; } .popup-elev-actions { display: flex; flex: 0 0 auto; align-items: center; gap: .35rem; } .popup-elev-actions .btn-ghost { white-space: nowrap; padding: .15rem .45rem; font-size: .85rem; line-height: 1; } /* Si tu header es más alto/bajo, sube/baja estos top */ @media (max-width: 720px) { .popup-elev-topright { width: calc(100vw - 28px); top: 110px; } } .rutas-header-linea { display: grid; grid-template-columns: minmax(240px, auto) minmax(0, 1fr) auto; align-items: center; gap: .75rem; } .header-left { justify-self: start; min-width: 0; } .header-left .titulo-app, .header-left small { white-space: nowrap; } .header-center { justify-self: start; display: flex; align-items: center; gap: .45rem; white-space: nowrap; min-width: 0; overflow: hidden; } .header-right { justify-self: end; display: flex; align-items: center; gap: .4rem; white-space: nowrap; flex-wrap: nowrap; } .header-center-input { width: clamp(148px, 15vw, 220px) !important; min-width: 0; } .header-center .btn-ghost, .header-center .line-filter__toggle, .header-center .nowrap, .header-right .btn-ghost, .header-right .pill-live { flex: 0 0 auto; } .nowrap { white-space: nowrap; } /* Estado Punto Z (amarillo) */ .pill-warn { background: rgba(250,204,21,.12); border-color: rgba(250,204,21,.5); color: #fde68a; } .pill-warn .pill-dot { background: #facc15; /* AMARILLO */ box-shadow: 0 0 0 3px rgba(250,204,21,.35); } .popup-elev-topright { --elev-table-width: 412px; position: fixed; left: 14px; bottom:40px; /* mismo “offset” pero abajo */ right: auto; top: auto; transform: none; width: max-content; min-width: 0; max-width: calc(100vw - 28px); z-index: 1200; } .popup-elev-topright .popup-elev-title { max-width: none; } .popup-elev-topright .popup-parada-body { max-width: none; } .popup-elev-table-wrap { width: var(--elev-table-width); max-width: calc(100vw - 56px); max-height: 300px; overflow-y: auto; overflow-x: hidden; } .popup-elev-table thead th { position: sticky; top: 0; z-index: 2; background: #111827; box-shadow: 0 1px 0 rgba(148,163,184,.35); } .popup-elev-table thead th:first-child { z-index: 3; } .popup-elev-g-summary { white-space: nowrap; font-size: .74rem; } /* ===== SLIDER (range) limpio para el panel ===== */ .config-range { width: 100%; margin: 0; padding: 0; /* 🔑 evita que “no llegue” */ background: transparent; border: none; outline: none; -webkit-appearance: none; appearance: none; height: 18px; /* área cómoda de click */ } /* TRACK (Chrome/Edge/Safari) */ .config-range::-webkit-slider-runnable-track { height: 6px; border-radius: 999px; background: rgba(148,163,184,.35); border: 1px solid rgba(148,163,184,.35); } /* THUMB (Chrome/Edge/Safari) */ .config-range::-webkit-slider-thumb { -webkit-appearance: none; appearance: none; width: 14px; height: 14px; border-radius: 999px; background: #38bdf8; border: 2px solid #0f172a; margin-top: -4px; /* centra sobre track de 6px */ } /* TRACK (Firefox) */ .config-range::-moz-range-track { height: 6px; border-radius: 999px; background: rgba(148,163,184,.35); border: 1px solid rgba(148,163,184,.35); } /* THUMB (Firefox) */ .config-range::-moz-range-thumb { width: 14px; height: 14px; border-radius: 999px; background: #38bdf8; border: 2px solid #0f172a; } /* evita borde raro en firefox */ .config-range::-moz-focus-outer { border: 0; } .pill-clickable { cursor: pointer; border: 0; } /* Visible => verde */ .pill-ok .pill-dot { background: #22c55e; } /* verde */ .pill-ok { border-color: rgba(34,197,94,.6); } /* Oculto => rojo */ .pill-bad .pill-dot { background: #ef4444; } /* rojo */ .pill-bad { border-color: rgba(239,68,68,.6); } .pill-ok { background: rgba(34,197,94,.12); } .pill-bad { background: rgba(239,68,68,.12); } .gm-search-panel { position: absolute; /* si ya lo tienes, deja tu estilo actual */ /* mantén tus estilos actuales */ } .gm-search-hide-btn { padding: .2rem .45rem; line-height: 1; font-size: .95rem; } /* 3 columnas: "Fecha:" | date | time (igual idea que Rango: min/max) */ .line-filter__range--fecha { grid-template-columns: minmax(0, 1.12fr) minmax(0, 0.78fr) auto !important; gap: 6px; align-items: center; } /* Igualar inputs date/time al look de .config-input */ .config-input[type="date"], .config-input[type="time"] { width: 100% !important; /* como los selects dentro de line-filter__range */ min-width: 0; box-sizing: border-box; height: 32px; /* ajusta a tu “alto estándar” */ padding: .35rem .5rem; /* igual que .config-input */ font-size: .8rem; line-height: 1.1; background: #0f172a; color: #e2e8f0; border: 1px solid rgba(148,163,184,.5); border-radius: .5rem; -webkit-appearance: none; appearance: none; color-scheme: dark; } /* En iOS/Safari a veces mete padding raro: lo neutralizamos */ .config-input[type="date"]::-webkit-datetime-edit, .config-input[type="time"]::-webkit-datetime-edit { padding: 0; } .config-input[type="date"]::-webkit-calendar-picker-indicator, .config-input[type="time"]::-webkit-calendar-picker-indicator, .config-input[type="time"]::-webkit-time-picker-indicator { filter: brightness(0) invert(1); opacity: 1; cursor: pointer; } .config-input-date { min-width: 0 !important; } .config-input-time { min-width: 0 !important; } .btn-ghost--tiny { min-width: 0; padding: .35rem .55rem; font-size: .78rem; line-height: 1; white-space: nowrap; } /* Elementos alternativos para la experiencia movil. */ .mobile-only, .mobile-action-label, .mobile-action-icon { display: none !important; } @media (max-width: 780px) { :root { --mobile-header-height: 58px; --mobile-nav-height: 64px; } html, body { width: 100%; max-width: 100%; overscroll-behavior: none; } .full-page { width: 100%; height: 100dvh; min-height: 100dvh; } .desktop-only, .desktop-action-label { display: none !important; } .mobile-only { display: initial !important; } .rutas-header-linea { box-sizing: border-box; flex: 0 0 var(--mobile-header-height); width: 100%; height: var(--mobile-header-height); grid-template-columns: minmax(0, 1fr); gap: 0; padding: 7px 12px; border-color: rgba(212, 212, 216, .16); background: rgba(24, 24, 27, .98); } .header-left { width: 100%; overflow: hidden; } .header-left .titulo-app, .header-left small { max-width: 100%; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .rutas-header h3 { font-size: .98rem; line-height: 1.2; } .rutas-header small { margin-top: 2px; font-size: .68rem; line-height: 1.2; } .titulo-app { gap: .35rem; } .app-version-inline { font-size: .6rem; } .header-center { display: none !important; } .header-right { position: fixed; z-index: 2700; right: 0; bottom: 0; left: 0; box-sizing: border-box; display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); align-items: start; gap: 2px; width: 100%; height: calc(var(--mobile-nav-height) + env(safe-area-inset-bottom)); padding: 5px 5px env(safe-area-inset-bottom); border-top: 1px solid rgba(212, 212, 216, .2); background: rgba(24, 24, 27, .98); box-shadow: 0 -8px 24px rgba(0, 0, 0, .28); white-space: normal; } .header-right > .pill-live:not(.pill-clickable) { display: none !important; } .header-right .mobile-nav-action, .header-right .btn-ghost.mobile-nav-action, .header-right .btn-icon.mobile-nav-action { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 3px; box-sizing: border-box; width: 100%; min-width: 0; height: 54px; min-height: 54px; margin: 0; padding: 3px 2px; border: 0; border-radius: 6px; background: transparent; color: #e4e4e7; line-height: 1; } .header-right .mobile-nav-action:hover, .header-right .mobile-nav-action:focus-visible { outline: none; background: rgba(63, 63, 70, .82); color: #fff; } .mobile-action-label { display: block !important; max-width: 100%; overflow: hidden; color: #d4d4d8; font-size: .62rem; font-weight: 650; line-height: 1.05; text-overflow: ellipsis; white-space: nowrap; } .mobile-action-icon { display: block !important; } .header-right .search-icon, .header-right .history-open-icon, .header-right .nav-action-icon, .header-right .mobile-action-icon, .header-right .pill-dot { flex: 0 0 auto; font-size: 1.08rem; line-height: 1; } .header-right .pill-dot { width: 10px; height: 10px; box-shadow: 0 0 0 3px rgba(255, 255, 255, .08); } .header-right .pill-ok .mobile-action-label { color: #86efac; } .header-right .pill-bad .mobile-action-label { color: #fca5a5; } .map-container { min-height: 0; } .coords-bar, .map-container .leaflet-control-zoom { display: none !important; } .map-container .leaflet-bottom { bottom: calc(var(--mobile-nav-height) + env(safe-area-inset-bottom) + 2px); } .map-container .leaflet-control-attribution { max-width: calc(100vw - 10px); overflow: hidden; font-size: 9px; text-overflow: ellipsis; white-space: nowrap; } .gm-search-panel { top: 8px; left: 8px; box-sizing: border-box; width: calc(100% - 16px); max-width: none; padding: 9px; transform: none; border: 1px solid rgba(212, 212, 216, .22); border-radius: 8px; background: rgba(24, 24, 27, .97); } .gm-search-row { display: grid; grid-template-columns: minmax(0, 1fr); gap: 8px; } .gm-search-inputs { display: grid; grid-template-areas: "origin swap" "destination swap"; grid-template-columns: minmax(0, 1fr) 44px; gap: 6px; width: 100%; } .gm-input-group:first-child { grid-area: origin; } .gm-input-group:last-child { grid-area: destination; } .gm-input-group label { margin: 0 0 2px 3px; font-size: .68rem; } .gm-input-group input { box-sizing: border-box; min-height: 44px; padding: 8px 10px; border-radius: 6px; font-size: 16px; } .gm-swap-btn { grid-area: swap; align-self: end; width: 44px; height: 44px; padding: 0; border-radius: 6px; transform: none; font-size: 1rem; } .gm-search-actions { display: grid; grid-template-columns: minmax(0, 1fr) 44px; gap: 6px; } .gm-search-button, .gm-search-hide-btn { box-sizing: border-box; min-height: 44px; border-radius: 6px; font-size: .82rem; } .gm-search-hide-btn { width: 44px; min-width: 44px; padding: 0; } .gm-suggestions { max-height: 38dvh; border-radius: 6px; } .gm-suggestion { min-height: 44px; } .draggable-popup-handle { cursor: default; } .popup-stack-left { position: fixed; z-index: 2500; top: calc(var(--mobile-header-height) + 8px); right: 8px; left: 8px; width: auto; max-width: none; max-height: 42dvh; overflow-y: auto; gap: 6px; } .full-page:has(.gm-search-panel) .popup-stack-left { top: calc(var(--mobile-header-height) + 168px); max-height: 28dvh; } .full-page:has(.route-panel-overlay:not(.route-panel-overlay--mobile-collapsed)) .popup-stack-left { max-height: 18dvh; } .popup-stack-left .popup-parada, .popup-stack-left .popup-itinerario, .popup-stack-left .popup-inspector, .popup-stack-left .popup-parada.draggable-popup--free { position: relative !important; top: auto !important; right: auto !important; bottom: auto !important; left: auto !important; box-sizing: border-box; width: 100%; max-width: none; margin: 0 !important; padding: 12px 48px 10px 12px; transform: none !important; border-radius: 8px; } .popup-parada-cerrar, .config-close-btn { display: grid; place-items: center; width: 44px; height: 44px; padding: 0; font-size: 1.25rem; } .popup-parada-cerrar { top: 0; right: 0; } .route-panel-overlay, .route-panel-overlay.draggable-popup--free { position: fixed !important; z-index: 2600; top: auto !important; right: 0 !important; bottom: calc(var(--mobile-nav-height) + env(safe-area-inset-bottom)) !important; left: 0 !important; box-sizing: border-box; width: 100% !important; max-width: none; height: auto; max-height: min(62dvh, 560px); margin: 0 !important; transform: none !important; } .route-panel { box-sizing: border-box; width: 100%; height: auto; max-height: min(62dvh, 560px); padding: 10px 10px 8px; border: 1px solid rgba(212, 212, 216, .22); border-bottom: 0; border-radius: 8px 8px 0 0; background: rgba(24, 24, 27, .98); } .route-panel-header { display: grid; grid-template-columns: minmax(0, 1fr) 44px; align-items: center; gap: 6px; margin-bottom: 8px; } .route-panel-title { grid-column: 1; grid-row: 1; font-size: .9rem; } .route-mobile-collapse { grid-column: 2; grid-row: 1; display: grid !important; place-items: center; width: 44px; height: 44px; padding: 0; border: 1px solid rgba(161, 161, 170, .45); border-radius: 6px; background: rgba(39, 39, 42, .92); color: #f4f4f5; font-size: 1.15rem; } .route-priority-switch { grid-column: 1 / -1; grid-row: 2; width: 100%; box-sizing: border-box; border-radius: 7px; } .route-priority-option { min-width: 0; height: 40px; font-size: .73rem; } .route-visual-options { justify-content: flex-start; flex-wrap: nowrap; gap: 4px; margin: 0 0 8px; padding: 2px 3px 2px 6px; } .route-elevation-switch { min-height: 44px; font-size: .72rem; } .route-elevation-settings-trigger { width: 40px; height: 40px; } .route-elevation-settings-popover { right: auto; left: 0; width: 250px; max-width: calc(100vw - 20px); } .route-elevation-setting-row { grid-template-columns: minmax(0, 1fr) 48px 36px; min-height: 40px; font-size: .72rem; } .route-elevation-setting-row input { width: 48px; height: 36px; font-size: .78rem; } .route-alt-list { gap: 6px; margin-bottom: 6px; } .route-alt-card { min-height: 56px; padding: 8px 9px; border-radius: 8px; font-size: .8rem; } .route-alt-main { flex-wrap: wrap; row-gap: 2px; } .route-alt-sub, .route-alt-walk { white-space: normal; } .route-panel-body { min-height: 0; padding-right: 3px; overscroll-behavior: contain; } .route-main-text { font-size: .84rem; line-height: 1.45; } .chips-row { gap: 5px; } .chip { min-height: 32px; border-radius: 6px; } .lista-tramos-ruta { font-size: .79rem; } .lista-tramos-ruta li { gap: 7px; margin-bottom: 8px; } .lista-tramos-ruta li .detalle-tramo-ruta-contenido { display: grid !important; grid-template-columns: minmax(0, 1fr) auto; align-items: start !important; gap: 6px !important; } .detalle-tramo-ruta-contenido .btn-ghost { min-width: 58px; min-height: 42px; padding: 6px 8px !important; border-radius: 6px; } .route-panel-overlay--mobile-collapsed, .route-panel-overlay--mobile-collapsed .route-panel { max-height: none; } .route-panel-overlay--mobile-collapsed .route-panel-header { margin-bottom: 0; } .route-panel-overlay--mobile-collapsed .route-priority-switch, .route-panel-overlay--mobile-collapsed .route-visual-options, .route-panel-overlay--mobile-collapsed .route-alt-list, .route-panel-overlay--mobile-collapsed .route-panel-divider, .route-panel-overlay--mobile-collapsed .route-panel-body { display: none !important; } .history-panel, .history-panel.draggable-popup--free { position: fixed !important; z-index: 2800; top: 8px !important; right: 8px !important; bottom: calc(var(--mobile-nav-height) + env(safe-area-inset-bottom) + 8px) !important; left: 8px !important; box-sizing: border-box; display: flex; flex-direction: column; width: auto; max-width: none; height: auto; max-height: none; margin: 0 !important; padding: 12px; transform: none !important; border-radius: 8px; background: rgba(24, 24, 27, .98); } .history-panel-header { flex: 0 0 auto; min-height: 44px; margin-bottom: 8px; } .history-panel-header h5 { font-size: .88rem; } .history-panel-body { min-height: 0; overflow-y: auto; overscroll-behavior: contain; } .history-list { max-height: 29dvh; gap: 6px; } .history-item-main { min-height: 48px; padding: 8px 9px; border-radius: 7px; font-size: .76rem; } .history-item-action, .history-item-delete { flex-basis: 44px; width: 44px; min-height: 44px; border-radius: 7px; } .config-panel, .config-panel.draggable-popup--free { position: fixed !important; z-index: 2800; top: 8px !important; right: 8px !important; bottom: calc(var(--mobile-nav-height) + env(safe-area-inset-bottom) + 8px) !important; left: 8px !important; box-sizing: border-box; width: auto; max-width: none; height: auto; max-height: none; margin: 0 !important; padding: 12px; transform: none !important; border-radius: 8px; background: rgba(24, 24, 27, .98); overscroll-behavior: contain; } .config-panel-header { position: sticky; z-index: 4; top: -12px; min-height: 48px; margin: -12px -12px 10px; padding: 8px 8px 5px 12px; border-bottom: 1px solid rgba(212, 212, 216, .16); background: rgba(24, 24, 27, .99); } .config-panel h5 { margin: 0; font-size: .86rem; } .config-row { grid-template-columns: minmax(0, 1fr) minmax(132px, 44%); gap: 8px; margin-bottom: 10px; } .config-row label { line-height: 1.25; } .config-panel .config-input { min-height: 42px; font-size: 16px; } .config-row > .config-input, .config-row > .num-inline, .config-row > .config-dual-inline, .config-row > .config-dual-labeled { width: 100% !important; } .config-dual-labeled__field span { font-size: .64rem; } .line-filter__toggle { min-height: 36px; } .line-filter__toggle input[type="checkbox"] { flex: 0 0 20px; width: 20px; height: 20px; } .line-filter__range { grid-template-columns: auto minmax(0, 1fr) auto minmax(0, 1fr); gap: 6px; } .line-filter__range--fecha { grid-template-columns: minmax(0, 1.15fr) minmax(0, .8fr) auto !important; } .line-filter__dropdown-panel { position: static; margin-top: 6px; box-shadow: none; } .line-filter__list { max-height: 28dvh; } .line-option { min-height: 40px; } .modelos-horarios__toggle, .modelos-horarios__button, .config-mini-button, .config-actions-row .btn-ghost, .btn-ghost--tiny { min-height: 44px; border-radius: 6px; } .custom-modal-backdrop { padding: 8px; } .custom-modal-card, .custom-modal-card.modelos-horarios-modal { box-sizing: border-box; width: 100%; max-height: calc(100dvh - 16px); padding: 12px; overflow-y: auto; border-radius: 8px; } .custom-modal-actions { display: grid; grid-template-columns: 1fr 1fr; } .custom-modal-actions .btn-ghost { min-width: 0; min-height: 44px; border-radius: 6px; } .modelos-horarios-modal__header { min-height: 44px; } .modelos-horarios__actions { gap: 6px; } .popup-elev-topright, .popup-elev-topright.draggable-popup--free { position: fixed !important; z-index: 2850; top: auto !important; right: 8px !important; bottom: calc(var(--mobile-nav-height) + env(safe-area-inset-bottom) + 8px) !important; left: 8px !important; box-sizing: border-box; width: auto; max-width: none; margin: 0 !important; padding: 10px; transform: none !important; border-radius: 8px; } .popup-elev-topright .popup-elev-title { max-width: calc(100vw - 150px); } .popup-elev-actions .btn-ghost { display: grid; place-items: center; width: 44px; height: 44px; padding: 0; border-radius: 6px; } .popup-elev-table-wrap { width: 100%; max-width: 100%; max-height: min(56dvh, 420px); } .popup-elev-table { font-size: .62rem !important; } .popup-elev-table th, .popup-elev-table td { padding-right: 2px !important; padding-left: 2px !important; } .popup-elev-table col:nth-child(1) { width: 26px !important; } .popup-elev-table col:nth-child(2) { width: 44px !important; } .popup-elev-table col:nth-child(3) { width: 39px !important; } .popup-elev-table col:nth-child(4) { width: 52px !important; } .popup-elev-table col:nth-child(5) { width: 56px !important; } .popup-elev-table col:nth-child(6) { width: 46px !important; } .elev-bubble { right: 8px; bottom: calc(var(--mobile-nav-height) + env(safe-area-inset-bottom) + 8px); left: 8px; justify-content: center; min-height: 44px; border-radius: 7px; } }