    :root{--blue:#376bf5;--blue-soft:#edf2ff;--ink:#20252e;--muted:#9499a5;--line:#eff0f3;--page:#f6f7f9;--green:#24a675;--green-soft:#edf8f3;font-family:-apple-system,BlinkMacSystemFont,"SF Pro Text","PingFang SC","Microsoft YaHei",sans-serif;color:var(--ink);font-synthesis:none}
    *{box-sizing:border-box}body{margin:0;background:var(--page)}button,input{font:inherit}button{cursor:pointer;border:0;background:none;color:inherit;-webkit-tap-highlight-color:transparent}button:disabled{opacity:.35;cursor:default}button:focus-visible,input:focus-visible{outline:2px solid var(--blue);outline-offset:3px}button,input{touch-action:manipulation}svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0}[hidden]{display:none!important}
    .app{width:min(100%,800px);margin:0 auto;padding:34px 24px 48px}.header{display:flex;align-items:center;justify-content:space-between;margin:0 2px 24px}.brand{display:flex;align-items:center;gap:10px}.brand-mark{display:grid;grid-template-columns:repeat(2,6px);gap:3px;background:var(--blue);border-radius:10px;padding:8px;width:31px;height:31px}.brand-mark i{background:#fff;border-radius:1.5px}.brand-mark i:last-child{opacity:.5}h1{font-size:22px;letter-spacing:.3px;margin:0;font-weight:650}.campus{color:#7b818d;font-size:13px;display:flex;gap:4px;align-items:center}.campus svg{width:15px;height:15px}
    .panel{background:#fff;border-radius:18px}.calendar{padding:21px 22px 17px}.calendar-head{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:20px}.date-picker{display:flex;position:relative;align-items:center;gap:7px;font-size:17px;font-weight:600;white-space:nowrap}.date-picker svg{width:15px;height:15px;color:#9297a3}.date-picker input{position:absolute;inset:0;width:100%;height:100%;opacity:0;cursor:pointer}.date-picker input::-webkit-calendar-picker-indicator{position:absolute;inset:0;width:100%;height:100%;cursor:pointer}.week-control{display:flex;align-items:center;gap:6px;color:#818794;font-size:12px;white-space:nowrap}.icon-button{display:flex;justify-content:center;align-items:center;width:28px;height:30px;border-radius:8px;color:#8f96a3}.icon-button svg{width:15px;height:15px}.icon-button:hover{background:#f6f7f9;color:var(--blue)}
    .week-strip{display:grid;grid-template-columns:repeat(7,1fr);gap:9px}.day{min-width:0;height:71px;border-radius:13px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;position:relative}.day .weekday{font-size:12px;color:#9399a4}.day .number{font-size:19px;line-height:22px;font-weight:550;font-variant-numeric:tabular-nums}.day:hover{background:#f7f8fa}.day.today:not(.selected) .number{color:var(--blue)}.day.today:after{content:"";width:3px;height:3px;position:absolute;bottom:5px;background:var(--blue);border-radius:50%}.day.selected{background:var(--blue);color:#fff}.day.selected .weekday{color:#dbe5ff}.day.selected:after{background:#fff}.calendar-bottom{height:23px;margin-top:12px;display:flex;align-items:center;justify-content:space-between}.calendar-bottom span{font-size:12px;color:#969ca6}.today-button{font-size:12px;color:var(--blue);padding:3px 0 3px 12px;display:flex;align-items:center;gap:4px}.today-button svg{width:13px;height:13px}
    .filters{margin-top:12px;padding:21px 22px 20px}.section-heading{display:flex;align-items:center;justify-content:space-between;margin-bottom:13px}.field-title{font-size:13px;color:#7b8290}.period-time{font-size:12px;color:#8c93a0;font-variant-numeric:tabular-nums}.periods{display:grid;grid-template-columns:repeat(6,1fr);gap:8px}.chip{padding:0;white-space:nowrap;height:38px;border-radius:9px;font-size:13px;background:#f6f7f9;color:#636b79;transition:background .12s,color .12s}.chip.selected{color:var(--blue);background:var(--blue-soft);font-weight:600;box-shadow:inset 0 0 0 1px #d9e4ff}.chip:hover:not(.selected){background:#eef0f4}.building-row{margin-top:21px;display:flex;align-items:center;gap:20px}.building-row .field-title{flex:0 0 38px}.buildings{display:grid;grid-template-columns:repeat(5,1fr);gap:4px;flex:1}.building{height:36px;border-radius:8px;color:#8a909d;font-size:14px}.building.selected{color:var(--blue);background:var(--blue-soft);font-weight:600}.building:hover:not(.selected){background:#f6f7f9}.floor-row{display:flex;align-items:center;gap:20px;margin-top:12px}.floor-row .field-title{flex:0 0 38px}.floors{display:flex;align-items:center;gap:3px;flex:1;min-width:0}.floor{flex:1;padding:9px 2px;border-radius:8px;font-size:13px;color:#858d9a;white-space:nowrap}.floor.selected{color:var(--blue);font-weight:600;background:var(--blue-soft)}.search{margin-top:17px;background:#f6f7f9;display:flex;align-items:center;border-radius:10px;height:41px;gap:8px;padding:0 12px;color:#a4aab5}.search svg{width:17px;height:17px}.search input{border:0;outline:0;background:none;flex:1;min-width:0;font-size:13px;color:var(--ink);height:100%}.search input::placeholder{color:#a4aab5}.clear-search{font-size:19px;line-height:1;color:#a4aab5;padding:5px}
    .results{margin-top:25px}.results-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin:0 2px 14px}.results-head h2{font-size:15px;font-weight:600;margin:0;display:flex;align-items:baseline;gap:7px}.count{font-size:13px;font-weight:450;color:#9198a5}.only-free{display:flex;align-items:center;gap:7px;cursor:pointer;font-size:12px;color:#8a919e}.only-free input{position:absolute;opacity:0;width:1px;height:1px}.switch{width:29px;height:17px;background:#dce0e7;border-radius:12px;position:relative;transition:background .15s}.switch:after{content:"";position:absolute;left:2px;top:2px;width:13px;height:13px;border-radius:50%;background:#fff;transition:transform .15s;box-shadow:0 1px 3px #00000010}.only-free input:checked+.switch{background:var(--blue)}.only-free input:checked+.switch:after{transform:translateX(12px)}.only-free input:focus-visible+.switch{outline:2px solid var(--blue);outline-offset:3px}
    .rooms{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}.room{background:white;border-radius:13px;text-align:left;padding:19px 17px 16px;transition:box-shadow .15s,transform .15s}.room:hover{box-shadow:0 3px 15px #20252e08;transform:translateY(-1px)}.room-top{display:flex;justify-content:space-between;align-items:center;gap:7px}.room-name{font-size:20px;letter-spacing:.2px;font-weight:600;font-variant-numeric:tabular-nums}.room-state{font-size:10px;color:var(--green);background:var(--green-soft);padding:3px 5px;border-radius:4px;white-space:nowrap}.room.busy .room-state{color:#9ca2ad;background:#f3f4f6}.room-detail{margin-top:12px;color:#949ba6;font-size:11px;display:flex;align-items:center;gap:4px}.room-detail svg{width:12px;height:12px}.room-detail .room-arrow{margin-left:auto;width:12px;height:12px;color:#b4bbc6}.empty{padding:54px 0;text-align:center;color:#969daa;font-size:13px}.empty svg{width:35px;height:35px;display:block;margin:0 auto 13px;color:#c7cdd7}.empty p{margin:0}.toast{position:fixed;left:50%;bottom:35px;transform:translate(-50%,10px);background:#242a35e8;color:white;padding:11px 20px;border-radius:10px;font-size:13px;opacity:0;transition:opacity .15s,transform .15s;pointer-events:none}.toast.visible{opacity:1;transform:translate(-50%,0)}
    dialog{padding:0;border:0;border-radius:20px;width:calc(100% - 36px);max-width:420px;color:var(--ink);box-shadow:0 15px 70px #10182720}dialog::backdrop{background:#151b2a40;backdrop-filter:blur(3px)}.dialog-body{padding:24px}.dialog-heading{display:flex;align-items:center;justify-content:space-between}.dialog-heading h2{margin:0;font-size:25px;font-weight:600}.close{height:30px;width:30px;border-radius:50%;background:#f5f6f8;display:grid;place-items:center;color:#8e95a2}.close svg{width:17px;height:17px}.dialog-date{font-size:13px;color:#8d95a2;margin:8px 0 22px}.day-periods{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}.day-period{border-radius:9px;padding:11px 0;text-align:center;background:var(--green-soft);color:var(--green);font-size:12px}.day-period.taken{background:#f3f4f6;color:#a0a6b1}.day-period b{display:block;font-size:14px;font-weight:550;margin-bottom:5px}.dialog-key{display:flex;justify-content:flex-end;align-items:center;gap:12px;font-size:11px;color:#969daa;margin-top:15px}.dialog-key span{display:flex;align-items:center;gap:4px}.dialog-key i{width:6px;height:6px;border-radius:50%;background:var(--green)}.dialog-key span:last-child i{background:#c1c7d1}
    .school-emblem{width:35px;height:35px;object-fit:contain;flex-shrink:0}.header-actions{display:flex;align-items:center;gap:15px}.mode-button{font-size:12px;color:var(--blue);border:1px solid #dce5ff;border-radius:8px;height:31px;padding:0 11px;white-space:nowrap;background:#fff}.mode-button[aria-pressed="true"]{background:var(--blue);border-color:var(--blue);color:#fff}.room-detail.free{color:#209362}.room-detail.upcoming{color:#ba850a}.room-detail.busy{color:#db5151}.room.busy .room-state{color:#d85353;background:#fff1f1}.room:has(.room-detail.upcoming) .room-state{color:#b7830a;background:#fff8e7}.periods{grid-template-columns:repeat(3,minmax(0,1fr))}.chip{font-size:13px}.sync-status{font-size:12px;color:#7b8290;padding:16px 4px 0}.sync-status.error{color:#d85353}.refresh{margin-left:auto;font-size:12px;color:#8b93a2;display:inline-flex;align-items:center;gap:4px}.refresh svg{width:13px;height:13px}.course-info{margin-top:13px;border-top:1px solid #f0f2f5;padding-top:11px}.course-line+.course-line{margin-top:10px}.course-line strong{font-size:13px;font-weight:550;line-height:1.5;display:block;overflow-wrap:anywhere}.course-line small{display:block;font-size:11px;color:#949ba6;line-height:1.6;margin-top:3px;overflow-wrap:anywhere}.next-label{font-size:10px;color:#b7830a;display:block;margin-bottom:4px}.day-blocks{display:flex;flex-direction:column;gap:0}.day-block{display:flex;gap:17px;padding:15px 0;border-top:1px solid var(--line)}.day-block-label{flex:0 0 81px;font-size:13px;font-weight:550}.day-block-label small{display:block;color:#a2a8b3;font-size:10px;margin-top:5px;font-weight:400}.day-block-content{flex:1;min-width:0}.day-block-content .course-line small{color:#8c94a1}.slot-free{color:var(--green);font-size:12px}.dialog-body{max-height:85vh;overflow:auto}.rooms.detailed{align-items:start}.rooms.detailed .room{min-height:164px}.skeleton{height:96px;background:linear-gradient(100deg,#fff,#f2f4f8,#fff);background-size:300% 100%;animation:loading 1.5s infinite;border-radius:12px}@keyframes loading{to{background-position:-150% 0}}#accessPassword{width:100%;height:42px;border:1px solid #e4e8ef;border-radius:8px;padding:0 12px;margin:12px 0}#accessError{color:#d85353;font-size:12px}.empty .mode-button{margin-top:14px}
    @media(max-width:580px){.school-emblem{width:31px;height:31px}.header-actions{gap:10px}.header{margin-bottom:19px}.mode-button{height:29px;font-size:11px;padding:0 9px}.campus{font-size:11px}.periods{gap:7px}.chip{font-size:12px}.room-detail.upcoming{font-size:10px}.rooms.detailed .room{min-height:158px}.course-line strong{font-size:12px}.course-line small{font-size:10px}.building-row,.floor-row{gap:8px}.buildings{gap:3px}.building{font-size:12px}.day-block{gap:12px}}
    @media(min-width:1100px){.app{padding-top:44px}}@media(max-width:580px){.app{padding:22px 14px 32px}.header{margin:0 4px 20px}h1{font-size:21px}.brand-mark{width:28px;height:28px;padding:7px;grid-template-columns:repeat(2,5.5px);gap:3px;border-radius:8px}.campus{font-size:12px}.panel{border-radius:15px}.calendar{padding:18px 16px 13px}.date-picker{font-size:16px}.calendar-head{margin-bottom:15px;gap:6px}.week-control{font-size:11px;gap:1px}.icon-button{width:23px}.week-strip{gap:5px}.day{height:65px;border-radius:11px}.day .number{font-size:18px}.day .weekday{font-size:11px}.calendar-bottom{margin-top:8px}.filters{padding:18px 16px 17px}.periods{gap:6px}.chip{height:36px;font-size:12px;border-radius:7px}.building-row{gap:10px;margin-top:17px}.floor-row{gap:10px}.building-row .field-title,.floor-row .field-title{flex-basis:29px}.building{height:33px;font-size:13px}.field-title{font-size:12px}.floor{font-size:12px}.search{margin-top:14px}.results{margin-top:22px}.results-head{margin-bottom:12px}.rooms{grid-template-columns:repeat(2,minmax(0,1fr));gap:9px}.room{padding:18px 14px 15px;border-radius:12px}.room-name{font-size:20px}.room-detail{font-size:11px;margin-top:13px}.room-state{font-size:10px}.results-head h2{font-size:14px}.only-free{font-size:11px}}@media(prefers-reduced-motion:reduce){*{transition:none!important}}
    .svg-library{display:none}.previous-icon{transform:rotate(180deg)}

/* Date picker */
.date-picker{padding:8px 10px;background:#f5f7fc;border-radius:10px;gap:7px;font-size:15px;transition:background .15s,box-shadow .15s}
.date-picker:hover,.date-picker[aria-expanded="true"]{background:#edf2ff;box-shadow:inset 0 0 0 1px #dfe7fc}
.date-picker .calendar-icon{width:16px;height:16px;color:#6484d0}
.date-picker .date-chevron{width:12px;height:12px;color:#94a0b5;transition:transform .15s}
.date-picker[aria-expanded="true"] .date-chevron{transform:rotate(180deg)}
.date-dialog{max-width:368px;border-radius:23px;box-shadow:0 18px 80px #15275026;overflow:hidden}
.date-dialog::backdrop{background:#18263b35;backdrop-filter:blur(5px)}
.month-picker{padding:23px 22px 17px}
.month-picker-heading{display:flex;align-items:center;justify-content:space-between}
.month-picker-heading h2{margin:0;font-size:17px;font-weight:600;letter-spacing:.2px}
.month-picker-heading .close{width:27px;height:27px}
.month-navigation{display:flex;align-items:center;justify-content:space-between;margin:25px 0 16px}
.month-navigation h3{font-size:18px;font-weight:600;letter-spacing:.3px;margin:0;font-variant-numeric:tabular-nums}
.month-arrows{display:flex;gap:7px}
.month-arrows .icon-button{width:30px;height:30px;border-radius:9px;background:#f6f7fa;color:#6d7b92}
.month-arrows .icon-button:hover{background:var(--blue-soft);color:var(--blue)}
.month-weekdays,.month-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:4px}
.month-weekdays{margin-bottom:8px;color:#a0a7b3;font-size:11px;text-align:center}
.month-weekdays span{height:22px;line-height:22px}
.month-day{aspect-ratio:1;border-radius:11px;padding:0;font-size:14px;font-weight:450;font-variant-numeric:tabular-nums;position:relative;color:#4e5869}
.month-day:hover:not(:disabled){background:#f1f4fa}
.month-day.outside-month{color:#bfc5d0}
.month-day:disabled{color:#d4d8df;opacity:.55}
.month-day.is-today:not(.is-selected){color:var(--blue);background:#f0f4ff;font-weight:600}
.month-day.is-today:after{content:"";position:absolute;left:calc(50% - 1.5px);bottom:5px;width:3px;height:3px;border-radius:50%;background:var(--blue)}
.month-day.is-selected,.month-day.is-selected:hover{background:var(--blue);color:white;font-weight:600;box-shadow:0 3px 8px #376bf526}
.month-day.is-selected:after{background:white}
.month-picker-footer{border-top:1px solid #f0f2f6;margin-top:18px;padding-top:13px;display:flex;align-items:center;justify-content:space-between;min-height:39px}
.month-picker-footer>span{font-size:11px;color:#9ba3b0}
.picker-today{height:29px;border-radius:8px;background:var(--blue-soft);color:var(--blue);font-size:12px;padding:0 14px}
@media(max-width:580px){.date-picker{font-size:14px;padding:8px 9px;gap:6px}.date-dialog{width:calc(100% - 40px)}.month-picker{padding:22px 20px 16px}.month-navigation{margin-top:23px}.month-day{font-size:14px}.header h1{font-size:20px;white-space:nowrap}.header-actions{gap:8px}}
@media(max-width:360px){.date-picker{padding:8px 7px}.date-picker .calendar-icon{display:none}.header h1{font-size:18px}.header .brand{gap:8px}.header-actions{gap:6px}.header-actions .campus{font-size:10px}}
