:root{--page: #0d0d0d;--surface-1: #17181b;--surface-2: #1e2024;--border: rgba(255, 255, 255, .1);--text-primary: #ffffff;--text-secondary: #c3c2b7;--text-muted: #898781;--accent: #3987e5;--accent-soft: rgba(57, 135, 229, .16);--good: #0ca30c;--good-soft: rgba(12, 163, 12, .16);--warning: #fab219;--warning-soft: rgba(250, 178, 25, .14);--critical: #e66767;--critical-soft: rgba(230, 103, 103, .16);--shadow-card: 0 1px 2px rgba(0, 0, 0, .4), 0 8px 24px -8px rgba(0, 0, 0, .5);--radius: 14px}*{box-sizing:border-box}body{margin:0;background:radial-gradient(1200px 600px at 15% -10%,rgba(57,135,229,.08),transparent 60%),var(--page);color:var(--text-primary);font-family:system-ui,-apple-system,Segoe UI,sans-serif}.app{max-width:1000px;margin:0 auto;padding:32px 20px 72px}.muted{color:var(--text-secondary);font-size:.9rem}.app-header{display:flex;align-items:flex-start;gap:16px;margin-bottom:28px}.app-logo{flex-shrink:0;width:44px;height:44px;border-radius:12px;background:linear-gradient(135deg,var(--accent),#6e4fe0);display:flex;align-items:center;justify-content:center;font-weight:700;font-size:.95rem;letter-spacing:.02em;color:#fff;box-shadow:0 6px 20px -6px #3987e599}.app-header h1{margin:0 0 4px;font-size:1.6rem;letter-spacing:-.01em}.tech-pills{display:flex;gap:6px;margin-top:10px}.tech-pill{font-size:.72rem;font-weight:600;color:var(--text-secondary);background:var(--surface-2);border:1px solid var(--border);border-radius:999px;padding:3px 10px}.card{background:var(--surface-1);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-card);padding:22px;margin-bottom:20px}.section-header{display:flex;align-items:flex-start;gap:12px;margin-bottom:16px}.step-badge{flex-shrink:0;width:26px;height:26px;border-radius:50%;background:var(--accent-soft);color:var(--accent);font-size:.8rem;font-weight:700;display:flex;align-items:center;justify-content:center}.section-header-text{flex:1;min-width:0}.section-header h2{margin:0;font-size:1.05rem}.section-header .muted{margin:4px 0 0}.section-header-right{flex-shrink:0}.icon{vertical-align:-2px;flex-shrink:0}.dropzone{border:2px dashed var(--border);border-radius:10px;padding:32px 20px;text-align:center;cursor:pointer;transition:border-color .15s ease,background-color .15s ease;display:flex;flex-direction:column;align-items:center;gap:10px}.dropzone:hover{border-color:#ffffff38;background:#ffffff05}.dropzone-active{border-color:var(--accent);background:var(--accent-soft)}.dropzone-loading{cursor:default}.dropzone-icon{width:44px;height:44px;border-radius:50%;background:var(--surface-2);color:var(--accent);display:flex;align-items:center;justify-content:center}.dropzone-icon.spin svg{animation:spin 1.1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.dropzone-title{margin:0;font-weight:600}.dropzone-filename{margin:0;font-size:.82rem;color:var(--text-muted)}.error{color:var(--critical);font-size:.9rem;display:flex;align-items:center;gap:6px}.summary-pill{display:inline-flex;align-items:center;gap:6px;font-size:.78rem;font-weight:600;padding:5px 12px;border-radius:999px}.summary-pill-good{background:var(--good-soft);color:var(--good)}.summary-pill-warning{background:var(--warning-soft);color:var(--warning)}.report-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:10px}.report-item{display:flex;align-items:flex-start;gap:10px;background:var(--surface-2);border:1px solid var(--border);border-radius:10px;padding:12px 14px}.report-item-icon{width:22px;height:22px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0;margin-top:1px}.report-item-info .report-item-icon{color:var(--accent);background:var(--accent-soft)}.report-item-fixed .report-item-icon,.report-item-attention .report-item-icon{color:var(--good);background:var(--good-soft)}.report-item-attention.report-item-warn .report-item-icon{color:var(--warning);background:var(--warning-soft)}.report-item-attention.report-item-warn{border-color:#fab21959}.report-value{font-size:1.35rem;font-weight:700;line-height:1.1}.report-label{font-size:.76rem;color:var(--text-muted);margin-top:2px}.search-wrap{position:relative;margin-bottom:14px}.search-icon{position:absolute;left:12px;top:50%;transform:translateY(-50%);color:var(--text-muted)}.search-input{width:100%;padding:9px 12px 9px 34px;border-radius:8px;border:1px solid var(--border);background:var(--surface-2);color:var(--text-primary);font-size:.9rem}.search-input:focus,.filter-number:focus{outline:none;border-color:var(--accent)}.table-wrapper{overflow-x:auto;overflow-y:auto;max-height:480px;border-radius:10px;border:1px solid var(--border);scrollbar-width:thin;scrollbar-color:var(--surface-2) transparent}.table-wrapper::-webkit-scrollbar{width:8px;height:8px}.table-wrapper::-webkit-scrollbar-thumb{background:var(--surface-2);border-radius:8px}.student-table{width:100%;border-collapse:collapse;font-size:.9rem}.student-table th,.student-table td{padding:9px 12px;text-align:left;border-bottom:1px solid var(--border);white-space:nowrap}.student-table thead th{position:sticky;top:0;background:var(--surface-2);color:var(--text-muted);font-weight:600;font-size:.72rem;letter-spacing:.04em;text-transform:uppercase;z-index:1}.student-table tbody tr{transition:background-color .1s ease}.student-table tbody tr:hover{background:#ffffff08}.num{font-variant-numeric:tabular-nums}.cell-total{font-weight:700}.row-debarred{opacity:.5}.status-toggle{display:inline-flex;align-items:center;gap:6px;border:none;border-radius:999px;padding:4px 12px 4px 10px;font-size:.76rem;font-weight:600;cursor:pointer;transition:filter .1s ease}.status-toggle:hover{filter:brightness(1.15)}.status-dot{width:6px;height:6px;border-radius:50%;background:currentColor}.status-active{background:var(--good-soft);color:var(--good)}.status-debarred{background:var(--critical-soft);color:var(--critical)}.table-empty{display:flex;flex-direction:column;align-items:center;gap:8px;padding:32px 0;color:var(--text-muted)}.pagination{display:flex;align-items:center;justify-content:center;gap:16px;margin-top:12px;font-size:.85rem;color:var(--text-muted)}.btn,.btn-secondary{border-radius:8px;padding:9px 16px;border:1px solid var(--border);cursor:pointer;font-weight:600;font-size:.88rem;transition:filter .1s ease,transform .05s ease}.btn-icon{display:inline-flex;align-items:center;gap:7px}.btn{background:var(--accent);color:#071120;border:none}.btn:hover:not(:disabled){filter:brightness(1.08)}.btn:active:not(:disabled){transform:scale(.98)}.btn:disabled{opacity:.45;cursor:not-allowed}.btn-secondary{background:var(--surface-2);color:var(--text-primary)}.btn-secondary:hover:not(:disabled){filter:brightness(1.15)}.btn-secondary:disabled{opacity:.4;cursor:not-allowed}.filter-row{display:flex;align-items:center;gap:14px;flex-wrap:wrap}.slider-track-wrap{flex:1;min-width:180px}.filter-row input[type=range]{width:100%;-webkit-appearance:none;-moz-appearance:none;appearance:none;height:6px;border-radius:999px;background:linear-gradient(to right,var(--accent) 0 var(--fill, 0%),var(--surface-2) var(--fill, 0%) 100%);cursor:pointer}.filter-row input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:18px;height:18px;border-radius:50%;background:var(--accent);border:3px solid var(--surface-1);box-shadow:0 0 0 1px var(--border);cursor:pointer}.filter-row input[type=range]::-moz-range-thumb{width:18px;height:18px;border-radius:50%;background:var(--accent);border:3px solid var(--surface-1);cursor:pointer}.filter-value-badge{display:flex;align-items:center;gap:6px;background:var(--surface-2);border:1px solid var(--border);border-radius:8px;padding:4px 10px}.filter-number{width:56px;padding:4px 2px;border:none;background:transparent;color:var(--text-primary);font-weight:700;font-size:.95rem;text-align:right}.stats-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:12px;margin-bottom:18px}.stat-card{background:var(--surface-2);border:1px solid var(--border);border-radius:10px;padding:16px;text-align:center}.stat-icon{color:var(--accent);display:flex;justify-content:center;margin-bottom:6px}.stat-value{font-size:1.65rem;font-weight:700;color:var(--text-primary)}.stat-label{font-size:.76rem;color:var(--text-muted);margin-top:2px}
