1<!doctype html> 2<html 3 4 lang="en" 5> 6 <head><link 7 rel="icon" 8 type="image/png" 9 href="//artoffaceless.com/cdn/shop/files/aof-stamp-pink-black-clean-3000.png?crop=center&height=32&v=1790189977&width=32" 10 > 11 12 <style data-shopify> 13 @media (prefers-reduced-motion: no-preference) { 14 @view-transition { 15 navigation: auto; 16 } 17 } 18 </style> 19 <link 20 rel="expect" 21 href="#MainContent" 22 blocking="render" 23 id="view-transition-render-blocker" 24 > 25 26 27 28<meta charset="utf-8"> 29<meta 30 http-equiv="X-UA-Compatible" 31 content="IE=edge" 32> 33<meta 34 name="viewport" 35 content="width=device-width,initial-scale=1" 36> 37<meta 38 name="theme-color" 39 content="" 40> 41 42<meta 43 property="og:site_name" 44 content="Art of FACELESS" 45> 46<meta 47 property="og:url" 48 content="https://artoffaceless.com/products/the-hollow-circuit-book-1" 49> 50<meta 51 property="og:title" 52 content="The Hollow Circuit [Book 1] ePUB Edition" 53> 54<meta 55 property="og:type" 56 content="product" 57> 58<meta 59 property="og:description" 60 content="THE HOLLOW CIRCUIT â BIOPUNK NOVEL &amp; TRANSMEDIA UNIVERSE This is not a seamless story. In a city where memory is power and history is edited into sterile perfection, the poet Veylon is pursued by echoes of himself across collapsing timelines. Beneath the surface, the Hollow Circuit breathes. The text glitches. It c" 61><meta 62 property="og:image" 63 content="http://artoffaceless.com/cdn/shop/files/hollow_circuit_maroon_palette.png?v=1789261802" 64 > 65 <meta 66 property="og:image:secure_url" 67 content="https://artoffaceless.com/cdn/shop/files/hollow_circuit_maroon_palette.png?v=1789261802" 68 > 69 <meta 70 property="og:image:width" 71 content="1024" 72 > 73 <meta 74 property="og:image:height" 75 content="1536" 76 > 77 <meta 78 name="twitter:image" 79 content="https://artoffaceless.com/cdn/shop/files/hollow_circuit_maroon_palette.png?v=1789261802" 80 ><meta 81 property="og:price:amount" 82 content="5.00" 83 > 84 <meta 85 property="og:price:currency" 86 content="GBP" 87 ><meta 88 name="twitter:card" 89 content="summary_large_image" 90> 91<meta 92 name="twitter:title" 93 content="The Hollow Circuit [Book 1] ePUB Edition" 94> 95<meta 96 name="twitter:description" 97 content="THE HOLLOW CIRCUIT â BIOPUNK NOVEL &amp; TRANSMEDIA UNIVERSE This is not a seamless story. In a city where memory is power and history is edited into sterile perfection, the poet Veylon is pursued by echoes of himself across collapsing timelines. Beneath the surface, the Hollow Circuit breathes. The text glitches. It c" 98> 99 100<title> 101 The Hollow Circuit [Book 1] ePUB Edition 102 – Art of FACELESS</title> 103 104<link 105 rel="canonical" 106 href="https://artoffaceless.com/products/the-hollow-circuit-book-1" 107> 108 109 110 <meta 111 name="description" 112 content="THE HOLLOW CIRCUIT â BIOPUNK NOVEL &amp; TRANSMEDIA UNIVERSE This is not a seamless story. In a city where memory is power and history is edited into sterile perfection, the poet Veylon is pursued by echoes of himself across collapsing timelines. Beneath the surface, the Hollow Circuit breathes. The text glitches. It c" 113 > 114 115<link href="//artoffaceless.com/cdn/shop/t/8/assets/overflow-list.css?v=16727044177065489451787751266" as="style" rel="preload"> 116<link href="//artoffaceless.com/cdn/shop/t/8/assets/base.css?v=4041570414051751781788101091" rel="stylesheet" type="text/css" media="all" /> 117 118 119 120 <style data-shopify> 121 :root { 122 --hover-lift-amount: 4px; 123 --hover-scale-amount: 1.03; 124 --hover-subtle-zoom-amount: 1.015; 125 } 126 127 @media (any-pointer: fine) and (prefers-reduced-motion: no-preference) { 128 129 .card-hover-effect-lift .product-card:hover, 130 .card-hover-effect-lift .collection-card:hover, 131 .card-hover-effect-lift .predictive-search-results__card:hover { 132 transform: translateY(calc(-1 * var(--hover-lift-amount))); 133 } 134 135 136 137 138 139 } 140 </style> 141 142 143 144<link href="//artoffaceless.com/cdn/fonts/red_hat_text/redhattext_n4.f45549d853e5e3e2907f21be9aecf95e1eaa7516.woff2" as="font" type="font/woff2" fetchpriority="low" crossorigin="anonymous" rel="preload"> 145 146
147<script async crossorigin fetchpriority="high" src="/cdn/shopifycloud/importmap-polyfill/es-modules-shim.2.4.0.js"></script>
vendor: 1 bytes, line 147
147
148<script type="importmap"> 149 { 150 "imports": { 151 "@theme/overflow-list": "//artoffaceless.com/cdn/shop/t/8/assets/overflow-list.js?v=46858356770684902511787751266", 152 "@theme/component": "//artoffaceless.com/cdn/shop/t/8/assets/component.js?v=175690430936884589731787751266", 153 "@theme/dialog": "//artoffaceless.com/cdn/shop/t/8/assets/dialog.js?v=144816527575655702281787751266", 154 "@theme/events": "//artoffaceless.com/cdn/shop/t/8/assets/events.js?v=99399773727497444581787751266", 155 "@shopify/events": "https://cdn.shopify.com/storefront/standard-events.js", 156 "@theme/view-event-elements": "//artoffaceless.com/cdn/shop/t/8/assets/view-event-elements.js?v=34258756885466567141787751266", 157 "@theme/focus": "//artoffaceless.com/cdn/shop/t/8/assets/focus.js?v=60436577539430446401787751266", 158 "@theme/morph": "//artoffaceless.com/cdn/shop/t/8/assets/morph.js?v=182601902166245204061787751266", 159 "@theme/paginated-list": "//artoffaceless.com/cdn/shop/t/8/assets/paginated-list.js?v=71290058904108491691787751266", 160 "@theme/performance": "//artoffaceless.com/cdn/shop/t/8/assets/performance.js?v=171015751390534793081787751266", 161 "@theme/product-form": "//artoffaceless.com/cdn/shop/t/8/assets/product-form.js?v=156247955454460663281787751266", 162 "@theme/recently-viewed-products": "//artoffaceless.com/cdn/shop/t/8/assets/recently-viewed-products.js?v=94729125001750262651787751266", 163 "@theme/scrolling": "//artoffaceless.com/cdn/shop/t/8/assets/scrolling.js?v=162288454571026455011787751266", 164 "@theme/section-renderer": "//artoffaceless.com/cdn/shop/t/8/assets/section-renderer.js?v=44511745960026958271787751266", 165 "@theme/section-hydration": "//artoffaceless.com/cdn/shop/t/8/assets/section-hydration.js?v=108434990705342316311787751266", 166 "@theme/money-formatting": "//artoffaceless.com/cdn/shop/t/8/assets/money-formatting.js?v=160151249720534550011787751266", 167 "@theme/utilities": "//artoffaceless.com/cdn/shop/t/8/assets/utilities.js?v=46961525399390006791787751266", 168 "@theme/variant-picker": "//artoffaceless.com/cdn/shop/t/8/assets/variant-picker.js?v=76692244208061220611787751266", 169 "@theme/variant-resolution": "//artoffaceless.com/cdn/shop/t/8/assets/variant-resolution.js?v=69293302205961280521787751266", 170 "@theme/media-gallery": "//artoffaceless.com/cdn/shop/t/8/assets/media-gallery.js?v=154207211298275592001787751266", 171 "@theme/quick-add": "//artoffaceless.com/cdn/shop/t/8/assets/quick-add.js?v=160295260742220749141787751266", 172 "@theme/paginated-list-aspect-ratio": "//artoffaceless.com/cdn/shop/t/8/assets/paginated-list-aspect-ratio.js?v=25254270272143792451787751266", 173 "@theme/popover-polyfill": "//artoffaceless.com/cdn/shop/t/8/assets/popover-polyfill.js?v=119029313658895111201787751266", 174 "@theme/component-quantity-selector": "//artoffaceless.com/cdn/shop/t/8/assets/component-quantity-selector.js?v=67906657287482036641787751266", 175 "@theme/comparison-slider": "//artoffaceless.com/cdn/shop/t/8/assets/comparison-slider.js?v=106705562947035711941787751266", 176 "@theme/sticky-add-to-cart": "//artoffaceless.com/cdn/shop/t/8/assets/sticky-add-to-cart.js?v=130489688094345781431787751266", 177 "@theme/fly-to-cart": "//artoffaceless.com/cdn/shop/t/8/assets/fly-to-cart.js?v=48483246440248933081787751266", 178 "@theme/scroll-container": "//artoffaceless.com/cdn/shop/t/8/assets/scroll-container.js?v=127018149358875384221787751266", 179 "@theme/theme-drawer": "//artoffaceless.com/cdn/shop/t/8/assets/theme-drawer.js?v=155110645205299884131787751266" 180 } 181 } 182</script>
182<script 183 src="//artoffaceless.com/cdn/shop/t/8/assets/standard-actions-override.js?v=171683365447094389611787751266" 184 type="module" 185></script>
185 186
187<script 188 src="//artoffaceless.com/cdn/shop/t/8/assets/page-view-event.js?v=12823247316348680231787751266" 189 type="module" 190 defer 191></script>
191 192
193<script 194 src="//artoffaceless.com/cdn/shop/t/8/assets/view-transitions.js?v=116552130480572511441787751266" 195 async 196 197 blocking="render" 198 199></script>
199 200 201<link 202 rel="modulepreload" 203 href="//artoffaceless.com/cdn/shop/t/8/assets/utilities.js?v=46961525399390006791787751266" 204 fetchpriority="low" 205> 206<link 207 rel="modulepreload" 208 href="//artoffaceless.com/cdn/shop/t/8/assets/component.js?v=175690430936884589731787751266" 209 fetchpriority="low" 210> 211<link 212 rel="modulepreload" 213 href="//artoffaceless.com/cdn/shop/t/8/assets/section-renderer.js?v=44511745960026958271787751266" 214 fetchpriority="low" 215> 216<link 217 rel="modulepreload" 218 href="//artoffaceless.com/cdn/shop/t/8/assets/section-hydration.js?v=108434990705342316311787751266" 219 fetchpriority="low" 220> 221<link 222 rel="modulepreload" 223 href="//artoffaceless.com/cdn/shop/t/8/assets/morph.js?v=182601902166245204061787751266" 224 fetchpriority="low" 225> 226 227 228 229<link 230 rel="modulepreload" 231 href="//artoffaceless.com/cdn/shop/t/8/assets/focus.js?v=60436577539430446401787751266" 232 fetchpriority="low" 233> 234<link 235 rel="modulepreload" 236 href="//artoffaceless.com/cdn/shop/t/8/assets/recently-viewed-products.js?v=94729125001750262651787751266" 237 fetchpriority="low" 238> 239<link 240 rel="modulepreload" 241 href="//artoffaceless.com/cdn/shop/t/8/assets/scrolling.js?v=162288454571026455011787751266" 242 fetchpriority="low" 243> 244<link 245 rel="modulepreload" 246 href="//artoffaceless.com/cdn/shop/t/8/assets/events.js?v=99399773727497444581787751266" 247 fetchpriority="low" 248>
249<script 250 src="//artoffaceless.com/cdn/shop/t/8/assets/popover-polyfill.js?v=119029313658895111201787751266" 251 type="module" 252 fetchpriority="low" 253></script>
vendor: 1 bytes, line 253
253
254<script 255 src="//artoffaceless.com/cdn/shop/t/8/assets/overflow-list.js?v=46858356770684902511787751266" 256 type="module" 257 fetchpriority="low" 258></script>
vendor: 1 bytes, line 258
258
259<script 260 src="//artoffaceless.com/cdn/shop/t/8/assets/quick-add.js?v=160295260742220749141787751266" 261 type="module" 262 fetchpriority="low" 263></script>
263 264 265
266<script 267 src="//artoffaceless.com/cdn/shop/t/8/assets/dialog.js?v=144816527575655702281787751266" 268 type="module" 269 fetchpriority="low" 270></script>
vendor: 1 bytes, line 270
270
271<script 272 src="//artoffaceless.com/cdn/shop/t/8/assets/variant-picker.js?v=76692244208061220611787751266" 273 type="module" 274 fetchpriority="low" 275></script>
vendor: 1 bytes, line 275
275
276<script 277 src="//artoffaceless.com/cdn/shop/t/8/assets/product-card.js?v=80689566448612614681787751266" 278 type="module" 279 fetchpriority="low" 280></script>
vendor: 1 bytes, line 280
280
281<script 282 src="//artoffaceless.com/cdn/shop/t/8/assets/product-form.js?v=156247955454460663281787751266" 283 type="module" 284 fetchpriority="low" 285></script>
vendor: 1 bytes, line 285
285
286<script 287 src="//artoffaceless.com/cdn/shop/t/8/assets/fly-to-cart.js?v=48483246440248933081787751266" 288 type="module" 289 fetchpriority="low" 290></script>
vendor: 1 bytes, line 290
290
291<script 292 src="//artoffaceless.com/cdn/shop/t/8/assets/accordion-custom.js?v=105323356731531709191787751266" 293 type="module" 294 fetchpriority="low" 295></script>
vendor: 1 bytes, line 295
295
296<script 297 src="//artoffaceless.com/cdn/shop/t/8/assets/media.js?v=37825095869491791421787751266" 298 type="module" 299 fetchpriority="low" 300></script>
vendor: 1 bytes, line 300
300
301<script 302 src="//artoffaceless.com/cdn/shop/t/8/assets/product-price.js?v=179333985604099329921787751266" 303 type="module" 304 fetchpriority="low" 305></script>
vendor: 1 bytes, line 305
305
306<script 307 src="//artoffaceless.com/cdn/shop/t/8/assets/product-sku.js?v=28741104639155857071787751266" 308 type="module" 309 fetchpriority="low" 310></script>
vendor: 1 bytes, line 310
310
311<script 312 src="//artoffaceless.com/cdn/shop/t/8/assets/product-inventory.js?v=7173209571153411411787751266" 313 type="module" 314 fetchpriority="low" 315></script>
vendor: 1 bytes, line 315
315
316<script 317 src="//artoffaceless.com/cdn/shop/t/8/assets/show-more.js?v=94563802205717136101787751266" 318 type="module" 319 fetchpriority="low" 320></script>
vendor: 1 bytes, line 320
320
321<script 322 src="//artoffaceless.com/cdn/shop/t/8/assets/slideshow.js?v=28306258147874261831787751266" 323 type="module" 324 fetchpriority="low" 325></script>
vendor: 1 bytes, line 325
325
326<script 327 src="//artoffaceless.com/cdn/shop/t/8/assets/layered-slideshow.js?v=30135417790894624731787751266" 328 type="module" 329 fetchpriority="low" 330></script>
vendor: 1 bytes, line 330
330
331<script 332 src="//artoffaceless.com/cdn/shop/t/8/assets/anchored-popover.js?v=143987075196095667371787751266" 333 type="module" 334 fetchpriority="low" 335></script>
vendor: 1 bytes, line 335
335
336<script 337 src="//artoffaceless.com/cdn/shop/t/8/assets/floating-panel.js?v=151277338116891310371787751266" 338 type="module" 339 fetchpriority="low" 340></script>
vendor: 1 bytes, line 340
340
341<script 342 src="//artoffaceless.com/cdn/shop/t/8/assets/video-background.js?v=25237992823806706551787751266" 343 type="module" 344 fetchpriority="low" 345></script>
vendor: 1 bytes, line 345
345
346<script 347 src="//artoffaceless.com/cdn/shop/t/8/assets/component-quantity-selector.js?v=67906657287482036641787751266" 348 type="module" 349 fetchpriority="low" 350></script>
vendor: 1 bytes, line 350
350
351<script 352 src="//artoffaceless.com/cdn/shop/t/8/assets/media-gallery.js?v=154207211298275592001787751266" 353 type="module" 354 fetchpriority="low" 355></script>
vendor: 1 bytes, line 355
355
356<script 357 src="//artoffaceless.com/cdn/shop/t/8/assets/rte-formatter.js?v=40306132146590816021787751266" 358 type="module" 359 fetchpriority="low" 360></script>
vendor: 1 bytes, line 360
360
361<script 362 src="//artoffaceless.com/cdn/shop/t/8/assets/volume-pricing.js?v=15442793518842484731787751266" 363 type="module" 364 fetchpriority="low" 365></script>
vendor: 1 bytes, line 365
365
366<script 367 src="//artoffaceless.com/cdn/shop/t/8/assets/price-per-item.js?v=115937180292451397851787751266" 368 type="module" 369 fetchpriority="low" 370></script>
vendor: 1 bytes, line 370
370
371<script 372 src="//artoffaceless.com/cdn/shop/t/8/assets/volume-pricing-info.js?v=94479640769665442661787751266" 373 type="module" 374 fetchpriority="low" 375></script>
375 376 377 378 379 380
380<script 381 src="//artoffaceless.com/cdn/shop/t/8/assets/sticky-add-to-cart.js?v=130489688094345781431787751266" 382 type="module" 383 fetchpriority="low" 384 ></script>
384 385
385<script type="module"> 386 import { RecentlyViewed } from '@theme/recently-viewed-products'; 387 RecentlyViewed.addProduct('11491165929813'); 388 </script>
388 389 390
391<script 392 src="//artoffaceless.com/cdn/shop/t/8/assets/auto-close-details.js?v=58350291535404441581787751266" 393 defer="defer" 394></script>
394 395
396<script> 397 const Theme = { 398 translations: { 399 placeholder_image: `Placeholder image`, 400 added: `Added`, 401 recipient_form_fields_visible: `Recipient form fields are now visible`, 402 recipient_form_fields_hidden: `Recipient form fields are now hidden`, 403 recipient_form_error: `There was an error with the form submission`, 404 items_added_to_cart_one: `1 item added to cart`, 405 items_added_to_cart_other: `{{ count }} items added to cart`, 406 cart_count: `Total items in cart`, 407 }, 408 routes: { 409 cart_add_url: '/cart/add.js', 410 cart_change_url: '/cart/change', 411 cart_update_url: '/cart/update', 412 cart_url: '/cart', 413 predictive_search_url: '/search/suggest', 414 search_url: '/search', 415 }, 416 template: { 417 name: 'product', 418 }, 419 }; 420</script>
420 421<style data-shopify> 422@font-face { 423 font-family: "Red Hat Text"; 424 font-weight: 400; 425 font-style: normal; 426 font-display: swap; 427 src: url("//artoffaceless.com/cdn/fonts/red_hat_text/redhattext_n4.f45549d853e5e3e2907f21be9aecf95e1eaa7516.woff2") format("woff2"), 428 url("//artoffaceless.com/cdn/fonts/red_hat_text/redhattext_n4.966c83ef0ccfa6512b0ef1e376b376dfb286bd73.woff") format("woff"); 429} 430@font-face { 431 font-family: "Red Hat Text"; 432 font-weight: 700; 433 font-style: normal; 434 font-display: swap; 435 src: url("//artoffaceless.com/cdn/fonts/red_hat_text/redhattext_n7.01cb725162eb34b374670b9c1bc513ac241650e6.woff2") format("woff2"), 436 url("//artoffaceless.com/cdn/fonts/red_hat_text/redhattext_n7.b6189975b2592601f17bfdc64fb3d7ee0b51916e.woff") format("woff"); 437} 438@font-face { 439 font-family: "Red Hat Text"; 440 font-weight: 400; 441 font-style: italic; 442 font-display: swap; 443 src: url("//artoffaceless.com/cdn/fonts/red_hat_text/redhattext_i4.6cfaffd6c72cc494343813ed221ebfae57335fcc.woff2") format("woff2"), 444 url("//artoffaceless.com/cdn/fonts/red_hat_text/redhattext_i4.f23bcdc86836a2cc4ccc8466c927d1089852c8c8.woff") format("woff"); 445} 446@font-face { 447 font-family: "Red Hat Text"; 448 font-weight: 700; 449 font-style: italic; 450 font-display: swap; 451 src: url("//artoffaceless.com/cdn/fonts/red_hat_text/redhattext_i7.97ab5b705c1e57acd40bd16c6fd71567cb89284f.woff2") format("woff2"), 452 url("//artoffaceless.com/cdn/fonts/red_hat_text/redhattext_i7.f3393410cce0aafadc5ec698e5a40558f9a5b199.woff") format("woff"); 453} 454 455 456 :root { 457 /* Page Layout */ 458 --sidebar-width: 25rem; 459 --theme-drawer-width: 30rem; 460 --narrow-content-width: 36rem; 461 --normal-content-width: 42rem; 462 --narrow-page-width: 90rem; 463 --normal-page-width: 120rem; 464 --wide-page-width: 150rem; 465 466 /* Section Heights */ 467 --section-height-small: 15rem; 468 --section-height-medium: 25rem; 469 --section-height-large: 35rem; 470 471 @media screen and (min-width: 40em) { 472 --section-height-small: 40svh; 473 --section-height-medium: 55svh; 474 --section-height-large: 70svh; 475 } 476 477 @media screen and (min-width: 60em) { 478 --section-height-small: 50svh; 479 --section-height-medium: 65svh; 480 --section-height-large: 80svh; 481 } 482 483 /* Letter spacing */ 484 --letter-spacing-sm: 0.06em; 485 486 /* Font families */ 487 --font-body--family: "SF Mono", Menlo, Consolas, Monaco, Liberation Mono, Lucida Console, monospace, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol; 488 --font-body--style: normal; 489 --font-body--weight: 400; 490 --font-subheading--family: "SF Mono", Menlo, Consolas, Monaco, Liberation Mono, Lucida Console, monospace, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol; 491 --font-subheading--style: normal; 492 --font-subheading--weight: 400; 493 --font-heading--family: "SF Mono", Menlo, Consolas, Monaco, Liberation Mono, Lucida Console, monospace, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol; 494 --font-heading--style: normal; 495 --font-heading--weight: 400; 496 --font-accent--family: "Red Hat Text", sans-serif; 497 --font-accent--style: normal; 498 --font-accent--weight: 400; 499 500 /* Margin sizes */ 501 --font-heading--spacing: 0.25em; 502 --font-h1--spacing: var(--font-heading--spacing); 503 --font-h2--spacing: var(--font-heading--spacing); 504 --font-h3--spacing: var(--font-heading--spacing); 505 --font-h4--spacing: var(--font-heading--spacing); 506 --font-h5--spacing: var(--font-heading--spacing); 507 --font-h6--spacing: var(--font-heading--spacing); 508 --font-paragraph--spacing: 0.5em; 509 510 /** Z-Index / Layering */ 511 --layer-section-background: -2; 512 --layer-lowest: -1; 513 --layer-base: 0; 514 --layer-flat: 1; 515 --layer-raised: 2; 516 --layer-heightened: 4; 517 --layer-sticky: 8; 518 --layer-window-overlay: 10; 519 --layer-header-menu: 12; 520 --layer-overlay: 16; 521 --layer-menu-drawer: 18; 522 --layer-temporary: 20; 523 524 /* Max-width / Measure */ 525 --max-width--body-normal: 32.5em; 526 --max-width--body-narrow: 22.75em; 527 528 --max-width--heading-normal: 32.5em; 529 --max-width--heading-narrow: 19.5em; 530 531 --max-width--display-normal: 13em; 532 --max-width--display-narrow: 9.75em; 533 --max-width--display-tight: 3.25em; 534 535 /* Letter-spacing / Tracking */ 536 --letter-spacing--display-tight: -0.03em; 537 --letter-spacing--display-normal: 0em; 538 --letter-spacing--display-loose: 0.03em; 539 540 --letter-spacing--heading-tight: -0.03em; 541 --letter-spacing--heading-normal: 0em; 542 --letter-spacing--heading-loose: 0.03em; 543 544 --letter-spacing--body-tight: -0.03em; 545 --letter-spacing--body-normal: 0em; 546 --letter-spacing--body-loose: 0.03em; 547 548 /* Line height / Leading */ 549 --line-height: 1; 550 551 --line-height--display-tight: 1; 552 --line-height--display-normal: 1.1; 553 --line-height--display-loose: 1.2; 554 555 --line-height--heading-tight: 1.15; 556 --line-height--heading-normal: 1.25; 557 --line-height--heading-loose: 1.35; 558 559 --line-height--body-tight: 1.2; 560 --line-height--body-normal: 1.4; 561 --line-height--body-loose: 1.6; 562 563 /* Typography presets */ 564 --font-size--paragraph: 0.75rem;--font-size--h1: clamp(4.5rem, 12.0vw, 7.5rem);--font-size--h2: clamp(3.0rem, 7.2vw, 4.5rem);--font-size--h3: clamp(1.75rem, 4.8vw, 3.0rem);--font-size--h4: 1.5rem;--font-size--h5: 0.75rem;--font-size--h6: 0.75rem;--font-paragraph--weight: 400;--font-paragraph--size: var(--font-size--paragraph);--font-paragraph--family: var(--font-body--family);--font-paragraph--style: var(--font-body--style);--font-paragraph--case: ;--font-paragraph--line-height: var(--line-height--body-loose);--font-h1--weight: var(--font-heading--weight);--font-h1--letter-spacing: var(--letter-spacing--heading-normal);--font-h1--size: var(--font-size--h1);--font-h1--family: var(--font-heading--family);--font-h1--style: var(--font-heading--style);--font-h1--case: none;--font-h1--line-height: var(--line-height--display-tight);--font-h2--weight: var(--font-heading--weight);--font-h2--letter-spacing: var(--letter-spacing--heading-normal);--font-h2--size: var(--font-size--h2);--font-h2--family: var(--font-heading--family);--font-h2--style: var(--font-heading--style);--font-h2--case: none;--font-h2--line-height: var(--line-height--display-normal);--font-h3--weight: var(--font-heading--weight);--font-h3--letter-spacing: var(--letter-spacing--heading-normal);--font-h3--size: var(--font-size--h3);--font-h3--family: var(--font-heading--family);--font-h3--style: var(--font-heading--style);--font-h3--case: none;--font-h3--line-height: var(--line-height--display-normal);--font-h4--weight: var(--font-subheading--weight);--font-h4--letter-spacing: var(--letter-spacing--heading-normal);--font-h4--size: var(--font-size--h4);--font-h4--family: var(--font-subheading--family);--font-h4--style: var(--font-subheading--style);--font-h4--case: none;--font-h4--line-height: var(--line-height--display-normal);--font-h5--weight: var(--font-body--weight);--font-h5--letter-spacing: var(--letter-spacing--heading-normal);--font-h5--size: var(--font-size--h5);--font-h5--family: var(--font-body--family);--font-h5--style: var(--font-body--style);--font-h5--case: uppercase;--font-h5--line-height: var(--line-height--display-loose);--font-h6--weight: var(--font-body--weight);--font-h6--letter-spacing: var(--letter-spacing--heading-normal);--font-h6--size: var(--font-size--h6);--font-h6--family: var(--font-body--family);--font-h6--style: var(--font-body--style);--font-h6--case: uppercase;--font-h6--line-height: var(--line-height--display-loose); 565 566 /* Hardcoded font sizes */ 567 --font-size--3xs: 0.625rem; 568 --font-size--2xs: 0.75rem; 569 --font-size--xs: 0.8125rem; 570 --font-size--sm: 0.875rem; 571 --font-size--md: 1rem; 572 --font-size--lg: 1.125rem; 573 --font-size--xl: 1.25rem; 574 --font-size--2xl: 1.5rem; 575 --font-size--3xl: 2rem; 576 --font-size--4xl: 2.5rem; 577 --font-size--5xl: 3rem; 578 --font-size--6xl: 3.5rem; 579 580 /* Menu font sizes */ 581 --menu-font-sm--size: 0.875rem; 582 --menu-font-sm--line-height: calc(1.1 + 0.5 * min(16 / 14)); 583 --menu-font-md--size: 1rem; 584 --menu-font-md--line-height: calc(1.1 + 0.5 * min(16 / 16)); 585 --menu-font-xl--size: 1.25rem; 586 --menu-font-xl--line-height: calc(1.1 + 0.5 * min(16 / 20)); 587 --menu-font-2xl--size: 1.75rem; 588 --menu-font-2xl--line-height: calc(1.1 + 0.5 * min(16 / 28)); 589 590 /* Colors */ 591 --color-error: #8B0000; 592 --color-success: #006400; 593 --color-white: #FFFFFF; 594 --color-white-rgb: 255 255 255; 595 --color-instock: #3ED660; 596 --color-lowstock: #EE9441; 597 --color-outofstock: #C8C8C8; 598 599 /* Opacity */ 600 --opacity-5: 0.05; 601 --opacity-8: 0.08; 602 --opacity-10: 0.1; 603 --opacity-15: 0.15; 604 --opacity-20: 0.2;
605 --opacity-25: 0.25; 606 --opacity-30: 0.3; 607 --opacity-40: 0.4; 608 --opacity-50: 0.5; 609 --opacity-60: 0.6; 610 --opacity-70: 0.7; 611 --opacity-80: 0.8; 612 --opacity-85: 0.85; 613 --opacity-90: 0.9; 614 --opacity-subdued-text: 0.8; 615 --opacity-muted-text: 0.6; 616 617 --shadow-button: 0 2px 3px rgb(0 0 0 / 20%); 618 --gradient-image-overlay: linear-gradient(to top, rgb(0 0 0 / 0.5), transparent); 619 620 /* Spacing */ 621 --margin-3xs: 0.125rem; 622 --margin-2xs: 0.3rem; 623 --margin-xs: 0.5rem; 624 --margin-sm: 0.7rem; 625 --margin-md: 0.8rem; 626 --margin-lg: 1rem; 627 --margin-xl: 1.25rem; 628 --margin-2xl: 1.5rem; 629 --margin-4xl: 2rem; 630 --margin-6xl: 5rem; 631 632 633 --padding-3xs: 0.125rem; 634 --padding-2xs: 0.25rem; 635 --padding-xs: 0.5rem; 636 --padding-sm: 0.7rem; 637 --padding-md: 0.8rem; 638 --padding-lg: 1rem; 639 --padding-xl: 1.25rem; 640 --padding-2xl: 1.5rem; 641 --padding-3xl: 1.75rem; 642 --padding-4xl: 2rem; 643 --padding-5xl: 3rem; 644 --padding-6xl: 4rem; 645 646 --gap-3xs: 0.125rem; 647 --gap-2xs: 0.3rem; 648 --gap-xs: 0.5rem; 649 --gap-sm: 0.7rem; 650 --gap-md: 0.9rem; 651 --gap-lg: 1rem; 652 --gap-xl: 1.25rem; 653 --gap-2xl: 2rem; 654 --gap-3xl: 3rem; 655 656 --spacing-scale-md: 0.7; 657 --spacing-scale-default: 1.0; 658 659 /* Checkout buttons gap */ 660 --checkout-button-gap: 10px; 661 662 /* Borders */ 663 --style-border-width: 1px; 664 --style-border-radius-xs: 0.2rem; 665 --style-border-radius-sm: 0.6rem; 666 --style-border-radius-md: 0.8rem; 667 --style-border-radius-50: 50%; 668 --style-border-radius-lg: 1rem; 669 --style-border-radius-pills: 40px; 670 --style-border-radius-inputs: 0px; 671 --style-border-radius-buttons-primary: 0px; 672 --style-border-radius-buttons-secondary: 0px; 673 --style-border-width-primary: 0px; 674 --style-border-width-secondary: 1px; 675 --style-border-width-inputs: 1px; 676 --style-border-radius-popover: 0px; 677 --style-border-popover: 0px solid #000000; 678 --style-border-drawer: 1px solid #000000; 679 --style-border-swatch-opacity: 10%; 680 --style-border-swatch-width: 1px; 681 --style-border-swatch-style: solid; 682 683 /* Animation */ 684 --ease-out-cubic: cubic-bezier(0.33, 1, 0.68, 1); 685 --ease-out-quad: cubic-bezier(0.32, 0.72, 0, 1); 686 --animation-speed-fast: 0.0625s; 687 --animation-speed: 0.125s; 688 --animation-speed-slow: 0.2s; 689 --animation-speed-medium: 0.15s; 690 --animation-easing: ease-in-out; 691 --drawer-animation-speed: 0.2s; 692 --animation-values: var(--animation-speed) var(--animation-easing); 693 --animation-timing-hover: cubic-bezier(0.25, 0.46, 0.45, 0.94); 694 --animation-timing-active: cubic-bezier(0.5, 0, 0.75, 0); 695 --animation-timing-bounce: cubic-bezier(0.34, 1.56, 0.64, 1); 696 --animation-timing-default: cubic-bezier(0, 0, 0.2, 1); 697 --animation-timing-fade-in: cubic-bezier(0.16, 1, 0.3, 1); 698 --animation-timing-fade-out: cubic-bezier(0.4, 0, 0.2, 1); 699 /* Spring definitions suffixed with perceptual duration (d<ms>) and bounce (b<%>)*/ 700 --spring-d300-b0-easing: linear(0, 0.0033 0.81%, 0.027 2.42%, 0.0916 4.84%, 0.4745 15.32%, 0.6422 20.97%, 0.7175, 0.7789, 0.8283 30.64%, 0.876, 0.9111 38.71%, 0.941, 0.9611 48.39%, 0.9707, 0.978 54.84%, 0.9885 62.1%, 0.9949 70.97%, 0.9982 82.26%, 0.9997 100%); 701 --spring-d300-b0-duration: 0.4980s; 702 --spring-d280-b0-easing: linear(0, 0.0044, 0.0164 1.85%, 0.085 4.63%, 0.4571 14.81%, 0.575 18.52%, 0.6505, 0.7148 24.07%, 0.7849, 0.8393, 0.8809 35.18%, 0.9189, 0.9453 44.44%, 0.9662, 0.9793 55.55%, 0.9894 62.95%, 0.995 71.28%, 0.9982 82.39%, 0.9997 99.98%); 703 --spring-d280-b0-duration: 0.4648s; 704 --spring-d220-b0-easing: linear( 705 0, 706 0.0093 1.37%, 707 0.0696 4.12%, 708 0.4667 15.09%, 709 0.6322 20.58%, 710 0.6986 23.32%, 711 0.7793 27.44%, 712 0.8219 30.18%, 713 0.8721, 714 0.9089 38.42%, 715 0.9427, 716 0.9644, 717 0.978 54.88%, 718 0.9881 61.74%, 719 0.9944 69.97%, 720 0.998 80.95%, 721 0.9996 98.78% 722 ); 723 --spring-d220-b0-duration: 0.3818s; 724 --spring-d180-b0-easing: linear(0, 0.0234, 0.0805 4.48%, 0.4865 15.68%, 0.6211 20.16%, 0.7696 26.88%, 0.8064 29.12%, 0.8646, 0.9063, 0.9358, 0.9563 47.04%, 0.9757, 0.9867 60.48%, 0.9941 69.44%, 0.9979 80.64%, 0.9996 98.56%); 725 --spring-d180-b0-duration: 0.2988s; 726 727 /* View transitions */ 728 /* View transition old */ 729 --view-transition-old-main-content: var(--animation-speed) var(--animation-easing) both fadeOut; 730 731 /* View transition new */ 732 --view-transition-new-main-content: var(--animation-speed) var(--animation-easing) both fadeIn, var(--animation-speed) var(--animation-easing) both slideInTopViewTransition; 733 734 /* Focus */ 735 --focus-outline-width: 0.09375rem; 736 --focus-outline-offset: 0.2em; 737 738 /* Badges */ 739 --badge-rectangle-padding-block: 1px; 740 --badge-rectangle-padding-inline: 6px; 741 @media screen and (min-width: 750px) { 742 --badge-rectangle-padding-block: 4px; 743 --badge-rectangle-padding-inline: 10px; 744 } 745 746 /* Icons */ 747 --icon-size-2xs: 0.6rem; 748 --icon-size-xs: 0.85rem; 749 --icon-size-sm: 1.25rem; 750 --icon-size-md: 1.375rem; 751 --icon-size-lg: 1.5rem; 752 --icon-stroke-width: 1px; 753 754 /* Input */ 755 --input-padding-y: 0.8rem; 756 --input-padding-x: 0.8rem; 757 --input-padding: var(--input-padding-y) var(--input-padding-x); 758 --input-box-shadow-width: var(--style-border-width-inputs); 759 --input-box-shadow: 0 0 0 var(--input-box-shadow-width) var(--color-input-border); 760 --input-box-shadow-focus: 0 0 0 calc(var(--input-box-shadow-width) + 0.5px) var(--color-input-border); 761 --input-disabled-background-color: rgb(var(--color-foreground-rgb) / var(--opacity-10)); 762 --input-disabled-border-color: rgb(var(--color-foreground-rgb) / var(--opacity-5)); 763 --input-disabled-text-color: rgb(var(--color-foreground-rgb) / var(--opacity-50));
764 --input-textarea-min-height: 55px; 765 766 /* Checkbox */ 767 --checkbox-size: 22px; 768 --checkbox-border-radius: 7px; 769 --checkbox-border: 1px solid rgb(var(--color-foreground-rgb) / var(--opacity-35-55)); 770 --checkbox-label-padding: 8px; 771 772 @media screen and (min-width: 750px) { 773 --checkbox-size: 16px; 774 --checkbox-border-radius: 5px; 775 --checkbox-label-padding: 6px; 776 } 777 778 /* Button size */ 779 --button-size-md: 36px; 780 --button-size: var(--minimum-touch-target); 781 --button-padding-inline: 24px; 782 --button-padding-block: 16px; 783 784 /* Button font-family */ 785 --button-font-family-primary: var(--font-body--family); 786 --button-font-family-secondary: var(--font-body--family); 787 788 /* Button text case */ 789 --button-text-case-primary: uppercase; 790 --button-text-case-secondary: uppercase; 791 792 /* Borders */ 793 --border-color: rgb(var(--color-border-rgb) / var(--opacity-50)); 794 --border-width-sm: 1px; 795 --border-radius-sm: 0.25rem; 796 797 /* Drawers */ 798 --drawer-header-desktop-top: 0rem; 799 --drawer-padding: calc(var(--padding-sm) + 7px); 800 --drawer-height: 100dvh; 801 --drawer-width: 95vw; 802 --drawer-max-width: 500px; 803 804 /* Variant Picker Swatches */ 805 --variant-picker-swatch-width-unitless: 18; 806 --variant-picker-swatch-height-unitless: 18; 807 --variant-picker-swatch-width: 18px; 808 --variant-picker-swatch-height: 18px; 809 --variant-picker-swatch-radius: 0px; 810 --variant-picker-border-width: 1px; 811 --variant-picker-border-style: solid; 812 --variant-picker-border-opacity: 10%; 813 814 /* Variant Picker Buttons */ 815 --variant-picker-button-radius: 0px; 816 --variant-picker-button-border-width: 1px; 817 --variant-option-label-color: var(--color, var(--color-foreground)); 818 819 /* Slideshow */ 820 --slideshow-controls-icon: 2rem; 821 --peek-next-slide-size: 3rem; 822 823 /* Utilities */ 824 --backdrop-opacity: 0.15; 825 --backdrop-color-rgb: var(--color-shadow-rgb); 826 --minimum-touch-target: 44px; 827 --disabled-opacity: 0.5; 828 --skeleton-opacity: 0.025; 829 830 /* Shapes */ 831 832 /* Buy buttons */ 833 --height-buy-buttons: calc(var(--padding-lg) * 2 + var(--icon-size-sm)); 834 835 /* Card image width and height variables */ 836 --card-width-small: 10rem; 837 838 --height-small: 10rem; 839 840 @media screen and (min-width: 750px) { 841 --height-small: 17.5rem; 842 } 843 844 /* Modal */ 845 --modal-max-height: 65dvh; 846 --quick-add-modal-height: min(38.5rem, 96vh); 847 --quick-add-modal-width: min(54rem, 96vw); 848 --quick-add-modal-gallery-width: 24rem; 849 850 /* Card styles for search */ 851 --card-bg-hover: rgb(var(--color-foreground-rgb) / var(--opacity-5)); 852 --card-border-hover: rgb(var(--color-foreground-rgb) / var(--opacity-30)); 853 --card-border-focus: rgb(var(--color-foreground-rgb) / var(--opacity-10)); 854 855 /* Cart */ 856 --cart-primary-font-family: var(--font-body--family); 857 --cart-primary-font-style: var(--font-body--style); 858 --cart-primary-font-weight: var(--font-body--weight); 859 --cart-secondary-font-family: var(--font-primary--family); 860 --cart-secondary-font-style: var(--font-primary--style); 861 --cart-secondary-font-weight: var(--font-primary--weight); 862 } 863 864 .custom-color-quick-add { 865 --quick-add-background: #ffffff; 866 --quick-add-foreground: #000000; 867 } 868</style> 869 870 871 872 873 874 875 <style data-shopify> 876 .color-custom-popover, 877 .color-custom-popover .text-block { 878 /* Background */ 879 --color-background: #ffffff; 880 --color-background-rgb: 255 255 255; 881 882 /* Opacity values adjusted for background brightness */ 883 884--opacity-5-15: 0.05; --opacity-10-25: 0.1; --opacity-35-55: 0.35; --opacity-40-60: 8850.4; --opacity-30-60: 0.3; --opacity-60: 0.6; 886 887 888 889 /* Foreground / text â explicit or smart-contrasted */ 890 --color: #000000; 891 --color-rgb: 0 0 0; 892 --color-foreground: #000000; 893 --color-foreground-rgb: 0 0 0; 894 --color-foreground-muted: rgb(0 0 0 / var(--opacity-muted-text)); 895 --color-foreground-subdued: rgb(0 0 0 / var(--opacity-subdued-text)); 896 --color-border: #000000; 897 --color-border-rgb: 0 0 0; 898 899 } 900 901 902 .color-custom-popover { 903 /* Form-related tokens stay on .color-custom only â .text-block is a prose 904 container (text/announcement/inline-text/blog-post-description/ 905 collection-link/price/sku) and never holds form inputs. */ 906 --input-disabled-background-color: rgb(0 0 0 / var(--opacity-10)); 907 --input-disabled-border-color: rgb(0 0 0 / var(--opacity-5)); 908 --input-disabled-text-color: rgb(0 0 0 / var(--opacity-50)); 909 --checkbox-border: 1px solid rgb(0 0 0 / var(--opacity-35-55)); 910 } 911 912 913 .color-custom-popover { 914 color: var(--color, var(--color-foreground)); 915 background-color: var(--color-background); 916 } 917 </style> 918 919 920 921 922 923 924 925 926 <style data-shopify> 927 .color-custom-drawer, 928 .color-custom-drawer .text-block {
929 /* Background */ 930 --color-background: #ffffff; 931 --color-background-rgb: 255 255 255; 932 933 /* Opacity values adjusted for background brightness */ 934 935--opacity-5-15: 0.05; --opacity-10-25: 0.1; --opacity-35-55: 0.35; --opacity-40-60: 9360.4; --opacity-30-60: 0.3; --opacity-60: 0.6; 937 938 939 940 /* Foreground / text â explicit or smart-contrasted */ 941 --color: #000000; 942 --color-rgb: 0 0 0; 943 --color-foreground: #000000; 944 --color-foreground-rgb: 0 0 0; 945 --color-foreground-muted: rgb(0 0 0 / var(--opacity-muted-text)); 946 --color-foreground-subdued: rgb(0 0 0 / var(--opacity-subdued-text)); 947 --color-border: #000000; 948 --color-border-rgb: 0 0 0; 949 950 } 951 952 953 .color-custom-drawer { 954 /* Form-related tokens stay on .color-custom only â .text-block is a prose 955 container (text/announcement/inline-text/blog-post-description/ 956 collection-link/price/sku) and never holds form inputs. */ 957 --input-disabled-background-color: rgb(0 0 0 / var(--opacity-10)); 958 --input-disabled-border-color: rgb(0 0 0 / var(--opacity-5)); 959 --input-disabled-text-color: rgb(0 0 0 / var(--opacity-50)); 960 --checkbox-border: 1px solid rgb(0 0 0 / var(--opacity-35-55)); 961 } 962 963 964 .color-custom-drawer { 965 color: var(--color, var(--color-foreground)); 966 background-color: var(--color-background); 967 } 968 </style> 969 970 971 972 973 974 975 976 977 <style data-shopify> 978 .color-custom-badge-sale, 979 .color-custom-badge-sale .text-block { 980 /* Background */ 981 --color-background: #383838; 982 --color-background-rgb: 56 56 56; 983 984 /* Opacity values adjusted for background brightness */ 985 986--opacity-5-15: 0.15; --opacity-10-25: 0.25; --opacity-35-55: 0.55; --opacity-40-60: 9870.6; --opacity-30-60: 0.6; --opacity-60: 0.6; 988 989 990 991 /* Foreground / text â explicit or smart-contrasted */ 992 --color: #ffffff; 993 --color-rgb: 255 255 255; 994 --color-foreground: #ffffff; 995 --color-foreground-rgb: 255 255 255; 996 --color-foreground-muted: rgb(255 255 255 / var(--opacity-muted-text)); 997 --color-foreground-subdued: rgb(255 255 255 / var(--opacity-subdued-text)); 998 --color-border: #ffffff; 999 --color-border-rgb: 255 255 255; 1000 1001 } 1002 1003 1004 .color-custom-badge-sale { 1005 /* Form-related tokens stay on .color-custom only â .text-block is a prose 1006 container (text/announcement/inline-text/blog-post-description/ 1007 collection-link/price/sku) and never holds form inputs. */ 1008 --input-disabled-background-color: rgb(255 255 255 / var(--opacity-10)); 1009 --input-disabled-border-color: rgb(255 255 255 / var(--opacity-5)); 1010 --input-disabled-text-color: rgb(255 255 255 / var(--opacity-50)); 1011 --checkbox-border: 1px solid rgb(255 255 255 / var(--opacity-35-55)); 1012 } 1013 1014 1015 .color-custom-badge-sale { 1016 color: var(--color, var(--color-foreground)); 1017 background-color: var(--color-background); 1018 } 1019 </style> 1020 1021 1022 1023 1024 1025 1026 1027 1028 <style data-shopify> 1029 .color-custom-badge-sold-out, 1030 .color-custom-badge-sold-out .text-block { 1031 /* Background */ 1032 --color-background: #000000; 1033 --color-background-rgb: 0 0 0; 1034 1035 /* Opacity values adjusted for background brightness */ 1036 1037--opacity-5-15: 0.15; --opacity-10-25: 0.25; --opacity-35-55: 0.55; --opacity-40-60: 10380.6; --opacity-30-60: 0.6; --opacity-60: 0.6; 1039 1040 1041 1042 /* Foreground / text â explicit or smart-contrasted */ 1043 --color: #ffffff; 1044 --color-rgb: 255 255 255; 1045 --color-foreground: #ffffff; 1046 --color-foreground-rgb: 255 255 255; 1047 --color-foreground-muted: rgb(255 255 255 / var(--opacity-muted-text)); 1048 --color-foreground-subdued: rgb(255 255 255 / var(--opacity-subdued-text)); 1049 --color-border: #ffffff; 1050 --color-border-rgb: 255 255 255; 1051 1052 } 1053 1054 1055 .color-custom-badge-sold-out { 1056 /* Form-related tokens stay on .color-custom only â .text-block is a prose 1057 container (text/announcement/inline-text/blog-post-description/ 1058 collection-link/price/sku) and never holds form inputs. */ 1059 --input-disabled-background-color: rgb(255 255 255 / var(--opacity-10)); 1060 --input-disabled-border-color: rgb(255 255 255 / var(--opacity-5)); 1061 --input-disabled-text-color: rgb(255 255 255 / var(--opacity-50)); 1062 --checkbox-border: 1px solid rgb(255 255 255 / var(--opacity-35-55)); 1063 } 1064 1065 1066 .color-custom-badge-sold-out { 1067 color: var(--color, var(--color-foreground)); 1068 background-color: var(--color-background); 1069 } 1070 </style> 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089<style data-shopify> 1090 /* Palette colors */ 1091 :root { 1092 --color-background: #ffffff; 1093 --color-background-rgb: 255 255 255; 1094 --color-foreground: #000000; 1095 --color-foreground-rgb: 0 0 0; 1096 --color-border: #000000; 1097 --color-border-rgb: 0 0 0; 1098 --palette-lightest: #ffffff; 1099 --palette-lightest-rgb: 255 255 255; 1100 --palette-darkest: #000000; 1101 --palette-darkest-rgb: 0 0 0; 1102 1103--opacity-5-15: 0.05; --opacity-10-25: 0.1; --opacity-35-55: 0.35; --opacity-40-60: 11040.4; --opacity-30-60: 0.3; --opacity-60: 0.6; 1105 1106 1107 --color-primary-button-text: rgb(255 255 255 / 1.0); 1108 --color-primary-button-background: rgb(0 0 0 / 1.0); 1109 --color-primary-button-border: rgb(0 0 0 / 1.0); 1110 --color-primary-button-focus-outline: rgb(0 0 0); 1111 --color-primary-button-hover-text: rgb(255 255 255 / 1.0); 1112 --color-primary-button-hover-background: #262626;
1113 --color-primary-button-hover-border: #262626; 1114 1115 --color-secondary-button-text: rgb(0 0 0 / 1.0); 1116 --color-secondary-button-background: rgb(239 239 239 / 1.0); 1117 --color-secondary-button-border: rgb(239 239 239 / 1.0); 1118 --color-secondary-button-hover-text: rgb(0 0 0 / 1.0); 1119 --color-secondary-button-hover-background: #e2e2e2; 1120 --color-secondary-button-hover-border: #e2e2e2; 1121 1122 --color-input-background: rgb(255 255 255 / 1.0); 1123 --color-input-text: rgb(0 0 0 / 1.0); 1124 --color-input-text-rgb: 0 0 0; 1125 --color-input-border: rgb(0 0 0 / 0.13); 1126 1127 --color-variant-background: rgb(255 255 255 / 1.0); 1128 --color-variant-border: rgb(230 230 230 / 1.0); 1129 --color-variant-text: rgb(0 0 0 / 1.0); 1130 --color-variant-text-rgb: 0 0 0; 1131 --color-variant-hover-background: #f2f2f2; 1132 --color-variant-hover-text: rgb(0 0 0 / 1.0); 1133 --color-variant-hover-border: #d9d9d9; 1134 1135 --color-selected-variant-background: rgb(0 0 0 / 1.0); 1136 --color-selected-variant-border: rgb(0 0 0 / 1.0); 1137 --color-selected-variant-text: rgb(255 255 255 / 1.0); 1138 --color-selected-variant-text-rgb: 255 255 255; 1139 --color-selected-variant-hover-background: #262626; 1140 --color-selected-variant-hover-text: rgb(255 255 255 / 1.0); 1141 --color-selected-variant-hover-border: #262626; 1142 1143 --input-disabled-background-color: rgb(var(--color-foreground-rgb) / var(--opacity-10)); 1144 --input-disabled-border-color: rgb(var(--color-foreground-rgb) / var(--opacity-5-15)); 1145 --input-disabled-text-color: rgb(var(--color-foreground-rgb) / var(--opacity-50)); 1146 --color-foreground-muted: rgb(var(--color-rgb, var(--color-foreground-rgb)) / var(--opacity-muted-text)); 1147 --color-foreground-subdued: rgb(var(--color-rgb, var(--color-foreground-rgb)) / var(--opacity-subdued-text)); 1148 --color-drawer-shadow-rgb: ; 1149 --color-popover-shadow-rgb: 0 0 0; 1150 1151 /* Shadows */ 1152 1153 1154 --shadow-blur: 20px; 1155 --shadow-popover: 0px 4px 20px rgb(var(--color-popover-shadow-rgb) / var(--opacity-15)); 1156 1157 } 1158 1159 body { 1160 color: var(--color-foreground); 1161 background-color: var(--color-background); 1162 } 1163</style> 1164 1165 1166
1166<script>window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.start');</script>
1166<meta id="shopify-digital-wallet" name="shopify-digital-wallet" content="/99124740437/digital_wallets/dialog"> 1167<link rel="ucp" href="/.well-known/ucp" version="2026-08-25"><link rel="buy" href="/cart/54555719467349:1?ucp/version=2026-08-25&context/payment/0/handler=dev.shopify.shop_pay" payment="dev.shopify.shop_pay com.google.pay dev.shopify.card"><link rel="alternate" type="application/json+oembed" href="https://artoffaceless.com/products/the-hollow-circuit-book-1.oembed">
1168<script async="async" src="/checkouts/internal/preloads.js?locale=en-GB"></script>
1168 1169<link rel="preconnect" href="https://shop.app" crossorigin="anonymous">
1170<script async="async" src="https://shop.app/checkouts/internal/preloads.js?locale=en-GB&shop_id=99124740437" crossorigin="anonymous"></script>
vendor: 1 bytes, line 1170
1170
1171<script id="apple-pay-shop-capabilities" type="application/json">{"shopId":99124740437,"countryCode":"GB","currencyCode":"GBP","merchantCapabilities":["supports3DS"],"merchantId":"gid:\/\/shopify\/Shop\/99124740437","merchantName":"Art of FACELESS","requiredBillingContactFields":["postalAddress","email"],"requiredShippingContactFields":["postalAddress","email"],"shippingType":"shipping","supportedNetworks":["visa","maestro","masterCard","amex","discover","elo"],"total":{"type":"pending","label":"Art of FACELESS","amount":"1.00"},"shopifyPaymentsEnabled":true,"supportsSubscriptions":true}</script>
vendor: 1 bytes, line 1171
1171
1172<script id="shopify-features" type="application/json">{"accessToken":"297f8b4b315cd8ff0f00d185adacfdfb","betas":["rich-media-storefront-analytics"],"domain":"artoffaceless.com","predictiveSearch":true,"shopId":99124740437,"locale":"en"}</script>
vendor: 1 bytes, line 1172
1172
1173<script>var Shopify = Shopify || {}; 1174Shopify.shop = "gqrw8b-as.myshopify.com"; 1175Shopify.locale = "en"; 1176Shopify.currency = {"active":"GBP","rate":"1.0"}; 1177Shopify.country = "GB"; 1178Shopify.theme = {"name":"Featured image fallback (og:image fix) - draft","id":202604052821,"schema_name":"Atelier","schema_version":"4.1.4","theme_store_id":3621,"role":"main"}; 1179Shopify.theme.handle = "null"; 1180Shopify.theme.style = {"id":null,"handle":null}; 1181Shopify.cdnHost = "artoffaceless.com/cdn"; 1182Shopify.routes = Shopify.routes || {}; 1183Shopify.routes.root = "/"; 1184Shopify.shopJsCdnBaseUrl = "https://cdn.shopify.com/shopifycloud/shop-js"; 1185Shopify.SignInWithShop = Shopify.SignInWithShop || {}; 1186Shopify.SignInWithShop.User = Shopify.SignInWithShop.User || {}; 1187Shopify.SignInWithShop.User.recognized = false;</script>
vendor: 1 bytes, line 1187
1187
1188<script type="module">!function(o){(o.Shopify=o.Shopify||{}).modules=!0}(window);</script>
vendor: 1 bytes, line 1188
1188
1189<script>!function(o){function n(){var o=[];function n(){o.push(Array.prototype.slice.apply(arguments))}return n.q=o,n}var t=o.Shopify=o.Shopify||{};t.loadFeatures=n(),t.autoloadFeatures=n()}(window);</script>
vendor: 1 bytes, line 1189
1189
1190<script> 1191 window.ShopifyPay = window.ShopifyPay || {}; 1192 window.ShopifyPay.apiHost = "shop.app\/pay"; 1193 window.ShopifyPay.redirectState = null; 1194</script>
vendor: 1 bytes, line 1194
1194
1195<script> 1196 window.Shopify = window.Shopify || {}; 1197 window.Shopify.SignInWithShop = window.Shopify.SignInWithShop || {}; 1198 window.Shopify.SignInWithShop.assetMetrics = { sampleRate: 0.25 }; 1199 window.Shopify.SignInWithShop.eligible = true; 1200</script>
vendor: 1 bytes, line 1200
1200
1201<script id="shop-js-analytics" type="application/json">{"pageType":"product"}</script>
vendor: 1 bytes, line 1201
1201
1202<script defer="defer" async type="module" src="https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.init-shop-cart-sync.en.esm.js"></script>
vendor: 1 bytes, line 1202
1202
1203<script type="module"> 1204 await import("https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.init-shop-cart-sync.en.esm.js"); 1205 1206 window.Shopify.SignInWithShop?.initShopCartSync?.({"fedCMEnabled":true,"windoidEnabled":true}); 1207 1208</script>
vendor: 1 bytes, line 1208
1208
1209<script defer="defer" async type="module" src="https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.payment-terms.en.esm.js"></script>
vendor: 1 bytes, line 1209
1209
1210<script type="module"> 1211 await import("https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.payment-terms.en.esm.js"); 1212 1213 1214</script>
vendor: 1 bytes, line 1214
1214
1215<script> 1216 window.Shopify = window.Shopify || {}; 1217 if (!window.Shopify.featureAssets) window.Shopify.featureAssets = {}; 1218 window.Shopify.featureAssets['shop-js'] = {"avatar":["modules/v2/loader.avatar.en.esm.js"],"checkout-modal":["modules/v2/loader.checkout-modal.en.esm.js"],"init-customer-accounts-sign-up":["modules/v2/loader.init-customer-accounts-sign-up.en.esm.js"],"init-customer-accounts":["modules/v2/loader.init-customer-accounts.en.esm.js"],"init-fed-cm":["modules/v2/loader.init-fed-cm.en.esm.js"],"init-shop-cart-sync":["modules/v2/loader.init-shop-cart-sync.en.esm.js"],"init-shop-email-lookup-coordinator":["modules/v2/loader.init-shop-email-lookup-coordinator.en.esm.js"],"init-shop-for-new-customer-accounts":["modules/v2/loader.init-shop-for-new-customer-accounts.en.esm.js"],"init-shop-user-recognition":["modules/v2/loader.init-shop-user-recognition.en.esm.js"],"init-windoid":["modules/v2/loader.init-windoid.en.esm.js"],"lead-capture":["modules/v2/loader.lead-capture.en.esm.js"],"listener":["modules/v2/loader.listener.en.esm.js"],"pay-button":["modules/v2/loader.pay-button.en.esm.js"],"payment-terms":["modules/v2/loader.payment-terms.en.esm.js"],"shop-button":["modules/v2/loader.shop-button.en.esm.js"],"shop-cart-sync":["modules/v2/loader.shop-cart-sync.en.esm.js"],"shop-cash-offers":["modules/v2/loader.shop-cash-offers.en.esm.js"],"shop-follow-button":["modules/v2/loader.shop-follow-button.en.esm.js"],"shop-login-button":["modules/v2/loader.shop-login-button.en.esm.js"],"shop-login":["modules/v2/loader.shop-login.en.esm.js"],"shop-toast-manager":["modules/v2/loader.shop-toast-manager.en.esm.js"],"shop-user-recognition":["modules/v2/loader.shop-user-recognition.en.esm.js"]}; 1219</script>
vendor: 1 bytes, line 1219
1219
1220<script>(function() { 1221 var isLoaded = false; 1222 function asyncLoad() { 1223 if (isLoaded) return; 1224 isLoaded = true; 1225 var urls = ["https:\/\/ecommerce-editor-connector.live.gelato.tech\/ecommerce-editor\/v1\/shopify.esm.js?c=58de9079-7b7a-420c-ab94-fee8912a3901\u0026s=33b52892-067a-4a81-af02-a32d5dcdb685\u0026shop=gqrw8b-as.myshopify.com"]; 1226 for (var i = 0; i < urls.length; i++) { 1227 var s = document.createElement('script'); 1228 s.type = 'text/javascript'; 1229 s.async = true; 1230 s.src = urls[i]; 1231 var x = document.getElementsByTagName('script')[0]; 1232 x.parentNode.insertBefore(s, x); 1233 } 1234 }; 1235 if(window.attachEvent) { 1236 window.attachEvent('onload', asyncLoad); 1237 } else { 1238 window.addEventListener('load', asyncLoad, false); 1239 } 1240})();</script>
vendor: 1 bytes, line 1240
1240
1241<script id="__st">var __st={"a":99124740437,"offset":3600,"reqid":"67587c28-7e0a-4bc8-b624-0300b2098da3-1791099356","pageurl":"artoffaceless.com\/products\/the-hollow-circuit-book-1","u":"65be0fc287ae","p":"product","rtyp":"product","rid":11491165929813};</script>
vendor: 1 bytes, line 1241
1241
1242<script>window.ShopifyPaypalV4VisibilityTracking = true;</script>
vendor: 1 bytes, line 1242
1242
1243<script id="captcha-bootstrap">!function(){'use strict';const t='contact',e='account',n='new_comment',o=[[t,t],['blogs',n],['comments',n],[t,'customer']],c=[[e,'customer_login'],[e,'guest_login'],[e,'recover_customer_password'],[e,'create_customer']],r=t=>t.map((([t,e])=>`form[action*='/${t}']:not([data-nocaptcha='true']) input[name='form_type'][value='${e}']`)).join(','),a=t=>()=>t?[...document.querySelectorAll(t)].map((t=>t.form)):[];function s(){const t=[...o],e=r(t);return a(e)}const i='password',u='form_key',d=['recaptcha-v3-token','g-recaptcha-response','h-captcha-response',i],f=()=>{try{return window.sessionStorage}catch{return}},m='__shopify_v',_=t=>t.elements[u];function p(t,e,n=!1){try{const o=window.sessionStorage,c=JSON.parse(o.getItem(e)),{data:r}=function(t){const{data:e,action:n}=t;return t[m]||n?{data:e,action:n}:{data:t,action:n}}(c);for(const[e,n]of Object.entries(r))t.elements[e]&&(t.elements[e].value=n);n&&o.removeItem(e)}catch(o){console.error('form repopulation failed',{error:o})}}const l='form_type',E='cptcha';function T(t){t.dataset[E]=!0}const w=window,h=w.document,L='Shopify',v='ce_forms',y='captcha';let A=!1;((t,e)=>{const n=(g='f06e6c50-85a8-45c8-87d0-21a2b65856fe',I='https://cdn.shopify.com/shopifycloud/storefront-forms-hcaptcha/ce_storefront_forms_captcha_hcaptcha.v1.5.3.iife.js',D={infoText:'Protected by hCaptcha',privacyText:'Privacy',termsText:'Terms'},(t,e,n)=>{const o=w[L][v],c=o.bindForm;if(c)return c(t,g,e,D).then(n);var r;o.q.push([[t,g,e,D],n]),r=I,A||(h.body.append(Object.assign(h.createElement('script'),{id:'captcha-provider',async:!0,src:r})),A=!0)});var g,I,D;w[L]=w[L]||{},w[L][v]=w[L][v]||{},w[L][v].q=[],w[L][y]=w[L][y]||{},w[L][y].protect=function(t,e){n(t,void 0,e),T(t)},Object.freeze(w[L][y]),function(t,e,n,w,h,L){const[v,y,A,g]=function(t,e,n){const i=e?o:[],u=t?c:[],d=[...i,...u],f=r(d),m=r(i),_=r(d.filter((([t,e])=>n.includes(e))));return[a(f),a(m),a(_),s()]}(w,h,L),I=t=>{const e=t.target;return e instanceof HTMLFormElement?e:e&&e.form},D=t=>v().includes(t);t.addEventListener('submit',(t=>{const e=I(t);if(!e)return;const n=D(e)&&!e.dataset.hcaptchaBound&&!e.dataset.recaptchaBound,o=_(e),c=g().includes(e)&&(!o||!o.value);(n||c)&&t.preventDefault(),c&&!n&&(function(t){try{if(!f())return;!function(t){const e=f();if(!e)return;const n=_(t);if(!n)return;const o=n.value;o&&e.removeItem(o)}(t);const e=Array.from(Array(32),(()=>Math.random().toString(36)[2])).join('');!function(t,e){_(t)||t.append(Object.assign(document.createElement('input'),{type:'hidden',name:u})),t.elements[u].value=e}(t,e),function(t,e){const n=f();if(!n)return;const o=[...t.querySelectorAll(`input[type='${i}']`)].map((({name:t})=>t)),c=[...d,...o],r={};for(const[a,s]of new FormData(t).entries())c.includes(a)||(r[a]=s);n.setItem(e,JSON.stringify({[m]:1,action:t.action,data:r}))}(t,e)}catch(e){console.error('failed to persist form',e)}}(e),e.submit())}));const S=(t,e)=>{t&&!t.dataset[E]&&(n(t,e.some((e=>e===t))),T(t))};for(const o of['focusin','change'])t.addEventListener(o,(t=>{const e=I(t);D(e)&&S(e,y())}));const B=e.get('form_key'),M=e.get(l),P=B&&M;t.addEventListener('DOMContentLoaded',(()=>{const t=y();if(P)for(const e of t)e.elements[l].value===M&&p(e,B);[...new Set([...A(),...v().filter((t=>'true'===t.dataset.shopifyCaptcha))])].forEach((e=>S(e,t)))}))}(h,new URLSearchParams(w.location.search),n,t,e,['guest_login'])})(!0,!0)}();</script>
vendor: 1 bytes, line 1243
1243
1244<script integrity="sha256-JjoPp5ZfB1sSAs5SQaol1x1GgvveM+BgmRzyDexInEQ=" data-source-attribution="shopify.loadfeatures" defer="defer" src="//artoffaceless.com/cdn/shopifycloud/storefront/assets/storefront/load_feature-1bd60354.js" crossorigin="anonymous"></script>
vendor: 1 bytes, line 1244
1244
1245<script>(function () {var userAgent = navigator.userAgent;var platform = navigator.platform;var maxTouchPoints = navigator.maxTouchPoints || 0;var isIOS = /iPad|iPhone|iPod/.test(platform) || (platform === 'MacIntel' && maxTouchPoints > 1);var isMacSafari = platform.indexOf('Mac') === 0 && /Safari/.test(userAgent) && !/Chrome|Chromium|CriOS|FxiOS|Edg|OPR|Android/.test(userAgent);var isAppleSafari = isIOS || isMacSafari;if (isAppleSafari) {fetch('/sf_private_access_tokens' + location.search).catch(function () {});}function browserMajorVersion(pattern) {var match = userAgent.match(pattern);return match ? parseInt(match[1], 10) : null;}function shouldLoadAutosizesPolyfill() {if (!window.PerformanceObserver?.supportedEntryTypes?.includes('paint')) {return false;}var chromeVersion = browserMajorVersion(/Chrome\/(\d+)/);if (chromeVersion !== null) {return chromeVersion < 126;}var firefoxVersion = browserMajorVersion(/Firefox\/(\d+)/);if (firefoxVersion !== null) {return firefoxVersion < 150;}var safariVersion = isAppleSafari ? browserMajorVersion(/Version\/(\d+).*Safari\//) : null;if (safariVersion !== null) {return safariVersion < 27;}return true;}if (shouldLoadAutosizesPolyfill()) {var autosizesScript = document.createElement('script');autosizesScript.async = true;autosizesScript.crossOrigin = 'anonymous';autosizesScript.src = "//artoffaceless.com/cdn/shopifycloud/storefront/assets/storefront/autosizes-84416378.js";(document.head || document.documentElement).appendChild(autosizesScript);}window.ShopifyAnalytics = window.ShopifyAnalytics || {};window.ShopifyAnalytics.performance = window.ShopifyAnalytics.performance || {};(function () {var LONG_FRAME_THRESHOLD = 50;var longAnimationFrames = [];var activeRafId = null;function collectLongFrames() {var previousTime = null;function rafMonitor(now) {if (activeRafId === null) {return;}var delta = now - previousTime;if (delta > LONG_FRAME_THRESHOLD) {longAnimationFrames.push({startTime: previousTime,endTime: now,});}previousTime = now;activeRafId = requestAnimationFrame(rafMonitor);}previousTime = performance.now();activeRafId = requestAnimationFrame(rafMonitor);}if (!window.PerformanceObserver?.supportedEntryTypes?.includes('long-animation-frame')) {collectLongFrames();var timeoutId = setTimeout(function () {cancelAnimationFrame(activeRafId);}, 10000);window.ShopifyAnalytics.performance.getLongAnimationFrames = function (stopCollection) {if (stopCollection === undefined) {stopCollection = false;}if (stopCollection) {clearTimeout(timeoutId);cancelAnimationFrame(activeRafId);}return longAnimationFrames;};}})();})();</script>
1245<script crossorigin="anonymous" defer="defer" src="//artoffaceless.com/cdn/shopifycloud/storefront/assets/shopify_pay/storefront-616277c7.js?v=20250812"></script>
vendor: 1 bytes, line 1245
1245
1246<script id="shopify-origin-trials" async="async" integrity="sha256-qJbe/jEZBHtr5W/BlA2cKAz3vkXu6vJQyLjgvgCC86g=" src="//cdn.shopify.com/shopifycloud/storefront/assets/storefront/origin_trials-318ab40a.js" crossorigin="anonymous" onload="window.__shopifyOriginTrialsDone = true" onerror="window.__shopifyOriginTrialsDone = true"></script>
vendor: 1 bytes, line 1246
1246
1247<script> 1248 window.Shopify = window.Shopify || {}; 1249 window.Shopify.MCP = window.Shopify.MCP || {}; 1250 window.Shopify.MCP.enabled = true; 1251 window.Shopify.MCP.shop = "gqrw8b-as.myshopify.com"; 1252 window.Shopify.MCP.mcpEndpoint = "https:\/\/artoffaceless.com\/api\/mcp"; 1253 window.Shopify.MCP.tools = [{"name":"search_shop_policies_and_faqs","description":"Used to get facts about the stores policies, products, or services.\nSome examples of questions you can ask are:\n - What is your return policy?\n - What is your shipping policy?\n - What is your phone number?\n - What are your hours of operation?\"\n","inputSchema":{"$schema":"https:\/\/json-schema.org\/draft\/2020-12\/schema","type":"object","properties":{"query":{"type":"string","description":"A natural language query."},"context":{"type":"string","description":"Additional information about the request such as user demographics, mood, location, or other relevant details that could help in tailoring the response appropriately."}},"required":["query"]}}]; 1254</script>
vendor: 1 bytes, line 1254
1254
1255<script>(()=>{var d="shopify:webmcp_adapter_loaded",n=Symbol.for("shopify.webmcp_adapter_loading");function s(c,a,{win:r=window,doc:o=document}={}){function p(){try{return r.localStorage.getItem(d)==="true"}catch{return!1}}function l(){try{r.localStorage.setItem(d,"true")}catch{}}function u(){return typeof(o.modelContext||r.navigator?.modelContext)?.registerTool=="function"}function f(){if(r[n]||!u())return;let t=o.head||o.getElementsByTagName("head")[0];if(!t)return;let e=o.createElement("script");e.type="module",e.crossOrigin="anonymous",a&&(e.integrity=a),e.src=c,e.addEventListener("load",l,{once:!0}),e.addEventListener("error",()=>{r[n]=!1},{once:!0}),t.appendChild(e),r[n]=!0}function _(t){let e=o.getElementById("shopify-origin-trials");if(!e||r.__shopifyOriginTrialsDone){t();return}e.addEventListener("load",t,{once:!0}),e.addEventListener("error",t,{once:!0})}function i(){_(()=>r.setTimeout(f,0))}function m(){o.addEventListener("DOMContentLoaded",i,{once:!0})}p()?i():m()}s("\/\/artoffaceless.com\/cdn\/shopifycloud\/storefront\/assets\/storefront\/webmcp-c6b62ece.js","sha256-ke4DDuBjdvea3vxLWxHc9E9nq8zihuG4IfYEGbb77ys=");})(); 1256</script>
vendor: 1 bytes, line 1256
1256
1257<script data-source-attribution="shopify.dynamic_checkout.dynamic.init">var Shopify=Shopify||{};Shopify.PaymentButton=Shopify.PaymentButton||{isStorefrontPortableWallets:!0,init:function(){window.Shopify.PaymentButton.init=function(){};var t=document.createElement("script");t.src="https://artoffaceless.com/cdn/shopifycloud/portable-wallets/latest/portable-wallets.en.js",t.type="module",document.head.appendChild(t)}}; 1258</script>
vendor: 1 bytes, line 1258
1258
1259<script data-source-attribution="shopify.dynamic_checkout.buyer_consent"> 1260 function portableWalletsHideBuyerConsent(e){var t=document.getElementById("shopify-buyer-consent"),n=document.getElementById("shopify-subscription-policy-button");t&&n&&(t.classList.add("hidden"),t.setAttribute("aria-hidden","true"),n.removeEventListener("click",e))}function portableWalletsShowBuyerConsent(e){var t=document.getElementById("shopify-buyer-consent"),n=document.getElementById("shopify-subscription-policy-button");t&&n&&(t.classList.remove("hidden"),t.removeAttribute("aria-hidden"),n.addEventListener("click",e))}window.Shopify?.PaymentButton&&(window.Shopify.PaymentButton.hideBuyerConsent=portableWalletsHideBuyerConsent,window.Shopify.PaymentButton.showBuyerConsent=portableWalletsShowBuyerConsent); 1261</script>
vendor: 1 bytes, line 1261
1261
1262<script> 1263 function portableWalletsCleanup(e){e&&e.src&&console.error("Failed to load portable wallets script "+e.src);var t=document.querySelectorAll("shopify-accelerated-checkout .shopify-payment-button__skeleton, shopify-accelerated-checkout-cart .wallet-cart-button__skeleton"),e=document.getElementById("shopify-buyer-consent");for(let e=0;e<t.length;e++)t[e].remove();e&&e.remove()}function portableWalletsNotLoadedAsModule(e){e instanceof ErrorEvent&&"string"==typeof e.message&&e.message.includes("import.meta")&&"string"==typeof e.filename&&e.filename.includes("portable-wallets")&&(window.removeEventListener("error",portableWalletsNotLoadedAsModule),window.Shopify.PaymentButton.failedToLoad=e,"loading"===document.readyState?document.addEventListener("DOMContentLoaded",window.Shopify.PaymentButton.init):window.Shopify.PaymentButton.init())}window.addEventListener("error",portableWalletsNotLoadedAsModule); 1264</script>
1264 1265
1266<script type="module" src="https://artoffaceless.com/cdn/shopifycloud/portable-wallets/latest/portable-wallets.en.js" onError="portableWalletsCleanup(this)" crossorigin="anonymous"></script>
vendor: 1 bytes, line 1266
1266
1267<script nomodule> 1268 document.addEventListener("DOMContentLoaded", portableWalletsCleanup); 1269</script>
1269 1270
1271<script id='scb4127' type='text/javascript' async='' src='https://artoffaceless.com/cdn/shopifycloud/privacy-banner/storefront-banner.js'></script>
1271<link id="shopify-accelerated-checkout-styles" rel="stylesheet" media="screen" href="https://artoffaceless.com/cdn/shopifycloud/portable-wallets/latest/accelerated-checkout-backwards-compat.css" crossorigin="anonymous"> 1272<style id="shopify-accelerated-checkout-cart"> 1273 #shopify-buyer-consent { 1274 margin-top: 1em; 1275 display: inline-block; 1276 width: 100%; 1277} 1278 1279#shopify-buyer-consent.hidden { 1280 display: none; 1281} 1282 1283#shopify-subscription-policy-button { 1284 background: none; 1285 border: none; 1286 padding: 0; 1287 text-decoration: underline; 1288 font-size: inherit; 1289 cursor: pointer; 1290} 1291 1292#shopify-subscription-policy-button::before { 1293 box-shadow: none; 1294} 1295 1296 </style> 1297<link rel="stylesheet" media="screen" href="//artoffaceless.com/cdn/shop/t/8/compiled_assets/styles.css?v=184126386464591067751787756450">
1298<script id="shopify-cfh-end">window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.end');</script>
1298 1299 <link href="https://monorail-edge.shopifysvc.com" rel="dns-prefetch">
1300<script>(function(){if ("sendBeacon" in navigator && "performance" in window) {try {var session_token_from_headers = performance.getEntriesByType('navigation')[0].serverTiming.find(x => x.name == '_s').description;} catch {var session_token_from_headers = undefined;}var session_cookie_matches = document.cookie.match(/_shopify_s=([^;]*)/);var session_token_from_cookie = session_cookie_matches && session_cookie_matches.length === 2 ? session_cookie_matches[1] : "";var session_token = session_token_from_headers || session_token_from_cookie || "";function handle_abandonment_event(e) {var entries = performance.getEntries().filter(function(entry) {return /monorail-edge.shopifysvc.com/.test(entry.name);});if (!window.abandonment_tracked && entries.length === 0) {window.abandonment_tracked = true;var currentMs = Date.now();var navigation_start = performance.timing.navigationStart;var payload = {shop_id: 99124740437,url: window.location.href,navigation_start,duration: currentMs - navigation_start,session_token,page_type: "product"};window.navigator.sendBeacon("https://monorail-edge.shopifysvc.com/v1/produce", JSON.stringify({schema_id: "online_store_buyer_site_abandonment/1.1",payload: payload,metadata: {event_created_at_ms: currentMs,event_sent_at_ms: currentMs}}));}}window.addEventListener('pagehide', handle_abandonment_event);}}());</script>
vendor: 1 bytes, line 1300
1300
1301<script> 1302 window.__TREKKIE_SHIM_QUEUE = window.__TREKKIE_SHIM_QUEUE || []; 1303</script>
vendor: 1 bytes, line 1303
1303
1304<script>(function(){var wpmLoader=function(){"use strict";var e=/Googlebot|Storebot-Google|bingbot|Baiduspider|YandexBot|DuckDuckBot|Slurp|facebookexternalhit|Twitterbot|LinkedInBot|Applebot|AdsBot-Google|Mediapartners-Google|APIs-Google|PetalBot|SemrushBot|AhrefsBot|MJ12bot|DotBot|Acunetix|PerplexityBot|Perplexity-User/i,t=/bytedance/i;function i(){try{var e=document.cookie;if(!e||"string"!=typeof e)return;for(var t=0,i=e.split(";");t<i.length;t++){var n=i[t],r=n.indexOf("=");if(-1!==r){var o=n.slice(0,r).trim();if(o){var a=void 0;try{a=decodeURIComponent(o)}catch(e){a=o}if("_shopify_s"===a){var d=n.slice(r+1).trim();try{return decodeURIComponent(d)}catch(e){return d}}}}}return}catch(e){return}}function n(e){try{"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn(e)}catch(e){}}function r(e,t){return"string"==typeof e&&e.length>0&&e.length<=t?e:void 0}function o(e){var t;switch(null==(t=null==e?void 0:e.navigation)?void 0:t.type){case 0:return"navigate";case 1:return"reload";case 2:return"back_forward";default:return}}function a(){var e,t,i;try{var n=null==(i=null==(t=null==(e=self.ShopifyAnalytics)?void 0:e.lib)?void 0:t.trekkie)?void 0:i.state;return"awaiting-consent"===n||"initialized"===n?n:void 0}catch(e){return}}return function(d,s,u,l){var c=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{};try{var p=c.trekkieShim;!0!==p&&"true"!==p||null!=window.__TREKKIE_SHIM_QUEUE||(window.__TREKKIE_SHIM_QUEUE=[])}catch(e){}var f,v,h,y,g=(v=(f={modern:/Edge?\/(1{2}[4-9]|1[2-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Firefox\/(1{2}[4-9]|1[2-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Chrom(ium|e)\/(9{2}|\d{3,})\.\d+(\.\d+|)|(Maci|X1{2}).+ Version\/(15\.\d+|(1[6-9]|[2-9]\d|\d{3,})\.\d+)([,.]\d+|)( \(\w+\)|)( Mobile\/\w+|) Safari\/|Chrome.+OPR\/(9{2}|\d{3,})\.\d+\.\d+|(CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone|CPU IPhone OS|CPU iPad OS)[ +]+(15[._]\d+|(1[6-9]|[2-9]\d|\d{3,})[._]\d+)([._]\d+|)|Android:?[ /-](14[89]|1[5-9]\d|[2-9]\d{2}|\d{4,})(\.\d+|)(\.\d+|)|Android.+Firefox\/(15\d|1[6-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Android.+Chrom(ium|e)\/(14[89]|1[5-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|SamsungBrowser\/([2-9]\d|\d{3,})\.\d+/,legacy:/Edge?\/(1[6-9]|[2-9]\d|\d{3,})\.\d+(\.\d+|)|Firefox\/(5[4-9]|[6-9]\d|\d{3,})\.\d+(\.\d+|)|Chrom(ium|e)\/(5[1-9]|[6-9]\d|\d{3,})\.\d+(\.\d+|)([\d.]+$|.*Safari\/(?![\d.]+ Edge\/[\d.]+$))|(Maci|X1{2}).+ Version\/(10\.\d+|(1[1-9]|[2-9]\d|\d{3,})\.\d+)([,.]\d+|)( \(\w+\)|)( Mobile\/\w+|) Safari\/|Chrome.+OPR\/(3[89]|[4-9]\d|\d{3,})\.\d+\.\d+|(CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone|CPU IPhone OS|CPU iPad OS)[ +]+(10[._]\d+|(1[1-9]|[2-9]\d|\d{3,})[._]\d+)([._]\d+|)|Android:?[ /-](14[89]|1[5-9]\d|[2-9]\d{2}|\d{4,})(\.\d+|)(\.\d+|)|Mobile Safari.+OPR\/([89]\d|\d{3,})\.\d+\.\d+|Android.+Firefox\/(15\d|1[6-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Android.+Chrom(ium|e)\/(14[89]|1[5-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Android.+(UC? ?Browser|UCWEB|U3)[ /]?(15\.([5-9]|\d{2,})|(1[6-9]|[2-9]\d|\d{3,})\.\d+)\.\d+|SamsungBrowser\/(5\.\d+|([6-9]|\d{2,})\.\d+)|Android.+MQ{2}Browser\/(14(\.(9|\d{2,})|)|(1[5-9]|[2-9]\d|\d{3,})(\.\d+|))(\.\d+|)|K[Aa][Ii]OS\/(3\.\d+|([4-9]|\d{2,})\.\d+)(\.\d+|)/}).modern,h=f.legacy,(y=navigator.userAgent).match(e)?"bot":y.match(v)?"modern":y.match(h)?"legacy":y.match(t)?"bot":"unknown"),m=function(e){var t,i,n=r(e,128);try{var a=window.performance,d=null==(t=null==a?void 0:a.getEntriesByType)?void 0:t.call(a,"navigation")[0];if(!d)return{requestId:n,navigationType:o(a)};var s="type"in d?r(d.type,64):void 0,u="serverTiming"in d&&Array.isArray(d.serverTiming)?d.serverTiming:[];return{requestId:null!=n?n:r(null==(i=u.find(function(e){return"requestID"===e.name}))?void 0:i.description,128),navigationType:s}}catch(e){return{requestId:n}}}(c.requestId),w=function(e){var t=e.version,r=e.browserTarget,o=e.surface,a=e.shopId,d=e.monorailEndpoint,s=window.location.href;return{emit:function(e){var u=e.status,l=e.errorMsg,c=e.failureReason,p=e.useKeepaliveFallback,f=void 0!==p&&p,v=e.navigationType,h=e.pagehidePersisted,y=e.requestId,g=e.trekkieState;if(d){var m,w;try{var b=(new Date).getTime();m=JSON.stringify({metadata:{event_sent_at_ms:b},events:[{schema_id:"web_pixels_manager_load/3.3",payload:{version:t,bundle_target:r,page_url:s,status:u,surface:o,error_msg:l,failure_reason:c,navigation_type:v,pagehide_persisted:h,request_id:y,trekkie_state:g,shop_id:a,visit_token:i()},metadata:{event_created_at_ms:b}}]})}catch(e){return}try{if("function"==typeof window.navigator.sendBeacon&&-1===(w=window.navigator.userAgent).indexOf("iPhone; CPU iPhone OS 12_")&&-1===w.indexOf("iPad; CPU OS 12_")&&-1===w.indexOf("iPod touch; CPU iPhone OS 12_")&&window.navigator.sendBeacon.bind(window.navigator)(d,m))return}catch(e){}if(f)try{"function"==typeof window.fetch&&window.fetch(d,{method:"POST",headers:{"Content-Type":"text/plain"},body:m,keepalive:!0}
1304).catch(function(){})}catch(e){}else try{var _=new XMLHttpRequest;_.open("POST",d,!0),_.setRequestHeader("Content-Type","text/plain"),_.send(m)}catch(e){n("[Web Pixels Manager] Got an unhandled error while logging to Monorail.")}}else n("[Web Pixels Manager] No Monorail endpoint provided, skipping logging.")}}}({version:u,browserTarget:g,surface:d.surface,shopId:d.shopId,monorailEndpoint:d.monorailEndpoint});if(Boolean(null==(_=null==(b=window.Shopify)?void 0:b.analytics)?void 0:_.replayQueue))w.emit({status:"setup-skipped",errorMsg:"replay queue already initialized."});else{var b,_;w.emit({status:"setup-started"}),window.Shopify=window.Shopify||{};var S=window.Shopify;S.analytics=S.analytics||{};var P=S.analytics;P.replayQueue=[],P.publish=function(e,t,i){return P.replayQueue.push([e,t,i]),!0};try{self.performance.mark("wpm:start")}catch(e){}var k,C="modern"===g?"modern":"legacy",E=(null!=l?l:{modern:"",legacy:""})[C],I=[(k={baseUrl:s,hashVersion:u,buildTarget:C}).baseUrl,"/wpm","/b",k.hashVersion,"modern"===k.buildTarget?"m":"l",".js"].join(""),O=!1,T=!1;try{c.browserTarget=g,function(){O=!0;try{window.addEventListener("pagehide",M)}catch(e){O=!1}}(),R(function(){try{R(x)}catch(e){D(e)}}),w.emit({status:"loading",requestId:m.requestId,navigationType:m.navigationType,trekkieState:a()})}catch(e){D(e)}}function U(){var e;if(q(),!function(){var e,t;return Boolean(null==(t=null==(e=window.Shopify)?void 0:e.analytics)?void 0:t.initialized)}()){var t,i,n;try{if("function"!=typeof(null==(e=window.webPixelsManager)?void 0:e.init))return void A();if(!(null!==(n=i=t=window.webPixelsManager.init(d))&&"function"!=typeof n&&Object(n)===n&&"publish"in i&&"function"==typeof i.publish&&"publishCustomEvent"in i&&"function"==typeof i.publishCustomEvent&&"visitor"in i&&"function"==typeof i.visitor))return void A()}catch(e){return void A(e)}var r=window.Shopify.analytics;r.replayQueue.forEach(function(e){var i=e[0],n=e[1],r=e[2];t.publishCustomEvent(i,n,r)}),r.replayQueue=[],r.publish=t.publishCustomEvent,r.visitor=t.visitor,r.initialized=!0}}function A(e){B("manager_api_unavailable",void 0===e?void 0:Q(e))}function x(){B("script_load_failed","".concat(I," has failed to load"))}function B(e,t){T||(T=!0,q(),w.emit({status:"failed",errorMsg:t,failureReason:e,requestId:m.requestId,navigationType:m.navigationType,trekkieState:a()}))}function M(e){O&&(q(),w.emit({status:"pagehide-while-loading",useKeepaliveFallback:!0,pagehidePersisted:e.persisted,requestId:m.requestId,navigationType:m.navigationType,trekkieState:a()}))}function q(){O=!1;try{window.removeEventListener("pagehide",M)}catch(e){}}function R(e){var t;!function(e){var t=e.src,i=e.async,n=void 0===i||i,r=e.onload,o=e.onerror,a=e.sri,d=e.scriptDataAttributes,s=void 0===d?{}:d,u=document.createElement("script"),l=document.querySelector("head"),c=document.querySelector("body");if(u.async=n,u.src=t,a&&(u.integrity=a,u.crossOrigin="anonymous"),s)for(var p in s)if(Object.prototype.hasOwnProperty.call(s,p))try{u.dataset[p]=String(s[p])}catch(e){}if(r&&u.addEventListener("load",r),o&&u.addEventListener("error",o),l)l.appendChild(u);else{if(!c)throw new Error("Did not find a head or body element to append the script");c.appendChild(u)}}({src:I,async:!0,onload:U,onerror:e,sri:(t=E,"string"==typeof t&&/^sha384-[A-Za-z0-9+/=]+$/.test(t)?E:""),scriptDataAttributes:c})}function D(e){B("script_append_failed",Q(e))}function Q(e){return e instanceof Error?e.message:"Unknown error"}}}();wpmLoader({shopId: 99124740437,storefrontBaseUrl: "https://artoffaceless.com",extensionsBaseUrl: "https://extensions.shopifycdn.com/cdn/shopifycloud/web-pixels-manager",monorailEndpoint: "https://artoffaceless.com/.well-known/shopify/monorail/unstable/produce_batch",surface: "storefront-renderer",enabledBetaFlags: ["4c64608a","16072cab","8450a54b","7ee89bf1"],webPixelsConfigList: [{"id":"5229576533","configuration":"{\"tagID\":\"2614471893518\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"7ae565e198624b39e0856d352b9a6b4c","type":"APP","apiClientId":3009811,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized"},{"id":"shopify-app-pixel","configuration":"{}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"0530","apiClientId":"shopify-pixel","type":"APP","privacyPurposes":["ANALYTICS","MARKETING"]},{"id":"shopify-custom-pixel","eventPayloadVersion":"v1","runtimeContext":"LAX","scriptVersion":"0530","apiClientId":"shopify-pixel","type":"CUSTOM","privacyPurposes":["ANALYTICS","MARKETING"]}],isMerchantRequest: false,initData: {"shop":{"name":"Art of FACELESS","paymentSettings":{"currencyCode":"GBP"},"myshopifyDomain":"gqrw8b-as.myshopify.com","countryCode":"GB","storefrontUrl":"https:\/\/artoffaceless.com"},"customer":null,"cart":null,"checkout":null,"productVariants":[{"price":{"amount":5.0,"currencyCode":"GBP"},"product":{"title":"The Hollow Circuit [Book 1] ePUB Edition","vendor":"Art of FACELESS","id":"11491165929813","untranslatedTitle":"The Hollow Circuit [Book 1] ePUB Edition","url":"\/products\/the-hollow-circuit-book-1","type":"Digital Download"},"id":"54555719467349","image":{"src":"\/\/artoffaceless.com\/cdn\/shop\/files\/hollow_circuit_maroon_palette.png?v=1789261802"},"sku":null,"title":"Default Title","untranslatedTitle":"Default Title"}
1304],"products":[{"id":"11491165929813","handle":"the-hollow-circuit-book-1","isCollective":null,"title":"The Hollow Circuit [Book 1] ePUB Edition","type":"Digital Download","untranslatedTitle":"The Hollow Circuit [Book 1] ePUB Edition","url":"\/products\/the-hollow-circuit-book-1","vendor":"Art of FACELESS","remoteShopId":null,"variants":[{"id":"54555719467349","image":{"src":"\/\/artoffaceless.com\/cdn\/shop\/files\/hollow_circuit_maroon_palette.png?v=1789261802"},"price":{"amount":5.0,"currencyCode":"GBP"},"sku":null,"title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"11528517386581","handle":"bubble-free-stickers","isCollective":null,"title":"404 QR Code Sticker","type":"Print Material","untranslatedTitle":"404 QR Code Sticker","url":"\/products\/bubble-free-stickers","vendor":"Art of FACELESS","remoteShopId":null,"variants":[{"id":"54729991881045","image":{"src":"\/\/artoffaceless.com\/cdn\/shop\/files\/kiss-cut-stickers-white-3x3-default-6a8b3850cd983.jpg?v=1787508846"},"price":{"amount":1.93,"currencyCode":"GBP"},"sku":"7758709_10163","title":"3â³Ã3â³","untranslatedTitle":"3â³Ã3â³"}]},{"id":"11607023944021","handle":"cowards-on-the-central-line-explicit","isCollective":null,"title":"Cowards on the Central Line [Explicit] HD WAV, 24-bit, 24K Audio","type":"Digital Download","untranslatedTitle":"Cowards on the Central Line [Explicit] HD WAV, 24-bit, 24K Audio","url":"\/products\/cowards-on-the-central-line-explicit","vendor":"Art of FACELESS","remoteShopId":null,"variants":[{"id":"54964027261269","image":{"src":"\/\/artoffaceless.com\/cdn\/shop\/files\/cowards-on-the-central-line-album-art.jpg?v=1789380503"},"price":{"amount":0.79,"currencyCode":"GBP"},"sku":null,"title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"11528453980501","handle":"digital-product","isCollective":null,"title":"iz it coz i iz on Blogger? [Explicit] HD WAV, 24-bit, 24K Audio","type":"Digital Download","untranslatedTitle":"iz it coz i iz on Blogger? [Explicit] HD WAV, 24-bit, 24K Audio","url":"\/products\/digital-product","vendor":"Art of FACELESS","remoteShopId":null,"variants":[{"id":"54729483125077","image":{"src":"\/\/artoffaceless.com\/cdn\/shop\/files\/album_cover_1_glitch_icon_6b1183a2-945f-4ae5-abfa-3be5d87eefeb.png?v=1789383275"},"price":{"amount":0.79,"currencyCode":"GBP"},"sku":null,"title":"Default Title","untranslatedTitle":"Default Title"}]},{"id":"11488239223125","handle":"mar00n-epub-edition","isCollective":null,"title":"MAR00N â ePUB Edition","type":"Digital Download","untranslatedTitle":"MAR00N â ePUB Edition","url":"\/products\/mar00n-epub-edition","vendor":"Art of FACELESS","remoteShopId":null,"variants":[{"id":"54546808701269","image":{"src":"\/\/artoffaceless.com\/cdn\/shop\/files\/maroon-ebook-cover.png?v=1790058339"},"price":{"amount":5.0,"currencyCode":"GBP"},"sku":null,"title":"Default Title","untranslatedTitle":"Default Title"}]}],"purchasingCompany":null},},"https://artoffaceless.com/cdn","5982071ew7ea472e3p69b68784m2150dfea",{"modern":"","legacy":""},{"trekkieShim":true,"agentContext":true,"apiClientId":"580111","facebookCapiEnabled":"false","themeId":"202604052821","themeStoreId":"3621","themePublished":"true","eventMetadataId":"d1348eb9-5f68-4a1d-a91d-985d0c19ffdb","pageType":"product","resourceId":"11491165929813","shopId":"99124740437","storefrontBaseUrl":"https:\/\/artoffaceless.com","extensionBaseUrl":"https:\/\/extensions.shopifycdn.com\/cdn\/shopifycloud\/web-pixels-manager","surface":"storefront-renderer","enabledBetaFlags":"[\"4c64608a\", \"16072cab\", \"8450a54b\", \"7ee89bf1\"]","isMerchantRequest":"false","hashVersion":"5982071ew7ea472e3p69b68784m2150dfea","publish":"custom","events":"[[\"page_viewed\",{}],[\"product_viewed\",{\"productVariant\":{\"price\":{\"amount\":5.0,\"currencyCode\":\"GBP\"},\"product\":{\"title\":\"The Hollow Circuit [Book 1] ePUB Edition\",\"vendor\":\"Art of FACELESS\",\"id\":\"11491165929813\",\"untranslatedTitle\":\"The Hollow Circuit [Book 1] ePUB Edition\",\"url\":\"\/products\/the-hollow-circuit-book-1\",\"type\":\"Digital Download\"},\"id\":\"54555719467349\",\"image\":{\"src\":\"\/\/artoffaceless.com\/cdn\/shop\/files\/hollow_circuit_maroon_palette.png?v=1789261802\"},\"sku\":null,\"title\":\"Default Title\",\"untranslatedTitle\":\"Default Title\"}}]]"});})();</script>
1304<script> 1305 window.ShopifyAnalytics = window.ShopifyAnalytics || {}; 1306 window.ShopifyAnalytics.meta = window.ShopifyAnalytics.meta || {}; 1307 window.ShopifyAnalytics.meta.currency = 'GBP'; 1308 var meta = {"product":{"id":11491165929813,"gid":"gid:\/\/shopify\/Product\/11491165929813","vendor":"Art of FACELESS","type":"Digital Download","handle":"the-hollow-circuit-book-1","variants":[{"id":54555719467349,"price":500,"name":"The Hollow Circuit [Book 1] ePUB Edition","public_title":null,"sku":null}],"remote":false},"page":{"pageType":"product","resourceType":"product","resourceId":11491165929813,"requestId":"67587c28-7e0a-4bc8-b624-0300b2098da3-1791099356"}}; 1309 for (var attr in meta) { 1310 window.ShopifyAnalytics.meta[attr] = meta[attr]; 1311 } 1312</script>
vendor: 1 bytes, line 1312
1312
1313<script class="analytics"> 1314 (function () { 1315 var customDocumentWrite = function(content) { 1316 var jquery = null; 1317 1318 if (window.jQuery) { 1319 jquery = window.jQuery; 1320 } else if (window.Checkout && window.Checkout.$) { 1321 jquery = window.Checkout.$; 1322 } 1323 1324 if (jquery) { 1325 jquery('body').append(content); 1326 } 1327 }; 1328 1329 var hasLoggedConversion = function(token) { 1330 if (token) { 1331 return document.cookie.indexOf('loggedConversion=' + token) !== -1; 1332 } 1333 return false; 1334 } 1335 1336 var setCookieIfConversion = function(token) { 1337 if (token) { 1338 var twoMonthsFromNow = new Date(Date.now()); 1339 twoMonthsFromNow.setMonth(twoMonthsFromNow.getMonth() + 2); 1340 1341 document.cookie = 'loggedConversion=' + token + '; expires=' + twoMonthsFromNow; 1342 } 1343 } 1344 1345 var trekkie = window.ShopifyAnalytics.lib = window.trekkie = window.trekkie || []; 1346 window.ShopifyAnalytics.lib.trekkie = window.trekkie; 1347 if (trekkie.integrations) { 1348 return; 1349 } 1350 trekkie.methods = [ 1351 'identify', 1352 'page', 1353 'ready', 1354 'track', 1355 'trackForm', 1356 'trackLink' 1357 ]; 1358 trekkie.factory = function(method) { 1359 return function() { 1360 var args = Array.prototype.slice.call(arguments); 1361 args.unshift(method); 1362 trekkie.push(args); 1363 if (method == 'track' || method == 'page') { 1364 var pageUrl; 1365 try { 1366 pageUrl = window.location.href; 1367 } catch (e) {} 1368 var pageReferrer; 1369 try { 1370 pageReferrer = document.referrer; 1371 } catch (e) {} 1372 try { 1373 if (window.__TREKKIE_SHIM_QUEUE == null) { 1374 window.__TREKKIE_SHIM_QUEUE = []; 1375 } 1376 window.__TREKKIE_SHIM_QUEUE.push({ 1377 from: 'trekkie-stub', 1378 method: method, 1379 args: args.slice(1), 1380 pageContext: { 1381 url: pageUrl, 1382 referrer: pageReferrer 1383 } 1384 }); 1385 } catch (e) { 1386 // no-op 1387 } 1388 } 1389 return trekkie; 1390 }; 1391 }; 1392 for (var i = 0; i < trekkie.methods.length; i++) { 1393 var key = trekkie.methods[i]; 1394 trekkie[key] = trekkie.factory(key); 1395 } 1396 trekkie.load = function(config) { 1397 trekkie.config = config || {}; 1398 trekkie.config.initialDocumentCookie = document.cookie; 1399 var first = document.getElementsByTagName('script')[0]; 1400var script = document.createElement('script'); 1401script.type = 'text/javascript'; 1402script.onerror = function(e) { 1403 var scriptFallback = document.createElement('script'); 1404 scriptFallback.type = 'text/javascript'; 1405 scriptFallback.onerror = function(error) { 1406 var Monorail = { 1407 produce: function produce(monorailDomain, schemaId, payload) { 1408 var currentMs = new Date().getTime(); 1409 var event = { 1410 schema_id: schemaId, 1411 payload: payload, 1412 metadata: { 1413 event_created_at_ms: currentMs, 1414 event_sent_at_ms: currentMs 1415 } 1416 }; 1417 return Monorail.sendRequest("https://" + monorailDomain + "/v1/produce", JSON.stringify(event)); 1418 }, 1419 sendRequest: function sendRequest(endpointUrl, payload) { 1420 // Try the sendBeacon API 1421 if (window && window.navigator && typeof window.navigator.sendBeacon === 'function' && typeof window.Blob === 'function' && !Monorail.isIos12()) { 1422 var blobData = new window.Blob([payload], { 1423 type: 'text/plain' 1424 }); 1425 1426 if (window.navigator.sendBeacon(endpointUrl, blobData)) { 1427 return true; 1428 } // sendBeacon was not successful 1429 1430 } // XHR beacon 1431 1432 var xhr = new XMLHttpRequest(); 1433 1434 try { 1435 xhr.open('POST', endpointUrl); 1436 xhr.setRequestHeader('Content-Type', 'text/plain'); 1437 xhr.send(payload); 1438 } catch (e) { 1439 console.log(e); 1440 } 1441 1442 return false; 1443 }, 1444 isIos12: function isIos12() { 1445 return window.navigator.userAgent.lastIndexOf('iPhone; CPU iPhone OS 12_') !== -1 || window.navigator.userAgent.lastIndexOf('iPad; CPU OS 12_') !== -1; 1446 } 1447 }; 1448 Monorail.produce('monorail-edge.shopifysvc.com', 1449 'trekkie_storefront_load_errors/1.1', 1450 {shop_id: 99124740437, 1451 theme_id: 202604052821, 1452 app_name: "storefront", 1453 context_url: window.location.href, 1454 source_url: "//artoffaceless.com/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js"}); 1455 1456 }; 1457 scriptFallback.async = true; 1458 scriptFallback.src = '//artoffaceless.com/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js'; 1459 first.parentNode.insertBefore(scriptFallback, first); 1460}; 1461script.async = true; 1462script.src = '//artoffaceless.com/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js'; 1463first.parentNode.insertBefore(script, first); 1464 1465 }; 1466 trekkie.load( 1467 {"Trekkie":{"appName":"storefront","development":false,"defaultAttributes":{"shopId":99124740437,"isMerchantRequest":null,"themeId":202604052821,"themeCityHash":"7177933740706828519","contentLanguage":"en","currency":"GBP","eventMetadataId":"d1348eb9-5f68-4a1d-a91d-985d0c19ffdb"},"isServerSideCookieWritingEnabled":true,"monorailRegion":"shop_domain","enabledBetaFlags":["764d78cb","8450a54b","7ee89bf1","4c64608a"]},"Session Attribution":{},"S2S":{"facebookCapiEnabled":false,"source":"trekkie-storefront-renderer","apiClientId":580111}} 1468 ); 1469 1470 var loaded = false;
1471 trekkie.ready(function() { 1472 if (loaded) return; 1473 loaded = true; 1474 1475 window.ShopifyAnalytics.lib = window.trekkie; 1476 1477 var originalDocumentWrite = document.write; 1478 document.write = customDocumentWrite; 1479 try { window.ShopifyAnalytics.merchantGoogleAnalytics.call(this); } catch(error) {}; 1480 document.write = originalDocumentWrite; 1481 1482 var match = window.location.pathname.match(/checkouts\/(.+)\/(thank_you|post_purchase)/) 1483 var token = match? match[1]: undefined; 1484 if (!hasLoggedConversion(token)) { 1485 setCookieIfConversion(token); 1486 window.ShopifyAnalytics.lib.track("Viewed Product",{"currency":"GBP","variantId":54555719467349,"productId":11491165929813,"productGid":"gid:\/\/shopify\/Product\/11491165929813","name":"The Hollow Circuit [Book 1] ePUB Edition","price":"5.00","sku":null,"brand":"Art of FACELESS","variant":null,"category":"Digital Download","nonInteraction":true,"remote":false,"available":true},undefined,undefined,{"shopifyEmitted":true}); 1487 } 1488 }); 1489 1490 window.ShopifyAnalytics.lib.page(null,{"pageType":"product","resourceType":"product","resourceId":11491165929813,"requestId":"67587c28-7e0a-4bc8-b624-0300b2098da3-1791099356","shopifyEmitted":true}); 1491 1492 var eventsListenerScript = document.createElement('script'); 1493 eventsListenerScript.async = true; 1494 eventsListenerScript.src = "//artoffaceless.com/cdn/shopifycloud/storefront/assets/shop_events_listener-4e26a9ce.js"; 1495 document.getElementsByTagName('head')[0].appendChild(eventsListenerScript); 1496})();</script>
vendor: 1 bytes, line 1496
1496
1497<script 1498 defer 1499 src="https://artoffaceless.com/cdn/shopifycloud/perf-kit/shopify-perf-kit-3.9.4.min.js" 1500 data-application="storefront-renderer" 1501 data-shop-id="99124740437" 1502 data-render-region="gcp-us-west1" 1503 data-page-type="product" 1504 data-theme-instance-id="202604052821" 1505 data-theme-name="Atelier" 1506 data-theme-version="4.1.4" 1507 data-monorail-region="shop_domain" 1508 data-resource-timing-sampling-rate="10" 1509 data-shs="true" 1510 data-shs-beacon="true" 1511 data-shs-export-with-fetch="true" 1512 data-shs-logs-sample-rate="1" 1513 data-shs-beacon-endpoint="https://artoffaceless.com/api/collect" 1514></script>
vendor: 1 bytes, line 1514
1514
1515<script src="https://cdn.shopify.com/storefront/web-components/account.js" type="module" crossorigin fetchpriority="low" async></script>
1515<script id="shopify-customer-account-data" type="application/json">{"customer":null,"shop":{"id":"99124740437","customerAccountTranslations":[{"key":"account_menu.signed_out_state.sheet_title","value":"Sign in or create account"},{"key":"account_menu.signed_out_state.section_divider","value":"More ways to sign in"},{"key":"account_menu.signed_out_state.alternate_divider","value":"OR"},{"key":"account_menu.signed_out_state.email_field_label","value":"Email"},{"key":"account_menu.signed_out_state.orders_button","value":"Orders"},{"key":"account_menu.signed_out_state.profile_button","value":"Profile"},{"key":"account_menu.signed_out_state.shop_login_button","value":"Sign in with Shop"},{"key":"account_menu.signed_out_state.continue_with_google","value":"Continue with Google"},{"key":"account_menu.signed_out_state.continue_with_facebook","value":"Continue with Facebook"},{"key":"account_menu.signed_out_state.marketing_consent_label","value":"Email me with news and offers"},{"key":"account_menu.signed_in_state.greeting_with_name","value":"Hi, {{first_name}}"},{"key":"account_menu.signed_in_state.greeting_without_name","value":"Account"},{"key":"account_menu.signed_in_state.orders_button","value":"Orders"},{"key":"account_menu.signed_in_state.profile_button","value":"Profile"},{"key":"account_menu.location_picker.sheet_title","value":"Locations"},{"key":"account_menu.location_picker.search_field_placeholder","value":"Search"},{"key":"account_menu.aria_labels.close_menu","value":"Close menu"},{"key":"account_menu.aria_labels.back_to_main_menu","value":"Back to main menu from {{title}}"},{"key":"account_menu.aria_labels.open_submenu","value":"{{title}}, opens submenu"},{"key":"account_menu.aria_labels.loading_menu","value":"Loading menu"},{"key":"account_menu.aria_labels.account","value":"Account"},{"key":"account_menu.aria_labels.sign_in_with_email","value":"Sign in with email"},{"key":"account_menu.aria_labels.sign_in","value":"Sign in"}],"socialLoginProviders":[{"handle":"Shop"}],"legacyCustomerAccounts":false,"signInLinksVisible":true,"b2bEnabled":false,"marketingConsentSigninEnabled":false},"visitor":{"country":"GB","language":"en"}}</script>
1515 1516<meta name="shopify-y" content="1a0ba9e8-782f-4b8e-b8d1-d6bcd387ffb6" data-expiration="1822656956000"><meta name="shopify-s" content="ba665907-2f84-42e8-818b-da4d5b6da540" data-expiration="1791101156000"><meta name="new-cookie-storage-activated" content="t"> 1517</head> 1518 1519 <body class="page-width-narrow card-hover-effect-lift"> 1520 <a 1521 class="skip-to-content-link button-secondary" 1522 href="#MainContent" 1523> 1524 Skip to content 1525</a> 1526 1527 1528 1529 1530 1531 1532<theme-drawer id="chat-drawer"> 1533 <dialog 1534 ref="panel" 1535 class="theme-drawer__dialog chat-drawer" 1536 > 1537 <shopify-chat 1538 mode="standalone" 1539 mode-switch 1540 ></shopify-chat> 1541 </dialog> 1542</theme-drawer> 1543
1544<script type="module"> 1545 const chatDrawer = document.querySelector('#chat-drawer'); 1546 const shopifyChat = document.querySelector('shopify-chat'); 1547 1548 document.addEventListener('theme-drawer:open', (event) => { 1549 if (/** @type {Element} */ (event.target).id !== 'chat-drawer') return; 1550 shopifyChat?.setAttribute('mode', 'managed'); 1551 }); 1552 1553 document.addEventListener('theme-drawer:close', (event) => { 1554 if (/** @type {Element} */ (event.target).id !== 'chat-drawer') return; 1555 // If mode is still managed, this is a theme-initiated close (backdrop / 1556 // Escape) â close the chat so the FAB appears. If mode is already 1557 // standalone, the close was triggered by an undock (enter-standalone sets 1558 // mode before closing the drawer) â leave the chat open as a floating panel. 1559 if (shopifyChat?.getAttribute('mode') === 'managed') { 1560 shopifyChat?.removeAttribute('open'); 1561 } 1562 shopifyChat?.setAttribute('mode', 'standalone'); 1563 }); 1564 1565 document.addEventListener('shopify-chat:enter-managed', () => { 1566 // Captured at event-fire time â the dock-transition animation hint below 1567 // depends on state as it was when the event was dispatched. 1568 const isStandaloneAndOpen = shopifyChat?.hasAttribute('open') && shopifyChat?.getAttribute('mode') === 'standalone'; 1569 1570 // The activator-click path (FAB click on desktop with stored 1571 // preferredMode=managed) dispatches enter-managed *before* calling show(), 1572 // so the chat's `open` attribute at event time understates the imminent 1573 // outcome. Defer to a microtask: by then show() (if any) has run, and we 1574 // can distinguish the viewport-driven mobileâdesktop transition that left 1575 // a minimized FAB (chat stays closed â don't open an empty drawer) from 1576 // an activator click (chat just opened â open the drawer). 1577 queueMicrotask(() => { 1578 if (!shopifyChat?.hasAttribute('open') && !chatDrawer?.hasAttribute('open')) { 1579 return; 1580 } 1581 chatDrawer?.open?.(isStandaloneAndOpen ? { enter: 'inline-start' } : undefined); 1582 }); 1583 }); 1584 1585 document.addEventListener('shopify-chat:enter-standalone', () => { 1586 shopifyChat?.setAttribute('mode', 'standalone'); 1587 chatDrawer?.close?.(); 1588 }); 1589 1590 document.addEventListener('shopify-chat:close', () => { 1591 if (shopifyChat?.getAttribute('mode') === 'managed') { 1592 chatDrawer?.close?.(); 1593 } 1594 }); 1595 1596 document.addEventListener('megaMenu:hover', () => { 1597 if (shopifyChat?.hasAttribute('open') && shopifyChat?.getAttribute('mode') === 'standalone') { 1598 shopifyChat?.removeAttribute('open'); 1599 } 1600 }); 1601 1602 // After the chat upgrades it self-restores its preferred mode from 1603 // sessionStorage. Reconcile any mismatch with the theme-drawer's state 1604 // â the drawer is the source of truth for which mode the chat should 1605 // be in (open â managed, closed â standalone). 1606 customElements.whenDefined('shopify-chat').then(() => { 1607 const mode = chatDrawer?.hasAttribute('open') ? 'managed' : 'standalone'; 1608 if (shopifyChat?.getAttribute('mode') !== mode) { 1609 // When switching managed â standalone (e.g. narrow viewport skipped 1610 // drawer restore), also close the chat so it renders as the FAB 1611 // rather than an open standalone panel. 1612 if (mode === 'standalone' && shopifyChat?.hasAttribute('open')) { 1613 shopifyChat?.removeAttribute('open'); 1614 } 1615 shopifyChat?.setAttribute('mode', mode); 1616 } 1617 }); 1618</script>
1618 1619 1620 1621 1622 1623 <div class="page-wrapper"> 1624 <div id="header-group"> 1625 <!-- BEGIN sections: header-group --> 1626<header id="shopify-section-sections--30935194534229__header_section" class="shopify-section shopify-section-group-header-group header-section"> 1627 1628 1629 1630 1631 1632
1633<script type="application/ld+json"> 1634 { 1635 "@context": "http://schema.org", 1636 "@type": "Organization", 1637 "name": "Art of FACELESS", 1638 1639 "logo": "https:\/\/artoffaceless.com\/cdn\/shop\/files\/aof-stamp-pink-black-clean-3000.png?v=1790189977\u0026width=500", 1640 1641 "url": "https:\/\/artoffaceless.com" 1642 } 1643</script>
1643 1644 1645<header-component 1646 id="header-component" 1647 class="header" 1648 data-theme-color="rgb(255 255 255)" 1649 data-bubble-style="default" 1650 1651 transparent="not-sticky" 1652 1653 1654 sticky="always" 1655 1656 data-skip-node-update 1657 data-scroll-direction="none" 1658 1659 1660 data-transparent-background="bottom" 1661 1662 style=" 1663 --color-background-top-row: rgba(255 255 255 / 1.0); 1664 --color-background-bottom-row: rgba(255 255 255 / 1.0); 1665 1666 --color-transparent-text: #000000; 1667 --color-transparent-text-rgb: 0 0 0; 1668 --color-transparent-text-contrast: var(--palette-lightest); 1669 1670 1671 --cart-bubble-background: var(--palette-darkest); 1672 --cart-bubble-text: #ffffff; 1673 1674 1675 " 1676> 1677 <div class="header__underlay header__underlay-closed"></div> 1678 <div 1679 class="header__underlay header__underlay-open" 1680 ></div> 1681 1682 1683 1684 1685 1686 1687 <div 1688 class="header__row header__row--top color-#ffffff section section--full-width-margin section--page-width color-custom-top-sections--30935194534229__header_section" 1689 ref="headerRowTop"style="--border-bottom-width: 0px; --border-bottom-width-mobile: 0px; --border-bottom-color-mobile: var(--color-border);"> 1690 <div class="header__columns spacing-style"> 1691 <style data-shopify> 1692 .color-custom-top-sections--30935194534229__header_section, 1693 .color-custom-top-sections--30935194534229__header_section .text-block { 1694 /* Background */ 1695 --color-background: #ffffff; 1696 --color-background-rgb: 255 255 255; 1697 1698 /* Opacity values adjusted for background brightness */ 1699 1700--opacity-5-15: 0.05; --opacity-10-25: 0.1; --opacity-35-55: 0.35; --opacity-40-60: 17010.4; --opacity-30-60: 0.3; --opacity-60: 0.6; 1702 1703 1704 1705 /* Foreground / text â explicit or smart-contrasted */ 1706 --color: #000000; 1707 --color-rgb: 0 0 0; 1708 --color-foreground: #000000; 1709 --color-foreground-rgb: 0 0 0; 1710 --color-foreground-muted: rgb(0 0 0 / var(--opacity-muted-text)); 1711 --color-foreground-subdued: rgb(0 0 0 / var(--opacity-subdued-text)); 1712 --color-border: var(--palette-darkest); 1713 --color-border-rgb: var(--palette-darkest-rgb); 1714 1715 } 1716 1717 1718 .color-custom-top-sections--30935194534229__header_section { 1719 /* Form-related tokens stay on .color-custom only â .text-block is a prose 1720 container (text/announcement/inline-text/blog-post-description/ 1721 collection-link/price/sku) and never holds form inputs. */ 1722 --input-disabled-background-color: rgb(0 0 0 / var(--opacity-10)); 1723 --input-disabled-border-color: rgb(0 0 0 / var(--opacity-5)); 1724 --input-disabled-text-color: rgb(0 0 0 / var(--opacity-50)); 1725 --checkbox-border: 1px solid rgb(0 0 0 / var(--opacity-35-55)); 1726 } 1727 1728 1729 .color-custom-top-sections--30935194534229__header_section { 1730 color: var(--color, var(--color-foreground)); 1731 background-color: var(--color-background); 1732 } 1733 </style> 1734 1735 1736 1737 1738<div 1739 class="header__column header__column--left" 1740 data-testid="header-top-left" 1741 > 1742 1743 1744 1745 1746 1747 1748 1749 <div 1750 class="header__drawer" 1751 ref="headerDrawerContainer" 1752 data-hydration-key="header-drawer-mobile" 1753 1754 > 1755 1756 1757 1758 1759 1760 1761 1762 1763 <style data-shopify> 1764 .color-custom-AMmZLWXpuWWNHRU5aR__header-menu-1, 1765 .color-custom-AMmZLWXpuWWNHRU5aR__header-menu-1 .text-block { 1766 /* Background */ 1767 --color-background: #ffffff; 1768 --color-background-rgb: 255 255 255; 1769 1770 /* Opacity values adjusted for background brightness */ 1771 1772--opacity-5-15: 0.05; --opacity-10-25: 0.1; --opacity-35-55: 0.35; --opacity-40-60: 17730.4; --opacity-30-60: 0.3; --opacity-60: 0.6; 1774 1775 1776 1777 /* Foreground / text â explicit or smart-contrasted */ 1778 --color: #000000; 1779 --color-rgb: 0 0 0; 1780 --color-foreground: #000000; 1781 --color-foreground-rgb: 0 0 0; 1782 --color-foreground-muted: rgb(0 0 0 / var(--opacity-muted-text)); 1783 --color-foreground-subdued: rgb(0 0 0 / var(--opacity-subdued-text)); 1784 --color-border: var(--palette-darkest); 1785 --color-border-rgb: var(--palette-darkest-rgb); 1786 1787 } 1788 1789 1790 .color-custom-AMmZLWXpuWWNHRU5aR__header-menu-1 { 1791 /* Form-related tokens stay on .color-custom only â .text-block is a prose 1792 container (text/announcement/inline-text/blog-post-description/ 1793 collection-link/price/sku) and never holds form inputs. */ 1794 --input-disabled-background-color: rgb(0 0 0 / var(--opacity-10)); 1795 --input-disabled-border-color: rgb(0 0 0 / var(--opacity-5)); 1796 --input-disabled-text-color: rgb(0 0 0 / var(--opacity-50)); 1797 --checkbox-border: 1px solid rgb(0 0 0 / var(--opacity-35-55)); 1798 } 1799 1800 1801 .color-custom-AMmZLWXpuWWNHRU5aR__header-menu-1 { 1802 color: var(--color, var(--color-foreground)); 1803 background-color: var(--color-background); 1804 } 1805 </style> 1806 1807 1808
1809<script 1810 src="//artoffaceless.com/cdn/shop/t/8/assets/header-drawer.js?v=121243031541024704371787751266" 1811 type="module" 1812 fetchpriority="low" 1813></script>
1813 1814 1815<header-drawer 1816 class="header-drawer " 1817 style="--menu-image-border-radius: 0px; --resource-card-corner-radius: 0px;" 1818> 1819 <details 1820 id="Details-menu-drawer-container" 1821 data-skip-node-update="true" 1822 class="menu-drawer-container" 1823 ref="details" 1824 scroll-lock 1825 > 1826 <summary 1827 class="header__icon header__icon--menu header__icon--summary" 1828 aria-label="Menu" 1829 on:click="/toggle" 1830 > 1831 <span class="svg-wrapper header-drawer-icon header-drawer-icon--open"><svg aria-hidden="true" width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg"> 1832 <path d="M1 3.5H13" stroke="currentColor" stroke-width="var(--icon-stroke-width)" stroke-linecap="round"/> 1833 <path d="M1 10.5H13" stroke="currentColor" stroke-width="var(--icon-stroke-width)" stroke-linecap="round"/> 1834</svg> 1835</span> 1836 <span class="svg-wrapper header-drawer-icon header-drawer-icon--close"><svg aria-hidden="true" width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg"> 1837 <path d="M3.75 3.75L10.25 10.25M10.25 3.75L3.75 10.25" stroke="currentColor" stroke-width="var(--icon-stroke-width)" stroke-linecap="round" stroke-linejoin="round"/> 1838</svg> 1839</span> 1840 </summary> 1841 <div 1842 ref="menuDrawer" 1843 class=" 1844 menu-drawer 1845 1846 color-custom-AMmZLWXpuWWNHRU5aR__header-menu-1 1847 1848 " 1849 > 1850 <button 1851 class="button close-button menu-drawer__close-button focus-inset" 1852 type="button" 1853 aria-label="Close" 1854 on:click="/close" 1855 > 1856 <span class="svg-wrapper header-drawer-icon header-drawer-icon--close"><svg aria-hidden="true" width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg"> 1857 <path d="M3.75 3.75L10.25 10.25M10.25 3.75L3.75 10.25" stroke="currentColor" stroke-width="var(--icon-stroke-width)" stroke-linecap="round" stroke-linejoin="round"/> 1858</svg> 1859</span> 1860 </button> 1861 <nav 1862 class="menu-drawer__navigation" 1863 style="--menu-top-level-font-family: var(--font-primary--family); 1864--menu-top-level-font-size-desktop: var(--font-size--body-sm); --menu-top-level-font-style: var(--font-primary--style); --menu-top-level-font-weight: var(--font-primary--weight); --menu-top-level-font-case:uppercase; 1865 1866 --menu-top-level-font-size: var(--menu-font-2xl--size); --menu-top-level-font-line-height: 1867 var(--menu-font-2xl--line-height); 1868 1869--menu-top-level-font-color: var(--color-foreground); --menu-top-level-font-color-rgb: var(--color-foreground-rgb); 1870 1871--menu-parent-font-family: var(--font-primary--family); --menu-parent-font-style: 1872var(--font-primary--style); --menu-parent-font-weight: var(--font-primary--weight); --menu-parent-font-case: 1873uppercase; 1874 1875 --menu-parent-font-size: var(--menu-font-sm--size); --menu-parent-font-line-height: 1876 var(--menu-font-sm--line-height); --menu-parent-font-color: var(--color-foreground-subdued); 1877 --menu-parent-active-font-color: var(--color-foreground); 1878 1879--menu-child-font-family: var(--font-primary--family); --menu-child-font-style:var(--font-primary--style); --menu-child-font-weight: var(--font-primary--weight); --menu-child-font-case: 1880uppercase; 1881 1882 --menu-child-font-size: var(--menu-font-md--size); --menu-child-font-line-height: var(--menu-font-md--line-height); 1883 --menu-child-font-color: var(--color-foreground); --menu-child-active-font-color: var(--color-foreground-subdued); 1884 1885 1886 " 1887 aria-label="Primary" 1888 > 1889 <ul 1890 class="menu-drawer__menu has-submenu" 1891 role="list" 1892 > 1893 1894 1895 1896 <li 1897 style="--menu-drawer-animation-index: 1;" 1898 class="menu-drawer__list-item--flat" 1899 > 1900 1901<a 1902 id="HeaderDrawer-home" 1903 href="/" 1904 class="menu-drawer__menu-item menu-drawer__menu-item--mainlist menu-drawer__animated-element" 1905 1906 > 1907 <span class="menu-drawer__menu-item-text wrap-text">Home</span> 1908 </a> 1909 1910 </li> 1911 <li 1912 style="--menu-drawer-animation-index: 2;" 1913 class="menu-drawer__list-item--flat" 1914 > 1915 1916<a 1917 id="HeaderDrawer-about" 1918 href="/pages/about-art-of-faceless" 1919 class="menu-drawer__menu-item menu-drawer__menu-item--mainlist menu-drawer__animated-element" 1920 1921 >
1922 <span class="menu-drawer__menu-item-text wrap-text">About</span> 1923 </a> 1924 1925 </li> 1926 <li 1927 style="--menu-drawer-animation-index: 3;" 1928 class="menu-drawer__list-item--flat" 1929 > 1930 1931<a 1932 id="HeaderDrawer-blog" 1933 href="https://blog.artoffaceless.com/" 1934 class="menu-drawer__menu-item menu-drawer__menu-item--mainlist menu-drawer__animated-element" 1935 1936 > 1937 <span class="menu-drawer__menu-item-text wrap-text">Blog</span> 1938 </a> 1939 1940 </li> 1941 <li 1942 style="--menu-drawer-animation-index: 4;" 1943 class="menu-drawer__list-item--flat" 1944 > 1945 1946<a 1947 id="HeaderDrawer-our-network" 1948 href="https://linktr.ee/ArtofFACELESS" 1949 class="menu-drawer__menu-item menu-drawer__menu-item--mainlist menu-drawer__animated-element" 1950 1951 > 1952 <span class="menu-drawer__menu-item-text wrap-text">Our Network</span> 1953 </a> 1954 1955 </li> 1956 <li 1957 style="--menu-drawer-animation-index: 5;" 1958 class="menu-drawer__list-item--flat" 1959 > 1960 1961<a 1962 id="HeaderDrawer-contact" 1963 href="/pages/contact" 1964 class="menu-drawer__menu-item menu-drawer__menu-item--mainlist menu-drawer__animated-element" 1965 1966 > 1967 <span class="menu-drawer__menu-item-text wrap-text">Contact</span> 1968 </a> 1969 1970 </li> 1971 </ul> 1972 </nav> 1973 <div 1974 class="menu-drawer__utility-links menu-drawer__animated-element" 1975 style="--menu-drawer-animation-index: 5;" 1976 > 1977 1978 </div> 1979 1980 1981 </div> 1982 <div 1983 class="menu-drawer__backdrop" 1984 on:click="header-drawer/close" 1985 ></div> 1986 </details> 1987</header-drawer> 1988 1989 1990 1991 </div> 1992 1993 1994 1995<style data-shopify> 1996 .header__underlay { 1997 --color-submenu: rgb(255 255 255); 1998 } 1999</style> 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 <search-button 2011 class="search-action search-action--hidden-on-menu" 2012 > 2013 <button 2014 on:click="#search-modal/showDialog" 2015 class="button-unstyled header-actions__action" 2016 aria-label="Search" 2017 aria-haspopup="dialog" 2018 > 2019 <span class="hidden"> 2020 Search 2021 </span> 2022 2023 <span class="svg-wrapper "> 2024 <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="none"><circle cx="9" cy="9" r="4.75" stroke="currentColor" stroke-width="var(--icon-stroke-width)"/><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="var(--icon-stroke-width)" d="m12.5 12.5 3.25 3.25"/></svg> 2025 2026 </span> 2027 </button> 2028 </search-button> 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 <style data-shopify> 2048 .color-custom-AMmZLWXpuWWNHRU5aR__header-menu, 2049 .color-custom-AMmZLWXpuWWNHRU5aR__header-menu .text-block { 2050 /* Background */ 2051 --color-background: #ffffff; 2052 --color-background-rgb: 255 255 255; 2053 2054 /* Opacity values adjusted for background brightness */ 2055 2056--opacity-5-15: 0.05; --opacity-10-25: 0.1; --opacity-35-55: 0.35; --opacity-40-60: 20570.4; --opacity-30-60: 0.3; --opacity-60: 0.6; 2058 2059 2060 2061 /* Foreground / text â explicit or smart-contrasted */ 2062 --color: #000000; 2063 --color-rgb: 0 0 0; 2064 --color-foreground: #000000; 2065 --color-foreground-rgb: 0 0 0; 2066 --color-foreground-muted: rgb(0 0 0 / var(--opacity-muted-text)); 2067 --color-foreground-subdued: rgb(0 0 0 / var(--opacity-subdued-text)); 2068 --color-border: var(--palette-darkest); 2069 --color-border-rgb: var(--palette-darkest-rgb); 2070 2071 } 2072 2073 2074 .color-custom-AMmZLWXpuWWNHRU5aR__header-menu { 2075 /* Form-related tokens stay on .color-custom only â .text-block is a prose 2076 container (text/announcement/inline-text/blog-post-description/ 2077 collection-link/price/sku) and never holds form inputs. */ 2078 --input-disabled-background-color: rgb(0 0 0 / var(--opacity-10)); 2079 --input-disabled-border-color: rgb(0 0 0 / var(--opacity-5)); 2080 --input-disabled-text-color: rgb(0 0 0 / var(--opacity-50)); 2081 --checkbox-border: 1px solid rgb(0 0 0 / var(--opacity-35-55)); 2082 } 2083 2084 2085 .color-custom-AMmZLWXpuWWNHRU5aR__header-menu { 2086 color: var(--color, var(--color-foreground)); 2087 background-color: var(--color-background); 2088 } 2089 </style> 2090 2091 2092 2093 2094 2095 <header-menu 2096 ref="headerMenu" 2097 class="header-menu" 2098 2099 data-hydration-key="header-menu" 2100 > 2101 <div class="header-menu__inner"> 2102 <nav 2103 class="menu-list" 2104 aria-label="Primary" 2105 style="--menu-top-level-font-family: var(--font-primary--family); 2106--menu-top-level-font-size-desktop: var(--font-size--body-sm); --menu-top-level-font-style: var(--font-primary--style);
2106 --menu-top-level-font-weight: var(--font-primary--weight); --menu-top-level-font-case:uppercase; 2107 2108 --menu-top-level-font-size: var(--menu-font-sm--size); --menu-top-level-font-line-height: 2109 var(--menu-font-sm--line-height); 2110 2111--menu-top-level-font-color: var(--color-foreground); --menu-top-level-font-color-rgb: var(--color-foreground-rgb); 2112" 2113 > 2114 2115 <overflow-list 2116 2117 ref="overflowMenu" 2118 2119 2120 class="overflow-menu background-matches-parent" 2121 2122 2123 minimum-items="2" 2124 2125 2126 data-testid="header-menu-overflow-list" 2127 2128 2129 data-skip-node-update 2130 2131> 2132 <template shadowrootmode="open"> 2133 <link href="//artoffaceless.com/cdn/shop/t/8/assets/overflow-list.css?v=16727044177065489451787751266" rel="stylesheet" type="text/css" media="all" /> 2134 2135 <ul part="list"> 2136 <slot></slot> 2137 <slot 2138 name="more" 2139 part="more" 2140 hidden 2141 2142 > 2143 <li 2144 part="more" 2145 > 2146 <button 2147 class="button" 2148 type="button" 2149 tabindex="0" 2150 2151 > 2152 More 2153 </button> 2154 </li> 2155 </slot> 2156 <li 2157 part="placeholder" 2158 hidden 2159 ></li> 2160 </ul> 2161 2162 <div part="overflow"> 2163 <ul part="overflow-list"> 2164 <slot name="overflow"></slot> 2165 </ul> 2166 </div> 2167 </template> 2168 2169 2170 2171 <li 2172 class="menu-list__list-item" 2173 on:blur="/deactivate" 2174 on:pointerenter="/activate" 2175 on:pointerleave="/deactivate" 2176 ><a 2177 href="/" 2178 data-skip-node-update="true" 2179 class="menu-list__link" 2180 2181 ref="menuitem" 2182 > 2183 <span class="menu-list__link-title">Home</span> 2184 </a></li> 2185 2186 <li 2187 class="menu-list__list-item" 2188 on:blur="/deactivate" 2189 on:pointerenter="/activate" 2190 on:pointerleave="/deactivate" 2191 ><a 2192 href="/pages/about-art-of-faceless" 2193 data-skip-node-update="true" 2194 class="menu-list__link" 2195 2196 ref="menuitem" 2197 > 2198 <span class="menu-list__link-title">About</span> 2199 </a></li> 2200 2201 <li 2202 class="menu-list__list-item" 2203 on:blur="/deactivate" 2204 on:pointerenter="/activate" 2205 on:pointerleave="/deactivate" 2206 ><a 2207 href="https://blog.artoffaceless.com/" 2208 data-skip-node-update="true" 2209 class="menu-list__link" 2210 2211 ref="menuitem" 2212 > 2213 <span class="menu-list__link-title">Blog</span> 2214 </a></li> 2215 2216 <li 2217 class="menu-list__list-item" 2218 on:blur="/deactivate" 2219 on:pointerenter="/activate" 2220 on:pointerleave="/deactivate" 2221 ><a 2222 href="https://linktr.ee/ArtofFACELESS" 2223 data-skip-node-update="true" 2224 class="menu-list__link" 2225 2226 ref="menuitem" 2227 > 2228 <span class="menu-list__link-title">Our Network</span> 2229 </a></li> 2230 2231 <li 2232 class="menu-list__list-item" 2233 on:blur="/deactivate" 2234 on:pointerenter="/activate" 2235 on:pointerleave="/deactivate" 2236 ><a 2237 href="/pages/contact" 2238 data-skip-node-update="true" 2239 class="menu-list__link" 2240 2241 ref="menuitem" 2242 > 2243 <span class="menu-list__link-title">Contact</span> 2244 </a></li> 2245 2246 <li 2247 class="menu-list__list-item" 2248 slot="more" 2249 on:blur="/deactivate" 2250 on:pointerenter="/activate" 2251 on:pointerleave="/deactivate" 2252 > 2253 <button 2254 class="menu-list__link button-unstyled" 2255 aria-haspopup="true" 2256 aria-expanded="false" 2257 ref="menuitem" 2258 on:click="/toggle" 2259 data-testid="header-menu-more-button" 2260 > 2261 <span class="menu-list__link-title">More</span> 2262 </button> 2263 </li> 2264 2265</overflow-list> 2266 2267 </nav> 2268 </div> 2269 2270
2270<script 2271 src="//artoffaceless.com/cdn/shop/t/8/assets/header-menu.js?v=1177411761452820701787751266" 2272 type="module" 2273 fetchpriority="low" 2274 ></script>
2274 2275 </header-menu> 2276 2277 2278<style data-shopify> 2279 .header__underlay { 2280 --color-submenu: rgb(255 255 255); 2281 } 2282</style> 2283 2284 2285 2286 2287 2288 2289 2290 </div><div 2291 class="header__column header__column--center" 2292 data-testid="header-top-center" 2293 > 2294 2295 2296 2297 2298 2299 2300 2301 2302<a 2303 2304 href="/" 2305 class="size-style spacing-style header-logo" 2306 style=" 2307 --size-style-width: ;--size-style-height: ; 2308 --padding-block-start: 0px;--padding-block-end: 0px; 2309 --font-family: var(--font-body--family); 2310 --font-style: var(--font-body--style); 2311 --font-weight: 600; 2312 " 2313 2314> 2315 2316 2317 <span 2318 class="header-logo__image-container header-logo__image-container--original" 2319 data-testid="header-logo" 2320 > 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 <img src="//artoffaceless.com/cdn/shop/files/aof-stamp-pink-black-clean-3000.png?height=36&v=1790189977" alt="Art of FACELESS - Home" width="36" height="36" class="header-logo__image" srcset="//artoffaceless.com/cdn/shop/files/aof-stamp-pink-black-clean-3000.png?height=36&v=1790189977 1x, //artoffaceless.com/cdn/shop/files/aof-stamp-pink-black-clean-3000.png?height=72&v=1790189977 2x, //artoffaceless.com/cdn/shop/files/aof-stamp-pink-black-clean-3000.png?height=108&v=1790189977 3x" style="--header-logo-image-width: 36px;--header-logo-image-width-mobile: 28px; --header-logo-image-height: 36px; --header-logo-image-height-mobile: 28px;"> 2334 2335 2336 </span> 2337 2338 2339</a> 2340 2341 2342 2343 2344 2345 2346 2347 2348 </div><div 2349 class="header__column header__column--right" 2350 data-testid="header-top-right" 2351 > 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 <search-button 2366 class="search-action search-action--hidden-on-drawer" 2367 > 2368 <button 2369 on:click="#search-modal/showDialog" 2370 class="button-unstyled header-actions__action" 2371 aria-label="Search" 2372 aria-haspopup="dialog" 2373 > 2374 <span class="hidden"> 2375 Search 2376 </span> 2377 2378 <span class="svg-wrapper "> 2379 <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="none"><circle cx="9" cy="9" r="4.75" stroke="currentColor" stroke-width="var(--icon-stroke-width)"/><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="var(--icon-stroke-width)" d="m12.5 12.5 3.25 3.25"/></svg> 2380 2381 </span> 2382 </button> 2383 </search-button> 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394
2395<script 2396 type="module" 2397 src="//artoffaceless.com/cdn/shop/t/8/assets/cart-icon.js?v=109428858171217037751787751266" 2398 fetchpriority="low" 2399></script>
2399 2400 2401 2402 2403 2404 2405<header-actions 2406 2407> 2408 2409 2410 <div 2411 class="account-button header-actions__action color-custom-popover" 2412 > 2413 <shopify-store store-domain="https://artoffaceless.com" country="GB" language="en"></shopify-store> 2414<shopify-account 2415 menu="customer-account-main-menu" 2416 2417 > 2418 2419 <span 2420 slot="signed-out-avatar" 2421 class="account-button__text header-actions__text-style hidden" 2422 > 2423 Account 2424 </span> 2425 2426 <span 2427 slot="signed-out-avatar" 2428 class="" 2429 aria-hidden="true" 2430 > 2431 2432 <svg 2433 xmlns="http://www.w3.org/2000/svg" 2434 width="15" 2435 height="17" 2436 viewBox="0 0 15 17" 2437 fill="none" 2438 slot="signed-out-avatar" 2439 class="account-button__icon" 2440 > 2441 <path 2442 stroke="currentColor" 2443 stroke-linejoin="round" 2444 stroke-width="var(--icon-stroke-width)" 2445 d="M10.375 3.813a3.063 3.063 0 1 1-6.125 0 3.063 3.063 0 0 1 6.125 0ZM7.313 9.5c-3.667 0-6.24 2.691-6.563 6.125h13.125C13.552 12.191 10.979 9.5 7.312 9.5Z" 2446 /> 2447 </svg> 2448 2449 </span> 2450 2451 </shopify-account> 2452 </div> 2453 2454 2455 2456 <button 2457 class="header-actions__action button-unstyled" 2458 on:click="#cart-drawer/toggle" 2459 aria-haspopup="dialog" 2460 aria-expanded="false" 2461 aria-controls="cart-drawer" 2462 aria-label="Cart" 2463 aria-describedby="cart-bubble-text" 2464 data-testid="cart-drawer-trigger" 2465 > 2466 2467 <cart-icon 2468 class="header-actions__cart-icon" 2469 data-testid="cart-icon" 2470 > 2471 <span class="hidden"> 2472 Cart 2473 </span> 2474 2475 <span 2476 class="svg-wrapper " 2477 aria-hidden="true" 2478 > 2479 <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="none"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="var(--icon-stroke-width)" d="M3.392 6.875h13.216v8.016c0 .567-.224 1.112-.624 1.513-.4.402-.941.627-1.506.627H5.522a2.13 2.13 0 0 1-1.506-.627 2.15 2.15 0 0 1-.624-1.513zM8.818 2.969h2.333c.618 0 1.211.247 1.649.686a2.35 2.35 0 0 1 .683 1.658v1.562H6.486V5.313c0-.622.246-1.218.683-1.658a2.33 2.33 0 0 1 1.65-.686"/></svg> 2480 2481 </span> 2482 2483 2484 2485<div 2486 ref="cartBubble" 2487 class="cart-bubble visually-hidden" 2488 style="--cart-bubble-background-fallback: #000000; --cart-bubble-text-fallback: #ffffff;" 2489 2490 2491 data-maintain-ratio 2492 2493> 2494 <span class="cart-bubble__background"></span> 2495 <span 2496 ref="cartBubbleText" 2497 id="cart-bubble-text" 2498 class="cart-bubble__text" 2499 > 2500 <span 2501 class="cart-bubble__text-count hidden" 2502 ref="cartBubbleCount" 2503 aria-hidden="true" 2504 data-testid="cart-bubble" 2505 > 25060</span> 2507 </span> 2508</div> 2509 2510 2511 2512 </cart-icon> 2513 2514 </button> 2515 2516 2517 <span 2518 ref="liveRegion" 2519 class="visually-hidden" 2520 role="status" 2521 data-testid="cart-count-live-region" 2522 ></span> 2523</header-actions> 2524
2525<script 2526 type="module" 2527 src="//artoffaceless.com/cdn/shop/t/8/assets/header-actions.js?v=157135685635924702181787751266" 2528 fetchpriority="low" 2529></script>
2529 2530 2531 2532 2533 2534 2535 2536 </div> 2537 </div> 2538 </div> 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 <div class="header__row header__navigation-bar-row"> 2551 2552 2553 2554 2555 2556 2557 2558<style data-shopify> 2559 .header__underlay { 2560 --color-submenu: rgb(255 255 255); 2561 } 2562</style> 2563 2564 2565 2566 2567 </div> 2568 2569</header-component> 2570
2571<script 2572 src="//artoffaceless.com/cdn/shop/t/8/assets/header.js?v=183210491532312943441787751266" 2573 type="module" 2574></script>
2574 2575 2576 2577 2578 2579
2579<script type="module"> 2580 import { hydrate } from '@theme/section-hydration'; 2581 const url = new URL(window.location.href); 2582 url.searchParams.delete('page'); 2583 hydrate('sections--30935194534229__header_section', url); 2584 </script>
2584 2585 2586 2587 2588</header> 2589<!-- END sections: header-group --> 2590 </div> 2591 2592
2592<script> 2593 /** 2594 * Sets `--header-height` and `--header-group-height` to measured values before first paint. 2595 * 2596 * A few CSS rules position content relative to the header at first paint â a hero sized to 2597 * the remaining viewport, a transparent header's negative margin. Without a measured value 2598 * those rules use the `60px` fallback from `sections/header.liquid`, and the content visibly 2599 * jumps once `header.js` corrects the values after load. 2600 * 2601 * Measuring forces layout mid-parse, so it only runs where a consuming rule exists. 2602 * Callers opt in: the transparent-header branch below, or `snippets/measure-header-heights.liquid`, 2603 * which any new first-paint consumer must render too. 2604 * 2605 * Measures once per page; after load, header.js's ResizeObservers keep the values fresh. 2606 * The group-height walk mimics calculateHeaderGroupHeight() in utilities.js â keep them 2607 * in sync. 2608 */ 2609 window.measureHeaderHeights = (function () { 2610 let measured = false; 2611 2612 return function measureHeaderHeights() { 2613 if (measured) return; 2614 2615 const header = document.querySelector('#header-component'); 2616 const headerGroup = document.querySelector('#header-group'); 2617 2618 if (!header || !headerGroup) return; 2619 measured = true; 2620 2621 const headerHeight = header.offsetHeight; 2622 2623 let headerGroupHeight = 0; 2624 for (const element of headerGroup.children) { 2625 if (element instanceof HTMLElement) headerGroupHeight += element.offsetHeight; 2626 } 2627 2628 /** 2629 * A transparent header is absolutely positioned, so the loop above counts its section 2630 * wrapper as 0px. When a section follows it in the group, header.liquid pushes that 2631 * section down by the header's height using a margin, which offsetHeight also 2632 * excludes â so the header's height has to be added back manually. 2633 */ 2634 if (header.hasAttribute('transparent') && header.parentElement?.nextElementSibling) { 2635 headerGroupHeight += headerHeight; 2636 } 2637 2638 document.body.style.setProperty('--header-height', `${headerHeight}px`); 2639 document.body.style.setProperty('--header-group-height', `${headerGroupHeight}px`); 2640 }; 2641 })(); 2642 2643 /** 2644 * Transparent-header rules consume the measured heights at first paint on every 2645 * template, so the transparent case opts in globally here instead of per-section. 2646 */ 2647 if (document.querySelector('#header-component')?.hasAttribute('transparent')) { 2648 measureHeaderHeights(); 2649 } 2650 2651 /** 2652 * Sets `--top-row-height`, consumed by the header underlays and submenus. Deferred to a 2653 * rAF so the `offsetHeight` read doesn't force layout mid-parse, and scoped to the 2654 * header, where all consumers live, so the write only invalidates the header subtree. 2655 * Mimics the `--top-row-height` write in updateHeaderHeights() in utilities.js 2656 */ 2657 (function setTopRowHeight() { 2658 const header = document.querySelector('#header-component'); 2659 const headerTopRow = header?.querySelector('.header__row--top'); 2660 if (!headerTopRow) return; 2661 2662 window.requestAnimationFrame(function () { 2663 header.style.setProperty('--top-row-height', `${headerTopRow.offsetHeight}px`); 2664 }); 2665 })(); 2666 2667 /** 2668 * Sets `--transparent-header-offset-boolean` when the first section must offset itself 2669 * under a transparent header. The non-offset case relies on the `0` default declared in 2670 * sections/header.liquid â unlike updateTransparentHeaderOffset() in utilities.js, which 2671 * re-runs on editor changes and must write '0' to reset a previously written '1'. 2672 */ 2673 (function updateTransparentHeaderOffset() { 2674 const header = document.querySelector('#header-component'); 2675 const headerSection = document.querySelector('#header-group .header-section'); 2676 if (!headerSection || !header?.hasAttribute('transparent')) return; 2677 2678 const hasImmediateSection = headerSection.nextElementSibling?.classList.contains('shopify-section'); 2679 if (!hasImmediateSection) { 2680 document.body.style.setProperty('--transparent-header-offset-boolean', '1'); 2681 } 2682 })(); 2683 2684 /** 2685 * Sets the initial menu style (inline menu vs. drawer) on the header component. 2686 * Mimics setHeaderMenuStyle() in utilities.js 2687 */ 2688 (function setHeaderMenuStyle() { 2689 const headerComponent = document.querySelector('#header-component'); 2690 if (headerComponent) { 2691 const isTouchDevice = 'ontouchstart' in window && navigator.maxTouchPoints > 0; 2692 const overflowList = headerComponent.querySelector('overflow-list'); 2693 const hasReachedMinimum = overflowList && overflowList.hasAttribute('minimum-reached'); 2694 headerComponent.dataset.menuStyle = isTouchDevice || hasReachedMinimum ? 'drawer' : 'menu'; 2695 } 2696 })(); 2697 </script>
2697 2698 2699 <main 2700 id="MainContent" 2701 class="content-for-layout" 2702 role="main" 2703 data-page-transition-enabled="true" 2704 data-product-transition="true" 2705 data-template="product" 2706 > 2707 <div id="shopify-section-template--30935200563541__main" class="shopify-section"> 2708
2709<script type="application/ld+json"> 2710 {"@context":"http:\/\/schema.org\/","@id":"\/products\/the-hollow-circuit-book-1#product","@type":"Product","brand":{"@type":"Brand","name":"Art of FACELESS"},"category":"Print Books","description":"THE HOLLOW CIRCUIT â BIOPUNK NOVEL \u0026amp; TRANSMEDIA UNIVERSE\nThis is not a seamless story.\nIn a city where memory is power and history is edited into sterile perfection, the poet Veylon is pursued by echoes of himself across collapsing timelines. Beneath the surface, the Hollow Circuit breathes.\nThe text glitches. It contradicts. It loops. Some of that is intentional. Some of it is the nature of the material. By the time you finish, you will not be entirely certain which is which.\nThis is the first node in a wider transmission. The story has already begun.\nPart of the Art of FACELESS transmedia ecosystem. This is a work of adult speculative fiction containing complex themes, experimental structure, body horror, and existential recursion. Recommended for readers 18+.","image":"https:\/\/artoffaceless.com\/cdn\/shop\/files\/hollow_circuit_maroon_palette.png?v=1789261802\u0026width=1920","name":"The Hollow Circuit [Book 1] ePUB Edition","offers":{"@id":"\/products\/the-hollow-circuit-book-1?variant=54555719467349#offer","@type":"Offer","availability":"http:\/\/schema.org\/InStock","price":"5.00","priceCurrency":"GBP","url":"https:\/\/artoffaceless.com\/products\/the-hollow-circuit-book-1?variant=54555719467349"},"url":"https:\/\/artoffaceless.com\/products\/the-hollow-circuit-book-1"} 2711</script>
2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 <sticky-add-to-cart 2731 class="sticky-add-to-cart" 2732 data-variant-available="true" 2733 data-product-id="11491165929813" 2734 data-current-variant-id="54555719467349" 2735 data-initial-quantity="1" 2736 data-default-variant-title="Default Title" 2737 > 2738 <div 2739 class="sticky-add-to-cart__bar color-custom-popover" 2740 data-stuck="false" 2741 ref="stickyBar" 2742 role="region" 2743 aria-label="Quick add to cart bar" 2744 > 2745 2746 2747 <div 2748 class="sticky-add-to-cart__image" 2749 > 2750 2751 <img src="//artoffaceless.com/cdn/shop/files/hollow_circuit_maroon_palette.png?v=1789261802&width=120" alt="The Hollow Circuit [Book 1] ePUB Edition" width="120" height="180" loading="lazy" class="sticky-add-to-cart__image-img" data-testid="sticky-product-image" ref="productImage"> 2752 </div> 2753 2754 2755 2756 <div 2757 class="sticky-add-to-cart__info" 2758 data-has-image="true" 2759 data-singleton="true" 2760 data-single-option="false" 2761 > 2762 <p 2763 class="sticky-add-to-cart__title" 2764 data-testid="sticky-product-title" 2765 > 2766 The Hollow Circuit [Book 1] ePUB Edition 2767 </p> 2768 <div 2769 class="sticky-add-to-cart__variant" 2770 data-testid="sticky-variant-title" 2771 2772 style="display: none;" 2773 2774 > 2775 2776 </div> 2777 </div> 2778 2779 <div 2780 class="sticky-add-to-cart__price" 2781 data-testid="sticky-price-display" 2782 > 2783 2784 2785<div ref="priceContainer"> 2786 2787 2788 2789 <span class="price">£5.00</span> 2790 2791 2792</div> 2793 </div> 2794 2795 <button 2796 type="button" 2797 class="sticky-add-to-cart__button add-to-cart-button button" 2798 ref="addToCartButton" 2799 on:click="/handleAddToCartClick" 2800 2801 > 2802 <span 2803 class="add-to-cart-text" 2804 > 2805 2806 <span class="svg-wrapper"><svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="none"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="var(--icon-stroke-width)" d="M16.608 9.421V6.906H3.392v8.016c0 .567.224 1.112.624 1.513.4.402.941.627 1.506.627H8.63M8.818 3h2.333c.618 0 1.212.247 1.649.686a2.35 2.35 0 0 1 .683 1.658v1.562H6.486V5.344c0-.622.246-1.218.683-1.658A2.33 2.33 0 0 1 8.82 3"/><path stroke="currentColor" stroke-linecap="round" stroke-width="var(--icon-stroke-width)" d="M14.608 12.563v5m2.5-2.5h-5"/></svg> 2807</span> 2808 2809 <span class="add-to-cart-text__content"> 2810 <span>Add to cart</span> 2811 <span 2812 ref="quantityDisplay" 2813 2814 style="display: none;" 2815 2816 > (<span ref="quantityNumber">1</span>)</span> 2817 </span> 2818 </span> 2819 <span class="add-to-cart__added"> 2820 <span class="svg-wrapper add-to-cart__added-icon"><svg aria-hidden="true" class="checkmark-burst" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> 2821 <g class="check"> 2822 <circle class="ring" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 2823 <path class="tick" d="M9 12.75L11.25 15L15 9.75" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 2824 </g> 2825 <g class="burst"> 2826 <g style="--index: 0;"> 2827 <line class="line" stroke-linecap="round" pathLength="1" x1="12" y1="8.5" x2="12" y2="15.5" stroke="currentColor"/> 2828 </g> 2829 <g style="--index: 1;"> 2830 <line class="line" stroke-linecap="round" pathLength="1" x1="12" y1="8.5" x2="12" y2="15.5" stroke="currentColor"/> 2831 </g> 2832 <g style="--index: 2;"> 2833 <line class="line" stroke-linecap="round" pathLength="1" x1="12" y1="8.5" x2="12" y2="15.5" stroke="currentColor"/> 2834 </g> 2835 <g style="--index: 3;"> 2836 <line class="line" stroke-linecap="round" pathLength="1" x1="12" y1="8.5" x2="12" y2="15.5" stroke="currentColor"/> 2837 </g> 2838 <g style="--index: 4;"> 2839 <line class="line" stroke-linecap="round" pathLength="1" x1="12" y1="8.5" x2="12" y2="15.5" stroke="currentColor"/> 2840 </g> 2841 <g style="--index: 5;"> 2842 <line class="line" stroke-linecap="round" pathLength="1" x1="12" y1="8.5" x2="12" y2="15.5" stroke="currentColor"/> 2843 </g> 2844 <g style="--index: 6;"> 2845 <line class="line" stroke-linecap="round" pathLength="1" x1="12" y1="8.5" x2="12" y2="15.5" stroke="currentColor"/> 2846 </g> 2847 <g style="--index: 7;"> 2848 <line class="line" stroke-linecap="round" pathLength="1" x1="12" y1="8.5" x2="12" y2="15.5" stroke="currentColor"/> 2849 </g> 2850 </g> 2851</svg> 2852</span> 2853 </span> 2854 </button> 2855 </div> 2856 </sticky-add-to-cart> 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 <style data-shopify> 2872 .color-custom-template--30935200563541__main, 2873 .color-custom-template--30935200563541__main .text-block {
2874 /* Background */ 2875 --color-background: #ffffff; 2876 --color-background-rgb: 255 255 255; 2877 2878 /* Opacity values adjusted for background brightness */ 2879 2880--opacity-5-15: 0.05; --opacity-10-25: 0.1; --opacity-35-55: 0.35; --opacity-40-60: 28810.4; --opacity-30-60: 0.3; --opacity-60: 0.6; 2882 2883 2884 2885 /* Foreground / text â explicit or smart-contrasted */ 2886 --color: #000000; 2887 --color-rgb: 0 0 0; 2888 --color-foreground: #000000; 2889 --color-foreground-rgb: 0 0 0; 2890 --color-foreground-muted: rgb(0 0 0 / var(--opacity-muted-text)); 2891 --color-foreground-subdued: rgb(0 0 0 / var(--opacity-subdued-text)); 2892 --color-border: var(--palette-darkest); 2893 --color-border-rgb: var(--palette-darkest-rgb); 2894 2895 } 2896 2897 2898 .color-custom-template--30935200563541__main { 2899 /* Form-related tokens stay on .color-custom only â .text-block is a prose 2900 container (text/announcement/inline-text/blog-post-description/ 2901 collection-link/price/sku) and never holds form inputs. */ 2902 --input-disabled-background-color: rgb(0 0 0 / var(--opacity-10)); 2903 --input-disabled-border-color: rgb(0 0 0 / var(--opacity-5)); 2904 --input-disabled-text-color: rgb(0 0 0 / var(--opacity-50)); 2905 --checkbox-border: 1px solid rgb(0 0 0 / var(--opacity-35-55)); 2906 } 2907 2908 2909 .color-custom-template--30935200563541__main { 2910 color: var(--color, var(--color-foreground)); 2911 background-color: var(--color-background); 2912 } 2913 </style> 2914 2915 2916 2917<div 2918 class="section-background color-custom-template--30935200563541__main" 2919></div> 2920<div 2921 class="product-information section section--full-width spacing-style color-custom-template--30935200563541__main relative" 2922 style="--padding-block-start: 0px;--padding-block-end: 0px; --gap: 0px;" 2923 data-testid="product-information" 2924> 2925 2926 2927 <a 2928 class="skip-to-content-link button-secondary" 2929 href="#ProductInformation-template--30935200563541__main" 2930> 2931 Skip to product information 2932</a> 2933 2934 2935 2936 2937 <product-component 2938 class="product-information__grid product-information--media-left product-information__grid--half product-information__grid--limit-details" 2939 data-product-grid-content 2940 2941 view-event-payload="{"product":{"id":11491165929813,"title":"The Hollow Circuit [Book 1] ePUB Edition","handle":"the-hollow-circuit-book-1","selectedVariant":null},"context":null,"selectedOptions":[]}" 2942 2943 > 2944 2945 2946 2947 2948 2949 2950 <div 2951 class="product-information__media" 2952 data-testid="product-information-media" 2953 > 2954 2955 2956
2957<script 2958 src="//artoffaceless.com/cdn/shop/t/8/assets/drag-zoom-wrapper.js?v=49654226587051563631787751266" 2959 type="module" 2960 ></script>
2960 2961 2962 2963 2964
2964<script> 2965 if (window.matchMedia('(min-width: 750px)').matches) { 2966 window.measureHeaderHeights?.(); 2967 } 2968 </script>
2968 2969 2970 2971<style data-shopify> 2972 2973 2974 2975 .media-fit-contain { 2976 --product-media-fit: contain; 2977 } 2978 2979 /* Media fit for all media elements */ 2980 .media-fit-contain :is(img, video, iframe, .deferred-media__poster-image) { 2981 object-fit: contain; 2982 width: 100%; 2983 height: 100%; 2984 } 2985 2986 /* 3D Models (no object-fit support, just sizing) */ 2987 .media-fit-contain model-viewer { 2988 width: 100%; 2989 height: 100%; 2990 } 2991 2992 2993 2994 2995 /* Add background color so carousel arrows' mix-blend-mode works correctly even on transparent areas. */ 2996 2997 .media-fit-contain :is(img, .deferred-media__poster-image) { 2998 background-color: var(--color-background); 2999 } 3000 3001 3002 3003 3004 3005 3006 ::view-transition-old(gallery-item-open), 3007 ::view-transition-new(gallery-item-open), 3008 ::view-transition-old(gallery-item-close), 3009 ::view-transition-new(gallery-item-close) { 3010 height: auto; 3011 width: 100%; 3012 object-fit: contain; 3013 top: 50%; 3014 transform: translateY(-50%); 3015 } 3016 3017 3018 3019 :root { --gallery-media-border-radius: 0px; } 3020</style> 3021 3022 3023 <media-gallery 3024 class=" 3025 spacing-style 3026 sticky-content 3027 3028 media-gallery--one-column 3029 3030 3031 media-gallery--grid 3032 3033 3034 media-gallery--extend 3035 3036 " 3037 style="--padding-block-start: 0px;--padding-block-end: 0px;--padding-inline-start: 0px;--padding-inline-end: 0px; --thumbnail-width: 57px; --media-radius: 0px;--image-gap: 0px;" 3038 data-presentation="grid" 3039 3040 > 3041 3042 3043 3044 3045 3046 3047 <slideshow-component 3048 3049 ref="slideshow" 3050 3051 3052 class="product-media-gallery__slideshow--single-media slideshow--single-media" 3053 3054 style="--slideshow-timeline: --slide-0;--slide-min-height: auto;--slide-min-height-desktop: auto;" 3055 3056 initial-slide="0" 3057 3058 3059 infinite 3060 3061 3062 3063> 3064 3065 <slideshow-container ref="slideshowContainer"> 3066 3067 3068 <slideshow-slides 3069 tabindex="-1" 3070 ref="scroller" 3071 3072 > 3073 3074 3075 3076 3077 3078 3079 3080 <slideshow-slide 3081 ref="slides[]" 3082 aria-hidden="false" 3083 style="--slideshow-timeline: --slide-0; --product-media-fit: contain; --grid-template-rows: 50dvh 1fr; --grid-template-rows-desktop: 70dvh 1fr;" 3084 3085 class="product-media-container constrain-height media-fit-contain product-media-container--image product-media-container--tallest" 3086 3087 3088 3089 style="--media-preview-ratio: 0.6666666666666666;" 3090 3091 3092 3093 3094 3095> 3096 3097 3098 3099 3100<div 3101 class="product-media" 3102 style="--ratio: 0.6666666666666666" 3103 data-media-id="58602902585685" 3104> 3105 3106 <img src="//artoffaceless.com/cdn/shop/files/hollow_circuit_maroon_palette.png?v=1789261802&width=3840" alt="The Hollow Circuit [Book 1] ePUB Edition" srcset="//artoffaceless.com/cdn/shop/files/hollow_circuit_maroon_palette.png?v=1789261802&width=240 240w, //artoffaceless.com/cdn/shop/files/hollow_circuit_maroon_palette.png?v=1789261802&width=352 352w, //artoffaceless.com/cdn/shop/files/hollow_circuit_maroon_palette.png?v=1789261802&width=832 832w, //artoffaceless.com/cdn/shop/files/hollow_circuit_maroon_palette.png?v=1789261802&width=1200 1200w, //artoffaceless.com/cdn/shop/files/hollow_circuit_maroon_palette.png?v=1789261802&width=1600 1600w, //artoffaceless.com/cdn/shop/files/hollow_circuit_maroon_palette.png?v=1789261802&width=1920 1920w, //artoffaceless.com/cdn/shop/files/hollow_circuit_maroon_palette.png?v=1789261802&width=2560 2560w, //artoffaceless.com/cdn/shop/files/hollow_circuit_maroon_palette.png?v=1789261802&width=3840 3840w" width="3840" height="5760" sizes="(min-width: 750px) calc(50vw - 0px), 100vw" class="product-media__image" data_max_resolution="//artoffaceless.com/cdn/shop/files/hollow_circuit_maroon_palette.png?v=1789261802&width=3840" fetchpriority="high" style="--focal-point: 50.0% 50.0%;"> 3107 3108 3109 3110 3111</div> 3112 3113 3114 3115 3116 3117</slideshow-slide> 3118 3119 3120 3121 3122 3123 3124 </slideshow-slides> 3125 </slideshow-container> 3126 3127</slideshow-component> 3128 3129 3130 3131 3132 3133 3134 <ul 3135 class="media-gallery__grid list-unstyled" 3136 data-testid="media-gallery-grid" 3137 > 3138 3139 <li 3140 ref="media[]" 3141 class="product-media-container constrain-height media-fit-contain product-media-container--image " 3142 style=" --media-preview-ratio: 0.6666666666666666; --media-radius: 0px;" 3143 3144 data-view-transition-type="product-image-transition" 3145 3146 3147 data-focal-point="50.0% 50.0%" 3148 3149 > 3150 3151 3152<div 3153 class="product-media" 3154 style="--ratio: 0.6666666666666666" 3155 data-media-id="58602902585685" 3156> 3157 3158 <img src="//artoffaceless.com/cdn/shop/files/hollow_circuit_maroon_palette.png?v=1789261802&width=3840" alt="The Hollow Circuit [Book 1] ePUB Edition" srcset="//artoffaceless.com/cdn/shop/files/hollow_circuit_maroon_palette.png?v=1789261802&width=240 240w, //artoffaceless.com/cdn/shop/files/hollow_circuit_maroon_palette.png?v=1789261802&width=352 352w, //artoffaceless.com/cdn/shop/files/hollow_circuit_maroon_palette.png?v=1789261802&width=832 832w, //artoffaceless.com/cdn/shop/files/hollow_circuit_maroon_palette.png?v=1789261802&width=1200 1200w, //artoffaceless.com/cdn/shop/files/hollow_circuit_maroon_palette.png?v=1789261802&width=1600 1600w, //artoffaceless.com/cdn/shop/files/hollow_circuit_maroon_palette.png?v=1789261802&width=1920 1920w, //artoffaceless.com/cdn/shop/files/hollow_circuit_maroon_palette.png?v=1789261802&width=2560 2560w, //artoffaceless.com/cdn/shop/files/hollow_circuit_maroon_palette.png?v=1789261802&width=3840 3840w" width="3840" height="5760" sizes="(min-width: 750px) calc(50vw - 0px), 100vw" class="product-media__image" data_max_resolution="//artoffaceless.com/cdn/shop/files/hollow_circuit_maroon_palette.png?v=1789261802&width=3840" fetchpriority="high" style="--focal-point: 50.0% 50.0%;"> 3159 3160 3161 3162 3163</div> 3164 3165 3166 3167 3168 </li> 3169 3170 </ul> 3171 3172</media-gallery> 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 </div> 3186 3187 3188 3189 3190 3191 3192<div 3193 id="ProductInformation-template--30935200563541__main" 3194 class=" 3195 product-details 3196 sticky-content--desktop 3197 " 3198 style="--details-position: flex-start;"
3199 data-testid="product-information-details" 3200 3201 data-view-transition-type="product-details" 3202 3203> 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214<div 3215 class=" 3216 group-block 3217 group-block--height-fit 3218 group-block--width-fill 3219 border-style 3220 spacing-style 3221 size-style 3222 3223 3224 " 3225 style=" 3226 3227--border-width: 1px; --border-style: none; --border-color: 3228rgb(var(--color-border-rgb) / 1.0); --border-radius: 0px; 3229 3230 --padding-block-start: 0px;--padding-block-end: 0px;--padding-inline-start: 0px;--padding-inline-end: 0px; 3231 --size-style-width: 100%;--size-style-height: fit;--size-style-width-mobile: 100%; --size-style-width-mobile-min: 5rem; 3232 3233 " 3234 3235 data-testid="group-block" 3236><div class="group-block__media-wrapper"> 3237 3238 3239 3240 3241 3242 3243 3244 3245 </div> 3246 3247 <div 3248 class=" 3249 group-block-content 3250 3251 layout-panel-flex 3252 layout-panel-flex--column 3253 3254 " 3255 style="--flex-direction: column; --flex-wrap: nowrap; --flex-wrap-mobile: wrap; 3256 3257--gap: 12px; 3258 3259--horizontal-alignment: ; --vertical-alignment: ; 3260--vertical-alignment-mobile: ; 3261" 3262 > 3263 <div class="view-product-title"> 3264 <a 3265 href="/products/the-hollow-circuit-book-1?variant=54555719467349" 3266 >The Hollow Circuit [Book 1] ePUB Edition 3267 </a> 3268 </div> 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 <div class=" spacing-style text-block text-block--AaEJob3hOVGRuVTNEe__text_9WaLn7 h3 text-block--align-center " style=" --padding-block-start: 50px; --padding-block-end:0px; --padding-inline-start:0px; --padding-inline-end:0px; --width: 100%; --max-width: var(--max-width--body-normal); --text-align: center; "> 3282 <h1>The Hollow Circuit [Book 1] ePUB Edition</h1> 3283 </div> 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296<product-price 3297 class="text-block text-block--align-center text-center h5 spacing-style" 3298 data-block-id="ALzlLOVI2ZTNZTWY2N__price_a7krng" 3299 data-product-id="11491165929813" 3300 style=" 3301 3302 3303 --padding-block-start: 0px;--padding-block-end: max(20px, calc(var(--spacing-scale) * 50px));--padding-inline-start: 0px;--padding-inline-end: 0px; 3304 3305 --width: 100%; 3306 " 3307 3308> 3309 3310 3311<div ref="priceContainer"> 3312 3313 3314 3315 <span class="price">£5.00</span> 3316 3317 3318</div> 3319 3320 3321 <div class="tax-note">Taxes included. 3322</div> 3323 3324<div class="installments"><form method="post" action="/cart/add" id="product-form-installment-ALzlLOVI2ZTNZTWY2N__price_a7krng" accept-charset="UTF-8" class="payment-terms" enctype="multipart/form-data"><input type="hidden" name="form_type" value="product" /><input type="hidden" name="utf8" value="â" /><input 3325 type="hidden" 3326 name="id" 3327 value="54555719467349" 3328 > 3329 <shopify-payment-terms variant-id="54555719467349" shopify-meta="{"type":"product","currency_code":"GBP","country_code":"GB","variants":[{"id":54555719467349,"price_per_term":"£1.66","price_per_term_amount":1.66,"full_price":"£5.00","full_price_amount":5.0,"eligible":false,"available":true,"number_of_payment_terms":3}],"min_price":"£50.00","min_price_amount":50.0,"max_price":"£30,000.00","max_price_amount":30000.0,"financing_plans":[{"min_price":"£50.00","max_price":"£149.99","terms":[{"apr":0,"loan_type":"split_pay","installments_count":2}],"min_price_amount":50.0,"max_price_amount":149.99},{"min_price":"£150.00","max_price":"£999.99","terms":[{"apr":0,"loan_type":"split_pay","installments_count":2},{"apr":15,"loan_type":"interest","installments_count":3},{"apr":15,"loan_type":"interest","installments_count":6},{"apr":15,"loan_type":"interest","installments_count":12}],"min_price_amount":150.0,"max_price_amount":999.99},{"min_price":"£1,000.00","max_price":"£30,000.00","terms":[{"apr":15,"loan_type":"interest","installments_count":3},{"apr":15,"loan_type":"interest","installments_count":6},{"apr":15,"loan_type":"interest","installments_count":12}],"min_price_amount":1000.0,"max_price_amount":30000.0}],"installments_buyer_prequalification_enabled":false,"seller_id":null}"></shopify-payment-terms> 3330<input type="hidden" name="product-id" value="11491165929813" /><input type="hidden" name="section-id" value="template--30935200563541__main" /></form></div></product-price> 3331 3332 3333 3334 3335 3336 3337 3338<div
3339 class="divider divider-AQVQ1ai9tWU50S053a__divider_HrJgFt spacing-style" 3340 style=" 3341 --divider-justify-content: center; 3342 3343 --padding-block-start: 12px;--padding-block-end: 12px; 3344 " 3345 3346 3347> 3348 <span 3349 class="divider__line" 3350 style=" 3351 --divider-border-thickness: 1px; 3352 3353 --divider-border-rounded: 0; 3354 3355 --divider-flex-basis: 100%; 3356 " 3357 ></span> 3358</div> 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388<span 3389 class="buy-buttons-block buy-buttons-block--ARG52cFJMcHFOeVdWU__buy_buttons_eYQEYi" 3390 3391 3392><product-form-component 3393 data-section-id="template--30935200563541__main" 3394 data-product-id="11491165929813" 3395 data-product-url="/products/the-hollow-circuit-book-1" 3396 on:submit="/handleSubmit" 3397 data-quantity-default="1" 3398 data-quantity-error-max="This item has a maximum of {{ maximum }}" 3399 > 3400 <div 3401 class="visually-hidden" 3402 aria-live="assertive" 3403 role="status" 3404 aria-atomic="true" 3405 ref="liveRegion" 3406 ></div><form method="post" action="/cart/add" id="BuyButtons-ProductForm-template--30935200563541__main" accept-charset="UTF-8" class="shopify-product-form" enctype="multipart/form-data" data-type="add-to-cart-form"><input type="hidden" name="form_type" value="product" /><input type="hidden" name="utf8" value="â" /><input 3407 type="hidden" 3408 name="id" 3409 ref="variantId" 3410 value="54555719467349" 3411 ><div 3412 class="product-form-buttons spacing-style" 3413 style="--padding-block-start: 0px;--padding-block-end: max(20px, calc(var(--spacing-scale) * 24px));--padding-inline-start: 0px;--padding-inline-end: 0px;" 3414 ref="productFormButtons" 3415 ><span 3416 class="product-form-text__error hidden" 3417 ref="addToCartTextError" 3418 > 3419 <span class="svg-wrapper"><svg aria-hidden="true" class="icon icon-error" viewBox="0 0 13 13"> 3420 <circle cx="6.5" cy="6.5" r="5.5" stroke="#fff" stroke-width="var(--icon-stroke-width)"/> 3421 <circle cx="6.5" cy="6.5" r="5.5" fill="#EB001B" stroke="#EB001B" stroke-width=".7"/> 3422 <path fill="#fff" d="m5.874 3.528.1 4.044h1.053l.1-4.044zm.627 6.133c.38 0 .68-.288.68-.656s-.3-.656-.68-.656-.681.288-.681.656.3.656.68.656"/> 3423 <path fill="#fff" stroke="#EB001B" stroke-width=".7" d="M5.874 3.178h-.359l.01.359.1 4.044.008.341h1.736l.008-.341.1-4.044.01-.359H5.873Zm.627 6.833c.56 0 1.03-.432 1.03-1.006s-.47-1.006-1.03-1.006-1.031.432-1.031 1.006.47 1.006 1.03 1.006Z"/> 3424</svg> 3425</span> 3426 </span> 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440<span 3441 3442 style="--add-to-cart-font-case: ;" 3443> 3444 <add-to-cart-component 3445 ref="addToCartButtonContainer" 3446 data-product-variant-media="//artoffaceless.com/cdn/shop/files/hollow_circuit_maroon_palette.png?v=1789261802&width=100" 3447 data-add-to-cart-animation="true" 3448> 3449 <button 3450 3451 id="BuyButtons-ProductSubmitButton-AM0ZGcWh1K0xGRU1PV__add-to-cart" 3452 3453 type="submit" 3454 name="add" 3455 ref="addToCartButton" 3456 on:click="/handleClick" 3457 class="button add-to-cart-button button button--AM0ZGcWh1K0xGRU1PV__add-to-cart" 3458 3459 data-testid="standalone-add-to-cart" 3460 3461 3462 > 3463 3464 <span 3465 aria-hidden="true" 3466 class="svg-wrapper add-to-cart-icon" 3467 ><svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="none"><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="var(--icon-stroke-width)" d="M16.608 9.421V6.906H3.392v8.016c0 .567.224 1.112.624 1.513.4.402.941.627 1.506.627H8.63M8.818 3h2.333c.618 0 1.212.247 1.649.686a2.35 2.35 0 0 1 .683 1.658v1.562H6.486V5.344c0-.622.246-1.218.683-1.658A2.33 2.33 0 0 1 8.82 3"/><path stroke="currentColor" stroke-linecap="round" stroke-width="var(--icon-stroke-width)" d="M14.608 12.563v5m2.5-2.5h-5"/></svg> 3468</span> 3469 3470Add to cart 3471 <span class="add-to-cart__added"> 3472 <span class="svg-wrapper add-to-cart__added-icon"><svg aria-hidden="true" class="checkmark-burst" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> 3473 <g class="check"> 3474 <circle class="ring" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 3475 <path class="tick" d="M9 12.75L11.25 15L15 9.75" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/> 3476 </g> 3477 <g class="burst"> 3478 <g style="--index: 0;"> 3479 <line class="line" stroke-linecap="round" pathLength="1" x1="12" y1="8.5" x2="12" y2="15.5" stroke="currentColor"/> 3480 </g> 3481 <g style="--index: 1;"> 3482 <line class="line" stroke-linecap="round" pathLength="1" x1="12" y1="8.5" x2="12" y2="15.5" stroke="currentColor"/> 3483 </g> 3484 <g style="--index: 2;"> 3485 <line class="line" stroke-linecap="round" pathLength="1" x1="12" y1="8.5" x2="12" y2="15.5" stroke="currentColor"/> 3486 </g> 3487 <g style="--index: 3;"> 3488 <line class="line" stroke-linecap="round" pathLength="1" x1="12" y1="8.5" x2="12" y2="15.5" stroke="currentColor"/> 3489 </g> 3490 <g style="--index: 4;"> 3491 <line class="line" stroke-linecap="round" pathLength="1" x1="12" y1="8.5" x2="12" y2="15.5" stroke="currentColor"/> 3492 </g> 3493 <g style="--index: 5;"> 3494 <line class="line" stroke-linecap="round" pathLength="1" x1="12" y1="8.5" x2="12" y2="15.5" stroke="currentColor"/> 3495 </g> 3496 <g style="--index: 6;"> 3497 <line class="line" stroke-linecap="round" pathLength="1" x1="12" y1="8.5" x2="12" y2="15.5" stroke="currentColor"/> 3498 </g> 3499 <g style="--index: 7;"> 3500 <line class="line" stroke-linecap="round" pathLength="1" x1="12" y1="8.5" x2="12" y2="15.5" stroke="currentColor"/> 3501 </g> 3502 </g> 3503</svg> 3504</span> 3505 </span> 3506 </button> 3507</add-to-cart-component> 3508 3509</span> 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 <div 3521 class="accelerated-checkout-block" 3522 ref="acceleratedCheckoutButtonContainer" 3523 3524 3525 3526 > 3527 3528 3529 <div data-shopify="payment-button" class="shopify-payment-button"> <shopify-accelerated-checkout recommended="{"supports_subs":true,"supports_def_opts":false,"name":"shop_pay","wallet_params":{"shopId":99124740437,"merchantName":"Art of FACELESS","personalized":true}}" fallback="{"supports_subs":true,"supports_def_opts":true,"name":"buy_it_now","wallet_params":{}}
3529" access-token="297f8b4b315cd8ff0f00d185adacfdfb" buyer-country="GB" buyer-locale="en" buyer-currency="GBP" variant-params="[{"id":54555719467349,"requiresShipping":false}]" shop-id="99124740437" enabled-flags="["1172c16a","a1d1f9a1","f5afabb3","370070f3"]" > <div class="shopify-payment-button__button" role="button" disabled aria-hidden="true" style="background-color: transparent; border: none"> <div class="shopify-payment-button__skeleton"> </div> </div> <div class="shopify-payment-button__more-options shopify-payment-button__skeleton" role="button" disabled aria-hidden="true"> </div> </shopify-accelerated-checkout> </div> 3530 3531 3532 </div> 3533 3534 3535 3536 3537 3538 3539 3540 </div><input type="hidden" name="product-id" value="11491165929813" /><input type="hidden" name="section-id" value="template--30935200563541__main" /></form></product-form-component></span> 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559<div 3560 class="accordion accordion--ATWVnaFh3SVJNNTZtY__accordion_NKWPiW accordion--caret border-style spacing-style accordion--dividers" 3561 style=" 3562 --summary-font-family: var(--font-h6--family); 3563 --summary-font-style: var(--font-h6--style); 3564 --summary-font-weight: var(--font-h6--weight); 3565 --summary-font-size: var(--font-h6--size); 3566 --summary-font-line-height: var(--font-h6--line-height); 3567 --summary-font-case: var(--font-h6--case); 3568 --padding-block-start: 0px;--padding-block-end: 0px;--padding-inline-start: 0px;--padding-inline-end: 0px; 3569 3570--border-width: 1px; --border-style: none; --border-color: 3571rgb(var(--color-border-rgb) / 1.0); --border-radius: 0px; 3572 3573 3574 " 3575 3576> 3577 3578 3579 3580 3581 3582 3583 3584<accordion-custom 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594> 3595 3596 <details 3597 class="details" 3598 data-testid="accordion-details" 3599 3600 3601 > 3602 <summary class="details__header"> 3603 3604 Description 3605 <span class="svg-wrapper icon-caret icon-animated"><svg aria-hidden="true" width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg"> 3606 <path d="M11 5.5L7 9.5L3 5.5" stroke="currentColor" stroke-width="var(--icon-stroke-width)" stroke-linecap="round" stroke-linejoin="round"/> 3607</svg> 3608</span> 3609 <span class="svg-wrapper icon-plus"><svg aria-hidden="true" width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg"> 3610 <path class="vertical" d="M2.75 7H11.25" stroke="currentColor" stroke-width="var(--icon-stroke-width)" stroke-linecap="round"/> 3611 <path class="horizontal" d="M7 2.75L7 11.25" stroke="currentColor" stroke-width="var(--icon-stroke-width)" stroke-linecap="round"/> 3612</svg> 3613</span> 3614 </summary> 3615 3616 <div class="details-content"> 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 <div class=" spacing-style text-block text-block--AeFdJNUNPcmVicStpZ__text_n7A9da custom text-block--align-left custom-typography custom-font-size custom-color " style=" --padding-block-start: 12px; --padding-block-end:0px; --padding-inline-start:0px; --padding-inline-end:0px; --font-size: var(--font-size--body-lg); --font-weight: var(--font-secondary--weight);--font-family: var(--font-secondary--family); --text-transform: none; --text-wrap: pretty; --line-height: var(--line-height--body-normal); --letter-spacing: var(--letter-spacing--body-normal); --width: 100%; --max-width: var(--max-width--body-normal); --text-align: left; "> 3630 <h2>THE HOLLOW CIRCUIT â BIOPUNK NOVEL & TRANSMEDIA UNIVERSE</h2> 3631<p><span>This is not a seamless story.</span></p> 3632<p><span>In a city where memory is power and history is edited into sterile perfection, the poet Veylon is pursued by echoes of himself across collapsing timelines. Beneath the surface, the Hollow Circuit breathes.</span></p> 3633<p><span>The text glitches. It contradicts. It loops. Some of that is intentional. Some of it is the nature of the material. By the time you finish, you will not be entirely certain which is which.</span></p> 3634<p><span>This is the first node in a wider transmission. The story has already begun.</span></p> 3635<p><span class="a-text-italic">Part of the Art of FACELESS transmedia ecosystem.</span><span>Â </span><span><br><br>This is a work of adult speculative fiction containing complex themes, experimental structure, body horror, and existential recursion. Recommended for readers 18+.</span></p> 3636 </div> 3637 3638 3639 3640 3641 3642 3643 3644 </div> 3645 </details> 3646 3647</accordion-custom> 3648 3649 3650 3651 3652 3653 3654</div> 3655 3656 3657 3658 3659 3660 3661 </div> 3662</div> 3663 3664 3665 3666</div> 3667 3668 3669 3670 3671 3672 3673 3674 3675 </product-component> 3676 3677 3678 3679 3680</div> 3681 3682 3683 3684 3685 3686 3687 3688</div><div id="shopify-section-template--30935200563541__product_recommendations_qnzPkn" class="shopify-section">
3689<script 3690 src="//artoffaceless.com/cdn/shop/t/8/assets/product-recommendations.js?v=127096830375957167321787751266" 3691 type="module" 3692 fetchpriority="low" 3693></script>
3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717<product-recommendations 3718 id="product-recommendations-template--30935200563541__product_recommendations_qnzPkn" 3719 class="product-recommendations" 3720 data-url="/recommendations/products?limit=4" 3721 data-section-id="template--30935200563541__product_recommendations_qnzPkn" 3722 data-product-id="11491165929813" 3723 data-intent="related" 3724 data-testid="product-recommendations-section" 3725 data-recommendations-performed="false" 3726 data-hydration-key="product-recommendations-template--30935200563541__product_recommendations_qnzPkn" 3727 3728> 3729 3730 3731 3732 3733 3734 <style data-shopify> 3735 .color-custom-template--30935200563541__product_recommendations_qnzPkn, 3736 .color-custom-template--30935200563541__product_recommendations_qnzPkn .text-block { 3737 /* Background */ 3738 --color-background: #ffffff; 3739 --color-background-rgb: 255 255 255; 3740 3741 /* Opacity values adjusted for background brightness */ 3742 3743--opacity-5-15: 0.05; --opacity-10-25: 0.1; --opacity-35-55: 0.35; --opacity-40-60: 37440.4; --opacity-30-60: 0.3; --opacity-60: 0.6; 3745 3746 3747 3748 /* Foreground / text â explicit or smart-contrasted */ 3749 --color: #000000; 3750 --color-rgb: 0 0 0; 3751 --color-foreground: #000000; 3752 --color-foreground-rgb: 0 0 0; 3753 --color-foreground-muted: rgb(0 0 0 / var(--opacity-muted-text)); 3754 --color-foreground-subdued: rgb(0 0 0 / var(--opacity-subdued-text)); 3755 --color-border: var(--palette-darkest); 3756 --color-border-rgb: var(--palette-darkest-rgb); 3757 3758 } 3759 3760 3761 .color-custom-template--30935200563541__product_recommendations_qnzPkn { 3762 /* Form-related tokens stay on .color-custom only â .text-block is a prose 3763 container (text/announcement/inline-text/blog-post-description/ 3764 collection-link/price/sku) and never holds form inputs. */ 3765 --input-disabled-background-color: rgb(0 0 0 / var(--opacity-10)); 3766 --input-disabled-border-color: rgb(0 0 0 / var(--opacity-5)); 3767 --input-disabled-text-color: rgb(0 0 0 / var(--opacity-50)); 3768 --checkbox-border: 1px solid rgb(0 0 0 / var(--opacity-35-55)); 3769 } 3770 3771 3772 .color-custom-template--30935200563541__product_recommendations_qnzPkn { 3773 color: var(--color, var(--color-foreground)); 3774 background-color: var(--color-background); 3775 } 3776 </style> 3777 3778 3779 3780 <div 3781 class="section-background color-custom-template--30935200563541__product_recommendations_qnzPkn" 3782 ></div> 3783 <div 3784 class=" 3785 section 3786 section--page-width 3787 color-custom-template--30935200563541__product_recommendations_qnzPkn 3788 section-resource-list 3789 spacing-style 3790 gap-style 3791 " 3792 style=" 3793 --padding-block-start: max(20px, calc(var(--spacing-scale) * 48px));--padding-block-end: max(20px, calc(var(--spacing-scale) * 48px)); 3794 --gap: max(24px, calc(var(--gap-scale, 1.0) * 28px)); 3795 --column-count-mobile: 2;--resource-list-column-gap-desktop: 16px;--resource-list-row-gap-desktop: 16px;--resource-list-columns: repeat(4, 1fr);--resource-list-columns-mobile: repeat(2, 1fr);--resource-list-column-gap-desktop: 16px;--column-count: 4;--column-count-mobile: 2; 3796 " 3797 > 3798 <div class="section-resource-list__content"> 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 <div class=" spacing-style text-block text-block--Ack1OR1J5U04wNnBGV__text_GbxcYC h4 text-block--align-center " style=" --padding-block-start: 0px; --padding-block-end:0px; --padding-inline-start:0px; --padding-inline-end:0px; --width: 100%; --max-width: var(--max-width--body-normal); --text-align: center; "> 3812 <h3>You may also like</h3> 3813 </div> 3814 3815 3816 3817 3818 3819 3820 3821 </div><div 3822 class="resource-list resource-list--grid" 3823 > 3824 3825 <div 3826 class="product-recommendations__skeleton-item" 3827 aria-label="Loading product recommendations" 3828 ></div> 3829 3830 <div 3831 class="product-recommendations__skeleton-item" 3832 aria-label="Loading product recommendations" 3833 ></div> 3834 3835 <div 3836 class="product-recommendations__skeleton-item" 3837 aria-label="Loading product recommendations" 3838 ></div> 3839 3840 <div 3841 class="product-recommendations__skeleton-item" 3842 aria-label="Loading product recommendations" 3843 ></div> 3844 3845 </div></div> 3846</product-recommendations> 3847 3848 3849</div> 3850 </main> 3851 3852 <footer> 3853 <!-- BEGIN sections: footer-group --> 3854<div id="shopify-section-sections--30935194403157__footer_xrCgkf" class="shopify-section shopify-section-group-footer-group section-wrapper"> 3855 3856 3857 3858 3859 3860 3861 <style data-shopify> 3862 .color-custom-sections--30935194403157__footer_xrCgkf, 3863 .color-custom-sections--30935194403157__footer_xrCgkf .text-block {
3864 /* Background */ 3865 --color-background: #000000; 3866 --color-background-rgb: 0 0 0; 3867 3868 /* Opacity values adjusted for background brightness */ 3869 3870--opacity-5-15: 0.15; --opacity-10-25: 0.25; --opacity-35-55: 0.55; --opacity-40-60: 38710.6; --opacity-30-60: 0.6; --opacity-60: 0.6; 3872 3873 3874 3875 /* Foreground / text â explicit or smart-contrasted */ 3876 --color: var(--palette-lightest); 3877 --color-rgb: var(--palette-lightest-rgb); 3878 --color-foreground: var(--palette-lightest); 3879 --color-foreground-rgb: var(--palette-lightest-rgb); 3880 --color-foreground-muted: rgb(var(--palette-lightest-rgb) / var(--opacity-muted-text)); 3881 --color-foreground-subdued: rgb(var(--palette-lightest-rgb) / var(--opacity-subdued-text)); 3882 --color-border: var(--palette-lightest); 3883 --color-border-rgb: var(--palette-lightest-rgb); 3884 3885 } 3886 3887 3888 .color-custom-sections--30935194403157__footer_xrCgkf { 3889 /* Form-related tokens stay on .color-custom only â .text-block is a prose 3890 container (text/announcement/inline-text/blog-post-description/ 3891 collection-link/price/sku) and never holds form inputs. */ 3892 --input-disabled-background-color: rgb(var(--palette-lightest-rgb) / var(--opacity-10)); 3893 --input-disabled-border-color: rgb(var(--palette-lightest-rgb) / var(--opacity-5)); 3894 --input-disabled-text-color: rgb(var(--palette-lightest-rgb) / var(--opacity-50)); 3895 --checkbox-border: 1px solid rgb(var(--palette-lightest-rgb) / var(--opacity-35-55)); 3896 } 3897 3898 3899 .color-custom-sections--30935194403157__footer_xrCgkf { 3900 color: var(--color, var(--color-foreground)); 3901 background-color: var(--color-background); 3902 } 3903 </style> 3904 3905 3906 3907<div 3908 class="section-background color-custom-sections--30935194403157__footer_xrCgkf" 3909></div> 3910<div 3911 class="section section--page-width color-custom-sections--30935194403157__footer_xrCgkf" 3912> 3913 3914 <div 3915 class=" 3916 footer-content 3917 spacing-style 3918 3919 3920 " 3921 style=" 3922 --padding-block-start: max(20px, calc(var(--spacing-scale) * 36px));--padding-block-end: max(20px, calc(var(--spacing-scale) * 36px)); 3923 --footer-gap: 20px; 3924 --grid-columns: 3; 3925 --last-row-count: 3; 3926 --tablet-last-row-count: 1; 3927 " 3928 > 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944<accordion-custom 3945 3946 class="menu" 3947 3948 3949 3950 open-by-default-on-desktop 3951 3952 3953 open-by-default-on-mobile 3954 3955 3956 data-disable-on-desktop="true" 3957 3958 3959 data-disable-on-mobile="true" 3960 3961 3962 3963 3964> 3965 3966 <details 3967 class=" 3968 menu__details 3969 spacing-style 3970 3971 " 3972 data-testid="menu-details" 3973 style=" 3974 --spacing--size: 3px; 3975 --padding-block-start: 0px;--padding-block-end: 0px;--padding-inline-start: 0px;--padding-inline-end: 0px; 3976 " 3977 3978 open 3979 3980 3981 > 3982 <summary class="menu__heading h3"> 3983 <span class="menu__heading__default">Links</span> 3984 <span class="menu__heading__accordion"> 3985 Links 3986 3987 <span class="menu__heading__toggle svg-wrapper icon-caret icon-animated"><svg aria-hidden="true" width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg"> 3988 <path d="M11 5.5L7 9.5L3 5.5" stroke="currentColor" stroke-width="var(--icon-stroke-width)" stroke-linecap="round" stroke-linejoin="round"/> 3989</svg> 3990</span> 3991 3992 </span> 3993 </summary> 3994 3995 <nav 3996 class="details-content" 3997 3998 aria-label="Links" 3999 4000 > 4001 4002 <ul class="list-unstyled"> 4003 4004 <li class="menu__item paragraph"> 4005 <a href="/policies/refund-policy"> 4006 Return & Refund Policy 4007 </a> 4008 </li> 4009 4010 <li class="menu__item paragraph"> 4011 <a href="/policies/privacy-policy"> 4012 Privacy Policy 4013 </a> 4014 </li> 4015 4016 </ul> 4017 4018 </nav> 4019 </details> 4020 4021</accordion-custom> 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 <a 4046 href="https://store.steampowered.com/app/3879830/The_Hollow_Cir
4046cuit_Book_One/" 4047 class=" 4048 image-block image-block--AR0E3cjMydUd1T0dFd__image_R9EzLt image-block--height-fit spacing-style size-style 4049" 4050 style=" 4051 --ratio: 16 / 9; 4052 --size-style-width: fit-content;--size-style-height: fit;--size-style-width-mobile: 100%; --size-style-width-mobile-min: 5rem; 4053 --padding-block-start: 0px;--padding-block-end: 0px;--padding-inline-start: 0px;--padding-inline-end: 0px; 4054" 4055 4056 > 4057 4058<img src="//artoffaceless.com/cdn/shop/files/Header_Capsule.png?v=1787654980&width=3840" alt="" srcset="//artoffaceless.com/cdn/shop/files/Header_Capsule.png?v=1787654980&width=240 240w, //artoffaceless.com/cdn/shop/files/Header_Capsule.png?v=1787654980&width=352 352w, //artoffaceless.com/cdn/shop/files/Header_Capsule.png?v=1787654980&width=832 832w, //artoffaceless.com/cdn/shop/files/Header_Capsule.png?v=1787654980&width=1200 1200w, //artoffaceless.com/cdn/shop/files/Header_Capsule.png?v=1787654980&width=1600 1600w, //artoffaceless.com/cdn/shop/files/Header_Capsule.png?v=1787654980&width=1920 1920w, //artoffaceless.com/cdn/shop/files/Header_Capsule.png?v=1787654980&width=2560 2560w, //artoffaceless.com/cdn/shop/files/Header_Capsule.png?v=1787654980&width=3840 3840w" width="920" height="430" class="image-block__image border-style" style=" 4059 --ratio: 16 / 9; 4060 4061--border-width: 1px; --border-style: none; --border-color: 4062rgb(var(--color-border-rgb) / 1.0); --border-radius: 0px; 4063 4064" sizes="auto, (min-width: 750px) 100vw, 100vw"> 4065 4066 </a> 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083<div 4084 class=" 4085 group-block 4086 group-block--height-fit 4087 group-block--width-fill 4088 border-style 4089 spacing-style 4090 size-style 4091 4092 4093 " 4094 style=" 4095 4096--border-width: 1px; --border-style: none; --border-color: 4097rgb(var(--color-border-rgb) / 1.0); --border-radius: 0px; 4098 4099 --padding-block-start: 0px;--padding-block-end: 0px;--padding-inline-start: 0px;--padding-inline-end: 0px; 4100 --size-style-width: 100%;--size-style-height: fit;--size-style-width-mobile: 100%; --size-style-width-mobile-min: 5rem; 4101 4102 " 4103 4104 data-testid="group-block" 4105><div class="group-block__media-wrapper"> 4106 4107 4108 4109 4110 4111 4112 4113 4114 </div> 4115 4116 <div 4117 class=" 4118 group-block-content 4119 4120 layout-panel-flex 4121 layout-panel-flex--column 4122 mobile-column 4123 " 4124 style="--flex-direction: column; --flex-wrap: nowrap; --flex-wrap-mobile: wrap; 4125 4126--gap: 6px; 4127 4128--horizontal-alignment: flex-start; --vertical-alignment: center; 4129--vertical-alignment-mobile: center; 4130" 4131 > 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 4144 4145 4146 4147 4148 4149 4150 4151 4152 4153 4154 4155 4156 4157 4158 4159 4160 4161 4162 4163 4164 4165 4166 4167</div> 4168</div> 4169 4170 4171 4172 4173 4174 4175 </div> 4176</div> 4177 4178 4179 4180 4181</div><div id="shopify-section-sections--30935194403157__footer_KEF4rh" class="shopify-section shopify-section-group-footer-group section-wrapper"> 4182 4183 4184 4185 4186 4187 4188 <style data-shopify> 4189 .color-custom-sections--30935194403157__footer_KEF4rh, 4190 .color-custom-sections--30935194403157__footer_KEF4rh .text-block { 4191 /* Background */ 4192 --color-background: #000000; 4193 --color-background-rgb: 0 0 0; 4194 4195 /* Opacity values adjusted for background brightness */ 4196 4197--opacity-5-15: 0.15; --opacity-10-25: 0.25; --opacity-35-55: 0.55; --opacity-40-60: 41980.6; --opacity-30-60: 0.6; --opacity-60: 0.6; 4199 4200 4201 4202 /* Foreground / text â explicit or smart-contrasted */ 4203 --color: var(--palette-lightest); 4204 --color-rgb: var(--palette-lightest-rgb); 4205 --color-foreground: var(--palette-lightest); 4206 --color-foreground-rgb: var(--palette-lightest-rgb); 4207 --color-foreground-muted: rgb(var(--palette-lightest-rgb) / var(--opacity-muted-text)); 4208 --color-foreground-subdued: rgb(var(--palette-lightest-rgb) / var(--opacity-subdued-text)); 4209 --color-border: var(--palette-lightest); 4210 --color-border-rgb: var(--palette-lightest-rgb); 4211 4212 } 4213 4214 4215 .color-custom-sections--30935194403157__footer_KEF4rh { 4216 /* Form-related tokens stay on .color-custom only â .text-block is a prose 4217 container (text/announcement/inline-text/blog-post-description/ 4218 collection-link/price/sku) and never holds form inputs. */ 4219 --input-disabled-background-color: rgb(var(--palette-lightest-rgb) / var(--opacity-10)); 4220 --input-disabled-border-color: rgb(var(--palette-lightest-rgb) / var(--opacity-5)); 4221 --input-disabled-text-color: rgb(var(--palette-lightest-rgb) / var(--opacity-50)); 4222 --checkbox-border: 1px solid rgb(var(--palette-lightest-rgb) / var(--opacity-35-55)); 4223 } 4224 4225 4226 .color-custom-sections--30935194403157__footer_KEF4rh { 4227 color: var(--color, var(--color-foreground)); 4228 background-color: var(--color-background); 4229 } 4230 </style> 4231 4232 4233 4234<div 4235 class="section-background color-custom-sections--30935194403157__footer_KEF4rh" 4236></div> 4237<div 4238 class="section section--page-width color-custom-sections--30935194403157__footer_KEF4rh" 4239> 4240 4241 <div 4242 class=" 4243 footer-content 4244 spacing-style 4245 4246 4247 " 4248 style=" 4249 --padding-block-start: max(20px, calc(var(--spacing-scale) * 36px));--padding-block-end: max(20px, calc(var(--spacing-scale) * 36px)); 4250 --footer-gap: 20px; 4251 --grid-columns: 2; 4252 --last-row-count: 2; 4253 --tablet-last-row-count: 2; 4254 " 4255 > 4256 4257 4258 4259 4260 4261 4262 4263 4264 4265 4266 4267<div 4268 class=" 4269 group-block 4270 group-block--height-fit 4271 group-block--width-fill 4272 border-style 4273 spacing-style 4274 size-style 4275 4276 4277 " 4278 style=" 4279 4280--border-width: 1px; --border-style: none; --border-color: 4281rgb(var(--color-border-rgb) / 1.0); --border-radius: 0px; 4282 4283 --padding-block-start: 0px;--padding-block-end: 0px;--padding-inline-start: 0px;--padding-inline-end: 0px; 4284 --size-style-width: 100%;--size-style-height: fit;--size-style-width-mobile: 100%; --size-style-width-mobile-min: 5rem; 4285 4286 " 4287 4288 data-testid="group-block" 4289><div class="group-block__media-wrapper"> 4290 4291 4292 4293 4294 4295 4296 4297 4298 </div> 4299 4300 <div 4301 class=" 4302 group-block-content 4303 4304 layout-panel-flex 4305 layout-panel-flex--column 4306 mobile-column 4307 " 4308 style="--flex-direction: column; --flex-wrap: nowrap; --flex-wrap-mobile: wrap; 4309 4310--gap: 6px; 4311 4312--horizontal-alignment: flex-start; --vertical-alignment: center; 4313--vertical-alignment-mobile: center; 4314" 4315 > 4316 4317 4318 4319 4320 4321 4322 4323 4324 4325 4326 4327 4328 <div class=" spacing-style text-block text-block--AeVlVV0F6azlBdWV3d__text_AdV3Ba h3 text-block--align-left " style=" --padding-block-start: 0px; --padding-block-end:0px; --padding-inline-start:0px; --padding-inline-end:0px; --width: 100%; --max-width: var(--max-width--body-normal); --text-align: left; "> 4329 <h2>Join our email list</h2> 4330 </div> 4331 4332 4333 4334 4335 4336 4337 4338 4339 4340 4341 4342 4343 4344 4345 4346 4347 4348 4349 <rte-formatter class=" spacing-style text-block text-block--AN0xrNGp5ak8ybEE3Q__text_nrBebp rte text-block--align-left rte " style=" --padding-block-start: 0px; --padding-block-end:0px; --padding-inline-start:0px; --padding-inline-end:0px; --width: 100%; --max-width: var(--max-width--body-normal); --text-align: left; "> 4350 <p>Get exclusive deals and early access to new products.</p> 4351 </rte-formatter> 4352 4353 4354 4355 4356 4357 4358 4359</div> 4360</div> 4361 4362 4363 4364 4365 4366 4367 4368 4369 4370 4371 4372 4373 4374 4375 4376<div 4377 class="email-signup-block size-style spacing-style" 4378 style=" 4379 --size-style-width: 100%;--size-style-height: ; 4380 --padding-block-start: 0px;--padding-block-end: 0px;--padding-inline-start: 0px;--padding-inline-end: 0px; 4381 " 4382 4383> 4384 4385<form method="post" action="/contact#contact_form" id="contact_form" accept-charset="UTF-8" class="email-signup__form spacing-style"><input type="hidden" name="form_type" value="customer" /><input type="hidden" name="utf8" value="â" /> 4386 4387<div 4388 class="email-signup__input-group" 4389 style=" 4390 --border-width: var(--style-border-width-inputs); 4391 --border-radius: var(--style-border-radius-inputs); 4392 4393 " 4394 > 4395 <label 4396 for="EmailInput-AQnFKcFUwWlZKU3hBO__email_signup_y4cin8" 4397 class="visually-hidden" 4398 > 4399 Email 4400 </label> 4401 <input 4402 id="EmailInput-AQnFKcFUwWlZKU3hBO__email_signup_y4cin8" 4403 class="email-signup__input email-signup__input--all paragraph " 4404 type="email" 4405 name="contact[email]" 4406 autocorrect="off" 4407 autocapitalize="off" 4408 autocomplete="email" 4409 placeholder="Email address" 4410 required 4411 4412 > 4413 <button 4414 class="email-signup__button email-signup__button--text paragraph button button--AQnFKcFUwWlZKU3hBO__email_signup_y4cin8" 4415 4416 > 4417 4418 Sign up 4419 4420 </button> 4421 </div></form> 4422</div> 4423 4424 4425 4426 4427 4428 </div> 4429</div> 4430 4431 4432 4433 4434</div><div id="shopify-section-sections--30935194403157__utilities" class="shopify-section shopify-section-group-footer-group footer-utilities"> 4435 4436 4437 4438 4439 4440 4441 <style data-shopify> 4442 .color-custom-sections--30935194403157__utilities, 4443 .color-custom-sections--30935194403157__utilities .text-block {
4444 /* Background */ 4445 --color-background: #ffffff; 4446 --color-background-rgb: 255 255 255; 4447 4448 /* Opacity values adjusted for background brightness */ 4449 4450--opacity-5-15: 0.05; --opacity-10-25: 0.1; --opacity-35-55: 0.35; --opacity-40-60: 44510.4; --opacity-30-60: 0.3; --opacity-60: 0.6; 4452 4453 4454 4455 /* Foreground / text â explicit or smart-contrasted */ 4456 --color: #000000; 4457 --color-rgb: 0 0 0; 4458 --color-foreground: #000000; 4459 --color-foreground-rgb: 0 0 0; 4460 --color-foreground-muted: rgb(0 0 0 / var(--opacity-muted-text)); 4461 --color-foreground-subdued: rgb(0 0 0 / var(--opacity-subdued-text)); 4462 --color-border: var(--palette-darkest); 4463 --color-border-rgb: var(--palette-darkest-rgb); 4464 4465 } 4466 4467 4468 .color-custom-sections--30935194403157__utilities { 4469 /* Form-related tokens stay on .color-custom only â .text-block is a prose 4470 container (text/announcement/inline-text/blog-post-description/ 4471 collection-link/price/sku) and never holds form inputs. */ 4472 --input-disabled-background-color: rgb(0 0 0 / var(--opacity-10)); 4473 --input-disabled-border-color: rgb(0 0 0 / var(--opacity-5)); 4474 --input-disabled-text-color: rgb(0 0 0 / var(--opacity-50)); 4475 --checkbox-border: 1px solid rgb(0 0 0 / var(--opacity-35-55)); 4476 } 4477 4478 4479 .color-custom-sections--30935194403157__utilities { 4480 color: var(--color, var(--color-foreground)); 4481 background-color: var(--color-background); 4482 } 4483 </style> 4484 4485 4486 4487<div 4488 class="section-background color-custom-sections--30935194403157__utilities" 4489></div> 4490<div 4491 class="section section--page-width color-custom-sections--30935194403157__utilities" 4492 4493> 4494 <div 4495 class="utilities utilities--blocks-2 spacing-style" 4496 style="--padding-block-start: 12px;--padding-block-end: 16px; --border-width: 1px; --gap: 24px;" 4497 data-testid="footer-utilities" 4498 > 4499 4500 4501<div 4502 class=" 4503 footer-utilities__group-copyright 4504 custom-typography 4505 custom-font-size 4506 " 4507 style=" 4508 4509--font-size: 0.75rem; --font-weight: ;--font-family: ; --text-transform: none; --text-wrap: pretty; --line-height: var(--line-height--body-); --letter-spacing: var(--letter-spacing--body-); 4510 4511 " 4512 4513> 4514 <span class="footer-utilities__text"> 4515 © 2026 4516 <a href="/" title="">Art of FACELESS</a></span> 4517</div> 4518 4519 4520 4521 4522 4523 4524 <anchored-popover-component 4525 data-hover-triggered="true" 4526 > 4527 <button 4528 class="policy-list-trigger button-unstyled" 4529 popovertarget="terms-policies-popover" 4530 popovertargetaction="toggle" 4531 ref="trigger" 4532 style=" 4533 4534--font-size: 0.75rem; --font-weight: ;--font-family: ; --text-transform: none; --text-wrap: pretty; --line-height: var(--line-height--body-); --letter-spacing: var(--letter-spacing--body-); 4535 4536 " 4537 4538 > 4539 Terms and Policies 4540 </button> 4541 <div 4542 class="terms-policies-popover color-custom-popover" 4543 id="terms-policies-popover" 4544 popover="auto" 4545 ref="popover" 4546 > 4547 <ul 4548 class=" 4549 policy_list list-unstyled 4550 custom-typography 4551 custom-font-size 4552 " 4553 ><li> 4554 <a 4555 href="/policies/privacy-policy" 4556 class="footer-utilities__text" 4557 >Privacy policy</a> 4558 </li><li> 4559 <a 4560 href="/policies/refund-policy" 4561 class="footer-utilities__text" 4562 >Refund policy</a> 4563 </li><li> 4564 <a 4565 href="/policies/terms-of-service" 4566 class="footer-utilities__text" 4567 >Terms of service</a> 4568 </li><li> 4569 <a 4570 href="/policies/contact-information" 4571 class="footer-utilities__text" 4572 >Contact information</a> 4573 </li></ul> 4574 </div> 4575 </anchored-popover-component> 4576 4577 4578 4579 4580 4581 4582 </div> 4583</div> 4584 4585 4586 4587 4588</div> 4589<!-- END sections: footer-group --> 4590 </footer> 4591 </div> 4592 4593 4594 4595 <div 4596 id="shopify-section-cart-drawer-section" 4597 class="shopify-section" 4598 > 4599 4600 4601
4601<script 4602 type="module" 4603 src="//artoffaceless.com/cdn/shop/t/8/assets/cart-drawer.js?v=101430053943909765251787751266" 4604 fetchpriority="low" 4605 ></script>
4605 4606 4607 4608 4609 <theme-drawer 4610 id="cart-drawer" 4611 data-skip-node-update 4612 > 4613 <dialog 4614 ref="panel" 4615 class="theme-drawer__dialog color-custom-drawer" 4616 aria-labelledby="cart-drawer-heading" 4617 cart-summary-sticky="true" 4618 > 4619 <cart-drawer-component 4620 4621 > 4622 <template id="empty-cart-template"> 4623 4624 <div 4625 class="cart-drawer__content" 4626 aria-label="Cart" 4627 > 4628 <h2 4629 class="theme-drawer__title h4" 4630 id="cart-drawer-heading" 4631 > 4632 Your cart is empty 4633 </h2> 4634 4635 <div class="cart-drawer__items"> 4636 4637 4638 4639 4640 4641 4642 4643 4644 4645
4646<script 4647 src="//artoffaceless.com/cdn/shop/t/8/assets/component-cart-items.js?v=14476580701730542761787751266" 4648 type="module" 4649 fetchpriority="low" 4650></script>
vendor: 1 bytes, line 4650
4650
4651<script 4652 src="//artoffaceless.com/cdn/shop/t/8/assets/component-cart-quantity-selector.js?v=168493463479860323171787751266" 4653 type="module" 4654 fetchpriority="low" 4655></script>
vendor: 1 bytes, line 4655
4655
4656<script 4657 src="//artoffaceless.com/cdn/shop/t/8/assets/volume-pricing-info.js?v=94479640769665442661787751266" 4658 type="module" 4659 fetchpriority="low" 4660></script>
4660 4661 4662 4663 4664 4665<div 4666 4667 class="cart-items__wrapper cart-items__wrapper--drawer-empty" 4668 4669 data-cart-drawer-empty 4670 4671 style="" 4672> 4673 4674<p> 4675 Have an account? <a href="https://artoffaceless.com/customer_authentication/redirect?locale=en®ion_country=GB">Log in</a> to check out faster. 4676 </p><a 4677 class="button cart-items__empty-button" 4678 href="/collections/all" 4679 > 4680 <span class="button-text"> 4681 Continue shopping 4682 </span> 4683 </a></div> 4684 4685 4686 4687 </div> 4688 </div> 4689 4690 </template> 4691 4692 <div 4693 class="cart-drawer__inner cart-drawer--empty" 4694 data-hydration-key="cart-drawer-inner" 4695 ><div class="theme-drawer__header"> 4696 <button 4697 on:click="#cart-drawer/close" 4698 class="theme-drawer__close-button cart-drawer__close-button--empty" 4699 type="button" 4700 aria-label="Close" 4701 > 4702 <span class="svg-wrapper"><svg aria-hidden="true" width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> 4703<path d="M11.1765 12.025C11.4108 12.2594 11.7907 12.2594 12.025 12.025C12.2594 11.7907 12.2594 11.4108 12.025 11.1765L8.84931 8.00078L12.025 4.82505C12.2594 4.59073 12.2594 4.21083 12.025 3.97652C11.7907 3.7422 11.4108 3.7422 11.1765 3.97652L8.00078 7.15225L4.82505 3.97652C4.59073 3.7422 4.21083 3.7422 3.97652 3.97652C3.7422 4.21083 3.7422 4.59073 3.97652 4.82505L7.15225 8.00078L3.97652 11.1765C3.7422 11.4108 3.7422 11.7907 3.97652 12.025C4.21083 12.2594 4.59073 12.2594 4.82505 12.025L8.00078 8.84931L11.1765 12.025Z" fill="currentColor"/> 4704</svg> 4705</span> 4706 </button> 4707 </div> 4708 4709 4710<cart-items-component 4711 class="cart-items-component" 4712 4713 data-drawer 4714 view-event-trigger="dialog" 4715 4716 data-section-id="cart-drawer-section" 4717 4718 view-event-payload="{"context":null,"cart":null}" 4719 4720> 4721 4722 4723 <div 4724 class="cart-drawer__content" 4725 aria-label="Cart" 4726 > 4727 <h2 4728 class="theme-drawer__title h4" 4729 id="cart-drawer-heading" 4730 > 4731 Your cart is empty 4732 </h2> 4733 4734 <div class="cart-drawer__items"> 4735 4736 4737 4738 4739 4740 4741 4742 4743 4744
4745<script 4746 src="//artoffaceless.com/cdn/shop/t/8/assets/component-cart-items.js?v=14476580701730542761787751266" 4747 type="module" 4748 fetchpriority="low" 4749></script>
vendor: 1 bytes, line 4749
4749
4750<script 4751 src="//artoffaceless.com/cdn/shop/t/8/assets/component-cart-quantity-selector.js?v=168493463479860323171787751266" 4752 type="module" 4753 fetchpriority="low" 4754></script>
vendor: 1 bytes, line 4754
4754
4755<script 4756 src="//artoffaceless.com/cdn/shop/t/8/assets/volume-pricing-info.js?v=94479640769665442661787751266" 4757 type="module" 4758 fetchpriority="low" 4759></script>
4759 4760 4761 4762 4763 4764<div 4765 4766 class="cart-items__wrapper cart-items__wrapper--drawer-empty" 4767 4768 data-cart-drawer-empty 4769 4770 style="" 4771> 4772 4773<p> 4774 Have an account? <a href="https://artoffaceless.com/customer_authentication/redirect?locale=en®ion_country=GB">Log in</a> to check out faster. 4775 </p><a 4776 class="button cart-items__empty-button" 4777 href="/collections/all" 4778 > 4779 <span class="button-text"> 4780 Continue shopping 4781 </span> 4782 </a></div> 4783 4784 4785 4786 </div> 4787 </div> 4788 4789 4790</cart-items-component> 4791 4792 4793 4794 </div> 4795 </cart-drawer-component> 4796 </dialog> 4797 </theme-drawer> 4798 4799 4800 </div> 4801 4802 4803 4804 4805 4806 4807 4808 4809 4810
4811<script 4812 type="module" 4813 src="//artoffaceless.com/cdn/shop/t/8/assets/theme-drawer.js?v=155110645205299884131787751266" 4814 fetchpriority="low" 4815></script>
4815 4816
4817<script> 4818 /* Runs synchronously during HTML parsing â opens the correct drawer on first 4819 paint if navigation state was saved, so it renders with the rest of the page. */ 4820 (function () { 4821 var drawerIds = (sessionStorage.getItem('theme-drawer-open') || '').split(',').filter(Boolean); 4822 if (!drawerIds.length) return; 4823 4824 // Only restore on wide viewports (squeeze mode). On narrow viewports the 4825 // drawer is a modal overlay â let it start closed after navigation rather 4826 // than re-opening a fullscreen dialog the user may have left behind. 4827 if (!window.matchMedia('(min-width: 990px)').matches) return; 4828 4829 var dialogs = []; 4830 for (var i = 0; i < drawerIds.length; i++) { 4831 var drawer = document.getElementById(drawerIds[i]); 4832 if (!drawer) continue; 4833 4834 drawer.setAttribute('open', ''); 4835 4836 // Set [open] directly so the CSS slide-in applies without triggering 4837 // the browser's dialog focusing steps â on wide viewports the drawer is 4838 // a sidebar, not a modal, so focus should stay where it is. 4839 // The instant class suppresses the slide-in transition for the initial restore. 4840 // Set --drawer-stack-order so z-index layering matches the original order. 4841 drawer.style.setProperty('--drawer-stack-order', String(i + 1)); 4842 4843 var dialog = drawer.querySelector('dialog'); 4844 if (dialog) { 4845 dialog.setAttribute('open', ''); 4846 dialog.classList.add('theme-drawer__dialog-instant'); 4847 dialogs.push(dialog); 4848 } 4849 4850 // Let each drawer type handle its own restore (e.g. shopify-chat mode). 4851 // Synchronous dispatch â listeners attached during earlier parsing run immediately. 4852 drawer.dispatchEvent(new CustomEvent('theme-drawer:restoring')); 4853 } 4854 4855 // Apply squeeze immediately, bypassing the margin transition. 4856 // Only squeeze if at least one drawer was actually restored â saved 4857 // drawer IDs may not exist on every page (e.g. cart-drawer on /cart). 4858 var pageWrapper = document.querySelector('.page-wrapper'); 4859 if (pageWrapper && dialogs.length > 0) { 4860 pageWrapper.style.transition = 'none'; 4861 pageWrapper.classList.add('page-wrapper--drawer-open'); 4862 } 4863 4864 // Re-enable transitions after one paint so the instant state is rendered first. 4865 requestAnimationFrame(function () { 4866 requestAnimationFrame(function () { 4867 if (pageWrapper) pageWrapper.style.transition = ''; 4868 for (var j = 0; j < dialogs.length; j++) { 4869 dialogs[j].classList.remove('theme-drawer__dialog-instant'); 4870 } 4871 }); 4872 }); 4873 })(); 4874</script>
4874 4875
4876<script 4877 type="module" 4878> 4879 const pageWrapper = document.querySelector('.page-wrapper'); 4880 const squeezeQuery = window.matchMedia('(min-width: 990px)'); 4881 4882 // ââ Squeeze coordination ââ 4883 // Listens to all drawers. Only squeezes on wide viewports. 4884 document.addEventListener('theme-drawer:open', () => { 4885 if (squeezeQuery.matches) { 4886 pageWrapper?.classList.add('page-wrapper--drawer-open'); 4887 } 4888 }); 4889 4890 document.addEventListener('theme-drawer:close', () => { 4891 const openDrawer = document.querySelector('theme-drawer[open]'); 4892 if (!openDrawer) { 4893 pageWrapper?.classList.remove('page-wrapper--drawer-open'); 4894 } 4895 }); 4896 4897 squeezeQuery.addEventListener('change', () => { 4898 const openDrawer = document.querySelector('theme-drawer[open]'); 4899 pageWrapper?.classList.toggle('page-wrapper--drawer-open', Boolean(openDrawer) && squeezeQuery.matches); 4900 }); 4901 4902 // ââ State persistence ââ 4903 // Store open drawer IDs sorted by their visual stack order so 4904 // the restore script can recreate the same z-index layering. 4905 function persistDrawerState() { 4906 const openDrawers = Array.from(document.querySelectorAll('theme-drawer[open]:not([no-persist])')); 4907 if (!openDrawers.length) { 4908 sessionStorage.removeItem('theme-drawer-open'); 4909 return; 4910 } 4911 4912 openDrawers.sort((a, b) => { 4913 const orderA = Number(a.style.getPropertyValue('--drawer-stack-order') || 0); 4914 const orderB = Number(b.style.getPropertyValue('--drawer-stack-order') || 0); 4915 return orderA - orderB; 4916 }); 4917 4918 sessionStorage.setItem('theme-drawer-open', openDrawers.map((d) => d.id).join(',')); 4919 } 4920 4921 document.addEventListener('theme-drawer:open', persistDrawerState); 4922 document.addEventListener('theme-drawer:close', persistDrawerState); 4923</script>
4923 4924 4925 4926 4927 4928 4929 4930 4931 4932 4933 4934 4935 4936
4937<script 4938 src="//artoffaceless.com/cdn/shop/t/8/assets/dialog.js?v=144816527575655702281787751266" 4939 type="module" 4940></script>
4940 4941
4942<script 4943 src="//artoffaceless.com/cdn/shop/t/8/assets/predictive-search.js?v=162722252387887966571787751266" 4944 type="module" 4945 fetchpriority="low" 4946></script>
4946 4947 4948<dialog-component 4949 id="search-modal" 4950 class="search-modal" 4951 4952> 4953 <dialog 4954 ref="dialog" 4955 on:click="/closeDialogOnClickOutside" 4956 on:keydown="/closeDialogOnEscapePress" 4957 class="search-modal__content dialog-modal" 4958 scroll-lock 4959 aria-labelledby="search-modal-heading" 4960 > 4961 <h2 4962 id="search-modal-heading" 4963 class="visually-hidden" 4964 > 4965 Search 4966 </h2> 4967 <predictive-search-component 4968 class="predictive-search color-custom-popover" 4969 style="--product-corner-radius: 0px; --card-corner-radius: 0px; --title-case: uppercase;" 4970 data-section-id="predictive-search" 4971 data-testid="search-component--modal" 4972 role="search" 4973 aria-label="Search" 4974 > 4975 <form 4976 action="/search" 4977 method="get" 4978 role="search" 4979 class="predictive-search-form" 4980 ref="form" 4981 on:keydown="/onSearchKeyDown" 4982 > 4983 <div 4984 class="predictive-search-form__header" 4985 > 4986 <div class="predictive-search-form__header-inner"> 4987 <label 4988 for="cmdk-input" 4989 class="visually-hidden" 4990 >Search</label> 4991 <input 4992 class="search-input" 4993 id="cmdk-input" 4994 type="search" 4995 name="q" 4996 role="combobox" 4997 aria-expanded="false" 4998 aria-owns="predictive-search-results" 4999 aria-controls="predictive-search-results" 5000 aria-haspopup="listbox" 5001 aria-autocomplete="list" 5002 autocomplete="off" 5003 placeholder="Search" 5004 ref="searchInput" 5005 on:input="/search" 5006 on:keydown="/onSearchKeyDown" 5007 > 5008 <input 5009 name="options[prefix]" 5010 type="hidden" 5011 value="last" 5012 > 5013 <span class="svg-wrapper predictive-search__icon"> 5014 <svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="none"><circle cx="9" cy="9" r="4.75" stroke="currentColor" stroke-width="var(--icon-stroke-width)"/><path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="var(--icon-stroke-width)" d="m12.5 12.5 3.25 3.25"/></svg> 5015 5016 </span> 5017 <button 5018 type="button" 5019 class="button-unstyled predictive-search__reset-button" 5020 ref="resetButton" 5021 hidden 5022 on:click="/resetSearch" 5023 > 5024 Clear 5025 </button> 5026 </div> 5027 <button 5028 type="button" 5029 class="button predictive-search__close-modal-button" 5030 aria-label="Close dialog" 5031 on:click="dialog-component/closeDialog" 5032 ref="closeModalButton" 5033 > 5034 <span class="svg-wrapper"> 5035 <svg aria-hidden="true" width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> 5036<path d="M11.1765 12.025C11.4108 12.2594 11.7907 12.2594 12.025 12.025C12.2594 11.7907 12.2594 11.4108 12.025 11.1765L8.84931 8.00078L12.025 4.82505C12.2594 4.59073 12.2594 4.21083 12.025 3.97652C11.7907 3.7422 11.4108 3.7422 11.1765 3.97652L8.00078 7.15225L4.82505 3.97652C4.59073 3.7422 4.21083 3.7422 3.97652 3.97652C3.7422 4.21083 3.7422 4.59073 3.97652 4.82505L7.15225 8.00078L3.97652 11.1765C3.7422 11.4108 3.7422 11.7907 3.97652 12.025C4.21083 12.2594 4.59073 12.2594 4.82505 12.025L8.00078 8.84931L11.1765 12.025Z" fill="currentColor"/> 5037</svg> 5038 5039 </span> 5040 </button> 5041 </div> 5042 5043 <div class="predictive-search-form__content-wrapper"> 5044 <div 5045 class="predictive-search-form__content" 5046 ref="predictiveSearchResults" 5047 on:click="/handleModalClick" 5048 > 5049 5050 5051<div 5052 id="predictive-search-results" 5053 class="predictive-search-dropdown" 5054 role="listbox" 5055 aria-expanded="true" 5056 style="--color-shadow: rgb(var(--color-foreground-rgb) / 0.1);" 5057> 5058 5059 <div class="predictive-search-results__inner"> 5060 5061 5062 5063 5064 5065 <div 5066 id="predictive-search-products" 5067 class="predictive-search-results__products" 5068 5069 data-testid="products-list-default--modal" 5070 5071> 5072 5073 <h4 class="predictive-search-results__title"> 5074 Products 5075 </h4> 5076 <ul 5077 class="predictive-search-results__list predictive-search-results__wrapper-products list-unstyled" 5078 > 5079 5080 5081 <li 5082 class="predictive-search-results__card predictive-search-results__card--product" 5083 ref="resultsItems[]" 5084 > 5085 5086<product-card-link 5087 class="resource-card__wrapper" 5088 5089 data-product-id="11528517386581" 5090 data-featured-media-url="//artoffaceless.com/cdn/shop/files/kiss-cut-stickers-white-3x3-default-6a8b3850cd983.jpg?v=1787508846&width=500" 5091 data-product-transition="true" 5092 on:click="/handleViewTransition" 5093 5094 5095 view-event-payload="{"product":{"id":11528517386581,"title":"404 QR Code Sticker","handle":"bubble-free-stickers","selectedVariant":null},"context":"search","selectedOptions":[]}" 5096 5097 ><div 5098 class="resource-card" 5099 data-resource-type="product" 5100> 5101 <a 5102 class="resource-card__link" 5103 href="/products/bubble-free-stickers" 5104 > 5105 <span class="visually-hidden"> 5106 404 QR Code Sticker 5107 </span> 5108 </a> 5109 <div 5110 class="resource-card__media" 5111 style="--resource-card-aspect-ratio: 4 / 5;" 5112 5113 ref="cardGallery" 5114 data-view-transition-to-main-product 5115 5116 > 5117 5118 5119 5120 <img src="//artoffaceless.com/cdn/shop/files/kiss-cut-stickers-white-3x3-default-6a8b3850cd983.jpg?v=1787508846&width=500" alt="Product mockup" srcset="//artoffaceless.com/cdn/shop/files/kiss-cut-stickers-white-3x3-default-6a8b3850cd983.jpg?v=1787508846&width=240 240w, //artoffaceless.com/cdn/shop/files/kiss-cut-stickers-white-3x3-default-6a8b3850cd983.jpg?v=1787508846&width=352 352w" width="500" height="500" loading="lazy" class="resource-card__image" sizes="auto" ref="imagesToTransition[]" style="object-position: 50.0% 50.0%;"> 5121 5122 <img src="//artoffaceless.com/cdn/shop/files/kiss-cut-stickers-white-4x4-default-6a8b3850ce912.jpg?v=1787508847&width=500" alt="Product mockup" srcset="//artoffaceless.com/cdn/shop/files/kiss-cut-stickers-white-4x4-default-6a8b3850ce912.jpg?v=1787508847&width=240 240w, //artoffaceless.com/cdn/shop/files/kiss-cut-stickers-white-4x4-default-6a8b3850ce912.jpg?v=1787508847&width=352 352w" width="500" height="500" loading="lazy" class="resource-card__image resource-card__image--secondary" sizes="auto" ref="imagesToTransition[]" data-media-id="58072383357269" style="object-position: 50.0% 50.0%;"> 5123</div> 5124 5125 <div class="resource-card__content"> 5126 <p class="resource-card__title paragraph">404 QR Code Sticker</p> 5127 5128 5129 5130 5131<div ref="priceContainer"> 5132 5133 5134
5135 <span class="price">£1.93</span> 5136 5137 5138</div> 5139 5140 </div> 5141</div></product-card-link> 5142 5143 </li> 5144 5145 <li 5146 class="predictive-search-results__card predictive-search-results__card--product" 5147 ref="resultsItems[]" 5148 > 5149 5150<product-card-link 5151 class="resource-card__wrapper" 5152 5153 data-product-id="11607023944021" 5154 data-featured-media-url="//artoffaceless.com/cdn/shop/files/cowards-on-the-central-line-album-art.jpg?v=1789380503&width=500" 5155 data-product-transition="true" 5156 on:click="/handleViewTransition" 5157 5158 5159 view-event-payload="{"product":{"id":11607023944021,"title":"Cowards on the Central Line [Explicit] HD WAV, 24-bit, 24K Audio","handle":"cowards-on-the-central-line-explicit","selectedVariant":null},"context":"search","selectedOptions":[]}" 5160 5161 ><div 5162 class="resource-card" 5163 data-resource-type="product" 5164> 5165 <a 5166 class="resource-card__link" 5167 href="/products/cowards-on-the-central-line-explicit" 5168 > 5169 <span class="visually-hidden"> 5170 Cowards on the Central Line [Explicit] HD WAV, 24-bit, 24K Audio 5171 </span> 5172 </a> 5173 <div 5174 class="resource-card__media" 5175 style="--resource-card-aspect-ratio: 4 / 5;" 5176 5177 ref="cardGallery" 5178 data-view-transition-to-main-product 5179 5180 > 5181 5182 5183 5184 <img src="//artoffaceless.com/cdn/shop/files/cowards-on-the-central-line-album-art.jpg?v=1789380503&width=500" alt="" srcset="//artoffaceless.com/cdn/shop/files/cowards-on-the-central-line-album-art.jpg?v=1789380503&width=240 240w, //artoffaceless.com/cdn/shop/files/cowards-on-the-central-line-album-art.jpg?v=1789380503&width=352 352w" width="500" height="500" loading="lazy" class="resource-card__image" sizes="auto" ref="imagesToTransition[]" style="object-position: 50.0% 50.0%;"> 5185</div> 5186 5187 <div class="resource-card__content"> 5188 <p class="resource-card__title paragraph">Cowards on the Central Line [Explicit] HD WAV, 24-bit, 24K Audio</p> 5189 5190 5191 5192 5193<div ref="priceContainer"> 5194 5195 5196 5197 <span class="price">£0.79</span> 5198 5199 5200</div> 5201 5202 </div> 5203</div></product-card-link> 5204 5205 </li> 5206 5207 <li 5208 class="predictive-search-results__card predictive-search-results__card--product" 5209 ref="resultsItems[]" 5210 > 5211 5212<product-card-link 5213 class="resource-card__wrapper" 5214 5215 data-product-id="11528453980501" 5216 data-featured-media-url="//artoffaceless.com/cdn/shop/files/album_cover_1_glitch_icon_6b1183a2-945f-4ae5-abfa-3be5d87eefeb.png?v=1789383275&width=500" 5217 data-product-transition="true" 5218 on:click="/handleViewTransition" 5219 5220 5221 view-event-payload="{"product":{"id":11528453980501,"title":"iz it coz i iz on Blogger? [Explicit] HD WAV, 24-bit, 24K Audio","handle":"digital-product","selectedVariant":null},"context":"search","selectedOptions":[]}" 5222 5223 ><div 5224 class="resource-card" 5225 data-resource-type="product" 5226> 5227 <a 5228 class="resource-card__link" 5229 href="/products/digital-product" 5230 > 5231 <span class="visually-hidden"> 5232 iz it coz i iz on Blogger? [Explicit] HD WAV, 24-bit, 24K Audio 5233 </span> 5234 </a> 5235 <div 5236 class="resource-card__media" 5237 style="--resource-card-aspect-ratio: 4 / 5;" 5238 5239 ref="cardGallery" 5240 data-view-transition-to-main-product 5241 5242 > 5243 5244 5245 5246 <img src="//artoffaceless.com/cdn/shop/files/album_cover_1_glitch_icon_6b1183a2-945f-4ae5-abfa-3be5d87eefeb.png?v=1789383275&width=500" alt="" srcset="//artoffaceless.com/cdn/shop/files/album_cover_1_glitch_icon_6b1183a2-945f-4ae5-abfa-3be5d87eefeb.png?v=1789383275&width=240 240w, //artoffaceless.com/cdn/shop/files/album_cover_1_glitch_icon_6b1183a2-945f-4ae5-abfa-3be5d87eefeb.png?v=1789383275&width=352 352w" width="500" height="500" loading="lazy" class="resource-card__image" sizes="auto" ref="imagesToTransition[]" style="object-position: 50.0% 50.0%;"> 5247</div> 5248 5249 <div class="resource-card__content"> 5250 <p class="resource-card__title paragraph">iz it coz i iz on Blogger? [Explicit] HD WAV, 24-bit, 24K Audio</p> 5251 5252 5253 5254 5255<div ref="priceContainer"> 5256 5257 5258
5259 <span class="price">£0.79</span> 5260 5261 5262</div> 5263 5264 </div> 5265</div></product-card-link> 5266 5267 </li> 5268 5269 <li 5270 class="predictive-search-results__card predictive-search-results__card--product" 5271 ref="resultsItems[]" 5272 > 5273 5274<product-card-link 5275 class="resource-card__wrapper" 5276 5277 data-product-id="11488239223125" 5278 data-featured-media-url="//artoffaceless.com/cdn/shop/files/maroon-ebook-cover.png?v=1790058339&width=500" 5279 data-product-transition="true" 5280 on:click="/handleViewTransition" 5281 5282 5283 view-event-payload="{"product":{"id":11488239223125,"title":"MAR00N â ePUB Edition","handle":"mar00n-epub-edition","selectedVariant":null},"context":"search","selectedOptions":[]}" 5284 5285 ><div 5286 class="resource-card" 5287 data-resource-type="product" 5288> 5289 <a 5290 class="resource-card__link" 5291 href="/products/mar00n-epub-edition" 5292 > 5293 <span class="visually-hidden"> 5294 MAR00N â ePUB Edition 5295 </span> 5296 </a> 5297 <div 5298 class="resource-card__media" 5299 style="--resource-card-aspect-ratio: 4 / 5;" 5300 5301 ref="cardGallery" 5302 data-view-transition-to-main-product 5303 5304 > 5305 5306 5307 5308 <img src="//artoffaceless.com/cdn/shop/files/maroon-ebook-cover.png?v=1790058339&width=500" alt="" srcset="//artoffaceless.com/cdn/shop/files/maroon-ebook-cover.png?v=1790058339&width=240 240w, //artoffaceless.com/cdn/shop/files/maroon-ebook-cover.png?v=1790058339&width=352 352w" width="500" height="800" loading="lazy" class="resource-card__image" sizes="auto" ref="imagesToTransition[]" style="object-position: 50.0% 50.0%;"> 5309</div> 5310 5311 <div class="resource-card__content"> 5312 <p class="resource-card__title paragraph">MAR00N â ePUB Edition</p> 5313 5314 5315 5316 5317<div ref="priceContainer"> 5318 5319 5320 5321 <span class="price">£5.00</span> 5322 5323 5324</div> 5325 5326 </div> 5327</div></product-card-link> 5328 5329 </li> 5330 5331 </ul> 5332 5333</div> 5334 5335 5336 5337 </div> 5338 5339</div> 5340 5341 </div> 5342 5343 <div class="predictive-search-form__footer"> 5344 <button 5345 class="button predictive-search__search-button" 5346 ref="viewAllButton" 5347 > 5348 View all 5349 </button> 5350 </div> 5351 </div> 5352 </form> 5353 </predictive-search-component> 5354 </dialog> 5355</dialog-component> 5356 5357 5358 5359 5360 5361
5361<script 5362 src="//artoffaceless.com/cdn/shop/t/8/assets/gift-card-recipient-form.js?v=170482155849799299241787751266" 5363 type="module" 5364 fetchpriority="low" 5365></script>
5365 5366 5367 5368 5369 5370<quick-add-dialog id="quick-add-dialog"> 5371 <dialog 5372 class="quick-add-modal dialog-modal color-custom-popover" 5373 ref="dialog" 5374 scroll-lock 5375 > 5376 <button 5377 ref="closeButton" 5378 on:click="/closeDialog" 5379 class="button button-unstyled close-button quick-add-modal__close" 5380 aria-label="Close dialog" 5381 ><svg aria-hidden="true" width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> 5382<path d="M11.1765 12.025C11.4108 12.2594 11.7907 12.2594 12.025 12.025C12.2594 11.7907 12.2594 11.4108 12.025 11.1765L8.84931 8.00078L12.025 4.82505C12.2594 4.59073 12.2594 4.21083 12.025 3.97652C11.7907 3.7422 11.4108 3.7422 11.1765 3.97652L8.00078 7.15225L4.82505 3.97652C4.59073 3.7422 4.21083 3.7422 3.97652 3.97652C3.7422 4.21083 3.7422 4.59073 3.97652 4.82505L7.15225 8.00078L3.97652 11.1765C3.7422 11.4108 3.7422 11.7907 3.97652 12.025C4.21083 12.2594 4.59073 12.2594 4.82505 12.025L8.00078 8.84931L11.1765 12.025Z" fill="currentColor"/> 5383</svg> 5384</button> 5385 5386 <product-component 5387 id="quick-add-modal-content" 5388 class="quick-add-modal__content" 5389 view-event-trigger="dialog" 5390 ></product-component> 5391 </dialog> 5392</quick-add-dialog> 5393 5394 5395 5396 5397 5398 5399 5400 5401 5402 5403 5404 5405 5406 5407 5408
5408<script src="https://cdn.shopify.com/storefront/standard-actions.js" type="module" data-source-attribution="shopify.standard_actions"></script>
5408 5409</body> 5410</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.