:root,[data-theme=dark]{--sv-red:#ea3e28;--sv-red-dark:#d33520;--sv-red-light:#f26b5a;--sv-accent:#f4dbc0;--sv-accent-dark:#e5c9a8;--bg:#1e1e1e;--card-bg:#2a2a2a;--surface-bg:#3a3a3a;--border-color:#3a3a3a;--hover-bg:#4a4a4a;--border-active:#555;--text:#fff;--text-secondary:#aaa;--text-muted:#888;--text-dim:#666;--text-subtle:#999;--shadow:rgba(0,0,0,.4);--shadow-light:rgba(0,0,0,.2);--overlay:rgba(0,0,0,.7);--modal-bg:#1e1e1e;--input-bg:#3a3a3a;--input-border:#555;--link-color:#f4dbc0;--nav-active:#f4dbc0}[data-theme=light]{--sv-red:#ea3e28;--sv-red-dark:#d33520;--sv-red-light:#f26b5a;--sv-accent:#f4dbc0;--sv-accent-dark:#e5c9a8;--bg:#f5f5f5;--card-bg:#fff;--surface-bg:#f0f0f0;--border-color:#e0e0e0;--hover-bg:#f0f0f0;--border-active:#ccc;--text:#1a1a1a;--text-secondary:#666;--text-muted:#999;--text-dim:#bbb;--text-subtle:#888;--shadow:rgba(0,0,0,.08);--shadow-light:rgba(0,0,0,.04);--overlay:rgba(0,0,0,.4);--modal-bg:#fff;--input-bg:#f5f5f5;--input-border:#d0d0d0;--link-color:#963;--nav-active:#963}@font-face{font-family:Gibson;src:url(/fonts/Gibson.woff2) format("woff2");font-weight:400;font-style:normal}@font-face{font-family:Gibson;src:url(/fonts/Gibson-Light.woff2) format("woff2");font-weight:300;font-style:normal}@font-face{font-family:Headline One HPLHS;src:url(/fonts/Headline_One_HPLHS.ttf) format("truetype");font-weight:400;font-style:normal}*{box-sizing:border-box;margin:0;padding:0}html{text-size-adjust:none;touch-action:manipulation}body,html{height:100%;overflow:hidden}body{margin:0;padding:0;font-family:Gibson,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background-color:var(--bg,#1e1e1e);position:fixed;width:100%}#__next{height:100%;overflow:hidden}a{color:inherit;text-decoration:none}*{-webkit-touch-callout:none}*,a,button{-webkit-tap-highlight-color:transparent}a,button{outline:none;color:inherit}a[href]:hover,button:hover{opacity:.85;transition:opacity .2s ease,transform .2s ease}a[href]:active,button:active{opacity:.7;transform:scale(.98)}.portal-card:hover{transform:translateY(-4px);box-shadow:0 6px 20px var(--shadow)}.portal-card:active{transform:translateY(-2px)}.choir-card,.choir-card:active,.choir-card:focus,.choir-card:hover,.choir-card:visited{opacity:1!important}.choir-card:hover{transform:translateY(-2px);box-shadow:0 4px 16px var(--shadow)}.choir-card:active{transform:translateY(0)}.profile-button:hover{opacity:.9;transform:scale(1.05)}.profile-menu-item:hover{background-color:var(--hover-bg)!important}.logo-hover:hover{transform:scale(1.1)}.close-modal-button:hover{opacity:.85;transform:scale(1.02)}.close-modal-button:active{opacity:.7;transform:scale(.98)}@keyframes dropdownFadeIn{0%{opacity:0;transform:translateY(-8px) scale(.97)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes modalPopInCentered{0%{opacity:0;transform:translate(-50%,-50%) translateY(-8px) scale(.97)}to{opacity:1;transform:translate(-50%,-50%) translateY(0) scale(1)}}@keyframes overlayFadeIn{0%{opacity:0}to{opacity:1}}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes skeletonPulse{0%{opacity:.4}50%{opacity:.7}to{opacity:.4}}@keyframes invoiceGlow{0%,to{box-shadow:0 0 6px 1px hsla(31,70%,85%,.45)}50%{box-shadow:0 0 18px 5px hsla(31,70%,85%,.95)}}.invoice-glow{animation:invoiceGlow 2.2s ease-in-out infinite}@keyframes attendanceSignInPulse{0%,to{opacity:1;box-shadow:0 0 0 0 hsla(31,70%,85%,.8)}50%{opacity:.92;box-shadow:0 0 0 8px hsla(31,70%,85%,0)}}.attendance-signin-pulse{animation:attendanceSignInPulse 2s ease-in-out infinite}@keyframes showDayPulse{0%,to{transform:scale(1);box-shadow:0 2px 10px hsla(31,70%,85%,.45)}50%{transform:scale(1.02);box-shadow:0 4px 20px hsla(31,70%,85%,.85)}}@keyframes showDaySparkle{0%{left:-60%}55%,to{left:130%}}.show-day-banner{position:relative;overflow:hidden;animation:showDayPulse 1.9s ease-in-out infinite}.show-day-banner:before{content:"";top:0;left:-60%;width:55%;height:100%;background:linear-gradient(100deg,transparent,hsla(0,0%,100%,.75),transparent);transform:skewX(-20deg);animation:showDaySparkle 2.8s ease-in-out infinite}.disco-bg,.show-day-banner:before{position:absolute;pointer-events:none}.disco-bg{inset:0;z-index:0;overflow:hidden}.disco-light{position:absolute;width:250px;height:250px;border-radius:50%;filter:blur(42px);opacity:.4;mix-blend-mode:screen}.disco-light.l1{background:radial-gradient(circle,#ff4fd8,transparent 68%);top:2%;left:-14%;animation:discoDrift1 10s ease-in-out infinite}.disco-light.l2{background:radial-gradient(circle,#4fd0ff,transparent 68%);top:24%;right:-16%;animation:discoDrift2 13s ease-in-out infinite}.disco-light.l3{background:radial-gradient(circle,#ffd24f,transparent 68%);top:52%;left:-10%;animation:discoDrift3 15s ease-in-out infinite}.disco-light.l4{background:radial-gradient(circle,#7cff9b,transparent 68%);top:70%;right:-12%;animation:discoDrift1 17s ease-in-out infinite reverse}.disco-light.l5{background:radial-gradient(circle,#b47cff,transparent 68%);top:40%;left:28%;animation:discoDrift2 14s ease-in-out infinite reverse}.disco-light.l6{background:radial-gradient(circle,#ff7c4f,transparent 68%);bottom:1%;left:-6%;animation:discoDrift3 18s ease-in-out infinite}@keyframes discoDrift1{0%,to{transform:translate(0) scale(1)}50%{transform:translate(130px,90px) scale(1.2)}}@keyframes discoDrift2{0%,to{transform:translate(0) scale(1.1)}50%{transform:translate(-110px,130px) scale(.85)}}@keyframes discoDrift3{0%,to{transform:translate(0) scale(1)}50%{transform:translate(100px,-100px) scale(1.25)}}.disco-dot{position:absolute;width:16px;height:16px;opacity:0;filter:drop-shadow(0 0 3px rgba(255,255,255,.95)) drop-shadow(0 0 7px rgba(205,214,232,.55));animation:discoTwinkle 1.8s ease-in-out infinite}.disco-dot.big{width:24px;height:24px}.disco-dot:after,.disco-dot:before{content:"";position:absolute;inset:0;background-repeat:no-repeat}.disco-dot:before{background:radial-gradient(circle,#fff 0,hsla(0,0%,100%,0) 46%),linear-gradient(90deg,transparent 46%,rgba(216,224,238,.98) 50%,transparent 54%),linear-gradient(180deg,transparent 46%,rgba(216,224,238,.98) 50%,transparent 54%)}.disco-dot:after{background:linear-gradient(90deg,transparent 47.5%,rgba(216,224,238,.8) 50%,transparent 52.5%),linear-gradient(180deg,transparent 47.5%,rgba(216,224,238,.8) 50%,transparent 52.5%);transform:rotate(45deg)}@keyframes discoTwinkle{0%,to{opacity:0;transform:scale(.2) rotate(0deg)}50%{opacity:1;transform:scale(1) rotate(40deg)}}.football-bg{position:absolute;inset:0;z-index:0;overflow:hidden;pointer-events:none}.football{position:absolute;line-height:1;opacity:.95;will-change:top,transform;animation-name:footballBounce;animation-timing-function:ease-in-out;animation-iteration-count:infinite}@keyframes footballBounce{0%{top:var(--bt,0);transform:rotate(0deg)}50%{top:var(--bb,92%);transform:rotate(180deg)}to{top:var(--bt,0);transform:rotate(1turn)}}.pride-flag{position:absolute;line-height:1;opacity:.95;transform-origin:20% 50%;will-change:top,transform;animation-name:flagFloat;animation-timing-function:ease-in-out;animation-iteration-count:infinite}@keyframes flagFloat{0%{top:var(--bt,0);transform:rotate(-7deg) skewX(0deg)}25%{top:calc((var(--bt, 0%) + var(--bb, 92%)) / 2);transform:rotate(-2deg) skewX(-8deg)}50%{top:var(--bb,92%);transform:rotate(7deg) skewX(0deg)}75%{top:calc((var(--bt, 0%) + var(--bb, 92%)) / 2);transform:rotate(2deg) skewX(8deg)}to{top:var(--bt,0);transform:rotate(-7deg) skewX(0deg)}}@media (prefers-reduced-motion:reduce){.disco-bg,.football-bg{display:none!important}.show-day-banner{animation:none!important}.show-day-banner:before{display:none!important}}html.sv-graphics-off .disco-bg,html.sv-graphics-off .football-bg{display:none!important}@keyframes svTogglePulse{0%,to{box-shadow:0 0 0 0 hsla(31,70%,85%,0)}50%{box-shadow:0 0 0 4px hsla(31,70%,85%,.35)}}.sv-toggle-pulse{animation:svTogglePulse 2s ease-in-out infinite}@keyframes svToggleGlowGreen{0%,to{box-shadow:inset 0 0 0 rgba(76,175,80,0)}50%{box-shadow:inset 0 0 13px rgba(76,175,80,.45)}}@keyframes svToggleGlowRed{0%,to{box-shadow:inset 0 0 0 rgba(234,62,40,0)}50%{box-shadow:inset 0 0 13px rgba(234,62,40,.4)}}.sv-toggle-glow-left{animation:svToggleGlowGreen 2s ease-in-out infinite}.sv-toggle-glow-right{animation:svToggleGlowRed 2s ease-in-out infinite}@media (prefers-reduced-motion:reduce){.attendance-signin-pulse,.invoice-glow,.sv-toggle-glow-left,.sv-toggle-glow-right,.sv-toggle-pulse{animation:none}}audio{display:none}[data-grid-row]:hover>td{background-color:#f7f2e6!important}@property --sv-throb{syntax:"<number>";inherits:true;initial-value:0}@keyframes svThrobClock{0%,to{--sv-throb:0.15}50%{--sv-throb:0.80}}[data-throb-clock]{animation:svThrobClock 2.4s ease-in-out infinite}
/* !important is load-bearing: this is no longer an animation, so it no longer
   outranks the td's inline white background on cascade origin alone. Hover still
   wins — same !important, higher specificity (0,2,1) vs (0,1,1).
   color-mix between two opaque colours stays opaque, which the sticky-left
   columns require. */[data-needs-invoice=unsent]>td{background-color:#f7b7ad!important;background-color:color-mix(in srgb,#f7b7ad calc(var(--sv-throb, 0) * 100%),#fdecea)!important}[data-needs-invoice=sent]>td{background-color:#ffd08a!important;background-color:color-mix(in srgb,#ffd08a calc(var(--sv-throb, 0) * 100%),#fff4e5)!important}[data-money-settled]>td{background-color:#eaf6ec!important}[data-money-state=chase]{background-color:#f7b7ad!important;background-color:color-mix(in srgb,#f7b7ad calc(var(--sv-throb, 0) * 100%),#fdecea)!important;border-color:#c7776a!important}[data-money-state=awaiting]{background-color:#ffd08a!important;background-color:color-mix(in srgb,#ffd08a calc(var(--sv-throb, 0) * 100%),#fff4e5)!important;border-color:#b98330!important;color:#7a4f00!important}[data-money-state=settled]{background-color:#eaf6ec!important;border-color:#4a7c59!important}@media (prefers-reduced-motion:reduce){[data-throb-clock]{animation:none!important;--sv-throb:1!important}}