@charset "UTF-8";
/* Keep a complete old folio on screen until the destination is ready. */
html{background:#f3e6ca}
/* Keep layout measurable while the first framed painting, font metrics and
   custom scroll rail settle. Ordinary route/camera transitions remain intact. */
@media(min-width:901px){html[data-folio-boot="pending"] body{opacity:0!important;pointer-events:none!important}}
@view-transition{navigation:auto}
/* D, selected by the user: 460ms + 25% = 575ms. */
:root{--folio-duration:575ms;--folio-ease:cubic-bezier(.3,.08,.25,1)}
.cloister-overlay{position:fixed;inset:0;width:100vw;height:100dvh;z-index:2147483000;touch-action:none;pointer-events:auto}
.cloister-backdrop{position:fixed;left:0;top:0;z-index:2147482998;pointer-events:none;transform-origin:center;will-change:transform;visibility:hidden}
.cloister-backdrop>img,.cloister-backdrop>canvas{position:absolute;inset:0;display:block;width:100%;height:100%;max-width:none}
.cloister-backdrop>.cloister-backdrop-core{inset:16.666667%;width:66.666667%;height:66.666667%}
html[data-portal-transit="active"] .cloister-backdrop{visibility:visible}
html[data-portal-transit="active"]{overflow:hidden}
html[data-portal-transit="active"] body{position:relative;z-index:2147482999;background:transparent!important;width:100vw;height:100dvh;min-height:100dvh;transform-origin:50vw 50vh;transform:translate3d(0,0,0);will-change:transform;overflow:hidden}
html[data-portal-transit="active"] body::before{visibility:hidden}
/* Keep arrival timelines alive underneath the passage. Removing animation:none
   at handoff would create a NEW animation and flash already visible content. */
html[data-portal-transit] :is(.page-heading,.student-summary,.student-card,.form-card,.overview,.all-materials,.followup-page,.expanded-application){opacity:1!important;translate:0 0!important}
/* Restoring pointer hit testing must not lift a card under a stationary mouse. */
html[data-portal-hover-pending] :is(.student-card,.application-card,.form-card){translate:0 0!important;box-shadow:none!important}
html[data-portal-transit]:not([data-portal-document])::view-transition{display:none}
html[data-portal-document]::view-transition-old(root){animation:none}
html[data-portal-document]::view-transition-group(root){animation:none}
html[data-portal-document]::view-transition-group(folio-curl){display:none}
::view-transition-group(root){animation-duration:var(--folio-duration);animation-timing-function:var(--folio-ease);z-index:0}
::view-transition-image-pair(root){isolation:isolate}
::view-transition-new(root){animation:none;mix-blend-mode:normal;z-index:1}
html[data-folio-ready="pending"]::view-transition-group(*),html[data-folio-ready="pending"]::view-transition-old(*),html[data-folio-ready="pending"]::view-transition-new(*){animation-play-state:paused!important}
::view-transition-old(root){animation:folio-unroll var(--folio-duration) var(--folio-ease) both;mix-blend-mode:normal;z-index:2;will-change:clip-path}
@keyframes folio-unroll{from{clip-path:inset(0 0 0 0)}to{clip-path:inset(0 100% 0 0)}}
/* The old card canvas stays stationary inside a moving rectangular clip.
   Both transforms can run on the compositor while the table initializes. */
html[data-folio-sheet]::view-transition-old(root){animation:none;opacity:0}
html[data-folio-sheet]::view-transition-group(folio-sheet){z-index:2;overflow:clip;isolation:isolate;animation:folio-sheet-clip var(--folio-duration) var(--folio-ease) both;will-change:transform}
html[data-folio-sheet]::view-transition-image-pair(folio-sheet){height:100%;isolation:isolate}
html[data-folio-sheet]::view-transition-old(folio-sheet){height:100%;mix-blend-mode:normal;animation:folio-sheet-counter var(--folio-duration) var(--folio-ease) both;will-change:transform}
@keyframes folio-sheet-clip{from{transform:translateX(0)}to{transform:translateX(-100%)}}
@keyframes folio-sheet-counter{from{transform:translateX(0)}to{transform:translateX(100%)}}
/* An offscreen, separately captured strip supplies the illuminated paper edge.
   It never covers the real page, intercepts input, or adds document overflow. */
.folio-curl-source{position:fixed;left:-20vw;top:0;width:13vw;height:100dvh;pointer-events:none;view-transition-name:folio-curl;contain:strict;background:linear-gradient(90deg,#4b321229 0%,#b6975a 9%,#dcc394 25%,#f6e8c7 48%,#eddbb1 68%,#a3854e 83%,#3c2a1255 91%,transparent 100%)}
::view-transition-group(folio-curl){z-index:3;top:0;left:0;transform:none!important;animation:folio-roll-position var(--folio-duration) var(--folio-ease) both}
::view-transition-image-pair(folio-curl){isolation:isolate}
::view-transition-old(folio-curl){display:none}
::view-transition-new(folio-curl){height:100%;mix-blend-mode:normal;transform-origin:left center;animation:folio-roll-shape var(--folio-duration) var(--folio-ease) both}
@keyframes folio-roll-position{from{translate:100vw 0}to{translate:-13vw 0}}
@keyframes folio-roll-shape{0%,100%{opacity:0;scale:.12 1}12%,88%{opacity:1;scale:1 1}}
/* Enter the chosen painted doorway, then reveal the ready destination. */
html[data-folio-effect="portal"]::view-transition-old(root){clip-path:none;transform-origin:var(--portal-x,50vw) var(--portal-y,55vh);animation:portal-enter 850ms cubic-bezier(.25,.1,.2,1) both}
html[data-folio-effect="portal"]::view-transition-group(root){animation-duration:850ms}
html[data-folio-effect="portal"]::view-transition-group(folio-curl){display:none}
@keyframes portal-enter{
 0%{transform:translate(0,0) scale(1);opacity:1;filter:blur(0)}
 68%{transform:translate(var(--portal-dx,0px),var(--portal-dy,0px)) scale(5.2);opacity:1;filter:blur(0)}
 100%{transform:translate(var(--portal-dx,0px),var(--portal-dy,0px)) scale(6.4);opacity:0;filter:blur(1.5px)}
}
/* Snapshot the fully inked page, not a card halfway through its entrance. */
html:active-view-transition :is(.page-heading,.student-summary,.student-card,.form-card,.overview,.all-materials,.followup-page,.expanded-application){opacity:1!important;translate:0 0!important}
:root{--ink-ease:cubic-bezier(.22,1,.36,1)}
@keyframes ink-arrive{from{opacity:0;translate:0 7px}to{opacity:1;translate:0 0}}
@keyframes seal-arrive{from{opacity:0;scale:.975;translate:0 8px}to{opacity:1;scale:1;translate:0 0}}
@media(prefers-reduced-motion:no-preference){
 .page-shell>.page-heading,.manuscript-page>.page-heading,.student-summary{animation:ink-arrive 240ms var(--ink-ease) backwards}
 .student-grid>.student-card:nth-child(-n+12),.form-card-grid>.form-card:nth-child(-n+12){animation:ink-arrive 220ms var(--ink-ease) backwards}
 .student-grid>.student-card:nth-child(2),.form-card-grid>.form-card:nth-child(2){animation-delay:25ms}
 .student-grid>.student-card:nth-child(3),.form-card-grid>.form-card:nth-child(3){animation-delay:50ms}
 .student-grid>.student-card:nth-child(n+4){animation-delay:75ms}
 .student-page>.overview,.student-page>.all-materials,.student-page>.followup-page,.expanded-application{animation:ink-arrive 180ms var(--ink-ease)}
 dialog[open],.account-menu,.toast{animation:seal-arrive 180ms var(--ink-ease);backface-visibility:hidden}
 .account-menu{transform-origin:top right}
 .button,.icon-button,.account-button,.application-card,.student-card,.form-card,.school-mini{transition:background-color 140ms ease,border-color 140ms ease,box-shadow 140ms ease,translate 160ms var(--ink-ease),scale 120ms var(--ink-ease)}
 .button:active,.icon-button:active,.application-card:active{scale:.985}
 .tabs button,.topnav a,.main-nav a{transition:color 140ms ease,background-color 140ms ease,border-color 140ms ease}
 @media(hover:hover) and (pointer:fine){
  .student-card:hover,.application-card:hover{translate:0 -2px;box-shadow:0 5px 12px #76501b14}
  .form-card:not(.is-dragging):hover{translate:0 -2px}
  .button:hover{translate:0 -1px}
  .student-card:hover .student-card-footer>svg{translate:3px 0}
  .student-card-footer>svg{transition:translate 160ms var(--ink-ease)}
 }
}
/* Repeated keyboard actions stay immediate, including system motion preferences. */
:focus-visible{transition:none!important}
/* Focus/blur must not cancel page arrival animations: restoring them on blur
   restarts at opacity 0. Keep focus feedback local to the focused control. */
@media(prefers-reduced-motion:reduce){
 @view-transition{navigation:none}
 ::view-transition-group(*),::view-transition-old(*),::view-transition-new(*){animation:none!important}
 .folio-curl-source{display:none}
 *,*::before,*::after{animation:none!important;transition:none!important;scroll-behavior:auto!important}
}
@media print{*,*::before,*::after{animation:none!important;transition:none!important}}
