/* v12.10.240 - Turn.js large-mode measured-before-init fix. */
body.op-turntest-mode .op-turn-integrated-book{
  position:absolute;
  inset:0;
  width:100%;
  height:100%;
  z-index:60;
  overflow:visible;
  visibility:hidden;
  opacity:0;
  filter:none;
  transition:opacity .16s ease;
  touch-action:none;
  cursor:grab;
}
body.op-turntest-ready .op-turn-integrated-book{visibility:visible;opacity:1}
body.op-turntest-turning .op-turn-integrated-book,
body.op-turntest-dragging .op-turn-integrated-book{cursor:grabbing}
body.op-turntest-ready .controls .ctrl-btn.is-disabled{opacity:.45;cursor:not-allowed}
body.op-turntest-ready .op-turn-integrated-book .turn-page{cursor:grab!important}
body.op-turntest-ready .op-turn-integrated-book .turn-page:active{cursor:grabbing!important}
body.op-turntest-ready .op-turn-integrated-book.op-turn-native-drag-disabled .turn-page{cursor:default!important}
body.op-turntest-ready .op-turn-integrated-book.op-turn-native-drag-disabled a,
body.op-turntest-ready .op-turn-integrated-book.op-turn-native-drag-disabled button,
body.op-turntest-ready .op-turn-integrated-book.op-turn-native-drag-disabled [role="button"]{cursor:pointer!important}
body.op-turntest-ready .magazine-shell .book{display:none!important;visibility:hidden!important;pointer-events:none!important}
body.op-turntest-ready .magazine-shell .flip-sheet{display:none!important}
/* Turn.js controls .op-turn-sheet. The original .page lives inside it so legacy !important
   geometry cannot override the page-turn engine's own position and transform. */
body.op-turntest-mode #op-turn-integrated-book .op-turn-sheet{
  background:var(--paper,#e6cd91);
  overflow:hidden;
  box-sizing:border-box;
}
body.op-turntest-mode #op-turn-integrated-book .op-turn-sheet>.page{
  position:absolute!important;
  inset:0!important;
  display:block!important;
  width:100%!important;
  height:100%!important;
  min-height:0!important;
  margin:0!important;
  z-index:1!important;
  transform:none!important;
  box-sizing:border-box!important;
  overflow:hidden!important;
}
body.op-turntest-mode #op-turn-integrated-book .page-safe-area{height:100%!important;max-height:100%!important;overflow:hidden!important}
body.op-turntest-mode #op-turn-integrated-book .nc-mobile-card-stack-reader{display:none!important}
body.op-turntest-mode #op-turn-integrated-book .turn-page-wrapper{overflow:hidden!important}
body.op-turntest-turning #op-turn-integrated-book .product-card{transition:none!important}
body.op-turntest-mode #op-turn-integrated-book .op-turn-padding-page{padding:0!important;border:0!important;background:var(--paper,#e6cd91)!important;box-shadow:none!important}
body.op-turntest-mode #op-turn-integrated-book .op-turn-leading-blank{visibility:hidden!important}
.op-turn-integrated-spine{display:none}
body.op-turntest-ready .op-turn-integrated-spine{
  display:block;
  position:absolute;
  left:50%;
  top:0;
  bottom:0;
  width:22px;
  transform:translateX(-50%);
  z-index:130;
  pointer-events:none;
  background:linear-gradient(90deg,rgba(0,0,0,.46),rgba(255,242,190,.30),rgba(0,0,0,.52));
  box-shadow:0 0 24px rgba(0,0,0,.62),inset 0 0 10px rgba(255,231,165,.24);
}
body.op-turntest-turning .op-turn-integrated-spine{opacity:.72}
.op-turntest-fallback-notice{
  position:fixed;
  left:16px;
  bottom:108px;
  z-index:9999;
  max-width:460px;
  padding:12px 15px;
  border:1px solid rgba(220,185,45,.45);
  border-radius:14px;
  background:rgba(12,10,5,.90);
  color:#f5df87;
  font:700 13px/1.35 system-ui,-apple-system,"Segoe UI",sans-serif;
  box-shadow:0 20px 44px rgba(0,0,0,.45);
}


