:root{color:#262622;background:#f6f5f0;font-family:Microsoft YaHei UI,Microsoft YaHei,Segoe UI,Arial,sans-serif;font-size:14px}*{box-sizing:border-box}body{margin:0}button,input,select,textarea{font:inherit}button{cursor:pointer}.app-shell{display:grid;grid-template-columns:minmax(0,1fr);min-height:100vh}.sidebar{position:fixed;inset:0 auto 0 0;z-index:20;width:226px;transform:translate(-100%);transition:transform .16s ease;background:#24302c;color:#f5f2e9;padding:20px 14px;display:flex;flex-direction:column;gap:10px;box-shadow:12px 0 32px #1c1f1b38}.sidebar-open .sidebar{transform:translate(0)}.sidebar-toggle{position:fixed;top:12px;left:12px;z-index:30;width:38px;height:38px;border:1px solid #c9c6ba;border-radius:8px;background:#fff;color:#24302c;display:inline-flex;align-items:center;justify-content:center;box-shadow:0 8px 20px #2a2d281f}.sidebar-backdrop{position:fixed;inset:0;z-index:10;border:0;background:#2626222e}.brand{display:flex;gap:12px;align-items:center;padding:8px 8px 18px;border-bottom:1px solid rgba(255,255,255,.14);margin-bottom:8px}.brand strong,.brand span{display:block}.brand span{color:#b8c8bd;font-size:12px;margin-top:4px}.nav-button{border:0;border-radius:8px;color:#dfe8e1;background:transparent;display:flex;align-items:center;gap:10px;min-height:42px;padding:0 12px;text-align:left}.nav-button:hover,.nav-button.active{background:#f2c15d;color:#262622}.catalog-chip{margin-top:auto;border:1px solid rgba(255,255,255,.18);border-radius:8px;padding:10px;color:#d3ded6;font-size:12px;display:grid;gap:6px}.catalog-chip strong{color:#fff}.catalog-chip span{color:#b8c8bd}.sidebar-logout{border:1px solid rgba(255,255,255,.22);border-radius:6px;background:transparent;color:#f5f2e9;display:inline-flex;align-items:center;gap:6px;min-height:30px;justify-content:center}.sidebar-logout:hover{background:#ffffff1f}.workspace{min-width:0}.login-shell{min-height:100vh;display:grid;place-items:center;background:#f6f5f0;padding:24px}.login-card{width:min(420px,100%);border:1px solid #d6d2c5;border-radius:8px;background:#fff;padding:26px;display:grid;gap:16px;box-shadow:0 18px 45px #2a2d2814}.login-card label{display:grid;gap:6px}.login-card label span,.login-card small{color:#696961}.login-card input{height:38px;border:1px solid #c9c6ba;border-radius:6px;padding:0 10px}.login-error{border:1px solid #e2b2a9;border-radius:7px;background:#fff0e8;color:#9e2f22;padding:10px}.panel-page{padding:24px 24px 24px 62px}.page-header{display:flex;justify-content:space-between;gap:16px;align-items:flex-start;margin-bottom:18px}.page-header.compact{margin-bottom:12px}h1,h2,p{margin:0}h1{font-size:24px;line-height:1.3}h2{font-size:18px;margin-bottom:12px}p{color:#696961;margin-top:6px}.planner-layout{display:grid;grid-template-columns:minmax(0,1fr) 280px;height:100vh;overflow:hidden}.table-area{padding:0 20px 20px 62px;overflow:auto}.table-area>.page-header{padding-top:20px}.monitor{width:280px;min-width:280px;max-width:280px;border-left:1px solid #dedbd0;background:#fbfaf6;padding:20px;overflow-y:auto;overflow-x:hidden;min-width:0}.monitor-note{margin:-6px 0 12px;font-size:12px;line-height:1.5}.meta-fields,.options-bar,.header-actions{display:flex;gap:8px;flex-wrap:wrap}.planner-header-actions{display:grid;justify-items:end;gap:8px}.file-status-card{border:1px solid #d6d2c5;border-left:5px solid #2f6d58;border-radius:8px;background:#fff;padding:16px;margin-bottom:14px;display:grid;gap:6px}.file-status-card strong{font-size:20px}.file-status-card span,.file-status-card small{color:#696961;overflow-wrap:anywhere}.readonly-plan-banner,.collab-panel{border:1px solid #d8d3c4;background:#fff;border-radius:8px;padding:10px 12px;margin-bottom:12px}.readonly-plan-banner{color:#9b2e23;background:#fff4ef}.collab-panel{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.collab-panel>div:first-child{display:grid;gap:3px;min-width:220px}.collab-panel span,.collab-readonly{color:#696961;font-size:12px}.collab-list{display:flex;gap:8px;flex-wrap:wrap;flex:1}.collab-list label,.collab-pill{display:inline-flex;align-items:center;gap:4px;min-height:28px}.collab-pill{border:1px solid #d8d3c4;border-radius:6px;background:#f7f5ee;padding:2px 4px 2px 8px;color:#2f332e;font-size:12px}.collab-pill button{border:0;border-left:1px solid #d8d3c4;background:transparent;color:#9b2e23;min-height:24px;padding:0 6px}.collab-id-add{display:inline-flex;align-items:center;gap:6px}.collab-id-add input{width:150px;height:30px;border:1px solid #c9c6ba;border-radius:6px;padding:0 8px}.meta-fields input,.meta-fields select,.options-bar select,.search,.header-actions select,.semester-add-bar input,.semester-add-bar select{height:34px;border:1px solid #c9c6ba;border-radius:6px;background:#fff;padding:0 10px}.options-bar{background:#fff;border:1px solid #dedbd0;border-radius:8px;padding:12px;margin-bottom:14px;align-items:end}.options-bar label{display:grid;gap:4px}.options-bar span{color:#6b6a62;font-size:12px}.curriculum-table{min-width:1060px;border:1px solid #d2cec0;background:#fff}.table-row{display:grid;grid-template-columns:76px 92px minmax(92px,1fr) 72px 60px 56px 48px 48px 48px 132px 54px 112px 118px;min-height:38px;align-items:stretch}.table-header{background:#33433e;color:#fff;font-weight:700;position:sticky;top:0;z-index:2}.table-row>span,.course-row>input,.course-row>select{border:0;border-right:1px solid #dedbd0;border-bottom:1px solid #dedbd0;padding:8px;min-width:0}.table-row>span,.course-row>input,.course-row>select,.course-row>.readonly-cell{white-space:nowrap}.course-row>.name-cell,.course-row>.plan-remark-cell,.readonly-course-row>span:nth-child(3),.readonly-course-row>span:nth-child(12){overflow:hidden;text-overflow:ellipsis}.course-row>.readonly-cell{display:flex;align-items:center;background:#fbfaf6;color:#262622}.compact-text{font-size:13px;line-height:1.25}.course-row input,.course-row select{background:#fff}.course-row input:disabled,.course-row select:disabled{color:#262622;-webkit-text-fill-color:#262622;background:#fbfaf6;opacity:1}.course-row.invalid-row input,.course-row.invalid-row select{background:#fff0e8}.course-row.invalid-row{box-shadow:inset 4px 0 #c64632}.row-actions{border-bottom:1px solid #dedbd0;display:flex;align-items:center;justify-content:center;gap:4px;padding:4px 3px}.row-warning{border-radius:999px;background:#c64632;color:#fff;font-size:12px;line-height:1;padding:5px 7px}.name-cell{font-weight:600}.semester-title{display:grid;grid-template-columns:220px 1fr 40px;align-items:center;gap:12px;min-height:42px;padding:0 10px;background:#efe7d3;border-bottom:1px solid #d2cec0}.semester-title span{color:#5f5b50}.icon-button{width:30px;height:30px;display:inline-flex;align-items:center;justify-content:center;border:1px solid #c9c6ba;border-radius:6px;background:#fff}.semester-add-bar{display:grid;grid-template-columns:106px 112px 132px minmax(170px,1fr) minmax(120px,.75fr) 60px 126px;gap:8px;align-items:center;padding:10px;background:#f7f4ea;border-bottom:1px solid #d2cec0}.semester-add-bar strong{color:#4e4b43}.semester-add-bar button{min-height:34px;justify-content:center}.semester-group-actions{padding:8px 10px;background:#fbfaf6;border-bottom:1px solid #d2cec0}.elective-group-block{border-left:5px solid #6c7fbd;background:#f5f7ff;border-bottom:1px solid #cfd6ef}.elective-group-title{display:grid;grid-template-columns:minmax(160px,1fr) 90px 170px 150px 84px;gap:8px;align-items:center;padding:8px 10px;border-bottom:1px solid #cfd6ef}.elective-group-title input,.elective-group-title label input{min-height:30px;border:1px solid #bcc5df;border-radius:5px;padding:0 8px;background:#fff}.elective-group-title label{display:grid;grid-template-columns:auto 58px auto;gap:6px;align-items:center;color:#3d4775}.elective-group-title span,.elective-group-title em{color:#3d4775;font-style:normal}.elective-group-course{display:grid;grid-template-columns:72px 1fr}.active-toggle{display:flex;gap:5px;align-items:center;justify-content:center;border-right:1px solid #cfd6ef;border-bottom:1px solid #dedbd0;color:#3d4775;background:#eef2ff;font-size:12px}.danger{color:#aa3025}.check-card{border:1px solid #dedbd0;border-left-width:5px;border-radius:8px;padding:12px;background:#fff;margin-bottom:10px;min-width:0;overflow-wrap:anywhere}.check-card .check-card-head{display:grid;gap:8px;min-width:0}.check-card .check-card-head strong,.check-card .check-card-head span{display:block;min-width:0;overflow-wrap:anywhere}.check-card span,.check-card small{color:#6d6a61}.check-card b{display:block;font-size:22px;margin-top:8px}.check-card.ok{border-left-color:#2d7d5a}.check-card.ok b{color:#1f6f50}.check-card.warning{border-left-color:#d8982b}.check-card.warning b{color:#a86612}.check-card.error{border-left-color:#bf3a30}.check-card.error b,.check-card.error .check-card-head>span{color:#b83228}.check-action-button{width:100%;border:1px solid #b83228;border-radius:7px;background:#fff;color:#b83228;min-height:32px;margin-top:10px}.check-action-button:hover{background:#fff0e8}.check-card .check-detail-list{display:flex;flex-direction:column;justify-content:flex-start;gap:6px;margin-top:10px}.check-detail-item{border-radius:6px;padding:7px 8px;background:#f7f5ee;display:grid;gap:3px;min-width:0;overflow-wrap:anywhere}.check-detail-item strong,.check-detail-item em,.check-detail-item small{font-style:normal}.check-detail-item.ok strong,.check-detail-item.ok em{color:#1f6f50}.check-detail-item.warning strong,.check-detail-item.warning em{color:#a86612}.check-detail-item.error{background:#fff0e8}.check-detail-item.error strong,.check-detail-item.error em{color:#b83228}.primary-button,.secondary-button,.catalog-row button{border:0;border-radius:7px;background:#2f6d58;color:#fff;display:inline-flex;align-items:center;gap:8px;min-height:36px;padding:0 13px}.secondary-button{border:1px solid #bfb9a9;background:#fff;color:#2f332e}.import-button{position:relative;overflow:hidden}.import-button input{position:absolute;inset:0;opacity:0;cursor:pointer}.options-generate{min-width:144px}.plan-grid,.rule-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:12px}.plan-card,.rule-card{text-align:left;border:1px solid #d6d2c5;background:#fff;border-radius:8px;padding:14px;display:grid;gap:8px}.plan-card.selected{border-color:#2f6d58;box-shadow:inset 0 0 0 2px #2f6d58}.plan-card span,.plan-card small,.plan-card em,.rule-card span{color:#696961}.plan-card em{font-style:normal;color:#2f6d58}.library-tabs{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:10px;margin-bottom:12px}.library-tab{border:1px solid #d6d2c5;border-radius:8px;background:#fff;min-height:62px;padding:10px 12px;text-align:left;display:grid;gap:4px}.library-tab.active{border-color:#2f6d58;box-shadow:inset 0 0 0 2px #2f6d58}.library-tab span{color:#68655d}.program-tabs{display:flex;gap:8px;flex-wrap:wrap;margin:-4px 0 12px}.program-tab{border:1px solid #c9c6ba;border-radius:6px;background:#fff;color:#2f332e;min-height:30px;padding:0 12px;cursor:pointer}.program-tab.active{border-color:#2f6d58;background:#e9f2ed;color:#1f5a47;font-weight:700}.catalog-audit-grid{display:grid;gap:10px;margin-bottom:12px}.code-audit-card{border:1px solid #d6d2c5;border-left-width:5px;border-radius:8px;background:#fff;padding:12px 14px;display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px 14px;align-items:start}.code-audit-card.ok{border-left-color:#2d7d5a}.code-audit-card.warning{border-left-color:#d8982b}.code-audit-card strong,.code-audit-card span{display:block}.code-audit-card span,.code-audit-card small{color:#696961}.code-audit-card small{grid-column:1 / -1;overflow-wrap:anywhere}.audit-link-button{justify-self:start;border:1px solid #c9c6ba;border-radius:5px;background:#f7f5ee;color:#2f332e;min-height:28px;padding:0 10px;cursor:pointer}.audit-filter-banner{border:1px solid #d8cc98;border-radius:8px;background:#fff8dc;color:#4e3e12;padding:10px 12px;margin-bottom:12px;display:flex;gap:12px;align-items:center;justify-content:space-between;flex-wrap:wrap}.course-editor{border:1px solid #d6d2c5;border-radius:8px;background:#fff;padding:14px;margin-bottom:12px;display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:10px}.course-editor-head,.course-editor-wide,.course-editor-actions{grid-column:1 / -1}.course-editor-head{display:grid;gap:4px}.course-editor-head span,.course-editor label span{color:#696961;font-size:12px}.course-editor label{display:grid;gap:4px}.course-editor input,.course-editor select{height:34px;border:1px solid #c9c6ba;border-radius:6px;background:#fff;padding:0 10px;min-width:0}.course-editor-actions{display:flex;justify-content:flex-end;gap:8px}.catalog-compact-table{border:1px solid #d2cec0;background:#fff;overflow:auto}.catalog-compact-row{display:grid;grid-template-columns:64px 102px minmax(190px,1.05fr) 84px 50px 54px 48px 48px 48px 146px 54px 104px 64px 138px;align-items:stretch;min-width:1220px}.catalog-compact-head{position:sticky;top:0;z-index:1;background:#33433e;color:#fff;font-weight:700}.catalog-compact-row>span,.catalog-compact-row>strong,.catalog-compact-row>small,.catalog-compact-row>button,.catalog-compact-row>.catalog-actions,.catalog-compact-row>input,.catalog-compact-row>select{border-right:1px solid #dedbd0;border-bottom:1px solid #dedbd0;min-width:0;padding:4px 6px}.catalog-compact-row>input,.catalog-compact-row>select{width:100%;border-top:0;border-left:0;background:#fff;color:#2f332e;font:inherit;line-height:1.25;resize:none}.catalog-compact-row>input:disabled,.catalog-compact-row>select:disabled{color:#2f332e;-webkit-text-fill-color:#2f332e;background:#fbfaf6;opacity:1}.catalog-name-input{font-weight:600}.catalog-compact-row>span{overflow-wrap:anywhere}.catalog-actions{display:flex;gap:3px;align-items:center;justify-content:center;flex-wrap:nowrap;overflow:hidden}.catalog-actions button{border:1px solid #c9c6ba;border-radius:5px;background:#fff;color:#2f332e;min-height:24px;padding:0 5px;white-space:nowrap;font-size:12px}.export-box{width:100%;height:70vh;border:1px solid #d6d2c5;border-radius:8px;padding:14px;resize:none;background:#fff;font-family:Consolas,Courier New,monospace}.user-create-bar{display:grid;grid-template-columns:140px 160px 120px 150px 100px;gap:8px;align-items:center;border:1px solid #d6d2c5;border-radius:8px;background:#fff;padding:12px;margin-bottom:12px}.user-create-bar input,.user-create-bar select,.user-row input,.user-row select{min-height:32px;border:1px solid #c9c6ba;border-radius:5px;background:#fff;color:#2f332e;padding:0 8px;min-width:0}.account-settings-card{border:1px solid #d6d2c5;border-radius:8px;background:#fff;padding:14px;display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:12px}.account-settings-card label{display:grid;gap:5px}.account-settings-card label span{color:#696961;font-size:12px}.account-settings-card input{min-height:34px;border:1px solid #c9c6ba;border-radius:6px;padding:0 10px;background:#fff;color:#2f332e}.account-settings-card input:disabled{background:#f7f5ee;color:#696961}.account-actions{grid-column:1 / -1;display:flex;justify-content:flex-end}.user-table{border:1px solid #d2cec0;background:#fff;overflow:auto}.user-row{display:grid;grid-template-columns:120px 150px 160px 120px 150px 170px 120px;align-items:stretch;min-width:990px}.user-id-cell{color:#696961;font-family:Consolas,Courier New,monospace;font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.user-row>span,.user-row>input,.user-row>select{border-right:1px solid #dedbd0;border-bottom:1px solid #dedbd0;border-top:0;border-left:0;border-radius:0;padding:6px 8px}.user-head{background:#33433e;color:#fff;font-weight:700}.user-actions{display:flex;gap:6px;align-items:center;justify-content:center}.user-actions button{border:1px solid #c9c6ba;border-radius:5px;background:#fff;color:#2f332e;min-height:26px;padding:0 8px}.user-actions button:disabled{opacity:.45;cursor:not-allowed}.report-page{display:grid;gap:18px}.report-section{display:grid;gap:8px}.report-section h2{margin:10px 0 0;color:#2f332e;font-size:18px;font-weight:700;line-height:1.35}.report-section h3{margin:0 0 4px;color:#2f332e;font-size:16px;font-weight:700;line-height:1.35;text-align:center}.report-table-wrap{justify-self:start;width:fit-content;max-width:100%;background:#fff;border:1px solid #d2cec0;overflow:auto}.report-table{width:100%;border-collapse:collapse;min-width:720px}.report-table th{background:#33433e;color:#fff;text-align:center}.report-table th,.report-table td{border:1px solid #dedbd0;padding:5px 6px;text-align:center;vertical-align:middle;overflow-wrap:anywhere}.report-table.compact-report-table{table-layout:fixed;width:auto;min-width:0;border:0;background:#fff}.report-table.compact-report-table th,.report-table.compact-report-table td{text-align:center;vertical-align:middle;font-size:12px;line-height:1.3;padding:4px 5px}.report-table.compact-report-table th{background:#33433e;color:#fff}.report-table.compact-report-table th{font-weight:700}.report-table.compact-report-table .report-note{text-align:center;font-size:11px;line-height:1.45}.platform-table{width:760px}.platform-table td:last-child{text-align:center}.practice-table{width:820px}.practice-table tr{height:30px}.engineering-table{width:980px}@media(max-width:900px){.planner-layout{display:block;height:auto;min-height:100vh;overflow:visible}.table-area{padding:60px 10px 14px;overflow-x:auto;overflow-y:visible}.table-area>.page-header{padding-top:0}.planner-header-actions{justify-items:stretch}.monitor{width:auto;min-width:0;max-width:none;max-height:42vh;margin:0 10px 14px;border-left:0;border-top:1px solid #dedbd0;padding:12px}.curriculum-table{min-width:1060px}}
