/* Quiet loading surfaces use the same palette in automatic, light and dark modes. */
.loading-cards{margin:16px 0 24px;overflow-anchor:none}
.loading-cards .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.loading-cards>div{display:grid;gap:14px}
.loading-card{overflow:hidden;border:1px solid var(--line);border-radius:22px;background:var(--appearance-surface,#fff)}
.loading-image{height:146px;background:var(--appearance-raised,#eef2f1)}
.loading-copy{padding:22px 20px;display:grid;gap:13px}
.loading-line{display:block;height:11px;width:92%;border-radius:8px;background:var(--appearance-raised,#eef2f1);animation:loading-breathe 1.8s ease-in-out infinite alternate}
.loading-line.title{height:20px;width:78%}.loading-line.short{width:34%}.loading-line.medium{width:62%}
.place-loading .loading-card{min-height:220px}.place-loading .loading-copy{padding:24px}
.loading-inline{display:inline-block;width:73px;height:18px;vertical-align:middle;border-radius:6px;background:var(--appearance-raised,#eef2f1);animation:loading-breathe 1.8s ease-in-out infinite alternate}
@keyframes loading-breathe{to{opacity:.45}}
#toast{display:flex;align-items:center;gap:14px;max-width:min(360px,calc(100% - 40px));box-sizing:border-box;text-align:left;line-height:1.45}
#toast>span{min-width:0;font-size:12px}
#toast.has-action.show{pointer-events:auto}
#toast button{flex-shrink:0;min-width:62px;min-height:44px;margin:-10px -8px -10px 0;padding:10px 8px;border:0;background:transparent;border-radius:10px;color:inherit;font:inherit;font-size:12px;font-weight:650;text-decoration:underline;text-underline-offset:3px;cursor:pointer}
#toast button:focus-visible{outline:2px solid currentColor;outline-offset:1px}
#toast button:hover{background:#ffffff14}
#toast:not(.show){visibility:hidden}
@media(prefers-reduced-motion:reduce){.loading-line,.loading-inline{animation:none}}
/* Short, directional motion; only explicit handles capture a drag. */
.sheet-grip{display:none;align-items:center;justify-content:center;min-height:44px;width:72px;margin:0 auto;padding:0;border:0;border-radius:16px;background:none;color:var(--muted);touch-action:none;cursor:grab;-webkit-user-select:none;user-select:none}
.sheet-grip span{display:block;width:32px;height:4px;border-radius:4px;background:currentColor;opacity:.38}
.sheet-grip:active{cursor:grabbing}.sheet-grip:focus-visible{outline:2px solid var(--cyan);outline-offset:2px}
.sheet-grip:active span,.sheet-grip:focus-visible span{opacity:.65}
@media(prefers-reduced-motion:no-preference){.sheet-grip span{transition:opacity .14s ease}}
.event-share-dialog .share-options .primary{display:flex;align-items:center;justify-content:center;gap:9px;min-height:50px;width:100%}
.event-share-dialog .share-options svg{width:18px;height:18px}
.event-share-dialog .share-link-label{margin-top:22px;font-size:11px;line-height:1.6}
.event-share-dialog .share-link-input{min-height:46px;font-size:12px;background:var(--appearance-raised,#f4f6f3);color:var(--ink)}
.share-copy-small{display:block;margin:2px 0 0 auto;min-height:44px;padding:8px 2px;background:none;border:0;font-size:11px;font-weight:550;color:var(--cyan);text-align:right}
.share-copy-small:hover{text-decoration:underline;text-underline-offset:3px}
.event-share-dialog .dialog-note{margin-top:5px}
#report{max-height:calc(100dvh - 40px);overscroll-behavior-y:contain}.close{min-width:44px;min-height:44px;top:8px;right:8px}
@media(max-width:700px){
 .sheet-grip{display:flex}.detail-grip{margin:-12px auto -3px}.dialog-grip{margin:-18px auto 3px}
 #report{width:100%;max-width:440px;max-height:calc(100dvh - max(20px,env(safe-area-inset-top)));margin:auto auto 0;inset:0;padding:22px 26px max(24px,env(safe-area-inset-bottom));border-radius:28px 28px 0 0;overflow-y:auto}
 #report .close{top:12px;right:12px}#report .dialog-place{padding-right:24px}
}
@media(prefers-reduced-motion:no-preference){
 #report[open]{animation:panel-in .22s cubic-bezier(.2,.75,.25,1)}
 #report[open]::backdrop{animation:veil-in .2s ease}
 #app.route-detail-in{animation:detail-in .24s cubic-bezier(.2,.75,.25,1)}
 #app.route-return{animation:return-in .18s ease-out}
 #app{transition:transform .19s cubic-bezier(.2,.75,.25,1)}
 @keyframes panel-in{from{opacity:0;transform:translateY(22px)}to{opacity:1;transform:translateY(0)}}
 @keyframes veil-in{from{opacity:0}to{opacity:1}}
 @keyframes detail-in{from{opacity:.6;transform:translateY(18px)}to{opacity:1;transform:translateY(0)}}
 @keyframes return-in{from{opacity:.65;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}
 @supports (transition-behavior:allow-discrete){
  #report{opacity:0;transform:translateY(28px);transition:opacity .18s ease,transform .22s cubic-bezier(.2,.75,.25,1),display .22s allow-discrete,overlay .22s allow-discrete}
  #report[open]{animation:none;opacity:1;transform:translateY(0)}
  #report::backdrop{opacity:0;transition:opacity .2s ease,display .22s allow-discrete,overlay .22s allow-discrete}
  #report[open]::backdrop{animation:none;opacity:1}
  @starting-style{#report[open]{opacity:0;transform:translateY(22px)}#report[open]::backdrop{opacity:0}}
 }
}
#report.is-sheet-dragging,#app.is-sheet-dragging{animation:none!important;transition:none;transform:translateY(var(--sheet-drag,0px))}
@media(prefers-reduced-motion:reduce){#app,#report,#report::backdrop{animation:none!important;transition:none!important}}

/* Keep native zoom available and fields steady above a software keyboard. */
@media(max-width:700px){
 #report{max-height:calc(var(--campus-viewport,100dvh) - max(20px,env(safe-area-inset-top)));margin-bottom:var(--campus-bottom,0px)}
 #report :is(input:not([type=checkbox]):not([type=radio]),textarea,select){font-size:16px!important}
}

/* One persistent active surface, behind the labels in both appearances. */
.mobile-nav{position:relative;isolation:isolate;--nav-index:0;touch-action:none;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}
.mobile-nav.nav-ready.is-nav-scrubbing .nav-marker{transition:none}
.mobile-nav.is-nav-scrubbing a.active:not(.is-nav-preview){color:#c0d1d7}
.mobile-nav.is-nav-scrubbing a.is-nav-preview,:root[data-theme="dark"] .mobile-nav.is-nav-scrubbing a.is-nav-preview{color:#15353c}
.mobile-nav.is-nav-scrubbing a:active{transform:none}
.mobile-nav.has-nav-selection.is-nav-outside .nav-marker{opacity:.35}
.mobile-nav .nav-marker{position:absolute;z-index:-1;left:6px;top:6px;bottom:6px;width:calc((100% - 21px)/4);border-radius:17px;background:#bce8e7;transform:translateX(calc(var(--nav-index) * (100% + 3px)));opacity:0;pointer-events:none}
.mobile-nav.has-nav-selection .nav-marker{opacity:1}
.mobile-nav a.active,:root[data-theme="dark"] .mobile-nav a.active{background:transparent}
.mobile-nav a{position:relative;transition:color .18s ease,transform .14s ease}
.mobile-nav a:active{transform:scale(.96)}
.campus-image-flight{position:fixed;z-index:15;overflow:hidden;pointer-events:none;contain:layout paint}
.campus-image-flight img{display:block;position:absolute;transform-origin:top left;will-change:transform;max-width:none}
@media(prefers-reduced-motion:no-preference){.mobile-nav.nav-ready .nav-marker{transition:transform .26s cubic-bezier(.22,.72,.22,1),opacity .16s ease}}
@media(prefers-reduced-motion:reduce){.mobile-nav a:active{transform:none}.campus-image-flight{display:none}}

/* Native sticky dates stay inside their own day: the next day replaces them.
   Opaque surfaces preserve contrast in both appearances, without scroll code. */
.event-day-section .event-day-heading{position:sticky;top:0;z-index:5;margin:0 0 13px;padding:12px 0;background:var(--bg);border-bottom:1px solid var(--line);gap:10px}
.event-day-heading>div{min-width:0}
.event-day-section .event-day-heading h2{font-size:14px;line-height:1.4;letter-spacing:-.2px;font-weight:650}
.event-day-heading h2 span{font-size:12px;font-weight:450;color:var(--muted);white-space:nowrap}
.event-day-section .event-day-heading>span{font-size:10px;align-self:center}

@media(prefers-reduced-motion:no-preference){
 #app.campus-detail-continuity .event-decision>:not(.event-visual){animation:detail-copy-in .18s .06s ease-out both}
 @keyframes detail-copy-in{from{opacity:0;transform:translateY(5px)}to{opacity:1;transform:none}}
}

/* Fixed frames prevent a late or failed poster from shifting the cards below. */
.event-visual>img[data-event-image]{position:absolute;inset:0;width:100%;height:100%}
.event-media-state{position:absolute;inset:0;display:grid;place-content:center;justify-items:center;gap:10px;pointer-events:none;color:#cad5df;opacity:0}
.event-media-mark{display:grid;place-items:center;width:38px;height:38px;opacity:.45}
.event-media-mark svg{width:26px;height:26px;fill:none;stroke:currentColor;stroke-width:1.25}
.event-media-caption{display:none;font-size:11px;line-height:1.4;letter-spacing:.1px}
.media-pending>.event-media-state,.media-unavailable>.event-media-state{opacity:1}
.media-unavailable>.event-media-state .event-media-caption{display:block}
.media-pending>img[data-event-image]{opacity:0}
.club-hero>.event-media-state{place-content:start center;padding-top:30px;z-index:-1}
.club-hero.media-unavailable:after{opacity:.25}
@media(prefers-reduced-motion:no-preference){
 :is(.event-visual,.club-hero,.club-directory-visual)>img[data-event-image]{transition:opacity .16s ease}
}
