/* Feedback is attached to actionable controls, not decorative page sections. */
.btn,.menu-toggle,.nav a,.language-switch,.zh-header a,.zh-category-nav a,summary,
.program-grid>.card,.zh-course,.portal-card,.platform-logo-row a,
input:not([type=hidden]),select,textarea {
  transition: background-color 160ms ease,border-color 160ms ease,color 160ms ease,box-shadow 160ms ease,transform 160ms ease;
}
.btn,.menu-toggle,summary { -webkit-tap-highlight-color: rgba(10,93,168,.14); }
.btn:focus-visible,.menu-toggle:focus-visible,summary:focus-visible { outline:3px solid #277db5;outline-offset:4px; }
.program-grid>.card:focus-within,.zh-course:focus-within {border-color:#5b95c0;box-shadow:0 8px 22px rgba(20,54,93,.12);}
.program-image-link {display:block;overflow:hidden;}
.program-image-link:focus-visible {outline:3px solid #277db5;outline-offset:-4px;}
.zh-course .program-image-link {color:inherit;}
input:not([type=hidden]):focus,select:focus,textarea:focus {border-color:#277db5;box-shadow:0 0 0 3px rgba(39,125,181,.12);}
@media (hover:hover) and (pointer:fine) {
  .btn:hover {transform:translateY(-2px);box-shadow:0 6px 16px rgba(20,54,93,.16);}
  .btn-primary:hover,.camloc-zh .btn-primary:hover {background-color:#084d8a;color:#fff;}
  .btn-secondary:hover,.btn-portal:hover,.camloc-zh .btn-secondary:hover {background-color:#edf5fb;border-color:#639aca;}
  .program-grid>.card:hover,.zh-course:hover,.portal-card:hover {transform:translateY(-3px);border-color:#8bb2ce;box-shadow:0 12px 28px rgba(20,54,93,.14);}
  .zh-header a:not(.btn):hover,.language-switch:hover,.zh-category-nav a:hover {color:#0a5da8;text-decoration:underline;text-underline-offset:5px;}
  summary:hover {color:#0a5da8;background-color:rgba(10,93,168,.04);}
  .menu-toggle:hover {border-color:#639aca;background-color:#edf5fb;}
  .platform-logo-row a:hover {transform:translateY(-2px);box-shadow:0 6px 16px rgba(0,0,0,.14);}
  .site-footer a:hover,.zh-footer a:not(.btn):hover,.program-body h3 a:hover {text-decoration:underline;text-underline-offset:4px;}
}
.menu-open .site-navigation,.zh-mobile-nav[open] nav {animation:camloc-control-reveal 180ms ease-out;}
details[open]>:not(summary) {animation:camloc-content-reveal 180ms ease-out;}
@keyframes camloc-control-reveal {from{opacity:0;transform:translateY(-5px)}to{opacity:1;transform:translateY(0)}}
@keyframes camloc-content-reveal {from{opacity:.5}to{opacity:1}}
.btn:active,.menu-toggle:active,.platform-logo-row a:active {transform:translateY(1px);box-shadow:none;}
.program-image-link:active {opacity:.88;}
summary:active {background-color:rgba(10,93,168,.09);}
.btn:disabled,.btn[aria-disabled="true"] {transform:none;box-shadow:none;cursor:not-allowed;}
/* Respect device accessibility preferences; retain colour/focus feedback. */
@media (prefers-reduced-motion:reduce) {
  .btn,.menu-toggle,.nav a,.language-switch,.zh-header a,.zh-category-nav a,summary,
  .program-grid>.card,.zh-course,.portal-card,.platform-logo-row a,input,select,textarea {transition:none;}
  .btn:hover,.btn:active,.menu-toggle:active,.platform-logo-row a:hover,.platform-logo-row a:active {transform:none;}
  .program-grid>.card:hover,.zh-course:hover,.portal-card:hover {transform:none;}
  .menu-open .site-navigation,.zh-mobile-nav[open] nav,details[open]>:not(summary) {animation:none;}
}