/* v12.10.172: keep generated/decorative Turn.js layers from exposing square hit-boxes behind pages. */
body.op-turntest-mode #op-turn-integrated-book .turn-page-wrapper{
  background:transparent!important;
  box-shadow:none!important;
}
body.op-turntest-mode #op-turn-integrated-book .turn-page-wrapper[page="1"]{
  visibility:hidden!important;
  pointer-events:none!important;
}
body.op-turntest-ready #op-turn-integrated-book .op-turn-sheet,
body.op-turntest-ready #op-turn-integrated-book .turn-page{
  pointer-events:auto!important;
}
body.op-turntest-ready #op-turn-integrated-book .op-turn-boundary-locked,
body.op-turntest-ready #op-turn-integrated-book .op-turn-boundary-locked .page{
  cursor:default!important;
}
body.op-turntest-ready #op-turn-integrated-book.op-turn-at-first .op-turn-first-physical-page,
body.op-turntest-ready #op-turn-integrated-book.op-turn-at-first .op-turn-first-physical-page>.page,
body.op-turntest-ready #op-turn-integrated-book.op-turn-at-last .op-turn-last-physical-page,
body.op-turntest-ready #op-turn-integrated-book.op-turn-at-last .op-turn-last-physical-page>.page{
  cursor:default!important;
}
body.op-turntest-ready #op-turn-integrated-book.op-turn-at-last .op-turn-last-physical-page.op-turn-sheet-left,
body.op-turntest-ready #op-turn-integrated-book.op-turn-at-last .op-turn-last-physical-page.op-turn-sheet-left>.page{
  cursor:grab!important;
}
body.op-turntest-dragging #op-turn-integrated-book.op-turn-at-last .op-turn-last-physical-page.op-turn-sheet-left,
body.op-turntest-turning #op-turn-integrated-book.op-turn-at-last .op-turn-last-physical-page.op-turn-sheet-left{
  cursor:grabbing!important;
}

/* v12.10.173: visual cleanup for the square back-corners visible behind Turn.js pages.
   The production Turn.js book owns the physical page edge now; legacy stack blocks
   were still visible behind it as hard rectangular corners and could also receive
   edge clicks visually. Hide those blocks only in Turn.js mode and replace them with
   a clipped, non-interactive soft paper edge. */
body.op-turntest-ready .magazine-shell .stack-left,
body.op-turntest-ready .magazine-shell .stack-right,
body.op-turntest-ready .magazine-shell .spine{
  display:none!important;
  opacity:0!important;
  visibility:hidden!important;
  pointer-events:none!important;
}
body.op-turntest-ready .magazine-shell .book-wrap::before,
body.op-turntest-ready .magazine-shell .book-wrap::after{
  content:""!important;
  position:absolute!important;
  top:2.5%!important;
  bottom:2.5%!important;
  width:18px!important;
  z-index:58!important;
  pointer-events:none!important;
  opacity:.72!important;
  filter:blur(.1px)!important;
  background:linear-gradient(90deg,rgba(58,38,14,.30),rgba(255,239,180,.36),rgba(38,25,8,.20))!important;
  box-shadow:0 16px 24px rgba(0,0,0,.26)!important;
}
body.op-turntest-ready .magazine-shell .book-wrap::before{
  left:-2px!important;
  border-radius:18px 0 0 18px!important;
  clip-path:polygon(28% 0,100% 0,100% 100%,28% 100%,0 94%,0 6%)!important;
}
body.op-turntest-ready .magazine-shell .book-wrap::after{
  right:-2px!important;
  border-radius:0 18px 18px 0!important;
  clip-path:polygon(0 0,72% 0,100% 6%,100% 94%,72% 100%,0 100%)!important;
}
body.op-turntest-ready #op-turn-integrated-book,
body.op-turntest-ready #op-turn-integrated-book .turn-page-wrapper,
body.op-turntest-ready #op-turn-integrated-book .turn-page,
body.op-turntest-ready #op-turn-integrated-book .op-turn-sheet,
body.op-turntest-ready #op-turn-integrated-book .op-turn-sheet>.page{
  border-radius:0!important;
}
body.op-turntest-ready #op-turn-integrated-book .turn-page-wrapper{
  outline:0!important;
  border:0!important;
  background:transparent!important;
  box-shadow:none!important;
}
body.op-turntest-ready #op-turn-integrated-book .op-turn-sheet-left,
body.op-turntest-ready #op-turn-integrated-book .op-turn-sheet-left>.page{
  border-radius:8px 0 0 8px!important;
}
body.op-turntest-ready #op-turn-integrated-book .op-turn-sheet-right,
body.op-turntest-ready #op-turn-integrated-book .op-turn-sheet-right>.page{
  border-radius:0 8px 8px 0!important;
}
body.op-turntest-ready #op-turn-integrated-book .turn-page-wrapper[style*="display: none"],
body.op-turntest-ready #op-turn-integrated-book .turn-page-wrapper[style*="visibility: hidden"]{
  pointer-events:none!important;
}
/* Remove Turn.js diagonal fold debug-like square artifacts without disabling the curl itself. */
body.op-turntest-ready #op-turn-integrated-book div[class*="shadow"],
body.op-turntest-ready #op-turn-integrated-book div[class*="corner"]{
  pointer-events:none!important;
}


/* Padding sheets are structural only and never become visible catalog pages. */
body.op-turntest-ready #op-turn-integrated-book .op-turn-leading-blank,
body.op-turntest-ready #op-turn-integrated-book .op-turn-padding-sheet{
  visibility:hidden!important;
  opacity:0!important;
  pointer-events:none!important;
}
body.op-turntest-ready .magazine-shell .book-wrap::before,
body.op-turntest-ready .magazine-shell .book-wrap::after{
  display:none!important;
}


