/* Feel: controls answer on press, and the brief dialog arrives and leaves along the
   same path. The header is left exactly as it was.
   Linked before theme.css so the dark palette's own hover colours still win. */
:root{
  --tv-accent-hover:#1143cc;
  --tv-light-button-hover:#fff;
  --tv-press-scale:.97;
  --tv-card-press:.985;
  --tv-press-dim:.6;
  --tv-press-in:60ms;
  --tv-press-out:var(--sc-d-fast);
  --tv-nudge:3px;
  --tv-sheet-d:var(--sc-d-base);
  --tv-sheet-rise:.5rem;
  --tv-sheet-scale:.98;
  --tv-scrim:#101323a8;
  --tv-button-h:48px;
  --tv-link-gap:12px;
  --tv-link-underline:6px;
}

/* Response: the press lands in 60ms and the release eases back. */
.ap-button,.pricing-button,.primary-button,.secondary-button,.dialog-close,.review-dialog .download,.group-control{transition:transform var(--tv-press-out) var(--sc-ease-out),background-color var(--sc-d-fast) var(--sc-ease-out),color var(--sc-d-fast) var(--sc-ease-out),border-color var(--sc-d-fast) var(--sc-ease-out)}
:is(.ap-button,.pricing-button,.primary-button,.secondary-button,.dialog-close,.review-dialog .download,.group-control):active:not(:disabled){transform:scale(var(--tv-press-scale));transition-duration:var(--tv-press-in)}
.ap-link,.structure-footer nav a,.footer-wordmark,.text-button,.lens-controls button,.gallery-note a,.investment-extras article>a,summary{transition:opacity var(--tv-press-out) var(--sc-ease-out)}
:is(.ap-link,.structure-footer nav a,.footer-wordmark,.text-button,.lens-controls button,.gallery-note a,.investment-extras article>a,summary):active{opacity:var(--tv-press-dim);transition-duration:var(--tv-press-in)}
.link-arrow{transition:transform var(--sc-d-fast) var(--sc-ease-out)}
.sample-item figure{transition:transform var(--tv-press-out) var(--sc-ease-out)}
.sample-item a:active figure{transform:scale(var(--tv-card-press));transition-duration:var(--tv-press-in)}

/* Hover only where a pointer can hover, so a tap never leaves a stuck state. Arrows
   lean toward where the link goes. */
@media (hover:hover) and (pointer:fine){
 .ap-button:hover,.pricing-button:hover{background-color:var(--tv-accent-hover)}
 .visibility-plan .pricing-button:hover{background-color:var(--tv-light-button-hover)}
 .review-dialog .download:hover{background-color:color-mix(in oklab,var(--dialog-ink) 86%,var(--dialog-bg))}
 .structure-footer nav a:hover{text-decoration:underline;text-underline-offset:7px}
 :is(.ap-link,.lens-controls button,.sample-item a,.gallery-note a):hover .link-arrow{transform:translateX(var(--tv-nudge))}
 .lens-controls button:hover{color:var(--sc-ink)}
}

/* The brief dialog rises into place over a dimmed page and leaves the way it came. */
.review-dialog{opacity:0;transform:translateY(var(--tv-sheet-rise)) scale(var(--tv-sheet-scale));transition:opacity var(--tv-sheet-d) var(--sc-ease-out),transform var(--tv-sheet-d) var(--sc-ease-out),overlay var(--tv-sheet-d) allow-discrete,display var(--tv-sheet-d) allow-discrete}
.review-dialog[open]{opacity:1;transform:none}
@starting-style{.review-dialog[open]{opacity:0;transform:translateY(var(--tv-sheet-rise)) scale(var(--tv-sheet-scale))}}
.review-dialog::backdrop{background-color:transparent;transition:background-color var(--tv-sheet-d) var(--sc-ease-out),overlay var(--tv-sheet-d) allow-discrete,display var(--tv-sheet-d) allow-discrete}
.review-dialog[open]::backdrop{background-color:var(--tv-scrim)}
@starting-style{.review-dialog[open]::backdrop{background-color:transparent}}
