{"id":106,"date":"2026-10-12T00:06:19","date_gmt":"2026-10-12T00:06:19","guid":{"rendered":"https:\/\/apk.produsenpagarbrc.com\/?p=106"},"modified":"2026-10-12T00:06:19","modified_gmt":"2026-10-12T00:06:19","slug":"moon-rabbit-workshop-solitaire","status":"publish","type":"post","link":"https:\/\/play.produsenpagarbrc.com\/?p=106","title":{"rendered":"Moon Rabbit Workshop Solitaire"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><strong>Moon Rabbit Workshop Solitaire<\/strong> is a cozy card game set inside a quiet moonlit workshop above the clouds, where little moon rabbits arrange magical cards under creamy lunar light. Instead of a plain card table, every move feels like working beside a tiny night-sky craft desk filled with rice cakes, wooden mallets, soft clouds, and glowing moon charms.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Your goal is to build each foundation from Ace to King while carefully arranging cards in descending order with alternating colors. You can draw from the stock, move cards across the tableau, uncover hidden cards, use hints when you feel stuck, undo your last step, and continue a saved game whenever you return.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/play.produsenpagarbrc.com\/wp-content\/uploads\/2026\/10\/Moon-Rabbit-Workshop-Solitaire-1024x768.png\" alt=\"\" class=\"wp-image-107\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">A Cozy Solitaire Game With a Moonlit Workshop Mood<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">This game keeps the familiar comfort of classic solitaire, but wraps it in a soft fantasy atmosphere. The warm wooden table, creamy moonlight, night clouds, and handmade rabbit-inspired card suits make every round feel calm, gentle, and visually charming.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The rules are easy to understand, but every move still matters. Empty tableau columns can accept any card, making the game more flexible and relaxing while still giving you enough strategy to enjoy each deal.<\/p>\n\n\n\n<style>\n#hls-solitaire{\n  --hls-card-w:96px;\n  --hls-card-h:132px;\n  --moon-ink:#241734;\n  --moon-night:#31204a;\n  --moon-plum:#493066;\n  --moon-lav:#7f6aa4;\n  --moon-cream:#fff3cf;\n  --moon-soft:#fffaf0;\n  --moon-gold:#f4d37a;\n  --moon-wood:#7a5132;\n  --moon-wood-dark:#4b2b22;\n  --moon-cloud:#cfc4ee;\n  --moon-blue:#8aaed0;\n  --moon-mochi:#fff7e7;\n  --moon-red:#d96d6d;\n  width:min(100%,1120px);\n  aspect-ratio:16\/9;\n  margin:18px auto;\n  position:relative;\n  overflow:hidden;\n  border-radius:24px;\n  background:\n    radial-gradient(circle at 79% 12%, rgba(255,243,207,.42), transparent 25%),\n    radial-gradient(circle at 18% 18%, rgba(207,196,238,.26), transparent 24%),\n    radial-gradient(circle at 12% 87%, rgba(138,174,208,.18), transparent 40%),\n    linear-gradient(155deg,#20142d 0%,#31204a 38%,#493066 68%,#745a86 100%);\n  box-shadow:0 24px 70px rgba(27,16,42,.42);\n  user-select:none;\n  -webkit-user-select:none;\n  touch-action:none;\n  overscroll-behavior:none;\n  font-family:system-ui,-apple-system,BlinkMacSystemFont,\"Segoe UI\",sans-serif;\n  color:var(--moon-cream);\n}\n#hls-solitaire,#hls-solitaire *{box-sizing:border-box}\n#hls-solitaire:fullscreen,#hls-solitaire.hls-is-fullscreen{\n  width:100vw!important;\n  height:100vh!important;\n  max-width:none!important;\n  margin:0!important;\n  border-radius:0!important;\n  background:#20142d;\n}\n#hls-solitaire .hls-fit{\n  position:absolute;\n  left:0;\n  top:0;\n  width:1280px;\n  height:720px;\n  transform-origin:0 0;\n  overflow:hidden;\n  border-radius:24px;\n  background:\n    radial-gradient(circle at 78% 16%, rgba(255,243,207,.34), transparent 26%),\n    radial-gradient(circle at 18% 20%, rgba(207,196,238,.22), transparent 24%),\n    radial-gradient(circle at 88% 82%, rgba(244,211,122,.16), transparent 30%),\n    linear-gradient(155deg,#20142d 0%,#31204a 42%,#493066 72%,#6f5582 100%);\n}\n#hls-solitaire.hls-is-fullscreen .hls-fit{border-radius:0}\n#hls-solitaire .hls-fit:before{\n  content:\"\";\n  position:absolute;\n  inset:-90px;\n  background:\n    radial-gradient(circle at 78% 15%,rgba(255,243,207,.46) 0 72px,rgba(255,243,207,.19) 73px 104px,transparent 105px),\n    radial-gradient(ellipse at 18% 82%,rgba(220,214,244,.20),transparent 36%),\n    radial-gradient(ellipse at 88% 88%,rgba(220,214,244,.17),transparent 32%),\n    radial-gradient(circle at 9% 28%,rgba(255,250,240,.26) 0 2px,transparent 3px),\n    radial-gradient(circle at 23% 68%,rgba(244,211,122,.18) 0 2px,transparent 3px),\n    radial-gradient(circle at 44% 26%,rgba(255,250,240,.20) 0 2px,transparent 3px),\n    radial-gradient(circle at 68% 36%,rgba(244,211,122,.20) 0 2px,transparent 3px),\n    radial-gradient(circle at 90% 65%,rgba(255,243,207,.22) 0 3px,transparent 4px),\n    linear-gradient(100deg,transparent 0 8%,rgba(255,243,207,.045) 8.2% 8.45%,transparent 8.7% 20%,rgba(244,211,122,.035) 20.2% 20.45%,transparent 20.7% 100%);\n  opacity:.95;\n  pointer-events:none;\n}\n#hls-solitaire .hls-fit:after{\n  content:\"\";\n  position:absolute;\n  inset:0;\n  background:\n    radial-gradient(ellipse at 18% 95%,rgba(220,214,244,.22),transparent 23%),\n    radial-gradient(ellipse at 48% 99%,rgba(220,214,244,.18),transparent 28%),\n    radial-gradient(ellipse at 82% 96%,rgba(220,214,244,.20),transparent 26%),\n    radial-gradient(circle at 50% 54%,transparent 0 58%,rgba(17,10,29,.32) 100%),\n    linear-gradient(180deg,rgba(255,243,207,.08),transparent 30%);\n  pointer-events:none;\n}\n#hls-solitaire .hls-playfield{\n  position:absolute;\n  left:154px;\n  top:84px;\n  width:972px;\n  height:554px;\n  z-index:5;\n  pointer-events:none;\n  border-radius:34px;\n  background:\n    radial-gradient(circle at 70% 20%,rgba(255,243,207,.14),transparent 34%),\n    radial-gradient(circle at 24% 35%,rgba(207,196,238,.10),transparent 38%),\n    linear-gradient(135deg,rgba(75,43,34,.50),rgba(49,32,74,.24));\n  border:1.35px solid rgba(244,211,122,.38);\n  box-shadow:\n    inset 0 0 0 1px rgba(255,243,207,.07),\n    inset 0 0 48px rgba(255,243,207,.04),\n    inset 0 -28px 56px rgba(20,11,31,.24),\n    0 20px 54px rgba(20,11,31,.26);\n}\n#hls-solitaire .hls-playfield:before{\n  content:\"\";\n  position:absolute;\n  inset:14px;\n  border-radius:26px;\n  border:1.25px solid rgba(244,211,122,.20);\n  background:\n    linear-gradient(112deg,rgba(255,243,207,.045),transparent 32%),\n    repeating-linear-gradient(90deg,rgba(255,243,207,.030) 0 1px,transparent 1px 34px),\n    repeating-linear-gradient(0deg,rgba(244,211,122,.022) 0 1px,transparent 1px 30px),\n    radial-gradient(circle at 52% 42%,rgba(138,174,208,.09),transparent 46%);\n}\n#hls-solitaire .hls-ornament{\n  position:absolute;\n  pointer-events:none;\n  opacity:.24;\n}\n#hls-solitaire .hls-ornament.left,\n#hls-solitaire .hls-ornament.right{\n  bottom:64px;\n  width:150px;\n  height:218px;\n  border-bottom:2px solid rgba(244,211,122,.15);\n}\n#hls-solitaire .hls-ornament.left{\n  left:24px;\n  border-left:2px solid rgba(244,211,122,.28);\n  border-radius:0 0 0 88px;\n  transform:rotate(-8deg);\n}\n#hls-solitaire .hls-ornament.right{\n  right:26px;\n  border-right:2px solid rgba(244,211,122,.28);\n  border-radius:0 0 88px 0;\n  transform:rotate(8deg);\n}\n#hls-solitaire .hls-ornament:before,#hls-solitaire .hls-ornament:after{\n  content:\"\";\n  position:absolute;\n  width:62px;\n  height:22px;\n  border-radius:999px;\n  background:\n    radial-gradient(ellipse at 28% 60%,rgba(255,250,240,.38),transparent 38%),\n    linear-gradient(90deg,rgba(207,196,238,.26),rgba(255,243,207,.08));\n  border:1px solid rgba(255,243,207,.10);\n}\n#hls-solitaire .hls-ornament.left:before{left:18px;top:40px;transform:rotate(26deg)}\n#hls-solitaire .hls-ornament.left:after{left:-2px;top:110px;transform:rotate(-22deg)}\n#hls-solitaire .hls-ornament.right:before{right:18px;top:48px;transform:rotate(-28deg)}\n#hls-solitaire .hls-ornament.right:after{right:0;top:120px;transform:rotate(20deg)}\n#hls-solitaire button{\n  font:inherit;\n  -webkit-tap-highlight-color:transparent;\n}\n#hls-solitaire .hls-icon{\n  position:absolute;\n  z-index:280;\n  top:18px;\n  width:48px;\n  height:48px;\n  border:1.45px solid rgba(244,211,122,.46);\n  border-radius:17px;\n  background:\n    radial-gradient(circle at 34% 24%,rgba(255,243,207,.22),transparent 33%),\n    linear-gradient(180deg,rgba(73,48,102,.78),rgba(32,20,45,.68));\n  color:var(--moon-cream);\n  box-shadow:0 11px 24px rgba(20,11,31,.30),inset 0 1px 0 rgba(255,243,207,.15);\n  cursor:pointer;\n  display:grid;\n  place-items:center;\n  transition:transform .12s ease,background .12s ease,border-color .12s ease,opacity .14s ease,visibility .14s ease;\n}\n#hls-solitaire .hls-icon:hover{\n  transform:translateY(-1px);\n  background:\n    radial-gradient(circle at 34% 24%,rgba(255,243,207,.28),transparent 33%),\n    linear-gradient(180deg,rgba(111,85,130,.84),rgba(73,48,102,.72));\n  border-color:rgba(255,243,207,.48);\n}\n#hls-solitaire .hls-icon:active{transform:scale(.94)}\n#hls-solitaire .hls-pause{left:22px;display:none}\n#hls-solitaire .hls-mute{left:78px;display:none}\n#hls-solitaire.hls-game-active .hls-pause,#hls-solitaire.hls-game-active .hls-mute{display:grid}\n#hls-solitaire.hls-paused .hls-pause,#hls-solitaire.hls-paused .hls-mute{\n  opacity:0;\n  visibility:hidden;\n  pointer-events:none;\n}\n#hls-solitaire .hls-fullscreen{right:22px;display:grid}\n#hls-solitaire .hls-pause-symbol{\n  position:relative;\n  width:22px;\n  height:22px;\n  display:block;\n}\n#hls-solitaire .hls-pause-symbol:before,#hls-solitaire .hls-pause-symbol:after{\n  content:\"\";\n  position:absolute;\n  top:3px;\n  width:6px;\n  height:16px;\n  border-radius:3px;\n  background:currentColor;\n}\n#hls-solitaire .hls-pause-symbol:before{left:4px}\n#hls-solitaire .hls-pause-symbol:after{right:4px}\n#hls-solitaire .hls-sound-symbol{\n  position:relative;\n  width:31px;\n  height:28px;\n  display:block;\n  color:currentColor;\n  transform:scale(.86) translateX(-1px);\n}\n#hls-solitaire .hls-sound-box{\n  position:absolute;\n  left:1px;\n  top:10px;\n  width:8px;\n  height:9px;\n  border-radius:3px 0 0 3px;\n  background:currentColor;\n}\n#hls-solitaire .hls-sound-box:after{\n  content:\"\";\n  position:absolute;\n  left:7px;\n  top:-8px;\n  width:18px;\n  height:25px;\n  background:currentColor;\n  clip-path:polygon(0 35%,100% 0,100% 100%,0 65%);\n  border-radius:3px;\n}\n#hls-solitaire .hls-sound-wave{\n  position:absolute;\n  display:block;\n  background:transparent;\n  border-style:solid;\n  border-color:currentColor;\n  border-left-color:transparent;\n  border-top-color:transparent;\n  border-bottom-color:transparent;\n  border-radius:0 999px 999px 0;\n  opacity:1;\n  transition:opacity .14s ease;\n}\n#hls-solitaire .hls-sound-wave.w1{left:19px;top:10px;width:6px;height:9px;border-width:3px}\n#hls-solitaire .hls-sound-wave.w2{left:22px;top:6px;width:11px;height:17px;border-width:3px}\n#hls-solitaire .hls-sound-wave.w3{left:25px;top:2px;width:16px;height:25px;border-width:3px;opacity:.92}\n#hls-solitaire.hls-muted .hls-sound-wave{opacity:0}\n#hls-solitaire .hls-sound-slash{\n  position:absolute;\n  left:2px;\n  top:13px;\n  width:32px;\n  height:3.5px;\n  border-radius:999px;\n  background:#e26d72;\n  transform:rotate(45deg) scaleX(0);\n  transform-origin:center;\n  box-shadow:0 0 8px rgba(226,109,114,.34);\n  transition:transform .14s ease;\n}\n#hls-solitaire.hls-muted .hls-sound-slash{transform:rotate(45deg) scaleX(1)}\n#hls-solitaire .hls-full-symbol{\n  position:relative;\n  width:30px;\n  height:30px;\n  display:block;\n}\n#hls-solitaire .hls-full-symbol:before{\n  content:\"\";\n  position:absolute;\n  inset:2px;\n  background:\n    linear-gradient(currentColor,currentColor) left top\/12px 4px no-repeat,\n    linear-gradient(currentColor,currentColor) left top\/4px 12px no-repeat,\n    linear-gradient(currentColor,currentColor) right top\/12px 4px no-repeat,\n    linear-gradient(currentColor,currentColor) right top\/4px 12px no-repeat,\n    linear-gradient(currentColor,currentColor) left bottom\/12px 4px no-repeat,\n    linear-gradient(currentColor,currentColor) left bottom\/4px 12px no-repeat,\n    linear-gradient(currentColor,currentColor) right bottom\/12px 4px no-repeat,\n    linear-gradient(currentColor,currentColor) right bottom\/4px 12px no-repeat;\n}\n#hls-solitaire .hls-stats{\n  position:absolute;\n  top:24px;\n  left:50%;\n  transform:translateX(-50%);\n  z-index:84;\n  display:flex;\n  align-items:center;\n  justify-content:center;\n  gap:10px;\n}\n#hls-solitaire .hls-stat{\n  min-width:132px;\n  height:38px;\n  padding:0 16px;\n  border-radius:999px;\n  display:flex;\n  align-items:center;\n  justify-content:center;\n  gap:9px;\n  color:rgba(255,243,207,.86);\n  font-size:14px;\n  font-weight:850;\n  letter-spacing:.01em;\n  text-shadow:0 2px 8px rgba(20,11,31,.48);\n  background:\n    radial-gradient(circle at 30% 18%,rgba(255,243,207,.20),transparent 36%),\n    linear-gradient(180deg,rgba(73,48,102,.82),rgba(32,20,45,.62));\n  border:1.2px solid rgba(244,211,122,.36);\n  box-shadow:0 10px 22px rgba(20,11,31,.24),inset 0 1px 0 rgba(255,243,207,.14);\n}\n#hls-solitaire .hls-stat b{\n  color:#fffaf0;\n  font-size:16px;\n  font-weight:950;\n  min-width:28px;\n  text-align:right;\n}\n#hls-solitaire .hls-slots,#hls-solitaire .hls-tableau-zones,#hls-solitaire .hls-card-layer,#hls-solitaire .hls-ghost-layer{\n  position:absolute;\n  inset:0;\n  z-index:14;\n  pointer-events:none;\n}\n#hls-solitaire .hls-tableau-zones{pointer-events:auto}\n#hls-solitaire .hls-card-layer{\n  z-index:24;\n  pointer-events:auto;\n  touch-action:none;\n}\n#hls-solitaire .hls-ghost-layer{z-index:160}\n#hls-solitaire .hls-slot,#hls-solitaire .hls-tableau-zone{\n  position:absolute;\n  width:calc(var(--hls-card-w) + 12px);\n  height:var(--hls-card-h);\n  transform:translateX(-6px);\n  border-radius:18px;\n  pointer-events:auto;\n  touch-action:none;\n  background:\n    radial-gradient(circle at 50% 18%,rgba(255,243,207,.10),transparent 32%),\n    linear-gradient(180deg,rgba(75,43,34,.55),rgba(49,32,74,.42));\n  border:1.4px solid rgba(244,211,122,.34);\n  box-shadow:inset 0 1px 0 rgba(255,243,207,.10),0 6px 14px rgba(20,11,31,.13);\n}\n#hls-solitaire .hls-slot:before,#hls-solitaire .hls-tableau-zone:before{\n  content:\"\";\n  position:absolute;\n  inset:12px;\n  border-radius:14px;\n  border:1px dashed rgba(255,243,207,.15);\n}\n#hls-solitaire .hls-slot.stock-slot{cursor:pointer}\n#hls-solitaire .hls-tableau-zone{\n  height:300px;\n  background:\n    radial-gradient(circle at 50% 10%,rgba(255,243,207,.05),transparent 24%),\n    linear-gradient(180deg,rgba(255,243,207,.025),rgba(20,11,31,.06));\n  border-color:rgba(244,211,122,.20);\n}\n#hls-solitaire .hls-slot.hls-valid,#hls-solitaire .hls-tableau-zone.hls-valid{\n  border-color:rgba(244,211,122,.88);\n  background:\n    radial-gradient(circle at 50% 22%,rgba(255,250,240,.20),transparent 42%),\n    linear-gradient(180deg,rgba(111,85,130,.76),rgba(138,174,208,.40));\n  box-shadow:0 0 0 3px rgba(244,211,122,.13),0 0 25px rgba(244,211,122,.28);\n}\n#hls-solitaire .hls-slot.hls-hint-target,#hls-solitaire .hls-tableau-zone.hls-hint-target{\n  box-shadow:0 0 0 4px rgba(255,243,207,.16),0 0 30px rgba(244,211,122,.34);\n}\n#hls-solitaire .hls-card{\n  position:absolute;\n  width:var(--hls-card-w);\n  height:var(--hls-card-h);\n  border-radius:16px;\n  background:\n    radial-gradient(circle at 50% 0%,rgba(255,255,255,.90),transparent 56%),\n    linear-gradient(155deg,#fffdf4 0%,#fff3cf 48%,#ded1f0 100%);\n  border:1px solid rgba(49,32,74,.38);\n  box-shadow:0 14px 24px rgba(20,11,31,.32),inset 0 0 0 1px rgba(255,255,255,.58);\n  color:#2b1a40;\n  overflow:hidden;\n  pointer-events:auto;\n  cursor:grab;\n  touch-action:none;\n  transition:box-shadow .10s ease,transform .10s ease,opacity .10s ease;\n}\n#hls-solitaire .hls-card:before{\n  content:\"\";\n  position:absolute;\n  inset:5px;\n  border-radius:13px;\n  border:1px solid rgba(111,85,130,.20);\n}\n#hls-solitaire .hls-card:after{\n  content:\"\";\n  position:absolute;\n  left:13px;\n  right:13px;\n  top:51%;\n  height:1px;\n  transform:translateY(-50%);\n  background:linear-gradient(90deg,transparent,rgba(49,32,74,.10),transparent);\n}\n#hls-solitaire .hls-card.hls-back{\n  cursor:default;\n  background:\n    radial-gradient(circle at 50% 44%,rgba(255,243,207,.42) 0 16px,transparent 17px),\n    radial-gradient(circle at 50% 44%,#fff3cf 0 18px,#f4d37a 19px 28px,transparent 29px),\n    radial-gradient(ellipse at 42% 41%,#fffaf0 0 8px,transparent 9px),\n    radial-gradient(ellipse at 58% 41%,#fffaf0 0 8px,transparent 9px),\n    linear-gradient(30deg,transparent 0 23%,rgba(244,211,122,.18) 23.4% 24.2%,transparent 24.6% 49%,rgba(255,243,207,.11) 49.4% 50.2%,transparent 50.6% 74%,rgba(244,211,122,.18) 74.4% 75.2%,transparent 75.6%),\n    linear-gradient(150deg,transparent 0 23%,rgba(244,211,122,.18) 23.4% 24.2%,transparent 24.6% 49%,rgba(255,243,207,.11) 49.4% 50.2%,transparent 50.6% 74%,rgba(244,211,122,.18) 74.4% 75.2%,transparent 75.6%),\n    linear-gradient(155deg,#6f5582 0%,#493066 54%,#20142d 100%);\n  background-size:auto,auto,auto,auto,34px 34px,34px 34px,auto;\n  border-color:rgba(244,211,122,.58);\n  box-shadow:0 14px 24px rgba(20,11,31,.34),inset 0 0 0 1px rgba(255,243,207,.18),inset 0 0 24px rgba(244,211,122,.10);\n}\n#hls-solitaire .hls-card.hls-back:before{border-color:rgba(244,211,122,.28)}\n#hls-solitaire .hls-card.hls-back:after{display:none}\n#hls-solitaire .hls-card.suit-H{color:#d96d6d}\n#hls-solitaire .hls-card.suit-D{color:#c58a3b}\n#hls-solitaire .hls-card.suit-C{color:#7c70b0}\n#hls-solitaire .hls-card.suit-S{color:#7a5132}\n#hls-solitaire .hls-card.hls-selected{\n  box-shadow:0 0 0 3px rgba(244,211,122,.60),0 17px 28px rgba(20,11,31,.30),0 0 22px rgba(244,211,122,.30);\n  transform:translateY(-3px);\n}\n#hls-solitaire .hls-card.hls-dimmed{\n  opacity:.62;\n  filter:saturate(.9) brightness(.94);\n}\n#hls-solitaire .hls-card.hls-hint-source{\n  box-shadow:0 0 0 4px rgba(244,211,122,.30),0 18px 30px rgba(20,11,31,.26);\n}\n#hls-solitaire .hls-card.hls-not-playable{\n  pointer-events:none;\n  cursor:default;\n}\n#hls-solitaire .hls-corner{\n  position:absolute;\n  left:5px;\n  top:7px;\n  width:32px;\n  text-align:center;\n  font-weight:950;\n  line-height:.88;\n  font-size:18px;\n  letter-spacing:-.045em;\n  display:flex;\n  flex-direction:column;\n  align-items:center;\n  gap:2px;\n}\n#hls-solitaire .hls-corner .hls-suit-small{\n  width:20px;\n  height:20px;\n  display:grid;\n  place-items:center;\n  font-size:0;\n}\n#hls-solitaire .hls-corner.bottom{\n  left:auto;\n  top:auto;\n  right:5px;\n  bottom:7px;\n  transform:rotate(180deg);\n}\n#hls-solitaire .hls-center-suit{\n  position:absolute;\n  inset:0;\n  display:grid;\n  place-items:center;\n  font-size:0;\n  opacity:.94;\n  filter:drop-shadow(0 1px 0 rgba(255,255,255,.42));\n}\n#hls-solitaire .hls-suit-shape{\n  position:relative;\n  display:block;\n  color:currentColor;\n  width:50px;\n  height:50px;\n}\n#hls-solitaire .hls-suit-shape.small{width:18px;height:18px}\n#hls-solitaire .hls-suit-rabbit{\n  width:46px;\n  height:42px;\n  border-radius:50% 50% 48% 48%;\n  background:currentColor;\n  box-shadow:inset 6px 8px 0 rgba(255,250,240,.35),0 0 14px rgba(244,211,122,.16);\n  transform:translateY(7px);\n}\n#hls-solitaire .hls-suit-rabbit:before{\n  content:\"\";\n  position:absolute;\n  left:8px;\n  top:-24px;\n  width:11px;\n  height:30px;\n  border-radius:999px 999px 8px 8px;\n  background:currentColor;\n  box-shadow:19px 0 0 currentColor;\n  transform:rotate(-10deg);\n}\n#hls-solitaire .hls-suit-rabbit:after{\n  content:\"\";\n  position:absolute;\n  left:13px;\n  top:17px;\n  width:5px;\n  height:5px;\n  border-radius:50%;\n  background:rgba(255,250,240,.78);\n  box-shadow:15px 0 0 rgba(255,250,240,.78),7px 9px 0 rgba(255,250,240,.58);\n}\n#hls-solitaire .hls-suit-rabbit.small{\n  width:16px;height:15px;transform:translateY(2px)\n}\n#hls-solitaire .hls-suit-rabbit.small:before{\n  left:3px;top:-9px;width:4px;height:12px;box-shadow:7px 0 0 currentColor\n}\n#hls-solitaire .hls-suit-rabbit.small:after{\n  left:5px;top:6px;width:2px;height:2px;box-shadow:5px 0 0 rgba(255,250,240,.78),3px 4px 0 rgba(255,250,240,.58)\n}\n#hls-solitaire .hls-suit-mochi{\n  width:46px;\n  height:40px;\n  border-radius:48% 48% 43% 43%;\n  background:currentColor;\n  box-shadow:inset 7px 7px 0 rgba(255,250,240,.55),inset -5px -7px 0 rgba(73,48,102,.10),0 0 14px rgba(255,243,207,.16);\n  transform:translateY(4px);\n}\n#hls-solitaire .hls-suit-mochi:before{\n  content:\"\";\n  position:absolute;\n  left:50%;\n  top:52%;\n  width:18px;\n  height:18px;\n  transform:translate(-50%,-50%);\n  background:\n    radial-gradient(circle at 50% 16%,rgba(217,109,109,.75) 0 3px,transparent 4px),\n    radial-gradient(circle at 82% 50%,rgba(217,109,109,.75) 0 3px,transparent 4px),\n    radial-gradient(circle at 50% 84%,rgba(217,109,109,.75) 0 3px,transparent 4px),\n    radial-gradient(circle at 18% 50%,rgba(217,109,109,.75) 0 3px,transparent 4px);\n}\n#hls-solitaire .hls-suit-mochi:after{\n  content:\"\";\n  position:absolute;\n  left:50%;\n  top:52%;\n  width:5px;\n  height:5px;\n  border-radius:50%;\n  background:rgba(217,109,109,.78);\n  transform:translate(-50%,-50%);\n}\n#hls-solitaire .hls-suit-mochi.small{width:17px;height:15px;transform:translateY(1px)}\n#hls-solitaire .hls-suit-mochi.small:before{width:7px;height:7px;background:rgba(217,109,109,.70);border-radius:50%}\n#hls-solitaire .hls-suit-mochi.small:after{display:none}\n#hls-solitaire .hls-suit-cloud{\n  width:50px;\n  height:30px;\n  border-radius:999px;\n  background:currentColor;\n  transform:translateY(8px);\n  box-shadow:inset 7px 7px 0 rgba(255,250,240,.22),0 0 14px rgba(207,196,238,.18);\n}\n#hls-solitaire .hls-suit-cloud:before{\n  content:\"\";\n  position:absolute;\n  left:8px;\n  top:-11px;\n  width:24px;\n  height:24px;\n  border-radius:50%;\n  background:currentColor;\n  box-shadow:17px 6px 0 -3px currentColor;\n}\n#hls-solitaire .hls-suit-cloud:after{\n  content:\"\";\n  position:absolute;\n  left:13px;\n  top:10px;\n  width:24px;\n  height:3px;\n  border-radius:999px;\n  background:rgba(255,250,240,.34);\n}\n#hls-solitaire .hls-suit-cloud.small{\n  width:18px;height:11px;transform:translateY(3px)\n}\n#hls-solitaire .hls-suit-cloud.small:before{\n  left:3px;top:-4px;width:8px;height:8px;box-shadow:7px 2px 0 -1px currentColor\n}\n#hls-solitaire .hls-suit-cloud.small:after{display:none}\n#hls-solitaire .hls-suit-mallet{\n  width:48px;\n  height:48px;\n  transform:rotate(-35deg);\n}\n#hls-solitaire .hls-suit-mallet:before{\n  content:\"\";\n  position:absolute;\n  left:8px;\n  top:8px;\n  width:32px;\n  height:18px;\n  border-radius:6px;\n  background:currentColor;\n  box-shadow:inset 6px 4px 0 rgba(255,250,240,.26),inset -4px -4px 0 rgba(20,11,31,.14);\n}\n#hls-solitaire .hls-suit-mallet:after{\n  content:\"\";\n  position:absolute;\n  left:22px;\n  top:21px;\n  width:8px;\n  height:30px;\n  border-radius:999px;\n  background:currentColor;\n  box-shadow:inset 3px 0 0 rgba(255,250,240,.22);\n}\n#hls-solitaire .hls-suit-mallet.small{width:18px;height:18px}\n#hls-solitaire .hls-suit-mallet.small:before{left:3px;top:2px;width:12px;height:7px;border-radius:3px}\n#hls-solitaire .hls-suit-mallet.small:after{left:8px;top:8px;width:3px;height:11px}\n#hls-solitaire .hls-status{\n  position:absolute;\n  left:50%;\n  bottom:90px;\n  transform:translateX(-50%);\n  min-width:360px;\n  max-width:720px;\n  height:34px;\n  z-index:86;\n  padding:0 18px;\n  border-radius:999px;\n  background:\n    radial-gradient(circle at 34% 10%,rgba(255,243,207,.20),transparent 38%),\n    linear-gradient(180deg,#6f5582 0%,#493066 100%);\n  border:1.35px solid rgba(244,211,122,.46);\n  color:var(--moon-cream);\n  display:flex;\n  align-items:center;\n  justify-content:center;\n  font-size:13px;\n  letter-spacing:.01em;\n  box-shadow:inset 0 1px 0 rgba(255,243,207,.14),0 8px 18px rgba(20,11,31,.23);\n  pointer-events:none;\n  text-align:center;\n}\n#hls-solitaire .hls-bottom-area{\n  position:absolute;\n  left:50%;\n  bottom:24px;\n  transform:translateX(-50%);\n  z-index:90;\n  display:flex;\n  align-items:center;\n  justify-content:center;\n}\n#hls-solitaire .hls-bottom-controls{\n  display:flex;\n  gap:10px;\n  align-items:center;\n  justify-content:center;\n}\n#hls-solitaire .hls-pill{\n  height:40px;\n  min-width:104px;\n  padding:0 18px;\n  border-radius:999px;\n  border:1px solid rgba(255,243,207,.58);\n  color:#fffaf0;\n  font-size:14px;\n  font-weight:850;\n  letter-spacing:.01em;\n  text-shadow:0 1px 0 rgba(32,20,45,.24);\n  box-shadow:inset 0 1px 0 rgba(255,255,255,.32),inset 0 -8px 14px rgba(32,20,45,.14),0 9px 18px rgba(20,11,31,.26);\n  cursor:pointer;\n  transition:transform .12s ease,box-shadow .12s ease,opacity .12s ease;\n}\n#hls-solitaire .hls-pill:hover{\n  transform:translateY(-1px);\n  box-shadow:inset 0 1px 0 rgba(255,255,255,.38),inset 0 -8px 14px rgba(32,20,45,.14),0 12px 22px rgba(20,11,31,.30),0 0 0 3px rgba(244,211,122,.09);\n}\n#hls-solitaire .hls-pill:active{transform:translateY(1px) scale(.985)}\n#hls-solitaire .hls-pill:disabled{\n  opacity:.48;\n  cursor:default;\n  transform:none;\n}\n#hls-solitaire #hlsNewGame{background:linear-gradient(180deg,#f4d37a 0%,#9a6c45 100%)}\n#hls-solitaire #hlsRestart{background:linear-gradient(180deg,#9b748f 0%,#5d3e71 100%)}\n#hls-solitaire #hlsUndo{background:linear-gradient(180deg,#8aaed0 0%,#4e6c8b 100%)}\n#hls-solitaire #hlsHint{\n  background:linear-gradient(180deg,#fffaf0 0%,#f4d37a 100%);\n  color:#241734;\n  text-shadow:none;\n  border-color:rgba(255,255,255,.78);\n}\n#hls-solitaire .hls-overlay{\n  position:absolute;\n  inset:0;\n  z-index:180;\n  display:none;\n  align-items:center;\n  justify-content:center;\n  background:rgba(24,14,37,.60);\n  backdrop-filter:blur(7px);\n  overflow:hidden;\n}\n#hls-solitaire .hls-overlay.active{display:flex}\n#hls-solitaire .hls-fireworks{\n  position:absolute;\n  inset:0;\n  width:100%;\n  height:100%;\n  z-index:1;\n  pointer-events:none;\n  opacity:0;\n  transition:opacity .25s ease;\n}\n#hls-solitaire .hls-fireworks.active{opacity:1}\n#hls-solitaire .hls-popup{\n  width:438px;\n  max-width:calc(100% - 48px);\n  min-height:276px;\n  position:relative;\n  z-index:2;\n  border-radius:28px;\n  padding:34px 34px 28px;\n  background:\n    radial-gradient(circle at 80% 0%,rgba(244,211,122,.25),transparent 38%),\n    radial-gradient(circle at 18% 20%,rgba(255,243,207,.36),transparent 34%),\n    linear-gradient(145deg,rgba(255,250,240,.98),rgba(222,209,240,.93));\n  border:1px solid rgba(255,255,255,.64);\n  box-shadow:0 32px 82px rgba(20,11,31,.42),inset 0 0 0 1px rgba(255,255,255,.22);\n  text-align:center;\n  overflow:hidden;\n}\n#hls-solitaire .hls-popup-main{\n  position:relative;\n  z-index:2;\n  min-height:210px;\n  display:flex;\n  flex-direction:column;\n  align-items:center;\n  justify-content:center;\n  gap:13px;\n}\n#hls-solitaire .hls-mark{\n  position:relative;\n  width:60px;\n  height:60px;\n  margin:0 auto -2px;\n  border-radius:50%;\n  background:radial-gradient(circle at 50% 50%,#fffaf0 0 12px,#fff3cf 13px 23px,#6f5582 24px 100%);\n  border:2px solid rgba(49,32,74,.24);\n  box-shadow:0 0 28px rgba(255,243,207,.42),0 10px 24px rgba(49,32,74,.20),inset 0 0 0 1px rgba(255,243,207,.24);\n}\n#hls-solitaire .hls-mark:before{\n  content:\"\";\n  position:absolute;\n  left:17px;\n  top:16px;\n  width:9px;\n  height:22px;\n  border-radius:999px 999px 6px 6px;\n  background:#241734;\n  box-shadow:17px 0 0 #241734;\n}\n#hls-solitaire .hls-mark:after{\n  content:\"\";\n  position:absolute;\n  left:50%;\n  top:58%;\n  width:29px;\n  height:22px;\n  transform:translate(-50%,-50%);\n  border-radius:50%;\n  background:#241734;\n  box-shadow:inset 6px 5px 0 rgba(255,250,240,.22);\n}\n#hls-solitaire .hls-popup-title{\n  margin:0;\n  color:#241734;\n  font-size:26px;\n  line-height:1.1;\n  font-weight:950;\n  letter-spacing:-.03em;\n}\n#hls-solitaire .hls-popup-copy{\n  width:100%;\n  max-width:348px;\n  margin:0 auto;\n  color:rgba(36,23,52,.76);\n  line-height:1.45;\n  font-size:13px;\n  text-align:center;\n}\n#hls-solitaire .hls-start-btn,#hls-solitaire .hls-popup-btn{\n  width:210px;\n  height:52px;\n  border:1px solid rgba(255,255,255,.60);\n  border-radius:999px;\n  color:#241734;\n  background:linear-gradient(180deg,#fffaf0,#f4d37a);\n  font-weight:950;\n  font-size:16px;\n  cursor:pointer;\n  box-shadow:0 16px 34px rgba(49,32,74,.22);\n  transition:transform .12s ease,filter .12s ease;\n}\n#hls-solitaire .hls-start-btn:hover,#hls-solitaire .hls-popup-btn:hover{\n  transform:translateY(-2px);\n  filter:brightness(1.04);\n}\n#hls-solitaire .hls-popup-btn.secondary{\n  height:44px;\n  background:rgba(255,255,255,.40);\n  font-size:14px;\n  box-shadow:0 10px 22px rgba(49,32,74,.14);\n}\n#hls-solitaire .hls-mode-row{\n  display:flex;\n  gap:9px;\n  justify-content:center;\n  align-items:center;\n}\n#hls-solitaire .hls-mode-btn{\n  min-width:94px;\n  height:38px;\n  border-radius:999px;\n  border:1px solid rgba(49,32,74,.16);\n  background:rgba(255,255,255,.40);\n  color:rgba(36,23,52,.74);\n  font-size:13px;\n  font-weight:850;\n  cursor:pointer;\n  transition:background .12s ease,color .12s ease,border-color .12s ease,box-shadow .12s ease,transform .12s ease;\n}\n#hls-solitaire .hls-mode-btn:hover{\n  transform:translateY(-1px);\n  border-color:rgba(49,32,74,.28);\n  background:rgba(255,250,240,.62);\n}\n#hls-solitaire .hls-mode-btn.active{\n  color:#241734;\n  background:linear-gradient(180deg,#fffaf0,#f4d37a);\n  border-color:rgba(255,255,255,.58);\n  box-shadow:0 0 0 3px rgba(244,211,122,.17),0 0 18px rgba(244,211,122,.20);\n}\n#hls-solitaire .hls-win-grid{\n  display:grid;\n  grid-template-columns:repeat(2,1fr);\n  gap:10px;\n  margin:6px auto 10px;\n  width:100%;\n  max-width:340px;\n}\n#hls-solitaire .hls-win-box{\n  border-radius:18px;\n  padding:12px 8px;\n  background:rgba(255,255,255,.42);\n  border:1px solid rgba(49,32,74,.11);\n}\n#hls-solitaire .hls-win-box span{\n  display:block;\n  color:rgba(36,23,52,.58);\n  font-size:10px;\n  text-transform:uppercase;\n  letter-spacing:.08em;\n}\n#hls-solitaire .hls-win-box b{\n  color:#241734;\n  font-size:18px;\n}\n#hls-solitaire .hls-rotate-note{\n  position:absolute;\n  inset:0;\n  z-index:250;\n  display:none;\n  place-items:center;\n  padding:24px;\n  background:rgba(24,14,37,.74);\n  color:#fffaf0;\n  text-align:center;\n  backdrop-filter:blur(7px);\n}\n#hls-solitaire.hls-portrait-fullscreen .hls-rotate-note{display:grid}\n#hls-solitaire .hls-rotate-card{\n  width:min(320px,84vw);\n  padding:22px 20px;\n  border-radius:24px;\n  background:rgba(49,32,74,.90);\n  border:1px solid rgba(255,243,207,.24);\n  box-shadow:0 24px 62px rgba(20,11,31,.42);\n}\n#hls-solitaire .hls-rotate-card b{\n  display:block;\n  font-size:18px;\n  margin-bottom:7px;\n}\n#hls-solitaire .hls-rotate-card span{\n  display:block;\n  font-size:13px;\n  line-height:1.45;\n  opacity:.84;\n}\n@media (max-width:720px){\n  #hls-solitaire{\n    width:100%;\n    border-radius:18px;\n  }\n}\n\n\/* WordPress-safe fullscreen fallback; scoped to this game. *\/\nhtml.hls-page-lock, body.hls-page-lock { overflow:hidden!important; overscroll-behavior:none!important; }\n#hls-solitaire.hls-fallback-fullscreen {\n  position:fixed!important; inset:0!important; z-index:2147483647!important;\n  width:100vw!important; height:100vh!important;\n  width:100dvw!important; height:100dvh!important;\n  max-width:none!important; margin:0!important; border-radius:0!important;\n}\n#hls-solitaire .hls-portrait-exit {\n  margin-top:14px; padding:10px 18px; border-radius:999px;\n  border:1px solid rgba(255,243,207,.60); cursor:pointer;\n  color:#241734; background:linear-gradient(180deg,#fffaf0,#f4d37a);\n  font-weight:800; font-size:13px;\n}\n<\/style>\n\n<div id=\"hls-solitaire\">\n  <div class=\"hls-fit\" id=\"hlsFit\">\n    <div class=\"hls-ornament left\"><\/div>\n    <div class=\"hls-ornament right\"><\/div>\n    <div class=\"hls-playfield\"><\/div>\n\n    <button class=\"hls-icon hls-pause\" id=\"hlsPause\" type=\"button\" aria-label=\"Pause\">\n      <span class=\"hls-pause-symbol\" aria-hidden=\"true\"><\/span>\n    <\/button>\n\n    <button class=\"hls-icon hls-mute\" id=\"hlsMute\" type=\"button\" aria-label=\"Sound\">\n      <span class=\"hls-sound-symbol\" aria-hidden=\"true\">\n        <span class=\"hls-sound-box\"><\/span>\n        <span class=\"hls-sound-wave w1\"><\/span>\n        <span class=\"hls-sound-wave w2\"><\/span>\n        <span class=\"hls-sound-wave w3\"><\/span>\n        <span class=\"hls-sound-slash\"><\/span>\n      <\/span>\n    <\/button>\n\n    <div class=\"hls-stats\" aria-live=\"polite\">\n      <span class=\"hls-stat\">Score <b id=\"hlsScore\">0<\/b><\/span>\n      <span class=\"hls-stat\">Time <b id=\"hlsTime\">00:00<\/b><\/span>\n      <span class=\"hls-stat\">Moves <b id=\"hlsMoves\">0<\/b><\/span>\n      <span class=\"hls-stat\">Best <b id=\"hlsBest\">0<\/b><\/span>\n    <\/div>\n\n    <button class=\"hls-icon hls-fullscreen\" id=\"hlsFullscreen\" type=\"button\" aria-label=\"Fullscreen\">\n      <span class=\"hls-full-symbol\" aria-hidden=\"true\"><\/span>\n    <\/button>\n\n    <div class=\"hls-slots\" id=\"hlsSlots\"><\/div>\n    <div class=\"hls-tableau-zones\" id=\"hlsTableauZones\"><\/div>\n    <div class=\"hls-card-layer\" id=\"hlsCards\"><\/div>\n    <div class=\"hls-ghost-layer\" id=\"hlsGhost\"><\/div>\n\n    <div class=\"hls-status\" id=\"hlsStatus\">Choose a mode, then open the moonlit workbench.<\/div>\n\n    <div class=\"hls-bottom-area\">\n      <div class=\"hls-bottom-controls\">\n        <button class=\"hls-pill\" id=\"hlsNewGame\" type=\"button\">New Game<\/button>\n        <button class=\"hls-pill\" id=\"hlsRestart\" type=\"button\">Restart<\/button>\n        <button class=\"hls-pill\" id=\"hlsUndo\" type=\"button\">Undo<\/button>\n        <button class=\"hls-pill\" id=\"hlsHint\" type=\"button\">Hint<\/button>\n      <\/div>\n    <\/div>\n\n    <div class=\"hls-overlay active\" id=\"hlsStartOverlay\">\n      <div class=\"hls-popup\">\n        <div class=\"hls-popup-main\">\n          <div class=\"hls-mark\" aria-hidden=\"true\"><\/div>\n          <h3 class=\"hls-popup-title\">Moon Rabbit Workshop<\/h3>\n          <button class=\"hls-start-btn\" id=\"hlsContinueBtn\" type=\"button\" style=\"display:none;\">Continue Game<\/button>\n          <button class=\"hls-start-btn\" id=\"hlsStartBtn\" type=\"button\">Start Game<\/button>\n          <div class=\"hls-mode-row\" aria-label=\"Mode\">\n            <button class=\"hls-mode-btn active\" type=\"button\" data-mode=\"Relaxed\">Relaxed<\/button>\n            <button class=\"hls-mode-btn\" type=\"button\" data-mode=\"Classic\">Classic<\/button>\n          <\/div>\n          <p class=\"hls-popup-copy\">Stack every moon card from Ace to King. Empty tableau columns can accept any card.<\/p>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <div class=\"hls-overlay\" id=\"hlsPauseOverlay\">\n      <div class=\"hls-popup\">\n        <div class=\"hls-popup-main\">\n          <div class=\"hls-mark\" aria-hidden=\"true\"><\/div>\n          <h3 class=\"hls-popup-title\">Moonlit Break<\/h3>\n          <button class=\"hls-popup-btn\" id=\"hlsResumeBtn\" type=\"button\">Resume Game<\/button>\n          <button class=\"hls-popup-btn secondary\" id=\"hlsSaveBtn\" type=\"button\">Save Game<\/button>\n          <button class=\"hls-popup-btn secondary\" id=\"hlsPauseNewBtn\" type=\"button\">New Game<\/button>\n          <p class=\"hls-popup-copy\">The moon cards will wait quietly on the little workbench.<\/p>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <div class=\"hls-overlay\" id=\"hlsWinOverlay\">\n      <canvas class=\"hls-fireworks\" id=\"hlsFireworks\"><\/canvas>\n      <div class=\"hls-popup\">\n        <div class=\"hls-popup-main\">\n          <div class=\"hls-mark\" aria-hidden=\"true\"><\/div>\n          <h3 class=\"hls-popup-title\">Mooncraft Complete<\/h3>\n          <div class=\"hls-win-grid\">\n            <div class=\"hls-win-box\"><span>Score<\/span><b id=\"hlsWinScore\">0<\/b><\/div>\n            <div class=\"hls-win-box\"><span>Moves<\/span><b id=\"hlsWinMoves\">0<\/b><\/div>\n            <div class=\"hls-win-box\"><span>Best<\/span><b id=\"hlsWinBest\">0<\/b><\/div>\n            <div class=\"hls-win-box\"><span>Best Moves<\/span><b id=\"hlsWinBestMoves\">&#8212;<\/b><\/div>\n          <\/div>\n          <button class=\"hls-popup-btn\" id=\"hlsPlayAgain\" type=\"button\">Play Again<\/button>\n          <p class=\"hls-popup-copy\" id=\"hlsWinNote\">A soft moonlit finish.<\/p>\n        <\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <div class=\"hls-rotate-note\">\n    <div class=\"hls-rotate-card\">\n      <b>Turn Toward the Moon<\/b>\n      <span>Landscape mode gives the moon workshop more room and keeps every card easy to read.<\/span>\n      <button type=\"button\" id=\"hlsExitPortraitFullscreen\" class=\"hls-portrait-exit\">Exit Fullscreen<\/button>\n    <\/div>\n  <\/div>\n<\/div>\n\n<script>\n(function(){\n  \"use strict\";\n\n  function initializeHls(){\n  const root=document.getElementById(\"hls-solitaire\");\n  if(!root || root.dataset.hlsReady===\"1\") return;\n  root.dataset.hlsReady=\"1\";\n  const fit=document.getElementById(\"hlsFit\");\n  const slotsEl=document.getElementById(\"hlsSlots\");\n  const zonesEl=document.getElementById(\"hlsTableauZones\");\n  const cardsEl=document.getElementById(\"hlsCards\");\n  const ghostEl=document.getElementById(\"hlsGhost\");\n  const statusEl=document.getElementById(\"hlsStatus\");\n  const fireworksCanvas=document.getElementById(\"hlsFireworks\");\n  const fireworksCtx=fireworksCanvas.getContext(\"2d\");\n\n  const startOverlay=document.getElementById(\"hlsStartOverlay\");\n  const pauseOverlay=document.getElementById(\"hlsPauseOverlay\");\n  const winOverlay=document.getElementById(\"hlsWinOverlay\");\n\n  const pauseBtn=document.getElementById(\"hlsPause\");\n  const muteBtn=document.getElementById(\"hlsMute\");\n  const fullscreenBtn=document.getElementById(\"hlsFullscreen\");\n\n  const scoreEl=document.getElementById(\"hlsScore\");\n  const timeEl=document.getElementById(\"hlsTime\");\n  const movesEl=document.getElementById(\"hlsMoves\");\n  const bestEl=document.getElementById(\"hlsBest\");\n\n  const continueBtn=document.getElementById(\"hlsContinueBtn\");\n  const startBtn=document.getElementById(\"hlsStartBtn\");\n  const resumeBtn=document.getElementById(\"hlsResumeBtn\");\n  const saveBtn=document.getElementById(\"hlsSaveBtn\");\n  const pauseNewBtn=document.getElementById(\"hlsPauseNewBtn\");\n  const playAgainBtn=document.getElementById(\"hlsPlayAgain\");\n\n  const newGameBtn=document.getElementById(\"hlsNewGame\");\n  const restartBtn=document.getElementById(\"hlsRestart\");\n  const undoBtn=document.getElementById(\"hlsUndo\");\n  const hintBtn=document.getElementById(\"hlsHint\");\n\n  const winScoreEl=document.getElementById(\"hlsWinScore\");\n  const winMovesEl=document.getElementById(\"hlsWinMoves\");\n  const winBestEl=document.getElementById(\"hlsWinBest\");\n  const winBestMovesEl=document.getElementById(\"hlsWinBestMoves\");\n  const winNoteEl=document.getElementById(\"hlsWinNote\");\n\n  const BASE_W=1280;\n  const BASE_H=720;\n  const CARD_W=96;\n  const CARD_H=132;\n  const TOP_Y=112;\n  const TABLEAU_Y=282;\n  const MAX_CARD_BOTTOM=584;\n  const TABLEAU_GAP=34;\n  const FOUNDATION_GAP=112;\n\n  const SAVE_KEY=\"hlsMoonRabbitWorkshopSolitaireSaveV1\";\n  const BEST_KEY=\"hlsMoonRabbitWorkshopSolitaireBestV1\";\n  const MUTE_KEY=\"hlsMoonRabbitWorkshopSolitaireMutedV1\";\n\n  const SUITS=[\n    {key:\"H\",name:\"Moon Rabbits\",shape:\"rabbit\",color:\"red\"},\n    {key:\"D\",name:\"Mochi Cakes\",shape:\"mochi\",color:\"red\"},\n    {key:\"C\",name:\"Night Clouds\",shape:\"cloud\",color:\"black\"},\n    {key:\"S\",name:\"Wooden Mallets\",shape:\"mallet\",color:\"black\"}\n  ];\n\n  const MODE={\n    Relaxed:{draw:1,recycleLimit:Infinity},\n    Classic:{draw:3,recycleLimit:3}\n  };\n\n  const tableauStartX=Math.round((BASE_W-(7*CARD_W+6*TABLEAU_GAP))\/2);\n  const tableauRight=tableauStartX+(7*CARD_W+6*TABLEAU_GAP);\n  const foundationStartX=tableauRight-(CARD_W+3*FOUNDATION_GAP);\n\n  const POS={\n    stock:{x:tableauStartX,y:TOP_Y,w:CARD_W,h:CARD_H},\n    waste:{x:tableauStartX+120,y:TOP_Y,w:CARD_W+64,h:CARD_H},\n    foundations:[],\n    tableau:[]\n  };\n\n  for(let i=0;i<4;i++){\n    POS.foundations.push({x:foundationStartX+i*FOUNDATION_GAP,y:TOP_Y,w:CARD_W,h:CARD_H,index:i});\n  }\n\n  for(let i=0;i<7;i++){\n    POS.tableau.push({x:tableauStartX+i*(CARD_W+TABLEAU_GAP),y:TABLEAU_Y,w:CARD_W,h:300,col:i});\n  }\n\n  function safeGet(key){\n    try{return window.localStorage.getItem(key)}catch(err){return null}\n  }\n  function safeSet(key,value){\n    try{window.localStorage.setItem(key,value);return true}catch(err){return false}\n  }\n  function safeRemove(key){\n    try{window.localStorage.removeItem(key);return true}catch(err){return false}\n  }\n\n  const state={\n    started:false,\n    paused:false,\n    won:false,\n    mode:\"Relaxed\",\n    stock:[],\n    waste:[],\n    foundations:[[],[],[],[]],\n    tableau:Array.from({length:7},()=>[]),\n    initialSnapshot:null,\n    selected:null,\n    hintMark:null,\n    moves:0,\n    foundationBonus:0,\n    flipBonus:0,\n    undoCount:0,\n    hintCount:0,\n    recycleUsed:0,\n    recyclePenalty:0,\n    startTime:0,\n    pausedAt:0,\n    finalElapsed:0,\n    undoStack:[],\n    muted:safeGet(MUTE_KEY)===\"1\",\n    audioCtx:null\n  };\n\n  let interaction=null;\n  let lastTap={id:\"\",time:0};\n  let statusTimer=null;\n  let hintTimer=null;\n\n  let fireworksRunning=false;\n  let fireworksFrame=0;\n  let fireworkRockets=[];\n  let fireworkParticles=[];\n  let fireworksDpr=1;\n\n  function cloneCard(card){\n    return card ? {id:card.id,suit:card.suit,rank:card.rank,color:card.color,faceUp:!!card.faceUp} : null;\n  }\n  function cloneCards(arr){return arr.map(cloneCard)}\n  function cloneFoundations(f){return f.map(cloneCards)}\n  function rankLabel(rank){\n    if(rank===1) return \"A\";\n    if(rank===11) return \"J\";\n    if(rank===12) return \"Q\";\n    if(rank===13) return \"K\";\n    return String(rank);\n  }\n  function rankName(rank){\n    if(rank===1) return \"Ace\";\n    if(rank===11) return \"Jack\";\n    if(rank===12) return \"Queen\";\n    if(rank===13) return \"King\";\n    return String(rank);\n  }\n  function suitInfo(key){return SUITS.find(s=>s.key===key)}\n  function cardName(card){return rankName(card.rank)+\" of \"+suitInfo(card.suit).name}\n  function cardColor(card){return suitInfo(card.suit).color}\n  function formatTime(seconds){\n    seconds=Math.max(0,Math.floor(seconds));\n    const m=String(Math.floor(seconds\/60)).padStart(2,\"0\");\n    const s=String(seconds%60).padStart(2,\"0\");\n    return m+\":\"+s;\n  }\n  function rand(min,max){return min+Math.random()*(max-min)}\n  function resizeFireworksCanvas(){\n    fireworksDpr=Math.min(window.devicePixelRatio || 1,2);\n    fireworksCanvas.width=BASE_W*fireworksDpr;\n    fireworksCanvas.height=BASE_H*fireworksDpr;\n    fireworksCanvas.style.width=BASE_W+\"px\";\n    fireworksCanvas.style.height=BASE_H+\"px\";\n    fireworksCtx.setTransform(fireworksDpr,0,0,fireworksDpr,0,0);\n  }\n  function spawnRocket(){\n    fireworkRockets.push({\n      x:rand(170,1110),\n      y:720,\n      tx:rand(210,1070),\n      ty:rand(90,285),\n      speed:rand(4.6,6.6),\n      hue:rand(28,58)+rand(0,1)*160,\n      trail:[]\n    });\n  }\n  function explodeRocket(x,y,hue){\n    const count=28+Math.floor(Math.random()*14);\n    const life=42+Math.floor(Math.random()*16);\n    for(let i=0;i<count;i++){\n      const angle=(Math.PI*2\/count)*i+rand(-.08,.08);\n      const speed=rand(1.8,4.8);\n      fireworkParticles.push({\n        x:x,\n        y:y,\n        vx:Math.cos(angle)*speed,\n        vy:Math.sin(angle)*speed,\n        life:life,\n        maxLife:life,\n        size:rand(2,4.6),\n        hue:(hue+rand(-24,24)+360)%360\n      });\n    }\n  }\n  function startFireworks(){\n    stopFireworks();\n    resizeFireworksCanvas();\n    fireworksRunning=true;\n    fireworksCanvas.classList.add(\"active\");\n    for(let i=0;i<4;i++){\n      setTimeout(function(){\n        if(fireworksRunning) spawnRocket();\n      },i*170);\n    }\n    animateFireworks();\n  }\n  function stopFireworks(){\n    fireworksRunning=false;\n    cancelAnimationFrame(fireworksFrame);\n    fireworkRockets.length=0;\n    fireworkParticles.length=0;\n    fireworksCanvas.classList.remove(\"active\");\n    fireworksCtx.clearRect(0,0,BASE_W,BASE_H);\n  }\n  function animateFireworks(){\n    fireworksCtx.clearRect(0,0,BASE_W,BASE_H);\n\n    if(Math.random()<.055) spawnRocket();\n\n    for(let i=fireworkRockets.length-1;i>=0;i--){\n      const r=fireworkRockets[i];\n      const dx=r.tx-r.x;\n      const dy=r.ty-r.y;\n      const dist=Math.hypot(dx,dy) || 1;\n\n      r.trail.push({x:r.x,y:r.y});\n      if(r.trail.length>8) r.trail.shift();\n\n      r.x+=(dx\/dist)*r.speed;\n      r.y+=(dy\/dist)*r.speed;\n\n      for(let t=0;t<r.trail.length;t++){\n        const p=r.trail[t];\n        const alpha=(t+1)\/r.trail.length*.34;\n        fireworksCtx.beginPath();\n        fireworksCtx.fillStyle=\"hsla(\"+r.hue+\",95%,70%,\"+alpha+\")\";\n        fireworksCtx.arc(p.x,p.y,2.4,0,Math.PI*2);\n        fireworksCtx.fill();\n      }\n\n      fireworksCtx.beginPath();\n      fireworksCtx.fillStyle=\"hsla(\"+r.hue+\",100%,74%,1)\";\n      fireworksCtx.arc(r.x,r.y,3.2,0,Math.PI*2);\n      fireworksCtx.fill();\n\n      if(dist<8){\n        explodeRocket(r.tx,r.ty,r.hue);\n        fireworkRockets.splice(i,1);\n      }\n    }\n\n    for(let i=fireworkParticles.length-1;i>=0;i--){\n      const p=fireworkParticles[i];\n      p.x+=p.vx;\n      p.y+=p.vy;\n      p.vy+=.045;\n      p.vx*=.992;\n      p.life-=1;\n\n      const alpha=Math.max(0,p.life\/p.maxLife);\n      fireworksCtx.beginPath();\n      fireworksCtx.fillStyle=\"hsla(\"+p.hue+\",96%,72%,\"+alpha+\")\";\n      fireworksCtx.arc(p.x,p.y,p.size,0,Math.PI*2);\n      fireworksCtx.fill();\n\n      if(p.life<=0) fireworkParticles.splice(i,1);\n    }\n\n    if(fireworksRunning){\n      fireworksFrame=requestAnimationFrame(animateFireworks);\n    }\n  }\n  function nowElapsed(){\n    if(!state.started) return 0;\n    if(state.won) return state.finalElapsed;\n    if(state.paused) return Math.floor((state.pausedAt-state.startTime)\/1000);\n    return Math.floor((Date.now()-state.startTime)\/1000);\n  }\n  function loadBest(){\n    try{\n      const raw=safeGet(BEST_KEY);\n      if(!raw) return {bestScore:0,bestTime:null,bestMoves:null};\n      const data=JSON.parse(raw);\n      return {\n        bestScore:Number(data.bestScore)||0,\n        bestTime:data.bestTime==null?null:Number(data.bestTime),\n        bestMoves:data.bestMoves==null?null:Number(data.bestMoves)\n      };\n    }catch(err){\n      return {bestScore:0,bestTime:null,bestMoves:null};\n    }\n  }\n  function saveBest(best){safeSet(BEST_KEY,JSON.stringify(best))}\n  function foundationTotal(){return state.foundations.reduce((sum,pile)=>sum+pile.length,0)}\n  function calcScore(){\n    const elapsed=nowElapsed();\n    const score=5000+state.foundationBonus+state.flipBonus-state.moves-Math.floor(elapsed\/5)-state.undoCount*10-state.hintCount*25-state.recyclePenalty;\n    return Math.max(0,Math.floor(score));\n  }\n  function setStatus(text,temporary){\n    statusEl.textContent=text;\n    if(statusTimer) clearTimeout(statusTimer);\n    if(temporary){\n      statusTimer=setTimeout(function(){\n        if(!state.started) statusEl.textContent=\"Choose a mode, then open the moonlit workbench.\";\n        else if(state.paused) statusEl.textContent=\"The moonlit workbench is paused.\";\n        else if(state.won) statusEl.textContent=\"Every moon card has reached its foundation.\";\n        else statusEl.textContent=\"Tap or drag cards. Double tap a ready card to send it to a foundation.\";\n      },temporary);\n    }\n  }\n  function updateStats(){\n    const best=loadBest();\n    scoreEl.textContent=String(calcScore());\n    timeEl.textContent=formatTime(nowElapsed());\n    movesEl.textContent=String(state.moves);\n    bestEl.textContent=String(best.bestScore||0);\n    undoBtn.disabled=!state.started || state.paused || state.won || state.undoStack.length===0;\n    hintBtn.disabled=!state.started || state.paused || state.won;\n    restartBtn.disabled=!state.started;\n  }\n  function initAudio(){\n    if(state.audioCtx) return;\n    const AC=window.AudioContext || window.webkitAudioContext;\n    if(!AC) return;\n    try{state.audioCtx=new AC()}catch(err){state.audioCtx=null}\n  }\n  function playSound(type){\n    if(state.muted) return;\n    initAudio();\n    const ctx=state.audioCtx;\n    if(!ctx) return;\n    if(((__hls_safe_and)=>__hls_safe_and?(ctx.resume):__hls_safe_and)(ctx.state===\"suspended\")) ctx.resume().catch(function(){});\n    function tone(freq,duration,volume,wave,delay,endRatio){\n      const t=ctx.currentTime+(delay||0);\n      const gain=ctx.createGain();\n      const osc=ctx.createOscillator();\n      osc.type=wave||\"triangle\";\n      osc.frequency.setValueAtTime(freq,t);\n      osc.frequency.exponentialRampToValueAtTime(Math.max(70,freq*(endRatio||.82)),t+duration);\n      gain.gain.setValueAtTime(.0001,t);\n      gain.gain.exponentialRampToValueAtTime(volume,t+.012);\n      gain.gain.exponentialRampToValueAtTime(.0001,t+duration);\n      osc.connect(gain);\n      gain.connect(ctx.destination);\n      osc.start(t);\n      osc.stop(t+duration+.025);\n    }\n    if(type===\"draw\"){tone(260,.08,.026,\"triangle\",0,.78);tone(335,.08,.016,\"sine\",.04,.86)}\n    else if(type===\"move\"){tone(315,.07,.026,\"triangle\",0,.72);tone(415,.055,.014,\"sine\",.018,.84)}\n    else if(type===\"flip\"){tone(480,.08,.022,\"triangle\",0,.92)}\n    else if(type===\"foundation\"){tone(520,.105,.026,\"triangle\",0,.92);tone(690,.115,.020,\"sine\",.055,.94)}\n    else if(type===\"invalid\"){tone(145,.115,.024,\"triangle\",0,.64)}\n    else if(type===\"undo\"){tone(240,.09,.022,\"sine\",0,.75);tone(180,.09,.014,\"triangle\",.04,.80)}\n    else if(type===\"hint\"){tone(620,.115,.024,\"triangle\",0,.94);tone(820,.120,.018,\"sine\",.052,.96)}\n    else if(type===\"save\"){tone(390,.08,.022,\"sine\",0,.90);tone(520,.08,.014,\"triangle\",.04,.92)}\n    else if(type===\"pause\"){tone(220,.105,.020,\"sine\",0,.70)}\n    else if(type===\"resume\"){tone(360,.075,.022,\"triangle\",0,.88);tone(470,.075,.014,\"sine\",.035,.92)}\n    else if(type===\"win\"){[392,493.88,587.33,783.99].forEach(function(freq,i){tone(freq,.45,.022,i%2?\"sine\":\"triangle\",i*.075,.95)})}\n  }\n  function createDeck(){\n    const deck=[];\n    SUITS.forEach(function(s){\n      for(let r=1;r<=13;r++) deck.push({id:s.key+\"-\"+r,suit:s.key,rank:r,color:s.color,faceUp:false});\n    });\n    return deck;\n  }\n  function shuffle(deck){\n    const arr=deck.slice();\n    for(let i=arr.length-1;i>0;i--){\n      const j=Math.floor(Math.random()*(i+1));\n      const temp=arr[i];\n      arr[i]=arr[j];\n      arr[j]=temp;\n    }\n    return arr;\n  }\n  function snapshot(){\n    return {\n      mode:state.mode,\n      stock:cloneCards(state.stock),\n      waste:cloneCards(state.waste),\n      foundations:cloneFoundations(state.foundations),\n      tableau:state.tableau.map(cloneCards),\n      moves:state.moves,\n      foundationBonus:state.foundationBonus,\n      flipBonus:state.flipBonus,\n      undoCount:state.undoCount,\n      hintCount:state.hintCount,\n      recycleUsed:state.recycleUsed,\n      recyclePenalty:state.recyclePenalty,\n      elapsed:nowElapsed()\n    };\n  }\n  function restoreSnapshot(snap,keepUndoPenalty){\n    state.mode=snap.mode||\"Relaxed\";\n    state.stock=cloneCards(snap.stock||[]);\n    state.waste=cloneCards(snap.waste||[]);\n    state.foundations=cloneFoundations(snap.foundations||[[],[],[],[]]);\n    while(state.foundations.length<4) state.foundations.push([]);\n    state.tableau=(snap.tableau||Array.from({length:7},function(){return []})).map(cloneCards);\n    while(state.tableau.length<7) state.tableau.push([]);\n    state.moves=Number(snap.moves)||0;\n    state.foundationBonus=Number(snap.foundationBonus)||0;\n    state.flipBonus=Number(snap.flipBonus)||0;\n    state.undoCount=keepUndoPenalty ? (Number(snap.undoCount)||0)+1 : (Number(snap.undoCount)||0);\n    state.hintCount=Number(snap.hintCount)||0;\n    state.recycleUsed=Number(snap.recycleUsed)||0;\n    state.recyclePenalty=Number(snap.recyclePenalty)||0;\n    state.startTime=Date.now()-(Number(snap.elapsed)||0)*1000;\n    state.finalElapsed=0;\n    state.selected=null;\n    state.hintMark=null;\n    interaction=null;\n    clearGhost();\n    updateModeButtons();\n  }\n  function pushUndo(){\n    state.undoStack.push(snapshot());\n    if(state.undoStack.length>80) state.undoStack.shift();\n  }\n  function hasSave(){\n    try{\n      const raw=safeGet(SAVE_KEY);\n      if(!raw) return false;\n      const data=JSON.parse(raw);\n      return ((__hls_safe_and)=>__hls_safe_and?(!data.won):__hls_safe_and)(((__hls_safe_and)=>__hls_safe_and?(data.started):__hls_safe_and)(((__hls_safe_and)=>__hls_safe_and?(data.version===1):__hls_safe_and)(data)));\n    }catch(err){return false}\n  }\n  function saveGame(){\n    if(!state.started || state.won) return;\n    const data=snapshot();\n    data.version=1;\n    data.started=true;\n    data.won=false;\n    data.savedAt=Date.now();\n    data.initialSnapshot=state.initialSnapshot;\n    safeSet(SAVE_KEY,JSON.stringify(data));\n    updateContinueButton();\n  }\n  function clearSave(){\n    safeRemove(SAVE_KEY);\n    updateContinueButton();\n  }\n  function updateContinueButton(){continueBtn.style.display=hasSave() ? \"block\" : \"none\"}\n  function continueGame(){\n    stopFireworks();\n    try{\n      const raw=safeGet(SAVE_KEY);\n      if(!raw) return;\n      const data=JSON.parse(raw);\n      if(!data || data.version!==1) return;\n      state.started=true;\n      state.paused=false;\n      state.won=false;\n      state.undoStack=[];\n      restoreSnapshot(data,false);\n      state.initialSnapshot=data.initialSnapshot || snapshot();\n      startOverlay.classList.remove(\"active\");\n      pauseOverlay.classList.remove(\"active\");\n      winOverlay.classList.remove(\"active\");\n      root.classList.add(\"hls-game-active\");\n      root.classList.remove(\"hls-paused\");\n      setStatus(\"Saved mooncraft game restored.\",1200);\n      playSound(\"resume\");\n      render();\n    }catch(err){clearSave()}\n  }\n  function startNewGame(mode){\n    stopFireworks();\n    initAudio();\n    state.started=true;\n    state.paused=false;\n    state.won=false;\n    state.mode=mode||state.mode;\n    state.stock=[];\n    state.waste=[];\n    state.foundations=[[],[],[],[]];\n    state.tableau=Array.from({length:7},function(){return []});\n    state.selected=null;\n    state.hintMark=null;\n    state.moves=0;\n    state.foundationBonus=0;\n    state.flipBonus=0;\n    state.undoCount=0;\n    state.hintCount=0;\n    state.recycleUsed=0;\n    state.recyclePenalty=0;\n    state.undoStack=[];\n    state.startTime=Date.now();\n    state.pausedAt=0;\n    state.finalElapsed=0;\n    const deck=shuffle(createDeck());\n    for(let col=0;col<7;col++){\n      for(let row=0;row<=col;row++){\n        const card=deck.pop();\n        card.faceUp=row===col;\n        state.tableau[col].push(card);\n      }\n    }\n    state.stock=deck.map(function(card){\n      card.faceUp=false;\n      return card;\n    });\n    state.initialSnapshot=snapshot();\n    root.classList.add(\"hls-game-active\");\n    root.classList.remove(\"hls-paused\");\n    startOverlay.classList.remove(\"active\");\n    pauseOverlay.classList.remove(\"active\");\n    winOverlay.classList.remove(\"active\");\n    clearSave();\n    saveGame();\n    setStatus(state.mode===\"Classic\" ? \"Classic mode: draw three moon cards and recycle carefully.\" : \"Relaxed mode: draw one moon card and play gently.\",1500);\n    playSound(\"draw\");\n    render();\n  }\n  function restartGame(){\n    stopFireworks();\n    if(!state.initialSnapshot) return;\n    state.started=true;\n    state.paused=false;\n    state.won=false;\n    state.undoStack=[];\n    restoreSnapshot(state.initialSnapshot,false);\n    state.startTime=Date.now();\n    root.classList.add(\"hls-game-active\");\n    root.classList.remove(\"hls-paused\");\n    startOverlay.classList.remove(\"active\");\n    pauseOverlay.classList.remove(\"active\");\n    winOverlay.classList.remove(\"active\");\n    setStatus(\"The same moonlit deal begins again.\",1200);\n    playSound(\"draw\");\n    saveGame();\n    render();\n  }\n  function suitHTML(suit,small){\n    const info=suitInfo(suit);\n    return '<span class=\"hls-suit-shape hls-suit-'+info.shape+(small?' small':'')+'\" aria-hidden=\"true\"><\/span>';\n  }\n  function createCardEl(card,x,y,loc,z){\n    const el=document.createElement(\"div\");\n    el.className=\"hls-card\";\n    el.dataset.cardId=card.id;\n    el.dataset.loc=loc.type;\n    el.style.left=x+\"px\";\n    el.style.top=y+\"px\";\n    el.style.zIndex=String(z);\n    if(loc.type===\"tableau\"){\n      el.dataset.col=String(loc.col);\n      el.dataset.index=String(loc.index);\n    }else if(loc.type===\"waste\"){\n      el.dataset.index=String(loc.index);\n    }else if(loc.type===\"foundation\"){\n      el.dataset.foundation=String(loc.foundation);\n    }else if(loc.type===\"stock\"){\n      el.dataset.stock=\"1\";\n    }\n    if(!card.faceUp){\n      el.classList.add(\"hls-back\");\n      return el;\n    }\n    el.classList.add(\"suit-\"+card.suit);\n    const label=rankLabel(card.rank);\n    el.innerHTML=\n      '<div class=\"hls-corner\"><div>'+label+'<\/div><div class=\"hls-suit-small\">'+suitHTML(card.suit,true)+'<\/div><\/div>'+\n      '<div class=\"hls-center-suit\">'+suitHTML(card.suit,false)+'<\/div>'+\n      '<div class=\"hls-corner bottom\"><div>'+label+'<\/div><div class=\"hls-suit-small\">'+suitHTML(card.suit,true)+'<\/div><\/div>';\n    if(((__hls_safe_and)=>__hls_safe_and?(loc.index!==state.waste.length-1):__hls_safe_and)(loc.type===\"waste\")) el.classList.add(\"hls-not-playable\");\n    if(((__hls_safe_and)=>__hls_safe_and?(state.selected.stack.some(function(c){return c.id===card.id})):__hls_safe_and)(state.selected)){\n      el.classList.add(\"hls-selected\");\n      if(((__hls_safe_and)=>__hls_safe_and?(interaction.drag):__hls_safe_and)(interaction)) el.classList.add(\"hls-dimmed\");\n    }\n    if(((__hls_safe_and)=>__hls_safe_and?(state.hintMark.sourceIds.includes(card.id)):__hls_safe_and)(((__hls_safe_and)=>__hls_safe_and?(state.hintMark.sourceIds):__hls_safe_and)(state.hintMark))){\n      el.classList.add(\"hls-hint-source\");\n    }\n    return el;\n  }\n  function createDropZones(){\n    slotsEl.innerHTML=\"\";\n    zonesEl.innerHTML=\"\";\n    const stock=document.createElement(\"div\");\n    stock.className=\"hls-slot stock-slot hls-drop\";\n    stock.dataset.target=\"stock\";\n    stock.style.left=POS.stock.x+\"px\";\n    stock.style.top=POS.stock.y+\"px\";\n    slotsEl.appendChild(stock);\n\n    const waste=document.createElement(\"div\");\n    waste.className=\"hls-slot hls-drop\";\n    waste.dataset.target=\"waste\";\n    waste.style.left=POS.waste.x+\"px\";\n    waste.style.top=POS.waste.y+\"px\";\n    slotsEl.appendChild(waste);\n\n    POS.foundations.forEach(function(p){\n      const slot=document.createElement(\"div\");\n      slot.className=\"hls-slot hls-drop\";\n      slot.dataset.target=\"foundation\";\n      slot.dataset.index=String(p.index);\n      slot.style.left=p.x+\"px\";\n      slot.style.top=p.y+\"px\";\n      slotsEl.appendChild(slot);\n    });\n\n    POS.tableau.forEach(function(p){\n      const zone=document.createElement(\"div\");\n      zone.className=\"hls-tableau-zone hls-drop\";\n      zone.dataset.target=\"tableau\";\n      zone.dataset.col=String(p.col);\n      zone.style.left=p.x+\"px\";\n      zone.style.top=(p.y-6)+\"px\";\n      zonesEl.appendChild(zone);\n    });\n  }\n  function getFanGap(){\n    const maxLen=Math.max(1,...state.tableau.map(function(col){return col.length}));\n    if(maxLen<=1) return 19;\n    const gap=(MAX_CARD_BOTTOM-TABLEAU_Y-CARD_H)\/(maxLen-1);\n    return Math.max(8,Math.min(19,gap));\n  }\n  function clearGhost(){\n    ghostEl.innerHTML=\"\";\n    ghostEl.style.transform=\"\";\n  }\n  function render(){\n    cardsEl.innerHTML=\"\";\n    clearDropHighlights();\n    if(state.stock.length){\n      const card=cloneCard(state.stock[state.stock.length-1]);\n      card.faceUp=false;\n      cardsEl.appendChild(createCardEl(card,POS.stock.x,POS.stock.y,{type:\"stock\"},40));\n    }\n    const drawCount=MODE[state.mode].draw;\n    const visibleWaste=state.waste.slice(-drawCount);\n    visibleWaste.forEach(function(card,i){\n      const realIndex=state.waste.length-visibleWaste.length+i;\n      const offset=drawCount===3 ? i*28 : 0;\n      cardsEl.appendChild(createCardEl(card,POS.waste.x+offset,POS.waste.y,{type:\"waste\",index:realIndex},60+i));\n    });\n    POS.foundations.forEach(function(p,i){\n      const pile=state.foundations[i];\n      if(pile.length){\n        const card=pile[pile.length-1];\n        cardsEl.appendChild(createCardEl(card,p.x,p.y,{type:\"foundation\",foundation:i},80+i));\n      }\n    });\n    const fan=getFanGap();\n    state.tableau.forEach(function(col,colIndex){\n      const p=POS.tableau[colIndex];\n      col.forEach(function(card,index){\n        const y=TABLEAU_Y+index*fan;\n        cardsEl.appendChild(createCardEl(card,p.x,y,{type:\"tableau\",col:colIndex,index:index},120+colIndex*80+index));\n      });\n    });\n    updateDropHighlights();\n    updateStats();\n  }\n  function clearDropHighlights(){\n    root.querySelectorAll(\".hls-drop\").forEach(function(el){el.classList.remove(\"hls-valid\",\"hls-hint-target\")});\n  }\n  function dropElementForTarget(target){\n    if(!target) return null;\n    if(target.type===\"tableau\") return root.querySelector('.hls-drop[data-target=\"tableau\"][data-col=\"'+target.col+'\"]');\n    if(target.type===\"foundation\") return root.querySelector('.hls-drop[data-target=\"foundation\"][data-index=\"'+target.index+'\"]');\n    return null;\n  }\n  function updateDropHighlights(){\n    clearDropHighlights();\n    if(((__hls_safe_and)=>__hls_safe_and?(!state.paused):__hls_safe_and)(state.selected)){\n      getValidTargets(state.selected).forEach(function(target){\n        const el=dropElementForTarget(target);\n        if(el) el.classList.add(\"hls-valid\");\n      });\n    }\n    if(((__hls_safe_and)=>__hls_safe_and?(!state.paused):__hls_safe_and)(((__hls_safe_and)=>__hls_safe_and?(state.hintMark.target):__hls_safe_and)(state.hintMark))){\n      const el=dropElementForTarget(state.hintMark.target);\n      if(el) el.classList.add(\"hls-hint-target\");\n    }\n  }\n  function isValidTableauStack(stack){\n    if(!stack || !stack.length) return false;\n    for(let i=0;i<stack.length;i++){\n      if(!stack[i].faceUp) return false;\n    }\n    for(let i=0;i<stack.length-1;i++){\n      const upper=stack[i];\n      const lower=stack[i+1];\n      if(upper.rank!==lower.rank+1) return false;\n      if(cardColor(upper)===cardColor(lower)) return false;\n    }\n    return true;\n  }\n  function sourceFromElement(el){\n    if(!el || !el.classList.contains(\"hls-card\")) return null;\n    const loc=el.dataset.loc;\n    if(loc===\"waste\"){\n      const index=Number(el.dataset.index);\n      if(index!==state.waste.length-1) return null;\n      const card=state.waste[index];\n      if(!card || !card.faceUp) return null;\n      return {source:{type:\"waste\"},stack:[card],index:index};\n    }\n    if(loc===\"tableau\"){\n      const col=Number(el.dataset.col);\n      const index=Number(el.dataset.index);\n      const column=state.tableau[col];\n      const card=column[index];\n      if(!card || !card.faceUp) return null;\n      const stack=column.slice(index);\n      if(!isValidTableauStack(stack)){\n        playSound(\"invalid\");\n        setStatus(\"Only open descending stacks with alternating moon colors can move.\",1400);\n        return null;\n      }\n      return {source:{type:\"tableau\",col:col},stack:stack,index:index};\n    }\n    if(loc===\"foundation\"){\n      const foundation=Number(el.dataset.foundation);\n      const pile=state.foundations[foundation];\n      if(!pile.length) return null;\n      const card=pile[pile.length-1];\n      return {source:{type:\"foundation\",foundation:foundation},stack:[card],index:pile.length-1};\n    }\n    return null;\n  }\n  function targetFromElement(el){\n    if(!el) return null;\n    const slot=el.closest(\".hls-drop\");\n    if(slot){\n      const target=slot.dataset.target;\n      if(target===\"tableau\") return {type:\"tableau\",col:Number(slot.dataset.col)};\n      if(target===\"foundation\") return {type:\"foundation\",index:Number(slot.dataset.index)};\n      if(target===\"stock\") return {type:\"stock\"};\n      return null;\n    }\n    const card=el.closest(\".hls-card\");\n    if(!card) return null;\n    const loc=card.dataset.loc;\n    if(loc===\"tableau\") return {type:\"tableau\",col:Number(card.dataset.col)};\n    if(loc===\"foundation\") return {type:\"foundation\",index:Number(card.dataset.foundation)};\n    return null;\n  }\n  function canPlaceOnFoundation(card,index){\n    if(!card) return false;\n    const pile=state.foundations[index];\n    if(!pile.length) return card.rank===1;\n    const top=pile[pile.length-1];\n    return ((__hls_safe_and)=>__hls_safe_and?(card.rank===top.rank+1):__hls_safe_and)(top.suit===card.suit);\n  }\n  function canPlaceOnTableau(stack,colIndex){\n    if(!stack || !stack.length) return false;\n    const moving=stack[0];\n    const dest=state.tableau[colIndex];\n    if(!dest.length) return true;\n    const top=dest[dest.length-1];\n    if(!top.faceUp) return false;\n    return ((__hls_safe_and)=>__hls_safe_and?(cardColor(top)!==cardColor(moving)):__hls_safe_and)(top.rank===moving.rank+1);\n  }\n  function sameSourceTarget(sel,target){\n    if(!sel || !target) return false;\n    if(((__hls_safe_and)=>__hls_safe_and?(sel.source.col===target.col):__hls_safe_and)(((__hls_safe_and)=>__hls_safe_and?(target.type===\"tableau\"):__hls_safe_and)(sel.source.type===\"tableau\"))) return true;\n    if(((__hls_safe_and)=>__hls_safe_and?(sel.source.foundation===target.index):__hls_safe_and)(((__hls_safe_and)=>__hls_safe_and?(target.type===\"foundation\"):__hls_safe_and)(sel.source.type===\"foundation\"))) return true;\n    return false;\n  }\n  function canMove(sel,target){\n    if(!sel || !target || !sel.stack.length || state.paused || state.won) return false;\n    if(sameSourceTarget(sel,target)) return false;\n    if(target.type===\"foundation\"){\n      return ((__hls_safe_and)=>__hls_safe_and?(canPlaceOnFoundation(sel.stack[0],target.index)):__hls_safe_and)(sel.stack.length===1);\n    }\n    if(target.type===\"tableau\"){\n      return canPlaceOnTableau(sel.stack,target.col);\n    }\n    return false;\n  }\n  function getValidTargets(sel){\n    const targets=[];\n    for(let i=0;i<4;i++){\n      const target={type:\"foundation\",index:i};\n      if(canMove(sel,target)) targets.push(target);\n    }\n    for(let i=0;i<7;i++){\n      const target={type:\"tableau\",col:i};\n      if(canMove(sel,target)) targets.push(target);\n    }\n    return targets;\n  }\n  function removeFromSource(sel){\n    if(sel.source.type===\"waste\"){\n      state.waste.pop();\n      return;\n    }\n    if(sel.source.type===\"foundation\"){\n      state.foundations[sel.source.foundation].pop();\n      return;\n    }\n    if(sel.source.type===\"tableau\"){\n      state.tableau[sel.source.col].splice(sel.index);\n    }\n  }\n  function placeToTarget(sel,target){\n    const stack=sel.stack.map(function(card){\n      card.faceUp=true;\n      return card;\n    });\n    if(target.type===\"foundation\"){\n      state.foundations[target.index].push(stack[0]);\n      state.foundationBonus+=10;\n      return;\n    }\n    if(target.type===\"tableau\"){\n      state.tableau[target.col].push(...stack);\n    }\n  }\n  function revealAfterMove(sel){\n    if(sel.source.type!==\"tableau\") return false;\n    const col=state.tableau[sel.source.col];\n    if(!col.length) return false;\n    const top=col[col.length-1];\n    if(!top.faceUp){\n      top.faceUp=true;\n      state.flipBonus+=5;\n      return true;\n    }\n    return false;\n  }\n  function tryMove(sel,target,quiet){\n    if(!canMove(sel,target)){\n      if(!quiet){\n        playSound(\"invalid\");\n        setStatus(\"That moon card cannot move there.\",1200);\n      }\n      return false;\n    }\n    pushUndo();\n    removeFromSource(sel);\n    placeToTarget(sel,target);\n    const flipped=revealAfterMove(sel);\n    state.moves++;\n    state.selected=null;\n    state.hintMark=null;\n    interaction=null;\n    clearGhost();\n    if(target.type===\"foundation\") playSound(\"foundation\");\n    else playSound(\"move\");\n    if(flipped) setTimeout(function(){playSound(\"flip\")},90);\n    setStatus(target.type===\"foundation\" ? cardName(sel.stack[0])+\" reached a foundation.\" : cardName(sel.stack[0])+\" found a new place.\",1200);\n    saveGame();\n    render();\n    checkWin();\n    return true;\n  }\n  function drawStock(){\n    if(!state.started || state.paused || state.won) return;\n    if(state.stock.length){\n      pushUndo();\n      const count=Math.min(MODE[state.mode].draw,state.stock.length);\n      for(let i=0;i<count;i++){\n        const card=state.stock.pop();\n        card.faceUp=true;\n        state.waste.push(card);\n      }\n      state.moves++;\n      state.selected=null;\n      state.hintMark=null;\n      playSound(\"draw\");\n      setStatus(count===1 ? \"One moon card turned from the stock.\" : \"Three moon cards turned from the stock.\",900);\n      saveGame();\n      render();\n      return;\n    }\n    if(!state.waste.length){\n      playSound(\"invalid\");\n      setStatus(\"No stock cards remain.\",1000);\n      return;\n    }\n    const limit=MODE[state.mode].recycleLimit;\n    if(state.recycleUsed>=limit){\n      playSound(\"invalid\");\n      setStatus(\"No more stock recycles in Classic mode.\",1400);\n      return;\n    }\n    pushUndo();\n    state.recycleUsed++;\n    if(state.mode===\"Classic\") state.recyclePenalty+=50;\n    state.stock=state.waste.reverse().map(function(card){\n      card.faceUp=false;\n      return card;\n    });\n    state.waste=[];\n    state.moves++;\n    state.selected=null;\n    state.hintMark=null;\n    playSound(\"draw\");\n    setStatus(state.mode===\"Classic\" ? \"Waste recycled. Classic mooncraft penalty applied.\" : \"Waste returned gently under the moonlight.\",1300);\n    saveGame();\n    render();\n  }\n  function gamePoint(clientX,clientY){\n    const rect=fit.getBoundingClientRect();\n    const scale=rect.width\/BASE_W;\n    return {x:(clientX-rect.left)\/scale,y:(clientY-rect.top)\/scale};\n  }\n  function pointInRect(p,r){return ((__hls_safe_and)=>__hls_safe_and?(p.y<=r.y+r.h):__hls_safe_and)(((__hls_safe_and)=>__hls_safe_and?(p.y>=r.y):__hls_safe_and)(((__hls_safe_and)=>__hls_safe_and?(p.x<=r.x+r.w):__hls_safe_and)(p.x>=r.x)))}\n  function targetFromPoint(clientX,clientY){\n    const p=gamePoint(clientX,clientY);\n    for(let i=0;i<POS.foundations.length;i++){\n      if(pointInRect(p,POS.foundations[i])) return {type:\"foundation\",index:i};\n    }\n    for(let i=0;i<POS.tableau.length;i++){\n      const r=POS.tableau[i];\n      const hit={x:r.x-24,y:r.y-34,w:r.w+48,h:326};\n      if(pointInRect(p,hit)) return {type:\"tableau\",col:i};\n    }\n    if(pointInRect(p,POS.stock)) return {type:\"stock\"};\n    return null;\n  }\n  function buildGhost(sel,point){\n    ghostEl.innerHTML=\"\";\n    const fan=Math.min(16,getFanGap());\n    sel.stack.forEach(function(card,i){\n      const el=createCardEl(card,0,i*fan,{type:\"ghost\"},220+i);\n      el.style.left=\"0px\";\n      el.style.top=(i*fan)+\"px\";\n      el.style.pointerEvents=\"none\";\n      ghostEl.appendChild(el);\n    });\n    moveGhost(point);\n  }\n  function moveGhost(point){\n    if(!interaction) return;\n    const fan=Math.min(16,getFanGap());\n    const totalHeight=CARD_H+Math.max(0,interaction.selection.stack.length-1)*fan;\n    const x=point.x-CARD_W\/2;\n    const y=point.y-Math.min(40,totalHeight\/3);\n    ghostEl.style.transform=\"translate(\"+x+\"px, \"+y+\"px)\";\n  }\n  function clearSelection(){\n    state.selected=null;\n    state.hintMark=null;\n    interaction=null;\n    clearGhost();\n    render();\n  }\n  function autoMoveToFoundation(sel){\n    if(!sel || sel.stack.length!==1) return false;\n    for(let i=0;i<4;i++){\n      const target={type:\"foundation\",index:i};\n      if(canMove(sel,target)) return tryMove(sel,target);\n    }\n    playSound(\"invalid\");\n    setStatus(\"That moon card is not ready for a foundation yet.\",1200);\n    return false;\n  }\n  function handleTapSelection(sel,cardId){\n    const now=Date.now();\n    const isDouble=((__hls_safe_and)=>__hls_safe_and?(now-lastTap.time<340):__hls_safe_and)(((__hls_safe_and)=>__hls_safe_and?(lastTap.id===cardId):__hls_safe_and)(sel.stack.length===1));\n    if(isDouble){\n      lastTap={id:\"\",time:0};\n      state.selected=null;\n      autoMoveToFoundation(sel);\n      return;\n    }\n    lastTap={id:cardId,time:now};\n    state.selected=sel;\n    state.hintMark=null;\n    playSound(\"move\");\n    setStatus(\"Tap a valid place, or drag the selected moon card.\",1200);\n    render();\n  }\n  function onPointerDown(e){\n    if(e.target.closest(\"button\")) return;\n    if(!state.started || state.paused || state.won) return;\n    e.preventDefault();\n    const targetAtStart=targetFromElement(e.target);\n    if(((__hls_safe_and)=>__hls_safe_and?(targetAtStart.type===\"stock\"):__hls_safe_and)(targetAtStart)){\n      drawStock();\n      return;\n    }\n    if(((__hls_safe_and)=>__hls_safe_and?(e.pointerId!==undefined):__hls_safe_and)(cardsEl.setPointerCapture)){\n      try{cardsEl.setPointerCapture(e.pointerId)}catch(err){}\n    }\n    const cardEl=e.target.closest(\".hls-card\");\n    if(!cardEl || !cardsEl.contains(cardEl)){\n      const pointTarget=targetFromPoint(e.clientX,e.clientY);\n      if(((__hls_safe_and)=>__hls_safe_and?(pointTarget.type===\"stock\"):__hls_safe_and)(pointTarget)){\n        drawStock();\n        return;\n      }\n      if(state.selected){\n        if(((__hls_safe_and)=>__hls_safe_and?(tryMove(state.selected,pointTarget)):__hls_safe_and)(pointTarget)) return;\n        clearSelection();\n      }\n      return;\n    }\n    if(cardEl.dataset.loc===\"stock\"){\n      drawStock();\n      return;\n    }\n    if(state.selected){\n      const target=targetFromElement(cardEl);\n      if(((__hls_safe_and)=>__hls_safe_and?(tryMove(state.selected,target,true)):__hls_safe_and)(target)) return;\n    }\n    const sel=sourceFromElement(cardEl);\n    if(!sel) return;\n    interaction={\n      selection:sel,\n      startX:e.clientX,\n      startY:e.clientY,\n      cardId:sel.stack[sel.stack.length-1].id,\n      drag:false\n    };\n    window.addEventListener(\"pointermove\",onPointerMove,{passive:false});\n    window.addEventListener(\"pointerup\",onPointerUp,{passive:false,once:true});\n    window.addEventListener(\"pointercancel\",onPointerCancel,{passive:false,once:true});\n  }\n  function onPointerMove(e){\n    if(!interaction || state.paused) return;\n    e.preventDefault();\n    const dx=e.clientX-interaction.startX;\n    const dy=e.clientY-interaction.startY;\n    const dist=Math.sqrt(dx*dx+dy*dy);\n    if(((__hls_safe_and)=>__hls_safe_and?(dist>7):__hls_safe_and)(!interaction.drag)){\n      interaction.drag=true;\n      state.selected=interaction.selection;\n      state.hintMark=null;\n      buildGhost(interaction.selection,gamePoint(e.clientX,e.clientY));\n      render();\n    }\n    if(interaction.drag) moveGhost(gamePoint(e.clientX,e.clientY));\n  }\n  function onPointerUp(e){\n    if(!interaction) return;\n    e.preventDefault();\n    window.removeEventListener(\"pointermove\",onPointerMove);\n    window.removeEventListener(\"pointercancel\",onPointerCancel);\n    const wasDrag=interaction.drag;\n    const sel=interaction.selection;\n    const cardId=interaction.cardId;\n    if(wasDrag){\n      const target=targetFromPoint(e.clientX,e.clientY);\n      clearGhost();\n      if(((__hls_safe_and)=>__hls_safe_and?(tryMove(sel,target)):__hls_safe_and)(target)){\n        interaction=null;\n        return;\n      }\n      playSound(\"invalid\");\n      setStatus(\"The card slides back to the moonlit workbench.\",900);\n      state.selected=null;\n      interaction=null;\n      render();\n    }else{\n      interaction=null;\n      handleTapSelection(sel,cardId);\n    }\n  }\n  function onPointerCancel(){\n    if(!interaction) return;\n    window.removeEventListener(\"pointermove\",onPointerMove);\n    clearGhost();\n    interaction=null;\n    state.selected=null;\n    render();\n  }\n  function findHint(){\n    const hints=[];\n    function add(sel,target,score,msg){\n      if(canMove(sel,target)) hints.push({sel:sel,target:target,score:score,msg:msg});\n    }\n    const wasteTop=state.waste[state.waste.length-1];\n    if(wasteTop){\n      const sel={source:{type:\"waste\"},stack:[wasteTop],index:state.waste.length-1};\n      for(let i=0;i<4;i++) add(sel,{type:\"foundation\",index:i},130,\"Send \"+cardName(wasteTop)+\" to a foundation.\");\n    }\n    state.tableau.forEach(function(col,c){\n      if(!col.length) return;\n      for(let i=0;i<col.length;i++){\n        const card=col[i];\n        if(!card.faceUp) continue;\n        const stack=col.slice(i);\n        if(!isValidTableauStack(stack)) continue;\n        const sel={source:{type:\"tableau\",col:c},stack:stack,index:i};\n        if(stack.length===1){\n          for(let f=0;f<4;f++) add(sel,{type:\"foundation\",index:f},150,\"Send \"+cardName(card)+\" to a foundation.\");\n        }\n        for(let t=0;t<7;t++){\n          if(t===c) continue;\n          const opensHidden=((__hls_safe_and)=>__hls_safe_and?(!col[i-1].faceUp):__hls_safe_and)(i>0);\n          const score=(opensHidden?120:0)+(stack.length>1?18:0)+48;\n          add(sel,{type:\"tableau\",col:t},score,opensHidden ? \"Move this stack to uncover a hidden moon card.\" : \"Move this stack to tidy the moon workbench.\");\n        }\n      }\n    });\n    if(wasteTop){\n      const sel={source:{type:\"waste\"},stack:[wasteTop],index:state.waste.length-1};\n      for(let t=0;t<7;t++) add(sel,{type:\"tableau\",col:t},62,\"Move \"+cardName(wasteTop)+\" to the tableau.\");\n    }\n    for(let f=0;f<4;f++){\n      const pile=state.foundations[f];\n      if(!pile.length) continue;\n      const card=pile[pile.length-1];\n      const sel={source:{type:\"foundation\",foundation:f},stack:[card],index:pile.length-1};\n      for(let t=0;t<7;t++) add(sel,{type:\"tableau\",col:t},25,\"A foundation card can return to the tableau if the moon path needs it.\");\n    }\n    if(!hints.length){\n      if(state.stock.length) return {action:\"draw\",msg:\"Draw from the moon stock.\"};\n      if(((__hls_safe_and)=>__hls_safe_and?(state.recycleUsed<MODE[state.mode].recycleLimit):__hls_safe_and)(state.waste.length)) return {action:\"recycle\",msg:\"Recycle the moon waste pile.\"};\n      return null;\n    }\n    hints.sort(function(a,b){return b.score-a.score});\n    return hints[0];\n  }\n  function useHint(){\n    if(!state.started || state.paused || state.won) return;\n    state.hintCount++;\n    const hint=findHint();\n    if(!hint){\n      playSound(\"invalid\");\n      setStatus(\"No helpful moon path is visible right now.\",1300);\n      updateStats();\n      saveGame();\n      return;\n    }\n    if(hint.action===\"draw\" || hint.action===\"recycle\"){\n      state.hintMark={sourceIds:[],target:null};\n      playSound(\"hint\");\n      setStatus(hint.msg,1500);\n      saveGame();\n      render();\n      return;\n    }\n    state.selected=null;\n    state.hintMark={\n      sourceIds:hint.sel.stack.map(function(c){return c.id}),\n      target:hint.target\n    };\n    playSound(\"hint\");\n    setStatus(hint.msg,1700);\n    saveGame();\n    render();\n    if(hintTimer) clearTimeout(hintTimer);\n    hintTimer=setTimeout(function(){\n      state.hintMark=null;\n      render();\n    },2000);\n  }\n  function undo(){\n    if(!state.undoStack.length || state.paused || state.won) return;\n    const snap=state.undoStack.pop();\n    restoreSnapshot(snap,true);\n    state.started=true;\n    state.paused=false;\n    state.won=false;\n    root.classList.add(\"hls-game-active\");\n    root.classList.remove(\"hls-paused\");\n    playSound(\"undo\");\n    setStatus(\"One step returned to the workbench.\",1000);\n    saveGame();\n    render();\n  }\n  function checkWin(){\n    if(foundationTotal()!==52) return;\n\n    const finishElapsed=nowElapsed();\n\n    state.won=true;\n    state.paused=false;\n    state.finalElapsed=finishElapsed;\n    state.selected=null;\n    state.hintMark=null;\n    interaction=null;\n    clearGhost();\n\n    const score=calcScore();\n    let best=loadBest();\n    let note=\"A soft moonlit finish.\";\n\n    if(score>best.bestScore){\n      best.bestScore=score;\n      note=\"New mooncraft best score.\";\n    }\n    if(best.bestTime==null || state.finalElapsed<best.bestTime){\n      best.bestTime=state.finalElapsed;\n    }\n    if(best.bestMoves==null || state.moves<best.bestMoves){\n      best.bestMoves=state.moves;\n      note=note===\"A soft moonlit finish.\" ? \"New best moves.\" : note+\" New best moves.\";\n    }\n\n    saveBest(best);\n    clearSave();\n\n    winScoreEl.textContent=String(score);\n    winMovesEl.textContent=String(state.moves);\n    winBestEl.textContent=String(best.bestScore||0);\n    winBestMovesEl.textContent=best.bestMoves==null ? \"--\" : String(best.bestMoves);\n    winNoteEl.textContent=note;\n\n    pauseOverlay.classList.remove(\"active\");\n    winOverlay.classList.add(\"active\");\n    root.classList.remove(\"hls-paused\");\n    setStatus(\"Every moon card has reached its foundation.\");\n    playSound(\"win\");\n    startFireworks();\n    render();\n  }\n  function togglePause(){\n    if(!state.started || state.won) return;\n    if(!state.paused){\n      state.paused=true;\n      state.pausedAt=Date.now();\n      state.selected=null;\n      state.hintMark=null;\n      interaction=null;\n      clearGhost();\n      pauseOverlay.classList.add(\"active\");\n      root.classList.add(\"hls-paused\");\n      setStatus(\"The moonlit workbench is paused.\");\n      playSound(\"pause\");\n      saveGame();\n    }else{\n      const duration=Date.now()-state.pausedAt;\n      state.startTime+=duration;\n      state.paused=false;\n      state.pausedAt=0;\n      pauseOverlay.classList.remove(\"active\");\n      root.classList.remove(\"hls-paused\");\n      setStatus(\"The moon cards are moving again.\",900);\n      playSound(\"resume\");\n    }\n    render();\n  }\n  function saveAndReturnStart(){\n    if(!state.started) return;\n    saveGame();\n    state.paused=true;\n    state.pausedAt=Date.now();\n    startOverlay.classList.add(\"active\");\n    pauseOverlay.classList.remove(\"active\");\n    root.classList.add(\"hls-paused\");\n    updateContinueButton();\n    playSound(\"save\");\n    setStatus(\"Game saved. Continue will be available from the moonlit start panel.\",1500);\n    render();\n  }\n  function setMode(mode){\n    state.mode=mode;\n    updateModeButtons();\n    setStatus(mode===\"Classic\" ? \"Classic selected: draw three, limited recycle.\" : \"Relaxed selected: draw one, unlimited recycle.\",1000);\n    playSound(\"move\");\n  }\n  function updateModeButtons(){\n    root.querySelectorAll(\".hls-mode-btn\").forEach(function(btn){\n      const active=btn.dataset.mode===state.mode;\n      btn.classList.toggle(\"active\",active);\n      btn.setAttribute(\"aria-pressed\",active?\"true\":\"false\");\n    });\n  }\n  let fallbackFullscreen=false;\n  function setFallbackFullscreen(active){\n    fallbackFullscreen=active;\n    root.classList.toggle(\"hls-fallback-fullscreen\",active);\n    document.documentElement.classList.toggle(\"hls-page-lock\",active);\n    document.body.classList.toggle(\"hls-page-lock\",active);\n    resizeGame();\n  }\n  async function toggleFullscreen(){\n    if(fallbackFullscreen){\n      setFallbackFullscreen(false);\n      return;\n    }\n    if(document.fullscreenElement===root){\n      try{\n        if(((__hls_safe_and)=>__hls_safe_and?(screen.orientation.unlock):__hls_safe_and)(screen.orientation)){\n          try{screen.orientation.unlock()}catch(err){}\n        }\n        await document.exitFullscreen();\n      }catch(err){setStatus(\"Could not exit fullscreen. Use Esc.\",1500)}\n    }else{\n      try{\n        if(!root.requestFullscreen) throw new Error(\"Unsupported fullscreen\");\n        await root.requestFullscreen();\n        if(((__hls_safe_and)=>__hls_safe_and?(screen.orientation.lock):__hls_safe_and)(screen.orientation)){\n          try{await screen.orientation.lock(\"landscape\")}catch(err){}\n        }\n      }catch(err){\n        setFallbackFullscreen(true);\n      }\n    }\n    resizeGame();\n  }\n  function resizeGame(){\n    const w=root.clientWidth;\n    const h=root.clientHeight;\n    const scale=Math.min(w\/BASE_W,h\/BASE_H);\n    const left=(w-BASE_W*scale)\/2;\n    const top=(h-BASE_H*scale)\/2;\n    fit.style.left=left+\"px\";\n    fit.style.top=top+\"px\";\n    fit.style.transform=\"scale(\"+scale+\")\";\n    const isFs=document.fullscreenElement===root || fallbackFullscreen;\n    root.classList.toggle(\"hls-is-fullscreen\",isFs);\n    root.classList.toggle(\"hls-portrait-fullscreen\",((__hls_safe_and)=>__hls_safe_and?(window.innerHeight>window.innerWidth):__hls_safe_and)(isFs));\n  }\n  function updateMuteButton(){\n    muteBtn.setAttribute(\"aria-label\",state.muted?\"Muted\":\"Sound\");\n    root.classList.toggle(\"hls-muted\",state.muted);\n  }\n  function bindEvents(){\n    cardsEl.addEventListener(\"pointerdown\",onPointerDown,{passive:false});\n    cardsEl.addEventListener(\"touchstart\",function(e){e.preventDefault()},{passive:false});\n    slotsEl.addEventListener(\"pointerdown\",function(e){\n      if(!state.started || state.paused || state.won) return;\n      const target=targetFromElement(e.target);\n      if(((__hls_safe_and)=>__hls_safe_and?(target.type===\"stock\"):__hls_safe_and)(target)){\n        e.preventDefault();\n        drawStock();\n        return;\n      }\n      if(((__hls_safe_and)=>__hls_safe_and?(target.type===\"foundation\" || target.type===\"tableau\"):__hls_safe_and)(((__hls_safe_and)=>__hls_safe_and?(target):__hls_safe_and)(state.selected))){\n        e.preventDefault();\n        tryMove(state.selected,target);\n      }\n    },{passive:false});\n    zonesEl.addEventListener(\"pointerdown\",function(e){\n      if(!state.started || state.paused || state.won || !state.selected) return;\n      const target=targetFromElement(e.target);\n      if(((__hls_safe_and)=>__hls_safe_and?(target.type===\"tableau\"):__hls_safe_and)(target)){\n        e.preventDefault();\n        tryMove(state.selected,target);\n      }\n    },{passive:false});\n    root.querySelectorAll(\".hls-mode-btn\").forEach(function(btn){\n      btn.addEventListener(\"click\",function(){setMode(btn.dataset.mode)});\n    });\n    startBtn.addEventListener(\"click\",function(){startNewGame(state.mode)});\n    continueBtn.addEventListener(\"click\",continueGame);\n    resumeBtn.addEventListener(\"click\",togglePause);\n    saveBtn.addEventListener(\"click\",saveAndReturnStart);\n    pauseNewBtn.addEventListener(\"click\",function(){startNewGame(state.mode)});\n    playAgainBtn.addEventListener(\"click\",function(){startNewGame(state.mode)});\n    newGameBtn.addEventListener(\"click\",function(){startNewGame(state.mode)});\n    restartBtn.addEventListener(\"click\",restartGame);\n    undoBtn.addEventListener(\"click\",undo);\n    hintBtn.addEventListener(\"click\",useHint);\n    pauseBtn.addEventListener(\"click\",togglePause);\n    fullscreenBtn.addEventListener(\"click\",toggleFullscreen);\n    root.querySelector(\"#hlsExitPortraitFullscreen\").addEventListener(\"click\",toggleFullscreen);\n    document.addEventListener(\"keydown\",function(event){\n      if(fallbackFullscreen){ if(event.key===\"Escape\") setFallbackFullscreen(false); }\n    });\n    muteBtn.addEventListener(\"click\",function(){\n      state.muted=!state.muted;\n      safeSet(MUTE_KEY,state.muted?\"1\":\"0\");\n      updateMuteButton();\n      if(!state.muted) playSound(\"move\");\n    });\n    document.addEventListener(\"fullscreenchange\",function(){\n      if(((__hls_safe_and)=>__hls_safe_and?(fallbackFullscreen):__hls_safe_and)(document.fullscreenElement===root)) setFallbackFullscreen(false);\n      resizeGame();\n      resizeFireworksCanvas();\n    });\n    window.addEventListener(\"resize\",function(){\n      resizeGame();\n      resizeFireworksCanvas();\n    });\n    window.addEventListener(\"orientationchange\",function(){\n      setTimeout(function(){\n        resizeGame();\n        resizeFireworksCanvas();\n      },220);\n    });\n    window.addEventListener(\"beforeunload\",function(){\n      if(((__hls_safe_and)=>__hls_safe_and?(!state.won):__hls_safe_and)(state.started)) saveGame();\n    });\n    document.addEventListener(\"visibilitychange\",function(){\n      if(((__hls_safe_and)=>__hls_safe_and?(!state.won):__hls_safe_and)(((__hls_safe_and)=>__hls_safe_and?(state.started):__hls_safe_and)(document.hidden))){\n        if(!state.paused) togglePause();\n        else saveGame();\n      }\n    });\n    setInterval(updateStats,500);\n  }\n  function initEmpty(){\n    stopFireworks();\n    state.stock=[];\n    state.waste=[];\n    state.foundations=[[],[],[],[]];\n    state.tableau=Array.from({length:7},function(){return []});\n    render();\n  }\n\n  createDropZones();\n  bindEvents();\n  updateMuteButton();\n  updateModeButtons();\n  updateContinueButton();\n  initEmpty();\n  resizeGame();\n  resizeFireworksCanvas();\n  updateStats();\n  }\n  if(document.readyState===\"loading\"){\n    document.addEventListener(\"DOMContentLoaded\",initializeHls,{once:true});\n  }else{\n    initializeHls();\n  }\n})();\n<\/script>\n\n\n\n<h2 class=\"wp-block-heading\">Relaxed or Classic Mode<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Moon Rabbit Workshop Solitaire<\/strong> includes two play styles. Relaxed mode lets you draw one card at a time with unlimited recycling, perfect for slower and more peaceful play. Classic mode draws three cards and gives a more traditional challenge for players who want a sharper solitaire experience.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Whether you want a quiet break or a more focused card puzzle, the game gives you room to play at your own rhythm.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Why You Will Love This Game<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">If you enjoy solitaire games with charming visuals, smooth controls, and a cozy fantasy theme, <strong>Moon Rabbit Workshop Solitaire<\/strong> offers a sweet little escape. It supports desktop and mobile play, includes fullscreen mode, save and continue, sound control, hint, undo, and a celebratory fireworks effect when you win.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Step into the moon rabbits&#8217; workshop, follow the soft lunar glow, and arrange every card until the whole night table feels complete.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Moon Rabbit Workshop Solitaire is a cozy card game set inside a quiet moonlit workshop above the clouds, where little moon rabbits arrange magical cards under creamy lunar light. Instead of a plain card table, every move feels like working beside a tiny night-sky craft desk filled with rice cakes, wooden mallets, soft clouds, and &hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11],"tags":[],"class_list":["post-106","post","type-post","status-publish","format-standard","hentry","category-card"],"_links":{"self":[{"href":"https:\/\/play.produsenpagarbrc.com\/index.php?rest_route=\/wp\/v2\/posts\/106","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/play.produsenpagarbrc.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/play.produsenpagarbrc.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/play.produsenpagarbrc.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/play.produsenpagarbrc.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=106"}],"version-history":[{"count":0,"href":"https:\/\/play.produsenpagarbrc.com\/index.php?rest_route=\/wp\/v2\/posts\/106\/revisions"}],"wp:attachment":[{"href":"https:\/\/play.produsenpagarbrc.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=106"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/play.produsenpagarbrc.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=106"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/play.produsenpagarbrc.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=106"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}