/* Do not force wrapper visibility while folding. Turn.js temporarily rotates the
   following page by 90 degrees inside its own clipping tree; exposing every wrapper
   reveals that implementation layer as a horizontal page. */
body.op-turntest-turning #op-turn-integrated-book .op-turn-sheet,
body.op-turntest-turning #op-turn-integrated-book .turn-page,
body.op-turntest-dragging #op-turn-integrated-book .op-turn-sheet,
body.op-turntest-dragging #op-turn-integrated-book .turn-page{
  background:var(--paper,#e6cd91)!important;
}

/* The legacy fullscreen rules first stretch the wrap almost to 100vw, then apply
   another 1.08/1.24 transform from the two view buttons. In Turn.js mode that
   double enlargement clips the physical book. Size the wrap itself instead, so
   Turn.js receives the real dimensions and both presets remain inside the screen. */
@media (min-width:769px){
  body.op-turntest-mode.op-catalog-fullscreen:not(.op-reader-large) .magazine-shell .book-wrap{
    width:min(calc(100vw - 320px),calc(172vh - 326.8px),1700px)!important;
    min-width:0!important;
    max-width:none!important;
    transform:none!important;
    transform-origin:center center!important;
    transition:none!important;
  }
  body.op-turntest-mode.op-catalog-fullscreen.op-reader-large .magazine-shell .book-wrap{
    width:min(calc(100vw - 190px),calc(172vh - 172px),1900px)!important;
    min-width:0!important;
    max-width:none!important;
    transform:none!important;
    transform-origin:center center!important;
    transition:none!important;
  }
}


/* v12.10.190 - Turn.js zoom keeps category tabs visible.
   v12.10.189 fixed stale zoom geometry but clipped .book-wrap, which also clipped
   the external category tabs. Keep the wrapper overflow visible and clip only the
   Turn.js engine layers so the page curl stays inside the book while tabs remain
   outside the magazine edge. */
body.op-turntest-mode.op-reader-large:not(.op-catalog-fullscreen) .magazine-shell .book-wrap{
  transform:none!important;
  transform-origin:center top!important;
  width:min(calc(100vw - 96px),calc((100vh - 166px) * 1.72),1540px)!important;
  min-width:0!important;
  max-width:none!important;
  /* The paper, not its containing box, animates. Turn.js cannot safely resize
     through intermediate widths while a view preset is changing. */
  transition:none!important;
  overflow:visible!important;
}
body.op-turntest-mode:not(.op-reader-large):not(.op-catalog-fullscreen) .magazine-shell .book-wrap{
  transform:none!important;
  overflow:visible!important;
}
body.op-turntest-ready #op-turn-integrated-book{
  overflow:visible!important;
}
body.op-turntest-ready #op-turn-integrated-book .turn-page-wrapper{
  overflow:hidden!important;
}
@media (max-width:900px){
  body.op-turntest-mode.op-reader-large:not(.op-catalog-fullscreen) .magazine-shell .book-wrap{
    width:min(calc(100vw - 30px),calc((100vh - 166px) * 1.72),1180px)!important;
  }
}


/* v12.10.190 - category tabs are intentionally outside .book-wrap edges.
   They must stay visible above the Turn.js replacement book in normal, zoom and fullscreen views. */
body.op-turntest-ready .magazine-shell .tabs{
  display:flex!important;
  visibility:visible!important;
  opacity:1!important;
  pointer-events:auto!important;
  z-index:140!important;
}
body.op-turntest-ready .magazine-shell .tabs.left{
  left:calc(-1 * var(--nc-v165-tab-visible-lip,70px))!important;
}
body.op-turntest-ready .magazine-shell .tabs.right{
  right:calc(-1 * var(--nc-v165-tab-visible-lip,70px))!important;
}
body.op-turntest-ready .magazine-shell .book-wrap{
  overflow:visible!important;
}


/* v12.10.191 - pixel-perfect Turn.js corner hover cleanup.
   When the mouse arms a page corner, Turn.js briefly exposes rectangular wrapper
   hit-boxes/fold layers. Clip only the exterior corners of physical pages so the
   visible magazine edge stays rounded while category tabs remain outside .book-wrap. */
