@layer reset{*,:before,:after{box-sizing:border-box}body{margin:0}button,input,select,textarea{font:inherit}button,a,input,select,textarea{-webkit-tap-highlight-color:transparent}img{max-width:100%;display:block}[hidden]{display:none!important}}@layer base{@font-face{font-family:Montserrat;font-style:normal;font-weight:100 900;font-display:swap;src:url(/_astro/montserrat-latin-ext.BsZE-iaG.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Montserrat;font-style:normal;font-weight:100 900;font-display:swap;src:url(/_astro/montserrat-latin.l_AIctKy.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Montserrat;font-style:italic;font-weight:100 900;font-display:swap;src:url(/_astro/montserrat-latin-ext-italic.C8utfXoj.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Montserrat;font-style:italic;font-weight:100 900;font-display:swap;src:url(/_astro/montserrat-latin-italic.jzfX-GOl.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{color-scheme:light;--canvas:light-dark(#fff,#0d1117);--surface:light-dark(#fff,#161b22);--soft:light-dark(#eff6f2,#21262d);--green:light-dark(#007b65,#5fd3bc);--dark:light-dark(#004b40,#5fd3bc);--ink:light-dark(#172d29,#e6edf3);--muted:light-dark(#52645e,#a1aab5);--line:light-dark(#dce6e1,#3d444d);--control-line:light-dark(#a2b5ac,#6e7681);--button-bg:light-dark(#007b65,#2bb39a);--button-hover:light-dark(#004b40,#5fd3bc);--button-ink:light-dark(#fff,#0d1117);--success:light-dark(#176b3a,#7ee787);--success-bg:light-dark(#e2f2e8,#172b20);--success-line:light-dark(#b7d8c4,#347d39);--danger:light-dark(#9b2c2c,#ffb1af);--danger-bg:light-dark(#fff0ee,#382025);--danger-line:light-dark(#dfb9b3,#a04b50);--warning:light-dark(#644400,#f0cd78);--warning-bg:light-dark(#fff6d8,#332b18);--warning-line:light-dark(#d6a925,#9e7c24);--info:light-dark(#264d68,#a5d6ff);--info-bg:light-dark(#e4edf5,#182b40);--hero-bg:light-dark(#007b65,#0f3a33);--hero-ink:light-dark(#fff,#e6edf3);--hero-badge:light-dark(#ffffff25,#164d43);--tabbar-h:0px;--selected-bg:light-dark(#fff,#30363d);--disabled-bg:light-dark(#f1f2f2,#21262d);--r-sm:6px;--r-md:10px;--r-leaf:0 18px;--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-6:24px;--text-xs:.75rem;--text-sm:.875rem;--text-md:1rem;--text-lg:1.25rem;--text-xl:1.75rem;--elevation:0 5px 20px light-dark(#004b4012,#0004);color:var(--ink);background:var(--canvas);font-family:Montserrat,sans-serif}:root[data-theme=light]{color-scheme:light}:root[data-theme=dark]{color-scheme:dark}:root[data-theme=system]{color-scheme:light dark}code,kbd,samp,pre{font-family:inherit}body{padding-bottom:1rem;line-height:1.5}h1,h2,h3,p{margin:0 0 .75rem}h1{letter-spacing:-.04em;font-size:clamp(1.7rem,5vw,2.4rem);line-height:1.15}h2{font-size:1.2rem}h3{font-size:1rem}a{color:var(--dark);text-underline-offset:3px}button{cursor:pointer}button:disabled{cursor:wait;opacity:.6}:focus-visible{outline-offset:3px;outline:3px solid #cb8c00}button,.button{border:1px solid var(--button-bg);background:var(--button-bg);min-height:44px;color:var(--button-ink);border-radius:0 13px;justify-content:center;align-items:center;gap:.4rem;padding:.65rem 1rem;font-weight:650;text-decoration:none;transition:background .15s,transform .15s;display:inline-flex}button:hover,.button:hover{background:var(--button-hover)}button:active{transform:translateY(1px)}button.secondary,.button.secondary{background:var(--surface);color:var(--ink);border-color:var(--line)}button.secondary:hover,.button.secondary:hover{background:var(--soft);border-color:var(--control-line)}button.danger{background:var(--surface);color:var(--danger);border-color:var(--danger-line)}button.danger:hover{background:var(--danger-bg)}input:not([type=checkbox]):not([type=radio]),select,textarea{border:1px solid var(--control-line);background:var(--surface);width:100%;min-height:46px;color:var(--ink);border-radius:5px;padding:.6rem .75rem}input::placeholder,textarea::placeholder{color:var(--muted);opacity:1}input[type=checkbox]{width:22px;height:22px;accent-color:var(--green)}label{gap:.35rem;font-weight:550;display:grid}label.check{align-items:center;gap:.75rem;min-height:44px;display:flex}small,.muted{color:var(--muted)}ul{padding-left:1.4rem}.sr-only{clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.icon{vertical-align:middle;flex:none;width:24px;height:24px}button.icon-only{border-radius:6px;flex:none;width:40px;min-height:40px;padding:.4rem}.icon-only .button-label{clip-path:inset(50%);width:1px;height:1px;position:absolute;overflow:hidden}.field-hint{font-size:.78rem;font-weight:400}}@layer layout{.topbar{justify-content:space-between;align-items:center;gap:1rem;max-width:1080px;height:56px;margin:auto;padding:.25rem 1rem;display:flex}.brand{letter-spacing:-.06em;color:var(--ink);font-size:1.7rem;font-weight:550;text-decoration:none}.brand span{color:var(--green);text-transform:uppercase;font-weight:750}.brand .ball{vertical-align:middle;margin-left:.4rem;font-size:.8rem}#language{width:auto;min-height:44px}.header-controls{align-items:center;gap:.5rem;display:flex}button#nav-toggle{width:44px;min-height:44px;display:none}button.mode-toggle{border-radius:7px;min-height:44px;padding:.45rem .6rem;font-size:.8rem}button.mode-toggle[aria-checked=true]{background:var(--soft);border-color:#b7d8c4}.mode-toggle .icon{width:20px;height:20px}@media (width<=767px){.topbar{flex-wrap:wrap;gap:.5rem}.header-controls{min-width:0;max-width:100%;margin-left:auto}#view-mode{min-width:0}button.mode-toggle{max-width:100%}.mode-toggle .button-label{overflow-wrap:anywhere;min-width:0;line-height:1.15}#language{flex:none}button#nav-toggle{margin-left:auto}}@media (width<=420px){.header-controls{width:100%}}.participant-list{margin:0;padding:0;list-style:none}.participant-list li{border-bottom:1px solid var(--line);padding:.4rem .25rem;font-weight:550}.participant-list li:last-child{border:0}.device-list{margin:.5rem 0 1rem;padding:0;list-style:none}.device-row{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;gap:1rem;padding:1rem .25rem;display:flex}.device-row:last-child{border:0}.device-row>div{gap:.35rem;min-width:0;display:grid}.device-name{overflow-wrap:anywhere;grid-template-columns:24px minmax(0,1fr);align-items:center;gap:.5rem;display:grid}.device-name strong{min-width:0}.current-device{color:var(--green);grid-column:1/-1;align-items:center;gap:.25rem;font-size:.75rem;font-weight:650;display:inline-flex}.current-device .icon{width:17px;height:17px}button.device-remove{border-radius:7px;flex:none;min-height:44px;padding:.5rem .65rem}@media (width<=360px){.device-remove>.icon{display:none}}.device-link{max-width:min(440px,100vw - 2rem)}.device-link img{width:280px;margin:.75rem auto}.device-link label{margin-bottom:1rem}.device-link .row{justify-content:center}.account-profile button{border-radius:7px}.import-login h2{overflow-wrap:anywhere}.admin-section>summary{cursor:pointer;justify-content:space-between;align-items:center;gap:.75rem;list-style:none;display:flex}.admin-section>summary::-webkit-details-marker{display:none}.admin-section>summary h2{margin:0}.admin-section[open]>summary{margin-bottom:.75rem}.admin-section[open]>summary>.icon{transform:rotate(180deg)}.admin-list{min-width:0}.admin-row-label{align-items:center;gap:.65rem;min-width:0;display:flex}.admin-row-title{overflow-wrap:anywhere;gap:.15rem;min-width:0;display:grid}.admin-row-title strong{font-size:1rem}.admin-row-title small{font-size:.78rem;font-weight:400}.admin-row-content{gap:.75rem;padding:.25rem;display:grid}.admin-row-content form{max-width:none}.admin-staff-courses{gap:.35rem;display:grid}.legal-page{overflow-wrap:anywhere;max-width:800px}.legal-page>.button{margin-bottom:1.25rem}.legal-page section{margin-top:1.75rem}.legal-page h2{margin-bottom:.75rem}.legal-page li+li{margin-top:.65rem}.legal-page address{margin-bottom:.75rem;font-style:normal}.legal-summary{background:var(--soft);border-radius:8px;padding:1rem}.legal-contents{flex-wrap:wrap;gap:.65rem 1rem;margin:1rem 0;display:flex}.admin-account-devices{gap:.5rem;display:grid}.admin-account-devices>.row{flex-wrap:nowrap;justify-content:space-between}.admin-row.is-open .accordion-content{overflow:visible}.admin-row .btn-sm{justify-self:start}.admin-remove:disabled{cursor:not-allowed;opacity:.35}button.admin-new{border:0;border-top:1px solid var(--line);background:0 0;border-radius:0;justify-content:flex-start;width:100%;padding:.85rem .5rem}.admin-dialog{width:min(540px,100% - 2rem)}.admin-dialog>.secondary{margin-top:.85rem}.admin-import-preview{gap:.75rem;max-height:65vh;padding:.25rem;display:grid;overflow-y:auto}.admin-import-preview label.check{align-items:flex-start}.staff-import-row{border-bottom:1px solid var(--line);gap:.5rem;padding-bottom:.75rem;display:grid}.imported-profiles{gap:.65rem;margin:0;padding:0;list-style:none;display:grid}.account-link-search{gap:.65rem;display:grid}.account-link-search>button{justify-self:start}.trainer-suggestions [aria-disabled=true]{opacity:.55;cursor:not-allowed}.imported-courses{margin:0;padding:0;list-style:none}.imported-courses li{border-bottom:1px solid var(--line);gap:.3rem;padding:.9rem 0;display:grid}.imported-courses li:last-child{border:0}.imported-courses a{font-weight:700}.imported-courses span{font-size:.85rem}.import-course{grid-template-columns:minmax(0,1fr);gap:.65rem;display:grid}.import-course>*{margin:0}.import-course>label.check{font-size:1.08rem;font-weight:700}.import-course input[type=checkbox]{flex:none}.import-course .badge{justify-self:start}.import-changes{gap:.65rem;display:grid}.import-changes dt{font-weight:650}.import-changes dd{margin:0;font-size:.9rem}@supports (appearance:base-select){.period-select,.period-select::picker(select){appearance:base-select}.period-select{align-items:center;gap:.5rem;display:flex}.period-select>button{all:unset;text-align:start;flex:1;min-width:0;display:block}.period-select::picker(select){border:1px solid var(--line);background:var(--surface);max-width:calc(100vw - 2rem);max-height:24rem;color:var(--ink);border-radius:6px}.period-select option{gap:.5rem;padding:.65rem .75rem}.period-option-label{white-space:normal;overflow-wrap:anywhere;gap:.15rem;min-width:0;display:grid}.period-option-label small{color:var(--muted);font-size:.8rem;font-weight:400}}.loading-status{align-items:center;gap:.65rem;margin:.85rem 0 0;font-size:.9rem;display:flex}.spinner{border:2px solid var(--line);border-top-color:var(--green);border-radius:50%;flex:none;width:20px;height:20px;animation:.8s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}@keyframes loading-pulse{50%{opacity:.45}}.history-navigation{width:100%;min-height:40px;color:var(--muted);background:0 0;border:0;border-radius:5px;justify-content:center;align-items:center;gap:.5rem;padding:.45rem;font-size:.85rem;font-weight:450;text-decoration:none;display:flex}.history-navigation:hover{background:var(--soft);color:var(--dark)}.history-navigation .icon{width:16px;height:16px;transform:rotate(180deg)}.history-navigation.below-list .icon{transform:none}.invitation-badge{vertical-align:middle;color:var(--muted);margin-left:.4rem;display:inline-flex}.invitation-badge .icon{width:16px;height:16px}.personal-attendance{align-items:center;gap:.3rem;font-weight:650;display:inline-flex}.personal-attendance .icon{width:17px;height:17px}.badge.personal-excused{background:var(--info-bg);color:var(--info)}.badge.personal-absent{background:var(--danger-bg);color:var(--danger);border:1px solid var(--danger-line)}.swipe-card>.invitation-badge{justify-content:center;margin:0}.state-excused{color:var(--info)!important;background:var(--info-bg)!important}#nav{border-top:1px solid var(--line);border-bottom:1px solid var(--line);gap:.35rem;max-width:1080px;margin:auto;padding:.4rem 1rem;display:flex;overflow-x:auto}#nav a{white-space:nowrap;border-radius:6px;min-height:44px;padding:.6rem .75rem;font-size:.9rem;font-weight:650;text-decoration:none}#nav a[aria-current=page]{background:var(--soft);color:var(--green)}#nav .nav-close,#nav-backdrop{display:none}.navigation-layer{display:contents}@media (width<=767px){button#nav-toggle{display:inline-flex}body.navigation-open{overflow:hidden}.navigation-layer{z-index:40;contain:layout paint;pointer-events:none;display:block;position:fixed;inset:0;overflow:clip}#nav{z-index:41;border:0;border-left:1px solid var(--line);overscroll-behavior:contain;visibility:hidden;background:#fff;flex-direction:column;gap:.35rem;width:min(320px,100% - 3rem);max-width:none;margin:0;padding:1rem;transition:transform .24s,visibility 0s .24s;display:flex;position:fixed;inset:0 0 0 auto;overflow-y:auto;transform:translate(100%)}#nav a{white-space:normal;overflow-wrap:normal;hyphens:auto;flex-shrink:0}#nav .nav-close{align-self:flex-end;margin-bottom:.75rem;display:inline-flex}#nav-backdrop{z-index:40;opacity:0;visibility:hidden;background:#102b2677;transition:opacity .24s,visibility 0s .24s;display:block;position:fixed;inset:0}.navigation-open #nav{visibility:visible;transition-delay:0s;transform:translate(0)}.navigation-open #nav-backdrop{opacity:1;visibility:visible;transition-delay:0s}.navigation-open #nav,.navigation-open #nav-backdrop{pointer-events:auto}}main{max-width:1080px;min-height:55vh;margin:0 auto;padding:1.5rem 1rem}footer{max-width:1080px;color:var(--muted);border-top:1px solid var(--line);flex-wrap:wrap;gap:.5rem 1rem;margin:auto;padding:1rem;font-size:.8rem;display:flex}.grid{grid-template-columns:repeat(auto-fit,minmax(min(100%,300px),1fr));gap:1rem;display:grid}.stack{gap:1rem;display:grid}.row{flex-wrap:wrap;align-items:center;gap:.65rem;display:flex}.between{justify-content:space-between}.panel{border:1px solid var(--line);background:var(--surface);border-radius:0 22px;margin:1rem 0;padding:1.1rem}.panel.soft{background:var(--soft);border-color:var(--soft)}.panel>:last-child{margin-bottom:0}form{gap:1rem;max-width:640px;display:grid}.session-list{gap:.8rem;margin:1rem 0;display:grid}.session-card{border:1px solid var(--line);border-left:4px solid var(--green);background:var(--surface);color:var(--ink);border-radius:0 15px;gap:.4rem;padding:1rem;text-decoration:none;transition:box-shadow .15s;display:grid}.session-card:hover{box-shadow:0 3px 14px #003f3214}.session-card strong{font-size:1.05rem}.session-location{color:var(--muted);font-size:.8rem;font-weight:400;line-height:1.35}p.session-location{margin-bottom:.5rem}.roster-row{border-bottom:1px solid var(--line);gap:.6rem;padding:1rem 0;display:grid}.roster-row:last-child{border:0}.roster-name{font-size:1.05rem;font-weight:650}.badge{background:var(--soft);color:var(--dark);border-radius:6px;padding:.2rem .5rem;font-size:.78rem}.sync-status{background:var(--soft);text-align:center;padding:.5rem 1rem;font-size:.8rem}.sync-status button{border-radius:6px;min-height:32px;margin-left:.6rem;padding:.2rem .6rem;font-size:.8rem}.notice{z-index:10;background:var(--warning-bg);max-width:1048px;color:var(--warning);border:1px solid var(--warning-line);overflow-wrap:anywhere;border-radius:6px;justify-content:space-between;align-items:center;gap:1rem;margin:.5rem auto;padding:.75rem 1rem;display:flex;position:sticky;top:0}.notice.error{background:var(--danger-bg);border-color:var(--danger-line)}.warning{background:var(--warning-bg);color:var(--warning);border-radius:6px;padding:.8rem}.accordion-row{border-bottom:1px solid var(--line);padding:0 .35rem}.accordion-row:last-child{border-bottom:0}.attendance-heading{cursor:pointer;align-items:center;gap:.4rem;min-height:58px;display:flex}button.row-disclosure{text-align:left;min-width:0;color:inherit;background:0 0;border:0;border-radius:4px;flex:1;justify-content:flex-start;align-self:stretch;padding:.5rem .25rem}.row-disclosure:hover{background:var(--soft)}.row-disclosure .roster-name{overflow-wrap:anywhere;font-size:1.06rem;font-weight:700}button.attendance-toggle{min-height:40px;color:var(--muted);border-color:var(--line);background:0 0;border-radius:7px;flex:none;padding:.45rem}.attendance-toggle .button-label{font-size:.78rem;display:inline}button.state-present{background:var(--success-bg);color:var(--success);border-color:var(--success-line)}button.state-absent{background:var(--danger-bg);color:var(--danger);border-color:var(--danger-line)}.disclosure-caret{width:18px;height:18px;color:var(--muted);transition:transform .16s}.is-open .disclosure-caret{transform:rotate(180deg)}.is-canceled{background:var(--disabled-bg);color:var(--muted)}.is-canceled .roster-disclosure .roster-name{font-weight:550}.roster-expansion{visibility:hidden;opacity:0;grid-template-rows:0fr;transition:grid-template-rows .16s,opacity .16s,visibility .16s;display:grid}.is-open .roster-expansion{visibility:visible;opacity:1;grid-template-rows:1fr}.accordion-content{min-height:0;transition:padding-bottom .16s;overflow:hidden}.roster-actions{flex-wrap:wrap;justify-content:space-between;align-items:stretch;gap:.4rem;display:flex}.roster-invitation{flex-basis:100%}.is-open .accordion-content{padding-bottom:.6rem}button.penalty-toggle{border-radius:7px;flex-direction:column;flex:1;gap:.3rem;min-width:0;padding:.5rem .35rem;font-size:.78rem;line-height:1.2}button.penalty-toggle[aria-pressed=true]{background:var(--button-bg);color:var(--button-ink);border-color:var(--button-bg);box-shadow:inset 0 2px 4px #0003}button.penalty-toggle:hover{border-color:var(--green)}.substitute-choice{flex-wrap:nowrap;align-items:flex-end}.substitute-field{flex:1;gap:.35rem;min-width:0;display:grid}.substitute-choice .icon-only{margin-bottom:3px}.trainer-search{font-weight:400;position:relative}.trainer-search>.icon{color:var(--muted);pointer-events:none;position:absolute;top:.7rem;left:.7rem}.trainer-search input{padding-left:2.6rem}.trainer-suggestions{z-index:5;border:1px solid var(--control-line);background:var(--surface);box-shadow:var(--elevation);border-radius:5px;max-height:240px;margin:2px 0 0;padding:.25rem 0;list-style:none;position:absolute;top:100%;left:0;right:0;overflow-y:auto}.trainer-suggestions li{overflow-wrap:anywhere;min-height:44px;padding:.65rem .75rem}.trainer-suggestions [role=option]{cursor:pointer}.trainer-suggestions [aria-selected=true]{color:var(--dark);background:var(--soft)}.session-toolbar{justify-content:space-between;gap:1rem;margin:1rem 0}.session-menu{border:1px solid var(--line);background:var(--surface);width:min(280px,100vw - 32px);color:var(--ink);box-shadow:var(--elevation);border-radius:8px;margin:0;padding:.35rem;position:fixed;inset:auto}.session-menu:not(:popover-open){display:none}.session-menu::backdrop{background:0 0}button.menu-item{width:100%;color:var(--ink);background:0 0;border:0;border-radius:5px;justify-content:flex-start;gap:.75rem;padding:.65rem .75rem;font-weight:550;display:flex}button.menu-item:hover,button.menu-item:focus-visible{background:var(--soft)}.roster-counts{margin-bottom:.4rem}.obligation-title{flex-wrap:wrap;align-items:baseline;gap:.1rem .5rem;min-width:0;display:flex}.obligation-title strong{overflow-wrap:anywhere;flex-basis:100%;font-size:1rem}.obligation-reason{overflow-wrap:anywhere;font-size:.82rem;font-weight:400}.obligation-state{color:var(--muted);font-size:.72rem;font-weight:550}.obligation-settle .button-label{display:none}.is-open .obligation-settle .button-label{display:inline}.invitation-control .button-label{display:none}.is-open .invitation-control .button-label{display:inline}@media (width<=600px){.invitation-row.is-open .attendance-heading{grid-template-columns:minmax(0,1fr) 18px;display:grid}.invitation-row.is-open .row-disclosure{grid-area:1/1}.invitation-row.is-open .disclosure-caret{grid-area:1/2}.invitation-row.is-open .attendance-heading>.row{grid-area:2/1/auto/-1;justify-content:flex-end;padding-bottom:.4rem}}.invitation-links{font-size:.85rem}.invitation-link{border-top:1px solid var(--line);gap:.35rem;padding:.5rem 0;display:grid}button.invitation-url{text-align:left;width:100%;min-height:0;color:var(--dark);background:0 0;border:0;border-radius:0;padding:0;font-weight:400;display:block}.invitation-url code{word-break:break-all}.grid-legend{flex-wrap:wrap;gap:.45rem 1rem;margin:1rem 0 .6rem;font-size:.8rem;display:flex}.grid-status{border-radius:5px;justify-content:center;align-items:center;gap:.35rem;display:inline-flex}.grid-state-present{color:var(--success);background:var(--success-bg)}.grid-state-absent{color:var(--danger);background:var(--danger-bg)}.grid-state-excused{color:var(--info);background:var(--info-bg)}.grid-state-unchecked,.grid-not-enrolled{color:var(--muted)}.grid-legend .grid-status{padding:.2rem .35rem}.grid-legend .icon{width:20px;height:20px}.attendance-grid-scroll{overscroll-behavior-x:contain;border:1px solid var(--line);border-radius:8px;max-height:70svh;margin:.75rem 0;overflow:auto}.attendance-grid{border-collapse:separate;border-spacing:0;min-width:100%;font-size:.85rem}.attendance-grid th,.attendance-grid td{border-right:1px solid var(--line);border-bottom:1px solid var(--line);text-align:center;padding:.35rem}.attendance-grid th:last-child,.attendance-grid td:last-child{border-right:0}.attendance-grid tbody tr:last-child>*{border-bottom:0}.attendance-grid thead th{z-index:2;background:var(--soft);min-width:60px;font-size:.72rem;font-weight:450;position:sticky;top:0}.attendance-grid th:first-child{z-index:1;text-align:left;background:var(--surface);overflow-wrap:anywhere;width:clamp(110px,28vw,190px);min-width:110px;max-width:190px;position:sticky;left:0}.attendance-grid thead th:first-child{z-index:3;background:var(--soft)}.attendance-grid th a{justify-items:center;gap:.1rem;min-height:44px;text-decoration:none;display:grid}.attendance-grid th a:hover{text-decoration:underline}.attendance-grid th a>.icon{width:14px;height:14px}.attendance-grid td>.grid-status{width:32px;height:34px}.attendance-grid .grid-opt-out,.attendance-grid th.grid-session-canceled{background:var(--disabled-bg)}.grid-opt-out .grid-status{opacity:.55}.attendance-grid tbody tr:hover>th{background:var(--soft)}.obligation-settle{color:var(--green)}.obligation-details{font-size:.85rem}.obligation-details>p{margin:.25rem 0 .65rem}.obligation-actions{justify-content:space-between;gap:.5rem;margin-top:.4rem}.is-waived{background:var(--disabled-bg);color:var(--muted)}.is-waived .row-disclosure{color:inherit}.resolved-obligations{margin-top:1.25rem}.resolved-obligations>summary{cursor:pointer;color:var(--muted);padding:.6rem 0;font-size:.9rem}progress{width:100%;max-width:480px;height:6px;accent-color:var(--green);margin:0 auto 1rem;display:block}.swipe-viewport{display:flow-root;overflow:clip}.swipe-stack{isolation:isolate;max-width:480px;margin:2.6rem auto 1rem;position:relative}.swipe-edge{border:1px solid var(--line);background:var(--soft);pointer-events:none;border-radius:0 24px;position:absolute;inset:0}.edge-1{z-index:-1;transform:translateY(-9px)scale(.96)}.edge-2{z-index:-2;transform:translateY(-18px)scale(.92)}.edge-3{z-index:-3;transform:translateY(-27px)scale(.88)}.swipe-card{background:var(--surface);min-width:0;min-height:280px;box-shadow:var(--elevation);border:1px solid var(--line);touch-action:pan-y pinch-zoom;text-align:center;user-select:none;cursor:grab;will-change:transform;border-radius:0 24px;place-content:center;gap:1rem;padding:3.5rem 1.25rem 2rem;display:grid;position:relative}.swipe-card.dragging{cursor:grabbing}.swipe-card h2{overflow-wrap:anywhere;font-size:1.8rem}.swipe-cue{opacity:0;align-items:center;gap:.25rem;font-size:.85rem;font-weight:700;transition:opacity .1s;display:flex;position:absolute;top:1rem}.cue-absent{color:var(--danger);left:1rem}.cue-present{color:var(--green);right:1rem}.toward-present .cue-present,.toward-absent .cue-absent{opacity:1}.skip{z-index:30;background:var(--surface);padding:.75rem;position:absolute;top:-100px;left:1rem}.skip:focus{top:.5rem}.card-sheet{grid-template-columns:repeat(auto-fit,minmax(min(100%,250px),1fr));grid-auto-rows:1fr;gap:1rem;margin-top:1rem;display:grid}.card-choice{flex-direction:column;min-width:0;display:flex}.invite-card{overflow-wrap:anywhere;break-inside:avoid;border:1px dashed #819c90;flex-direction:column;flex:1;min-width:0;padding:1rem;display:flex}.invite-card img{width:180px;height:180px;margin:.5rem auto}.invite-card code{word-break:break-all;user-select:all;font-size:.75rem;line-height:1.35;display:block}.invite-card small{margin-top:auto;padding-top:.75rem;display:block}.invite-card .invitation-privacy{margin-top:.5rem;font-size:.7rem;line-height:1.4;display:block}dialog.invitation-display{border-radius:12px;width:min(540px,100% - 1rem);max-width:none;padding:.75rem}.invitation-display>.icon-only{margin-left:auto;display:flex}.invitation-display .invite-card{text-align:center;border:0;padding:.5rem}.invitation-display .invite-card h3{font-size:1.5rem}.invitation-display .invite-card img{aspect-ratio:1;width:min(360px,100%);height:auto}dialog{border:1px solid var(--line);background:var(--surface);max-width:min(540px,100% - 2rem);color:var(--ink);border-radius:0 22px;padding:1.5rem}dialog::backdrop{background:#0008}dialog h2{line-height:1.5}.recovery-confirmation{gap:1rem;display:grid}.recovery-confirmation p{margin:0}.recovery-person{overflow-wrap:anywhere;font-weight:700}.recovery-confirmation ul{margin:.5rem 0 0;padding-left:1.25rem}.recovery-confirmation li+li{margin-top:.35rem}.recovery-confirmation label.check{align-items:flex-start;font-weight:400}#print-cards{display:none}.history-list{margin:1rem 0;padding:0;list-style:none}.history-item{border-bottom:1px solid var(--line);gap:.1rem;padding:.55rem 0;font-size:.9rem;display:grid}.history-item small{font-size:.75rem}.history-item p{margin:0}@keyframes appear{0%{opacity:0;transform:translate(8px)}to{opacity:1;transform:none}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition:none!important;animation:none!important}.spinner{animation:1.6s ease-in-out infinite loading-pulse!important}}}@layer components{button,.button{border-radius:var(--r-sm);gap:.5rem;min-height:44px;padding:.625rem 1rem;font-size:1rem;transition:background .15s,transform .15s,box-shadow .15s}button.ghost,.button.ghost{color:inherit;background:0 0;border-color:#0000}button.ghost:hover,.button.ghost:hover{background:var(--soft)}button.btn-sm,.button.btn-sm{min-height:40px;padding:.5rem .75rem;font-size:.875rem}button.add-row,button.admin-new,button.roster-add-guest{border:1px dashed var(--control-line);background:var(--soft);width:100%;min-height:48px;color:var(--ink);border-radius:var(--r-sm);justify-content:flex-start;margin-top:.75rem;padding:.75rem 1rem;display:flex}button.add-row:hover,button.admin-new:hover,button.roster-add-guest:hover{background:var(--selected-bg)}main>button+button,main>button+p,.row+p{margin-top:.75rem}button.penalty-toggle{padding:.625rem .5rem;font-size:.875rem}.roster-choice{flex-basis:100%}.sync-status button{min-height:44px;font-size:.875rem}.swipe-action-bar .button-label{white-space:normal;overflow-wrap:normal;hyphens:auto;min-width:0;max-width:100%}.admin-list{margin-top:.75rem}.action-hint{overflow-wrap:anywhere;margin-top:.5rem;font-size:.875rem}.account-profile button{justify-self:start}.panel,dialog,.swipe-card,.swipe-edge{border-radius:var(--r-leaf)}button.icon-only{min-width:44px;min-height:44px}button.attendance-toggle{min-height:44px}button:active,.button:active,a.session-card:active{transform:scale(.98)}.brand{font-size:1.45rem}.header-controls{min-height:0}#nav a{align-items:center;gap:.45rem;display:inline-flex}#nav a .icon{width:20px;height:20px}#nav a[aria-current=page]{box-shadow:inset 0 -2px var(--green)}.session-card{border-radius:var(--r-leaf);box-shadow:var(--elevation)}.session-card .session-time{color:var(--dark);font-size:.92rem;font-weight:750}.session-location{color:var(--ink);align-items:center;gap:.25rem;font-size:.95rem;font-weight:600;display:flex}.session-location .icon{width:19px;height:19px;color:var(--green)}.session-hero{background:var(--hero-bg);border-color:var(--green);color:var(--hero-ink);box-shadow:var(--elevation);padding:1.4rem}.session-hero .session-time,.session-hero .session-location,.session-hero .session-location .icon{color:var(--hero-ink)}.session-hero .badge{background:var(--hero-badge);color:var(--hero-ink)}.badge-warning{background:var(--warning-bg);color:var(--warning)}.badge.personal-present{background:var(--success-bg);color:var(--success)}.period-tabs,.mode-segment{border:1px solid var(--line);border-radius:var(--r-md);background:var(--soft);gap:3px;width:fit-content;max-width:100%;margin:.5rem 0 1rem;padding:3px;display:flex}.period-tab{border-radius:var(--r-sm);min-height:40px;color:var(--muted);justify-content:center;align-items:center;padding:.45rem .8rem;font-size:.88rem;font-weight:650;text-decoration:none;display:inline-flex}.period-tab[aria-current=page]{color:var(--ink);background:var(--selected-bg);box-shadow:0 1px 3px #172d291a}.mode-control{border:0;min-width:0;margin:1rem 0;padding:0}.mode-control legend{color:var(--muted);padding:0;font-size:.85rem;font-weight:650}.mode-segment{margin:.4rem 0 0}.mode-option{cursor:pointer;position:relative}.mode-option-label{border-radius:var(--r-sm);min-height:44px;color:var(--muted);justify-content:center;align-items:center;gap:.45rem;padding:.5rem .75rem;font-size:.88rem;display:flex}.mode-option:hover .mode-option-label{background:var(--selected-bg);color:var(--ink)}.mode-option input:checked+.mode-option-label{background:var(--button-bg);color:var(--button-ink);font-weight:700}.mode-option input:focus-visible+.mode-option-label{outline:3px solid var(--green);outline-offset:3px}.mode-option input:disabled+.mode-option-label{opacity:.6;cursor:wait}.mode-selected{visibility:hidden}.mode-option input:checked+.mode-option-label .mode-selected{visibility:visible}.mode-segment .icon{width:19px;height:19px}.mode-segment .mode-selected{width:16px;height:16px}.mobile-account-tools{display:none}.empty-state{text-align:center;border:1px dashed var(--line);border-radius:var(--r-md);justify-items:center;gap:.6rem;padding:1.5rem 1rem;display:grid}.empty-state>.icon{width:32px;height:32px;color:var(--green)}.empty-state p{margin:0}.attention-link{border-bottom:1px solid var(--line);padding:.7rem 0;font-weight:650;text-decoration:none;display:block}.attention-link:last-child{border-bottom:0}.personal-status-card{border:1px solid var(--success-line);border-radius:var(--r-leaf);background:var(--success-bg);color:var(--success);align-items:center;gap:1rem;margin:1rem 0;padding:1rem;display:flex}.personal-status-card>.icon{width:32px;height:32px}.personal-status-card.is-not-attending{color:var(--info);background:var(--info-bg);border-color:var(--line)}.personal-status-copy{gap:.15rem;display:grid}.personal-status-copy strong{font-size:1.05rem}.personal-status-copy span{font-size:.84rem}.session-datetime{margin-bottom:.3rem;font-size:1.05rem;font-weight:700}.location-link{width:fit-content;padding:.25rem 0;text-decoration:none}.participant-list li{overflow-wrap:break-word;justify-content:space-between;align-items:center;gap:.5rem;display:flex}.participant-list li.is-self{color:var(--dark);font-weight:750}.roster-title,.roster-name{overflow-wrap:break-word;word-break:normal}.roster-title{min-width:0}.roster-row{padding:.65rem 0}.roster-expansion{padding-inline:.25rem}button.attendance-toggle{justify-content:flex-start;min-width:108px;padding:.5rem .625rem;font-size:.875rem}.attendance-toggle .button-label{white-space:nowrap;font-size:.875rem;display:inline}.attendance-dialog{width:min(440px,100% - 2rem);padding:1.25rem}button.attendance-gesture{touch-action:none;-webkit-user-select:none;user-select:none}.attendance-radial{border:1px solid var(--control-line);background:var(--surface);width:min(292px,100vw - 16px);height:248px;color:var(--ink);pointer-events:none;border-radius:50%;margin:0;padding:0;position:fixed;inset:auto;overflow:visible;box-shadow:0 8px 36px #0005}.radial-option{border-radius:var(--r-md);border:2px solid #0000;justify-items:center;gap:.2rem;padding:.45rem;font-size:.72rem;font-weight:650;display:grid;position:absolute}.radial-present{color:var(--success);top:50%;right:5px;transform:translateY(-50%)}.radial-absent{color:var(--danger);top:50%;left:5px;transform:translateY(-50%)}.radial-excused{color:var(--info);top:5px;left:50%;transform:translate(-50%)}.radial-unchecked{color:var(--muted);bottom:5px;left:50%;transform:translate(-50%)}.radial-option.is-selected{background:var(--soft);border-color:currentColor}.radial-centre{text-align:center;width:80px;color:var(--muted);font-size:.7rem;position:absolute;inset:50% auto auto 50%;transform:translate(-50%,-50%)}.attendance-choices{grid-template-columns:repeat(2,minmax(0,1fr));gap:.5rem;display:grid}.attendance-choices button{justify-content:flex-start}.attendance-choices button[aria-pressed=true]{outline:2px solid var(--green);outline-offset:2px}.attendance-choices button.state-absent{background:var(--danger-bg);color:var(--danger);border-color:var(--danger-line)}.attendance-choices button.state-excused,.attendance-choices button.state-unchecked{background:var(--soft);color:var(--ink);border-color:var(--line)}.bulk-attendance{margin:.25rem 0 .75rem}button.roster-add-guest{background:var(--soft);border-style:dashed;width:100%;min-height:48px;margin-top:.75rem;padding:.75rem 1rem;display:flex}button.roster-add-guest:hover{background:var(--selected-bg)}.session-toolbar{flex-wrap:nowrap}.session-toolbar>*{min-width:0}.session-toolbar>.button-label{white-space:nowrap}.menu-destructive{margin-top:.25rem;color:var(--danger)!important;border-top:1px solid var(--line)!important}.course-tools{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:.75rem;display:flex}.course-tools .period-tabs{margin:.5rem 0}.course-tools>button{white-space:nowrap}.swipe-action-bar{grid-template-columns:repeat(6,minmax(0,1fr));align-items:stretch;gap:.5rem;width:100%;max-width:480px;margin:.75rem auto;display:grid}.swipe-action-bar>button{grid-column:span 2}.swipe-action-bar>.swipe-excuse,.swipe-action-bar>.swipe-undo{grid-column:span 3}.swipe-excuse{order:-2}.swipe-undo{order:-1}.swipe-action-bar>button{white-space:nowrap;flex:1;min-width:0;min-height:48px;margin:0;padding:.65rem .5rem;font-size:.85rem}.swipe-action-bar>button:disabled{cursor:default}.swipe-action-bar .icon{width:20px;height:20px}.grid-total{background:var(--soft);white-space:nowrap;font-size:.72rem;font-weight:650}button.grid-cell-action{border:0;width:44px;min-height:44px;padding:0}.grid-cell-action .icon{width:20px;height:20px}.onboarding-steps{gap:.65rem;margin:1.25rem 0;padding-left:1.5rem;display:grid}.onboarding-steps li{padding-left:.25rem}.skeleton-list{gap:.8rem;margin:1rem 0;display:grid}.skeleton-card{border-radius:var(--r-leaf);background:linear-gradient(100deg,var(--soft) 20%,var(--selected-bg) 40%,var(--soft) 60%);background-size:200% 100%;min-height:108px;animation:1.5s ease-in-out infinite loading-pulse}.admin-danger-action{border-top:1px solid var(--line);margin-top:.5rem;padding-top:.6rem}::view-transition-old(root){animation:.18s both route-out}::view-transition-new(root){animation:.18s both route-in}html[data-navigation-direction=back] ::view-transition-old(root){animation:.18s both route-out-back}html[data-navigation-direction=back] ::view-transition-new(root){animation:.18s both route-in-back}@keyframes route-out{to{opacity:0;transform:translate(-1.5rem)}}@keyframes route-in{0%{opacity:0;transform:translate(1.5rem)}}@keyframes route-out-back{to{opacity:0;transform:translate(1.5rem)}}@keyframes route-in-back{0%{opacity:0;transform:translate(-1.5rem)}}@media (prefers-reduced-motion:reduce){::view-transition-old(root),::view-transition-new(root){animation:.14s both route-fade!important}}@keyframes route-fade{0%{opacity:.55}to{opacity:1}}button.back-control{width:fit-content;max-width:100%;min-height:40px;color:var(--ink);background:0 0;border:0;justify-content:flex-start;margin-bottom:.75rem;padding:.375rem .5rem .375rem .25rem;font-size:.875rem}.notice.toast{z-index:60;width:min(720px,100% - 2rem);position:fixed;inset:auto auto 1rem 50%;transform:translate(-50%);box-shadow:0 8px 28px #172d2933}.notice.toast.success{background:var(--success-bg);border-color:var(--success-line);color:var(--success)}.notice.toast.error{background:var(--danger-bg);border-color:var(--danger-line);color:var(--danger)}.notice.toast.progress{background:var(--soft);color:var(--ink);border-color:var(--line)}.sync-status{min-height:28px;padding:.2rem .75rem}.sync-status.is-offline{background:var(--info-bg);color:var(--info)}.sync-status.is-pending{background:var(--warning-bg);color:var(--warning)}.notice.toast details{margin-left:auto;font-size:.75rem}.notice.toast details code{overflow-wrap:anywhere;display:block}.session-menu{border-radius:var(--r-md)}.session-menu .danger{color:var(--danger)}.attendance-grid-hint[hidden]{display:none}.attendance-grid th:first-child{overflow-wrap:break-word;word-break:normal}.session-view-layout{gap:1rem;display:grid}.swipe-view main{padding-top:.5rem}.session-toolbar{justify-content:flex-start}.home-layout{flex-direction:column;gap:1rem;display:flex}.home-sessions{min-width:0}.home-attention{order:-1}.home-attention .panel{margin:0}.onboarding-invitation{max-width:640px;margin:1rem 0}.onboarding-invitation>summary{cursor:pointer;min-height:44px;color:var(--dark);padding:.625rem 0;font-weight:650}.settings-fields{gap:1rem;max-width:640px;display:grid}.swipe-heading{justify-content:space-between;align-items:center;gap:.5rem;display:flex}body.swipe-view #nav{display:none}body.swipe-view{--tabbar-h:0px}@media (width<=359px){.attendance-choices{grid-template-columns:1fr}}@media (width<=479px){button.attendance-toggle{justify-content:center;width:44px;min-width:44px;height:44px;padding:.5rem}.attendance-toggle .button-label{clip-path:inset(50%);width:1px;height:1px;position:absolute;overflow:hidden}}@media (width>=1024px){.session-view-layout{grid-template-columns:minmax(0,1.5fr) minmax(280px,1fr);align-items:start}.home-layout{grid-template-columns:minmax(0,720px) minmax(240px,1fr);align-items:start;display:grid}.home-attention{order:0}}@media (width<=767px){.mobile-account-tools{display:block}.mode-segment{width:100%}.mode-option{flex:1;min-width:0}.mode-option-label{gap:.3rem;padding:.5rem}body{padding-bottom:var(--tabbar-h)}.topbar{flex-wrap:nowrap;height:56px;padding:.25rem .75rem}.header-controls{display:none}main{min-height:0;padding:1rem .75rem}.panel{border-radius:var(--r-leaf);padding:.75rem}.session-card{padding:.8rem}#nav{z-index:50;width:100%;max-width:none;padding:.3rem .35rem calc(.3rem + env(safe-area-inset-bottom));background:var(--surface);border:0;border-top:1px solid var(--line);visibility:visible;grid-template-columns:repeat(4,minmax(0,1fr));gap:.15rem;margin:0;transition:none;display:grid;position:fixed;inset:auto 0 0;overflow:visible;transform:none;box-shadow:0 -4px 18px #172d2912}#nav a{border-radius:var(--r-sm);text-align:center;overflow-wrap:normal;hyphens:auto;flex-direction:column;justify-content:center;gap:.1rem;min-width:0;min-height:52px;padding:.3rem .1rem;font-size:.75rem;display:flex}#nav a .icon{width:21px;height:21px}#nav a[aria-current=page]{box-shadow:none;background:var(--soft)}#nav a[href=\#import],#nav a[href=\#admin]{display:none}.notice.toast{bottom:calc(var(--tabbar-h) + var(--attendance-actions-h,0px) + 8px);width:calc(100% - 1rem)}.swipe-stack{margin:.75rem auto .5rem}.swipe-viewport{min-height:0}.swipe-card{min-height:clamp(210px,100dvh - 390px,420px);padding:2rem 1rem}.swipe-action-bar{z-index:25;left:0;right:0;bottom:var(--tabbar-h);max-width:600px;padding:.45rem .6rem calc(.45rem + env(safe-area-inset-bottom));background:color-mix(in srgb, Canvas 94%, transparent);backdrop-filter:blur(10px);border-top:1px solid var(--line);margin:0 auto;position:fixed}.swipe-action-bar>button{gap:.2rem;min-height:44px;padding:.5rem .25rem;font-size:.875rem}.swipe-action-bar>button:not(.swipe-excuse):not(.swipe-undo){flex-direction:column}.swipe-action-bar .icon{width:18px;height:18px}.course-tools{align-items:stretch}.course-tools .period-tabs{flex:1;grid-template-columns:repeat(3,minmax(0,1fr));display:grid}.course-tools .period-tab{white-space:nowrap;min-width:0;padding:.35rem .15rem;font-size:.74rem}.course-tools>button{width:100%}.device-row{flex-wrap:wrap;gap:.5rem;padding:.75rem .1rem}.device-row>div{flex-basis:100%}.device-remove{margin-left:auto}.admin-account-devices>.row{flex-wrap:wrap}.session-toolbar{bottom:var(--tabbar-h);z-index:18;background:color-mix(in srgb, Canvas 94%, transparent);backdrop-filter:blur(8px);gap:.4rem;padding:.35rem 0;position:sticky}.session-primary-bar{bottom:var(--tabbar-h);z-index:18;background:color-mix(in srgb, Canvas 94%, transparent);backdrop-filter:blur(8px);padding:.5rem 0;position:sticky}.session-primary-action{width:100%;min-height:54px}main[data-view=swipe]{padding-bottom:calc(150px + env(safe-area-inset-bottom))}}}@layer print{@page{size:A4 portrait;margin:10mm}@media print{:root,:root[data-theme]{color-scheme:light}body{margin:0;padding:0}body>*{display:none!important}#print-cards{grid-template-columns:repeat(2,minmax(0,1fr));grid-auto-rows:64mm;gap:4mm 5mm;width:100%;margin-inline:auto;display:grid!important}.legal-document>main{display:block!important}.legal-document>footer{display:flex!important}.legal-document .legal-page>.button,.legal-document .legal-contents{display:none}#print-cards .invite-card{border:1px dashed #777;height:64mm;padding:3mm;font-size:9pt;position:relative;overflow:hidden}#print-cards .invite-card h3{margin:0;font-size:11pt}.invite-card p{margin:0}#print-cards .invite-card img{width:27mm;height:27mm;margin:1mm auto}#print-cards .invite-card code{overflow-wrap:anywhere;font-size:6.5pt;line-height:1.1;display:block}#print-cards .invite-card small{padding-top:1mm;font-size:7pt;line-height:1.2}#print-cards button{display:none}#print-cards .invitation-privacy{margin-top:1mm;font-size:6.5pt;line-height:1.1}#print-cards .invite-card:nth-child(8n+9){break-before:page}#print-cards .invite-card:last-child:nth-child(odd){grid-column:1/-1;justify-self:center;width:calc(50% - 2.5mm)}}}
