:root{--night: #0b1410;--forest: #15241c;--moss: #2f4d3c;--gold: #d4b46a;--gold-bright: #f0d78c;--parchment: #efe4cc;--parchment-deep: #d9c7a3;--ink: #2a1c12;--ink-soft: #5c4632;--danger: #8a3a2a;--serif: "Cormorant Garamond", Georgia, serif;--fun: "Fredoka", "Segoe UI", sans-serif;--sans: "Source Sans 3", "Segoe UI", sans-serif;--radius: 18px}*,*:before,*:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;text-size-adjust:100%;background:var(--night)}html,body,#root{min-height:100%;min-height:100dvh}body{margin:0;color:var(--parchment);font-family:var(--sans);background:var(--night);overflow-x:clip}button,input{font:inherit;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:10px}button,a,input{touch-action:manipulation;-webkit-tap-highlight-color:transparent}.sky{position:fixed;top:0;right:0;bottom:0;left:0;z-index:0;pointer-events:none;background:radial-gradient(1200px 600px at 50% -10%,#1e3a2c 0%,transparent 55%),radial-gradient(800px 500px at 90% 100%,#1a2c22 0%,transparent 50%),radial-gradient(2px 2px at 12% 18%,#f0d78c 50%,transparent 51%),radial-gradient(1.5px 1.5px at 28% 42%,#efe4cc 50%,transparent 51%),radial-gradient(1.5px 1.5px at 72% 22%,#d4b46a 50%,transparent 51%),radial-gradient(2px 2px at 86% 58%,#efe4cc 50%,transparent 51%),radial-gradient(1px 1px at 44% 12%,#f0d78c 50%,transparent 51%),radial-gradient(1px 1px at 61% 71%,#d4b46a 50%,transparent 51%),linear-gradient(180deg,#0b1410,#121c16)}.topo{position:fixed;top:0;right:0;bottom:0;left:0;z-index:0;pointer-events:none;opacity:.18;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='220' height='220' viewBox='0 0 220 220'%3E%3Cpath fill='none' stroke='%23d4b46a' stroke-width='1' d='M10 110c30-50 70-50 100 0s70 50 100 0M10 70c40-40 80-20 100 10s70 40 100 0M10 150c40-30 70-10 100 10s80 20 100-20'/%3E%3C/svg%3E");background-size:220px 220px}.gate{position:relative;isolation:isolate;min-height:100vh;min-height:100dvh;display:grid;place-items:center;padding:max(24px,env(safe-area-inset-top,0px)) max(16px,env(safe-area-inset-right,0px)) max(24px,env(safe-area-inset-bottom,0px)) max(16px,env(safe-area-inset-left,0px))}.gate-card{position:relative;z-index:1;width:min(520px,100%);padding:40px 36px 32px;color:var(--ink);background:radial-gradient(circle at 12% 8%,rgba(212,180,106,.22),transparent 36%),linear-gradient(160deg,var(--parchment) 0%,var(--parchment-deep) 100%);border:1px solid rgba(42,28,18,.18);border-radius:var(--radius);box-shadow:0 24px 60px #00000061,inset 0 0 0 1px #fff8e666}.gate-card.is-shaking{animation:shake .45s ease}.gate-kicker{margin:0 0 8px;letter-spacing:.28em;text-transform:uppercase;font-size:.72rem;font-weight:600;color:var(--ink-soft)}.gate-title{margin:0 0 24px;font-family:var(--serif);font-size:clamp(2rem,5vw,2.7rem);font-weight:600;line-height:1.1}.riddle{margin:0 0 28px;padding:0;border:0}.riddle p{margin:0 0 .35em;font-family:var(--serif);font-size:1.25rem;font-style:italic;line-height:1.45}.riddle p:last-child{margin-top:12px;font-style:normal;font-weight:600}.gate-form label{display:block;margin-bottom:8px;font-size:.85rem;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-soft)}.gate-form input{width:100%;min-height:48px;margin-bottom:14px;padding:12px 14px;font-size:16px;color:var(--ink);background:#fffaeeb3;border:1px solid rgba(42,28,18,.22);border-radius:10px;outline:none}.gate-form input:focus{border-color:var(--gold);box-shadow:0 0 0 3px #d4b46a47}.gate-form button{width:100%;min-height:48px;padding:12px 16px;color:var(--night);font-size:16px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;background:linear-gradient(180deg,var(--gold-bright),var(--gold));border:0;border-radius:10px;cursor:pointer}.gate-form button:hover:not(:disabled){filter:brightness(1.05)}.gate-form button:disabled{opacity:.7;cursor:wait}.gate-status{min-height:3.2em;margin:14px 0 0;font-size:.95rem;color:var(--danger)}.gate-status .hint{display:block;margin-top:8px;color:var(--ink-soft);font-style:italic}@keyframes shake{0%,to{transform:translate(0)}20%{transform:translate(-8px)}40%{transform:translate(8px)}60%{transform:translate(-5px)}80%{transform:translate(5px)}}@media(max-width:560px){.gate-card{padding:24px 18px 20px}.gate-title{font-size:clamp(1.7rem,8vw,2.2rem);margin-bottom:18px}.riddle{margin-bottom:20px}.riddle p{font-size:1.12rem}}@media(max-width:380px){.gate-kicker{letter-spacing:.18em}}.puzzle-page{position:relative;isolation:isolate;min-height:100vh;min-height:100dvh;display:grid;place-items:center;padding:max(24px,env(safe-area-inset-top,0px)) max(16px,env(safe-area-inset-right,0px)) max(24px,env(safe-area-inset-bottom,0px)) max(16px,env(safe-area-inset-left,0px))}.puzzle-card{position:relative;z-index:1;width:min(420px,100%);padding:32px 22px 24px;color:var(--ink);background:radial-gradient(circle at 12% 8%,rgba(212,180,106,.22),transparent 36%),linear-gradient(160deg,var(--parchment) 0%,var(--parchment-deep) 100%);border:1px solid rgba(42,28,18,.18);border-radius:var(--radius);box-shadow:0 24px 60px #00000061,inset 0 0 0 1px #fff8e666}.puzzle-lead{margin:0 0 22px;color:var(--ink-soft);line-height:1.45}.slider{touch-action:none;user-select:none;-webkit-user-select:none}.slider-tray{position:relative;width:100%;aspect-ratio:1;border-radius:18px;background:#1c1c1c;box-shadow:inset 0 0 0 10px #2a2a2a,0 10px 24px #00000047}.slider-tile,.slider-gap{position:absolute;top:calc(10px + var(--row) * ((100% - 20px) / var(--grid-size, 3)));left:calc(10px + var(--col) * ((100% - 20px) / var(--grid-size, 3)));width:calc((100% - 20px) / var(--grid-size, 3) - 3px);height:calc((100% - 20px) / var(--grid-size, 3) - 3px)}.slider-tile{display:grid;place-items:center;margin:0;padding:0;border:0;border-radius:4px;font-family:var(--serif);font-size:clamp(1.8rem,10vw,2.6rem);font-weight:600;line-height:1;color:#171717;cursor:pointer;transition:top .16s ease,left .16s ease}.slider-tile.is-light{background:#f4f4f1}.slider-tile.is-dark{background:#e10600}.slider-gap{border-radius:4px;background:#111}.puzzle-card.is-solved .slider-tray{box-shadow:inset 0 0 0 10px #2a2a2a,0 0 0 2px var(--gold)}@media(max-width:430px){.puzzle-card{padding:24px 14px 18px}.puzzle-card .gate-title{font-size:clamp(1.6rem,8vw,2.1rem);margin-bottom:10px}}.salad-card{width:min(440px,100%)}.salad-card .gate-title{margin-bottom:10px}.salad-words{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 18px;padding:0;list-style:none}.salad-words li{padding:6px 12px;font-family:var(--serif);font-size:1.15rem;background:#2a1c1214;border-radius:999px}.salad-words li.is-found{color:var(--ink-soft);text-decoration:line-through;background:#2a1c120d}.salad{display:grid;grid-template-columns:repeat(8,1fr);gap:3px;padding:8px;touch-action:none;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none;background:#1c1c1c;border-radius:14px;box-shadow:0 10px 24px #00000047}.salad-cell{display:grid;place-items:center;aspect-ratio:1;min-height:0;font-family:var(--serif);font-size:clamp(.95rem,4.6vw,1.25rem);font-weight:700;color:var(--parchment);background:#2a3830;border-radius:4px}.salad-cell.is-selecting{color:var(--night);background:var(--gold-bright)}.salad-cell.is-found{color:var(--night);background:var(--gold)}.salad-cell.is-found.is-selecting{background:var(--gold-bright)}@media(max-width:430px){.salad{gap:2px;padding:6px}.salad-cell{font-size:clamp(.9rem,4.2vw,1.1rem)}}.voucher-page{position:relative;isolation:isolate;min-height:100vh;min-height:100dvh;display:grid;place-items:center;padding:max(24px,env(safe-area-inset-top,0px)) max(16px,env(safe-area-inset-right,0px)) max(24px,env(safe-area-inset-bottom,0px)) max(16px,env(safe-area-inset-left,0px));overflow:hidden}.party-sky{background:radial-gradient(900px 480px at 15% 0%,rgba(255,90,122,.28),transparent 55%),radial-gradient(800px 500px at 90% 10%,rgba(76,201,240,.22),transparent 50%),radial-gradient(700px 420px at 50% 100%,rgba(6,214,160,.16),transparent 55%),linear-gradient(180deg,#140b18,#0b1410)}.confetti,.fireworks{position:fixed;top:0;right:0;bottom:0;left:0;z-index:3;pointer-events:none;overflow:hidden}.confetti-piece{position:absolute;top:-8vh;border-radius:2px;animation-name:confetti-fall;animation-timing-function:linear;animation-iteration-count:infinite}.confetti-piece.is-circle{border-radius:50%}.confetti-piece.is-strip{border-radius:2px}.firework{position:absolute;width:2px;height:2px}.spark{position:absolute;left:0;top:0;width:7px;height:7px;border-radius:50%;background:var(--spark);animation:spark-burst 2s ease-out infinite}.ticket{position:relative;z-index:2;display:grid;grid-template-columns:110px 1fr;width:min(720px,100%);color:var(--ink);background:radial-gradient(circle at 88% 12%,rgba(255,90,122,.16),transparent 28%),linear-gradient(165deg,#fff6e8,#ffe3c4 48%,#ffd6e0);border-radius:28px;box-shadow:0 28px 70px #0000006b,0 0 0 6px #ffd66659;overflow:hidden;animation:ticket-pop .9s cubic-bezier(.18,.9,.24,1) both,ticket-float 3.6s .9s ease-in-out infinite}.party-banner{position:absolute;top:14px;right:-36px;z-index:3;margin:0;padding:8px 48px;color:#3b140c;font-family:var(--fun);font-size:.95rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase;background:linear-gradient(90deg,#ffd166,#ff7b54);box-shadow:0 8px 18px #ff7b5459;transform:rotate(18deg);animation:banner-wiggle 1.8s ease-in-out infinite}.ticket-stub{display:flex;flex-direction:column;align-items:center;justify-content:space-between;padding:28px 12px;color:#fff6e8;background:linear-gradient(180deg,#ff5a7a,#c77dff 52%,#4cc9f0);position:relative}.ticket-stub:after{content:"";position:absolute;top:16px;bottom:16px;right:-8px;width:16px;background-image:radial-gradient(circle,#140b18 5px,transparent 6px);background-size:16px 22px;background-position:center;background-repeat:repeat-y}.stub-label{letter-spacing:.28em;text-transform:uppercase;font-family:var(--fun);font-size:.78rem;writing-mode:vertical-rl;transform:rotate(180deg)}.stub-code{font-family:var(--fun);font-size:1.2rem;letter-spacing:.12em}.party-star{width:48px;height:48px;color:#ffd166;filter:drop-shadow(0 4px 8px rgba(0,0,0,.2));animation:star-spin 2.8s ease-in-out infinite}.ticket-body{position:relative;padding:42px 40px 28px}.ticket-header{display:grid;gap:4px;padding-right:110px}.ticket-kicker,.ticket-for{margin:0;letter-spacing:.08em;text-transform:uppercase;font-family:var(--fun);font-size:.78rem;color:#a14a3a}.ticket-for strong{display:inline-block;color:#7a1233;font-size:1.55rem;font-weight:700;letter-spacing:.04em;line-height:1.1}.ticket-title{margin:12px 0 8px;font-family:var(--fun);font-size:clamp(1.9rem,7vw,3.2rem);font-weight:700;line-height:1.05;overflow-wrap:anywhere;color:#7a1233}.ticket-cheer{margin:0 0 22px;font-family:var(--serif);font-size:1.2rem;font-style:italic;color:#5c4632}.ticket-meta{display:grid;grid-template-columns:1.4fr .8fr;gap:20px;margin:0 0 24px}.ticket-meta dt{margin-bottom:4px;letter-spacing:.1em;text-transform:uppercase;font-family:var(--fun);font-size:.72rem;color:#a14a3a}.ticket-meta dd{margin:0;font-family:var(--serif);font-size:1.35rem}.ticket-meta .secret{font-style:italic}.crew h2{margin:0 0 10px;letter-spacing:.1em;text-transform:uppercase;font-family:var(--fun);font-size:.72rem;font-weight:600;color:#a14a3a}.crew ul{display:flex;flex-wrap:wrap;gap:8px;margin:0;padding:0;list-style:none}.crew li{padding:8px 14px;font-family:var(--fun);font-size:1.1rem;border-radius:999px;transform:rotate(-3deg);animation:rise .55s ease both}.crew li.is-coral{background:#ffb3c2;transform:rotate(-4deg)}.crew li.is-mint{background:#9cf0d6;transform:rotate(3deg)}.crew li.is-sky{background:#9ee7fb;transform:rotate(-2deg)}.crew li.is-grape{background:#e3c6ff;transform:rotate(4deg)}.ticket-footer{margin:24px 0 0;padding-top:16px;padding-right:100px;border-top:2px dashed rgba(161,74,58,.28);font-size:.95rem;color:#5c4632}.secret-stamp{position:absolute;right:22px;bottom:18px;z-index:1;display:grid;place-items:center;box-sizing:border-box;width:86px;height:86px;padding:8px;color:#c1121f;font-family:var(--fun);background:#ffd6e0;border:3px solid #c1121f;border-radius:50%;transform:rotate(-18deg);opacity:.92;animation:stamp-in .7s .7s cubic-bezier(.2,1.4,.3,1) both}.secret-stamp>span{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.08em;text-align:center;font-size:.64rem;font-weight:700;line-height:1;letter-spacing:.1em;text-transform:uppercase;padding-left:.1em}@keyframes confetti-fall{0%{transform:translate3d(0,-12vh,0) rotate(0);opacity:1}to{transform:translate3d(var(--drift),115vh,0) rotate(720deg);opacity:.85}}@keyframes spark-burst{0%{transform:rotate(var(--angle)) translateY(0) scale(1);opacity:1}to{transform:rotate(var(--angle)) translateY(-78px) scale(.15);opacity:0}}@keyframes ticket-pop{0%{opacity:0;transform:scale(.72) rotate(-8deg)}70%{opacity:1;transform:scale(1.05) rotate(1.5deg)}to{transform:scale(1) rotate(0)}}@keyframes ticket-float{0%,to{transform:translateY(0)}50%{transform:translateY(-8px)}}@keyframes banner-wiggle{0%,to{transform:rotate(18deg)}50%{transform:rotate(14deg)}}@keyframes star-spin{0%,to{transform:rotate(-8deg) scale(1)}50%{transform:rotate(12deg) scale(1.12)}}@keyframes rise{0%{opacity:0;transform:translateY(10px) scale(.9)}to{opacity:1}}@keyframes stamp-in{0%{opacity:0;transform:rotate(-40deg) scale(1.6)}to{opacity:.92;transform:rotate(-18deg) scale(1)}}@media(max-width:700px){.ticket{grid-template-columns:1fr}.party-banner{top:10px;right:-28px;padding:7px 40px;font-size:.82rem}.ticket-stub{flex-direction:row;gap:12px;min-height:56px;padding:12px 18px}.stub-label{writing-mode:horizontal-tb;transform:none}.party-star{width:32px;height:32px}.ticket-stub:after{top:auto;right:16px;left:16px;bottom:-8px;width:auto;height:16px;background-image:radial-gradient(circle,#140b18 5px,transparent 6px);background-size:22px 16px;background-repeat:repeat-x}.ticket-body{padding:28px 18px 22px}.ticket-header{padding-right:96px}.ticket-header,.ticket-meta{grid-template-columns:1fr;display:grid;gap:10px}.ticket-title{margin:10px 0 6px}.ticket-footer{padding-right:86px}.secret-stamp{width:74px;height:74px;right:12px;bottom:12px;padding:7px}.secret-stamp>span{font-size:.54rem}}@media(prefers-reduced-motion:reduce){.confetti,.fireworks,.ticket,.party-banner,.party-star,.crew li,.secret-stamp{animation:none!important}}
