:root{--brand-primary:#174c43;--brand-primary-hover:#0f3b34;--brand-soft:#edf7f4;--brand-gold:#ffc33d;--brand-gold-soft:#fff8e6;--text:#1f2937;--text-heading:#111827;--text-secondary:#667085;--text-muted:#98a2b3;--border:#d9d9d9;--border-light:#edf0f4;--page-bg:#f5f5f5;--panel-bg:#fff;--fill:#fafafa;--danger:#b42318;--success:#147a44;--control-radius:6px;--panel-radius:8px}
*{box-sizing:border-box}
body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Hiragino Sans GB","Microsoft YaHei",Arial,sans-serif;color:var(--text);background:var(--page-bg);font-size:14px;line-height:1.5715}
button,input,select,textarea{font-family:inherit}
.app-shell{max-width:1500px;margin:0 auto;padding:16px 20px 24px}
.topbar{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px;padding:14px 16px;background:#fff;border:1px solid var(--border-light);border-radius:var(--panel-radius);box-shadow:none}
.brand-wrap{display:flex;align-items:center;gap:14px;min-width:0}
.brand-logo{width:138px;height:auto;object-fit:contain;flex:none}
.brand-text{display:none;font-size:24px;font-weight:700;color:var(--brand-primary)}
.topbar h1{margin:0 0 2px;font-size:22px;line-height:1.25;font-weight:700;color:var(--text-heading);letter-spacing:0}
.topbar p{margin:0;color:var(--text-secondary);font-size:14px}
.workspace{display:grid;grid-template-columns:430px minmax(0,1fr);gap:16px;align-items:start}
.panel{background:#fff;border:1px solid var(--border);border-radius:var(--panel-radius);box-shadow:none;padding:20px}
.input-panel{position:sticky;top:16px}
.panel h2{margin:0 0 14px;font-size:18px;line-height:1.35;font-weight:700;color:var(--text-heading)}
.mode-note{margin:4px 0 16px;padding:10px 12px;border:1px solid #cfe7df;border-radius:var(--control-radius);background:var(--brand-soft);color:#3b625a;font-size:13px;line-height:1.6}
.mode-note b{color:var(--brand-primary)}
.two-col{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.field-label{display:block;margin:14px 0 6px;font-size:13px;font-weight:600;color:#344054}
.optional{font-size:12px;color:var(--text-muted);font-weight:500}
input[type=text],input[type=number],select,textarea{width:100%;border:1px solid var(--border);border-radius:var(--control-radius);padding:8px 11px;font-size:14px;line-height:1.5715;background:#fff;color:var(--text);outline:none;transition:border-color .2s ease,box-shadow .2s ease,background .2s ease}
input[type=text],input[type=number],select{height:40px}
textarea{resize:vertical;min-height:80px}
input::placeholder,textarea::placeholder{color:var(--text-muted)}
input:focus,select:focus,textarea:focus{border-color:var(--brand-primary);box-shadow:0 0 0 2px rgba(23,76,67,.12)}
.file-input{width:100%;margin-top:8px;border:1px dashed var(--border);border-radius:var(--control-radius);padding:9px 10px;background:var(--fill);color:var(--text-secondary)}
.file-upload-btn{width:100%;height:38px;margin-top:8px;border:1px dashed var(--border);border-radius:var(--control-radius);background:#fff;color:var(--brand-primary);font-size:14px;font-weight:600;cursor:pointer;transition:border-color .2s ease,background .2s ease}
.file-upload-btn:hover{border-color:var(--brand-primary);background:var(--brand-soft)}
.helper{margin:8px 0 0;font-size:12px;line-height:1.6;color:var(--text-secondary)}
.primary-btn,.secondary-btn,.tab-btn{height:40px;border-radius:var(--control-radius);padding:0 16px;font-size:14px;font-weight:600;cursor:pointer;transition:background .2s ease,border-color .2s ease,color .2s ease,box-shadow .2s ease}
.primary-btn{background:var(--brand-primary);color:#fff;border:1px solid var(--brand-primary);box-shadow:0 2px 0 rgba(0,0,0,.02)}
.primary-btn:hover:not(:disabled){background:var(--brand-primary-hover);border-color:var(--brand-primary-hover)}
.primary-btn{width:100%;margin-top:18px}
.secondary-btn{background:#fff;color:var(--brand-primary);border:1px solid #b9d8d1}
.secondary-btn:hover:not(:disabled){background:var(--brand-soft);border-color:var(--brand-primary)}
.primary-btn:disabled,.secondary-btn:disabled{opacity:.45;cursor:not-allowed}
.compact-btn{height:34px;padding:0 12px;white-space:nowrap}
.preview-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;padding-bottom:14px;border-bottom:1px solid var(--border-light)}
.preview-head h2{margin:0 0 3px;font-size:20px}
.preview-head p{margin:0;color:var(--text-secondary)}
.actions,.inline-actions{display:flex;gap:8px;flex-wrap:wrap}
.status-box,.error-box,.meta-box{margin:14px 0;padding:10px 12px;border-radius:var(--control-radius);font-size:14px;line-height:1.6}
.status-box.muted{background:#f5f5f5;color:var(--text-secondary)}
.status-box.loading{background:var(--brand-soft);color:var(--brand-primary)}
.status-box.success{background:#f0f9f4;color:var(--success)}
.status-box.error,.error-box{background:#fff1f0;color:var(--danger);border:1px solid #ffd5d0}
.error-box ul{margin:6px 0 0;padding-left:20px}
.meta-box{background:#fafafa;border:1px solid var(--border-light);color:var(--text-secondary)}
.trace-box{margin:10px 0 14px;padding:9px 12px;border-radius:var(--control-radius);background:#fafafa;border:1px dashed var(--border);color:var(--text-secondary);font-size:13px;line-height:1.6}
.trace-box code{margin:0 8px;padding:2px 6px;border-radius:4px;background:#f0f0f0;color:var(--text-heading);font-weight:600}
.trace-box span{color:var(--text-muted)}
.hidden{display:none}
.output-tabs{display:flex;gap:8px;margin:14px 0}
.tab-btn{height:38px;background:#fff;color:var(--text-secondary);border:1px solid var(--border)}
.tab-btn.active{border-color:var(--brand-primary);background:var(--brand-soft);color:var(--brand-primary)}
.canvas-stage{background:#f0f2f5;border:1px solid var(--border-light);border-radius:var(--panel-radius);padding:20px;overflow:auto}
.delivery-card{width:860px;margin:0 auto;position:relative;background:#fff;border-radius:18px;box-shadow:0 12px 36px rgba(31,41,55,.10)}
.blank-card{min-height:620px;display:flex;align-items:center;justify-content:center;background:#fff}
.blank-state{text-align:center;max-width:420px;padding:40px}
.blank-state img{width:200px}
.blank-state h3{font-size:28px;line-height:1.25;margin:20px 0 8px;color:var(--text-heading)}
.blank-state p{margin:0;color:var(--text-secondary);line-height:1.7}
.knowledge-card{padding:30px 36px 36px;background:#fff;border:1px solid var(--border-light)}
.card-logo-small{width:138px;height:auto;object-fit:contain;flex:none}
.knowledge-head{display:grid;grid-template-columns:145px 1fr;gap:18px;align-items:center;padding-bottom:16px;border-bottom:1px solid var(--border-light)}
.knowledge-head h1{margin:0;font-size:30px;line-height:1.25;color:var(--text-heading)}
.knowledge-head span{display:block;margin-top:6px;color:var(--text-secondary);font-size:14px;font-weight:600}
.knowledge-section,.plan-section{background:#fff;border:1px solid var(--border-light);border-radius:12px;padding:20px;margin-top:12px}
.knowledge-section h2,.plan-section h2{font-size:22px;line-height:1.3;margin:0 0 14px;color:var(--text-heading)}
.lesson-list{display:grid;gap:10px}
.lesson-block{background:#fafafa;border:1px solid var(--border-light);border-radius:8px;padding:12px 14px}
.lesson-block h3{margin:0 0 8px;font-size:16px;color:var(--text-heading)}
.lesson-block ul{margin:0;padding-left:18px;color:#344054}
.lesson-block li{margin:4px 0;line-height:1.55;font-weight:600}
.point-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.point-item{display:grid;grid-template-columns:40px 1fr;gap:10px;align-items:flex-start;background:#fafafa;border:1px solid var(--border-light);border-radius:8px;padding:12px 13px}
.point-item b{width:30px;height:30px;border-radius:6px;background:var(--brand-primary);color:#fff;display:flex;align-items:center;justify-content:center;font-size:12px}
.point-item p{margin:0;font-size:15px;line-height:1.65;color:#26344a;font-weight:600}
.plan-section{background:var(--brand-gold-soft);border-color:#f5df9d}
.plan-list{display:grid;gap:9px}
.plan-list div{display:grid;grid-template-columns:28px 1fr;gap:10px;align-items:flex-start}
.plan-list b{width:24px;height:24px;border-radius:50%;background:var(--brand-gold);color:#3d2a00;display:flex;align-items:center;justify-content:center;font-size:12px}
.plan-list p{margin:0;font-size:15px;line-height:1.7;color:#3f3420;font-weight:600}
.student-card{background:#fff}
.student-card .knowledge-section h2{color:#8a5a00}
.student-card .point-item b{background:var(--brand-gold);color:#3d2a00}
.student-card .plan-section.action-section{background:#fafafa;border-color:var(--border-light)}
.student-card .plan-section.action-section .plan-list b{background:var(--brand-primary);color:#fff}
.student-card .plan-section.action-section .plan-list p{color:#26344a}
.hidden-card{display:none!important}
.message-grid{display:grid;grid-template-columns:minmax(0,1.18fr) minmax(320px,.82fr);gap:14px;margin-top:16px}
.message-grid{align-items:stretch}
.message-panel{background:#fff;border:1px solid var(--border);border-radius:var(--panel-radius);padding:14px}
.message-panel{display:flex;flex-direction:column;min-height:0}
.message-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:10px}
.message-head h3{margin:0;font-size:15px;font-weight:700;color:var(--text-heading)}
.message-panel textarea{background:#fff}
.message-panel textarea{flex:1 1 auto;min-height:0;height:auto}
#parentMessage{min-height:360px}
#studentMessage{min-height:0}
.review-panel{margin-top:14px;background:#fff;border:1px solid var(--border);border-radius:var(--panel-radius);padding:14px}
.review-head{display:flex;align-items:flex-end;justify-content:space-between;gap:10px;margin-bottom:12px}
.review-head h3{margin:0;font-size:15px;font-weight:700;color:var(--text-heading)}
.review-head span{font-size:12px;color:var(--text-secondary)}
.review-grid{display:grid;grid-template-columns:1.1fr .95fr .95fr;gap:12px}
.review-grid h4{margin:0 0 8px;font-size:14px;color:#344054}
.review-list{display:grid;gap:8px}
.review-list>p,.course-review-item{margin:0;padding:10px 11px;border:1px solid var(--border-light);border-radius:var(--control-radius);background:#fafafa;color:var(--text-secondary);font-size:13px;line-height:1.6}
.course-review-item b{display:block;margin-bottom:4px;color:var(--text-heading)}
.course-review-item p{margin:3px 0}
.edit-box{margin-top:16px;background:#fff;border:1px solid var(--border);border-radius:var(--panel-radius);padding:14px}
.edit-box summary{cursor:pointer;font-weight:600;color:var(--text-heading)}
.edit-box textarea{margin-top:12px}
.preview-panel .field-label{margin-top:14px}
.preview-panel .inline-actions{margin-top:10px}
.preview-panel .edit-box textarea{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:12px;line-height:1.55}
.empty-text{margin:0;color:var(--text-secondary);line-height:1.7}
.generation-progress{margin:12px 0 14px;padding:12px;border:1px solid #cfe7df;border-radius:var(--panel-radius);background:#fbfdfc}
.progress-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:10px}
.progress-head strong{font-size:14px;color:var(--brand-primary)}
.progress-head span{font-size:13px;color:var(--text-secondary)}
.progress-track{height:8px;border-radius:999px;background:#e6ecea;overflow:hidden}
.progress-fill{height:100%;width:0;border-radius:999px;background:var(--brand-primary);transition:width .35s ease}
.generation-progress.waiting .progress-track{overflow:hidden}
.generation-progress.waiting .progress-fill{animation:generation-wait 1.8s ease-in-out infinite}
@keyframes generation-wait{0%,100%{transform:translateX(0)}50%{transform:translateX(180%)}}
@media(prefers-reduced-motion:reduce){.generation-progress.waiting .progress-fill{animation:none}}
.progress-steps{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-top:10px}
.progress-step{position:relative;padding-left:13px;font-size:12px;line-height:1.4;color:var(--text-muted);white-space:nowrap}
.progress-step::before{content:"";position:absolute;left:0;top:.45em;width:7px;height:7px;border-radius:50%;background:#d0d5dd}
.progress-step.done,.progress-step.active{color:var(--brand-primary);font-weight:600}
.progress-step.done::before,.progress-step.active::before{background:var(--brand-primary)}
.generation-progress.done .progress-fill{background:var(--brand-primary)}
.generation-progress.failed{border-color:#ffd5d0;background:#fff7f6}
.generation-progress.failed .progress-fill{background:var(--danger)}
.generation-progress.failed .progress-head strong,.generation-progress.failed .progress-head span{color:var(--danger)}
.material-drop-zone{border:1px dashed var(--border);border-radius:var(--panel-radius);background:#fafafa;padding:12px;transition:border-color .18s ease,background .18s ease,box-shadow .18s ease}
.material-drop-zone.drag-over{border-color:var(--brand-primary);background:var(--brand-soft);box-shadow:0 0 0 2px rgba(23,76,67,.12)}
.material-drop-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:10px}
.material-drop-head strong{display:block;font-size:14px;color:var(--text-heading);font-weight:700}
.material-drop-head span{display:block;margin-top:2px;font-size:12px;line-height:1.45;color:var(--text-secondary)}
.material-drop-zone textarea{border-radius:var(--control-radius);background:#fff}
.material-file-list{display:grid;gap:8px;margin-top:8px}
.material-file-item{display:grid;grid-template-columns:minmax(0,1fr) 32px;gap:8px;align-items:center;padding:8px 10px;border:1px solid var(--border-light);border-radius:var(--control-radius);background:#fff}
.material-file-item b{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px;color:var(--text-heading);font-weight:600}
.material-file-item span{display:block;margin-top:2px;font-size:12px;color:var(--text-secondary)}
.material-file-item button{width:32px;height:32px;border:1px solid var(--border);border-radius:var(--control-radius);background:#fff;color:var(--text-secondary);font-size:18px;line-height:1;cursor:pointer;transition:background .2s ease,border-color .2s ease,color .2s ease}
.material-file-item button:hover{border-color:#ffccc7;background:#fff2f0;color:var(--danger)}
.material-file-status{margin-top:8px;padding:7px 10px;border-radius:var(--control-radius);font-size:12px;line-height:1.55}
.material-file-status.muted{background:#f5f5f5;color:var(--text-secondary)}
.material-file-status.loading{background:var(--brand-soft);color:var(--brand-primary)}
.material-file-status.success{background:#f0f9f4;color:var(--success)}
.material-file-status.error{background:#fff1f0;color:var(--danger)}
.report-link-list{display:grid;gap:8px}
.report-link-row{display:grid;grid-template-columns:40px minmax(0,1fr) 36px;gap:8px;align-items:center}
.report-link-index{height:40px;border:1px solid var(--border);border-radius:var(--control-radius);background:#fafafa;color:var(--text-secondary);font-size:12px;font-weight:600;display:flex;align-items:center;justify-content:center}
.report-link-input{height:40px}
.report-link-remove{width:36px;height:40px;border:1px solid var(--border);border-radius:var(--control-radius);background:#fff;color:var(--text-secondary);font-size:18px;line-height:1;cursor:pointer;transition:background .2s ease,border-color .2s ease,color .2s ease}
.report-link-remove:hover{border-color:#ffccc7;background:#fff2f0;color:var(--danger)}
.link-add-btn{width:100%;height:38px;margin-top:8px;border:1px dashed var(--border);border-radius:var(--control-radius);background:#fff;color:var(--brand-primary);font-weight:600;padding:0 12px;cursor:pointer;transition:border-color .2s ease,background .2s ease}
.link-add-btn:hover{border-color:var(--brand-primary);background:var(--brand-soft)}
@media(max-width:1050px){.workspace{grid-template-columns:1fr}.input-panel{position:static}.topbar{align-items:flex-start;flex-direction:column}}
@media(max-width:900px){.message-grid,.review-grid{grid-template-columns:1fr}.preview-head{align-items:stretch;flex-direction:column}.preview-head .actions{width:100%}.preview-head .actions button{flex:1}}
@media(max-width:760px){.app-shell{padding:12px}.topbar{padding:12px}.two-col,.knowledge-head,.point-grid{grid-template-columns:1fr}.brand-logo{width:130px}.delivery-card{width:760px}.progress-steps{grid-template-columns:1fr 1fr}.progress-step{white-space:normal}}
