.mnu-page,.cal-page{min-height:62vh}.mnu-toggle,.cal-toggle{display:flex;justify-content:center;gap:16px;flex-wrap:wrap;margin:0 0 22px}.mnu-tab,.cal-tab{min-height:48px;min-width:128px;padding:11px 32px;font-family:var(--f-display);font-weight:700;font-size:17px;letter-spacing:.06em;color:var(--ink-soft);background:#fff;cursor:pointer;border:var(--pencil-w) solid var(--pencil);border-radius:16px 26px 14px 24px/24px 14px 26px 16px;filter:url(#wobble-lite);box-shadow:var(--sh-xs);transition:transform .3s cubic-bezier(.34,1.4,.64,1),background .25s,color .25s,box-shadow .25s}.mnu-tab:nth-of-type(2n),.cal-tab:nth-of-type(2n){border-radius:26px 15px 24px 13px/13px 26px 15px 24px}.mnu-tab:hover,.cal-tab:hover{transform:translateY(-3px) rotate(-1deg);box-shadow:var(--sh-sm)}.mnu-tab.on,.cal-tab.on{color:#fff;border-color:transparent;transform:rotate(-1.6deg)}.mnu-tab--taipei.on,.cal-tab--taipei.on{background:var(--coral);box-shadow:0 10px 22px -10px #d9737f8c}.mnu-tab--yongheng.on,.cal-tab--yongheng.on{background:var(--sage-deep);box-shadow:0 10px 22px -10px #7e947e8c}.mnu-weekof{display:flex;justify-content:center;align-items:baseline;gap:12px;flex-wrap:wrap;margin:0 0 44px;color:var(--ink-soft);font-size:16px}.mnu-weekof-en{font-family:var(--f-hand-en);font-weight:700;font-size:24px;color:var(--sage-deep);display:inline-block;transform:rotate(-2.5deg)}.mnu-weekof strong{font-family:var(--f-round);font-weight:700;font-size:21px;color:var(--ink,#454039);letter-spacing:.04em}.mnu-week{display:grid;grid-template-columns:repeat(6,1fr);gap:34px 24px;margin-top:6px}.mnu-day{grid-column:span 2;position:relative;background:#fff;border-radius:26px 34px 24px 32px/32px 24px 36px 26px;box-shadow:var(--sh-sm);padding:26px 26px 28px;transition:transform .35s cubic-bezier(.34,1.4,.64,1),box-shadow .35s}.mnu-day:nth-child(2n){border-radius:34px 24px 32px 22px/24px 34px}.mnu-day:nth-child(1){transform:rotate(-1.8deg);margin-top:10px}.mnu-day:nth-child(2){transform:rotate(1.3deg);margin-top:36px}.mnu-day:nth-child(3){transform:rotate(-1.1deg)}.mnu-day:nth-child(4){grid-column:2/4;transform:rotate(1.8deg);margin-top:-2px}.mnu-day:nth-child(5){grid-column:4/6;transform:rotate(-1.9deg);margin-top:24px}.mnu-day:hover{transform:translateY(-7px) rotate(0);box-shadow:var(--sh-md);z-index:3}.mnu-day.is-today:after{content:"";position:absolute;top:-11px;left:50%;width:88px;height:26px;margin-left:-44px;z-index:4;transform:rotate(-4deg);filter:url(#wobble-lite);background:repeating-linear-gradient(45deg,#e78c9973 0,#e78c9973 6px,#e78c9947 6px,#e78c9947 12px);box-shadow:0 2px 6px -2px #78684c40}.mnu-day-head{display:flex;align-items:center;gap:14px;margin-bottom:18px}.mnu-dow{flex-shrink:0;width:52px;height:52px;display:flex;align-items:center;justify-content:center;font-family:var(--f-display);font-weight:700;font-size:21px;color:#fff;background:var(--sage);border-radius:48% 52% 50% 50%/52% 48%;filter:url(#wobble-lite);box-shadow:0 5px 12px -4px #7e947e73}.mnu-day:nth-child(2n) .mnu-dow{border-radius:52% 48% 50% 50%/48% 52%;background:var(--sage-deep)}.mnu-day.is-rest .mnu-dow{background:var(--ink-faint,#A89F90);box-shadow:none}.mnu-date{display:block;font-family:var(--f-round);font-weight:700;font-size:19px;color:var(--ink,#454039);letter-spacing:.05em;line-height:1.25}.mnu-dow-full{display:block;font-size:13.5px;color:var(--ink-faint,#A89F90)}.mnu-today-tag{margin-left:auto;align-self:flex-start;font-family:var(--f-display);font-weight:700;font-size:13px;color:#fff;background:var(--coral);padding:6px 14px;border-radius:var(--r-pill);box-shadow:0 4px 10px -4px #d9737f80}.mnu-meal+.mnu-meal{margin-top:16px;padding-top:16px;border-top:2px dashed var(--line)}.mnu-meal-name{display:flex;align-items:center;gap:8px;margin-bottom:10px;font-family:var(--f-display);font-weight:700;font-size:15.5px;color:var(--sage-deep);letter-spacing:.05em}.mnu-meal-name svg{width:24px;height:24px;stroke:var(--sage-deep);fill:none;flex-shrink:0}.mnu-en{font-family:var(--f-hand-en);font-weight:700;font-size:18px;color:var(--ink-faint,#A89F90);display:inline-block;transform:rotate(-2deg);margin-left:2px}.mnu-dishes{display:flex;flex-wrap:wrap;gap:7px 16px;font-size:16px;color:var(--ink,#454039);line-height:1.7}.mnu-dishes li{position:relative;padding-left:15px}.mnu-dishes li:before{content:"";position:absolute;left:0;top:.6em;width:7px;height:7px;border-radius:52% 48% 50% 50%/48% 52%;background:var(--sage-soft)}.mnu-dishes li:nth-child(3n):before{background:var(--coral-hl)}.mnu-dishes li:nth-child(4n):before{background:var(--butter,#F3DDA0)}.mnu-none{color:var(--ink-faint,#A89F90);margin:0}.mnu-snack-row{display:flex;align-items:baseline;gap:10px;font-size:16px;color:var(--ink,#454039);line-height:1.7}.mnu-snack-row+.mnu-snack-row{margin-top:7px}.mnu-snack-time{flex-shrink:0;font-family:var(--f-display);font-weight:700;font-size:12.5px;color:var(--sage-deep);background:var(--sage-tint);padding:3px 11px;border-radius:var(--r-pill)}.mnu-day.is-rest{background:var(--cream-2);box-shadow:var(--sh-xs)}.mnu-rest{text-align:center;padding:8px 0 4px}.mnu-rest svg{margin:0 auto 8px;display:block}.mnu-rest-text{font-family:var(--f-display);font-weight:700;font-size:16px;color:var(--ink-soft,#736A5F);margin:0}.mnu-rest-word{display:inline-block;margin-top:6px;font-family:var(--f-hand-en);font-weight:700;font-size:23px;color:var(--ink-faint,#A89F90);transform:rotate(-3deg)}.mnu-note{position:relative;max-width:720px;margin:52px auto 0;background:var(--butter-paper);border-radius:24px 32px 22px 30px/30px 22px 34px 24px;box-shadow:var(--sh-sm);padding:26px 32px;transform:rotate(-.6deg);font-size:14.5px;line-height:2;color:var(--ink-soft,#736A5F)}.mnu-note-row+.mnu-note-row{margin-top:4px}.mnu-note strong{color:var(--wood-deep);font-family:var(--f-display);font-weight:700;margin-right:10px}.mnu-extra{max-width:720px;margin:18px auto 0;font-size:13.5px;color:var(--ink-faint,#A89F90);white-space:pre-wrap;text-align:center}.mnu-empty,.cal-empty{position:relative;max-width:560px;margin:26px auto 0;background:#fff;border-radius:30px 40px 28px 36px/36px 28px 42px 30px;box-shadow:var(--sh-sm);padding:54px 32px 48px;text-align:center;transform:rotate(-.8deg)}.mnu-empty svg,.cal-empty svg{margin:0 auto 18px;display:block}.mnu-empty p,.cal-empty p{font-family:var(--f-display);font-weight:700;font-size:18px;color:var(--ink-soft,#736A5F);letter-spacing:.04em;margin:0}.mnu-empty-en,.cal-empty-en{display:inline-block;margin-top:10px;font-family:var(--f-hand-en);font-weight:700;font-size:23px;color:var(--sage-deep);transform:rotate(-2.5deg)}.mnu-empty-sub,.cal-empty-sub{display:block;margin-top:8px;font-size:13.5px;color:var(--ink-faint,#A89F90)}.cal-legend{display:flex;justify-content:center;align-items:center;gap:10px;margin:0 0 14px}.cal-legend-note{font-size:13px;color:var(--ink-faint,#A89F90)}.cal-flow{position:relative;max-width:880px;margin:18px auto 0}.cal-flow:before{content:"";position:absolute;top:10px;bottom:10px;left:188px;width:0;border-left:3px dashed var(--sage-soft);opacity:.95}.cal-month{position:relative;display:grid;grid-template-columns:160px 1fr;gap:0 56px;padding:28px 0 6px}.cal-month:after{content:"";position:absolute;left:181px;top:44px;width:17px;height:17px;z-index:2;background:var(--sage);border-radius:52% 48% 50% 50%/48% 52%;outline:4px solid var(--cream);filter:url(#wobble-lite)}.cal-month:nth-of-type(2n):after{background:var(--sage-deep);border-radius:48% 52% 50% 50%/52% 48%}.cal-month-head{position:sticky;top:106px;align-self:start;text-align:right;transform:rotate(-2deg)}.cal-month-en{display:block;font-family:var(--f-hand-en);font-weight:700;font-size:25px;color:var(--sage-deep);line-height:1.1}.cal-month-zh{font-family:var(--f-display);font-weight:700;color:var(--wood-title);font-size:20px;letter-spacing:.06em;line-height:1.3;margin:2px 0 0}.cal-month-zh strong{font-family:var(--f-round);font-weight:700;font-size:46px;line-height:1;margin-right:3px}.cal-month-zh small{display:block;font-size:13px;color:var(--ink-faint,#A89F90);font-weight:500;letter-spacing:.08em;margin-top:2px}.cal-list{display:flex;flex-direction:column;gap:18px;padding-bottom:14px}.cal-item{position:relative;display:flex;gap:18px;align-items:flex-start;background:#fff;border-radius:22px 30px 20px 28px/28px 20px 32px 22px;box-shadow:var(--sh-sm);padding:20px 24px;transition:transform .3s cubic-bezier(.34,1.4,.64,1),box-shadow .3s,opacity .3s}.cal-item:nth-of-type(odd){transform:rotate(-.5deg)}.cal-item:nth-of-type(2n){border-radius:30px 20px 28px 18px/20px 30px;transform:rotate(.5deg)}.cal-item:hover{transform:translateY(-4px) rotate(0);box-shadow:var(--sh-md);z-index:3}.cal-item:after{content:"";position:absolute;left:-34px;top:30px;width:11px;height:11px;border-radius:50%;background:#fff;border:2.5px solid var(--sage);filter:url(#wobble-lite)}.cal-item.is-past{opacity:.55;box-shadow:var(--sh-xs)}.cal-item.is-past:hover{opacity:.9}.cal-item.is-past:after{border-color:var(--sage-soft)}.cal-item.is-next{box-shadow:var(--sh-md)}.cal-item.is-next:after{background:var(--coral);border-color:var(--coral)}.cal-soon{position:absolute;top:-15px;right:22px;z-index:4;font-family:var(--f-hand-en);font-weight:700;font-size:20px;color:var(--coral-deep);transform:rotate(4deg);background:#fff;padding:2px 13px;border-radius:var(--r-pill);box-shadow:var(--sh-xs);border:1px solid var(--coral-hl)}.cal-when{flex-shrink:0;min-width:98px}.cal-when-date{display:block;font-family:var(--f-round);font-weight:700;font-size:20px;color:var(--ink,#454039);letter-spacing:.03em;line-height:1.35}.cal-when-day{display:block;font-size:12.5px;color:var(--ink-faint,#A89F90);margin-top:2px}.cal-what{flex:1;min-width:0}.cal-what h3{font-size:16.5px;color:var(--ink,#454039);font-weight:700;line-height:1.6;margin:0}.cal-what p{margin:6px 0 0;font-size:14.5px;color:var(--ink-soft,#736A5F);line-height:1.85}.cal-tag{flex-shrink:0;align-self:flex-start;font-family:var(--f-display);font-weight:700;font-size:12.5px;padding:6px 14px;border-radius:var(--r-pill);white-space:nowrap}.cal-tag--sage{background:var(--sage-tint);color:var(--sage-deep)}.cal-tag--coral{background:var(--coral-tint);color:var(--coral-deep)}.cal-tag--butter{background:#fbedc4;color:var(--wood-deep)}.cal-now{position:relative;display:flex;align-items:center;gap:14px;margin:4px 0 6px}.cal-now:before{content:"";position:absolute;left:-33px;top:50%;width:13px;height:13px;margin-top:-6.5px;border-radius:50%;background:var(--coral);outline:4px solid var(--coral-tint)}.cal-now-pill{font-family:var(--f-display);font-weight:700;font-size:14px;color:#fff;background:var(--coral);padding:8px 18px;filter:url(#wobble-lite);border-radius:16px 22px 14px 20px/20px 14px 24px 16px;box-shadow:0 8px 18px -8px #d9737f8c}.cal-now-line{flex:1;border-top:2px dashed var(--coral-hl)}.cal-now--end{margin:18px 0 4px 216px}@media(max-width:1000px){.mnu-week{grid-template-columns:repeat(2,1fr);gap:30px 20px}.mnu-day:nth-child(n){grid-column:auto}.mnu-day:nth-child(5){grid-column:1/-1;width:100%;max-width:540px;justify-self:center}}@media(max-width:760px){.mnu-toggle,.cal-toggle{gap:12px}.mnu-tab,.cal-tab{flex:1;min-width:0;font-size:16px;padding:11px 18px}.mnu-week{grid-template-columns:1fr;gap:26px}.mnu-day:nth-child(n){grid-column:auto;transform:none;margin-top:0;max-width:none}.mnu-day{padding:22px 20px 24px}.mnu-note{transform:rotate(-.4deg);padding:22px}.mnu-weekof{margin-bottom:34px}.cal-flow:before{left:8px}.cal-month{grid-template-columns:1fr;gap:14px 0;padding:20px 0 4px}.cal-month:after{left:1px;top:16px}.cal-month-head{position:static;text-align:left;transform:rotate(-1.2deg);padding-left:34px;display:flex;align-items:baseline;gap:12px;flex-wrap:wrap}.cal-month-zh{margin:0}.cal-month-zh strong{font-size:34px}.cal-month-zh small{display:inline;margin-left:8px}.cal-list{padding-left:34px;gap:16px}.cal-item{flex-wrap:wrap;gap:8px 14px;padding:18px}.cal-item:after{left:-33px}.cal-when{flex:1;display:flex;align-items:baseline;gap:10px;min-width:0}.cal-when-date{font-size:18px}.cal-tag{margin-left:auto}.cal-what{flex:1 0 100%}.cal-soon{right:14px}.cal-now{margin-left:34px}.cal-now:before{left:-31px}.cal-now--end{margin-left:34px}.cal-legend{flex-wrap:wrap}}@media(prefers-reduced-motion:reduce){.mnu-tab,.cal-tab,.mnu-day,.cal-item,.mnu-empty,.cal-empty{transition:none}.mnu-tab:hover,.cal-tab:hover,.mnu-day:hover,.cal-item:hover{transform:none}}
