*{box-sizing:border-box;margin:0;padding:0}

:root{
--bg:#f7f7f5;
--dark:#151515;
--white:#fff;
--accent:#ff6b35;
--green:#2f8f5b;
--border:rgba(0,0,0,.08);
--shadow:0 10px 35px rgba(0,0,0,.16);
--radius:18px
}

html,body{
width:100%;
height:100%;
overflow:hidden;
font-family:Inter,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;
background:var(--bg)
}

button,select{
font:inherit
}

button{
cursor:pointer
}

.app{
position:relative;
width:100%;
height:100dvh;
overflow:hidden
}

#map{
position:absolute;
inset:0;
z-index:1
}

.topbar{
position:absolute;
top:0;
left:0;
right:0;
z-index:1000;
display:flex;
justify-content:space-between;
align-items:center;
padding:max(14px,env(safe-area-inset-top)) 16px 12px;
pointer-events:none
}

.brand{
display:flex;
align-items:center;
gap:10px;
padding:9px 13px;
background:rgba(255,255,255,.96);
border-radius:15px;
box-shadow:var(--shadow);
pointer-events:auto;
backdrop-filter:blur(12px)
}

.brand-icon{
display:grid;
place-items:center;
width:38px;
height:38px;
background:var(--dark);
border-radius:11px;
font-size:18px
}

.brand h1{
font-size:15px;
line-height:1.1;
font-weight:800
}

.brand span{
display:block;
margin-top:2px;
color:#777;
font-size:11px
}

.gps-button{
display:flex;
align-items:center;
gap:7px;
min-height:46px;
padding:0 16px;
border:0;
border-radius:14px;
background:var(--dark);
color:#fff;
font-size:13px;
font-weight:800;
box-shadow:var(--shadow);
pointer-events:auto;
transition:.2s
}

.gps-button:active{
transform:scale(.94)
}

.gps-button.loading-gps{
animation:gpsLoading 1s infinite
}

@keyframes gpsLoading{
50%{transform:scale(.95);opacity:.7}
}

.gps-status{
position:absolute;
left:50%;
top:88px;
z-index:900;
transform:translateX(-50%);
display:flex;
align-items:center;
gap:7px;
padding:8px 12px;
background:rgba(255,255,255,.94);
border-radius:100px;
box-shadow:0 5px 20px rgba(0,0,0,.12);
color:#666;
font-size:11px;
font-weight:700;
white-space:nowrap;
backdrop-filter:blur(10px)
}

.status-dot{
width:8px;
height:8px;
border-radius:50%;
background:#999;
transition:.25s
}

.gps-status.active .status-dot{
background:var(--green);
box-shadow:0 0 0 5px rgba(47,143,91,.15)
}

.control-panel{
position:absolute;
left:12px;
right:12px;
top:145px;
z-index:850;
display:flex;
flex-direction:column;
gap:9px;
pointer-events:none
}

.progress-box,
.filter-row,
.next-button{
pointer-events:auto
}

.progress-box{
padding:10px 13px;
background:rgba(255,255,255,.95);
border-radius:15px;
box-shadow:var(--shadow);
backdrop-filter:blur(10px)
}

.progress-top{
display:flex;
justify-content:space-between;
font-size:11px;
margin-bottom:7px
}

.progress-top span{
color:#777
}

.progress{
height:5px;
overflow:hidden;
background:#e7e7e4;
border-radius:20px
}

#progressBar{
height:100%;
width:0;
background:var(--green);
border-radius:20px;
transition:width .5s cubic-bezier(.2,.8,.2,1)
}

.filter-row{
display:flex;
gap:6px
}

.filter{
flex:1;
min-height:34px;
border:0;
border-radius:10px;
background:rgba(255,255,255,.94);
box-shadow:0 4px 15px rgba(0,0,0,.1);
color:#555;
font-size:11px;
font-weight:800;
transition:.2s
}

.filter.active{
background:var(--dark);
color:#fff;
transform:translateY(-1px)
}

.next-button{
display:flex;
align-items:center;
gap:11px;
width:100%;
min-height:54px;
padding:8px 13px;
border:0;
border-radius:15px;
background:var(--dark);
color:#fff;
box-shadow:var(--shadow);
text-align:left;
transition:.2s
}

