:root{--font-display: "Songti SC", "STSong", "Noto Serif CJK SC", "Source Han Serif SC", "SimSun", serif;--font-body: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif;--maxw: 1440px;--space-1: .25rem;--space-2: .5rem;--space-3: .75rem;--space-4: 1rem;--space-5: 1.5rem;--space-6: 2rem;--space-8: 3rem;--radius-pill: 999px;--radius-control: 9px;--radius-badge: 7px;--num: tabular-nums;--cat-sat: #2f6f4f;--cat-act: #9a5a1c;--cat-ap: #a12f6d;--cat-toefl: #1f5f8a;--cat-ielts-paper: #0f7a6a;--cat-ielts-cd: #5a5fb0;--cat-cie: #7a3ea0;--cat-edexcel: #b0562a;--cat-aqa: #5f7a2e;--cat-competition: #b23a3a}[data-theme=jade]{--bg: #eaf1ec;--bg-accent: #d9e7dc;--card-bg: #ffffff;--card-bg-alt: #f4f8f4;--text: #17281f;--text-muted: #5c7266;--heading: #0f5f45;--accent: #0f6b4f;--accent-soft: #dcefe4;--weekend: #b23a2a;--weekend-soft: #f7e7e2;--today-bg: #0f6b4f;--today-text: #ffffff;--today-ring: #bfe3d0;--lunar: #86a094;--term: #9a6a12;--term-soft: #f6ead0;--holiday: #b31d12;--holiday-soft: #fbe6e1;--holiday-border: #f0c4bb;--workday: #2f5c8a;--workday-soft: #e4eef7;--workday-border: #c4d9ec;--border: #d3e0d7;--border-strong: #b9ccbf;--shadow: 0 1px 2px rgba(22, 60, 45, .06), 0 8px 24px rgba(22, 60, 45, .08);--radius: 14px;--focus: #0f6b4f;--dial-track: #d8e6db;--dial-tick: #9db6a6;--seal: #b31d12;--exam-bg: #eef3ef;--exam-text: #244034;--exam-border: #c2d5c8;--exam-more-bg: #0f6b4f;--exam-more-text: #ffffff;--exam-chip-on: #dcefe4}[data-theme=ink]{--bg: #e5e7e4;--bg-accent: #d6d9d5;--card-bg: #f6f7f4;--card-bg-alt: #eef0ea;--text: #1b1c1a;--text-muted: #565a54;--heading: #1b1c1a;--accent: #c0271d;--accent-soft: #f0dcd7;--weekend: #a83c2f;--weekend-soft: #eaddd7;--today-bg: #1f1f1d;--today-text: #f6f7f4;--today-ring: #c9b7b2;--lunar: #8b8f88;--term: #7a5320;--term-soft: #ece0cd;--holiday: #c0271d;--holiday-soft: #f3ded9;--holiday-border: #e0b6ad;--workday: #445a66;--workday-soft: #dfe6e9;--workday-border: #bfccd1;--border: #cfd1cc;--border-strong: #b0b3ac;--shadow: 0 1px 2px rgba(20, 20, 18, .07), 0 10px 26px rgba(20, 20, 18, .1);--radius: 6px;--focus: #c0271d;--dial-track: #d3d5d0;--dial-tick: #9a9e96;--seal: #c0271d;--exam-bg: #edeee9;--exam-text: #2a2b28;--exam-border: #c8cac2;--exam-more-bg: #1f1f1d;--exam-more-text: #f6f7f4;--exam-chip-on: #e6e2d8}[data-theme=starry]{--bg: #0e1526;--bg-accent: #16203a;--card-bg: #161f36;--card-bg-alt: #1c2743;--text: #e8ecf5;--text-muted: #9aa6c0;--heading: #f0d9a0;--accent: #d8b45a;--accent-soft: #2a3654;--weekend: #e79a9a;--weekend-soft: #33222b;--today-bg: #d8b45a;--today-text: #12182a;--today-ring: #5a4a24;--lunar: #8592b0;--term: #7fd8a6;--term-soft: #123528;--holiday: #ff8f7d;--holiday-soft: #3a1f22;--holiday-border: #703c39;--workday: #6fcbe6;--workday-soft: #113040;--workday-border: #2c5568;--border: #29344f;--border-strong: #3a4a6e;--shadow: 0 1px 2px rgba(0, 0, 0, .4), 0 14px 34px rgba(0, 0, 0, .45);--radius: 12px;--focus: #f0d9a0;--dial-track: #26304c;--dial-tick: #4a597e;--seal: #ff8f7d;--exam-bg: #1f2a45;--exam-text: #dfe6f4;--exam-border: #3a4a6e;--exam-more-bg: #d8b45a;--exam-more-text: #12182a;--exam-chip-on: #2a3654}[data-theme=porcelain]{--bg: #eef1f6;--bg-accent: #dde5f0;--card-bg: #ffffff;--card-bg-alt: #f5f8fc;--text: #14213a;--text-muted: #53617d;--heading: #1f4e9c;--accent: #1f4e9c;--accent-soft: #e4ecf8;--weekend: #b23b3b;--weekend-soft: #f7e6e6;--today-bg: #1f4e9c;--today-text: #ffffff;--today-ring: #bcd2f0;--lunar: #7a8598;--term: #a9761a;--term-soft: #f6ecd6;--holiday: #c62828;--holiday-soft: #fbe4e2;--holiday-border: #f1bdb8;--workday: #0e7490;--workday-soft: #dceef2;--workday-border: #aad7e1;--border: #d3dae6;--border-strong: #b7c2d4;--shadow: 0 1px 2px rgba(20, 33, 58, .06), 0 8px 22px rgba(20, 33, 58, .08);--radius: 8px;--focus: #1f4e9c;--dial-track: #dbe3f0;--dial-tick: #9fb2d0;--seal: #c62828;--exam-bg: #eef2f8;--exam-text: #1c2c4a;--exam-border: #c3d1e6;--exam-more-bg: #1f4e9c;--exam-more-text: #ffffff;--exam-chip-on: #e0e9f7}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;min-height:100vh;font-family:var(--font-body);background-color:var(--bg);background-image:radial-gradient(circle at 8% -12%,var(--bg-accent) 0,transparent 38%),radial-gradient(circle at 100% -4%,var(--bg-accent) 0,transparent 30%);background-repeat:no-repeat;background-attachment:fixed;color:var(--text);line-height:1.6;letter-spacing:.006em;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility;font-feature-settings:"kern" 1,"liga" 1;transition:background-color .28s ease,color .28s ease}.skip-link{position:absolute;left:-9999px;top:0;background:var(--accent);color:#fff;padding:.5rem 1rem;border-radius:0 0 8px;z-index:100}.skip-link:focus{left:0}.visually-hidden{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}:focus-visible{outline:3px solid var(--focus);outline-offset:2px}.site-header{max-width:var(--maxw);margin:0 auto;padding:2.25rem 1.5rem .5rem}.header-inner{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:1.25rem 2rem;padding-bottom:1.25rem;border-bottom:1px solid var(--border)}.nameplate{display:flex;align-items:center;gap:1.15rem;min-width:0}.nameplate-dial{flex:none;width:92px;height:92px}.nameplate-dial svg{display:block;width:100%;height:100%}.eyebrow{margin:0 0 .35rem;font-size:.7rem;letter-spacing:.44em;text-indent:.44em;text-transform:none;color:var(--accent);font-weight:700}.site-header h1{margin:0 0 .3rem;font-family:var(--font-display);font-weight:700;font-size:clamp(2rem,4.6vw,3.05rem);letter-spacing:.01em;line-height:1.02;color:var(--heading);text-wrap:balance}.nameplate-cn{letter-spacing:.16em}.subtitle{margin:0;max-width:46ch;color:var(--text-muted);font-size:.84rem;line-height:1.55;text-wrap:pretty}.controls{display:flex;flex-direction:column;align-items:flex-end;gap:.7rem}.toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:.6rem}.month-jump{display:inline-flex;align-items:center;gap:.4rem;font-size:.82rem;color:var(--text-muted)}.month-jump select{font:inherit;padding:.4rem .7rem;border-radius:8px;border:1px solid var(--border-strong);background:var(--card-bg);color:var(--text);cursor:pointer}.btn{font:inherit;padding:.4rem .95rem;border:1px solid var(--border-strong);border-radius:8px;background:var(--card-bg);color:var(--text);cursor:pointer;transition:background .18s,border-color .18s}.btn:hover{background:var(--accent-soft);border-color:var(--accent)}.year-nav{display:inline-flex;align-items:center;gap:.35rem}.year-nav-btn{padding:.4rem .7rem;font-variant-numeric:tabular-nums;line-height:1}.year-nav-btn:disabled{opacity:.4;cursor:not-allowed}.year-nav-btn:disabled:hover{background:var(--card-bg);border-color:var(--border-strong)}.year-select select{font:inherit;padding:.4rem .7rem;border-radius:8px;border:1px solid var(--border-strong);background:var(--card-bg);color:var(--text);cursor:pointer;font-variant-numeric:tabular-nums}.theme-field{display:flex;align-items:center;gap:.55rem}.theme-label{font-size:.82rem;color:var(--text-muted);font-weight:600}.theme-switcher{display:inline-flex;padding:3px;gap:2px;background:var(--card-bg-alt);border:1px solid var(--border);border-radius:999px}.theme-option{display:inline-flex;align-items:center;gap:.4rem;font:inherit;font-size:.8rem;padding:.34rem .7rem;border:1px solid transparent;border-radius:999px;background:transparent;color:var(--text-muted);cursor:pointer;white-space:nowrap;transition:background .18s,color .18s,border-color .18s}.theme-option:hover{color:var(--text)}.theme-option[aria-checked=true]{background:var(--card-bg);color:var(--text);border-color:var(--border-strong);box-shadow:0 1px 2px #0000001f;font-weight:600}.theme-swatch{width:.85rem;height:.85rem;border-radius:50%;border:1px solid rgba(0,0,0,.18);flex:none}.theme-option[data-theme=jade] .theme-swatch{background:linear-gradient(135deg,#0f6b4f 55%,#b31d12 55%)}.theme-option[data-theme=ink] .theme-swatch{background:linear-gradient(135deg,#2b2b28 55%,#c0271d 55%)}.theme-option[data-theme=starry] .theme-swatch{background:linear-gradient(135deg,#16203a 50%,#d8b45a 50%);border-color:#ffffff4d}.theme-option[data-theme=porcelain] .theme-swatch{background:linear-gradient(135deg,#fff 50%,#1f4e9c 50%)}.calendar-legend{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem 1.1rem;max-width:var(--maxw);margin:.9rem auto 0;padding:0 1.25rem;color:var(--text-muted);font-size:.78rem}.legend-item{display:inline-flex;align-items:center;gap:.35rem;white-space:nowrap}.legend-source{margin-left:auto}.legend-source a{color:var(--accent);text-underline-offset:.15em}.legend-lunar{color:var(--lunar);font-size:.7rem}.term-demo{color:var(--term);background:var(--term-soft);font-weight:700;padding:0 .3em;border-radius:999px}.legend-today{display:inline-flex;align-items:center;justify-content:center;width:1.2rem;height:1.2rem;border-radius:50%;background:var(--today-bg);color:var(--today-text);font-weight:700;font-size:.68rem}.legend-toggles{display:inline-flex;flex-wrap:wrap;align-items:center;gap:.4rem;margin-right:.35rem}.legend-toggles-label{font-weight:600;color:var(--text-muted)}.legend-chip{display:inline-flex;align-items:center;gap:.35rem;font:inherit;font-size:.76rem;padding:.24rem .6rem;border:1px solid var(--border-strong);border-radius:var(--radius-pill);background:var(--card-bg);color:var(--text-muted);cursor:pointer;white-space:nowrap;transition:background .16s,color .16s,border-color .16s}.legend-chip .legend-chip-dot{width:.55rem;height:.55rem;border-radius:50%;border:1px solid var(--border-strong);background:transparent;flex:none;transition:background .16s,border-color .16s}.legend-chip:hover{color:var(--text);border-color:var(--accent)}.legend-chip[aria-checked=true]{background:var(--accent-soft);color:var(--text);border-color:var(--accent);font-weight:600}.legend-chip[aria-checked=true] .legend-chip-dot{background:var(--accent);border-color:var(--accent)}.calendar-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,300px),1fr));gap:1.5rem;max-width:var(--maxw);margin:0 auto;padding:1.25rem 1.5rem 3.5rem}@media(max-width:480px){.calendar-grid{grid-template-columns:minmax(0,1fr)}}@media(max-width:760px){.header-inner{align-items:flex-start}.controls{align-items:stretch;width:100%}.toolbar{justify-content:space-between}.theme-field{flex-wrap:wrap;align-items:flex-start}.theme-switcher{flex-wrap:wrap;border-radius:14px}.legend-source{margin-left:0}}@media(max-width:420px){.nameplate-dial{width:72px;height:72px}.theme-option{flex:1 1 auto;justify-content:center}.exam-bar-lead,.exam-filter{flex:1 1 100%}.exam-actions{margin-left:0}}.month-card{position:relative;min-width:0;background:var(--card-bg);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);padding:1.15rem 1.15rem 1.35rem;scroll-margin-top:1rem;transition:box-shadow .2s ease,border-color .2s ease}.month-card h2{margin:0 0 .85rem;padding-bottom:.7rem;text-align:center;font-family:var(--font-display);font-size:1.24rem;font-weight:700;letter-spacing:.05em;color:var(--heading);border-bottom:1px solid var(--border)}.month-card h2:focus-visible{outline:3px solid var(--focus);outline-offset:4px}.month-card table{width:100%;border-collapse:collapse;table-layout:fixed}.month-card th{font-size:.75rem;font-weight:600;color:var(--text-muted);padding:.35rem 0;border-bottom:1px solid var(--border)}.month-card th.weekend{color:var(--weekend)}.month-card td{text-align:center;padding:0;height:4.9rem;font-size:.9rem;font-variant-numeric:var(--num);vertical-align:top}.month-card .day{display:flex;flex-direction:column;align-items:center;gap:2px;min-height:4.8rem;padding:.3rem 1px 3px;border:1px solid transparent;border-radius:.6rem;box-sizing:border-box}.month-card .date-num{display:inline-flex;align-items:center;justify-content:center;width:1.75rem;height:1.75rem;border-radius:50%;line-height:1;font-weight:600;font-variant-numeric:var(--num);transition:background-color .18s ease,color .18s ease}.month-card .lunar{font-size:.62rem;line-height:1.25;color:var(--lunar);letter-spacing:.01em;white-space:nowrap}.month-card .lunar.term{color:var(--term);background:var(--term-soft);font-weight:700;padding:0 .25em;border-radius:999px}.holiday-badge{display:inline-flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;min-width:1.25rem;min-height:.8rem;padding:.05rem .28em;border-radius:6px;font-size:.54rem;font-weight:700;line-height:1.05;white-space:nowrap}.month-card .holiday-badge{min-height:1rem;padding:.1rem .2em;font-size:.7rem}.holiday-badge .badge-name{font-size:1em;letter-spacing:.02em}.holiday-badge .badge-tag{display:inline-block;margin-top:1px;padding:0 .32em;font-size:.82em;border-radius:999px;line-height:1.25}.holiday-marker{color:var(--holiday);background:var(--holiday-soft)}.holiday-marker .badge-tag{color:var(--card-bg);background:var(--holiday)}.workday-marker{color:var(--workday);background:var(--workday-soft)}.workday-marker .badge-tag{color:var(--card-bg);background:var(--workday)}.holidays-error{max-width:var(--maxw);margin:.6rem auto 0;padding:.5rem 1rem;color:var(--holiday);background:var(--holiday-soft);border:1px solid var(--holiday-border);border-radius:8px;text-align:center;font-size:.85rem;font-weight:600}.holidays-error[hidden]{display:none}[data-exam-cat=sat]{--cat: var(--cat-sat)}[data-exam-cat=act]{--cat: var(--cat-act)}[data-exam-cat=ap]{--cat: var(--cat-ap)}[data-exam-cat=toefl]{--cat: var(--cat-toefl)}[data-exam-cat=ielts-paper]{--cat: var(--cat-ielts-paper)}[data-exam-cat=ielts-cd]{--cat: var(--cat-ielts-cd)}[data-exam-cat=cie]{--cat: var(--cat-cie)}[data-exam-cat=edexcel]{--cat: var(--cat-edexcel)}[data-exam-cat=aqa]{--cat: var(--cat-aqa)}[data-exam-cat=competition]{--cat: var(--cat-competition)}.exam-bar{max-width:var(--maxw);margin:.9rem auto 0;padding:0 1.25rem}.exam-bar-inner{display:flex;flex-wrap:wrap;align-items:center;gap:.7rem 1.15rem;padding:.9rem 1.05rem;background:var(--card-bg-alt);border:1px solid var(--border);border-radius:14px}.exam-bar-lead{min-width:0;margin-right:.25rem}.exam-bar-title{margin:0;font-family:var(--font-display);font-size:1rem;font-weight:700;letter-spacing:.06em;color:var(--heading)}.exam-bar-sub{margin:.1rem 0 0;font-size:.72rem;color:var(--text-muted)}.exam-filter{display:flex;flex-wrap:wrap;align-items:center;gap:.4rem;min-width:0;flex:1 1 auto}.exam-chip{display:inline-flex;align-items:center;gap:.4rem;font:inherit;font-size:.78rem;padding:.3rem .62rem;border:1px solid var(--border-strong);border-radius:999px;background:var(--card-bg);color:var(--text-muted);cursor:pointer;white-space:nowrap;transition:background .16s,color .16s,border-color .16s}.exam-chip .exam-dot{width:.62rem;height:.62rem;border-radius:50%;background:var(--cat, var(--text-muted));flex:none;opacity:.45;transition:opacity .16s}.exam-chip:hover{color:var(--text);border-color:var(--cat, var(--border-strong))}.exam-chip[aria-checked=true]{background:var(--exam-chip-on);color:var(--text);border-color:var(--cat, var(--border-strong));font-weight:600}.exam-chip[aria-checked=true] .exam-dot{opacity:1}.exam-chip-note{font-size:.66rem;font-weight:400;color:var(--text-muted);letter-spacing:.02em}.exam-actions{display:inline-flex;gap:.35rem;margin-left:auto}.exam-mini-btn{font:inherit;font-size:.76rem;padding:.3rem .7rem;border:1px solid var(--border-strong);border-radius:999px;background:var(--card-bg);color:var(--text);cursor:pointer}.exam-mini-btn:hover{background:var(--accent-soft);border-color:var(--accent)}.exams-error{margin:.6rem 0 0;padding:.5rem 1rem;color:var(--holiday);background:var(--holiday-soft);border:1px solid var(--holiday-border);border-radius:8px;text-align:center;font-size:.85rem;font-weight:600}.exams-error[hidden]{display:none}.exam-cell-btn{display:inline-flex;flex-wrap:wrap;justify-content:center;align-items:center;gap:2px;margin-top:1px;padding:1px;max-width:100%;border:1px solid transparent;border-radius:7px;background:transparent;cursor:pointer;font:inherit}.exam-cell-btn:hover{border-color:var(--border-strong)}.exam-cell-btn[hidden]{display:none}.exam-token{display:inline-flex;align-items:center;gap:3px;max-width:100%;padding:0 .34em;border:1px solid var(--exam-border);border-radius:5px;background:var(--exam-bg);color:var(--exam-text);font-size:.58rem;font-weight:700;line-height:1.55;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.exam-token:before{content:"";flex:none;width:.34em;height:.34em;border-radius:50%;background:var(--cat, var(--exam-text))}.exam-more{display:inline-flex;align-items:center;padding:0 .3em;border-radius:4px;background:var(--exam-more-bg);color:var(--exam-more-text);font-size:.56rem;font-weight:700;line-height:1.5}.exam-detail{position:fixed;top:0;right:0;bottom:0;left:0;z-index:120;display:flex;align-items:center;justify-content:center;padding:1rem}.exam-detail[hidden]{display:none}.exam-detail-backdrop{position:absolute;top:0;right:0;bottom:0;left:0;background:#0c120c80}.exam-detail-panel{position:relative;width:min(30rem,100%);max-height:min(80vh,640px);overflow-y:auto;background:var(--card-bg);color:var(--text);border:1px solid var(--border-strong);border-radius:14px;box-shadow:var(--shadow);padding:1rem 1.15rem 1.2rem}.exam-detail-head{display:flex;align-items:baseline;justify-content:space-between;gap:.6rem;margin-bottom:.4rem}.exam-detail-title{margin:0;font-family:var(--font-display);font-size:1.1rem;font-weight:700;color:var(--heading)}.exam-detail-close{flex:none;width:1.9rem;height:1.9rem;border:1px solid var(--border-strong);border-radius:50%;background:var(--card-bg-alt);color:var(--text);font-size:1.1rem;line-height:1;cursor:pointer}.exam-detail-close:hover{background:var(--accent-soft);border-color:var(--accent)}.exam-detail-body{display:flex;flex-direction:column;gap:.7rem}.exam-entry{border:1px solid var(--border);border-left:3px solid var(--cat, var(--border-strong));border-radius:10px;padding:.6rem .75rem;background:var(--card-bg-alt)}.exam-entry-head{display:flex;align-items:center;gap:.45rem;flex-wrap:wrap}.exam-entry-tag{font-size:.66rem;font-weight:700;padding:.05rem .4em;border-radius:999px;background:var(--exam-bg);color:var(--exam-text);border:1px solid var(--exam-border)}.exam-entry-name{font-weight:700;font-size:.9rem}.exam-entry-when{font-size:.78rem;color:var(--text-muted);font-variant-numeric:tabular-nums}.exam-entry-title{margin:.3rem 0 .2rem;font-size:.86rem;font-weight:600}.exam-entry ul{margin:.2rem 0 0;padding-left:1.1rem}.exam-entry li{font-size:.8rem;line-height:1.5}.exam-seg{margin-top:.3rem;font-size:.8rem}.exam-seg-label{font-weight:700;color:var(--accent)}.exam-entry-applies{margin:.45rem 0 0;font-size:.74rem;line-height:1.5;color:var(--text-muted)}.exam-entry-sources{margin:.4rem 0 0;display:flex;flex-wrap:wrap;gap:.2rem .7rem}.exam-entry-sources a{font-size:.74rem;color:var(--accent);text-underline-offset:.15em;word-break:break-all}.exam-season-open{margin:.55rem 0 0;font:inherit;font-size:.76rem;font-weight:600;padding:.32rem .7rem;border:1px solid var(--cat, var(--border-strong));border-radius:999px;background:var(--exam-bg);color:var(--exam-text);cursor:pointer;transition:background .16s,border-color .16s}.exam-season-open:hover{background:var(--accent-soft);border-color:var(--accent)}.exam-season-detail{position:fixed;top:0;right:0;bottom:0;left:0;z-index:130;display:flex;justify-content:flex-end}.exam-season-detail[hidden]{display:none}.exam-season-backdrop{position:absolute;top:0;right:0;bottom:0;left:0;background:#0c120c80}.exam-season-panel{position:relative;display:flex;flex-direction:column;width:min(72rem,100%);min-width:0;max-width:100%;height:100%;background:var(--card-bg);color:var(--text);border-left:1px solid var(--border-strong);box-shadow:var(--shadow);padding:1rem 1.15rem 1.2rem;overflow-y:auto}.exam-season-head{position:sticky;top:-1rem;z-index:3;display:flex;align-items:flex-start;justify-content:space-between;gap:.6rem;margin:-1rem -.15rem 0;padding:1rem .15rem .55rem;background:var(--card-bg);border-bottom:1px solid var(--border)}.exam-season-headings{min-width:0}.exam-season-board{margin:0;font-size:.74rem;font-weight:700;letter-spacing:.04em;color:var(--accent)}.exam-season-title{margin:.1rem 0 .2rem;font-family:var(--font-display);font-size:1.2rem;font-weight:700;color:var(--heading)}.exam-season-title:focus-visible{outline:3px solid var(--focus);outline-offset:3px}.exam-season-meta{margin:0;font-size:.76rem;color:var(--text-muted)}.exam-season-close{flex:none;width:2.75rem;height:2.75rem;border:1px solid var(--border-strong);border-radius:50%;background:var(--card-bg-alt);color:var(--text);font-size:1.15rem;line-height:1;cursor:pointer}.exam-season-close:hover{background:var(--accent-soft);border-color:var(--accent)}.exam-season-switch{display:flex;flex-wrap:wrap;gap:.35rem;margin-top:.7rem}.exam-season-switch[hidden]{display:none}.season-switch-btn{font:inherit;font-size:.78rem;padding:.3rem .7rem;border:1px solid var(--border-strong);border-radius:999px;background:var(--card-bg);color:var(--text-muted);cursor:pointer;transition:background .16s,color .16s,border-color .16s}.season-switch-btn:hover{color:var(--text);border-color:var(--accent)}.season-switch-btn.is-active{background:var(--exam-chip-on);color:var(--text);border-color:var(--accent);font-weight:600}.exam-season-notes{margin:.7rem 0 0}.exam-season-notes[hidden]{display:none}.exam-season-notelist{margin:0;padding-left:1.1rem;color:var(--text-muted);font-size:.76rem;line-height:1.5}.exam-season-controls{display:flex;flex-wrap:wrap;gap:.6rem 1rem;margin-top:.8rem}.exam-season-field{display:flex;flex-direction:column;gap:.25rem;min-width:0;flex:1 1 12rem;font-size:.74rem;color:var(--text-muted)}.exam-season-field[hidden]{display:none}.exam-season-field input,.exam-season-field select{font:inherit;font-size:.85rem;padding:.4rem .6rem;border:1px solid var(--border-strong);border-radius:8px;background:var(--card-bg);color:var(--text);min-width:0;max-width:100%}.exam-season-count{margin:.7rem 0 .3rem;font-size:.78rem;font-weight:600;color:var(--text-muted)}.exam-season-panelbody{min-width:0;max-width:100%}.exam-season-table{width:100%;border-collapse:collapse;font-size:.78rem;table-layout:auto}.exam-season-table caption{text-align:left}.exam-season-table th{position:sticky;top:0;text-align:left;font-weight:700;color:var(--text-muted);background:var(--card-bg-alt);padding:.4rem .5rem;border-bottom:1px solid var(--border-strong);white-space:nowrap}.exam-season-table td{padding:.4rem .5rem;border-bottom:1px solid var(--border);vertical-align:top;overflow-wrap:break-word}.exam-season-table tbody tr:hover{background:var(--card-bg-alt)}.exam-season-table .is-unset{color:var(--text-muted);font-style:italic}.exam-season-empty{margin:.8rem 0;font-size:.85rem;color:var(--text-muted)}.exam-season-empty[hidden]{display:none}.exam-season-viewtoggle{display:inline-flex;align-self:flex-end;flex:0 0 auto;padding:.15rem;gap:.15rem;border:1px solid var(--border-strong);border-radius:999px;background:var(--card-bg-alt)}.exam-season-viewbtn{font:inherit;font-size:.76rem;padding:.28rem .85rem;border:0;border-radius:999px;background:transparent;color:var(--text-muted);cursor:pointer;transition:background .16s,color .16s}.exam-season-viewbtn:hover{color:var(--text)}.exam-season-viewbtn[aria-pressed=true]{background:var(--card-bg);color:var(--text);font-weight:600;box-shadow:0 1px 2px #0000001f}.exam-season-viewbtn:focus-visible{outline:3px solid var(--focus);outline-offset:2px}.exam-season-calendar{min-width:0}.exam-season-calendar[hidden]{display:none}.exam-season-calnav{display:flex;align-items:center;justify-content:space-between;gap:.5rem;margin-bottom:.5rem}.exam-season-monthlabel{flex:1 1 auto;text-align:center;font-size:.82rem;font-weight:700;color:var(--heading)}.exam-season-navbtn{font:inherit;font-size:1rem;line-height:1;flex:0 0 auto;width:2rem;height:2rem;border:1px solid var(--border-strong);border-radius:8px;background:var(--card-bg);color:var(--text);cursor:pointer}.exam-season-navbtn:hover:not(:disabled){background:var(--accent-soft);border-color:var(--accent)}.exam-season-navbtn:disabled{opacity:.4;cursor:not-allowed}.exam-season-navbtn:focus-visible{outline:3px solid var(--focus);outline-offset:2px}.exam-season-calendar-head,.exam-season-calendar-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:2px}.exam-season-calendar-head{margin-bottom:2px;font-size:.66rem;font-weight:700;color:var(--text-muted)}.exam-season-calendar-head span{text-align:center;padding:.2rem 0}.exam-season-calendar-cell{min-width:0;display:flex;flex-direction:column;align-items:flex-start;justify-content:flex-start;min-height:2.6rem;padding:.25rem .3rem;border:1px solid var(--border);border-radius:6px;background:var(--card-bg);font-size:.74rem;color:var(--text-muted);box-sizing:border-box}.exam-season-calendar-cell.is-blank{border-color:transparent;background:transparent}.exam-season-calendar-cell.is-empty{color:var(--text-muted);opacity:.7}.exam-season-calendar-day{font:inherit;font-size:.74rem;cursor:pointer;color:var(--text);background:var(--accent-soft);border-color:var(--border-strong);transition:background .16s,border-color .16s,box-shadow .16s}.exam-season-calendar-day:hover{border-color:var(--accent)}.exam-season-calendar-day:focus-visible{outline:3px solid var(--focus);outline-offset:2px}.exam-season-calendar-day.is-selected{background:var(--exam-chip-on);border-color:var(--accent);box-shadow:inset 0 0 0 1px var(--accent);font-weight:700}.exam-season-calendar-num{font-weight:600;line-height:1.1}.exam-season-calendar-count{margin-top:auto;align-self:flex-end;min-width:1.1rem;padding:0 .28rem;border-radius:999px;background:var(--accent);color:var(--card-bg);font-size:.64rem;font-weight:700;text-align:center}.exam-season-day-list{margin-top:.8rem}.exam-season-day-hint{margin:.6rem 0;font-size:.78rem;color:var(--text-muted)}.exam-season-day-title{margin:0 0 .4rem;font-size:.82rem;font-weight:700;color:var(--heading)}.exam-season-day-items{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.35rem}.exam-season-day-item{display:flex;flex-wrap:wrap;gap:.15rem .6rem;padding:.4rem .5rem;border:1px solid var(--border);border-radius:6px;background:var(--card-bg)}.exam-season-day-subject{font-size:.8rem;font-weight:600;color:var(--text)}.exam-season-day-meta{font-size:.74rem;color:var(--text-muted)}.exam-season-sourcewrap{margin-top:.9rem;padding-top:.7rem;border-top:1px solid var(--border);font-size:.74rem;color:var(--text-muted)}.exam-season-sourcelabel{font-weight:600}.exam-season-sources{display:inline-flex;flex-wrap:wrap;gap:.2rem .7rem}.exam-season-sources a{color:var(--accent);text-underline-offset:.15em;word-break:break-all}.comp-flavor{display:inline-block;padding:.05rem .4rem;border-radius:var(--radius-pill, 999px);font-size:.68rem;font-weight:600;line-height:1.5;white-space:nowrap;border:1px solid transparent}.comp-flavor--admin{background:color-mix(in srgb,#9a5a1c 16%,var(--surface));color:color-mix(in srgb,#7a4614 78%,var(--text));border-color:color-mix(in srgb,#9a5a1c 40%,transparent)}.comp-flavor--contest{background:color-mix(in srgb,var(--cat-competition) 16%,var(--surface));color:color-mix(in srgb,var(--cat-competition) 78%,var(--text));border-color:color-mix(in srgb,var(--cat-competition) 40%,transparent)}.competition-table .comp-date{font-variant-numeric:tabular-nums;font-weight:600}.competition-table .comp-date.is-range{color:var(--cat-competition)}.competition-table .comp-name{font-weight:600}.competition-table .comp-name-en,.competition-table .comp-china{display:block;font-size:.72rem;color:var(--text-muted);font-weight:400}.competition-table .comp-scope{display:block;font-weight:600;font-size:.78rem}.comp-row--contest td:first-child{box-shadow:inset 3px 0 0 var(--cat-competition)}.comp-row--admin td:first-child{box-shadow:inset 3px 0 color-mix(in srgb,#9a5a1c 60%,transparent)}.competition-unscheduled{margin-top:1rem;padding-top:.8rem;border-top:1px dashed var(--border-strong, var(--border))}.competition-unscheduled-title{margin:0 0 .3rem;font-size:.9rem;font-weight:700;color:var(--text)}.competition-unscheduled-lead{margin:0 0 .6rem;font-size:.76rem;color:var(--text-muted)}.competition-unscheduled-list{list-style:none;margin:0;padding:0;display:grid;gap:.4rem}.competition-unscheduled-item{display:flex;flex-wrap:wrap;align-items:baseline;gap:.3rem .6rem;padding:.4rem .5rem;border:1px solid var(--border);border-radius:var(--radius-sm, 6px);background:var(--surface-muted, var(--surface));font-size:.78rem}.comp-unsched-name{font-weight:600}.comp-unsched-discipline{font-size:.68rem;color:var(--text-muted);border:1px solid var(--border);border-radius:var(--radius-pill, 999px);padding:0 .35rem}.comp-unsched-reason{flex:1 1 16rem;color:var(--text-muted)}.comp-unsched-link{color:var(--accent);white-space:nowrap}.exam-seasons-bar{display:flex;flex-wrap:wrap;align-items:center;gap:.4rem .7rem;margin-top:.6rem}.exam-seasons-lead{font-size:.76rem;font-weight:700;color:var(--heading)}.exam-seasons{display:flex;flex-wrap:wrap;gap:.4rem;min-width:0}.season-entry{display:inline-flex;align-items:center;gap:.4rem;font:inherit;font-size:.78rem;padding:.3rem .7rem;border:1px solid var(--border-strong);border-radius:999px;background:var(--card-bg);color:var(--text);cursor:pointer;white-space:nowrap;transition:background .16s,border-color .16s}.season-entry:hover{background:var(--accent-soft);border-color:var(--accent)}.season-entry .season-entry-dot{width:.6rem;height:.6rem;border-radius:50%;background:var(--cat, var(--accent));flex:none}@media(max-width:640px){.exam-season-table thead{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}.exam-season-table,.exam-season-table tbody,.exam-season-table tr,.exam-season-table td{display:block;width:100%;max-width:100%}.exam-season-table tr{margin-bottom:.7rem;border:1px solid var(--border);border-radius:10px;padding:.3rem .55rem;background:var(--card-bg-alt)}.exam-season-table td{display:flex;justify-content:space-between;gap:.8rem;border-bottom:1px solid var(--border);padding:.3rem 0}.exam-season-table tr td:last-child{border-bottom:0}.exam-season-table td:before{content:attr(data-label);flex:none;font-weight:700;color:var(--text-muted)}.exam-season-panel{width:100%;border-left:none;padding:.85rem .9rem 1.1rem}.exam-season-viewtoggle{align-self:stretch;justify-content:center}.exam-season-calendar-grid,.exam-season-calendar-head{gap:1px}.exam-season-calendar-cell{min-height:2.1rem;padding:.15rem .1rem;align-items:center;font-size:.66rem}.exam-season-calendar-day{align-items:center}.exam-season-calendar-num{font-size:.66rem}.exam-season-calendar-count{min-width:0;padding:0 .18rem;font-size:.58rem}.exam-season-calendar-head{font-size:.6rem}.exam-season-monthlabel{font-size:.74rem}}.month-card td.weekend .date-num{color:var(--weekend);background:var(--weekend-soft)}.month-card td.holiday .day{background:var(--holiday-soft);border:1px solid var(--holiday-border);border-radius:.6rem}.month-card td.workday .day{background:var(--workday-soft);border:1px solid var(--workday-border);border-radius:.6rem}.month-card td.holiday .date-num{color:var(--holiday);background:transparent}.month-card td.workday .date-num{color:var(--workday);background:transparent}.month-card td.today .date-num{background:var(--today-bg)!important;color:var(--today-text)!important;font-weight:700;box-shadow:0 0 0 3px var(--today-ring)}.month-card td.today .day{border-color:var(--today-bg)}.site-footer{max-width:72ch;margin:0 auto;text-align:center;color:var(--text-muted);font-size:.8rem;line-height:1.65;text-wrap:pretty;padding:0 1.5rem 2.75rem}.noscript-tip{grid-column:1 / -1;text-align:center;color:var(--weekend)}.back-to-top{position:fixed;right:1.25rem;bottom:1.25rem;padding:.6rem .9rem;font:inherit;font-size:.85rem;border:1px solid var(--border-strong);border-radius:999px;background:var(--accent);color:#fff;cursor:pointer;box-shadow:var(--shadow);z-index:50}.back-to-top:hover{filter:brightness(.92)}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important}}@media print{:root,[data-theme]{--bg: #ffffff;--bg-accent: #ffffff;--card-bg: #ffffff;--card-bg-alt: #ffffff;--text: #1a1a1a;--text-muted: #444444;--heading: #111111;--accent: #7a1f14;--accent-soft: #ffffff;--weekend: #8a2a1e;--weekend-soft: #ffffff;--today-bg: #ffffff;--today-text: #111111;--today-ring: #111111;--lunar: #555555;--term: #6a4a12;--term-soft: #ffffff;--holiday: #a11209;--holiday-soft: #ffffff;--holiday-border: #a11209;--workday: #14507a;--workday-soft: #ffffff;--workday-border: #14507a;--border: #999999;--border-strong: #666666;--shadow: none;--focus: #000000;--exam-bg: #ffffff;--exam-text: #1a1a1a;--exam-border: #666666;--exam-more-bg: #ffffff;--exam-more-text: #1a1a1a;--exam-chip-on: #ffffff}@page{size:A4;margin:10mm}body{background:#fff;background-image:none;color:var(--text)}.site-header{padding:0 0 .5rem}.header-inner{border-bottom:1px solid #999;padding-bottom:3mm}.site-header h1{font-size:1.5rem;color:#111}.subtitle{color:#333}.nameplate-dial,.controls,.exam-bar,.exam-detail,.exam-season-detail,.back-to-top,.site-footer,.skip-link{display:none!important}.exam-cell-btn{border:none!important;padding:0}.month-card .exam-token{background:#fff!important;color:#1a1a1a!important;border:.1mm solid currentColor;border-left:.4mm solid var(--cat, currentColor);font-size:.44rem;font-weight:700;-webkit-print-color-adjust:exact;print-color-adjust:exact}.month-card .exam-more{background:#fff!important;color:#1a1a1a!important;border:.1mm solid currentColor;font-size:.44rem;font-weight:700}.calendar-grid{grid-template-columns:repeat(3,1fr);gap:4mm;padding:0}.calendar-legend{gap:1mm 3mm;margin:2mm 0;padding:0;font-size:.5rem;color:#333}.legend-source{margin-left:0}.month-card{box-shadow:none;border:1px solid #999;padding:3mm;break-inside:avoid}.month-card h2{font-size:.95rem;margin-bottom:1mm;color:#111}.month-card th{font-size:.6rem;padding:.5mm 0}.month-card td{height:auto;font-size:.62rem;padding:.4mm 0}.month-card .day{min-height:0;padding:0;gap:0;border:none}.month-card td.holiday .day,.month-card td.workday .day{background:#fff;border:none;-webkit-print-color-adjust:exact;print-color-adjust:exact}.month-card .date-num{width:auto;height:auto;border-radius:0;background:none!important;box-shadow:none!important}.month-card .lunar{font-size:.42rem;color:#555;background:none!important;padding:0}.month-card .lunar.term{color:var(--term);font-weight:700}.month-card .holiday-badge{min-width:0;min-height:0;padding:.2mm .12em;font-size:.46rem;font-weight:700;line-height:1.15;background:#fff;border:.1mm solid currentColor}.month-card .holiday-badge .badge-tag{margin-top:0;padding:0;color:currentColor!important;background:none!important}.holiday-marker,.month-card td.holiday .date-num{color:var(--holiday)!important}.workday-marker,.month-card td.workday .date-num{color:var(--workday)!important}.month-card td.today .date-num{color:#111!important;background:none!important;box-shadow:none!important;font-weight:700;text-decoration:underline}.month-card td.today .day{border:none}.month-card td.weekend .date-num{color:var(--weekend)}}