body.op-turntest-ready #op-turn-integrated-book{
  border-radius:10px!important;
  isolation:isolate!important;
}
body.op-turntest-ready #op-turn-integrated-book .turn-page-wrapper.op-turn-wrapper-left > .op-turn-sheet,
body.op-turntest-ready #op-turn-integrated-book .turn-page-wrapper.op-turn-wrapper-left > .op-turn-sheet > .page{
  border-top-left-radius:10px!important;
  border-bottom-left-radius:10px!important;
  border-top-right-radius:0!important;
  border-bottom-right-radius:0!important;
  overflow:hidden!important;
}
body.op-turntest-ready #op-turn-integrated-book .turn-page-wrapper.op-turn-wrapper-right > .op-turn-sheet,
body.op-turntest-ready #op-turn-integrated-book .turn-page-wrapper.op-turn-wrapper-right > .op-turn-sheet > .page{
  border-top-left-radius:0!important;
  border-bottom-left-radius:0!important;
  border-top-right-radius:10px!important;
  border-bottom-right-radius:10px!important;
  overflow:hidden!important;
}
body.op-turntest-ready #op-turn-integrated-book .turn-page-wrapper.op-turn-wrapper-padding{
  visibility:hidden!important;
  opacity:0!important;
  pointer-events:none!important;
}
body.op-turntest-turning #op-turn-integrated-book .turn-page-wrapper[style],
body.op-turntest-dragging #op-turn-integrated-book .turn-page-wrapper[style]{
  outline:0!important;
  border:0!important;
  box-shadow:none!important;
}
/* Soft paper-edge overlay masks any one-frame square corner that Turn.js inserts
   before it starts the actual curl. It is inside #op-turn-integrated-book, so it
   does not affect external category tabs. */
body.op-turntest-ready #op-turn-integrated-book::before,
body.op-turntest-ready #op-turn-integrated-book::after{
  content:""!important;
  position:absolute!important;
  top:0!important;
  bottom:0!important;
  width:12px!important;
  z-index:500!important;
  pointer-events:none!important;
  opacity:.98!important;
}
body.op-turntest-ready #op-turn-integrated-book::before{
  left:0!important;
  border-radius:10px 0 0 10px!important;
  background:linear-gradient(90deg,rgba(70,48,18,.34),rgba(245,222,157,.08),rgba(245,222,157,0))!important;
}
body.op-turntest-ready #op-turn-integrated-book::after{
  right:0!important;
  border-radius:0 10px 10px 0!important;
  background:linear-gradient(270deg,rgba(70,48,18,.34),rgba(245,222,157,.08),rgba(245,222,157,0))!important;
}


/* v12.10.202 - fallback must remain visible and navigable if Turn.js fails. */
body.op-turntest-failed .magazine-shell .book{
  display:block!important;
  visibility:visible!important;
  opacity:1!important;
  pointer-events:auto!important;
}
body.op-turntest-failed .op-turn-integrated-book,
body.op-turntest-failed .op-turn-integrated-spine{
  display:none!important;
  visibility:hidden!important;
  opacity:0!important;
  pointer-events:none!important;
}

/* v12.10.203 - ONLY transparency fix: the decorative center spine must not render above
   Turn.js temporary fold layers while a page is being dragged/turned. Keeping the spine
   visible made the paper look transparent because the spine was painted through the page. */
body.op-turntest-turning .op-turn-integrated-spine,
body.op-turntest-dragging .op-turn-integrated-spine{
  opacity:0!important;
  visibility:hidden!important;
  display:none!important;
}
body.op-turntest-turning #op-turn-integrated-book .op-turn-sheet,
body.op-turntest-turning #op-turn-integrated-book .op-turn-sheet>.page,
body.op-turntest-dragging #op-turn-integrated-book .op-turn-sheet,
body.op-turntest-dragging #op-turn-integrated-book .op-turn-sheet>.page{
  background-color:var(--paper,#e6cd91)!important;
}

/* v12.10.228 - Turn.js remains the desktop engine. Hide only stale non-view wrappers
   after refresh; active/current wrappers are left to Turn.js so the page curl still works. */
body.op-turntest-ready #op-turn-integrated-book .turn-page-wrapper.op-turn-wrapper-padding,
body.op-turntest-ready #op-turn-integrated-book .turn-page-wrapper[page="1"]{
  visibility:hidden!important;
  opacity:0!important;
  pointer-events:none!important;
}
body.op-turntest-ready:not(.op-turntest-turning):not(.op-turntest-dragging) #op-turn-integrated-book .turn-page-wrapper{
  background:transparent!important;
  outline:0!important;
  border:0!important;
}
body.op-turntest-ready #op-turn-integrated-book .turn-page-wrapper.op-turn-wrapper-right > .op-turn-sheet,
body.op-turntest-ready #op-turn-integrated-book .turn-page-wrapper.op-turn-wrapper-right > .op-turn-sheet > .page{
  border-top-right-radius:12px!important;
  border-bottom-right-radius:12px!important;
  overflow:hidden!important;
}
body.op-turntest-ready #op-turn-integrated-book .turn-page-wrapper.op-turn-wrapper-left > .op-turn-sheet,
body.op-turntest-ready #op-turn-integrated-book .turn-page-wrapper.op-turn-wrapper-left > .op-turn-sheet > .page{
  border-top-left-radius:12px!important;
  border-bottom-left-radius:12px!important;
  overflow:hidden!important;
}

/* v12.10.231 - hard boundary guards for Turn.js.
   These blockers sit only on the outer drag zones of the physical book. They stop
   first-page backward pulls and last-page forward pulls without disabling Turn.js
   for normal internal page turns. */
