.calendar-page{background:#f2f2f7;color:#1d1d1f}
.calendar-hero{padding:76px 0 68px;background:linear-gradient(135deg,#0a3154 0%,#104f7f 100%);color:#fff}
.calendar-hero h1{margin:0 0 16px;font-family:KadouDisplay,'Noto Sans SC',sans-serif;font-size:clamp(42px,6vw,76px);line-height:1.04;letter-spacing:-.025em}
.calendar-hero p{max-width:720px;margin:0;color:rgba(255,255,255,.8);font-size:18px;line-height:1.65}
.calendar-panel{padding:56px 0 84px}
.calendar-toolbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:18px;padding:8px;border:1px solid #d8d8dd;border-radius:14px;background:rgba(255,255,255,.82);box-shadow:0 8px 28px rgba(0,0,0,.06);backdrop-filter:blur(18px)}
.calendar-toolbar button,.calendar-toolbar select{min-height:40px;padding:0 14px;border:1px solid #d6d6db;border-radius:9px;background:#fff;color:#1d1d1f;font-size:14px;cursor:pointer;transition:background .15s ease,border-color .15s ease,box-shadow .15s ease}
.calendar-toolbar button:hover,.calendar-toolbar button:focus-visible,.calendar-toolbar select:hover,.calendar-toolbar select:focus-visible{border-color:#4d9de0;box-shadow:0 0 0 3px rgba(39,125,190,.15);outline:0}
.calendar-toolbar__month{flex:1;min-width:180px;text-align:center;font-size:20px;font-weight:750;letter-spacing:-.01em}
.calendar-toolbar button[data-calendar-today]{font-weight:650;color:#0a6dcc}
.calendar-legend{display:flex;gap:15px;flex-wrap:wrap;margin:0 0 18px;color:#6e6e73;font-size:13px}
.calendar-legend span{display:inline-flex;align-items:center;gap:7px}
.calendar-legend i{display:block;width:9px;height:9px;border-radius:50%;background:#0a6dcc}.calendar-legend .holiday i{background:#ff3b30}.calendar-legend .festival i{background:#ff9500}.calendar-legend .magic i{background:#34c759}
.calendar-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));overflow:hidden;border:1px solid #d8d8dd;border-radius:16px;background:#fff;box-shadow:0 10px 30px rgba(0,0,0,.07)}
.calendar-weekday{padding:13px 8px;border-right:1px solid #e4e4e7;border-bottom:1px solid #d8d8dd;background:#f8f8fa;color:#6e6e73;font-size:12px;font-weight:700;letter-spacing:.04em;text-align:center;text-transform:uppercase}.calendar-weekday:nth-child(6),.calendar-weekday:nth-child(7){color:#ff3b30}.calendar-weekday:nth-child(7n){border-right:0}
.calendar-week{grid-column:1 / -1;position:relative;display:grid;grid-template-columns:repeat(7,minmax(0,1fr));min-height:calc(78px + var(--event-lanes)*30px);border-bottom:1px solid #e8e8eb}
.calendar-week:last-child{border-bottom:0}
.calendar-day{position:relative;padding:8px;border-right:1px solid #e8e8eb;background:#fff;min-width:0}
.calendar-day:nth-child(7){border-right:0}
.calendar-day.is-outside{background:#fafafa;color:#c7c7cc}
.calendar-day.is-today{background:#f0f7ff;box-shadow:inset 0 0 0 2px #0a6dcc}
.calendar-day.is-today .calendar-day__number{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:50%;background:#0a6dcc;color:#fff}
.calendar-day__head{display:flex;align-items:center;justify-content:space-between;gap:4px;min-height:28px}
.calendar-day__number{font-size:16px;font-weight:750;line-height:1}
.calendar-day__lunar{color:#8e8e93;font-size:11px;white-space:nowrap}
.calendar-day__holiday,.calendar-day__festival{display:inline-block;margin:2px 4px 0 0;font-size:10px;line-height:1.3;overflow-wrap:anywhere}
.calendar-day__holiday{color:#e34c43;font-weight:700}.calendar-day__festival{color:#b56b00}
.calendar-week__events{position:absolute;left:0;right:0;top:62px;display:grid;grid-template-columns:repeat(7,minmax(0,1fr));grid-auto-rows:30px;pointer-events:none}
.calendar-event{pointer-events:auto;display:block;min-width:0;align-self:start;margin:2px 4px;padding:5px 8px;border:0;border-radius:5px;background:var(--event-color,#247cbd);color:#fff;font:600 11px/16px 'Noto Sans SC',sans-serif;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;text-decoration:none;box-shadow:0 1px 2px #0001;transition:filter .15s}
.calendar-event.continues-before{margin-left:0;border-top-left-radius:0;border-bottom-left-radius:0}
.calendar-event.continues-after{margin-right:0;border-top-right-radius:0;border-bottom-right-radius:0}
.calendar-event:hover,.calendar-event:focus-visible{filter:brightness(1.15);color:#fff;outline:2px solid #0a6dcc;outline-offset:1px}
.calendar-note{margin-top:24px;padding:15px 18px;border-left:3px solid #ff9500;border-radius:8px;background:#fff8e8;color:#6e5d48;font-size:13px;line-height:1.6}
@media(max-width:760px){.calendar-hero{padding:42px 0 36px}.calendar-panel{padding:30px 0 50px}.calendar-panel>.shell{width:calc(100% - 20px)}.calendar-toolbar{border-radius:12px}.calendar-toolbar__month{order:-1;width:100%;flex-basis:100%;text-align:left;padding:4px 6px;font-size:19px}.calendar-day{padding:5px 3px}.calendar-day__head{justify-content:center}.calendar-day__lunar{display:none}.calendar-day__number{font-size:14px}.calendar-day.is-today .calendar-day__number{width:25px;height:25px}.calendar-day__holiday,.calendar-day__festival{font-size:9px}.calendar-event{font-size:10px;padding:5px;margin:2px}.calendar-weekday{padding:10px 3px;font-size:10px}.calendar-week{min-height:calc(76px + var(--event-lanes)*30px)}}
@media(max-width:420px){.calendar-toolbar button{padding:0 8px;font-size:12px}.calendar-day__holiday,.calendar-day__festival{white-space:nowrap;max-width:100%;overflow:hidden;text-overflow:ellipsis}}
