/* Timetable v4 final layout. The document structure in index.html already matches this shell. */
:root{--tt-bg:#f4f7fb;--tt-surface:rgba(255,255,255,.9);--tt-text:#172033;--tt-muted:#7b8798;--tt-line:#dfe6ef;--tt-line-soft:#edf1f5;--tt-accent:#e85f5b;--tt-accent-soft:#fff4f3;--tt-shadow:0 18px 50px rgba(24,39,75,.10)}
html,body{min-height:100%;overflow-y:auto;scrollbar-width:none;-ms-overflow-style:none;background:linear-gradient(180deg,#f9fbfd 0%,var(--tt-bg) 45%,#eef3f8 100%)}
html::-webkit-scrollbar,body::-webkit-scrollbar{display:none;width:0;height:0}
body{padding:22px;color:var(--tt-text)}
.timetable-v4-main{max-width:1360px;min-height:calc(100dvh - 44px);margin:0 auto;padding:0 14px 14px;overflow:hidden;border:1px solid rgba(213,222,232,.9);border-radius:28px;background:var(--tt-surface);box-shadow:var(--tt-shadow);backdrop-filter:blur(20px)}

/* Header */
.timetable-v4-top{position:relative;z-index:40;display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:16px;margin:0 -14px;padding:15px 20px 10px;border:0;border-radius:28px 28px 0 0;background:transparent}
.timetable-v4-top .heading{display:flex;align-items:center;gap:10px;min-width:0;margin:0}
.timetable-v4-top .heading::before{display:none;content:none}
.timetable-v4-top .account-entry-link{display:inline-grid;width:38px;height:38px;min-width:38px;border:1px solid var(--tt-line);border-radius:12px;background:#fff;color:var(--cike-brand);box-shadow:0 3px 10px rgba(31,48,76,.05)}
.timetable-v4-top .account-entry-link::before{width:20px;height:20px}.timetable-v4-top .account-entry-link:hover{background:#fbfcfe;border-color:#cbd6e2;color:var(--cike-brand-hover)}
.timetable-v4-top h1{margin:0}
.timetable-v4-top .top-actions{display:flex;align-items:center;gap:7px;width:auto;overflow:visible}
.timetable-v4-top .top-actions>*{display:inline-flex;align-items:center;justify-content:center;height:39px;min-height:39px;padding:0 12px;border:1px solid var(--tt-line);border-radius:12px;background:rgba(255,255,255,.84);color:var(--tt-text);box-shadow:none;text-decoration:none;transition:.16s ease}
.timetable-v4-top .top-actions>*:hover{background:#fff;border-color:#cbd6e2;transform:translateY(-1px)}
.timetable-v4-top #open-query,.timetable-v4-top .map-action{min-width:86px;gap:7px;font-size:0;font-weight:700}
.timetable-v4-top #open-query::before{content:'＋';display:inline-grid;place-items:center;width:17px;height:17px;flex:0 0 17px;font-size:16px;line-height:1;font-weight:700;color:currentColor}
.timetable-v4-top #open-query::after{content:'课程'}
.timetable-v4-top .map-action::before{content:'';display:block;width:17px;height:17px;flex:0 0 17px;background:currentColor;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='m3.5 6.5 5-2.5 7 2.5 5-2.5v13.5l-5 2.5-7-2.5-5 2.5Z' fill='none' stroke='black' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M8.5 4v13.5M15.5 6.5V20' fill='none' stroke='black' stroke-width='1.8' stroke-linecap='round'/%3E%3C/svg%3E") center/contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='m3.5 6.5 5-2.5 7 2.5 5-2.5v13.5l-5 2.5-7-2.5-5 2.5Z' fill='none' stroke='black' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M8.5 4v13.5M15.5 6.5V20' fill='none' stroke='black' stroke-width='1.8' stroke-linecap='round'/%3E%3C/svg%3E") center/contain no-repeat}
.timetable-v4-top .map-action::after{content:'探索'}
.timetable-v4-top #open-query::after,.timetable-v4-top .map-action::after{display:inline;font-size:14px;line-height:1;font-weight:700;letter-spacing:0}

/* Week navigation */
.timetable-v4-weekbar{display:block;width:100%;margin:0;padding:0 20px 11px;overflow:visible}
.timetable-v4-weekbar>.timetable-semester-source{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0);clip-path:inset(50%);white-space:nowrap}
.timetable-v4-week-control{display:grid;grid-template-columns:42px minmax(0,1fr) 42px;align-items:center;gap:10px;width:100%}
.timetable-v4-week-control>.timetable-v4-nav{width:39px;height:39px;min-height:39px;padding:0;border:1px solid var(--tt-line);border-radius:12px;background:rgba(255,255,255,.84);color:var(--tt-text);font-size:20px}.timetable-v4-week-control>.timetable-v4-nav:last-child{justify-self:end}
.timetable-v4-week-center{display:flex;align-items:center;justify-content:center;gap:9px;min-width:0}
.timetable-v4-expand,.timetable-v4-today{flex:0 0 auto;min-width:48px;height:31px;min-height:31px;margin:0;padding:0 10px;border:1px solid var(--tt-line);border-radius:999px;background:#fff;color:#5e6c7f;font-size:11px;font-weight:500}
.timetable-v4-expand:hover,.timetable-v4-today:hover{background:#fbfcfe;border-color:#cbd6e2;color:#405064}
.timetable-v4-calendar{position:static;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;width:auto;min-width:148px;height:auto;min-height:39px;margin:0;padding:0 8px;overflow:visible;border:0;border-radius:10px;background:transparent;color:var(--tt-text);box-shadow:none;white-space:nowrap}
.timetable-v4-calendar:hover{background:rgba(244,247,250,.78)}.timetable-v4-calendar strong{display:block;font-size:16px;line-height:1.1;font-weight:700;color:var(--tt-text)}.timetable-v4-calendar span{display:block;font-size:11px;line-height:1.1;font-weight:400;color:var(--tt-muted)}

/* Timetable */
.timetable-v4-frame{padding:0 14px}.timetable-v4-frame .schedule-scroll{overflow:auto;max-height:none;border:1px solid var(--tt-line);border-radius:20px;background:#fff;min-height:380px;scrollbar-width:none;-ms-overflow-style:none;overscroll-behavior-x:contain}.timetable-v4-frame .schedule-scroll::-webkit-scrollbar{display:none;width:0;height:0}
.timetable-v4-frame .schedule{--label:72px;display:grid;grid-template-columns:var(--label) repeat(7,minmax(136px,1fr));min-width:1010px;position:relative;isolation:isolate;background:#fff}
.timetable-v4-frame .grid-cell{border-right:1px solid var(--tt-line-soft);border-bottom:1px solid var(--tt-line-soft);background:#fff}.timetable-v4-frame .grid-cell.day-head{position:sticky;top:0;z-index:5;background:rgba(255,255,255,.97);backdrop-filter:blur(12px);font-size:13px;font-weight:700}.timetable-v4-frame .corner{left:0;z-index:7!important;color:#8a96a6;font-size:10px}
.timetable-v4-frame .day-button{width:100%;height:100%;min-height:0;padding:0;border:0;border-radius:0;background:transparent;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px}.timetable-v4-frame .day-button span{font-size:13px}.timetable-v4-frame .day-button small{font-size:10px;color:var(--tt-muted);font-weight:400}.timetable-v4-frame .day-head.selected-day{background:linear-gradient(180deg,var(--tt-accent-soft),#fff)}.timetable-v4-frame .day-head.selected-day .day-button span{color:var(--tt-accent)}
.timetable-v4-frame .period{position:sticky;left:0;z-index:4;background:#fbfcfe;gap:2px}.timetable-v4-frame .period b,.timetable-v4-frame .period-toggle{font-size:10px;color:#5f6d7f;font-weight:700}.timetable-v4-frame .period small{font-size:9px;color:#99a4b2;line-height:1.1;font-variant-numeric:tabular-nums}.timetable-v4-frame .period-toggle{width:100%;height:100%;min-height:0;padding:0;border:0;border-radius:0;background:transparent}.timetable-v4-frame .break-before{border-top:0;box-shadow:inset 0 4px 0 #f6f8fb}.timetable-v4-frame .selected-column{background:#fff}
.timetable-v4-frame .slot-query{opacity:0;border:0;border-radius:0;background:transparent}.timetable-v4-frame .grid-cell:hover .slot-query{opacity:1;background:rgba(244,247,250,.58)}.timetable-v4-frame .slot-query-label{font-size:0}.timetable-v4-frame .slot-query-label::after{content:'＋';font-size:14px;color:#aab4c0;position:absolute;right:7px;bottom:5px}
.timetable-v4-frame .event{z-index:2;margin:4px;padding:6px 7px;min-height:0;border:1px solid var(--course-border);border-radius:12px;background:var(--course-bg);box-shadow:0 6px 12px rgba(31,48,76,.05);line-height:1.22;gap:2px;width:calc((100% - 8px)/var(--lanes) - 2px);margin-left:calc(4px + (100% - 8px)*var(--lane)/var(--lanes));transition:.16s ease}.timetable-v4-frame .event:hover{background:var(--course-bg);filter:none;border-color:var(--course-border);box-shadow:0 9px 17px rgba(31,48,76,.10);transform:translateY(-1px)}.timetable-v4-frame .event strong{font-size:11.5px;line-height:1.22;font-weight:700;-webkit-line-clamp:2}.timetable-v4-frame .event .room{font-size:10px;color:#59677a}.timetable-v4-frame .event .event-meta{font-size:9px;color:#8794a5;margin-top:auto}.timetable-v4-frame .event.single{padding:4px 6px}.timetable-v4-frame .event.single strong{font-size:10.5px}.timetable-v4-frame .event.conflict{border-style:dashed}
.timetable-v4-frame .now-line{z-index:6!important;height:2px!important;background:var(--tt-accent)!important;pointer-events:none}.timetable-v4-frame .now-line::before{content:'';position:absolute;width:8px;height:8px;border-radius:50%;background:var(--tt-accent);left:-3px;top:-3px}.timetable-v4-frame .now-line-time{right:3px!important;top:-15px!important;background:#fff!important;color:var(--tt-accent)!important;font-size:9px!important;font-weight:700!important;padding:1px 4px!important;border-radius:999px!important}

/* Metadata */
.pending{margin:10px 6px 0;border-color:var(--tt-line);border-radius:14px;background:#fff}.timetable-v4-meta{padding:9px 20px 15px;color:#8b96a5;font-size:10.5px}.timetable-v4-meta .timetable-statistics-row{display:flex;align-items:center;width:100%;min-width:0;margin:0 0 7px;padding:0;border:0;color:inherit;white-space:nowrap;overflow-x:auto;scrollbar-width:none}.timetable-v4-meta .timetable-statistics-row::-webkit-scrollbar{display:none}.timetable-v4-meta .statistics{display:flex;align-items:baseline;gap:4px;width:max-content;margin:0;color:inherit;font-size:10.5px}.timetable-v4-meta .count{margin:0;color:inherit;font-size:inherit}.timetable-v4-meta .duration{min-height:24px;padding:0 2px;border:0;background:transparent;color:#7f8a99;font-size:inherit;text-decoration:none}.timetable-v4-meta .duration:hover{background:transparent;color:var(--cike-text)}.timetable-v4-meta footer{display:flex;justify-content:space-between;gap:12px;margin:0;padding:0;color:#a2abb6;font-size:10.5px}.timetable-v4-meta footer a{color:inherit}
#error{margin:0 14px 10px}.hint{display:none}dialog{border-color:var(--tt-line);border-radius:20px;box-shadow:0 22px 60px rgba(24,39,75,.20)}

@media(max-width:760px){html,body{background:#fff}body{padding:0}.timetable-v4-main{min-height:100dvh;margin:0;padding:0 0 12px;border:0;border-radius:0;box-shadow:none;background:#fff}.timetable-v4-top{position:sticky;top:0;z-index:30;margin:0;padding:11px 12px 9px;border-bottom:1px solid rgba(232,236,241,.85);border-radius:0;background:rgba(255,255,255,.97);backdrop-filter:blur(12px)}.timetable-v4-top .heading{gap:8px}.timetable-v4-top .account-entry-link{width:34px;height:34px;min-width:34px;border-radius:11px}.timetable-v4-top .account-entry-link::before{width:18px;height:18px}.timetable-v4-top .top-actions{gap:5px}.timetable-v4-top #open-query,.timetable-v4-top .map-action,.timetable-v4-top .timetable-immersive-button{width:38px;min-width:38px;height:38px;padding:0;gap:0}.timetable-v4-top #open-query::after,.timetable-v4-top .map-action::after{display:none}.timetable-v4-weekbar{padding:0 11px 9px}.timetable-v4-week-control{grid-template-columns:36px minmax(0,1fr) 36px;gap:5px}.timetable-v4-week-control>.timetable-v4-nav{width:36px;height:36px;min-height:36px}.timetable-v4-week-center{gap:6px}.timetable-v4-expand,.timetable-v4-today{min-width:42px;height:29px;min-height:29px;padding:0 8px;font-size:10px}.timetable-v4-calendar{min-width:112px;min-height:38px;padding:0 4px}.timetable-v4-calendar strong{font-size:14px}.timetable-v4-calendar span{font-size:10px}.timetable-v4-frame{padding:0}.timetable-v4-frame .schedule-scroll{border-left:0;border-right:0;border-radius:0;min-height:340px;max-height:none;overflow-y:visible}.timetable-v4-frame .schedule{--label:52px;grid-template-columns:var(--label) repeat(7,111px);min-width:829px}.timetable-v4-frame .event{padding:5px}.timetable-v4-frame .event strong{font-size:10.5px}.timetable-v4-frame .event .room{font-size:9.5px}.timetable-v4-frame .event .event-meta{display:none}.timetable-v4-meta{padding:8px 12px 13px}.timetable-v4-meta footer{display:none}.schedule[data-day-density="compact"] .event,.schedule[data-day-density="tight"] .event{padding:5px;gap:2px;line-height:1.2}.schedule[data-day-density="compact"] .event strong,.schedule[data-day-density="tight"] .event strong{font-size:10.5px;line-height:1.2;-webkit-line-clamp:2}.schedule[data-day-density="compact"] .event .room{font-size:9.5px}.schedule[data-day-density="compact"] .event .event-meta,.schedule[data-day-density="tight"] .event .event-meta{display:none}.schedule[data-day-density="tight"] .event{padding:4px;margin-left:calc(2px + (100% - 4px)*var(--lane)/var(--lanes));margin-right:2px;width:calc((100% - 4px)/var(--lanes) - 2px)}.schedule[data-day-density="tight"] .event strong{font-size:10px;line-height:1.15}.schedule[data-day-density="tight"] .event .room,.schedule[data-day-density="tight"] .event .conflict-label{display:none}}
