:root{--ink:#202824;--muted:#6d766f;--line:#dfe5dd;--paper:#f6f7f2;--green:#236557;--pale:#eef4ea;--white:#fff}
*{box-sizing:border-box}
body{margin:0;background:var(--paper);color:var(--ink);font-family:"Segoe UI","Microsoft JhengHei",sans-serif}
button,input,textarea,select{font:inherit}
button{cursor:pointer}
.shell{display:grid;grid-template-columns:minmax(360px,520px) minmax(520px,1fr);gap:22px;padding:28px;min-height:100vh}
.panel{background:var(--white);border:1px solid var(--line);border-radius:8px;padding:24px;box-shadow:0 5px 20px #20362708}
.input-panel{position:sticky;top:22px;align-self:start}
.title-row{display:flex;justify-content:space-between;gap:16px;align-items:flex-start;margin-bottom:20px}
.eyebrow{margin:0 0 7px;color:#7f8b78;letter-spacing:1.6px;font-size:11px;font-weight:700}
h1,h2{margin:0} h1{font-size:23px} h2{font-size:19px}
.badge{background:var(--pale);border:1px solid #d6e3d1;color:#335f3c;border-radius:999px;padding:8px 11px;font-size:12px;white-space:nowrap}
label{display:block;margin:16px 0 7px;color:#425046;font-weight:700;font-size:13px}
input,textarea,select{width:100%;border:1px solid #d8e1d7;border-radius:6px;padding:11px 12px;background:#fff;color:var(--ink);line-height:1.55}
textarea{resize:vertical}
.drop-zone{border:2px dashed #b9c8b8;border-radius:8px;background:#fbfdf9;padding:18px;text-align:center;color:#425046;cursor:pointer;transition:.15s border-color,.15s background}.drop-zone input{display:none}.drop-zone strong{display:block;margin-bottom:4px}.drop-zone span{display:block;color:var(--muted);font-size:13px}.drop-zone.drag-over{border-color:var(--green);background:var(--pale)}
.key-row{display:flex;position:relative}.key-row input{padding-right:58px}.key-row button{position:absolute;right:6px;top:7px;border:0;background:#fff;color:var(--green);font-size:12px}
.primary{width:100%;margin-top:18px;background:var(--green);color:#fff;border:0;border-radius:6px;padding:13px 16px;font-weight:700}
button:disabled{opacity:.55;cursor:not-allowed}
.note,.status{color:var(--muted);font-size:13px;line-height:1.8}
.error{margin-top:14px;border:1px solid #e8beb3;background:#fff2ee;color:#a43d28;border-radius:6px;padding:11px;line-height:1.7}
.actions{display:flex;gap:10px;flex-wrap:wrap}.actions button{border:1px solid #cfd9cf;background:#fff;border-radius:6px;padding:10px 12px}.actions button:first-child{background:var(--green);color:#fff;border-color:var(--green)}
.review{border-top:1px solid var(--line);border-bottom:1px solid var(--line);padding:12px 0;margin:14px 0}.review summary{cursor:pointer;font-weight:700;color:#435341}.review li{color:var(--muted);line-height:1.8}
.question{margin:24px 0 34px}.question h3{font-size:16px;margin:0 0 10px}
.scheme{width:100%;border-collapse:collapse;font-family:"Times New Roman","Microsoft JhengHei",serif;font-size:14px;background:#fff}
.scheme th{border-top:1px solid #66705f;border-bottom:1px solid #66705f;padding:8px;text-align:center}
.scheme td{padding:8px 10px;vertical-align:middle;text-align:left}
.scheme td+td,.scheme th+th{border-left:1px solid #909a87}
.scheme td:nth-child(2){width:85px;text-align:center;white-space:nowrap}.scheme td:nth-child(3){width:26%}
.block-label td{font-weight:700;padding-top:13px}
.boxed td:first-child{border-left:1px solid #69775f}.boxed td:last-child{border-right:1px solid #69775f}.box-start td{border-top:1px solid #69775f}.box-end td{border-bottom:1px solid #69775f}
.formula{font-style:italic;white-space:pre-wrap}.latex-vector{font-weight:700;font-style:italic}.latex-matrix{display:inline-flex;align-items:center;vertical-align:middle;font-style:italic}.latex-matrix table{border-collapse:collapse;margin:0 .12em}.latex-matrix td{border:0!important;padding:0 .28em!important;text-align:center!important;width:auto!important}.matrix-bracket{font-size:1.8em;line-height:1}.latex-frac{display:inline-flex;vertical-align:middle;flex-direction:column;align-items:center;font-style:italic;line-height:1.05;margin:0 .08em}.latex-frac>span:first-child{border-bottom:1px solid currentColor;padding:0 .18em}.latex-frac>span:last-child{padding:0 .18em}
@media(max-width:980px){.shell{grid-template-columns:1fr;padding:16px}.input-panel{position:static}.panel{padding:18px}}
@media print{body{background:#fff}.input-panel,.actions,.review,.status{display:none}.shell{display:block;padding:0}.panel{border:0;box-shadow:none}.output-panel{padding:0}.scheme{page-break-inside:auto}.question{page-break-after:always}}
