/* Quiet, collectible story pages inside the playable scene. */
.festival-hub,.festival-hub *{box-sizing:border-box}
.festival-hub{--hub-cream:#f4ead6;--hub-muted:#b0a8b9;--hub-line:#b9a9c025;--hub-gold:#eac18a;position:fixed;inset:0;width:min(940px,calc(100vw - 36px));max-width:none;max-height:calc(100dvh - 38px);margin:auto;padding:26px 29px 24px;border:1px solid #aaa2b83d;border-radius:24px;background:#211e2e;color:var(--hub-cream);box-shadow:0 28px 120px #050710a3;font:13px/1.6 -apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;overflow:auto;scrollbar-width:thin;scrollbar-color:#65576d #211e2e;overscroll-behavior:contain}
.festival-hub::backdrop{background:#090e1a99;backdrop-filter:blur(6px)}
.festival-hub button{font:inherit;color:inherit;cursor:pointer;transition:background .18s,border-color .18s,transform .18s}
.festival-hub button:disabled{cursor:default}
.festival-hub button:focus-visible{outline:2px solid #b4e6d6;outline-offset:3px}
.festival-hub svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round;flex:none}
.festival-hub-head{display:flex;align-items:center;gap:18px}.festival-kicker{font-size:9px;letter-spacing:1.5px;color:#b8a6bf}.festival-hub h2{font-size:27px;line-height:1.3;font-weight:650;letter-spacing:1px;margin:4px 0 0}.festival-hub .hub-close{margin-left:0;width:36px;height:36px;display:grid;place-items:center;border:1px solid var(--hub-line);border-radius:50%;background:#ffffff04;color:#a9a1b7}.hub-wallet{display:flex;align-items:center;gap:6px;margin-left:auto;color:var(--hub-gold);font-size:11px}.hub-wallet b{font-size:19px;line-height:1;font-variant-numeric:tabular-nums}.hub-wallet span{font-size:10px;color:#a99cab}.hub-wallet svg{width:18px;height:18px}
.hub-tabs{display:flex;gap:5px;padding:5px;margin:24px 0;background:#171823;border:1px solid #d6cce80c;border-radius:12px}.hub-tabs button{position:relative;flex:1;padding:9px 6px;min-height:38px;border:0;border-radius:8px;background:none;color:#ada7bb;font-size:12px}.hub-tabs button[aria-pressed=true]{background:#433447;color:#f0cf9d;box-shadow:0 2px 8px #0002}.hub-tabs i{display:inline-block;width:5px;height:5px;background:#ffca88;border-radius:50%;vertical-align:top;margin:4px -7px 0 3px}.hub-tabs i[hidden]{display:none}
.hub-view[hidden]{display:none!important}.hub-view h3,.hub-view h4,.hub-view p{margin:0}.hub-view h3{font-weight:600}.festival-feature{display:grid;grid-template-columns:245px 1fr;gap:16px;padding:22px 23px 22px 6px;border:1px solid color-mix(in srgb,var(--fest-color),transparent 65%);border-radius:20px;background:radial-gradient(ellipse at 14% 40%,color-mix(in srgb,var(--fest-color),transparent 86%),transparent 67%),#252333;overflow:hidden}
.festival-feature-art{position:relative;display:flex;align-items:center;justify-content:center;min-height:210px}.festival-art-npc{position:relative;width:187px;height:187px;z-index:1;transform:translate(-12px,-9px) rotate(-3deg)}.festival-art-hero{position:absolute;width:105px;height:105px;right:0;bottom:0;z-index:2;transform:rotate(8deg);filter:drop-shadow(0 6px 8px #09091477)}.festival-art-orbit{position:absolute;width:205px;height:205px;border:1px dashed color-mix(in srgb,var(--fest-color),transparent 60%);border-radius:50%;transform:rotate(-15deg)}.festival-art-spark{position:absolute;right:26px;top:6px;font-size:23px;color:var(--fest-accent)}
.festival-feature-copy{align-self:center}.festival-state{display:inline-flex;align-items:center;gap:6px;color:#b5a9bd;font-size:10px;letter-spacing:.5px}.festival-state.ongoing{color:#f0bf87}.festival-state.ongoing:before{content:"";width:6px;height:6px;background:#e7b677;border-radius:50%;box-shadow:0 0 10px #edba7d55}.festival-feature h3{font-size:28px;letter-spacing:1px;line-height:1.35;margin:9px 0}.festival-feature p{font-size:12px;color:#c8bdcb;max-width:470px;line-height:1.9}.festival-meta{display:flex;gap:12px;margin:12px 0 17px;font-size:10px;color:#aaa3b7}.festival-meta span+span:before{content:"·";padding-right:12px;color:#7c7289}.festival-feature-actions{display:flex;flex-wrap:wrap;gap:9px;align-items:center}.festival-hub .hub-primary{display:inline-flex;align-items:center;justify-content:center;gap:15px;min-height:41px;border:1px solid #ffd6a38c;border-radius:9px;background:#edbc85;color:#372b36;padding:9px 16px;font-size:12px;font-weight:600;box-shadow:0 3px 0 #8b634f45}.hub-primary:hover{background:#ffd09b!important;transform:translateY(-1px)}.festival-hub .hub-gift-button{display:inline-flex;align-items:center;gap:6px;padding:9px 12px;min-height:41px;border:1px solid #d5b39a45;background:#e9c59f0b;border-radius:9px;font-size:10px;color:#efd1a7}.hub-gift-button:disabled{color:#9e9aab;border-color:#7970813b}.festival-feature-copy>small{display:block;font-size:9px;margin-top:13px;color:#9d96aa;line-height:1.7}
.hub-section-title{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin:25px 0 13px}.hub-section-title h3{font-size:15px;letter-spacing:.4px}.hub-section-title>span{font-size:10px;color:#a69eb2}.festival-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:9px}.festival-hub .festival-card{display:flex;align-items:center;gap:12px;text-align:left;min-width:0;padding:12px 14px;border:1px solid #b7a8ca1e;border-radius:13px;background:#ffffff03}.festival-card:hover{background:#ffffff07;border-color:#c4b4d448}.festival-card.selected{background:#bcb5c608;border-color:color-mix(in srgb,var(--fest-color),transparent 47%)}.festival-card img{width:64px;height:64px;flex:none}.festival-card>span{min-width:0;display:grid;gap:3px}.festival-card small{font-size:9px;color:#bda8c2}.festival-card b{font-size:14px;font-weight:600;color:#ece4d8}.festival-card em{font-size:9px;font-style:normal;color:#9d94ac}
.hub-status{min-height:0;margin:0!important;text-align:center;font-size:11px;color:#f0cd94;position:sticky;bottom:-24px;background:#211e2ef2;z-index:4;border-radius:8px}.hub-status:not(:empty){padding:10px 14px;margin-top:16px!important;border:1px solid #e8c08c35}.gift-claimed .hub-wallet svg{animation:gift-spark .55s ease-in-out}
.reward-overview{display:flex;align-items:center;gap:15px;padding:19px 22px;border:1px solid #c3adce22;border-radius:16px;background:linear-gradient(110deg,#3b3143,#262534)}.reward-clock{width:51px;height:51px;display:grid;place-items:center;border-radius:50%;background:#edca9e10;color:#e5c296}.reward-clock svg{width:29px;height:29px}.reward-overview>div{display:grid;gap:3px}.reward-overview small{font-size:10px;color:#ada3b9}.reward-overview strong{font-size:26px;line-height:1.2;font-weight:500;font-variant-numeric:tabular-nums}.reward-overview>p{margin-left:auto;font-size:10px;color:#a9a1b4;text-align:right;line-height:1.9}.welcome-reward{display:flex;align-items:center;gap:14px;padding:13px 15px;margin-bottom:12px;border:1px solid #e2bd8c30;background:#d6a86b09;border-radius:11px}.welcome-reward>span{display:flex;align-items:center;gap:8px;white-space:nowrap;color:#edc792;font-size:12px}.welcome-reward>small{font-size:10px;color:#b7a8b7}.welcome-reward>button{margin-left:auto;border:1px solid #e7bd874d;border-radius:7px;padding:5px 13px;background:#dcb37c17;color:#f6c98a;font-size:11px;white-space:nowrap}.reward-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}.event-reward-grid{grid-template-columns:repeat(5,minmax(0,1fr));gap:8px}.reward-milestone{display:flex;flex-direction:column;gap:8px;padding:15px;border:1px solid #bba8ca22;border-radius:13px;background:#ffffff02}.reward-milestone.ready{border-color:#e5bf8866;background:#d3ab6b0a}.reward-milestone.claimed{opacity:.7}.reward-milestone-top{display:flex;align-items:center;justify-content:space-between;gap:6px}.reward-milestone-top>b{font-size:13px;color:#e7ceab;font-weight:500;white-space:nowrap}.reward-milestone-top>span{font-size:8px;color:#9b93a9;white-space:nowrap}.reward-milestone.ready .reward-milestone-top>span{color:#b9d7b0}.reward-milestone h4{font-size:12px;font-weight:500}.reward-milestone p{font-size:9px;color:#a79aad;line-height:1.9;flex:1;min-height:45px}.reward-progress{height:3px;background:#51435566;border-radius:4px;margin:2px 0}.reward-progress i{display:block;height:100%;background:#b6d6bd;border-radius:4px}.reward-milestone button{font-size:10px;line-height:1.4;min-height:31px;border:1px solid #d7bc8c45;background:#d7b48115;border-radius:7px;color:#e9c898;padding:5px}.reward-milestone button:disabled{border-color:#aaa2b11d;background:#2c2936;color:#a096ac}.inventory-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:11px}.inventory-card{display:grid;grid-template-columns:55px 1fr;gap:11px 8px;padding:14px;border:1px solid #d0bbd424;border-radius:13px;background:#ffffff02}.inventory-card img{width:58px;height:58px}.inventory-card h4{font-size:12px;font-weight:500;margin-top:5px}.inventory-card h4 b{font-size:11px;color:#d3ba97;margin-left:4px}.inventory-card p{font-size:9px;color:#a69eaf;line-height:1.8;margin-top:4px}.inventory-actions{grid-column:1/-1;display:flex;gap:6px}.inventory-actions button{flex:1;border:1px solid #a9c8bb30;border-radius:7px;padding:7px 3px;font-size:10px;background:#9ecbb00e;color:#c0d5c3}.inventory-actions button+button{border-color:#cdb48730;color:#debf95;background:#d4b28508}.inventory-actions button:disabled{opacity:.35}.hub-fine-print{font-size:10px;color:#a59aac;margin-top:12px!important}
.wardrobe-heading,.collection-heading{display:flex;align-items:center;justify-content:space-between;gap:16px;margin:0 0 19px}.wardrobe-heading h3,.collection-heading h3{font-size:17px}.wardrobe-heading p{font-size:10px;color:#a9a0b5;margin-top:5px}.wardrobe-heading>span{display:flex;align-items:center;gap:7px;color:#d7bc94;font-size:12px;white-space:nowrap}.wardrobe-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:11px}.festival-hub .wardrobe-card{display:flex;flex-direction:column;align-items:center;border:1px solid #b6a6be24;border-radius:14px;background:#ffffff02;padding:13px 8px 15px;min-width:0}.wardrobe-card img{width:min(100%,140px);height:auto}.wardrobe-card b{font-size:12px;font-weight:500;margin-top:8px}.wardrobe-card small{font-size:8px;line-height:1.8;color:#a49baa;margin-top:4px}.wardrobe-card.selected{border-color:#cdb48d7a;background:#ddb97b0a}.wardrobe-card.selected small{color:#ddc09a}.wardrobe-card.locked img{filter:saturate(.43);opacity:.58}.wardrobe-card.locked b{color:#b2a6b8}.collection-heading>span{font-size:11px;color:#baa9bc}.festival-collection-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:11px}.festival-collectible{display:flex;align-items:center;gap:13px;padding:14px;border:1px solid #c3aeca20;border-radius:13px;min-width:0}.festival-collectible img{width:73px;height:73px;flex:none;filter:saturate(.25);opacity:.5}.festival-collectible.owned{background:#c5a57b08;border-color:#cab29040}.festival-collectible.owned img{filter:none;opacity:1}.festival-collectible small{font-size:9px;color:#b29cba}.festival-collectible h4{font-size:13px;margin:3px 0;font-weight:500}.festival-collectible p{font-size:9px;color:#a79aaf;line-height:1.8}.festival-collectible span{display:block;font-size:8px;color:#b8c3ad;margin-top:7px}.time-badges{display:flex;flex-wrap:wrap;gap:10px}.time-badges span{display:flex;align-items:center;gap:7px;padding:8px 12px;border:1px solid #d9bd8542;border-radius:22px;font-size:11px;color:#e5c58e;background:#cba66709}
/* A single compact route into events and gifts, keeping the canvas primary. */
.game-shell .shell-event-action{position:relative;color:#e9c191}.shell-event-action i{position:absolute;right:4px;top:5px;min-width:13px;height:13px;border-radius:8px;background:#edbc85;color:#352838;font:9px/13px sans-serif;text-align:center;padding:0 3px}.shell-event-action i[hidden]{display:none}.game-shell .shell-event-action svg{color:#dfb47b}
.stage-season-button{display:inline-flex;align-items:center;gap:7px;border:1px solid #e6ae7145;background:#2b2339d9;color:#f0cb9b;font:10px/1.5 inherit;padding:6px 10px;border-radius:18px;pointer-events:auto;cursor:pointer;box-shadow:0 3px 13px #11172222}.stage-season-button:before{content:"";width:5px;height:5px;border-radius:50%;background:#edbd86}.stage-season-button span{font-size:8px;color:#bea9b8}.stage-season-button:hover{background:#46334b}.stage-festival-bar{display:flex;justify-content:center;gap:8px;align-items:center;margin-top:8px;pointer-events:auto}.stage-festival-bar button{font-family:inherit}.stage-back-story{border:0;background:transparent;color:#c4bdcf;font-size:10px;text-decoration:underline;text-underline-offset:4px;cursor:pointer}
.festival-session #stage-memories-label{color:#e6c698}.festival-session .stage-form{color:#dac39b}.stage-buffs{display:flex;gap:6px;justify-content:flex-end;min-height:0;margin-top:5px}.stage-buffs span{border-radius:8px;background:#243f3a88;border:1px solid #9bd6b02b;padding:2px 6px;font-size:8px;color:#bee1c9}.journal-festival-link{display:flex;align-items:center;justify-content:space-between;gap:12px;width:100%;margin:0 0 20px;border:1px solid #dbbb8c3a;background:#d4b68009;border-radius:12px;padding:12px 15px;color:#e8ccab;font:12px/1.5 inherit;cursor:pointer}.journal-festival-link span{font-size:10px;color:#b2a4bc}.festival-hub-trigger{color:#dcbd91}
@keyframes gift-spark{0%,100%{transform:scale(1) rotate(0)}45%{transform:scale(1.55) rotate(22deg)}}
@media(max-width:800px){.festival-feature{grid-template-columns:185px 1fr;padding:18px 18px 18px 5px;gap:8px}.festival-feature-art{min-height:190px}.festival-art-npc{width:159px;height:159px}.festival-art-hero{width:88px;height:88px;right:-1px}.festival-art-orbit{width:168px;height:168px}.festival-feature h3{font-size:24px}.event-reward-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.reward-milestone p{min-height:36px}.inventory-grid{grid-template-columns:1fr}.inventory-card{grid-template-columns:58px 1fr auto;align-items:center}.inventory-actions{grid-column:3;flex-direction:column;min-width:100px}.inventory-card p{max-width:390px}.festival-feature-copy>small{font-size:8px}}
@media(max-width:640px){.festival-hub{width:calc(100vw - 20px);max-height:calc(100dvh - 24px);padding:20px 16px 18px;border-radius:19px}.festival-hub-head{gap:11px}.festival-hub h2{font-size:23px}.festival-kicker{font-size:8px;letter-spacing:1px}.hub-wallet{gap:4px}.hub-wallet b{font-size:17px}.hub-wallet>span{display:none}.festival-hub .hub-close{width:33px;height:33px}.hub-tabs{margin:18px 0;padding:4px;gap:2px}.hub-tabs button{font-size:10px;padding:8px 1px;min-height:36px}.festival-feature{grid-template-columns:1fr;gap:0;padding:8px 17px 20px;position:relative}.festival-feature-art{min-height:137px;width:190px;margin:auto}.festival-art-npc{width:136px;height:136px;transform:translate(-17px,-1px) rotate(-3deg)}.festival-art-hero{width:83px;height:83px;bottom:1px;right:1px}.festival-art-orbit{width:134px;height:134px}.festival-art-spark{top:7px;right:17px}.festival-feature-copy{padding-top:8px;text-align:center}.festival-state{font-size:9px}.festival-feature h3{font-size:24px;margin:7px 0 8px;letter-spacing:.5px}.festival-feature p{font-size:11px;line-height:1.85}.festival-meta{justify-content:center;gap:8px;margin:11px 0 15px;font-size:9px}.festival-meta span+span:before{padding-right:8px}.festival-feature-actions{justify-content:center;gap:7px}.festival-hub .hub-primary{font-size:11px;padding:8px 12px;gap:10px;min-height:39px}.festival-hub .hub-gift-button{font-size:9px;padding:8px 9px;min-height:39px}.festival-feature-copy>small{font-size:8px;margin-top:11px}.hub-section-title{margin:22px 0 11px;gap:8px}.hub-section-title h3{font-size:13px}.hub-section-title>span{font-size:8px}.festival-grid{gap:7px}.festival-hub .festival-card{padding:10px 6px;gap:5px;flex-direction:column;text-align:center}.festival-card img{width:64px;height:64px}.festival-card small{font-size:8px}.festival-card b{font-size:11px;line-height:1.7}.festival-card em{font-size:7px;line-height:1.8}.reward-overview{gap:10px;padding:15px 12px;flex-wrap:wrap}.reward-clock{width:38px;height:38px}.reward-clock svg{width:23px;height:23px}.reward-overview strong{font-size:23px}.reward-overview small{font-size:9px}.reward-overview>p{font-size:8px;margin-left:auto;max-width:135px}.reward-grid,.event-reward-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.reward-milestone{padding:12px 10px;gap:7px}.reward-milestone-top>b{font-size:11px}.reward-milestone-top>span{font-size:7px}.reward-milestone h4{font-size:11px}.reward-milestone p{font-size:8px;min-height:43px}.reward-milestone button{font-size:9px;min-height:32px}.welcome-reward{padding:11px 10px;gap:6px;flex-wrap:wrap}.welcome-reward>span{font-size:10px}.welcome-reward>small{order:3;flex-basis:100%;font-size:8px}.welcome-reward>button{font-size:10px;padding:4px 11px}.inventory-card{grid-template-columns:48px 1fr;gap:9px 10px;padding:12px}.inventory-card img{width:49px;height:49px}.inventory-card h4{font-size:12px;margin-top:1px}.inventory-card p{font-size:9px}.inventory-actions{grid-column:1/-1;flex-direction:row}.inventory-actions button{min-height:34px;font-size:10px}.wardrobe-heading{align-items:flex-start;margin-bottom:16px;gap:10px}.wardrobe-heading h3,.collection-heading h3{font-size:15px}.wardrobe-heading p{font-size:9px;max-width:250px}.wardrobe-heading>span{font-size:10px}.wardrobe-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:7px}.festival-hub .wardrobe-card{padding:10px 5px 12px;border-radius:11px}.wardrobe-card img{width:94px;height:auto;max-width:100%}.wardrobe-card b{font-size:9px;margin-top:6px}.wardrobe-card small{font-size:7px;line-height:1.7}.festival-collection-grid{grid-template-columns:1fr;gap:9px}.festival-collectible{padding:12px;gap:12px}.festival-collectible img{width:68px;height:68px}.festival-collectible h4{font-size:13px}.festival-collectible p{font-size:10px}.collection-heading>span{font-size:9px}.hub-status{bottom:-18px;font-size:10px}.game-shell .shell-brand-mark{display:none}.game-shell .shell-profile{width:31px;min-width:31px}.game-shell .shell-event-action{width:35px}.shell-event-action i{right:0;top:1px;min-width:11px;height:11px;font-size:8px;line-height:11px}.stage-festival-bar{justify-content:flex-start;gap:8px;margin-top:7px}.stage-season-button{font-size:9px;padding:5px 8px;gap:5px}.stage-season-button span{font-size:7px}.stage-back-story{font-size:8px}.stage-buffs{position:absolute;right:0;top:31px;margin:0}.stage-buffs span{font-size:7px;padding:1px 4px}.journal-festival-link{font-size:11px;padding:10px 12px}.journal-festival-link span{font-size:8px}}
@media(max-width:360px){.game-shell .shell-profile{width:28px;min-width:28px}.game-shell .shell-labeled-action,.game-shell .shell-icon-action,.game-shell .shell-event-action{width:28px}.game-shell .shell-game-name{font-size:10px}.festival-hub{padding-left:13px;padding-right:13px}.festival-meta{font-size:8px}.festival-feature-actions{gap:6px}.festival-hub .hub-gift-button{padding:8px 7px;font-size:8px}.festival-hub .hub-primary{padding:8px 10px}.reward-overview>p{font-size:7px;max-width:121px}}
@media(prefers-reduced-motion:reduce){.festival-hub button{transition:none}.gift-claimed .hub-wallet svg{animation:none}.festival-hub::backdrop{backdrop-filter:none}}
.reduced-motion .festival-hub button{transition:none}.reduced-motion .gift-claimed .hub-wallet svg{animation:none}

/* The toolbar already opens the same gift hub. Keep the in-scene return link
   for festival visits, and reserve real space for any active item badges. */
@media(max-width:640px){
  .dream-play:not(.festival-session) #dream-stage .stage-festival-bar{display:none}
  .festival-session #dream-stage .stage-reading .stage-festival-bar{display:flex;flex-wrap:wrap;gap:8px;margin-top:6px}
  .festival-session #dream-stage .stage-reading .stage-season-button,
  .festival-session #dream-stage .stage-reading .stage-back-story{min-height:36px;font-size:11px}
  #dream-stage .stage-reading .stage-buffs{position:static;inset:auto;grid-column:1/-1;justify-self:end;flex-wrap:wrap;gap:6px;margin:4px 0 0}
  #dream-stage .stage-reading .stage-buffs:empty{display:none}
  #dream-stage .stage-reading .stage-buffs span{font-size:9px;line-height:1.5;padding:1px 5px}
}

.travel-supply{display:flex;gap:18px;align-items:center;justify-content:space-between;padding:18px;margin-top:17px;border:1px solid #b4d4c52b;border-radius:13px;background:#9ec9b006}.travel-supply h3{font-size:13px}.travel-supply p{font-size:10px;color:#aaa0b5;margin-top:4px}.travel-supply small{display:block;font-size:9px;color:#bcb594;margin-top:7px}.travel-supply button{border:1px solid #c8d4ad44;background:#b6ca9910;color:#cadbb7;font-size:10px;min-height:36px;border-radius:8px;padding:7px 13px;white-space:nowrap}.travel-supply button:disabled{opacity:.5}@media(max-width:640px){.travel-supply{padding:13px;gap:10px;align-items:flex-start;flex-direction:column}.travel-supply button{align-self:flex-end;font-size:9px}.travel-supply p{font-size:9px}}
