: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;height:100dvh;background:var(--color-bg-secondary);overflow:hidden}.p2-inner{display:flex;width:100%;height:100vh;height:100dvh}.l{width:17.6%;flex:0 0 17.6%;background:var(--color-bg);border-right:1px solid var(--color-border);height:100vh;height:100dvh;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;height:100dvh;background:#fafbff;display:flex;flex-direction:column;min-width:0}.r{width:23.5%;flex:0 0 23.5%;height:100vh;height:100dvh;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;height:100dvh;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:14px;margin-bottom:4px}.error-card-body{font-size:13px;color:#555;line-height:1.7;font-weight:600}.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:15px;margin-bottom:6px}.practice-q-text{font-size:15px;color:#555;line-height:1.8;margin-bottom:8px;font-weight:600}.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; }
}


/* ══════════════════════════════════════════════════════════════
   V3 · 上线美化（2026-08-06 全身体检）
   统一字体/字号/配色/间距/圆角/阴影，所有规则追加在后以保障生效，
   不覆盖任何既有功能选择器。品牌蓝 #1D4ED8 → #1E6DF2 渐变。
   ══════════════════════════════════════════════════════════════ */

:root {
  --font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC",
    "Hiragino Sans GB", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans SC", sans-serif;
  --brand-grad: linear-gradient(135deg, #1D4ED8 0%, #1E6DF2 55%, #0EA5E9 100%);
  --bg-soft: linear-gradient(160deg, #F8FAFF 0%, #EEF3FB 55%, #F7F9FE 100%);
  --card-shadow: 0 12px 40px rgba(17, 24, 39, .08), 0 2px 8px rgba(17, 24, 39, .04);
  --ring: 0 0 0 3px rgba(30, 109, 242, .22);
}

html, body {
  background: var(--bg-soft);
}

/* 全局字体微调：正文 15px、行高 1.6，中文优先 */
body, .input, .select, textarea, button {
  font-family: var(--font-sans);
}
body {
  font-size: 15px;
  line-height: 1.6;
  -webkit-font-smoothing: antialiased;
}

/* 键盘可达性：统一的焦点环 */
.btn:focus-visible, .input:focus-visible, .select:focus-visible,
.ub:focus-visible, .rb:focus-visible, .sms-btn:focus-visible,
button:focus-visible, a:focus-visible {
  outline: none;
  box-shadow: var(--ring);
}

/* 登录/注册卡片 */
.page {
  background: var(--bg-soft);
}
.card {
  border-radius: 20px;
  border: 1px solid rgba(226, 232, 240, .9);
  box-shadow: var(--card-shadow);
}

/* 品牌标题：主色渐变字 */
.xb-brand-title {
  background: var(--brand-grad);
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
  color: #1D4ED8;
}

/* 按钮交互增强 */
.btn {
  border-radius: 12px;
  box-shadow: 0 6px 18px rgba(30, 109, 242, .18);
  transition: transform .15s ease, box-shadow .2s ease, filter .2s ease, background .2s ease;
}
.btn:hover {
  transform: translateY(-1px);
  box-shadow: 0 10px 24px rgba(30, 109, 242, .26);
}
.btn:active {
  transform: translateY(1px) scale(.985);
  box-shadow: 0 3px 10px rgba(30, 109, 242, .18);
}
.btn-ghost {
  box-shadow: none;
}
.sms-btn {
  border-radius: 10px;
}

/* 表单控件 */
.input, .select {
  border-radius: 10px;
  transition: border-color .2s ease, box-shadow .2s ease;
}
.input:focus, .select:focus {
  border-color: #1E6DF2;
  box-shadow: var(--ring);
}

/* 登录页标签页：更柔和的动效 */
.tab {
  border-radius: 8px 8px 0 0;
  transition: color .2s ease, border-color .2s ease, background .2s ease;
}
.tab:hover {
  background: rgba(30, 109, 242, .06);
}
.tab.active {
  border-bottom-width: 2.5px;
}

/* 学习页头部与分栏 */
.l-header {
  background: linear-gradient(180deg, #EEF4FF 0%, #E3EDFF 100%);
  letter-spacing: .04em;
}
.step-bar {
  box-shadow: 0 1px 6px rgba(17, 24, 39, .05);
}
.step-item {
  border-radius: 8px;
  transition: all .2s ease;
}
.step-item .step-num {
  box-shadow: 0 1px 3px rgba(17, 24, 39, .12);
}

/* 右侧标签页：圆角高亮 + 平滑切换 */
.r-tabs {
  background: #fff;
}
.rtab {
  border-radius: 8px 8px 0 0;
  margin: 4px 2px 0;
  transition: background .2s ease, color .2s ease;
}
.rtab:hover {
  background: #EEF4FF;
}
.rtab.active {
  border-bottom-width: 3px;
  border-radius: 8px 8px 0 0;
}

/* 工具按钮（上传/拍照/错题/保存退出/还原等） */
.ub, .rb {
  border-radius: 10px;
  transition: transform .15s ease, border-color .2s ease, color .2s ease, background .2s ease, box-shadow .2s ease;
}
.ub:hover, .rb:hover {
  transform: translateY(-1px);
  box-shadow: 0 4px 10px rgba(30, 109, 242, .14);
}

/* 聊天区：气泡轻阴影，输入区圆角 */
.chat-area {
  background: linear-gradient(180deg, #FBFCFE 0%, #F5F7FB 100%);
}
.msg-bubble {
  border-radius: 14px;
}
.msg-bubble.ai {
  box-shadow: 0 2px 8px rgba(17, 24, 39, .05);
}
.msg-bubble.user {
  background: linear-gradient(135deg, #1E6DF2 0%, #0EA5E9 100%);
  box-shadow: 0 4px 12px rgba(30, 109, 242, .22);
}
.chat-input-area {
  border-radius: 14px 14px 0 0;
  background: #fff;
}
.chat-input-area textarea {
  border-radius: 10px;
}
.chat-input-actions button {
  border-radius: 8px;
}

/* 诊断/错因/练习卡片 */
.error-card, .knowledge-card, .practice-question {
  box-shadow: 0 2px 10px rgba(17, 24, 39, .05);
  transition: transform .15s ease, box-shadow .2s ease;
}
.practice-question:hover {
  transform: translateY(-1px);
  box-shadow: 0 6px 18px rgba(17, 24, 39, .08);
}

/* 弹窗（头像/声音/角色选择等） */
.ap-box {
  border-radius: 18px;
  box-shadow: 0 24px 64px rgba(17, 24, 39, .22);
}
.ap-item {
  border-radius: 14px;
}

/* 图片工具栏 */
.img-toolbar {
  background: linear-gradient(180deg, #EEF4FF 0%, #E8EFFF 100%);
}
.img-toolbar button {
  border-radius: 7px;
}
/* 2026-08-16 邱董：老师/资源库按钮与其它按钮拉开间距，便于操作 */
.img-toolbar #bTeacherSetup { margin-left: 22px; }
.img-toolbar #tabLibrary { margin-left: 12px; }
/* 2026-08-23 邱董：第二栏显示区（图片工具栏/课前预习/资源库）窄屏时横向滚动，防止内容被裁剪不可达 */
.img-toolbar, #previewDisplay, #libraryList { overflow-x: auto; }

/* 细滚动条（学习页各栏） */
.l-list::-webkit-scrollbar, .rtab-content::-webkit-scrollbar,
.chat-area::-webkit-scrollbar, .img-box-m::-webkit-scrollbar {
  width: 8px;
  height: 8px;
}
.l-list::-webkit-scrollbar-thumb, .rtab-content::-webkit-scrollbar-thumb,
.chat-area::-webkit-scrollbar-thumb, .img-box-m::-webkit-scrollbar-thumb {
  background: #C7D2FE;
  border-radius: 8px;
}
.l-list::-webkit-scrollbar-thumb:hover, .rtab-content::-webkit-scrollbar-thumb:hover,
.chat-area::-webkit-scrollbar-thumb:hover, .img-box-m::-webkit-scrollbar-thumb:hover {
  background: #A5B4FC;
}

/* 页脚：备案信息更精致 */
footer {
  background: #fff;
  box-shadow: 0 -1px 0 rgba(226, 232, 240, .8);
}

/* 中等屏适配（避免学习页挤压） */
@media (max-width: 1280px) {
  .l { width: 20%; flex: 0 0 20%; }
  .r { width: 26%; flex: 0 0 26%; }
}
@media (max-width: 1024px) {
  .l { width: 22%; flex: 0 0 22%; }
  .r { width: 30%; flex: 0 0 30%; }
}

/* ═══ 2026-08-06 修复：学习页铺满全屏，右侧不再空一截 ═══
   原因：#p2 此前是 body（横向 flex）布局里的普通元素，页面底部的 <footer>
   会被排到学习页右侧并把它挤窄，视觉上右侧留下一大块空白。
   修复：让 #p2 与其他页面（.page）一样固定铺满整个视口。 */
#p2 {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  width: 100%;
  height: 100vh;
  height: 100dvh;
  z-index: 9999;
  padding: 0;
}

/* 页脚固定在视口底部，不再参与 body 的横向 flex 布局，避免挤压任何页面 */
footer {
  position: fixed;
  left: 0;
  right: 0;
  bottom: 0;
  z-index: 1;
}

/* ═══ 2026-08-08：学习页三栏折叠（左栏向左、右栏向右收起，平滑动画） ═══ */
#colLeft, #colRight {
  min-width: 0;
  overflow: hidden;
  transition: width .28s ease, flex-basis .28s ease, flex .28s ease;
}
#colLeft.col-folded, #colRight.col-folded {
  width: 0% !important;
  flex: 0 0 0% !important;
  border-left: none;
  border-right: none;
}
.divider {
  transition: opacity .2s ease;
}
.divider.col-divider-hidden {
  opacity: 0;
  pointer-events: none;
}

/* ═══ 2026-08-08：左栏卡片折叠（综合评价/AI老师）＋ 上传按钮栏常驻吸底 ═══
   平板矮屏时卡片不再把上传按钮/资源清单挤出可视区。 */
.l {
  overflow-y: auto;
}
.l-footer {
  position: sticky;
  bottom: 0;
  z-index: 5;
  margin-top: auto;
}
#masteryCard.card-folded #masteryCardBody,
#avatarArea.card-folded #avatarAreaBody {
  display: none;
}

/* ═══ 登录页优化（2026-08-10）：账号/密码同行 + 间距美化 ═══ */
.login-acct-row { display: flex; gap: 10px; }
.login-acct-row .input-group { flex: 1; margin-bottom: 0; }
.login-acct-row label { font-size: 12px; font-weight: 600; color: var(--color-text-secondary); }
@media (max-width: 480px) { .login-acct-row { flex-direction: column; } }
.login-2col { row-gap: 16px; }


/* ═══ 响应式自适应（2026-08-10 修正）：仅手机 <768px 生效，电脑/平板保持原样 ═══
   说明：原版本含 ≤1024px 平板压缩规则，导致桌面窗口/缩放下边栏变窄、按钮被挤坏；
   本修正删除该规则，电脑端（>768px）完全维持原布局。 */

/* ── 手机（≤768px）：单栏堆叠 ── */
@media (max-width: 768px) {
  body { padding: 0; }
  .page { padding: 10px; }
  .card { max-width: 100%; padding: 22px 16px; }

  /* 主工作区：三栏改纵向（左菜单→顶部横条，右面板→底部区块） */
  .p2 { overflow-y: auto; }
  .p2-inner { flex-direction: column; height: auto; min-height: 100vh; min-height: 100dvh; }
  .l, .m, .r { width: 100%; flex-basis: auto; height: auto; border: none; }
  /* 2026-08-12：手机纵向布局强制左右栏全宽（反制平板抽屉残留的 col-folded） */
  #colLeft.col-folded, #colRight.col-folded { width: 100% !important; flex: 1 1 auto !important; }
  .l { border-bottom: 1px solid var(--color-border); }
  .m { min-height: 62vh; }
  .r { border-top: 1px solid var(--color-border); }

  .l-header { height: 40px; }
  .l-list { display: flex; overflow-x: auto; padding: 6px 8px; gap: 6px; }
  .l-list > * { flex: 0 0 auto; }
  .l-footer { height: auto; min-height: 0; padding: 6px; }

  .r-tabs { height: 40px; overflow-x: auto; }
  .rtab { min-width: 84px; }
  .r-footer { height: auto; min-height: 0; padding: 8px; }

  /* 拖拽分隔条在手机上无意义 */
  .divider, .h-divider { display: none; }

  /* 登录页：去掉竖排品牌，双栏改单栏 */
  .lvb { display: none; }
  .login-2col { flex-direction: column; padding: 16px 8px; }
  .login-2col > div { padding-right: 0 !important; min-width: 0 !important; }

  /* 触控友好：按钮与输入最小高度 44px */
  .btn, .input, .select { min-height: 44px; font-size: 16px; }
  .tab { padding: 12px 6px; }
  .ap-box { width: 94%; max-height: 86vh; }
  .chat-input-area { min-height: 96px; }
  .chat-input-area textarea { font-size: 16px; }
  .xb-brand-title { font-size: 24px !important; }
}

/* ── 小屏手机（≤420px）── */
@media (max-width: 420px) {
  .brand h1 { font-size: 24px; }
  .h2 { font-size: 19px; }
  .qr-box { width: 120px; height: 120px; }
}


/* ═══ 登录页优化2（2026-08-10）：手机号/验证码一行 + 扫码体验 ═══ */
.login-sms-row { display: flex; gap: 10px; align-items: flex-end; }
.login-sms-row .input-group { flex: 1; margin-bottom: 0; }
.login-sms-row .sms-btn { white-space: nowrap; }
@media (max-width: 480px) { .login-sms-row { flex-direction: column; align-items: stretch; } .login-sms-row .sms-btn { width: 100%; } }


/* ═══════════════════════════════════════════════════════════════
   ═ 全场景响应式适配（2026-08-12 · 邱董：电脑/平板/手机/iPad 主动适配）
   ═ 桌面 >1100px 完全不变；追加于文件末尾，同优先级后写胜覆盖旧断点
   ═══════════════════════════════════════════════════════════════ */

/* ── 全局触屏微调（只作用于触摸设备，桌面鼠标不受影响）── */
@media (pointer: coarse) {
  html { -webkit-text-size-adjust: 100%; }            /* 防 iOS 聚焦输入自动放大 */
  .ltab, .rtab, .ub, .rb, .chat-input-actions button,
  .img-toolbar button, .step-item, .mf-item {
    touch-action: manipulation;                       /* 去 300ms 延迟 / 双击缩放 */
  }
  /* 拖拽分隔条 JS 只有 mousedown，触屏不触发 → 直接隐藏 */
  .divider, .h-divider { display: none !important; }
}

/* ── 方案A：平板横屏 / 小窗口（901~1100px）：紧凑三栏，中栏保底宽裕 ── */
@media (min-width: 901px) and (max-width: 1100px) {
  .l { width: 200px !important; flex: 0 0 200px !important; }
  .r { width: 260px !important; flex: 0 0 260px !important; }  /* 中栏 ≥ 901-200-260-8 ≈ 433px */
  .ltab { font-size: 12px; white-space: nowrap; }     /* 200px/4tab=50px，防换行 */
  .img-toolbar .zoom-hint { display: none; }          /* 平板无滚轮 */
  .chat-input-area textarea { font-size: 16px; }      /* 防 iOS 聚焦缩放 */
  .chat-input-actions button { min-height: 44px; padding: 10px 14px; }
  .l-footer, .r-footer { height: auto; min-height: 0; flex-wrap: wrap; gap: 6px; padding: 8px; }
  .ub, .rb { min-width: 44px; min-height: 44px; padding: 10px 12px; }
  .img-toolbar button { min-width: 40px; min-height: 40px; }
  #foldLeftBtn, #foldRightBtn { min-width: 44px; min-height: 44px; }
}

/* ── 旧 ≤900px 规则只保留给横屏小窗口/横屏手机：22%/26% 防中栏被挤爆 ── */
@media (max-width: 900px) and (orientation: landscape) {
  .l { width: 22%; flex: 0 0 22%; }
  .r { width: 26%; flex: 0 0 26%; }                   /* 800px 宽时中栏 ≈ 408px */
}

/* ── 方案B：窄屏抽屉（601~900px，任意方向）：左/右栏改抽屉，中栏全宽 ──
   2026-08-12 响应式终审：去掉 (orientation:portrait) 限制。
   原竖屏限定导致 768/820px【横屏】(iPad 分屏/小窗)同时命中 ≤768 手机堆叠与
   ≤900 横屏挤压两条规则 → 左栏半挂、中栏被挤到 ~426px。统一为 ≤900px 即抽屉，
   横竖屏行为一致，"格局模式不乱"。iPad 竖屏 768 行为不变。 */
@media (min-width: 601px) and (max-width: 900px) {
  /* 1) 反制 ≤768px 手机堆叠规则（iPad 竖屏正好 768px 会同时命中），恢复三栏骨架 */
  #p2 .p2-inner {
    position: relative;
    flex-direction: row !important;
    height: 100vh; height: 100dvh;
    min-height: 0 !important;
  }
  #p2 .l, #p2 .m, #p2 .r {
    width: auto !important;
    flex-basis: auto !important;
    height: 100vh; height: 100dvh;
    min-height: 0 !important;
    border: none;
  }
  #p2 .m { min-height: 0 !important; }                /* 手机规则设了 62vh，必须清掉 */

  /* 2) 左/右栏 → 抽屉覆盖层（.col-folded = 收起 = 滑出屏幕） */
  #p2 .l, #p2 .r {
    position: absolute !important;
    top: 0; bottom: 0;
    z-index: 60;                                      /* 遮罩 55 之上、AI老师 900 之下 */
    width: min(280px, 84vw) !important;               /* !important 压过 JS 内联百分比 */
    flex: 0 0 auto !important;
    transition: transform .28s ease, box-shadow .28s ease !important;
    box-shadow: 0 0 24px rgba(15,23,42,.18);
  }
  #p2 .l { left: 0; transform: translateX(-100%); border-right: 1px solid var(--color-border); }
  #p2 .r { right: 0; transform: translateX(100%); border-left: 1px solid var(--color-border); }
  #p2 .l:not(.col-folded), #p2 .r:not(.col-folded) { transform: translateX(0); }  /* 展开滑入 */
  /* 覆盖 base 的 .col-folded{width:0 !important}（同 !important 时后写者胜） */
  #p2 .l.col-folded, #p2 .r.col-folded {
    width: min(280px, 84vw) !important;
    flex: 0 0 auto !important;
    border-left: 1px solid var(--color-border);
    border-right: 1px solid var(--color-border);
  }

  /* 3) 手机规则反向修复：左列表恢复纵向滚动、右 tab 恢复原尺寸 */
  #p2 .l-list { display: block; overflow-x: visible; overflow-y: auto; padding: 8px; }
  #p2 .l-list > * { flex: none; }
  #p2 .r-tabs { height: 44px; }
  #p2 .rtab { min-width: 0; }

  /* 4) 触控目标 ≥44px */
  #p2 .ub, #p2 .rb { min-width: 44px; min-height: 44px; padding: 10px 12px; }
  #p2 .l-footer, #p2 .r-footer { height: auto; min-height: 0; flex-wrap: wrap; gap: 6px; padding: 8px; }
  #p2 .ltab { min-height: 44px; font-size: 14px; }
  #p2 .chat-input-actions button { min-height: 44px; padding: 10px 14px; }
  #foldLeftBtn, #foldRightBtn { min-width: 44px; min-height: 44px; }   /* 横幅折叠按钮 */
  #p2 .img-toolbar button { min-width: 40px; min-height: 40px; font-size: 14px; }
  #p2 .img-toolbar .zoom-hint { display: none; }
  #p2 .chat-input-area { min-height: 96px; padding-bottom: max(8px, env(safe-area-inset-bottom)); }
  #p2 .chat-input-area textarea { font-size: 16px; }
}