.next-button:active{
transform:scale(.98)
}

.next-icon{
display:grid;
place-items:center;
width:35px;
height:35px;
background:#fff;
color:var(--dark);
border-radius:10px;
font-size:18px
}

.next-button small{
display:block;
font-size:8px;
opacity:.6;
letter-spacing:.1em
}

.next-button strong{
display:block;
margin-top:2px;
font-size:13px
}

.custom-post-marker{
background:transparent;
border:0
}

.post-marker{
position:relative;
display:flex;
align-items:center;
justify-content:center;
gap:4px;
min-width:55px;
height:38px;
padding:0 9px;
background:var(--post-color);
color:#fff;
border-radius:11px;
font-size:12px;
font-weight:900;
white-space:nowrap;
box-shadow:0 5px 15px rgba(0,0,0,.25);
transition:transform .18s,filter .18s
}

.post-marker::after{
content:"";
position:absolute;
bottom:-7px;
left:50%;
transform:translateX(-50%);
border-left:7px solid transparent;
border-right:7px solid transparent;
border-top:8px solid var(--post-color)
}

.post-marker.visited{
filter:grayscale(.45);
opacity:.72
}

.post-marker.visited b{
display:grid;
place-items:center;
width:17px;
height:17px;
border-radius:50%;
background:#fff;
color:var(--green);
font-size:10px
}

.post-marker:active{
transform:scale(.9)
}

.user-location-marker{
background:transparent;
border:0
}

.user-location{
position:relative;
width:40px;
height:40px
}

.user-dot{
position:absolute;
top:50%;
left:50%;
width:17px;
height:17px;
transform:translate(-50%,-50%);
border:4px solid white;
border-radius:50%;
background:#3185ff;
box-shadow:0 2px 8px rgba(0,0,0,.3);
z-index:2
}

.user-pulse{
position:absolute;
inset:0;
border-radius:50%;
background:rgba(49,133,255,.2);
animation:gpsPulse 2s infinite
}

@keyframes gpsPulse{
0%{transform:scale(.6);opacity:.9}
70%{transform:scale(1.3);opacity:0}
100%{opacity:0}
}

.route-line{
stroke-linecap:round;
stroke-linejoin:round
}

.post-panel{
position:absolute;
left:10px;
right:10px;
bottom:10px;
z-index:1100;
background:rgba(255,255,255,.98);
border-radius:24px;
box-shadow:0 15px 50px rgba(0,0,0,.25);
transform:translateY(calc(100% + 30px));
opacity:0;
transition:transform .35s cubic-bezier(.2,.8,.2,1),opacity .25s;
backdrop-filter:blur(15px)
}

.post-panel.visible{
transform:translateY(0);
opacity:1
}

.drag-indicator{
width:38px;
height:4px;
margin:9px auto 0;
border-radius:100px;
background:#ddd
}

.post-panel-content{
padding:15px 18px max(18px,env(safe-area-inset-bottom))
}

.close-button{
position:absolute;
right:12px;
top:10px;
width:34px;
height:34px;
border:0;
border-radius:50%;
background:#f1f1ef;
font-size:23px;
color:#555;
z-index:2;
transition:.2s
}

.close-button:active{
transform:rotate(90deg) scale(.9)
}

.post-number{
color:var(--accent);
font-size:10px;
font-weight:900;
letter-spacing:.12em
}

.post-panel h2{
margin-top:4px;
font-size:27px;
line-height:1.05;
color:var(--dark)
}

.distance-row{
display:flex;
align-items:center;
gap:8px;
margin-top:10px;
color:#666;
font-size:14px;
font-weight:600
}

.distance-icon{
display:grid;
place-items:center;
width:29px;
height:29px;
border-radius:9px;
background:#f1f1ef;
color:var(--dark)
}

.navigation-box{
margin-top:15px;
padding:13px;
border:1px solid var(--border);
border-radius:15px;
background:#fafaf8
}

.navigation-title{
font-size:9px;
font-weight:900;
letter-spacing:.12em;
color:#888;
margin-bottom:8px
}

.route-selects{
display:grid;
grid-template-columns:1fr 24px 1fr;
align-items:end;
gap:5px
}

.route-selects label{
display:block;
margin-bottom:4px;
font-size:10px;
font-weight:800;
color:#777
}