body.op-turntest-ready .magazine-shell .book-wrap > .op-turn-boundary-blocker{
  position:absolute!important;
  top:0!important;
  bottom:0!important;
  width:max(116px,16%)!important;
  z-index:900!important;
  background:transparent!important;
  pointer-events:auto!important;
  touch-action:none!important;
  -webkit-user-select:none!important;
  user-select:none!important;
}
body.op-turntest-ready .magazine-shell .book-wrap > .op-turn-boundary-blocker[hidden]{
  display:none!important;
  pointer-events:none!important;
}
body.op-turntest-ready .magazine-shell .book-wrap > .op-turn-boundary-blocker-left{left:0!important;cursor:default!important;}
body.op-turntest-ready .magazine-shell .book-wrap > .op-turn-boundary-blocker-right{right:0!important;cursor:default!important;}
body.op-turntest-ready .magazine-shell .book-wrap > .op-turn-boundary-blocker-left[hidden],
body.op-turntest-ready .magazine-shell .book-wrap > .op-turn-boundary-blocker-right[hidden]{
  display:none!important;
  pointer-events:none!important;
}

/* v12.10.233 endpoint guards: structural blank sheets are never visual content. */
#op-turn-integrated-book .op-turn-leading-blank,
#op-turn-integrated-book .op-turn-trailing-blank,
#op-turn-integrated-book .op-turn-padding-sheet { background: transparent !important; box-shadow: none !important; }
body.op-turntest-ready .magazine-shell .book-wrap > .op-turn-boundary-blocker.is-active { pointer-events: auto !important; }


/* v12.10.234 - boundary guards live outside the Turn.js page stack.
   They must never become Turn.js pages; they only cover the outer dead zones. */
body.op-turntest-ready .magazine-shell .book-wrap > .op-turn-boundary-blocker{
  position:absolute!important;
  top:0!important;
  bottom:0!important;
  width:max(116px,16%)!important;
  z-index:950!important;
  background:transparent!important;
  touch-action:none!important;
  -webkit-user-select:none!important;
  user-select:none!important;
}
body.op-turntest-ready .magazine-shell .book-wrap > .op-turn-boundary-blocker-left{left:0!important;cursor:default!important;}
body.op-turntest-ready .magazine-shell .book-wrap > .op-turn-boundary-blocker-right{right:0!important;cursor:default!important;}
body.op-turntest-ready .magazine-shell .book-wrap > .op-turn-boundary-blocker[hidden]{display:none!important;pointer-events:none!important;}
body.op-turntest-ready .magazine-shell .book-wrap > .op-turn-boundary-blocker.is-active{display:block!important;pointer-events:auto!important;}

/* v12.10.251 - cover the complete Turn.js corner activation zone at endpoints. */
body.op-turntest-ready .magazine-shell .book-wrap > .op-turn-boundary-blocker{
  width:max(180px,22%)!important;
}

/* Once a fold commits, the current Turn.js animation owns the whole book until
   `turned`. Prevent a second pointer stream from moving the old page underneath. */
body.op-turntest-turning #op-turn-integrated-book{
  pointer-events:none!important;
}


/* v12.10.237 - category sticky blanks: when a category has an odd page count,
   the facing blank page must be a real opaque paper sheet. Otherwise Turn.js can
   show the first page from the next category behind it during first load/refresh. */
body.op-turntest-mode #op-turn-integrated-book .nc-category-blank-page,
body.op-turntest-mode #op-turn-integrated-book .nc-category-blank-page > .page-safe-area,
.magazine-shell .nc-category-blank-page{
  background-color:var(--paper,#e6cd91)!important;
  opacity:1!important;
  visibility:visible!important;
}
body.op-turntest-mode #op-turn-integrated-book .nc-category-blank-page .empty-page-card{
  color:rgba(30,18,6,.42)!important;
}
body.op-turntest-mode #op-turn-integrated-book .nc-category-blank-page .page-title{
  opacity:.92!important;
}


