{"id":36,"date":"2026-10-26T23:26:05","date_gmt":"2026-10-26T23:26:05","guid":{"rendered":"https:\/\/apk.produsenpagarbrc.com\/?p=36"},"modified":"2026-10-26T23:26:05","modified_gmt":"2026-10-26T23:26:05","slug":"honeythread-conduits","status":"publish","type":"post","link":"https:\/\/play.produsenpagarbrc.com\/?p=36","title":{"rendered":"Honeythread Conduits"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><strong>Honeythread Conduits<\/strong> is a thoughtful rotation puzzle set inside the glowing maintenance halls of the Honey Library. Players must turn parchment conduit tiles until streams of warm Honeylight can travel from every Archive Lamp to all waiting Reading Beacons. What begins as a small network of simple corners and straight passages gradually grows into a complex system of locked seals, permanent junctions, multiple sources, and carefully intertwined routes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The game contains fifty handcrafted procedural challenges that become larger and more demanding as the journey continues. Every tile rotation changes the direction of the Honeylight, so each move must be considered carefully. A route that appears correct in one corner may accidentally disconnect another section of the archive. Completing a level requires every Reading Beacon to receive light at the same time.<\/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\/Honeythread-Conduits-1024x768.png\" alt=\"\" class=\"wp-image-37\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">The Story of the Honeythread Network<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Beneath the public reading rooms of the Honey Library lies an ancient system known as the Honeythread Network. It was built long before the current librarians arrived, when books were still copied by hand and every reading desk depended on small amber lamps.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The network carries Honeylight, a gentle golden energy produced by the library\u2019s central Archive Lamps. This energy flows through brass channels hidden inside the floors, walls, catalogue tables, and bookcases. It warms the reading rooms, protects fragile manuscripts, reveals invisible ink, and keeps forgotten stories from fading.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For generations, the Honeythread Network worked quietly. Its pathways carried light from one wing of the library to another without interruption. Every Reading Beacon glowed beside a shelf, guiding visitors toward maps, poems, field journals, recipes, and old letters.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Then a tremor passed through the lower archive. Several conduit plates rotated inside their frames, redirecting the Honeylight into empty corridors. Some Reading Beacons went dark. Whole shelves disappeared into shadow, and the words inside certain books began losing their golden ink.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The librarians discovered that the network could not repair itself. Each conduit had to be rotated by hand until its channels aligned with the surrounding tiles. The player becomes the new Honeythread Keeper, responsible for restoring every route before the archive\u2019s oldest memories vanish completely.<\/p>\n\n\n\n<div id=\"honeythread-conduits\" aria-label=\"Honeythread Conduits, a Honey Library conduit rotation puzzle\">\n  <div class=\"htc-script-warning\" role=\"status\">Game belum aktif. Bila pesan ini tetap terlihat setelah halaman dimuat, periksa apakah WordPress menjalankan JavaScript dari blok Custom HTML.<\/div>\n<\/div>\n\n<style>\nhtml.htc-page-lock,\nbody.htc-page-lock {\n  overflow: hidden !important;\n  overscroll-behavior: none;\n}\n\n#honeythread-conduits,\n#honeythread-conduits * {\n  box-sizing: border-box;\n}\n\n#honeythread-conduits {\n  --htc-cocoa-950: #24130d;\n  --htc-cocoa-900: #3f2418;\n  --htc-walnut-800: #5a321f;\n  --htc-walnut-700: #74452b;\n  --htc-amber-600: #b87333;\n  --htc-honey-500: #f4c542;\n  --htc-soft-gold: #e9c875;\n  --htc-cream: #fff1c9;\n  --htc-paper: #fff8df;\n  --htc-ivory: #fffdf2;\n  --htc-olive: #68784f;\n  --htc-olive-dark: #485537;\n  --htc-copper: #a45f43;\n  --htc-rose: #b8735a;\n  --htc-ink: #2e1a12;\n  --htc-border: rgba(244, 197, 66, .42);\n  --htc-shadow: rgba(40, 21, 12, .30);\n\n  position: relative;\n  width: min(100%, 1280px);\n  aspect-ratio: 16 \/ 9;\n  margin: 18px auto;\n  overflow: hidden;\n  isolation: isolate;\n  border: 1px solid var(--htc-border);\n  border-radius: 20px;\n  color: var(--htc-ink);\n  color-scheme: light;\n  background:\n    radial-gradient(circle at 80% 10%, rgba(255, 241, 201, .14), transparent 25%),\n    linear-gradient(155deg, #24130d, #4b2a1b 58%, #7a4b2e);\n  box-shadow:\n    0 24px 62px rgba(46, 24, 14, .25),\n    inset 0 1px 0 rgba(255, 255, 255, .38);\n  font-family: system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Arial, sans-serif;\n  line-height: 1.25;\n  user-select: none;\n  -webkit-user-select: none;\n  -webkit-tap-highlight-color: transparent;\n  touch-action: manipulation;\n}\n\n#honeythread-conduits button {\n  margin: 0;\n  appearance: none;\n  -webkit-appearance: none;\n  border: 0;\n  font: inherit;\n}\n\n#honeythread-conduits:fullscreen,\n#honeythread-conduits:-webkit-full-screen,\n#honeythread-conduits.htc-fullscreen {\n  position: fixed;\n  inset: 0;\n  z-index: 2147483647;\n  width: 100vw;\n  width: 100dvw;\n  max-width: none;\n  height: 100vh;\n  height: 100dvh;\n  margin: 0;\n  overflow: hidden;\n  border: 0;\n  border-radius: 0;\n  aspect-ratio: auto;\n  background:\n    radial-gradient(circle at 50% 10%, rgba(244, 197, 66, .13), transparent 28%),\n    linear-gradient(155deg, #1e100b, #3f2418 56%, #25130d);\n}\n\n#honeythread-conduits::backdrop {\n  background: #1e100b;\n}\n\n#honeythread-conduits .htc-stage {\n  position: absolute;\n  left: 50%;\n  top: 50%;\n  width: 1280px;\n  height: 720px;\n  overflow: hidden;\n  isolation: isolate;\n  transform: translate3d(-50%, -50%, 0) scale(1);\n  transform-origin: center;\n  will-change: transform;\n  background:\n    radial-gradient(circle at 50% 7%, rgba(255, 241, 201, .18), transparent 31%),\n    linear-gradient(180deg, #4b2b1d 0%, #6f4329 58%, #402217 100%);\n}\n\n#honeythread-conduits .htc-stage::after {\n  content: \"\";\n  position: absolute;\n  inset: 0;\n  z-index: 44;\n  pointer-events: none;\n  background:\n    radial-gradient(ellipse at 50% 48%, transparent 60%, rgba(29, 14, 8, .27) 100%);\n}\n\n#honeythread-conduits .htc-scene {\n  position: absolute;\n  inset: 0;\n  z-index: 1;\n  overflow: hidden;\n  pointer-events: none;\n}\n\n\/* Honey Library environment *\/\n#honeythread-conduits .htc-library-room {\n  position: absolute;\n  inset: 0 0 104px;\n  overflow: hidden;\n  background:\n    radial-gradient(circle at 50% 19%, rgba(255, 248, 223, .95) 0 76px, rgba(244, 197, 66, .30) 77px 112px, transparent 113px),\n    radial-gradient(ellipse at 18% 84%, rgba(244, 197, 66, .18) 0 132px, transparent 134px),\n    radial-gradient(ellipse at 82% 80%, rgba(104, 120, 79, .20) 0 148px, transparent 150px),\n    linear-gradient(180deg, #2b1710 0%, #57321f 53%, #8a5834 100%);\n}\n\n#honeythread-conduits .htc-library-room::before {\n  content: \"\";\n  position: absolute;\n  inset: 0;\n  opacity: .74;\n  background:\n    radial-gradient(circle at 7% 18%, #fff1c9 0 2px, transparent 3px),\n    radial-gradient(circle at 16% 38%, rgba(255,241,201,.72) 0 1.5px, transparent 2.5px),\n    radial-gradient(circle at 27% 12%, #e9c875 0 2px, transparent 3px),\n    radial-gradient(circle at 35% 43%, rgba(255,248,223,.72) 0 1.5px, transparent 2.5px),\n    radial-gradient(circle at 65% 14%, #fff1c9 0 2px, transparent 3px),\n    radial-gradient(circle at 74% 35%, rgba(233,200,117,.82) 0 1.5px, transparent 2.5px),\n    radial-gradient(circle at 89% 20%, #fff8df 0 2px, transparent 3px),\n    radial-gradient(circle at 94% 48%, rgba(255,241,201,.72) 0 1.5px, transparent 2.5px);\n  animation: htc-dust-rise 3.2s ease-in-out infinite alternate;\n}\n\n#honeythread-conduits .htc-library-room::after {\n  content: \"\";\n  position: absolute;\n  left: 306px;\n  right: 306px;\n  bottom: 42px;\n  height: 158px;\n  border: 8px solid #4b2a1b;\n  border-bottom: 0;\n  border-radius: 88px 88px 0 0;\n  background:\n    linear-gradient(90deg, transparent 48.7%, rgba(74,43,27,.88) 48.9% 51.1%, transparent 51.3%),\n    linear-gradient(0deg, transparent 48.7%, rgba(74,43,27,.88) 48.9% 51.1%, transparent 51.3%),\n    radial-gradient(circle at 50% 50%, rgba(255,248,223,.96) 0 7px, transparent 8px),\n    radial-gradient(circle at 50% 34%, rgba(244,197,66,.42), transparent 34%),\n    linear-gradient(180deg, rgba(255,255,255,.08), rgba(35,17,10,.34));\n  box-shadow:\n    inset 0 0 0 3px rgba(255,241,201,.13),\n    0 18px 30px rgba(29,14,8,.30);\n}\n\n#honeythread-conduits .htc-book-garland {\n  position: absolute;\n  left: 68px;\n  right: 68px;\n  top: 16px;\n  height: 106px;\n  border-top: 3px solid rgba(63, 36, 24, .86);\n  border-radius: 50%;\n}\n\n#honeythread-conduits .htc-book-garland::before,\n#honeythread-conduits .htc-book-garland::after {\n  content: \"\";\n  position: absolute;\n  top: 25px;\n  width: 62px;\n  height: 72px;\n  border: 4px solid #3f2418;\n  border-radius: 12px 12px 20px 20px;\n  background:\n    linear-gradient(90deg, rgba(255,255,255,.18), transparent 30%),\n    repeating-linear-gradient(0deg, transparent 0 13px, rgba(244,197,66,.20) 13px 15px),\n    linear-gradient(180deg, #7d4a2b, #4d2a1b);\n  box-shadow:\n    0 0 22px rgba(244,197,66,.28),\n    inset 0 0 0 3px rgba(255,241,201,.10);\n}\n\n#honeythread-conduits .htc-book-garland::before {\n  left: 122px;\n  transform: rotate(-5deg);\n}\n\n#honeythread-conduits .htc-book-garland::after {\n  right: 122px;\n  transform: rotate(5deg);\n}\n\n#honeythread-conduits .htc-library-window {\n  position: absolute;\n  top: 132px;\n  width: 232px;\n  height: 302px;\n  overflow: hidden;\n  border: 8px solid #3f2418;\n  border-radius: 116px 116px 34px 34px;\n  background:\n    radial-gradient(circle at 70% 22%, #fff8df 0 31px, rgba(244,197,66,.35) 32px 48px, transparent 49px),\n    radial-gradient(ellipse at 20% 100%, #6f7f4f 0 48%, transparent 49%),\n    radial-gradient(ellipse at 74% 100%, #4f5d3b 0 60%, transparent 61%),\n    linear-gradient(180deg, #46301f, #8a5a36 60%, #d59d55);\n  box-shadow:\n    0 14px 28px rgba(29,14,8,.30),\n    inset 0 0 0 3px rgba(255,241,201,.14);\n}\n\n#honeythread-conduits .htc-library-window::after {\n  content: \"\";\n  position: absolute;\n  inset: 0;\n  background:\n    linear-gradient(90deg, transparent 48%, rgba(63,36,24,.82) 48% 52%, transparent 52%),\n    linear-gradient(0deg, transparent 49%, rgba(63,36,24,.82) 49% 53%, transparent 53%);\n}\n\n#honeythread-conduits .htc-library-window-left {\n  left: -58px;\n  transform: rotate(-1deg);\n}\n\n#honeythread-conduits .htc-library-window-right {\n  right: -58px;\n  transform: rotate(1deg);\n}\n\n#honeythread-conduits .htc-library-window span {\n  position: absolute;\n  left: 65px;\n  top: 48px;\n  z-index: 2;\n  width: 98px;\n  height: 126px;\n  border: 5px solid rgba(255,241,201,.70);\n  border-radius: 18px;\n  background:\n    radial-gradient(circle at 37% 27%, rgba(255,255,255,.90) 0 7px, transparent 8px),\n    linear-gradient(180deg, rgba(255,255,255,.20) 0 24%, transparent 25%),\n    repeating-linear-gradient(0deg, transparent 0 17px, rgba(244,197,66,.24) 17px 19px),\n    linear-gradient(180deg, #7f4a2c, #4b2a1b);\n  box-shadow:\n    0 0 28px rgba(244,197,66,.34),\n    inset 0 0 0 3px rgba(255,241,201,.10);\n}\n\n#honeythread-conduits .htc-library-window span::before {\n  content: \"\";\n  position: absolute;\n  left: 16px;\n  right: 16px;\n  top: -24px;\n  height: 24px;\n  border: 4px solid rgba(255,241,201,.68);\n  border-bottom: 0;\n  border-radius: 12px 12px 0 0;\n}\n\n#honeythread-conduits .htc-library-window span::after {\n  content: \"\";\n  position: absolute;\n  left: 33px;\n  bottom: 22px;\n  width: 28px;\n  height: 48px;\n  border: 3px solid #f4c542;\n  border-radius: 4px 4px 10px 10px;\n  background:\n    linear-gradient(180deg, #fff8df, #f4c542 64%, #b87333);\n  clip-path: polygon(0 0,100% 0,100% 100%,50% 78%,0 100%);\n  filter: drop-shadow(0 0 9px rgba(244,197,66,.70));\n}\n\n#honeythread-conduits .htc-bookmark-garland {\n  position: absolute;\n  left: 314px;\n  right: 314px;\n  top: 126px;\n  height: 52px;\n  border-top: 3px solid rgba(63,36,24,.62);\n  border-radius: 50%;\n  background:\n    radial-gradient(circle at 8% 44%, #f4c542 0 7px, transparent 8px),\n    radial-gradient(circle at 27% 63%, #e9c875 0 7px, transparent 8px),\n    radial-gradient(circle at 48% 40%, #fff1c9 0 7px, transparent 8px),\n    radial-gradient(circle at 69% 63%, #b87333 0 7px, transparent 8px),\n    radial-gradient(circle at 91% 44%, #f4c542 0 7px, transparent 8px);\n  filter: drop-shadow(0 0 7px rgba(244,197,66,.38));\n}\n\n#honeythread-conduits .htc-book-cabinet,\n#honeythread-conduits .htc-archive-shelf {\n  position: absolute;\n  bottom: 70px;\n  width: 238px;\n  height: 310px;\n  border: 7px solid #3f2418;\n  border-radius: 25px;\n  box-shadow:\n    0 22px 34px rgba(29,14,8,.32),\n    inset 0 3px 0 rgba(255,255,255,.08);\n}\n\n#honeythread-conduits .htc-book-cabinet {\n  left: 40px;\n  background:\n    repeating-linear-gradient(0deg, transparent 0 68px, rgba(63,36,24,.92) 68px 75px),\n    linear-gradient(180deg, #8a5a36, #4a2819);\n}\n\n#honeythread-conduits .htc-book-cabinet::before {\n  content: \"\";\n  position: absolute;\n  inset: 18px 18px 28px;\n  background:\n    repeating-linear-gradient(90deg, #6f7f4f 0 18px, #f4c542 18px 21px, #7f4b2d 21px 42px, #fff1c9 42px 45px, #4f5d3b 45px 61px, transparent 61px 67px);\n  opacity: .92;\n}\n\n#honeythread-conduits .htc-honey-lamp {\n  position: absolute;\n  left: 50%;\n  bottom: 28px;\n  width: 60px;\n  height: 52px;\n  transform: translateX(-50%);\n  border: 4px solid #3f2418;\n  border-radius: 16px 16px 24px 24px;\n  background:\n    radial-gradient(circle, #fff8df 0 20%, #f4c542 21% 55%, #b87333 56% 100%);\n  box-shadow: 0 0 29px rgba(244,197,66,.68);\n  animation: htc-lamp-pulse 2.5s ease-in-out infinite alternate;\n}\n\n#honeythread-conduits .htc-archive-shelf {\n  right: 40px;\n  background:\n    repeating-linear-gradient(0deg, transparent 0 69px, rgba(63,36,24,.88) 69px 76px),\n    repeating-linear-gradient(90deg, transparent 0 70px, rgba(63,36,24,.78) 70px 77px),\n    linear-gradient(180deg, #7d5938, #4f3422);\n}\n\n#honeythread-conduits .htc-archive-shelf::before {\n  content: \"\";\n  position: absolute;\n  inset: 20px;\n  background:\n    radial-gradient(circle at 18% 13%, #fff8df 0 15px, #f4c542 16px 19px, transparent 20px),\n    radial-gradient(circle at 50% 13%, #fff8df 0 15px, #e9c875 16px 19px, transparent 20px),\n    radial-gradient(circle at 82% 13%, #fff8df 0 15px, #b87333 16px 19px, transparent 20px),\n    radial-gradient(circle at 18% 50%, #fff8df 0 15px, #e9c875 16px 19px, transparent 20px),\n    radial-gradient(circle at 50% 50%, #fff8df 0 15px, #f4c542 16px 19px, transparent 20px),\n    radial-gradient(circle at 82% 50%, #fff8df 0 15px, #b87333 16px 19px, transparent 20px),\n    radial-gradient(circle at 18% 87%, #fff8df 0 15px, #f4c542 16px 19px, transparent 20px),\n    radial-gradient(circle at 50% 87%, #fff8df 0 15px, #e9c875 16px 19px, transparent 20px),\n    radial-gradient(circle at 82% 87%, #fff8df 0 15px, #b87333 16px 19px, transparent 20px);\n}\n\n#honeythread-conduits .htc-reading-table {\n  position: absolute;\n  right: 280px;\n  bottom: 88px;\n  width: 144px;\n  height: 88px;\n  border: 6px solid #3f2418;\n  border-radius: 50%;\n  background: linear-gradient(180deg, #8a5a36, #4b291b);\n  box-shadow: 0 13px 21px rgba(29,14,8,.28);\n}\n\n#honeythread-conduits .htc-reading-table::before {\n  content: \"\";\n  position: absolute;\n  left: 58px;\n  top: 68px;\n  width: 20px;\n  height: 68px;\n  border-radius: 8px;\n  background: #3f2418;\n  box-shadow: -31px 50px 0 -5px #3f2418, 31px 50px 0 -5px #3f2418;\n}\n\n#honeythread-conduits .htc-desk-lamp {\n  position: absolute;\n  left: 43px;\n  top: -14px;\n  width: 60px;\n  height: 64px;\n  border: 4px solid #3f2418;\n  border-radius: 18px 18px 23px 23px;\n  background:\n    radial-gradient(circle at 50% 52%, #fff8df 0 15px, #f4c542 16px 27px, #b87333 28px 100%);\n  box-shadow: 0 0 23px rgba(244,197,66,.52);\n}\n\n#honeythread-conduits .htc-desk-lamp::before {\n  content: \"\";\n  position: absolute;\n  left: 12px;\n  right: 12px;\n  top: -12px;\n  height: 13px;\n  border: 3px solid #3f2418;\n  border-radius: 7px;\n  background: #a45f43;\n}\n\n#honeythread-conduits .htc-desk-lamp::after {\n  content: \"\";\n  position: absolute;\n  left: 49%;\n  top: -35px;\n  width: 4px;\n  height: 24px;\n  border-left: 3px solid rgba(255,241,201,.62);\n  animation: htc-dust-rise 2.7s ease-in-out infinite;\n}\n\n#honeythread-conduits .htc-honey-tray {\n  position: absolute;\n  left: 282px;\n  bottom: 92px;\n  width: 136px;\n  height: 74px;\n  border: 5px solid #3f2418;\n  border-radius: 18px;\n  background:\n    radial-gradient(circle at 23% 56%, #fff8df 0 18px, #f4c542 19px 22px, transparent 23px),\n    radial-gradient(circle at 53% 50%, #fff8df 0 21px, #e9c875 22px 25px, transparent 26px),\n    radial-gradient(circle at 82% 58%, #fff8df 0 18px, #b87333 19px 22px, transparent 23px),\n    linear-gradient(180deg, #8a5a36, #4b291b);\n}\n\n#honeythread-conduits .htc-library-floor {\n  position: absolute;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  height: 132px;\n  border-top: 5px solid #3f2418;\n  background:\n    repeating-linear-gradient(90deg, rgba(255,255,255,.035) 0 3px, transparent 3px 105px),\n    linear-gradient(180deg, #70452b, #351c12);\n  box-shadow:\n    inset 0 18px 32px rgba(35,17,10,.30),\n    0 -15px 28px rgba(29,14,8,.22);\n}\n\n\/* Gameplay layout *\/\n#honeythread-conduits .htc-gameplay {\n  position: absolute;\n  inset: 0;\n  z-index: 10;\n  display: grid;\n  grid-template-columns: 184px minmax(0, 1fr) 184px;\n  grid-template-rows: 90px minmax(0, 1fr) 82px;\n  gap: 8px 14px;\n  padding: 16px 23px 18px;\n}\n\n#honeythread-conduits .htc-top-left,\n#honeythread-conduits .htc-hud,\n#honeythread-conduits .htc-side-controls,\n#honeythread-conduits .htc-bottom-controls {\n  position: relative;\n  z-index: 20;\n  display: flex;\n  align-items: center;\n}\n\n#honeythread-conduits .htc-top-left {\n  grid-column: 1;\n  grid-row: 1;\n  gap: 10px;\n  justify-content: flex-start;\n}\n\n#honeythread-conduits .htc-hud {\n  grid-column: 2;\n  grid-row: 1;\n  justify-content: center;\n  gap: 10px;\n}\n\n#honeythread-conduits .htc-hud-card {\n  position: relative;\n  width: 136px;\n  height: 60px;\n  padding: 8px 10px 6px;\n  overflow: hidden;\n  border: 1px solid rgba(184,115,51,.34);\n  border-radius: 15px;\n  background:\n    radial-gradient(circle at 16px 15px, rgba(244,197,66,.18) 0 4px, transparent 5px),\n    radial-gradient(circle at calc(100% - 16px) 15px, rgba(104,120,79,.18) 0 4px, transparent 5px),\n    linear-gradient(180deg, #fffdf2, #fff1c9);\n  box-shadow:\n    0 4px 0 rgba(90,50,31,.82),\n    0 9px 17px rgba(40,21,12,.22),\n    inset 0 1px 0 rgba(255,255,255,.74);\n  text-align: center;\n}\n\n#honeythread-conduits .htc-hud-label {\n  display: block;\n  color: rgba(63,36,24,.68);\n  font: 900 10px\/1 Arial, sans-serif;\n  letter-spacing: 1px;\n  text-transform: uppercase;\n}\n\n#honeythread-conduits .htc-hud-value {\n  display: block;\n  margin-top: 4px;\n  color: #3f2418;\n  font: 900 22px\/1 Georgia, serif;\n}\n\n#honeythread-conduits .htc-board-wrap {\n  grid-column: 2;\n  grid-row: 2 \/ 4;\n  display: grid;\n  place-items: center;\n  min-width: 0;\n  min-height: 0;\n}\n\n#honeythread-conduits .htc-board-frame {\n  position: relative;\n  width: 650px;\n  height: 572px;\n  display: grid;\n  place-items: center;\n  border: 7px solid #3f2418;\n  border-radius: 30px;\n  background:\n    radial-gradient(circle at 38px 38px, rgba(244,197,66,.16) 0 5px, transparent 6px) 0 0 \/ 76px 76px,\n    linear-gradient(90deg, rgba(104,120,79,.12) 0 50%, rgba(255,248,223,.16) 50%) 0 0 \/ 76px 76px,\n    linear-gradient(0deg, rgba(184,115,51,.12) 0 50%, rgba(255,248,223,.10) 50%) 0 0 \/ 76px 76px,\n    linear-gradient(180deg, #c99b55, #f0d99a);\n  box-shadow:\n    0 0 0 4px #fff8df,\n    0 0 0 8px #f4c542,\n    0 0 0 12px #5a321f,\n    0 28px 48px rgba(40,21,12,.34),\n    inset 12px 0 24px rgba(255,255,255,.22),\n    inset -12px -8px 24px rgba(110,67,41,.14);\n}\n\n#honeythread-conduits .htc-board-frame::before {\n  content: \"\";\n  position: absolute;\n  inset: 17px;\n  border: 2px solid rgba(255,248,223,.72);\n  border-radius: 22px;\n  pointer-events: none;\n}\n\n#honeythread-conduits .htc-board-frame::after {\n  content: \"\";\n  position: absolute;\n  left: 112px;\n  right: 112px;\n  bottom: -12px;\n  height: 32px;\n  border: 4px solid #3f2418;\n  border-radius: 0 0 18px 18px;\n  background:\n    radial-gradient(circle at 18px 50%, rgba(255,248,223,.88) 0 2px, transparent 4px) 0 0 \/ 38px 100% repeat-x,\n    linear-gradient(180deg, #b87333, #6f4027);\n}\n\n#honeythread-conduits .htc-frame-seal {\n  position: absolute;\n  z-index: 7;\n  width: 32px;\n  height: 32px;\n  border: 3px solid #5a321f;\n  border-radius: 50%;\n  background:\n    radial-gradient(circle at 36% 30%, #fff8df 0 3px, transparent 4px),\n    radial-gradient(circle, #f4c542 0 30%, #b87333 31% 68%, #5a321f 69% 100%);\n  filter: drop-shadow(0 3px 5px rgba(40,21,12,.34)) drop-shadow(0 0 8px rgba(244,197,66,.62));\n}\n\n#honeythread-conduits .htc-frame-seal::after {\n  content: \"\";\n  position: absolute;\n  left: 7px;\n  top: 7px;\n  width: 12px;\n  height: 12px;\n  border: 2px solid rgba(255,248,223,.75);\n  border-radius: 50%;\n  box-shadow: 6px 0 0 -4px rgba(255,248,223,.7), 3px 6px 0 -4px rgba(255,248,223,.7);\n}\n\n#honeythread-conduits .htc-seal-a { left: 23px; top: 23px; }\n#honeythread-conduits .htc-seal-b { right: 23px; top: 23px; }\n#honeythread-conduits .htc-seal-c { left: 23px; bottom: 23px; }\n#honeythread-conduits .htc-seal-d { right: 23px; bottom: 23px; }\n\n#honeythread-conduits .htc-board-title {\n  position: absolute;\n  z-index: 8;\n  left: 50%;\n  top: -21px;\n  width: 410px;\n  padding: 10px 20px;\n  overflow: hidden;\n  transform: translateX(-50%);\n  border: 3px solid #3f2418;\n  border-radius: 12px;\n  background:\n    radial-gradient(circle at 22px 50%, #f4c542 0 6px, transparent 7px),\n    radial-gradient(circle at calc(100% - 22px) 50%, #fff1c9 0 6px, transparent 7px),\n    linear-gradient(180deg, #7b492c, #3f2418);\n  box-shadow:\n    0 5px 0 #2e1a12,\n    0 11px 19px rgba(40,21,12,.28);\n  color: #fff1c9;\n  font: 900 16px\/1.15 Georgia, serif;\n  text-align: center;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  text-shadow: 0 2px 0 rgba(0,0,0,.28);\n}\n\n#honeythread-conduits .htc-board {\n  position: relative;\n  z-index: 5;\n  display: grid;\n  width: 506px;\n  height: 506px;\n  gap: var(--htc-gap, 7px);\n  touch-action: none;\n}\n\n#honeythread-conduits .htc-tile {\n  position: relative;\n  min-width: 0;\n  min-height: 0;\n  padding: 0;\n  overflow: hidden;\n  border: 2px solid rgba(90,50,31,.58);\n  border-radius: 13px;\n  color: #2e1a12;\n  cursor: pointer;\n  outline: none;\n  touch-action: manipulation;\n  background:\n    radial-gradient(circle at 12px 11px, rgba(255,255,255,.82) 0 2px, transparent 4px),\n    linear-gradient(145deg, rgba(255,255,255,.48), transparent 48%),\n    repeating-linear-gradient(0deg, transparent 0 18px, rgba(184,115,51,.035) 18px 19px),\n    linear-gradient(180deg, #fffdf2, #f6e6b9);\n  box-shadow:\n    0 4px 0 #5a321f,\n    0 8px 13px rgba(40,21,12,.20),\n    inset 0 0 0 2px rgba(255,255,255,.38);\n  transition:\n    transform .12s ease,\n    border-color .16s ease,\n    box-shadow .16s ease,\n    background .16s ease;\n}\n\n#honeythread-conduits .htc-tile::after {\n  content: \"\";\n  position: absolute;\n  inset: 7px;\n  border: 1px dashed rgba(184,115,51,.24);\n  border-radius: 8px;\n  pointer-events: none;\n}\n\n#honeythread-conduits .htc-tile:hover:not(.htc-fixed):not(.htc-blank) {\n  transform: translateY(-2px);\n  border-color: #b87333;\n  box-shadow:\n    0 6px 0 #5a321f,\n    0 12px 18px rgba(40,21,12,.25),\n    0 0 20px rgba(244,197,66,.30),\n    inset 0 0 0 2px rgba(255,255,255,.42);\n}\n\n#honeythread-conduits .htc-tile:focus-visible,\n#honeythread-conduits button:focus-visible {\n  outline: 3px solid rgba(255,248,223,.96);\n  outline-offset: 3px;\n}\n\n#honeythread-conduits .htc-tile.htc-connected {\n  border-color: #b87333;\n  background:\n    radial-gradient(circle at 12px 11px, rgba(255,255,255,.92) 0 2px, transparent 4px),\n    linear-gradient(145deg, rgba(255,255,255,.62), transparent 47%),\n    linear-gradient(180deg, #fffdf2, #ffe7a1);\n  box-shadow:\n    0 4px 0 #8a4f2c,\n    0 0 23px rgba(244,197,66,.60),\n    inset 0 0 0 2px rgba(233,200,117,.36);\n}\n\n#honeythread-conduits .htc-turn {\n  position: absolute;\n  inset: 0;\n  transform: rotate(var(--htc-rotation, 0deg));\n  transition: transform .17s cubic-bezier(.3,.82,.3,1);\n  pointer-events: none;\n}\n\n#honeythread-conduits .htc-trail-arm {\n  position: absolute;\n  left: 50%;\n  top: 50%;\n  width: 16px;\n  height: 54%;\n  margin-left: -8px;\n  transform-origin: 50% 0;\n  border: 2px solid rgba(90,50,31,.74);\n  border-bottom: 0;\n  border-radius: 8px 8px 2px 2px;\n  background:\n    repeating-linear-gradient(0deg, rgba(255,248,223,.20) 0 5px, transparent 5px 13px),\n    linear-gradient(90deg, #3f2418, #b87333 32%, #f4c542 55%, #5a321f);\n  box-shadow:\n    inset 3px 0 3px rgba(255,255,255,.13),\n    0 2px 4px rgba(40,21,12,.21);\n}\n\n#honeythread-conduits .htc-trail-t { transform: rotate(180deg); }\n#honeythread-conduits .htc-trail-r { transform: rotate(-90deg); }\n#honeythread-conduits .htc-trail-b { transform: rotate(0deg); }\n#honeythread-conduits .htc-trail-l { transform: rotate(90deg); }\n\n#honeythread-conduits .htc-connected .htc-trail-arm {\n  border-color: #f4c542;\n  background:\n    radial-gradient(circle at 50% 12%, #fff8df 0 2.4px, transparent 3.4px) 0 0 \/ 100% 14px repeat-y,\n    linear-gradient(90deg, #8a4f2c, #f4c542 42%, #fff8df 72%, #b87333);\n  box-shadow:\n    0 0 17px rgba(244,197,66,.90),\n    inset 2px 0 3px rgba(255,255,255,.45);\n}\n\n#honeythread-conduits .htc-hub {\n  position: absolute;\n  left: 50%;\n  top: 50%;\n  width: 31px;\n  height: 31px;\n  transform: translate(-50%, -50%);\n  border: 3px solid #3f2418;\n  border-radius: 50%;\n  background:\n    radial-gradient(circle at 35% 28%, #fff8df 0 3px, transparent 5px),\n    radial-gradient(circle, #b87333 0 20%, #7a4529 21% 53%, #3f2418 54% 100%);\n  box-shadow:\n    inset -3px -4px 6px rgba(40,21,12,.21),\n    0 3px 5px rgba(40,21,12,.23);\n}\n\n#honeythread-conduits .htc-connected .htc-hub {\n  border-color: #b87333;\n  background:\n    radial-gradient(circle at 35% 28%, #fff8df 0 4px, transparent 5px),\n    radial-gradient(circle, #fff8df 0 20%, #f4c542 21% 49%, #b87333 50% 100%);\n  box-shadow:\n    0 0 18px rgba(244,197,66,.94),\n    inset -3px -4px 6px rgba(63,36,24,.08);\n}\n\n#honeythread-conduits .htc-bridge-h,\n#honeythread-conduits .htc-bridge-v {\n  position: absolute;\n  border: 2px solid rgba(90,50,31,.72);\n  border-radius: 7px;\n  background:\n    repeating-linear-gradient(90deg, rgba(255,248,223,.20) 0 5px, transparent 5px 13px),\n    linear-gradient(90deg, #3f2418, #f4c542, #3f2418);\n  box-shadow: 0 2px 4px rgba(40,21,12,.19);\n}\n\n#honeythread-conduits .htc-bridge-h {\n  left: 0;\n  right: 0;\n  top: 50%;\n  z-index: 2;\n  height: 15px;\n  margin-top: -7.5px;\n}\n\n#honeythread-conduits .htc-bridge-v {\n  top: 0;\n  bottom: 0;\n  left: 50%;\n  z-index: 1;\n  width: 15px;\n  margin-left: -7.5px;\n}\n\n#honeythread-conduits .htc-connected .htc-bridge-h,\n#honeythread-conduits .htc-connected .htc-bridge-v {\n  border-color: #f4c542;\n  background:\n    radial-gradient(circle at 10px 50%, #fff8df 0 2.4px, transparent 3.4px) 0 0 \/ 18px 100% repeat-x,\n    linear-gradient(90deg, #b87333, #f4c542 50%, #b87333);\n  box-shadow: 0 0 17px rgba(244,197,66,.90);\n}\n\n#honeythread-conduits .htc-lamp-source {\n  position: absolute;\n  left: 50%;\n  top: 50%;\n  z-index: 6;\n  width: 58px;\n  height: 62px;\n  transform: translate(-50%, -48%);\n  border: 4px solid #3f2418;\n  border-radius: 16px 16px 24px 24px;\n  background:\n    radial-gradient(circle at 34% 24%, rgba(255,255,255,.86) 0 5px, transparent 6px),\n    linear-gradient(180deg, rgba(255,255,255,.34) 0 27%, transparent 28%),\n    radial-gradient(ellipse at 50% 79%, #fff8df 0 10%, #f4c542 11% 42%, #b87333 43% 70%, #6f3f26 71% 100%);\n  box-shadow:\n    0 4px 9px rgba(40,21,12,.26),\n    0 0 28px rgba(244,197,66,.76),\n    inset 0 0 0 2px rgba(255,255,255,.18);\n}\n\n#honeythread-conduits .htc-lamp-source::before {\n  content: \"\";\n  position: absolute;\n  left: 16px;\n  right: 16px;\n  top: -14px;\n  height: 16px;\n  border: 4px solid #3f2418;\n  border-bottom: 0;\n  border-radius: 9px 9px 0 0;\n  background: rgba(255,241,201,.28);\n}\n\n#honeythread-conduits .htc-lamp-source::after {\n  content: \"\";\n  position: absolute;\n  left: 21px;\n  bottom: 13px;\n  width: 13px;\n  height: 25px;\n  border-radius: 52% 48% 58% 42%;\n  background: linear-gradient(160deg, #fff8df, #f4c542 48%, #b87333 74%);\n  transform: rotate(34deg);\n  box-shadow: 0 0 13px rgba(244,197,66,.90);\n}\n\n#honeythread-conduits .htc-bookmark-target {\n  position: absolute;\n  left: 50%;\n  top: 50%;\n  z-index: 7;\n  width: 46px;\n  height: 58px;\n  transform: translate(-50%, -47%) scale(.90);\n  transition: transform .20s ease, filter .20s ease, box-shadow .20s ease, background .20s ease;\n  border: 4px solid #3f2418;\n  border-radius: 7px 7px 13px 13px;\n  background:\n    radial-gradient(circle at 34% 23%, rgba(255,255,255,.72) 0 4px, transparent 5px),\n    linear-gradient(180deg, #e9c875 0%, #b87333 58%, #6f3f26 100%);\n  clip-path: polygon(0 0,100% 0,100% 100%,50% 80%,0 100%);\n  filter: saturate(.78) brightness(.90);\n  box-shadow: inset 0 0 0 2px rgba(255,255,255,.12);\n}\n\n#honeythread-conduits .htc-bookmark-target::before {\n  content: \"\";\n  position: absolute;\n  left: 13px;\n  top: 14px;\n  width: 12px;\n  height: 17px;\n  border: 3px solid rgba(255,248,223,.78);\n  border-radius: 50%;\n  box-shadow:\n    7px 0 0 -5px rgba(255,248,223,.75),\n    3px 7px 0 -5px rgba(255,248,223,.75);\n}\n\n#honeythread-conduits .htc-bookmark-target::after {\n  content: \"\";\n  position: absolute;\n  left: 9px;\n  right: 9px;\n  top: -12px;\n  height: 14px;\n  border: 4px solid #3f2418;\n  border-bottom: 0;\n  border-radius: 7px 7px 0 0;\n  background: rgba(255,241,201,.25);\n}\n\n#honeythread-conduits .htc-bookmark-lit .htc-bookmark-target {\n  transform: translate(-50%, -47%) scale(1.08);\n  filter: saturate(1.15) brightness(1.12);\n  background:\n    radial-gradient(circle at 34% 23%, rgba(255,255,255,.92) 0 4px, transparent 5px),\n    linear-gradient(180deg, #fff8df 0%, #f4c542 42%, #b87333 100%);\n  box-shadow:\n    0 0 22px rgba(255,255,255,.48),\n    0 0 36px rgba(244,197,66,.92),\n    inset 0 0 0 2px rgba(255,255,255,.28);\n}\n\n#honeythread-conduits .htc-brass-lock {\n  position: absolute;\n  right: 6px;\n  top: 6px;\n  z-index: 8;\n  width: 29px;\n  height: 29px;\n  border: 3px solid #5a321f;\n  border-radius: 50%;\n  background:\n    radial-gradient(circle at 35% 28%, #fff8df 0 3px, transparent 4px),\n    radial-gradient(circle, #f4c542 0 32%, #b87333 33% 68%, #5a321f 69% 100%);\n  filter: drop-shadow(0 2px 4px rgba(40,21,12,.34)) drop-shadow(0 0 7px rgba(244,197,66,.56));\n}\n\n#honeythread-conduits .htc-brass-lock::before {\n  content: \"\";\n  position: absolute;\n  left: 7px;\n  top: 6px;\n  width: 9px;\n  height: 9px;\n  border: 2px solid rgba(255,248,223,.78);\n  border-radius: 50%;\n}\n\n#honeythread-conduits .htc-empty-mark {\n  position: absolute;\n  left: 50%;\n  top: 50%;\n  width: 58px;\n  height: 44px;\n  transform: translate(-50%, -50%);\n  opacity: .40;\n  border: 2px dashed rgba(184,115,51,.42);\n  border-radius: 9px;\n  background:\n    linear-gradient(90deg, rgba(244,197,66,.24) 0 50%, rgba(255,248,223,.50) 50%) 0 0 \/ 20px 20px,\n    linear-gradient(0deg, rgba(255,248,223,.20) 0 50%, rgba(184,115,51,.12) 50%) 0 0 \/ 20px 20px;\n}\n\n\/* Controls *\/\n#honeythread-conduits .htc-side-controls {\n  grid-column: 3;\n  grid-row: 2;\n  flex-direction: column;\n  justify-content: center;\n  gap: 13px;\n}\n\n#honeythread-conduits .htc-bottom-controls {\n  grid-column: 3;\n  grid-row: 3;\n  justify-content: center;\n}\n\n#honeythread-conduits .htc-icon-btn,\n#honeythread-conduits .htc-action-btn,\n#honeythread-conduits .htc-menu-btn,\n#honeythread-conduits .htc-level-btn {\n  position: relative;\n  border: 2px solid #3f2418;\n  color: #2e1a12;\n  background:\n    radial-gradient(circle at 28% 22%, rgba(255,255,255,.34), transparent 34%),\n    linear-gradient(180deg, #fff8df, #ecd49a);\n  box-shadow:\n    0 4px 0 #5a321f,\n    0 9px 15px rgba(40,21,12,.24),\n    inset 0 1px 0 rgba(255,255,255,.58);\n  cursor: pointer;\n  outline: none;\n  font-family: Arial, sans-serif;\n  transition:\n    transform .11s ease,\n    filter .15s ease,\n    box-shadow .11s ease;\n  touch-action: manipulation;\n}\n\n#honeythread-conduits .htc-icon-btn:hover,\n#honeythread-conduits .htc-action-btn:hover,\n#honeythread-conduits .htc-menu-btn:hover,\n#honeythread-conduits .htc-level-btn:hover {\n  filter: brightness(1.05);\n  box-shadow:\n    0 4px 0 #5a321f,\n    0 10px 16px rgba(40,21,12,.26),\n    0 0 19px rgba(244,197,66,.28),\n    inset 0 1px 0 rgba(255,255,255,.64);\n}\n\n#honeythread-conduits .htc-icon-btn:active,\n#honeythread-conduits .htc-action-btn:active,\n#honeythread-conduits .htc-menu-btn:active,\n#honeythread-conduits .htc-level-btn:active {\n  transform: translateY(3px);\n  box-shadow:\n    0 1px 0 #3f2418,\n    0 4px 7px rgba(40,21,12,.21);\n}\n\n#honeythread-conduits .htc-icon-btn {\n  width: 50px;\n  height: 46px;\n  padding: 0;\n  display: grid;\n  place-items: center;\n  border-radius: 13px;\n}\n\n#honeythread-conduits .htc-icon-btn svg {\n  width: 25px;\n  height: 25px;\n  overflow: visible;\n  stroke: #3f2418;\n  stroke-width: 2.8;\n  stroke-linecap: round;\n  stroke-linejoin: round;\n  fill: none;\n}\n\n#honeythread-conduits .htc-mute-slash {\n  display: none;\n  stroke: #b8735a;\n  stroke-width: 3.3;\n}\n\n#honeythread-conduits.htc-muted .htc-mute-slash {\n  display: block;\n}\n\n#honeythread-conduits .htc-action-btn {\n  width: 156px;\n  min-height: 50px;\n  padding: 10px 13px;\n  border-radius: 14px;\n  font-size: 15px;\n  font-weight: 900;\n}\n\n#honeythread-conduits .htc-action-btn:nth-child(1) {\n  color: #fff1c9;\n  background: linear-gradient(180deg, #7b492c, #3f2418);\n}\n\n#honeythread-conduits .htc-action-btn:nth-child(2) {\n  background: linear-gradient(180deg, #fff8df, #e9c875);\n}\n\n#honeythread-conduits .htc-action-btn:nth-child(3) {\n  color: #fff8df;\n  background: linear-gradient(180deg, #79895b, #485537);\n}\n\n#honeythread-conduits .htc-action-btn[disabled],\n#honeythread-conduits .htc-menu-btn[disabled] {\n  cursor: default;\n  opacity: .42;\n  transform: none;\n  box-shadow: 0 3px 0 rgba(90,50,31,.52);\n}\n\n#honeythread-conduits .htc-floating-fullscreen {\n  position: absolute;\n  z-index: 132;\n  top: 20px;\n  right: 24px;\n}\n\n#honeythread-conduits .htc-toast {\n  position: absolute;\n  z-index: 78;\n  left: 50%;\n  bottom: 22px;\n  max-width: 580px;\n  width: max-content;\n  padding: 10px 19px;\n  border: 2px solid rgba(244,197,66,.78);\n  border-radius: 999px;\n  color: #fff1c9;\n  background: rgba(46,26,18,.96);\n  box-shadow: 0 10px 25px rgba(40,21,12,.34);\n  font-size: 15px;\n  font-weight: 800;\n  text-align: center;\n  transform: translate(-50%, 14px);\n  opacity: 0;\n  pointer-events: none;\n  transition: opacity .20s ease, transform .20s ease;\n}\n\n#honeythread-conduits .htc-toast-show {\n  opacity: 1;\n  transform: translate(-50%, 0);\n}\n\n\/* Overlays *\/\n#honeythread-conduits .htc-overlay {\n  position: absolute;\n  inset: 0;\n  z-index: 50;\n  display: grid;\n  place-items: center;\n  padding: 24px;\n  overflow: hidden;\n  border-radius: inherit;\n  background:\n    radial-gradient(circle at 17% 24%, rgba(244,197,66,.11) 0 5px, transparent 7px),\n    radial-gradient(circle at 82% 69%, rgba(104,120,79,.12) 0 8px, transparent 10px),\n    rgba(35,18,11,.66);\n  backdrop-filter: blur(7px);\n  -webkit-backdrop-filter: blur(7px);\n}\n\n#honeythread-conduits .htc-overlay[hidden],\n#honeythread-conduits .htc-win-layer[hidden] {\n  display: none;\n}\n\n#honeythread-conduits .htc-dialog {\n  position: relative;\n  width: min(580px, 88%);\n  max-height: 650px;\n  padding: 36px 35px 29px;\n  overflow: hidden;\n  border: 4px solid #3f2418;\n  border-radius: 23px;\n  color: #2e1a12;\n  background:\n    radial-gradient(circle at 84% 17%, rgba(244,197,66,.10) 0 7px, transparent 9px),\n    repeating-linear-gradient(0deg, transparent 0 15px, rgba(184,115,51,.045) 15px 16px),\n    linear-gradient(145deg, rgba(255,255,255,.55), transparent 45%),\n    linear-gradient(180deg, #fffdf2, #f3dfaa);\n  box-shadow:\n    0 0 0 5px #f4c542,\n    0 0 0 9px rgba(90,50,31,.82),\n    0 30px 72px rgba(29,14,8,.46);\n  text-align: center;\n  animation: htc-dialog-in .22s ease-out;\n}\n\n#honeythread-conduits .htc-dialog::before,\n#honeythread-conduits .htc-dialog::after {\n  content: \"\";\n  position: absolute;\n  top: 22px;\n  width: 31px;\n  height: 38px;\n  border: 3px solid #5a321f;\n  border-radius: 5px 5px 9px 9px;\n  background: linear-gradient(180deg, #fff8df, #f4c542 52%, #b87333);\n  clip-path: polygon(0 0,100% 0,100% 100%,50% 78%,0 100%);\n  filter: drop-shadow(0 4px 6px rgba(40,21,12,.24)) drop-shadow(0 0 9px rgba(244,197,66,.55));\n}\n\n#honeythread-conduits .htc-dialog::before {\n  left: 22px;\n  transform: rotate(-8deg);\n}\n\n#honeythread-conduits .htc-dialog::after {\n  right: 22px;\n  transform: rotate(8deg);\n}\n\n#honeythread-conduits .htc-dialog h2 {\n  margin: 0 44px 10px;\n  color: #3f2418;\n  font: 900 29px\/1.08 Georgia, serif;\n}\n\n#honeythread-conduits .htc-dialog p {\n  max-width: 470px;\n  margin: 0 auto 18px;\n  color: #6d4b37;\n  font-size: 15px;\n  font-weight: 700;\n  line-height: 1.5;\n}\n\n#honeythread-conduits .htc-menu-grid {\n  display: grid;\n  grid-template-columns: repeat(2,minmax(0,1fr));\n  gap: 12px;\n  margin-top: 15px;\n}\n\n#honeythread-conduits .htc-menu-grid.htc-single {\n  grid-template-columns: minmax(0,260px);\n  justify-content: center;\n}\n\n#honeythread-conduits .htc-menu-btn {\n  min-height: 50px;\n  padding: 10px 14px;\n  border-radius: 14px;\n  font-size: 15px;\n  font-weight: 900;\n}\n\n#honeythread-conduits .htc-primary {\n  color: #fff1c9;\n  background: linear-gradient(180deg, #7b492c, #3f2418);\n}\n\n#honeythread-conduits .htc-secondary {\n  color: #fff8df;\n  background: linear-gradient(180deg, #79895b, #485537);\n}\n\n#honeythread-conduits .htc-level-dialog {\n  width: min(850px,95%);\n  max-height: 672px;\n  padding: 27px 30px 25px;\n}\n\n#honeythread-conduits .htc-level-grid {\n  display: grid;\n  grid-template-columns: repeat(5,minmax(0,1fr));\n  gap: 10px;\n  margin: 15px 0 17px;\n}\n\n#honeythread-conduits .htc-level-btn {\n  min-height: 76px;\n  padding: 8px 5px;\n  border-radius: 12px;\n  font-weight: 900;\n}\n\n#honeythread-conduits .htc-level-btn span {\n  display: block;\n  color: #5a321f;\n  font-size: 18px;\n}\n\n#honeythread-conduits .htc-level-btn small {\n  display: block;\n  min-height: 14px;\n  margin-top: 5px;\n  color: rgba(63,36,24,.70);\n  font-size: 10px;\n}\n\n#honeythread-conduits .htc-level-btn.htc-level-locked {\n  cursor: default;\n  opacity: .42;\n}\n\n#honeythread-conduits .htc-mini-seals {\n  display: flex;\n  justify-content: center;\n  gap: 5px;\n  margin-top: 6px;\n}\n\n#honeythread-conduits .htc-mini-seal,\n#honeythread-conduits .htc-rating-seal {\n  position: relative;\n  width: 42px;\n  height: 30px;\n  filter: grayscale(1);\n  opacity: .25;\n}\n\n#honeythread-conduits .htc-mini-seal::before,\n#honeythread-conduits .htc-rating-seal::before {\n  content: \"\";\n  position: absolute;\n  left: 50%;\n  top: 2px;\n  width: 29px;\n  height: 29px;\n  transform: translateX(-50%);\n  border: 3px solid #5a321f;\n  border-radius: 50%;\n  background:\n    radial-gradient(circle at 35% 28%, #fff8df 0 3px, transparent 4px),\n    radial-gradient(circle, #f4c542 0 32%, #b87333 33% 68%, #5a321f 69% 100%);\n  filter: drop-shadow(0 2px 3px rgba(40,21,12,.24));\n}\n\n#honeythread-conduits .htc-mini-seal-earned {\n  filter: drop-shadow(0 0 7px rgba(244,197,66,.88));\n  opacity: 1;\n}\n\n#honeythread-conduits .htc-page-nav {\n  display: grid;\n  grid-template-columns: repeat(3,minmax(0,1fr));\n  gap: 12px;\n  max-width: 700px;\n  margin: 0 auto;\n}\n\n#honeythread-conduits .htc-rating-row {\n  display: flex;\n  justify-content: center;\n  gap: 22px;\n  margin: 18px 0 20px;\n}\n\n#honeythread-conduits .htc-rating-seal {\n  width: 42px;\n  height: 42px;\n}\n\n#honeythread-conduits .htc-rating-seal-earned {\n  filter: drop-shadow(0 0 13px rgba(244,197,66,.92));\n  opacity: 1;\n  animation: htc-seal-pop .35s ease both;\n}\n\n#honeythread-conduits .htc-result-line {\n  display: flex;\n  justify-content: center;\n  gap: 26px;\n  margin: 8px 0 17px;\n  color: #6d4b37;\n  font-size: 15px;\n}\n\n#honeythread-conduits .htc-win-layer {\n  position: absolute;\n  inset: 0;\n  z-index: 45;\n  overflow: hidden;\n  pointer-events: none;\n}\n\n#honeythread-conduits .htc-win-bookmark {\n  position: absolute;\n  left: 50%;\n  top: 49%;\n  width: 82px;\n  height: 112px;\n  border: 7px solid #3f2418;\n  border-radius: 12px 12px 22px 22px;\n  background:\n    radial-gradient(circle at 34% 22%, rgba(255,255,255,.92) 0 8px, transparent 9px),\n    linear-gradient(180deg, rgba(255,255,255,.30) 0 27%, transparent 28%),\n    linear-gradient(180deg, #fff8df 0 10%, #f4c542 11% 42%, #b87333 43% 72%, #6f3f26 73% 100%);\n  clip-path: polygon(0 0,100% 0,100% 100%,50% 80%,0 100%);\n  filter: drop-shadow(0 0 34px rgba(244,197,66,.94));\n  animation: htc-bookmark-flight 1s ease both;\n}\n\n#honeythread-conduits .htc-win-bookmark::after {\n  content: \"\";\n  position: absolute;\n  left: 24px;\n  top: 28px;\n  width: 22px;\n  height: 22px;\n  border: 4px solid rgba(255,248,223,.82);\n  border-radius: 50%;\n}\n\n#honeythread-conduits .htc-honey-spark {\n  position: absolute;\n  width: 11px;\n  height: 11px;\n  border-radius: 50%;\n  background: #f4c542;\n  box-shadow: 0 0 10px rgba(244,197,66,.94);\n  animation: htc-honey-fall 1.15s ease-out both;\n}\n\n#honeythread-conduits .htc-hinting {\n  z-index: 9;\n  animation: htc-hint .72s ease-in-out 3;\n}\n\n#honeythread-conduits .htc-bump {\n  animation: htc-bump .22s ease;\n}\n\n\/* Orientation helper is retained as a fallback but normal portrait play rotates automatically. *\/\n#honeythread-conduits .htc-orientation {\n  display: none !important;\n}\n\n@keyframes htc-lamp-pulse {\n  from {\n    transform: translateX(-50%) scale(.92);\n    filter: drop-shadow(0 0 9px rgba(244,197,66,.42));\n  }\n  to {\n    transform: translateX(-50%) scale(1.07);\n    filter: drop-shadow(0 0 22px rgba(244,197,66,.82));\n  }\n}\n\n@keyframes htc-dust-rise {\n  0%,100% { transform: translateY(3px); opacity: .45; }\n  50% { transform: translateY(-7px); opacity: .78; }\n}\n\n@keyframes htc-hint {\n  0%,100% {\n    transform: translateY(0);\n    box-shadow: 0 4px 0 #5a321f, 0 8px 13px rgba(40,21,12,.20);\n  }\n  50% {\n    transform: translateY(-5px) scale(1.035);\n    box-shadow: 0 8px 0 #5a321f, 0 0 29px rgba(244,197,66,.76);\n  }\n}\n\n@keyframes htc-bump {\n  0%,100% { transform: translateX(0); }\n  35% { transform: translateX(-5px); }\n  70% { transform: translateX(5px); }\n}\n\n@keyframes htc-dialog-in {\n  from { opacity: 0; transform: translateY(14px) scale(.96); }\n  to { opacity: 1; transform: translateY(0) scale(1); }\n}\n\n@keyframes htc-seal-pop {\n  from { transform: scale(.35) rotate(-24deg); }\n  to { transform: scale(1) rotate(0); }\n}\n\n@keyframes htc-bookmark-flight {\n  0% { transform: translate(-50%,-50%) scale(.25) rotate(-20deg); opacity: 0; }\n  40% { opacity: 1; }\n  100% { transform: translate(-50%,-50%) scale(1.18) rotate(18deg); opacity: 0; }\n}\n\n@keyframes htc-honey-fall {\n  0% { transform: translate(0,0) scale(.4); opacity: 0; }\n  20% { opacity: 1; }\n  100% { transform: translate(var(--htc-dx),var(--htc-dy)) rotate(220deg) scale(1); opacity: 0; }\n}\n\n@media (max-width: 720px) and (orientation: portrait) {\n  #honeythread-conduits {\n    width: 100%;\n    aspect-ratio: 9 \/ 16;\n    margin: 0 auto;\n    border-radius: 16px;\n  }\n}\n\n@media (pointer: coarse) and (orientation: landscape) and (max-height: 620px) {\n  #honeythread-conduits {\n    width: 100%;\n    max-width: none;\n    height: 100vh;\n    height: 100dvh;\n    margin: 0;\n    border-radius: 0;\n    aspect-ratio: auto;\n  }\n}\n\n@media (prefers-reduced-motion: reduce) {\n  #honeythread-conduits *,\n  #honeythread-conduits *::before,\n  #honeythread-conduits *::after {\n    animation-duration: .01ms !important;\n    animation-iteration-count: 1 !important;\n    transition-duration: .01ms !important;\n  }\n}\n\n\/* Diagnostic notice is replaced automatically when JavaScript initializes. *\/\n#honeythread-conduits .htc-script-warning {\n  position: absolute;\n  z-index: 2;\n  top: 50%;\n  left: 50%;\n  width: min(86%, 480px);\n  padding: 18px 22px;\n  transform: translate(-50%, -50%);\n  border: 2px solid #b87333;\n  border-radius: 16px;\n  color: #3f2418;\n  background: #fff8df;\n  font: 700 14px\/1.5 Arial, sans-serif;\n  text-align: center;\n  box-shadow: 0 16px 32px rgba(30,15,9,.3);\n}\n\n<\/style>\n\n<script>\n(function () {\n  \"use strict\";\n\n  function initializeHoneythreadConduits() {\n\n  var root = document.getElementById(\"honeythread-conduits\");\n  if (!root || root.dataset.htcReady === \"1\") return;\n  root.dataset.htcReady = \"1\";\n\n  var BASE_W = 1280;\n  var BASE_H = 720;\n  var STORAGE_KEY = \"flipa_honeythread_conduits_progress_v1\";\n  var DIRS = [1, 2, 4, 8];\n  var DR = [-1, 0, 1, 0];\n  var DC = [0, 1, 0, -1];\n  var OPP = [4, 8, 1, 2];\n\n\n  var levelNames = [\"First Honeylight Thread\", \"The Open Book Corner\", \"Amber Shelf Bend\", \"Quiet Reading Route\", \"Golden Catalogue Channel\", \"Bookmark Turn\", \"Honeylit Aisle\", \"Archive Crossing\", \"Parchment Glow Curve\", \"Storythread Weave\", \"Quillkeeper Trail\", \"Walnut Shelf Fold\", \"Small Catalogue Passage\", \"Golden Ribbon Thread\", \"Round Reading Route\", \"Four-Way Bookplate Knot\", \"Second Lantern Basin\", \"Low Bookshelf Bend\", \"Sealed Archive Route\", \"Hanging Bookmark Circuit\", \"Amber Crescent Loop\", \"Tiny Quill Turn\", \"Reading Table Map\", \"Dustlight Shelf Channel\", \"Pale Parchment Route\", \"Catalogue Table Weave\", \"Twin Reading Beacons\", \"Cross-Archive Fold\", \"Deep Library Corridor\", \"Measured Honeyway\", \"Twin Archive Lamps\", \"Second Story Beacon\", \"Golden Conduit Blueprint\", \"Parchment Cipher\", \"Double Honeylight Signal\", \"Seven Reading Beacons\", \"Bookdust Route\", \"Hidden Catalogue Atlas\", \"Midnight Shelf Channel\", \"Honeylit Archive Weave\", \"Grand Reading Table\", \"Rolling Bookmark Route\", \"Quiet Inkwell Corner\", \"Luminous Bookplate Crossing\", \"Round Library Window\", \"Fifty Golden Threads\", \"The Last Reading Beacon\", \"Brightest Honeylight Flow\", \"The Master Librarian's Route\", \"Final Honeythread Weave\"];\n\n  root.innerHTML = [\n    '<div class=\"htc-stage\" id=\"htcStage\">',\n      '<div class=\"htc-scene\" aria-hidden=\"true\">',\n        '<div class=\"htc-library-room\"><\/div>',\n        '<div class=\"htc-book-garland\"><\/div>',\n        '<div class=\"htc-library-window htc-library-window-left\"><span><\/span><\/div>',\n        '<div class=\"htc-library-window htc-library-window-right\"><span><\/span><\/div>',\n        '<div class=\"htc-bookmark-garland\"><\/div>',\n        '<div class=\"htc-book-cabinet\"><span class=\"htc-honey-lamp\"><\/span><\/div>',\n        '<div class=\"htc-archive-shelf\"><\/div>',\n        '<div class=\"htc-reading-table\"><span class=\"htc-desk-lamp\"><\/span><\/div>',\n        '<div class=\"htc-honey-tray\"><\/div>',\n        '<div class=\"htc-library-floor\"><\/div>',\n      '<\/div>',\n      '<div class=\"htc-gameplay\">',\n        '<div class=\"htc-top-left\">',\n          '<button class=\"htc-icon-btn\" type=\"button\" data-htc-action=\"pause\" aria-label=\"Pause\">',\n            '<svg viewBox=\"0 0 28 28\" aria-hidden=\"true\"><path d=\"M9 6v16\"><\/path><path d=\"M19 6v16\"><\/path><\/svg>',\n          '<\/button>',\n          '<button class=\"htc-icon-btn\" type=\"button\" data-htc-action=\"sound\" aria-label=\"Sound\">',\n            '<svg viewBox=\"0 0 28 28\" aria-hidden=\"true\"><path d=\"M4 11h5l5-4v14l-5-4H4z\"><\/path><path d=\"M18 10c2 2 2 6 0 8\"><\/path><path d=\"M21 7c4 4 4 10 0 14\"><\/path><path d=\"M1 24L25 4\" class=\"htc-mute-slash\"><\/path><\/svg>',\n          '<\/button>',\n        '<\/div>',\n        '<div class=\"htc-hud\" aria-live=\"polite\">',\n          '<div class=\"htc-hud-card\"><span class=\"htc-hud-label\">Level<\/span><strong class=\"htc-hud-value\" id=\"htcLevelValue\">1 \/ 50<\/strong><\/div>',\n          '<div class=\"htc-hud-card\"><span class=\"htc-hud-label\">Turns<\/span><strong class=\"htc-hud-value\" id=\"htcMovesValue\">0<\/strong><\/div>',\n          '<div class=\"htc-hud-card\"><span class=\"htc-hud-label\">Beacons Lit<\/span><strong class=\"htc-hud-value\" id=\"htcTargetsValue\">0 \/ 0<\/strong><\/div>',\n        '<\/div>',\n        '<div class=\"htc-board-wrap\">',\n          '<div class=\"htc-board-frame\">',\n            '<span class=\"htc-frame-seal htc-seal-a\"><\/span>',\n            '<span class=\"htc-frame-seal htc-seal-b\"><\/span>',\n            '<span class=\"htc-frame-seal htc-seal-c\"><\/span>',\n            '<span class=\"htc-frame-seal htc-seal-d\"><\/span>',\n            '<div class=\"htc-board-title\" id=\"htcBoardTitle\">First Honeylight Thread<\/div>',\n            '<div class=\"htc-board\" id=\"htcBoard\"><\/div>',\n          '<\/div>',\n        '<\/div>',\n        '<div class=\"htc-side-controls\">',\n          '<button class=\"htc-action-btn\" type=\"button\" data-htc-action=\"restart\">Restart Route<\/button>',\n          '<button class=\"htc-action-btn\" type=\"button\" data-htc-action=\"undo\">Undo<\/button>',\n          '<button class=\"htc-action-btn\" type=\"button\" data-htc-action=\"hint\">Golden Hint<\/button>',\n        '<\/div>',\n        '<div class=\"htc-bottom-controls\">',\n          '<button class=\"htc-action-btn\" type=\"button\" data-htc-action=\"levels\">Archive Map<\/button>',\n        '<\/div>',\n      '<\/div>',\n      '<button class=\"htc-icon-btn htc-floating-fullscreen\" type=\"button\" data-htc-action=\"fullscreen\" aria-label=\"Fullscreen\">',\n        '<svg viewBox=\"0 0 28 28\" aria-hidden=\"true\"><path d=\"M10 4H4v6\"><\/path><path d=\"M18 4h6v6\"><\/path><path d=\"M4 18v6h6\"><\/path><path d=\"M24 18v6h-6\"><\/path><\/svg>',\n      '<\/button>',\n      '<div class=\"htc-toast\" id=\"htcToast\" role=\"status\" aria-live=\"polite\"><\/div>',\n      '<div class=\"htc-win-layer\" id=\"htcWinLayer\" hidden><\/div>',\n      '<div class=\"htc-overlay\" id=\"htcOverlay\">',\n        '<div class=\"htc-dialog\" id=\"htcDialog\" role=\"dialog\" aria-modal=\"true\"><\/div>',\n      '<\/div>',\n    '<\/div>'\n  ].join(\"\");\n\n  root.insertAdjacentHTML(\"beforeend\", '<div class=\"htc-orientation\" id=\"htcOrientation\" hidden><div class=\"htc-orientation-card\"><span class=\"htc-rotate-book\" aria-hidden=\"true\"><\/span><strong>Turn for a Wider Table<\/strong><p>The Honey Library table adapts automatically to your screen.<\/p><button class=\"htc-orientation-fullscreen\" type=\"button\" data-htc-action=\"fullscreen\">Open Fullscreen<\/button><\/div><\/div>');\n\n  var stage = root.querySelector(\"#htcStage\");\n  var boardEl = root.querySelector(\"#htcBoard\");\n  var overlay = root.querySelector(\"#htcOverlay\");\n  var dialog = root.querySelector(\"#htcDialog\");\n  var toast = root.querySelector(\"#htcToast\");\n  var winLayer = root.querySelector(\"#htcWinLayer\");\n  var levelValue = root.querySelector(\"#htcLevelValue\");\n  var movesValue = root.querySelector(\"#htcMovesValue\");\n  var targetsValue = root.querySelector(\"#htcTargetsValue\");\n  var boardTitle = root.querySelector(\"#htcBoardTitle\");\n  var orientationLayer = root.querySelector(\"#htcOrientation\");\n  var orientationBlocked = false;\n\n  var progress = loadProgress();\n  var levels = [];\n  var state = {\n    levelIndex: 0,\n    level: null,\n    rotations: [],\n    initialRotations: [],\n    moves: 0,\n    history: [],\n    connectedCells: new Set(),\n    completedTargets: new Set(),\n    paused: true,\n    modal: \"start\",\n    page: 0,\n    toastTimer: 0,\n    winTimer: 0,\n    winning: false\n  };\n\n  var audio = createAudio();\n  var fallbackFullscreen = false;\n\n  function defaultProgress() {\n    return {\n      unlocked: 1,\n      completed: {},\n      last: 1,\n      sound: true,\n      tutorialSeen: {}\n    };\n  }\n\n  function loadProgress() {\n    try {\n      var raw = localStorage.getItem(STORAGE_KEY);\n      if (!raw) return defaultProgress();\n      var parsed = JSON.parse(raw);\n      var base = defaultProgress();\n      if (!parsed || typeof parsed !== \"object\") return base;\n      base.unlocked = clamp(Number(parsed.unlocked) || 1, 1, 50);\n      base.completed = (parsed.completed ? typeof parsed.completed === \"object\" : false) ? parsed.completed : {};\n      base.last = clamp(Number(parsed.last) || 1, 1, 50);\n      base.sound = parsed.sound !== false;\n      base.tutorialSeen = (parsed.tutorialSeen ? typeof parsed.tutorialSeen === \"object\" : false) ? parsed.tutorialSeen : {};\n      return base;\n    } catch (error) {\n      return defaultProgress();\n    }\n  }\n\n  function saveProgress() {\n    try {\n      localStorage.setItem(STORAGE_KEY, JSON.stringify(progress));\n    } catch (error) {\n      return;\n    }\n  }\n\n  function clamp(value, minimum, maximum) {\n    return Math.max(minimum, Math.min(maximum, value));\n  }\n\n  function seededRandom(seed) {\n    var value = seed >>> 0;\n    return function () {\n      value += 0x6D2B79F5;\n      var t = value;\n      t = Math.imul(t ^ (t >>> 15), t | 1);\n      t ^= t + Math.imul(t ^ (t >>> 7), t | 61);\n      return ((t ^ (t >>> 14)) >>> 0) \/ 4294967296;\n    };\n  }\n\n  function shuffle(list, random) {\n    for (var i = list.length - 1; i > 0; i -= 1) {\n      var j = Math.floor(random() * (i + 1));\n      var temp = list[i];\n      list[i] = list[j];\n      list[j] = temp;\n    }\n    return list;\n  }\n\n  \/\/ Preserve 32-bit bitwise AND without an ampersand character.\n  function bitAnd(left, right) {\n    return ~(~left | ~right);\n  }\n\n  function rotateMask(mask, turns) {\n    var rotated = mask;\n    for (var i = 0; i < turns; i += 1) {\n      rotated = bitAnd((rotated << 1), 15) | (bitAnd(rotated, 8) ? 1 : 0);\n    }\n    return rotated;\n  }\n\n  function bitCount(mask) {\n    var count = 0;\n    for (var i = 0; i < 4; i += 1) if (bitAnd(mask, DIRS[i])) count += 1;\n    return count;\n  }\n\n  function indexOf(row, col, cols) {\n    return row * cols + col;\n  }\n\n  function makeLevel(number) {\n    var rows = number <= 10 ? 4 : number <= 24 ? 5 : number <= 40 ? 6 : 7;\n    var cols = rows;\n    var random = seededRandom(93117 + number * 10939);\n    var total = rows * cols;\n    var sourceIndex = indexOf(rows - 1, Math.floor(cols \/ 2), cols);\n    var visited = new Array(total).fill(false);\n    var masks = new Array(total).fill(0);\n    var stack = [sourceIndex];\n    var visitOrder = [sourceIndex];\n    visited[sourceIndex] = true;\n\n    while (stack.length) {\n      var current = stack[stack.length - 1];\n      var cr = Math.floor(current \/ cols);\n      var cc = current % cols;\n      var options = [];\n\n      for (var d = 0; d < 4; d += 1) {\n        var nr = cr + DR[d];\n        var nc = cc + DC[d];\n        if (nr < 0 || nr >= rows || nc < 0 || nc >= cols) continue;\n        var next = indexOf(nr, nc, cols);\n        if (!visited[next]) options.push({ index: next, dir: d });\n      }\n\n      if (!options.length) {\n        stack.pop();\n        continue;\n      }\n\n      shuffle(options, random);\n      var chosen = options[0];\n      visited[chosen.index] = true;\n      masks[current] |= DIRS[chosen.dir];\n      masks[chosen.index] |= OPP[chosen.dir];\n      stack.push(chosen.index);\n      visitOrder.push(chosen.index);\n    }\n\n    var fixedJunctions = [];\n    if (number >= 16) {\n      var interior = [];\n      for (var jr = 1; jr < rows - 1; jr += 1) {\n        for (var jc = 1; jc < cols - 1; jc += 1) {\n          var junctionIndex = indexOf(jr, jc, cols);\n          if (junctionIndex !== sourceIndex) interior.push(junctionIndex);\n        }\n      }\n      shuffle(interior, random);\n      var junctionCount = clamp(Math.floor((number - 12) \/ 14), 1, 3);\n      for (var ji = 0; ji < Math.min(junctionCount, interior.length); ji += 1) {\n        var cell = interior[ji];\n        var cellRow = Math.floor(cell \/ cols);\n        var cellCol = cell % cols;\n        masks[cell] = 15;\n        for (var jd = 0; jd < 4; jd += 1) {\n          var neighbor = indexOf(cellRow + DR[jd], cellCol + DC[jd], cols);\n          masks[neighbor] |= OPP[jd];\n        }\n        fixedJunctions.push(cell);\n      }\n    }\n\n    var targetCount = clamp(2 + Math.floor((number - 1) \/ 8), 2, 7);\n    var leaves = [];\n    for (var i = 0; i < total; i += 1) {\n      if (i !== sourceIndex ? bitCount(masks[i]) === 1 : false) leaves.push(i);\n    }\n\n    leaves.sort(function (a, b) {\n      var ar = Math.floor(a \/ cols);\n      var ac = a % cols;\n      var br = Math.floor(b \/ cols);\n      var bc = b % cols;\n      var ad = Math.abs(ar - (rows - 1)) + Math.abs(ac - Math.floor(cols \/ 2));\n      var bd = Math.abs(br - (rows - 1)) + Math.abs(bc - Math.floor(cols \/ 2));\n      return bd - ad;\n    });\n\n    var targets = leaves.slice(0, targetCount);\n    while (targets.length < targetCount) {\n      var candidate = visitOrder[Math.max(1, visitOrder.length - 1 - targets.length)];\n      if (targets.indexOf(candidate) === -1 ? candidate !== sourceIndex : false) targets.push(candidate);\n      else break;\n    }\n\n    var sources = [sourceIndex];\n    if (number >= 31) {\n      var sourceCandidates = [\n        indexOf(rows - 1, 0, cols),\n        indexOf(rows - 1, cols - 1, cols),\n        indexOf(0, 0, cols),\n        indexOf(0, cols - 1, cols)\n      ];\n      for (var sc = 0; sc < sourceCandidates.length; sc += 1) {\n        var secondSource = sourceCandidates[sc];\n        if (secondSource !== sourceIndex ? (targets.indexOf(secondSource) === -1 ? fixedJunctions.indexOf(secondSource) === -1 : false) : false) {\n          sources.push(secondSource);\n          break;\n        }\n      }\n    }\n\n    var junctionSet = new Set(fixedJunctions);\n    var lockedSet = new Set();\n    if (number >= 7) {\n      var lockCandidates = [];\n      for (var li = 0; li < total; li += 1) {\n        if (sources.indexOf(li) === -1 ? (targets.indexOf(li) === -1 ? !junctionSet.has(li) : false) : false) lockCandidates.push(li);\n      }\n      shuffle(lockCandidates, random);\n      var lockCount = clamp(Math.floor(number \/ 9), 1, 5);\n      for (var lk = 0; lk < Math.min(lockCount, lockCandidates.length); lk += 1) {\n        lockedSet.add(lockCandidates[lk]);\n      }\n    }\n\n    var rotations = new Array(total).fill(0);\n    var targetMoves = 0;\n    for (var ri = 0; ri < total; ri += 1) {\n      if (lockedSet.has(ri) || junctionSet.has(ri) || sources.indexOf(ri) !== -1) {\n        rotations[ri] = 0;\n        continue;\n      }\n      var shouldScramble = random() < (number <= 4 ? .62 : .84);\n      var turn = shouldScramble ? 1 + Math.floor(random() * 3) : 0;\n      rotations[ri] = turn;\n      targetMoves += (4 - turn) % 4;\n    }\n\n    if (targetMoves < 4) {\n      for (var force = 0; force < total ? targetMoves < 4 : false; force += 1) {\n        if (lockedSet.has(force) || junctionSet.has(force) || sources.indexOf(force) !== -1) continue;\n        if (rotations[force] === 0) {\n          rotations[force] = 2;\n          targetMoves += 2;\n        }\n      }\n    }\n\n    return {\n      number: number,\n      rows: rows,\n      cols: cols,\n      name: levelNames[number - 1],\n      masks: masks,\n      solutionRotations: new Array(total).fill(0),\n      initialRotations: rotations,\n      targetMoves: targetMoves,\n      targets: targets,\n      sources: sources,\n      locked: lockedSet,\n      junctions: junctionSet,\n      tutorial: number === 1 ? \"Tap a conduit tile to rotate its golden channels. Carry honeylight from every Archive Lamp to each Reading Beacon.\" :\n        number === 7 ? \"Tiles secured with a brass book seal are already aligned and cannot be turned.\" :\n        number === 16 ? \"Four-way Bookplate Junctions carry honeylight in every direction and remain fixed.\" :\n        number === 31 ? \"Two Archive Lamps are active now. A Reading Beacon may be reached from either lamp.\" : \"\"\n    };\n  }\n\n  for (var levelNumber = 1; levelNumber <= 50; levelNumber += 1) {\n    levels.push(makeLevel(levelNumber));\n  }\n\n  function createAudio() {\n    var context = null;\n\n    function ensure() {\n      if (!progress.sound) return null;\n      try {\n        if (!context) context = new (window.AudioContext || window.webkitAudioContext)();\n        if (context.state === \"suspended\") context.resume();\n        return context;\n      } catch (error) {\n        return null;\n      }\n    }\n\n    function tone(frequency, duration, type, gain, delay) {\n      var ctx = ensure();\n      if (!ctx) return;\n      var oscillator = ctx.createOscillator();\n      var volume = ctx.createGain();\n      var start = ctx.currentTime + (delay || 0);\n      oscillator.type = type || \"sine\";\n      oscillator.frequency.setValueAtTime(frequency, start);\n      volume.gain.setValueAtTime(0.0001, start);\n      volume.gain.exponentialRampToValueAtTime(gain || .045, start + .012);\n      volume.gain.exponentialRampToValueAtTime(0.0001, start + duration);\n      oscillator.connect(volume);\n      volume.connect(ctx.destination);\n      oscillator.start(start);\n      oscillator.stop(start + duration + .03);\n    }\n\n    return {\n      play: function (name) {\n        if (!progress.sound) return;\n        if (name === \"turn\") {\n          tone(290, .055, \"triangle\", .025, 0);\n          tone(560, .08, \"sine\", .025, .035);\n        } else if (name === \"button\") {\n          tone(430, .08, \"triangle\", .032, 0);\n        } else if (name === \"locked\") {\n          tone(135, .10, \"square\", .018, 0);\n        } else if (name === \"undo\") {\n          tone(420, .09, \"triangle\", .03, 0);\n          tone(300, .10, \"triangle\", .025, .05);\n        } else if (name === \"hint\") {\n          tone(650, .12, \"sine\", .035, 0);\n          tone(810, .16, \"sine\", .025, .08);\n        } else if (name === \"win\") {\n          tone(440, .16, \"triangle\", .045, 0);\n          tone(554, .18, \"triangle\", .045, .11);\n          tone(659, .23, \"sine\", .05, .22);\n          tone(988, .32, \"sine\", .04, .34);\n        }\n      }\n    };\n  }\n\n  function updateSoundButtons() {\n    root.classList.toggle(\"htc-muted\", !progress.sound);\n    root.querySelectorAll('[data-htc-action=\"sound\"]').forEach(function (button) {\n      button.setAttribute(\"aria-label\", progress.sound ? \"Sound on\" : \"Sound muted\");\n      button.setAttribute(\"aria-pressed\", progress.sound ? \"false\" : \"true\");\n    });\n  }\n\n  function modalShell(title, text, buttons, levelMode) {\n    dialog.className = \"htc-dialog\" + (levelMode ? \" htc-level-dialog\" : \"\");\n    dialog.innerHTML = \"<h2>\" + title + \"<\/h2><p>\" + text + \"<\/p>\" + buttons;\n    overlay.hidden = false;\n    state.paused = true;\n  }\n\n  function closeModal() {\n    overlay.hidden = true;\n    state.modal = \"\";\n    state.paused = false;\n  }\n\n  function showStart() {\n    var hasProgress = progress.unlocked > 1 || Object.keys(progress.completed).length > 0;\n    var buttons = '<div class=\"htc-menu-grid\">' +\n      '<button type=\"button\" class=\"htc-menu-btn htc-primary\" data-htc-action=\"' + (hasProgress ? \"continue\" : \"new-game\") + '\">' + (hasProgress ? \"Return to the Honey Library\" : \"Open the First Golden Thread\") + '<\/button>' +\n      '<button type=\"button\" class=\"htc-menu-btn\" data-htc-action=\"levels\">Archive Map<\/button>' +\n      '<button type=\"button\" class=\"htc-menu-btn\" data-htc-action=\"new-game\">Begin a New Archive Route<\/button>' +\n      '<button type=\"button\" class=\"htc-menu-btn htc-secondary\" data-htc-action=\"how\">How to Connect<\/button>' +\n    '<\/div>';\n    modalShell(\"Honeythread Conduits\", \"Rotate the conduit tiles until honeylight from every Archive Lamp reaches each Reading Beacon. Fifty library routes, ratings, and unlocked stages are saved on this device.\", buttons, false);\n    state.modal = \"start\";\n  }\n\n  function showHow() {\n    var buttons = '<div class=\"htc-menu-grid htc-single\"><button type=\"button\" class=\"htc-menu-btn htc-primary\" data-htc-action=\"main-menu\">Back to the Honey Library<\/button><\/div>';\n    modalShell(\"Guide the Honeylight\", \"Tap a movable conduit tile to rotate it clockwise. Connect every Reading Beacon to an Archive Lamp. Brass-sealed tiles stay fixed, four-way Bookplate Junctions carry honeylight in every direction, Undo restores one turn, and Golden Hint reveals a tile that still needs alignment.\", buttons, false);\n    state.modal = \"how\";\n  }\n\n  function showPause() {\n    if (state.winning || !state.level) return;\n    var buttons = '<div class=\"htc-menu-grid\">' +\n      '<button type=\"button\" class=\"htc-menu-btn htc-primary\" data-htc-action=\"resume\">Resume the Golden Thread<\/button>' +\n      '<button type=\"button\" class=\"htc-menu-btn\" data-htc-action=\"restart\">Restart Route<\/button>' +\n      '<button type=\"button\" class=\"htc-menu-btn\" data-htc-action=\"levels\">Archive Map<\/button>' +\n      '<button type=\"button\" class=\"htc-menu-btn htc-secondary\" data-htc-action=\"main-menu\">Honey Library Menu<\/button>' +\n    '<\/div>';\n    modalShell(\"The Reading Lamps Are Resting\", \"The Archive Lamps will hold their golden glow while the reading room rests. Resume whenever you are ready to continue guiding honeylight across the catalogue table.\", buttons, false);\n    state.modal = \"pause\";\n  }\n\n  function showRestartConfirm() {\n    if (!state.level) return;\n    var buttons = '<div class=\"htc-menu-grid\">' +\n      '<button type=\"button\" class=\"htc-menu-btn\" data-htc-action=\"cancel\">Keep Playing<\/button>' +\n      '<button type=\"button\" class=\"htc-menu-btn htc-primary\" data-htc-action=\"restart-now\">Restart Route<\/button>' +\n    '<\/div>';\n    modalShell(\"Reset this golden conduit?\", \"Every conduit tile will return to its opening rotation and the turn counter will begin again.\", buttons, false);\n    state.modal = \"restart\";\n  }\n\n  function showNewConfirm() {\n    if (Object.keys(progress.completed).length === 0 ? progress.unlocked === 1 : false) {\n      progress = defaultProgress();\n      saveProgress();\n      loadLevel(0, true);\n      return;\n    }\n    var buttons = '<div class=\"htc-menu-grid\">' +\n      '<button type=\"button\" class=\"htc-menu-btn\" data-htc-action=\"main-menu\">Cancel<\/button>' +\n      '<button type=\"button\" class=\"htc-menu-btn htc-primary\" data-htc-action=\"new-now\">Begin New Route<\/button>' +\n    '<\/div>';\n    modalShell(\"Begin a new library conduit?\", \"This clears unlocked routes and ratings before opening Level 1.\", buttons, false);\n    state.modal = \"new\";\n  }\n\n  function showTutorial(level) {\n    if (!level.tutorial || progress.tutorialSeen[String(level.number)]) return;\n    var buttons = '<div class=\"htc-menu-grid htc-single\"><button type=\"button\" class=\"htc-menu-btn htc-primary\" data-htc-action=\"tutorial-close\">Light the First Thread<\/button><\/div>';\n    modalShell(level.name, level.tutorial, buttons, false);\n    state.modal = \"tutorial\";\n  }\n\n  function showLevels(page) {\n    state.page = clamp(typeof page === \"number\" ? page : Math.floor((progress.last - 1) \/ 10), 0, 4);\n    var start = state.page * 10;\n    var cells = \"\";\n\n    for (var i = start; i < start + 10; i += 1) {\n      var unlocked = i + 1 <= progress.unlocked;\n      var rating = Number(progress.completed[String(i + 1)] || 0);\n      var stars = '<span class=\"htc-mini-seals\">';\n      for (var a = 1; a <= 3; a += 1) {\n        stars += '<i class=\"htc-mini-seal' + (a <= rating ? \" htc-mini-seal-earned\" : \"\") + '\"><\/i>';\n      }\n      stars += \"<\/span>\";\n      cells += '<button type=\"button\" class=\"htc-level-btn' + (unlocked ? \"\" : \" htc-level-locked\") + '\" data-htc-action=\"choose-level\" data-htc-level=\"' + (i + 1) + '\"' + (unlocked ? \"\" : \" disabled\") + '><span>' + (i + 1) + '<\/span><small>' + (unlocked ? levels[i].name : \"Shelf Locked\") + '<\/small>' + stars + '<\/button>';\n    }\n\n    var nav = '<div class=\"htc-page-nav\">' +\n      '<button type=\"button\" class=\"htc-menu-btn\" data-htc-action=\"level-prev\"' + (state.page === 0 ? \" disabled\" : \"\") + '>Previous<\/button>' +\n      '<button type=\"button\" class=\"htc-menu-btn htc-secondary\" data-htc-action=\"main-menu\">Honey Library Menu<\/button>' +\n      '<button type=\"button\" class=\"htc-menu-btn\" data-htc-action=\"level-next\"' + (state.page === 4 ? \" disabled\" : \"\") + '>Next<\/button>' +\n    '<\/div>';\n\n    modalShell(\"Honey Library Map \" + (start + 1) + \"-\" + (start + 10), \"Choose any honeylight route that has already been unlocked on the catalogue table.\", '<div class=\"htc-level-grid\">' + cells + '<\/div>' + nav, true);\n    state.modal = \"levels\";\n  }\n\n  function showWin(rating) {\n    var isLast = state.levelIndex === levels.length - 1;\n    var stars = '<div class=\"htc-rating-row\">';\n    for (var i = 1; i <= 3; i += 1) {\n      stars += '<span class=\"htc-rating-seal' + (i <= rating ? \" htc-rating-seal-earned\" : \"\") + '\" style=\"animation-delay:' + (i * .08) + 's\"><\/span>';\n    }\n    stars += \"<\/div>\";\n\n    var results = '<div class=\"htc-result-line\"><span>Turns <strong>' + state.moves + '<\/strong><\/span><span>Par <strong>' + state.level.targetMoves + '<\/strong><\/span><\/div>';\n    var buttons = '<div class=\"htc-menu-grid\">' +\n      '<button type=\"button\" class=\"htc-menu-btn\" data-htc-action=\"replay\">Trace It Again<\/button>' +\n      '<button type=\"button\" class=\"htc-menu-btn htc-primary\" data-htc-action=\"' + (isLast ? \"main-menu\" : \"next\") + '\">' + (isLast ? \"Close the Archive\" : \"Next Golden Route\") + '<\/button>' +\n      '<button type=\"button\" class=\"htc-menu-btn htc-secondary\" data-htc-action=\"levels\">Archive Map<\/button>' +\n      '<button type=\"button\" class=\"htc-menu-btn\" data-htc-action=\"main-menu\">Honey Library Menu<\/button>' +\n    '<\/div>';\n\n    modalShell(isLast ? \"Every Beacon Is Glowing\" : \"Golden Conduit Complete\", isLast ? \"All fifty conduits now carry honeylight across the Honey Library.\" : \"The final Reading Beacon received its honeylight, and another archive route awakened beneath the amber lamps.\", stars + results + buttons, false);\n    state.modal = \"win\";\n  }\n\n  function showToast(message) {\n    clearTimeout(state.toastTimer);\n    toast.textContent = message;\n    toast.classList.add(\"htc-toast-show\");\n    state.toastTimer = setTimeout(function () {\n      toast.classList.remove(\"htc-toast-show\");\n    }, 2100);\n  }\n\n  function loadLevel(index, forceClose) {\n    index = clamp(index, 0, levels.length - 1);\n    state.levelIndex = index;\n    state.level = levels[index];\n    state.rotations = state.level.initialRotations.slice();\n    state.initialRotations = state.rotations.slice();\n    state.moves = 0;\n    state.history = [];\n    state.winning = false;\n    progress.last = index + 1;\n    saveProgress();\n    if (forceClose) closeModal();\n    renderBoard();\n    evaluateConnections();\n    updateHud();\n    showTutorial(state.level);\n  }\n\n  function restartLevel() {\n    if (!state.level) return;\n    state.rotations = state.initialRotations.slice();\n    state.moves = 0;\n    state.history = [];\n    state.winning = false;\n    closeModal();\n    renderBoard();\n    evaluateConnections();\n    updateHud();\n    showToast(\"The golden conduits returned to their opening positions.\");\n  }\n\n  function renderBoard() {\n    var level = state.level;\n    if (!level) return;\n    boardEl.innerHTML = \"\";\n    boardEl.style.gridTemplateColumns = \"repeat(\" + level.cols + \", minmax(0, 1fr))\";\n    boardEl.style.gridTemplateRows = \"repeat(\" + level.rows + \", minmax(0, 1fr))\";\n    boardEl.style.setProperty(\"--htc-gap\", level.rows >= 7 ? \"5px\" : level.rows >= 6 ? \"6px\" : \"7px\");\n    boardTitle.textContent = level.name;\n\n    for (var i = 0; i < level.masks.length; i += 1) {\n      var button = document.createElement(\"button\");\n      var mask = level.masks[i];\n      var isJunction = level.junctions.has(i);\n      var isSource = level.sources.indexOf(i) !== -1;\n      var isTarget = level.targets.indexOf(i) !== -1;\n      var isFixed = level.locked.has(i) || isJunction || isSource;\n      button.type = \"button\";\n      button.className = \"htc-tile\" + (mask === 0 ? \" htc-blank\" : \"\") + (isFixed ? \" htc-fixed\" : \"\");\n      button.dataset.htcTile = String(i);\n      button.setAttribute(\"aria-label\", isFixed ? \"Fixed golden conduit tile\" : \"Rotate golden conduit tile\");\n      if (isFixed) button.setAttribute(\"aria-disabled\", \"true\");\n\n      var turn = document.createElement(\"span\");\n      turn.className = \"htc-turn\";\n      turn.style.setProperty(\"--htc-rotation\", (state.rotations[i] * 90) + \"deg\");\n\n      if (isJunction) {\n        turn.innerHTML = '<span class=\"htc-bridge-v\"><\/span><span class=\"htc-bridge-h\"><\/span>';\n      } else if (mask === 0) {\n        turn.innerHTML = '<span class=\"htc-empty-mark\"><\/span>';\n      } else {\n        var html = \"\";\n        if (bitAnd(mask, 1)) html += '<span class=\"htc-trail-arm htc-trail-t\"><\/span>';\n        if (bitAnd(mask, 2)) html += '<span class=\"htc-trail-arm htc-trail-r\"><\/span>';\n        if (bitAnd(mask, 4)) html += '<span class=\"htc-trail-arm htc-trail-b\"><\/span>';\n        if (bitAnd(mask, 8)) html += '<span class=\"htc-trail-arm htc-trail-l\"><\/span>';\n        html += '<span class=\"htc-hub\"><\/span>';\n        turn.innerHTML = html;\n      }\n\n      button.appendChild(turn);\n\n      if (isSource) {\n        var sourceCore = document.createElement(\"span\");\n        sourceCore.className = \"htc-lamp-source\";\n        button.appendChild(sourceCore);\n      }\n\n      if (isTarget) {\n        var orderMark = document.createElement(\"span\");\n        orderMark.className = \"htc-bookmark-target\";\n        button.appendChild(orderMark);\n      }\n\n      if (level.locked.has(i)) {\n        var lock = document.createElement(\"span\");\n        lock.className = \"htc-brass-lock\";\n        button.appendChild(lock);\n      }\n\n      boardEl.appendChild(button);\n    }\n  }\n\n  function currentMaskAt(index) {\n    return rotateMask(state.level.masks[index], state.rotations[index]);\n  }\n\n  function evaluateConnections() {\n    var level = state.level;\n    var queue = level.sources.slice();\n    var connected = new Set();\n\n    while (queue.length) {\n      var current = queue.shift();\n      if (connected.has(current)) continue;\n      connected.add(current);\n\n      var row = Math.floor(current \/ level.cols);\n      var col = current % level.cols;\n      var mask = currentMaskAt(current);\n\n      for (var direction = 0; direction < 4; direction += 1) {\n        if (!bitAnd(mask, DIRS[direction])) continue;\n        var nextRow = row + DR[direction];\n        var nextCol = col + DC[direction];\n        if (nextRow < 0 || nextRow >= level.rows || nextCol < 0 || nextCol >= level.cols) continue;\n        var nextIndex = indexOf(nextRow, nextCol, level.cols);\n        var nextMask = currentMaskAt(nextIndex);\n        if (bitAnd(nextMask, OPP[direction])) queue.push(nextIndex);\n      }\n    }\n\n    state.connectedCells = connected;\n    state.completedTargets = new Set(level.targets.filter(function (target) {\n      return connected.has(target);\n    }));\n\n    updateBoardClasses();\n    updateHud();\n\n    if (state.completedTargets.size === level.targets.length ? (!state.winning ? (!state.paused ? !orientationBlocked : false) : false) : false) {\n      state.winning = true;\n      clearTimeout(state.winTimer);\n      state.winTimer = setTimeout(completeLevel, 280);\n    }\n  }\n\n  function updateBoardClasses() {\n    boardEl.querySelectorAll(\".htc-tile\").forEach(function (tile, index) {\n      tile.classList.toggle(\"htc-connected\", state.connectedCells.has(index));\n      tile.classList.toggle(\"htc-bookmark-lit\", state.completedTargets.has(index));\n    });\n  }\n\n  function updateHud() {\n    if (!state.level) return;\n    levelValue.textContent = (state.levelIndex + 1) + \" \/ 50\";\n    movesValue.textContent = String(state.moves);\n    targetsValue.textContent = state.completedTargets.size + \" \/ \" + state.level.targets.length;\n    var undoButton = root.querySelector('[data-htc-action=\"undo\"]');\n    if (undoButton) undoButton.disabled = state.history.length === 0 || state.paused || state.winning || orientationBlocked;\n  }\n\n  function rotateTile(index) {\n    if (state.paused || state.winning || orientationBlocked || !state.level) return;\n    if (state.level.locked.has(index) || state.level.junctions.has(index) || state.level.sources.indexOf(index) !== -1) {\n      var fixedTile = boardEl.querySelector('[data-htc-tile=\"' + index + '\"]');\n      if (fixedTile) {\n        fixedTile.classList.remove(\"htc-bump\");\n        void fixedTile.offsetWidth;\n        fixedTile.classList.add(\"htc-bump\");\n      }\n      audio.play(\"locked\");\n      showToast(\"That conduit is secured by a brass book seal.\");\n      return;\n    }\n\n    state.history.push({ index: index, rotation: state.rotations[index] });\n    state.rotations[index] = (state.rotations[index] + 1) % 4;\n    state.moves += 1;\n    var tile = boardEl.querySelector('[data-htc-tile=\"' + index + '\"]');\n    if (tile) {\n      var turn = tile.querySelector(\".htc-turn\");\n      if (turn) turn.style.setProperty(\"--htc-rotation\", (state.rotations[index] * 90) + \"deg\");\n    }\n    audio.play(\"turn\");\n    evaluateConnections();\n  }\n\n  function undoMove() {\n    if (state.paused || state.winning || orientationBlocked || !state.history.length) {\n      if (!state.history.length) showToast(\"There is no conduit turn to undo yet.\");\n      return;\n    }\n    var last = state.history.pop();\n    state.rotations[last.index] = last.rotation;\n    state.moves = Math.max(0, state.moves - 1);\n    var tile = boardEl.querySelector('[data-htc-tile=\"' + last.index + '\"]');\n    if (tile) {\n      var turn = tile.querySelector(\".htc-turn\");\n      if (turn) turn.style.setProperty(\"--htc-rotation\", (state.rotations[last.index] * 90) + \"deg\");\n    }\n    audio.play(\"undo\");\n    evaluateConnections();\n  }\n\n  function showHint() {\n    if (state.paused || state.winning || orientationBlocked || !state.level) return;\n    var candidates = [];\n    for (var i = 0; i < state.rotations.length; i += 1) {\n      if (state.level.locked.has(i) || state.level.junctions.has(i) || state.level.sources.indexOf(i) !== -1) continue;\n      if (state.rotations[i] !== state.level.solutionRotations[i]) candidates.push(i);\n    }\n\n    if (!candidates.length) {\n      showToast(\"The golden channels are aligned. Follow the remaining honeylight carefully.\");\n      return;\n    }\n\n    candidates.sort(function (a, b) {\n      var aConnected = state.connectedCells.has(a) ? 0 : 1;\n      var bConnected = state.connectedCells.has(b) ? 0 : 1;\n      return aConnected - bConnected;\n    });\n\n    var index = candidates[0];\n    var tile = boardEl.querySelector('[data-htc-tile=\"' + index + '\"]');\n    if (tile) {\n      tile.classList.remove(\"htc-hinting\");\n      void tile.offsetWidth;\n      tile.classList.add(\"htc-hinting\");\n      setTimeout(function () {\n        tile.classList.remove(\"htc-hinting\");\n      }, 2250);\n    }\n\n    var turnsNeeded = (4 - state.rotations[index]) % 4;\n    audio.play(\"hint\");\n    showToast(\"This conduit tile needs \" + turnsNeeded + (turnsNeeded === 1 ? \" clockwise turn.\" : \" clockwise turns.\"));\n  }\n\n  function ratingForMoves(moves, target) {\n    if (moves <= target) return 3;\n    if (moves <= target + Math.ceil(target * .28)) return 2;\n    return 1;\n  }\n\n  function completeLevel() {\n    if (!state.winning || !state.level) return;\n    var rating = ratingForMoves(state.moves, state.level.targetMoves);\n    var key = String(state.levelIndex + 1);\n    progress.completed[key] = Math.max(Number(progress.completed[key] || 0), rating);\n    progress.unlocked = Math.max(progress.unlocked, Math.min(50, state.levelIndex + 2));\n    progress.last = Math.min(50, state.levelIndex + 2);\n    saveProgress();\n    audio.play(\"win\");\n    createWinEffect();\n    setTimeout(function () {\n      showWin(rating);\n    }, 780);\n  }\n\n  function createWinEffect() {\n    winLayer.innerHTML = '<span class=\"htc-win-bookmark\"><\/span>';\n    for (var i = 0; i < 26; i += 1) {\n      var spark = document.createElement(\"span\");\n      spark.className = \"htc-honey-spark\";\n      spark.style.left = (46 + Math.random() * 8) + \"%\";\n      spark.style.top = (44 + Math.random() * 9) + \"%\";\n      spark.style.setProperty(\"--htc-dx\", ((Math.random() - .5) * 520) + \"px\");\n      spark.style.setProperty(\"--htc-dy\", ((Math.random() - .35) * 360) + \"px\");\n      spark.style.animationDelay = (Math.random() * .22) + \"s\";\n      spark.style.background = [\"#f4c542\", \"#fff1c9\", \"#fff8df\", \"#b87333\", \"#68784f\"][i % 5];\n      winLayer.appendChild(spark);\n    }\n    winLayer.hidden = false;\n    setTimeout(function () {\n      winLayer.hidden = true;\n      winLayer.innerHTML = \"\";\n    }, 1450);\n  }\n\n  function resumeGame() {\n    closeModal();\n    evaluateConnections();\n  }\n\n  function handleAction(action, element) {\n    if (!action) return;\n    if (action !== \"fullscreen\") audio.play(\"button\");\n\n    if (action === \"fullscreen\") {\n      toggleFullscreen();\n    } else if (action === \"sound\") {\n      progress.sound = !progress.sound;\n      saveProgress();\n      updateSoundButtons();\n      if (progress.sound) audio.play(\"button\");\n    } else if (action === \"pause\") {\n      showPause();\n    } else if (action === \"resume\" || action === \"cancel\") {\n      resumeGame();\n    } else if (action === \"restart\") {\n      showRestartConfirm();\n    } else if (action === \"restart-now\" || action === \"replay\") {\n      restartLevel();\n    } else if (action === \"undo\") {\n      undoMove();\n    } else if (action === \"hint\") {\n      showHint();\n    } else if (action === \"levels\") {\n      showLevels();\n    } else if (action === \"level-prev\") {\n      showLevels(state.page - 1);\n    } else if (action === \"level-next\") {\n      showLevels(state.page + 1);\n    } else if (action === \"main-menu\") {\n      showStart();\n    } else if (action === \"continue\") {\n      loadLevel(progress.last - 1, true);\n    } else if (action === \"new-game\") {\n      showNewConfirm();\n    } else if (action === \"new-now\") {\n      progress = defaultProgress();\n      saveProgress();\n      updateSoundButtons();\n      loadLevel(0, true);\n    } else if (action === \"how\") {\n      showHow();\n    } else if (action === \"tutorial-close\") {\n      progress.tutorialSeen[String(state.levelIndex + 1)] = true;\n      saveProgress();\n      resumeGame();\n    } else if (action === \"next\") {\n      loadLevel(Math.min(levels.length - 1, state.levelIndex + 1), true);\n    } else if (action === \"choose-level\") {\n      var chosen = Number(element.getAttribute(\"data-htc-level\"));\n      if (chosen <= progress.unlocked) loadLevel(chosen - 1, true);\n      else showToast(\"That golden conduit is still locked.\");\n    }\n  }\n\n  function isPhonePortrait() {\n    return false;\n  }\n\n  function updateOrientationGate() {\n    orientationBlocked = false;\n    if (orientationLayer) orientationLayer.hidden = true;\n    root.classList.remove(\"htc-orientation-blocked\");\n    updateHud();\n  }\n\n  function tryLandscapeLock() {\n    if (!screen.orientation || !screen.orientation.lock) return;\n    try {\n      var lockResult = screen.orientation.lock(\"landscape\");\n      if (lockResult ? typeof lockResult.catch === \"function\" : false) lockResult.catch(function () {});\n    } catch (error) {}\n  }\n\n  function unlockOrientation() {\n    if (!screen.orientation || !screen.orientation.unlock) return;\n    try { screen.orientation.unlock(); } catch (error) {}\n  }\n\n  function fullscreenElement() {\n    return document.fullscreenElement || document.webkitFullscreenElement || null;\n  }\n\n  function enterFallbackFullscreen() {\n    fallbackFullscreen = true;\n    root.classList.add(\"htc-fullscreen\");\n    tryLandscapeLock();\n    document.documentElement.classList.add(\"htc-page-lock\");\n    if (document.body) document.body.classList.add(\"htc-page-lock\");\n    scheduleResize();\n  }\n\n  function exitFallbackFullscreen() {\n    fallbackFullscreen = false;\n    root.classList.remove(\"htc-fullscreen\");\n    unlockOrientation();\n    document.documentElement.classList.remove(\"htc-page-lock\");\n    if (document.body) document.body.classList.remove(\"htc-page-lock\");\n    scheduleResize();\n  }\n\n  function toggleFullscreen() {\n    var active = fullscreenElement();\n    if (active) {\n      var exit = document.exitFullscreen || document.webkitExitFullscreen;\n      if (exit) {\n        try {\n          var exitResult = exit.call(document);\n          if (exitResult ? typeof exitResult.catch === \"function\" : false) exitResult.catch(function () {});\n        } catch (error) {}\n      }\n      return;\n    }\n\n    if (fallbackFullscreen) {\n      exitFallbackFullscreen();\n      return;\n    }\n\n    var request = root.requestFullscreen || root.webkitRequestFullscreen;\n    if (!request) {\n      enterFallbackFullscreen();\n      return;\n    }\n\n    try {\n      var result = request.call(root);\n      if (result ? typeof result.then === \"function\" : false) {\n        result.then(function () {\n          tryLandscapeLock();\n          scheduleResize();\n        }).catch(function () {\n          enterFallbackFullscreen();\n        });\n      } else {\n        tryLandscapeLock();\n        scheduleResize();\n      }\n    } catch (error) {\n      enterFallbackFullscreen();\n    }\n  }\n\n  function resizeGame() {\n    var isFullscreen = fullscreenElement() === root || fallbackFullscreen;\n    root.classList.toggle(\"htc-fullscreen\", isFullscreen);\n\n    var rect = root.getBoundingClientRect();\n    var width = Math.max(1, root.clientWidth || rect.width || BASE_W);\n    var height = Math.max(1, root.clientHeight || rect.height || BASE_H);\n\n    if (isFullscreen) {\n      width = Math.max(width, document.documentElement.clientWidth || 0, window.innerWidth || 0);\n      height = Math.max(height, document.documentElement.clientHeight || 0, window.innerHeight || 0);\n    }\n\n    var coarse = window.matchMedia ? window.matchMedia(\"(pointer: coarse)\").matches : false;\n    var portrait = height > width;\n    var rotateStage = portrait ? (coarse || width < 760) : false;\n\n    stage.style.width = BASE_W + \"px\";\n    stage.style.height = BASE_H + \"px\";\n    stage.style.transformOrigin = \"0 0\";\n\n    if (rotateStage) {\n      var rotatedScale = Math.min(width \/ BASE_H, height \/ BASE_W);\n      var rotatedWidth = BASE_H * rotatedScale;\n      var rotatedHeight = BASE_W * rotatedScale;\n      var left = (width - rotatedWidth) \/ 2;\n      var top = (height - rotatedHeight) \/ 2;\n      stage.style.left = \"0px\";\n      stage.style.top = \"0px\";\n      stage.style.transform = \"matrix(0,\" + rotatedScale + \",\" + (-rotatedScale) + \",0,\" + (left + rotatedWidth) + \",\" + top + \")\";\n      return;\n    }\n\n    var scale = Math.min(width \/ BASE_W, height \/ BASE_H);\n    stage.style.left = \"50%\";\n    stage.style.top = \"50%\";\n    stage.style.transformOrigin = \"center\";\n    stage.style.transform = \"translate3d(-50%, -50%, 0) scale(\" + scale + \")\";\n  }\n\n  function scheduleResize() {\n    [0, 80, 220, 420].forEach(function (delay) {\n      setTimeout(resizeGame, delay);\n    });\n  }\n\n  boardEl.addEventListener(\"click\", function (event) {\n    var tile = event.target.closest(\"[data-htc-tile]\");\n    if (!tile || !boardEl.contains(tile)) return;\n    rotateTile(Number(tile.dataset.htcTile));\n  });\n\n  root.addEventListener(\"click\", function (event) {\n    var element = event.target.closest(\"[data-htc-action]\");\n    if (!element || !root.contains(element) || element.disabled) return;\n    handleAction(element.dataset.htcAction, element);\n  });\n\n  root.addEventListener(\"keydown\", function (event) {\n    if (event.key === \"Escape\" ? (!overlay.hidden ? state.modal !== \"start\" : false) : false) {\n      event.preventDefault();\n      if (state.level) resumeGame();\n      else showStart();\n    }\n    if ((event.key === \"z\" || event.key === \"Z\") ? (event.ctrlKey || event.metaKey) : false) {\n      event.preventDefault();\n      undoMove();\n    }\n  });\n\n  document.addEventListener(\"fullscreenchange\", function () {\n    if (fullscreenElement() === root) {\n      fallbackFullscreen = false;\n      document.documentElement.classList.remove(\"htc-page-lock\");\n      if (document.body) document.body.classList.remove(\"htc-page-lock\");\n      tryLandscapeLock();\n    } else {\n      unlockOrientation();\n    }\n    updateOrientationGate();\n    scheduleResize();\n  });\n  document.addEventListener(\"webkitfullscreenchange\", function () {\n    if (fullscreenElement() === root) {\n      fallbackFullscreen = false;\n      document.documentElement.classList.remove(\"htc-page-lock\");\n      if (document.body) document.body.classList.remove(\"htc-page-lock\");\n      tryLandscapeLock();\n    } else {\n      unlockOrientation();\n    }\n    updateOrientationGate();\n    scheduleResize();\n  });\n  document.addEventListener(\"keydown\", function (event) {\n    if (event.key === \"Escape\" ? fallbackFullscreen : false) exitFallbackFullscreen();\n  });\n\n  window.addEventListener(\"resize\", function () { updateOrientationGate(); resizeGame(); }, { passive: true });\n  window.addEventListener(\"orientationchange\", function () { setTimeout(updateOrientationGate, 90); scheduleResize(); }, { passive: true });\n\n  if (window.visualViewport) {\n    window.visualViewport.addEventListener(\"resize\", function () { updateOrientationGate(); resizeGame(); }, { passive: true });\n  }\n\n  if (window.ResizeObserver) {\n    new ResizeObserver(resizeGame).observe(root);\n  }\n\n  updateSoundButtons();\n  updateOrientationGate();\n  loadLevel(Math.min(progress.last, progress.unlocked) - 1, false);\n  showStart();\n  resizeGame();\n  requestAnimationFrame(resizeGame);\n  }\n\n  if (document.readyState === \"loading\") {\n    document.addEventListener(\"DOMContentLoaded\", initializeHoneythreadConduits, { once: true });\n  } else {\n    initializeHoneythreadConduits();\n  }\n})();\n<\/script>\n\n\n\n<h2 class=\"wp-block-heading\">Rotate the Conduits and Guide the Honeylight<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The rules of <strong>Honeythread Conduits<\/strong> are simple to understand. Tap or click a movable tile to rotate it ninety degrees clockwise. Each tile contains one or more channels that may connect upward, right, downward, or left.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Honeylight begins at one or more Archive Lamps. It can enter a neighboring tile only when both tiles have open channels facing each other. A channel that points toward a closed edge cannot carry light, even if the rest of the route looks correct.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Connected tiles glow with a warm golden current, making it easy to see how far the Honeylight has travelled. Reading Beacons become fully illuminated once they are connected to an Archive Lamp. The level is completed only when every beacon on the board is glowing.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Because every tile affects its neighbors, solving a route involves more than rotating pieces randomly. Players must examine the shape of each conduit, study nearby openings, and determine how separate branches can join into one complete network.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Fifty Expanding Archive Routes<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The game includes fifty levels, beginning with compact four-by-four boards and gradually expanding into larger networks. Early stages introduce the fundamental language of the conduits: straight lines, corners, endpoints, and branching paths.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Later levels increase the board size and introduce more Reading Beacons. Larger layouts contain longer routes and more places where a single incorrect rotation can break several connections at once.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Every level has its own title inspired by the Honey Library, transforming the puzzle map into a journey through catalogue halls, bookmark galleries, reading chambers, lamp corridors, sealed archives, and hidden shelves.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Progress is saved in the browser. Completing a level unlocks the next route, while the Archive Map allows players to revisit previously opened puzzles and improve their ratings.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Archive Lamps and Reading Beacons<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Archive Lamps are the source of every Honeylight current. They remain fixed in place and cannot be rotated. Their channels show where the flow begins, giving players the first clue about how the surrounding conduits should be aligned.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Reading Beacons are the destinations that must receive the light. They appear as small golden bookmark devices embedded within the board. At first, they remain dim and quiet. When Honeylight reaches them, they brighten and release a warm glow across the parchment tile.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Some routes contain several beacons connected through different branches. A player may successfully light one part of the board while accidentally leaving another branch disconnected. Victory requires a network that powers all destinations simultaneously.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Brass-Sealed Conduits<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Beginning in later stages, some conduit tiles are protected by brass book seals. These pieces are already aligned with the intended archive route and cannot be rotated.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Fixed conduits change the way a puzzle must be approached. Instead of adjusting every tile freely, players must build the network around permanent sections. A sealed corner may determine the direction of an entire branch, while a locked straight piece may reveal the only possible connection between two regions.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tapping a fixed tile produces a small visual response and a gentle locked sound, reminding the player that the conduit is secured. These pieces are not obstacles placed without purpose. They serve as structural clues that narrow the number of possible solutions.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Bookplate Junctions<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">As the network grows more complicated, four-way Bookplate Junctions begin appearing. These permanent pieces carry Honeylight in every direction and act as major distribution points.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A junction can connect multiple branches at once, allowing one Archive Lamp to power several distant Reading Beacons. However, it can also create misleading routes. Connecting the Honeylight to a junction does not guarantee that every branch beyond it is correctly aligned.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Players must inspect each outgoing path and make sure that no necessary beacon remains isolated. The presence of a junction often turns a simple route into a network-management puzzle where several regions must be solved together.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Multiple Honeylight Sources<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Advanced levels may activate more than one Archive Lamp. A Reading Beacon can receive Honeylight from either source, but the surrounding conduits still need to form a valid connected route.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Multiple sources create new strategic possibilities. Two lamps may power separate sections of the board, or their paths may meet through a shared junction. Players must decide whether to keep the networks independent or connect them into one larger system.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This mechanic reflects the growth of the Honey Library itself. Older wings were originally powered by one lamp, while newer archive rooms added additional sources to support larger collections.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Undo and Golden Hint<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The <strong>Undo<\/strong> control reverses the most recent tile rotation. It is helpful when a promising arrangement accidentally breaks an existing Honeylight connection or when the player taps the wrong tile.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Every previous move is stored in a temporary history during the level, allowing players to step backward one rotation at a time. Undo does not solve the puzzle automatically; it simply provides room to reconsider a decision.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The <strong>Golden Hint<\/strong> searches for a movable conduit that is not currently aligned with its solved orientation. The selected tile briefly glows, and a message explains how many clockwise turns it still requires.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Hints are especially useful on large boards where several disconnected tiles may look similar. They reveal one useful correction without completing the entire route, preserving the satisfaction of solving the remaining network independently.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Turns, Par, and Three-Level Ratings<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Every rotation increases the turn counter. Each level also has a target number of moves, shown as its par value after completion.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Finishing at or below par awards the highest three-mark rating. Completing the puzzle with a small number of additional turns earns two marks, while a successful but less efficient route receives one mark.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The rating system encourages experimentation after a level has been solved. Players can return through the Archive Map, study the original layout more carefully, and attempt to restore the Honeythread Network using fewer rotations.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This creates two distinct ways to enjoy the game. A relaxed player can focus simply on lighting every beacon, while a puzzle specialist can search for the most efficient sequence of turns.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">A Warm Honey Library Atmosphere<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Honeythread Conduits<\/strong> replaces cold industrial pipework with a handcrafted network of parchment tiles, brass channels, wooden frames, archive seals, bookmarks, and warm reading lamps.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The board rests inside a detailed Honey Library room surrounded by walnut shelves, amber windows, old books, catalogue drawers, honey jars, quills, and slowly drifting golden dust. Connected channels shine like threads of liquid light, creating a clear visual distinction between active and inactive sections.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The palette uses cream, parchment, honey gold, amber, walnut brown, deep cocoa, and muted book green. These colors keep the board readable while supporting the calm and magical character of the library.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sound effects are created directly through browser audio. Rotating a tile produces a soft brass-and-paper click. Undo plays a gentle reversing tone, hints use a small golden chime, and completing a network triggers a layered archive melody.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Designed for Desktop and Mobile Play<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The game can be played with a mouse, touchscreen, or trackpad. Every conduit tile is a large button with a clear interactive area, making rotations comfortable on both desktop and mobile devices.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The interface includes pause, sound, fullscreen, restart, undo, hint, and level-map controls. Fullscreen mode expands the archive table for a more focused experience, while the responsive scaling system keeps the complete board visible on different screen sizes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">On portrait smartphones, the stage adapts to provide a wider playable view without removing access to the controls. Progress, unlocked levels, ratings, sound preference, and the most recently visited route are stored locally in the browser.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Restore the Final Honeythread Route<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Each completed conduit repairs another section of the Honey Library. Reading lamps return to life, shelf labels become visible, and forgotten passages emerge from the darkness.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The early routes teach the basic flow of Honeylight, but the final challenges demand careful observation across wide networks filled with sealed conduits, permanent junctions, numerous beacons, and multiple sources.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Completing all fifty levels means restoring the entire Honeythread Network, from the smallest reading corner to the deepest archive chamber. The final glowing route confirms that every story, letter, recipe, map, and journal is once again protected by the library\u2019s golden light.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Open the Archive Map, rotate the first parchment conduit, and follow the Honeylight as it spreads through the shelves. In <strong>Honeythread Conduits<\/strong>, every connection brings another forgotten story back into the warm glow of the Honey Library.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Honeythread Conduits is a thoughtful rotation puzzle set inside the glowing maintenance halls of the Honey Library. Players must turn parchment conduit tiles until streams of warm Honeylight can travel from every Archive Lamp to all waiting Reading Beacons. What begins as a small network of simple corners and straight passages gradually grows into a &hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12],"tags":[],"class_list":["post-36","post","type-post","status-publish","format-standard","hentry","category-puzzle"],"_links":{"self":[{"href":"https:\/\/play.produsenpagarbrc.com\/index.php?rest_route=\/wp\/v2\/posts\/36","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=36"}],"version-history":[{"count":0,"href":"https:\/\/play.produsenpagarbrc.com\/index.php?rest_route=\/wp\/v2\/posts\/36\/revisions"}],"wp:attachment":[{"href":"https:\/\/play.produsenpagarbrc.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=36"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/play.produsenpagarbrc.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=36"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/play.produsenpagarbrc.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=36"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}