:root{color:#1e261f;font-synthesis:none;text-rendering:optimizelegibility;background:#ece8df;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Hiragino Sans GB,Microsoft YaHei,sans-serif}*{box-sizing:border-box}body{background:radial-gradient(circle at 5% 0,#f9c15933,#0000 28rem),#ece8df;min-width:320px;min-height:100vh;margin:0}button,a{font:inherit}button{-webkit-tap-highlight-color:transparent}body.panel-open{overflow:hidden}button:focus-visible,a:focus-visible{outline-offset:3px;outline:3px solid #186f4c4d}.app-shell{width:min(960px,100% - 64px);min-height:100vh;margin:0 auto;padding:72px 0 56px}.login-shell{place-items:center;min-height:100vh;padding:24px;display:grid}.login-card{background:#fffdf8;border:1px solid #28322814;border-radius:24px;width:min(430px,100%);padding:32px;box-shadow:0 18px 55px #32332c1a}.login-card h1{font-size:34px}.login-card>p:not(.eyebrow,.login-error){color:#747970;margin:12px 0 24px;font-size:14px;line-height:1.6}.login-field{flex-direction:column;gap:7px;margin-bottom:16px;display:flex}.login-field span{color:#5e665f;font-size:12px;font-weight:700}.login-field input{color:#1e261f;width:100%;font:inherit;background:#fff;border:1px solid #d3cfc6;border-radius:12px;outline:0;padding:13px 14px}.login-field input:focus{border-color:#5c987e;box-shadow:0 0 0 3px #186f4c1a}.login-error{color:#b04c37;margin:-4px 0 14px;font-size:13px}.page-header,.route-header,.station-heading,.source-notice,.page-footer{align-items:center;display:flex}.page-header{justify-content:space-between;gap:24px}.header-actions{align-items:center;gap:8px;display:flex}.eyebrow{color:#186f4c;letter-spacing:.16em;margin:0 0 8px;font-size:12px;font-weight:800}h1{letter-spacing:-.05em;margin:0;font-size:clamp(34px,6vw,56px);line-height:1.1}.refresh-button,.manage-button{color:#303831;cursor:pointer;background:#ffffff80;border:1px solid #cdc8bd;border-radius:100px;align-items:center;gap:8px;padding:11px 16px;display:flex}.manage-button{color:#186f4c;font-weight:700}.refresh-button:disabled{opacity:.6;cursor:wait}.spinning{animation:.8s linear infinite spin;display:inline-block}@keyframes spin{to{transform:rotate(360deg)}}.station-list{flex-direction:column;gap:64px;margin-top:52px;display:flex}.station-section{scroll-margin-top:20px}.station-heading{gap:14px;margin-bottom:24px}.station-title-row{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.station-pin{background:#e1533f;border:3px solid #fffdf8;border-radius:50%;width:13px;height:13px;box-shadow:0 0 0 3px #e1533f}.station-heading h2{margin:0 0 2px;font-size:22px}.station-heading p,.route-header p,.source-notice p{color:#747970;margin:0;font-size:13px}.source-notice{background:#fff8df;border:1px solid #d6c9a8;border-radius:14px;justify-content:space-between;gap:20px;margin-bottom:24px;padding:18px 22px}.global-notice{margin-top:30px}.source-notice.stale{background:#fff1ec;border-color:#e1bcae}.source-notice p{margin-top:3px}.status-dot{background:#a9aaa5;border-radius:50%;flex:none;width:8px;height:8px}.status-dot.live{background:#1a9c63;box-shadow:0 0 0 4px #1a9c631f}.status-dot.stale{background:#dc7359}.route-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:22px;display:grid}.route-card{background:#fffdf8;border:1px solid #28322814;border-radius:20px;min-height:0;padding:22px;box-shadow:0 10px 30px #32332c0d}.route-header{border-bottom:1px solid #ece9e0;gap:13px;padding-bottom:18px}.route-badge{color:#fff;background:#186f4c;border-radius:15px;place-items:center;width:54px;height:54px;font-size:19px;font-weight:800;display:grid}.route-header h2{margin:0 0 2px;font-size:18px}.arrival-list{grid-template-columns:repeat(2,minmax(0,1fr));margin:0;padding:15px 0 2px;list-style:none;display:grid}.arrival-list li{flex-direction:column;gap:3px;min-width:0;padding:0 14px;display:flex}.arrival-list li:first-child{padding-left:0}.arrival-list li+li{border-left:1px solid #ece9e0}.arrival-list li:last-child{padding-right:0}.arrival-list li:only-child{grid-column:1/-1}.arrival-rank{color:#777d74;font-size:13px}.arrival-list strong{white-space:nowrap;font-size:15px}.empty-arrivals{flex-direction:column;justify-content:center;gap:5px;min-height:72px;display:flex}.empty-arrivals strong{color:#4c534d;font-size:15px}.empty-arrivals span{color:#979a94;font-size:12px}.map-link{color:#186f4c;align-items:center;gap:5px;font-size:13px;font-weight:700;text-decoration:none;display:inline-flex}.skeleton{background:linear-gradient(100deg,#f7f4ed 25%,#fffdf8 45%,#f7f4ed 65%) 0 0/200% 100%;animation:1.2s infinite shimmer;overflow:hidden}@keyframes shimmer{to{background-position-x:-200%}}.page-footer,.station-footer{color:#777d74;justify-content:center;gap:8px;padding-top:28px;font-size:12px}.station-footer{justify-content:space-between;align-items:center;padding-top:18px;display:flex}.station-status{align-items:center;gap:8px;display:inline-flex}.footer-separator{color:#b1b1ab}.empty-state{text-align:center;flex-direction:column;justify-content:center;align-items:center;min-height:55vh;padding:40px 24px;display:flex}.empty-state-icon{color:#fffdf8;background:#186f4c;border-radius:20px;place-items:center;width:62px;height:62px;margin-bottom:18px;font-size:22px;font-weight:800;display:grid;box-shadow:0 10px 30px #186f4c2e}.empty-state h2{margin:0 0 8px;font-size:22px}.empty-state p{color:#747970;max-width:350px;margin:0 0 22px;font-size:14px;line-height:1.55}.empty-state .empty-warning{color:#b04c37;margin-top:-8px}.primary-button,.add-row-button,.text-button,.danger-button,.icon-button,.period-button,.clear-period-button,.logout-button,.candidate-list button{cursor:pointer;border:0}.primary-button:disabled,.add-row-button:disabled,.danger-button:disabled,.icon-button:disabled,.period-button:disabled,.clear-period-button:disabled,.logout-button:disabled{cursor:wait;opacity:.55}.primary-button{color:#fff;background:#186f4c;border-radius:13px;width:100%;padding:13px 18px;font-weight:750}.panel-backdrop{z-index:20;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);background:#171d1847;justify-content:center;align-items:flex-end;padding:24px;display:flex;position:fixed;inset:0}.manage-panel{background:#f7f4ed;border:1px solid #28322817;border-radius:24px;width:min(560px,100%);max-height:min(760px,100vh - 48px);overflow:hidden;box-shadow:0 28px 80px #2226223d}.manage-header{border-bottom:1px solid #dfdcd4;grid-template-columns:64px 1fr 64px;align-items:center;padding:16px 18px 13px;display:grid}.manage-header h2{text-align:center;text-overflow:ellipsis;white-space:nowrap;margin:0;font-size:16px;overflow:hidden}.text-button{color:#186f4c;background:0 0;padding:5px 0;font-size:14px;font-weight:700}.manage-header .text-button:last-child{text-align:right}.manage-content{overscroll-behavior:contain;max-height:min(680px,100vh - 118px);padding:20px;overflow-y:auto}.manage-empty,.result-state{color:#7b8079;text-align:center;margin:24px 0;font-size:13px}.result-state.error{color:#b04c37}.managed-stop{background:#fffdf8;border:1px solid #e4e0d7;border-radius:16px;margin-bottom:16px;padding:18px}.managed-stop-title,.managed-stop li,.candidate-list button{justify-content:space-between;align-items:center;gap:12px;display:flex}.managed-stop-title{padding-bottom:10px}.danger-button{color:#bd5943;background:0 0;padding:4px;font-size:12px}.managed-stop ul{margin:0;padding:0;list-style:none}.managed-stop li{border-top:1px solid #eeebe4;padding:10px 0}.managed-amap{border-top:1px solid #eeebe4;justify-content:space-between;align-items:center;gap:12px;padding:11px 0;display:flex}.managed-amap>span{flex-direction:column;gap:2px;display:flex}.managed-amap small{color:#797e77;font-size:11px}.period-button{color:#186f4c;background:#edf4ef;border-radius:9px;padding:5px 9px;font-size:12px;font-weight:700}.managed-stop li span,.line-candidates button>span:first-child,.amap-candidates button>span:first-child{flex-direction:column;gap:2px;min-width:0;display:flex}.managed-stop small,.line-candidates small,.amap-candidates small{color:#797e77;font-size:11px}.icon-button{background:#f1eee7;border-radius:50%;flex:none;place-items:center;width:28px;height:28px;font-size:20px;display:grid}.icon-button.danger{color:#bd5943}.add-row-button{color:#186f4c;text-align:left;background:0 0;border-top:1px solid #eeebe4;width:100%;padding:10px 0 0;font-size:13px;font-weight:700}.managed-stop+.primary-button,.manage-empty+.primary-button{margin-top:4px}.logout-button{color:#a74f3d;background:0 0;border:1px solid #ddc8c0;border-radius:12px;width:100%;margin-top:18px;padding:11px;font-weight:700}.period-help{color:#6f756e;margin:0 0 18px;font-size:13px;line-height:1.55}.clear-period-button{color:#a74f3d;background:0 0;width:100%;margin-top:10px;padding:11px;font-weight:700}.search-field{flex-direction:column;gap:7px;display:flex}.search-field span{color:#5e665f;font-size:12px;font-weight:700}.search-field input{color:#1e261f;width:100%;font:inherit;background:#fffdf8;border:1px solid #d3cfc6;border-radius:12px;outline:0;padding:12px 13px}.search-field input:focus{border-color:#5c987e;box-shadow:0 0 0 3px #186f4c1a}.candidate-list{background:#fffdf8;border:1px solid #e2ded5;border-radius:14px;margin-top:12px;overflow:hidden}.candidate-list:empty{display:none}.candidate-list button{color:#273028;text-align:left;background:0 0;width:100%;padding:13px 14px}.amap-candidates button{align-items:flex-start}.candidate-list button+button{border-top:1px solid #ebe7df}.candidate-list button>span:last-child{color:#186f4c;flex:none;font-size:12px;font-weight:700}.candidate-list button:disabled{cursor:default;opacity:.5}@media (width<=650px){.login-shell{padding:max(24px, env(safe-area-inset-top)) 14px 24px;align-items:start}.login-card{border-radius:20px;padding:24px 20px}.login-card h1{font-size:28px}.app-shell{width:min(100% - 32px,520px);padding-top:max(24px, env(safe-area-inset-top));padding-bottom:max(28px, env(safe-area-inset-bottom))}.page-header{align-items:center}.eyebrow{display:none}h1{letter-spacing:-.04em;font-size:28px;font-weight:700}.refresh-button{gap:5px;padding:7px 10px;font-size:13px}.manage-button{padding:7px 9px;font-size:13px}.station-list{gap:42px;margin-top:30px}.station-heading{gap:10px;margin-bottom:14px}.station-pin{border-width:2px;width:9px;height:9px;box-shadow:0 0 0 2px #e1533f}.station-heading h2{margin-bottom:0;font-size:18px}.station-heading p,.route-header p{font-size:11px}.route-grid{grid-template-columns:1fr;gap:14px}.route-card{border-radius:16px;min-height:0;padding:16px}.route-header{gap:10px;padding-bottom:13px}.route-badge{border-radius:11px;width:42px;height:42px;font-size:16px}.route-header h2{margin-bottom:0;font-size:16px}.arrival-list{padding:12px 0 2px}.arrival-list li{padding:0 10px}.arrival-rank{font-size:12px}.arrival-list strong{font-size:14px}.empty-arrivals{min-height:52px}.empty-arrivals strong{font-size:13px}.empty-arrivals span{font-size:11px}.map-link{font-size:12px}.page-footer{gap:6px;padding-top:10px;font-size:11px}.station-footer{justify-content:space-between;gap:12px;padding:12px 2px 0;font-size:11px}.empty-state{min-height:65vh;padding:32px 18px}.panel-backdrop{padding:0}.manage-panel{max-height:calc(100dvh - max(12px, env(safe-area-inset-top)));border-radius:22px 22px 0 0}.manage-header{padding-top:14px}.manage-content{max-height:calc(100dvh - 74px - max(12px, env(safe-area-inset-top)));padding:18px;padding-bottom:max(24px, env(safe-area-inset-bottom))}}
