/* App gestures: only editable fields and explicitly copyable text select on drag. */
:root{--app-ease:cubic-bezier(.22,1,.36,1)}
html,body{overscroll-behavior:none}
body{overflow:hidden;-webkit-text-size-adjust:100%}
#root,dialog{-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}
:is(input,textarea,[contenteditable='true'],.selectable-text,.service-terms){-webkit-user-select:text;user-select:text;-webkit-touch-callout:default}
#root img,dialog img{-webkit-user-drag:none}
button,a,input,select,textarea{touch-action:manipulation;-webkit-tap-highlight-color:transparent}
[data-design] #root{height:100dvh;max-height:none;padding-left:env(safe-area-inset-left,0px);padding-right:env(safe-area-inset-right,0px)}
[data-design] .navbar{padding-top:calc(env(safe-area-inset-top,0px) + 12px);padding-bottom:12px}
[data-design] .bottom-nav{padding-bottom:calc(env(safe-area-inset-bottom,0px) + 8px)}
.navbar .version-button,.navbar .icon-button{min-height:44px;min-width:44px}
.navbar .wordmark,.navbar .location-button{min-height:44px}
.service-filters input,.service-filters select{min-height:44px}
#root select,dialog select{-webkit-appearance:none;appearance:none;padding-right:28px;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Cpath d='m2 6 6 6 6-6' fill='none' stroke='%23989898' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");background-repeat:no-repeat;background-size:16px 16px;background-position:right 4px center}
.service-home .map-topline button{min-height:44px}
:is(.scroll-page,.list-explorer,.sheet-content,dialog){-webkit-overflow-scrolling:touch;overscroll-behavior-y:contain}
.sheet-content{scrollbar-width:none}
.sheet-content::-webkit-scrollbar{display:none}
.sheet-summary>div{flex:1;min-height:72px;display:flex;flex-direction:column;justify-content:center;touch-action:none;cursor:grab}
.map-sheet.is-dragging .sheet-summary>div{cursor:grabbing}
.sheet-grip{transition:width 160ms var(--app-ease),background-color 160ms ease}
.map-sheet.is-dragging .sheet-grip{width:48px;background:var(--text-main)}
.cupertino-pane-wrapper.yfc-sheet-module>.pane{will-change:transform}
:is(.primary,.secondary,.chip,.date-button,.nav-button,.version-button){transition:transform 140ms var(--app-ease),opacity 140ms ease,background-color 180ms ease}
:is(.primary,.secondary,.chip,.date-button,.version-button):active{transform:scale(.97);opacity:.8}
.nav-button:active{transform:scale(.94)}
.nav-button[aria-current=page]:before{animation:app-nav-in 180ms var(--app-ease)}
main>:is(.scroll-page,.list-explorer){animation:app-page-in 220ms var(--app-ease)}
dialog[open]{animation:app-dialog-in 280ms var(--app-ease)}
dialog[open]::backdrop{animation:app-backdrop-in 180ms ease-out}
.modal-head .icon-button{min-width:44px;min-height:44px;flex-shrink:0}
.modal-body{padding-bottom:calc(24px + env(safe-area-inset-bottom,0px))}
@keyframes app-nav-in{from{transform:scaleX(.35);opacity:.5}to{transform:scaleX(1);opacity:1}}
@keyframes app-page-in{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}
@keyframes app-dialog-in{from{opacity:0;transform:translateY(32px)}to{opacity:1;transform:translateY(0)}}
@keyframes app-backdrop-in{from{opacity:0}to{opacity:1}}
@media(max-width:600px),(pointer:coarse){
  :is(.field input,.field select,.field textarea,.service-filters input,.service-filters select){font-size:16px}
  [data-design] dialog{inset:auto 0 0;margin:0 auto;width:100%;max-width:480px;max-height:calc(100dvh - env(safe-area-inset-top,0px) - 16px);border-radius:24px 24px 0 0}
  dialog[open]{animation-name:app-sheet-in;animation-duration:300ms}
  @keyframes app-sheet-in{from{transform:translateY(100%)}to{transform:translateY(0)}}
}
@media(prefers-reduced-motion:reduce){
  *,*::before,*::after{animation:none!important;transition:none!important;scroll-behavior:auto!important}
}
