/* Progressive reading motion; visible without JavaScript.
   data-reveal="title|soft|line" opts in. Use a separate decorative element for line.
   data-reveal-group / data-reveal-item gives lists a short, bounded stagger. */
:root{--reading-ease:cubic-bezier(.2,.75,.25,1)}
.nylon-ink,.nylon-glyph,.home-atmosphere .home-artwork{animation-name:none}
.nylon-glyph{mask:none}
html[data-motion-visit="first"] .nylon-ink{animation-name:nylon-write}
html[data-motion-visit="first"] .nylon-glyph{animation-name:nylon-settle}
html[data-motion-visit="first"] .home-atmosphere .home-artwork{animation-name:nylon-atmosphere}
.motion-enter,.motion-visible{animation-duration:1.25s;animation-timing-function:var(--reading-ease);animation-fill-mode:both;animation-delay:var(--reading-delay,0ms)}
.motion-enter{animation-name:nylon-reading-enter}
.motion-visible{animation-name:nylon-reading-reveal}
.motion-pending{opacity:0;transform:translateY(20px)}
.motion-delay-0{--reading-delay:0ms}.motion-delay-1{--reading-delay:70ms}.motion-delay-2{--reading-delay:140ms}.motion-delay-3{--reading-delay:210ms}.motion-delay-4{--reading-delay:280ms}
.motion-revisit{animation:nylon-reading-return 180ms var(--reading-ease) both;animation-delay:var(--reading-return-delay,0ms)}
.motion-return-delay-0{--reading-return-delay:0ms}.motion-return-delay-1{--reading-return-delay:30ms}.motion-return-delay-2{--reading-return-delay:60ms}.motion-return-delay-3{--reading-return-delay:90ms}
@keyframes nylon-reading-return{from{opacity:.78}to{opacity:1}}
:is(.motion-enter,.motion-visible).motion-title{animation-name:nylon-reading-title;animation-duration:1.5s}
:is(.motion-enter,.motion-visible).motion-soft{animation-name:nylon-reading-soft;animation-duration:1.45s}
:is(.motion-enter,.motion-visible).motion-line{animation-name:nylon-reading-line;animation-duration:1.55s;transform-origin:left center}
.motion-pending.motion-line{transform:scaleX(.12)}
.motion-pending.motion-soft{transform:none}
@keyframes nylon-reading-enter{from{opacity:.48;transform:translateY(14px)}to{opacity:1;transform:none}}
@keyframes nylon-reading-reveal{from{opacity:0;transform:translateY(20px)}to{opacity:1;transform:none}}
@keyframes nylon-reading-title{from{opacity:.38;transform:translateY(18px)}to{opacity:1;transform:none}}
@keyframes nylon-reading-soft{from{opacity:.22}to{opacity:1}}
@keyframes nylon-reading-line{from{opacity:.2;transform:scaleX(.12)}to{opacity:1;transform:scaleX(1)}}
/* Restored pages and keyboard focus never wait for presentation. */
html:not([data-motion-visit="first"]) :is(.motion-pending,.motion-enter,.motion-visible),
:is(.motion-pending,.motion-enter,.motion-visible):focus-within{animation:none!important;opacity:1!important;transform:none!important}
/* Short feedback after an explicit disclosure action; no layout/height animation,
   no initial-load replay, and no fading form or summary controls. */
.motion-details-open[open] > :is(p,dl,ul,ol,.offering-row,.history-roster-list),
.motion-details-open[open] > .campus-bus-body > :is(dl,p,.campus-bus-direction,.campus-bus-sources){animation:nylon-disclosure-read .35s var(--reading-ease) both}
.motion-details-open[open] > :focus-within,
.motion-details-open[open] > .campus-bus-body > :focus-within{animation:none!important}
@keyframes nylon-disclosure-read{from{opacity:.72;transform:translateY(4px)}to{opacity:1;transform:none}}
/* Reading groups enter once, with a little more time to follow their order.
   Specificity keeps these timings stable when the shared controls CSS follows. */
html[data-motion-visit="first"] :is(.motion-enter,.motion-visible){animation-duration:760ms;animation-timing-function:cubic-bezier(.16,.75,.22,1)}
html[data-motion-visit="first"] :is(.motion-enter,.motion-visible).motion-title{animation-duration:880ms}
html[data-motion-visit="first"] :is(.motion-enter,.motion-visible).motion-soft{animation-duration:820ms}
html[data-motion-visit="first"] .motion-delay-1{--reading-delay:60ms}
html[data-motion-visit="first"] .motion-delay-2{--reading-delay:120ms}
html[data-motion-visit="first"] .motion-delay-3{--reading-delay:180ms}
html[data-motion-visit="first"] .motion-delay-4{--reading-delay:240ms}
/* Native disclosure remains the source of truth. The browser reverses a
   running transition on rapid toggles; no JS height cache or delayed click. */
