*{box-sizing:border-box}body{color:#193b32;background:#f6f7f3;margin:0;font-family:Arial,PingFang SC,sans-serif}button,input,textarea{font:inherit}button{cursor:pointer;color:inherit;background:#fff;border:1px solid #d8dfd6;border-radius:10px;padding:12px 18px}button:hover{background:#edf2e8}header{background:#fff;border-bottom:1px solid #dde2d9;justify-content:space-between;align-items:center;padding:22px max(24px,50vw - 560px);display:flex}header b{font-size:24px}header small{color:#7a897f;margin-left:18px}main{max-width:1120px;margin:50px auto;padding:0 24px}h1{letter-spacing:-2px;margin:12px 0;font-size:44px}p{color:#758377;line-height:1.8}.tag{letter-spacing:2px;font-size:12px}.search{gap:10px;margin:30px 0 24px;display:flex}input,textarea{color:#193b32;background:#fff;border:1px solid #d8dfd6;border-radius:10px;width:100%;padding:16px}.search input{flex:1}.primary{color:#fff;background:#214f3d;border:0}.primary:hover{background:#32664e}.grid{grid-template-columns:repeat(3,1fr);gap:14px;display:grid}.card{text-align:left;flex-direction:column;justify-content:space-between;min-height:170px;padding:24px;display:flex}.card h3{margin:15px 0;font-size:17px;line-height:1.6}.muted{color:#8a958c;font-size:12px}.bottom{justify-content:space-between;align-items:center;display:flex}.count{color:#537044;background:#eff4e9;border-radius:20px;padding:6px 10px;font-size:12px}.detail{max-width:760px;margin:auto}.post{background:#fff;border:1px solid #dce3d9;border-radius:12px;margin:14px 0;padding:24px}.post img{object-fit:contain;width:190px;height:190px;margin:20px 0;display:block}.empty{text-align:center;border:1px dashed #ccd6c9;border-radius:14px;margin:20px 0;padding:60px}dialog{color:#193b32;border:1px solid #d8dfd6;border-radius:18px;width:480px;max-width:94vw;padding:28px}dialog::backdrop{background:#163a3270}label{margin:18px 0 8px;display:block}footer{color:#8a958c;padding:40px 0;font-size:12px}.error{color:#a34232}.filters{align-items:center;gap:10px;margin-bottom:22px;display:flex}.filters span{color:#7a897f;margin-left:auto;font-size:13px}@media (width<=760px){.grid{grid-template-columns:1fr}h1{font-size:34px}main{margin:30px auto}header small{display:none}.search{flex-wrap:wrap}.card{min-height:140px}}.time-filters{flex-wrap:wrap;align-items:end;gap:12px;margin:16px 0;display:flex}.time-filters label{flex:1;min-width:90px;font-size:13px}.time-filters select{color:#283022;width:100%;min-height:44px;font:inherit;background:#fff;border:1px solid #d9dfd4;border-radius:8px;margin-top:6px;padding:8px;display:block}.course-time{color:#637154;font-size:13px;line-height:1.6}.schedule-list{background:#f0f3eb;border-radius:10px;margin:16px 0;padding:12px 16px}.schedule-list p{margin:4px 0;font-size:14px}.finder{margin:12px 0}.finder-body{background:#fff;border:1px solid #d8dfd6;border-radius:12px;margin-top:12px;padding:20px}.finder summary{cursor:pointer;padding:14px 0}.match-list{gap:8px;margin:16px 0;display:grid}.match-list button{text-align:left}.finder textarea{min-height:90px}.feedback{text-align:center;border-top:1px solid #deded5;margin:40px 0 20px;padding:24px 0}.feedback span{-webkit-user-select:all;user-select:all;font-variant-numeric:tabular-nums}.mailbox{color:#3c522b;background:#edf1e7;border-radius:50%;width:72px;height:72px;padding:0}.feedback dialog{text-align:left}input[type=file]{max-width:100%}:root{--ink:#193b32;--muted:#5d6c60;--line:#d8dfd6;--green:#214f3d;--surface:#fff;--want-bg:#fff4de;--want-ink:#78551a;--offer-bg:#e7f1e3;--offer-ink:#2c5a37;--done-bg:#e9eceb;--done-ink:#56615e}body{font-family:PingFang SC,Microsoft YaHei,sans-serif}select{font:inherit;color:inherit}button:disabled{cursor:not-allowed;opacity:.55}button,input,select,textarea{transition:background-color .15s,border-color .15s}button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,summary:focus-visible,[tabindex]:focus-visible{outline-offset:3px;outline:3px solid #7a9643}p,.muted,footer{color:var(--muted)}header nav{gap:8px;display:flex}header nav button{background:0 0;border-color:#0000}header nav button[aria-pressed=true]{color:var(--green);background:#edf2e8}.detail-navigation{flex-wrap:wrap;gap:10px;display:flex}.timetable-entry-link{color:var(--green);background:#eaf0e3;margin-top:8px}.timetable button svg{vertical-align:middle;flex-shrink:0}.timetable{--row-height:78px}.timetable h1{letter-spacing:-1px;font-size:40px}.timetable h2{font-size:22px}.timetable h3{font-size:17px}.timetable-heading{justify-content:space-between;align-items:center;gap:16px;display:flex}.timetable-heading>svg{color:#81996b}.timetable-heading p{margin:10px 0 20px}.timetable-toolbar{flex-wrap:wrap;gap:10px;display:flex}.timetable-toolbar button,.timetable-actions button{justify-content:center;align-items:center;gap:8px;min-height:44px;display:inline-flex}.timetable-privacy{color:var(--muted);font-size:13px;line-height:1.7}.file-button{border:1px solid var(--line);cursor:pointer;background:#fff;border-radius:10px;align-items:center;margin:0;padding:12px 16px;display:inline-flex;position:relative;overflow:hidden}.file-button input,.upload-zone input{opacity:0;cursor:pointer;width:100%;height:100%;position:absolute;inset:0}.file-button:focus-within,.upload-zone:focus-within{outline-offset:3px;outline:3px solid #7a9643}.timetable-notice{color:var(--ink);background:#eaf0e3;border-left:3px solid #6e8e56;padding:12px 16px;font-size:14px}.timetable-notice button{margin-left:8px}.timetable-import{border:1px solid var(--line);background:#fff;border-radius:14px;margin:24px 0;padding:24px}.timetable-import h2{margin:0}.timetable-import p{font-size:14px}.timetable-import textarea{min-height:110px;font-size:14px;line-height:1.7}.upload-zone{background:#f6f8f2;border:1px dashed #9eaf92;border-radius:10px;flex-direction:column;align-items:center;gap:10px;padding:28px 16px;display:flex;position:relative}.upload-zone span{color:var(--muted);font-size:12px}.timetable-source{object-fit:contain;max-width:100%;max-height:480px;margin:16px auto;display:block}.timetable details summary{cursor:pointer;padding:12px 0;font-size:14px}.import-review{margin-top:24px}.import-row{border-top:1px solid var(--line)}.check-label{align-items:flex-start;gap:12px;margin:0;padding:14px 0;display:flex}.check-label input{width:20px;height:20px;accent-color:var(--green);flex-shrink:0;margin:2px 0}.check-label small{color:var(--muted);margin-top:6px;font-size:12px;display:block}.timetable-add{margin:24px 0}.timetable-add>label{align-items:center;gap:8px;font-size:14px;display:flex}.timetable-add .match-list small{color:var(--muted);justify-content:space-between;align-items:center;margin-top:6px;display:flex}.timetable-summary{border-top:1px solid var(--line);color:var(--muted);flex-wrap:wrap;align-items:center;gap:20px;padding:20px 0 8px;font-size:13px;display:flex}.timetable-summary strong{color:var(--ink);margin-right:4px;font-size:22px;font-weight:500}.received-key{align-items:center;gap:8px;margin-left:auto;display:flex}.received-key i{background:#cbd2ce;border-radius:3px;width:12px;height:12px;display:inline-block}.timetable-empty{text-align:center;background:#fff;border:1px dashed #c4cebc;border-radius:14px;margin:20px 0;padding:55px 20px}.timetable-empty>svg{color:#829a6d}.timetable-empty p{font-size:14px}.calendar-controls{justify-content:space-between;align-items:end;gap:14px;margin:4px 0 18px;display:flex}.calendar-controls label{align-items:center;gap:8px;margin:12px 0 0;font-size:13px;display:flex}.calendar-controls select,.timetable-dialog select{border:1px solid var(--line);background:#fff;border-radius:8px;min-height:44px;padding:10px}.view-switch{gap:4px;display:flex}.view-switch button[aria-pressed=true],.day-tabs button[aria-pressed=true]{background:var(--green);color:#fff;border-color:var(--green)}.week-scroll{border:1px solid var(--line);background:#fff;border-radius:12px;overflow-x:auto}.week-grid{grid-template-columns:42px repeat(7,minmax(0,1fr));grid-template-rows:44px repeat(12,var(--row-height));min-width:870px;display:grid}.week-corner,.weekday{border-bottom:1px solid var(--line);background:#f0f3ec;justify-content:center;align-items:center;font-size:13px;display:flex}.period-label{color:#61725c;font-variant-numeric:tabular-nums;border-bottom:1px solid #edf0e9;justify-content:center;align-items:flex-start;padding-top:12px;font-size:12px;display:flex}.day-column{grid-template-rows:repeat(12,var(--row-height));background:repeating-linear-gradient(to bottom,transparent 0,transparent calc(var(--row-height) - 1px),#edf0e9 calc(var(--row-height) - 1px),#edf0e9 var(--row-height));border-left:1px solid #e7ece2;grid-auto-columns:minmax(0,1fr);min-width:0;display:grid}.calendar-placement{min-width:0;min-height:0;padding:3px}.timetable-course{text-align:left;background:#eef3e8;border:1px solid #d5e0c9;border-radius:8px;flex-direction:column;gap:8px;width:100%;padding:12px;transition:background-color .2s,color .2s;display:flex}.calendar-placement .timetable-course{gap:5px;height:100%;padding:8px;overflow:hidden}.timetable-course strong{overflow-wrap:anywhere;font-size:14px;line-height:1.5}.calendar-placement strong{-webkit-line-clamp:4;-webkit-box-orient:vertical;flex-shrink:0;font-size:12px;display:-webkit-box;overflow:hidden}.timetable-course>span{font-size:12px;line-height:1.5}.entry-state{align-items:center;gap:4px;font-weight:600;display:flex}.state-want{background:var(--want-bg);color:var(--want-ink);border-color:#e9d6aa}.state-offer{background:var(--offer-bg);color:var(--offer-ink);border-color:#b9d2b1}.state-received{background:var(--done-bg);color:var(--done-ink);border-color:#cdd4d1}.timetable-course.state-received:hover{background:#dfe4e1}.conflict-label{color:#9b4933;font-size:11px!important}.day-tabs{gap:5px;margin-bottom:12px;display:flex}.day-tabs button{flex:1;min-height:44px;padding:10px 4px}.day-agenda{gap:10px;display:grid}.agenda-empty{text-align:center;border:1px dashed var(--line);border-radius:10px;padding:32px}.unplaced{margin:32px 0}.unplaced h2 span{color:var(--muted);font-size:14px;font-weight:400}.unplaced p{font-size:14px}.unplaced-list{grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;display:grid}.timetable-dialog{width:620px;max-height:90dvh;overflow-y:auto}.timetable-dialog h2{overflow-wrap:anywhere;margin-bottom:6px;line-height:1.5}.timetable-dialog .course-code{margin-top:0;font-size:12px}.status-text{border-radius:6px;padding:6px 10px;font-size:12px}.timetable-actions{flex-wrap:wrap;gap:8px;margin-top:20px;display:flex}.timetable-actions button{padding:11px 12px;font-size:14px}.timetable-dialog label{font-size:13px}.timetable-dialog label>select{width:100%;margin-top:6px;display:block}.meeting-editor{border:1px solid var(--line);border-radius:10px;margin:10px 0;padding:12px;position:relative}.meeting-fields{grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;display:grid}.meeting-fields label{margin:0}.meeting-fields input{margin-top:6px;padding:12px}.meeting-fields .weeks-field{grid-column:1/-1;margin-right:44px}.remove-time{padding:12px;position:absolute;bottom:12px;right:12px}.catalog-times button{text-align:left;width:100%;margin:6px 0;font-size:13px;display:block}.edit-footer{border-top:1px solid var(--line);justify-content:space-between;gap:10px;margin-top:16px;padding-top:24px;display:flex}@media (width<=760px){header{padding:16px}header nav{gap:2px}header nav button{padding:10px 12px;font-size:14px}main{margin-top:26px;padding:0 16px}.timetable h1{font-size:32px}.timetable-heading>svg{display:none}.timetable-heading p{font-size:14px}.timetable-toolbar{gap:8px}.timetable-toolbar button,.file-button{padding:11px 12px;font-size:13px}.timetable-import{padding:16px}.timetable-summary{gap:10px 16px}.received-key{margin-left:0}.calendar-controls{align-items:center}.calendar-controls label{margin:0;display:block}.calendar-controls select{margin-top:5px;display:block}.view-switch button{padding:11px 12px;font-size:13px}.unplaced-list{grid-template-columns:1fr}.timetable-dialog{max-height:92dvh;padding:20px}.timetable-actions button{flex:1}.timetable-actions button:last-child{flex-basis:100%}.detail-navigation button{padding:10px;font-size:13px}.timetable .week-scroll:after{content:"左右滑动查看整周 · 点击课程修改";color:var(--muted);background:#f0f3ec;padding:10px;font-size:12px;display:block;position:sticky;left:0}.timetable-summary strong{font-size:20px}}@media (prefers-reduced-motion:reduce){button,input,select,textarea,.timetable-course{transition:none}}.calendar-placement .single-period strong{-webkit-line-clamp:2}.calendar-placement .single-period>span:not(.entry-state){display:none}.update-entry{text-align:left;background:#eaf0e3;border-color:#d9e2cf;align-items:center;gap:12px;width:100%;margin-bottom:28px;padding:13px 16px;font-size:13px;display:flex}.update-entry span:first-child{white-space:nowrap;font-weight:600}.update-entry span:last-child{white-space:nowrap;margin-left:auto}.activity-tabs{gap:8px;margin:26px 0;display:flex}.activity-tabs button[aria-pressed=true]{background:var(--green);color:#fff}.activity-tabs span{margin-left:5px;font-size:12px}.activity-refresh{margin-left:auto;padding:12px}.activity-list{gap:12px;display:grid}.activity-row{border:1px solid var(--line);background:#fff;border-radius:12px;justify-content:space-between;gap:24px;padding:24px;display:flex}.activity-row h2{margin:8px 0;font-size:19px;line-height:1.6}.activity-row p{white-space:pre-wrap;overflow-wrap:anywhere;margin:8px 0;font-size:14px}.activity-row small{color:var(--muted);font-size:12px}.activity-row .entry-state{color:#537044;font-size:12px}.activity-actions{flex-direction:column;justify-content:center;gap:8px;min-width:130px;display:flex}.activity-actions button{font-size:13px}.activity-actions svg,.updates button svg{vertical-align:middle}.activity-loading{text-align:center;padding:40px}.updates{max-width:760px;margin:auto}.updates h1{letter-spacing:-1px;font-size:40px;line-height:1.3}.updates-intro{font-size:17px}.updates section{border-bottom:1px solid var(--line);padding:24px 0}.updates h2{font-size:22px;line-height:1.5}.updates li{color:var(--muted);margin:10px 0;line-height:1.9}.updates ul{padding-left:22px}.support-section{text-align:center}.support-section>svg{color:#6b8452}.support-qr{object-fit:contain;border-radius:8px;width:min(280px,100%);height:auto;margin:24px auto;display:block}.support-section a{color:var(--green);font-size:14px}.footer-update{color:var(--muted);background:0 0;border:0;margin-bottom:15px;padding:0;font-size:13px;text-decoration:underline}@media (width<=760px){header{flex-wrap:wrap;gap:14px}header nav{grid-template-columns:repeat(3,1fr);width:100%;display:grid}.update-entry{flex-wrap:wrap;gap:6px 10px;margin-bottom:22px;font-size:12px}.update-entry span:last-child{margin-left:0}.activity-tabs{gap:6px}.activity-tabs>button{padding:11px 10px;font-size:13px}.activity-row{flex-direction:column;gap:14px;padding:18px}.activity-actions{flex-direction:row}.activity-actions button{flex:1}.updates h1{font-size:32px}.updates h2{font-size:20px}.updates-intro{font-size:15px}.day-tabs button{white-space:nowrap;padding:10px 2px;font-size:12px}}.update-popup{overscroll-behavior:contain;border:1px solid var(--line);width:min(820px,100vw - 32px);max-width:calc(100vw - 32px);max-height:90dvh;color:var(--ink);background:#f6f7f3;border-radius:16px;padding:0;overflow-y:auto}.update-popup::backdrop{background:#0f231c99}.update-popup-bar{z-index:1;border-bottom:1px solid var(--line);background:#fff;justify-content:space-between;align-items:center;gap:16px;padding:14px 24px;display:flex;position:sticky;top:0}.update-popup-bar button{min-height:44px;padding:10px 14px}.update-popup-content{padding:24px 32px}.update-popup-footer{text-align:center;padding:8px 32px 28px}.update-popup-footer button{width:100%}body:has(.update-popup[open]){overflow:hidden}@media (width<=760px){.update-popup{width:calc(100vw - 24px);max-width:calc(100vw - 24px);max-height:92dvh}.update-popup-bar{padding:10px 16px}.update-popup-content{padding:20px 16px}.update-popup-footer{padding:8px 16px 20px}}.draft-match{padding:0 0 18px 32px}.draft-match label{font-size:13px}.draft-match input{padding:11px}.draft-match>small{color:var(--muted);margin-top:12px;font-size:12px;display:block}.draft-match .match-list button{font-size:13px}.draft-match .match-list small{color:var(--muted);margin-top:5px;display:block}
