.hero{isolation:isolate;padding-bottom:110px}.hero-bg{z-index:-3}.content{transition:opacity .8s,filter .8s,transform .8s}.hero.ritual-playing .content{opacity:.15;filter:blur(3px);transform:translateY(-12px);pointer-events:none}.hero-logo{animation:none}.ch{animation:none}.festival-controls{position:absolute;top:25px;right:28px;z-index:7;display:flex;gap:8px}.festival-controls button{border:1px solid #f3c06150;border-radius:30px;background:#100e23b8;color:#ffe6b0;padding:9px 14px;font:500 12px var(--body);cursor:pointer;backdrop-filter:blur(12px)}.moon-meter{position:absolute;top:26px;left:30px;z-index:6;display:flex;align-items:center;gap:12px;text-align:left;color:#ffe6ac;font:600 13px var(--head);text-shadow:0 2px 10px #000}.moon-orbit{display:grid;place-items:center;width:45px;height:45px;border:1px solid #f3c06170;border-radius:50%;font-size:30px;box-shadow:0 0 25px #f3c06120}.moon-meter small{display:block;font:11px var(--body);color:#d6cbb3;margin:3px 0}.moon-meter progress{width:155px;height:4px;display:block;accent-color:#f3c061;border:0;border-radius:4px;overflow:hidden}.moon-meter progress::-webkit-progress-bar{background:#ffffff20}.moon-meter progress::-webkit-progress-value{background:linear-gradient(90deg,#bc7d25,#fff0ac)}.festival-enter{padding:13px 32px;border:1px solid #f3c06190;border-radius:12px;background:linear-gradient(135deg,#22152de8,#493023d9);color:#ffe6ac;box-shadow:0 5px 30px #0005,inset 0 1px #fff1;font:600 17px var(--head);cursor:pointer;transition:.25s}.festival-enter:hover{border-color:#ffe3a0;box-shadow:0 0 25px #f3c06140;transform:translateY(-2px)}.festival-enter span{display:block;font:11px var(--body);letter-spacing:1px;margin-top:3px;color:#d4c4ac}.live-dot{display:inline-block;width:5px;height:5px;background:#a7d9b1;border-radius:50%;margin:0 4px 2px 10px}.counter{font-size:12px}#river-objects{position:absolute;inset:0;z-index:2;pointer-events:none;overflow:hidden}.river-item{position:absolute;left:0;top:0;border:0;background:none;color:#fff1c8;pointer-events:auto;cursor:pointer;will-change:transform;filter:drop-shadow(0 0 8px #f5ae3960)}.river-item img{display:block;width:100%;height:auto}.river-item .river-label{position:absolute;top:100%;left:50%;transform:translateX(-50%);white-space:nowrap;font:11px var(--head);text-shadow:0 2px 4px #000;background:#160e24b8;padding:2px 8px;border-radius:20px;max-width:140px;overflow:hidden;text-overflow:ellipsis}.river-item:focus-visible{outline:2px solid #ffe6a7;outline-offset:5px}.river-item.reflection:after{content:'';position:absolute;left:10%;right:10%;top:90%;height:40%;background:var(--reflection) center top/contain no-repeat;transform:scaleY(-1);opacity:.16;filter:blur(2px);mask-image:linear-gradient(transparent,#000)}.festival-dock{position:fixed;z-index:12;bottom:20px;left:50%;width:min(820px,calc(100% - 32px));transform:translate(-50%,130%);opacity:0;visibility:hidden;transition:.4s;background:linear-gradient(150deg,#1d152af2,#0e0c1df5);border:1px solid #f3c06160;border-radius:22px;padding:16px 20px;box-shadow:0 15px 90px #000a;backdrop-filter:blur(22px)}.festival-dock.open{transform:translate(-50%,0);opacity:1;visibility:visible}.dock-heading{display:flex;justify-content:space-between;align-items:center;margin:0 4px 12px;color:#b79a6a;font:9px var(--serif);letter-spacing:2px}.dock-heading b{font:500 14px var(--head);letter-spacing:0;color:#ffebbd;display:block;margin-top:3px}.dock-heading button,.modal-close{background:none;border:0;color:#d5c4a7;font-size:26px;cursor:pointer}.activity-grid{display:grid;grid-template-columns:repeat(6,1fr);gap:8px}.activity{display:flex;flex-direction:column;align-items:center;border:1px solid #f3c06120;background:#ffffff03;border-radius:13px;color:#ffe6b0;cursor:pointer;padding:9px 3px 12px;transition:.2s;font-family:var(--head)}.activity:hover{background:#f3c06112;border-color:#f3c06180;transform:translateY(-4px)}.activity img{width:65px;height:62px;object-fit:contain;filter:drop-shadow(0 3px 9px #f3c06130);margin-bottom:5px}.activity b{font-size:12px}.activity small{font:10px var(--body);color:#b8adc5;margin-top:3px}.festival-modal{position:fixed;inset:0;margin:auto;width:min(580px,calc(100% - 28px));max-height:90svh;overflow-y:auto;background:radial-gradient(ellipse at top,#35223e,#100f20 70%);color:#f5ebd9;border:1px solid #e2b35470;border-radius:24px;padding:34px;box-shadow:0 20px 100px #000b;font-family:var(--body);text-align:center}.festival-modal::backdrop{background:#050413b8;backdrop-filter:blur(8px)}.modal-close{position:absolute;right:17px;top:10px}.modal-eyebrow{font:9px var(--serif);letter-spacing:2px;color:#c7a16c;margin:4px 0 13px}.festival-modal h2{font:700 29px var(--head);color:#ffe5a7;margin-bottom:8px}.festival-modal p{font-size:14px;line-height:1.7;color:#c7bfd0}.krathong-picker{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:22px 0}.krathong-choice{border:1px solid #f3c06125;border-radius:12px;padding:8px 4px;color:#cfc5d7;background:#ffffff04;font:12px var(--head);cursor:pointer}.krathong-choice img{width:100%;height:67px;object-fit:contain;display:block;margin-bottom:5px}.krathong-choice[aria-pressed=true]{border-color:#f3c061;background:#f3c06115;box-shadow:0 0 16px #f3c06116;color:#ffe6ac}#personal-fields{text-align:left;margin-top:20px}#personal-fields label{display:block;font-size:12px;color:#d8c3a2;margin:12px 0 6px}#personal-fields input,#personal-fields textarea{display:block;width:100%;border:1px solid #e0b56335;background:#05051265;border-radius:10px;padding:11px 13px;color:#fff1d1;font:14px var(--body);margin-top:6px;resize:vertical}#personal-fields input:focus,#personal-fields textarea:focus{outline:1px solid #f3c061}.public-note{font-size:11px;color:#a79cb4}.festival-submit{width:100%;padding:13px;margin-top:18px;border:1px solid #ffdfa0;border-radius:12px;background:linear-gradient(110deg,#ffe5ae,#dcaa4b);color:#36220b;cursor:pointer;font:700 16px var(--head)}.festival-submit:disabled{opacity:.55;cursor:wait}.modal-footer{margin-top:20px;color:#8f809b;font-size:10px;letter-spacing:.5px}.ritual-art{height:140px;margin:15px auto 0;display:none;position:relative}.ritual-art img{height:100%;max-width:100%;object-fit:contain;filter:drop-shadow(0 0 20px #edb34c60)}.ritual-art.shaking img{animation:shake .14s infinite alternate}@keyframes shake{from{transform:rotate(-9deg)}to{transform:rotate(9deg)}}.ritual-result{white-space:pre-line;color:#ffe4a4;font:600 17px/1.8 var(--head);margin-top:12px}.ritual-result .lucky-digits{font:700 66px var(--serif);letter-spacing:12px;display:block;text-shadow:0 0 24px #e7a63890;animation:reveal .8s both}@keyframes reveal{from{opacity:0;transform:translateY(25px) scale(.8);filter:blur(12px)}to{opacity:1;transform:none;filter:none}}.form-error{color:#ffb5a4!important;min-height:1em;font-size:12px!important;margin-top:8px}.festival-announcement{position:fixed;top:15%;left:50%;transform:translate(-50%,-15px);z-index:30;max-width:90vw;pointer-events:none;border:1px solid #f3c06180;border-radius:16px;padding:16px 26px;background:#140e24e8;box-shadow:0 0 50px #f3c06120;color:#ffe6ab;text-align:center;font:600 16px var(--head);opacity:0;transition:.4s}.festival-announcement.show{opacity:1;transform:translate(-50%,0)}.hero.moon-awake:after{content:'';position:absolute;inset:0;pointer-events:none;z-index:2;background:radial-gradient(circle at 69% 12%,#ffdb8640,transparent 50%);animation:reveal 2s both}.wish-card{max-width:430px}.wish-card p{margin:20px 0;white-space:pre-wrap;overflow-wrap:anywhere}.reduced-effects *{scroll-behavior:auto!important}.reduced-effects .river-item{will-change:auto}.reduced-effects .ritual-art img{animation:none}@media(max-width:800px){.moon-meter{left:18px;top:20px}.festival-controls{right:16px;top:20px}.festival-controls button{padding:8px 10px}.festival-controls span{display:none}.hero{padding-top:100px}.activity b{font-size:11px}.activity small{display:none}}@media(max-width:640px){.hero{padding:100px 16px 130px;min-height:100svh}.hero-logo{width:210px}.kicker{font-size:9px;letter-spacing:2px}h1{font-size:clamp(30px,8vw,44px)}.hero-stamp{font-size:10px;letter-spacing:1px;padding:8px 12px}.sub{font-size:13px;max-width:340px}.cd .cell{min-width:55px}.btn{padding:12px 20px;font-size:14px}.moon-meter{font-size:11px}.moon-meter small{font-size:9px}.moon-meter progress{width:125px}.moon-orbit{width:32px;height:32px;font-size:24px}.festival-dock{bottom:10px;padding:12px}.activity-grid{grid-template-columns:repeat(3,1fr)}.activity{padding:6px}.activity img{height:43px;width:48px}.festival-modal{padding:30px 20px 22px}.festival-modal h2{font-size:25px}.festival-enter{font-size:15px;padding:12px 22px}.counter{font-size:10px}.ch.gm{width:48vw;left:-35px}.ch.mage{width:56vw;right:-40px}.cast{z-index:3}.content{z-index:4}.ritual-result .lucky-digits{font-size:49px}.corner{display:none}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}

.activity img,.ritual-art img{mix-blend-mode:screen}.activity{background-color:#211a2d}

#river-objects{z-index:5}

.river-item.reflection:before{content:'';position:absolute;width:50%;height:14%;left:25%;top:78%;border:1px solid #ffe5a74d;border-radius:50%;box-shadow:0 0 10px #f3c06120;animation:water-ripple 3s ease-out infinite;pointer-events:none}
@keyframes water-ripple{from{transform:scale(.5);opacity:.65}to{transform:scale(2);opacity:0}}
.ritual-art.shaking:after{content:'';position:absolute;inset:-20px;background:url('smoke.png') center/contain no-repeat;opacity:.4;mix-blend-mode:screen;animation:smoke-rise 1.8s ease-out infinite;pointer-events:none}
@keyframes smoke-rise{from{transform:translateY(25px) scale(.7);opacity:0}50%{opacity:.5}to{transform:translateY(-25px) scale(1.3);opacity:0}}
.reduced-effects .river-item:before,.reduced-effects .ritual-art:after{animation:none}

.activity img[src$="halo.png"],.activity img[src$="moonglow.png"],.activity img[src$="sparklegold.png"],.ritual-art img[src$="halo.png"],.ritual-art img[src$="moonglow.png"],.ritual-art img[src$="sparklegold.png"]{mask-image:radial-gradient(circle,#000 30%,transparent 72%)}

.hero-logo{max-height:135px;object-fit:contain}@media(min-width:801px){.hero{padding-top:75px;padding-bottom:95px}}

/* River rendering owns contact, reflection and ripples; no mirrored CSS stickers. */
.living-water{position:absolute;inset:0;width:100%;height:100%;z-index:-1;pointer-events:none}
.river-item.reflection{filter:none;transform-origin:50% 96%}
.river-item.reflection:before,.river-item.reflection:after{display:none}
.river-item.reflection img{clip-path:inset(0 0 4% 0)}
.river-item .river-label{top:99%;font-size:10px;background:#160e2480}

#river-objects{z-index:3}.river-item:not(button){pointer-events:none}
/* Keep animated smoke, rotating art and focus outlines inside the dialog. */
@font-face{font-family:Chonburi;src:url('fonts/Chonburi-Regular.ttf') format('truetype');font-display:swap}
.festival-modal{overflow-x:hidden;overscroll-behavior:contain;scrollbar-width:thin;scrollbar-color:#8c6942 #141020;overflow-wrap:anywhere}
.festival-modal form,.festival-modal label{min-width:0;max-width:100%}
.ritual-art{overflow:hidden;contain:paint;isolation:isolate;max-width:100%;border-radius:18px}
body:has(.festival-modal[open]){overflow:hidden}
.lucky-stage{position:relative;width:min(100%,46svh);aspect-ratio:1.2;margin:8px auto 0;overflow:hidden;contain:paint;isolation:isolate;border-radius:20px;background:radial-gradient(ellipse at 50% 55%,#bd77251c,transparent 67%)}
.lucky-stage canvas{position:absolute;inset:0;width:100%;height:100%;display:block;pointer-events:none}
.lucky-stage .lucky-source{z-index:1}.lucky-stage .lucky-gold{z-index:2}
.lucky-stage[data-renderer=canvas] .lucky-gold{visibility:hidden}
.lucky-stage[data-phase=landed]{animation:ritual-impact .38s ease-out}
@keyframes ritual-impact{0%,100%{transform:translate(0)}20%{transform:translate(3px,-2px)}50%{transform:translate(-2px,1px)}75%{transform:translate(1px,0)}}
.lucky-stage[data-phase=landed]:after{content:'';position:absolute;inset:0;z-index:3;background:radial-gradient(ellipse,#ffe5ad55,transparent 65%);animation:landing-flash .4s both;pointer-events:none}
@keyframes landing-flash{to{opacity:0}}
.lucky-stage[hidden]{display:none}
.festival-modal.lucky-modal .ritual-art{display:none!important}
.festival-modal.lucky-modal .ritual-result{font-size:13px;margin-top:3px}
.festival-modal.lucky-modal .lucky-digits{display:none}
.festival-modal.lucky-modal .modal-footer{margin-top:13px}
.lucky-result-summary{font:600 14px/1.7 var(--head);color:#ffe6a7;letter-spacing:1px}
.lucky-modal .festival-submit{margin-top:10px}
@media(max-width:640px){.festival-modal{max-height:92svh;padding:28px 18px 20px}.festival-modal.lucky-modal h2{font-size:22px}.festival-modal.lucky-modal #activity-description{font-size:12px}.lucky-stage{width:min(100%,44svh)}}
.reduced-effects .lucky-stage{animation:none!important}

.lucky-stage[data-phase=smoke] .lucky-gold{visibility:hidden}
.festival-volume{display:flex;align-items:center;gap:6px;color:#dfc99f;font:11px var(--body);background:#100e23b8;border:1px solid #f3c06150;border-radius:30px;padding:6px 10px}
.festival-volume input{width:65px;accent-color:#edc575;cursor:pointer}
@media(max-width:640px){.festival-volume{font-size:0;gap:0;padding:6px}.festival-volume input{width:40px}}

@media(max-height:740px){.festival-modal.lucky-modal{padding:22px 24px 18px}.lucky-modal .modal-eyebrow{font-size:8px;margin:0 0 8px}.lucky-modal h2{font-size:24px;margin-bottom:5px}.lucky-modal #activity-description{font-size:12px;line-height:1.5}.lucky-stage{width:min(100%,39svh)}.lucky-modal .modal-footer{margin-top:8px;font-size:9px}.lucky-modal .form-error{margin-top:0;min-height:0}}
/* The lucky rite belongs to the festival scene, with no dialog or boxed backdrop. */
.lucky-scene-overlay{position:fixed;inset:0;z-index:15;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:0;overflow:hidden;padding:42px 15px 24px;pointer-events:none;background:radial-gradient(ellipse at center,#150d2260 0%,#100c201c 50%,transparent 78%)}
.lucky-scene-overlay[hidden]{display:none}
.lucky-scene-heading{text-align:center;color:#ffe9b6;text-shadow:0 3px 18px #000}
.lucky-scene-heading>span{font:10px var(--serif);letter-spacing:4px;color:#e4ba72}
.lucky-scene-heading h2{font:700 clamp(23px,3vw,38px) var(--head);margin-top:8px}
.lucky-scene-overlay .lucky-stage{width:min(94vw,75svh,1000px);max-height:none;flex:none;margin:0;background:none;border-radius:0}
.lucky-scene-overlay .lucky-stage canvas{mask-image:radial-gradient(ellipse,#000 38%,transparent 76%)}
.lucky-scene-result{min-height:56px;text-align:center;font:600 clamp(15px,2vw,21px)/1.7 var(--head);color:#ffe5a7;text-shadow:0 2px 10px #000;max-width:90vw;overflow-wrap:anywhere}
.lucky-scene-result small{display:block;font:12px/1.8 var(--body);color:#e2ccb0}
.lucky-scene-skip{position:absolute;top:24px;right:25px;pointer-events:auto;border:1px solid #e5bc7366;border-radius:30px;padding:10px 18px;background:#171022b8;color:#ffe7bd;cursor:pointer;font:13px var(--head)}
.hero.lucky-scene .content{opacity:.06;filter:blur(3px);pointer-events:none}
.hero.lucky-scene .cast{filter:brightness(.7);transition:filter .5s}
@media(max-width:640px){.lucky-scene-overlay{padding-top:68px}.lucky-scene-overlay .lucky-stage{width:100vw}.lucky-scene-skip{top:18px;right:16px;padding:8px 13px}.lucky-scene-heading>span{font-size:8px;letter-spacing:3px}.lucky-scene-result small{font-size:10px}}
@media(max-height:550px) and (min-width:641px){.lucky-scene-overlay{padding:15px}.lucky-scene-overlay .lucky-stage{width:65svh}.lucky-scene-heading h2{font-size:22px}.lucky-scene-heading>span{font-size:8px}.lucky-scene-result{font-size:14px;min-height:35px}}

body:has(.lucky-scene-overlay:not([hidden])){overflow:hidden}

.lucky-scene-skip{top:auto;bottom:24px}@media(max-width:640px){.lucky-scene-skip{top:auto;bottom:18px}}