/* v12.10.238 - source book must not bleed behind Turn.js after ready. */
body.op-turntest-ready .magazine-shell > .book,
body.op-turntest-ready .magazine-shell .book-wrap > .book{
  display:none!important;visibility:hidden!important;opacity:0!important;pointer-events:none!important;
}
body.op-turntest-ready #op-turn-integrated-book .nc-category-blank-page,
body.op-turntest-ready #op-turn-integrated-book .op-turn-client-blank,
body.op-turntest-ready #op-turn-integrated-book .nc-category-blank-page > .page-safe-area{
  background:radial-gradient(circle at 45% -8%,rgba(255,255,255,.52),transparent 42%),linear-gradient(90deg,var(--paper2,#fff0bd),var(--paper,#e6cd91) 12%,var(--paper,#e6cd91) 88%,var(--paper3,#c9a260))!important;
  opacity:1!important;visibility:visible!important;
}
body.op-turntest-ready .magazine-shell .tabs.left,
body.op-turntest-ready .magazine-shell .tabs.right{
  position:absolute!important;top:3.6%!important;bottom:3.6%!important;z-index:980!important;pointer-events:auto!important;
}
body.op-turntest-ready .magazine-shell .tabs.left{left:-31px!important;right:auto!important;}
body.op-turntest-ready .magazine-shell .tabs.right{right:-31px!important;left:auto!important;}
/* prevent inactive/full source spreads from intercepting or drawing while Turn.js is ready */
body.op-turntest-ready .magazine-shell .spread:not(.is-active){opacity:0!important;pointer-events:none!important;}


/* v12.10.239 - Turn.js large-view stability.
   The enlarged reader must not animate the book-wrap width while Turn.js is reading
   its dimensions. A CSS width transition during init/resize is enough to desync
   cloned fold wrappers, which is why large mode sometimes showed products from a
   different page until Turn.js stabilized. */
body.op-turntest-mode .magazine-shell .book-wrap,
body.op-turntest-ready .magazine-shell .book-wrap,
body.op-turntest-ready.op-reader-large:not(.op-catalog-fullscreen) .magazine-shell .book-wrap,
body.op-turntest-ready.op-catalog-fullscreen .magazine-shell .book-wrap,
body.op-turntest-mode.op-catalog-fullscreen.op-reader-large .magazine-shell .book-wrap{
  transition:none!important;
  animation:none!important;
  transform:none!important;
  will-change:auto!important;
}
body.op-turntest-ready #op-turn-integrated-book,
body.op-turntest-ready #op-turn-integrated-book .turn-page-wrapper,
body.op-turntest-ready #op-turn-integrated-book .op-turn-sheet,
body.op-turntest-ready #op-turn-integrated-book .page{
  backface-visibility:hidden!important;
  -webkit-backface-visibility:hidden!important;
  transform-style:flat!important;
}
body.op-turntest-ready #op-turn-integrated-book .turn-page-wrapper{
  contain:layout paint!important;
}
/* The source book must be completely inert while Turn.js is live, even during large
   mode rebuilds, so no inactive/category source page can flash under a fold. */
body.op-turntest-ready .magazine-shell .book,
body.op-turntest-ready .magazine-shell .book .spread,
body.op-turntest-ready .magazine-shell .book .page{
  visibility:hidden!important;
  opacity:0!important;
  pointer-events:none!important;
}


/* v12.10.240 critical: Turn.js must measure the exact final reader size.
   Earlier CSS enlarged .book-wrap only after op-turntest-ready, which means Turn.js
   initialized at normal size, then the large preset changed the wrapper width. That
   is the source of the one-frame wrong-page/fold glitches in the enlarged reader. */
@media (min-width:769px){
  body.op-turntest-mode.op-reader-large:not(.op-catalog-fullscreen) .magazine-shell .book-wrap,
  body.op-turntest-ready.op-reader-large:not(.op-catalog-fullscreen) .magazine-shell .book-wrap{
    width:min(calc(100vw - 96px),calc((100vh - 166px) * 1.72),1540px)!important;
    min-width:0!important;
    max-width:none!important;
    transform:none!important;
    transform-origin:center top!important;
    transition:none!important;
    animation:none!important;
    overflow:visible!important;
  }
  body.op-turntest-mode:not(.op-reader-large):not(.op-catalog-fullscreen) .magazine-shell .book-wrap,
  body.op-turntest-ready:not(.op-reader-large):not(.op-catalog-fullscreen) .magazine-shell .book-wrap{
    transform:none!important;
    transition:none!important;
    animation:none!important;
    overflow:visible!important;
  }
  body.op-turntest-mode.op-catalog-fullscreen:not(.op-reader-large) .magazine-shell .book-wrap,
  body.op-turntest-ready.op-catalog-fullscreen:not(.op-reader-large) .magazine-shell .book-wrap{
    width:min(calc(100vw - 320px),calc(172vh - 326.8px),1700px)!important;
    min-width:0!important;
    max-width:none!important;
    transform:none!important;
    transition:none!important;
    animation:none!important;
  }
  body.op-turntest-mode.op-catalog-fullscreen.op-reader-large .magazine-shell .book-wrap,
  body.op-turntest-ready.op-catalog-fullscreen.op-reader-large .magazine-shell .book-wrap{
    width:min(calc(100vw - 190px),calc(172vh - 172px),1900px)!important;
    min-width:0!important;
    max-width:none!important;
    transform:none!important;
    transition:none!important;
    animation:none!important;
  }
}
body.op-turntest-mode .magazine-shell .tabs,
body.op-turntest-ready .magazine-shell .tabs{
  transform:translateZ(0)!important;
  backface-visibility:hidden!important;
}
body.op-turntest-turning .magazine-shell .tabs,
body.op-turntest-dragging .magazine-shell .tabs{
  pointer-events:none!important;
}

/* v12.10.258 - keep Turn.js' real page stack intact while folding.
   The old safety underlay and forced beige wrapper backgrounds created a second,
   content-less rectangle. The page itself is opaque; every generated wrapper must
   remain transparent and must allow Turn.js' clipping tree to paint normally. */
