*{margin:0;padding:0;box-sizing:border-box}body{font-family:Inter,system-ui,-apple-system,sans-serif;background:#f5f6f8;color:#1a1a2e;line-height:1.5;-webkit-font-smoothing:antialiased}.layout{display:grid;grid-template-columns:320px 1fr;grid-template-rows:auto 1fr;height:100vh}header{grid-column:1 / -1;padding:16px 24px;background:#fff;border-bottom:1px solid #e2e4e9;display:flex;align-items:center;gap:16px}header h1{font-size:20px;font-weight:600;color:#1a1a2e}header .header-route-builder{font-size:13px;font-weight:500;color:#2563eb;text-decoration:none;padding:6px 12px;border-radius:6px;border:1px solid #bfdbfe;background:#eff6ff;transition:background .15s,border-color .15s}header .header-route-builder:hover{background:#dbeafe;border-color:#2563eb;color:#1d4ed8}header .stats{display:flex;gap:20px;margin-left:auto;font-size:13px;color:#6b7280}header .stats .n{color:#2563eb;font-weight:600;font-size:15px}.sidebar{background:#fff;border-right:1px solid #e2e4e9;overflow-y:auto;padding:16px;display:flex;flex-direction:column;gap:16px}.sidebar h2{font-size:13px;text-transform:uppercase;letter-spacing:.8px;color:#6b7280;margin-bottom:4px}.track-list{display:flex;flex-direction:column;gap:2px}.track-item{display:flex;align-items:center;gap:8px;padding:7px 10px;border-radius:6px;cursor:pointer;font-size:13px;transition:background .15s;-webkit-user-select:none;user-select:none}.track-item:hover{background:#f0f1f3}.track-item.active{background:#e8f0fe}.track-chevron{width:16px;height:16px;flex-shrink:0;transition:transform .2s ease;color:#9ca3af}.track-item.expanded .track-chevron{transform:rotate(90deg);color:#6b7280}.track-item.flat{padding-left:34px}.track-bar{width:14px;height:14px;border-radius:3px;flex-shrink:0}.track-name{flex:1;min-width:0}.track-info{color:#6b7280;font-size:11px;font-variant-numeric:tabular-nums;white-space:nowrap}.track-eye{width:20px;height:20px;flex-shrink:0;cursor:pointer;color:#9ca3af;border-radius:4px;padding:2px;transition:color .15s}.track-eye:hover,.track-eye.visible{color:#2563eb}.segment-list{display:flex;flex-direction:column;gap:1px;overflow:hidden;max-height:0;opacity:0;transition:max-height .3s ease,opacity .2s ease,margin .2s ease;margin:0}.segment-list.open{max-height:1000px;opacity:1;margin:4px 0}.segment-item{display:flex;align-items:center;gap:8px;padding:5px 10px 5px 40px;border-radius:4px;cursor:pointer;font-size:12px;color:#6b7280;transition:background .15s}.segment-item:hover{background:#f0f1f3;color:#1a1a2e}.segment-item .seg-name{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1;min-width:0}.segment-item .seg-meta{margin-left:auto;flex-shrink:0;font-size:11px}.difficulty{display:inline-block;width:8px;height:8px;border-radius:50%;flex-shrink:0}.difficulty-easy{background:#16a34a}.difficulty-medium{background:#ca8a04}.difficulty-hard{background:#dc2626}.site-group{margin-bottom:4px}.site-group-header{display:flex;align-items:center;gap:6px;padding:6px 10px;border-radius:6px;cursor:pointer;background:#f5f6f8;-webkit-user-select:none;user-select:none}.site-group-header:hover{background:#ebedf0}.site-chevron{width:14px;height:14px;flex-shrink:0;transition:transform .2s ease;color:#9ca3af}.site-group-header.open .site-chevron{transform:rotate(90deg);color:#6b7280}.site-label{font-size:12px;font-weight:600;color:#4b5563;flex:1}.site-btns{display:flex;gap:4px}.site-btns button{background:transparent;border:1px solid #d1d5db;color:#9ca3af;padding:1px 7px;border-radius:3px;font-size:10px;cursor:pointer}.site-btns button:hover{color:#1a1a2e;border-color:#2563eb}.cat-list{display:flex;flex-direction:column;gap:2px}.cat-item{display:flex;align-items:center;gap:8px;padding:7px 10px;border-radius:6px;cursor:pointer;font-size:13px;transition:background .15s;-webkit-user-select:none;user-select:none}.cat-item:hover{background:#f0f1f3}.cat-item.active{background:#e8f0fe}.cat-chevron{width:16px;height:16px;flex-shrink:0;transition:transform .2s ease;color:#9ca3af}.cat-item.expanded .cat-chevron{transform:rotate(90deg);color:#6b7280}.cat-dot{width:10px;height:10px;border-radius:50%;flex-shrink:0}.cat-name{flex:1;min-width:0}.cat-count{color:#6b7280;font-size:11px;font-variant-numeric:tabular-nums;white-space:nowrap}.cat-eye{width:20px;height:20px;flex-shrink:0;cursor:pointer;color:#9ca3af;border-radius:4px;padding:2px;transition:color .15s}.cat-eye:hover,.cat-eye.visible{color:#2563eb}.cat-place-list{display:flex;flex-direction:column;gap:1px;overflow:hidden;max-height:0;opacity:0;transition:max-height .3s ease,opacity .2s ease,margin .2s ease;margin:0}.cat-place-list.open{max-height:2000px;opacity:1;margin:4px 0}.cat-place-item{display:flex;align-items:center;gap:8px;padding:4px 10px 4px 40px;border-radius:4px;cursor:pointer;font-size:12px;color:#6b7280;transition:background .15s;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cat-place-item:hover{background:#f0f1f3;color:#1a1a2e}.cat-place-item .cp-name{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1;min-width:0}.select-btns{display:flex;gap:8px;margin-bottom:4px}.select-btns button{background:#f0f1f3;border:1px solid #d1d5db;color:#6b7280;padding:3px 10px;border-radius:4px;font-size:11px;cursor:pointer}.select-btns button:hover{color:#1a1a2e;border-color:#2563eb}.proximity-setting{display:flex;flex-direction:column;gap:6px;padding:10px 12px;background:#f5f6f8;border-radius:8px;border:1px solid #e2e4e9}.proximity-toggle{display:flex;align-items:center;gap:8px;cursor:pointer;font-size:13px;-webkit-user-select:none;user-select:none}.proximity-toggle input[type=checkbox]{display:none}.toggle-switch{position:relative;width:34px;height:20px;background:#d1d5db;border-radius:10px;transition:background .2s;flex-shrink:0}.toggle-switch:after{content:"";position:absolute;top:2px;left:2px;width:16px;height:16px;background:#fff;border-radius:50%;transition:transform .2s}.proximity-toggle input:checked+.toggle-switch{background:#2563eb}.proximity-toggle input:checked+.toggle-switch:after{transform:translate(14px)}.proximity-slider{display:flex;align-items:center;gap:8px}.proximity-slider input[type=range]{flex:1;accent-color:#2563eb;height:4px}.proximity-slider .dist-label{font-size:12px;color:#6b7280;min-width:40px;text-align:right;font-variant-numeric:tabular-nums}.proximity-slider.disabled{opacity:.4;pointer-events:none}.search-box{background:#f5f6f8;border:1px solid #d1d5db;border-radius:6px;padding:8px 12px;color:#1a1a2e;font-size:13px;width:100%;outline:none}.search-box:focus{border-color:#2563eb}.search-box::placeholder{color:#9ca3af}.place-list{display:flex;flex-direction:column;gap:2px;overflow-y:auto;flex:1;min-height:0}.place-list-item{padding:8px 10px;border-radius:6px;cursor:pointer;font-size:13px;display:flex;align-items:center;gap:8px;transition:background .15s}.place-list-item:hover{background:#f0f1f3}.place-list-item .name{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.visible-count{font-size:11px;color:#9ca3af;padding:4px 0}.divider{border:none;border-top:1px solid #e2e4e9;margin:4px 0}#map{width:100%;height:100%}.leaflet-popup-content-wrapper{background:#fff;color:#1a1a2e;border-radius:12px;box-shadow:0 10px 40px #0000001f;border:1px solid #e2e4e9;padding:0;overflow:hidden}.leaflet-popup-content{margin:0!important;width:100%!important}.leaflet-popup-tip{background:#fff}.leaflet-container a.leaflet-popup-close-button{color:#6b7280;top:10px;right:10px;background:#fffc;border-radius:50%;width:24px;height:24px;line-height:24px;text-align:center;font-size:16px;padding:0;border:none;transition:background .2s}.leaflet-container a.leaflet-popup-close-button:hover{background:#f0f1f3;color:#1a1a2e}.detail-panel{position:fixed;top:var(--header-h, 57px);right:0;width:50vw;height:calc(100vh - var(--header-h, 57px));z-index:2000;background:#fff;box-shadow:-8px 0 30px #0000001f;border-left:1px solid #e2e4e9;transform:translate(100%);transition:transform .35s cubic-bezier(.16,1,.3,1);display:flex;flex-direction:column;overflow:hidden}.detail-panel.open{transform:translate(0)}.modal-close{position:absolute;top:16px;left:16px;background:#ffffffd9;border:none;color:#6b7280;width:32px;height:32px;border-radius:50%;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:20px;z-index:10;transition:background .2s;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.modal-close:hover{background:#f0f1f3;color:#1a1a2e}.modal-image{width:100%;height:280px;background-size:cover;background-position:center;background-color:#e5e7eb;flex-shrink:0}.modal-content{padding:28px;overflow-y:auto;flex:1}.modal-content h2{margin:0 0 10px;font-size:1.6rem;color:#1a1a2e;font-weight:700}.modal-tags{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:14px}.modal-tag{font-size:11px;padding:3px 10px;border-radius:12px;background:#f0f1f3;color:#4b5563;border:1px solid #e2e4e9}.modal-body{font-size:.95rem;line-height:1.7;color:#4b5563}.modal-body p{margin-bottom:8px}.modal-body a{color:#2563eb}.modal-meta{margin-top:16px;padding-top:12px;border-top:1px solid #e2e4e9;font-size:.8rem;color:#9ca3af;display:flex;flex-wrap:wrap;gap:12px}.modal-meta a{color:#6b7280;text-decoration:none;transition:color .2s}.modal-meta a:hover{color:#2563eb}::-webkit-scrollbar{width:8px}::-webkit-scrollbar-track{background:#f5f6f8}::-webkit-scrollbar-thumb{background:#d1d5db;border-radius:4px}::-webkit-scrollbar-thumb:hover{background:#9ca3af}.route-builder-layout{display:grid;grid-template-columns:minmax(260px,300px) 1fr;grid-template-rows:auto 1fr;height:100vh}.route-builder-header{grid-column:1 / -1;padding:14px 20px;background:#fff;border-bottom:1px solid #e2e4e9;display:flex;flex-direction:column;gap:6px}.route-builder-header-main{display:flex;align-items:center;gap:14px}.route-builder-back{background:none;border:none;padding:4px 8px;margin:-4px 0 -4px -8px;font-size:14px;font-family:inherit;color:#2563eb;cursor:pointer;border-radius:6px}.route-builder-back:hover{background:#eff6ff;color:#1d4ed8}.route-builder-header h1{font-size:18px;font-weight:600;color:#1a1a2e;margin:0}.route-builder-tagline{font-size:13px;color:#6b7280;margin:0}.route-builder-sidebar{background:#fff;border-right:1px solid #e2e4e9;padding:16px;display:flex;flex-direction:column;gap:12px;overflow-y:auto;min-height:0}.route-builder-label{display:flex;flex-direction:column;gap:6px;font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:#6b7280}.route-builder-input{font-size:14px;padding:8px 10px;border:1px solid #d1d5db;border-radius:6px;color:#1a1a2e;font-family:inherit}.route-builder-input:focus{outline:none;border-color:#2563eb}.route-builder-meta{display:flex;flex-wrap:wrap;gap:12px;font-size:13px;color:#6b7280}.route-builder-meta strong{color:#2563eb;font-weight:600}.route-builder-points{list-style:none;display:flex;flex-direction:column;gap:4px;flex:1;min-height:80px;max-height:40vh;overflow-y:auto}.route-builder-points li{display:flex;align-items:center;gap:8px;font-size:12px;padding:6px 8px;background:#f5f6f8;border-radius:6px;border:1px solid #e2e4e9}.route-builder-pt-idx{font-weight:600;color:#2563eb;min-width:1.25rem;font-variant-numeric:tabular-nums}.route-builder-pt-coords{flex:1;color:#4b5563;font-variant-numeric:tabular-nums}.route-builder-remove{background:none;border:none;color:#9ca3af;cursor:pointer;font-size:18px;line-height:1;padding:0 4px;border-radius:4px}.route-builder-remove:hover{color:#dc2626;background:#fef2f2}.route-builder-hint{font-size:13px;color:#9ca3af;line-height:1.5}.route-builder-actions{display:flex;flex-direction:column;gap:8px;padding-top:4px}.route-builder-btn{font-family:inherit;font-size:13px;padding:8px 12px;border-radius:6px;cursor:pointer;border:1px solid #d1d5db;background:#f0f1f3;color:#374151;transition:background .15s,border-color .15s,opacity .15s}.route-builder-btn:hover:not(:disabled){background:#e5e7eb;border-color:#9ca3af}.route-builder-btn:disabled{opacity:.45;cursor:not-allowed}.route-builder-btn.primary{background:#2563eb;border-color:#2563eb;color:#fff;font-weight:600}.route-builder-btn.primary:hover:not(:disabled){background:#1d4ed8;border-color:#1d4ed8}.route-builder-btn.secondary{text-align:center}.route-builder-map-wrap{min-height:0;position:relative}.route-builder-map-wrap .leaflet-container{height:100%}
