/* JP presentation only; amounts, eligibility and drawing stay server-controlled. */
.jp-page{--jp-ink:#392331;--jp-red:#b61235;--jp-muted:#81716f;color:var(--jp-ink);background:#fff8ee;min-height:70vh;padding-bottom:32px}
.jp-hero{background:#fff8ee;padding:16px 24px 20px;text-align:center}
.jp-topline{max-width:960px;margin:auto;display:flex;align-items:center;justify-content:space-between;gap:16px;font-size:12px}
.jp-back{color:#7d4c51;text-decoration:none}.jp-back:hover{text-decoration:underline}
.jp-preview{font-size:10px;letter-spacing:.06em;border:1px solid #dfc7b8;border-radius:5px;padding:3px 8px;color:#866b64}
.jp-brand{max-width:250px;margin:15px auto 10px}.jp-brand img{display:block;width:100%;height:auto;border-radius:10px}
.jp-lead{font-size:13px;line-height:1.7;font-weight:700;color:#87444f;margin:0}
.jp-content{max-width:960px;padding:0 20px;margin:0 auto;position:relative}
.jp-jackpot{background:#fffdf7;border:1px solid #ddb573;border-radius:24px;overflow:hidden;box-shadow:0 12px 32px #6b261516}
.jp-stage{position:relative;isolation:isolate;display:grid;grid-template-columns:1.05fr 1fr;align-items:center;gap:18px;padding:30px 32px 24px;color:#fff4d8;background:radial-gradient(ellipse at 80% 40%,#e15f45,transparent 60%),linear-gradient(125deg,#8c173b,#b82341 60%,#ce3446);overflow:hidden}
.jp-stage::before{content:'';position:absolute;inset:10px;border:1px solid #ffda9240;border-radius:17px;pointer-events:none;z-index:-1}
.jp-stage::after{content:'\2726';position:absolute;top:25px;right:27px;color:#ffd685;font-size:24px;pointer-events:none;text-shadow:-370px 260px 0 #ffcc7270,-20px 280px 0 #ffd99070;z-index:-1}
.jp-pool{text-align:center;min-width:0;position:relative}
.jp-pool-heading{display:flex;flex-direction:column;align-items:center;gap:18px;margin-bottom:12px}
.jp-eyebrow{font-size:13px;letter-spacing:.12em;font-weight:700;margin:0;color:#ffdfb5}
.jp-accumulation-status{display:inline-flex;align-items:center;gap:8px;padding:5px 14px 5px 9px;border:1px solid #ffda8d85;border-radius:30px;background:#73153066;color:#ffe4aa;font-size:12px;font-weight:800;letter-spacing:.12em}
.jp-accumulation-status>span::after{content:'';display:inline-block;width:5px;height:5px;border-radius:50%;background:#ffe299;margin-left:8px;vertical-align:middle;box-shadow:0 0 0 3px #ffdb7d20;animation:jp-accrual-dot 3s ease-in-out infinite}
.jp-coin-stack{position:relative;width:29px;height:24px;flex:none}.jp-coin-stack i{position:absolute;left:3px;width:22px;height:10px;border:1px solid #b98737;border-bottom-width:3px;border-radius:50%;background:linear-gradient(145deg,#ffedb2,#e6b859);box-shadow:inset 0 1px 0 #fff7d9}
.jp-coin-stack i:nth-child(1){bottom:0;left:0}.jp-coin-stack i:nth-child(2){bottom:6px;left:4px}.jp-coin-stack i:nth-child(3){bottom:12px;left:2px}
.jp-amount{display:flex;justify-content:center;align-items:baseline;gap:8px;line-height:1.1;font-variant-numeric:tabular-nums;white-space:nowrap}
.jp-amount strong{font-size:clamp(38px,5.5vw,64px);letter-spacing:-.045em;font-weight:900;color:#ffe6a4;text-shadow:0 3px 0 #7d193b,0 0 24px #ffcd5c35}.jp-amount>span{font-size:15px;font-weight:800;color:#ffe4b3}
.jp-growth-copy{font-size:11px;line-height:1.6;color:#ffddcc;margin:14px 0 0}.jp-update{font-size:10px;color:#efb7ac;margin:7px 0 0}
.jp-pool--paused .jp-accumulation-status>span::after{animation:none;background:#ccb7af;box-shadow:none}
.jp-prize{text-align:center;min-width:0;position:relative}.jp-prize-label{display:inline-block;margin:0 0 6px;background:#ffdfa1;color:#8c2840;font-size:11px;font-weight:800;letter-spacing:.1em;padding:4px 18px;border-radius:30px}
.jp-prize-art{position:relative;isolation:isolate;padding:5px 12px 21px}
.jp-prize-art::before{content:'';position:absolute;inset:-25px -10px -10px;background:repeating-conic-gradient(from 5deg,#ffe3a424 0deg 8deg,transparent 8deg 26deg);mask-image:radial-gradient(ellipse closest-side,#000 20%,transparent 100%);z-index:-1;pointer-events:none}
.jp-prize-art::after{content:'';position:absolute;width:215px;height:26px;left:50%;bottom:6px;transform:translateX(-50%);border-radius:50%;background:linear-gradient(#ffecbd,#e9b46b);box-shadow:0 7px 0 #a95944,0 11px 17px #5d0b3440;z-index:-1}
.jp-prize-art img{display:block;object-fit:contain;width:220px;height:244px;max-width:100%;margin:auto;filter:drop-shadow(0 10px 12px #430e3350)}
.jp-prize h2{font-size:14px;line-height:1.6;font-weight:800;margin:7px auto 0;max-width:320px;overflow-wrap:anywhere;color:#fff8e8}.jp-prize-score{font-size:11px;color:#ffd6b3;margin:3px 0 0}
.jp-play-area{padding:20px 28px 8px}.jp-action{text-align:center;min-width:0;max-width:420px;margin:auto}
.jp-ticket-balance{display:flex;align-items:center;justify-content:center;gap:7px;font-size:12px}.jp-ticket-balance strong{font-size:28px;font-weight:800;margin-left:4px;color:#9b233d;font-variant-numeric:tabular-nums}
.jp-ticket-symbol{background:#ffe5a6;border:1px dashed #b68b42;border-radius:4px;color:#91233c;padding:3px 7px;font-size:10px;font-weight:900;transform:rotate(-8deg)}
.jp-primary,.jp-secondary{display:block;box-sizing:border-box;width:100%;max-width:360px;margin:12px auto 0;padding:15px 18px;border-radius:12px;font-size:15px;font-weight:bold;text-align:center;cursor:pointer;text-decoration:none;transition:filter .15s,transform .15s}
.jp-primary{background:linear-gradient(135deg,#d82e4c,#b4163c);color:#fff;border:1px solid #ac1638;box-shadow:0 4px 0 #8c1d36}.jp-primary:hover{filter:brightness(1.08)}.jp-primary:active{transform:translateY(2px)}
.jp-secondary{background:#fff8ed;color:#684335;border:1px solid #e1c79d}.jp-primary:disabled{opacity:.5;cursor:wait}.jp-primary:focus-visible,.jp-secondary:focus-visible,.jp-rules summary:focus-visible{outline:3px solid #e5a324;outline-offset:4px}
.jp-help{font-size:11px;color:var(--jp-muted);margin:14px 0 0;line-height:1.7}.jp-odds{font-size:11px;color:#7a655f;margin:7px 0 0}.jp-message{font-size:12px;color:#a51c36;line-height:1.7;margin:8px 0 0}.jp-message:empty{display:none}.jp-login-copy{font-size:13px}
.jp-prize-note{margin:0;padding:4px 18px 17px;color:#8a7a70;font-size:10px;text-align:center;line-height:1.7}
.jp-steps{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;padding:26px 0;text-align:center}.jp-step{position:relative}.jp-step+.jp-step{border-left:1px solid #e6dcd1}.jp-step-icon{display:grid;place-items:center;width:45px;height:45px;background:#ffedcb;color:#af4c4c;border-radius:15px;margin:0 auto 8px;transform:rotate(-4deg)}.jp-step:nth-child(2) .jp-step-icon{background:#fbe2db;transform:rotate(5deg)}.jp-step:nth-child(3) .jp-step-icon{background:#e0eee4;transform:rotate(-4deg);color:#527b66}.jp-step-icon svg{width:29px;height:29px;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.jp-step>span{display:block;color:#b6804f;font-size:10px;font-weight:800;letter-spacing:.14em;margin-bottom:4px}.jp-step>strong{display:block;font-size:12px;font-weight:800}.jp-step>p{font-size:10px;color:var(--jp-muted);margin:5px 0 0;line-height:1.5}
.jp-rules{background:#fff;border:1px solid #e6d9cc;border-radius:14px;padding:17px 20px;font-size:12px;line-height:1.9}.jp-rules summary{font-weight:800;font-size:14px;cursor:pointer}.jp-rules ol{padding:16px 0 10px 20px;list-style:decimal}.jp-rules li+li{margin-top:6px}.jp-rules p{margin-top:10px}.jp-test-note{color:#897b82;font-size:11px}
.jp-history{margin-top:28px}.jp-history h2{font-weight:800;font-size:16px;margin-bottom:12px}.jp-winner{background:#fff;border:1px solid #ece3da;border-radius:12px;padding:15px 18px;margin-top:8px;font-size:12px}.jp-winner-heading{display:flex;justify-content:space-between;align-items:baseline;gap:12px}.jp-winner-heading strong{font-weight:700;overflow-wrap:anywhere}.jp-winner time{font-size:10px;color:var(--jp-muted);white-space:nowrap}.jp-winner p{font-size:11px;color:var(--jp-muted);margin:6px 0}.jp-winner>span{color:#a66c30;font-size:12px;font-weight:800}
@media(max-width:639px){.jp-hero{padding:12px 18px 15px}.jp-brand{max-width:206px;margin:12px auto 9px}.jp-lead{font-size:11px}.jp-content{padding:0 12px}.jp-jackpot{border-radius:20px}.jp-stage{grid-template-columns:1fr;gap:14px;padding:20px 19px 18px}.jp-stage::before{inset:7px;border-radius:13px}.jp-stage::after{top:19px;right:18px;font-size:16px}.jp-pool-heading{flex-direction:row;gap:10px;margin-bottom:9px}.jp-pool-heading .jp-eyebrow{font-size:10px;letter-spacing:.04em}.jp-accumulation-status{font-size:10px;gap:4px;padding:3px 8px 3px 6px}.jp-coin-stack{transform:scale(.8);width:24px;height:22px}.jp-amount strong{font-size:clamp(35px,10.9vw,48px)}.jp-growth-copy{font-size:10px;margin-top:8px}.jp-update{font-size:9px;margin-top:4px}.jp-prize-label{font-size:10px;padding:3px 13px;margin-bottom:3px}.jp-prize-art{padding-top:3px;padding-bottom:17px}.jp-prize-art img{height:210px;width:190px}.jp-prize-art::after{width:190px;height:22px}.jp-prize h2{font-size:12px;margin-top:5px}.jp-prize-score{font-size:10px}.jp-play-area{padding:13px 20px 8px}.jp-ticket-balance{font-size:11px}.jp-ticket-balance strong{font-size:25px}.jp-action>.jp-primary{margin-top:8px;padding:14px 15px}.jp-help{font-size:10px;margin-top:12px}.jp-odds{font-size:10px}.jp-prize-note{padding-bottom:13px;font-size:9px}.jp-step>strong{font-size:11px}.jp-step>p{font-size:9px}}
@keyframes jp-accrual-dot{0%,100%{opacity:.55}50%{opacity:1}}
@media(prefers-reduced-motion:reduce){.jp-accumulation-status>span::after{animation:none}}

.jp-dialog{margin:auto;border:2px solid #eac16b;border-radius:24px;background:#fff9ea;color:#422d35;padding:30px 22px;width:min(420px,calc(100% - 32px));max-height:90dvh;overflow:auto;text-align:center;box-shadow:0 20px 70px #18041066}.jp-dialog::backdrop{background:#220c29b3;backdrop-filter:blur(3px)}.jp-dialog h2{font-size:24px;font-weight:900;margin:14px 0}.jp-dialog p{font-size:14px;line-height:1.7}.jp-ticket-art{display:flex;flex-direction:column;justify-content:center;width:230px;height:130px;margin:8px auto 24px;background:linear-gradient(130deg,#ffebaa,#f1bc54,#fff0b7);border:3px dashed #ad6e1e;border-radius:18px;color:#8f1b31;box-shadow:0 0 36px #f5c159aa;transform:rotate(-8deg);animation:jp-ticket-pop 1.2s ease-out}.jp-ticket-art strong{font-size:58px;line-height:1.1;font-weight:900}.jp-ticket-art span{font-size:10px;letter-spacing:.2em;font-weight:bold}.jp-reveal{font-size:40px;padding:25px 0;color:#bc2539;animation:jp-glow .5s alternate infinite}.jp-dialog [hidden]{display:none!important}@keyframes jp-ticket-pop{0%{transform:scale(.5) rotate(-20deg);opacity:0}65%{transform:scale(1.08) rotate(-5deg)}100%{transform:scale(1) rotate(-8deg);opacity:1}}@keyframes jp-glow{to{filter:brightness(1.5);transform:scale(1.08)}}@media(prefers-reduced-motion:reduce){.jp-ticket-art,.jp-reveal{animation:none}}

.jp-live-portals{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:10px;padding:0 12px;align-items:start}.jp-live-portals>*{min-width:0}.jp-live-portals .tcq-slot{padding:0;margin:0!important}.jp-live-portals .tcq-slot .tcq-portal{width:100%;max-width:none}.jp-live-entrance{aspect-ratio:108/40;display:flex;align-items:flex-end;justify-content:center}.jp-live-entrance img{width:92.5%;height:auto;display:block}

/* The JP invitation uses the same Torekazi mark as the cabinet doors. */
.jp-ticket-dialog {
  width: min(380px, calc(100% - 32px));
  padding: 12px 24px 22px;
  color: #faf1e0;
  background: radial-gradient(ellipse at 50% 31%, #2b171d, transparent 58%), #100f11;
  border: 1px solid #4d4442;
  box-shadow: 0 18px 65px #0009;
}
.jp-ticket-dialog::backdrop { background: #0d0a0cc2; backdrop-filter: blur(5px); }
.jp-ticket-stage {
  position: relative; display: grid; place-items: center; height: 220px;
  isolation: isolate; perspective: 650px;
}
.jp-ticket-stage::before {
  content: ''; position: absolute; inset: 5% -4%; z-index: -1; pointer-events: none;
  background: radial-gradient(ellipse, #b744545c, #7c23322e 38%, transparent 70%);
}
.jp-ticket-foil {
  position: relative; display: flex; align-items: stretch; overflow: hidden;
  width: min(268px, 92%); height: 134px; border-radius: 9px;
  color: #fff1db; border: 1px solid #c17b80;
  background: repeating-linear-gradient(38deg, transparent 0 3px, #f0bdc206 3px 4px),
    linear-gradient(113deg, #67182e, #a3334e 40%, #7d243a 70%, #491326);
  transform: rotate(-7deg);
  mask: radial-gradient(circle at 0 50%, transparent 6px, #000 7px) left / 51% 100% no-repeat,
    radial-gradient(circle at 100% 50%, transparent 6px, #000 7px) right / 51% 100% no-repeat;
}
.jp-ticket-foil::before {
  content: ''; position: absolute; inset: 5px; border-radius: 5px;
  border: 1px solid #e7c0b040; pointer-events: none;
}
.jp-ticket-face {
  position: relative; flex: 1; min-width: 0; isolation: isolate;
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  gap: 9px; padding: 14px 0 0;
}
.jp-ticket-face::before, .jp-ticket-face::after {
  content: ''; position: absolute; z-index: -1; pointer-events: none;
  border-radius: 50% 50% 2px 2px / 56% 56% 2px 2px;
}
.jp-ticket-face::before { inset: 10px 13px 11px; border: 1px solid #ad8060; }
.jp-ticket-face::after {
  inset: 15px 18px 16px; padding: 1.5px;
  background: linear-gradient(112deg, #c99d78 24%, #a47655 41%, #fff5dc 49%, #fff9ed 50%, #aa7957 58%, #d8ad82 72%);
  background-size: 400% 100%; background-position: 0% 50%;
  mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
  mask-composite: exclude;
}
.jp-ticket-face img { display: block; width: 82px; height: auto; }
.jp-ticket-face strong {
  font-family: "Yu Mincho", "Hiragino Mincho ProN", Georgia, serif;
  font-size: clamp(18px, 5.6vw, 24px); line-height: 1.2; letter-spacing: .02em;
  font-weight: 700; text-shadow: 0 1px 2px #4d1026;
}
.jp-ticket-stub {
  position: relative; display: grid; place-items: center; width: 40px;
  border-left: 1px dashed #f3cedc77; background: #360d1d40;
}
.jp-ticket-stub span {
  font: 600 17px/1 Georgia, serif; color: #edced0; letter-spacing: .08em;
  writing-mode: vertical-rl;
}
.jp-ticket-stub::before, .jp-ticket-stub::after {
  content: ''; position: absolute; left: 36%; right: 36%; height: 11px;
  background: repeating-linear-gradient(to bottom, #dfbdbe66 0 1px, transparent 1px 5px);
}
.jp-ticket-stub::before { top: 14px; }
.jp-ticket-stub::after { bottom: 14px; }
.jp-ticket-earned { margin-bottom: 18px; display: flex; align-items: baseline; justify-content: center; gap: 10px; white-space: nowrap; }
.jp-ticket-dialog h2 { margin: 0; color: #f9f1e7; font-size: clamp(19px, 5.2vw, 24px); }
.jp-ticket-dialog #jp-ticket-count {
  margin: 0; color: #fff1da; font-size: clamp(26px, 7vw, 34px); line-height: 1.35; font-weight: 900;
}
.jp-ticket-dialog .jp-primary {
  margin: 0; padding: 12px 18px; border-radius: 8px; font-size: 15px;
  color: #eee4de; background: #292528; border: 1px solid #524a4d; box-shadow: none;
}
/* These props exist only during the envelope opening. */
.jp-envelope, .jp-invitation-burst { display: none; }
@media (prefers-reduced-motion: no-preference) {
  .jp-ticket-dialog[open] .jp-envelope {
    display: block; position: absolute; bottom: 10px; width: min(280px, 96%); height: 96px;
    pointer-events: none; border: 1px solid #a15b69; border-radius: 4px 4px 8px 8px;
    animation: jp-envelope-leave 1.35s both;
  }
  .jp-envelope-back {
    z-index: 1; background: linear-gradient(145deg, #381421, #651d31);
    box-shadow: 0 7px 12px #0008;
  }
  .jp-envelope-front {
    z-index: 3;
    clip-path: polygon(0 0, 50% 46%, 100% 0, 100% 100%, 0 100%);
    background:
      linear-gradient(32deg, transparent 49.3%, #c16c783d 49.8%, #913a4c 50.3%, transparent 51%) left / 51% 100% no-repeat,
      linear-gradient(-32deg, transparent 49.3%, #b8627040 49.8%, #783142 50.3%, transparent 51%) right / 51% 100% no-repeat,
      linear-gradient(165deg, #842b43, #562033 70%, #471927);
  }
  .jp-envelope-flap {
    position: absolute; inset: 0 0 auto; height: 62%; transform-origin: top;
    background: linear-gradient(180deg, #a74d61, #802b43 55%, #ac5768);
    clip-path: polygon(0 0, 100% 0, 50% 83%);
    animation: jp-flap-open .45s .18s cubic-bezier(.4,0,.25,1) both;
  }
  .jp-envelope-flap::after {
    content: ''; position: absolute; width: 14px; height: 14px; left: calc(50% - 7px); top: 43%;
    transform: rotate(45deg); border: 1px solid #e2b7a3; outline: 1px solid #e2b7a370; outline-offset: 2px;
    background: linear-gradient(135deg, #d4a089, #7e4048);
  }
  .jp-ticket-dialog[open] .jp-ticket-foil { z-index: 2; animation: jp-invitation-lift 1.42s both; }
  .jp-ticket-dialog[open] .jp-ticket-face::after { animation: jp-arch-shine .95s .68s ease-in-out both; }
  .jp-ticket-dialog[open] .jp-ticket-stage::before { animation: jp-invitation-glow 1.85s both; }
  .jp-ticket-dialog[open] .jp-invitation-burst {
    display: block; position: absolute; inset: 0; z-index: 4; pointer-events: none;
  }
  .jp-invitation-burst::before {
    content: ''; position: absolute; left: 50%; top: 50%; width: 60%; height: 60%;
    border: 2px solid #efb6a9; border-radius: 50%;
    animation: jp-invitation-ring .7s .5s ease-out both;
  }
  .jp-invitation-burst i {
    position: absolute; top: 50%; left: 50%; width: 5px; height: 11px; border-radius: 1px;
    background: #e16c87; animation: jp-invitation-confetti 1.3s .52s cubic-bezier(.15,.65,.36,1) both;
  }
  .jp-invitation-burst i:nth-child(even) { background: #fff0db; animation-delay: .6s; }
  .jp-invitation-burst i:nth-child(3n) {
    width: 13px; height: 13px; background: #fff2e2;
    clip-path: polygon(50% 0, 60% 39%, 100% 50%, 61% 60%, 50% 100%, 40% 60%, 0 50%, 40% 40%);
  }
  .jp-invitation-burst i:nth-child(1)  { --dx: -46%; --dy: -21%; --spin: -45deg; }
  .jp-invitation-burst i:nth-child(2)  { --dx: -33%; --dy: -40%; --spin: 35deg; }
  .jp-invitation-burst i:nth-child(3)  { --dx: -12%; --dy: -48%; --spin: 16deg; }
  .jp-invitation-burst i:nth-child(4)  { --dx: 17%; --dy: -47%; --spin: 102deg; }
  .jp-invitation-burst i:nth-child(5)  { --dx: 36%; --dy: -38%; --spin: -65deg; }
  .jp-invitation-burst i:nth-child(6)  { --dx: 47%; --dy: -14%; --spin: 24deg; }
  .jp-invitation-burst i:nth-child(7)  { --dx: 45%; --dy: 12%; --spin: -85deg; }
  .jp-invitation-burst i:nth-child(8)  { --dx: 35%; --dy: 34%; --spin: 71deg; }
  .jp-invitation-burst i:nth-child(9)  { --dx: 13%; --dy: 40%; --spin: -14deg; }
  .jp-invitation-burst i:nth-child(10) { --dx: -15%; --dy: 37%; --spin: 60deg; }
  .jp-invitation-burst i:nth-child(11) { --dx: -35%; --dy: 28%; --spin: -35deg; }
  .jp-invitation-burst i:nth-child(12) { --dx: -49%; --dy: 9%; --spin: 12deg; }
  .jp-ticket-dialog[open] .jp-ticket-earned { animation: jp-earned-title .4s .46s ease-out both; }
  .jp-ticket-dialog[open] #jp-ticket-count { animation: jp-earned-count .6s .62s ease-out both; }
}
@keyframes jp-envelope-leave {
  0% { opacity: 0; transform: translateY(5px); }
  10%, 49% { opacity: 1; transform: translateY(0); }
  83%, 100% { opacity: 0; transform: translateY(28px); }
}
@keyframes jp-flap-open { from { transform: perspective(350px) rotateX(0); } to { transform: perspective(350px) rotateX(162deg); } }
@keyframes jp-invitation-lift {
  0%, 26% { opacity: 0; transform: translateY(52px) scale(.74) rotate(0); }
  34% { opacity: 1; transform: translateY(38px) scale(.78) rotate(-1deg); animation-timing-function: cubic-bezier(.09,.77,.32,1); }
  61% { opacity: 1; transform: translateY(-16px) scale(1.13) rotate(-11deg) rotateY(-7deg); }
  81% { transform: translateY(3px) scale(.99) rotate(-5deg); }
  100% { opacity: 1; transform: rotate(-7deg); }
}
@keyframes jp-arch-shine { from { background-position: 100% 50%; } to { background-position: 0% 50%; } }
@keyframes jp-invitation-glow {
  0%, 24% { opacity: .18; transform: scale(.65); }
  42% { opacity: 1; transform: scale(1.6); }
  100% { opacity: .65; transform: none; }
}
@keyframes jp-invitation-ring {
  0% { opacity: 0; transform: translate(-50%, -50%) scale(.3); }
  24% { opacity: .72; }
  100% { opacity: 0; transform: translate(-50%, -50%) scale(1.7); }
}
@keyframes jp-invitation-confetti {
  0% { opacity: 0; transform: scale(.25); }
  20% { opacity: 1; }
  66% { opacity: 1; left: calc(50% + var(--dx)); top: calc(50% + var(--dy)); transform: rotate(var(--spin)); }
  100% { opacity: 0; left: calc(50% + var(--dx)); top: calc(55% + var(--dy)); transform: rotate(calc(var(--spin) + 35deg)) scale(.7); }
}
@keyframes jp-earned-title { from { opacity: 0; transform: translateY(7px); } to { opacity: 1; transform: none; } }
@keyframes jp-earned-count { 0% { opacity: 0; transform: scale(.65); } 52% { opacity: 1; transform: scale(1.2); } 100% { opacity: 1; transform: scale(1); } }
@media (max-width: 360px), (max-height: 520px) {
  .jp-ticket-dialog { padding: 8px 20px 18px; }
  .jp-ticket-stage { height: 180px; }
  .jp-ticket-foil { height: 114px; }
  .jp-ticket-face { gap: 6px; }
}

/* Three earned tickets unlock one challenge. Slots always reflect actual ownership. */
.jp-ticket-progress{display:flex;align-items:center;justify-content:center;gap:10px;margin:10px 0 5px}
.jp-ticket-progress>span{display:grid;place-items:center;width:43px;height:28px;border:1px dashed #c7b9a1;border-radius:5px;color:#b8ab99;background:#f1ece3;font-size:12px;font-weight:900;transition:background .2s,transform .2s}
.jp-ticket-progress>span.is-filled{color:#8c243b;border:1px solid #d8a74f;background:linear-gradient(130deg,#ffeab1,#edbd61);box-shadow:0 2px 0 #bc8b42;transform:rotate(-5deg)}
.jp-ticket-progress>span.is-filled:nth-child(2){transform:rotate(4deg)}
.jp-ticket-progress-copy{font-size:12px;font-weight:800;color:#a42b43;margin:7px 0 4px}
.jp-action>.jp-primary:disabled{cursor:not-allowed;box-shadow:none;background:#e4d8d0;border-color:#d3c5bb;color:#79665d;opacity:1}

/* Dedicated JP draw cabinet. All monetary state remains on the existing API. */
.jp-machine-dialog {
  width: min(650px, calc(100% - 24px)); max-width: 650px; max-height: 94dvh;
  box-sizing: border-box; padding: 20px 28px 15px; overflow-x: hidden;
  color: #f7ebd6; border: 1px solid #d9ae68; border-radius: 26px;
  background: radial-gradient(ellipse at 50% 35%, #42243e 0, transparent 62%), #1b1423;
  box-shadow: 0 30px 100px #07040fd9, inset 0 0 0 5px #f5d69a08;
  scrollbar-width: thin; scrollbar-color: #79604c #1b1423;
}
.jp-machine-dialog::backdrop { background: #0b0718dc; backdrop-filter: blur(9px); }
.jp-machine-top { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
.jp-machine-brand { font-size: 13px; font-weight: 900; letter-spacing: .02em; color: #fff4dc; }
.jp-machine-brand i { color: #ef465c; font-size: 18px; font-style: normal; margin-right: 3px; }
.jp-machine-brand b { color: #f8d994; margin-left: 5px; font-family: Georgia, serif; font-size: 19px; }
.jp-machine-sound { border: 1px solid #eed49d33; border-radius: 30px; background: transparent; padding: 6px 10px; color: #c7b8b5; font-size: 10px; cursor: pointer; }
.jp-machine-sound[aria-pressed=true] { color: #ffe2a4; border-color: #eac16b80; }
.jp-machine-value { position: relative; z-index: 1; margin-top: 13px; }
.jp-machine-value>span { color: #ccb09a; font-size: 10px; letter-spacing: .18em; }
.jp-machine-value>div { display: flex; justify-content: center; align-items: baseline; gap: 8px; line-height: 1.1; margin-top: 4px; }
.jp-machine-value strong { color: #ffe6ac; font-size: clamp(35px, 7vw, 49px); letter-spacing: -.025em; font-weight: 900; font-variant-numeric: tabular-nums; text-shadow: 0 2px 0 #7a4a36, 0 0 28px #ffc97033; }
.jp-machine-value small { color: #d8b57b; font-size: 11px; }
.jp-machine-viewport { position: relative; margin: -7px -24px -6px; }
.jp-machine-canvas { display: block; width: 100%; height: min(38dvh, 340px); object-fit: contain; }
.jp-machine-status { color: #dcb77c; font-size: 9px; font-weight: 700; letter-spacing: .25em; position: absolute; bottom: 5px; width: 100%; }
.jp-machine-copy { position: relative; }
.jp-machine-copy h2 { margin: 12px 0 5px; font-size: 21px; font-weight: 900; color: #fff1d6; letter-spacing: .01em; }
.jp-machine-copy p { margin: 0; font-size: 11px; line-height: 1.7; color: #c8b8bc; min-height: 19px; }
.jp-machine-prize { display: flex; align-items: center; justify-content: center; gap: 11px; max-width: 380px; margin: 13px auto; padding: 8px 12px; background: #fff2cd08; border: 1px solid #edc78b1c; border-radius: 12px; }
.jp-machine-prize img { width: 32px; height: 42px; object-fit: contain; filter: drop-shadow(0 3px 5px #0005); }
.jp-machine-prize span { font-size: 10px; line-height: 1.6; text-align: left; color: #d3c4bf; overflow-wrap: anywhere; }
.jp-machine-actions { max-width: 380px; margin: 0 auto; }
.jp-machine-launch { display: block; width: 100%; padding: 15px 14px; border: 1px solid #fff1bf; border-radius: 12px; background: linear-gradient(115deg, #e8b860, #ffe4a3 45%, #f1c56c); color: #4b2730; box-shadow: 0 4px 0 #95632f, 0 6px 22px #e3a64821; font-size: 16px; font-weight: 900; cursor: pointer; transition: filter .15s, transform .15s; }
.jp-machine-launch:hover { filter: brightness(1.08); }
.jp-machine-launch:active { transform: translateY(2px); box-shadow: 0 2px 0 #95632f; }
.jp-machine-launch:disabled { opacity: .6; cursor: wait; }
.jp-machine-close, .jp-machine-skip { display: block; background: none; border: 0; color: #baa9b0; padding: 13px 10px 5px; margin: auto; font-size: 11px; cursor: pointer; }
.jp-machine-skip { border: 1px solid #e6c38a40; border-radius: 12px; padding: 13px; margin: 15px auto 10px; width: 100%; color: #dec89e; }
.jp-machine-dialog .jp-machine-note { font-size: 9px; line-height: 1.6; color: #998991; margin: 10px 0 0; }
.jp-machine-dialog button:focus-visible { outline: 3px solid #96dfd3; outline-offset: 4px; }
.jp-machine-dialog[data-state=playing] .jp-machine-prize { opacity: .4; }
.jp-machine-dialog[data-state=lost] .jp-machine-canvas { filter: saturate(.55) brightness(.8); }
.jp-machine-dialog[data-state=lost] .jp-machine-close,
.jp-machine-dialog[data-state=delivered] .jp-machine-close,
.jp-machine-dialog[data-state=won] .jp-machine-close { border: 1px solid #e9cf9950; border-radius: 12px; width: 100%; padding: 13px; color: #f5deb2; margin-top: 12px; }
.jp-machine-dialog[data-state=delivered], .jp-machine-dialog[data-state=won] { background: radial-gradient(ellipse at 50% 40%, #744323 0, #342030 60%, #201525 100%); border-color: #ffe2a4; }
.jp-machine-dialog[data-state=delivered] .jp-machine-copy h2,
.jp-machine-dialog[data-state=won] .jp-machine-copy h2 { color: #ffe9ac; font-size: 26px; text-shadow: 0 0 22px #ffc46670; }
.jp-machine-dialog[data-state=delivered] .jp-machine-prize,
.jp-machine-dialog[data-state=won] .jp-machine-prize { border-color: #eaca7b80; background: #f2c86b18; }
.jp-machine-dialog[data-state=delivered] .jp-machine-prize img,
.jp-machine-dialog[data-state=won] .jp-machine-prize img { width: 50px; height: 66px; }
@media (prefers-reduced-motion:no-preference) {
  .jp-machine-dialog[open] { animation: jp-machine-arrive .3s ease-out both; }
  .jp-machine-dialog[data-state=delivered] .jp-machine-value,
  .jp-machine-dialog[data-state=won] .jp-machine-value { animation: jp-machine-win .7s ease-out both; }
  .jp-machine-dialog[data-state=delivered] .jp-machine-prize,
  .jp-machine-dialog[data-state=won] .jp-machine-prize { animation: jp-machine-arrive .5s .15s ease-out both; }
}
@keyframes jp-machine-arrive { from { opacity: 0; transform: translateY(14px) scale(.97); } }
@keyframes jp-machine-win { 0% { transform: scale(.86); opacity: .5; } 55% { transform: scale(1.08); } }
@media(max-width:639px) {
  .jp-machine-dialog { padding: 15px 18px 12px; border-radius: 22px; }
  .jp-machine-value { margin-top: 16px; }
  .jp-machine-canvas { height: auto; max-height: 37dvh; }
  .jp-machine-viewport { margin: -3px -16px 0; }
  .jp-machine-copy h2 { font-size: clamp(15px,4.4vw,20px); margin-top: 12px; }
  .jp-machine-copy p { font-size: 10px; }
  .jp-machine-value strong { font-size: 39px; }
  .jp-machine-prize { margin: 11px auto; }
  .jp-machine-launch { font-size: 14px; padding: 14px 10px; }
  .jp-machine-dialog .jp-machine-note { font-size: 8px; }
}

.jp-play-area { padding-bottom: 22px; }
.jp-rules { margin-top: 18px; }

.jp-pool:not(.jp-pool--paused) .jp-amount {
  color: #fff0b6;
  text-shadow: 0 2px 0 #8d3233, 0 0 8px #ffc55bad, 0 0 26px #ffa5267a;
}
.jp-pool:not(.jp-pool--paused) .jp-amount > * {
  color: inherit;
  text-shadow: inherit;
}
@media (prefers-reduced-motion: no-preference) {
  .jp-pool:not(.jp-pool--paused) .jp-amount {
    animation: jp-balance-light 3.2s ease-in-out infinite alternate;
  }
}
@keyframes jp-balance-light {
  to {
    color: #fff9dc;
    text-shadow: 0 2px 0 #8d3233, 0 0 11px #ffd378e6, 0 0 32px #ffaa2ca6;
  }
}
.jp-balance-updated {
  margin-top: 5px;
  text-align: center;
  color: #fff0db;
  font-size: 12px;
  font-variant-numeric: tabular-nums;
}

/* The JP landing shares the walnut, brass and spotlight of the draw cabinet. */
.jp-page {
  --jp-muted: #b7ada0;
  color: #f2eadc;
  background: radial-gradient(ellipse at 50% 0%, #312820, #141311 66%);
  padding: 0 0 36px;
}
.jp-hero { background: transparent; padding: 16px 24px 12px; }
.jp-topline, .jp-content { max-width: 900px; margin-inline: auto; }
.jp-back { color: #d5c5ad; }
.jp-jackpot {
  border: 1px solid #967850;
  border-radius: 6px;
  background: #191713;
  box-shadow: 0 18px 50px #0006;
}
.jp-stage {
  gap: 24px;
  padding: 32px clamp(20px, 4vw, 56px);
  background: radial-gradient(ellipse at 76% 0%, #c4a46c44, transparent 45%),
    linear-gradient(90deg, #160d0cf0, #211513f2 55%, #1a1512ef),
    url("/jp-cabinet-nov/entrance-doors.jpg") center / cover;
}
.jp-stage::before { inset: 7px; border: 1px solid #c4a46c47; border-radius: 1px; }
.jp-stage::after { content: none; }
.jp-brand { width: min(100%, 202px); margin: 0 auto 28px; }
.jp-brand img { border-radius: 4px; }
.jp-pool-heading { flex-direction: row-reverse; justify-content: center; gap: 9px; margin-bottom: 6px; }
.jp-pool-heading .jp-eyebrow { font-size: 12px; color: #e9dece; letter-spacing: .08em; }
.jp-accumulation-status { padding: 2px 8px; color: #eed9aa; background: #34291b; border-color: #91734b; font-size: 10px; }
.jp-amount strong { font-family: Georgia, serif; font-weight: 600; font-size: clamp(44px, 6vw, 75px); line-height: 1; }
.jp-amount > span { font: 600 16px Georgia, serif; }
.jp-balance-updated { margin-top: 10px; color: #c4b9a9; font-size: 11px; }
.jp-prize { padding: 10px 0; }
.jp-prize-label { background: none; color: #e6c994; font-size: 11px; letter-spacing: .2em; margin: 0 0 12px; }
.jp-prize-art { width: fit-content; max-width: 100%; padding: 0 5px 10px; margin: auto; }
.jp-prize-art::before { inset: -5% -30%; background: radial-gradient(ellipse, #e7c99345, transparent 70%); }
.jp-prize-art::after { bottom: 0; height: 7px; width: 110%; background: linear-gradient(90deg, transparent,#99784b,#f5d99d,#99784b,transparent); box-shadow: 0 6px 14px #0008; }
.jp-prize-art img { width: auto; max-width: 100%; height: clamp(200px, 25vw, 266px); filter: drop-shadow(0 7px 10px #0009); }
.jp-prize h2 { color: #f7efe1; font-size: 14px; margin-top: 13px; }
.jp-prize-score { color: #ccbda7; }
.jp-play-area { padding: 17px 24px 20px; border-top: 1px solid #92734c7a; }
.jp-action { display: flex; align-items: center; justify-content: center; gap: 24px; max-width: 640px; }
.jp-ticket-balance { color: #e2d7c7; white-space: nowrap; }
.jp-ticket-balance strong { color: #f7e4bf; font-size: 25px; }
.jp-ticket-symbol { color: #fff1db; background: #81243c; border-color: #c49478; }
.jp-action > .jp-primary {
  margin: 0; max-width: 290px; padding: 13px 18px; color: #271c0d;
  background: linear-gradient(#f3dfb0, #d6b477); border: 1px solid #f5dfad;
  border-radius: 5px; box-shadow: 0 3px 0 #775a34;
}
.jp-action > .jp-primary:disabled { background: #39352e; color: #c9bdab; border-color: #615746; }
.jp-rules { margin-top: 14px; color: #d9cfbe; background: #1d1b18; border: 1px solid #494034; border-radius: 5px; }
.jp-rules a { color: #efd29d; text-decoration: underline; }
.jp-history h2 { font-size: 15px; color: #ddd0bc; }
.jp-winner { background: transparent; border: 0; border-top: 1px solid #494034; border-radius: 0; padding: 14px 0; }
.jp-winner > span { color: #e4c993; }
@media (max-width: 639px) {
  .jp-hero { padding: 8px 16px; }
  .jp-stage { grid-template-columns: minmax(0,1fr); gap: 19px; padding: 20px 15px 15px; }
  .jp-brand { width: 130px; margin-bottom: 12px; }
  .jp-pool-heading { margin-bottom: 5px; }
  .jp-amount strong { font-size: clamp(44px, 12vw, 62px); }
  .jp-balance-updated { margin-top: 4px; }
  .jp-prize { padding: 0; }
  .jp-prize-label { margin-bottom: 6px; }
  .jp-prize-art img { height: clamp(160px, 23svh, 215px); }
  .jp-prize h2 { font-size: 12px; margin-top: 8px; }
  .jp-play-area { padding: 12px 16px 16px; }
  .jp-action { flex-direction: column; gap: 8px; }
  .jp-ticket-balance strong { font-size: 20px; }
}

.jp-live-entrance {
  position: relative;
  container-type: inline-size;
}

.jp-entrance-counter {
  position: absolute;
  inset: 10% 3.75% auto auto;
  display: inline-flex;
  gap: 3px;
  align-items: center;
  min-height: 38px;
  box-sizing: border-box;
  padding: 3px 6px;
  border: 4px solid #392c23;
  background: #fff;
  color: #29231e;
  white-space: nowrap;
  font: 400 12px/1.2 system-ui, sans-serif;
  font-variant-numeric: tabular-nums;
}
.jp-entrance-counter strong { font-size: 18px; }
.jp-entrance-counter__ticket {
  padding: 3px 4px;
  border-radius: 3px;
  background: #76213d;
  color: #fff1cc;
  font: bold 11px/1.15 Georgia, serif;
  transform: rotate(-8deg);
}
@container (max-width: 220px) {
  .jp-entrance-counter { min-height: 28px; padding: 2px 3px; border-width: 3px; gap: 2px; font-size: 10px; }
  .jp-entrance-counter strong { font-size: 15px; }
  .jp-entrance-counter__ticket { padding: 2px 3px; font-size: 9px; }
}

.jp-live-portals > .pc-entrance { grid-column: 1 / -1; }
