:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}body{background:#fff;margin:0}*{box-sizing:border-box}.app{color:#1a1a1a;max-width:1100px;margin:0 auto;padding:32px 24px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif}header{justify-content:space-between;align-items:flex-start;margin-bottom:24px;display:flex}h1{margin:0;font-size:22px}.sub{color:#6b7280;margin:4px 0 0;font-size:14px}.estado{color:#374151;background:#f3f4f6;border-radius:999px;align-items:center;gap:8px;padding:6px 12px;font-size:13px;display:flex}.estado .dot{background:#9ca3af;border-radius:50%;width:8px;height:8px}.estado.ok .dot{background:#16a34a}.estado.err{color:#b91c1c;background:#fef2f2}.estado.err .dot{background:#dc2626}.pista-nombre{font-weight:700}.pista-tipo{color:#6b7280;font-size:11px;font-weight:400}.agenda{background:#fff;border:1px solid #e5e7eb;border-radius:10px;gap:0;max-height:calc(100vh - 190px);display:flex;overflow:auto}.agenda-eje{z-index:3;background:#fff;border-right:1px solid #e5e7eb;flex:0 0 52px;margin-top:44px;position:sticky;left:0}.agenda-hora{color:#9ca3af;font-variant-numeric:tabular-nums;font-size:11px;position:absolute;right:6px;transform:translateY(-50%)}.agenda-pistas{flex:1;display:flex}.agenda-col{border-right:1px solid #eef0f2;flex:1 0 128px}.agenda-col:last-child{border-right:0}.agenda-cab{z-index:4;background:#f9fafb;border-bottom:1px solid #e5e7eb;flex-direction:column;justify-content:center;align-items:center;height:44px;display:flex;position:sticky;top:0}.agenda-cuerpo{position:relative}.agenda-linea{border-top:1px solid #f1f2f4;position:absolute;left:0;right:0}.slot{cursor:pointer;border-radius:6px;flex-direction:column;gap:1px;padding:3px 5px;font-size:11px;transition:background-color .25s,box-shadow .2s;display:flex;position:absolute;left:3px;right:3px;overflow:hidden}.slot-hora{font-variant-numeric:tabular-nums;opacity:.75;font-size:10px}.slot-txt{white-space:nowrap;text-overflow:ellipsis;font-weight:600;overflow:hidden}.slot.estado-libre{color:#1a7f37;background:#eef6f0;border:1px solid #d6e9dd}.slot.estado-reservada{color:#fff;background:#1a7f37}.slot.estado-reservada[draggable=true]{cursor:grab}.slot.estado-bloqueada{color:#b91c1c;background:#fee2e2;border:1px solid #fca5a5}.slot.estado-pasada{color:#9ca3af;background:#f3f4f6}.slot.origen{opacity:.4}.slot.destino{outline-offset:-2px;outline:2px dashed #93c5fd}.slot.sobre{color:#1e3a8a;background:#dbeafe;outline:2px solid #3b82f6}.slot.flash{animation:2.5s ease-out flash}.festivo-aviso{color:#b91c1c;background:#fef2f2;border:1px solid #fecaca;border-radius:8px;margin-bottom:16px;padding:10px 14px;font-size:13px;font-weight:600}@keyframes flash{0%{box-shadow:inset 0 0 0 3px #f59e0b}to{box-shadow:inset 0 0 0 3px #0000}}footer{color:#9ca3af;margin-top:20px;font-size:12px}footer code{background:#f3f4f6;border-radius:4px;padding:1px 5px}.login{justify-content:center;align-items:center;min-height:100vh;display:flex}.login form{flex-direction:column;gap:10px;width:300px;display:flex}.login h1{margin:0 0 8px;font-size:20px}.login input{border:1px solid #d1d5db;border-radius:8px;padding:10px 12px;font-size:14px}.login button,.salir{color:#fff;cursor:pointer;background:#1a7f37;border:0;border-radius:8px;padding:10px 12px;font-weight:600}.login .error{color:#b91c1c;margin:0;font-size:13px}.login .hint{color:#9ca3af;text-align:center;margin:4px 0 0;font-size:12px}.acciones{align-items:center;gap:10px;display:flex}.salir{color:#374151;background:#e5e7eb;padding:6px 12px;font-size:13px}.toast{color:#fff;z-index:10;background:#b91c1c;border-radius:8px;padding:10px 16px;font-size:13px;position:fixed;top:16px;left:50%;transform:translate(-50%)}.tabs{border-bottom:1px solid #e5e7eb;gap:8px;margin-bottom:20px;display:flex}.tabs button{color:#6b7280;cursor:pointer;background:0 0;border:0;border-bottom:2px solid #0000;margin-right:12px;padding:8px 4px;font-size:14px}.tabs button.on{color:#111827;border-bottom-color:#1a7f37;font-weight:600}.tabs .salir{color:#6b7280;margin-left:auto}.horarios-scroll{overflow-x:auto}.horarios{border-collapse:collapse;font-size:13px}.horarios th,.horarios td{border:1px solid #e5e7eb}.horarios thead th{background:#f9fafb;padding:8px 12px}.hpista{white-space:nowrap;background:#f9fafb;padding:8px 10px;font-weight:700}.hcelda{text-align:center;cursor:pointer;min-width:96px;padding:8px 10px}.hcelda.abierta:hover{background:#f0fdf4}.hcelda .hcount{font-weight:600}.hcelda .dur{color:#6b7280;font-variant-numeric:tabular-nums;font-size:11px}.hcelda .cerrado{color:#9ca3af}.hcelda.cerrada{background:#fafafa}.editor-dia{width:380px}.slots-editor{flex-direction:column;gap:6px;max-height:44vh;display:flex;overflow-y:auto}.slot-fila{align-items:center;gap:8px;font-size:13px;display:flex}.slot-fila input{border:1px solid #d1d5db;border-radius:6px;padding:5px 7px}.slot-fila .a{color:#9ca3af}.slot-fila .quitar{color:#6b7280;cursor:pointer;background:#f3f4f6;border:0;border-radius:6px;width:24px;height:24px;margin-left:auto}.editor-acciones{gap:8px;display:flex}.editor-acciones button{flex:1;padding:6px 10px;font-size:12px}.errores{color:#b91c1c;background:#fef2f2;border-radius:8px;margin:0;padding:8px 10px 8px 24px;font-size:12px}.modal-fondo{background:#0000004d;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.modal{background:#fff;border-radius:12px;flex-direction:column;gap:12px;width:340px;padding:20px 24px;display:flex}.modal h2{margin:0;font-size:16px}.modal .fila{justify-content:space-between;align-items:center;gap:12px;font-size:13px;display:flex}.modal input[type=time],.modal select{border:1px solid #d1d5db;border-radius:6px;padding:6px 8px}.modal .botones{justify-content:flex-end;gap:8px;margin-top:4px;display:flex}.modal button{color:#fff;cursor:pointer;background:#1a7f37;border:0;border-radius:8px;padding:8px 14px;font-weight:600}.modal button.sec{color:#374151;background:#e5e7eb}.form-festivo,.form-bloqueo{background:#f9fafb;border:1px solid #e5e7eb;border-radius:10px;flex-wrap:wrap;align-items:flex-end;gap:12px;margin-bottom:12px;padding:16px;display:flex}.form-festivo label{color:#6b7280;flex-direction:column;gap:4px;font-size:12px;display:flex}.form-festivo label.motivo{flex:1;min-width:200px}.form-festivo input{border:1px solid #d1d5db;border-radius:6px;padding:7px 9px;font-size:13px}.form-festivo button{color:#fff;cursor:pointer;background:#1a7f37;border:0;border-radius:8px;padding:8px 16px;font-weight:600}.link-mas{color:#1a7f37;cursor:pointer;background:0 0;border:0;margin-bottom:12px;padding:4px 0;font-size:13px}.badge-festivo{color:#b91c1c;background:#fee2e2;border-radius:999px;padding:2px 8px;font-size:11px;font-weight:600}.form-bloqueo label{color:#6b7280;flex-direction:column;gap:4px;font-size:12px;display:flex}.form-bloqueo label.motivo{flex:1;min-width:180px}.form-bloqueo input,.form-bloqueo select{border:1px solid #d1d5db;border-radius:6px;padding:7px 9px;font-size:13px}.form-bloqueo button{color:#fff;cursor:pointer;background:#1a7f37;border:0;border-radius:8px;padding:8px 16px;font-weight:600}.lista-bloqueos{border-collapse:collapse;width:100%;font-size:13px}.lista-bloqueos th,.lista-bloqueos td{text-align:left;border:1px solid #e5e7eb;padding:8px 10px}.lista-bloqueos thead th{background:#f9fafb}.lista-bloqueos .vacio{color:#9ca3af;text-align:center}.lista-bloqueos button.sec{color:#374151;cursor:pointer;background:#e5e7eb;border:0;border-radius:6px;padding:4px 10px;font-size:12px}.btn-primario{color:#fff;cursor:pointer;background:#1a7f37;border:0;border-radius:8px;padding:8px 16px;font-size:13px;font-weight:600}.btn-primario:disabled{opacity:.5;cursor:default}.pistas-lista{flex-direction:column;gap:8px;margin:0;padding:0;list-style:none;display:flex}.pistas-lista li{background:#fff;border:1px solid #e5e7eb;border-radius:10px;align-items:center;gap:10px;padding:10px 14px;display:flex}.pistas-lista li.inactiva{color:#6b7280;background:#fafafa}.pista-nombre-input{background:0 0;border:1px solid #0000;border-radius:6px;flex:1;padding:6px 8px;font-size:14px;font-weight:600}.pista-nombre-input:focus{background:#fff;border-color:#d1d5db;outline:none}.pistas-lista select{border:1px solid #d1d5db;border-radius:6px;padding:6px 8px;font-size:13px}.pistas-lista .tipo-txt{color:#6b7280;font-size:13px}.pistas-lista button.sec{color:#374151;cursor:pointer;background:#e5e7eb;border:0;border-radius:6px;padding:5px 12px;font-size:12px}.pistas-lista button.sec:disabled{opacity:.45;cursor:default}.pistas-inactivas{margin-top:20px}.pistas-inactivas summary{cursor:pointer;color:#6b7280;margin-bottom:10px;font-size:13px}
