/* v1.1.128 — Phase 39 interaction-state owner + Phase 71 location interaction refinement. Keep transient states consistent without page-specific overrides. */

/* Phase 134 — focus visuals win by enqueue order, not priority flags. Composite search fields own their ring on the wrapper. */
:is(input,select,textarea):focus-visible{border-color:var(--ttv-focus);box-shadow:var(--ttv-shadow-focus-field)}
.ttv-location-directory-search>input:focus-visible{border-color:var(--ttv-focus);box-shadow:var(--ttv-shadow-focus-field)}
.ttv-global-search__form input:focus-visible{border-color:currentColor;box-shadow:none}
:is(.ttv-context-location-search,.ttv-home-context-search)>input:focus-visible{border-color:transparent;box-shadow:none}

/* Press feedback: visible on touch/keyboard-compatible controls without moving layout. */
:where(.ttv-btn,.ttv-location-btn,.ttv-location-action,.ttv-location-context__action,.ttv-map-tabs button,.ttv-aqi-range button,.ttv-global-search-trigger,.ttv-my-locations-trigger,.ttv-unit-label,.ttv-menu-toggle,.ttv-nav__mobile-tools button,.ttv-user-drawer__panel>header button,.ttv-alert-modal__dialog>header>button):active:not(:disabled):not([aria-disabled="true"]){transform:translateY(1px);box-shadow:none}
:where(.ttv-location-tool,.ttv-location-discovery__grid>a,.ttv-location-discovery__region-grid>a,.ttv-location-support__links>a,.ttv-location-support__articles>a):active:not([aria-disabled="true"]){transform:none}

/* Disabled means unavailable, not merely dimmed. */
:where(button,input,select,textarea):disabled,
:where(button,a,[role="button"])[aria-disabled="true"]{opacity:.56;cursor:not-allowed!important;filter:saturate(.72);box-shadow:none!important;transform:none!important}
:where(button,[role="button"])[aria-disabled="true"]{pointer-events:none}

/* Busy controls keep their footprint while clearly signalling progress. */
:where(button,.ttv-btn,.ttv-location-btn,.ttv-location-action,.ttv-location-context__action)[aria-busy="true"],
:where(button,.ttv-btn,.ttv-location-btn,.ttv-location-action,.ttv-location-context__action).is-loading{cursor:progress}
:where(button,.ttv-btn,.ttv-location-btn,.ttv-location-action,.ttv-location-context__action)[aria-busy="true"]:disabled{opacity:.78;filter:none}
:where(button,.ttv-btn,.ttv-location-btn,.ttv-location-action,.ttv-location-context__action)[aria-busy="true"]::after,
:where(button,.ttv-btn,.ttv-location-btn,.ttv-location-action,.ttv-location-context__action).is-loading::after{content:"";width:14px;height:14px;flex:0 0 14px;border:2px solid currentColor;border-right-color:transparent;border-radius:var(--ttv-radius-circle);opacity:.72;animation:ttv-spin .72s linear infinite}
@keyframes ttv-spin{to{transform:rotate(360deg)}}

/* Pressed/selected controls use the same quiet selected language site-wide. */
[data-ttv-favorite-location][aria-pressed="true"],
[data-ttv-unit-toggle][aria-pressed="true"]{background:var(--ttv-blue-50);border-color:var(--ttv-line-focus);color:var(--ttv-blue-800)}
.ttv-location-action[data-ttv-favorite-location][aria-pressed="true"]{background:var(--ttv-blue-50);border-color:var(--ttv-line-focus);color:var(--ttv-blue-800)}

/* Close/icon controls must not feel inert. */
:where(.ttv-global-search__head>button,.ttv-user-drawer__panel>header button,.ttv-alert-modal__dialog>header>button):hover,
:where(.ttv-global-search__head>button,.ttv-user-drawer__panel>header button,.ttv-alert-modal__dialog>header>button):focus-visible{background:var(--ttv-blue-50);border-color:var(--ttv-line-focus);color:var(--ttv-blue-800)}

/* Search loading reserves result space and avoids a blank-looking modal. */
.ttv-global-search__loading{min-height:188px;padding:18px;display:grid;place-items:stretch;text-align:left;align-content:start;gap:10px;color:var(--ttv-muted);font-size:var(--ttv-text-sm)}
.ttv-global-search__loading>span{color:var(--ttv-muted);font-size:var(--ttv-text-xs);font-weight:700}
.ttv-global-search__skeleton{display:grid;gap:7px}
.ttv-global-search__skeleton i{display:block;height:48px;border:1px solid var(--ttv-line-soft);border-radius:var(--ttv-radius-xs);background:linear-gradient(100deg,var(--ttv-surface-soft) 25%,var(--ttv-white) 42%,var(--ttv-surface-soft) 60%);background-size:220% 100%;animation:ttv-skeleton 1.15s ease-in-out infinite}
.ttv-global-search__skeleton i:nth-child(2){width:92%}.ttv-global-search__skeleton i:nth-child(3){width:84%}
@keyframes ttv-skeleton{to{background-position:-120% 0}}

