:root{--ink:#26332f;--muted:#78837d;--accent:#326b57;--accent-pale:#eaf2ec;--line:#e1e6e1;--paper:#f6f8f5;--danger:#aa514b;--surface:#fff;font-family:Inter,-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;color:var(--ink);background:var(--paper);font-size:13px}
*{box-sizing:border-box}body{margin:0}button,input,select,textarea{font:inherit}button{cursor:pointer}button,a,input,select{touch-action:manipulation}button{color:inherit}button:disabled{cursor:default;opacity:.45}a{color:inherit;text-decoration:none}input,select,textarea{min-width:0;width:100%;border:1px solid var(--line);border-radius:6px;background:var(--surface);color:var(--ink);padding:10px;outline:none}input::placeholder{color:var(--subtle)}input:focus,select:focus,textarea:focus{border-color:var(--accent);box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 10%,transparent)}button:focus-visible,a:focus-visible{outline:2px solid var(--accent);outline-offset:3px}button{border:0}h1,h2,p{margin:0}h1{font-size:21px;font-weight:600;letter-spacing:-.04em}h2{font-size:14px;font-weight:600}.hidden{display:none!important}.topbar{height:64px;display:flex;align-items:center;justify-content:space-between;padding:0 24px;border-bottom:1px solid var(--line);background:var(--surface)}.brand{display:flex;gap:10px;align-items:center;font-size:16px;font-weight:600;letter-spacing:-.5px}.brand-mark{color:var(--accent);font-size:23px;font-weight:750}.topbar-actions{display:flex;gap:10px;align-items:center}.save-state{color:var(--muted);font-size:11px;margin-right:12px}.button{min-height:36px;padding:8px 14px;border-radius:6px;font-size:12px;font-weight:550;white-space:nowrap}.button-primary{background:var(--accent);color:var(--surface)}.button-primary:hover:not(:disabled){background:var(--accent-hover)}.button-ghost{background:var(--surface);border:1px solid var(--line)}.button-ghost:hover:not(:disabled){background:var(--paper)}.button-dark{background:var(--ink);color:var(--surface)}.button-wide{width:100%;min-height:42px}.text-button{padding:0;background:transparent;color:var(--accent);font-size:12px;white-space:nowrap}.text-button:hover{text-decoration:underline}.muted{color:var(--muted)}.danger{color:var(--danger)}
.workspace{display:grid;grid-template-columns:316px 338px minmax(0,1fr);height:calc(100dvh - 64px);min-height:420px}.sidebar{min-height:0;display:flex;flex-direction:column;background:var(--surface-subtle);border-right:1px solid var(--line)}.sidebar-scroll{overflow-y:auto;flex:1;min-height:0;padding:25px 20px;scrollbar-width:none}.trip-head{padding:22px 20px;border-radius:12px;background:var(--strong);color:var(--surface);box-shadow:0 5px 16px #00000010}.section-kicker{font-size:11px;color:var(--muted);margin-bottom:11px}.trip-title{border:0;background:transparent;color:inherit;font-size:22px;font-weight:600;padding:0;border-radius:0;margin-bottom:16px;letter-spacing:-.5px}.trip-meta-row{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:11px;color:var(--muted)}.trip-meta-row button{font-size:11px}.trip-stats{display:flex;gap:22px;margin-top:23px}.stat strong{display:block;font-size:19px;font-weight:550;font-variant-numeric:tabular-nums}.stat small{font-size:11px;font-weight:400;color:var(--muted)}.stat span{display:block;font-size:10px;margin-top:5px;color:var(--muted)}.timeline-section{padding-top:24px}.section-heading{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}.section-heading button{font-size:11px}.timeline-empty{padding:24px 0;line-height:1.8;font-size:12px;color:var(--muted)}.timeline-empty strong{display:block;color:var(--ink);font-weight:500;margin-bottom:6px}.sidebar-footer{padding:15px 20px;border-top:1px solid var(--line);display:flex;justify-content:space-between;gap:12px}.sidebar-footer span{font-size:10px;color:var(--muted)}
.editor-column{background:var(--surface);border-right:1px solid var(--line);min-height:0;overflow-y:auto;scrollbar-width:none}.editor{padding:25px 22px 20px}.editor-heading{display:flex;justify-content:space-between;align-items:center}.editor-index{font-size:22px;color:var(--subtle);font-weight:300;font-variant-numeric:tabular-nums}.mode-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:6px;margin-top:24px}.mode-button{padding:9px 5px;background:var(--surface-subtle);border:1px solid transparent;border-radius:5px;font-size:12px}.mode-button.active{background:var(--accent-pale);border-color:var(--accent-border);color:var(--accent);font-weight:600}.mode-button:hover{border-color:var(--accent-border)}.append-option{display:flex;align-items:center;gap:9px;padding:13px 0;border-bottom:1px solid var(--line)}.append-option input{width:15px;height:15px;accent-color:var(--accent)}.append-option span{font-size:12px}.append-option small{display:block;color:var(--muted);font-size:10px;margin-top:3px}.editor-subtitle{font-size:11px;color:var(--muted);line-height:1.65;margin:17px 0 12px}.draft-route{display:grid;gap:0;border:1px solid var(--line);border-radius:7px;overflow:hidden}.draft-point{display:flex;gap:10px;padding:11px;align-items:center}.draft-point+.draft-point{border-top:1px solid var(--line)}.draft-point.selected{background:var(--accent-pale)}.point-slot{flex:none;border:1px solid var(--line);border-radius:50%;width:25px;height:25px;background:var(--surface);color:var(--accent);font-size:11px}.selected .point-slot{background:var(--accent);color:var(--surface);border-color:var(--accent)}.draft-point label{display:block;min-width:0;flex:1}.draft-point label span{font-size:10px;color:var(--muted)}.draft-point input{padding:3px 0 0;border:0;border-radius:0;background:transparent;font-size:12px;box-shadow:none;height:23px}.draft-point input:disabled{color:var(--muted);opacity:1}.slot-status{min-height:18px;color:var(--accent);font-size:10px;margin-top:7px}.place-search{margin-top:17px}.field-label{display:block;font-size:12px;font-weight:500;margin-bottom:9px}.search-row,.bus-search-row{display:flex;gap:5px}.search-row input{height:36px;padding:8px;font-size:11px}.search-row #searchCity{flex:none;width:52px}.search-row #searchKeyword{flex:1;min-width:0}.icon-button{background:var(--ink);color:var(--surface);padding:0 10px;border-radius:6px;font-size:11px}.search-results{max-height:240px;overflow:auto;margin-top:8px;scrollbar-width:none}.empty-source{font-size:11px;color:var(--muted);line-height:1.6;padding:8px 0}.search-result{display:flex;gap:9px;width:100%;align-items:flex-start;background:transparent;padding:10px 2px;text-align:left;border-bottom:1px solid var(--line-soft)}.search-result:hover{background:var(--paper)}.search-result-pin{width:19px;height:19px;flex:none;background:var(--accent-pale);color:var(--accent);border-radius:50%;display:grid;place-items:center;font-size:10px}.search-result div{min-width:0}.search-result strong{display:block;font-weight:500;font-size:12px;line-height:1.5}.search-result small{display:block;color:var(--muted);font-size:10px;line-height:1.5;margin-top:3px}.bus-panel{margin-top:17px;padding-top:17px;border-top:1px solid var(--line)}.bus-search-row input{flex:1;font-size:11px;padding:8px}.bus-search-row .button{font-size:11px;padding:8px 11px}.bus-results{max-height:220px;overflow:auto;scrollbar-width:none}.bus-result{display:flex;width:100%;gap:10px;align-items:center;text-align:left;background:transparent;padding:13px 12px;border:1px solid transparent;border-bottom-color:var(--line);border-radius:7px;transition:background .15s,border-color .15s}.bus-result:hover,.bus-result:focus-visible{background:var(--accent-pale);border-color:var(--accent-border)}.bus-result:focus-visible{outline-offset:-2px}.bus-result-main{min-width:0}.bus-result-main strong{display:block;font-size:12px;font-weight:500;line-height:1.5}.bus-result-main span{display:block;font-size:10px;color:var(--muted);margin-top:3px}.bus-segment-panel{padding-top:15px;display:grid;gap:12px}.bus-segment-panel>strong{font-weight:550;font-size:12px}.bus-segment-grid{display:grid;gap:10px}.bus-segment-grid label,.time-fields label{display:grid;gap:7px;font-size:11px;color:var(--muted)}.bus-segment-grid select{height:34px;padding:5px;font-size:11px}.time-fields{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:22px}.time-fields input{height:36px;padding:7px 8px;font-size:12px}.editor-footer{margin-top:24px;display:grid;gap:12px;text-align:center;padding-bottom:6px}.editor-footer .text-button{font-size:11px}
.map-panel{position:relative;min-width:0;min-height:300px;background:var(--paper);overflow:hidden}#mapcontainer{position:absolute;inset:0}.map-topbar{position:absolute;top:18px;left:18px;right:18px;display:flex;justify-content:flex-end;gap:12px;pointer-events:none;z-index:30}.map-control{background:var(--surface);box-shadow:0 2px 8px #00000010;border:1px solid #ffffffa0;border-radius:6px;padding:9px 12px;font-size:11px;pointer-events:auto}.map-control:hover{background:var(--surface);color:var(--accent)}.map-fallback{position:absolute;z-index:35;top:40%;left:12%;right:12%;background:var(--surface);padding:23px;border-radius:8px;line-height:1.7}.map-fallback strong{display:block;font-size:13px}.map-fallback span{font-size:12px;color:var(--muted)}.map-panel.is-fullscreen{position:fixed;inset:0;z-index:80;height:100dvh}.trip-marker,.draft-marker,.search-marker{width:25px;height:25px;display:grid;place-items:center;border:3px solid var(--surface);border-radius:50%;color:var(--surface);background:var(--accent);box-shadow:0 2px 7px #00000055;font-size:10px;font-weight:600}.trip-marker.active{background:var(--solid);box-shadow:0 0 0 4px color-mix(in srgb,var(--accent) 18%,transparent)}.trip-marker.draggable{cursor:grab}.draft-marker.end{background:var(--ink)}.draft-marker{width:29px;height:29px}.search-marker{background:var(--surface);color:var(--accent);border:2px solid var(--accent);font-size:11px;cursor:pointer}
.modal-root{position:fixed;inset:0;z-index:100;display:grid;place-items:center;background:#00000055;padding:22px}.modal{width:min(580px,100%);max-height:90dvh;overflow:auto;background:var(--surface);border-radius:10px;padding:25px;box-shadow:0 20px 70px #00000033}.modal-head{display:flex;justify-content:space-between;align-items:center;gap:15px;margin-bottom:19px}.modal-head h2{font-size:20px;font-weight:550}.modal-close{width:28px;height:28px;border-radius:50%;background:var(--paper);color:var(--muted);font-size:18px}.modal-copy{font-size:12px;line-height:1.7;color:var(--muted)}.modal-field{display:grid;gap:7px;margin-top:15px}.modal-field label{font-size:12px}.modal-field input{height:38px}.modal-actions{display:flex;gap:8px;justify-content:flex-end;margin-top:20px;flex-wrap:wrap}.cloud-account{display:flex;justify-content:space-between;align-items:center;color:var(--muted);font-size:12px;margin-bottom:20px;gap:10px}.cloud-account span{overflow-wrap:anywhere}.cloud-save-as{padding:16px;background:var(--paper);border:1px solid var(--line);border-radius:7px}.cloud-save-as .modal-field{margin:0}.cloud-save-as .button{margin-top:11px}.cloud-list-heading{display:flex;justify-content:space-between;align-items:center;margin:23px 0 10px}.cloud-list{max-height:300px;overflow:auto}.cloud-trip{border-bottom:1px solid var(--line);padding:14px 0}.cloud-trip-line{display:flex;justify-content:space-between;gap:12px;align-items:center}.cloud-trip-info{min-width:0}.cloud-trip-info strong{display:block;font-size:13px;font-weight:550;overflow-wrap:anywhere}.cloud-trip-info small{display:block;color:var(--muted);font-size:10px;margin-top:5px}.cloud-trip-actions{display:flex;gap:13px;flex:none}.cloud-trip-actions button{font-size:11px}.cloud-confirm{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-top:12px;padding:10px;background:var(--warning-bg);border-radius:5px;font-size:11px;color:var(--warning-ink)}.cloud-confirm span{width:100%;line-height:1.6}.cloud-status{min-height:18px;margin-top:13px;font-size:12px;color:var(--accent)}.cloud-status.error{color:var(--danger)}.toast{position:fixed;z-index:200;bottom:25px;left:50%;transform:translate(-50%,8px);opacity:0;pointer-events:none;max-width:90vw;width:max-content;padding:11px 16px;background:var(--solid);color:white;font-size:12px;line-height:1.6;border-radius:7px;transition:opacity .2s,transform .2s}.toast.show{opacity:1;transform:translate(-50%,0)}

/* Shared visual language */
:root{--ink:#243e37;--muted:#75817a;--line:#e1e7e1;--accent:#285e4d;--paper:#f4f6f2;--accent-pale:#e8f0e9}
.topbar{padding:0 24px;background:var(--surface-subtle)}.brand-mark{display:grid;place-items:center;width:32px;height:32px;background:var(--accent);color:var(--surface);border-radius:9px;font-size:23px;line-height:1}
.sidebar{background:var(--paper)}.sidebar-scroll{padding:20px 18px}.trip-head .section-kicker{color:var(--strong-muted);font-size:10px;letter-spacing:.12em}.trip-head .trip-title::placeholder{color:var(--strong-ink)}.trip-head .trip-title:focus{box-shadow:0 1px 0 var(--strong-muted)}.trip-head .trip-meta-row{color:var(--strong-muted)}.trip-head .text-button{color:var(--strong-ink)}.trip-head .trip-stats{gap:0;justify-content:space-between;margin-top:23px;padding-top:19px;border-top:1px solid #ffffff23}.trip-head .stat strong{font-size:23px;font-weight:500}.trip-head .stat small,.trip-head .stat span{color:var(--strong-muted)}.trip-head .stat span{margin-top:5px;font-size:10px}.timeline-section{padding:25px 2px 12px}.section-heading{margin-bottom:23px}.section-heading h2{font-size:14px}.sidebar-footer{background:var(--paper);padding:16px 20px}.settings-entry{display:flex;align-items:center;gap:6px}.settings-entry svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round}.mode-icon{width:19px;height:19px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round;flex:none}.editor-column{background:var(--surface-subtle)}.editor-heading h1{font-size:20px}.editor-index{font-size:30px;letter-spacing:-1px}.mode-grid{gap:7px;margin-top:23px}.mode-button{display:flex;flex-direction:column;align-items:center;gap:7px;padding:12px 5px;background:var(--surface-subtle);border-radius:8px}.mode-button .mode-icon{width:20px;height:20px;color:var(--muted)}.mode-button.active{background:var(--accent-pale);border-color:var(--accent-border)}.mode-button.active .mode-icon{color:var(--accent)}.draft-route{border-radius:9px;background:var(--surface)}.draft-point{padding:13px 12px}.draft-point.selected{background:var(--accent-pale)}.draft-point input{font-size:13px}.search-row input{font-size:12px}.button{border-radius:7px}.button-wide{min-height:44px}.editor-footer{padding-top:16px;border-top:1px solid var(--line)}.map-control{font-size:12px;padding:11px 14px;border-radius:8px}.modal{border-radius:14px}.modal-field textarea{resize:vertical;min-height:70px;line-height:1.6}.edit-points{display:grid;grid-template-columns:1fr 1fr;gap:14px}
/* Shared stops and always-visible individual legs. */
.timeline{position:relative;padding:0 0 0 7px}.timeline-point{display:flex;align-items:center;gap:13px;position:relative;padding:8px 0;min-height:40px}.waypoint-dot{width:9px;height:9px;flex:none;border:2px solid var(--accent-border);border-radius:50%;background:var(--paper);z-index:1}.terminal .waypoint-dot{border-color:var(--accent);box-shadow:0 0 0 4px var(--accent-soft)}.timeline-point>div{min-width:0}.timeline-point strong{font-size:13px;font-weight:600;line-height:1.7;overflow-wrap:anywhere}.timeline-point small{display:block;font-size:10px;line-height:1.6;color:var(--muted);font-variant-numeric:tabular-nums}.route-band{position:relative;margin:0;border:1px solid var(--line);border-radius:9px;background:var(--surface);transition:background .15s,border-color .15s}.route-band.active{background:var(--surface);border-color:var(--mode-color);box-shadow:0 2px 8px #00000008}.route-main{display:flex;align-items:center;gap:9px;padding:12px 11px 8px;width:100%;background:transparent;text-align:left}.transport-icon{display:grid;place-items:center;width:30px;height:30px;border-radius:8px;background:color-mix(in srgb,var(--mode-color) 9%,var(--surface));color:var(--mode-color);flex:none}.route-info{flex:1;min-width:0}.route-info strong{display:block;font-size:12px;font-weight:550;line-height:1.55;overflow-wrap:anywhere}.route-info small{display:block;color:var(--muted);font-size:10px;margin-top:3px;line-height:1.5}.route-actions{display:flex;gap:15px;padding:5px 12px 11px;justify-content:flex-end;flex-wrap:wrap}.route-actions button{background:transparent;padding:3px 0;color:var(--muted);font-size:11px}.route-actions button:hover{color:var(--accent);text-decoration:underline}.route-actions .segment-delete:hover{color:var(--danger)}.route-band.is-hidden .route-main{opacity:.45}.compact .timeline-point{padding:5px 0;min-height:30px}.compact .route-main{padding:7px 10px 4px}.compact .route-actions{padding-bottom:5px;gap:12px}.compact .transport-icon{width:25px;height:25px}.compact .timeline-leg{padding-top:2px;padding-bottom:2px}.timeline-empty{padding:34px 10px;text-align:center;line-height:1.8}.timeline-empty strong{font-size:14px;margin:15px 0 7px}.timeline-empty p{font-size:12px}.empty-route-icon{display:grid;place-items:center;width:46px;height:46px;border-radius:50%;margin:auto;background:var(--accent-pale);color:var(--accent)}.empty-route-icon .mode-icon{width:24px;height:24px}
/* Preferences are a drawer; route editing stays in a focused dialog. */
.settings-root{place-items:stretch end;padding:0;background:#00000038}.settings-root .modal{display:flex;flex-direction:column;overflow:hidden;width:min(480px,100%);height:100dvh;max-height:100dvh;border-radius:0;padding:0;box-shadow:-12px 0 48px #0000001c}.settings-header{padding:28px 28px 0;border-bottom:1px solid var(--line);background:var(--surface-subtle)}.settings-header .modal-head{margin-bottom:24px}.settings-header .section-kicker{margin-bottom:8px}.settings-header h2{font-size:23px}.settings-tabs{display:flex;gap:25px}.settings-tabs button{padding:0 0 14px;background:transparent;color:var(--muted);border-bottom:2px solid transparent;font-size:12px;white-space:nowrap}.settings-tabs [aria-selected="true"]{border-color:var(--accent);color:var(--accent);font-weight:600}.settings-body{overflow:auto;flex:1;min-height:0;padding:7px 28px 25px;scrollbar-width:none}.preference-section{padding-top:23px}.preference-section h3{font-size:11px;font-weight:600;color:var(--muted);margin:0 0 8px;letter-spacing:.06em}.preference-row{position:relative;display:flex;align-items:center;justify-content:space-between;gap:18px;padding:15px 0;border-bottom:1px solid var(--line-soft);cursor:pointer}.preference-row>span:first-child{flex:1;min-width:0}.preference-row strong{font-size:13px;line-height:1.5;font-weight:500;display:block}.preference-row small{display:block;color:var(--muted);font-size:11px;margin-top:5px;line-height:1.6}.preference-row input[type="checkbox"]{position:absolute;right:0;top:50%;transform:translateY(-50%);width:36px;height:22px;opacity:0;margin:0;z-index:2;cursor:pointer}.switch-track{display:block;width:36px;height:22px;background:var(--line);border-radius:20px;flex:none;transition:background .15s}.switch-track:after{content:"";display:block;width:16px;height:16px;border-radius:50%;background:var(--surface);margin:3px;box-shadow:0 1px 3px #00000020;transition:transform .15s}.preference-row input:checked+.switch-track{background:var(--accent)}.preference-row input:checked+.switch-track:after{transform:translateX(14px)}.preference-row input:focus-visible+.switch-track{outline:2px solid var(--accent);outline-offset:3px}.preference-row.disabled{opacity:.45;cursor:default}.select-row select,.select-row input{width:125px;padding:8px;font-size:12px}.settings-footer{display:flex;align-items:center;gap:8px;padding:18px 28px;border-top:1px solid var(--line);color:var(--muted);font-size:11px;background:var(--surface-subtle)}.saved-dot{width:6px;height:6px;border-radius:50%;background:var(--accent)}.map-style-options{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin:14px 0 7px}.map-style-option{padding:5px;border:1px solid var(--line);background:var(--surface);border-radius:9px}.map-style-option.selected{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent)}.map-style-option strong{display:block;margin:9px 0 6px;font-size:11px;font-weight:500}.map-swatch{height:65px;display:block;position:relative;overflow:hidden;border-radius:5px;background:#edf0e9}.map-swatch:before,.map-swatch:after{content:"";position:absolute;left:-20px;right:-20px;top:25px;height:7px;background:#fff;transform:rotate(-30deg);box-shadow:0 0 0 1px #cbd9ca}.map-swatch:after{transform:rotate(60deg);height:5px;top:40px}.map-swatch i{display:block;position:absolute;left:15px;top:0;bottom:-10px;width:12px;background:#c1d6e3;transform:rotate(18deg)}.map-swatch.light{background:#e8eaed}.map-swatch.light:before,.map-swatch.light:after{box-shadow:0 0 0 1px #d1d5d8}.map-swatch.light i{background:#cfd7df}.map-swatch.standard{background:#dde9d4}.map-swatch.standard:before{background:#fbeac4}.map-swatch.satellite{background:#465d43}.map-swatch.satellite:before,.map-swatch.satellite:after{background:#9aa587;box-shadow:none;height:3px}.map-swatch.satellite i{background:#597880}.settings-explainer{font-size:12px;color:var(--muted);line-height:1.85;margin:12px 0 20px}.preference-account{display:flex;align-items:center;gap:12px;background:var(--surface-subtle);padding:18px 14px;border-radius:10px;margin:18px 0}.account-avatar{display:grid;place-items:center;width:35px;height:35px;background:var(--accent-pale);color:var(--accent);border-radius:50%;flex:none}.preference-account>div{min-width:0}.preference-account strong{font-size:12px;font-weight:500;overflow-wrap:anywhere}.preference-account small{display:block;font-size:10px;color:var(--muted);margin-top:5px;line-height:1.7}.preference-cloud-actions{display:flex;gap:8px;margin-bottom:15px}.preference-cloud-actions .button{flex:1;white-space:normal}.settings-signin{padding:20px;background:var(--paper);border-radius:9px}.settings-signin p{font-size:12px;color:var(--muted);margin-bottom:15px}.reset-preferences-confirm{display:flex;gap:15px;align-items:center;flex-wrap:wrap;padding-top:15px;font-size:12px}
@media(min-width:1500px){.workspace{grid-template-columns:320px 360px minmax(0,1fr)}.sidebar-scroll{padding:28px 24px}.editor{padding:28px 26px}}
@media(max-width:1100px){.workspace{grid-template-columns:280px 306px minmax(0,1fr)}.sidebar-scroll{padding:22px 16px}.editor{padding:22px 16px}.sidebar-footer{padding:14px 16px}.sidebar-footer span{display:none}.trip-stats{gap:18px}.trip-head{padding:18px 15px}.save-state{display:none}.map-topbar{justify-content:flex-end}}
@media(max-width:800px){.workspace{height:auto;min-height:calc(100dvh - 64px);grid-template-columns:1fr 1fr;grid-template-rows:42dvh auto}.map-panel{grid-column:1/-1;grid-row:1;min-height:240px}.sidebar,.editor-column{grid-row:2;overflow:visible;min-width:0}.sidebar-scroll{overflow:visible}.sidebar-footer{margin-top:auto}.editor-column{border-right:0}.topbar{padding:0 15px}.brand{font-size:14px}.topbar-actions{gap:6px}.topbar-actions .button{padding:8px 10px;font-size:11px}}
@media(max-width:520px){.workspace{grid-template-columns:1fr}.editor-column{grid-row:2;border-bottom:1px solid var(--line)}.sidebar{grid-row:3;border-right:0}.topbar{height:58px}.brand{font-size:12px;gap:5px}.brand-mark{font-size:20px}.editor,.sidebar-scroll{padding:22px}.modal{padding:20px}.modal-root{padding:12px}.cloud-trip-line{align-items:flex-start}.cloud-trip-actions{flex-direction:column;gap:12px}}
@media(prefers-reduced-motion:reduce){*{transition:none!important}}

@media(max-width:520px){.topbar-actions{gap:4px}.topbar-actions .button{padding:7px;font-size:10px}.brand{font-size:0}.brand-mark{font-size:22px}.settings-entry span{display:none}.settings-header{padding:25px 20px 0}.settings-body{padding:5px 20px 20px}.settings-tabs{gap:22px}.settings-footer{padding:18px 20px}.edit-points{grid-template-columns:1fr;gap:0}}
/* Keep the append form compact. */
.editor-column{min-width:0;overflow-x:hidden}.editor{padding-top:22px;padding-bottom:18px}.editor-heading .section-kicker{margin-bottom:7px}.mode-grid{margin-top:18px;gap:6px}.mode-button{flex-direction:row;justify-content:center;gap:5px;min-height:36px;padding:8px 4px;font-size:11px}.mode-button .mode-icon{width:17px;height:17px}.append-option{padding:12px 0;min-height:52px}.append-option:has(input:disabled){opacity:.6}.editor-subtitle,.slot-status{display:none}.draft-route{margin-top:14px;flex:none}.draft-point{padding:10px 11px}.draft-point:has(input:disabled) .point-slot:disabled{background:var(--accent-pale);color:var(--muted)}.time-fields{margin-top:17px}.time-fields input:disabled{color:var(--muted);background:var(--surface-subtle);border-color:var(--line)}.editor-footer{margin-top:18px;padding-top:15px;gap:10px}.place-search{margin-top:15px}.search-results{max-height:170px}.bus-route-summary{display:flex;align-items:center;justify-content:space-between;gap:10px;background:var(--accent-pale);border:1px solid var(--line);border-radius:8px;text-align:left;width:100%;padding:12px;margin-top:16px}.bus-route-summary>span:first-child{min-width:0}.bus-route-summary small{display:block;font-size:10px;color:var(--muted);margin-bottom:5px}.bus-route-summary strong{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px;font-weight:500}.bus-route-summary>span:last-child{font-size:23px;color:var(--accent)}.bus-route-summary:hover{border-color:var(--accent-border)}.bus-search-row #busCityInput{width:76px;flex:none}.bus-search-row #busSearchInput{flex:1;min-width:0}.bus-picker-status{font-size:12px;color:var(--muted);line-height:1.7;margin-top:12px}.bus-picker-status:empty{display:none}.bus-selection-heading{display:flex;align-items:center;justify-content:space-between;gap:14px;padding-top:3px}.bus-selection-heading strong{min-width:0;font-size:13px;font-weight:600;line-height:1.6;overflow-wrap:anywhere}.bus-selection-heading button{flex:none}.bus-segment-grid label{min-width:0}.bus-segment-grid select{width:100%;min-width:0;text-overflow:ellipsis}.bus-results .bus-result-main{flex:1;min-width:0}.bus-result-main strong,.bus-result-main span{overflow-wrap:anywhere}.bus-segment-grid select:disabled{color:var(--muted);background:var(--surface-subtle)}
@media(max-width:520px){.mode-button{font-size:12px}}

/* Three equal panels move inside a two-panel viewport. The map is a separate,
   higher layer: opening the picker never resizes or translates its container. */
body{overflow:hidden}
.workspace{--panel-width:328px;grid-template-columns:calc(var(--panel-width)*2) minmax(0,1fr);grid-template-rows:minmax(0,1fr);height:calc(100dvh - 64px);min-height:0}
.panel-viewport{position:relative;z-index:1;min-width:0;min-height:0;overflow:hidden;overflow:clip}
.panel-track{display:flex;width:150%;height:100%;transform:translateX(0);transition:transform .42s cubic-bezier(.22,.68,.2,1)}
.panel-track>aside{flex:0 0 33.333333%;min-width:0;min-height:0;grid-row:auto;grid-column:auto}
.is-bus-picking .panel-track{transform:translateX(-33.333333%)}
.panel-track>.sidebar{overflow:hidden}
.panel-track .sidebar-scroll{min-height:0;overflow-y:auto;overscroll-behavior:contain}
.panel-track>.editor-column{overflow-y:auto;overscroll-behavior:contain;border-right:1px solid var(--line)}
.map-panel{grid-column:2;grid-row:1;min-height:0;z-index:2}
.map-panel.is-fullscreen{z-index:80}
.bus-column{display:flex;flex-direction:column;background:var(--surface);border-right:1px solid var(--line);overflow:hidden}
.bus-column-header{display:flex;align-items:center;gap:17px;padding:20px;border-bottom:1px solid var(--line);flex:none;background:var(--surface-subtle)}
.bus-column-header h2{font-size:15px;letter-spacing:-.02em}
.bus-back-button{display:flex;align-items:center;gap:5px;background:transparent;color:var(--muted);padding:3px 0;font-size:12px;white-space:nowrap}
.bus-back-button:hover{color:var(--accent)}
.bus-back-button span{font-size:18px;line-height:1}
.bus-column .bus-panel{display:flex;flex:1;flex-direction:column;min-height:0;margin:0;padding:0;border:0}
.bus-search-section{padding:18px 20px 10px;flex:none}
.bus-column .bus-search-row #busCityInput{width:56px}
.bus-column .bus-picker-status{margin:0 20px 12px;font-size:11px;line-height:1.7;flex:none;color:var(--bus-ink)}
.bus-column .bus-results{margin:0;padding:0 10px 14px;min-height:0;max-height:none;flex:1;overflow-y:auto;overscroll-behavior:contain}
.bus-column .empty-source{padding:22px 10px;line-height:1.8}
.bus-column .bus-result{padding:15px 10px;gap:9px;transition:background .2s,border-color .2s}
.bus-column .bus-result-main strong{font-size:13px;font-weight:550}
.bus-column .bus-result-main span{font-size:11px;line-height:1.7;margin-top:6px}
.bus-column .bus-segment-panel{display:flex;flex:1;min-height:0;flex-direction:column;gap:0;padding:0;overflow:hidden}
.bus-column .bus-selection-heading{padding:12px 20px;border-top:1px solid var(--line);flex:none;align-items:flex-start}
.bus-column .bus-selection-heading strong{font-size:14px}
.bus-column .bus-selection-heading button{padding-top:3px;font-size:11px}
.bus-stop-targets{display:grid;grid-template-columns:1fr 1fr;gap:7px;margin:0 20px 12px;flex:none}
.bus-stop-target{padding:10px;text-align:left;background:var(--surface-subtle);border:1px solid var(--line);border-radius:8px;min-width:0;transition:border-color .2s,background .2s}
.bus-stop-target small{display:block;font-size:10px;color:var(--muted);margin-bottom:6px}
.bus-stop-target strong{display:block;font-size:12px;font-weight:500;line-height:1.5;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
.bus-stop-target[aria-pressed="true"]{background:var(--bus-tint);border-color:#d99c94}
.bus-stop-target[aria-pressed="true"] small{color:var(--bus-ink)}
.bus-stop-target:disabled{opacity:1;background:var(--surface-subtle);color:var(--muted)}
.bus-stop-target:disabled small:after{content:' · 已锁定';font-size:9px}
.bus-stop-list-heading{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:0 21px 10px;font-size:11px;color:var(--muted);flex:none}
.bus-stop-list-heading span:first-child{color:var(--ink)}
.bus-stop-list{list-style:none;margin:0;padding:0 10px 12px;overflow-y:auto;min-height:0;flex:1;scrollbar-width:none;overscroll-behavior:contain}
.bus-stop-row{position:relative;display:flex;width:100%;gap:10px;align-items:center;text-align:left;padding:12px 10px;border-radius:6px;background:var(--surface);min-height:45px;transition:background .2s,color .2s}
.bus-stop-number{position:relative;display:grid;place-items:center;flex:none;width:22px;height:22px;font-size:10px;color:var(--muted);border:1px solid var(--line);background:var(--surface);border-radius:50%;z-index:1;transition:background .2s,border-color .2s,color .2s}
.bus-stop-row:before,.bus-stop-row:after{position:absolute;content:'';left:20px;width:1px;height:50%;background:var(--line);transition:background .2s}
.bus-stop-row:before{top:0}.bus-stop-row:after{bottom:0}
.bus-stop-list li:first-child .bus-stop-row:before,.bus-stop-list li:last-child .bus-stop-row:after{display:none}
.bus-stop-name{flex:1;min-width:0;font-size:12px;line-height:1.6;overflow-wrap:anywhere}
.bus-stop-badge{flex:none;font-size:10px;color:var(--bus-ink)}
.bus-stop-row.in-interval:before,.bus-stop-row.in-interval:after{background:#d9a097}
.bus-stop-row.is-board .bus-stop-number,.bus-stop-row.is-alight .bus-stop-number{color:var(--surface);border-color:#cf5147;background:#cf5147}
.bus-stop-row[aria-disabled="true"] .bus-stop-name{color:var(--muted)}
.bus-stop-row:hover,.bus-stop-row:focus-visible,.bus-stop-row.is-hovered{background:var(--bus-tint)}
.bus-stop-row:focus-visible{outline-offset:-2px;outline-color:#cf5147}
.bus-confirm-footer{flex:none;border-top:1px solid var(--line);padding:12px 20px 18px;background:var(--surface-subtle)}
.bus-confirm-footer>span{display:block;font-size:11px;color:var(--muted);margin-bottom:10px}
.bus-confirm-footer>span:empty{display:none}
.bus-stop-marker{width:24px;height:24px;display:grid;place-items:center;position:relative;cursor:pointer;opacity:1;transition:opacity .22s}
.bus-stop-dot{display:block;width:10px;height:10px;border:2px solid #d8443f;border-radius:50%;background:var(--surface);box-shadow:0 1px 4px #56292130;transform:scale(1);transition:transform .22s cubic-bezier(.2,.7,.2,1),background .22s,box-shadow .22s}
.bus-stop-marker.is-board .bus-stop-dot,.bus-stop-marker.is-alight .bus-stop-dot{background:#d8443f;transform:scale(1.35)}
.bus-stop-marker.is-hovered .bus-stop-dot,.bus-stop-marker:focus-visible .bus-stop-dot{transform:scale(2);background:#d8443f;box-shadow:0 0 0 3px #d8443f22}
.bus-stop-label{position:absolute;left:50%;bottom:30px;transform:translate(-50%,5px);opacity:0;pointer-events:none;width:max-content;max-width:220px;padding:7px 10px;border-radius:6px;background:var(--surface);color:var(--bus-ink);box-shadow:0 2px 12px #4d2c242b;font-size:12px;line-height:1.5;white-space:normal;transition:opacity .2s,transform .2s}
.bus-stop-marker.is-hovered .bus-stop-label,.bus-stop-marker:focus-visible .bus-stop-label{opacity:1;transform:translate(-50%,0)}
.bus-stop-marker.is-entering,.bus-stop-marker.is-leaving{opacity:0}
.bus-stop-marker.is-entering .bus-stop-dot,.bus-stop-marker.is-leaving .bus-stop-dot{transform:scale(.6)}
.bus-stop-marker.is-leaving{pointer-events:none}
@media(min-width:1500px){.workspace{--panel-width:340px}}
@media(max-width:1100px){.workspace{--panel-width:293px}.bus-column-header{padding:18px 16px;gap:12px}.bus-search-section{padding-left:16px;padding-right:16px}.bus-stop-targets{margin-left:16px;margin-right:16px}}
@media(max-width:800px){
  .workspace{grid-template-columns:minmax(0,1fr);grid-template-rows:38dvh minmax(0,1fr);height:calc(100dvh - 64px);min-height:0}
  .map-panel{grid-column:1;grid-row:1;min-height:0}
  .panel-viewport{grid-row:2;grid-column:1;border-top:1px solid var(--line)}
  .panel-track>.sidebar,.panel-track>.editor-column{grid-row:auto}
}
@media(max-width:520px){
  .workspace{height:calc(100dvh - 58px);grid-template-rows:32dvh minmax(0,1fr)}
  .panel-track{display:grid;width:200%;grid-template-columns:1fr 1fr;grid-template-rows:minmax(0,1fr) minmax(0,.65fr)}
  .panel-track>.editor-column{grid-column:1;grid-row:1}
  .panel-track>.sidebar{grid-column:1;grid-row:2;border-top:1px solid var(--line)}
  .panel-track>.bus-column{grid-column:2;grid-row:1/-1}
  .is-bus-picking .panel-track{transform:translateX(-50%)}
  .editor,.sidebar-scroll{padding:18px}
  .bus-column-header{padding:13px 18px}.bus-search-section{padding-top:12px}
}
@keyframes bus-stage-enter{from{opacity:0;transform:translateY(7px)}to{opacity:1;transform:translateY(0)}}
.bus-column .bus-results,.bus-column .bus-segment-panel{animation:bus-stage-enter .24s ease-out}
@media(prefers-reduced-motion:reduce){.bus-column .bus-results,.bus-column .bus-segment-panel{animation:none}}

/* Theme roles are shared by every panel, control and dialog. */
:root{--surface-subtle:#f9faf8;--line-soft:#edf0e9;--subtle:#89928d;--accent-hover:#214f40;--accent-border:#9bb6a7;--accent-soft:#dbe8df;--strong:#214b42;--strong-ink:#f3f8f4;--strong-muted:#bed1c4;--solid:#253c2f;--on-solid:#fff;--on-accent:#fff;--warning-bg:#faf4e9;--warning-ink:#70572c;--bus-tint:#fff3f0;--bus-ink:#a83f36}
.button-primary,.brand-mark,.selected .point-slot{color:var(--on-accent)}
.button-dark,.icon-button,.toast{background:var(--solid);color:var(--on-solid)}
.trip-head{color:var(--strong-ink)}
.trip-head .trip-title::placeholder{color:var(--strong-ink)}
.trip-head .section-kicker,.trip-head .trip-meta-row,.trip-head .stat small,.trip-head .stat span{color:var(--strong-muted)}
.trip-head .text-button{color:var(--strong-ink)}
.switch-track:after{background:var(--surface)}
.preference-row input:checked+.switch-track:after{background:var(--on-accent)}
.trip-marker,.draft-marker{color:var(--on-accent);border-color:#fff}
.trip-marker.active,.draft-marker.end{background:var(--solid);color:var(--on-solid)}
.search-marker{background:var(--surface);color:var(--accent)}
.bus-stop-dot{background:#fff}
.bus-stop-row.is-board .bus-stop-number,.bus-stop-row.is-alight .bus-stop-number{color:#fff}
.bus-stop-target[aria-pressed="true"] small,.bus-stop-badge{color:var(--bus-ink)}
.bus-stop-marker:focus-visible{outline:2px solid #d8443f;border-radius:50%}
.theme-setting{padding:18px 0;border-bottom:1px solid var(--line-soft)}
.theme-setting>strong{font-size:13px;font-weight:500}
.theme-color-options{display:flex;gap:12px;align-items:center;flex-wrap:wrap;margin:15px 0}
.theme-color-option{display:grid;place-items:center;width:34px;height:34px;background:var(--swatch);border-radius:50%;border:3px solid var(--surface);box-shadow:0 0 0 1px var(--line);transition:box-shadow .18s,transform .18s}
.theme-color-option:hover{transform:translateY(-2px)}
.theme-color-option[aria-pressed="true"]{box-shadow:0 0 0 2px var(--accent)}
.theme-color-option svg{width:20px;height:20px;fill:none;stroke:#fff;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;opacity:0;transition:opacity .18s}
.theme-color-option[aria-pressed="true"] svg{opacity:1}
.theme-custom{display:flex;justify-content:space-between;align-items:center;gap:12px;font-size:12px;color:var(--muted)}
.theme-custom input[type="color"]{width:62px;height:34px;padding:4px;border-radius:7px;cursor:pointer;background:var(--surface)}
.theme-custom input[type="color"]::-webkit-color-swatch-wrapper{padding:0}
.theme-custom input[type="color"]::-webkit-color-swatch{border:0;border-radius:3px}
.other-name-field{display:grid;gap:8px;margin-top:16px;font-size:11px;color:var(--muted)}
.other-name-field input{font-size:13px;padding:10px}

/* Rail halves meet at the waypoint center, including wrapped names and two-line times. */
.timeline-leg{position:relative;padding:4px 0 4px 22px}
.timeline-leg::before,.timeline-point::before,.timeline-point::after{content:"";position:absolute;left:3.5px;width:2px;pointer-events:none}
.timeline-leg::before{top:0;bottom:0;background:var(--mode-color)}
.timeline-point::before{top:0;height:50%;background:var(--incoming-color,transparent)}
.timeline-point::after{bottom:0;height:50%;background:var(--outgoing-color,transparent)}
.waypoint-dot{position:relative;border-color:var(--incoming-color,var(--accent));background:var(--paper)}
.timeline-point.terminal .waypoint-dot{border-color:var(--accent)}
.timeline-gap{height:20px}
.timeline-group{position:relative;isolation:isolate}
.timeline-group::before{content:"";position:absolute;inset:3px 0 3px 22px;border-radius:10px;background:var(--surface);border:1px solid var(--line);z-index:-1}
.timeline-group .route-band{border-color:transparent;background:transparent;box-shadow:none}
.timeline-group .route-band.active{border-color:var(--mode-color);background:color-mix(in srgb,var(--mode-color) 6%,var(--surface))}
.timeline-group .timeline-point>div{padding-left:12px}
.timeline-group .timeline-point strong{font-size:12px;font-weight:500}
.draft-color-setting{margin-top:18px;border-top:1px solid var(--line-soft);padding-top:12px}
.draft-color-setting summary{list-style:none;display:flex;align-items:center;justify-content:space-between;gap:12px;cursor:pointer;font-size:11px;color:var(--muted);min-height:26px}
.draft-color-setting summary::-webkit-details-marker{display:none}
.draft-color-setting summary:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:4px}
.draft-color-current{display:flex;align-items:center;gap:6px}
.draft-color-current::after{content:"";width:5px;height:5px;border-right:1px solid currentColor;border-bottom:1px solid currentColor;transform:rotate(45deg);margin:0 3px 3px 5px;transition:transform .2s}
.draft-color-setting[open] .draft-color-current::after{transform:rotate(225deg);margin-bottom:0}
.draft-color-current i{width:10px;height:10px;display:block;border-radius:50%}
.route-color-controls{padding:12px 0 3px}
.route-color-swatches{display:flex;align-items:center;flex-wrap:wrap;gap:8px}
.route-color-swatch{display:grid;place-items:center;width:24px;height:24px;padding:0;border-radius:50%;border:2px solid var(--surface);background:var(--swatch);box-shadow:0 0 0 1px var(--line);transition:transform .18s,box-shadow .18s}
.route-color-swatch:hover:not(:disabled){transform:translateY(-2px)}
.route-color-swatch[aria-pressed="true"]{box-shadow:0 0 0 2px var(--ink)}
.route-color-swatch svg{width:17px;height:17px;fill:none;stroke:#fff;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;opacity:0;transition:opacity .18s}
.route-color-swatch[aria-pressed="true"] svg{opacity:1}
.route-color-custom{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:13px}
.route-color-custom label{display:flex;align-items:center;gap:10px;font-size:11px;color:var(--muted)}
.route-color-input{width:42px;height:28px;padding:3px;cursor:pointer}
.route-color-input::-webkit-color-swatch-wrapper{padding:0}
.route-color-input::-webkit-color-swatch{border:0;border-radius:2px}
.route-color-custom .text-button{font-size:11px}
.bus-draft-warning,.bus-column .bus-picker-status.is-warning{background:var(--warning-bg);color:var(--warning-ink);border-radius:6px;padding:10px 12px;font-size:11px;line-height:1.7;overflow-wrap:anywhere}
.bus-draft-warning{margin-top:8px}
/* Scrolling remains native for mouse, touch and keyboard on every surface. */
*{scrollbar-width:none!important}
*::-webkit-scrollbar{display:none;width:0;height:0}
@media(prefers-reduced-motion:reduce){.route-color-swatch,.draft-color-current::after{transition:none}}
