:root{--bg: #f5f6f8;--surface: #ffffff;--ink: #1c2430;--muted: #66707e;--border: #dde1e7;--accent: #2f6fd0;--danger: #c0392b;--radius: 8px;--cell-min: 96px;--touch-min: 44px}@media(prefers-color-scheme:dark){:root{--bg: #14181f;--surface: #1d232c;--ink: #e6e9ee;--muted: #939ca9;--border: #2c3440;--accent: #5b93e0;--danger: #e07060}}*{box-sizing:border-box}html,body{margin:0;padding:0}body{background:var(--bg);color:var(--ink);font:15px/1.45 Segoe UI,Microsoft YaHei,PingFang SC,sans-serif;padding-bottom:env(safe-area-inset-bottom)}.topbar{display:flex;align-items:center;gap:16px;flex-wrap:wrap;padding:10px 20px;padding-top:max(10px,env(safe-area-inset-top));background:var(--surface);border-bottom:1px solid var(--border);position:sticky;top:0;z-index:10}.brand{font-size:18px;font-weight:650;margin:0}.week-nav{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.week-current{display:flex;flex-direction:column;min-width:150px;text-align:center}.week-current span:first-child{font-weight:600}.muted{color:var(--muted);font-size:12px}.actions{display:flex;align-items:center;gap:10px;margin-left:auto}.btn{border:1px solid var(--border);background:var(--surface);color:var(--ink);border-radius:var(--radius);padding:8px 14px;font-size:14px;cursor:pointer;min-height:36px;white-space:nowrap}.btn:hover:not(:disabled){border-color:var(--accent)}.btn:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.btn:disabled{opacity:.4;cursor:default}.btn-primary{background:var(--accent);border-color:var(--accent);color:#fff}.install-banner{display:flex;align-items:center;gap:10px;margin:10px 20px 0;padding:10px 14px;background:color-mix(in srgb,var(--accent) 10%,var(--surface));border:1px solid var(--accent);border-radius:var(--radius);font-size:13px}.install-banner-text{flex:1;min-width:0}.install-banner-btn{min-height:32px;padding:4px 14px}.install-banner-close{border:none;background:none;color:var(--muted);font-size:18px;line-height:1;cursor:pointer;padding:6px;min-width:32px;min-height:32px}.error-banner{margin:12px 20px;padding:12px 16px;background:color-mix(in srgb,var(--danger) 12%,transparent);border:1px solid var(--danger);border-radius:var(--radius);color:var(--danger);white-space:pre-wrap}.hidden{display:none!important}.toast{position:fixed;bottom:calc(24px + env(safe-area-inset-bottom));left:50%;transform:translate(-50%);padding:10px 20px;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:0 4px 16px #0000002e;z-index:200;max-width:min(90vw,480px)}.table-wrap{padding:16px 20px 40px;overflow-x:auto}.grid{display:grid;grid-template-columns:64px repeat(7,minmax(var(--cell-min),1fr));grid-auto-rows:auto;gap:1px;background:var(--border);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;min-width:calc(64px + 7 * var(--cell-min))}.grid .head{background:var(--surface);padding:10px 4px;text-align:center;font-weight:600}.grid .head.today{color:var(--accent)}.period-cell{background:var(--surface);padding:6px 2px;text-align:center;font-size:12px;display:flex;flex-direction:column;justify-content:center}.period-cell .no{font-weight:600}.period-cell .time{color:var(--muted);font-size:11px;white-space:nowrap}.slot{background:var(--surface);min-height:56px}.time-divider{background:var(--surface-2, color-mix(in srgb, var(--accent) 4%, var(--border)));display:flex;align-items:center;justify-content:center;font-size:11px;color:var(--muted);letter-spacing:.4em;padding:6px 0;border-top:1px dashed var(--border);border-bottom:1px dashed var(--border)}.course-card{position:relative;z-index:1;margin:3px;border-radius:6px;padding:6px 8px;color:#fff;font-size:13px;overflow:hidden;display:flex;flex-direction:column;gap:2px;box-shadow:inset 0 -2px #00000026}.course-card .name{font-weight:800;font-size:17px;line-height:1.3;letter-spacing:.02em;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow-wrap:anywhere}.course-card .meta{font-size:11.5px;opacity:.92;line-height:1.35}.course-card.warn:after{content:"⚠ 时间冲突";font-size:10px;background:#00000059;border-radius:4px;padding:1px 5px;align-self:flex-start}.legend{display:flex;gap:14px;flex-wrap:wrap;padding:10px 4px 0;font-size:12px;color:var(--muted)}.legend .dot{display:inline-block;width:10px;height:10px;border-radius:3px;margin-right:5px;vertical-align:baseline}.dayview{max-width:640px;margin:0 auto}.day-chips{display:flex;gap:6px;margin-bottom:12px}.day-chip{flex:1;display:flex;flex-direction:column;align-items:center;gap:1px;padding:7px 2px;min-height:var(--touch-min);border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);color:var(--ink);font-size:13px;cursor:pointer}.day-chip.today{color:var(--accent);border-color:color-mix(in srgb,var(--accent) 50%,var(--border))}.day-chip.active{background:var(--accent);border-color:var(--accent);color:#fff}.day-chip.active .muted{color:#fffc}.day-list{display:flex;flex-direction:column;gap:10px}.day-card{border-radius:var(--radius);padding:10px 14px;color:#fff;box-shadow:inset 0 -2px #00000026}.day-card.warn{outline:2px solid var(--danger);outline-offset:1px}.day-card-top{display:flex;justify-content:space-between;gap:10px;font-size:12.5px;opacity:.95;margin-bottom:2px}.day-card .name{font-weight:800;font-size:17px;line-height:1.3}.day-card .meta{font-size:12.5px;opacity:.92;line-height:1.4}.day-divider{text-align:center;font-size:11px;color:var(--muted);letter-spacing:.4em;padding:2px 0}.day-empty{text-align:center;padding:48px 16px;color:var(--ink);font-size:16px}.day-empty-icon{font-size:40px;margin-bottom:8px}.empty-hero{text-align:center;padding:72px 16px;max-width:420px;margin:0 auto}.empty-hero-icon{font-size:44px;margin-bottom:10px}.empty-hero-title{font-size:18px;font-weight:650;margin-bottom:6px}.empty-hero-actions{display:flex;justify-content:center;gap:10px;margin-top:18px}.overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0a0e1480;display:flex;align-items:center;justify-content:center;z-index:100;padding:16px}.dialog{background:var(--surface);color:var(--ink);border:1px solid var(--border);border-radius:var(--radius);box-shadow:0 16px 48px #0000004d;padding:18px 20px;width:min(600px,100%);max-height:84vh;overflow:auto}.dialog h2{margin:0 0 8px;font-size:16px}.dialog-courses{margin:10px 0;display:flex;flex-direction:column;gap:6px;max-height:34vh;overflow:auto}.dialog-course{border:1px solid var(--border);border-radius:var(--radius);padding:7px 10px;font-size:13px}.dialog-course .name{font-weight:600}.dialog-course .sess{color:var(--muted)}.dialog-warning{border:1px solid var(--danger);color:var(--danger);border-radius:var(--radius);padding:8px 10px;margin:8px 0;font-size:13px;white-space:pre-wrap}.dialog-field{display:flex;align-items:center;gap:10px;margin:10px 0}.dialog-field label{font-size:14px}.dialog-field input{min-height:38px;width:160px;padding:6px 10px}.dialog-hint{font-size:12px;color:var(--muted);margin:-4px 0 8px}.dialog-hint.warn{color:var(--danger)}.dialog-conflict{border:1px solid var(--border);border-radius:var(--radius);padding:10px 12px;margin:10px 0;display:flex;flex-direction:column;gap:6px}.dialog-conflict-title{font-size:14px;font-weight:600}.dialog-conflict .radio{display:flex;align-items:center;gap:8px;font-size:14px;min-height:32px;cursor:pointer}.dialog-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:12px}.btn-filepick{margin:10px 0;min-height:var(--touch-min);border-style:dashed}.ios-help-steps{margin:12px 0;padding-left:22px;display:flex;flex-direction:column;gap:10px;font-size:14px}.ios-share-icon{display:inline-flex;vertical-align:middle;margin-left:6px;padding:3px;border:1px solid var(--border);border-radius:6px;color:var(--accent);background:var(--surface)}@media(max-width:720px){.topbar{display:grid;grid-template-columns:auto 1fr;grid-template-areas:"brand actions" "weeknav weeknav";align-items:center;gap:6px 10px;padding:8px 10px;padding-top:max(8px,env(safe-area-inset-top))}.brand{grid-area:brand}.actions{grid-area:actions;justify-content:flex-end;gap:6px;flex-wrap:wrap}.week-nav{grid-area:weeknav;justify-content:space-between;flex-wrap:wrap}.btn{min-height:var(--touch-min);padding:8px 10px;font-size:13px}.week-current{min-width:0;flex:1}.table-wrap{padding:10px 10px 30px}:root{--cell-min: 72px}body{font-size:14px}.grid .course-card{font-size:11.5px;padding:4px 5px}.overlay{padding:0;align-items:flex-end}.dialog{width:100%;max-height:94vh;border-radius:var(--radius) var(--radius) 0 0;border-bottom:none;padding-bottom:calc(18px + env(safe-area-inset-bottom))}.dialog-courses{max-height:40vh}}
