:root{--blue:#2b6cb0;--bg:#f4f6fa;--text:#1a202c;--muted:#718096;--red:#c53030;--green:#2f855a;--line:#e2e8f0;color:var(--text);font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Noto Sans,Ubuntu,Cantarell,Helvetica Neue,Apple SD Gothic Neo,Malgun Gothic,sans-serif;font-size:16px}*{box-sizing:border-box}body{background:var(--bg);margin:0}.practice-banner{color:#1a202c;text-align:center;background:#f6ad55;padding:4px 10px;font-size:.85rem;font-weight:700;position:static}.practice-banner .build{opacity:.8;margin-left:6px;font-weight:400}main{margin:0 auto;padding:16px}main.narrow{max-width:480px}main.wide{max-width:1100px}h1{margin:8px 0;font-size:1.35rem}h2{margin:14px 0 10px;font-size:1.15rem}h3{margin:16px 0 8px;font-size:1rem}h4{margin:12px 0 6px;font-size:.95rem}.card{background:#fff;border-radius:14px;margin:12px 0;padding:16px;box-shadow:0 1px 4px #00000014}.row{align-items:center;gap:8px;display:flex}.row.wrap{flex-wrap:wrap}.row.between{justify-content:space-between}.grid{grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:10px;margin-bottom:12px;display:grid}.grow{flex:1;min-width:0}.center{text-align:center;padding:40px}.num{text-align:right}label{color:var(--muted);flex-direction:column;gap:4px;font-size:.9rem;display:flex}label.inline{flex-direction:row;align-items:center}form label{margin-bottom:10px}input,select,textarea{color:var(--text);background:#fff;border:1px solid #cbd5e0;border-radius:8px;min-width:0;max-width:100%;padding:9px 10px;font-size:1rem}input.short{width:90px}textarea{width:100%;font-family:inherit}table input,table select{padding:5px 7px;font-size:.95rem}button{cursor:pointer;color:var(--text);background:#fff;border:1px solid #cbd5e0;border-radius:8px;margin:2px;padding:9px 14px;font-size:.95rem}button:disabled{opacity:.5;cursor:default}button.primary,a.primary{background:var(--blue);color:#fff;border-color:var(--blue);font-weight:700}button.link{color:var(--blue);background:0 0;border:none;text-decoration:underline}button.small,.small{font-size:.82rem}button.on{background:var(--blue);color:#fff;border-color:var(--blue)}form button.primary{width:100%;margin-top:6px;padding:12px;font-size:1.05rem}.wide-btn{text-align:center;border-radius:10px;width:100%;margin:8px 0;padding:12px;font-size:1.05rem;text-decoration:none;display:block}a.linkbtn{box-sizing:border-box}.tabs{gap:4px;margin:8px 0 12px;display:flex}.tabs button{flex:1;min-width:0;padding:9px 6px}.tabs.wrap{flex-wrap:wrap}.tabs.wrap button{flex:0 auto}.tabs button.on{background:var(--blue);color:#fff;border-color:var(--blue)}table{border-collapse:collapse;background:#fff;border-radius:10px;width:100%;margin:10px 0;font-size:.95rem;overflow:hidden}th,td{border-bottom:1px solid var(--line);text-align:left;vertical-align:top;padding:8px 10px}th{white-space:nowrap;background:#edf2f7;font-weight:700}tr.dim td{color:var(--muted)}@media (max-width:640px){table{white-space:nowrap;display:block;overflow-x:auto}}.error{color:var(--red)}.ok{color:var(--green);font-weight:700}.warn{color:#b7791f;font-weight:700}.hint,.muted{color:var(--muted);font-size:.9rem}.error-box{background:#fff5f5;border:1px solid #feb2b2;border-radius:10px;margin:16px;padding:16px}.placeholder{color:#2c5282;background:#ebf8ff;border-radius:10px;margin:14px 0;padding:18px}.notice-ok{color:#276749;background:#f0fff4;border:1px solid #c6f6d5;border-radius:8px;padding:6px 10px}.load-failed{background:#fffaf0;border:3px solid #dd6b20;border-radius:12px;gap:6px;margin:10px 0;padding:14px;display:grid}.load-failed .big,.big{font-size:1.15rem;font-weight:800}.load-failed .big{color:#c05621}.siblings{flex-direction:column;gap:6px;margin:16px 0;display:flex}.badge{color:#4a5568;background:#edf2f7;border-radius:99px;margin-right:4px;padding:2px 8px;font-size:.8rem;display:inline-block}.badge.type{color:#44337a;background:#e9d8fd}.badge.late{color:#7b341e;background:#feebc8}.badge.good{color:#22543d;background:#c6f6d5}.badge.wait{color:#44337a;background:#e9d8fd}.inapp-gate a.primary{text-align:center;background:var(--blue);color:#fff;border-radius:10px;margin:12px 0;text-decoration:none;display:block}.session-head{flex-wrap:wrap;gap:4px;margin-bottom:6px;display:flex}.steps{color:var(--muted);flex-wrap:wrap;gap:6px 12px;margin:8px 0 12px;padding:0;font-size:.9rem;list-style:none;display:flex}.steps li.on{color:var(--blue);font-weight:800}.steps li.done{color:var(--green)}.task-box{background:#fffaf0;border:2px solid #f6ad55;border-radius:12px;margin:10px 0;padding:14px}.task-box p{margin:6px 0}.grading-box{background:#ebf8ff;border:2px solid #90cdf4;border-radius:12px;margin:10px 0;padding:14px}.done-box{background:#f0fff4;border:2px solid #9ae6b4;border-radius:12px;margin:10px 0;padding:14px}.verdicts{margin:10px 0}.verdict-grid{grid-template-columns:repeat(auto-fill,minmax(58px,1fr));gap:6px;display:grid}.verdict-grid .v{border:1px solid var(--line);text-align:center;background:#fff;border-radius:10px;flex-direction:column;align-items:center;padding:6px 4px;font-size:1.1rem;display:flex}.verdict-grid .v .no{color:var(--muted);font-size:.75rem}.verdict-grid .v.O{background:#f0fff4;border-color:#9ae6b4}.verdict-grid .v.X{background:#fff5f5;border-color:#feb2b2}.verdict-grid .v.\?{background:#fffaf0;border-color:#f6ad55}.verdict-grid .v.director{background:#faf5ff;border-color:#b794f4}.photo-strip{flex-wrap:wrap;gap:6px;margin:6px 0;display:flex}.photo-strip img{object-fit:cover;border:1px solid var(--line);border-radius:8px;width:92px;height:92px}.thumb{object-fit:cover;border-radius:6px;width:48px;height:48px}.upload-row{border:1px solid var(--line);background:#fff;border-radius:10px;align-items:center;gap:8px;margin:6px 0;padding:8px 10px;display:flex}.upload-row.완료{background:#f0fff4;border-color:#9ae6b4}.upload-row.실패{background:#fff5f5;border-color:#feb2b2}.pick{text-align:center;color:var(--blue);cursor:pointer;background:#fff;border:2px dashed #90cdf4;border-radius:12px;margin:8px 0;padding:16px;font-weight:700;display:block;position:relative}.pick.half{flex:1;min-width:140px}.pick.small-pick{border-style:dotted;padding:8px;font-size:.85rem}.pick.busy{opacity:.5}.pick input[type=file]{opacity:0;pointer-events:none;border:0;width:1px;min-width:0;height:1px;margin:0;padding:0;position:absolute;top:0;left:0;overflow:hidden}.busy-bar{background:#feebc8;border-radius:7px;height:14px;margin:8px 0 4px;overflow:hidden}.busy-fill{background:repeating-linear-gradient(45deg,#ed8936 0,#ed8936 12px,#f6ad55 12px,#f6ad55 24px);border-radius:7px;height:100%;transition:width .4s}.video-box video{background:#000;border-radius:10px;width:100%;max-height:60vh}.recorder{text-align:center;background:#fff5f8;border:2px solid #ed64a6;border-radius:12px;margin:10px 0;padding:14px}.rec-live{color:#c53030;font-weight:700;animation:1s steps(2,end) infinite blink}@keyframes blink{50%{opacity:.4}}.recordings{margin:6px 0}.rec-row{border-bottom:1px solid var(--line);flex-wrap:wrap;align-items:center;gap:8px;padding:6px 0;display:flex}.rec-row audio{max-width:100%;height:36px}.reading-card{background:#faf5ff;border:2px solid #b794f4;border-radius:12px;margin:12px 0;padding:14px}.reading-bar{gap:4px;margin:8px 0;display:flex}.reading-bar span{text-align:center;color:var(--muted);background:#edf2f7;border-radius:8px;flex:1;padding:6px 2px;font-size:.78rem}.reading-bar span.done{color:#22543d;background:#c6f6d5}.reading-bar span.on{background:var(--blue);color:#fff;font-weight:700}.progress-bar{background:#e2e8f0;border-radius:7px;height:14px;margin:6px 0;overflow:hidden}.progress-bar div{background:var(--blue);border-radius:7px;height:100%;transition:width .4s}.mini-bar{vertical-align:middle;background:#e2e8f0;border-radius:5px;width:80px;height:10px;display:inline-block;overflow:hidden}.mini-bar div{background:#e53e3e;height:100%}.cheer-line{color:var(--blue);font-weight:600}.map-grid{grid-template-columns:repeat(auto-fill,minmax(52px,1fr));gap:6px;margin:10px 0;display:grid}.map-cell{border:1px solid var(--line);text-align:center;color:var(--muted);background:#fff;border-radius:8px;flex-direction:column;padding:6px 2px;font-size:.75rem;display:flex}.map-cell b{color:var(--text);font-size:1rem}.map-cell.done{background:#f0fff4;border-color:#9ae6b4}.map-cell.on{background:var(--blue);border-color:var(--blue);color:#fff}.map-cell.on b{color:#fff}.today-log .log-session{border:1px solid var(--line);background:#fff;border-radius:12px;margin:10px 0;padding:12px}.log-attempt{border-top:1px dashed var(--line);margin-top:6px;padding-top:6px}.tiles{grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:8px;margin:10px 0;display:grid}.tile{border:2px solid var(--line);background:#fff;border-radius:12px;flex-direction:column;gap:3px;padding:10px;display:flex}.tile-name{font-weight:800}.tile-stage{color:var(--muted);font-weight:700}.tile.video{border-color:#90cdf4}.tile.solve{border-color:#f6ad55}.tile.grading{background:#ebf8ff;border-color:#90cdf4}.tile.fix{background:#fff5f5;border-color:#fc8181}.tile.waiting{background:#faf5ff;border-color:#b794f4}.tile.explain{background:#fff5f8;border-color:#f687b3}.tile.done{background:#f0fff4;border-color:#68d391}.queue-card h3{margin:0 0 6px}.attempts{flex-direction:column;gap:6px;margin:6px 0;display:flex}.attempt{align-items:flex-start;gap:8px;display:flex}table.keys td,table.keys-edit td{vertical-align:middle}.pick-cell button{padding:6px 8px}.reading-req{background:#faf5ff;border-radius:8px;justify-content:space-between;margin:6px 0;padding:6px 10px}.class-bar{border:1px solid var(--line);background:#fff;border-radius:10px;margin:6px 0;padding:10px 12px}.card.stat{text-align:center}.card.stat .big{color:var(--blue);font-size:1.8rem}.report-preview{white-space:pre-wrap;border:1px solid var(--line);background:#fff;border-radius:10px;padding:12px;font-family:inherit;font-size:.95rem}