/* ── 矮横屏（高 ≤820px：iPad 横屏 768、小笔记本）：聊天区保底高度收紧 ── */
@media (min-width: 601px) and (max-height: 820px) {
  #p2 .chat-input-area { min-height: 96px; }
  #p2 .chat-input-area textarea { font-size: 16px; }
  #p2 .img-toolbar { padding: 4px 10px; }
}

/* ═══════════════════════════════════════════════════════════════
   ═ 能力优先触屏适配补丁（2026-08-12 · 响应式终审 · 邱董：主动适配所有设备）
   ═ 根因：原 44px 触控目标只挂在"宽度断点"(≤768 / 901-1100 / 601-900竖屏)上，
   ═   iPad Pro 横屏 1366、768-900 横屏分屏 等"是触摸设备、但宽度不在断点内"
   ═   的情况会漏网 → 退化成 19-28px 鼠标级小按钮，学生根本点不中。
   ═ 修法：触控目标改按"输入能力"@media(pointer:coarse) 兜底，与宽度无关；
   ═   桌面鼠标/触控板(pointer:fine)完全不受影响，桌面版式一像素不变。
   ═ 实测基线(headless Edge)：iPad Pro 横屏 发送/折叠钮 28/19px → 目标 44px。
   ═══════════════════════════════════════════════════════════════ */
