@font-face{font-family:Roboto;src:url('./fonts/Roboto-Regular.woff2') format('woff2');font-weight:400;font-display:swap}@font-face{font-family:Roboto;src:url('./fonts/Roboto-SemiBold.woff2') format('woff2');font-weight:600;font-display:swap}@font-face{font-family:'Roboto Mono';src:url('./fonts/RobotoMono-Regular.woff2') format('woff2');font-display:swap}
*{box-sizing:border-box}body{margin:0;background:var(--surface-page);color:var(--text-body);font:15px/1.5 Roboto,Arial,sans-serif;overflow:hidden}button,select{font:inherit;color:var(--text-body);background:var(--surface-card);border:1px solid var(--line-control);border-radius:var(--radius-md);min-height:40px;padding:8px 16px;cursor:pointer}button:hover,select:hover{background:var(--surface-floating)}button:active{background:var(--state-pressed)}button:disabled{color:var(--text-disabled);cursor:wait}button:focus-visible,select:focus-visible,a:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px}.primary{background:var(--accent);color:var(--text-on-accent);border-color:var(--accent)}.primary:hover{background:var(--accent-hover)}.primary:active{background:var(--accent-pressed)}[hidden]{display:none!important}.mono{font-family:'Roboto Mono',monospace;font-variant-numeric:tabular-nums}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}#map,#map canvas{width:100%;height:100%;display:block;position:absolute;inset:0;touch-action:none}#map canvas{outline-offset:-4px}.panel{background:var(--surface-card);border-radius:var(--radius-md)}.toolbar{position:absolute;top:20px;left:20px;padding:12px;display:flex;gap:8px;align-items:center;z-index:var(--z-haftend)}.brand{display:flex;align-items:center;gap:8px;color:var(--text-body);text-decoration:none;padding:0 8px;font-size:20px}.brand strong{font-weight:600}.separator{width:1px;height:28px;background:var(--line)}.modebar{position:absolute;right:20px;top:20px;display:flex;gap:8px;padding:12px;z-index:var(--z-haftend)}.info{position:absolute;left:20px;top:104px;padding:20px;width:376px;max-height:calc(100dvh - 220px);overflow:auto;z-index:var(--z-panel)}h2{font-size:20px;font-weight:600;line-height:1.4;margin:0 0 16px}p{margin:0 0 16px}p:last-child{margin-bottom:0}.info p{color:var(--text-muted)}.loading{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);padding:24px;width:320px;display:flex;flex-direction:column;gap:12px;z-index:var(--z-panel)}.loading span{font-size:14px;color:var(--text-muted)}progress{accent-color:var(--accent);width:100%;height:4px}footer{position:absolute;bottom:20px;left:20px;right:20px;display:flex;justify-content:space-between;gap:12px;align-items:flex-end;pointer-events:none;z-index:var(--z-haftend)}footer>div{pointer-events:auto}.location{padding:12px 16px;display:flex;gap:16px;font-size:14px}.location .mono{color:var(--text-muted)}.attribution{display:flex;gap:12px;align-items:center;padding:8px 12px;font-size:14px}.attribution button{min-height:40px;padding:4px 8px}#labels{pointer-events:none;position:absolute;inset:0;overflow:hidden}.map-label{position:absolute;white-space:nowrap;background:var(--surface-card);color:var(--text-body);border-radius:var(--radius-xs);padding:4px 8px;font-size:14px;transform:translate(-50%,-100%);pointer-events:none}.map-label.mountain,.map-label.lake,.map-label.local{color:var(--text-muted)}#labels-toggle[aria-pressed="true"]{background:var(--surface-floating);border-color:var(--text-body)}#crosshair{position:absolute;left:50%;top:50%;color:var(--text-body);font:24px/1 monospace;pointer-events:none;transform:translate(-50%,-50%)}#touch-controls{position:absolute;bottom:104px;left:20px;right:20px;display:flex;justify-content:space-between;pointer-events:none}.pad{display:flex;align-items:center;flex-direction:column;padding:8px;pointer-events:auto}.pad div{display:flex;gap:4px}.pad button{width:48px;height:48px;user-select:none;touch-action:none}#altitude-controls{pointer-events:auto;display:flex;flex-direction:column;gap:8px;padding:8px}dialog{color:var(--text-body);background:var(--surface-card);border:0;border-radius:var(--radius-lg);max-width:680px;width:calc(100% - 32px);padding:24px;max-height:calc(100dvh - 64px);overflow:auto}dialog::backdrop{background:var(--scrim)}dialog header{display:flex;justify-content:space-between;align-items:flex-start;gap:16px}dialog dt{font-weight:600;margin-top:16px}dialog dd{margin:4px 0 0;color:var(--text-muted)}a{color:var(--link);text-underline-offset:3px}
@media(max-width:1080px){.toolbar{right:20px}.modebar{top:100px}.info{top:180px}.location{flex-direction:column;gap:0}}@media(max-width:600px){button,select{min-height:48px;font-size:16px;padding:8px 12px}.toolbar{top:12px;left:12px;right:12px;flex-wrap:wrap;padding:8px;gap:8px}.brand{font-size:20px;padding:0 4px}.separator{display:none}.toolbar #place{flex:1;max-width:calc(100% - 152px)}.toolbar #help{flex:1}.modebar{top:144px;left:12px;right:12px;padding:8px;gap:8px}.modebar select{min-width:0;flex:1;max-width:48%}.modebar button{flex:1;font-size:14px;padding:8px}.info{top:212px;left:12px;right:12px;width:auto;max-height:calc(100dvh - 300px)}footer{left:12px;right:12px;bottom:12px;gap:8px}.location{font-size:11px;padding:8px}.attribution{font-size:11px;gap:4px;padding:4px 8px}.attribution button{font-size:11px;min-height:44px;padding:4px}#touch-controls{left:12px;right:12px;bottom:88px}dialog{padding:20px}.map-label{font-size:12px}.map-label.mountain{font-size:11px}dialog header button{font-size:14px}body{font-size:16px}}
@media(max-width:600px){footer{flex-wrap:wrap}.attribution{margin-left:auto}.map-label{line-height:20px}}
/* Compact map chrome: established logo, type, colours and focus treatment. */
body.app-started .toolbar{top:12px;left:12px;right:auto;width:max-content;max-width:calc(100% - 24px);display:flex;flex-wrap:nowrap;gap:4px;padding:4px}
body.app-started .toolbar .brand{flex:0 0 auto}
body.app-started .toolbar #place{width:144px;min-width:0;max-width:144px;flex:0 1 144px;min-height:40px;padding:6px 8px;font-size:15px;text-overflow:ellipsis}
body.app-started .toolbar #help{flex:0 0 40px;width:40px;height:40px;min-height:40px;padding:8px;display:grid;place-items:center}
#help svg{display:block}
body.app-started .modebar{display:none!important}
/* Settings open below the permanent quality bar instead of covering it. */
body.app-started .info{top:128px;max-height:calc(100dvh - 144px)}
footer{left:auto;right:8px;bottom:4px;gap:0;pointer-events:none}
/* Attribution: deliberately tiny (user decision, below the 44 px target size);
   each link gets an invisible hit area of 23 px height without growing the ink. */
.attribution{display:flex;flex-direction:column;align-items:flex-end;padding:2px 6px;border-radius:6px;background:rgba(0,0,0,.62);pointer-events:auto}
.attribution a,.attribution button{position:relative;display:block;min-height:0;padding:0;border:0;border-radius:0;background:none;color:#fff;font:400 10.5px/13px Roboto,Arial,sans-serif;text-align:right;text-decoration:none;white-space:nowrap}
.attribution a::before,.attribution button::before{content:'';position:absolute;inset:-5px -6px}
/* The top link has no neighbour above; on 390 px the next link's padding covers its
   lower padding, so it grows upwards only (invisible, outside the backing): >= 22 px. */
.attribution a:first-child::before{top:-10px}
/* 390 px stack has a 4 px gap: the next link's upper pad must stop at the gap so it never
   covers the previous link's line box; the lower pad takes the difference (still >= 22 px). */
@media(max-width:600px){.attribution a+a::before{top:-4px;bottom:-6px}}
.attribution a:hover,.attribution a:focus-visible,.attribution button:hover{text-decoration:underline;text-underline-offset:2px}
.attribution :focus-visible{outline:2px solid var(--focus-ring);outline-offset:1px}
.attribution #data-warning{color:#ffd27a}
footer .poi-credit{display:none}
.sources-link{width:100%;margin-bottom:8px}
@media(max-width:600px){
 body.app-started .toolbar #help{min-width:44px;min-height:44px;width:44px;height:44px}
 .brand{font-size:18px;gap:6px;padding:0 4px;min-width:0}
 body.app-started .info{top:128px;max-height:calc(100dvh - 192px);padding:16px;left:12px;right:12px}
 footer{left:auto;right:8px;bottom:4px;flex-wrap:nowrap}
}
@media(max-width:360px){body.app-started .toolbar #place{width:104px;max-width:104px;flex-basis:104px}}
/* Native checkbox rows: full 44px target, short name, check on the right. */
.settings-check{display:flex;align-items:center;justify-content:space-between;gap:8px;min-height:44px;width:100%;padding:8px 4px;cursor:pointer;font-size:14px;line-height:1.4;border-radius:6px}
.settings-check:hover{background:var(--state-hover)}
.settings-check input{appearance:none;flex:none;position:relative;width:22px;height:22px;margin:0;border:1px solid var(--line-control);border-radius:6px;background:var(--surface-recessed);cursor:pointer}
.settings-check input:checked{background:var(--accent);border-color:var(--accent)}
.settings-check input:checked:after{content:'';position:absolute;left:7px;top:3px;width:5px;height:10px;border:solid var(--text-on-accent);border-width:0 2px 2px 0;transform:rotate(45deg)}
.settings-check input:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px}
.settings-check:has(input:disabled){color:var(--text-disabled);cursor:default}
.settings-check input:disabled{background:var(--surface-recessed);border-color:var(--line);cursor:default}
#help-panel>h2{font-size:16px;margin-bottom:8px}
#close-help{width:100%;min-height:44px;margin-top:8px}
@media(prefers-reduced-motion:reduce){*{transition:none!important;scroll-behavior:auto!important}}
