.login-form-container{box-sizing:border-box;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;max-width:100%;max-height:100dvh;padding:1.25rem;position:relative;overflow-y:auto}.login-form-container:before{content:"";-webkit-backdrop-filter:blur(.625rem);backdrop-filter:blur(.625rem);z-index:-1;background:#fffffff2;border-radius:.75rem;position:absolute;inset:0}.login-header{justify-content:flex-start;align-items:center;gap:.75rem;margin-bottom:1rem;display:flex}.login-logo{flex-shrink:0;width:3rem;height:auto}.login-app-name{color:#2c3e50;margin:0;font-size:1.5rem;font-weight:700}.login-form{box-sizing:border-box;text-align:center;background:#fff;border-radius:.75rem;width:100%;max-width:25rem;padding:clamp(1.5rem,1rem + 1.5vw,2rem);box-shadow:0 .625rem 1.5625rem #0000001a}.login-form h3{color:#333;text-align:left;margin:0 0 1.5rem;font-size:clamp(1.3rem,1.1rem + .5vw,1.5rem);font-weight:600}.login-button{cursor:pointer;text-align:center;border:none;border-radius:.5rem;justify-content:center;align-items:center;gap:.5rem;width:100%;min-height:2.75rem;margin:.5rem 0;padding:.75rem 1rem;font-size:1rem;font-weight:600;transition:background-color .3s,box-shadow .3s;display:flex}.login-button-sso{color:#333;background:#fff;border:.125rem solid #e1e5e9;border-radius:.5rem;justify-content:center;align-items:center;gap:.5rem;min-height:2.75rem;padding:.5rem .75rem;font-size:.875rem;font-weight:600;transition:border-color .3s,box-shadow .3s;display:flex}.login-button-sso:hover:not(:disabled){border-color:#007bff;box-shadow:0 0 0 .1875rem #007bff1a}.login-button:disabled{opacity:.6;cursor:not-allowed;transform:none}.classlink-logo{width:auto;max-height:2rem;display:block}.login-error{color:#991b1b;background:#fef2f2;border:.0625rem solid #fca5a5;border-radius:.375rem;margin:.625rem 0;padding:.625rem;font-size:.875rem}.login-footer{text-align:center;color:#666;margin-top:2rem;font-size:clamp(.8125rem,.75rem + .2vw,.875rem);line-height:1.5}.login-link{color:#007bff;font-weight:500;text-decoration:none}.login-link:hover{text-decoration:underline}.login-support{margin-bottom:1rem}.login-terms{margin-bottom:1rem;font-size:clamp(.7rem,.65rem + .15vw,.8125rem)}.login-signup{margin-bottom:0;font-weight:500}.login-button:focus-visible,.login-button-sso:focus-visible,.login-link:focus-visible{outline-offset:.125rem;outline:.125rem solid #007bff}.filterRow{flex-wrap:wrap;gap:1rem;display:flex}.filterSelect{min-width:clamp(10rem,15vw,14rem)}.statistic-title{color:#00000073;font-size:var(--text-sm);margin-bottom:.25rem}.statistic-value{align-items:center;gap:.25rem;font-size:clamp(1.25rem,1.5vw,1.5rem);font-weight:600;display:flex}.statistic-prefix{align-items:center;margin-right:.25rem;display:inline-flex}.statistic-suffix{font-size:var(--text-sm);margin-left:.25rem;font-weight:400}@media (prefers-color-scheme:dark){.statistic-title{color:#ffffff73}}.recommendationAvatar{color:#fff;background-color:#1890ff;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:2rem;height:2rem;display:flex}.recommendationTag{cursor:pointer}.tag-button{font-family:inherit}.recommendationTagReadonly{cursor:default}.recommendationDescription{color:#00000073;margin-bottom:.25rem}.recommendationItem{padding:var(--space-sm) 0;border-bottom:1px solid #f0f0f0;align-items:center;gap:12px;display:flex}.recommendationItem:last-child{border-bottom:none}.recommendationContent{flex-direction:column;flex:1;gap:2px;display:flex}@media (prefers-color-scheme:dark){.recommendationDescription{color:#ffffff73}.recommendationItem{border-bottom-color:#333}}.eslContainer{height:100%;padding:var(--space-sm);background-color:#f0f2f5;overflow:auto}.kpiRow{margin-bottom:var(--space-md);grid-template-columns:repeat(4,1fr);gap:1rem;display:grid}@media (width<=62rem){.kpiRow{grid-template-columns:repeat(2,1fr)}}@media (width<=36rem){.kpiRow{grid-template-columns:1fr}}.chartsRow{margin-bottom:var(--space-md);grid-template-columns:repeat(2,1fr);gap:1rem;display:grid}@media (width<=62rem){.chartsRow{grid-template-columns:1fr}}.btn{font-size:inherit;cursor:pointer;white-space:nowrap;border:1px solid #0000;border-radius:6px;align-items:center;gap:.375rem;padding:.375rem .75rem;font-family:inherit;transition:background .2s,border-color .2s;display:inline-flex}.btn-primary{color:#fff;background:#1890ff;border-color:#1890ff}.btn-primary:hover{background:#40a9ff;border-color:#40a9ff}.btn-sm{font-size:var(--text-sm);padding:.125rem .5rem}.segmented{background:#f5f5f5;border-radius:6px;padding:2px;display:flex}.segmented-item{cursor:pointer;min-height:2.75rem;font-size:inherit;text-align:center;background:0 0;border:none;border-radius:4px;flex:1;padding:.375rem .75rem;font-family:inherit;transition:background .2s}.segmented-item.active{background:#fff;box-shadow:0 1px 2px #0000001a}.modalSegmented{margin-bottom:1rem}.detail-dialog{width:90%;max-width:75rem;padding:var(--space-md);border:none;border-radius:8px;box-shadow:0 4px 24px #00000026}.detail-dialog::backdrop{background:#00000073}.dialog-header{justify-content:space-between;align-items:center;margin-bottom:1rem;display:flex}.dialog-header h2{margin:0;font-size:clamp(1rem,1.25vw,1.25rem)}.dialog-close{cursor:pointer;color:#00000073;background:0 0;border:none;justify-content:center;align-items:center;min-width:2.75rem;min-height:2.75rem;padding:.5rem .75rem;font-size:1.5rem;line-height:1;display:flex}.dialog-close:hover{color:#000000d9}.data-table-wrapper{width:100%}.data-table-scroll{max-height:450px;overflow:auto}.data-table{border-collapse:collapse;width:100%;min-width:600px;font-size:var(--text-sm)}.data-table th,.data-table td{text-align:left;-webkit-user-select:text;user-select:text;border-bottom:1px solid #f0f0f0;padding:.5rem .75rem}.data-table th{z-index:1;background:#fafafa;font-weight:600;position:sticky;top:0}.th-content{align-items:center;gap:.25rem;display:inline-flex}button.th-content.sortable{font:inherit;color:inherit;cursor:pointer;background:0 0;border:none;padding:0}.th-content.sortable:hover{color:#1890ff}.column-filter{width:100%;font-weight:400;font-size:var(--text-sm);margin-top:.25rem;display:block}.data-table tbody tr:hover{background:#fafafa}.cell-explanation{cursor:pointer;font:inherit;color:inherit;text-align:left;background:0 0;border:0;width:100%;margin:0;padding:0}.cell-ellipsis{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.table-loading{text-align:center;color:#00000073;padding:2rem}.pagination{font-size:var(--text-sm);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:.5rem;padding:.75rem 0;display:flex}.pagination-total{color:#00000073}.pagination-controls{align-items:center;gap:.5rem;display:flex}.pagination-controls button{cursor:pointer;min-height:2.75rem;font-size:var(--text-sm);background:#fff;border:1px solid #d9d9d9;border-radius:4px;padding:.25rem .75rem;font-family:inherit}.pagination-controls button:disabled{opacity:.4;cursor:not-allowed}.pagination-controls button:not(:disabled):hover{color:#1890ff;border-color:#1890ff}.pagination-info{color:#000000a6}.shimmer{background:linear-gradient(90deg,#f0f0f0 25%,#e0e0e0 50%,#f0f0f0 75%) 0 0/200% 100%;border-radius:4px;width:4rem;height:1.25em;animation:1.5s infinite shimmer;display:inline-block}.shimmer-block{background:linear-gradient(90deg,#f0f0f0 25%,#e8e8e8 50%,#f0f0f0 75%) 0 0/200% 100%;border-radius:4px;width:100%;height:340px;animation:1.5s infinite shimmer}@keyframes shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.recharts-wrapper,.recharts-wrapper *{-webkit-tap-highlight-color:transparent}.recharts-wrapper :focus:not(:focus-visible),.recharts-wrapper:focus:not(:focus-visible){outline:none}@media (prefers-color-scheme:dark){.eslContainer{color:#e0e0e0;background-color:#1a1a1a}.data-table th{background:#2a2a2a}.data-table th,.data-table td{border-bottom-color:#333}.data-table tbody tr:hover{background:#2a2a2a}.table-loading,.pagination-total{color:#ffffff73}.pagination-info{color:#ffffffa6}.pagination-controls button{color:#e0e0e0;background:#2a2a2a;border-color:#444}.pagination-controls button:not(:disabled):hover{color:#40a9ff;border-color:#40a9ff}.detail-dialog{color:#e0e0e0;background:#1a1a1a}.dialog-close{color:#ffffff73}.dialog-close:hover{color:#ffffffd9}.segmented{background:#2a2a2a}.segmented-item.active{background:#3a3a3a}.shimmer,.shimmer-block{background:linear-gradient(90deg,#2a2a2a 25%,#333 50%,#2a2a2a 75%) 0 0/200% 100%}.btn-primary{background:#1890ff;border-color:#1890ff}.th-content.sortable:hover{color:#40a9ff}}.layout{height:100%;display:flex;overflow:hidden}.content{flex:1;height:100%;margin:0;padding:0;overflow:hidden}.sidebar{background-color:#001529;flex-direction:column;flex-shrink:0;width:200px;transition:width .2s;display:flex;overflow:hidden}.sidebar-collapsed{width:56px}.siderContainer{flex-direction:column;flex:1;height:100%;display:flex;overflow:hidden}.logoArea{flex-direction:column;flex-shrink:0;justify-content:center;align-items:center;gap:.5rem;height:auto;margin:1rem 0;display:flex}.logoLink{text-decoration:none}.logoCircle{cursor:pointer;background-color:#1890ff;border-radius:50%;justify-content:center;align-items:center;transition:width .3s,height .3s,padding .3s;display:flex;box-shadow:0 .125rem .5rem #00000026}.logoCircle.collapsed{width:clamp(2rem,2.5vw,2.625rem);height:clamp(2rem,2.5vw,2.625rem);padding:1px}.logoCircle.expanded{width:clamp(3rem,4vw,4rem);height:clamp(3rem,4vw,4rem);padding:2px}.logoImage{filter:brightness(1.2);max-width:95%;height:auto;transition:width .3s}.logoImage.collapsed{width:clamp(1.75rem,2vw,2.25rem)}.logoImage.expanded{width:clamp(2.5rem,3.5vw,3.4375rem)}.userNameBadge{color:#fff;font-weight:600;font-size:var(--text-sm);text-align:center;white-space:nowrap;text-overflow:ellipsis;background-color:#52c41a;border-radius:.75rem;max-width:clamp(8rem,15vw,11.25rem);padding:.375rem .75rem;overflow:hidden;box-shadow:0 .125rem .25rem #0000001a}.nav-menu{flex:1}.nav-menu ul{margin:0;padding:0;list-style:none}.nav-menu-item a,.nav-menu-item button{color:#ffffffa6;font-size:inherit;cursor:pointer;white-space:nowrap;background:0 0;border:none;align-items:center;gap:.625rem;width:100%;padding:.75rem 1rem;font-family:inherit;text-decoration:none;transition:color .2s;display:flex}.nav-menu-item a:hover,.nav-menu-item button:hover{color:#fff}.nav-menu-item.active a{color:#fff;background-color:#1890ff}.sidebar-collapsed .nav-label{display:none}.menuSeparator{border-top:1px solid #434343}.sidebar-trigger{color:#ffffffa6;cursor:pointer;background:#002140;border:none;justify-content:center;align-items:center;min-height:2.75rem;padding:.75rem;transition:color .2s;display:flex}.sidebar-trigger:hover{color:#fff}.skip-link{z-index:9999;color:#fff;background:#2c3e50;padding:.5rem 1rem;font-weight:600;text-decoration:none;position:absolute;top:-100%;left:0}.skip-link:focus{top:0}@media (prefers-color-scheme:dark){.content{color:#e0e0e0;background:#141414}}@media (width<=62rem){.sidebar,.sidebar.sidebar-collapsed{flex:none;width:auto;min-width:0;max-width:none;position:relative}.sidebar-trigger{width:100%;position:absolute;bottom:0}.siderContainer{padding-inline:.5rem}}:root{--space-xs:clamp(.25rem, .5vw, .5rem);--space-sm:clamp(.5rem, 1vw, 1rem);--space-md:clamp(1rem, 1.5vw, 1.5rem);--space-lg:clamp(1.5rem, 2vw, 2rem);--text-sm:clamp(.7rem, .65rem + .25vw, .8rem);--content-max-width:120rem}html,body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;height:100%;margin:0;padding:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;overflow:hidden}body{padding:env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left)}#root{height:100%;overflow:hidden}:focus-visible{outline-offset:.125rem;outline:.125rem solid #4ecdc4}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important}}.card{padding:var(--space-md);background:#fff;border:1px solid #f0f0f0;border-radius:8px}.card-header{justify-content:space-between;align-items:center;margin-bottom:.75rem;font-size:clamp(.875rem,1vw,1rem);font-weight:600;display:flex}.tag{font-size:var(--text-sm);border-radius:4px;padding:.125rem .5rem;font-weight:500;line-height:1.5;display:inline-block}.tag-purple{color:#722ed1;background:#f9f0ff;border:1px solid #d3adf7}.tag-orange{color:#d46b08;background:#fff7e6;border:1px solid #ffd591}.tag-blue{color:#096dd9;background:#e6f7ff;border:1px solid #91d5ff}.tag-green{color:#389e0d;background:#f6ffed;border:1px solid #b7eb8f}.tag-geekblue{color:#1d39c4;background:#f0f5ff;border:1px solid #adc6ff}.select{min-height:2.75rem;font-size:inherit;cursor:pointer;appearance:auto;background:#fff;border:1px solid #d9d9d9;border-radius:6px;padding:.375rem .75rem;font-family:inherit}.select:focus{border-color:#1890ff;outline:none;box-shadow:0 0 0 2px #1890ff33}@media (prefers-color-scheme:dark){.card{color:#e0e0e0;background:#1e1e1e;border-color:#333}.tag-purple{color:#b580f5;background:#1a0a2e;border-color:#722ed1}.tag-orange{color:#ffa940;background:#2a1800;border-color:#d46b08}.tag-blue{color:#69c0ff;background:#001d33;border-color:#096dd9}.tag-green{color:#73d13d;background:#0a1f00;border-color:#389e0d}.tag-geekblue{color:#85a5ff;background:#0a1433;border-color:#1d39c4}.select{color:#e0e0e0;background:#2a2a2a;border-color:#444}.select:focus{border-color:#40a9ff;box-shadow:0 0 0 2px #40a9ff33}}@media (prefers-contrast:more){:focus-visible{outline-width:.1875rem}.btn{border:.125rem solid #000}}@media (forced-colors:active){.btn,.select{border:.125rem solid buttontext}}
