:root{--bg:#f6f4ef;--bg-2:#efece4;--surface:#fff;--surface-2:#faf8f3;--surface-3:#f1ede4;--line:rgba(15,14,12,.09);--line-strong:rgba(15,14,12,.18);--ink:#0e0d0b;--ink-2:rgba(14,13,11,.72);--ink-3:rgba(14,13,11,.52);--ink-4:rgba(14,13,11,.34);--accent:#ff5b1f;--accent-2:#d94915;--accent-soft:rgba(255,91,31,.1);--accent-tint:#fff0e8;--positive:#1f7a4d;--positive-soft:rgba(31,122,77,.1);--warning:#9a5b00;--warning-soft:rgba(196,123,0,.12);--danger:#c0291f;--danger-soft:rgba(192,41,31,.1);--org-academic:#2a4d6e;--org-events:#b45309;--org-media:#6b21a8;--org-welfare:#047857;--org-treasury:#be123c;--org-newsletter:#1f2937;--font-display:"Space Grotesk",ui-sans-serif,system-ui,sans-serif;--font-ui:"Space Grotesk",ui-sans-serif,system-ui,sans-serif;--font-serif:"Source Serif 4","Source Serif Pro",ui-serif,Georgia,serif;--font-thai:"Sarabun","Noto Sans Thai",sans-serif;--font-mono:"JetBrains Mono",ui-monospace,monospace;--r-sm:6px;--r-md:10px;--r-lg:14px;--r-xl:20px;--r-pill:999px;--shadow-sm:0 1px 0 rgba(15,14,12,.04),0 1px 2px rgba(15,14,12,.04);--shadow-md:0 2px 4px rgba(15,14,12,.04),0 8px 24px rgba(15,14,12,.06);--shadow-lg:0 4px 12px rgba(15,14,12,.06),0 24px 60px rgba(15,14,12,.12);--ease-out:cubic-bezier(0.22,1,0.36,1);--ease-spring:cubic-bezier(0.34,1.56,0.64,1);--accent:#7c3aed;--accent-2:#6d28d9;--accent-soft:rgba(124,58,237,.1);--accent-tint:#f5f3ff;--bp-phone:480px;--bp-tablet:768px;--bp-desktop:1024px;--sp-1:4px;--sp-2:8px;--sp-3:12px;--sp-4:16px;--sp-5:20px;--sp-6:24px;--sp-8:32px;--sp-10:40px;--sp-12:48px;--tap-min:44px;--z-sticky:10;--z-nav-backdrop:18;--z-nav:20;--z-nav-raised:21;--z-popover:30;--z-drawer-backdrop:200;--z-drawer:201;--z-modal-backdrop:400;--z-modal:401;--z-toast:600;--z-palette:800;--z-lightbox:900;--z-banner:1000}[data-theme=dark]{--bg:#0c0b09;--bg-2:#141210;--surface:#16140f;--surface-2:#1c1a14;--surface-3:#221f18;--line:hsla(0,0%,100%,.07);--line-strong:hsla(0,0%,100%,.16);--ink:#f4f1ea;--ink-2:hsla(42,31%,94%,.74);--ink-3:hsla(42,31%,94%,.52);--ink-4:hsla(42,31%,94%,.32);--accent:#9f6ef5;--accent-2:#7c3aed;--accent-soft:rgba(159,110,245,.16);--accent-tint:rgba(124,58,237,.12);--positive:#48bb78;--warning:#e8a33d;--danger:#f26155;--positive-soft:rgba(31,122,77,.22);--warning-soft:rgba(196,123,0,.22);--danger-soft:rgba(192,41,31,.22);--shadow-sm:0 1px 0 rgba(0,0,0,.3),0 1px 2px rgba(0,0,0,.3);--shadow-md:0 2px 4px rgba(0,0,0,.3),0 8px 24px rgba(0,0,0,.5);--shadow-lg:0 4px 12px rgba(0,0,0,.4),0 24px 60px rgba(0,0,0,.6)}[data-density=compact]{--r-sm:5px;--r-md:8px;--r-lg:11px;--r-xl:16px}*{box-sizing:border-box}body,html{height:100%;margin:0}body{background:var(--bg);color:var(--ink);font-family:var(--font-ui);font-size:14.5px;line-height:1.5;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-feature-settings:"ss01","cv11";overflow-x:hidden}[data-density=compact] body{font-size:13.5px}button,input,select,textarea{font-family:inherit;color:inherit}button{background:none;border:none;cursor:pointer;padding:0}a{color:inherit;text-decoration:none}::selection{background:var(--accent);color:#fff}.th,[lang=th]{font-family:var(--font-thai)}.display{font-family:var(--font-display);letter-spacing:-.02em}.serif{font-family:var(--font-serif)}.mono{font-family:var(--font-mono)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;height:38px;padding:0 16px;border-radius:var(--r-md);font-family:var(--font-ui);font-size:13.5px;font-weight:500;letter-spacing:-.005em;transition:background .15s var(--ease-out),transform .15s var(--ease-out),box-shadow .2s var(--ease-out),color .15s;white-space:nowrap;position:relative}[data-density=compact] .btn{height:32px;padding:0 12px;font-size:12.5px}.btn:active{transform:scale(.97)}.btn[aria-busy=true]{pointer-events:none;opacity:.75}.btn[aria-busy=true]:before{content:"";width:12px;height:12px;flex-shrink:0;border-radius:50%;border:2px solid;border-right:2px solid transparent;animation:btn-spin .6s linear infinite}.btn:disabled,.btn[aria-disabled=true]{opacity:.45;cursor:not-allowed;pointer-events:none}.btn-primary,[data-theme=dark] .btn-primary{background:var(--ink);color:var(--bg)}.btn-accent{background:var(--accent);color:#fff}.btn-ghost{background:transparent;color:var(--ink-2)}.btn-outline{background:transparent;color:var(--ink);box-shadow:inset 0 0 0 1px var(--line-strong)}@media (hover:hover) and (pointer:fine){.btn-primary:hover{color:#fff}.btn-accent:hover,.btn-primary:hover{background:var(--accent-2)}.btn-ghost:hover{background:var(--surface-3);color:var(--ink)}.btn-outline:hover{background:var(--surface-2)}}.btn-sm{height:30px;padding:0 12px;font-size:12.5px}.btn-xs{height:26px;padding:0 10px;font-size:12px;gap:6px}.btn-lg{height:46px;padding:0 22px;font-size:15px}.btn-icon{width:38px;height:38px;padding:0}.btn-icon.btn-sm{width:30px;height:30px}.btn-icon.btn-xs{width:26px;height:26px}.card{background:var(--surface);border-radius:var(--r-lg);transition:transform .2s var(--ease-out),box-shadow .2s var(--ease-out),border-color .2s}.card-outlined,[data-card=outlined] .card{box-shadow:inset 0 0 0 1px var(--line)}.card-flat,[data-card=flat] .card{box-shadow:none}.card-shadow,[data-card=shadow] .card{box-shadow:var(--shadow-md)}.social-link{transition:background .15s}@media (hover:hover) and (pointer:fine){.card.interactive:hover{transform:translateY(-2px);box-shadow:var(--shadow-lg)}.social-link:hover{background:var(--surface-2)}}.input,.select,.textarea{width:100%;height:38px;padding:0 12px;background:var(--surface);box-shadow:inset 0 0 0 1px var(--line-strong);border-radius:var(--r-md);font-family:var(--font-ui);font-size:14px;outline:none;transition:box-shadow .15s,background .15s}.input::placeholder{color:var(--ink-4)}.input:focus,.select:focus,.textarea:focus{box-shadow:inset 0 0 0 2px var(--accent);background:var(--surface)}.textarea{height:auto;padding:10px 12px;line-height:1.5;resize:vertical;min-height:80px}[data-density=compact] .input,[data-density=compact] .select{height:32px;font-size:13px}.badge{display:inline-flex;align-items:center;gap:5px;height:22px;padding:0 8px;border-radius:var(--r-pill);font-size:11.5px;font-weight:500;letter-spacing:-.003em;background:var(--surface-3);color:var(--ink-2);white-space:nowrap}.badge-dot:before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor}.badge-positive{background:var(--positive-soft);color:var(--positive)}.badge-warning{background:var(--warning-soft);color:var(--warning)}.badge-danger{background:var(--danger-soft);color:var(--danger)}.badge-accent{background:var(--accent-soft);color:var(--accent-2)}[data-theme=dark] .badge-accent{color:var(--accent)}.avatar{display:inline-flex;align-items:center;justify-content:center;border-radius:50%;background:var(--surface-3);font-weight:600;font-family:var(--font-display);letter-spacing:-.01em;flex-shrink:0;color:var(--ink);overflow:hidden;position:relative}.avatar-xs{width:24px;height:24px;font-size:10px}.avatar-sm{width:32px;height:32px;font-size:12px}.avatar-md{width:40px;height:40px;font-size:14px}.avatar-lg{width:56px;height:56px;font-size:18px}.avatar-xl{width:80px;height:80px;font-size:26px}.avatar-2xl{width:120px;height:120px;font-size:38px}.avatar[data-org=academic]{background:color-mix(in srgb,var(--org-academic) 16%,var(--surface));color:var(--org-academic)}.avatar[data-org=events]{background:color-mix(in srgb,var(--org-events) 16%,var(--surface));color:var(--org-events)}.avatar[data-org=media]{background:color-mix(in srgb,var(--org-media) 16%,var(--surface));color:var(--org-media)}.avatar[data-org=welfare]{background:color-mix(in srgb,var(--org-welfare) 16%,var(--surface));color:var(--org-welfare)}.avatar[data-org=treasury]{background:color-mix(in srgb,var(--org-treasury) 16%,var(--surface));color:var(--org-treasury)}.avatar[data-org=newsletter]{background:color-mix(in srgb,var(--org-newsletter) 16%,var(--surface));color:var(--org-newsletter)}[data-theme=dark] .avatar[data-org]{background:color-mix(in srgb,currentColor 24%,var(--surface))}.gradient-block{background:radial-gradient(120% 80% at 20% 0,rgba(124,58,237,.5),transparent 60%),radial-gradient(120% 80% at 80% 100%,rgba(14,13,11,.85),transparent 60%),linear-gradient(135deg,#5b21b6,#1a0e2e);color:#fff}.gradient-block.serene{background:radial-gradient(80% 60% at 70% 30%,rgba(180,160,240,.7),transparent 60%),linear-gradient(135deg,#ede9fe,#a78bfa 60%,#4c1d95)}.gradient-block.cool{background:radial-gradient(90% 70% at 30% 20%,rgba(109,40,217,.6),transparent 60%),linear-gradient(135deg,#2e1065,#0f0820)}.divider{height:1px;width:100%}.divider,.vdivider{background:var(--line)}.vdivider{width:1px;align-self:stretch}.kbd{font-family:var(--font-mono);padding:1px 6px;border-radius:4px;background:var(--surface-3);box-shadow:inset 0 -1px 0 var(--line)}.eyebrow,.kbd{font-size:11px;color:var(--ink-3)}.eyebrow{font-weight:600;letter-spacing:.12em;text-transform:uppercase}.scroll-y{overflow-y:auto;scrollbar-width:thin;scrollbar-color:var(--line-strong) transparent}.scroll-y::-webkit-scrollbar{width:8px}.scroll-y::-webkit-scrollbar-thumb{background:var(--line-strong);border-radius:4px;border:2px solid transparent;background-clip:content-box}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideUp{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}@keyframes slideRight{0%{opacity:0;transform:translateX(-12px)}to{opacity:1;transform:none}}@keyframes scaleIn{0%{opacity:0;transform:scale(.96)}to{opacity:1;transform:scale(1)}}@keyframes shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}@keyframes btn-spin{to{transform:rotate(1turn)}}@keyframes pulse{0%,to{opacity:1}50%{opacity:.55}}@keyframes drift{0%,to{transform:translate(0)}50%{transform:translate(2%,-1%)}}.anim-fade{animation:fadeIn .35s var(--ease-out) both}.anim-up{animation:slideUp .4s var(--ease-out) both}.anim-right{animation:slideRight .4s var(--ease-out) both}.anim-scale{animation:scaleIn .4s var(--ease-out) both}.stagger>*{animation:slideUp .4s var(--ease-out) both}.stagger>:first-child{animation-delay:.04s}.stagger>:nth-child(2){animation-delay:.08s}.stagger>:nth-child(3){animation-delay:.12s}.stagger>:nth-child(4){animation-delay:.16s}.stagger>:nth-child(5){animation-delay:.2s}.stagger>:nth-child(6){animation-delay:.24s}.stagger>:nth-child(7){animation-delay:.28s}.stagger>:nth-child(8){animation-delay:.32s}.skeleton{background:linear-gradient(90deg,var(--surface-2) 0,var(--surface-3) 50%,var(--surface-2) 100%);background-size:200% 100%;animation:shimmer 1.8s linear infinite;border-radius:var(--r-md)}.page-fade{animation:fadeIn .25s var(--ease-out) both}.dialog-backdrop{opacity:0;transition:opacity .18s var(--ease-out)}.dialog-backdrop[data-visible=true]{opacity:1}.dialog-panel{opacity:0;transform:scale(.95);transition:opacity .18s var(--ease-out),transform .18s var(--ease-out)}.dialog-panel[data-visible=true]{opacity:1;transform:scale(1)}@media (prefers-reduced-motion:reduce){.anim-fade,.anim-right,.anim-scale,.anim-up,.page-fade,.stagger>*{animation:none!important;opacity:1!important;transform:none!important}.skeleton{animation:none!important}.dialog-panel{transform:none!important}}.student-nav{background:hsla(43,28%,95%,.88)}[data-theme=dark] .student-nav{background:rgba(12,11,9,.88)}.staff-main{padding:28px 32px}.staff-shell[data-org-accent-2]{--org-accent-2-text:#8a6721}[data-theme=dark] .staff-shell[data-org-accent-2]{--org-accent-2-text:#c79a45}.staff-topbar-hamburger,.student-nav-compact{display:none!important}@media (max-width:768px){.staff-sidebar{position:fixed!important;top:0;left:0;height:100dvh!important;width:272px!important;min-width:272px!important;z-index:var(--z-nav);transform:translateX(-100%);transition:transform .28s var(--ease-out),box-shadow .28s!important;box-shadow:none}.staff-sidebar[data-open=true]{transform:translateX(0);box-shadow:var(--shadow-lg)}.staff-main{padding:16px!important}.staff-dock{display:none!important}.staff-topbar-hamburger{display:flex!important}.staff-topbar-search{display:none!important}.staff-topbar{padding:0 14px!important;gap:10px!important}.staff-topbar-me-name,.staff-topbar-tour{display:none!important}.dash-greeting{font-size:27px!important}.student-nav-links{display:none!important}.student-nav-compact{display:flex!important}.student-nav{padding:10px 14px!important;gap:10px!important}}body.bulk-bar-open .staff-dock{display:none!important}.sheet-backdrop{position:fixed;inset:0;z-index:var(--z-drawer-backdrop);background:rgba(0,0,0,.4);backdrop-filter:blur(2px);display:flex;justify-content:flex-end}.sheet-panel{position:relative;z-index:var(--z-drawer);display:flex;flex-direction:column;width:480px;max-width:100%;height:100%;background:var(--bg);box-shadow:-8px 0 32px rgba(0,0,0,.2);transition:transform .24s var(--ease-out);animation:sheetSlideRight .2s var(--ease-out)}.sheet-content{flex:1;min-height:0;overflow-y:auto;overscroll-behavior:contain}.sheet-footer,.sheet-header{flex:none}.sheet-surface{background:var(--surface)}.sheet-handle{display:none}@keyframes sheetSlideRight{0%{transform:translateX(100%)}to{transform:translateX(0)}}@keyframes sheetSlideUp{0%{transform:translateY(100%)}to{transform:translateY(0)}}@media (max-width:768px){.sheet-backdrop{align-items:flex-end;justify-content:center}.sheet-panel{width:100%;height:auto;max-height:88dvh;border-radius:var(--r-xl) var(--r-xl) 0 0;box-shadow:0 -8px 32px rgba(0,0,0,.2);animation:sheetSlideUp .24s var(--ease-out);padding-bottom:env(safe-area-inset-bottom,0)}.sheet-handle{display:block;flex:none;align-self:center;width:36px;height:4px;margin:var(--sp-3) 0 var(--sp-2);border-radius:var(--r-pill);background:var(--line-strong);touch-action:none;cursor:grab}}@media (prefers-reduced-motion:reduce){.sheet-panel{animation:none;transition:none}}.modal-panel{max-height:88dvh;overflow-y:auto;overscroll-behavior:contain}@media (max-width:768px){.modal-panel{width:100%;max-width:100%;padding:var(--sp-5) var(--sp-4);border-radius:var(--r-lg)}}.kanban-column{width:280px}@media (max-width:768px){.kanban-column{width:min(86vw,320px);scroll-snap-align:start}.kanban-scroller{scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;scroll-padding-left:var(--sp-4)}.btn,.btn-icon,.btn-sm,.btn-xs{min-height:var(--tap-min)}.btn-icon{min-width:var(--tap-min)}.input,.select,.textarea{min-height:var(--tap-min);font-size:16px}.textarea{min-height:calc(var(--tap-min) * 2)}input[type=checkbox],input[type=radio]{width:20px;height:20px;min-height:0}.staff-sidebar a,.staff-sidebar button,.staff-sidebar input,.staff-sidebar select,.staff-topbar a,.staff-topbar button:not(.theme-toggle){min-height:var(--tap-min)}.theme-toggle{position:relative}.theme-toggle:after{content:"";position:absolute;inset:-10px}.staff-crumb:not(:last-child){display:none!important}.staff-crumbs{min-width:0;overflow:hidden}.staff-crumb:last-child>a,.staff-crumb:last-child>span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.staff-sidebar-collapse{display:none!important}.pill-tab{min-height:var(--tap-min);display:inline-flex;align-items:center}}@media (max-width:768px){
  /* !important is load-bearing, not laziness: the crumb span carries an inline
     `display: flex` from StaffTopBar, and an inline style outranks any
     stylesheet rule without it. Without the flag this rule silently loses and
     the full trail keeps rendering — which is exactly what shipped once. */}.mobile-tab-bar,.student-tab-bar{display:none}@media (max-width:768px){.mobile-tab-bar{display:flex;flex:none;z-index:var(--z-nav);border-top:1px solid var(--line);background:var(--surface);padding-bottom:env(safe-area-inset-bottom,0)}.mobile-tab{flex:1;min-width:0;min-height:var(--tap-min);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;padding:var(--sp-2) var(--sp-1);color:var(--ink-2);background:none;border:0;text-decoration:none}.mobile-tab-label{font-size:10.5px;line-height:1.2;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mobile-tab[aria-current=page]{color:var(--accent);font-weight:600}.student-tab-bar{display:flex;position:fixed;left:0;right:0;bottom:0;z-index:var(--z-nav);border-top:1px solid var(--line);background:var(--surface);padding-bottom:env(safe-area-inset-bottom,0)}body:has(.student-tab-bar){padding-bottom:calc(56px + env(safe-area-inset-bottom, 0px))}}.palette-backdrop{padding-top:10vh}@media (max-width:768px){.palette-backdrop{padding-top:var(--sp-6)}}.expandable-card-panel{position:fixed;inset:3vh 3vw;z-index:var(--z-modal);padding:var(--sp-5);display:flex;flex-direction:column;overflow-y:auto}@media (max-width:768px){.expandable-card-panel{inset:0;border-radius:0;padding:var(--sp-4);padding-bottom:calc(var(--sp-4) + env(safe-area-inset-bottom, 0px));overflow-y:auto}}.r-grid-2{display:grid;grid-template-columns:repeat(2,1fr)}.r-grid-3{display:grid;grid-template-columns:repeat(3,1fr)}.r-grid-4,.r-grid-stats{display:grid;grid-template-columns:repeat(4,1fr)}.r-grid-footer{display:grid;grid-template-columns:2fr 1fr 1fr 1fr}.r-grid-pair{display:grid;grid-template-columns:1fr 1fr}.r-grid-weekly{display:grid;grid-template-columns:1.4fr 1fr 1fr}.r-grid-leaders{display:grid;grid-template-columns:repeat(3,1fr);background:var(--line);gap:1px}.r-grid-item-detail{display:grid;grid-template-columns:280px 1fr}.r-grid-cart{display:grid;grid-template-columns:1.6fr 1fr}.r-grid-sidebar{display:grid;grid-template-columns:1fr var(--r-side,300px)}.r-grid-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(var(--r-card-min,240px),1fr))}.r-stack-mobile{display:grid}.table-scroll{overflow-x:auto}.table-scroll>table{min-width:min(640px,max-content)}.btn-row{display:flex;gap:6px}.auth-layout{display:grid;grid-template-columns:1fr 1fr;min-height:100dvh;background:var(--bg)}.pub-nav-links{display:flex}.pub-nav-hamburger{display:none!important}.pub-mobile-menu{display:none}@media (max-width:768px){.r-grid-2,.r-grid-3,.r-grid-cart,.r-grid-item-detail,.r-grid-pair,.r-grid-sidebar,.r-grid-weekly{grid-template-columns:1fr}.r-stack-mobile{grid-template-columns:1fr!important}.r-tap{min-height:var(--tap-min);min-width:var(--tap-min)}.inv-search-form{margin-left:0!important;width:100%}.inv-search-input{width:100%!important}.cart-step-label{display:none!important}.cart-step-conn{width:16px!important;margin:0 6px!important}.r-grid-4,.r-grid-stats{grid-template-columns:repeat(2,1fr)}.r-grid-footer{grid-template-columns:1fr 1fr}.r-grid-leaders{grid-template-columns:1fr;background:transparent;gap:12px}.btn-row{overflow-x:auto;-webkit-overflow-scrolling:touch;flex-wrap:nowrap;padding-bottom:2px}.btn-row>*{flex-shrink:0}.rp{padding-left:20px!important;padding-right:20px!important}.rp-cta-inner{padding:36px 24px!important}.auth-layout{grid-template-columns:1fr}.auth-panel-right{display:none}.pub-nav-links{display:none!important}.pub-nav-hamburger{display:flex!important}.pub-mobile-menu[data-open=true]{display:flex;position:fixed;inset:0;background:var(--surface);z-index:var(--z-drawer);flex-direction:column;padding:24px 20px;gap:4px;overflow-y:auto}}@media print{.staff-dock,.staff-sidebar,.staff-topbar{display:none!important}.staff-main.scroll-y,.staff-shell,.staff-shell-content,body,html{height:auto!important;overflow:visible!important;display:block!important}}.next-image-wrapper{position:relative}