.route-selects select{
width:100%;
height:40px;
padding:0 7px;
border:1px solid #ddd;
border-radius:9px;
background:#fff;
font-size:11px;
font-weight:700;
outline:none
}

.route-arrow-small{
display:grid;
place-items:center;
height:40px;
color:#999
}

.route-button{
display:flex;
align-items:center;
justify-content:space-between;
width:100%;
min-height:55px;
margin-top:10px;
padding:0 16px;
border:0;
border-radius:13px;
background:var(--dark);
color:#fff;
font-size:15px;
font-weight:800;
transition:.18s
}

.route-button:active{
transform:scale(.98)
}

.visited-button{
display:flex;
align-items:center;
justify-content:center;
gap:8px;
width:100%;
min-height:48px;
margin-top:9px;
border:1px solid #ddd;
border-radius:13px;
background:#fff;
color:#555;
font-size:13px;
font-weight:800;
transition:.25s
}

.visited-button.done{
background:#e9f5ee;
border-color:#b9dfc7;
color:var(--green)
}

.visited-button:active{
transform:scale(.98)
}

.route-info{
position:absolute;
top:90px;
left:12px;
right:12px;
z-index:1050;
display:flex;
align-items:center;
justify-content:space-between;
padding:11px 13px;
border-radius:15px;
background:rgba(255,255,255,.97);
box-shadow:var(--shadow);
transform:translateY(-20px);
opacity:0;
pointer-events:none;
transition:.25s
}

.route-info.visible{
transform:translateY(0);
opacity:1;
pointer-events:auto
}

.route-info-main{
display:flex;
align-items:center;
gap:10px
}

.route-arrow{
display:grid;
place-items:center;
width:38px;
height:38px;
border-radius:11px;
background:var(--dark);
color:#fff
}

.route-info strong{
display:block;
font-size:15px
}

.route-info span{
color:#777;
font-size:11px
}

#clearRoute{
width:32px;
height:32px;
border:0;
border-radius:50%;
background:#f1f1f1;
font-size:20px
}

.locate-button{
position:absolute;
right:15px;
bottom:25px;
z-index:900;
width:50px;
height:50px;
border:0;
border-radius:16px;
background:#fff;
box-shadow:var(--shadow);
font-size:26px;
transition:.2s
}

.locate-button:active{
transform:scale(.9)
}

.loading{
position:absolute;
inset:0;
z-index:2000;
display:flex;
flex-direction:column;
align-items:center;
justify-content:center;
gap:12px;
background:rgba(255,255,255,.65);
backdrop-filter:blur(5px);
opacity:0;
pointer-events:none;
transition:.2s
}

.loading.visible{
opacity:1
}

.loading span{
padding:8px 12px;
border-radius:10px;
background:#fff;
box-shadow:var(--shadow);
font-size:13px;
font-weight:700
}

.spinner{
width:38px;
height:38px;
border:4px solid #ddd;
border-top-color:var(--dark);
border-radius:50%;
animation:spin .7s linear infinite
}

@keyframes spin{
to{transform:rotate(360deg)}
}

.toast{
position:absolute;
left:50%;
bottom:25px;
z-index:3000;
max-width:90%;
padding:11px 15px;
border-radius:13px;
background:var(--dark);
color:#fff;
font-size:12px;
font-weight:700;
box-shadow:var(--shadow);
transform:translate(-50%,20px);
opacity:0;
pointer-events:none;
transition:.25s
}

.toast.visible{
transform:translate(-50%,0);
opacity:1
}

@media(min-width:700px){

.control-panel{
left:20px;
right:auto;
top:110px;
width:390px
}

.post-panel{
left:20px;
right:auto;
width:420px;
bottom:20px
}

.route-info{
left:20px;
right:auto;
width:390px
}

.locate-button{
bottom:30px
}

}

@media(max-width:380px){

.brand{
padding:7px 9px
}

.brand-icon{
width:34px;
height:34px
}

.brand span{
display:none
}

.gps-button{
min-height:42px;
padding:0 12px
}

.control-panel{
top:125px
}

.post-panel h2{
font-size:24px
}

.route-selects{
grid-template-columns:1fr 18px 1fr
}

.route-selects select{
font-size:10px
}

}