body.op-turntest-ready #op-turn-integrated-book .turn-page-wrapper{
  contain:none!important;
  backface-visibility:visible!important;
  -webkit-backface-visibility:visible!important;
  transform-style:preserve-3d!important;
}
body.op-turntest-ready #op-turn-integrated-book .op-turn-sheet,
body.op-turntest-ready #op-turn-integrated-book .turn-page{
  background:transparent!important;
  backface-visibility:visible!important;
  -webkit-backface-visibility:visible!important;
  transform-style:preserve-3d!important;
}
body.op-turntest-ready #op-turn-integrated-book .op-turn-sheet > .page{
  backface-visibility:visible!important;
  -webkit-backface-visibility:visible!important;
  transform-style:preserve-3d!important;
}
body.op-turntest-dragging #op-turn-integrated-book::before,
body.op-turntest-dragging #op-turn-integrated-book::after,
body.op-turntest-turning #op-turn-integrated-book::before,
body.op-turntest-turning #op-turn-integrated-book::after{
  display:none!important;
}

/* v12.10.313 - Turn.js is again the sole page animation engine. Do not crop
   its native fold tree and never expose the retired cloned-page transition. */
body.op-turntest-ready #op-turn-integrated-book{
  overflow:visible!important;
  clip-path:none!important;
}
body.op-turntest-ready .op-turn-corner-cue,
body.op-turntest-ready .op-turn-controlled-transition{
  display:none!important;
}

/* v12.10.312 - interactive corner without detached-page artifacts.
   Turn.js is clipped to the measured book and is enabled only for the single
   programmatic page animation. This small paper cue follows the real pointer
   while the user lifts and pulls a corner. */
body.op-turntest-ready #op-turn-integrated-book{
  overflow:hidden!important;
  clip-path:inset(0 round 10px)!important;
}
body.op-turntest-ready #op-turn-integrated-book::before,
body.op-turntest-ready #op-turn-integrated-book::after{
  display:none!important;
}
body.op-turntest-ready .op-turn-corner-cue{
  --op-corner-size:34px;
  position:absolute!important;
  width:var(--op-corner-size)!important;
  height:var(--op-corner-size)!important;
  z-index:880!important;
  display:block!important;
  visibility:hidden!important;
  opacity:0!important;
  pointer-events:none!important;
  background:
    linear-gradient(135deg,rgba(255,251,229,.98) 0 32%,rgba(237,214,151,.98) 58%,rgba(126,88,30,.72) 100%)!important;
  filter:drop-shadow(0 5px 5px rgba(25,14,3,.34))!important;
  transition:width .11s ease-out,height .11s ease-out,opacity .12s ease-out,transform .16s ease-out!important;
  will-change:width,height,opacity,transform!important;
}
body.op-turntest-ready .op-turn-corner-cue.is-visible{
  visibility:visible!important;
  opacity:.96!important;
}
body.op-turntest-ready .op-turn-corner-cue.is-dragging{
  transition:opacity .08s linear!important;
}
body.op-turntest-ready .op-turn-corner-cue.is-right.is-top{
  top:0!important;
  right:0!important;
  clip-path:polygon(0 0,100% 0,100% 100%)!important;
  transform-origin:100% 0!important;
}
body.op-turntest-ready .op-turn-corner-cue.is-left.is-top{
  top:0!important;
  left:0!important;
  clip-path:polygon(0 0,100% 0,0 100%)!important;
  transform-origin:0 0!important;
  background:
    linear-gradient(225deg,rgba(255,251,229,.98) 0 32%,rgba(237,214,151,.98) 58%,rgba(126,88,30,.72) 100%)!important;
}
body.op-turntest-ready .op-turn-corner-cue.is-right.is-bottom{
  right:0!important;
  bottom:0!important;
  clip-path:polygon(100% 0,100% 100%,0 100%)!important;
  transform-origin:100% 100%!important;
  background:
    linear-gradient(45deg,rgba(255,251,229,.98) 0 32%,rgba(237,214,151,.98) 58%,rgba(126,88,30,.72) 100%)!important;
}
body.op-turntest-ready .op-turn-corner-cue.is-left.is-bottom{
  left:0!important;
  bottom:0!important;
  clip-path:polygon(0 0,100% 100%,0 100%)!important;
  transform-origin:0 100%!important;
  background:
    linear-gradient(315deg,rgba(255,251,229,.98) 0 32%,rgba(237,214,151,.98) 58%,rgba(126,88,30,.72) 100%)!important;
}
body.op-turntest-ready .op-turn-corner-cue.is-committing{
  opacity:0!important;
  transform:scale(.72)!important;
}
body.op-turntest-ready #op-turn-integrated-book.op-turn-corner-active .turn-page,
body.op-turntest-ready #op-turn-integrated-book.op-turn-programmatic-turn .turn-page{
  cursor:grab!important;
}
body.op-turntest-dragging #op-turn-integrated-book.op-turn-corner-active .turn-page{
  cursor:grabbing!important;
}