@media (pointer: coarse) {
  #p2 .ub, #p2 .rb,
  #p2 .ltab, #p2 .rtab,
  #p2 .chat-input-actions button,
  #foldLeftBtn, #foldRightBtn,
  #p2 .img-toolbar button {
    min-width: 44px;
    min-height: 44px;
  }
  #p2 .chat-input-actions button { padding: 10px 14px; }
  #p2 .ub, #p2 .rb { padding: 10px 12px; }
  #p2 .ltab, #p2 .rtab { display: inline-flex; align-items: center; justify-content: center; }
  /* 任何触摸设备都无滚轮 → 隐藏"滚轮缩放"提示；防 iOS 聚焦输入自动放大 */
  #p2 .img-toolbar .zoom-hint { display: none; }
  #p2 .chat-input-area textarea { font-size: 16px; }
}

/* ══════════════════════════════════════════════════════════════
   Origin UI 风格动效层（2026-09-04）
   借鉴 Origin UI 按钮微交互：hover 浮起 + 品牌色光晕、高光扫过(shine)、
   按下回弹压感、登录/注册卡片入场；尊重 prefers-reduced-motion
   （文件内既有全局 reduce 规则已把 animation/transition 归零）。
   ══════════════════════════════════════════════════════════════ */

/* 1) 主按钮基座：建层 + 裁切，供高光扫过使用（不改变既有布局） */
.btn{position:relative;z-index:0;overflow:hidden}

