:root{--bg: #0d1220;--panel: #151d2e;--panel-2: #1c2740;--panel-3: #222f4d;--line: #283350;--line-soft: #1f2942;--text: #eceff6;--muted: #8b95ad;--muted-2: #6a7489;--accent: #5b8cff;--accent-hi: #7aa2ff;--accent-soft: rgba(91, 140, 255, .14);--accent-2: #33406a;--danger: #ff6b6b;--warn: #f2b84b;--ok: #46d39a;--shadow: 0 1px 2px rgba(0,0,0,.28), 0 8px 24px rgba(0,0,0,.22);--shadow-lg: 0 2px 6px rgba(0,0,0,.3), 0 18px 46px rgba(0,0,0,.34);--radius: 16px;--radius-sm: 10px}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;background:radial-gradient(1200px 680px at 82% -12%,rgba(91,140,255,.1),transparent 60%),radial-gradient(900px 560px at -8% 8%,rgba(70,211,154,.06),transparent 55%),var(--bg);background-attachment:fixed;color:var(--text);-webkit-font-smoothing:antialiased;line-height:1.5}h1,h2,h3{letter-spacing:-.01em}h2{font-size:23px;font-weight:700}h3{font-size:16px;font-weight:650}a{color:var(--accent);text-decoration:none}a:hover{color:var(--accent-hi)}.center{min-height:100%;display:grid;place-items:center;padding:24px}.muted{color:var(--muted)}.error{color:var(--danger);font-size:14px}.small{font-size:13px}.row{display:flex;gap:12px;align-items:center;flex-wrap:wrap}.col{display:flex;flex-direction:column;gap:10px}.spacer{flex:1}.right{margin-left:auto}.card{background:linear-gradient(180deg,#ffffff04,#fff0),var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:22px;box-shadow:var(--shadow)}.card+.card{margin-top:16px}.card>h3:first-child,.card>h2:first-child{margin-top:0}.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:16px}.grid+.card,.card+.grid{margin-top:16px}.login{width:340px;display:flex;flex-direction:column;gap:12px;padding:30px}.login h1{margin:0 0 2px;font-size:28px}input,select,textarea{background:var(--panel-2);border:1px solid var(--line);color:var(--text);border-radius:var(--radius-sm);padding:10px 12px;font-size:15px;outline:none;width:100%;transition:border-color .15s ease,box-shadow .15s ease,background .15s ease}input::placeholder,textarea::placeholder{color:var(--muted-2)}input:focus,select:focus,textarea:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}label.field{display:flex;flex-direction:column;gap:6px;font-size:13px;color:var(--muted)}button{background:linear-gradient(180deg,var(--accent-hi),var(--accent));color:#fff;border:none;border-radius:var(--radius-sm);padding:10px 16px;font-size:15px;font-weight:600;cursor:pointer;white-space:nowrap;transition:transform .12s ease,filter .15s ease,box-shadow .15s ease;box-shadow:0 1px 2px #00000040}button:hover:not(:disabled){filter:brightness(1.06);transform:translateY(-1px);box-shadow:0 4px 14px #5b8cff4d}button:active:not(:disabled){transform:translateY(0)}button:disabled{opacity:.45;cursor:default}button.ghost{background:transparent;border:1px solid var(--line);color:var(--text);box-shadow:none}button.ghost:hover:not(:disabled){background:var(--panel-2);border-color:var(--panel-3);box-shadow:none}button.small{padding:6px 12px;font-size:13px}button.danger{background:linear-gradient(180deg,#ff8585,var(--danger))}button.ok{background:linear-gradient(180deg,#63e0ac,var(--ok));color:#06281c}.app{min-height:100%;display:flex;flex-direction:column}.topbar{display:flex;align-items:center;gap:12px;position:sticky;top:0;z-index:20;padding:13px 22px;border-bottom:1px solid var(--line);background:#121826d1;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.topbar select{width:auto}.brand{font-weight:700;font-size:18px;letter-spacing:-.02em}.brand:first-letter{color:var(--accent)}.body{display:flex;flex:1;min-height:0}.sidebar{width:210px;border-right:1px solid var(--line-soft);padding:18px 12px;display:flex;flex-direction:column;gap:3px}.sidebar a{padding:10px 13px;border-radius:10px;color:var(--muted);font-weight:550;font-size:14.5px;transition:background .14s ease,color .14s ease;position:relative}.sidebar a:hover{background:var(--panel);color:var(--text)}.sidebar a.active{background:linear-gradient(180deg,var(--panel-3),var(--panel-2));color:#fff;box-shadow:inset 0 0 0 1px var(--line)}.sidebar a.active:before{content:"";position:absolute;left:3px;top:10px;bottom:10px;width:3px;border-radius:3px;background:var(--accent)}.content{padding:34px 44px 64px;flex:1;overflow:auto}.content>*{max-width:1160px}.content>h2{margin-top:0}.pagehead{display:flex;align-items:baseline;gap:12px;margin-bottom:22px;flex-wrap:wrap}.pagehead h2{margin:0}.subtitle{color:var(--muted);font-size:14px;margin:-14px 0 22px}.badge{display:inline-flex;align-items:center;gap:5px;padding:3px 10px;border-radius:999px;font-size:12px;font-weight:600;background:var(--panel-2);border:1px solid var(--line);color:var(--muted);white-space:nowrap}.badge.ok{color:var(--ok);border-color:#46d39a80;background:#46d39a1a}.badge.warn{color:var(--warn);border-color:#f2b84b80;background:#f2b84b1a}.badge.danger{color:var(--danger);border-color:#ff6b6b80;background:#ff6b6b1a}.badge.dot:before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor;display:inline-block}.bar{height:8px;border-radius:999px;background:var(--panel-2);overflow:hidden}.bar>span{display:block;height:100%;background:linear-gradient(90deg,var(--accent),var(--accent-hi));border-radius:999px;transition:width .4s ease}table{width:100%;border-collapse:collapse}th,td{text-align:left;padding:11px 8px;border-bottom:1px solid var(--line-soft);font-size:14px}th{color:var(--muted);font-weight:600;font-size:12.5px;text-transform:uppercase;letter-spacing:.03em}tbody tr{transition:background .12s ease}tbody tr:hover{background:#ffffff05}.list{display:flex;flex-direction:column;gap:10px}.item{display:flex;align-items:center;gap:12px;padding:13px 15px;border:1px solid var(--line);border-radius:12px;background:var(--panel);transition:border-color .14s ease,transform .12s ease,box-shadow .14s ease}.item.hover:hover{border-color:var(--panel-3);transform:translateY(-1px);box-shadow:var(--shadow)}.item .title{font-weight:600}.stat{font-size:30px;font-weight:750;letter-spacing:-.02em}.stat-label{color:var(--muted);font-size:12.5px;text-transform:uppercase;letter-spacing:.04em}.notice{padding:12px 14px;border-radius:12px;border:1px solid var(--line);background:var(--panel-2)}.notice.warn{border-color:#f2b84b80;color:var(--warn);background:#f2b84b14}.notice.danger{border-color:#ff6b6b80;color:var(--danger);background:#ff6b6b14}.chapter{display:flex;align-items:flex-start;gap:14px}.chapter .ch-main{min-width:0;flex:1}.chapter .ch-name{font-size:16.5px;font-weight:650;line-height:1.3}.chapter .ch-name.untitled{color:var(--muted);font-weight:500}.chapter .ch-file{display:inline-flex;align-items:center;gap:6px;color:var(--muted);font-size:12.5px;margin-top:4px}.chapter .ch-file code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px;color:var(--muted)}.chapter .ch-meta{display:flex;align-items:center;gap:10px;margin-top:10px;flex-wrap:wrap}.chapter .ch-actions{display:flex;align-items:center;gap:8px;flex-shrink:0}.divider{height:1px;background:var(--line-soft);margin:14px 0 2px}@media (max-width: 720px){.content{padding:24px 18px 48px}.sidebar{width:168px}.chapter{flex-wrap:wrap}.chapter .ch-actions{width:100%}}.player{min-height:100vh;display:flex;flex-direction:column;background:var(--bg)}.player-top{display:flex;align-items:center;gap:12px;padding:10px 18px;border-bottom:1px solid var(--line);background:var(--panel)}.speak{font-size:13px;color:var(--muted)}.speak.on{color:var(--accent)}.proctor-cam{width:92px;height:68px;border-radius:8px;object-fit:cover;background:#000;border:1px solid var(--line)}.player-body{flex:1;display:grid;grid-template-columns:1fr 340px;gap:18px;padding:20px;max-width:1200px;width:100%;margin:0 auto}.qpanel{align-self:start}.qstem{font-size:20px;line-height:1.5;margin:14px 0 18px}.opt{text-align:left;background:var(--panel-2);border:1px solid var(--line);color:var(--text);font-weight:500;box-shadow:none}.opt:hover{border-color:var(--accent)}.opt.sel{background:var(--accent-2);border-color:var(--accent)}.photobtn{display:inline-block;cursor:pointer;background:var(--accent-2);padding:8px 14px;border-radius:8px;font-size:14px}.sidepanel{display:flex;flex-direction:column;gap:14px}.transcript{font-size:14px;line-height:1.45;max-height:180px;overflow:auto;margin:6px 0 0;white-space:pre-wrap}@media (max-width: 820px){.player-body{grid-template-columns:1fr}}.badge.easy{color:var(--ok);border-color:#46d39a80;background:#46d39a1a}.badge.medium{color:var(--warn);border-color:#f2b84b80;background:#f2b84b1a}.badge.hard{color:var(--danger);border-color:#ff6b6b80;background:#ff6b6b1a}.statcard{display:flex;flex-direction:column;gap:7px}.statcard .stat{line-height:1}.player-progress{height:3px;background:var(--panel-2)}.player-progress>span{display:block;height:100%;background:linear-gradient(90deg,var(--accent),var(--accent-hi));transition:width .45s ease}.turn{display:flex;align-items:center;gap:14px;padding:14px 18px;border-radius:14px;border:1px solid var(--line);background:var(--panel-2);margin-bottom:18px}.turn.you{border-color:#46d39a73;background:#46d39a12}.turn.examiner{border-color:#5b8cff73;background:#5b8cff12}.turn .mic{width:42px;height:42px;border-radius:50%;display:grid;place-items:center;font-size:19px;flex-shrink:0;background:var(--panel-3)}.turn.you .mic{background:#46d39a29;animation:pulse-ok 1.7s ease-in-out infinite}.turn.examiner .mic{background:#5b8cff29}.turn .turn-title{font-weight:650}.turn .turn-sub{color:var(--muted);font-size:13px;margin-top:2px}.turn .spacer{flex:1}@keyframes pulse-ok{0%,to{box-shadow:0 0 #46d39a73}50%{box-shadow:0 0 0 9px #46d39a00}}.wave{display:inline-flex;gap:3px;align-items:center;height:22px}.wave i{width:3px;height:8px;background:var(--accent-hi);border-radius:2px;animation:wv 1s ease-in-out infinite}.wave i:nth-child(2){animation-delay:.15s}.wave i:nth-child(3){animation-delay:.3s}.wave i:nth-child(4){animation-delay:.45s}.wave i:nth-child(5){animation-delay:.6s}@keyframes wv{0%,to{height:6px}50%{height:20px}}.done-btn{font-size:16px;padding:13px 24px}.opt{transition:border-color .14s ease,background .14s ease,transform .1s ease}.opt:active{transform:translateY(1px)}.tutor-log{display:flex;flex-direction:column;gap:8px;max-height:340px;overflow:auto;padding:8px 0}.bubble{padding:10px 14px;border-radius:14px;max-width:82%;font-size:14px;line-height:1.45;white-space:pre-wrap}.bubble.student{align-self:flex-end;background:linear-gradient(180deg,var(--accent-hi),var(--accent));color:#fff}.bubble.tutor{align-self:flex-start;background:var(--panel-2);border:1px solid var(--line)}
