:root{--green: #0f6b4b;--green-2: #12805a;--green-soft: #e3f2eb;--on-green: #ffffff;--ink: #1f2522;--muted: #5f6b66;--faint: #9aa5a0;--line: #e4e8e6;--line-2: #eef1ef;--bg: #ffffff;--soft: #f4f6f5;--hover: #eef2f0;--elev: #ffffff;--red: #d93025;--red-soft: #fce8e6;--amber: #b06000;--amber-soft: #fef0d9;--violet: #6a4bb5;--violet-soft: #efeafa;--blue: #1a73e8;--shadow-1: 0 1px 2px rgba(20, 30, 26, .12), 0 1px 3px 1px rgba(20, 30, 26, .06);--shadow-2: 0 2px 6px 2px rgba(20, 30, 26, .1), 0 1px 2px rgba(20, 30, 26, .14);--shadow-3: 0 8px 28px rgba(20, 30, 26, .18), 0 2px 6px rgba(20, 30, 26, .08);--r-lg: 22px;--r-md: 14px;--r-sm: 10px;--panel-w: 404px;--gap: 12px;color-scheme:light}@media (prefers-color-scheme: dark){:root:not([data-theme=light]){--green: #5fd3a0;--green-2: #45c08a;--green-soft: #183a2d;--on-green: #0b1f17;--ink: #e7ecea;--muted: #a2afa9;--faint: #6c7873;--line: #2c3532;--line-2: #242c29;--bg: #161c1a;--soft: #1e2623;--hover: #252f2b;--elev: #1b2220;--red: #f28b82;--red-soft: #3b2220;--amber: #f3b65b;--amber-soft: #3a2d17;--violet: #b7a3f0;--violet-soft: #2a2340;--blue: #8ab4f8;--shadow-1: 0 1px 3px rgba(0, 0, 0, .5);--shadow-2: 0 2px 10px rgba(0, 0, 0, .55);--shadow-3: 0 10px 30px rgba(0, 0, 0, .6);color-scheme:dark}}:root[data-theme=dark]{--green: #5fd3a0;--green-2: #45c08a;--green-soft: #183a2d;--on-green: #0b1f17;--ink: #e7ecea;--muted: #a2afa9;--faint: #6c7873;--line: #2c3532;--line-2: #242c29;--bg: #161c1a;--soft: #1e2623;--hover: #252f2b;--elev: #1b2220;--red: #f28b82;--red-soft: #3b2220;--amber: #f3b65b;--amber-soft: #3a2d17;--violet: #b7a3f0;--violet-soft: #2a2340;--blue: #8ab4f8;--shadow-1: 0 1px 3px rgba(0, 0, 0, .5);--shadow-2: 0 2px 10px rgba(0, 0, 0, .55);--shadow-3: 0 10px 30px rgba(0, 0, 0, .6);color-scheme:dark}*{box-sizing:border-box}html,body,#root{margin:0;height:100%}body{font-family:Vazirmatn,Tahoma,sans-serif;color:var(--ink);background:var(--bg);font-size:14px;line-height:1.7;-webkit-font-smoothing:antialiased}button{font:inherit;color:inherit;cursor:pointer}button:disabled{cursor:default}:focus-visible{outline:2px solid var(--blue);outline-offset:2px}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}.muted{color:var(--muted)}.boot{display:grid;place-items:center;height:100%;padding:16px;background:var(--soft)}.boot__card{display:flex;flex-direction:column;align-items:center;gap:10px;text-align:center;color:var(--muted)}.boot__card b{color:var(--ink);font-size:16px}.app{position:relative;height:100%;overflow:hidden}.map-wrap,.app .map{position:absolute;top:0;right:0;bottom:0;left:0}.panel{position:absolute;z-index:3;top:var(--gap);right:var(--gap);bottom:var(--gap);width:var(--panel-w);background:var(--bg);border-radius:var(--r-lg);box-shadow:var(--shadow-3);display:flex;flex-direction:column;overflow:hidden;transition:transform .28s cubic-bezier(.2,.8,.2,1),height .28s cubic-bezier(.2,.8,.2,1)}.app--closed .panel{transform:translate(calc(100% + var(--gap) + 8px))}.panel__head{padding:16px 16px 0;background:var(--bg);position:relative;z-index:2;box-shadow:0 1px 0 var(--line)}.panel__body{flex:1;overflow:auto;padding:14px 16px 18px;overscroll-behavior:contain;scrollbar-width:thin}.sheet-handle{display:none}.panel-toggle{position:absolute;z-index:3;top:22px;right:calc(var(--panel-w) + var(--gap));width:24px;height:48px;border:0;border-radius:10px 0 0 10px;background:var(--bg);color:var(--muted);box-shadow:-2px 1px 4px #141e1a1f;display:grid;place-items:center;transition:right .28s cubic-bezier(.2,.8,.2,1)}.panel-toggle:hover{color:var(--ink)}.panel-toggle svg{transform:scaleX(-1);transition:transform .28s}.app--closed .panel-toggle{right:0}.app--closed .panel-toggle svg{transform:none}.brand{display:flex;align-items:center;gap:10px;margin-bottom:14px}.brand__lg{width:34px;height:34px;border-radius:11px;background:linear-gradient(140deg,var(--green-2),var(--green));display:grid;place-items:center;box-shadow:0 2px 6px color-mix(in srgb,var(--green) 35%,transparent)}.brand__txt{display:flex;flex-direction:column;line-height:1.25}.brand__txt b{font-size:16px;font-weight:800}.brand__txt small{color:var(--muted);font-size:11.5px}.route-card{display:flex;align-items:center;gap:6px}.route-card__rail{display:flex;flex-direction:column;align-items:center;width:22px;flex:none;padding:2px 0}.rail__from{width:13px;height:13px;border-radius:50%;border:3px solid var(--blue);background:var(--bg)}.rail__dots{height:22px;width:2px;margin:4px 0;background:radial-gradient(circle,var(--faint) 1.1px,transparent 1.4px) 0 0 / 2px 6px repeat-y}.route-card__fields{flex:1;display:flex;flex-direction:column;gap:8px;min-width:0}.field{position:relative;display:flex;align-items:center;gap:4px;border:1px solid var(--line);border-radius:var(--r-sm);padding:0 12px 0 4px;background:var(--soft);transition:border-color .15s,background .15s,box-shadow .15s}.field:hover{border-color:color-mix(in srgb,var(--faint) 60%,var(--line))}.field--active{border-color:var(--blue);background:var(--bg);box-shadow:0 0 0 3px color-mix(in srgb,var(--blue) 16%,transparent)}.field input{flex:1;min-width:0;border:0;outline:0;background:transparent;font:inherit;color:inherit;padding:10px 0;text-overflow:ellipsis}.field input::placeholder{color:var(--faint)}.icon-btn{border:0;background:transparent;padding:7px;border-radius:50%;color:var(--muted);display:grid;place-items:center;transition:background .15s,color .15s}.icon-btn:hover:not(:disabled){background:var(--hover);color:var(--ink)}.icon-btn:disabled{opacity:.4}.field__clear{padding:5px}.swap{flex:none}.suggest{position:absolute;z-index:10;top:calc(100% + 6px);right:-30px;left:-2px;margin:0;padding:6px;list-style:none;background:var(--elev);border-radius:var(--r-md);box-shadow:var(--shadow-3);max-height:340px;overflow:auto}.suggest li{display:flex;gap:10px;align-items:center;padding:7px 8px;border-radius:var(--r-sm);cursor:pointer}.suggest li.is-hi,.suggest li:hover{background:var(--hover)}.suggest__ic{width:32px;height:32px;border-radius:50%;background:var(--soft);display:grid;place-items:center;flex:none}.suggest b{display:block;font-weight:700;font-size:13.5px;line-height:1.5}.suggest small{color:var(--muted);font-size:11.5px}.hint{display:flex;gap:6px;align-items:center;color:var(--muted);font-size:12px;margin:10px 28px 0 0}.modes{display:flex;gap:4px;margin:12px 0 0;padding:0 0 12px}.modes::-webkit-scrollbar{display:none}.mode{flex:1 1 auto;min-width:0;display:inline-flex;align-items:center;justify-content:center;gap:4px;border:1px solid var(--line);background:var(--bg);color:var(--muted);border-radius:999px;padding:5px 4px;font-size:12px;font-weight:700;white-space:nowrap;transition:background .15s,color .15s,border-color .15s}.mode span{overflow:hidden;text-overflow:ellipsis}.mode:hover:not(:disabled){background:var(--hover);color:var(--ink)}.mode--on,.mode--on:hover:not(:disabled){background:var(--green-soft);border-color:transparent;color:var(--green)}.mode:disabled{opacity:.4}.intro h2{font-size:18px;margin:4px 0 2px;font-weight:800}.intro>p{color:var(--muted);margin:0 0 14px;font-size:13px}.tips{list-style:none;margin:0 0 16px;padding:0;display:flex;flex-direction:column;gap:4px}.tips li{display:flex;gap:12px;align-items:center;padding:8px;border-radius:var(--r-md)}.tips li:hover{background:var(--soft)}.tips__ic{width:38px;height:38px;border-radius:12px;background:var(--green-soft);color:var(--green);display:grid;place-items:center;flex:none}.tips b{display:block;font-size:13.5px;line-height:1.5}.tips small{color:var(--muted);font-size:12px;line-height:1.6;display:block}.stats{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.stats div{background:var(--soft);border-radius:var(--r-md);padding:10px 6px;text-align:center}.stats b{display:block;font-size:19px;color:var(--green);font-weight:800;line-height:1.4}.stats small{color:var(--muted);font-size:11.5px}.alert{display:flex;gap:8px;align-items:center;background:var(--red-soft);color:var(--red);border-radius:var(--r-sm);padding:9px 12px;margin-bottom:10px;font-size:13px}.spin{width:22px;height:22px;border:2.5px solid var(--line);border-top-color:var(--green);border-radius:50%;animation:sp .8s linear infinite;display:inline-block}.spin--sm{width:18px;height:18px;border-width:2px;border-top-color:var(--blue)}@keyframes sp{to{transform:rotate(360deg)}}.skeleton{display:flex;flex-direction:column;gap:10px}.sk-card{border:1px solid var(--line-2);border-radius:var(--r-md);padding:14px;display:flex;flex-direction:column;gap:10px}.sk{height:12px;border-radius:6px;background:linear-gradient(90deg,var(--soft) 25%,var(--hover) 50%,var(--soft) 75%) 0 0 / 200% 100%;animation:shimmer 1.2s ease-in-out infinite}.sk--w40{width:40%;height:16px}.sk--w70{width:70%}.sk--w55{width:55%}@keyframes shimmer{to{background-position:-200% 0}}.empty{text-align:center;color:var(--muted);padding:30px 12px;display:flex;flex-direction:column;align-items:center;gap:4px}.empty__ic{width:56px;height:56px;border-radius:50%;background:var(--soft);display:grid;place-items:center;margin-bottom:6px}.empty p{color:var(--ink);margin:0;font-weight:700}.fine{display:flex;gap:6px;align-items:flex-start;color:var(--muted);font-size:11.5px;line-height:1.7;margin:14px 2px 0}.fine svg{margin-top:3px}.list-head{display:flex;justify-content:space-between;align-items:center;margin:0 2px 8px;font-size:13px}.list-head span{display:inline-flex;gap:4px;align-items:center;color:var(--muted);font-size:11.5px}.opts{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}.opt{border:1px solid var(--line);border-radius:var(--r-md);padding:12px 14px;cursor:pointer;transition:border-color .15s,box-shadow .15s,background .15s;outline:none}.opt:hover{box-shadow:var(--shadow-1)}.opt--on{border-color:color-mix(in srgb,var(--green-2) 55%,var(--line));background:color-mix(in srgb,var(--green-soft) 35%,var(--bg))}.opt:focus-visible{box-shadow:0 0 0 2px var(--blue)}.opt__top{display:flex;justify-content:space-between;align-items:baseline;gap:10px}.opt__time{font-weight:800;font-size:16.5px;display:flex;align-items:center;gap:8px}.opt__clock{color:var(--muted);font-size:12.5px;white-space:nowrap;direction:rtl}.opt__meta{display:flex;gap:8px;align-items:center;color:var(--muted);font-size:12px;margin-top:8px;flex-wrap:wrap}.opt__meta>span:not(.badge){display:inline-flex;gap:3px;align-items:center}.opt__go{margin-inline-start:auto;color:var(--blue);font-weight:700;opacity:0;transition:opacity .15s}.opt:hover .opt__go,.opt--on .opt__go,.opt:focus-visible .opt__go{opacity:1}.dot-sep{width:3px;height:3px;border-radius:50%;background:var(--faint)}.tag{font-size:10.5px;font-weight:800;color:var(--green);background:var(--green-soft);border-radius:999px;padding:0 8px;line-height:1.9}.badge{font-size:10.5px;border-radius:6px;padding:0 6px;font-weight:700;line-height:1.8;margin-inline-start:4px}.badge--violet{background:var(--violet-soft);color:var(--violet)}.strip{display:flex;flex-wrap:wrap;gap:3px;align-items:center;margin-top:8px}.chip{display:inline-flex;align-items:center;gap:3px;border-radius:6px;padding:1px 7px;font-size:11.5px;font-weight:700;line-height:1.7}.chip--walk{background:var(--soft);color:var(--muted)}.chip--line{color:#fff;max-width:200px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;box-shadow:inset 0 0 0 1px #00000014}.back{border:0;background:transparent;color:var(--blue);display:inline-flex;align-items:center;gap:2px;padding:4px 6px 4px 10px;margin:-4px -6px 8px 0;border-radius:999px;font-weight:700}.back:hover{background:var(--hover)}.detail__sum{background:var(--soft);border-radius:var(--r-md);padding:12px 14px;margin-bottom:14px}.detail__row{display:flex;justify-content:space-between;align-items:baseline}.detail__row b{font-size:19px;font-weight:800}.detail__row span{color:var(--muted);font-size:12.5px}.tl{list-style:none;margin:0;padding:0}.tl>li{display:grid;grid-template-columns:28px 1fr;column-gap:12px}.tl__rail{display:flex;justify-content:center;position:relative}.tl__body{padding:2px 0;min-width:0}.tl__body b{display:block;font-size:13.5px;line-height:1.6}.tl__body small{color:var(--muted);font-size:12px;display:block}.tl__node .tl__rail{align-items:center}.tl__dot{width:14px;height:14px;border-radius:50%;background:var(--bg);border:3px solid var(--c, var(--ink))}.tl__dot--start{border-color:var(--blue)}.tl__leg .tl__rail{padding:2px 0}.tl__bar{width:6px;border-radius:3px;background:var(--c);height:100%}.tl__leg--walk .tl__bar{width:4px;background:radial-gradient(circle,var(--faint) 1.8px,transparent 2.1px) 50% 0 / 4px 8px repeat-y}.tl__body--leg{padding:12px 0 14px}.tl__mode{display:inline-flex;gap:4px;align-items:center;font-weight:700;font-size:13px}.tl__line{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-bottom:2px;font-size:12.5px}.link{border:0;background:transparent;color:var(--blue);padding:2px 0;font-size:12px;font-weight:700;display:inline-flex;align-items:center;gap:2px;margin-top:4px}.link svg{transform:rotate(-90deg)}.link[aria-expanded=true] svg{transform:rotate(90deg)}.inter{margin:4px 0 0;padding:0 16px 0 0;font-size:12px;color:var(--muted)}.inter li{padding:1px 0}.inter .is-virtual{opacity:.7}.street__hero{display:flex;gap:14px;align-items:center;background:var(--soft);border-radius:var(--r-md);padding:14px}.street__ic{width:44px;height:44px;border-radius:14px;display:grid;place-items:center;flex:none}.street__hero b{font-size:21px;font-weight:800;display:block;line-height:1.35}.street__hero small{color:var(--muted);font-size:12.5px}.via{margin-top:14px}.via>small{color:var(--muted);font-size:12px;display:block;margin-bottom:4px}.via>div{display:flex;flex-wrap:wrap;gap:6px}.via__chip{background:var(--bg);border:1px solid var(--line);border-radius:999px;padding:1px 10px;font-size:12.5px}.mk--from{width:22px;height:22px;border-radius:50%;background:#fff;box-shadow:0 1px 4px #00000059;display:grid;place-items:center;cursor:grab}.mk--from span{width:14px;height:14px;border-radius:50%;background:#1a73e8;display:block}.mk--to{cursor:grab;filter:drop-shadow(0 1px 2px rgba(0,0,0,.35))}.map-ctrls{position:absolute;z-index:2;left:16px;bottom:112px;display:flex;flex-direction:column;gap:10px;transition:bottom .28s}.map-btn{width:40px;height:40px;border:0;background:var(--elev);color:var(--muted);display:grid;place-items:center;border-radius:12px;box-shadow:var(--shadow-2);transition:color .15s,background .15s}.map-btn:hover:not(:disabled){color:var(--ink);background:var(--soft)}.map-btn-group{display:flex;flex-direction:column;border-radius:12px;box-shadow:var(--shadow-2);overflow:hidden}.map-btn-group .map-btn{box-shadow:none;border-radius:0}.map-btn-group .map-btn+.map-btn{border-top:1px solid var(--line)}.layers{position:absolute;z-index:4;left:16px;bottom:24px;transition:bottom .28s}.layers__btn{position:relative;width:74px;height:74px;padding:0;border:2px solid #fff;border-radius:14px;overflow:hidden;box-shadow:var(--shadow-2);background:#ddd;transition:transform .15s,box-shadow .15s}.layers__btn:hover,.layers__btn.is-open{transform:translateY(-1px);box-shadow:var(--shadow-3)}.layers__btn>svg{display:block;width:100%;height:100%}.layers__btn-label{position:absolute;inset:auto 0 0 0;display:flex;align-items:center;justify-content:center;gap:4px;padding:10px 0 3px;background:linear-gradient(transparent,#0000009e);color:#fff;font-size:11.5px;font-weight:700}.layers__card{position:absolute;left:0;bottom:86px;width:300px;background:var(--elev);border-radius:18px;box-shadow:var(--shadow-3);padding:12px 14px 14px;animation:pop .18s cubic-bezier(.2,.8,.2,1);transform-origin:bottom left}@keyframes pop{0%{opacity:0;transform:translateY(6px) scale(.97)}}.layers__head{display:flex;justify-content:space-between;align-items:center;margin-bottom:2px}.layers__head b{font-size:14px}.layers__card h4{margin:8px 0;font-size:12px;color:var(--muted);font-weight:700}.layers__grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}.thumb{border:0;background:transparent;padding:0;display:flex;flex-direction:column;align-items:center;gap:5px;color:var(--muted)}.thumb__frame{position:relative;width:100%;aspect-ratio:1;border-radius:12px;overflow:hidden;box-shadow:inset 0 0 0 1px var(--line);outline:2px solid transparent;outline-offset:1px;transition:outline-color .15s}.thumb__img{display:block;width:100%;height:100%}.thumb:hover .thumb__frame{outline-color:var(--line)}.thumb--on .thumb__frame,.thumb--on:hover .thumb__frame{outline-color:var(--blue)}.thumb__check{position:absolute;top:5px;right:5px;width:18px;height:18px;border-radius:50%;background:var(--blue);display:grid;place-items:center;box-shadow:0 0 0 2px #fff}.thumb__label{font-size:11.5px;font-weight:700;line-height:1.4;text-align:center}.thumb--on .thumb__label{color:var(--blue)}.map-toast{position:absolute;z-index:5;left:50%;top:18px;transform:translate(-50%);background:#2b3230;color:#fff;padding:8px 16px;border-radius:999px;font-size:13px;box-shadow:var(--shadow-2);animation:pop .2s}.app .maplibregl-ctrl-bottom-right{right:calc(var(--panel-w) + var(--gap) + 4px);transition:right .28s}.app.app--closed .maplibregl-ctrl-bottom-right{right:0}.maplibregl-ctrl-attrib{font-family:Vazirmatn,Tahoma,sans-serif;font-size:10.5px}.maplibregl-ctrl-attrib.maplibregl-compact{opacity:.7}@media (max-width: 760px){.app{--sheet-h: 52%}.app.sheet--peek{--sheet-h: 214px}.app.sheet--full{--sheet-h: calc(100% - 56px) }.panel{top:auto;right:0;left:0;bottom:0;width:auto;height:var(--sheet-h);border-radius:var(--r-lg) var(--r-lg) 0 0}.app--closed .panel{transform:none}.panel-toggle{display:none}.sheet-handle{display:grid;place-items:center;width:100%;height:20px;border:0;background:var(--bg);padding:0;flex:none}.sheet-handle span{width:38px;height:4px;border-radius:2px;background:var(--line)}.panel__head{padding:2px 14px 0}.panel__body{padding:12px 14px 18px}.brand{display:none}.modes{margin-top:10px;padding-bottom:10px}.map-ctrls{bottom:calc(var(--sheet-h) + 98px);left:12px}.layers{bottom:calc(var(--sheet-h) + 12px);left:12px}.layers__btn{width:64px;height:64px}.layers__card{position:fixed;z-index:20;left:0;right:0;bottom:0;width:auto;border-radius:var(--r-lg) var(--r-lg) 0 0;padding:14px 18px 22px;animation-name:sheet-up;box-shadow:0 -6px 30px #00000038}@keyframes sheet-up{0%{transform:translateY(100%)}}.sheet--full .map-ctrls,.sheet--full .layers{opacity:0;pointer-events:none}.app .maplibregl-ctrl-bottom-right,.app.app--closed .maplibregl-ctrl-bottom-right{right:0;bottom:var(--sheet-h)}.suggest{right:-28px;left:-40px}}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.01ms!important;transition-duration:.01ms!important}}
