{"id":72,"date":"2026-10-06T06:43:31","date_gmt":"2026-10-06T06:43:31","guid":{"rendered":"https:\/\/awayke.neonsnow.com.au\/?page_id=72"},"modified":"2026-10-06T06:51:35","modified_gmt":"2026-10-06T06:51:35","slug":"availability","status":"publish","type":"page","link":"https:\/\/awayke.neonsnow.com.au\/?page_id=72","title":{"rendered":"BOOK"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"72\" class=\"elementor elementor-72\">\n\t\t\t\t<div class=\"elementor-element elementor-element-ef22e6a e-flex e-con-boxed e-con e-parent\" data-id=\"ef22e6a\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-488c0d6 elementor-widget elementor-widget-html\" data-id=\"488c0d6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<style>\r\n@import url('https:\/\/fonts.googleapis.com\/css2?family=Barlow+Condensed:wght@500;600;700&family=IBM+Plex+Mono:wght@400;500&family=Manrope:wght@400;500;600&display=swap');\r\n#awayke-book {--bg: #060906; --panel: #0b100b; --panel2: #101710; --ink: #eef4e7; --muted: #8e9a86; --acid: #d2ff58; --acid2: #9fcf36; --line: rgba(222,255,192,.14); --dead: #1a2118; --max: 1580px; --gutter: clamp(20px,4vw,72px);}\r\n#awayke-book * {box-sizing: border-box;}\r\n#awayke-book {background: var(--bg); scroll-behavior: smooth;}\r\n#awayke-book {margin: 0; background: radial-gradient(circle at 75% 8%,rgba(131,178,47,.08),transparent 24%),linear-gradient(180deg,#050805,#080d08 38%,#050805); color: var(--ink); font-family: 'Manrope',Arial,sans-serif; overflow-x: hidden;}\r\n#awayke-book a {color: inherit; text-decoration: none;}\r\n#awayke-book button, #awayke-book input, #awayke-book select {font: inherit; color: inherit;}\r\n#awayke-book ::selection {background: var(--acid); color: #091007;}\r\n#awayke-book h1, #awayke-book h2, #awayke-book h3, #awayke-book h4 {font-family: 'Barlow Condensed',Arial,sans-serif; font-weight: 600; letter-spacing: .01em; margin: 0; line-height: .9; overflow-wrap: normal; word-break: normal; hyphens: none;}\r\n#awayke-book .nav {position: fixed; z-index: 90; inset: 0 0 auto 0; height: 74px; padding: 0 var(--gutter); display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; background: rgba(4,7,4,.9); backdrop-filter: blur(16px); border-bottom: 1px solid rgba(210,255,88,.12);}\r\n#awayke-book .logo {font-size: 13px; letter-spacing: .5em; white-space: nowrap;}\r\n#awayke-book .navlinks {display: flex; gap: 28px; font: 9px 'IBM Plex Mono',monospace; letter-spacing: .12em; text-transform: uppercase; color: #9ca795;}\r\n#awayke-book .navlinks a {position: relative;}\r\n#awayke-book .navlinks a::after {content: \"\"; position: absolute; left: 0; right: 100%; bottom: -8px; height: 1px; background: var(--acid); transition: right .22s;}\r\n#awayke-book .navlinks a:hover::after, #awayke-book .navlinks a.active::after {right: 0;}\r\n#awayke-book .book {justify-self: end; border: 1px solid rgba(210,255,88,.55); padding: 10px 15px; font: 8px 'IBM Plex Mono',monospace; letter-spacing: .13em; text-transform: uppercase; color: #dfff7a; background: rgba(140,183,43,.05);}\r\n#awayke-book .hero {min-height: 610px; padding: 130px var(--gutter) 58px; position: relative; overflow: hidden; border-bottom: 1px solid var(--line);}\r\n#awayke-book .hero::before {content: \"\"; position: absolute; left: 0; right: 0; top: 74px; height: 1px; background: linear-gradient(90deg,transparent,var(--acid),transparent); opacity: .25; animation: awaykeBookScanline 4.5s linear infinite;}\r\n@keyframes awaykeBookScanline { \r\n  0% {transform: translateX(-55%);} \r\n  100% {transform: translateX(55%);} \r\n}\r\n#awayke-book .hero-wrap {position: relative; z-index: 2; width: min(var(--max),100%); margin: 0 auto; display: grid; grid-template-columns: 1.05fr .95fr; gap: 48px; align-items: end;}\r\n#awayke-book .hero .kicker {font: 9px 'IBM Plex Mono',monospace; letter-spacing: .15em; text-transform: uppercase; color: #b7e751; margin-bottom: 18px;}\r\n#awayke-book .hero h1 {font-size: clamp(68px,11vw,168px); max-width: 6.7ch;}\r\n#awayke-book .hero h1 span {color: var(--acid);}\r\n#awayke-book .hero p {max-width: 46ch; margin: 22px 0 0; color: #a4ae9d; font-size: 14px; line-height: 1.8;}\r\n#awayke-book .hero-right {display: grid; grid-template-columns: 1fr 1fr; gap: 12px; align-items: end;}\r\n#awayke-book .slit {position: relative; height: 310px; overflow: hidden; border: 1px solid var(--line); background: #0a0d09;}\r\n#awayke-book .slit:nth-child(2) {height: 250px;}\r\n#awayke-book .slit img {width: 100%; height: 100%; object-fit: cover; filter: grayscale(1) contrast(1.15) brightness(.48); transform: scale(1.06); animation: awaykeBookPush 7s ease-in-out infinite;}\r\n#awayke-book .slit:nth-child(2) img {animation-delay: -2.4s;}\r\n@keyframes awaykeBookPush { \r\n  50% {transform: scale(1.13) translateY(-1.5%);} \r\n}\r\n#awayke-book .slit::after {content: \"\"; position: absolute; inset: 0; background: linear-gradient(180deg,rgba(210,255,88,.06),transparent 36%,rgba(0,0,0,.56)); mix-blend-mode: screen;}\r\n#awayke-book .slit label {position: absolute; left: 14px; bottom: 12px; z-index: 2; font: 8px 'IBM Plex Mono',monospace; letter-spacing: .12em; text-transform: uppercase; color: #cbe566;}\r\n#awayke-book .statusbar {grid-column: 1\/-1; border-top: 1px solid var(--line); padding-top: 16px; display: flex; justify-content: space-between; gap: 18px; font: 9px 'IBM Plex Mono',monospace; letter-spacing: .08em; text-transform: uppercase; color: #86917f;}\r\n#awayke-book .statusbar b {color: var(--acid); font-weight: 500;}\r\n#awayke-book .statusdot {display: inline-block; width: 7px; height: 7px; border-radius: 50%; background: var(--acid); box-shadow: 0 0 18px rgba(210,255,88,.5); margin-right: 8px; animation: awaykeBookBlink 1.9s steps(1,end) infinite;}\r\n@keyframes awaykeBookBlink { \r\n  50% {opacity: .18; box-shadow: none;} \r\n}\r\n#awayke-book main {width: min(var(--max),100%); margin: 0 auto; padding: 34px var(--gutter) 120px;}\r\n#awayke-book .deck {display: grid; grid-template-columns: 420px minmax(0,1fr); gap: 20px; align-items: start;}\r\n#awayke-book .control {position: sticky; top: 94px; display: grid; gap: 18px;}\r\n#awayke-book .panel {border: 1px solid var(--line); background: linear-gradient(180deg,#0b100b,#080c08); box-shadow: 0 28px 90px rgba(0,0,0,.26);}\r\n#awayke-book .panel-head {display: flex; justify-content: space-between; gap: 16px; align-items: end; padding: 18px 18px 14px; border-bottom: 1px solid var(--line);}\r\n#awayke-book .panel-head strong {font-size: 34px;}\r\n#awayke-book .mini {font: 8px 'IBM Plex Mono',monospace; letter-spacing: .12em; text-transform: uppercase; color: #90a182;}\r\n#awayke-book .month-nav {display: flex; gap: 6px;}\r\n#awayke-book .month-nav button {width: 36px; height: 36px; border: 1px solid var(--line); background: #111811; cursor: pointer;}\r\n#awayke-book .month-nav button:hover:not(:disabled) {background: #1b2719; border-color: #a5d83b;}\r\n#awayke-book .month-nav button:disabled {opacity: .25;}\r\n#awayke-book .calendar {padding: 14px 14px 16px;}\r\n#awayke-book .weekdays, #awayke-book .days {display: grid; grid-template-columns: repeat(7,1fr); gap: 5px;}\r\n#awayke-book .weekdays span {text-align: center; padding: 7px 0; font: 7px 'IBM Plex Mono',monospace; letter-spacing: .08em; text-transform: uppercase; color: #63705e;}\r\n#awayke-book .day {aspect-ratio: 1\/1; border: 1px solid transparent; background: transparent; color: #899681; display: grid; place-items: center; position: relative; cursor: pointer; font-size: 11px;}\r\n#awayke-book .day:hover:not(:disabled) {background: #121912; border-color: #34402f;}\r\n#awayke-book .day.selected {background: var(--acid); color: #0a0f08; border-color: var(--acid); font-weight: 700;}\r\n#awayke-book .day.today::after {content: \"\"; position: absolute; bottom: 5px; width: 4px; height: 4px; border-radius: 50%; background: #6f8d28;}\r\n#awayke-book .day.other {color: #4d5649;}\r\n#awayke-book .day:disabled {opacity: .13; cursor: not-allowed;}\r\n#awayke-book .day .dot {position: absolute; top: 4px; right: 4px; width: 3px; height: 3px; background: #9ac338; border-radius: 50%;}\r\n#awayke-book .calendar-foot {border-top: 1px solid var(--line); margin-top: 14px; padding-top: 12px; display: flex; justify-content: space-between; gap: 12px; color: #697664; font-size: 9px; line-height: 1.5;}\r\n#awayke-book .calendar-foot button {border: 0; background: none; color: #b9e24f; padding: 0; font: 8px 'IBM Plex Mono',monospace; text-transform: uppercase; letter-spacing: .1em; cursor: pointer;}\r\n#awayke-book .duration-bar {padding: 16px 18px 18px; border-top: 1px solid var(--line);}\r\n#awayke-book .duration-top {display: flex; justify-content: space-between; gap: 12px; align-items: end; margin-bottom: 12px;}\r\n#awayke-book .duration-top p {margin: 0; color: #6f7b69; font-size: 9px; line-height: 1.45; max-width: 22ch; text-align: right;}\r\n#awayke-book .durations {display: grid; grid-template-columns: 1fr 1fr; gap: 7px;}\r\n#awayke-book .duration {border: 1px solid var(--line); background: #0d130d; padding: 12px; text-align: left; cursor: pointer;}\r\n#awayke-book .duration strong {display: block; font-size: 18px;}\r\n#awayke-book .duration span {display: block; margin-top: 5px; font: 7px 'IBM Plex Mono',monospace; letter-spacing: .09em; text-transform: uppercase; color: #687462;}\r\n#awayke-book .duration:hover {border-color: #7fa32e;}\r\n#awayke-book .duration.active {background: #c8f453; color: #081006; border-color: #d8ff6f;}\r\n#awayke-book .duration.active span {color: #334a17;}\r\n#awayke-book .selection-note {padding: 16px 18px 18px; border-top: 1px solid var(--line);}\r\n#awayke-book .selection-note strong {display: block; font-size: 27px; margin: 4px 0 9px; line-height: 1;}\r\n#awayke-book .selection-note p {margin: 0; color: #71806a; font-size: 10px; line-height: 1.6;}\r\n#awayke-book .inline-actions {display: flex; gap: 8px; margin-top: 14px;}\r\n#awayke-book .inline-actions button {flex: 1; border: 1px solid var(--line); background: #101610; padding: 10px 9px; font: 7px 'IBM Plex Mono',monospace; letter-spacing: .09em; text-transform: uppercase; cursor: pointer;}\r\n#awayke-book .inline-actions button:hover {border-color: #84aa31;}\r\n#awayke-book .board {border: 1px solid var(--line); background: #081008; overflow: hidden;}\r\n#awayke-book .board::before {content: \"\"; display: block; height: 4px; background: repeating-linear-gradient(90deg,var(--acid) 0 34px,transparent 34px 54px); opacity: .45; animation: awaykeBookTape 7s linear infinite;}\r\n@keyframes awaykeBookTape { \r\n  to {background-position: 216px 0;} \r\n}\r\n#awayke-book .board-head {display: grid; grid-template-columns: 1fr auto; gap: 20px; align-items: end; padding: 22px 22px 18px; border-bottom: 1px solid var(--line);}\r\n#awayke-book .board-head h2 {font-size: 50px;}\r\n#awayke-book .board-head p {margin: 7px 0 0; color: #74816e; font-size: 10px;}\r\n#awayke-book .legend {display: flex; gap: 12px; flex-wrap: wrap; justify-content: flex-end;}\r\n#awayke-book .legend span {display: flex; gap: 7px; align-items: center; font: 7px 'IBM Plex Mono',monospace; letter-spacing: .09em; text-transform: uppercase; color: #71806a;}\r\n#awayke-book .legend i {width: 9px; height: 9px; border: 1px solid var(--line);}\r\n#awayke-book .legend .free i {background: #94bd34;}\r\n#awayke-book .legend .full i {background: #20271d;}\r\n#awayke-book .encounter {display: grid; grid-template-columns: 190px minmax(0,1fr); border-top: 1px solid var(--line);}\r\n#awayke-book .encounter:first-child {border-top: 0;}\r\n#awayke-book .encounter-info {padding: 18px; border-right: 1px solid var(--line); background: #0b100b;}\r\n#awayke-book .encounter-no {display: block; font: 7px 'IBM Plex Mono',monospace; letter-spacing: .1em; text-transform: uppercase; color: #96bd3c; margin-bottom: 10px;}\r\n#awayke-book .encounter-info h4 {font-size: 29px;}\r\n#awayke-book .encounter-info p {margin: 8px 0 0; color: #7d8976; font-size: 10px; line-height: 1.55;}\r\n#awayke-book .slots {padding: 14px; display: grid; grid-template-columns: repeat(5,minmax(80px,1fr)); gap: 7px; align-content: center;}\r\n#awayke-book .slot {border: 1px solid var(--line); background: #0e140e; min-height: 54px; padding: 10px 8px; text-align: left; cursor: pointer; transition: .17s;}\r\n#awayke-book .slot strong {display: block; font-family: 'Barlow Condensed',sans-serif; font-size: 16px;}\r\n#awayke-book .slot span {display: block; margin-top: 5px; font: 7px 'IBM Plex Mono',monospace; letter-spacing: .08em; text-transform: uppercase; color: #6c7866;}\r\n#awayke-book .slot:hover:not(:disabled) {transform: translateY(-2px); border-color: #a5cf42; background: #131d12;}\r\n#awayke-book .slot.free span {color: #98bd40;}\r\n#awayke-book .slot.full {background: #090c09; color: #465044; border-color: #161c15; cursor: not-allowed;}\r\n#awayke-book .slot.full span {color: #384037;}\r\n#awayke-book .slot.selected {background: var(--acid); color: #091008; border-color: #d8ff70; box-shadow: 0 0 0 1px rgba(210,255,88,.2),0 9px 28px rgba(139,187,42,.16);}\r\n#awayke-book .slot.selected span {color: #365015;}\r\n#awayke-book .booking-shell {margin-top: 20px; display: grid; grid-template-columns: minmax(0,1.35fr) minmax(280px,.65fr); gap: 20px;}\r\n#awayke-book .ticketform, #awayke-book .manifest {border: 1px solid var(--line); background: #0a100a;}\r\n#awayke-book .booking-top {padding: 20px 22px 16px; border-bottom: 1px solid var(--line);}\r\n#awayke-book .booking-top h2 {font-size: 52px;}\r\n#awayke-book .booking-top p {margin: 8px 0 0; color: #778370; font-size: 11px; line-height: 1.65; max-width: 56ch;}\r\n#awayke-book .booking-form {padding: 22px; display: grid; grid-template-columns: 1fr 1fr; gap: 15px 16px;}\r\n#awayke-book .booking-form .field {min-width: 0;}\r\n#awayke-book .booking-form .full {grid-column: 1\/-1;}\r\n#awayke-book .booking-form label {display: block; margin-bottom: 7px; font: 7px 'IBM Plex Mono',monospace; letter-spacing: .1em; text-transform: uppercase; color: #9ba992;}\r\n#awayke-book .booking-form input, #awayke-book .booking-form select {width: 100%; border: 1px solid var(--line); background: #070b07; padding: 13px 13px; outline: none;}\r\n#awayke-book .booking-form input:focus, #awayke-book .booking-form select:focus {border-color: #9ac43b; box-shadow: 0 0 0 2px rgba(177,227,68,.06);}\r\n#awayke-book #awayke-book-confirmBooking {border: 1px solid #c9f453; background: #c9f453; color: #0a1008; padding: 15px 17px; font: 8px 'IBM Plex Mono',monospace; letter-spacing: .12em; text-transform: uppercase; cursor: pointer;}\r\n#awayke-book .manifest {position: relative; overflow: hidden;}\r\n#awayke-book .manifest::after {content: \"\"; position: absolute; top: 0; bottom: 0; left: 50%; width: 1px; background: linear-gradient(transparent,rgba(210,255,88,.35),transparent); animation: awaykeBookSweep 4.2s linear infinite;}\r\n@keyframes awaykeBookSweep { \r\n  0% {transform: translateX(-220px);} \r\n  100% {transform: translateX(220px);} \r\n}\r\n#awayke-book .manifest-inner {padding: 22px; position: relative; z-index: 1;}\r\n#awayke-book .manifest h3 {font-size: 40px; margin-bottom: 16px;}\r\n#awayke-book .manifest p {color: #7a8773; font-size: 11px; line-height: 1.65; margin: 0 0 18px;}\r\n#awayke-book .manifest ul {list-style: none; padding: 0; margin: 0; display: grid; gap: 0;}\r\n#awayke-book .manifest li {display: flex; justify-content: space-between; gap: 14px; padding: 12px 0; border-top: 1px solid var(--line); font: 8px 'IBM Plex Mono',monospace; text-transform: uppercase; letter-spacing: .07em; color: #697564;}\r\n#awayke-book .manifest li span:last-child {color: #d5e6cb;}\r\n#awayke-book #awayke-book-bookingMessage {display: none; padding: 16px 18px; border-top: 1px solid var(--line); background: #0d150c; color: #c5d7bc; font-size: 11px; line-height: 1.7;}\r\n#awayke-book #awayke-book-bookingMessage.show {display: block;}\r\n#awayke-book #awayke-book-bookingMessage.error {color: #f0c0b8; border-top-color: #61342e; background: #170c0a;}\r\n#awayke-book .selection {position: fixed; left: 50%; bottom: 16px; transform: translate(-50%,130%); width: min(980px,calc(100% - 32px)); background: rgba(8,13,8,.95); backdrop-filter: blur(14px); border: 1px solid rgba(210,255,88,.25); padding: 14px 16px; display: flex; justify-content: space-between; gap: 18px; align-items: center; z-index: 80; opacity: 0; transition: .28s;}\r\n#awayke-book .selection.show {transform: translate(-50%,0); opacity: 1;}\r\n#awayke-book .selection .small {display: block; font: 7px 'IBM Plex Mono',monospace; letter-spacing: .1em; text-transform: uppercase; color: #a5ca45; margin-bottom: 5px;}\r\n#awayke-book .selection strong {font-size: 16px;}\r\n#awayke-book .selection .actions {display: flex; gap: 8px;}\r\n#awayke-book .selection .actions button {border: 1px solid var(--line); background: #0d140d; padding: 10px 12px; font: 7px 'IBM Plex Mono',monospace; letter-spacing: .09em; text-transform: uppercase; cursor: pointer;}\r\n#awayke-book .selection .actions button:last-child {background: #c9f453; color: #091008; border-color: #c9f453;}\r\n#awayke-book .footer {border-top: 1px solid var(--line); padding: 42px var(--gutter); display: flex; justify-content: space-between; gap: 22px; color: #596453; font: 8px 'IBM Plex Mono',monospace; letter-spacing: .08em; text-transform: uppercase;}\r\n@media (max-width:1120px) {#awayke-book .nav {grid-template-columns: 1fr auto;}#awayke-book .navlinks {display: none;}#awayke-book .hero-wrap, #awayke-book .deck, #awayke-book .booking-shell {grid-template-columns: 1fr;}#awayke-book .control {position: relative; top: auto;}#awayke-book .hero-right {max-width: 760px;}#awayke-book .encounter {grid-template-columns: 1fr;}#awayke-book .encounter-info {border-right: 0; border-bottom: 1px solid var(--line);}#awayke-book .slots {grid-template-columns: repeat(4,minmax(80px,1fr));}#awayke-book .booking-form {grid-template-columns: 1fr 1fr;}}\r\n@media (max-width:700px) {#awayke-book .kind-options {grid-template-columns: 1fr;}#awayke-book .nav {height: 64px;}#awayke-book .logo {font-size: 11px; letter-spacing: .38em;}#awayke-book .book {padding: 9px 10px;}#awayke-book .hero {padding: 112px 22px 50px; min-height: auto;}#awayke-book .hero h1 {font-size: clamp(58px,19vw,92px);}#awayke-book .hero-right {grid-template-columns: 1fr 1fr;}#awayke-book .slit {height: 210px;}#awayke-book .slit:nth-child(2) {height: 170px;}#awayke-book .statusbar {font-size: 7px; flex-direction: column; align-items: flex-start;}#awayke-book .deck {gap: 14px;}#awayke-book main {padding: 24px 22px 96px;}#awayke-book .slots {grid-template-columns: repeat(2,minmax(0,1fr));}#awayke-book .board-head {grid-template-columns: 1fr;}#awayke-book .legend {justify-content: flex-start;}#awayke-book .booking-form {grid-template-columns: 1fr;}#awayke-book .durations {grid-template-columns: 1fr 1fr;}#awayke-book .selection {width: calc(100% - 20px); bottom: 10px; flex-direction: column; align-items: flex-start;}#awayke-book .selection .actions {width: 100%;}#awayke-book .selection .actions button {flex: 1;}#awayke-book .footer {padding-left: 22px; padding-right: 22px; flex-direction: column;}}\r\n@media (prefers-reduced-motion:reduce) {#awayke-book * {animation: none !important; transition: none !important; scroll-behavior: auto !important;}}\r\n#awayke-book .booking-kind {grid-column: 1\/-1; border: 1px solid var(--line); background: #0a0f0a; padding: 14px;}\r\n#awayke-book .booking-kind .kind-label {display: block; margin-bottom: 10px; font: 8px 'IBM Plex Mono',monospace; letter-spacing: .12em; text-transform: uppercase; color: #93a887;}\r\n#awayke-book .kind-options {display: grid; grid-template-columns: 1fr 1fr; gap: 7px;}\r\n#awayke-book .kind-option {position: relative;}\r\n#awayke-book .kind-option input {position: absolute; opacity: 0; pointer-events: none;}\r\n#awayke-book .kind-option label {display: block !important; margin: 0 !important; border: 1px solid var(--line); background: #0e140e; padding: 13px 14px; cursor: pointer; color: #8f9b88 !important; font: 8px 'IBM Plex Mono',monospace !important; letter-spacing: .1em !important;}\r\n#awayke-book .kind-option input:checked+label {background: var(--acid); border-color: var(--acid); color: #0a1008 !important;}\r\n#awayke-book .private-only {display: none;}\r\n#awayke-book .private-only.show {display: block;}\r\n#awayke-book .private-note {grid-column: 1\/-1; border-left: 2px solid var(--acid2); padding: 12px 14px; background: #0a100a; color: #819078; font-size: 10px; line-height: 1.6;}\r\n#awayke-book .private-note strong {color: #d2ff58; font-weight: 500;}\r\n#awayke-book {--awk-grain-opacity: .018; --awk-vignette-edge: .205; --awk-haze: rgba(111,34,26,.016);}\r\n#awayke-book, #awayke-book {background-color: #070403;}\r\n#awayke-book {position: relative;}\r\n#awayke-book::before {content: \"\"; position: fixed; inset: 0; z-index: 8900; pointer-events: none; background: radial-gradient(ellipse at 50% 43%,transparent 50%,rgba(0,0,0,.045) 69%,rgba(0,0,0,var(--awk-vignette-edge)) 100%),\r\n    radial-gradient(circle at 52% 17%,var(--awk-haze),transparent 43%); mix-blend-mode: multiply; opacity: .80;}\r\n#awayke-book::after {content: \"\"; position: fixed; inset: -40%; z-index: 8901; pointer-events: none; opacity: var(--awk-grain-opacity); background-image: url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='180' height='180' viewBox='0 0 180 180'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.83' numOctaves='2' stitchTiles='stitch'\/%3E%3C\/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='.72'\/%3E%3C\/svg%3E\"); background-size: 180px 180px; mix-blend-mode: soft-light; animation: awaykeBookAwkGrain 1.9s steps(2,end) infinite;}\r\n@keyframes awaykeBookAwkGrain { \r\n  0% {transform: translate3d(-2%,-1%,0);} \r\n  25% {transform: translate3d(1%,2%,0);} \r\n  50% {transform: translate3d(2%,-2%,0);} \r\n  75% {transform: translate3d(-1%,1%,0);} \r\n  100% {transform: translate3d(0,0,0);} \r\n}\r\n@media (prefers-reduced-motion:reduce) {#awayke-book::after {animation: none;}}\r\n#awayke-book .logo, #awayke-book .brand {display: inline-flex !important; align-items: center; line-height: 1; letter-spacing: 0 !important; min-width: 0;}\r\n#awayke-book .logo img, #awayke-book .brand img {display: block; height: auto; max-width: none; object-fit: contain; object-position: center;}\r\n#awayke-book .logo img {width: 96px;}\r\n#awayke-book .brand img {width: 88px;}\r\n@media (max-width:620px) {#awayke-book .logo img {width: 84px;}#awayke-book .brand img {width: 78px;}}\r\n#awayke-book .logo, #awayke-book .brand {position: relative; isolation: isolate;}\r\n#awayke-book .logo::before, #awayke-book .brand::before {content: \"\"; position: absolute; inset: -10px -14px; z-index: 0; pointer-events: none; border-radius: 50%; background: radial-gradient(ellipse at center,rgba(225,229,231,.08),transparent 68%); filter: blur(11px); opacity: .075; transform: scale(.98,.72); transition: background .48s ease,opacity .48s ease,transform .48s ease;}\r\n#awayke-book .logo img, #awayke-book .brand img {position: relative; z-index: 1; mix-blend-mode: normal !important; opacity: .93; filter: brightness(.94) contrast(1.035) saturate(.92) drop-shadow(0 0 4px rgba(222,225,227,.035)) !important; transition: filter .48s ease,opacity .48s ease;}\r\n#awayke-book[data-logo-tone=\"neutral\"] .logo::before, #awayke-book[data-logo-tone=\"neutral\"] .brand::before {background: radial-gradient(ellipse at center,rgba(226,229,230,.09),transparent 68%); opacity: .08;}\r\n#awayke-book[data-logo-tone=\"neutral\"] .logo img, #awayke-book[data-logo-tone=\"neutral\"] .brand img {filter: brightness(.95) contrast(1.03) saturate(.88) drop-shadow(0 0 4px rgba(226,229,230,.04)) !important;}\r\n#awayke-book[data-logo-tone=\"red\"] {--awk-haze: rgba(112,18,16,.022);}\r\n#awayke-book[data-logo-tone=\"red\"] .logo::before, #awayke-book[data-logo-tone=\"red\"] .brand::before {background: radial-gradient(ellipse at center,rgba(113,18,16,.18),transparent 68%); opacity: .13; transform: scale(1.04,.78);}\r\n#awayke-book[data-logo-tone=\"red\"] .logo img, #awayke-book[data-logo-tone=\"red\"] .brand img {filter: brightness(.935) contrast(1.045) saturate(.94) drop-shadow(0 0 5px rgba(111,17,15,.095)) !important;}\r\n#awayke-book[data-logo-tone=\"gold\"] {--awk-haze: rgba(86,57,12,.019);}\r\n#awayke-book[data-logo-tone=\"gold\"] .logo::before, #awayke-book[data-logo-tone=\"gold\"] .brand::before {background: radial-gradient(ellipse at center,rgba(128,91,24,.15),transparent 68%); opacity: .12; transform: scale(1.04,.78);}\r\n#awayke-book[data-logo-tone=\"gold\"] .logo img, #awayke-book[data-logo-tone=\"gold\"] .brand img {filter: brightness(.93) contrast(1.045) saturate(.87) sepia(.028) drop-shadow(0 0 5px rgba(110,76,18,.08)) !important;}\r\n#awayke-book[data-logo-tone=\"blue\"] {--awk-haze: rgba(24,58,87,.019);}\r\n#awayke-book[data-logo-tone=\"blue\"] .logo::before, #awayke-book[data-logo-tone=\"blue\"] .brand::before {background: radial-gradient(ellipse at center,rgba(28,77,116,.15),transparent 68%); opacity: .12; transform: scale(1.04,.78);}\r\n#awayke-book[data-logo-tone=\"blue\"] .logo img, #awayke-book[data-logo-tone=\"blue\"] .brand img {filter: brightness(.94) contrast(1.043) saturate(.88) drop-shadow(0 0 5px rgba(28,73,110,.08)) !important;}\r\n#awayke-book[data-logo-tone=\"green\"] {--awk-haze: rgba(84,108,40,.015);}\r\n#awayke-book[data-logo-tone=\"green\"] .logo::before, #awayke-book[data-logo-tone=\"green\"] .brand::before {background: radial-gradient(ellipse at center,rgba(112,141,55,.11),transparent 68%); opacity: .09;}\r\n#awayke-book[data-logo-tone=\"green\"] .logo img, #awayke-book[data-logo-tone=\"green\"] .brand img {filter: brightness(.945) contrast(1.04) saturate(.88) drop-shadow(0 0 4px rgba(104,131,51,.065)) !important;}\r\n#awayke-book .film, #awayke-book .card-media, #awayke-book .hero-image, #awayke-book .slit {isolation: isolate; background-color: #030303;}\r\n#awayke-book .film {box-shadow: 0 24px 90px rgba(0,0,0,.35),inset 0 0 0 1px rgba(255,255,255,.012);}\r\n#awayke-book .film video {filter: brightness(.90) contrast(1.06) saturate(.84);}\r\n#awayke-book .film::before {background: radial-gradient(ellipse at center,transparent 48%,rgba(0,0,0,.15) 78%,rgba(0,0,0,.36) 100%),linear-gradient(90deg,rgba(7,4,3,.21),transparent 26%,transparent 74%,rgba(7,4,3,.26)),linear-gradient(180deg,transparent 58%,rgba(7,4,3,.40)) !important;}\r\n#awayke-book .card-media img, #awayke-book .hero-image img {filter: brightness(.92) contrast(1.045) saturate(.88);}\r\n#awayke-book .card-media::after {z-index: 1; background: radial-gradient(ellipse at center,transparent 51%,rgba(5,5,5,.18) 77%,rgba(5,5,5,.41) 100%),linear-gradient(180deg,transparent 47%,rgba(5,5,5,.87) 100%) !important;}\r\n#awayke-book .card-media .pulse-dot {z-index: 3;}\r\n#awayke-book .card {box-shadow: 0 18px 70px rgba(0,0,0,.22);}\r\n#awayke-book .hero-image {box-shadow: inset 0 0 115px rgba(0,0,0,.28),0 28px 90px rgba(0,0,0,.23);}\r\n#awayke-book .slit {box-shadow: inset 0 0 62px rgba(0,0,0,.35),0 18px 50px rgba(0,0,0,.19);}\r\n#awayke-book .container-stage {isolation: isolate;}\r\n#awayke-book .container-stage::after {content: none;}\r\n#awayke-book .container-shell {background-color: #020202; box-shadow: 0 30px 90px rgba(0,0,0,.58),inset 0 0 55px rgba(0,0,0,.20);}\r\n@media (max-width:680px) {#awayke-book {--awk-grain-opacity: .014; --awk-vignette-edge: .18;}#awayke-book .logo::before, #awayke-book .brand::before {inset: -7px -9px; filter: blur(9px);}}\r\n@media print {#awayke-book::before, #awayke-book::after, #awayke-book .logo::before, #awayke-book .brand::before {display: none !important;}}\r\n\r\n#awayke-book {position:relative; width:100%; margin:0; isolation:isolate; line-height:normal; overflow:clip;}\r\n#awayke-book *, #awayke-book *::before, #awayke-book *::after {box-sizing:border-box;}\r\n#awayke-book a {text-decoration:none;}\r\n#awayke-book h1, #awayke-book h2, #awayke-book h3, #awayke-book h4 {color:inherit;}\r\n#awayke-book button {border-radius:0; box-shadow:none; text-transform:none; letter-spacing:inherit; line-height:normal;}\r\n#awayke-book input, #awayke-book select {border-radius:0; line-height:normal;}\r\n#awayke-book a:focus-visible, #awayke-book button:focus-visible {outline:2px solid var(--acid);outline-offset:3px;}\r\n#awayke-book .kind-option input:focus-visible + label {outline:2px solid #eef4e7;outline-offset:3px;}\r\n#awayke-book #awayke-book-bookingDetails {scroll-margin-top:94px;}\r\n#awayke-book .selection:not(.show) {visibility:hidden;pointer-events:none;}\r\n<\/style>\r\n<div id=\"awayke-book\" data-asset-base=\"\/wp-content\/plugins\/awayke-book-assets\/assets\/\" data-logo-tone=\"green\">\r\n<nav class=\"nav\"><a class=\"logo\" href=\"\/\" aria-label=\"AWAYKE home\"><img decoding=\"async\" src=\"\/wp-content\/plugins\/awayke-book-assets\/assets\/awayke-logo-transparent.png\" alt=\"AWAYKE\" data-awayke-asset=\"awayke-logo-transparent.png\"><\/a><div class=\"navlinks\"><a href=\"\/?pagename=encounters\">Encounters<\/a><a href=\"\/?pagename=faqs\">FAQs<\/a><a href=\"\/?pagename=beware\">BEWARE<\/a><a href=\"\/?pagename=contacts\">Contact<\/a><\/div><a class=\"book\" href=\"\/?pagename=availability\">Book \u2197<\/a><\/nav>\r\n<header class=\"hero\"><div class=\"hero-wrap\"><div><div class=\"kicker\"><span class=\"statusdot\"><\/span>Demo reservation system<\/div><h1>BOOK <span>THE DARK.<\/span><\/h1><p>Pick a date. Pick a length. Find a free start time. The rest stays hidden until the lights go out.<\/p><\/div><div class=\"hero-right\"><div class=\"slit\"><img decoding=\"async\" src=\"\/wp-content\/plugins\/awayke-book-assets\/assets\/moult.webp\" alt=\"Dark fragment of an AWAYKE room\" data-awayke-asset=\"moult.webp\"><label>ROOM FEED \/ 08<\/label><\/div><div class=\"slit\"><img decoding=\"async\" src=\"\/wp-content\/plugins\/awayke-book-assets\/assets\/understudy.webp\" alt=\"Dark fragment of an AWAYKE room\" data-awayke-asset=\"understudy.webp\"><label>ROOM FEED \/ 06<\/label><\/div><div class=\"statusbar\"><span>Window <b id=\"awayke-book-rangeLine\">\u2014<\/b><\/span><span><span id=\"awayke-book-rangeStart\"><\/span> \u2192 <span id=\"awayke-book-rangeEnd\"><\/span><\/span><\/div><\/div><\/div><\/header>\r\n<main>\r\n  <section class=\"deck\">\r\n    <aside class=\"control\">\r\n      <section class=\"panel\"><div class=\"panel-head\"><div><div class=\"mini\">Date selector<\/div><strong id=\"awayke-book-monthTitle\">Month<\/strong><\/div><div class=\"month-nav\"><button type=\"button\" id=\"awayke-book-prevMonth\" aria-label=\"Previous month\">\u2190<\/button><button type=\"button\" id=\"awayke-book-nextMonth\" aria-label=\"Next month\">\u2192<\/button><\/div><\/div><div class=\"calendar\"><div class=\"weekdays\"><span>Mon<\/span><span>Tue<\/span><span>Wed<\/span><span>Thu<\/span><span>Fri<\/span><span>Sat<\/span><span>Sun<\/span><\/div><div class=\"days\" id=\"awayke-book-calendarDays\"><\/div><div class=\"calendar-foot\"><span>Dots mean at least one start time survives.<\/span><button type=\"button\" id=\"awayke-book-goToday\">today<\/button><\/div><\/div><div class=\"duration-bar\"><div class=\"duration-top\"><div class=\"mini\">Length<\/div><p>Longer sessions close more overlapping slots.<\/p><\/div><div class=\"durations\" id=\"awayke-book-durationOptions\"><\/div><\/div><div class=\"selection-note\"><div class=\"mini\">Loaded slot<\/div><strong id=\"awayke-book-selectionTextStatic\">Nothing selected yet.<\/strong><p>Choose a free time from the board.<\/p><div class=\"inline-actions\"><button id=\"awayke-book-clearSelection\" type=\"button\">clear<\/button><button id=\"awayke-book-continueButton\" type=\"button\">to form<\/button><\/div><\/div><\/section>\r\n    <\/aside>\r\n    <section class=\"board\"><div class=\"board-head\"><div><div class=\"mini\">Demo start times<\/div><h2 id=\"awayke-book-selectedDateTitle\">Today<\/h2><p id=\"awayke-book-availabilitySummary\">Checking the board\u2026<\/p><\/div><div class=\"legend\"><span class=\"free\"><i><\/i>free<\/span><span class=\"full\"><i><\/i>blocked<\/span><\/div><\/div><div id=\"awayke-book-encounters\" class=\"encounters\"><\/div><\/section>\r\n  <\/section>\r\n\r\n  <section class=\"booking-shell\" id=\"awayke-book-bookingDetails\">\r\n    <section class=\"ticketform\"><div class=\"booking-top\"><div class=\"mini\">Finalise<\/div><h2>LOCK THE SESSION.<\/h2><p>Demo only: availability and test bookings are saved in this browser. No real reservation, payment or email is created. Use sample contact details.<\/p><\/div><form id=\"awayke-book-bookingForm\" class=\"booking-form\"><div class=\"booking-kind\"><span class=\"kind-label\">Booking type<\/span><div class=\"kind-options\"><div class=\"kind-option\"><input type=\"radio\" id=\"awayke-book-bookingGeneral\" name=\"awaykeBookType\" value=\"general\" checked=\"\"><label for=\"awayke-book-bookingGeneral\">GENERAL BOOKING<\/label><\/div><div class=\"kind-option\"><input type=\"radio\" id=\"awayke-book-bookingPrivate\" name=\"awaykeBookType\" value=\"private\"><label for=\"awayke-book-bookingPrivate\">PRIVATE SESSION<\/label><\/div><\/div><\/div><div class=\"field private-only\" id=\"awayke-book-privateEventField\"><label for=\"awayke-book-eventType\">Private occasion<\/label><select id=\"awayke-book-eventType\"><option value=\"\" selected=\"\">Select occasion<\/option><option>Birthday<\/option><option>Wedding \/ engagement<\/option><option>Hens \/ bucks<\/option><option>Corporate \/ team<\/option><option>Anniversary<\/option><option>School \/ community group<\/option><option>Other private event<\/option><\/select><\/div><div class=\"field private-only\" id=\"awayke-book-privateNotesField\"><label for=\"awayke-book-privateNotes\">Anything we should know?<\/label><input type=\"text\" id=\"awayke-book-privateNotes\" placeholder=\"e.g. birthday group, access needs, surprise booking\"><\/div><div class=\"private-note private-only\" id=\"awayke-book-privateBookingNote\"><strong>PRIVATE SESSION:<\/strong> the whole slot is treated as your group. Private groups can book up to 20 guests; tell us about any accessibility or pacing needs so we can adapt the session.<\/div><div class=\"field full\"><label for=\"awayke-book-encounter\">Encounter<\/label><select id=\"awayke-book-encounter\" required=\"\"><option value=\"infrasound\">INFRASOUND<\/option><option value=\"ingenue\">ING\u00c9NUE<\/option><option value=\"profane\">PROFANE<\/option><option value=\"vesper\">VESPER<\/option><option value=\"rictus\">RICTUS<\/option><option value=\"understudy\">UNDERSTUDY<\/option><option value=\"birthright\">BIRTHRIGHT<\/option><option value=\"moult\">MOULT<\/option><option value=\"vessel\">VESSEL<\/option><option value=\"fixation\">FIXATION<\/option><\/select><\/div><div class=\"field\"><label for=\"awayke-book-bookingDate\">Date<\/label><input type=\"date\" id=\"awayke-book-bookingDate\" required=\"\"><\/div><div class=\"field\"><label for=\"awayke-book-bookingTime\">Time<\/label><input type=\"time\" id=\"awayke-book-bookingTime\" min=\"09:00\" max=\"21:30\" required=\"\" step=\"1800\"><\/div><div class=\"field\"><label for=\"awayke-book-duration\">Duration<\/label><select id=\"awayke-book-duration\" required=\"\"><option value=\"20\">20 minutes<\/option><option value=\"30\">30 minutes<\/option><option value=\"45\">45 minutes<\/option><option value=\"60\">1 hour<\/option><\/select><\/div><div class=\"field\"><label for=\"awayke-book-guests\">Guests<\/label><input type=\"number\" id=\"awayke-book-guests\" min=\"1\" max=\"10\" value=\"1\" required=\"\"><\/div><div class=\"field\"><label for=\"awayke-book-customerName\">Name<\/label><input type=\"text\" id=\"awayke-book-customerName\" required=\"\"><\/div><div class=\"field\"><label for=\"awayke-book-customerEmail\">Email<\/label><input type=\"email\" id=\"awayke-book-customerEmail\" required=\"\"><\/div><div class=\"field full\"><label for=\"awayke-book-customerPhone\">Phone<\/label><input type=\"tel\" id=\"awayke-book-customerPhone\"><\/div><button id=\"awayke-book-confirmBooking\" class=\"full\" type=\"submit\">CONFIRM DEMO BOOKING<\/button><\/form><div id=\"awayke-book-bookingMessage\" role=\"status\" aria-live=\"polite\"><\/div><\/section>\r\n    <aside class=\"manifest\"><div class=\"manifest-inner\"><div class=\"mini\">Session manifest<\/div><h3>NO VISUAL ANSWERS.<\/h3><p>The booking system only needs the practical bits. The experience can keep the rest.<\/p><ul><li><span>start window<\/span><span>09:00\u201321:30<\/span><\/li><li><span>lengths<\/span><span>20 \/ 30 \/ 45 \/ 60<\/span><\/li><li><span>guests<\/span><span>1\u201310<\/span><\/li><li><span>email<\/span><span>demo only \/ no email<\/span><\/li><\/ul><\/div><\/aside>\r\n  <\/section>\r\n<\/main>\r\n<div class=\"selection\" id=\"awayke-book-selection\"><div><span class=\"small\">Selected time<\/span><strong id=\"awayke-book-selectionText\"><\/strong><\/div><div class=\"actions\"><button class=\"secondary\" id=\"awayke-book-clearSelectionFloating\" type=\"button\">clear<\/button><button id=\"awayke-book-continueButtonFloating\" type=\"button\">continue \u2198<\/button><\/div><\/div>\r\n<footer class=\"footer\"><span>AWAYKE \/ BRISBANE<\/span><span>Demo reservation terminal<\/span><span><a href=\"\/?pagename=contacts\">Contact<\/a> \u00b7 <a href=\"\/?pagename=faqs\">FAQs<\/a><\/span><\/footer>\r\n<script>\r\n(() => {\r\n  'use strict';\r\n  const key='__awaykeBookController',selector='#awayke-book';\r\n  if(window[key]){window[key].refresh();return;}\r\n  const instances=new Map();let pending=false,stopped=false;\r\n  function mount(root){\r\n    if(!root.isConnected||instances.has(root))return;\r\n    let disposed=false,submitting=false,focusTimer=0,lastSubmissionSignature=null,lastReference=null;\r\n    const cleanups=[];\r\n    const byId=id=>root.querySelector('#awayke-book-'+id);\r\n    const listen=(target,type,fn,options)=>{target.addEventListener(type,fn,options);cleanups.push(()=>target.removeEventListener(type,fn,options));};\r\n    const cleanup=()=>{if(disposed)return;disposed=true;window.clearTimeout(focusTimer);cleanups.forEach(fn=>fn());instances.delete(root);delete root.dataset.awaykeReady;};\r\n    instances.set(root,{cleanup});\r\n    const queueFocus=()=>{window.clearTimeout(focusTimer);focusTimer=window.setTimeout(()=>{focusTimer=0;if(!disposed&&root.isConnected)byId('customerName').focus({preventScroll:true});},500);};\r\n    const base=new URL((root.dataset.assetBase||'\/wp-content\/plugins\/awayke-book-assets\/assets\/').replace(\/\\\/?$\/,'\/'),document.baseURI);\r\n    root.querySelectorAll('[data-awayke-asset]').forEach(el=>{const url=new URL(el.dataset.awaykeAsset,base).href;if(el.src!==url)el.src=url;});\r\n    root.dataset.logoTone='green';\r\nconst encounters=[\r\n  {slug:'infrasound',name:'INFRASOUND',peek:'Something beneath hearing has noticed you listening.'},\r\n  {slug:'ingenue',name:'ING\u00c9NUE',peek:'Somewhere in the dark, she is waiting for her moment.'},\r\n  {slug:'profane',name:'PROFANE',peek:'A familiar voice may not belong to who you think it does.'},\r\n  {slug:'vesper',name:'VESPER',peek:'Follow the music. Just do not assume it wants you to leave.'},\r\n  {slug:'rictus',name:'RICTUS',peek:'You hear her laugh and wonder where it came from.'},\r\n  {slug:'understudy',name:'UNDERSTUDY',peek:'At some point, you may hear yourself where you are not.'},\r\n  {slug:'birthright',name:'BIRTHRIGHT',peek:'Some things should have stayed buried.'},\r\n  {slug:'moult',name:'MOULT',peek:'Something is changing before you understand what.'},\r\n  {slug:'vessel',name:'VESSEL',peek:'Not every voice will feel like it comes from the room.'},\r\n  {slug:'fixation',name:'FIXATION',peek:'At first, the attention might feel flattering.'}\r\n];\r\nconst times=['09:00','09:30','10:00','10:30','11:00','11:30','12:00','12:30','13:00','13:30','14:00','14:30','15:00','15:30','16:00','16:30','17:00','17:30','18:00','18:30','19:00','19:30','20:00','20:30','21:00','21:30'];\r\nconst durationChoices=[20,30,45,60];\r\nlet selectedDuration=30;\r\nconst pad=n=>String(n).padStart(2,'0');\r\nconst iso=d=>`${d.getFullYear()}-${pad(d.getMonth()+1)}-${pad(d.getDate())}`;\r\nconst today=new Date(); today.setHours(12,0,0,0);\r\nconst maxDate=new Date(today); maxDate.setFullYear(maxDate.getFullYear()+1);\r\nlet selectedDate=new Date(today);\r\nlet visibleMonth=new Date(today.getFullYear(),today.getMonth(),1,12);\r\nlet selectedSlot=null;\r\nconst fmtLong=d=>new Intl.DateTimeFormat('en-AU',{weekday:'long',day:'numeric',month:'long',year:'numeric'}).format(d);\r\nconst fmtShort=d=>new Intl.DateTimeFormat('en-AU',{day:'numeric',month:'short',year:'numeric'}).format(d);\r\nconst fmtTime=t=>{const [h,m]=t.split(':').map(Number);const d=new Date(2000,0,1,h,m);return new Intl.DateTimeFormat('en-AU',{hour:'numeric',minute:'2-digit'}).format(d)};\r\nfunction hash(str){let h=2166136261;for(let i=0;i<str.length;i++){h^=str.charCodeAt(i);h=Math.imul(h,16777619)}return h>>>0}\r\nfunction timeToMinutes(t){const [h,m]=t.split(':').map(Number);return h*60+m}\r\nfunction minutesToTime(total){const h=Math.floor(total\/60)%24,m=total%60;return `${pad(h)}:${pad(m)}`}\r\nfunction rawBusy(dateStr,slug,time){\r\n  const todayStr=iso(today);\r\n  if(dateStr===todayStr && slug==='vesper'){\r\n    if(time==='10:00'||time==='10:30') return true;\r\n    if(time==='11:00'||time==='11:30') return false;\r\n  }\r\n  const n=hash(`${dateStr}|${slug}|${time}`)%100;\r\n  const d=new Date(dateStr+'T12:00:00');\r\n  const weekend=d.getDay()===0||d.getDay()===6;\r\n  const threshold=weekend?42:31;\r\n  return n<threshold;\r\n}\r\nfunction getSavedBookings(){\r\n  try {\r\n    const value=JSON.parse(window.localStorage.getItem('awaykeBookDemoBookings')||'[]');\r\n    return Array.isArray(value)?value.filter(b=>b && typeof b==='object' && encounters.some(e=>e.slug===b.encounter) && \/^\\d{4}-\\d{2}-\\d{2}$\/.test(b.date) && times.includes(b.time) && durationChoices.includes(Number(b.duration||30))):[];\r\n  }catch(e){return []}\r\n}\r\nfunction overlaps(startA,endA,startB,endB){return startA<endB&&endA>startB}\r\nfunction isAvailable(dateStr,slug,time,duration=selectedDuration){\r\n  const start=timeToMinutes(time),end=start+duration;\r\n  for(const bookedStartLabel of times){\r\n    if(!rawBusy(dateStr,slug,bookedStartLabel)) continue;\r\n    const bookedStart=timeToMinutes(bookedStartLabel),bookedEnd=bookedStart+30;\r\n    if(overlaps(start,end,bookedStart,bookedEnd)) return false;\r\n  }\r\n  for(const b of getSavedBookings()){\r\n    if(b.date!==dateStr||b.encounter!==slug) continue;\r\n    const bs=timeToMinutes(b.time),be=bs+Number(b.duration||30);\r\n    if(overlaps(start,end,bs,be)) return false;\r\n  }\r\n  return true;\r\n}\r\nfunction inRange(d){return d>=today && d<=maxDate}\r\nfunction dateHasAnyFree(d){const ds=iso(d);return encounters.some(e=>times.some(t=>isAvailable(ds,e.slug,t)))}\r\nfunction renderDurations(){\r\n  const wrap=byId('durationOptions');wrap.innerHTML='';\r\n  durationChoices.forEach(mins=>{\r\n    const b=document.createElement('button');\r\n    b.type='button';\r\n    b.className='duration'+(mins===selectedDuration?' active':'');\r\n    b.innerHTML=`<strong>${mins===60?'1 hour':mins+' min'}<\/strong><span>${mins===20?'Quickest':mins===30?'Standard':mins===45?'Extended':'Full encounter'}<\/span>`;\r\n    b.dataset.duration=String(mins);\r\n    wrap.appendChild(b);\r\n  });\r\n}\r\nfunction renderCalendar(){\r\n  byId('monthTitle').textContent=new Intl.DateTimeFormat('en-AU',{month:'long',year:'numeric'}).format(visibleMonth);\r\n  const box=byId('calendarDays');box.innerHTML='';\r\n  const year=visibleMonth.getFullYear(),month=visibleMonth.getMonth();\r\n  const first=new Date(year,month,1,12);const startOffset=(first.getDay()+6)%7;\r\n  const start=new Date(first);start.setDate(first.getDate()-startOffset);\r\n  for(let i=0;i<42;i++){\r\n    const d=new Date(start);d.setDate(start.getDate()+i);d.setHours(12,0,0,0);\r\n    const b=document.createElement('button');b.type='button';b.className='day';b.textContent=d.getDate();\r\n    if(d.getMonth()!==month)b.classList.add('other');\r\n    if(iso(d)===iso(today))b.classList.add('today');\r\n    if(iso(d)===iso(selectedDate))b.classList.add('selected');\r\n    if(inRange(d) && dateHasAnyFree(d)){const dot=document.createElement('span');dot.className='dot';b.appendChild(dot)}\r\n    b.disabled=!inRange(d);\r\n    b.dataset.date=iso(d);b.setAttribute('aria-label',fmtLong(d));b.setAttribute('aria-pressed',String(iso(d)===iso(selectedDate)));\r\n    box.appendChild(b);\r\n  }\r\n  const earliestMonth=new Date(today.getFullYear(),today.getMonth(),1,12);\r\n  const latestMonth=new Date(maxDate.getFullYear(),maxDate.getMonth(),1,12);\r\n  byId('prevMonth').disabled=visibleMonth<=earliestMonth;\r\n  byId('nextMonth').disabled=visibleMonth>=latestMonth;\r\n}\r\nfunction renderAvailability(){\r\n  const dateStr=iso(selectedDate); byId('selectedDateTitle').textContent=fmtLong(selectedDate);\r\n  const wrap=byId('encounters'); wrap.innerHTML=''; let freeTotal=0;\r\n  encounters.forEach((e,i)=>{\r\n    const row=document.createElement('article'); row.className='encounter';\r\n    const info=document.createElement('div'); info.className='encounter-info';\r\n    info.innerHTML=`<span class=\"encounter-no\">${String(i+1).padStart(2,'0')} \/ encounter<\/span><h4>${e.name}<\/h4><p>${e.peek}<\/p>`;\r\n    const slots=document.createElement('div'); slots.className='slots';\r\n    times.forEach(t=>{\r\n      const available=isAvailable(dateStr,e.slug,t,selectedDuration); if(available) freeTotal++;\r\n      const b=document.createElement('button'); b.type='button'; b.disabled=!available;\r\n      b.className='slot '+(available?'free':'full')+(selectedSlot&&selectedSlot.slug===e.slug&&selectedSlot.time===t?' selected':'');\r\n      const finish=fmtTime(minutesToTime(timeToMinutes(t)+selectedDuration));\r\n      b.innerHTML=`<strong>${fmtTime(t)}<\/strong><span>${available?'Free until '+finish:'Conflicts'}<\/span>`;\r\n      b.dataset.encounter=e.slug;b.dataset.time=t;b.setAttribute('aria-label',e.name+' \u00b7 '+fmtTime(t)+(available?' available':' blocked'));b.setAttribute('aria-pressed',String(!!(selectedSlot&&selectedSlot.slug===e.slug&&selectedSlot.time===t)));\r\n      slots.appendChild(b);\r\n    });\r\n    row.appendChild(info); row.appendChild(slots); wrap.appendChild(row);\r\n  });\r\n  const lengthLabel=selectedDuration===60?'1-hour':`${selectedDuration}-minute`;\r\n  byId('availabilitySummary').textContent=`${freeTotal} available ${lengthLabel} start times across ${encounters.length} encounters.`;\r\n}\r\nfunction fillBookingForm(){\r\n  if(!selectedSlot) return;\r\n  byId('encounter').value=selectedSlot.slug;\r\n  byId('bookingDate').value=iso(selectedDate);\r\n  byId('bookingTime').value=selectedSlot.time;\r\n  byId('duration').value=String(selectedSlot.duration);\r\n}\r\nfunction renderSelection(){\r\n  const el=byId('selection');\r\n  const staticText=byId('selectionTextStatic');\r\n  if(!selectedSlot){\r\n    el.classList.remove('show');\r\n    el.setAttribute('aria-hidden','true');\r\n    staticText.textContent='Nothing selected yet.';\r\n    return;\r\n  }\r\n  const end=minutesToTime(timeToMinutes(selectedSlot.time)+selectedSlot.duration);\r\n  const length=selectedSlot.duration===60?'1 hour':selectedSlot.duration+' min';\r\n  const text=`${selectedSlot.name} \u00b7 ${fmtLong(selectedDate)} \u00b7 ${fmtTime(selectedSlot.time)}\u2013${fmtTime(end)} \u00b7 ${length}`;\r\n  byId('selectionText').textContent=text;\r\n  staticText.textContent=text;\r\n  fillBookingForm();\r\n  el.classList.add('show');\r\n  el.setAttribute('aria-hidden','false');\r\n}\r\nfunction renderAll(){renderDurations();renderCalendar();renderAvailability();renderSelection()}\r\n\r\nlisten(byId('prevMonth'),'click',()=>{visibleMonth=new Date(visibleMonth.getFullYear(),visibleMonth.getMonth()-1,1,12);renderCalendar()});\r\nlisten(byId('nextMonth'),'click',()=>{visibleMonth=new Date(visibleMonth.getFullYear(),visibleMonth.getMonth()+1,1,12);renderCalendar()});\r\nlisten(byId('goToday'),'click',()=>{selectedDate=new Date(today);visibleMonth=new Date(today.getFullYear(),today.getMonth(),1,12);selectedSlot=null;renderAll()});\r\nfunction clearCurrentSelection(){selectedSlot=null;renderAll()}\r\nlisten(byId('clearSelection'),'click',clearCurrentSelection);\r\nlisten(byId('clearSelectionFloating'),'click',clearCurrentSelection);\r\nfunction jumpToForm(){fillBookingForm();byId('bookingDetails').scrollIntoView({behavior:'smooth',block:'start'});queueFocus()}\r\nlisten(byId('continueButton'),'click',jumpToForm);\r\nlisten(byId('continueButtonFloating'),'click',jumpToForm);\r\n\r\nconst bookingDateInput=byId('bookingDate');\r\nbookingDateInput.min=iso(today); bookingDateInput.max=iso(maxDate); bookingDateInput.value=iso(selectedDate);\r\nbyId('duration').value=String(selectedDuration);\r\nfunction showBookingMessage(message,type=''){\r\n  const el=byId('bookingMessage'); el.textContent=message; el.className='show'+(type?' '+type:'');\r\n}\r\nconst bookingTypeInputs=[...root.querySelectorAll('input[name=\"awaykeBookType\"]')];\r\nconst eventTypeInput=byId('eventType');\r\nconst privateNotesInput=byId('privateNotes');\r\nconst privateBlocks=[byId('privateEventField'),byId('privateNotesField'),byId('privateBookingNote')];\r\nfunction updateBookingType(){\r\n  const isPrivate=root.querySelector('input[name=\"awaykeBookType\"]:checked')?.value==='private';\r\n  privateBlocks.forEach(el=>el?.classList.toggle('show',isPrivate));\r\n  eventTypeInput.required=isPrivate;\r\n  const guests=byId('guests');\r\n  guests.max=isPrivate?'20':'10';\r\n  root.querySelector('.manifest li:nth-child(3) span:last-child').textContent=isPrivate?'1\u201320':'1\u201310';\r\n  if(Number(guests.value)>Number(guests.max)) guests.value=guests.max;\r\n}\r\nbookingTypeInputs.forEach(x=>listen(x,'change',updateBookingType));\r\nupdateBookingType();\r\n\r\nlisten(byId('bookingForm'),'submit',e=>{\r\n  e.preventDefault();\r\n  if(submitting || disposed) return;\r\n  const encounter=byId('encounter').value;\r\n  const date=byId('bookingDate').value;\r\n  const time=byId('bookingTime').value;\r\n  const duration=Number(byId('duration').value);\r\n  const guests=Number(byId('guests').value);\r\n  const name=byId('customerName').value.trim();\r\n  const email=byId('customerEmail').value.trim();\r\n  const phone=byId('customerPhone').value.trim();\r\n  const bookingType=root.querySelector('input[name=\"awaykeBookType\"]:checked')?.value||'general';\r\n  const eventType=eventTypeInput.value.trim();\r\n  const privateNotes=privateNotesInput.value.trim();\r\n  const confirmButton=byId('confirmBooking');\r\n  const signature=JSON.stringify([encounter,date,time,duration,guests,name,email,phone,bookingType,eventType,privateNotes]);\r\n  if(signature===lastSubmissionSignature&&getSavedBookings().some(item=>item.reference===lastReference))return;\r\n  if(!date||!time||!name||!email){showBookingMessage('Please complete the required booking details.','error');return}\r\n  if(!encounters.some(item=>item.slug===encounter)){showBookingMessage('Choose a listed encounter.','error');return}\r\n  if(!durationChoices.includes(duration)){showBookingMessage('Choose a duration of 20, 30, 45 or 60 minutes.','error');return}\r\n  if(!byId('customerEmail').validity.valid){showBookingMessage('Enter a valid email address.','error');return}\r\n  const d=new Date(date+'T12:00:00');\r\n  if(!Number.isFinite(d.getTime()) || iso(d)!==date || !inRange(d)){showBookingMessage('That date is outside the current booking window.','error');return}\r\n  const mins=timeToMinutes(time);\r\n  if(!times.includes(time)||mins<540||mins>1290){showBookingMessage('Choose a listed half-hour start time between 9:00 AM and 9:30 PM.','error');return}\r\n  const guestMax=bookingType==='private'?20:10;\r\n  if(!Number.isInteger(guests)||guests<1||guests>guestMax){showBookingMessage(`Guest numbers must be between 1 and ${guestMax} for this booking type.`,'error');return}\r\n  if(bookingType==='private'&&!eventType){showBookingMessage('Choose the occasion for the private session.','error');return}\r\n  if(!isAvailable(date,encounter,time,duration)){showBookingMessage('That encounter overlaps a blocked demo time. Choose another time or duration.','error');return}\r\n\r\n  const eInfo=encounters.find(x=>x.slug===encounter);\r\n  const finish=minutesToTime(mins+duration);\r\n  const spookyRefs=['HALLWEEN','PUMPKNZ','SKELETOZ','GRAVEYRD','BLACKOUT','NIGHTMRE','HAUNTED','DEADBOLT','GHOSTED','BLOODMOON','SHADOWS','BURIED','HOLLOW','CRYPTIC','UNSEEN','STATIC','WHISPER','NOCTURN','RITUAL','ECHOES'];\r\n  function makeReference(){\r\n    const chars='ABCDEFGHJKLMNPQRSTUVWXYZ23456789';\r\n    const existing=new Set(getSavedBookings().map(b=>b.reference));\r\n    for(let attempt=0;attempt<100;attempt++){\r\n      const word=spookyRefs[Math.floor(Math.random()*spookyRefs.length)];\r\n      let suffix='';\r\n      for(let i=0;i<2;i++){\r\n        if(window.crypto&&crypto.getRandomValues){const n=new Uint32Array(1);crypto.getRandomValues(n);suffix+=chars[n[0]%chars.length];}\r\n        else{suffix+=chars[Math.floor(Math.random()*chars.length)];}\r\n      }\r\n      const candidate=`AWK-${word}-${suffix}`;\r\n      if(!existing.has(candidate)) return candidate;\r\n    }\r\n    return `AWK-SHADOW-${Date.now().toString(36).slice(-4).toUpperCase()}`;\r\n  }\r\n  const reference=makeReference();\r\n  const encounterName=eInfo?eInfo.name:encounter.toUpperCase();\r\n  const formattedDate=fmtLong(d);\r\n  const formattedStart=fmtTime(time);\r\n  const formattedEnd=fmtTime(finish);\r\n  const durationLabel=duration===60?'1 hour':duration+' minutes';\r\n\r\n  const bookings=getSavedBookings();\r\n  bookings.push({encounter,date,time,duration,guests,name,email,phone,bookingType,eventType,privateNotes,reference,createdAt:new Date().toISOString(),demo:true});\r\n  submitting=true;\r\n  confirmButton.disabled=true;\r\n  confirmButton.textContent='SAVING DEMO...';\r\n  try {\r\n    window.localStorage.setItem('awaykeBookDemoBookings',JSON.stringify(bookings));\r\n    lastSubmissionSignature=signature;lastReference=reference;\r\n    const bookingDescriptor=bookingType==='private'?`${encounterName} \u00b7 PRIVATE \u00b7 ${eventType}`:encounterName;\r\n    showBookingMessage(`DEMO BOOKING SAVED \u2014 ${bookingDescriptor} \u00b7 ${formattedDate} \u00b7 ${formattedStart}\u2013${formattedEnd} \u00b7 ${guests} guest${guests===1?'':'s'} \u00b7 Demo reference ${reference}. Saved only in this browser. No real reservation, payment or email has been created.`,'success');\r\n    selectedDate=d;selectedDuration=duration;selectedSlot=null;visibleMonth=new Date(d.getFullYear(),d.getMonth(),1,12);renderAll();\r\n  } catch(error) {\r\n    showBookingMessage('Demo booking was not saved because browser storage is unavailable or full. No real reservation, payment or email has been created.','error');\r\n  } finally {\r\n    submitting=false;\r\n    confirmButton.disabled=false;\r\n    confirmButton.textContent='CONFIRM DEMO BOOKING';\r\n  }\r\n});\r\n\r\nconst requested=new URLSearchParams(window.location.search).get('encounter');\r\nif(requested&&encounters.some(e=>e.slug===requested)) byId('encounter').value=requested;\r\nif(requested&&encounters.some(e=>e.slug===requested)){\r\n  const candidate=times.find(t=>isAvailable(iso(selectedDate),requested,t,selectedDuration));\r\n  if(candidate){const e=encounters.find(e=>e.slug===requested);selectedSlot={slug:requested,time:candidate,name:e.name,duration:selectedDuration}}\r\n}\r\n\r\nbyId('rangeStart').textContent=fmtShort(today);\r\nbyId('rangeEnd').textContent=fmtShort(maxDate);\r\nbyId('rangeLine').textContent=`${fmtShort(today)} \u2014 ${fmtShort(maxDate)}`;\r\nrenderAll();\r\n\r\n    listen(byId('durationOptions'),'click',event=>{const button=event.target.closest('button[data-duration]');if(!button||button.disabled)return;selectedDuration=Number(button.dataset.duration);selectedSlot=null;renderAll();});\r\n    listen(byId('calendarDays'),'click',event=>{const button=event.target.closest('button[data-date]');if(!button||button.disabled)return;selectedDate=new Date(button.dataset.date+'T12:00:00');selectedSlot=null;renderAll();});\r\n    listen(byId('encounters'),'click',event=>{const button=event.target.closest('button[data-encounter]');if(!button||button.disabled)return;const info=encounters.find(e=>e.slug===button.dataset.encounter);if(!info)return;selectedSlot={slug:info.slug,time:button.dataset.time,name:info.name,duration:selectedDuration};renderAvailability();renderSelection();});\r\n    listen(window,'storage',event=>{if(event.key!=='awaykeBookDemoBookings'&&event.key!==null)return;if(selectedSlot&&!isAvailable(iso(selectedDate),selectedSlot.slug,selectedSlot.time,selectedSlot.duration))selectedSlot=null;renderAll();});\r\n    listen(window,'pagehide',()=>{window.clearTimeout(focusTimer);focusTimer=0;});\r\n    root.dataset.awaykeReady='true';\r\n  }\r\n  function refresh(){pending=false;if(stopped)return;for(const [root,state]of instances)if(!root.isConnected)state.cleanup();document.querySelectorAll(selector).forEach(mount);}\r\n  function queue(){if(pending)return;pending=true;Promise.resolve().then(refresh);}\r\n  const watcher='MutationObserver'in window?new MutationObserver(queue):null;\r\n  if(watcher)watcher.observe(document.documentElement,{childList:true,subtree:true});\r\n  window[key]={refresh,destroy(){stopped=true;if(watcher)watcher.disconnect();for(const state of instances.values())state.cleanup();document.removeEventListener('DOMContentLoaded',refresh);delete window[key];}};\r\n  refresh();if(document.readyState==='loading')document.addEventListener('DOMContentLoaded',refresh,{once:true});\r\n})();\r\n\r\n<\/script>\r\n<\/div>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>EncountersFAQsBEWAREContactBook \u2197 Demo reservation system BOOK THE DARK. Pick a date. Pick a length. Find a free start time. The rest stays hidden until the lights go out. ROOM FEED \/ 08ROOM FEED \/ 06Window \u2014 \u2192 Date selectorMonth\u2190\u2192MonTueWedThuFriSatSunDots mean at least one start time survives.todayLength Longer sessions close more overlapping slots. Loaded slotNothing selected [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":9,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"footnotes":""},"class_list":["post-72","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/awayke.neonsnow.com.au\/index.php?rest_route=\/wp\/v2\/pages\/72","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/awayke.neonsnow.com.au\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/awayke.neonsnow.com.au\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/awayke.neonsnow.com.au\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/awayke.neonsnow.com.au\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=72"}],"version-history":[{"count":5,"href":"https:\/\/awayke.neonsnow.com.au\/index.php?rest_route=\/wp\/v2\/pages\/72\/revisions"}],"predecessor-version":[{"id":78,"href":"https:\/\/awayke.neonsnow.com.au\/index.php?rest_route=\/wp\/v2\/pages\/72\/revisions\/78"}],"up":[{"embeddable":true,"href":"https:\/\/awayke.neonsnow.com.au\/index.php?rest_route=\/wp\/v2\/pages\/9"}],"wp:attachment":[{"href":"https:\/\/awayke.neonsnow.com.au\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=72"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}