/* Visual size is independent of the hit target. No invisible overlapping overlays. */
body :is(button,a.btn,summary,[role=button],input[type=submit],input[type=button],.file-picker){min-height:44px;min-width:44px;touch-action:manipulation;-webkit-tap-highlight-color:transparent;transition:scale var(--gwh-touch-release) var(--gwh-touch-curve),background-color 140ms,box-shadow 140ms}
body :is(button,a.btn,summary,[role=button],.file-picker).gwh-touch-down{scale:.97;filter:brightness(.96);transition:scale 55ms ease-out,filter 55ms}
body :is(button,a.btn,summary,[role=button]).gwh-touch-pressed{scale:.955;box-shadow:none!important}
body :is(button,a.btn,[role=button])[aria-busy=true]{cursor:progress;opacity:.8}
body :is(button,a.btn,[role=button])[data-touch-state=loading]::after{content:'';display:inline-block;width:12px;height:12px;margin-inline-start:6px;vertical-align:middle;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:gwh-touch-spin .7s linear infinite}
body button[data-touch-state=success]::after{content:' ✓';font-weight:900}
body button[data-touch-state=error]::after{content:' !';font-weight:900}
body label:has(>input:is([type=checkbox],[type=radio])){min-height:44px;display:flex;align-items:center;gap:8px;touch-action:manipulation}
body input:is([type=checkbox],[type=radio]){min-width:24px;min-height:24px;flex-shrink:0}
body :is(button,a.btn,[role=button]):is(:disabled,[aria-disabled=true]){cursor:not-allowed;scale:1;filter:none;opacity:.55}
.gwh-sr-only{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;overflow:hidden!important;clip-path:inset(50%);white-space:nowrap}
@keyframes gwh-touch-spin{to{rotate:360deg}}
/* Dots remain small visually, but each has its own 44px target. */
body .carousel-dots{gap:0}
body .carousel-dots .dot{width:44px;height:44px;min-width:44px;padding:0!important;background:transparent!important;border:0!important;box-shadow:none!important;display:grid;place-items:center;outline-offset:-6px}
body .carousel-dots .dot::before{content:'';width:12px;height:12px;border:2px solid var(--ink,#171719);border-radius:50%;background:var(--cream,#fff8eb)}
body .carousel-dots .dot.active::before{background:var(--lime,#c8f15c)}
body .carousel-dots .dot[aria-pressed=true]:not(:focus-visible){outline:none}
[data-touch-gallery]{touch-action:pan-y pinch-zoom;overflow:hidden}
[data-touch-gallery] img{user-select:none;-webkit-user-select:none;-webkit-user-drag:none}
[data-touch-hold]{-webkit-touch-callout:none;user-select:none;-webkit-user-select:none;transition:background-color 80ms;touch-action:pan-y pinch-zoom}
.gwh-hold-contact{background:color-mix(in srgb,currentColor 10%,transparent);border-radius:8px}
.gwh-touch-actions{background:var(--gwh-surface-warm,#fff8eb);color:var(--gwh-text,#171719);padding:16px;min-width:min(360px,90vw)}
.gwh-touch-actions>button{display:block;width:100%;margin-block:8px;text-align:left}
@media(max-width:700px){

 body .gw-toast{bottom:calc(96px + var(--gwh-keyboard-inset,0px) + env(safe-area-inset-bottom,0px))}
 body :is(input,textarea,select){scroll-margin-block:80px 100px}
 body .top{padding-top:env(safe-area-inset-top,0px)}
}
@media(prefers-reduced-motion:reduce){body .gwh-touch-down,body .gwh-touch-pressed{scale:1!important}body [data-touch-state=loading]::after{animation:none;border-style:dotted}body *,body *::before,body *::after{transition-duration:.01ms!important}}
