{"id":13,"date":"2026-10-28T22:41:40","date_gmt":"2026-10-28T22:41:40","guid":{"rendered":"https:\/\/apk.produsenpagarbrc.com\/?p=13"},"modified":"2026-10-28T22:41:40","modified_gmt":"2026-10-28T22:41:40","slug":"honeyquill-archiveflight","status":"publish","type":"post","link":"https:\/\/play.produsenpagarbrc.com\/?p=13","title":{"rendered":"Honeyquill Archiveflight"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><strong>Honeyquill Archiveflight<\/strong> is a cozy endless flying game set inside an enormous magical library where books are stored on shelves that stretch far beyond the reach of ordinary ladders. Players guide a tiny archive bee through narrow passages between towering bookcases, collect glowing Golden Bookmarks, and search for protective Honeyglass Shields while trying to travel as far as possible without touching the shelves.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The game combines simple one-touch controls with gradually increasing speed and tighter passages. A single tap, click, or keyboard press lifts the archive bee upward, while gravity gently pulls it back down. Every movement must be timed carefully because the library corridors are filled with tall shelf gates that extend from the ceiling and floor. The farther the bee travels, the faster the archive route becomes and the more precisely each flight must be controlled.<\/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\/Honeyquill-Archiveflight-1024x768.png\" alt=\"\" class=\"wp-image-14\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">The Story of the Honeyquill Archive<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Deep beneath the oldest wing of the Honey Library lies a hidden collection known as the Honeyquill Archive. It contains unfinished stories, forgotten field journals, faded maps, recipe books, handwritten letters, and records gathered by generations of tiny librarians. Each document is marked with a Golden Bookmark that protects its memories from disappearing.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For many years, the archive remained peaceful beneath the amber lamps. Then a strange midnight draft swept through the library and scattered hundreds of Golden Bookmarks across the upper corridors. Without those bookmarks, the books slowly began losing their words. Titles faded from their covers, illustrations disappeared from parchment, and entire chapters became silent blank pages.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A small archive bee was chosen to retrieve the missing markers. Equipped with delicate wings, a tiny satchel, and a quill-shaped navigation tool, the bee entered the narrow shelf routes where ordinary librarians could not travel. These passages are dangerous because the enormous bookcases were built closely together, leaving only small openings between their upper and lower sections.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Every Golden Bookmark collected during the flight restores a fragment of the archive. The player is not simply chasing points; each successful pickup represents another memory saved from fading away.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<div id=\"honeyquill-archiveflight\" tabindex=\"0\" role=\"region\" aria-label=\"Honeyquill Archiveflight, a Honey Library flying game\">\n  <div class=\"hqa-setup-warning\" role=\"status\">Game belum aktif. JavaScript belum berhasil dijalankan. Periksa Console browser untuk melihat apakah WordPress atau plugin mengubah kode saat post disimpan.<\/div>\n  <div class=\"hqa-stage\">\n    <canvas class=\"hqa-canvas\" aria-label=\"Guide the bee librarian through shelf passages and collect golden bookmarks\"><\/canvas>\n\n    <div class=\"hqa-hud\">\n      <div class=\"hqa-left-controls\">\n        <button class=\"hqa-icon-button hqa-pause-button\" type=\"button\" aria-label=\"Pause\">\n          <span class=\"hqa-pause-icon\" aria-hidden=\"true\"><\/span>\n        <\/button>\n\n        <button class=\"hqa-icon-button hqa-sound-button\" type=\"button\" aria-label=\"Sound on\">\n          <span class=\"hqa-sound-icon\" aria-hidden=\"true\">\n            <i class=\"hqa-sound-box\"><\/i>\n            <i class=\"hqa-sound-cone\"><\/i>\n            <i class=\"hqa-wave one\"><\/i>\n            <i class=\"hqa-wave two\"><\/i>\n            <i class=\"hqa-wave three\"><\/i>\n            <i class=\"hqa-sound-slash\"><\/i>\n          <\/span>\n        <\/button>\n      <\/div>\n\n      <div class=\"hqa-score-panel\" aria-live=\"polite\">\n        <span class=\"hqa-score-label\">Archive Charms<\/span>\n        <span class=\"hqa-score-value\">0<\/span>\n        <span class=\"hqa-best\">Best 0<\/span>\n      <\/div>\n\n      <div class=\"hqa-shield-pill\">Honeyglass Shield<\/div>\n    <\/div>\n\n    <div class=\"hqa-modal hqa-show\">\n      <div class=\"hqa-modal-card\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"hqa-modal-title\">\n        <div class=\"hqa-modal-badge\" aria-hidden=\"true\">\n          <span class=\"hqa-badge-lamp\"><\/span>\n          <span class=\"hqa-badge-bee\"><\/span>\n        <\/div>\n        <p class=\"hqa-modal-title\" id=\"hqa-modal-title\">Honeyquill Archiveflight<\/p>\n        <p class=\"hqa-modal-text\">Tap, click, or press Space to guide the tiny bee librarian through the honeylit archive.<\/p>\n        <div class=\"hqa-action-row\">\n          <button class=\"hqa-action hqa-primary\" type=\"button\">Open the Archive Flight<\/button>\n          <button class=\"hqa-action hqa-secondary\" type=\"button\" hidden=\"\">Restart<\/button>\n        <\/div>\n        <p class=\"hqa-note\">Collect golden bookmarks. A Honeyglass Shield absorbs one collision.<\/p>\n      <\/div>\n    <\/div>\n\n    <button class=\"hqa-icon-button hqa-fullscreen-button\" type=\"button\" aria-label=\"Fullscreen\">\n      <span class=\"hqa-fullscreen-icon\" aria-hidden=\"true\"><\/span>\n    <\/button>\n  <\/div>\n<\/div>\n<style>\nhtml.hqa-page-lock,\n  body.hqa-page-lock {\n    overflow: hidden !important;\n    overscroll-behavior: none;\n  }\n\n  #honeyquill-archiveflight,\n  #honeyquill-archiveflight * {\n    box-sizing: border-box;\n    user-select: none;\n    -webkit-user-select: none;\n    -webkit-tap-highlight-color: transparent;\n  }\n\n  #honeyquill-archiveflight {\n    --hqa-cocoa: #3f2418;\n    --hqa-walnut: #5a321f;\n    --hqa-ink: #2e1a12;\n    --hqa-amber: #b87333;\n    --hqa-gold: #f4c542;\n    --hqa-soft-gold: #e9c875;\n    --hqa-cream: #fff1c9;\n    --hqa-parchment: #fff8df;\n    --hqa-moss: #68784f;\n    --hqa-copper: #a45f43;\n    --hqa-danger: #b95f54;\n    --hqa-muted: #725b47;\n    --hqa-panel: rgba(255, 248, 223, .96);\n    --hqa-border: rgba(184, 115, 51, .52);\n    --hqa-icon-bg: linear-gradient(160deg, #7a4a2d, #5a321f 58%, #3f2418);\n    --hqa-shadow: 0 18px 42px rgba(46, 26, 18, .28);\n\n    position: relative;\n    display: block;\n    width: min(100%, 430px, calc((100dvh - 12px) * 9 \/ 16));\n    aspect-ratio: 9 \/ 16;\n    margin: 0 auto;\n    isolation: isolate;\n    color: var(--hqa-ink);\n    font-family: Arial, Helvetica, sans-serif;\n    touch-action: manipulation;\n  }\n\n  #honeyquill-archiveflight button {\n    margin: 0;\n    border: 0;\n    appearance: none;\n    -webkit-appearance: none;\n    font: inherit;\n  }\n\n  #honeyquill-archiveflight button:focus-visible {\n    outline: 3px solid rgba(244, 197, 66, .96);\n    outline-offset: 3px;\n  }\n\n  #honeyquill-archiveflight:fullscreen,\n  #honeyquill-archiveflight:-webkit-full-screen,\n  #honeyquill-archiveflight.hqa-fullscreen-fallback {\n    position: fixed;\n    inset: 0;\n    z-index: 2147483647;\n    display: grid;\n    width: 100dvw;\n    height: 100dvh;\n    max-width: none;\n    max-height: none;\n    margin: 0;\n    overflow: hidden;\n    place-items: center;\n    background:\n      radial-gradient(circle at 78% 10%, rgba(255, 241, 201, .16), transparent 24%),\n      radial-gradient(circle at 18% 22%, rgba(244, 197, 66, .12), transparent 28%),\n      linear-gradient(155deg, #2e1a12 0%, #5a321f 54%, #3f2418 100%);\n  }\n\n  #honeyquill-archiveflight::backdrop {\n    background: linear-gradient(155deg, #2e1a12 0%, #5a321f 54%, #3f2418 100%);\n  }\n\n  #honeyquill-archiveflight .hqa-stage {\n    position: relative;\n    width: 100%;\n    height: 100%;\n    aspect-ratio: 9 \/ 16;\n    overflow: hidden;\n    border: 1px solid rgba(244, 197, 66, .42);\n    border-radius: 18px;\n    background: linear-gradient(180deg, #3f2418 0%, #7a4a2d 54%, #3f2418 100%);\n    box-shadow: var(--hqa-shadow), inset 0 0 0 1px rgba(255, 241, 201, .08);\n  }\n\n  #honeyquill-archiveflight:fullscreen .hqa-stage,\n  #honeyquill-archiveflight:-webkit-full-screen .hqa-stage,\n  #honeyquill-archiveflight.hqa-fullscreen-fallback .hqa-stage {\n    width: min(100dvw, calc(100dvh * 9 \/ 16));\n    height: min(100dvh, calc(100dvw * 16 \/ 9));\n    max-width: 100dvw;\n    max-height: 100dvh;\n    margin: auto;\n    border: 0;\n    border-radius: 0;\n    box-shadow: none;\n  }\n\n  #honeyquill-archiveflight canvas {\n    position: absolute;\n    inset: 0;\n    display: block;\n    width: 100%;\n    height: 100%;\n    background: transparent;\n    transition: filter .18s ease;\n  }\n\n  #honeyquill-archiveflight .hqa-stage.hqa-modal-open canvas {\n    filter: blur(1px) brightness(.62) saturate(.88);\n  }\n\n  #honeyquill-archiveflight .hqa-hud {\n    position: absolute;\n    inset: 0;\n    z-index: 40;\n    pointer-events: none;\n  }\n\n  #honeyquill-archiveflight .hqa-left-controls {\n    position: absolute;\n    top: max(10px, calc(env(safe-area-inset-top, 0px) + 10px));\n    left: max(10px, calc(env(safe-area-inset-left, 0px) + 10px));\n    z-index: 520;\n    display: flex;\n    gap: 8px;\n    pointer-events: auto;\n  }\n\n  #honeyquill-archiveflight .hqa-icon-button {\n    display: grid;\n    width: clamp(40px, 10vw, 44px);\n    height: clamp(40px, 10vw, 44px);\n    padding: 0;\n    place-items: center;\n    border: 1px solid rgba(255, 241, 201, .74);\n    border-radius: 13px;\n    color: var(--hqa-cream);\n    cursor: pointer;\n    pointer-events: auto;\n    background: var(--hqa-icon-bg);\n    box-shadow: 0 8px 18px rgba(46, 26, 18, .28), inset 0 1px 0 rgba(255, 241, 201, .18);\n    transition: transform .14s ease, filter .14s ease, border-color .14s ease;\n  }\n\n  #honeyquill-archiveflight .hqa-icon-button:hover,\n  #honeyquill-archiveflight .hqa-icon-button:focus-visible {\n    border-color: var(--hqa-gold);\n    filter: brightness(1.10);\n    transform: translateY(-1px);\n  }\n\n  #honeyquill-archiveflight .hqa-icon-button:active,\n  #honeyquill-archiveflight .hqa-action:active {\n    transform: translateY(1px) scale(.96);\n  }\n\n  #honeyquill-archiveflight .hqa-fullscreen-button {\n    position: absolute;\n    top: max(10px, calc(env(safe-area-inset-top, 0px) + 10px));\n    right: max(10px, calc(env(safe-area-inset-right, 0px) + 10px));\n    z-index: 540;\n    visibility: visible;\n    opacity: 1;\n    pointer-events: auto;\n  }\n\n  #honeyquill-archiveflight .hqa-score-panel {\n    position: absolute;\n    top: max(10px, calc(env(safe-area-inset-top, 0px) + 10px));\n    left: 50%;\n    min-width: clamp(128px, 37vw, 158px);\n    padding: 8px 13px 9px;\n    border: 1px solid var(--hqa-border);\n    border-radius: 15px;\n    text-align: center;\n    transform: translateX(-50%);\n    background: var(--hqa-panel);\n    box-shadow: 0 10px 22px rgba(46, 26, 18, .18), inset 0 1px 0 rgba(255, 255, 255, .50);\n  }\n\n  #honeyquill-archiveflight .hqa-score-panel::before {\n    content: \"\";\n    position: absolute;\n    left: 50%;\n    top: 4px;\n    width: 46px;\n    height: 3px;\n    border-radius: 999px;\n    transform: translateX(-50%);\n    background: linear-gradient(90deg, var(--hqa-amber), var(--hqa-gold));\n  }\n\n  #honeyquill-archiveflight .hqa-score-label {\n    display: block;\n    color: var(--hqa-muted);\n    font-size: 9px;\n    font-weight: 900;\n    letter-spacing: .12em;\n    line-height: 1;\n    text-transform: uppercase;\n  }\n\n  #honeyquill-archiveflight .hqa-score-value {\n    display: block;\n    margin-top: 4px;\n    color: var(--hqa-ink);\n    font-family: Georgia, \"Times New Roman\", serif;\n    font-size: clamp(24px, 7vw, 29px);\n    font-weight: 900;\n    line-height: .95;\n  }\n\n  #honeyquill-archiveflight .hqa-best {\n    display: inline-block;\n    margin-top: 6px;\n    padding: 3px 9px;\n    border-radius: 999px;\n    color: var(--hqa-cream);\n    background: var(--hqa-walnut);\n    font-size: 9.5px;\n    font-weight: 850;\n    line-height: 1;\n  }\n\n  #honeyquill-archiveflight .hqa-shield-pill {\n    position: absolute;\n    top: max(100px, calc(env(safe-area-inset-top, 0px) + 100px));\n    left: 50%;\n    padding: 7px 13px 7px 31px;\n    border: 1px solid rgba(255, 241, 201, .74);\n    border-radius: 999px;\n    color: var(--hqa-cream);\n    background: var(--hqa-icon-bg);\n    box-shadow: 0 8px 18px rgba(46, 26, 18, .24), 0 0 18px rgba(244, 197, 66, .18);\n    font-size: 9px;\n    font-weight: 900;\n    letter-spacing: .07em;\n    text-transform: uppercase;\n    opacity: 0;\n    transform: translateX(-50%) translateY(-5px) scale(.96);\n    transition: opacity .18s ease, transform .18s ease;\n  }\n\n  #honeyquill-archiveflight .hqa-shield-pill::before {\n    content: \"\";\n    position: absolute;\n    left: 9px;\n    top: 50%;\n    width: 16px;\n    height: 14px;\n    margin-top: -7px;\n    border: 2px solid var(--hqa-cream);\n    border-radius: 5px 5px 8px 8px;\n    background: var(--hqa-gold);\n    clip-path: polygon(50% 0, 100% 22%, 88% 75%, 50% 100%, 12% 75%, 0 22%);\n    box-shadow: inset 4px 3px 0 rgba(255, 248, 223, .35), 0 0 0 2px rgba(46, 26, 18, .16);\n  }\n\n  #honeyquill-archiveflight .hqa-shield-pill.hqa-show {\n    opacity: 1;\n    transform: translateX(-50%) translateY(0) scale(1);\n  }\n\n  #honeyquill-archiveflight .hqa-modal {\n    position: absolute;\n    inset: 0;\n    z-index: 220;\n    display: none;\n    align-items: center;\n    justify-content: center;\n    padding: 22px;\n    overflow: hidden;\n    border-radius: inherit;\n    background: rgba(46, 26, 18, .56);\n    backdrop-filter: blur(7px) saturate(.92);\n  }\n\n  #honeyquill-archiveflight .hqa-modal.hqa-show {\n    display: flex;\n  }\n\n  #honeyquill-archiveflight .hqa-modal-card {\n    width: min(100%, 302px);\n    padding: 20px 18px 18px;\n    border: 1px solid var(--hqa-border);\n    border-radius: 18px;\n    text-align: center;\n    background:\n      radial-gradient(circle at 84% 6%, rgba(244, 197, 66, .22), transparent 31%),\n      radial-gradient(circle at 16% 12%, rgba(104, 120, 79, .12), transparent 34%),\n      linear-gradient(180deg, rgba(255, 248, 223, .99), rgba(255, 241, 201, .97));\n    box-shadow: 0 22px 52px rgba(46, 26, 18, .36), inset 0 1px 0 rgba(255, 255, 255, .50);\n  }\n\n  #honeyquill-archiveflight .hqa-modal-badge {\n    position: relative;\n    width: 80px;\n    height: 80px;\n    margin: 0 auto 11px;\n    border: 2px solid rgba(122, 74, 45, .76);\n    border-radius: 18px;\n    background: linear-gradient(180deg, var(--hqa-parchment), var(--hqa-cream));\n    box-shadow: 0 10px 22px rgba(46, 26, 18, .18);\n    overflow: hidden;\n  }\n\n  #honeyquill-archiveflight .hqa-badge-lamp {\n    position: absolute;\n    width: 48px;\n    height: 48px;\n    right: 5px;\n    top: 6px;\n    border-radius: 50%;\n    background: var(--hqa-gold);\n    box-shadow: inset -12px -4px 0 rgba(255, 248, 223, .76), 0 0 18px rgba(244, 197, 66, .34);\n  }\n\n  #honeyquill-archiveflight .hqa-badge-bee {\n    position: absolute;\n    left: 20px;\n    bottom: 12px;\n    width: 40px;\n    height: 27px;\n    border: 2px solid var(--hqa-ink);\n    border-radius: 50%;\n    background: repeating-linear-gradient(90deg, var(--hqa-gold) 0 8px, var(--hqa-ink) 8px 13px);\n    box-shadow: inset -4px -4px 0 rgba(46, 26, 18, .08);\n  }\n\n  #honeyquill-archiveflight .hqa-badge-bee::before,\n  #honeyquill-archiveflight .hqa-badge-bee::after {\n    content: \"\";\n    position: absolute;\n    top: -12px;\n    width: 18px;\n    height: 18px;\n    border: 2px solid rgba(184, 115, 51, .72);\n    border-radius: 50% 50% 45% 45%;\n    background: rgba(255, 248, 223, .78);\n  }\n\n  #honeyquill-archiveflight .hqa-badge-bee::before { left: -3px; transform: rotate(-25deg); }\n  #honeyquill-archiveflight .hqa-badge-bee::after { right: -3px; transform: rotate(25deg); }\n\n  #honeyquill-archiveflight .hqa-modal-title {\n    margin: 0 0 8px;\n    color: var(--hqa-ink);\n    font-family: Georgia, \"Times New Roman\", serif;\n    font-size: 24px;\n    font-weight: 900;\n    letter-spacing: -.025em;\n    line-height: 1.06;\n  }\n\n  #honeyquill-archiveflight .hqa-modal-text {\n    margin: 0;\n    color: var(--hqa-muted);\n    font-size: 13px;\n    line-height: 1.46;\n  }\n\n  #honeyquill-archiveflight .hqa-note {\n    margin: 10px 0 0;\n    color: var(--hqa-muted);\n    font-size: 11px;\n    line-height: 1.45;\n  }\n\n  #honeyquill-archiveflight .hqa-action-row {\n    display: flex;\n    flex-direction: column;\n    gap: 9px;\n    margin-top: 14px;\n  }\n\n  #honeyquill-archiveflight .hqa-action {\n    min-height: 44px;\n    padding: 0 14px;\n    border: 1px solid rgba(90, 50, 31, .18);\n    border-radius: 13px;\n    cursor: pointer;\n    font-size: 13px;\n    font-weight: 900;\n    letter-spacing: .01em;\n    transition: transform .14s ease, filter .14s ease, box-shadow .14s ease;\n  }\n\n  #honeyquill-archiveflight .hqa-action:hover,\n  #honeyquill-archiveflight .hqa-action:focus-visible {\n    transform: translateY(-1px);\n    filter: brightness(1.05);\n    box-shadow: 0 10px 18px rgba(46, 26, 18, .14);\n  }\n\n  #honeyquill-archiveflight .hqa-primary {\n    color: var(--hqa-ink);\n    background: linear-gradient(180deg, var(--hqa-parchment), var(--hqa-gold));\n  }\n\n  #honeyquill-archiveflight .hqa-secondary {\n    color: var(--hqa-cream);\n    background: linear-gradient(160deg, #7a4a2d, #5a321f 64%, #3f2418);\n  }\n\n  #honeyquill-archiveflight .hqa-pause-icon,\n  #honeyquill-archiveflight .hqa-sound-icon,\n  #honeyquill-archiveflight .hqa-fullscreen-icon {\n    position: relative;\n    display: block;\n  }\n\n  #honeyquill-archiveflight .hqa-pause-icon { width: 18px; height: 18px; }\n\n  #honeyquill-archiveflight .hqa-pause-icon::before,\n  #honeyquill-archiveflight .hqa-pause-icon::after {\n    content: \"\";\n    position: absolute;\n    top: 1px;\n    width: 5px;\n    height: 16px;\n    border-radius: 3px;\n    background: currentColor;\n  }\n\n  #honeyquill-archiveflight .hqa-pause-icon::before { left: 3px; }\n  #honeyquill-archiveflight .hqa-pause-icon::after { right: 3px; }\n\n  #honeyquill-archiveflight .hqa-sound-icon { width: 25px; height: 20px; transform: translateX(-1px); }\n\n  #honeyquill-archiveflight .hqa-sound-box,\n  #honeyquill-archiveflight .hqa-sound-cone,\n  #honeyquill-archiveflight .hqa-wave,\n  #honeyquill-archiveflight .hqa-sound-slash {\n    position: absolute;\n    display: block;\n  }\n\n  #honeyquill-archiveflight .hqa-sound-box {\n    left: 0;\n    top: 6px;\n    width: 7px;\n    height: 8px;\n    border-radius: 3px 0 0 3px;\n    background: currentColor;\n  }\n\n  #honeyquill-archiveflight .hqa-sound-cone {\n    left: 6px;\n    top: 3px;\n    width: 9px;\n    height: 14px;\n    background: currentColor;\n    clip-path: polygon(0 32%, 100% 0, 100% 100%, 0 68%);\n  }\n\n  #honeyquill-archiveflight .hqa-wave {\n    border-style: solid;\n    border-color: currentColor;\n    border-left-color: transparent;\n    border-top-color: transparent;\n    border-bottom-color: transparent;\n    border-radius: 0 999px 999px 0;\n    background: transparent;\n    transition: opacity .14s ease;\n  }\n\n  #honeyquill-archiveflight .hqa-wave.one { left: 13px; top: 7px; width: 4px; height: 6px; border-width: 2px; }\n  #honeyquill-archiveflight .hqa-wave.two { left: 15px; top: 4px; width: 7px; height: 12px; border-width: 2px; }\n  #honeyquill-archiveflight .hqa-wave.three { left: 17px; top: 1px; width: 8px; height: 18px; border-width: 2px; }\n\n  #honeyquill-archiveflight .hqa-sound-slash {\n    left: -2px;\n    top: 9px;\n    width: 27px;\n    height: 3px;\n    border-radius: 999px;\n    background: var(--hqa-danger);\n    transform: rotate(45deg) scaleX(0);\n    transform-origin: center;\n    box-shadow: 0 0 7px rgba(185, 95, 84, .35);\n    transition: transform .14s ease;\n  }\n\n  #honeyquill-archiveflight.hqa-muted .hqa-wave { opacity: 0; }\n  #honeyquill-archiveflight.hqa-muted .hqa-sound-slash { transform: rotate(45deg) scaleX(1); }\n\n  #honeyquill-archiveflight .hqa-fullscreen-icon { width: 22px; height: 22px; }\n\n  #honeyquill-archiveflight .hqa-fullscreen-icon::before {\n    content: \"\";\n    position: absolute;\n    inset: 1px;\n    background:\n      linear-gradient(currentColor,currentColor) left top \/ 9px 3px no-repeat,\n      linear-gradient(currentColor,currentColor) left top \/ 3px 9px no-repeat,\n      linear-gradient(currentColor,currentColor) right top \/ 9px 3px no-repeat,\n      linear-gradient(currentColor,currentColor) right top \/ 3px 9px no-repeat,\n      linear-gradient(currentColor,currentColor) left bottom \/ 9px 3px no-repeat,\n      linear-gradient(currentColor,currentColor) left bottom \/ 3px 9px no-repeat,\n      linear-gradient(currentColor,currentColor) right bottom \/ 9px 3px no-repeat,\n      linear-gradient(currentColor,currentColor) right bottom \/ 3px 9px no-repeat;\n  }\n\n  @media (max-width: 520px) {\n    #honeyquill-archiveflight { width: 100%; }\n  }\n\n  @media (prefers-reduced-motion: reduce) {\n    #honeyquill-archiveflight *,\n    #honeyquill-archiveflight *::before,\n    #honeyquill-archiveflight *::after {\n      animation-duration: .01ms !important;\n      transition-duration: .01ms !important;\n    }\n  }\n\/* WordPress theme compatibility and setup diagnostics *\/\n#honeyquill-archiveflight { max-width: 100%; line-height: normal; font-size: 16px; }\n#honeyquill-archiveflight .hqa-stage button { text-transform: none; }\n#honeyquill-archiveflight .hqa-setup-warning {\n  position: absolute;\n  z-index: 10000;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n  width: calc(100% - 28px);\n  max-width: 330px;\n  padding: 16px;\n  border: 2px solid #b95f54;\n  border-radius: 13px;\n  background: #fff8df;\n  color: #3f2418;\n  font: 600 13px\/1.5 Arial, sans-serif;\n  text-align: center;\n  box-shadow: 0 12px 30px rgba(0,0,0,.3);\n  pointer-events: none;\n}\n<\/style>\n<script>\n(function () {\n  \"use strict\";\n  function initializeHoneyquill() {\n  \/\/ Versi WordPress-safe: tidak memakai operator ampersand dalam JavaScript.\n\n  const root = document.getElementById(\"honeyquill-archiveflight\");\n  if (!root || root.dataset.hqaReady === \"1\") return;\n  root.dataset.hqaReady = \"1\";\n  root.dataset.hqaVersion = \"wp-safe-v2\";\n\n  const stage = root.querySelector(\".hqa-stage\");\n  const canvas = root.querySelector(\".hqa-canvas\");\n  const ctx = canvas.getContext(\"2d\");\n  const modal = root.querySelector(\".hqa-modal\");\n  const modalTitle = root.querySelector(\".hqa-modal-title\");\n  const modalText = root.querySelector(\".hqa-modal-text\");\n  const note = root.querySelector(\".hqa-note\");\n  const primaryButton = root.querySelector(\".hqa-primary\");\n  const secondaryButton = root.querySelector(\".hqa-secondary\");\n  const pauseButton = root.querySelector(\".hqa-pause-button\");\n  const soundButton = root.querySelector(\".hqa-sound-button\");\n  const fullscreenButton = root.querySelector(\".hqa-fullscreen-button\");\n  const scoreElement = root.querySelector(\".hqa-score-value\");\n  const bestElement = root.querySelector(\".hqa-best\");\n  const shieldElement = root.querySelector(\".hqa-shield-pill\");\n\n  const W = 360;\n  const H = 640;\n  const ROUTE_BOTTOM = 640;\n  const BEST_KEY = \"flipa_honeyquill_archiveflight_best_v1\";\n  const MUTE_KEY = \"flipa_honeyquill_archiveflight_muted_v1\";\n  const DPR_LIMIT = 2;\n\n  let dpr = 1;\n  let lastTime = performance.now();\n  let audioContext = null;\n  let resizeFrame = 0;\n  let fallbackFullscreen = false;\n  let isVisibleInViewport = true;\n  let player = null;\n  let gates = [];\n  let particles = [];\n  let nextGateDistance = 226;\n\n  const state = {\n    screen: \"start\",\n    score: 0,\n    best: Number(readStorage(BEST_KEY, 0)) || 0,\n    muted: readStorage(MUTE_KEY, \"0\") === \"1\",\n    gameStarted: false,\n    gameOver: false,\n    paused: false,\n    time: 0,\n    shield: false,\n    shieldFlash: 0,\n    shake: 0,\n    pulse: 0,\n    idleTime: 0,\n    justStarted: 0,\n    milestone: 0\n  };\n\n  const rand = (a, b) => a + Math.random() * (b - a);\n  const clamp = (value, min, max) => Math.max(min, Math.min(max, value));\n\n  function readStorage(key, fallback) {\n    try {\n      const value = localStorage.getItem(key);\n      return value == null ? fallback : value;\n    } catch (error) {\n      return fallback;\n    }\n  }\n\n  function writeStorage(key, value) {\n    try {\n      localStorage.setItem(key, value);\n    } catch (error) {}\n  }\n\n  function roundRect(x, y, width, height, radius) {\n    const r = Math.min(radius, width \/ 2, height \/ 2);\n    ctx.beginPath();\n    ctx.moveTo(x + r, y);\n    ctx.arcTo(x + width, y, x + width, y + height, r);\n    ctx.arcTo(x + width, y + height, x, y + height, r);\n    ctx.arcTo(x, y + height, x, y, r);\n    ctx.arcTo(x, y, x + width, y, r);\n    ctx.closePath();\n  }\n\n  function palette() {\n    return {\n      ink: \"#2e1a12\",\n      cocoa: \"#3f2418\",\n      walnut: \"#5a321f\",\n      wood: \"#7a4a2d\",\n      woodDark: \"#3b2116\",\n      amber: \"#b87333\",\n      gold: \"#f4c542\",\n      softGold: \"#e9c875\",\n      cream: \"#fff1c9\",\n      parchment: \"#fff8df\",\n      paper: \"#f8e8bd\",\n      moss: \"#68784f\",\n      leaf: \"#7e8c5b\",\n      copper: \"#a45f43\",\n      rose: \"#b8735a\",\n      glass: \"#d7ead9\",\n      glow: \"rgba(244,197,66,.34)\"\n    };\n  }\n\n  function queueResize() {\n    cancelAnimationFrame(resizeFrame);\n    resizeFrame = requestAnimationFrame(function () {\n      resizeCanvas();\n      draw();\n    });\n  }\n\n  function resizeCanvas() {\n    dpr = Math.min(window.devicePixelRatio || 1, DPR_LIMIT);\n    canvas.width = Math.round(W * dpr);\n    canvas.height = Math.round(H * dpr);\n    canvas.style.width = \"100%\";\n    canvas.style.height = \"100%\";\n    ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n    ctx.imageSmoothingEnabled = true;\n  }\n\n  function getAudioContext() {\n    if (state.muted) return null;\n    const AudioContextClass = window.AudioContext || window.webkitAudioContext;\n    if (!AudioContextClass) return null;\n    if (!audioContext) audioContext = new AudioContextClass();\n    if (audioContext.state === \"suspended\") audioContext.resume().catch(function () {});\n    return audioContext;\n  }\n\n  function playTone(ac, frequency, start, duration, volume, type) {\n    const oscillator = ac.createOscillator();\n    const gain = ac.createGain();\n    oscillator.type = type || \"sine\";\n    oscillator.frequency.setValueAtTime(frequency, start);\n    gain.gain.setValueAtTime(.0001, start);\n    gain.gain.exponentialRampToValueAtTime(volume, start + .012);\n    gain.gain.exponentialRampToValueAtTime(.0001, start + duration);\n    oscillator.connect(gain);\n    gain.connect(ac.destination);\n    oscillator.start(start);\n    oscillator.stop(start + duration + .03);\n  }\n\n  function playSound(type) {\n    if (state.muted) return;\n    const ac = getAudioContext();\n    if (!ac) return;\n    const now = ac.currentTime;\n\n    if (type === \"flap\") {\n      playTone(ac, 410, now, .065, .020, \"triangle\");\n      playTone(ac, 560, now + .025, .055, .013, \"sine\");\n    } else if (type === \"score\") {\n      playTone(ac, 640, now, .09, .024, \"sine\");\n      playTone(ac, 840, now + .045, .105, .018, \"triangle\");\n    } else if (type === \"shield\") {\n      playTone(ac, 350, now, .14, .026, \"sine\");\n      playTone(ac, 520, now + .05, .16, .022, \"triangle\");\n      playTone(ac, 720, now + .1, .18, .017, \"sine\");\n    } else if (type === \"break\") {\n      playTone(ac, 235, now, .13, .028, \"triangle\");\n      playTone(ac, 155, now + .05, .18, .022, \"sine\");\n    } else if (type === \"hit\") {\n      playTone(ac, 180, now, .17, .032, \"triangle\");\n      playTone(ac, 108, now + .06, .23, .024, \"sine\");\n    } else if (type === \"start\") {\n      playTone(ac, 392, now, .10, .020, \"sine\");\n      playTone(ac, 523, now + .05, .13, .019, \"triangle\");\n      playTone(ac, 698, now + .1, .17, .016, \"sine\");\n    } else if (type === \"pause\") {\n      playTone(ac, 350, now, .09, .018, \"triangle\");\n      playTone(ac, 250, now + .045, .11, .014, \"sine\");\n    } else if (type === \"resume\") {\n      playTone(ac, 320, now, .08, .016, \"triangle\");\n      playTone(ac, 480, now + .04, .11, .016, \"sine\");\n    } else if (type === \"milestone\") {\n      playTone(ac, 523, now, .12, .022, \"triangle\");\n      playTone(ac, 659, now + .055, .14, .020, \"sine\");\n      playTone(ac, 784, now + .11, .18, .018, \"triangle\");\n    }\n  }\n\n  function syncInterface() {\n    scoreElement.textContent = String(state.score);\n    bestElement.textContent = \"Best \" + state.best;\n    shieldElement.classList.toggle(\"hqa-show\", state.shield);\n    root.classList.toggle(\"hqa-muted\", state.muted);\n    stage.classList.toggle(\"hqa-modal-open\", modal.classList.contains(\"hqa-show\"));\n    soundButton.setAttribute(\"aria-label\", state.muted ? \"Sound muted\" : \"Sound on\");\n  }\n\n  function resetGame() {\n    state.score = 0;\n    state.gameStarted = false;\n    state.gameOver = false;\n    state.paused = false;\n    state.time = 0;\n    state.shield = false;\n    state.shieldFlash = 0;\n    state.shake = 0;\n    state.pulse = 0;\n    state.idleTime = 0;\n    state.justStarted = 0;\n    state.milestone = 0;\n    gates = [];\n    particles = [];\n    nextGateDistance = 216;\n\n    player = {\n      x: 92,\n      y: 314,\n      radius: 17,\n      vy: 0,\n      rotation: 0,\n      wingBeat: 0,\n      flapStretch: 0,\n      sparkle: 0\n    };\n\n    spawnGate(W + 112);\n    syncInterface();\n  }\n\n  function showModal(type) {\n    modal.classList.add(\"hqa-show\");\n\n    if (type === \"start\") {\n      modalTitle.textContent = \"Honeyquill Archiveflight\";\n      modalText.textContent = \"Tap, click, or press Space to guide the tiny bee librarian through the honeylit archive.\";\n      note.textContent = \"Collect golden bookmarks. A Honeyglass Shield absorbs one collision.\";\n      primaryButton.textContent = \"Open the Archive Flight\";\n      secondaryButton.hidden = true;\n    } else if (type === \"pause\") {\n      modalTitle.textContent = \"Reading Room Pause\";\n      modalText.textContent = \"The honeylit shelves wait while the little librarian rests beside the reading lamp.\";\n      note.textContent = \"Resume when you are ready to continue through the next open shelf passage.\";\n      primaryButton.textContent = \"Return to the Archive\";\n      secondaryButton.textContent = \"Restart Route\";\n      secondaryButton.hidden = false;\n    } else {\n      modalTitle.textContent = \"The Archive Route Ended\";\n      modalText.textContent = \"The little bee librarian touched a crowded shelf before reaching the next reading aisle.\";\n      note.textContent = \"Your best score is saved automatically. Follow the open shelf path and try again.\";\n      primaryButton.textContent = \"Fly the Shelves Again\";\n      secondaryButton.textContent = \"Fresh Archive Route\";\n      secondaryButton.hidden = false;\n    }\n\n    syncInterface();\n  }\n\n  function hideModal() {\n    modal.classList.remove(\"hqa-show\");\n    syncInterface();\n  }\n\n  function startGame() {\n    resetGame();\n    state.gameStarted = true;\n    state.screen = \"play\";\n    state.justStarted = .32;\n    hideModal();\n    root.focus({ preventScroll: true });\n    playSound(\"start\");\n  }\n\n  function pauseGame() {\n    if (!state.gameStarted || state.gameOver) return;\n    state.paused = true;\n    state.screen = \"pause\";\n    showModal(\"pause\");\n    playSound(\"pause\");\n  }\n\n  function resumeGame() {\n    if (!state.paused || state.gameOver) return;\n    state.paused = false;\n    state.screen = \"play\";\n    hideModal();\n    root.focus({ preventScroll: true });\n    playSound(\"resume\");\n  }\n\n  function gameOver() {\n    state.gameOver = true;\n    state.gameStarted = false;\n    state.screen = \"gameover\";\n    if (state.score > state.best) {\n      state.best = state.score;\n      writeStorage(BEST_KEY, String(state.best));\n    }\n    syncInterface();\n    showModal(\"gameover\");\n    playSound(\"hit\");\n  }\n\n  function flap(silent) {\n    if (!player) return;\n    player.vy = -248;\n    player.flapStretch = 1;\n    player.sparkle = .18;\n    if (!silent) playSound(\"flap\");\n  }\n\n  function addScore(amount, soundType) {\n    state.score += amount;\n    state.pulse = .22;\n    if (state.score > state.best) {\n      state.best = state.score;\n      writeStorage(BEST_KEY, String(state.best));\n    }\n    const currentMilestone = Math.floor(state.score \/ 10);\n    if (currentMilestone > state.milestone) {\n      state.milestone = currentMilestone;\n      playSound(\"milestone\");\n      burst(player.x + 8, player.y, 20, \"spark\");\n    } else if (soundType) {\n      playSound(soundType);\n    }\n    syncInterface();\n  }\n\n  function spawnGate(x) {\n    const gapHeight = clamp(194 - state.score * .50, 146, 194);\n    const gapY = rand(116 + gapHeight \/ 2, 572 - gapHeight \/ 2);\n    const width = rand(62, 70);\n    const charmY = clamp(gapY + rand(-gapHeight * .26, gapHeight * .26), 120, 550);\n\n    gates.push({\n      x: x,\n      width: width,\n      gapY: gapY,\n      gapHeight: gapHeight,\n      style: Math.floor(rand(0, 4)),\n      passed: false,\n      hitCooldown: 0,\n      charm: {\n        y: charmY,\n        offsetX: width * .5,\n        radius: 10,\n        collected: false,\n        spin: rand(0, Math.PI * 2)\n      },\n      shieldItem: Math.random() < .16 ? {\n        y: clamp(charmY + rand(-48, 48), 132, 532),\n        offsetX: width * .5,\n        radius: 12,\n        collected: false,\n        pulse: rand(0, Math.PI * 2)\n      } : null\n    });\n  }\n\n  function burst(x, y, count, type) {\n    const c = palette();\n    const colors = [c.cream, c.gold, c.rose, c.paper, c.softGold, c.amber];\n\n    for (let i = 0; i < count; i++) {\n      const angle = rand(0, Math.PI * 2);\n      const speed = type === \"shard\" ? rand(70, 190) : rand(35, 116);\n      const life = type === \"shard\" ? rand(.36, .72) : rand(.3, .68);\n      particles.push({\n        x: x,\n        y: y,\n        vx: Math.cos(angle) * speed,\n        vy: Math.sin(angle) * speed,\n        life: life,\n        maxLife: life,\n        radius: type === \"shard\" ? rand(2, 4.8) : rand(1.3, 3.2),\n        color: colors[Math.floor(rand(0, colors.length))],\n        gravity: type === \"shard\" ? 84 : 34,\n        crumb: Math.random() < .55,\n        rotation: rand(0, Math.PI * 2),\n        spin: rand(-7, 7),\n        fade: rand(.84, 1.04)\n      });\n    }\n  }\n\n  function circleRectangleCollision(cx, cy, radius, rx, ry, width, height) {\n    const nearestX = clamp(cx, rx, rx + width);\n    const nearestY = clamp(cy, ry, ry + height);\n    const dx = cx - nearestX;\n    const dy = cy - nearestY;\n    return dx * dx + dy * dy < radius * radius;\n  }\n\n  function breakShield(gate) {\n    state.shield = false;\n    state.shieldFlash = .36;\n    state.shake = .42;\n    player.vy = -132;\n    burst(player.x, player.y, 22, \"shard\");\n    playSound(\"break\");\n    if (gate) {\n      gate.hitCooldown = .5;\n      gate.x -= 18;\n    }\n    syncInterface();\n  }\n\n  function update(deltaTime) {\n    state.idleTime += deltaTime;\n\n    if (state.paused || state.gameOver || !state.gameStarted) {\n      player.wingBeat += deltaTime * 3;\n      player.sparkle = Math.max(0, player.sparkle - deltaTime * .4);\n      updateParticles(deltaTime * .35);\n      return;\n    }\n\n    state.time += deltaTime;\n    player.wingBeat += deltaTime * 8;\n    player.flapStretch = Math.max(0, player.flapStretch - deltaTime * 4.8);\n    player.sparkle = Math.max(0, player.sparkle - deltaTime * .7);\n    state.pulse = Math.max(0, state.pulse - deltaTime * 2.8);\n    state.shieldFlash = Math.max(0, state.shieldFlash - deltaTime * 3.2);\n    state.shake = Math.max(0, state.shake - deltaTime * 2.5);\n    state.justStarted = Math.max(0, state.justStarted - deltaTime);\n\n    const speed = Math.min(214, 121 + state.score * 1.25 + state.time * .30);\n    player.vy += 692 * deltaTime;\n    player.y += player.vy * deltaTime;\n    player.rotation = clamp(player.vy \/ 320, -1.1, 1.1);\n\n    if (player.y < 33) {\n      if (state.shield) {\n        player.y = 33;\n        breakShield(null);\n      } else {\n        gameOver();\n        return;\n      }\n    }\n\n    if (player.y > ROUTE_BOTTOM - player.radius) {\n      if (state.shield) {\n        player.y = ROUTE_BOTTOM - player.radius;\n        breakShield(null);\n      } else {\n        gameOver();\n        return;\n      }\n    }\n\n    for (const gate of gates) {\n      gate.x -= speed * deltaTime;\n      gate.hitCooldown = Math.max(0, gate.hitCooldown - deltaTime);\n\n      if (!gate.passed ? gate.x + gate.width < player.x : false) {\n        gate.passed = true;\n        addScore(1, \"score\");\n      }\n\n      collectItems(gate);\n      checkCollision(gate);\n      gate.charm.spin += deltaTime * 3.2;\n      if (gate.shieldItem) gate.shieldItem.pulse += deltaTime * 4.2;\n      if (state.gameOver) return;\n    }\n\n    const lastGate = gates[gates.length - 1];\n    if (lastGate ? lastGate.x < W - nextGateDistance : false) {\n      nextGateDistance = rand(214, 260) - Math.min(18, state.score * .42);\n      spawnGate(W + 44);\n    }\n\n    gates = gates.filter(function (gate) {\n      return gate.x + gate.width > -82;\n    });\n\n    updateParticles(deltaTime);\n  }\n\n  function collectItems(gate) {\n    if (!gate.charm.collected) {\n      const x = gate.x + gate.charm.offsetX;\n      const y = gate.charm.y;\n      const dx = player.x - x;\n      const dy = player.y - y;\n\n      if (dx * dx + dy * dy < Math.pow(player.radius + gate.charm.radius + 3, 2)) {\n        gate.charm.collected = true;\n        addScore(2, \"score\");\n        burst(x, y, 16, \"spark\");\n      }\n    }\n\n    if (gate.shieldItem ? !gate.shieldItem.collected : false) {\n      const x = gate.x + gate.shieldItem.offsetX;\n      const y = gate.shieldItem.y;\n      const dx = player.x - x;\n      const dy = player.y - y;\n\n      if (dx * dx + dy * dy < Math.pow(player.radius + gate.shieldItem.radius + 4, 2)) {\n        gate.shieldItem.collected = true;\n        state.shield = true;\n        state.shieldFlash = .46;\n        burst(x, y, 19, \"spark\");\n        playSound(\"shield\");\n        syncInterface();\n      }\n    }\n  }\n\n  function checkCollision(gate) {\n    if (gate.hitCooldown > 0) return;\n\n    const topHeight = gate.gapY - gate.gapHeight \/ 2;\n    const bottomY = gate.gapY + gate.gapHeight \/ 2;\n    const collisionX = gate.x + 8;\n    const collisionWidth = gate.width - 16;\n    const radius = player.radius * .82;\n\n    const topCollision = circleRectangleCollision(player.x, player.y, radius, collisionX, -10, collisionWidth, topHeight + 10);\n    const bottomCollision = circleRectangleCollision(player.x, player.y, radius, collisionX, bottomY, collisionWidth, H - bottomY + 10);\n\n    if (topCollision || bottomCollision) {\n      if (state.shield) breakShield(gate);\n      else {\n        burst(player.x, player.y, 26, \"shard\");\n        gameOver();\n      }\n    }\n  }\n\n  function updateParticles(deltaTime) {\n    for (const particle of particles) {\n      particle.life -= deltaTime * particle.fade;\n      particle.x += particle.vx * deltaTime;\n      particle.y += particle.vy * deltaTime;\n      particle.vy += particle.gravity * deltaTime;\n      particle.vx *= .986;\n      particle.rotation += particle.spin * deltaTime;\n    }\n\n    particles = particles.filter(function (particle) {\n      return particle.life > 0;\n    });\n  }\n\n  function draw() {\n    ctx.clearRect(0, 0, W, H);\n\n    let shakeX = 0;\n    let shakeY = 0;\n    if (state.shake > 0) {\n      const amplitude = state.shake * 9;\n      const wave = state.time * 92;\n      shakeX = Math.sin(wave) * amplitude;\n      shakeY = Math.cos(wave * 1.7) * amplitude * .34;\n    }\n\n    ctx.save();\n    ctx.translate(shakeX, shakeY);\n\n    drawHoneyLibrary();\n    drawShelfLayers();\n    drawReadingDesks();\n    drawGoldenDust();\n    gates.forEach(drawGate);\n    drawParticles();\n    drawBeeLibrarian();\n    drawArchiveLamps();\n\n    ctx.restore();\n  }\n\n  function drawHoneyLibrary() {\n    const c = palette();\n    const bg = ctx.createLinearGradient(0, 0, 0, H);\n    bg.addColorStop(0, \"#2e1a12\");\n    bg.addColorStop(.50, \"#6a3d25\");\n    bg.addColorStop(1, \"#3f2418\");\n    ctx.fillStyle = bg;\n    ctx.fillRect(0, 0, W, H);\n\n    const lampX = 286;\n    const lampY = 112;\n    const lampGlow = ctx.createRadialGradient(lampX, lampY, 8, lampX, lampY, 124);\n    lampGlow.addColorStop(0, \"rgba(255,248,223,.98)\");\n    lampGlow.addColorStop(.30, \"rgba(244,197,66,.48)\");\n    lampGlow.addColorStop(1, \"rgba(244,197,66,0)\");\n    ctx.fillStyle = lampGlow;\n    ctx.beginPath();\n    ctx.arc(lampX, lampY, 124, 0, Math.PI * 2);\n    ctx.fill();\n\n    ctx.fillStyle = c.cream;\n    roundRect(lampX - 26, lampY - 18, 52, 34, 12);\n    ctx.fill();\n    ctx.strokeStyle = c.amber;\n    ctx.lineWidth = 3;\n    ctx.stroke();\n    ctx.fillStyle = c.woodDark;\n    ctx.fillRect(lampX - 4, lampY + 16, 8, 32);\n    roundRect(lampX - 20, lampY + 45, 40, 8, 4);\n    ctx.fill();\n\n    ctx.fillStyle = \"rgba(255,241,201,.07)\";\n    ctx.fillRect(0, 0, 24, H);\n    ctx.fillRect(W - 24, 0, 24, H);\n\n    ctx.strokeStyle = \"rgba(244,197,66,.20)\";\n    ctx.lineWidth = 1;\n    for (let y = 72; y < H; y += 72) {\n      ctx.beginPath();\n      ctx.moveTo(5, y);\n      ctx.lineTo(19, y);\n      ctx.moveTo(W - 19, y);\n      ctx.lineTo(W - 5, y);\n      ctx.stroke();\n    }\n  }\n\n  function drawShelfLayers() {\n    const c = palette();\n    const backOffset = (state.idleTime * 7) % 236;\n    const frontOffset = (state.idleTime * 15) % 274;\n\n    ctx.save();\n    ctx.globalAlpha = .28;\n    for (let i = -1; i < 3; i++) {\n      drawParchmentHaze(i * 236 - backOffset + 22, 208 + (i % 2) * 52, 1.15, c.paper);\n    }\n    ctx.restore();\n\n    ctx.save();\n    ctx.globalAlpha = .22;\n    for (let i = -1; i < 3; i++) {\n      drawParchmentHaze(i * 274 - frontOffset + 36, 428 + (i % 2) * 44, 1.0, c.softGold);\n    }\n    ctx.restore();\n\n    const warmth = ctx.createLinearGradient(0, 410, 0, H);\n    warmth.addColorStop(0, \"rgba(255,241,201,0)\");\n    warmth.addColorStop(1, \"rgba(244,197,66,.10)\");\n    ctx.fillStyle = warmth;\n    ctx.fillRect(0, 410, W, H - 410);\n  }\n\n  function drawParchmentHaze(x, y, scale, color) {\n    ctx.save();\n    ctx.translate(x, y);\n    ctx.scale(scale, scale);\n    ctx.fillStyle = color;\n    ctx.beginPath();\n    ctx.arc(24, 19, 19, Math.PI, 0);\n    ctx.arc(52, 12, 28, Math.PI, 0);\n    ctx.arc(83, 20, 21, Math.PI, 0);\n    ctx.lineTo(101, 34);\n    ctx.lineTo(7, 34);\n    ctx.closePath();\n    ctx.fill();\n    ctx.restore();\n  }\n\n  function drawReadingDesks() {\n    const c = palette();\n    const y = 518;\n    const offset = (state.idleTime * 9) % 176;\n\n    ctx.fillStyle = \"rgba(46,26,18,.80)\";\n    ctx.fillRect(0, y + 56, W, 66);\n\n    for (let i = -1; i < 4; i++) {\n      const x = i * 176 - offset;\n      ctx.fillStyle = \"rgba(63,36,24,.88)\";\n      roundRect(x + 14, y + 12, 140, 88, 8);\n      ctx.fill();\n\n      ctx.strokeStyle = \"rgba(233,200,117,.34)\";\n      ctx.lineWidth = 2;\n      ctx.beginPath();\n      ctx.moveTo(x + 16, y + 36);\n      ctx.lineTo(x + 152, y + 36);\n      ctx.moveTo(x + 16, y + 72);\n      ctx.lineTo(x + 152, y + 72);\n      ctx.stroke();\n\n      const bookColors = [c.rose, c.moss, c.amber, c.gold, c.copper];\n      for (let b = 0; b < 5; b++) {\n        ctx.fillStyle = bookColors[(b + i + 8) % bookColors.length];\n        roundRect(x + 24 + b * 24, y + 44, 16, 25 + (b % 2) * 6, 3);\n        ctx.fill();\n        ctx.fillStyle = \"rgba(255,241,201,.46)\";\n        ctx.fillRect(x + 27 + b * 24, y + 49, 10, 2);\n      }\n\n      ctx.fillStyle = c.wood;\n      roundRect(x + 68, y + 78, 34, 22, 5);\n      ctx.fill();\n      ctx.fillStyle = c.cream;\n      roundRect(x + 73, y + 81, 24, 6, 3);\n      ctx.fill();\n    }\n  }\n\n  function drawArchiveLamps() {\n    const c = palette();\n    ctx.save();\n    ctx.strokeStyle = c.woodDark;\n    ctx.lineWidth = 7;\n    ctx.beginPath();\n    ctx.moveTo(-8, 18);\n    ctx.bezierCurveTo(92, 36, 252, 5, 370, 26);\n    ctx.stroke();\n\n    for (let i = 0; i < 5; i++) {\n      const x = 38 + i * 69;\n      const y = 50 + (i % 2) * 7;\n      ctx.strokeStyle = c.amber;\n      ctx.lineWidth = 1.3;\n      ctx.beginPath();\n      ctx.moveTo(x, 27);\n      ctx.lineTo(x, y - 8);\n      ctx.stroke();\n\n      const glow = ctx.createRadialGradient(x, y, 1, x, y, 20);\n      glow.addColorStop(0, \"rgba(255,248,223,.94)\");\n      glow.addColorStop(.42, \"rgba(244,197,66,.42)\");\n      glow.addColorStop(1, \"rgba(244,197,66,0)\");\n      ctx.fillStyle = glow;\n      ctx.beginPath();\n      ctx.arc(x, y, 20, 0, Math.PI * 2);\n      ctx.fill();\n\n      ctx.fillStyle = c.cream;\n      roundRect(x - 7, y - 7, 14, 14, 4);\n      ctx.fill();\n      ctx.strokeStyle = c.amber;\n      ctx.stroke();\n      ctx.fillStyle = c.gold;\n      ctx.beginPath();\n      ctx.arc(x, y, 2.6, 0, Math.PI * 2);\n      ctx.fill();\n    }\n    ctx.restore();\n  }\n\n  function drawGoldenDust() {\n    const c = palette();\n    for (let i = 0; i < 42; i++) {\n      const px = (i * 47 + state.idleTime * (4 + i % 3)) % (W + 44) - 22;\n      const py = 78 + (i * 37 + Math.sin(state.idleTime * .68 + i) * 17) % 444;\n      const radius = .9 + (i % 4) * .34;\n      const alpha = .18 + Math.sin(state.idleTime * 1.8 + i) * .09;\n      ctx.fillStyle = i % 5 === 0 ? c.glow : \"rgba(255,241,201,\" + alpha + \")\";\n      ctx.beginPath();\n      ctx.arc(px, py, radius, 0, Math.PI * 2);\n      ctx.fill();\n    }\n  }\n\n  function drawBeeLibrarian() {\n    if (!player) return;\n    const c = palette();\n\n    ctx.save();\n    const idleLift = (!state.gameStarted || state.paused) ? (!state.gameOver ? Math.sin(state.idleTime * 2.2) * 5 : 0) : 0;\n    ctx.translate(player.x, player.y + idleLift);\n    ctx.rotate(player.rotation * .13);\n\n    const wingSpread = 1 + Math.sin(player.wingBeat * 1.7) * .08 + player.flapStretch * .24;\n    const glow = ctx.createRadialGradient(0, 0, 2, 0, 0, 55 + state.shieldFlash * 40);\n    glow.addColorStop(0, state.shield ? \"rgba(255,248,223,.92)\" : \"rgba(244,197,66,.48)\");\n    glow.addColorStop(.58, state.shield ? \"rgba(215,234,217,.25)\" : \"rgba(244,197,66,.10)\");\n    glow.addColorStop(1, \"rgba(255,255,255,0)\");\n    ctx.fillStyle = glow;\n    ctx.beginPath();\n    ctx.arc(0, 0, 55 + state.shieldFlash * 20, 0, Math.PI * 2);\n    ctx.fill();\n\n    if (state.shield) {\n      ctx.strokeStyle = \"rgba(255,248,223,\" + (0.74 + state.shieldFlash * .16) + \")\";\n      ctx.lineWidth = 3;\n      ctx.beginPath();\n      ctx.arc(0, 0, 31 + Math.sin(state.time * 10) * 1.5, 0, Math.PI * 2);\n      ctx.stroke();\n      ctx.strokeStyle = \"rgba(244,197,66,.86)\";\n      ctx.lineWidth = 1.5;\n      ctx.beginPath();\n      ctx.arc(0, 0, 37 + Math.sin(state.time * 7) * 1.2, 0, Math.PI * 2);\n      ctx.stroke();\n    }\n\n    ctx.save();\n    ctx.scale(wingSpread, 1);\n    ctx.fillStyle = \"rgba(255,248,223,.82)\";\n    ctx.strokeStyle = \"rgba(244,197,66,.60)\";\n    ctx.lineWidth = 1.3;\n    ctx.beginPath();\n    ctx.moveTo(-7, -3);\n    ctx.bezierCurveTo(-31, -25, -46, -9, -38, 9);\n    ctx.bezierCurveTo(-31, 21, -18, 17, -5, 7);\n    ctx.closePath();\n    ctx.fill();\n    ctx.stroke();\n    ctx.beginPath();\n    ctx.moveTo(7, -3);\n    ctx.bezierCurveTo(31, -25, 46, -9, 38, 9);\n    ctx.bezierCurveTo(31, 21, 18, 17, 5, 7);\n    ctx.closePath();\n    ctx.fill();\n    ctx.stroke();\n    ctx.restore();\n\n    ctx.fillStyle = c.gold;\n    ctx.strokeStyle = c.woodDark;\n    ctx.lineWidth = 1.6;\n    ctx.beginPath();\n    ctx.ellipse(0, 2, 16, 20, 0, 0, Math.PI * 2);\n    ctx.fill();\n    ctx.stroke();\n\n    ctx.fillStyle = c.woodDark;\n    roundRect(-16, -2, 32, 6, 2);\n    ctx.fill();\n    roundRect(-14, 8, 28, 6, 2);\n    ctx.fill();\n\n    ctx.fillStyle = c.gold;\n    ctx.beginPath();\n    ctx.arc(0, -11, 14, 0, Math.PI * 2);\n    ctx.fill();\n    ctx.stroke();\n\n    ctx.strokeStyle = c.woodDark;\n    ctx.lineWidth = 1.4;\n    ctx.beginPath();\n    ctx.moveTo(-5, -22);\n    ctx.quadraticCurveTo(-12, -32, -15, -28);\n    ctx.moveTo(5, -22);\n    ctx.quadraticCurveTo(12, -32, 15, -28);\n    ctx.stroke();\n    ctx.fillStyle = c.gold;\n    ctx.beginPath();\n    ctx.arc(-15, -28, 2.5, 0, Math.PI * 2);\n    ctx.arc(15, -28, 2.5, 0, Math.PI * 2);\n    ctx.fill();\n\n    ctx.fillStyle = c.ink;\n    ctx.beginPath();\n    ctx.arc(-5, -12, 1.7, 0, Math.PI * 2);\n    ctx.arc(5, -12, 1.7, 0, Math.PI * 2);\n    ctx.fill();\n    ctx.strokeStyle = c.ink;\n    ctx.lineWidth = 1;\n    ctx.beginPath();\n    ctx.arc(0, -7, 3, .2, Math.PI - .2);\n    ctx.stroke();\n\n    ctx.fillStyle = c.moss;\n    roundRect(-16, 18, 32, 13, 4);\n    ctx.fill();\n    ctx.strokeStyle = c.woodDark;\n    ctx.stroke();\n    ctx.fillStyle = c.cream;\n    roundRect(-8, 20, 16, 7, 2);\n    ctx.fill();\n\n    ctx.save();\n    ctx.translate(14, 22);\n    ctx.rotate(-.52);\n    ctx.fillStyle = c.amber;\n    roundRect(-2, -13, 5, 27, 2);\n    ctx.fill();\n    ctx.fillStyle = c.parchment;\n    ctx.beginPath();\n    ctx.moveTo(-3, -15);\n    ctx.lineTo(8, -19);\n    ctx.lineTo(4, -9);\n    ctx.closePath();\n    ctx.fill();\n    ctx.restore();\n\n    if (player.sparkle > 0) {\n      for (let i = 0; i < 3; i++) {\n        const sx = -28 - i * 8;\n        const sy = 3 + Math.sin(state.time * 12 + i) * 2;\n        ctx.fillStyle = \"rgba(244,197,66,\" + Math.min(1, player.sparkle * 3) + \")\";\n        ctx.beginPath();\n        ctx.arc(sx, sy, 2.8, 0, Math.PI * 2);\n        ctx.fill();\n      }\n    }\n\n    ctx.restore();\n  }\n\n  function drawParticles() {\n    particles.forEach(function (particle) {\n      ctx.save();\n      ctx.globalAlpha = Math.max(0, particle.life \/ particle.maxLife);\n      ctx.translate(particle.x, particle.y);\n      ctx.rotate(particle.rotation);\n      ctx.fillStyle = particle.color;\n      if (particle.crumb) {\n        roundRect(-particle.radius, -particle.radius * .65, particle.radius * 2, particle.radius * 1.3, particle.radius * .45);\n        ctx.fill();\n      } else {\n        ctx.beginPath();\n        ctx.arc(0, 0, particle.radius, 0, Math.PI * 2);\n        ctx.fill();\n      }\n      ctx.restore();\n    });\n  }\n\n  function drawGate(gate) {\n    const topHeight = gate.gapY - gate.gapHeight \/ 2;\n    const bottomY = gate.gapY + gate.gapHeight \/ 2;\n\n    drawShelfGate(gate.x, -22, gate.width, topHeight + 22, true, gate.style);\n    drawShelfGate(gate.x, bottomY, gate.width, H - bottomY + 28, false, gate.style);\n\n    if (!gate.charm.collected) {\n      drawGoldenBookmark(gate.x + gate.charm.offsetX, gate.charm.y, gate.charm.radius, gate.charm.spin);\n    }\n\n    if (gate.shieldItem ? !gate.shieldItem.collected : false) {\n      drawHoneyShield(gate.x + gate.shieldItem.offsetX, gate.shieldItem.y, gate.shieldItem.radius, gate.shieldItem.pulse);\n    }\n  }\n\n  function drawShelfGate(x, y, width, height, fromTop, style) {\n    const c = palette();\n    const bodyX = x + 5;\n    const bodyWidth = width - 10;\n    const themes = [\n      [c.walnut, c.amber, c.wood],\n      [c.wood, c.moss, c.walnut],\n      [c.cocoa, c.copper, c.woodDark],\n      [c.woodDark, c.rose, c.walnut]\n    ];\n    const theme = themes[style % themes.length];\n\n    const body = ctx.createLinearGradient(bodyX, y, bodyX + bodyWidth, y + height);\n    body.addColorStop(0, theme[0]);\n    body.addColorStop(.55, theme[1]);\n    body.addColorStop(1, theme[2]);\n    ctx.fillStyle = body;\n    roundRect(bodyX, y, bodyWidth, height, 8);\n    ctx.fill();\n    ctx.strokeStyle = \"rgba(255,241,201,.38)\";\n    ctx.lineWidth = 2;\n    ctx.stroke();\n\n    ctx.save();\n    roundRect(bodyX + 4, y + 4, bodyWidth - 8, Math.max(0, height - 8), 6);\n    ctx.clip();\n\n    const bookColors = [c.rose, c.moss, c.amber, c.gold, c.copper, c.cream];\n    for (let sy = y + 34; sy < y + height - 26; sy += 62) {\n      ctx.strokeStyle = \"rgba(255,241,201,.30)\";\n      ctx.lineWidth = 3;\n      ctx.beginPath();\n      ctx.moveTo(bodyX + 6, sy + 18);\n      ctx.lineTo(bodyX + bodyWidth - 6, sy + 18);\n      ctx.stroke();\n      for (let b = 0; b < 3; b++) {\n        const bw = 9 + ((b + style) % 3) * 2;\n        const bh = 20 + ((b + style) % 2) * 8;\n        const bx = bodyX + 8 + b * (bodyWidth - 16) \/ 3;\n        ctx.fillStyle = bookColors[(b + style) % bookColors.length];\n        roundRect(bx, sy - bh + 17, bw, bh, 2);\n        ctx.fill();\n        ctx.fillStyle = \"rgba(46,26,18,.30)\";\n        ctx.fillRect(bx + 2, sy - bh + 21, Math.max(3, bw - 4), 2);\n      }\n      drawBookSeal(bodyX + bodyWidth - 13, sy - 2, Math.min(7, bodyWidth * .13), style);\n    }\n    ctx.restore();\n\n    drawShelfCap(x, fromTop ? y + height - 31 : y, width, 31, fromTop);\n  }\n\n  function drawShelfCap(x, y, width, height, fromTop) {\n    const c = palette();\n    const cap = ctx.createLinearGradient(0, y, 0, y + height);\n    cap.addColorStop(0, c.cream);\n    cap.addColorStop(.50, c.softGold);\n    cap.addColorStop(1, c.amber);\n    ctx.fillStyle = cap;\n    roundRect(x, y, width, height, 7);\n    ctx.fill();\n    ctx.strokeStyle = \"rgba(46,26,18,.56)\";\n    ctx.lineWidth = 1.5;\n    ctx.stroke();\n\n    const edge = fromTop ? y + height - 2 : y + 2;\n    for (let i = 0; i < 3; i++) {\n      const bx = x + width * (.25 + i * .25);\n      ctx.fillStyle = i === 1 ? c.moss : c.gold;\n      ctx.beginPath();\n      ctx.moveTo(bx, edge + (fromTop ? 12 : -12));\n      ctx.lineTo(bx + 5, edge + (fromTop ? 5 : -5));\n      ctx.lineTo(bx, edge + (fromTop ? 1 : -1));\n      ctx.lineTo(bx - 5, edge + (fromTop ? 5 : -5));\n      ctx.closePath();\n      ctx.fill();\n      ctx.strokeStyle = \"rgba(46,26,18,.26)\";\n      ctx.stroke();\n    }\n  }\n\n  function drawBookSeal(x, y, radius, style) {\n    const c = palette();\n    ctx.save();\n    ctx.translate(x, y);\n    ctx.fillStyle = style % 2 ? c.cream : c.gold;\n    ctx.strokeStyle = c.woodDark;\n    ctx.lineWidth = 1;\n    ctx.beginPath();\n    ctx.arc(0, 0, radius, 0, Math.PI * 2);\n    ctx.fill();\n    ctx.stroke();\n    ctx.fillStyle = c.woodDark;\n    ctx.beginPath();\n    ctx.ellipse(0, 0, radius * .42, radius * .28, 0, 0, Math.PI * 2);\n    ctx.fill();\n    ctx.strokeStyle = c.woodDark;\n    ctx.beginPath();\n    ctx.moveTo(-radius * .55, 0);\n    ctx.lineTo(radius * .55, 0);\n    ctx.stroke();\n    ctx.restore();\n  }\n\n  function drawGoldenBookmark(x, y, radius, phase) {\n    const c = palette();\n    ctx.save();\n    ctx.translate(x, y + Math.sin(phase) * 4);\n    ctx.rotate(Math.sin(phase * .2) * .18);\n\n    const aura = ctx.createRadialGradient(0, 0, 1, 0, 0, radius * 5);\n    aura.addColorStop(0, \"rgba(255,248,223,.98)\");\n    aura.addColorStop(.32, \"rgba(244,197,66,.60)\");\n    aura.addColorStop(1, \"rgba(244,197,66,0)\");\n    ctx.fillStyle = aura;\n    ctx.beginPath();\n    ctx.arc(0, 0, radius * 4.8, 0, Math.PI * 2);\n    ctx.fill();\n\n    ctx.fillStyle = c.gold;\n    ctx.strokeStyle = c.woodDark;\n    ctx.lineWidth = 1.4;\n    roundRect(-7, -13, 14, 25, 4);\n    ctx.fill();\n    ctx.stroke();\n    ctx.beginPath();\n    ctx.moveTo(-7, 8);\n    ctx.lineTo(0, 14);\n    ctx.lineTo(7, 8);\n    ctx.closePath();\n    ctx.fill();\n    ctx.stroke();\n\n    ctx.fillStyle = c.woodDark;\n    ctx.beginPath();\n    ctx.arc(0, -5, 2.2, 0, Math.PI * 2);\n    ctx.fill();\n    ctx.restore();\n  }\n\n  function drawHoneyShield(x, y, radius, pulse) {\n    const c = palette();\n    ctx.save();\n    ctx.translate(x, y + Math.sin(pulse) * 4);\n\n    const aura = ctx.createRadialGradient(0, 0, 1, 0, 0, radius * 5.8);\n    aura.addColorStop(0, \"rgba(255,248,223,.98)\");\n    aura.addColorStop(.34, \"rgba(215,234,217,.48)\");\n    aura.addColorStop(1, \"rgba(215,234,217,0)\");\n    ctx.fillStyle = aura;\n    ctx.beginPath();\n    ctx.arc(0, 0, radius * 5.2, 0, Math.PI * 2);\n    ctx.fill();\n\n    ctx.fillStyle = \"rgba(255,248,223,.88)\";\n    ctx.strokeStyle = c.gold;\n    ctx.lineWidth = 2;\n    ctx.beginPath();\n    ctx.moveTo(0, -radius - 2);\n    ctx.lineTo(radius + 3, -radius * .35);\n    ctx.lineTo(radius * .72, radius * .82);\n    ctx.lineTo(0, radius + 4);\n    ctx.lineTo(-radius * .72, radius * .82);\n    ctx.lineTo(-radius - 3, -radius * .35);\n    ctx.closePath();\n    ctx.fill();\n    ctx.stroke();\n\n    ctx.fillStyle = c.gold;\n    ctx.beginPath();\n    ctx.arc(0, 0, radius * .42, 0, Math.PI * 2);\n    ctx.fill();\n    ctx.fillStyle = c.woodDark;\n    ctx.beginPath();\n    ctx.ellipse(0, 0, radius * .20, radius * .13, 0, 0, Math.PI * 2);\n    ctx.fill();\n    ctx.restore();\n  }\n\n  function handlePrimaryAction() {\n    if (state.screen === \"pause\") resumeGame();\n    else startGame();\n  }\n\n  function handleSecondaryAction() {\n    startGame();\n  }\n\n  function isFullscreenActive() {\n    return document.fullscreenElement === root || document.webkitFullscreenElement === root;\n  }\n\n  function enterFallbackFullscreen() {\n    fallbackFullscreen = true;\n    root.classList.add(\"hqa-fullscreen-fallback\");\n    document.documentElement.classList.add(\"hqa-page-lock\");\n    if (document.body) document.body.classList.add(\"hqa-page-lock\");\n    scheduleFullscreenResize();\n  }\n\n  function exitFallbackFullscreen() {\n    fallbackFullscreen = false;\n    root.classList.remove(\"hqa-fullscreen-fallback\");\n    document.documentElement.classList.remove(\"hqa-page-lock\");\n    if (document.body) document.body.classList.remove(\"hqa-page-lock\");\n    scheduleFullscreenResize();\n  }\n\n  function toggleFullscreen() {\n    if (isFullscreenActive()) {\n      const exit = document.exitFullscreen || document.webkitExitFullscreen || document.mozCancelFullScreen || document.msExitFullscreen;\n      if (exit) {\n        try {\n          const result = exit.call(document);\n          if (result ? typeof result.catch === \"function\" : false) result.catch(function () {});\n        } catch (error) {}\n      }\n      return;\n    }\n\n    if (fallbackFullscreen) {\n      exitFallbackFullscreen();\n      return;\n    }\n\n    const request = root.requestFullscreen || root.webkitRequestFullscreen || root.mozRequestFullScreen || root.msRequestFullscreen;\n    if (!request) {\n      enterFallbackFullscreen();\n      return;\n    }\n\n    try {\n      const result = request.call(root);\n      if (result ? typeof result.catch === \"function\" : false) {\n        result.catch(function () {\n          enterFallbackFullscreen();\n        });\n      }\n    } catch (error) {\n      enterFallbackFullscreen();\n    }\n    scheduleFullscreenResize();\n  }\n\n  function scheduleFullscreenResize() {\n    [0, 80, 220, 420].forEach(function (delay) {\n      setTimeout(queueResize, delay);\n    });\n  }\n\n  function handleTapAction() {\n    if (modal.classList.contains(\"hqa-show\")) return;\n    if (state.paused || state.gameOver) return;\n    if (!state.gameStarted) {\n      startGame();\n      return;\n    }\n    flap(false);\n  }\n\n  function onPointerDown(event) {\n    if (event.target.closest(\"button\")) return;\n    event.preventDefault();\n    root.focus({ preventScroll: true });\n    handleTapAction();\n  }\n\n  function onKeyDown(event) {\n    \/\/ Use keyboard controls only while this game has focus.\n    if (!root.contains(document.activeElement)) return;\n    const target = event.target;\n    if (target ? (target.isContentEditable || \/^(INPUT|TEXTAREA|SELECT|BUTTON)$\/.test(target.tagName)) : false) return;\n    if (event.code === \"Space\" || event.code === \"ArrowUp\") {\n      event.preventDefault();\n      if (state.screen === \"pause\") resumeGame();\n      else if (modal.classList.contains(\"hqa-show\") ? (!state.gameOver ? !state.gameStarted : false) : false) startGame();\n      else handleTapAction();\n    } else if (event.code === \"KeyP\") {\n      event.preventDefault();\n      if (state.paused) resumeGame();\n      else if (state.gameStarted ? !state.gameOver : false) pauseGame();\n    }\n  }\n\n  function togglePause() {\n    if (!state.gameStarted ? !state.paused : false) return;\n    if (state.paused) resumeGame();\n    else if (!state.gameOver) pauseGame();\n  }\n\n  function gameLoop(now) {\n    const deltaTime = Math.min(.035, (now - lastTime) \/ 1000);\n    lastTime = now;\n    if (isVisibleInViewport ? !document.hidden : false) {\n      update(deltaTime);\n      draw();\n    }\n    requestAnimationFrame(gameLoop);\n  }\n\n  function bindEvents() {\n    stage.addEventListener(\"pointerdown\", onPointerDown, { passive: false });\n    stage.addEventListener(\"touchstart\", function (event) {\n      if (!event.target.closest(\"button\")) event.preventDefault();\n    }, { passive: false });\n    document.addEventListener(\"keydown\", onKeyDown);\n\n    primaryButton.addEventListener(\"click\", handlePrimaryAction);\n    secondaryButton.addEventListener(\"click\", handleSecondaryAction);\n\n    pauseButton.addEventListener(\"click\", function (event) {\n      event.stopPropagation();\n      togglePause();\n    });\n\n    soundButton.addEventListener(\"click\", function (event) {\n      event.stopPropagation();\n      state.muted = !state.muted;\n      writeStorage(MUTE_KEY, state.muted ? \"1\" : \"0\");\n      syncInterface();\n      if (!state.muted) playSound(\"resume\");\n    });\n\n    fullscreenButton.addEventListener(\"click\", function (event) {\n      event.stopPropagation();\n      toggleFullscreen();\n    });\n\n    function fullscreenChanged() {\n      if (isFullscreenActive()) {\n        fallbackFullscreen = false;\n        root.classList.remove(\"hqa-fullscreen-fallback\");\n        document.documentElement.classList.remove(\"hqa-page-lock\");\n        if (document.body) document.body.classList.remove(\"hqa-page-lock\");\n      }\n      scheduleFullscreenResize();\n    }\n\n    document.addEventListener(\"fullscreenchange\", fullscreenChanged);\n    document.addEventListener(\"webkitfullscreenchange\", fullscreenChanged);\n    document.addEventListener(\"mozfullscreenchange\", fullscreenChanged);\n    document.addEventListener(\"MSFullscreenChange\", fullscreenChanged);\n\n    document.addEventListener(\"keydown\", function (event) {\n      if (event.key === \"Escape\" ? fallbackFullscreen : false) exitFallbackFullscreen();\n    });\n\n    window.addEventListener(\"resize\", queueResize, { passive: true });\n    window.addEventListener(\"orientationchange\", function () {\n      setTimeout(scheduleFullscreenResize, 180);\n    }, { passive: true });\n\n    if (window.visualViewport) {\n      window.visualViewport.addEventListener(\"resize\", queueResize, { passive: true });\n    }\n\n    if (window.ResizeObserver) {\n      const gameResizeObserver = new ResizeObserver(queueResize);\n      gameResizeObserver.observe(root);\n    }\n\n    if (window.IntersectionObserver) {\n      const gameVisibilityObserver = new IntersectionObserver(function (entries) {\n        isVisibleInViewport = entries.some(function (entry) {\n          return entry.isIntersecting;\n        });\n        lastTime = performance.now();\n      }, { threshold: 0 });\n      gameVisibilityObserver.observe(root);\n    }\n\n    document.addEventListener(\"visibilitychange\", function () {\n      if (document.hidden ? (state.gameStarted ? (!state.paused ? !state.gameOver : false) : false) : false) pauseGame();\n    });\n  }\n\n  resetGame();\n  showModal(\"start\");\n  syncInterface();\n  bindEvents();\n  resizeCanvas();\n  requestAnimationFrame(gameLoop);\n  const setupWarning = root.querySelector(\".hqa-setup-warning\");\n  if (setupWarning) setupWarning.remove();\n  }\n  if (document.readyState === \"loading\") {\n    document.addEventListener(\"DOMContentLoaded\", initializeHoneyquill, { once: true });\n  } else {\n    initializeHoneyquill();\n  }\n})();\n<\/script>\n\n\n\n<h2 class=\"wp-block-heading\">Guide the Archive Bee Through the Library<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The controls in <strong>Honeyquill Archiveflight<\/strong> are easy to understand. Tap the screen, click inside the game area, press the Space key, or use the Up Arrow to make the archive bee flap upward. When no input is given, gravity pulls the bee downward.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This simple interaction creates a game of rhythm, observation, and careful timing. Flying too early may send the bee into the upper shelves, while waiting too long may cause it to fall into the lower bookcases. Players must constantly judge the height of the next opening and adjust the bee\u2019s position with short, controlled flaps.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The shelf gates move steadily from right to left, creating the feeling that the bee is traveling through a continuous library corridor. Passing safely through an opening adds to the score. The movement speed gradually increases as the journey continues, making later sections more intense without changing the basic controls.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Collect Golden Bookmarks<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Golden Bookmarks appear inside many of the open shelf passages. They shine with a warm amber glow and gently float in place, making them easy to recognize against the darker walnut and cocoa colors of the library.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Collecting one awards additional points and releases a burst of small golden particles. However, reaching a bookmark may require the player to move away from the safest line through a gap. This creates a meaningful choice: fly directly through the center for safety, or take a more difficult path to collect the glowing reward.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Golden Bookmarks also connect the score system to the game\u2019s story. They are not ordinary coins placed without meaning. They are the lost markers that preserve the archive\u2019s stories, turning each collected item into part of the bee\u2019s larger mission.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Find the Honeyglass Shield<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Some corridors contain a rare Honeyglass Shield. This magical item forms a warm protective ring around the archive bee and can absorb one collision.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If the bee touches a shelf while protected, the shield breaks into glowing fragments instead of ending the flight. The impact still pushes the character away from danger, but the journey can continue. Once the shield has been used, another collision will end the run unless a new shield is found.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The Honeyglass Shield adds an important layer of strategy. Players may take greater risks when protected, especially when trying to reach difficult Golden Bookmarks. At the same time, careless movement can waste the shield before the fastest and narrowest passages appear.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">A Cozy World With Growing Challenge<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Although the gameplay becomes increasingly demanding, the visual atmosphere remains warm and inviting. The world of <strong>Honeyquill Archiveflight<\/strong> is built from parchment cream, honey gold, amber, walnut brown, deep cocoa, and muted book green.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Behind the flight route are softly lit shelves, workshop windows, reading lamps, stacked books, and distant library rooms. Floating dust particles move through the golden light, while small decorative details make the archive feel active without distracting from the obstacles.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The shelf structures connect fully to the top and bottom edges of the playing area, clearly showing where the dangerous surfaces begin. Their openings remain the only safe route, allowing players to understand each challenge immediately.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Score, Best Record, and Milestones<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The score increases whenever the archive bee passes a shelf gate. Golden Bookmarks provide extra points, rewarding players who combine survival with careful collection.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The game automatically keeps track of the best score in the browser. This gives every flight a clear goal: travel farther than before, collect more bookmarks, and reach a new personal record. Special milestone sounds and particle bursts celebrate continued progress during longer runs.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Because the speed increases gradually, every attempt develops naturally. The opening moments allow players to establish a comfortable rhythm, while later sections demand quicker reactions and more precise control.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Responsive Controls for Desktop and Mobile<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Honeyquill Archiveflight<\/strong> is designed to work directly in a modern browser on desktop computers, laptops, tablets, and smartphones. Mobile players can tap the stage to flap, while desktop players can use the mouse, Space key, or Up Arrow.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The interface includes pause, sound, and fullscreen controls. Pause allows the player to rest without losing the current flight. Sound can be muted at any time, and the preference is remembered by the browser. Fullscreen mode expands the portrait game stage while keeping the controls visible and accessible.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The game also pauses automatically when the browser tab becomes hidden, helping prevent an active flight from ending while the player is away.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Restore Every Story in the Library<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The true purpose of <strong>Honeyquill Archiveflight<\/strong> is to create a small but memorable journey through a living library. Every shelf passed represents another difficult section of the archive crossed safely. Every Golden Bookmark restores a piece of a forgotten story. Every Honeyglass Shield offers one more chance to continue when the route becomes dangerous.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The controls remain simple, but mastering the flight requires patience, timing, and concentration. Players can enjoy a quick attempt during a short break or continue chasing a higher record through increasingly fast archive corridors.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Spread the archive bee\u2019s tiny wings, follow the amber light, and guide the lost bookmarks back to the Honeyquill Archive before the library\u2019s final stories fade into silence.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Honeyquill Archiveflight is a cozy endless flying game set inside an enormous magical library where books are stored on shelves that stretch far beyond the reach of ordinary ladders. Players guide a tiny archive bee through narrow passages between towering bookcases, collect glowing Golden Bookmarks, and search for protective Honeyglass Shields while trying to travel &hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10],"tags":[],"class_list":["post-13","post","type-post","status-publish","format-standard","hentry","category-casual"],"_links":{"self":[{"href":"https:\/\/play.produsenpagarbrc.com\/index.php?rest_route=\/wp\/v2\/posts\/13","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=13"}],"version-history":[{"count":0,"href":"https:\/\/play.produsenpagarbrc.com\/index.php?rest_route=\/wp\/v2\/posts\/13\/revisions"}],"wp:attachment":[{"href":"https:\/\/play.produsenpagarbrc.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=13"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/play.produsenpagarbrc.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=13"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/play.produsenpagarbrc.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=13"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}