:root{--fs:1;--bg:#f5f7f7;--paper:#fff;--ink:#203b37;--muted:#52675e;--green:#197c68;--green-dark:#125e50;--mint:#e9f3ef;--border:#e3eae7;--orange:#d6934c;--shadow:0 5px 22px #1e473508;font-family:-apple-system,BlinkMacSystemFont,"PingFang TC","Microsoft JhengHei",sans-serif;color:var(--ink);font-size:calc(16px*var(--fs))}
html[data-fs="large"]{--fs:1.12}html[data-fs="xlarge"]{--fs:1.25}.font-scale-wrap{margin:0 4px 16px}.font-scale{display:flex;align-items:center;gap:6px;font-size:calc(13px*var(--fs));color:#8c9c93}.font-scale>span{margin-right:2px;white-space:nowrap}.font-scale button{flex:1;border:1px solid var(--border);background:#fff;color:#7d8f84;border-radius:7px;padding:8px 0;font-size:calc(13px*var(--fs))}.font-scale button:hover{background:#f2f6f3}.font-scale button.active{background:var(--mint);border-color:#cfe2d0;color:var(--green);font-weight:600}.font-scale-note{font-size:calc(12px*var(--fs));color:#a4afa7;margin:8px 0 0;line-height:1.7}*{box-sizing:border-box}body{margin:0;background:var(--bg)}button,input,select,textarea{font:inherit}button,a,input,select,textarea{-webkit-tap-highlight-color:transparent}button{cursor:pointer}button:disabled{cursor:not-allowed;opacity:.55}a{color:inherit;text-decoration:none}button{transition:background .18s,box-shadow .18s,transform .18s}button:focus-visible,a:focus-visible{outline:3px solid #91c7b6;outline-offset:3px}input:focus,select:focus,textarea:focus{outline:none;border-color:#68a998;box-shadow:0 0 0 3px #e2f0e9}svg.icon{width:calc(21px*var(--fs));height:calc(21px*var(--fs));stroke:currentColor;fill:none;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0}h1,h2,h3,p{margin-top:0}h1{font-size:calc(32px*var(--fs));line-height:1.4;letter-spacing:-.8px;margin-bottom:7px}h2{font-size:calc(20px*var(--fs));letter-spacing:-.2px}h3{font-size:calc(18px*var(--fs))}small{display:block}button.primary,.primary{border:1px solid var(--green);background:var(--green);color:#fff;display:inline-flex;gap:8px;align-items:center;justify-content:center;padding:12px 19px;border-radius:8px;font-weight:600;box-shadow:0 3px 7px #1d7c6814}button.primary:hover{background:var(--green-dark)}button.secondary{border:1px solid var(--border);background:#fff;color:var(--ink);display:inline-flex;gap:8px;align-items:center;justify-content:center;padding:11px 16px;border-radius:8px;font-weight:500}button.secondary:hover{background:#f1f6f3}.text-button{background:none;border:0;color:var(--green);font-weight:600;display:inline-flex;gap:6px;align-items:center;padding:5px 0}.icon-btn{background:none;border:0;color:#6e827a;display:grid;place-items:center;width:calc(36px*var(--fs));height:calc(36px*var(--fs));border-radius:7px}.icon-btn:hover{background:var(--mint)}
.sidebar{position:fixed;left:0;top:0;height:100dvh;width:252px;background:#fff;border-right:1px solid var(--border);display:flex;flex-direction:column;padding:32px 20px 20px;z-index:30;overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin}.brand{display:flex;align-items:center;gap:11px;padding:0 8px;font-size:calc(26px*var(--fs));letter-spacing:-.7px;font-weight:700}.brand small{font-size:calc(14px*var(--fs));letter-spacing:2.5px;color:#8a9691;font-weight:400;margin-top:5px}.brand-symbol{width:calc(44px*var(--fs));height:calc(47px*var(--fs));background:var(--green);color:#fff;border-radius:12px 12px 12px 3px;position:relative;font-size:calc(30px*var(--fs));font-family:Georgia,serif;display:flex;align-items:center;padding-left:7px;font-style:italic}.brand-symbol span{font-size:calc(21px*var(--fs));position:absolute;right:4px;top:4px}.workspace{background:#f7f9f8;border:1px solid var(--border);border-radius:9px;padding:12px 10px;margin:32px 0 28px;display:flex;gap:9px;align-items:center;font-size:calc(15px*var(--fs));font-weight:600}.workspace small{font-size:calc(13px*var(--fs));color:#94a29b;margin-top:5px;font-weight:400}.school-icon{background:#fff;border:1px solid var(--border);border-radius:7px;padding:7px;color:#6a8e80}.status-dot{width:6px;height:6px;background:#6aaa88;border-radius:50%;display:inline-block;margin-right:4px}.nav-label{font-size:calc(13px*var(--fs));color:#9ba7a1;letter-spacing:1.6px;margin-left:15px;margin-bottom:12px}.nav-item{width:100%;display:flex;align-items:center;gap:12px;padding:13px 14px;margin-bottom:6px;border:none;background:transparent;color:#6d8077;text-align:left;border-radius:8px;font-size:calc(16px*var(--fs))}.nav-item.active{background:#eaf4ef;color:var(--green);font-weight:600}.nav-item:hover{background:#f2f6f3}.nav-item .count{margin-left:auto;background:#e4ece7;color:#749182;border-radius:5px;padding:2px 6px;font-size:calc(13px*var(--fs))}.nav-item.active .count{background:#d6ebe0;color:#388669}.nav-item .new{font-size:calc(12px*var(--fs));margin-left:auto;color:#ac8b52;background:#faf3e5;padding:2px 5px;border-radius:4px}.side-note{margin:20px 4px 16px;border:1px solid #e5eee4;border-radius:9px;background:linear-gradient(135deg,#f5f8ed,#f8faf4);padding:17px 14px}.note-mark{font-size:calc(28px*var(--fs));color:#80965d;display:block;margin-bottom:10px}.side-note strong{font-size:calc(15px*var(--fs));display:block;color:#647759}.side-note p{color:#899581;font-size:calc(13px*var(--fs));line-height:1.9;margin:9px 0}.note-line{width:26px;height:2px;background:#bdcca8}.side-bottom{margin-top:auto;padding-top:12px;flex-shrink:0}.account{border:0;border-top:1px solid var(--border);padding:19px 4px 0;width:100%;background:#fff;display:flex;align-items:center;gap:10px;text-align:left}.account-info{font-size:calc(15px*var(--fs));font-weight:600}.account-info small{font-size:calc(13px*var(--fs));font-weight:400;color:#94a29a;margin-top:5px}.account .icon{margin-left:auto;width:15px}.avatar{border-radius:50%;width:calc(36px*var(--fs));height:calc(36px*var(--fs));display:grid;place-items:center;background:#e8eee6;color:#6f8563;font-size:calc(14px*var(--fs));font-weight:600}.account .avatar{background:#f0e9dc;color:#9c815b;width:calc(38px*var(--fs));height:calc(38px*var(--fs))}.app-shell{margin-left:252px}.topbar{height:76px;padding:0 38px;background:#fff;border-bottom:1px solid var(--border);display:flex;justify-content:space-between;align-items:center}.breadcrumbs{display:flex;gap:16px;align-items:center;font-size:calc(14px*var(--fs));color:#91a097}.breadcrumbs strong{font-weight:500;color:#647b70}.crumb-slash{color:#c0c9c4}.top-tools{display:flex;align-items:center;gap:21px}.local-badge{font-size:calc(13px*var(--fs));border:1px solid #e7eee8;border-radius:5px;padding:5px 9px;color:#7b8f80}.mobile-menu{display:none}main{padding:32px 38px 22px;max-width:1550px;margin:auto}.app-footer{display:flex;justify-content:space-between;padding:14px 38px 20px;font-size:calc(12px*var(--fs));color:#a7b2ac;max-width:1550px;margin:auto}.page-heading{display:flex;justify-content:space-between;align-items:center;margin-bottom:24px;gap:20px}.eyebrow{font-size:calc(13px*var(--fs));letter-spacing:2px;color:#8ba59a;margin-bottom:8px}.subtitle{font-size:calc(15px*var(--fs));color:#8d9b94;margin:0;line-height:1.8}.page-heading .actions{display:flex;gap:10px;align-items:center}.page-heading .secondary,.page-heading .primary{font-size:calc(14px*var(--fs));padding:11px 14px}
.hero{position:relative;overflow:hidden;min-height:167px;border:1px solid #dfeae3;border-radius:11px;background:linear-gradient(105deg,#eef5ef,#f3f7ee 60%,#eef4e7);padding:26px 30px;display:flex;justify-content:space-between;align-items:center;margin-bottom:22px}.hero-copy{position:relative;z-index:2}.hero-eyebrow{font-size:calc(12px*var(--fs));letter-spacing:2px;color:#6d947d;display:flex;gap:8px;align-items:center;margin-bottom:12px}.hero h2{font-size:calc(26px*var(--fs));font-weight:600;margin:0 0 9px;letter-spacing:-.8px}.hero p{font-size:calc(14px*var(--fs));color:#7b9282;margin:0 0 16px}.hero .text-button{font-size:calc(14px*var(--fs))}.hero-visual{width:300px;height:160px;position:absolute;right:30px;top:5px}.hero-visual .formula{position:absolute;color:#8ea88d;font-family:Georgia,serif;font-size:calc(22px*var(--fs));font-style:italic;transform:rotate(-9deg)}.formula.f1{top:18px;left:28px}.formula.f2{bottom:15px;right:5px;font-size:calc(18px*var(--fs));color:#b1b99d}.hero-visual svg{width:270px;height:170px;position:absolute;right:0;top:0}.metric-row{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:26px}.metric{background:#fff;border:1px solid var(--border);border-radius:9px;padding:17px 18px;position:relative;min-height:122px}.metric-label{font-size:calc(13px*var(--fs));color:#8a9c92;margin-bottom:12px;display:flex;align-items:center;gap:7px}.metric-label .icon{width:14px;height:14px}.metric-value{font-size:calc(30px*var(--fs));font-weight:650;letter-spacing:-.7px}.metric-value small{display:inline;font-size:calc(14px*var(--fs));color:#99a79e;font-weight:400;letter-spacing:0;margin-left:5px}.metric-foot{font-size:calc(12px*var(--fs));margin-top:7px;color:#9daa9f}.metric-foot .positive{color:#6b9e78}.metric-spark{position:absolute;right:15px;bottom:25px;display:flex;gap:4px;align-items:flex-end;height:24px}.metric-spark i{width:5px;background:#e3eee4;border-radius:2px}.metric-spark i:last-child{background:#9bc4a4}
.bank-layout{display:grid;grid-template-columns:minmax(0,1fr) 262px;gap:22px;align-items:start}.panel{background:var(--paper);border:1px solid var(--border);border-radius:10px;box-shadow:var(--shadow)}.panel-pad{padding:26px}.bank-panel{overflow:hidden}.panel-heading{display:flex;justify-content:space-between;align-items:center;padding:20px 22px 14px;gap:10px}.panel-heading h2{font-size:calc(18px*var(--fs));margin:0;display:flex;gap:8px;align-items:center}.small-text{font-size:calc(13px*var(--fs));font-weight:400;color:#9ca79f}.segmented{display:flex;gap:5px;padding:3px;background:#f3f6f3;border-radius:6px}.segmented button{display:flex;align-items:center;justify-content:center;border:0;color:#91a196;background:transparent;width:30px;height:28px;border-radius:4px}.segmented button.active{background:#fff;color:#578575;box-shadow:0 1px 4px #193c2310}.segmented .icon{width:14px;height:14px}.filters{padding:0 22px 15px;display:flex;gap:9px}.search-field{position:relative;flex:1;min-width:100px}.search-field .icon{position:absolute;left:11px;top:11px;width:15px;color:#99a79e}.search-field input{width:100%;padding:10px 10px 10px 34px;border:1px solid var(--border);background:#fafcfa;border-radius:6px;font-size:calc(14px*var(--fs));height:37px}.search-field input::placeholder{color:#acb7af}.filters select{width:104px;font-size:calc(13px*var(--fs));height:37px;padding:0 9px;border:1px solid var(--border);border-radius:6px;background:#fff;color:#7c8d80}.topic-tabs{display:flex;flex-wrap:wrap;gap:8px 19px;border-bottom:1px solid var(--border);padding:4px 22px 0}.topic-tab{flex-shrink:0;border:0;background:none;color:#88998f;padding:0 0 13px;font-size:calc(14px*var(--fs));position:relative;white-space:nowrap}.topic-tab.active{color:var(--green);font-weight:600}.topic-tab.active:after{content:"";height:2px;position:absolute;bottom:0;left:0;right:0;background:var(--green)}.question-list{padding:0 22px}.question-card{padding:19px 0;position:relative;border-bottom:1px solid #eef1ed;display:flex;gap:14px}.question-card:last-child{border-bottom:0}.question-number{background:#f1f6f1;border:1px solid #e7eee5;width:calc(34px*var(--fs));height:calc(34px*var(--fs));display:grid;place-items:center;color:#82967b;font-family:Georgia,serif;font-size:calc(16px*var(--fs));flex-shrink:0;border-radius:6px;margin-top:1px}.question-body{flex:1;min-width:0}.question-top{display:flex;align-items:center;gap:8px;margin-bottom:10px}.question-top h3{font-size:calc(15px*var(--fs));letter-spacing:.15px;line-height:1.5;margin:0;font-weight:600}.badge{font-size:calc(12px*var(--fs));border-radius:4px;background:#edf5ef;color:#6d9a79;padding:3px 6px;white-space:nowrap;font-weight:400}.badge.l2{background:#fcf4e5;color:#b59764}.badge.l3{background:#f0edfa;color:#9a89b4}.badge.outline{background:#fff;border:1px solid var(--border);color:#99a69d}.question-formula{font-size:calc(22px*var(--fs));font-family:Georgia,"Times New Roman","PingFang TC",serif;letter-spacing:.1px;line-height:1.7;color:#3d5145;margin-bottom:11px}.question-meta{display:flex;gap:11px;align-items:center;color:#a1ada3;font-size:calc(12px*var(--fs));flex-wrap:wrap}.question-meta .separator{height:10px;width:1px;background:#e2e8e1}.question-controls{display:flex;flex-direction:column;align-items:flex-end;justify-content:space-between;gap:14px;padding:1px 0}.bookmark{border:0;background:none;color:#b2bdb2;padding:0}.bookmark.saved{color:#d3a055}.bookmark .icon{width:16px;height:16px}.practice-btn{font-size:calc(13px*var(--fs));padding:7px 10px;border:1px solid #dbe9dd;color:#638d6d;background:#f8fbf7;border-radius:5px;display:flex;gap:4px;align-items:center;white-space:nowrap}.practice-btn:hover{background:#eaf4e8}.practice-btn .icon{width:12px;height:12px}.pagination{display:flex;justify-content:space-between;align-items:center;padding:16px 22px;border-top:1px solid var(--border);font-size:calc(12px*var(--fs));color:#a1ada4}.pagination-buttons{display:flex;align-items:center;gap:5px}.pagination-buttons button{min-width:calc(28px*var(--fs));height:calc(28px*var(--fs));border:1px solid var(--border);border-radius:4px;background:#fff;font-size:calc(12px*var(--fs));color:#839887}.pagination-buttons button.active{background:var(--green);color:#fff;border-color:var(--green)}.question-list.grid{display:grid;grid-template-columns:1fr 1fr;gap:14px;padding:18px}.question-list.grid .question-card{border:1px solid var(--border);border-radius:8px;padding:15px;flex-wrap:wrap}.question-list.grid .question-number{display:none}.question-list.grid .question-controls{flex-direction:row;width:100%;align-items:center}.question-list.grid .question-formula{font-size:calc(18px*var(--fs))}
.right-stack{display:flex;flex-direction:column;gap:17px}.right-panel{padding:19px 19px 17px}.right-panel h2{display:flex;align-items:center;gap:7px;font-size:calc(15px*var(--fs));margin-bottom:6px}.right-panel h2 .icon{width:16px;height:16px;color:#88a383}.right-panel .panel-sub{color:#a1ad9f;font-size:calc(12px*var(--fs));margin-bottom:18px;line-height:1.7}.roadmap{display:flex;align-items:flex-start;justify-content:space-between;margin:19px 0 15px;position:relative}.roadmap:before{content:"";position:absolute;top:15px;left:18px;right:18px;border-top:1px dashed #c8d9c7}.roadmap-item{display:flex;flex-direction:column;align-items:center;gap:8px;position:relative;font-size:calc(12px*var(--fs));color:#8c9d86}.roadmap-circle{width:calc(36px*var(--fs));height:calc(36px*var(--fs));border:1px solid #d8e5d2;background:#f5f9f1;border-radius:50%;display:grid;place-items:center;color:#8ba275;font-size:calc(14px*var(--fs))}.roadmap-item.active .roadmap-circle{background:#6b9870;border-color:#6b9870;color:#fff}.recommendation-mini{border-top:1px solid #eef1e8;padding-top:14px}.recommendation-mini .title-row{font-size:calc(13px*var(--fs));color:#8b9d82;display:flex;justify-content:space-between;margin-bottom:7px}.recommendation-mini strong{font-size:calc(14px*var(--fs));font-weight:600;display:block;line-height:1.7;margin-bottom:12px}.wide{width:100%}.right-panel .wide{font-size:calc(13px*var(--fs));padding:9px}.knowledge-row{display:flex;justify-content:space-between;margin-bottom:7px;font-size:calc(13px*var(--fs));color:#7c907c}.knowledge-row span:last-child{color:#a6b49e}.progress-track{height:5px;background:#edf2e8;border-radius:6px;overflow:hidden;margin-bottom:14px}.progress-fill{height:100%;border-radius:6px;background:#98b995}.progress-fill.gold{background:#d5c195}.tip-panel{background:#fcfbf6;border-color:#eeeade}.tip-panel h2{color:#9a8b6d}.tip-panel h2 .icon{color:#b6a478}.tip-panel p{font-size:calc(13px*var(--fs));line-height:1.9;color:#a2977b;margin-bottom:13px}.tip-panel .text-button{font-size:calc(13px*var(--fs));color:#a78d51}.empty{padding:50px 24px;text-align:center;color:#8c9b90;line-height:1.8}.empty .icon{width:34px;height:34px;color:#aac1af;margin-bottom:12px}.empty h3{font-size:calc(16px*var(--fs));color:#607968;margin-bottom:6px}.empty p{font-size:calc(14px*var(--fs))}.empty .primary{font-size:calc(14px*var(--fs))}
.section-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px}.section-head h2{margin:0}.section-head p{color:var(--muted);font-size:calc(15px*var(--fs));margin:7px 0 0}.practice-layout{display:grid;grid-template-columns:minmax(0,1fr) 285px;gap:22px}.practice-panel{padding:26px}.practice-question{border-bottom:1px solid var(--border);padding-bottom:22px;margin-bottom:20px}.practice-question .question-formula{font-size:calc(25px*var(--fs));margin:20px 0}.practice-question h2{font-size:calc(19px*var(--fs));line-height:1.6;margin:13px 0}.practice-tabs{display:flex;gap:8px;margin-bottom:16px}.practice-tabs button{border:1px solid var(--border);padding:9px 14px;background:#fff;border-radius:6px;color:#88988c;font-size:calc(15px*var(--fs));display:flex;gap:7px;align-items:center}.practice-tabs button.active{color:var(--green);background:var(--mint);border-color:#cce2d6}.writing-toolbar{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:10px;padding:10px 12px;border:1px solid var(--border);border-bottom:0;border-radius:8px 8px 0 0;background:#f9fbf8}.tool-group{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.tool-group button.active{background:#e3eee5;color:#237c5c}.pen-color{width:calc(20px*var(--fs));height:calc(20px*var(--fs));border-radius:50%;padding:0;border:3px solid #fff;outline:1px solid #dce5df}.pen-color.selected{outline:2px solid #96b69e}.canvas-wrap{border:1px solid var(--border);border-radius:0 0 8px 8px;overflow:hidden;position:relative;background:#fff}.canvas-wrap:before{content:"";position:absolute;inset:0;background-image:linear-gradient(#e4ebe440 1px,transparent 1px),linear-gradient(90deg,#e4ebe440 1px,transparent 1px);background-size:24px 24px;pointer-events:none}.canvas-wrap canvas{display:block;width:100%;height:350px;touch-action:none;position:relative}.canvas-placeholder{position:absolute;pointer-events:none;top:43%;left:0;right:0;text-align:center;color:#c2cec2;font-size:calc(16px*var(--fs))}.answer-field{width:100%;border:1px solid var(--border);border-radius:8px;resize:vertical;padding:14px;line-height:1.8;min-height:150px;background:#fbfcfa}.field-label{display:block;font-size:calc(14px*var(--fs));font-weight:600;color:#758c7a;margin-bottom:8px}.field-hint{font-size:calc(13px*var(--fs));color:#99a99c;line-height:1.8;margin:9px 0}.submit-row{display:flex;justify-content:space-between;align-items:center;margin-top:20px;gap:12px}.submit-row .primary{font-size:calc(15px*var(--fs))}.checkbox-line{display:flex;align-items:flex-start;gap:7px;font-size:calc(13px*var(--fs));color:#859782;line-height:1.8;margin:12px 0}.checkbox-line input{accent-color:var(--green);margin-top:3px}.upload-answer{display:flex;align-items:center;justify-content:center;flex-direction:column;gap:10px;background:#fbfcf9;border:1px dashed #b9cdb9;border-radius:8px;min-height:280px;padding:24px;cursor:pointer;color:#799177}.upload-answer .icon{width:28px;height:28px}.upload-answer img{max-height:290px;max-width:100%;object-fit:contain}.upload-answer small{color:#9dad96;font-size:calc(13px*var(--fs))}.hint-box{background:#f4f8ed;padding:13px;border:1px solid #e6eddc;border-radius:7px;margin-top:10px;font-size:calc(15px*var(--fs));line-height:1.8;color:#7e9365}.result{padding:22px;border:1px solid #d9e7db;border-radius:9px;background:#f4faf3;margin-top:20px}.result.pending{background:#fcf8ef;border-color:#ede3cc}.result-title{display:flex;align-items:center;gap:9px;font-size:calc(18px*var(--fs));font-weight:600}.result p{font-size:calc(15px*var(--fs));line-height:1.8;margin:10px 0 0;color:#819379}.result-score{font-size:calc(30px*var(--fs));margin-left:auto}.result-score small{display:inline;font-size:calc(15px*var(--fs));color:#9aab8e}.result-step{border-top:1px solid #e2ecde;padding-top:10px;margin-top:10px;font-size:calc(14px*var(--fs));display:flex;justify-content:space-between;gap:15px}.result-actions{display:flex;gap:12px;margin-top:17px}.result-actions .secondary{font-size:calc(14px*var(--fs));padding:8px 12px}.recommend-list button{width:100%;text-align:left;border:1px solid var(--border);border-radius:7px;background:#fff;padding:12px;margin-top:9px}.recommend-list button:hover{background:#f5f9f2}.recommend-list strong{display:block;font-size:calc(14px*var(--fs));line-height:1.6;margin-bottom:6px}.recommend-list small{color:#98a68f;font-size:calc(12px*var(--fs))}.recommend-label{font-size:calc(13px*var(--fs));margin:16px 0 5px;color:#8b9b82}
.import-layout{display:grid;grid-template-columns:minmax(0,1fr) 285px;gap:22px}.import-panel{padding:26px}.stepper{display:flex;gap:28px;padding:0 0 24px;margin-bottom:24px;border-bottom:1px solid var(--border)}.step{display:flex;align-items:center;gap:9px;font-size:calc(14px*var(--fs));color:#a0afa2}.step span{width:calc(29px*var(--fs));height:calc(29px*var(--fs));background:#f1f5ee;border-radius:50%;display:grid;place-items:center;font-size:calc(14px*var(--fs))}.step.active{color:var(--green);font-weight:600}.step.active span{background:var(--green);color:#fff}.dropzone{display:flex;flex-direction:column;align-items:center;text-align:center;justify-content:center;gap:12px;border:1px dashed #b8cdbb;border-radius:8px;background:#f8fbf6;padding:30px;margin-bottom:20px;cursor:pointer}.dropzone.dragover{background:#e5f1e5;border-color:var(--green)}.dropzone .icon{width:30px;height:30px;color:#85a37f}.dropzone strong{font-size:calc(16px*var(--fs));color:#6c8a66}.dropzone small{color:#a0b099;font-size:calc(13px*var(--fs))}.divider-text{display:flex;gap:15px;align-items:center;justify-content:center;min-width:0;overflow:hidden;font-size:calc(13px*var(--fs));color:#a1aea0;margin:20px 0}.divider-text>span{flex:0 0 auto;white-space:nowrap;text-align:center}.divider-text:before,.divider-text:after{content:"";flex:1 1 0;min-width:10px;height:1px;background:var(--border)}.form-field{margin:16px 0}.form-field input,.form-field select{width:100%;padding:11px 12px;border:1px solid var(--border);border-radius:7px;color:#607c65;background:#fff}.import-text{min-height:230px;font-size:calc(15px*var(--fs))}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}.form-grid .form-field{margin:0}.import-warning{background:#fbf8ef;color:#a49676;border:1px solid #eee5cf;font-size:calc(14px*var(--fs));line-height:1.9;padding:13px;border-radius:7px}.draft-card{padding:20px;border:1px solid var(--border);border-radius:8px;margin:17px 0;background:#fcfdfb}.draft-top{display:flex;justify-content:space-between;align-items:center;margin-bottom:15px}.draft-top strong{font-size:calc(15px*var(--fs));color:#7b9272}.draft-card .answer-field{min-height:95px}.success-panel{text-align:center;padding:60px 25px}.success-icon{width:65px;height:65px;background:#eaf5e9;color:var(--green);border-radius:50%;display:grid;place-items:center;margin:0 auto 20px;font-size:calc(30px*var(--fs))}.success-panel h2{font-size:calc(24px*var(--fs))}.success-panel p{color:#8c9e88;font-size:calc(16px*var(--fs));margin:12px 0 26px}.feature-list{padding:0;list-style:none}.feature-list li{font-size:calc(14px*var(--fs));line-height:1.9;color:#92a087;margin:17px 0}.feature-list li strong{display:block;color:#6e8864;font-size:calc(15px*var(--fs));margin-bottom:4px}.feature-list li .icon{width:16px;color:#84a076;vertical-align:middle;margin-right:6px}
.records-panel{padding:0 22px;overflow:hidden}.record{display:flex;gap:15px;border-bottom:1px solid var(--border);padding:22px 0;align-items:flex-start}.record:last-child{border:0}.record-icon{width:calc(38px*var(--fs));height:calc(38px*var(--fs));border-radius:8px;background:#eff5e9;color:#97af83;display:grid;place-items:center;flex-shrink:0}.record-main{flex:1;min-width:0}.record-main strong{font-size:calc(16px*var(--fs));line-height:1.7}.record-main p{font-size:calc(14px*var(--fs));line-height:1.8;color:#91a088;margin:8px 0}.record-main small{font-size:calc(13px*var(--fs));color:#a5b09d}.record-score{font-size:calc(21px*var(--fs));color:#7da37b;text-align:right;white-space:nowrap}.record-score small{font-size:calc(13px*var(--fs));color:#a3b196;font-weight:400;margin-top:5px}.record-actions{display:flex;gap:8px;margin-top:10px}.record-actions button{font-size:calc(13px*var(--fs));padding:7px 11px}.history-filters{display:flex;gap:10px;margin-bottom:20px}.history-filters button{background:#fff;border:1px solid var(--border);border-radius:7px;padding:9px 15px;color:#96a18d;font-size:calc(14px*var(--fs))}.history-filters button.active{background:var(--mint);border-color:#cfe2d0;color:var(--green)}.growth-layout{display:grid;grid-template-columns:1.6fr 1fr;gap:22px}.growth-panel{padding:25px}.growth-panel h2{font-size:calc(18px*var(--fs));margin-bottom:10px}.growth-panel p{font-size:calc(14px*var(--fs));color:#98a48f;line-height:1.8}.chart{height:190px;display:flex;align-items:flex-end;gap:14px;margin:30px 0 0;padding:0 12px;border-bottom:1px solid var(--border)}.chart-column{height:100%;flex:1;display:flex;align-items:center;flex-direction:column;justify-content:flex-end;gap:8px;position:relative}.chart-column .bar{width:65%;max-width:45px;background:#b4cfa7;border-radius:5px 5px 0 0;min-height:3px}.chart-column .bar-label{position:absolute;bottom:-24px;font-size:calc(12px*var(--fs));color:#a1ad98}.chart-column .bar-value{color:#839973;font-size:calc(13px*var(--fs))}.chart-caption{margin-top:37px;font-size:calc(12px*var(--fs));color:#a9b4a0}.topic-detail{padding:17px 0;border-bottom:1px solid var(--border)}.topic-detail:last-child{border:0}.topic-detail .progress-track{margin-bottom:0}.settings-layout{display:grid;grid-template-columns:1.2fr 1fr;gap:22px}.settings-panel{padding:26px}.settings-panel h2{font-size:calc(18px*var(--fs))}.settings-status{padding:18px;border-radius:8px;background:#f5f9ef;border:1px solid #e3eada;margin:20px 0}.settings-status strong{display:flex;align-items:center;gap:8px;font-size:calc(16px*var(--fs));color:#748c62}.settings-status p{font-size:calc(14px*var(--fs));line-height:1.9;color:#99a189;margin:12px 0 0}.code-block{background:#f4f6f2;border:1px solid #e5eade;border-radius:7px;padding:16px;font-family:monospace;font-size:calc(14px*var(--fs));line-height:1.9;color:#73835e;overflow:auto;white-space:pre-wrap;word-break:break-all}.info-note{font-size:calc(14px*var(--fs));line-height:1.9;color:#91a086}.settings-panel ul{padding-left:17px}.settings-panel li{font-size:calc(14px*var(--fs));line-height:2;color:#92a184}
.modal-backdrop{position:fixed;inset:0;background:#17382f48;backdrop-filter:blur(4px);z-index:100;display:flex;align-items:center;justify-content:center;padding:25px;animation:fadeIn .2s}.modal{width:min(480px,100%);max-height:90dvh;overflow:auto;background:#fff;border:1px solid #e5eae1;border-radius:15px;box-shadow:0 22px 90px #142e3033;padding:30px;position:relative}.modal.large{width:min(740px,100%)}.modal-close{position:absolute;right:17px;top:17px}.modal h2{font-size:calc(24px*var(--fs));margin:8px 0 10px}.modal-intro{font-size:calc(15px*var(--fs));color:#94a28c;line-height:1.9;margin:0 0 23px}.login-brand{display:flex;gap:10px;align-items:center;color:var(--green);font-size:calc(22px*var(--fs));font-weight:600;margin-bottom:26px}.role-select{display:grid;grid-template-columns:1fr 1fr;background:#f2f6ef;padding:4px;gap:5px;border-radius:8px;margin:20px 0}.role-select button{padding:10px;border:0;background:none;color:#8e9c86;border-radius:6px;font-size:calc(15px*var(--fs))}.role-select button.active{background:#fff;color:var(--green);box-shadow:0 2px 6px #2543300d}.demo-accounts{font-size:calc(13px*var(--fs));padding:14px;background:#faf8f0;border-radius:7px;color:#ad9d7d;line-height:1.9;margin-top:18px}.error-text{color:#bb7869;font-size:calc(15px*var(--fs));margin:10px 0;line-height:1.7;min-height:0}.toast{position:fixed;bottom:25px;left:calc(50% + 100px);transform:translate(-50%,15px);background:#275c4c;color:#fff;box-shadow:0 4px 18px #153c3026;border-radius:8px;padding:13px 22px;z-index:200;font-size:calc(15px*var(--fs));opacity:0;pointer-events:none;transition:opacity .2s,transform .2s;max-width:calc(100vw - 40px);line-height:1.7}.toast.show{opacity:1;transform:translate(-50%,0)}.review-image{width:100%;max-height:350px;object-fit:contain;border:1px solid var(--border);border-radius:8px;margin:10px 0}.review-answer{font-size:calc(15px*var(--fs));padding:14px;background:#f8faf4;border-radius:7px;white-space:pre-wrap;line-height:1.8;overflow-wrap:anywhere}.inline-error{font-size:calc(14px*var(--fs));background:#fff2ed;padding:12px;border:1px solid #edd6cc;border-radius:7px;color:#af8271;margin:12px 0}.offline-message{background:#fff;border:1px solid var(--border);border-radius:12px;max-width:650px;margin:70px auto;padding:35px;text-align:center}.offline-message p{font-size:calc(16px*var(--fs));line-height:1.9;color:#98a28d}.back-button{margin-bottom:20px;font-size:calc(14px*var(--fs))}.fade-in{animation:fadeIn .28s ease-out}@keyframes fadeIn{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}
@media(min-width:1550px){main{padding-top:38px}.sidebar{width:270px}.app-shell{margin-left:270px}.bank-layout{grid-template-columns:minmax(0,1fr) 300px}.question-formula{font-size:calc(22px*var(--fs))}.right-panel{padding:24px}.hero{min-height:185px}}
@media(max-width:1180px){.sidebar{width:224px;padding:27px 15px 18px}.brand{font-size:calc(24px*var(--fs))}.app-shell{margin-left:224px}main{padding:28px 25px 20px}.topbar{padding:0 25px}.bank-layout{grid-template-columns:minmax(0,1fr) 232px;gap:16px}.right-panel{padding:17px 15px}.filters{padding-left:17px;padding-right:17px;gap:6px}.filters select{width:87px}.topic-tabs{padding:0 17px;gap:15px}.question-list{padding:0 17px}.panel-heading{padding:18px 17px 14px}.question-card{gap:10px}.question-top{flex-wrap:wrap}.metric{padding:15px 14px}.metric-row{gap:10px}.metric-spark{display:none}.hero-visual{right:8px}.side-note{margin-top:22px}.question-formula{font-size:calc(18px*var(--fs))}.app-footer{padding-left:25px;padding-right:25px}.practice-layout,.import-layout{grid-template-columns:minmax(0,1fr) 240px}}
@media(max-width:960px){.bank-layout{grid-template-columns:1fr}.right-stack{display:grid;grid-template-columns:1fr 1fr 1fr;gap:12px}.roadmap{gap:10px}.hero-visual{width:240px;right:10px}.hero-visual .formula.f1{left:0}.metric-value{font-size:calc(26px*var(--fs))}.practice-layout,.import-layout{grid-template-columns:1fr}.practice-layout .right-stack,.import-layout .right-stack{grid-template-columns:1fr 1fr}.hero h2{font-size:calc(24px*var(--fs))}.question-top h3{font-size:calc(16px*var(--fs))}.question-formula{font-size:calc(20px*var(--fs))}.question-card{padding:21px 0}.growth-layout,.settings-layout{grid-template-columns:1fr}.toast{left:calc(50% + 90px)}}
@media(max-width:740px){.sidebar{transform:translateX(-100%);transition:transform .2s;box-shadow:10px 0 40px #16362915;width:264px}.sidebar.open{transform:translateX(0)}.app-shell{margin-left:0}.mobile-menu{display:grid}.topbar{height:61px;padding:0 18px}.breadcrumbs{gap:9px}.top-tools{gap:10px}.top-tools .local-badge{display:none}main{padding:22px 18px}.page-heading{align-items:flex-start;flex-wrap:wrap;margin-bottom:19px;gap:16px}h1{font-size:calc(28px*var(--fs))}.page-heading .actions{width:100%;justify-content:flex-start}.eyebrow{font-size:calc(12px*var(--fs))}.subtitle{font-size:calc(14px*var(--fs))}.hero{padding:22px;min-height:170px}.hero h2{font-size:calc(22px*var(--fs))}.hero p{font-size:calc(13px*var(--fs));max-width:215px;line-height:1.8}.hero-visual{opacity:.5;right:-60px;width:210px;top:12px}.hero-visual .formula{display:none}.metric-row{grid-template-columns:1fr 1fr;gap:10px;margin-bottom:20px}.metric{min-height:99px}.metric-value{font-size:calc(28px*var(--fs))}.metric-foot{font-size:calc(12px*var(--fs))}.metric-spark{display:flex}.bank-layout{gap:16px}.filters{flex-wrap:wrap}.search-field{flex-basis:100%}.filters select{width:calc(50% - 4px)}.topic-tabs{gap:17px}.right-stack{grid-template-columns:1fr 1fr}.right-stack .tip-panel{grid-column:1/-1}.question-top h3{font-size:calc(15px*var(--fs))}.question-formula{font-size:calc(19px*var(--fs))}.question-meta{font-size:calc(12px*var(--fs));gap:8px}.question-controls{padding-top:3px}.question-card{gap:9px}.question-number{width:25px;height:25px;font-size:calc(14px*var(--fs))}.question-top .badge.outline{display:none}.practice-btn{padding:7px;font-size:calc(12px*var(--fs))}.question-list.grid{grid-template-columns:1fr}.app-footer{padding:12px 18px 22px;gap:10px;font-size:calc(11px*var(--fs));line-height:1.6}.practice-panel,.import-panel,.growth-panel,.settings-panel,.panel-pad{padding:20px}.practice-layout .right-stack,.import-layout .right-stack{grid-template-columns:1fr 1fr}.practice-question .question-formula{font-size:calc(22px*var(--fs))}.submit-row{align-items:flex-start;flex-wrap:wrap}.stepper{gap:13px}.step{font-size:calc(13px*var(--fs));gap:6px}.step span{width:22px;height:22px}.form-grid{gap:10px}.record{gap:10px}.record-score{font-size:calc(19px*var(--fs))}.record-main strong{font-size:calc(15px*var(--fs))}.record-main p{font-size:calc(13px*var(--fs))}.record-icon{width:28px;height:28px}.toast{left:50%;font-size:calc(14px*var(--fs))}.modal{padding:26px 22px}.modal-backdrop{padding:15px}.modal h2{font-size:calc(22px*var(--fs))}.canvas-wrap canvas{height:320px}.writing-toolbar{gap:6px;padding:8px}.tool-group{gap:5px}.tool-group .icon-btn{width:29px;height:29px}.writing-toolbar .small-text{font-size:calc(11px*var(--fs))}.question-list{padding:0 15px}.history-filters{overflow:auto;white-space:nowrap}.history-filters button{flex-shrink:0}.record-actions{flex-wrap:wrap}}
.homework-layout{display:grid;grid-template-columns:minmax(0,1fr) 285px;gap:22px;align-items:start}.homework-features{display:grid;grid-template-columns:repeat(3,1fr);gap:20px}.homework-features .panel{padding:26px}.homework-features h2{font-size:calc(18px*var(--fs));margin:18px 0 10px}.homework-features p{font-size:calc(15px*var(--fs));line-height:1.9;color:#7a8e82}.feature-icon,.assignment-icon{background:#eaf4ed;color:#438970;border-radius:10px;width:calc(46px*var(--fs));height:calc(46px*var(--fs));display:grid;place-items:center;flex-shrink:0}.homework-hero{min-height:230px}.homework-hero p{max-width:100%;font-size:calc(15px*var(--fs));line-height:1.9}.assignment-list{display:flex;flex-direction:column;gap:16px}.assignment-card{padding:23px}.assignment-card-head{display:flex;align-items:center;gap:14px}.assignment-card-head>div{flex:1;min-width:0}.assignment-card-head h2{font-size:calc(19px*var(--fs));line-height:1.6;margin:8px 0 0;overflow-wrap:anywhere}.assignment-meta{display:flex;gap:22px;align-items:center;margin:20px 0;font-size:calc(14px*var(--fs));color:#7d9183;flex-wrap:wrap}.assignment-meta span{display:flex;gap:6px;align-items:center}.assignment-meta .icon{width:14px;height:14px}.assignment-bottom{display:flex;justify-content:space-between;align-items:center;gap:14px;border-top:1px solid var(--border);padding-top:16px}.assignment-bottom button{font-size:calc(14px*var(--fs));padding:10px 13px}.class-mini{display:flex;justify-content:space-between;font-size:calc(14px*var(--fs));padding:15px 0;border-bottom:1px solid var(--border);gap:10px}.class-mini strong{font-weight:500}.class-mini span{color:#90a28e}.learning-advice{background:#f2f8f2;border:1px solid #dce9d9;border-radius:10px;padding:18px;margin:15px 0;overflow-wrap:anywhere}.advice-heading{display:flex;gap:8px;align-items:center;font-size:calc(16px*var(--fs));font-weight:600;flex-wrap:wrap;color:#48775a}.advice-heading .icon{width:17px}.advice-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;margin-top:16px}.advice-grid span{font-size:calc(13px*var(--fs));color:#88a07e}.advice-grid p{font-size:calc(15px*var(--fs));line-height:1.9;color:#5d7b59;margin:7px 0 0}.advice-links{display:flex;gap:12px;flex-wrap:wrap;padding-top:12px;border-top:1px solid #e0eadb;margin-top:15px}.advice-links button{font-size:calc(13px*var(--fs));text-align:left}.right-stack>.learning-advice{margin:0}.right-stack .advice-grid{grid-template-columns:1fr}.student-picks,.assignment-question-picks{max-height:300px;overflow:auto;border:1px solid var(--border);border-radius:8px}.pick-row{display:flex;gap:12px;align-items:center;padding:14px;border-bottom:1px solid var(--border);cursor:pointer}.pick-row:last-child{border-bottom:0}.pick-row:hover{background:#f6faf3}.pick-row input{accent-color:var(--green);width:16px;height:16px;flex-shrink:0}.pick-row>span:nth-child(2){flex:1;min-width:0;font-size:calc(15px*var(--fs));line-height:1.7}.pick-row strong{font-size:calc(15px*var(--fs));font-weight:500}.pick-row small{font-size:calc(13px*var(--fs));color:#91a18b;margin-top:4px}.assignment-question-list{min-width:0}.assignment-question-row{padding:24px;display:flex;gap:14px;align-items:flex-start;border-top:1px solid var(--border)}.assignment-question-row .practice-btn{margin-top:5px;flex-shrink:0}.assignment-submit{padding:24px;border-top:1px solid var(--border);background:#fbfcf9;border-radius:0 0 10px 10px}.results-panel{min-width:0;overflow:hidden}.table-scroll{overflow-x:auto}.results-table{width:100%;border-collapse:collapse;white-space:nowrap;font-size:calc(14px*var(--fs));text-align:left}.results-table th{background:#f5f8f3;color:#84967f;font-weight:500;padding:14px 17px;border-bottom:1px solid var(--border)}.results-table td{padding:18px 17px;border-bottom:1px solid #edf1e9;color:#547452}.results-table small{font-size:calc(12px*var(--fs));color:#98a78f;margin-top:5px}.results-table strong{font-weight:500}.student-review-row{display:flex;justify-content:space-between;align-items:center;padding:17px 0;border-bottom:1px solid var(--border);gap:12px}.student-review-row strong{font-size:calc(15px*var(--fs));font-weight:500}.student-review-row small{font-size:calc(13px*var(--fs));color:#92a486;margin-top:6px}.student-review-row button{font-size:calc(14px*var(--fs));padding:8px 12px}.sidebar{overflow-y:auto}.side-note{margin-top:20px;margin-bottom:15px}@media(max-width:960px){.homework-layout{grid-template-columns:1fr}.homework-layout .right-stack{grid-template-columns:1fr 1fr}.homework-features{gap:13px}.homework-features .panel{padding:20px}}@media(max-width:740px){.homework-features{grid-template-columns:1fr}.homework-layout .right-stack{grid-template-columns:1fr}.assignment-card{padding:19px}.assignment-card-head{gap:10px}.assignment-card-head h2{font-size:calc(18px*var(--fs))}.assignment-icon{width:34px;height:34px}.assignment-bottom{align-items:flex-start;flex-direction:column}.assignment-bottom button{width:100%}.assignment-question-row{padding:18px;gap:10px;flex-wrap:wrap}.assignment-question-row .question-body{flex-basis:calc(100% - 40px)}.assignment-question-row .practice-btn{margin-left:35px}.advice-grid{grid-template-columns:1fr}.homework-hero .secondary{margin:10px 0 0!important}.homework-hero h2{font-size:calc(21px*var(--fs));line-height:1.7}.homework-hero p{max-width:100%}.assignment-meta{gap:11px}.student-review-row{align-items:flex-start}.learning-advice{padding:16px}.results-table th,.results-table td{padding:13px}}
.annotation-tool{margin:6px 0 4px}.ann-canvas-wrap{position:relative}.ann-canvas-wrap canvas{width:100%;height:auto;max-height:62vh;display:block;touch-action:none;cursor:crosshair}.annotated-view{position:relative}.annotated-view .badge{position:absolute;top:12px;left:12px;z-index:2;background:#fff;border:1px solid var(--border);box-shadow:0 2px 8px #1e473514}.annotation-tool .tool-group button{font-size:calc(18px*var(--fs));line-height:1}
.mark-wrap{position:relative;display:block}.mark-wrap img{display:block;width:100%}.ai-mark-layer{position:absolute;inset:0;pointer-events:none}.ai-mark-layer.draggable{pointer-events:none}.ai-mark-layer.draggable .ai-mark{pointer-events:auto;cursor:grab;touch-action:none;outline:2px dashed #ffffffd0;outline-offset:2px}.ai-mark-layer.draggable .ai-mark:active{cursor:grabbing;box-shadow:0 0 0 7px #7f5bd633,0 2px 8px #3b2a6b40}
/* 教師調整 AI 批註：批語框與印章可以直接拖動；點一下批語框改文字。 */
.ai-ink-layer.editable .movable{pointer-events:auto;cursor:grab;touch-action:none;outline:2px dashed #ffffffd0;outline-offset:2px}
.ai-ink-layer.editable .movable:active{cursor:grabbing;outline-color:#d9453b}
.ai-ink-layer.editable .movable:hover{outline-color:#d9453b}.ai-mark{position:absolute;transform:translate(-50%,-50%);width:calc(30px*var(--fs));height:calc(30px*var(--fs));border-radius:50%;background:#7f5bd6;color:#fff;display:grid;place-items:center;font-size:calc(15px*var(--fs));font-weight:600;border:2px solid #fff;box-shadow:0 2px 8px #3b2a6b40}.ai-annotation{margin-top:16px;background:#f5f2fd;border:1px solid #e2dbf7;border-radius:10px;padding:18px;overflow-wrap:anywhere}.ai-annotation .advice-heading{color:#5b4a94}.ai-summary{font-size:calc(15px*var(--fs));line-height:1.9;color:#655a8c;margin:10px 0 0}.ai-issue-list{margin:14px 0 0;padding-left:22px}.ai-issue-list li{font-size:calc(15px*var(--fs));line-height:1.85;color:#5f5680;margin-bottom:9px}.ai-issue-list li strong{display:block;color:#4b3f7d;font-weight:600}.ai-tool-row{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin-top:14px}.ai-preview{margin-top:14px;border:1px solid var(--border);border-radius:8px;overflow:hidden}
.ai-config-actions{display:flex;gap:10px;flex-wrap:wrap;align-items:center;margin-top:6px}.ai-config-actions button{font-size:calc(14px*var(--fs));padding:10px 14px}.capability-list{list-style:none;padding:0;margin:16px 0 0}.capability-list li{display:flex;gap:11px;align-items:flex-start;padding:13px 0;border-bottom:1px solid var(--border)}.capability-list li:last-child{border:0}.capability-list li .icon{width:17px;height:17px;color:#b3bcb0;margin-top:2px;flex-shrink:0}.capability-list li.ready .icon{color:#4f9169}.capability-list li strong{display:block;font-size:calc(15px*var(--fs));font-weight:500;color:#7c8b80}.capability-list li.ready strong{color:#3f7a58}.capability-list li small{font-size:calc(13px*var(--fs));color:#a2ada4;margin-top:4px}
.correction-banner{background:#fdf6ec;border:1px solid #f0e0c6;border-radius:10px;padding:18px;margin:16px 0;overflow-wrap:anywhere}.correction-banner .advice-heading{color:#9a7b45}.correction-banner p{font-size:calc(15px*var(--fs));line-height:1.9;color:#7c6a4d;margin:10px 0 0}.correction-banner small{font-size:calc(13px*var(--fs));color:#a4977d;margin-top:9px}.correction-actions{display:flex;align-items:center;gap:14px;flex-wrap:wrap;border-top:1px solid var(--border);padding-top:16px;margin-top:18px}.correction-actions button{font-size:calc(14px*var(--fs));padding:10px 14px}
.bulk-tools{display:flex;gap:14px;align-items:center;flex-wrap:wrap;margin:0 0 12px}.bulk-tools label.secondary{cursor:pointer;font-size:calc(14px*var(--fs));padding:9px 13px}.bulk-tools .text-button{font-size:calc(14px*var(--fs))}.student-review-row{display:flex;justify-content:space-between;align-items:center;gap:12px;border-bottom:1px solid var(--border);padding:12px 0}.student-review-row:last-child{border:0}.student-review-row strong{font-size:calc(15px*var(--fs));font-weight:500}.student-review-row small{font-size:calc(13px*var(--fs));color:#9aa79c;margin-top:5px}.student-review-row button{font-size:calc(13px*var(--fs));padding:7px 11px;white-space:nowrap}.results-filters input{flex:1;min-width:160px;font-size:calc(14px*var(--fs))}.results-filters select{font-size:calc(14px*var(--fs));width:auto}.advice-links{display:flex;flex-direction:column;gap:4px;margin-top:14px;border-top:1px solid #dce9d9;padding-top:12px}.advice-links .text-button{font-size:calc(14px*var(--fs))}
@media(prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
/* 登入：放大身分按鈕與記住我 */
.role-select-lg button{padding:16px 12px;font-size:calc(17px*var(--fs));font-weight:600}.quiz-banner{display:flex;align-items:center;gap:14px;flex-wrap:wrap;background:#eef4fb;border:1px solid #cfe0f3;border-radius:12px;padding:14px 16px;margin-bottom:18px;color:#2f5d86}.quiz-banner.expired{background:#fdf0ec;border-color:#f2d3c8;color:#a4482f}.quiz-banner-body{flex:1;min-width:220px;display:flex;flex-direction:column;gap:4px}.quiz-banner-body strong{font-size:calc(16px*var(--fs))}.quiz-banner-body small{font-size:calc(13px*var(--fs));opacity:.88;line-height:1.6}.quiz-clock{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-weight:700;font-size:calc(18px*var(--fs))}.quiz-clock.urgent{color:#c0392b}.quiz-bar{height:6px;border-radius:99px;background:#d9e6f5;overflow:hidden;margin-top:4px}.quiz-bar span{display:block;height:100%;background:#4a7fb5;transition:width 1s linear}.quiz-clock-chip{display:inline-flex;align-items:center;gap:8px;background:#eef4fb;border:1px solid #cfe0f3;color:#2f5d86;border-radius:99px;padding:7px 14px;font-weight:600;margin-bottom:14px}.quiz-result-banner{background:#eef7f1;border:1px solid #cfe6d8;border-radius:12px;padding:16px;margin-bottom:18px}.quiz-result-score{font-size:calc(26px*var(--fs));color:var(--green);margin:6px 0 4px}.quiz-result-score strong{font-size:calc(34px*var(--fs))}.assignment-questions{display:block}.q-index{background:#f1f6f1;border:1px solid #e7eee5;width:calc(34px*var(--fs));height:calc(34px*var(--fs));display:grid;place-items:center;color:#82967b;font-family:Georgia,serif;font-size:calc(16px*var(--fs));border-radius:9px;flex-shrink:0}.q-body{flex:1;min-width:0}.question-text{font-size:calc(22px*var(--fs));font-family:Georgia,"Times New Roman","PingFang TC",serif;letter-spacing:.1px;line-height:1.7;color:#3d5145;margin:0 0 11px}.record-body{flex:1;min-width:0}.record-body strong{font-size:calc(16px*var(--fs));line-height:1.7}.record-body p{font-size:calc(14px*var(--fs));line-height:1.8;color:#91a088;margin:8px 0}.record-body small{font-size:calc(13px*var(--fs));color:#a5b09d}.quiz-score{font-size:calc(24px*var(--fs));font-weight:600;color:#2f6d55}.quiz-banner.done{background:#eef7ef;border-color:#cfe6d2;color:#2f6d55}.quiz-banner.expired{background:#fdf3ea;border-color:#f0d9c2;color:#a4632a}.result-layout{display:grid;grid-template-columns:minmax(0,1fr) 285px;gap:22px;align-items:start}@media(max-width:1180px){.result-layout{grid-template-columns:1fr}}.cal-mark.note{background:#eef1fb;border:1px solid #d5dcf5;color:#43518f}.cal-note{display:flex;gap:12px;align-items:flex-start;border-top:1px solid var(--border);padding:16px 0}.cal-note>div{flex:1;min-width:0}.cal-note strong{font-size:calc(16px*var(--fs));line-height:1.7}.cal-note p{margin:6px 0 0}.cal-event-tag.note{background:#eef1fb;color:#43518f;border:1px solid #d5dcf5}.section-head-actions{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.draft-analysis{margin-top:12px;padding:12px 14px;border:1px solid #dbe7de;background:#f4f9f5;border-radius:10px}.draft-analysis strong{display:flex;align-items:center;gap:7px;font-size:calc(14px*var(--fs));color:#2f6d55}.draft-analysis p{margin:7px 0 0;font-size:calc(14px*var(--fs));color:#4f6a5c;line-height:1.7}.row-actions{display:flex;gap:10px;flex-wrap:wrap;justify-content:flex-end}
.role-cards{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin:22px 0}.role-card{display:flex;flex-direction:column;align-items:flex-start;gap:7px;padding:17px;border:2px solid var(--border);background:#fff;border-radius:12px;text-align:left;cursor:pointer;transition:border-color .15s,background .15s}.role-card:hover{background:#f6faf7}.role-card.active{border-color:var(--green);background:#f1f8f3}.role-card-icon{display:grid;place-items:center;width:calc(40px*var(--fs));height:calc(40px*var(--fs));border-radius:11px;background:#eaf4ed;color:var(--green)}.role-card strong{font-size:calc(18px*var(--fs))}.role-card small{font-size:calc(13px*var(--fs));color:#7d8f84;line-height:1.55}.login-remember{align-items:flex-start;gap:10px;margin-top:4px}.login-remember span{display:flex;flex-direction:column;gap:3px}.login-remember small{font-size:calc(13px*var(--fs));color:#8c9c93;line-height:1.5}.login-remembered{margin:7px 0 0}#login-form input{font-size:calc(17px*var(--fs));padding:13px 14px}.login-submit{padding:15px;font-size:calc(17px*var(--fs));margin-top:6px}.login-brand{margin-bottom:14px}@media(max-width:560px){.role-cards{grid-template-columns:1fr}}
.login-submit{padding:16px 18px;font-size:calc(17px*var(--fs))}
.remember-line{margin:6px 0 14px;font-size:calc(14px*var(--fs));line-height:1.6}
#avatar{border:1px solid var(--border);padding:0;flex-shrink:0}
.pick-pagination{display:flex;align-items:center;justify-content:center;gap:12px;padding:14px 0}
.upload-actions{flex-wrap:wrap}
.small-text,.field-hint,.panel-sub,.subtitle,.modal-intro,.metric-label,.metric-foot,.metric-value small,.font-scale,.font-scale-note,.font-scale button,.brand small,.workspace small,.nav-label,.account-info small,.breadcrumbs,.local-badge,.app-footer,.question-meta,.pagination,.hero p,.hero-eyebrow,.tip-panel p,.tip-panel h2,.knowledge-row,.knowledge-row span:last-child,.roadmap-item,.roadmap-circle,.recommendation-mini .title-row,.dropzone small,.divider-text,.record-main p,.record-main small,.record-body p,.record-body small,.record-score small,.growth-panel p,.chart-column .bar-label,.chart-column .bar-value,.role-card small,.login-remember small,.cal-weekdays span,.cal-event small,.correction-banner small,.student-review-row small,.capability-list li small,.rubric-view-percent,.upload-answer small{color:var(--muted)}
.import-warning,.demo-accounts{color:#6a593c}
input::placeholder,textarea::placeholder,.search-field input::placeholder,.canvas-placeholder{color:#52675e;opacity:1}
/* 日曆 */
.cal-head{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:16px}
.cal-title{font-size:calc(19px*var(--fs));margin-right:auto}
.cal-weekdays{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:6px;margin-bottom:6px}
.cal-weekdays span{text-align:center;font-size:calc(13px*var(--fs));color:#8c9c93;padding:4px 0}
.cal-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:6px}
.cal-cell{min-height:calc(76px*var(--fs));min-width:0;overflow:hidden;border:1px solid var(--border);background:#fff;border-radius:10px;padding:6px;display:flex;flex-direction:column;align-items:flex-start;gap:4px;cursor:pointer;text-align:left}
.cal-cell.empty{border:0;background:transparent;cursor:default}
.cal-cell:hover:not(.empty){background:#f2f7f4}
.cal-cell.today{border-color:#8fbfa8;background:#f3faf5}
.cal-cell.selected{border-color:var(--green);box-shadow:0 0 0 2px #197c6833}
.cal-day{font-size:calc(14px*var(--fs));font-weight:600;color:#3d5a4d}
.cal-marks{display:flex;flex-direction:column;gap:3px;width:100%;min-width:0;align-items:flex-start}
.cal-mark{font-size:calc(11px*var(--fs));border-radius:6px;padding:2px 7px;max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.5}
.cal-mark.hw{background:#e6f2ea;color:#2f6d55}
.cal-mark.due{background:#fdeaea;color:#a33b3b}
.cal-mark.quiz{background:#fdeee0;color:#a4632a}
.cal-event{display:flex;align-items:center;gap:12px;padding:12px;border:1px solid var(--border);border-radius:10px;margin-bottom:10px;background:#fff}
.cal-event.quiz{border-left:4px solid #d99447}
.cal-event.hw{border-left:4px solid #4f9a78}
.cal-event div{flex:1;min-width:0}
.cal-event small{display:block;color:#8c9c93;font-size:calc(12px*var(--fs));margin-top:3px}
.cal-event-tag{font-size:calc(12px*var(--fs));border-radius:6px;padding:3px 8px;background:#eef3ef;color:#3d5a4d;white-space:nowrap}
/* 題目圖形 */
.question-figure{margin:12px 0}
.question-figure img{max-width:100%;border:1px solid var(--border);border-radius:10px;background:#fff}
.draft-figure{margin:10px 0;display:flex;flex-direction:column;gap:6px;align-items:flex-start}
.draft-figure img{max-width:100%;max-height:240px;border:1px solid var(--border);border-radius:10px;background:#fff}
.manual-entry{border:1px solid var(--border);border-radius:12px;padding:16px;margin-top:6px;background:#fbfdfc}
.figure-canvas-wrap{background:#fff}
.figure-canvas-wrap canvas{width:100%;height:auto;display:block;touch-action:none;cursor:crosshair}
@media(max-width:740px){.cal-cell{min-height:calc(60px*var(--fs));padding:4px}.cal-mark{font-size:calc(10px*var(--fs));padding:2px 4px}.cal-head{gap:8px}}

.topic-tabs.subtopic-tabs{border-bottom:0;padding:10px 22px 2px;gap:8px}
.subtopic-tab{flex-shrink:0;border:1px solid var(--border);background:#fbfdfa;color:#7c8f80;border-radius:999px;padding:5px 12px;font-size:calc(13px*var(--fs));white-space:nowrap}
.subtopic-tab:hover{background:#f2f8f2}
.subtopic-tab.active{background:var(--mint);border-color:#cce2d6;color:var(--green);font-weight:600}

/* ── 數學式子排版（KaTeX）── */
.katex{font-size:1.05em}
.katex-display{margin:10px 0;padding:2px 0;overflow-x:auto;overflow-y:hidden}
.katex-display>.katex{text-align:left}
.math-fallback{font-family:ui-monospace,Menlo,Consolas,monospace;font-size:.92em;background:#f1f6f1;border:1px solid #e0eae1;border-radius:4px;padding:1px 5px;word-break:break-all}
.answer-field .katex,.import-text .katex{font-size:1.05em}

/* ── 選擇題選項 ── */
.choice-options{list-style:none;margin:12px 0 0;padding:0;display:grid;gap:8px}
.choice-options li{display:flex;gap:10px;align-items:flex-start;padding:9px 12px;border:1px solid var(--border);border-radius:8px;background:#fbfdfa;font-size:calc(15px*var(--fs));line-height:1.8}
.option-letter{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;width:calc(24px*var(--fs));height:calc(24px*var(--fs));border-radius:50%;background:#eaf3ec;color:#2f6b53;font-weight:600;font-size:calc(13px*var(--fs))}
.option-text{flex:1 1 auto;min-width:0;word-break:break-word}
.choice-picker{display:grid;gap:10px;margin:6px 0 0}
.choice-option{display:flex;gap:12px;align-items:flex-start;text-align:left;width:100%;padding:12px 14px;border:1px solid var(--border);border-radius:9px;background:#fff;font-size:calc(15px*var(--fs));line-height:1.8;cursor:pointer}
.choice-option:hover{background:#f5f9f2;border-color:#cce2d6}
.choice-option.selected{background:var(--mint);border-color:#9dc9b2;box-shadow:0 0 0 1px #9dc9b2 inset}
.choice-option.selected .option-letter{background:var(--green);color:#fff}
.math-preview{margin-top:10px;padding:11px 13px;border:1px dashed #cfe0d4;border-radius:8px;background:#f7fbf6;font-size:calc(15px*var(--fs));line-height:1.9;min-height:20px;word-break:break-word}
.math-preview:empty{display:none}
.preview-option{display:flex;gap:9px;align-items:flex-start;margin:3px 0}
.option-list{display:grid;gap:8px}
.option-row{display:flex;gap:9px;align-items:center}
.option-row input{flex:1 1 auto;min-width:0;border:1px solid var(--border);border-radius:7px;padding:9px 11px;font-size:calc(14px*var(--fs));background:#fff}
.option-actions{display:flex;gap:12px;align-items:center;margin-top:8px;flex-wrap:wrap}

/* ── 評分標準（百分比）── */
.rubric-list{display:grid;gap:8px}
.rubric-row{display:flex;gap:9px;align-items:center}
.rubric-row .rubric-label{flex:1 1 auto;min-width:0;border:1px solid var(--border);border-radius:7px;
  padding:9px 11px;font-size:calc(14px*var(--fs));background:#fff}
.rubric-percent{flex:0 0 auto;display:inline-flex;align-items:center;gap:3px;border:1px solid var(--border);
  border-radius:7px;padding:0 8px;background:#fff;font-size:calc(13px*var(--fs));color:#7c8f80}
.rubric-percent input{width:calc(58px*var(--fs));border:0;padding:9px 0;font-size:calc(14px*var(--fs));
  text-align:right;background:transparent;color:inherit}
.rubric-actions{display:flex;gap:14px;align-items:center;margin-top:9px;flex-wrap:wrap}
.rubric-total{font-size:calc(13px*var(--fs));color:#2f6b53;font-weight:600}
.rubric-total.bad{color:#b4453b}
.ai-answer-row{display:flex;gap:12px;align-items:center;flex-wrap:wrap;margin:4px 0 2px}
.rubric-view{list-style:none;margin:8px 0 0;padding:0;display:grid;gap:5px}
.rubric-view li{display:flex;gap:10px;justify-content:space-between;align-items:flex-start;
  font-size:calc(13.5px*var(--fs));line-height:1.7;padding:5px 9px;background:#f7fbf6;
  border:1px solid #e2ede4;border-radius:6px}
.rubric-view-label{flex:1 1 auto;min-width:0;word-break:break-word}
.rubric-view-percent{flex:0 0 auto;color:#2f6b53;font-weight:600;white-space:nowrap}
.solution-box{margin:12px 0 0;border:1px solid var(--border);border-radius:9px;background:#fbfdfa;padding:0 14px}
.solution-box[open]{padding-bottom:12px}
.solution-box>summary{cursor:pointer;padding:11px 0;font-weight:600;color:#2f6b53;
  font-size:calc(14px*var(--fs));list-style:none}
.solution-box>summary::-webkit-details-marker{display:none}
.solution-box>summary::before{content:'▸ ';color:#7c8f80}
.solution-box[open]>summary::before{content:'▾ '}
.solution-answer{margin:6px 0;font-size:calc(15px*var(--fs));line-height:1.9}
.solution-steps{margin:8px 0 8px;padding-left:22px;font-size:calc(14.5px*var(--fs));line-height:1.95}
.solution-steps li{margin:3px 0}
.solution-analysis{margin:8px 0 4px;font-size:calc(14px*var(--fs));line-height:1.9;color:#4b5b4f}

/* ── 數學鍵盤（MathType 式輸入）── */
.math-keyboard{margin-bottom:12px;border:1px solid var(--border);border-radius:10px;background:#fbfdfa;padding:10px 12px}
.math-keyboard[hidden]{display:none}
.mk-head{display:flex;align-items:center;gap:8px;color:#2f6b53;font-size:calc(13px*var(--fs));margin-bottom:8px;flex-wrap:wrap}
.mk-head svg{width:calc(15px*var(--fs));height:calc(15px*var(--fs))}
.mk-title{font-weight:600}
.mk-tabs{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:9px}
.mk-tab{border:1px solid var(--border);background:#fff;color:#5c6f62;border-radius:999px;
  padding:4px 11px;font-size:calc(12.5px*var(--fs));cursor:pointer;white-space:nowrap}
.mk-tab:hover{background:#f2f8f2}
.mk-tab.active{background:var(--mint);border-color:#cce2d6;color:var(--green);font-weight:600}
.mk-panel{display:grid;grid-template-columns:repeat(auto-fill,minmax(calc(62px*var(--fs)),1fr));gap:6px}
.mk-panel[hidden]{display:none}
.mk-key{min-height:calc(38px*var(--fs));border:1px solid var(--border);background:#fff;color:#2f4a3b;
  border-radius:8px;padding:5px 6px;font-size:calc(14px*var(--fs));cursor:pointer;line-height:1.25;
  display:flex;align-items:center;justify-content:center;text-align:center}
.mk-key:hover{background:#f2f8f2;border-color:#cce2d6}
.mk-key:active{background:var(--mint);transform:translateY(1px)}
#final-answer{padding:12px;min-height:auto;font-size:calc(16px*var(--fs))}
#final-answer-preview{margin-top:8px}
#final-answer-preview[hidden]{display:none}

/* ── 自主練習：練習範圍選擇 ── */
.practice-setup{padding:24px 26px}
.practice-setup .form-grid{grid-template-columns:repeat(auto-fit,minmax(calc(200px*var(--fs)),1fr))}
.practice-setup-actions{display:flex;gap:10px;flex-wrap:wrap;margin:16px 0 4px}
.practice-range-list{margin-top:18px;border-top:1px solid var(--border);padding-top:14px}
.practice-range-row{width:100%;display:flex;align-items:center;gap:10px;flex-wrap:wrap;text-align:left;
  padding:10px 12px;margin-bottom:6px;border:1px solid var(--border);border-radius:8px;background:#fbfdfa;
  color:inherit;cursor:pointer;font-size:calc(14px*var(--fs))}
.practice-range-row:hover{background:#f2f8f2;border-color:#cce2d6}
.practice-range-title{font-weight:600}
.practice-range-row small{color:#8c9c93;font-size:calc(12px*var(--fs))}
@media (max-width:640px){
  .practice-setup,.panel-pad{padding:18px 16px}
  .practice-setup-actions .primary,.practice-setup-actions .secondary{flex:1 1 100%}
}

/* ── 學生名單：班內號標籤與批次匯入預覽表 ── */
.seat-badge{display:inline-block;min-width:calc(24px*var(--fs));text-align:center;border-radius:5px;
  background:#eef3ef;color:#3d5a4d;font-size:calc(12px*var(--fs));padding:1px 6px;margin-right:7px;vertical-align:middle}
.bulk-table th,.bulk-table td{padding:9px 12px}

/* ── 設定：資料管理與學年重置 ── */
.admin-actions{display:flex;flex-wrap:wrap;gap:10px;margin:16px 0 6px}
.admin-actions .secondary,.admin-actions .text-button{font-size:calc(14px*var(--fs))}
.admin-actions .secondary{padding:10px 14px}
.danger-zone{margin-top:24px;border:1px solid #eccfc7;background:#fff7f4;border-radius:10px;padding:20px 22px}
.danger-zone h3{margin:0 0 10px;font-size:calc(16px*var(--fs));color:#a4513c;display:flex;gap:8px;align-items:center}
.danger-zone p{font-size:calc(14px*var(--fs));line-height:1.9;color:#7d6a62;margin:0 0 8px}
.danger-zone .form-field{margin:14px 0 6px}
button.danger{border:1px solid #c76a52;background:#c76a52;color:#fff;display:inline-flex;gap:8px;
  align-items:center;justify-content:center;padding:11px 18px;border-radius:8px;font-size:calc(14px*var(--fs))}
button.danger:hover{background:#a4513c}
button.danger:disabled{opacity:.6}
@media (max-width:640px){
  .admin-actions .secondary{flex:1 1 100%}
  .danger-zone{padding:16px}
}

/* ── 學生名單列（含編輯按鈕） ── */
.roster-row{display:flex;align-items:center;gap:10px;padding:8px 2px;border-bottom:1px solid var(--border)}
.roster-row .roster-who{flex:1;min-width:0;display:flex;align-items:center;gap:7px;flex-wrap:wrap;
  font-size:calc(15px*var(--fs));line-height:1.6}
.roster-row .text-button{flex:0 0 auto;font-size:calc(13px*var(--fs))}

/* ── 設定：從歸檔還原 ── */
.restore-zone{margin-top:24px;border:1px solid var(--border);border-radius:10px;padding:20px 22px;background:#fbfdfa}
.restore-zone h3{margin:0 0 10px;font-size:calc(16px*var(--fs));display:flex;gap:8px;align-items:center;color:var(--ink)}
.restore-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(calc(260px*var(--fs)),1fr));gap:16px;margin-top:14px}
.restore-card{border:1px solid var(--border);border-radius:9px;background:#fff;padding:16px 17px;
  display:flex;flex-direction:column;gap:9px}
.restore-card>strong{font-size:calc(15px*var(--fs));font-weight:600}
.restore-card .field-hint{margin:0}
.restore-card .form-field{margin:0}
.restore-card input[type=file]{font-size:calc(13px*var(--fs));color:#7c8d80}
.restore-card .secondary,.restore-card .danger{font-size:calc(14px*var(--fs));padding:10px 14px}
.restore-result:empty{display:none}
.restore-result{margin-top:4px}
.restore-result .code-block{max-height:260px;overflow:auto;font-size:calc(13px*var(--fs))}
@media (max-width:640px){
  .restore-zone{padding:16px}
  .restore-grid{grid-template-columns:1fr}
}

/* AI 生成題目草稿預覽（教師核驗後才加入題庫） */
.ai-gen-entry{color:#7a9a86;font-weight:600}
.draft-section{margin-top:12px;border-top:1px dashed #e0e8e1;padding-top:10px}
.draft-section>span{display:block;font-size:calc(12px*var(--fs));color:#8aa091;letter-spacing:.04em;margin-bottom:5px}
.draft-section p{margin:0;line-height:1.85;color:#3d5145;word-break:break-word}
.draft-section ol,.draft-section ul{margin:0;padding-left:20px;line-height:1.85;color:#3d5145}
.draft-section li{margin:3px 0;word-break:break-word}

/* 評分標準的排版預覽：輸入框只能顯示原始 LaTeX，這裡顯示排版後的式子 */
.rubric-preview{margin-top:10px}
.rubric-preview:empty{display:none}
.rubric-preview-label{display:block;font-size:calc(12px*var(--fs));color:#8aa091;letter-spacing:.04em;margin-bottom:5px}
.rubric-preview .rubric-view{margin:0;padding:11px 13px;border:1px dashed #cfe0d4;border-radius:8px;background:#f7fbf6}

/* AI 草稿彈窗：可展開對照參考題，方便教師判斷「夠不夠類似」 */
.ref-compare{margin:0 0 14px;border:1px solid var(--border);border-radius:8px;background:#fcfdfb;padding:11px 13px}
.ref-compare>summary{cursor:pointer;font-size:calc(13px*var(--fs));color:#5d7d6b;font-weight:600}
.ref-compare .question-formula{font-size:calc(17px*var(--fs));margin:10px 0 6px}

/* 客觀題（選擇題／填空題）不需要評分標準的說明 */
.objective-note{font-size:calc(13px*var(--fs));color:#99a99c;line-height:1.8}

/* 作答上傳：相片／PDF，以及手機拍照 */
.upload-actions{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-top:12px}
.upload-actions .secondary{font-size:calc(14px*var(--fs));padding:10px 14px}
.upload-file{display:flex;flex-direction:column;align-items:center;gap:8px;text-align:center;color:#5d7d6b}
.upload-file strong{font-size:calc(16px*var(--fs))}
.upload-file small{color:#99a99c;font-size:calc(12px*var(--fs));line-height:1.7}

/* 佈置作業挑題：先用章節或關鍵字縮小範圍，再勾選題目 */
.pick-filters{display:grid;grid-template-columns:1fr 1fr 1.2fr;gap:12px;margin-bottom:12px}
.pick-filters .form-field{margin:0}
.pick-empty{padding:22px 14px;text-align:center;color:#9dae9f;font-size:calc(14px*var(--fs));margin:0}
.picked-chips{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-top:11px}
.picked-chips:empty{display:none}
.pick-chip{border:1px solid #cfe2d6;background:var(--mint);color:var(--green);border-radius:15px;padding:5px 11px;font-size:calc(13px*var(--fs));display:inline-flex;gap:6px;align-items:center;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pick-chip b{font-weight:600;color:#7fa08f;flex-shrink:0}
.pick-chip:hover{background:#e0efe6}
.small-text.bad{color:#bb7869;font-weight:600}
/* 作業逐題導覽：提交後直接前往下一題 */
.assignment-nav{margin-top:18px;padding-top:15px;border-top:1px dashed var(--border)}
.assignment-nav .field-hint{margin:0 0 10px}
@media(max-width:740px){.pick-filters{grid-template-columns:1fr}}
/* 結果卡與作業導覽的按鈕在窄螢幕要能換行，避免橫向溢出 */
.result-actions{flex-wrap:wrap}

.objective-note,.practice-range-row small,.draft-section>span,.rubric-preview-label,.upload-file small,.pick-empty,.pick-chip b,.ai-gen-entry,.topic-tab,.subtopic-tab,.filters select,.practice-tabs button,.history-filters button,.class-mini span,.record-score,.nav-item .count,.nav-item.active .count,.step,.settings-status p,.settings-panel li,.info-note,.feature-list li,.empty p,.field-label,.checkbox-line,.eyebrow,.side-note p,.badge,.badge.outline{color:var(--muted)}
.badge.l2{color:#785b27}.badge.l3{color:#69527e}
.small-text.bad,.error-text,.inline-error{color:#963f32}
/* AI 判定印章與批語：只落在手稿的空白處，不遮住學生的字 */
.ai-ink-layer{position:absolute;inset:0;pointer-events:none;overflow:hidden}
.ai-leaders{position:absolute;inset:0;width:100%;height:100%;overflow:visible}
.ai-leaders line{stroke:#d9453b;stroke-width:1.4;stroke-dasharray:3 3;vector-effect:non-scaling-stroke;opacity:.7}
.ai-callout{position:absolute;transform:translate(-50%,-50%);display:flex;gap:6px;align-items:flex-start;background:#fffdfb;border:1px solid #e8ccc7;border-left:3px solid #d9453b;border-radius:6px;padding:5px 8px;font-size:calc(12px*var(--fs));line-height:1.5;color:#7a4a43;box-shadow:0 2px 8px #2b1b1a14;max-height:calc(12px*1.5*4 + 12px);overflow:hidden}
.ai-callout b{flex:0 0 auto;width:calc(15px*var(--fs));height:calc(15px*var(--fs));background:#d9453b;color:#fff;border-radius:50%;display:grid;place-items:center;font-size:calc(10px*var(--fs));margin-top:1px}
.ai-callout strong{display:block;color:#b8453b;font-weight:600}
.ai-callout span{display:block;min-width:0}
.ai-callout.summary{border-left-color:#6d9a80;background:#f8fcf7;color:#4f6b58}
.ai-callout.summary strong{color:#4a7c60}
.verdict-stamp{position:absolute;transform:translate(-50%,-50%);display:flex;flex-direction:column;align-items:center;gap:1px;opacity:.92}
.verdict-stamp svg{width:100%;height:auto;display:block}
.verdict-stamp span{font-size:calc(12px*var(--fs));font-weight:700;color:#c0392b;letter-spacing:.06em;white-space:nowrap}
.verdict-stamp path{fill:none;stroke:#c0392b;stroke-width:7;stroke-linecap:round;stroke-linejoin:round}
.verdict-glyph{width:calc(14px*var(--fs));height:calc(14px*var(--fs));vertical-align:-2px}
.verdict-glyph path{fill:none;stroke:#c0392b;stroke-width:8;stroke-linecap:round;stroke-linejoin:round}
.badge.verdict{display:inline-flex;align-items:center;gap:4px;background:#fdeeec;color:#b8453b;border-color:#f2d6d2}
.badge.verdict.correct{background:#eaf6ee;color:#2f7d55;border-color:#cde7d8}
.badge.verdict.correct .verdict-glyph path{stroke:#2f7d55}
.badge.verdict.partial{background:#fdf4e7;color:#9a7128;border-color:#f0e0c4}
.badge.verdict.partial .verdict-glyph path{stroke:#9a7128}

/* 題目圖形：可上傳圖片或直接貼上截圖，不必手繪 */
.fig-source-row{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:10px}
.fig-upload{display:inline-flex;align-items:center;gap:7px;cursor:pointer;font-size:calc(14px*var(--fs))}
.fig-image-preview{margin-bottom:12px}
.fig-image-preview:empty{display:none}
.fig-image-preview img{max-width:100%;border:1px solid var(--border);border-radius:8px;background:#fff;display:block}
.fig-image-preview .text-button{margin-top:8px;font-size:calc(13px*var(--fs))}
.review-figure{margin:0 0 14px}

/* 題面與圖形並排：題目文字在左、該題圖形在右（沒有圖形的題目不會產生這個區塊） */
.question-stem{display:flex;gap:22px;align-items:flex-start}
.question-stem-text{flex:1 1 auto;min-width:0}
.question-stem>.question-figure,.question-stem>.draft-figure{flex:0 1 auto;min-width:0;max-width:min(44%,460px);margin:0}
.question-stem>.question-figure img,.question-stem>.draft-figure img{max-width:100%;max-height:min(58vh,520px);height:auto;display:block;border:1px solid var(--border);border-radius:10px;background:#fff}
.question-stem .question-formula:last-child,.question-stem .question-text:last-child{margin-bottom:0}
.question-stem .question-meta{margin-top:11px}
.question-figure img{cursor:zoom-in}
/* 點擊題目圖形放大檢視 */
.figure-zoom{position:fixed;inset:0;z-index:90;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;padding:24px;background:#0f1a14a6;cursor:zoom-out}
.figure-zoom img{max-width:min(94vw,1200px);max-height:84vh;border-radius:10px;background:#fff;box-shadow:0 18px 50px #00000059}
.figure-zoom-hint{color:#f1f6ef;font-size:calc(13px*var(--fs));opacity:.85}
@media(max-width:780px){
  .question-stem{flex-direction:column;gap:14px}
  .question-stem>.question-figure,.question-stem>.draft-figure{max-width:100%}
  .question-stem>.question-figure img,.question-stem>.draft-figure img{max-height:none}
}

/* 題目圖形工作室：預覽、題圖核對結果與各種插入方式 */
.fig-question{font-size:calc(15px*var(--fs));line-height:1.85;color:#3d5145;background:#f7faf6;border:1px solid var(--border);border-radius:8px;padding:11px 13px;margin-bottom:12px}
.fig-preview{display:grid;place-items:center;min-height:170px;border:1px dashed var(--border);border-radius:10px;background:#fcfdfb;padding:12px;margin-bottom:12px}
.fig-preview img{max-width:100%;max-height:46vh;border-radius:8px;background:#fff;display:block}
.fig-empty{color:#9dae9f;font-size:calc(14px*var(--fs))}
.fig-actions{display:flex;flex-wrap:wrap;gap:10px;margin-bottom:12px}
.fig-actions .secondary{font-size:calc(14px*var(--fs));padding:9px 13px}
.fig-check{display:flex;gap:10px;align-items:flex-start;border-radius:8px;padding:11px 13px;margin-bottom:12px;font-size:calc(14px*var(--fs));line-height:1.75}
.fig-check strong{display:block;margin-bottom:2px}
.fig-check small{display:block;margin-top:5px;opacity:.85}
.fig-check ul{margin:4px 0 0;padding-left:18px}
.fig-check li{margin:2px 0}
.fig-check svg{flex:0 0 auto;margin-top:2px}
.fig-check.ok{background:#eef7f1;border:1px solid #cfe6d8;color:#2f6d55}
.fig-check.bad{background:#fdf1ee;border:1px solid #f2d3c8;color:#a4482f}
.fig-read{border:1px solid var(--border);border-radius:8px;padding:9px 12px;margin-bottom:12px;background:#fcfdfb}
.fig-read>summary{cursor:pointer;font-size:calc(13.5px*var(--fs));color:#5d7365;font-weight:500}
.fig-read-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;margin:10px 0 8px}
.fig-read-grid>div{min-width:0;font-size:calc(13px*var(--fs));color:#42584a}
.fig-read-grid>div>strong{display:block;margin-bottom:5px;color:#2f6d55}
.fig-read-shape{font-weight:500;color:#3d5145;margin-bottom:4px}
.fig-read ul{margin:0;padding-left:17px}
.fig-read li{margin:2px 0;word-break:break-word}
.fig-spec{margin:8px 0 0;padding:9px 11px;background:#f6f8f5;border-radius:6px;font-size:calc(12px*var(--fs));line-height:1.6;color:#4a5c50;max-height:240px;overflow:auto;white-space:pre-wrap;word-break:break-word}
.fig-draw-panel{margin-bottom:12px;padding:12px;border:1px solid var(--border);border-radius:10px;background:#fcfdfb}
.fig-draw-panel[hidden]{display:none}
.fig-draw-panel .canvas-wrap{margin-top:10px}
.fig-draw-panel .writing-toolbar{margin-bottom:0}
.label-name-field{display:inline-flex;align-items:center;gap:6px;font-size:calc(12.5px*var(--fs));color:#5d7365;white-space:nowrap}
.label-name-field[hidden]{display:none}
.label-name-field input{width:64px;padding:5px 8px;border:1px solid var(--border);border-radius:6px;background:#fff;color:#1d3b32;font-size:calc(13px*var(--fs));font-family:inherit}
.label-name-field input[type=range]{width:96px;padding:0;border:0;background:none;accent-color:#237c5c}
.label-size-value{min-width:24px;text-align:center;font-variant-numeric:tabular-nums;color:#3d5145;font-weight:500}
/* 縮放／旋轉欄位：跟「點名稱／字級」同一種外觀；沒選取圖形時停用（欄位仍在，
   工具列高度不變，畫布才不會跟著跳位）。 */
.item-transform-field{display:inline-flex;align-items:center;gap:6px;font-size:calc(12.5px*var(--fs));color:#5d7365;white-space:nowrap}
.item-transform-field input[type=range]{width:96px;padding:0;border:0;background:none;accent-color:#237c5c}
.item-transform-field input[type=range]:disabled{opacity:.4;cursor:not-allowed}
.figure-canvas-wrap canvas:focus-visible,.canvas-wrap canvas:focus-visible{outline:2px solid #237c5c;outline-offset:2px}
@media (max-width:640px){.fig-read-grid{grid-template-columns:minmax(0,1fr)}}

/* ══ 題與題之間的區分 ══════════════════════════════════════════════════
   同一個清單裡連續好幾題時，每一題有自己的色系：左側色條 ＋ 編號底色 ＋
   該題色系的淡底，讓「一題在哪裡結束、下一題從哪裡開始」一眼看得出來。
   四色循環（深綠／藍／赭／紫，飽和度都壓低，跟整體綠色系一致）。
   ⚠️ 用 :nth-of-type(article) 而不是 :nth-child：清單容器裡還有 .panel-heading
   與 .assignment-submit 之類的兄弟節點，用 nth-child 會讓第一題從第二色開始。
   ⚠️ 編號徽章有兩個 class：學生作業頁用 .question-number、模擬測驗列用 .q-index，
   拆題草稿卡另有 .draft-index；三個都要跟著色系，否則同一頁會出現兩種外觀。 */
.question-list>article.question-card:nth-of-type(4n+1),
.assignment-questions>article.assignment-question-row:nth-of-type(4n+1),
.assignment-question-list>article.assignment-question-row:nth-of-type(4n+1),
.pick-row:nth-of-type(4n+1),
.records-panel>article.record:nth-of-type(4n+1),
#draft-list>article.draft-card:nth-of-type(4n+1){--q-accent:#2f6d55;--q-soft:#dff0e6;--q-tint:#eff8f2}
.question-list>article.question-card:nth-of-type(4n+2),
.assignment-questions>article.assignment-question-row:nth-of-type(4n+2),
.assignment-question-list>article.assignment-question-row:nth-of-type(4n+2),
.pick-row:nth-of-type(4n+2),
.records-panel>article.record:nth-of-type(4n+2),
#draft-list>article.draft-card:nth-of-type(4n+2){--q-accent:#2c6a8e;--q-soft:#dcebf7;--q-tint:#edf4fb}
.question-list>article.question-card:nth-of-type(4n+3),
.assignment-questions>article.assignment-question-row:nth-of-type(4n+3),
.assignment-question-list>article.assignment-question-row:nth-of-type(4n+3),
.pick-row:nth-of-type(4n+3),
.records-panel>article.record:nth-of-type(4n+3),
#draft-list>article.draft-card:nth-of-type(4n+3){--q-accent:#9a6a1f;--q-soft:#f8e8cc;--q-tint:#fbf3e4}
.question-list>article.question-card:nth-of-type(4n),
.assignment-questions>article.assignment-question-row:nth-of-type(4n),
.assignment-question-list>article.assignment-question-row:nth-of-type(4n),
.pick-row:nth-of-type(4n),
.records-panel>article.record:nth-of-type(4n),
#draft-list>article.draft-card:nth-of-type(4n){--q-accent:#7a4f8f;--q-soft:#eadff2;--q-tint:#f5eefb}

/* 編號徽章：底色與文字都跟著該題色系（題庫的 .question-number、作業／模擬測驗列的
   .q-index、拆題草稿卡的 .draft-index 一起處理，各清單看起來才一致） */
.question-number,.q-index,.draft-index{background:var(--q-soft,#f1f6f1);border-color:var(--q-accent,#e7eee5);color:var(--q-accent,#82967b)}
.draft-index{border:1px solid var(--q-accent,#e7eee5);border-radius:7px;width:calc(32px*var(--fs));height:calc(32px*var(--fs));display:grid;place-items:center;font-family:Georgia,serif;font-size:calc(15px*var(--fs));flex-shrink:0}

/* 題庫卡片：左側色條（絕對定位，不佔版面） */
.question-card::before{content:"";position:absolute;left:0;top:18px;bottom:18px;width:4px;border-radius:4px;
  background:var(--q-accent,#2f6d55);opacity:.6}
.question-list:not(.grid)>article.question-card{padding-left:15px}
.question-list.grid>article.question-card::before{top:14px;bottom:14px}

/* 作業／模擬測驗題目列：左側色條 ＋ 該題色系的淡底，一題自成一段 */
.assignment-question-row{border-left:4px solid var(--q-accent,#2f6d55);background:var(--q-tint,#fff)}

/* 挑題清單：色條 ＋ 淡底（滑過仍會加深，勾選狀態不受影響） */
.pick-row{border-left:4px solid var(--q-accent,#2f6d55);background:var(--q-tint,#fff)}

/* 錯題本／作答紀錄：色條 ＋ 圖示跟著色系 */
.record{border-left:4px solid var(--q-accent,#2f6d55);padding-left:16px}
.record .record-icon{background:var(--q-soft,#eff5e9);color:var(--q-accent,#97af83)}

/* 拆題草稿卡：左側色條 ＋ 該題色系的淡底 ＋ 彩色題號徽章 ＋ 標題跟著色系，
   連續多張草稿一眼分得開（教師拆完題最需要看清的就是這裡）。 */
#draft-list>article.draft-card{border-left:4px solid var(--q-accent,#2f6d55);background:var(--q-tint,#fcfdfb)}
#draft-list>article.draft-card .draft-top{gap:10px}
#draft-list>article.draft-card .draft-top strong{flex:1;min-width:0;color:var(--q-accent,#7b9272)}

/* 題目列的次要動作（「本題不會」）：不搶「開始解題」的注意力，但要看得清楚 */
.q-actions{display:flex;flex-direction:column;gap:6px;align-items:flex-end;flex-shrink:0}
.skip-btn{color:#9a8b6f;font-size:calc(13px*var(--fs));white-space:nowrap}
.skip-btn:hover{color:#7a6a4a;text-decoration:underline}

@media (max-width:740px){
  .question-list:not(.grid)>article.question-card{padding-left:12px}
  .question-card::before{top:14px;bottom:14px}
  .record{padding-left:12px}
  .assignment-question-row .q-actions{align-items:flex-start;margin-left:35px;width:calc(100% - 35px)}
}

/* ══ 「建議覆核」：AI 建議分與規則核對不一致時的提示 ══════════════════
   這是請教師優先看一題的訊號，不是自動改分。用暖色讓它一眼可見，
   但不搶過分數與作答內容的注意力；教師覆核後旗標會清除。 */
.badge.review-flag{background:#fdf1dc;color:#a3762b;border:1px solid #f0dcb6;font-weight:500}
.review-flag-box{display:flex;gap:9px;align-items:flex-start;background:#fdf8ec;border-color:#efe2c8;color:#8a6f3a}
.review-flag-box strong{display:block;margin-bottom:2px}
.review-flag-list{margin:0;padding-left:18px;font-size:calc(14px*var(--fs));line-height:1.75}
.review-flag-box small{display:block;margin-top:5px;color:#a2957a;font-size:calc(12.5px*var(--fs))}
.review-flag-note{display:block;color:#a3762b}

/* ══ 新手上路：圖文並茂的快速指引 ══════════════════════════════════
   每一步一張行內 SVG 插圖 ＋ 兩三句說明。插圖跟著該步驟的色系走
   （四色循環），底色與色條沿用題與題區分那一套變數，整體才一致。 */
.guide-tabs{display:flex;gap:8px;margin-bottom:18px;flex-wrap:wrap}
.guide-tabs button{border:1px solid var(--border);background:#fff;color:#5d7365;border-radius:999px;
  padding:9px 20px;font-size:calc(14px*var(--fs));cursor:pointer}
.guide-tabs button:hover{border-color:#c3d6c8;color:#3d5145}
.guide-tabs button.active{background:#237c5c;border-color:#237c5c;color:#fff}

.guide-steps{display:flex;flex-direction:column;gap:14px;padding:22px}
.guide-step{display:grid;grid-template-columns:170px minmax(0,1fr);gap:20px;align-items:center;
  border:1px solid var(--border);border-left:4px solid var(--q-accent,#2f6d55);
  background:var(--q-tint,#fff);border-radius:9px;padding:16px 20px}
.guide-art{background:#fff;border:1px solid var(--border);border-radius:8px;padding:8px}
.guide-svg{width:100%;height:auto;display:block}
.guide-text{min-width:0}
.guide-num{display:inline-grid;place-items:center;width:calc(26px*var(--fs));height:calc(26px*var(--fs));
  border-radius:7px;background:var(--q-soft,#e8f2ec);color:var(--q-accent,#2f6d55);
  font-family:Georgia,serif;font-size:calc(13px*var(--fs));margin-bottom:7px}
.guide-text h3{margin:0 0 4px;font-size:calc(17px*var(--fs));color:#2b4034;font-weight:500}
.guide-text p{margin:0;font-size:calc(14.5px*var(--fs));line-height:1.7;color:#5b6f63}

.guide-tip-row{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;padding:0 22px 22px}
.guide-tip{border:1px solid var(--border);border-radius:9px;padding:14px 16px;background:#fbfdfc}
.guide-tip .icon{color:#237c5c}
.guide-tip strong{display:block;font-size:calc(15px*var(--fs));color:#2b4034;font-weight:500;margin:6px 0 4px}
.guide-tip p{margin:0;font-size:calc(13.5px*var(--fs));line-height:1.7;color:#5b6f63}

.guide-steps>article.guide-step:nth-of-type(4n+1){--q-accent:#2f6d55;--q-soft:#e8f2ec;--q-tint:#f8fbf9}
.guide-steps>article.guide-step:nth-of-type(4n+2){--q-accent:#2c6a8e;--q-soft:#e7f0f7;--q-tint:#f7fafd}
.guide-steps>article.guide-step:nth-of-type(4n+3){--q-accent:#9a6a1f;--q-soft:#f7efe1;--q-tint:#fdfbf6}
.guide-steps>article.guide-step:nth-of-type(4n){--q-accent:#7a4f8f;--q-soft:#f1ecf6;--q-tint:#fbf9fd}

@media (max-width:740px){
  .guide-steps{padding:16px}
  .guide-step{grid-template-columns:minmax(0,1fr);gap:12px;padding:14px}
  .guide-art{max-width:200px;margin:0 auto;width:100%}
  .guide-tip-row{grid-template-columns:minmax(0,1fr);padding:0 16px 18px}
}

/* ══ 網盤備份（在「設定與隱私 → 資料管理」內） ══════════════════════
   手寫圖與題目圖形在上傳當下就已進網盤；這一塊負責把資料庫快照與題庫歸檔
   也送上去，並顯示最近幾次備份。 */
.backup-zone{margin-top:18px;padding-top:16px;border-top:1px solid var(--border)}
.backup-zone h3{display:flex;align-items:center;gap:8px;margin:0 0 6px;
  font-size:calc(16px*var(--fs));font-weight:500;color:#2b4034}
.backup-zone .metric-row{margin:14px 0 0}
.backup-history{margin-top:14px}
.backup-history summary{cursor:pointer;font-size:calc(14px*var(--fs));color:#3d5145}
.backup-history ul{margin:10px 0 0;padding-left:18px;font-size:calc(13px*var(--fs));line-height:1.8;color:#5b6f63}
.backup-history code{font-size:calc(12px*var(--fs));word-break:break-all}

/* ══ 書寫區大小（學生可依題目長短自己換） ══════════════════════════
   canvas 用 height:auto 依內建比例顯示，換尺寸才不會被壓扁。 */
.canvas-wrap.hand-canvas-wrap canvas{height:auto;max-height:none}
.hand-size-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap;
  margin-top:10px;font-size:calc(13px*var(--fs));color:#5b6f63}
.hand-size-row select{font-size:calc(13px*var(--fs))}

/* ══ 簡易計算機（學生作答頁右下角，可縮成小按鈕） ══════════════════ */
.calc-fab{position:fixed;right:20px;bottom:22px;z-index:60;display:inline-flex;
  align-items:center;gap:7px;padding:11px 15px;border-radius:999px;cursor:pointer;
  border:1px solid #cddcd4;background:#fff;color:#2f6d55;
  box-shadow:0 6px 18px #1e473522;font-size:calc(14px*var(--fs));font-weight:500}
.calc-fab:hover{background:#f4f9f5}
.calc-fab .icon{width:calc(17px*var(--fs));height:calc(17px*var(--fs))}
.calc-panel{position:fixed;right:20px;bottom:22px;z-index:60;width:min(268px,calc(100vw - 40px));
  background:#fff;border:1px solid #cddcd4;border-radius:14px;padding:12px;
  box-shadow:0 10px 30px #1e473526}
.calc-head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}
.calc-head strong{font-size:calc(14px*var(--fs));font-weight:500;color:#2b4034}
.calc-screen{display:block;min-height:calc(30px*var(--fs));padding:8px 10px;border-radius:9px;
  background:#f4f9f5;border:1px solid #e2ece6;color:#22352c;text-align:right;
  font-size:calc(19px*var(--fs));font-family:var(--font-mono,ui-monospace,monospace);
  overflow-wrap:anywhere}
.calc-live{min-height:calc(16px*var(--fs));margin:4px 2px 8px;text-align:right;
  font-size:calc(13px*var(--fs));color:#2f6d55;font-variant-numeric:tabular-nums}
.calc-keys{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:6px}
.calc-key{padding:9px 0;border-radius:8px;border:1px solid #dbe7de;background:#fbfdfc;
  color:#22352c;cursor:pointer;font-size:calc(15px*var(--fs));line-height:1}
.calc-key:hover{background:#f1f7f3}
.calc-key.equals{background:#2f6d55;border-color:#2f6d55;color:#fff;font-weight:500}
.calc-key.equals:hover{background:#285c48}
.calc-note{display:block;margin-top:8px;font-size:calc(11.5px*var(--fs));color:#7a8d82;line-height:1.5}
@media(max-width:560px){
  .calc-panel{right:10px;bottom:12px;width:min(246px,calc(100vw - 20px))}
  .calc-fab{right:12px;bottom:12px}
}
.calc-live.bad{color:#b8453b}

/* ══ 依實際試用回饋調整：主要動作要顯眼、AI 失效要看得見 ══════════
   ① 題目列的「開始解題／修改作答」是每張卡片唯一的動作，要大到一眼看到。
   ② 作答頁的「本題不會」靠右，緊貼「提交」，不再孤零零掛在最左邊。
   ③ 教師批閱清單的「查看與批閱」是主要動作，用主色（學生仍維持次要樣式）。
   ④ AI 暫時無法批改時，評語要紅色粗體加大，不能混在一般說明文字裡。 */
.assignment-question-row .practice-btn{font-size:calc(15px*var(--fs));padding:11px 18px;border-radius:8px;
  background:var(--green);border-color:var(--green);color:#fff;font-weight:600;box-shadow:0 3px 7px #1d7c6814}
.assignment-question-row .practice-btn:hover{background:var(--green-dark);color:#fff}
.assignment-question-row .practice-btn .icon{width:calc(15px*var(--fs));height:calc(15px*var(--fs))}
.assignment-question-row .practice-btn:disabled{background:#e9efeb;border-color:#e9efeb;color:#93a597;box-shadow:none}
.submit-row.answer-submit{justify-content:flex-end}
.submit-row.answer-submit #draft-status{margin-right:auto}
.submit-row.answer-submit #skip-answer{padding:10px 16px;font-size:calc(14px*var(--fs))}
.record-actions .primary{font-size:calc(15px*var(--fs));padding:12px 20px}
.ai-unavailable,.info-note.ai-unavailable,.result p.ai-unavailable{color:#b8453b;font-weight:700;
  font-size:calc(17px*var(--fs));line-height:1.75}

/* 批註編輯列（選取後的移動／粗細字級／改文字／刪除）：放在畫布下方，
   這樣增減內容都不會推動畫布、影響拖曳座標。 */
.ann-edit-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-top:12px}
.ann-edit-row input[type=range]{width:132px}
.ann-edit-row .ann-size-value{min-width:34px;font-variant-numeric:tabular-nums}
.ann-edit-row button{padding:8px 13px;font-size:calc(13px*var(--fs))}

/* ══ 按鈕文字要清楚：主要動作 600、篩選籤 500 ══════════════════════
   原本 secondary 只有 500、篩選籤完全沒設字重，看起來偏輕、不夠明確。 */
button.secondary{font-weight:600}
button.danger{font-weight:600}
.record-actions button{font-size:calc(14px*var(--fs));font-weight:600}
.history-filters button,.practice-tabs button,.guide-tabs button,.topic-tab,.subtopic-tab{font-weight:500}
.topic-tab.active,.subtopic-tab.active{font-weight:600}
.calc-key{font-weight:500}
.calc-key.equals{font-weight:600}
.assignment-submit button,.submit-row button{font-weight:600}

/* 學生的自主練習不屬教師批閱範圍：在教師的作答批閱清單要一眼看得出來。 */
.badge.self-practice{background:#f3f6f8;color:#66757f;border:1px solid #e2e8ec}
/* 教師的清單很長：學習建議收合成一行，要看再展開（學生的錯題本仍直接展開）。 */
.record-advice{margin-top:8px}
.record-advice>summary{cursor:pointer;font-size:calc(13px*var(--fs));color:#5b7365;
  padding:6px 0;list-style:none;display:flex;align-items:center;gap:6px;font-weight:500}
.record-advice>summary::-webkit-details-marker{display:none}
.record-advice>summary:before{content:"▸";color:#8fa89a}
.record-advice[open]>summary:before{content:"▾"}
.record-advice .learning-advice{margin-top:8px}

/* 拆題步驟改成按鈕：已完成與目前的步驟可以點（回到上一步），未到的不能跳。 */
button.step{border:0;background:none;padding:0;cursor:pointer;font-family:inherit}
button.step:disabled{opacity:1;cursor:default}
button.step.done{color:#5b7365}
button.step.done span{background:#e7f0ea;color:#3d5145}
button.step.done:hover{color:var(--green)}
button.step.done:hover span{background:var(--mint);color:var(--green)}