/* The controlled page-turn stage masks Turn.js' internal settle frame with one
   bounded 3D leaf. The old spread is visible at the start, the target spread is
   already underneath, and the stage is removed only after the leaf lands. */
body.op-turntest-ready .magazine-shell .book-wrap > .op-turn-controlled-transition{
  position:absolute!important;
  inset:0!important;
  z-index:870!important;
  overflow:hidden!important;
  border-radius:10px!important;
  perspective:1800px!important;
  pointer-events:auto!important;
  isolation:isolate!important;
}
body.op-turntest-ready .op-turn-controlled-transition *{
  pointer-events:none!important;
}
body.op-turntest-ready .op-turn-controlled-transition .op-turn-transition-stationary,
body.op-turntest-ready .op-turn-controlled-transition .op-turn-transition-leaf{
  position:absolute!important;
  top:0!important;
  width:50%!important;
  height:100%!important;
  margin:0!important;
}
body.op-turntest-ready .op-turn-controlled-transition.is-forward .op-turn-transition-stationary{
  left:0!important;
}
body.op-turntest-ready .op-turn-controlled-transition.is-backward .op-turn-transition-stationary{
  right:0!important;
}
body.op-turntest-ready .op-turn-controlled-transition .op-turn-transition-stationary{
  z-index:2!important;
  overflow:hidden!important;
}
body.op-turntest-ready .op-turn-controlled-transition .op-turn-transition-leaf{
  z-index:4!important;
  transform-style:preserve-3d!important;
  transition:transform .72s cubic-bezier(.45,0,.55,1)!important;
  will-change:transform!important;
}
body.op-turntest-ready .op-turn-controlled-transition.is-forward .op-turn-transition-leaf{
  left:50%!important;
  transform-origin:0 50%!important;
  transform:rotateY(0deg)!important;
}
body.op-turntest-ready .op-turn-controlled-transition.is-forward.is-running .op-turn-transition-leaf{
  transform:rotateY(-179.6deg)!important;
}
body.op-turntest-ready .op-turn-controlled-transition.is-backward .op-turn-transition-leaf{
  left:0!important;
  transform-origin:100% 50%!important;
  transform:rotateY(0deg)!important;
}
body.op-turntest-ready .op-turn-controlled-transition.is-backward.is-running .op-turn-transition-leaf{
  transform:rotateY(179.6deg)!important;
}
body.op-turntest-ready .op-turn-controlled-transition .op-turn-transition-face{
  position:absolute!important;
  inset:0!important;
  overflow:hidden!important;
  background:var(--paper,#e6cd91)!important;
  backface-visibility:hidden!important;
  -webkit-backface-visibility:hidden!important;
  transform-style:flat!important;
}
body.op-turntest-ready .op-turn-controlled-transition .op-turn-transition-face.is-front{
  transform:rotateY(0deg)!important;
  box-shadow:0 0 0 1px rgba(84,56,17,.18),-12px 0 22px rgba(31,18,3,.18)!important;
}
body.op-turntest-ready .op-turn-controlled-transition .op-turn-transition-face.is-back{
  transform:rotateY(180deg)!important;
  box-shadow:0 0 0 1px rgba(84,56,17,.18),12px 0 22px rgba(31,18,3,.22)!important;
}
body.op-turntest-ready .op-turn-controlled-transition .op-turn-transition-page{
  position:absolute!important;
  inset:0!important;
  display:block!important;
  width:100%!important;
  height:100%!important;
  min-height:0!important;
  margin:0!important;
  transform:none!important;
  box-sizing:border-box!important;
  overflow:hidden!important;
  opacity:1!important;
  visibility:visible!important;
  background:var(--paper,#e6cd91)!important;
}
body.op-turntest-ready .op-turn-controlled-transition .op-turn-transition-page .page-safe-area{
  height:100%!important;
  max-height:100%!important;
  overflow:hidden!important;
}
body.op-turntest-ready .op-turn-controlled-transition.is-forward .op-turn-transition-stationary .op-turn-transition-page{
  border-radius:10px 0 0 10px!important;
}
body.op-turntest-ready .op-turn-controlled-transition.is-backward .op-turn-transition-stationary .op-turn-transition-page{
  border-radius:0 10px 10px 0!important;
}
@media (prefers-reduced-motion:reduce){
  body.op-turntest-ready .op-turn-controlled-transition .op-turn-transition-leaf{
    transition-duration:.18s!important;
  }
}

/* v12.10.322 - the retired middle-edge hover buttons and their invisible click
   zones are removed. Only the compact controls and native corner folds remain. */

/* v12.10.313 final native-engine override. */
body.op-turntest-ready #op-turn-integrated-book{
  overflow:visible!important;
  clip-path:none!important;
}
body.op-turntest-ready .op-turn-corner-cue,
body.op-turntest-ready .op-turn-controlled-transition{
  display:none!important;
}