/* Empty/error result states use one restrained surface treatment. */
.ttv-global-search__empty,.ttv-location-suggestions__empty,.ttv-map-search-empty{border-radius:var(--ttv-radius-sm)}
.ttv-global-search__empty{margin:10px var(--ttv-space-3) 14px;min-height:124px;padding:var(--ttv-space-6);display:grid;place-items:center;align-content:center;gap:var(--ttv-space);text-align:center;color:var(--ttv-muted);font-size:var(--ttv-text-sm);border:1px dashed var(--ttv-line);background:var(--ttv-surface-subtle)}
.ttv-location-suggestions__empty strong,.ttv-map-search-empty strong{display:block;color:var(--ttv-ink);font-size:var(--ttv-text-sm);margin-bottom:2px}
.ttv-location-suggestions__empty span,.ttv-location-suggestions__empty small,.ttv-map-search-empty span,.ttv-map-search-empty small{display:block;line-height:1.45}
.ttv-location-suggestions__empty.is-loading,.ttv-map-search-empty.is-loading{color:var(--ttv-muted);background:var(--ttv-surface-soft)}

/* Disclosure/tabs: make expanded/selected state obvious without adding new card styles. */
:where(.ttv-faq__item,.ttv-location-hero__details,.ttv-location-hourly-table,.ttv-tool-result__details,.ttv-location-discovery__more,.ttv-location-discovery__region)>summary:active{background:var(--ttv-blue-50)}
:where(.ttv-map-tabs button,.ttv-aqi-range button)[aria-selected="true"],
:where(.ttv-map-tabs button,.ttv-aqi-range button).is-active{box-shadow:inset 0 -2px 0 currentColor}

/* Prevent sticky hover transforms on touch devices; :active above provides feedback instead. */
@media (hover:none){
  .ttv-my-locations-trigger:hover,.ttv-my-location:hover{transform:none}
}

/* v1.1.224 — Phase 167: canonical public data-state notice. */
.ttv-data-state{margin:0 0 var(--ttv-space-4);padding:14px var(--ttv-space-4);display:grid;grid-template-columns:22px minmax(0,1fr);gap:11px;align-items:start;border-left:4px solid var(--ttv-warn);background:var(--ttv-warn-bg);box-shadow:none}
.ttv-data-state>.ttv-icon{width:20px;height:20px;margin-top:2px;color:var(--ttv-warn)}
.ttv-data-state__body{min-width:0}
.ttv-data-state strong{display:block;font-size:var(--ttv-text-sm);line-height:1.35}
.ttv-data-state p{margin:3px 0 0;color:var(--ttv-text-subtle);font-size:var(--ttv-text-sm);line-height:1.5}
.ttv-data-state--warn{border-left-color:var(--ttv-warn);background:var(--ttv-warn-bg)}
.ttv-data-state--info{border-left-color:var(--ttv-blue);background:var(--ttv-surface-info)}
.ttv-data-state--info>.ttv-icon{color:var(--ttv-blue-700)}
.ttv-data-state--danger{border-left-color:var(--ttv-danger);background:var(--ttv-danger-bg)}
.ttv-data-state--danger>.ttv-icon{color:var(--ttv-danger)}
.ttv-data-state__actions{margin-top:10px;display:flex;gap:7px;flex-wrap:wrap}
.ttv-data-state__actions :is(a,button){min-height:44px;padding:0 11px;border:1px solid var(--ttv-line);border-radius:var(--ttv-radius-xs);background:var(--ttv-surface);color:var(--ttv-blue-700);font:700 var(--ttv-text-xs)/1 Arial,"Helvetica Neue",sans-serif;display:inline-flex;align-items:center;justify-content:center;text-decoration:none;cursor:pointer}
.ttv-data-state__actions :is(a,button):hover,.ttv-data-state__actions :is(a,button):focus-visible{border-color:var(--ttv-line-focus);background:var(--ttv-blue-50)}
@media(max-width:640px){.ttv-data-state{padding:var(--ttv-space-3)}.ttv-data-state__actions{display:grid;grid-template-columns:1fr 1fr}.ttv-data-state__actions>*{min-height:44px;white-space:normal;line-height:1.3;text-align:center}.ttv-data-state__actions>*:last-child{grid-column:1/-1}}
@media(max-width:390px){.ttv-data-state__actions{grid-template-columns:1fr}.ttv-data-state__actions>*:last-child{grid-column:auto}}
