/* Compact route controls; root owns scene placement and approved vehicle motion. */
.frp-host{width:min(100%,370px);color:#18363e;container-type:inline-size;font-family:inherit}
.frp-host *{box-sizing:border-box}.frp-host [hidden]{display:none!important}.frp-host button{font:inherit;touch-action:manipulation;cursor:pointer}.frp-host button:disabled{cursor:default;opacity:.48}.frp-host button:focus-visible{outline:3px solid #2765a2;outline-offset:3px}
.frp-panel{padding:16px;border:1px solid #cbd7cf;border-radius:12px;background:#fafbf7f7;box-shadow:0 8px 28px #223b3b1a;backdrop-filter:blur(12px)}
.frp-header{display:flex;align-items:flex-start;justify-content:space-between;gap:10px}.frp-header h2{font-size:19px;font-weight:600;letter-spacing:-.04em;line-height:1.2;margin:3px 0 5px}.frp-header p{font-size:11px;color:#607269;line-height:1.4;margin:0}.frp-close{width:44px;height:44px;flex:0 0 44px;display:grid;place-items:center;border:0;border-radius:50%;background:#e9eee6;color:#39584f;font-size:25px!important;line-height:1}.frp-close:hover{background:#dce5da}
.frp-layout{display:grid;grid-template-columns:minmax(0,1fr);gap:10px;align-items:center;margin-top:14px}.frp-map-wrap{min-width:0}.frp-map{display:block;width:100%;height:auto;overflow:visible}.frp-ground{fill:#e4e9df;stroke:#ced7cc;stroke-width:2}.frp-street{fill:none;stroke:#b3beb7;stroke-width:34;stroke-linejoin:round}.frp-lane{fill:none;stroke:#ebeee4;stroke-width:1.5;stroke-dasharray:9 10;stroke-linejoin:round}.frp-building{fill:#c3cfc3;stroke:#94a999;stroke-width:1.5}.frp-building.frp-hall{fill:#b9856c;stroke:#92644f}.frp-courtyard{fill:none;stroke:#d0d7c8;stroke-width:7;stroke-linecap:round}.frp-apron{fill:none;stroke:#d3ceba;stroke-width:23;stroke-linecap:butt}.frp-origin{fill:#7d4e3d;stroke:#fffaf0;stroke-width:3}.frp-route{fill:none;stroke:#345f8a;stroke-width:5;stroke-linejoin:round;stroke-linecap:round}.frp-route[data-state=asset-unavailable],.frp-route[data-state=selected]{stroke-dasharray:8 7}.frp-progress-marker{fill:#fff;stroke:#173f66;stroke-width:4}.frp-pin{cursor:pointer;outline:none}.frp-pin-hit{fill:transparent;stroke:none}.frp-pin-halo{fill:#fafbf6;stroke:#698690;stroke-width:3;pointer-events:none}.frp-pin text{font:600 20px Arial,Helvetica,sans-serif;fill:#315261;pointer-events:none}.frp-pin[aria-pressed=true] .frp-pin-halo{fill:#214c68;stroke:#fffefa;stroke-width:4}.frp-pin[aria-pressed=true] text{fill:#fff}.frp-pin:focus-visible .frp-pin-halo{stroke:#1768b1;stroke-width:7}.frp-map-key{display:flex;align-items:center;justify-content:center;gap:6px;color:#627267;font-size:10px;line-height:1.4;margin-top:5px}.frp-map-key i{display:inline-block;width:8px;height:8px;border-radius:2px;background:#b9856c;border:1px solid #92644f}
.frp-choices{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px;min-width:0}.frp-choice{display:flex;align-items:center;gap:6px;min-height:44px;width:100%;padding:8px;border:1px solid #ccd7cd;border-radius:6px;background:#f5f7ef;color:#365a62;text-align:left}.frp-choice:hover{background:#e7eee7;border-color:#789588}.frp-choice>span{display:grid;place-items:center;width:20px;height:20px;flex:0 0 20px;border:1px solid #b0c3b8;border-radius:50%;font-size:10px}.frp-choice strong{font-size:11px;font-weight:500;line-height:1.35;overflow-wrap:anywhere}.frp-choice[aria-pressed=true]{background:#e3edf0;border-color:#4d7584;box-shadow:inset 3px 0 #305b72}.frp-choice[aria-pressed=true]>span{border-color:#6e8e99;background:#305b72;color:#fff}.frp-empty{grid-column:1/-1;font-size:12px;color:#66796e;margin:0}
.frp-status-row{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:15px}.frp-status{font-size:12px;font-weight:600;line-height:1.4;margin:0}.frp-progress-label{font-size:11px;color:#55766b;font-variant-numeric:tabular-nums}.frp-source-note{font-size:11px;line-height:1.5;margin:5px 0 0;color:#6b7568}.frp-progress{display:block;width:100%;height:4px;border:0;border-radius:2px;overflow:hidden;accent-color:#456d7e;margin-top:9px;background:#e0e7de}.frp-progress::-webkit-progress-bar{background:#e0e7de}.frp-progress::-webkit-progress-value{background:#456d7e}.frp-progress::-moz-progress-bar{background:#456d7e}
.frp-motion{display:flex;align-items:center;gap:8px;min-height:44px;margin-top:5px;font-size:12px;color:#506b61;cursor:pointer}.frp-motion input{width:17px;height:17px;flex:0 0 17px;margin:0;accent-color:#305b72}.frp-motion input:focus-visible{outline:3px solid #2765a2;outline-offset:3px}.frp-motion small{margin-left:auto;font-size:10px;color:#6b7c71}
.frp-actions{display:grid;grid-template-columns:minmax(0,1fr) 60px;gap:8px;margin-top:14px}.frp-primary{grid-column:1;grid-row:1;min-height:44px;padding:11px 14px;border:1px solid #295363;border-radius:6px;background:#295363;color:#fff;font-size:12px!important;font-weight:600!important}.frp-primary:hover:not(:disabled){background:#173f50}.frp-reset{grid-column:2;grid-row:1;min-height:44px;padding:8px;border:1px solid #c6d2c6;border-radius:6px;background:#f2f5ed;color:#476258;font-size:11px!important}.frp-reset:hover:not(:disabled){background:#e7eee3}.frp-contact{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:44px;width:100%;border:0;background:transparent;color:#385e6b;font-size:12px!important;text-align:left;padding:10px 1px 0;margin-top:2px}.frp-contact span{font-size:16px}
@container(max-width:320px){.frp-panel{padding:13px}.frp-layout{gap:8px;grid-template-columns:minmax(0,1fr)}.frp-header h2{font-size:18px}.frp-header p{font-size:10px}.frp-choice{padding:8px 6px;gap:5px}.frp-choice strong{font-size:11px}.frp-choice>span{width:18px;height:18px;flex-basis:18px}.frp-status{font-size:12px}}
@media(prefers-reduced-motion:reduce){.frp-host *{scroll-behavior:auto!important;transition:none!important;animation:none!important}}
/* Alarm candidate r1: one Alarm button, arrival result, siren mute. Beacon alternation lives in the scene (2 Hz). */
.frp-alarm{display:flex;align-items:center;justify-content:center;gap:10px;width:100%;min-height:56px;margin-top:14px;padding:12px 16px;border:1px solid #8f2f22;border-radius:8px;background:#b5452f;color:#fff;font-size:17px!important;font-weight:650!important;letter-spacing:.01em}.frp-alarm:hover:not(:disabled){background:#963624}.frp-alarm-icon{display:grid;place-items:center;width:24px;height:24px}.frp-alarm-icon svg{width:22px;height:22px}
.frp-hint{font-size:12px;line-height:1.45;color:#4f6159;margin:8px 0 0}
.frp-secondary{grid-column:1;grid-row:1;min-height:44px;padding:10px 12px;border:1px solid #295363;border-radius:6px;background:#fff;color:#295363;font-size:12px!important;font-weight:600!important}.frp-secondary:hover:not(:disabled){background:#eef3f2}
.frp-result{margin-top:12px;padding:12px;border:1px solid #c9d8cf;border-left:4px solid #2b6c73;border-radius:8px;background:#eef4ef}.frp-result p{font-size:12px;line-height:1.45;margin:0;color:#24413f}
.frp-visit{display:flex;align-items:center;justify-content:space-between;gap:10px;width:100%;min-height:44px;margin-top:9px;padding:10px 14px;border:0;border-radius:6px;background:#295363;color:#fff;font-size:13px!important;font-weight:600!important;text-align:left}.frp-visit:hover{background:#173f50}
.frp-options{display:flex;flex-wrap:wrap;align-items:center;gap:4px 14px;margin-top:8px}.frp-options .frp-motion{margin-top:0}
.frp-mute{display:inline-flex;align-items:center;gap:7px;min-height:44px;padding:6px 10px;border:1px solid #c6d2c6;border-radius:6px;background:#f6f8f2;color:#3d5a52;font-size:12px!important}.frp-mute svg{width:18px;height:18px}.frp-mute .frp-slash{display:none}.frp-mute[data-muted=true] .frp-slash{display:inline}.frp-mute[data-muted=true] .frp-wave{display:none}.frp-mute[aria-pressed=true]{background:#e6ece6;border-color:#7d958a}
.frp-note{font-size:10.5px;line-height:1.45;color:#66766d;margin:6px 0 0}
.frp-alarm[data-quiet=true]{min-height:44px;margin-top:12px;padding:8px 14px;background:#fff;color:#a63d29;border-color:#d8a89b;font-size:14px!important}.frp-alarm[data-quiet=true]:hover:not(:disabled){background:#fbefeb}.frp-alarm[data-quiet=true] .frp-alarm-icon svg{width:18px;height:18px}
.frp-live{display:flex;flex-wrap:wrap;align-items:center;gap:4px 12px;margin:9px 0 0;font-size:12px}.frp-live>span:first-child{color:#5b6d65}.frp-live a{display:inline-flex;align-items:center;gap:3px;min-height:44px;padding:0 2px;color:#1f5b66;font-weight:600;text-decoration:underline;text-underline-offset:3px}.frp-live a:focus-visible{outline:3px solid #2765a2;outline-offset:2px}
.frp-sr{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}

.frp-credit{margin:6px 0 0;font-size:11px;color:#5d6a66}.frp-credit a{color:inherit}
