:root{--bg:#1d1f3a;--surface:#1f2028;--border:#2e303a;--text:#f3f4f6;--text-muted:#9ca3af;--accent:#6f9cf5;--accent-contrast:#0d1a33;--line-red:#d62828;--line-green:#1f9d55;--line-blue:#1c5dd6;--line-contrast:#fff;--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--touch-target:44px;--radius:8px;--header-height:52px;--map-margin:200px;--font-small:14px;--sans:system-ui, "Segoe UI", Roboto, sans-serif;font:16px/1.4 var(--sans);color:var(--text);background:var(--bg);--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}*,:before,:after{box-sizing:border-box}html,body,#root{overscroll-behavior:none;height:100%;margin:0;overflow:hidden}body{height:100dvh}.app{flex-direction:column;height:100%;display:flex}.app-header{flex:0 0 var(--header-height);justify-content:space-between;align-items:center;gap:var(--space-3);padding:0 var(--space-4);border-bottom:1px solid var(--border);background:var(--surface);display:flex}.app-title{white-space:nowrap;margin:0;font-size:18px;font-weight:600}.map-viewport{background:var(--bg);touch-action:none;flex:auto;min-height:0;position:relative;overflow:hidden}.map-wrapper{width:100%!important;height:100%!important}.map-content{justify-content:center;align-items:center;display:flex;width:calc(100% + 2 * var(--map-margin))!important;height:calc(100% + 2 * var(--map-margin))!important;padding:var(--map-margin)!important}.map-stack{width:100%;height:100%;position:relative}.map-image{object-fit:contain;-webkit-user-select:none;user-select:none;-webkit-user-drag:none;pointer-events:none;opacity:0;width:100%;height:100%;transition:opacity var(--fade-time) var(--fade-easing);position:absolute;inset:0}.map-image.active{opacity:1}.map-controls{right:var(--space-4);bottom:var(--space-4);gap:var(--space-2);flex-direction:column;display:flex;position:absolute}.map-button{width:var(--touch-target);height:var(--touch-target);border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);color:var(--text);font:inherit;cursor:pointer;touch-action:manipulation;font-size:20px;line-height:1}.map-button:hover{border-color:var(--accent);color:var(--accent)}.map-button:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.map-button.reset{font-size:12px;font-weight:600}@media (width<=768px){.map-button.zoom{display:none}}.line-picker{left:50%;bottom:var(--space-4);gap:var(--space-2);padding:var(--space-1);border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);display:flex;position:absolute;transform:translate(-50%)}.line-button{--line-color:var(--accent);min-width:64px;height:calc(var(--touch-target) - var(--space-2));padding:0 var(--space-3);border-radius:calc(var(--radius) - 2px);color:var(--text);font:inherit;white-space:nowrap;cursor:pointer;touch-action:manipulation;background:0 0;border:1px solid #0000;font-weight:600}@media (width<=768px){.line-picker{left:var(--space-4);right:calc(var(--space-4) + var(--touch-target) + var(--space-2));transform:none}.line-button{min-width:0;padding:0 var(--space-2);font-size:var(--font-small);flex:1 1 0}}.line-button.red{--line-color:var(--line-red)}.line-button.green{--line-color:var(--line-green)}.line-button.blue{--line-color:var(--line-blue)}.line-button:hover{border-color:var(--line-color)}.line-button:focus-visible{outline:2px solid var(--line-color);outline-offset:2px}.line-button.active{background:var(--line-color);color:var(--line-contrast)}
