:root{--bg: #ffffff;--bg2: #f0f0f2;--bg3: #c8c8ce;--fg: #18181b;--fg2: #4b4b57;--green: #16a34a;--red: #dc2626;--yellow: #b45309;--purple: #7c3aed;--blue: #2563eb;--gray: #71717a}*{box-sizing:border-box}html,body,#root{margin:0;padding:0;height:100%;background:var(--bg);color:var(--fg);font-family:-apple-system,BlinkMacSystemFont,Helvetica,Arial,sans-serif}body{font-size:14px}.app{display:flex;flex-direction:column;height:100vh}.bar{display:flex;gap:6px;align-items:center;padding:10px 14px;background:var(--bg);border-bottom:1px solid var(--bg3);flex-wrap:wrap}.btn{padding:6px 14px;border:1px solid var(--bg3);border-radius:4px;background:var(--bg2);color:var(--fg);cursor:pointer;font-weight:700;font-size:11px}.btn:hover{background:var(--bg3)}.btn.primary{background:var(--green);color:#fff;border-color:var(--green)}.btn.warn{background:var(--yellow);color:#fff;border-color:var(--yellow)}.btn.danger{background:var(--bg2);color:var(--red);border-color:var(--bg3)}.btn.danger.running{background:var(--red);color:#fff;border-color:var(--red)}.btn.active{background:var(--blue);color:#fff;border-color:var(--blue)}.btn:disabled{opacity:.4;cursor:not-allowed}.spacer{flex:1}.counter{color:var(--fg2);font-size:13px}.header{padding:10px 14px;background:var(--bg);font-weight:700;font-size:13px;border-bottom:1px solid var(--bg3)}.result{padding:10px 14px;background:var(--bg2);font-size:12px;border-bottom:1px solid var(--bg3);min-height:24px}.views{flex:1;display:flex;overflow:hidden;padding:6px 10px}.panel{background:var(--bg2);border-radius:6px;display:flex;flex-direction:column;margin:0 4px;flex:1;overflow:hidden;border:1px solid var(--bg3)}.panel-title{background:var(--bg3);color:var(--purple);padding:6px 10px;font-size:11px;font-weight:700;flex-shrink:0}.panel-title.student{color:var(--blue)}.single-body{flex:1;display:flex;overflow:hidden}.single-image{position:relative;overflow:hidden;background:#f8f8f9;flex-shrink:0}.single-image img{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;object-fit:contain}.single-image canvas{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;pointer-events:none}.single-image .placeholder{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;color:var(--fg2);font-size:13px}.single-resizer{width:5px;background:var(--bg3);cursor:col-resize;flex-shrink:0;transition:background .15s}.single-resizer:hover,.single-resizer.dragging{background:var(--blue)}.single-desc{flex:1;overflow-y:auto;padding:10px 12px;font-size:13px;line-height:1.5;white-space:pre-wrap;color:var(--fg);font-family:-apple-system,Helvetica,sans-serif;min-width:120px}.panel-img{flex:1;min-height:120px;display:flex;align-items:center;justify-content:center;background:var(--bg2);overflow:hidden;padding:4px}.panel-img img{max-width:100%;max-height:100%;object-fit:contain}.panel-img .placeholder{color:var(--fg2);font-size:13px}.panel-name{color:var(--fg2);padding:4px 8px;font-size:11px;text-align:center;border-top:1px solid var(--bg3)}.panel-desc{background:#fff;color:var(--fg2);padding:8px 10px;font-size:11px;line-height:1.4;max-height:40%;overflow:auto;white-space:pre-wrap;font-family:-apple-system,Helvetica,sans-serif;border-top:1px solid var(--bg3)}.tab{display:flex;gap:4px;padding:8px 14px;border-bottom:1px solid var(--bg3)}.tab button{padding:4px 12px;background:transparent;color:var(--fg2);border:0;cursor:pointer;font-size:12px}.tab button.active{color:var(--fg);border-bottom:2px solid var(--blue)}.table-wrap{padding:14px;overflow:auto}table{width:100%;border-collapse:collapse;font-size:12px}th,td{padding:8px 10px;text-align:left;border-bottom:1px solid var(--bg3)}th{color:var(--fg2);font-weight:600}td.grade{color:var(--green);font-weight:700;text-align:right}td.grade.fail{color:var(--red)}.label{color:var(--fg2);font-size:11px}.input{background:#fff;color:var(--fg);border:1px solid var(--bg3);border-radius:4px;padding:4px 8px;font-size:12px}.checkbox{accent-color:var(--blue)}.course-badge{font-size:11px;color:var(--green);background:var(--bg2);padding:3px 8px;border-radius:4px;border:1px solid var(--bg3)}.course-badge.warn{color:var(--red)}.course-active-row td{color:var(--green)}.add-course-form{display:flex;gap:8px;align-items:center;padding:12px;background:var(--bg2);border-radius:6px;margin-top:12px;flex-wrap:wrap;border:1px solid var(--bg3)}
