:root{--color-primary:#1E6DF2;--color-primary-hover:#1557D8;--color-primary-light:#E8F0FE;--color-secondary:#0EA5E9;--color-accent:#06B6D4;--color-success:#34C759;--color-error:#FF3B30;--color-warning:#FF9500;--color-bg:#FFF;--color-bg-secondary:#F5F7FA;--color-bg-tertiary:#EBEDF0;--color-text-primary:#1D1D1F;--color-text-secondary:#6B7280;--color-text-tertiary:#9CA3AF;--color-border:#E5E7EB;--color-border-focus:#1E6DF2;--color-shadow:rgba(0,0,0,0.06);--color-shadow-md:rgba(0,0,0,0.08);--gradient-primary:linear-gradient(135deg,#1E6DF2 0,#0EA5E9 100%);--gradient-header:linear-gradient(180deg,#F0F5FF 0,#FFF 100%);--font-sans:-apple-system,BlinkMacSystemFont,"SF Pro Display","PingFang SC","Helvetica Neue","Microsoft YaHei",sans-serif;--font-mono:"SF Mono","Fira Code",Consolas,monospace;--blue:var(--color-primary);--white:var(--color-bg);--gray-light:var(--color-border);--gray:var(--color-text-tertiary);--green:var(--color-success);--red:var(--color-error);--blue-light:var(--color-primary-light);--blue-dark:var(--color-primary-hover);--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-5:20px;--space-6:24px;--space-8:32px;--space-10:40px;--space-12:48px;--space-16:64px;--radius-sm:8px;--radius:12px;--radius-lg:16px;--radius-full:9999px;--shadow-sm:0 1px 2px var(--color-shadow);--shadow:0 2px 8px var(--color-shadow);--shadow-md:0 4px 16px var(--color-shadow-md);--shadow-lg:0 8px 32px var(--color-shadow-md)}*{margin:0;padding:0;box-sizing:border-box;font-family:var(--font-sans)}html,body{height:100%;background:var(--color-bg-secondary)}body{display:flex;align-items:center;justify-content:center;padding:var(--space-4)}.page{position:fixed;top:0;left:0;right:0;bottom:0;z-index:9999;display:none;align-items:center;justify-content:center;padding:var(--space-4);overflow-y:auto;background:var(--color-bg-secondary)}.page.active{display:flex}.page-glow{background:var(--gradient-header)}.card{background:var(--color-bg);border-radius:var(--radius-lg);padding:var(--space-8) var(--space-6);width:100%;max-width:420px;margin:0 auto;box-shadow:var(--shadow-md)}.card-wide{max-width:520px}.card hr{border:none;height:1px;background:var(--color-border);margin:var(--space-4) 0}.brand{text-align:center;margin-bottom:var(--space-6)}.brand h1{font-size:28px;font-weight:700;color:var(--color-primary);letter-spacing:-.5px}.brand p{font-size:14px;color:var(--color-text-secondary);margin-top:var(--space-1)}.steps{display:flex;justify-content:center;gap:var(--space-2);margin-bottom:var(--space-6)}.step-dot{width:32px;height:4px;border-radius:2px;background:var(--color-bg-tertiary);transition:all .3s}.step-dot.active{background:var(--gradient-primary);width:40px}.step-labels{display:flex;justify-content:space-between;font-size:11px;color:var(--color-text-tertiary);margin-bottom:var(--space-4)}.step-labels span{transition:color .3s}.step-labels span.done{color:var(--color-primary);font-weight:600}.h2{font-size:22px;font-weight:600;color:var(--color-text-primary);line-height:1.4;margin-bottom:var(--space-2)}.h3{font-size:18px;font-weight:600;color:var(--color-text-primary);line-height:1.4;margin-bottom:var(--space-3)}.body{font-size:16px;color:var(--color-text-secondary);line-height:1.6}.body-sm{font-size:14px;color:var(--color-text-secondary);line-height:1.5}.caption{font-size:12px;color:var(--color-text-tertiary);line-height:1.4}.input-group{margin-bottom:var(--space-4)}.input-group label{display:block;font-size:14px;font-weight:600;color:var(--color-text-primary);margin-bottom:var(--space-1)}.input{width:100%;padding:12px 14px;border:1.5px solid var(--color-border);border-radius:var(--radius-sm);font-size:16px;outline:none;transition:all .2s;background:var(--color-bg);color:var(--color-text-primary)}.input:focus{border-color:var(--color-border-focus);box-shadow:0 0 0 3px var(--color-primary-light)}.input::placeholder{color:var(--color-text-tertiary)}.input-error{border-color:var(--color-error)}.input-error:focus{box-shadow:0 0 0 3px rgba(255,59,48,.1)}.select{width:100%;padding:12px 14px;border:1.5px solid var(--color-border);border-radius:var(--radius-sm);font-size:16px;outline:none;background:var(--color-bg);color:var(--color-text-primary);cursor:pointer;appearance:none;background-image:url("data:image/svg+xml,%3Csvg width='12' height='8' viewBox='0 0 12 8' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1 1.5L6 6.5L11 1.5' stroke='%239CA3AF' stroke-width='1.5' stroke-linecap='round'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 14px center}.select:focus{border-color:var(--color-border-focus);box-shadow:0 0 0 3px var(--color-primary-light)}.btn{display:block;width:100%;padding:14px 24px;border:none;border-radius:var(--radius);font-size:16px;font-weight:600;color:#fff;cursor:pointer;transition:all .2s;background:var(--gradient-primary);text-align:center}.btn:hover{filter:brightness(1.06);box-shadow:var(--shadow)}.btn:active{transform:scale(.98)}.btn-ghost{background:transparent;color:var(--color-primary);font-weight:500}.btn-ghost:hover{background:var(--color-primary-light)}.btn-sm{display:inline-block;width:auto;padding:10px 18px;font-size:14px;border-radius:var(--radius-sm)}.btn-outline{background:transparent;color:var(--color-primary);border:1.5px solid var(--color-primary)}.btn-outline:hover{background:var(--color-primary-light)}.btn-accent{background:var(--gradient-primary)}.btn-row{display:flex;gap:var(--space-3);margin-top:var(--space-4)}.btn-row .btn{flex:1}.quote-card{background:var(--color-primary-light);border-radius:var(--radius);padding:var(--space-5);margin-bottom:var(--space-4);position:relative}.quote-card::before{content:'"';position:absolute;top:8px;left:14px;font-size:32px;color:var(--color-primary);opacity:.3;font-family:Georgia,serif}.quote-card p{font-size:16px;color:var(--color-text-primary);line-height:1.8;text-indent:16px}.grid-4{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--space-2);margin-bottom:var(--space-4)}.opt{cursor:pointer;text-align:center;padding:var(--space-3) var(--space-2);border:1.5px solid var(--color-border);border-radius:var(--radius-sm);transition:all .2s;background:var(--color-bg)}.opt:hover{border-color:var(--color-primary);box-shadow:0 2px 8px rgba(30,109,242,.1)}.opt.selected{border-color:var(--color-primary);background:var(--color-primary-light);box-shadow:0 2px 8px rgba(30,109,242,.1)}.opt-label{font-size:12px;color:var(--color-text-secondary);display:block;margin-top:var(--space-1)}.opt-icon{font-size:24px;display:block}.goal-row{display:flex;gap:var(--space-3);margin-bottom:var(--space-4)}.goal-item{flex:1;text-align:center}.goal-item label{font-size:12px;font-weight:600;color:var(--color-text-secondary);display:block;margin-bottom:var(--space-1)}.goal-item input{text-align:center;padding:10px 6px}.sms-row{display:flex;gap:var(--space-2);align-items:center}.sms-row .input{flex:1}.sms-btn{padding:12px 16px;border:none;border-radius:var(--radius-sm);background:var(--color-primary);color:#fff;font-size:14px;font-weight:600;cursor:pointer;white-space:nowrap;transition:all .2s}.sms-btn:hover{filter:brightness(1.08)}.sms-btn:disabled{background:var(--color-bg-tertiary);color:var(--color-text-tertiary);cursor:not-allowed}.tabs{display:flex;margin-bottom:var(--space-5);border-bottom:1.5px solid var(--color-border)}.tab{flex:1;text-align:center;padding:var(--space-3);font-size:14px;font-weight:500;color:var(--color-text-tertiary);cursor:pointer;transition:all .2s;border-bottom:2px solid transparent}.tab:hover{color:var(--color-text-primary)}.tab.active{color:var(--color-primary);border-bottom-color:var(--color-primary);font-weight:600}.tab-content{display:none}.tab-content.active{display:block}.qr-area{text-align:center;padding:var(--space-6) 0}.qr-box{width:140px;height:140px;border:2px dashed var(--color-border);border-radius:var(--radius);display:flex;align-items:center;justify-content:center;margin:0 auto var(--space-3);cursor:pointer;transition:all .2s;background:var(--color-bg-secondary)}.qr-box:hover{border-color:var(--color-primary);background:var(--color-primary-light)}.qr-box span{font-size:36px;color:var(--color-text-tertiary)}.qr-text{font-size:13px;color:var(--color-text-secondary)}.footer-links{text-align:center;margin-top:var(--space-4);font-size:12px;color:var(--color-text-tertiary)}.footer-links a{color:var(--color-primary);text-decoration:none}.footer-links a:hover{text-decoration:underline}@media(max-width:480px){.card{padding:var(--space-5) var(--space-4);border-radius:var(--radius)}.grid-4{grid-template-columns:repeat(2,1fr)}.goal-row{flex-direction:column}.goal-row .goal-item input{width:100%}.sms-row{flex-wrap:wrap}.sms-row .input{flex:1 1 100%}.btn-row{flex-direction:column}.btn-row .btn{width:100%}}.p2{display:none;width:100%;height:100vh;background:var(--color-bg-secondary);overflow:hidden}.p2-inner{display:flex;width:100%;height:100vh}.l{width:17.6%;flex:0 0 17.6%;background:var(--color-bg);border-right:1px solid var(--color-border);height:100vh;display:flex;flex-direction:column}.l-header{padding:12px 16px;font-weight:700;color:var(--color-primary);font-size:14px;background:var(--color-primary-light);border-bottom:1px solid var(--color-border);height:44px;display:flex;align-items:center;justify-content:center;flex:none}.l-list{flex:1;overflow-y:auto;padding:8px;font-size:13px}.m{flex:1;height:100vh;background:#fafbff;display:flex;flex-direction:column;min-width:0}.r{width:23.5%;flex:0 0 23.5%;height:100vh;background:var(--color-bg);border-left:1px solid var(--color-border);display:flex;flex-direction:column}.l-footer,.r-footer{padding:6px 8px;display:flex;gap:4px;justify-content:center;border-top:1px solid var(--color-border);flex:none;align-items:center;height:110px;min-height:110px;background:var(--color-bg)}.r-footer{margin-top:auto}.r-footer{margin-top:auto}.ub{display:inline-block;padding:6px 10px;border:1.5px dashed var(--color-border);border-radius:var(--radius-sm);cursor:pointer;font-size:12px;font-weight:600;color:var(--color-text-tertiary);background:var(--color-bg-secondary);transition:all .2s}.ub.active,.ub:hover{border-color:var(--color-primary);color:var(--color-primary);background:var(--color-primary-light)}.rb{display:inline-block;padding:6px 10px;border:1.5px dashed var(--color-border);border-radius:var(--radius-sm);cursor:pointer;font-size:12px;font-weight:600;color:var(--color-text-tertiary);background:var(--color-bg-secondary);transition:all .2s}.rb.active,.rb:hover{border-color:var(--color-primary);color:var(--color-primary);background:var(--color-primary-light)}.r-tabs{display:flex;border-bottom:1px solid var(--color-border);flex:none;height:44px}.rtab{cursor:pointer;padding:0 6px;font-size:12px;text-align:center;font-weight:500;flex:1;border-bottom:2px solid transparent;color:var(--color-text-tertiary);display:flex;align-items:center;justify-content:center}.rtab.active{color:var(--color-primary);border-bottom-color:var(--color-primary);font-weight:600}.rtab-content{flex:1;overflow:auto;min-height:0;display:none;flex-direction:column;padding:12px}.rtab-content.active{display:flex}.rtab-empty{text-align:center;padding:30px 16px;color:var(--color-text-tertiary);font-size:13px;line-height:1.8}.msg-cell{margin:4px 0;display:flex;flex-direction:column;animation:fi .3s ease}@keyframes fi{from{opacity:0;transform:translateY(4px)}}.msg-bubble{max-width:85%;padding:10px 14px;border-radius:var(--radius);font-size:14px;line-height:1.6}.msg-bubble.ai{background:var(--color-bg);color:var(--color-text-primary);border:1px solid var(--color-border);border-bottom-left-radius:4px;align-self:flex-start}.msg-bubble.user{background:var(--color-primary);color:#fff;border-bottom-right-radius:4px;align-self:flex-end}.error-card{background:#fef2f2;border:1px solid #fecaca;border-radius:var(--radius-sm);padding:10px 12px;margin-bottom:8px}.knowledge-card{background:var(--color-primary-light);border:1px solid #bfdbfe;border-radius:var(--radius-sm);padding:10px 12px;margin-bottom:8px}@keyframes blink{0%,100%{opacity:1}50%{opacity:0}}@keyframes flowColor{0%{background-position:0 50%}50%{background-position:100% 50%}100%{background-position:0 50%}}.flow-text{background:linear-gradient(90deg,#1E6DF2,#0EA5E9,#06B6D4,#0EA5E9,#1E6DF2);background-size:200% auto;-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;animation:flowColor 4s ease infinite}@media(max-width:900px){.l{width:25%;flex:0 0 25%}.r{width:28%;flex:0 0 28%}}.co{position:fixed;top:0;left:0;right:0;bottom:0;z-index:99999;display:none;align-items:center;justify-content:center;background:rgba(0,0,0,.7)}.cb{background:#000;border-radius:16px;overflow:hidden;max-width:500px;width:92%}.cv video{width:100%;max-height:60vh;object-fit:contain;display:block}.ct{position:absolute;bottom:10px;left:0;right:0;text-align:center;font-size:13px;color:#aaa}.ca{display:flex;gap:8px;padding:12px 16px;justify-content:center;background:#111}.cbtn{padding:10px 28px;border:none;border-radius:8px;font-size:14px;font-weight:600;cursor:pointer}.cbtn.primary{background:#fff;color:#000}.cbtn.confirm{background:#34c759;color:#fff}.cbtn.retake{background:#ff3b30;color:#fff}.step-bar{display:flex;flex:none;background:var(--white);border-bottom:1px solid var(--gray-light);padding:10px 16px;gap:4px;height:44px;box-sizing:border-box;align-items:center;flex-shrink:0}.step-item{flex:1;text-align:center;font-size:11px;padding:2px 4px;border-radius:6px;color:#bbb;position:relative;transition:all .3s}.step-item .step-num{display:inline-block;width:18px;height:18px;line-height:18px;border-radius:50%;background:#e8ecf0;color:#999;font-size:9px;font-weight:700;text-align:center;margin-bottom:1px}.step-item.active{color:var(--blue);font-weight:600}.step-item.active .step-num{background:var(--blue);color:var(--white)}.step-item.done{color:var(--green)}.step-item.done .step-num{background:var(--green);color:var(--white)}.img-panel-m{flex:1;display:none;flex-direction:column;min-height:0;overflow:hidden}.img-panel-m.show{display:flex}.img-panel-m.show img{opacity:1}.img-panel-m.show #imgPlaceholder{display:none}.img-toolbar{flex:none;display:flex;gap:4px;padding:6px 12px;background:#f0f2ff;border-bottom:1px solid var(--gray-light);align-items:center}.img-toolbar button{padding:3px 10px;border:1px solid var(--blue);border-radius:4px;background:var(--white);color:var(--blue);font-size:12px;cursor:pointer;font-weight:600}.img-toolbar button:hover{background:var(--blue);color:var(--white)}.img-toolbar .zoom-lv{font-size:12px;color:#555;min-width:38px;text-align:center}.img-toolbar .zoom-hint{font-size:11px;color:var(--gray);text-align:right;margin-left:auto}.img-box-m{flex:1;overflow:auto;background:#f5f6fa;position:relative;cursor:grab;min-height:0;scrollbar-width:auto}.img-box-m::-webkit-scrollbar{width:10px;height:10px}.img-box-m::-webkit-scrollbar-track{background:#e8eaed;border-radius:5px}.img-box-m::-webkit-scrollbar-thumb{background:#c4c7cc;border-radius:5px;min-height:30px}.img-box-m::-webkit-scrollbar-thumb:hover{background:#a8abb0}.img-box-m:active{cursor:grabbing}.img-box-m img{display:block;width:100%;height:100%;object-fit:contain;opacity:0;transition:opacity .3s}.ocr-overlay{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.ocr-box{position:absolute;border:2px solid;border-radius:4px;pointer-events:none;font-size:11px;font-weight:600;padding:1px 4px;display:flex;align-items:flex-start}.ocr-box .ocr-label{font-size:9px;padding:0 3px;border-radius:2px;color:#fff;line-height:1.4;white-space:nowrap;margin-right:2px}.ocr-box.question{border-color:var(--green);background:rgba(16,185,129,.08)}.ocr-box.question .ocr-label{background:var(--green)}.ocr-box.answer{border-color:var(--blue);background:rgba(74,108,247,.08)}.ocr-box.answer .ocr-label{background:var(--blue)}.ocr-box.error{border-color:var(--red);background:rgba(231,76,60,.08)}.ocr-box.error .ocr-label{background:var(--red)}.chat-area{flex:1;overflow-y:auto;background:#fafafa;padding:14px;display:flex;flex-direction:column;gap:6px;min-height:0}.chat-empty{text-align:center;padding:40px 20px;color:#bbb}.chat-empty-title{font-size:16px;font-weight:600;color:#555;margin-top:6px}.chat-empty-desc{font-size:13px;color:#999;margin-top:4px}.msg-cell{margin:4px 0;display:flex;flex-direction:column}.msg-bubble{max-width:85%;padding:10px 14px;border-radius:12px;font-size:14px;line-height:1.6;word-break:break-word;white-space:pre-wrap}.msg-bubble.ai{background:var(--white);color:#333;border:1px solid var(--gray-light);border-bottom-left-radius:4px;align-self:flex-start}.msg-bubble.user{background:var(--blue);color:var(--white);border-bottom-right-radius:4px;align-self:flex-end}.msg-time{font-size:10px;color:#aaa;margin-top:2px;align-self:flex-end}.chat-input-area{flex:none;border-top:1px solid var(--gray-light);background:var(--white);padding:8px 12px;display:flex;gap:6px;align-items:stretch;min-height:120px;box-sizing:border-box}.chat-input-area textarea{flex:1;padding:10px 14px;border:1.5px solid var(--gray-light);border-radius:10px;font-size:14px;outline:none;resize:none;font-family:inherit;transition:border-color .2s;line-height:1.6}.chat-input-area textarea:focus{border-color:var(--blue)}.chat-input-actions{display:flex;flex-direction:column;gap:4px}.chat-input-actions button{padding:6px 12px;border:1.5px solid var(--gray-light);border-radius:6px;background:var(--white);color:#555;font-size:12px;cursor:pointer;transition:all .2s;white-space:nowrap}.chat-input-actions button:hover{border-color:var(--blue);color:var(--blue)}.chat-input-actions button.primary{border:none;background:var(--blue);color:var(--white)}.chat-input-actions button.primary:hover{background:var(--blue-dark)}.chat-input-actions button.recording{border-color:var(--red);color:var(--red);background:#fff5f5}.chat-input-actions .voice-status{font-size:10px;color:var(--gray);text-align:center;min-height:14px}.r{width:23.5%;flex:0 0 23.5%;height:100vh;background:var(--white);border-left:1px solid var(--gray-light);display:flex;flex-direction:column;position:relative}.r-tabs{display:flex;border-bottom:1px solid var(--gray-light);flex:none;height:44px;box-sizing:border-box;position:relative}.rtab{cursor:pointer;transition:all .2s;padding:0 6px;font-size:12px;text-align:center;font-weight:500;flex:1;border-bottom:3px solid transparent;color:var(--gray);white-space:nowrap;overflow:hidden;display:flex;align-items:center;justify-content:center}.rtab:hover{background:var(--blue-light)!important}.rtab.active{border-bottom-color:var(--blue);color:var(--blue);font-weight:700}.divider{width:4px;cursor:col-resize;background:transparent;flex:none;position:relative;z-index:10}.divider:hover{background:var(--blue-light)}.divider.active{background:var(--blue)}.h-divider{height:4px;cursor:row-resize;background:transparent;flex:none;position:relative;z-index:10}.h-divider:hover{background:var(--blue-light)}.h-divider.active{background:var(--blue)}.rtab-content{flex:1;overflow:auto;min-height:0;display:none;flex-direction:column;padding:12px}.rtab-content.active{display:flex}.rtab-empty{text-align:center;padding:30px 16px;color:#999;font-size:13px;line-height:1.8}.error-card{background:#fff5f5;border:1px solid #fde8e8;border-radius:8px;padding:10px 12px;margin-bottom:8px}.error-card-header{font-weight:700;color:var(--red);font-size:13px;margin-bottom:4px}.error-card-body{font-size:12px;color:#555;line-height:1.7}.error-card-tag{display:inline-block;padding:2px 8px;border-radius:10px;font-size:10px;font-weight:600;margin-right:4px;margin-bottom:4px}.error-card-tag.concept{background:#e8ecff;color:var(--blue)}.error-card-tag.method{background:#fef3c7;color:#d97706}.error-card-tag.careless{background:#fce4ec;color:var(--red)}.knowledge-card{background:#f0f7ff;border:1px solid #dbeafe;border-radius:8px;padding:10px 12px;margin-bottom:8px}.knowledge-card-title{font-weight:700;color:var(--blue);font-size:13px;margin-bottom:4px}.knowledge-card-body{font-size:12px;color:#444;line-height:1.7}.knowledge-dot{display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--blue);margin-right:6px;vertical-align:middle}.practice-question{background:var(--white);border:1px solid var(--gray-light);border-radius:8px;padding:12px;margin-bottom:10px}.practice-q-title{font-weight:700;color:#333;font-size:14px;margin-bottom:6px}.practice-q-text{font-size:14px;color:#555;line-height:1.8;margin-bottom:8px}.practice-option{display:inline-block;padding:6px 12px;margin:3px 6px 3px 0;border:1px solid var(--gray-light);border-radius:6px;cursor:pointer;font-size:13px;transition:all .2s}.practice-option:hover{background:var(--blue-light);border-color:var(--blue)}.practice-option.selected{background:var(--blue);color:var(--white);border-color:var(--blue)}.practice-option.correct{background:#d1fae5;color:#065f46;border-color:var(--green)}.practice-option.wrong{background:#fce4ec;color:var(--red);border-color:var(--red)}.teacher-avatar{position:absolute;bottom:12px;right:12px;width:48px;height:48px;border-radius:50%;background:linear-gradient(135deg,#4a6cf7,#7c3aed);display:flex;align-items:center;justify-content:center;font-size:22px;box-shadow:0 4px 12px rgba(74,108,247,.35);cursor:pointer;z-index:100;opacity:0;transform:scale(0);transition:all .5s cubic-bezier(.68,-.55,.27,1.55);color:var(--white);font-weight:700}.teacher-avatar.show{opacity:1;transform:scale(1)}.co{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.85);z-index:99999;display:none;text-align:center;padding-top:5%}.cb{background:#000;border-radius:16px;display:inline-block;width:92%;max-width:800px;overflow:hidden}.cv{min-height:300px;background:#000;position:relative}.cv video{width:100%;max-height:60vh;object-fit:contain}.ct{position:absolute;bottom:10px;left:50%;transform:translateX(-50%);background:rgba(0,0,0,.7);color:var(--white);padding:6px 20px;border-radius:20px;font-size:13px}.ca{padding:12px;background:#111}.cbtn{padding:12px 40px;border:none;border-radius:28px;font-size:16px;font-weight:600;cursor:pointer}.cbtn.primary{background:var(--white);color:#333}.cbtn.confirm{background:var(--green);color:var(--white)}.cbtn.retake{background:var(--orange);color:var(--white)}#bX{color:var(--white);font-size:24px;cursor:pointer;padding:0 6px}.confirm-area{display:none;flex:none;padding:10px 14px;border-top:1px solid var(--gray-light);background:#f8faff;text-align:center}.confirm-area.show{display:block}.confirm-area .confirm-hint{font-size:12px;color:#555;margin-bottom:6px}.confirm-btn{padding:8px 28px;border:none;border-radius:8px;background:var(--blue);color:var(--white);font-size:14px;font-weight:600;cursor:pointer;transition:all .2s}.confirm-btn:hover{background:var(--blue-dark);box-shadow:0 4px 12px rgba(74,108,247,.3)}.confirm-btn:disabled{background:#ccc;cursor:not-allowed;box-shadow:none}.progress-bar{flex:none;height:1px;background:var(--gray-light);overflow:hidden}.progress-fill{height:100%;background:linear-gradient(90deg,var(--blue),var(--green));border-radius:2px;transition:width .5s ease;width:0}.hidden{display:none!important}.text-center{text-align:center}.text-blue{color:var(--blue)}.text-gray{color:var(--gray)}.text-red{color:var(--red)}.text-green{color:var(--green)}.mt-4{margin-top:4px}.mt-8{margin-top:8px}.mb-4{margin-bottom:4px}.mb-8{margin-bottom:8px}.fw-700{font-weight:700}.ap-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.4);z-index:9999;display:none;align-items:center;justify-content:center}.ap-box{background:#fff;border-radius:16px;padding:20px;max-width:560px;width:90%;max-height:80vh;overflow-y:auto;box-shadow:0 12px 40px rgba(0,0,0,.15)}.ap-header{font-size:15px;font-weight:700;color:var(--color-text-primary);margin-bottom:14px;display:flex;justify-content:space-between;align-items:center}.ap-header .close-btn{font-size:22px;color:#999;cursor:pointer;padding:0 6px}.ap-header .close-btn:hover{color:#333}.ap-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-bottom:14px}.ap-item{transition:all .2s;cursor:pointer;padding:10px 6px;text-align:center;border:2px solid #e0e4ee;border-radius:12px;background:#f8faff}.ap-item:hover{transform:translateY(-3px);box-shadow:0 6px 20px rgba(74,108,247,.2)}.ap-item.selected{border-color:var(--blue);background:#eef2ff}.ap-item-img{width:72px;height:72px;border-radius:50%;margin:0 auto 6px;background-size:cover;background-position:center;border:1px solid #eee}.ap-item-name{font-size:12px;color:#555;font-weight:600}.ap-btn-confirm{display:block;width:100%;padding:8px;background:var(--color-primary);color:#fff;border:none;border-radius:8px;font-size:13px;font-weight:600;cursor:pointer}.ap-btn-confirm:hover{opacity:.9}.mf-item{padding:10px 12px;margin:6px 0;border-radius:8px;background:var(--color-bg-secondary);cursor:pointer;font-size:14px;font-weight:500;color:var(--color-text-primary);display:flex;align-items:center;gap:8px;transition:all .2s;border:1px solid transparent}.mf-item:hover{background:var(--color-primary-light);color:var(--color-primary);border-color:var(--color-primary-light)}.mf-item.active{background:var(--color-primary);color:var(--color-white);border-color:var(--color-primary)}.mf-item .del-btn{font-size:16px;font-weight:700;color:var(--color-text-tertiary);cursor:pointer;padding:2px 8px;display:none;border-radius:4px}.mf-item:hover .del-btn{display:inline;color:var(--color-error)}.mf-item.active .del-btn{color:rgba(255,255,255,.5)}.mf-item.active .del-btn:hover{color:#fff}
/* ===== WorkBuddy美化版样式移植 ===== */
/* 来源: D:\邱数智方\学霸基本法\frontend\styles.css (WorkBuddy美化版) */
/* 说明: 追加合并通用视觉样式，不覆盖生产版独有组件。
   已跳过冲突类: .btn/.btn-sm/.qr-box/.goal-row/.hidden/.progress-fill/.btn-ghost（生产版优先）。
   字体: 保留生产版字体变量（--font-sans），未引入 Noto Sans SC 外部字体。 */

:root {
  /* WorkBuddy 美化版变量（映射到生产版主题色，不覆盖生产版已有变量） */
  --brand: #1E6DF2;
  --brand-700: #1557D8;
  --brand-50: #E8F0FE;
  --brand-100: #D6E4FF;
  --ink: #1D1D1F;
  --ink-muted: #6B7280;
  --ink-soft: #9CA3AF;
  --border: #E5E7EB;
  --bg: #F5F7FA;
  --card: #FFFFFF;
  --success: #34C759;
}

/* 美化版按钮基础（自包含，不依赖生产版 .btn，避免覆盖生产版按钮组件） */
.btn-primary,
.btn-secondary,
.btn-code,
.btn-lg {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 0.4rem;
  font-weight: 600;
  border-radius: 0.65rem;
  border: none;
  cursor: pointer;
  transition: all 0.2s ease;
  text-decoration: none;
  font-family: inherit;
  padding: 0.6rem 1.1rem;
  font-size: 0.9rem;
}

.login-shell {
  display: flex;
  gap: 1.25rem;
  max-width: 1200px;
  margin: 0 auto;
  padding: 1.5rem 1rem 2rem;
  align-items: stretch;
}
.brand-vertical {
  flex: 0 0 56px;
  display: flex;
  align-items: center;
  justify-content: center;
  background: linear-gradient(180deg, #cfe6ff 0%, #a9d0fb 100%);
  border-radius: var(--radius);
  box-shadow: var(--shadow);
}
.brand-vertical-text {
  writing-mode: vertical-rl;
  text-orientation: upright;
  color: #1d4ed8;
  font-weight: 800;
  font-size: clamp(1.4rem, 2.4vw, 2rem);
  letter-spacing: 0.18em;
  margin: auto 0;
}
.login-content { flex: 1; min-width: 0; }
@media (max-width: 639px) {
  .login-shell { flex-direction: column; gap: 0.75rem; padding: 0.75rem 0.75rem 1.5rem; }
  .brand-vertical { display: none; }
  .brand-name-mini { display: inline; }
}

.brand-header-mini { text-align: center; padding: 1.5rem 1rem 0.5rem; }
.brand-name-mini { display: none; font-size: 1.5rem; font-weight: 800; color: var(--ink); }
.brand-name-mini .accent { color: var(--brand); }
.brand-tagline {
  margin: 0.5rem 0 0;
  color: #bf8f00;
  font-size: clamp(1.05rem, 2.6vw, 1.5rem);
  font-weight: 800;
  letter-spacing: 0.01em;
  line-height: 1.5;
}
.brand-subtitle {
  font-size: 0.95rem;
  color: var(--ink-muted);
  font-weight: 500;
  margin: 0;
}

.layout-2col {
  display: grid;
  grid-template-columns: 1fr;
  gap: 1.5rem;
  align-items: start;
}
@media (min-width: 1024px) {
  .layout-2col { grid-template-columns: 2fr 1fr; }
}

/* Card shells */
.glass-card,
.card-section {
  background: var(--card);
  border: 1px solid rgba(255, 255, 255, 0.8);
  border-radius: var(--radius);
  box-shadow: var(--shadow-lg);
}
.form-card {
  padding: 1.5rem;
  background:
    linear-gradient(180deg, rgba(255, 255, 255, 0.92) 0%, rgba(255, 255, 255, 0.86) 100%);
  border: 1px solid rgba(255, 255, 255, 0.9);
  box-shadow: var(--shadow-lg), inset 0 1px 0 rgba(255, 255, 255, 0.7);
}
@media (min-width: 640px) { .form-card { padding: 2rem; } }
@media (min-width: 1024px) { .form-card { padding: 2rem; } }
.aside-card { padding: 1.5rem; }
@media (min-width: 1024px) {
  .aside-card { position: sticky; top: 1.5rem; }
}
.card-section { border-color: var(--border); box-shadow: var(--shadow-sm); }

.field-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 1rem;
  margin-bottom: 1.25rem;
}
@media (min-width: 640px) { .field-grid { grid-template-columns: repeat(2, 1fr); } }

.field-grid-3 {
  display: grid;
  grid-template-columns: 1fr;
  gap: 0.75rem;
}
@media (min-width: 640px) { .field-grid-3 { grid-template-columns: repeat(3, 1fr); } }

.span-1 { grid-column: span 1; }
.span-2 { grid-column: 1 / -1; }

.field { display: flex; flex-direction: column; }
.field-label {
  display: block;
  font-size: 0.8rem;
  font-weight: 600;
  color: var(--ink);
  margin-bottom: 0.35rem;
}
.field-label .required { color: #ef4444; margin-left: 0.1rem; }

.form-input,
.form-select {
  width: 100%;
  padding: 0.65rem 0.85rem;
  border: 1px solid var(--border);
  border-radius: 0.65rem;
  background: #fff;
  color: var(--ink);
  font-size: 0.95rem;
  font-family: inherit;
  transition: border-color 0.15s ease, box-shadow 0.15s ease;
}
.form-input::placeholder { color: var(--ink-soft); }
.form-input:hover,
.form-select:hover { border-color: #cbd5e1; }
.form-input:focus,
.form-select:focus {
  outline: none;
  border-color: var(--brand);
  box-shadow: 0 0 0 3px var(--brand-100);
}
/* 注册后锁定的下拉：只读态 */
.form-select:disabled {
  background: #f1f5f9;
  color: var(--ink-muted);
  border-color: #e2e8f0;
  cursor: not-allowed;
  opacity: 1;
}

.role-switch {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 0.35rem;
  margin-bottom: 1.5rem;
  padding: 0.35rem;
  background: #eef2f8;
  border-radius: 0.85rem;
  border: 1px solid #e3e9f2;
}
.role-btn {
  padding: 0.65rem 1rem;
  border-radius: 0.6rem;
  font-size: 0.95rem;
  font-weight: 700;
  font-family: inherit;
  cursor: pointer;
  border: none;
  background: transparent;
  color: var(--ink-muted);
  transition: all 0.2s ease;
}
.role-btn:hover { color: var(--ink); }
.role-btn.active {
  background: #fff;
  color: var(--brand);
  box-shadow: 0 2px 8px rgba(37, 99, 235, 0.22);
}

.section-title {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  font-size: 0.9rem;
  font-weight: 700;
  color: var(--ink);
  margin: 0 0 0.75rem;
}
.section-title .dot { width: 6px; height: 6px; border-radius: 50%; background: var(--brand); }

.btn-primary {
  background: linear-gradient(135deg, var(--brand) 0%, var(--brand-700) 100%);
  color: #fff;
  box-shadow: 0 4px 14px rgba(37, 99, 235, 0.35);
}
.btn-primary:hover { transform: translateY(-1px); box-shadow: 0 6px 20px rgba(37, 99, 235, 0.45); }
.btn-primary:active { transform: translateY(0); }
.btn-secondary { background: #fff; color: var(--brand); border: 1px solid var(--brand-100); }
.btn-secondary:hover { background: var(--brand-50); }

.btn-lg { padding: 0.85rem 1.5rem; font-size: 1rem; }
.btn-code {
  white-space: nowrap;
  background: var(--brand-50);
  color: var(--brand);
  border: 1px solid var(--brand-100);
  font-weight: 600;
  font-family: inherit;
}
.btn-code:disabled { opacity: 0.6; cursor: not-allowed; }

/* 新登录页：横幅式教师寄语 */
.teacher-banner {
  display: flex;
  flex-direction: row;
  align-items: stretch;
  gap: 0.75rem;
  background: linear-gradient(135deg, #eff6ff 0%, #ffffff 100%);
  border: 1px solid var(--brand-100);
  border-left: 4px solid var(--brand);
  border-radius: var(--radius);
  box-shadow: var(--shadow-sm);
  padding: 1rem 1.25rem;
  margin-bottom: 1.5rem;
  text-align: left;
}
.teacher-label {
  display: flex;
  flex-direction: row;
  gap: 0.2rem;
  align-self: center;
  background: linear-gradient(180deg, #cfe6ff 0%, #a9d0fb 100%);
  color: #1d4ed8;
  font-weight: 800;
  border-radius: var(--radius-sm);
  padding: 0.5rem 0.35rem;
}
.teacher-label-col {
  writing-mode: vertical-rl;
  text-orientation: upright;
  font-size: 1.1rem;
  letter-spacing: 0.08em;
  line-height: 1.15;
  white-space: nowrap;
}
.teacher-banner-text {
  margin: 0;
  flex: 1;
  color: #334155;
  font-size: 0.95rem;
  line-height: 1.7;
  text-indent: 2em;
  font-weight: 700;
}

.payment-grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 0.75rem;
  margin-bottom: 0.75rem;
}
@media (min-width: 640px) { .payment-grid { grid-template-columns: repeat(4, 1fr); } }
.payment-card {
  border: 2px solid var(--border);
  border-radius: 0.75rem;
  padding: 0.75rem;
  cursor: pointer;
  transition: all 0.2s ease;
  background: #fff;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 0.5rem;
  font-family: inherit;
}
.payment-card:hover { border-color: #cbd5e1; transform: translateY(-1px); }
.payment-card.active { border-color: var(--brand); background: var(--brand-50); box-shadow: 0 0 0 3px var(--brand-100); }
.payment-card .label { font-size: 0.8rem; font-weight: 600; color: var(--ink-muted); }

.qr-panel {
  background: #f8fafc;
  border-radius: 0.75rem;
  padding: 1rem;
  border: 1px solid #f1f5f9;
}
.qr-panel .qr-hint { text-align: center; font-size: 0.75rem; color: var(--ink-muted); margin: 0 0 0.75rem; }
.qr-panel .qr-frame { max-width: 180px; margin: 0 auto; }

/* 新登录页：并排双二维码 */
.payment-qrs {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 1rem;
  margin-bottom: 1.25rem;
}
.qr-pay {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 0.5rem;
}
.qr-pay .qr-box { width: 100%; max-width: 140px; }
.qr-label {
  display: inline-flex;
  align-items: center;
  gap: 0.35rem;
  font-size: 0.8rem;
  font-weight: 600;
  color: var(--ink-muted);
}
.qr-label.wechat { color: #16a34a; }
.qr-label.alipay { color: #1677ff; }

/* ---------- Pricing ---------- */
.price-box {
  background: #f8fafc;
  border-radius: 0.75rem;
  padding: 1rem;
  border: 1px solid #f1f5f9;
  margin-bottom: 1rem;
}
.price-row {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 0.6rem 0;
  border-bottom: 1px solid #f1f5f9;
}
.price-row:last-child { border-bottom: none; }
.price-row .name { color: #475569; font-size: 0.875rem; }
.price-tag { color: #dc2626; font-weight: 700; font-size: 0.95rem; }
.aside-note { text-align: center; font-size: 0.75rem; color: var(--ink-muted); margin: 0 0 1.25rem; }
.aside-title { font-size: 1rem; font-weight: 700; color: var(--ink); margin: 0 0 0.75rem; display: flex; align-items: center; gap: 0.5rem; justify-content: center; }
.aside-title.small { font-size: 0.95rem; }
.aside-qr { max-width: 160px; margin: 0 auto 1.25rem; }

.pkg-block { margin-top: 1.25rem; }
.pkg-group {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 0.5rem;
  margin-bottom: 0.75rem;
}
.pkg-btn {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 0.15rem;
  padding: 0.6rem 0.4rem;
  border-radius: 0.6rem;
  border: 2px solid var(--border, #e2e8f0);
  background: #fff;
  color: var(--ink);
  font-size: 0.85rem;
  font-weight: 600;
  cursor: pointer;
  transition: border-color 0.15s ease, background 0.15s ease, transform 0.1s ease;
}
.pkg-btn span { font-size: 0.8rem; font-weight: 700; color: #dc2626; }
.pkg-btn:hover { border-color: #cbd5e1; transform: translateY(-1px); }
.pkg-btn.active { border-color: var(--brand, #4f46e5); background: var(--brand-50, #eef2ff); box-shadow: 0 0 0 3px var(--brand-100, #e0e7ff); }
.pkg-btn:focus-visible { outline: 2px solid var(--brand, #4f46e5); outline-offset: 2px; }
.pkg-hint { font-size: 0.72rem; color: var(--ink-muted); margin: 0.6rem 0 0; text-align: center; }

.info-box {
  background: #eff6ff;
  border: 1px solid #dbeafe;
  border-radius: 0.75rem;
  padding: 1rem;
  margin-bottom: 1.5rem;
}
.info-box p { margin: 0; font-size: 0.875rem; color: #1d4ed8; }

/* ---------- Footer links ---------- */
.form-footer { text-align: center; font-size: 0.85rem; color: var(--ink-muted); margin: 0.85rem 0 0; }
.form-footer a { color: var(--brand); font-weight: 600; text-decoration: none; }
.form-footer a:hover { text-decoration: underline; }
.form-footer .footer-sep { margin: 0 0.35rem; color: var(--border); }

/* ---------- 中考倒计时（教师寄语下方、登录方式上方，单行） ---------- */
.exam-countdown {
  margin: 0 0 1.25rem;
  padding: 0.6rem 1rem;
  text-align: center;
  background: linear-gradient(135deg, #fff5f5 0%, #fffbeb 100%);
  border: 1px solid #fecaca;
  border-left: 4px solid #ef4444;
  border-radius: var(--radius-sm);
  box-shadow: var(--shadow-sm);
  font-size: 0.95rem;
  font-weight: 600;
  color: #b91c1c;
  letter-spacing: 0.01em;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
/* 关键要求：具体的“天数”加粗、字号加大、红色突出 */
.exam-countdown .ec-number {
  font-size: 1.6rem;
  font-weight: 800;
  line-height: 1;
  color: #dc2626;
  font-variant-numeric: tabular-nums;
  margin: 0 0.15rem;
  vertical-align: -0.08em;
}
/* 中考已结束的达成态 */
.exam-countdown.done {
  background: linear-gradient(135deg, #f0fdf4 0%, #ecfeff 100%);
  border-color: #a7f3d0;
  border-left-color: #10b981;
  color: #047857;
}
.exam-countdown.done .ec-number { color: #047857; font-size: 1.3rem; }

@keyframes fadeIn {
  from { opacity: 0; transform: translateY(8px); }
  to { opacity: 1; transform: translateY(0); }
}
.animate-fade-in { animation: fadeIn 0.4s ease forwards; }

@media (max-width: 639px) {
  .form-input, .form-select { font-size: 16px; }  /* prevent iOS zoom on focus */
}

/* ---------- 学习页专属组件 ---------- */
/* 顶部应用栏 */
.appbar {
  background: #fff;
  border-bottom: 1px solid var(--border);
  position: sticky;
  top: 0;
  z-index: 30;
  box-shadow: 0 1px 3px rgb(15 23 42 / 0.04);
}
.appbar-inner {
  max-width: 1152px;
  margin: 0 auto;
  padding: 0.7rem 1rem;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
}
.appbar-brand {
  font-size: 1.1rem;
  font-weight: 800;
  color: var(--ink);
  display: flex;
  align-items: baseline;
  gap: 0.4rem;
}
.appbar-brand .accent { color: var(--brand); }
.appbar-brand .sub { font-size: 0.75rem; font-weight: 600; color: var(--ink-muted); }
.appbar-nav { display: none; gap: 0.25rem; }
@media (min-width: 768px) { .appbar-nav { display: flex; } }
.appbar-nav a {
  padding: 0.4rem 0.75rem;
  border-radius: 0.5rem;
  font-size: 0.875rem;
  color: var(--ink-muted);
  text-decoration: none;
  transition: all 0.15s ease;
}
.appbar-nav a:hover { color: var(--ink); background: #f1f5f9; }
.appbar-nav a.active { color: var(--brand); background: var(--brand-50); font-weight: 600; }
.appbar-right { display: flex; align-items: center; gap: 0.6rem; }
.avatar {
  width: 36px; height: 36px;
  border-radius: 50%;
  background: var(--brand-100);
  color: var(--brand);
  display: grid; place-items: center;
  font-weight: 700; font-size: 0.85rem;
  flex-shrink: 0;
}
.appbar-meta { font-size: 0.75rem; line-height: 1.2; }
.appbar-meta .name { font-weight: 700; color: var(--ink); }
.appbar-meta .lv { color: var(--ink-muted); }

/* 仪表盘布局 */
.dashboard {
  display: grid;
  grid-template-columns: 1fr;
  gap: 1.5rem;
  align-items: start;
}
@media (min-width: 1024px) { .dashboard { grid-template-columns: 2fr 1fr; } }

.panel { padding: 1.5rem; background: var(--card); border: 1px solid var(--border); border-radius: var(--radius); box-shadow: var(--shadow-sm); }
.panel + .panel { margin-top: 1.5rem; }
.mb-panel { margin-bottom: 1.5rem; }

/* 欢迎横幅 */
.welcome {
  background: linear-gradient(135deg, var(--brand) 0%, var(--brand-700) 100%);
  color: #fff;
  border-radius: var(--radius);
  padding: 1.5rem;
  box-shadow: var(--shadow-lg);
  display: flex;
  flex-wrap: wrap;
  gap: 1rem;
  align-items: center;
  justify-content: space-between;
}
.welcome h2 { margin: 0 0 0.35rem; font-size: 1.25rem; font-weight: 800; }
.welcome p { margin: 0; font-size: 0.875rem; opacity: 0.92; }
.welcome-stats { display: flex; gap: 1.5rem; }
.welcome-stat { text-align: center; }
.welcome-stat .num { font-size: 1.5rem; font-weight: 800; line-height: 1; }
.welcome-stat .lbl { font-size: 0.7rem; opacity: 0.85; margin-top: 0.25rem; }

.btn-secondary.active { background: var(--brand); color: #fff; border-color: var(--brand); }

.admin-modal {
  position: fixed;
  inset: 0;
  z-index: 60;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 1rem;
}
.admin-modal.hidden { display: none; }
.admin-modal-backdrop {
  position: absolute;
  inset: 0;
  background: rgba(15, 23, 42, 0.55);
  backdrop-filter: blur(2px);
}
.admin-modal-card {
  position: relative;
  background: #fff;
  border-radius: var(--radius);
  box-shadow: var(--shadow-lg);
  padding: 1.75rem;
  width: 100%;
  max-width: 360px;
  animation: fadeIn 0.25s ease forwards;
}
.admin-modal-close {
  position: absolute;
  top: 0.6rem;
  right: 0.9rem;
  background: none;
  border: none;
  font-size: 1.6rem;
  line-height: 1;
  color: var(--ink-muted);
  cursor: pointer;
  font-family: inherit;
}
.admin-modal-close:hover { color: var(--ink); }
.admin-modal-title { margin: 0 0 1.25rem; font-size: 1.1rem; font-weight: 700; color: var(--ink); }
.admin-modal-card .field { margin-bottom: 1rem; }

/* ---------- 管理员后台控制台 ---------- */
.admin-console-card { max-width: 540px; max-height: 88vh; overflow-y: auto; }
.admin-console-head {
  display: flex; align-items: center; justify-content: space-between;
  gap: 0.75rem; margin-bottom: 1rem;
}
.admin-console-head .admin-modal-title { margin: 0; }

.btn-danger {
  background: #dc2626; color: #fff; border: 1px solid #dc2626;
  padding: 0.45rem 0.75rem; border-radius: var(--radius-sm, 8px);
  font-size: 0.8rem; cursor: pointer; font-family: inherit;
  transition: background 0.15s ease;
}
.btn-danger:hover { background: #b91c1c; }

.admin-panel {
  border: 1px solid var(--border, #e2e8f0);
  border-radius: var(--radius, 12px);
  padding: 1rem 1.1rem; margin-bottom: 1rem;
  background: #fbfdff;
}
.admin-panel-title { margin: 0 0 0.35rem; font-size: 0.95rem; font-weight: 700; color: var(--ink, #1f2937); }
.admin-hint { margin: 0 0 0.75rem; font-size: 0.8rem; color: var(--ink-muted, #64748b); line-height: 1.5; }
.admin-hint strong { color: var(--brand, #2563eb); }
.admin-result { margin: 0.6rem 0 0; font-size: 0.82rem; min-height: 1rem; }
.admin-result.ok { color: #15803d; }
.admin-result.err { color: #dc2626; }

.admin-err {
  margin: 0.75rem 0 0; font-size: 0.82rem; color: #dc2626;
  min-height: 1rem; visibility: hidden;
}
.admin-err.show { visibility: visible; }

.admin-table-wrap { display: flex; flex-direction: column; gap: 0.6rem; }
.admin-empty { margin: 0.5rem 0; font-size: 0.85rem; color: var(--ink-muted, #64748b); text-align: center; }
.admin-row {
  display: flex; align-items: flex-start; justify-content: space-between;
  gap: 0.75rem; padding: 0.7rem 0.8rem;
  border: 1px solid #e2e8f0; border-radius: 10px; background: #fff;
}
.admin-row-main { min-width: 0; }
.admin-row-title { font-size: 0.9rem; font-weight: 700; color: var(--ink, #1f2937); display: flex; align-items: center; gap: 0.4rem; flex-wrap: wrap; }
.admin-row-sub { margin-top: 0.25rem; font-size: 0.78rem; color: var(--ink-muted, #64748b); line-height: 1.5; word-break: break-all; }
.admin-row-actions { display: flex; flex-direction: column; gap: 0.4rem; flex-shrink: 0; }
.admin-muted { color: var(--ink-muted, #94a3b8); font-weight: 500; }

.badge {
  display: inline-block; padding: 0.1rem 0.5rem; border-radius: 999px;
  font-size: 0.7rem; font-weight: 700; line-height: 1.5;
}
.badge.ok { background: #dcfce7; color: #15803d; }
.badge.err { background: #fee2e2; color: #b91c1c; }
.badge.pending { background: #fef9c3; color: #a16207; }

/* ---------- 用户汇总表（学生/教师/教研员，按地区分组） ---------- */
.summary-tabs { margin-bottom: 0.75rem; }
.summary-tabs .btn.active { background: var(--brand, #4f46e5); color: #fff; border-color: var(--brand, #4f46e5); }
.admin-summary-wrap { max-height: 320px; overflow: auto; border: 1px solid #e2e8f0; border-radius: 10px; background: #fff; }
.summary-title { font-size: 0.8rem; font-weight: 700; color: var(--ink-muted, #64748b); padding: 0.6rem 0.7rem 0.2rem; }
.admin-summary-table { width: 100%; border-collapse: collapse; font-size: 0.78rem; }
.admin-summary-table th, .admin-summary-table td {
  padding: 0.45rem 0.6rem; text-align: left; border-bottom: 1px solid #eef2f7; white-space: nowrap;
}
.admin-summary-table thead th {
  position: sticky; top: 0; background: #f8fafc; color: var(--ink-muted, #64748b);
  font-weight: 700; z-index: 1;
}
.admin-summary-table tbody tr:hover { background: #f8fafc; }
.admin-summary-table .group-row td {
  background: #eef2ff; color: var(--brand, #4f46e5); font-weight: 700;
  border-bottom: 1px solid #e0e7ff; letter-spacing: 0.02em;
}

/* ---------- 教研员表单 3 列网格 ---------- */
.field-grid-3 { display: grid; grid-template-columns: 1fr; gap: 0.85rem; }
.field-grid-3 .field-span-3 { grid-column: 1 / -1; }
.mt-2 { margin-top: 0.75rem; }
@media (min-width: 560px) { .field-grid-3 { grid-template-columns: repeat(3, 1fr); } }

@media (max-width: 480px) {
  .admin-row { flex-direction: column; }
  .admin-row-actions { flex-direction: row; }
}

@media (prefers-reduced-motion: reduce) {
  * { animation: none !important; transition: none !important; }
}