/* 2) hover：浮起 + 品牌光晕；ghost/outline 仅轻浮起 */
.btn:not(.btn-ghost):hover:not([disabled]){
  transform:translateY(-2px);
  box-shadow:0 12px 28px rgba(30,109,242,.32);
  filter:saturate(1.05) brightness(1.03);
}
.btn-ghost:hover:not([disabled]),
.btn-outline:hover:not([disabled]){transform:translateY(-1px)}
.btn-outline:hover:not([disabled]){box-shadow:0 8px 18px rgba(30,109,242,.16)}

/* 3) 按下：快速回弹压感 */
.btn:not(.btn-ghost):not([disabled]):active{
  transform:translateY(1px) scale(.97);
  box-shadow:0 3px 10px rgba(30,109,242,.20);
  filter:none;
  transition-duration:.08s;
}
.btn-ghost:not([disabled]):active,
.btn-outline:not([disabled]):active{transform:translateY(1px) scale(.97)}

/* 4) 高光扫过：仅实底按钮，hover/键盘聚焦时一道柔光掠过 */
.btn:not(.btn-ghost):not(.btn-outline)::after{
  content:"";position:absolute;top:0;bottom:0;left:-70%;width:45%;
  background:linear-gradient(105deg,rgba(255,255,255,0) 0%,rgba(255,255,255,.38) 50%,rgba(255,255,255,0) 100%);
  transform:skewX(-18deg);pointer-events:none;transition:left .55s ease;
}
.btn:not(.btn-ghost):not(.btn-outline):hover:not([disabled])::after,
.btn:not(.btn-ghost):not(.btn-outline):focus-visible::after{left:125%}

/* 5) 登录/注册卡片入场：页面激活时轻升渐显 */
@keyframes xb-card-in{
  from{opacity:0;transform:translateY(14px)}
  to{opacity:1;transform:none}
}
.page.active .card{animation:xb-card-in .55s cubic-bezier(.22,.7,.28,1) both}

/* 6) 触屏：点击后不把 hover 浮起"粘死" */
@media (hover:none){
  .btn:not(.btn-ghost):hover:not([disabled]){transform:none;box-shadow:0 6px 18px rgba(30,109,242,.18);filter:none}
  .btn-ghost:hover:not([disabled]),
  .btn-outline:hover:not([disabled]){transform:none}
}