@supports (interpolate-size:allow-keywords) and (transition-behavior:allow-discrete){
  details:is(.campus-bus,.campus-bus-more,.campus-transit-evidence,.campus-place-sources,.campus-related,.campus-other-transit,.course-legacy,.history-roster,.catalog-method,.catalog-access,.journal-editor-tools,.journal-editor-options,.journal-import-panel,[data-motion-details],[data-ny-disclosure])::details-content{interpolate-size:allow-keywords;overflow:clip;block-size:0;opacity:0;transition:block-size 420ms cubic-bezier(.2,.75,.25,1),content-visibility 420ms allow-discrete,opacity 280ms ease}
  details:is(.campus-bus,.campus-bus-more,.campus-transit-evidence,.campus-place-sources,.campus-related,.campus-other-transit,.course-legacy,.history-roster,.catalog-method,.catalog-access,.journal-editor-tools,.journal-editor-options,.journal-import-panel,[data-motion-details],[data-ny-disclosure])[open]::details-content{block-size:auto;opacity:1}
}
.motion-save-confirmed{animation:nylon-save-confirmed 760ms ease-out}
@keyframes nylon-save-confirmed{0%{box-shadow:inset 0 0 0 1px rgba(195,222,160,0);background-color:rgba(195,222,160,0)}24%{box-shadow:inset 0 0 0 1px rgba(195,222,160,.35);background-color:rgba(195,222,160,.08)}100%{box-shadow:inset 0 0 0 1px rgba(195,222,160,0);background-color:rgba(195,222,160,0)}}
:is(.catalog-row,.guides-article,.resource-row,.cs-resource-row){transition:border-color .22s ease,background-color .22s ease}
:is(.catalog-course h2,.guides-article h2,.resource-row-content>a,.settings-related>a,.settings-identity-actions>a){transition:color .2s ease}
:is(.guides-resource-entry,.settings-related){transition:border-color .22s ease,background-color .22s ease}
:is(.guides-resource-entry>span,.guides-article>a>span){display:inline-block;transition:transform .22s var(--reading-ease),color .22s ease}
details:is(.campus-bus,.campus-bus-more,.campus-transit-evidence,.campus-place-sources,.campus-related,.campus-other-transit,.course-legacy,.history-roster,[data-motion-details])>summary{transition:color .2s ease}
:is(.catalog-row,.guides-article,.resource-row,.cs-resource-row):focus-within{border-color:#72959d;background-color:rgba(133,194,205,.035)}
@media(hover:hover) and (pointer:fine){
  :is(.catalog-row,.guides-article,.resource-row,.cs-resource-row):hover{border-color:#72959d;background-color:rgba(133,194,205,.035)}
  .guides-resource-entry:hover{border-color:#83abb2;background-color:#152a31}
  :is(.guides-resource-entry:hover>span,.guides-article>a:hover>span){transform:translate(2px,-2px)}
  :is(.guides-article>a:hover h2,.resource-row-content>a:hover,.settings-related>a:hover,.settings-identity-actions>a:hover){color:#c5e7e9}
  details:is(.campus-bus,.campus-bus-more,.campus-transit-evidence,.campus-place-sources,.campus-related,.campus-other-transit,.course-legacy,.history-roster,[data-motion-details])>summary:hover{color:#c5e7e9}
}
@media(prefers-reduced-motion:reduce){
  .motion-save-confirmed{animation:none!important}
  details::details-content{transition:none!important}
  .nylon-ink,.nylon-glyph,.home-atmosphere .home-artwork,.motion-enter,.motion-visible,.motion-revisit{animation:none!important}
  .nylon-glyph{mask:none!important}.motion-pending{opacity:1!important;transform:none!important}
  .motion-details-open[open]>*,.motion-details-open[open]>.campus-bus-body>*{animation:none!important}
  :is(.catalog-row,.guides-article,.resource-row,.cs-resource-row,.guides-resource-entry,.settings-related,.catalog-course h2,.guides-article h2,.resource-row-content>a,.settings-related>a,.settings-identity-actions>a,.guides-resource-entry>span,.guides-article>a>span){transition:none!important}
  :is(.guides-resource-entry:hover>span,.guides-article>a:hover>span){transform:none}
}
@media print{
  .motion-save-confirmed{animation:none!important}
  details::details-content{transition:none!important}
  .nylon-ink,.nylon-glyph,.home-atmosphere .home-artwork,.motion-enter,.motion-visible,.motion-revisit{animation:none!important}
  .nylon-glyph{mask:none!important}.motion-pending{opacity:1!important;transform:none!important}
  .motion-details-open[open]>*,.motion-details-open[open]>.campus-bus-body>*{animation:none!important}
}
