:root{font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;line-height:1.5;color:#222;background:#f7f7f8}body{margin:0}main{max-width:880px;margin:2rem auto;padding:2rem;background:#fff;border-radius:12px;box-shadow:0 1px 4px #0000000f}h1{margin-top:0}a{color:#2c5fd9}.form{display:flex;flex-direction:column;gap:1rem}.form label{display:flex;flex-direction:column;gap:.35rem}.form span{font-weight:500}.form input,.codes-toolbar input{font-size:1.1rem;padding:.65rem .75rem;border:1px solid #ccc;border-radius:8px;font-family:inherit}.form input:focus,.codes-toolbar input:focus{outline:2px solid #2c5fd9;outline-offset:1px}button{font-size:1rem;padding:.65rem 1rem;border:none;border-radius:8px;background:#2c5fd9;color:#fff;cursor:pointer;font-family:inherit}button:hover{background:#2453c4}button:disabled{background:#aaa;cursor:not-allowed}.error{color:#b00020;background:#fde7ea;padding:.65rem .8rem;border-radius:8px;font-size:.95rem}.hint{color:#666;font-size:.9rem;margin:0}.mic{margin:.5rem 0;padding:1rem;background:#f3f4f6;border-radius:8px;display:flex;flex-direction:column;gap:.5rem}.mic-ok{color:#0a7f2e;font-weight:500}.mic-meter{height:14px;background:#ddd;border-radius:7px;overflow:hidden}.mic-meter-fill{height:100%;background:linear-gradient(90deg,#4ade80,#facc15,#ef4444);transition:width .08s linear}.exam-header{display:flex;justify-content:space-between;color:#555;font-size:.95rem;margin-bottom:1rem}.question-meta{color:#888;font-size:.95rem}.question-text{font-size:1.4rem;line-height:1.4;margin:.5rem 0 1.5rem}.big-timer{font-size:4rem;font-weight:700;text-align:center;font-variant-numeric:tabular-nums;color:#2c5fd9;margin:1rem 0 1.5rem}.recording{display:flex;align-items:center;gap:.75rem;background:#fff5f5;padding:.75rem 1rem;border-radius:8px}.recording .mic-meter{flex:1}.rec-dot{width:12px;height:12px;border-radius:50%;background:#e11;animation:pulse 1s infinite}@keyframes pulse{0%,to{opacity:1}50%{opacity:.3}}.done{text-align:center;position:relative;overflow:hidden;padding-top:1.5rem;padding-bottom:2.5rem}.done-title{font-size:2.4rem;margin:.75rem 0 .25rem;animation:fadeUp .6s .55s both ease-out}.done-lead{font-size:1.15rem;color:#444;margin:.25rem 0 .5rem;animation:fadeUp .6s .75s both ease-out}.done-sub{color:#666;margin:.25rem 0 1rem;animation:fadeUp .6s .9s both ease-out}.done-hint{animation:fadeUp .6s 1.05s both ease-out}@keyframes fadeUp{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.check{width:96px;height:96px;margin:.5rem auto 0;display:block}.check circle{fill:none;stroke:#0a7f2e;stroke-width:4;stroke-dasharray:283;stroke-dashoffset:283;animation:drawCircle .55s .05s ease-out forwards}.check path{fill:none;stroke:#0a7f2e;stroke-width:6;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:80;stroke-dashoffset:80;animation:drawCheck .35s .5s ease-out forwards}@keyframes drawCircle{to{stroke-dashoffset:0}}@keyframes drawCheck{to{stroke-dashoffset:0}}.confetti{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;overflow:hidden}.confetti-piece{position:absolute;top:-20px;width:8px;height:14px;border-radius:1px;animation-name:confetti-fall;animation-timing-function:ease-in;animation-fill-mode:forwards;animation-iteration-count:1}.confetti-piece.c1{background:#2c5fd9}.confetti-piece.c2{background:#f59e0b}.confetti-piece.c3{background:#10b981}.confetti-piece.c4{background:#ef4444}.confetti-piece.c5{background:#8b5cf6}.confetti-piece.c6{background:#14b8a6}@keyframes confetti-fall{0%{transform:translateY(0) rotate(0);opacity:0}10%{opacity:1}to{transform:translateY(620px) rotate(540deg);opacity:0}}.admin-nav{background:#1f2937;color:#fff;padding:.75rem 2rem;display:flex;justify-content:space-between;align-items:center;position:sticky;top:0;z-index:5}.admin-nav-links{display:flex;gap:1rem}.admin-nav a{color:#cbd5e1;text-decoration:none;padding:.25rem .5rem;border-radius:4px}.admin-nav a:hover{color:#fff;background:#ffffff14}.admin-nav a.active{color:#fff;background:#ffffff26}.link-button{background:transparent;color:#fff;border:1px solid rgba(255,255,255,.3);padding:.35rem .85rem;border-radius:6px;font-size:.9rem}.link-button:hover{background:#ffffff14}.codes-toolbar{display:flex;gap:1rem;align-items:end;margin:1rem 0 .5rem;flex-wrap:wrap}.codes-toolbar label{display:flex;flex-direction:column;gap:.25rem;font-size:.95rem}.codes-toolbar input{width:8rem}table.data{width:100%;border-collapse:collapse;margin-top:1rem}table.data th,table.data td{padding:.6rem .75rem;text-align:left;border-bottom:1px solid #eee;vertical-align:middle}table.data th{font-size:.85rem;color:#555;font-weight:600;background:#fafafa;text-transform:uppercase;letter-spacing:.02em}table.data code,.answer-head code,p code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;background:#f3f4f6;padding:.05rem .4rem;border-radius:4px}.badge{display:inline-block;padding:.15rem .6rem;border-radius:999px;font-size:.85rem;font-weight:500}.badge.used{background:#fde7ea;color:#b00020}.badge.free{background:#e7f8ee;color:#0a7f2e}.badge.finished{background:#e7f1fd;color:#1d4ed8}.badge.progress{background:#fef3c7;color:#92400e}.badge.expired{background:#f3f4f6;color:#6b7280}.answer{background:#fafafa;border:1px solid #eee;border-radius:8px;padding:1rem 1.25rem;margin:1rem 0}.answer-head{color:#555;font-size:.9rem;margin-bottom:.25rem}.answer .question-text{font-size:1.1rem;margin:.3rem 0 .75rem}.answer audio{width:100%;margin-top:.5rem}.transcribe-toolbar{display:flex;align-items:center;gap:1rem;margin:1rem 0 .5rem;flex-wrap:wrap}.transcript{margin-top:.75rem;padding:.75rem 1rem;background:#f0f7ff;border-left:3px solid #2c5fd9;border-radius:4px}.transcript-label{font-size:.85rem;color:#555;font-weight:500;margin-bottom:.25rem}.transcript-text{margin:0;white-space:pre-wrap;line-height:1.5}.transcript-status{margin-top:.5rem;font-style:italic}.transcript-status.fail{color:#b00020;font-style:normal}.ai-toolbar{display:flex;align-items:center;gap:1rem;margin:.75rem 0;flex-wrap:wrap}.grade-comment{margin-top:.75rem;padding:.75rem 1rem;background:#fffbeb;border-left:3px solid #f59e0b;border-radius:4px}.grade-comment-label{font-size:.85rem;color:#555;font-weight:500;margin-bottom:.25rem}.grade-comment-text{margin:0;white-space:pre-wrap;line-height:1.5}.grade-badge{display:inline-block;margin-left:.5rem;padding:.15rem .6rem;border-radius:999px;font-size:.85rem;font-weight:600;vertical-align:middle}.grade-badge.large{font-size:1.05rem;padding:.25rem .75rem}.grade-badge.good{background:#e7f8ee;color:#0a7f2e}.grade-badge.mid{background:#fef3c7;color:#92400e}.grade-badge.bad{background:#fde7ea;color:#b00020}.live{max-width:1200px}.ws-status{font-size:.85rem;font-weight:500;padding:.15rem .6rem;border-radius:999px;margin-left:.5rem;vertical-align:middle}.ws-status.on{background:#e7f8ee;color:#0a7f2e}.ws-status.off{background:#fde7ea;color:#b00020}.live-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(290px,1fr));gap:1rem;margin-top:1rem}.live-card{background:#fff;border:1px solid #e5e7eb;border-radius:10px;padding:1rem;transition:border-color .2s,background .2s;display:flex;flex-direction:column;gap:.5rem}.live-card.silent{background:#fff5f5;border-color:#fecaca;animation:silentPulse 1.6s ease-in-out infinite}@keyframes silentPulse{0%,to{box-shadow:0 0 #ef444400}50%{box-shadow:0 0 0 6px #ef44442e}}.live-card-head{display:flex;justify-content:space-between;align-items:baseline;gap:.5rem}.live-card-meta{color:#666;font-size:.85rem}.live-card-text{font-size:.95rem;line-height:1.35;color:#222;min-height:2.5em}.live-card-row{display:flex;align-items:center;gap:.75rem}.live-card-timer{font-size:1.6rem;font-weight:700;font-variant-numeric:tabular-nums;color:#2c5fd9;min-width:3.2rem}.live-card-meter{flex:1;height:14px;background:#e5e7eb;border-radius:7px;overflow:hidden}.live-card-meter-fill{height:100%;background:linear-gradient(90deg,#4ade80,#facc15,#ef4444);transition:width .2s linear}.live-card-footer{display:flex;gap:.5rem;flex-wrap:wrap}.flag{display:inline-block;padding:.15rem .55rem;border-radius:999px;font-size:.8rem;font-weight:500}.flag-active{background:#e7f8ee;color:#0a7f2e}.flag-silent{background:#fde7ea;color:#b00020}.flag-warn{background:#fef3c7;color:#92400e}
