:root{font-family:system-ui,-apple-system,"Microsoft JhengHei","Noto Sans TC",sans-serif;color:#17334d;background:#f2f6fa}*{box-sizing:border-box}body{margin:0}button,input,select{font:inherit}button{cursor:pointer}button:disabled{opacity:.4;cursor:not-allowed}.hidden{display:none!important}.head{height:76px;background:#172d44;color:#fff;display:flex;align-items:center;justify-content:space-between;padding:10px 24px;gap:8px}.brand{display:flex;align-items:center;gap:12px}.brand-icon{font-size:24px;display:grid;place-items:center;background:#2d4c67;border-radius:12px;width:54px;height:54px}.head h1{margin:0 0 3px;font-size:21px}.head p{margin:0;color:#d2dfeb;font-size:12px}.version{font-size:12px;white-space:nowrap;color:#dbeaf8}.app{display:grid;grid-template-columns:minmax(300px,345px) minmax(0,1fr);min-height:calc(100dvh - 120px)}.sidebar{display:flex;flex-direction:column;min-height:0;background:#fff;border-right:1px solid #d9e3ef}.query{padding:17px 16px 11px}.query label{display:block;font-size:14px;font-weight:750;margin:0 0 8px}.query select{width:100%;height:43px;border:1px solid #c5d5e6;border-radius:9px;background:#fff;color:#17334d;padding:0 10px}.tabs{display:flex;gap:7px;margin-top:17px;margin-bottom:10px}.tabs button{border:1px solid #c8d6e5;border-radius:9px;background:#fff;padding:9px 15px;color:#36536f;font-weight:700}.tabs button.active{background:#dbeeff;color:#12578e;border-color:#89b9e2}.searchbox{display:flex}.searchbox input{min-width:0;width:100%;border:1px solid #bacee1;padding:12px;border-radius:10px 0 0 10px;outline:none}.searchbox input:focus{border-color:#397fae}.searchbox button{padding:0 13px;font-size:22px;background:#edf4fa;border:1px solid #bacee1;border-left:0;border-radius:0 10px 10px 0;color:#3c5e7d}.muted{font-size:12px;color:#658097;line-height:1.6;margin:9px 0 0}.result-panel{display:flex;flex-direction:column;flex:1;min-height:0}.result-head{display:none}.results{overflow:auto;flex:1;max-height:calc(100dvh - 325px);padding:0 12px 14px}.result{display:block;text-align:left;background:#fff;border:1px solid #dce5ef;border-radius:11px;width:100%;padding:12px 13px;margin:8px 0}.result:hover,.result.active{border-color:#86b5df;background:#e9f3fd}.result-name{font-size:15px;font-weight:750}.result-sub{font-size:12px;color:#667d93;margin-top:5px;line-height:1.5}.main{min-width:0;display:flex;flex-direction:column;padding:14px 16px;gap:10px}.map-controls{display:flex;gap:7px;overflow-x:auto;white-space:nowrap;scrollbar-width:thin;flex-shrink:0}.map-controls button,.detail-actions button{background:#fff;border:1px solid #cbdaea;color:#225273;border-radius:9px;padding:9px 11px;font-size:12px;white-space:nowrap}.map-controls button.active{background:#e9f4ff;border-color:#8bbce4;color:#12598f}.mapwrap{position:relative;flex:1;min-height:380px;border:1px solid #d5e1ed;border-radius:14px;overflow:hidden;background:#ecf2f6}#map,.backup{position:absolute;inset:0}.backup{background:#eef4f9}.backup svg{display:block;width:100%;height:100%}.backup path{cursor:pointer;stroke:#fff;stroke-width:.0007;vector-effect:non-scaling-stroke}.backup text{font-size:12px;fill:#183b55;paint-order:stroke;stroke:#fff;stroke-width:3px;pointer-events:none}.map-message{position:absolute;top:14px;left:50%;transform:translateX(-50%);z-index:8;max-width:92%;border:1px solid #cbd9e8;background:#fff;border-radius:10px;padding:10px 13px;color:#3e5870;font-size:12px}.map-legend{position:absolute;z-index:5;bottom:18px;left:12px;background:#fffE;border:1px solid #dee7f0;border-radius:9px;padding:7px 9px;display:flex;gap:12px;flex-wrap:wrap;font-size:11px;color:#47617a;pointer-events:none;box-shadow:0 1px 6px #0001}.map-legend span{display:flex;gap:4px;align-items:center}.mark-road,.mark-main{width:19px;border-top:4px solid #e9552b;display:inline-block;border-radius:4px}.mark-main{border-top-color:#cc9d36}.mark-dot{width:10px;height:10px;border-radius:50%;background:#e76a31;display:inline-block}.details{background:#fff;border:1px solid #dfebf3;border-radius:12px;padding:15px 18px}.detail-top{display:flex;align-items:center;justify-content:space-between;gap:12px}.eyebrow{font-size:11px;color:#6791b5}.details h2{font-size:18px;margin:4px 0 0;color:#17354c}.status{background:#edf2f6;color:#596b7d;font-size:11px;border-radius:20px;padding:6px 9px;white-space:nowrap}.details p{font-size:13px;color:#536c84;line-height:1.65;margin:9px 0}.detail-actions{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.switch{font-size:13px;color:#39536b;display:flex;align-items:center;gap:6px}.switch input{width:17px;height:17px;accent-color:#2879b8}.hint{color:#9d6e22;font-size:12px;line-height:1.5;margin-top:8px}.map-marker{width:11px;height:11px;border:2px solid #fff;background:#e26a2f;border-radius:50%;box-shadow:0 1px 5px #0006}.station-marker{font-size:23px;filter:drop-shadow(0 1px 2px #2227)}.village-label{background:#fff9;border:1px solid #718d9d66;border-radius:4px;padding:1px 3px;font-size:11px;font-weight:700;color:#204461;white-space:nowrap;pointer-events:none}.maplibregl-ctrl-attrib{font-size:10px!important}footer{background:#e8eef4;padding:10px 16px;color:#546b80;font-size:11px;line-height:1.5}footer a{color:#256caa}.mobile-result-open{display:none}
@media(max-width:820px){.head{height:64px;padding:8px 11px}.head h1{font-size:17px}.head p{font-size:11px}.brand-icon{width:43px;height:43px;font-size:21px}.version{display:none}.app{display:flex;flex-direction:column}.sidebar{border-right:0}.query{padding:10px 12px 11px}.query label{font-size:12px;margin-bottom:5px}.query select{height:40px}.tabs{display:inline-flex;gap:5px;margin:8px 7px 0 0}.tabs button{padding:7px 10px;font-size:12px}.searchbox{margin-top:8px}.searchbox input{padding:9px 10px;font-size:14px}.query .muted{font-size:11px;margin-top:5px}.mobile-result-open{display:block;width:100%;margin-top:7px;border:1px solid #b8d3e9;border-radius:8px;background:#edf6fd;color:#245b89;padding:8px;font-weight:700;font-size:12px}.main{padding:8px 10px 10px;gap:7px}.map-controls button{padding:8px 9px;font-size:11px}.mapwrap{height:54dvh;min-height:300px;flex:none}.map-legend{font-size:10px;bottom:7px;left:7px;right:46px;gap:6px;padding:5px}.details{padding:10px 12px}.detail-top{align-items:flex-start}.details h2{font-size:16px}.status{font-size:10px}.details p{font-size:12px}.result-panel{position:fixed;z-index:50;left:0;right:0;bottom:0;background:#fff;box-shadow:0 -4px 28px #1235;max-height:55dvh;border-radius:18px 18px 0 0;padding-bottom:env(safe-area-inset-bottom,0px);transform:translateY(110%);transition:transform .2s ease;visibility:hidden}.results-open .result-panel{transform:translateY(0);visibility:visible}.result-head{display:flex;justify-content:space-between;align-items:center;padding:14px 16px 3px;color:#21435f}.result-head button{background:#edf4f9;border:0;color:#365b7d;padding:7px 11px;border-radius:8px;font-size:12px}.results{max-height:48dvh;padding:5px 12px}.result{padding:12px}.results-open::before{content:"";position:fixed;z-index:49;inset:0;background:#12293d38}.details .hint{font-size:11px}}


/* V0.4.1 mobile control panel: all five actions are visible without horizontal swiping.
   First row: return to station / show all villages.
   Second row: main roads / boundaries / backup map. */
@media (max-width:820px){
  .map-controls{
    display:grid;
    grid-template-columns:repeat(6,minmax(0,1fr));
    gap:6px;
    overflow:visible;
    white-space:normal;
    width:100%;
  }
  .map-controls button{
    min-width:0;
    min-height:39px;
    padding:7px 4px;
    font-size:12px;
    line-height:1.3;
    white-space:normal;
    overflow-wrap:anywhere;
    text-align:center;
  }
  #showStation,#showAll{grid-column:span 3}
  #toggleMajor,#showVillages,#offlineMap{grid-column:span 2}
}

/* V0.5 candidate route inspection — displayed only after an official address is selected. */
.route-workspace{background:#fff;border:1px solid #cbdbea;border-radius:13px;padding:15px 18px;box-shadow:0 1px 3px #16334d0a}
.route-head{display:flex;align-items:start;justify-content:space-between;gap:12px}
.route-head h2{margin:3px 0 5px;font-size:18px;color:#183954}
.route-caution{border-radius:99px;background:#fff0dd;color:#925917;border:1px solid #f3d3a6;padding:6px 10px;font-size:11px;white-space:nowrap}
.route-target{margin:8px 0 10px;font-weight:750;font-size:14px;color:#224765;line-height:1.6}
.route-buttons{display:flex;flex-wrap:wrap;gap:8px}
.route-buttons button{border-radius:9px;padding:10px 13px;border:1px solid #bdcfe0;font-size:13px;font-weight:700}
.route-go{background:#1b6aab;color:#fff;border-color:#1b6aab!important}
.route-reset{background:#f6fafc;color:#305979}
.route-status{font-size:12px;color:#4a6880;margin:9px 0;line-height:1.6}
.route-status.error{color:#a33f25}.route-status.loading{color:#1d6398}
.route-results{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:10px}
.route-option{background:#f8fbff;border:1px solid #d7e6f3;border-radius:11px;padding:12px}
.route-option strong{color:#153854;font-size:14px}.route-option .route-metrics{font-size:12px;color:#567188;margin:5px 0 8px}
.route-option .route-names{font-size:13px;line-height:1.7;color:#264d69;overflow-wrap:anywhere}
.route-flag{display:inline-block;font-size:10px;border-radius:30px;padding:3px 7px;margin-left:5px;border:1px solid #c9dae8;color:#506f86}
.route-disclaimer{background:#fff8ed;border-left:3px solid #dea042;padding:9px 11px;margin:12px 0 0;font-size:11px;line-height:1.7;color:#7d5a29}
.mark-route-a,.mark-route-b{width:19px;border-top:4px solid #1876bd;display:inline-block;border-radius:4px}
.mark-route-b{border-color:#e38e2b}
@media(max-width:820px){.route-workspace{padding:12px}.route-head h2{font-size:16px}.route-buttons{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.route-buttons .route-go{grid-column:1/-1}.route-buttons button{white-space:normal}.route-results{grid-template-columns:1fr}.route-head{align-items:start}.route-caution{font-size:10px}}

/* V0.6 exit calibration and route review controls */
.route-guide{padding:10px 12px;background:#eef6fc;border:1px solid #c7deef;border-radius:9px;color:#2c587a;font-size:12px;line-height:1.7;margin:10px 0}
.route-setup{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:9px;margin:10px 0 12px}
.setup-card{border:1px solid #d7e4f0;border-radius:10px;background:#f8fbff;padding:11px;min-width:0}
.setup-card strong{display:block;color:#244b68;font-size:13px}
.setup-card p{margin:6px 0;font-size:12px;color:#64798b;line-height:1.5;overflow-wrap:anywhere;min-height:34px}
.setup-buttons{display:flex;gap:6px;flex-wrap:wrap}
.setup-buttons button{border:1px solid #bcd0df;border-radius:8px;background:#fff;color:#255577;padding:7px 9px;font-size:12px}
.setup-buttons button.picking{background:#267db5;color:#fff;border-color:#267db5}
.pick-hint{color:#fff;background:#1d6a9b;border-radius:8px;padding:10px 11px;font-size:12px;line-height:1.6}
.map-picking{cursor:crosshair!important;outline:4px solid #398ebf;outline-offset:-4px}
.route-pin{min-width:24px;height:24px;padding:2px;border-radius:50%;border:2px solid #fff;color:#fff;font-weight:800;font-size:11px;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 6px #0005}
.route-snap{margin-top:7px;color:#7b546b;font-size:12px;line-height:1.5}
@media(max-width:820px){.route-setup{grid-template-columns:1fr}.setup-card p{min-height:0}.setup-buttons button{min-height:39px}.route-guide{font-size:12px}}

/* V0.6.1 simplification: no map tap controls, all route actions visible */
.route-guide{background:#eef7fc;border-color:#bad8eb;color:#244b65}
.route-buttons{margin-bottom:6px}

/* V0.7：進階路網匯入收進折疊區，主要畫面保持簡潔 */
.net-import { margin-top: 12px; border: 1px solid #dae3ed; border-radius: 10px; padding: 10px 14px; background: #f8fafc; color: #4e6177; font-size: 13px; }
.net-import summary { cursor: pointer; font-weight: 650; }
.net-import p { margin: 10px 0; line-height:1.65; }
.net-import input { display:block; max-width:100%; margin:10px 0; }
.net-import button { max-width:100%; }
@media(max-width:820px){ .route-workspace { scroll-margin-top: 18px; } .net-import { padding: 9px; } }

.osm-query-box { width: 100%; min-height: 92px; margin-top: 8px; resize: vertical; border:1px solid #ccd8e4; border-radius: 8px; padding:8px; font:11px/1.55 monospace; }
.map-legend .mark-route-c { display:inline-block; width:19px; height:4px; border-radius:3px; background:#9958b8; margin-right:3px; vertical-align:middle; }
