:root{color-scheme:dark;font-family:system-ui,-apple-system,"Segoe UI",sans-serif;color:#eef3f5;background:#151b1f;font-size:16px}
*{box-sizing:border-box}body{margin:0}main{max-width:1400px;margin:auto;padding:18px 24px}header{display:flex;align-items:center;justify-content:space-between;gap:20px;margin-bottom:14px}h1{font-size:1.2rem;margin:0;font-weight:600}header p{margin:5px 0 0;color:#aebbc2;font-size:.875rem}label{display:grid;gap:5px;font-size:.875rem}select{font:inherit;min-height:40px;background:#263139;color:#fff;border:1px solid #4d606b;border-radius:7px;padding:7px 30px 7px 10px}#viewport{position:relative;width:100%;height:min(75vh,850px);min-height:320px;overflow:hidden;background:#1c2628;border-radius:6px}canvas{display:block;width:100%;height:100%;touch-action:pan-y}#labels{position:absolute;inset:0;pointer-events:none;z-index:1}.bunker-label{position:absolute;transform:translate(-50%,-50%);background:#11202aba;color:white;border:1px solid #ffffff38;border-radius:4px;padding:1px 3px;font:500 12px system-ui;line-height:1.25;pointer-events:auto;cursor:pointer;min-width:24px;min-height:22px;text-shadow:0 1px 2px #000}.bunker-label:disabled{pointer-events:none;cursor:default}.bunker-label[aria-pressed=true]{background:#087ea4;border:2px solid #a6edff;color:white}.bunker-label:focus-visible{outline:3px solid white;outline-offset:3px}footer{display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap;margin-top:12px}#result{margin:0;font-size:.9rem}.legend{display:flex;gap:18px;flex-wrap:wrap;font-size:.8rem;color:#bdc8cd}.legend span{display:flex;align-items:center;gap:6px}.legend i{width:12px;height:12px;border-radius:2px}.source{background:#71dcff}.bounce{background:#fff0aa}.target{background:#ffc747}#error{color:#ffb4a8}@media(max-width:650px){main{padding:12px 8px}header{align-items:stretch;flex-direction:column;gap:10px}#viewport{height:65vh;min-height:350px}.bunker-label{font-size:11px;padding:1px;min-width:19px;min-height:19px}.legend{gap:12px}footer{gap:10px}}

/* Invisible native controls retain keyboard and touch selection without labels. */
.bunker-label,.bunker-label[aria-pressed=true]{background:transparent;border:0;padding:0;width:24px;height:24px;text-shadow:none}

.flight-status{position:absolute;top:14px;left:14px;padding:8px 12px;background:#11202ade;border-radius:6px;color:#fff;pointer-events:none}.flight-return{position:absolute;top:14px;right:14px;padding:10px 14px;font:inherit;background:#263139;color:white;border:1px solid #71838d;border-radius:6px;cursor:pointer}
