.bottom-nav{position:fixed;bottom:calc(var(--shell-safe-bottom, env(safe-area-inset-bottom, 0px)) + 8px);left:12px;right:12px;height:58px;background-color:var(--background-color-card, #fff);border:1px solid var(--border-color-light, #e2e8f0);border-radius:24px;display:flex;align-items:center;justify-content:flex-start;gap:4px;box-shadow:0 6px 20px #0f172a1f;z-index:1500;overflow-x:auto;overflow-y:hidden;scroll-behavior:smooth;-webkit-overflow-scrolling:touch;padding:0 8px;scroll-snap-type:x proximity}.bottom-nav::-webkit-scrollbar{display:none}.bottom-nav{-ms-overflow-style:none;scrollbar-width:none}.bottom-nav-item{display:flex;flex-direction:column;align-items:center;justify-content:center;flex:0 0 calc((100vw - 52px)/5);max-width:68px;min-width:52px;height:50px;gap:3px;color:var(--text-color-secondary, #64748b);text-decoration:none;font-size:10px;padding:2px 0;border-radius:12px;transition:transform .15s ease;box-sizing:border-box;scroll-snap-align:start;-webkit-tap-highlight-color:transparent;background:transparent}.bottom-nav-item i{display:flex;align-items:center;justify-content:center;width:44px;height:26px;border-radius:13px;font-size:18px;line-height:1;transition:background-color .2s cubic-bezier(.2,0,0,1),color .2s ease,transform .15s ease;color:var(--text-color-secondary, #64748b)}.bottom-nav-item span{line-height:1.1;font-size:10px;letter-spacing:.01em;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:58px;text-align:center;transition:color .2s ease,font-weight .2s ease}.bottom-nav-item.active{background-color:transparent;box-shadow:none}.bottom-nav-item.active i{background-color:var(--primary-color, #10b981);color:#fff;box-shadow:0 2px 6px #10b98159;transform:scale(1.02)}.bottom-nav-item.active span{color:var(--primary-color, #10b981);font-weight:700}.bottom-nav-item:focus-visible{outline:none}.bottom-nav-item:active{transform:scale(.93)}@media (min-width: 769px){.bottom-nav{display:none}}.more-menu-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background-color:#0f172a73;z-index:1600;display:none}.more-menu-panel{position:fixed;bottom:-100%;left:0;right:0;max-height:70vh;background-color:var(--background-color-card, #fff);border-top-left-radius:18px;border-top-right-radius:18px;padding:20px 16px 28px;box-shadow:0 -12px 30px #0f172a2e;z-index:1700;transition:bottom .3s ease-in-out;overflow-y:auto}.more-menu-overlay.active{display:block}.more-menu-overlay.active .more-menu-panel{bottom:0}.more-menu-header{font-size:18px;font-weight:600;margin-bottom:16px;text-align:center}.bottom-nav.nav-hidden,body.bottom-nav-hidden .bottom-nav{transform:translateY(calc(100% + 36px))!important;opacity:0!important;pointer-events:none!important}body.immersive-mode .top-bar{height:0!important;min-height:0!important;padding-top:0!important;padding-bottom:0!important;border-bottom-width:0!important;overflow:hidden;opacity:0}body.immersive-mode .bottom-nav{transform:translateY(calc(100% + 28px));opacity:0;pointer-events:none}@media (max-width: 768px){body.immersive-mode .main-content-wrapper #app-content{padding-bottom:20px}}.top-bar{transition:opacity .2s ease,border-color .2s ease,box-shadow .2s ease}.bottom-nav{will-change:transform;transition:transform .22s cubic-bezier(.2,0,0,1),opacity .2s ease}:root{--sidebar-accent-color: var(--primary-color);--shell-safe-bottom: min(env(safe-area-inset-bottom, 0px), 24px);--shell-bottom-nav-height: 52px}body{padding:0;display:flex;height:100vh;min-height:100vh;overflow:hidden}.app-shell-container{display:flex;width:100%;height:100vh}.sidebar{width:260px;background-color:var(--background-color-card);border-right:1px solid var(--border-color-light);display:flex;flex-direction:column;transition:transform .3s cubic-bezier(.16,1,.3,1);z-index:1001;flex-shrink:0}#app-sidebar:empty:before{content:"";display:block;margin:16px;height:calc(100% - 32px);border-radius:18px;background:linear-gradient(var(--background-color-hover) 0 0) 0 0/70% 16px no-repeat,linear-gradient(var(--background-color-hover) 0 0) 0 28px/45% 10px no-repeat,linear-gradient(var(--background-color-hover) 0 0) 0 72px/100% 12px no-repeat,linear-gradient(var(--background-color-hover) 0 0) 0 102px/88% 12px no-repeat,linear-gradient(var(--background-color-hover) 0 0) 0 132px/95% 12px no-repeat,linear-gradient(var(--background-color-hover) 0 0) 0 162px/82% 12px no-repeat,linear-gradient(var(--background-color-hover) 0 0) 0 192px/90% 12px no-repeat,linear-gradient(var(--background-color-hover) 0 0) 0 222px/80% 12px no-repeat,linear-gradient(var(--background-color-hover) 0 0) 0 252px/75% 12px no-repeat;position:relative;overflow:hidden}#app-sidebar:empty{position:relative}#app-sidebar:empty:after{content:"";position:absolute;top:16px;right:16px;bottom:16px;left:16px;border-radius:18px;background:linear-gradient(90deg,transparent 0%,rgba(255,255,255,.55) 50%,transparent 100%);animation:skeletonShimmer 1.4s ease-in-out infinite;pointer-events:none}.sidebar-header{display:flex;align-items:center;gap:15px;margin-bottom:20px;padding:0 20px;height:60px;border-bottom:1px solid var(--border-color-light);flex-shrink:0}.sidebar-header img{height:42px;width:42px;object-fit:contain;border-radius:10px;background:#00000008;padding:3px;border:1px solid var(--border-color-light)}.sidebar-header .school-info{font-weight:600;transition:opacity .2s ease,visibility .2s ease;white-space:nowrap;overflow:hidden}.sidebar-header .school-info #sidebar-title{font-family:"Plus Jakarta Sans",var(--font-family-main);font-size:1.05rem;font-weight:800;letter-spacing:-.01em;color:var(--primary-color, var(--sidebar-accent-color))}.sidebar-header .school-info #sidebar-subtitle{font-size:.78rem;font-weight:600;letter-spacing:.04em;color:var(--text-color-secondary)}.sidebar-nav{flex-grow:1;overflow-y:auto;overflow-x:hidden;padding:12px 10px}.sidebar-nav::-webkit-scrollbar{width:4px}.sidebar-nav::-webkit-scrollbar-track{background:transparent}.sidebar-nav::-webkit-scrollbar-thumb{background-color:var(--border-color-light);border-radius:10px}.sidebar-nav:hover::-webkit-scrollbar-thumb{background-color:#cbd5e1}.sidebar-nav ul{list-style:none;padding:0;margin:0}.sidebar-nav a,.sidebar-group summary{display:flex;align-items:center;gap:12px;padding:10px 14px;border-radius:10px;text-decoration:none;font-size:.88rem;font-weight:600;transition:all .2s cubic-bezier(.4,0,.2,1);margin-bottom:4px;white-space:nowrap;overflow:hidden;position:relative;border-left:none;color:var(--text-color-secondary)}.sidebar-nav a:hover,.sidebar-group summary:hover{background-color:var(--background-color-hover);color:var(--text-color-primary);transform:translateY(-1px)}.sidebar-nav a.active{background-color:var(--primary-color-light);color:var(--primary-color);font-weight:700}.sidebar-group summary.active-group{background-color:transparent;color:var(--primary-color);font-weight:700}.sidebar-nav a.active i,.sidebar-group summary.active-group i{color:var(--primary-color)}.sidebar-nav a i,.sidebar-group summary i{width:20px;text-align:center;font-size:1.05em;flex-shrink:0;color:var(--text-color-secondary);transition:color .2s}.sidebar-nav a:hover i,.sidebar-group summary:hover i{color:var(--primary-color)}.sidebar-nav a span,.sidebar-group summary span{transition:opacity .2s ease,visibility .2s ease}.sidebar-group{position:relative;margin-bottom:2px}.sidebar-group summary{list-style:none;cursor:pointer;-webkit-user-select:none;user-select:none}.sidebar-group summary::-webkit-details-marker{display:none}.sidebar-group summary:after{content:"";display:inline-block;width:6px;height:6px;border-right:2px solid currentColor;border-bottom:2px solid currentColor;transform:rotate(-45deg);margin-left:auto;transition:transform .25s cubic-bezier(.4,0,.2,1);opacity:.6;flex-shrink:0}.sidebar-group[open]>summary:after{transform:rotate(45deg);opacity:1}.sidebar-group ul{position:relative;padding-left:24px;margin:2px 0 6px}.sidebar-group ul:before{content:"";position:absolute;left:18px;top:4px;bottom:8px;width:2px;background-color:var(--border-color-light);border-radius:1px}.sidebar-group ul a{padding:8px 12px;font-size:.84rem;margin-bottom:2px}.sidebar-group ul a i{font-size:.8em;width:16px}.sidebar.collapsed{width:60px;padding:0}.sidebar.collapsed .sidebar-header{display:flex;align-items:center;justify-content:center;padding:0}.sidebar.collapsed .sidebar-header #sidebar-logo{margin:0}.sidebar.collapsed .sidebar-header .school-info{opacity:0;visibility:hidden;width:0;pointer-events:none}.sidebar.collapsed .sidebar-nav{padding:10px}.sidebar.collapsed .sidebar-nav a,.sidebar.collapsed .sidebar-group summary{justify-content:center;padding:12px}.sidebar.collapsed .sidebar-nav a i,.sidebar.collapsed .sidebar-group summary i{margin:0;font-size:1.2em}.sidebar.collapsed .sidebar-nav a span,.sidebar.collapsed .sidebar-group summary span{display:none}.sidebar.collapsed .sidebar-group summary:after{display:none}.sidebar.collapsed .sidebar-group ul{display:none}.flyout-menu{position:fixed;left:60px;top:0;background-color:var(--background-color-card);border:1px solid var(--border-color-light);box-shadow:var(--shadow-md);border-radius:var(--border-radius-md);padding:8px;min-width:200px;z-index:1005;animation:fadeIn .15s ease-out;list-style:none;margin:0}.flyout-menu li{list-style:none}.flyout-menu a{width:100%;box-sizing:border-box}.sidebar-tooltip{position:fixed;background-color:var(--text-color-primary);color:var(--text-color-light);padding:6px 12px;border-radius:var(--border-radius-md);font-size:.9em;font-weight:500;z-index:1010;pointer-events:none;white-space:nowrap;box-shadow:var(--shadow-md);display:none}.sidebar-tooltip:before{content:"";position:absolute;top:50%;right:100%;margin-top:-5px;border-width:5px;border-style:solid;border-color:transparent var(--text-color-primary) transparent transparent}#module-disabled-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f172a8c;display:flex;align-items:center;justify-content:center;z-index:10000;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}#module-disabled-overlay .module-disabled-card{background:var(--background-color-card);color:var(--text-color-primary);border:1px solid var(--border-color-light);border-radius:14px;padding:28px 30px;text-align:center;box-shadow:var(--shadow-lg);max-width:520px;width:calc(100% - 40px)}#module-disabled-overlay .module-disabled-icon{width:60px;height:60px;border-radius:50%;background:#ef44441f;color:var(--danger-color);display:flex;align-items:center;justify-content:center;margin:0 auto 16px;font-size:28px}#module-disabled-overlay h2{margin:0 0 10px;font-size:1.4rem}#module-disabled-overlay p{margin:0 0 8px;color:var(--text-color-secondary)}#module-disabled-overlay .module-disabled-note{font-size:.9rem}.main-content-wrapper{flex-grow:1;display:flex;flex-direction:column;height:100vh;min-width:0}body.public-view{display:block;height:auto;min-height:100vh;overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch}body.guest-mode{--sidebar-width: 0px !important}body.guest-mode .sidebar,body.guest-mode #app-sidebar,body.public-view .sidebar,body.public-view #app-sidebar{display:none!important;width:0!important;min-width:0!important;max-width:0!important;margin:0!important;padding:0!important;border:none!important;pointer-events:none!important}body.guest-mode #app-sidebar:empty:before,body.guest-mode #app-sidebar:empty:after,body.public-view #app-sidebar:empty:before,body.public-view #app-sidebar:empty:after{display:none!important;content:none!important}body.guest-mode .main-content-wrapper,body.public-view .main-content-wrapper{width:100%!important;max-width:100%!important;flex-grow:1!important;margin:0!important}body.guest-mode #sidebar-toggle,body.guest-mode #content-overlay,body.guest-mode .content-overlay,body.guest-mode .bottom-nav{display:none!important}.top-bar-fullscreen-btn,#top-bar-fullscreen-btn{display:inline-flex;align-items:center;justify-content:center;width:38px;height:38px;border-radius:50%;border:1px solid var(--border-color-light);background:var(--background-color-card);color:var(--text-color);cursor:pointer;font-size:1rem;transition:all .2s ease;padding:0}.top-bar-fullscreen-btn:hover,#top-bar-fullscreen-btn:hover{background:var(--background-color-hover);color:var(--primary-color);transform:scale(1.05)}body.public-view .app-shell-container,body.public-view .main-content-wrapper{height:auto;min-height:100vh}body.public-view #app-content{overflow:visible;min-height:calc(100vh - 30px)}@supports (height: 100dvh){body{height:100dvh;min-height:100dvh}.app-shell-container,.main-content-wrapper{height:100dvh}body.public-view,body.public-view .app-shell-container,body.public-view .main-content-wrapper{min-height:100dvh}body.public-view #app-content{min-height:calc(100dvh - 30px)}}.top-bar{flex-shrink:0;display:flex;align-items:center;padding:0 20px;gap:15px;height:60px;background-color:var(--background-color-card);border-bottom:1px solid var(--border-color-light);position:relative}.billing-status-banner{display:flex;align-items:center;gap:16px;padding:10px 20px;background:#fff7ed;border-bottom:1px solid #fed7aa;color:#9a3412;font-size:.95em}.billing-banner-content{display:flex;flex-direction:column;gap:4px}.billing-banner-title{font-weight:600}.billing-banner-message{color:inherit}.billing-banner-contact{font-size:.85em;color:#b45309}.billing-banner-action{margin-left:auto;padding:6px 12px;border-radius:999px;background:#f97316;color:#fff;font-weight:600;text-decoration:none;white-space:nowrap}.billing-banner-action:hover{background:#ea580c}.dark .billing-status-banner{background:#3b1f0f;border-bottom-color:#7c2d12;color:#fdba74}.dark .billing-banner-contact{color:#fb923c}#app-top-bar:empty:before{content:"";display:block;height:36px;width:min(420px,60%);border-radius:999px;background:var(--background-color-hover);position:relative;overflow:hidden}#app-top-bar:empty:after{content:"";position:absolute;top:12px;right:20px;bottom:12px;left:20px;background:linear-gradient(90deg,transparent 0%,rgba(255,255,255,.55) 50%,transparent 100%);animation:skeletonShimmer 1.4s ease-in-out infinite;pointer-events:none;border-radius:999px}.top-bar-right{margin-left:auto;display:flex;align-items:center;gap:5px}.sidebar-toggle{background:none;border:none;font-size:1.5em;cursor:pointer;color:var(--text-color-primary)}.top-bar-title{font-size:1.2em;font-weight:600;color:var(--primary-color);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer;transition:color .2s;min-width:0}.top-bar-title:hover{color:var(--primary-color-dark)}.module-summary-tooltip{display:none;position:absolute;top:55px;left:60px;background-color:var(--background-color-card);border:1px solid var(--border-color-light);border-radius:var(--border-radius-md);box-shadow:var(--shadow-lg);padding:12px 15px;z-index:1020;max-width:350px;font-size:.9em;line-height:1.5;animation:fadeIn .2s ease-out}.top-bar-filter{display:none}.user-profile{display:flex;align-items:center;gap:10px;position:relative;cursor:pointer;padding:5px;border-radius:var(--border-radius-full);transition:background-color .2s}.user-profile:hover{background-color:var(--background-color-main)}.user-avatar{width:40px;height:40px;border-radius:var(--border-radius-full);object-fit:cover;border:2px solid var(--border-color-light)}.user-avatar.default-avatar{display:flex;align-items:center;justify-content:center;background-color:var(--background-color-main);color:var(--text-color-secondary)}.user-avatar.default-avatar i{font-size:1.2em}.welcome-text-desktop{font-size:.9em;color:var(--text-color-secondary);text-align:right}.welcome-text-desktop strong{display:block;color:var(--text-color-primary)}.user-menu-dropdown{display:none;position:absolute;top:calc(100% + 8px);right:0;background-color:var(--background-color-card);border-radius:16px;border:1px solid var(--border-color-light);box-shadow:0 10px 25px -5px #0000001f,0 8px 10px -6px #00000014;width:300px;max-width:min(92vw,320px);max-height:calc(100vh - 84px);overflow-y:auto;overflow-x:hidden;z-index:1010;animation:fadeIn .2s cubic-bezier(.16,1,.3,1)}@keyframes fadeIn{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}.user-menu-dropdown.show{display:block}@media (max-width: 768px){.user-menu-dropdown{position:fixed;top:72px;bottom:auto;right:16px;left:auto;width:min(92vw,320px);max-height:calc(100vh - 88px);overflow-y:auto;overflow-x:hidden;transform:none}}.dropdown-header{padding:18px 16px 14px;border-bottom:1px solid var(--border-color-light);text-align:center;background:linear-gradient(180deg,var(--background-color-hover) 0%,transparent 100%);display:flex;flex-direction:column;align-items:center}.dropdown-avatar-wrap{position:relative;width:52px;height:52px;margin-bottom:8px}.dropdown-user-avatar{width:52px;height:52px;border-radius:50%;object-fit:cover;border:2px solid var(--primary-color);box-shadow:0 2px 8px #0000001f}.dropdown-user-avatar.default-avatar{display:flex;align-items:center;justify-content:center;background-color:var(--primary-color-light);color:var(--primary-color);font-size:1.35rem}.dropdown-online-dot{position:absolute;bottom:1px;right:1px;width:12px;height:12px;background-color:#10b981;border:2px solid var(--background-color-card);border-radius:50%}.dropdown-user-details{display:flex;flex-direction:column;align-items:center;gap:4px;width:100%}.dropdown-user-name{font-size:.96rem;font-weight:700;color:var(--text-color-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:260px}.dropdown-role-badge{display:inline-flex;align-items:center;gap:5px;padding:2px 10px;border-radius:999px;background-color:var(--primary-color-light);color:var(--primary-color);font-size:.74rem;font-weight:700;letter-spacing:.02em}.dropdown-filter-item{padding:8px 12px}.academic-year-card{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:7px 10px;background-color:var(--background-color-main);border:1px solid var(--border-color-light);border-radius:10px;width:100%;box-sizing:border-box}.academic-year-card label{display:inline-flex;align-items:center;gap:6px;font-size:.78rem;font-weight:700;color:var(--text-color-secondary);white-space:nowrap}.academic-year-card label i{color:var(--primary-color)}.academic-year-card select{border:1px solid var(--border-color-light);border-radius:6px;padding:4px 6px;font-size:.8rem;font-weight:600;background-color:var(--background-color-card);color:var(--text-color-primary);cursor:pointer;outline:none;max-width:130px}.dropdown-action-group{padding:4px 8px}.user-menu-dropdown a,.user-menu-dropdown button{background:none;border:none;width:100%;text-align:left;padding:9px 12px;border-radius:8px;cursor:pointer;font-size:.88rem;font-weight:600;display:flex;align-items:center;gap:10px;color:var(--text-color-primary);text-decoration:none;font-family:inherit;transition:all .15s ease;box-sizing:border-box}.user-menu-dropdown a:hover,.user-menu-dropdown button:hover{background-color:var(--background-color-hover);color:var(--primary-color)}.user-menu-dropdown a i,.user-menu-dropdown button i{width:18px;text-align:center;font-size:.92rem;color:var(--text-color-secondary);transition:color .15s}.user-menu-dropdown a:hover i,.user-menu-dropdown button:hover i{color:var(--primary-color)}.user-menu-dropdown button.disabled{color:#9ca3af;cursor:not-allowed;background-color:transparent}.dropdown-divider{height:1px;background-color:var(--border-color-light);margin:4px 0}.dropdown-version{padding:8px 14px;display:flex;align-items:center;gap:10px;color:var(--text-color-secondary);font-size:.8rem;cursor:text;-webkit-user-select:text;user-select:text}.dropdown-version i{font-size:.85em;color:var(--text-color-secondary)}.dropdown-version .version-text{display:flex;flex-direction:column;gap:1px;line-height:1.2}.dropdown-version .version-label{text-transform:uppercase;letter-spacing:.05em;font-size:.68em;color:var(--text-color-secondary)}.dropdown-version .version-value{font-weight:600;color:var(--text-color-primary);word-break:break-word}.dropdown-filter-item{padding:12px 15px;display:flex;align-items:center;gap:10px;font-size:.95em}.dropdown-filter-item label{display:flex;align-items:center;gap:10px;color:var(--text-color-secondary);white-space:nowrap}.dropdown-filter-item select{width:100%;border:1px solid var(--border-color-light);border-radius:var(--border-radius-md);padding:5px;font-weight:500}#app-content{flex-grow:1;overflow-y:auto;overflow-x:hidden;min-width:0;max-width:100%;box-sizing:border-box;padding:15px 25px 80px;background-color:var(--background-color-main);position:relative;transition:opacity .25s ease}.app-content--loading{min-height:60vh;opacity:.85}.app-content--revealed{opacity:1}.app-content--transition:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:var(--background-color-main);opacity:.55;pointer-events:none;transition:opacity .2s ease-out;z-index:10}.app-content--transition{transition:opacity .2s ease-out;opacity:.85}.app-skeleton{display:grid;gap:18px;animation:skeletonFadeIn .2s ease-out}.app-skeleton .skeleton-header{display:grid;gap:10px;margin-bottom:6px}.app-skeleton .skeleton-grid{display:grid;gap:14px;grid-template-columns:repeat(auto-fit,minmax(170px,1fr))}.app-skeleton .skeleton-grid--dashboard .skeleton-card{height:120px}.app-skeleton .skeleton-toolbar{display:flex;gap:10px;flex-wrap:wrap}.app-skeleton .skeleton-pill{height:36px;width:140px;border-radius:999px;background:var(--background-color-card);position:relative;overflow:hidden}.app-skeleton .skeleton-table{height:320px;border-radius:16px;background:var(--background-color-card);position:relative;overflow:hidden}.app-skeleton .skeleton-form{display:grid;gap:12px}.app-skeleton .skeleton-field{height:18px;width:min(420px,100%)}.app-skeleton .skeleton-field--wide{height:24px;width:min(520px,100%)}.app-skeleton .skeleton-button{height:44px;width:min(220px,100%);border-radius:12px;background:var(--background-color-card);position:relative;overflow:hidden}.app-skeleton .skeleton-card{height:110px;border-radius:16px;background:var(--background-color-card);position:relative;overflow:hidden}.app-skeleton .skeleton-list{display:grid;gap:12px}.app-skeleton .skeleton-line{height:14px;border-radius:999px;background:var(--background-color-card);position:relative;overflow:hidden}.app-skeleton .skeleton-title{height:26px;width:min(320px,70%)}.app-skeleton .skeleton-subtitle{height:16px;width:min(420px,85%)}.app-skeleton .skeleton-card:after,.app-skeleton .skeleton-line:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;transform:translate(-100%);background:linear-gradient(90deg,transparent 0%,rgba(255,255,255,.6) 50%,transparent 100%);animation:skeletonShimmer 1.4s ease-in-out infinite}.app-skeleton .skeleton-pill:after,.app-skeleton .skeleton-table:after,.app-skeleton .skeleton-button:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;transform:translate(-100%);background:linear-gradient(90deg,transparent 0%,rgba(255,255,255,.6) 50%,transparent 100%);animation:skeletonShimmer 1.4s ease-in-out infinite}@keyframes skeletonShimmer{to{transform:translate(100%)}}@media (prefers-reduced-motion: reduce){#app-sidebar:empty:after,#app-top-bar:empty:after,.app-skeleton .skeleton-card:after,.app-skeleton .skeleton-line:after,.app-skeleton .skeleton-pill:after,.app-skeleton .skeleton-table:after,.app-skeleton .skeleton-button:after{animation:none!important}}@keyframes skeletonFadeIn{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}main#app-content .module-title{font-size:1.8rem;font-weight:600;color:var(--text-color-primary);margin:0 0 20px;padding-bottom:0;border-bottom:none}@media (max-width: 768px){.sidebar,.sidebar-toggle{display:none}.content-overlay{display:none!important}#app-content{padding:12px 10px;padding-bottom:var(--safe-area-bottom, 110px)!important;overflow-x:hidden;min-width:0;max-width:100%;box-sizing:border-box}.welcome-text-desktop{display:none}.module-summary-tooltip{left:15px;right:15px;max-width:none;width:auto}.top-bar-title-container{margin-left:0}}@media (max-width: 480px){.top-bar-title{max-width:calc(100vw - 140px);white-space:normal;line-height:1.2;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}}.user-menu-dropdown button.disabled,.user-menu-dropdown button[disabled]{color:#9ca3af;cursor:not-allowed;background-color:transparent}.user-menu-dropdown button.disabled:hover,.user-menu-dropdown button[disabled]:hover{background-color:transparent}.notification-icon{position:relative;display:flex;align-items:center;justify-content:center;width:40px;height:40px;color:var(--text-color-secondary);font-size:1.2rem;border-radius:50%;transition:background-color .2s,color .2s;text-decoration:none;cursor:pointer}.notification-icon:hover{background-color:var(--background-color-hover);color:var(--text-color-primary)}.notification-badge{position:absolute;top:5px;right:5px;min-width:18px;height:18px;background-color:var(--danger-color);color:var(--text-color-light);border-radius:50%;font-size:.7rem;font-weight:600;display:flex;align-items:center;justify-content:center;padding:2px;border:2px solid var(--background-color-card);transform:scale(0);transition:transform .2s ease-in-out}.notification-badge.show{transform:scale(1)}.notification-modal-overlay{display:none;position:fixed;top:0;right:0;bottom:0;left:0;background-color:transparent;z-index:1000}.notification-modal-overlay.active{display:block}#notification-modal{position:absolute;top:65px;right:20px;width:360px;max-width:90vw;background-color:var(--background-color-card);border-radius:var(--border-radius-md);box-shadow:var(--shadow-lg);border:1px solid var(--border-color-light);z-index:1011;display:flex;flex-direction:column;max-height:450px;animation:fadeInDropdown .2s ease-out}@keyframes fadeInDropdown{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}.notification-modal-header{padding:12px 15px;font-weight:600;border-bottom:1px solid var(--border-color-light);flex-shrink:0}.notification-modal-body{overflow-y:auto;padding:8px;flex-grow:1}.notification-item{display:block;padding:10px;border-radius:var(--border-radius-md);text-decoration:none;color:var(--text-color-primary);transition:background-color .2s;border-bottom:1px solid var(--border-color-light)}.notification-item:last-child{border-bottom:none}.notification-item:hover{background-color:var(--background-color-hover)}.notification-item-title{font-weight:600;font-size:.95em;margin-bottom:4px}.notification-item-message{font-size:.9em;color:var(--text-color-secondary);line-height:1.4;margin-bottom:6px}.notification-item-meta{font-size:.8em;color:var(--text-color-secondary)}.notification-modal-footer{padding:10px;text-align:center;border-top:1px solid var(--border-color-light);flex-shrink:0}.notification-modal-footer a{color:var(--primary-color);font-weight:500;text-decoration:none}.empty-notifications{padding:30px;text-align:center;color:var(--text-color-secondary)}.empty-notifications i{font-size:2rem;margin-bottom:10px;display:block}.loader-container{display:flex;justify-content:center;padding:20px}.dropdown-theme-controls{padding:10px 12px;display:flex;flex-direction:column;gap:8px;width:100%;box-sizing:border-box}.theme-control-header{font-size:.74rem;font-weight:700;color:var(--text-color-secondary);display:flex;align-items:center;gap:6px;text-transform:uppercase;letter-spacing:.05em}.theme-control-header i{color:var(--primary-color)}.theme-buttons{display:grid;grid-template-columns:1fr 1fr;gap:6px;width:100%;box-sizing:border-box}.theme-choice-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:7px 8px;border:1px solid var(--border-color-light);border-radius:8px;background-color:var(--background-color-card);color:var(--text-color-primary);font-size:.78rem;font-weight:600;cursor:pointer;transition:all .18s cubic-bezier(.16,1,.3,1);width:100%;box-sizing:border-box}.theme-choice-btn:hover{border-color:var(--primary-color);color:var(--primary-color);background-color:var(--background-color-hover);transform:translateY(-1px)}.theme-choice-btn.active{background-color:var(--primary-color);color:#fff;border-color:var(--primary-color);box-shadow:0 2px 8px #0000001f}.theme-choice-dot{font-size:.45rem;display:inline-block;transition:transform .18s ease,opacity .18s ease;opacity:.85}.theme-choice-btn[data-theme=default] .theme-choice-dot{color:#059669}.theme-choice-btn[data-theme=modern] .theme-choice-dot{color:#2563eb}.theme-choice-btn[data-theme=playful] .theme-choice-dot{color:#0d9488}.theme-choice-btn[data-theme=neo-class] .theme-choice-dot{color:#0f172a}.theme-choice-btn.active .theme-choice-dot{color:#fff!important;opacity:1;transform:scale(1.2)}html.dark .theme-choice-btn[data-theme=default] .theme-choice-dot{color:#34d399}html.dark .theme-choice-btn[data-theme=modern] .theme-choice-dot{color:#60a5fa}html.dark .theme-choice-btn[data-theme=playful] .theme-choice-dot{color:#2dd4bf}html.dark .theme-choice-btn[data-theme=neo-class] .theme-choice-dot{color:#cbd5e1}.dark-mode-control{display:flex;align-items:center;justify-content:space-between;padding-top:8px;border-top:1px solid var(--border-color-light);width:100%;box-sizing:border-box;margin-top:4px}.dark-mode-label{display:inline-flex;align-items:center;gap:6px;font-size:.8rem;font-weight:600;color:var(--text-color-secondary)}.dropdown-footer-actions{padding:4px 8px 8px;display:flex;flex-direction:column;gap:4px}.btn-footer-cache{font-size:.84rem;color:var(--text-color-secondary)!important}.btn-footer-cache:hover{color:var(--text-color-primary)!important}.user-menu-dropdown #logout-btn{background-color:#fef2f2!important;color:#dc2626!important;border:1px solid #fecaca!important;border-radius:8px;font-weight:700;margin-top:4px;width:100%;box-sizing:border-box}.user-menu-dropdown #logout-btn i{color:#dc2626!important}.user-menu-dropdown #logout-btn:hover{background-color:#fee2e2!important;border-color:#f87171!important}html.dark .user-menu-dropdown #logout-btn{background-color:#dc262626!important;color:#f87171!important;border-color:#dc26264d!important}html.dark .user-menu-dropdown #logout-btn:hover{background-color:#dc262640!important}.dark-mode-toggle{position:relative;display:inline-block;width:50px;height:26px;cursor:pointer}.dark-mode-toggle input{opacity:0;width:0;height:0}.toggle-slider{position:absolute;top:0;left:0;right:0;bottom:0;background-color:#ccc;border-radius:26px;transition:background-color .2s;display:flex;align-items:center;justify-content:space-between;padding:0 4px}.toggle-slider:before{position:absolute;content:"";height:20px;width:20px;left:3px;bottom:3px;background-color:#fff;border-radius:50%;transition:transform .2s}.toggle-slider .fa-sun,.toggle-slider .fa-moon{font-size:.8em;color:#fff;transition:opacity .2s}.toggle-slider .fa-sun{opacity:1}.toggle-slider .fa-moon{opacity:0}input:checked+.toggle-slider{background-color:var(--primary-color)}input:checked+.toggle-slider:before{transform:translate(24px)}input:checked+.toggle-slider .fa-sun{opacity:0}input:checked+.toggle-slider .fa-moon{opacity:1}@media (max-width: 768px){.user-menu-dropdown{position:fixed;top:auto;bottom:70px;right:10px;left:auto;max-height:calc(100vh - 140px);overflow-y:auto;max-width:280px;min-width:240px}.user-menu-dropdown #logout-btn{position:sticky;bottom:0;background-color:var(--background-color-card);border-top:1px solid var(--border-color-light);z-index:1;margin-bottom:0!important}}@media (min-width: 769px){#top-bar-search-btn{display:none!important}}.pwa-install-popup{position:fixed;left:12px;right:12px;bottom:calc(var(--shell-bottom-nav-height, 60px) + var(--shell-safe-bottom, env(safe-area-inset-bottom, 0px)) + 10px);z-index:1560;display:flex;gap:12px;align-items:flex-start;padding:14px;border-radius:16px;border:1px solid rgba(59,130,246,.22);background:linear-gradient(135deg,#eff6fffa,#fffffffa);box-shadow:0 12px 28px #0f172a33;animation:installPopupEnter .24s ease-out}.pwa-install-popup.closing{animation:installPopupExit .18s ease-in forwards}.pwa-install-popup__icon{width:34px;height:34px;border-radius:10px;background:#2563eb24;color:#1d4ed8;display:flex;align-items:center;justify-content:center;flex-shrink:0}.pwa-install-popup__content{flex:1;min-width:0}.pwa-install-popup__title{margin:0 0 4px;font-size:.98rem;line-height:1.25;color:#0f172a}.pwa-install-popup__desc{margin:0;font-size:.84rem;line-height:1.4;color:#334155}.pwa-install-popup__actions{margin-top:10px;display:flex;gap:8px}.pwa-install-popup__btn{border:none;border-radius:10px;padding:8px 12px;font-size:.82rem;font-weight:600;cursor:pointer}.pwa-install-popup__btn--primary{background:#2563eb;color:#fff}.pwa-install-popup__btn--ghost{background:#0f172a14;color:#0f172a}.fullscreen-fallback-chip{position:fixed;right:12px;bottom:calc(var(--shell-bottom-nav-height, 60px) + var(--shell-safe-bottom, env(safe-area-inset-bottom, 0px)) + 90px);z-index:1550;border:none;border-radius:999px;padding:9px 13px;display:inline-flex;align-items:center;gap:6px;background:#0f172aeb;color:#fff;box-shadow:0 8px 20px #0f172a59;font-size:.8rem;font-weight:600;animation:installPopupEnter .2s ease-out}.fullscreen-fallback-chip:disabled{opacity:.7}@keyframes installPopupEnter{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}@keyframes installPopupExit{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(8px)}}@media (min-width: 769px){.pwa-install-popup,.fullscreen-fallback-chip{display:none!important}}
