Spaces:
Running
Running
| /* Final ticket clipping layer: the ticket shape is clipped, not painted over. */ | |
| .book-ticket, | |
| .share-ticket { | |
| overflow: hidden ; | |
| border: 0 ; | |
| border-radius: 0 ; | |
| background: transparent ; | |
| box-shadow: none ; | |
| filter: drop-shadow(0 20px 38px rgba(35, 51, 54, 0.16)); | |
| } | |
| .book-ticket::before, | |
| .book-ticket::after, | |
| .share-ticket::before, | |
| .share-ticket::after { | |
| content: none ; | |
| display: none ; | |
| width: 0 ; | |
| height: 0 ; | |
| background: none ; | |
| opacity: 0 ; | |
| visibility: hidden ; | |
| } | |
| @keyframes ticket-card-fade-in { | |
| from { | |
| opacity: 0; | |
| } | |
| to { | |
| opacity: 1; | |
| } | |
| } | |
| @keyframes book-ticket-shell-enter { | |
| 0% { | |
| opacity: 0; | |
| transform: | |
| translate3d( | |
| calc(var(--ticket-stack-x, 0px) - 10px), | |
| calc(var(--ticket-stack-motion-y, 0px) + var(--ticket-stack-lift, 0px) - 14px), | |
| 0 | |
| ) | |
| rotate(var(--ticket-stack-rotate, 0deg)) | |
| scale(0.985); | |
| } | |
| 58% { | |
| opacity: 1; | |
| } | |
| 100% { | |
| opacity: 1; | |
| transform: | |
| translate3d( | |
| var(--ticket-stack-x, 0px), | |
| calc(var(--ticket-stack-motion-y, 0px) + var(--ticket-stack-lift, 0px)), | |
| 0 | |
| ) | |
| rotate(var(--ticket-stack-rotate, 0deg)) | |
| scale(1); | |
| } | |
| } | |
| /* Share preview controls must float over the preview paper, not join the toolbar flow. */ | |
| .share-preview__close { | |
| position: absolute ; | |
| top: 0 ; | |
| right: 0 ; | |
| display: grid ; | |
| width: 34px ; | |
| height: 34px ; | |
| padding: 0 ; | |
| place-items: center ; | |
| pointer-events: auto ; | |
| border: 1px solid color-mix(in srgb, var(--accent) 28%, transparent) ; | |
| border-radius: 999px ; | |
| color: color-mix(in srgb, var(--ink) 68%, transparent) ; | |
| background: color-mix(in srgb, #fffaf0 72%, transparent) ; | |
| box-shadow: | |
| 0 8px 20px rgba(35, 45, 45, 0.1), | |
| inset 0 1px 0 rgba(255, 255, 255, 0.55) ; | |
| backdrop-filter: blur(14px) saturate(118%) ; | |
| -webkit-backdrop-filter: blur(14px) saturate(118%) ; | |
| } | |
| /* Experimental ticket typography: typewritten meta and action labels. */ | |
| @font-face { | |
| font-family: "TicketTypewriterLocal"; | |
| src: | |
| url("../public/fonts/lxgw-wenkai-mono-regular-subset.woff2") format("woff2"), | |
| local("LXGW WenKai Mono"), | |
| local("LXGWWenKaiMono-Regular"), | |
| local("American Typewriter"), | |
| local("AmericanTypewriter"), | |
| local("Courier"); | |
| font-display: swap; | |
| font-style: normal; | |
| font-weight: 400; | |
| } | |
| .book-ticket .book-card__title-original, | |
| .share-ticket .book-card__title-original { | |
| color: color-mix(in srgb, var(--ink) 68%, transparent) ; | |
| font-family: var(--font-latin) ; | |
| font-size: 10.8px ; | |
| font-style: italic ; | |
| font-weight: 400 ; | |
| line-height: 1.12 ; | |
| } | |
| .book-ticket .book-card__meta, | |
| .share-ticket .book-card__meta { | |
| color: color-mix(in srgb, var(--ink) 70%, transparent) ; | |
| font-family: "TicketTypewriterLocal", "LXGW WenKai Mono", "LXGW WenKai", "American Typewriter", "Courier New", "Kaiti SC", monospace ; | |
| font-size: 10.4px ; | |
| font-weight: 400 ; | |
| letter-spacing: 0 ; | |
| line-height: 1.3 ; | |
| } | |
| .book-ticket .book-card__shareline, | |
| .share-ticket .book-card__quote { | |
| color: color-mix(in srgb, var(--ink) 78%, transparent) ; | |
| font-family: "TicketTypewriterLocal", "LXGW WenKai Mono", "LXGW WenKai", "American Typewriter", "Kaiti SC", system-ui, sans-serif ; | |
| font-size: 11px ; | |
| font-weight: 620 ; | |
| letter-spacing: 0 ; | |
| line-height: 1.38 ; | |
| } | |
| .share-preview__canvas .share-ticket { | |
| filter: | |
| drop-shadow(0 30px 48px rgba(18, 28, 29, 0.26)) | |
| drop-shadow(0 10px 20px rgba(18, 28, 29, 0.16)) ; | |
| } | |
| /* Final book-ticket close: anchored to the top ticket itself. */ | |
| .book-card.is-ticket .book-ticket > .book-card__close--float { | |
| position: absolute ; | |
| top: 6px ; | |
| right: 6px ; | |
| z-index: 50 ; | |
| display: grid ; | |
| width: 38px ; | |
| height: 38px ; | |
| padding: 0 ; | |
| place-items: center ; | |
| border: 0 ; | |
| border-radius: 999px ; | |
| color: color-mix(in srgb, var(--accent) 76%, var(--ink) 24%) ; | |
| background: transparent ; | |
| box-shadow: none ; | |
| font-size: 0 ; | |
| opacity: 0 ; | |
| overflow: visible ; | |
| transform: translate(3px, -3px) ; | |
| transition: opacity 160ms ease, transform 160ms ease, color 160ms ease ; | |
| } | |
| .book-card.is-ticket .book-ticket > .book-card__close--float:hover, | |
| .book-card.is-ticket .book-ticket > .book-card__close--float:focus-visible { | |
| opacity: 0.94 ; | |
| transform: translate(0, 0) ; | |
| outline: none ; | |
| } | |
| .book-card.is-ticket .book-ticket > .book-card__close--float::before, | |
| .book-card.is-ticket .book-ticket > .book-card__close--float::after { | |
| position: absolute ; | |
| top: 50% ; | |
| left: 50% ; | |
| display: grid ; | |
| width: 28px ; | |
| height: 28px ; | |
| place-items: center ; | |
| box-sizing: border-box ; | |
| border: 1px solid color-mix(in srgb, var(--accent) 38%, transparent) ; | |
| border-radius: 999px ; | |
| background: rgba(255, 250, 240, 0.88) ; | |
| box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.58) ; | |
| color: currentColor ; | |
| font-family: "PingFang SC", "Hiragino Sans GB", system-ui, sans-serif ; | |
| line-height: 1 ; | |
| text-align: center ; | |
| transform: translate(-50%, -50%) ; | |
| transition: opacity 160ms ease ; | |
| } | |
| .book-card.is-ticket .book-ticket > .book-card__close--float::before { | |
| content: "×" ; | |
| opacity: 1 ; | |
| font-size: 15px ; | |
| font-weight: 360 ; | |
| } | |
| .book-card.is-ticket .book-ticket > .book-card__close--float::after { | |
| content: "Esc" ; | |
| opacity: 0 ; | |
| font-size: 8px ; | |
| font-weight: 760 ; | |
| letter-spacing: 0.01em ; | |
| transition-delay: 420ms ; | |
| } | |
| .book-card.is-ticket .book-ticket > .book-card__close--float:hover::before, | |
| .book-card.is-ticket .book-ticket > .book-card__close--float:focus-visible::before { | |
| opacity: 0 ; | |
| transition-delay: 420ms ; | |
| } | |
| .book-card.is-ticket .book-ticket > .book-card__close--float:hover::after, | |
| .book-card.is-ticket .book-ticket > .book-card__close--float:focus-visible::after { | |
| opacity: 1 ; | |
| } | |
| .book-ticket__cover, | |
| .share-ticket__cover, | |
| .book-ticket__body, | |
| .share-ticket__body { | |
| border: 0 ; | |
| border-radius: 0 ; | |
| clip-path: none ; | |
| -webkit-clip-path: none ; | |
| } | |
| .book-ticket__cover img, | |
| .share-ticket__cover img { | |
| display: block ; | |
| width: 100% ; | |
| height: auto ; | |
| max-height: none ; | |
| object-fit: contain ; | |
| object-position: center top ; | |
| } | |
| .book-ticket__body, | |
| .share-ticket__body { | |
| padding-bottom: var(--ticket-body-bottom-padding, 9px) ; | |
| background: | |
| linear-gradient(180deg, #fffaf0, #fff6e7), | |
| url("../public/textures/land-paper-tile.png") ; | |
| background-size: auto, 360px 360px ; | |
| } | |
| .book-ticket .book-card__shareline, | |
| .share-ticket .book-card__quote { | |
| display: block ; | |
| overflow: hidden ; | |
| max-height: calc(var(--ticket-intro-lines, 3) * 1.34em) ; | |
| -webkit-box-orient: initial ; | |
| -webkit-line-clamp: initial ; | |
| } | |
| .book-ticket .book-card__ticket-actions, | |
| .share-ticket .book-card__ticket-actions { | |
| margin-bottom: var(--ticket-action-bottom-gap, 24px) ; | |
| padding-bottom: 0 ; | |
| background: transparent ; | |
| background-image: none ; | |
| box-shadow: none ; | |
| backdrop-filter: none ; | |
| -webkit-backdrop-filter: none ; | |
| } | |
| .book-ticket .book-card__action, | |
| .share-ticket .book-card__action { | |
| height: 36px ; | |
| background: transparent ; | |
| background-image: none ; | |
| box-shadow: none ; | |
| border: 0 ; | |
| } | |
| .book-ticket .book-card__action-label, | |
| .share-ticket .book-card__action-label { | |
| line-height: 1.05 ; | |
| } | |
| .book-ticket .book-card__action:hover, | |
| .book-ticket .book-card__action:focus, | |
| .share-ticket .book-card__action:hover, | |
| .share-ticket .book-card__action:focus { | |
| background: transparent ; | |
| background-image: none ; | |
| box-shadow: none ; | |
| } | |
| .book-card.is-ticket { | |
| width: min(var(--book-stack-width, 222px), calc(100vw - 36px)) ; | |
| transform: translate(-8px, -14px); | |
| filter: drop-shadow(0 22px 34px rgba(31, 47, 48, 0.13)); | |
| animation: ticket-card-fade-in 180ms ease-out ; | |
| } | |
| .book-card.has-book-stack { | |
| width: min(var(--book-stack-width, 222px), calc(100vw - 36px)) ; | |
| } | |
| .book-card.has-book-stack .book-card__ticket-view { | |
| display: flex; | |
| align-items: flex-end; | |
| width: max-content; | |
| max-width: calc(100vw - 36px); | |
| padding: 18px 14px 26px; | |
| perspective: 900px; | |
| } | |
| .book-card.has-book-stack .book-card__close--float { | |
| right: 4px; | |
| top: 0; | |
| } | |
| .book-card.has-book-stack .book-ticket { | |
| position: relative; | |
| z-index: var(--ticket-stack-z, 1); | |
| flex: 0 0 auto; | |
| margin-left: var(--ticket-stack-overlap, 0); | |
| cursor: pointer; | |
| transform: translateY(var(--ticket-stack-lift, 0)) rotate(var(--ticket-stack-rotate, 0deg)); | |
| transition: | |
| transform 260ms cubic-bezier(0.2, 0.9, 0.2, 1), | |
| filter 260ms ease, | |
| opacity 180ms ease; | |
| } | |
| .book-card.is-ticket .book-ticket { | |
| animation: ticket-card-fade-in 180ms ease-out ; | |
| } | |
| .book-card.has-book-stack .book-ticket:not(.is-selected) { | |
| opacity: 1; | |
| filter: drop-shadow(0 12px 22px rgba(31, 47, 48, 0.12)); | |
| } | |
| .book-card.has-book-stack .book-ticket.is-selected { | |
| opacity: 1; | |
| filter: | |
| drop-shadow(0 22px 38px rgba(31, 47, 48, 0.2)) | |
| drop-shadow(0 4px 10px rgba(243, 128, 108, 0.13)); | |
| } | |
| .book-card.has-book-stack .book-ticket:hover, | |
| .book-card.has-book-stack .book-ticket:focus-visible { | |
| outline: none; | |
| transform: translateY(calc(var(--ticket-stack-lift, 0px) - 8px)) rotate(var(--ticket-stack-rotate, 0deg)); | |
| } | |
| /* Current interaction pass: global-view cards need restrained hierarchy and stable stacked motion. */ | |
| .book-ticket, | |
| .share-ticket { | |
| filter: drop-shadow(0 20px 34px rgba(35, 51, 54, 0.15)); | |
| } | |
| .book-ticket__body, | |
| .share-ticket__body { | |
| padding: 12px 15px 9px ; | |
| } | |
| .book-ticket .book-card__location-zh, | |
| .share-ticket .book-card__location-zh { | |
| color: var(--accent) ; | |
| font-family: var(--font-ui) ; | |
| font-size: 11.1px ; | |
| font-weight: 780 ; | |
| line-height: 1.12 ; | |
| letter-spacing: 0.045em ; | |
| } | |
| .book-ticket .book-card__title-zh, | |
| .share-ticket .book-card__title-zh { | |
| margin-top: 6px ; | |
| color: var(--book-title) ; | |
| font-family: var(--font-zh-title) ; | |
| font-size: 20px ; | |
| font-weight: 560 ; | |
| line-height: 1.08 ; | |
| letter-spacing: 0.018em ; | |
| } | |
| .book-ticket .book-card__title-original, | |
| .share-ticket .book-card__title-original { | |
| margin-top: 3px ; | |
| color: color-mix(in srgb, var(--ink) 70%, transparent) ; | |
| font-family: var(--font-latin) ; | |
| font-size: 11.2px ; | |
| font-style: italic ; | |
| line-height: 1.16 ; | |
| } | |
| .book-ticket .book-card__meta, | |
| .share-ticket .book-card__meta { | |
| margin-top: 6px ; | |
| padding-top: 6px ; | |
| color: color-mix(in srgb, var(--ink) 66%, transparent) ; | |
| font-family: "PingFang SC", "Hiragino Sans GB", "Noto Sans CJK SC", system-ui, sans-serif ; | |
| font-size: 10px ; | |
| font-weight: 560 ; | |
| line-height: 1.24 ; | |
| border-top-width: 1px ; | |
| } | |
| .book-ticket .book-card__shareline, | |
| .share-ticket .book-card__quote { | |
| display: block ; | |
| overflow: hidden ; | |
| max-height: calc(3 * 1.42em) ; | |
| margin-top: 6px ; | |
| color: color-mix(in srgb, var(--ink) 74%, transparent) ; | |
| font-family: "PingFang SC", "Hiragino Sans GB", "Noto Sans CJK SC", system-ui, sans-serif ; | |
| font-size: 10.7px ; | |
| font-weight: 520 ; | |
| line-height: 1.42 ; | |
| letter-spacing: 0 ; | |
| white-space: normal ; | |
| -webkit-box-orient: initial ; | |
| -webkit-line-clamp: initial ; | |
| } | |
| .book-ticket .book-card__ticket-actions, | |
| .share-ticket .book-card__ticket-actions { | |
| margin-top: 7px ; | |
| margin-bottom: var(--ticket-action-bottom-gap, 16px) ; | |
| padding-top: 6px ; | |
| border-top-width: 1px ; | |
| } | |
| .book-ticket .book-card__action, | |
| .share-ticket .book-card__action { | |
| height: 29px ; | |
| gap: 1px ; | |
| color: color-mix(in srgb, var(--ink) 70%, transparent) ; | |
| font-family: "PingFang SC", "Hiragino Sans GB", "Noto Sans CJK SC", system-ui, sans-serif ; | |
| font-size: 9.6px ; | |
| font-weight: 650 ; | |
| } | |
| .book-ticket .book-card__action-icon, | |
| .share-ticket .book-card__action-icon { | |
| width: 15px ; | |
| height: 15px ; | |
| stroke-width: 2 ; | |
| } | |
| .book-ticket .book-card__action + .book-card__action::before, | |
| .share-ticket .book-card__action + .book-card__action::before { | |
| top: 5px ; | |
| bottom: 5px ; | |
| background: color-mix(in srgb, var(--ink) 15%, transparent) ; | |
| } | |
| .book-card__close, | |
| .share-preview__close { | |
| position: relative ; | |
| overflow: hidden ; | |
| border-radius: 999px ; | |
| font-size: 0 ; | |
| } | |
| .book-card__close::before, | |
| .share-preview__close::before { | |
| content: "×"; | |
| font-size: 18px; | |
| line-height: 1; | |
| transition: opacity 160ms ease; | |
| } | |
| .book-card__close::after, | |
| .share-preview__close::after { | |
| content: "Esc"; | |
| position: absolute; | |
| inset: 0; | |
| display: grid; | |
| place-items: center; | |
| opacity: 0; | |
| color: currentColor; | |
| font-family: "PingFang SC", "Hiragino Sans GB", system-ui, sans-serif; | |
| font-size: 8px; | |
| font-weight: 760; | |
| letter-spacing: 0.02em; | |
| transition: opacity 160ms ease 420ms; | |
| } | |
| .book-card__close:hover::before, | |
| .book-card__close:focus-visible::before, | |
| .share-preview__close:hover::before, | |
| .share-preview__close:focus-visible::before { | |
| opacity: 0; | |
| transition-delay: 420ms; | |
| } | |
| .book-card__close:hover::after, | |
| .book-card__close:focus-visible::after, | |
| .share-preview__close:hover::after, | |
| .share-preview__close:focus-visible::after { | |
| opacity: 1; | |
| } | |
| .book-card__close--float { | |
| top: 8px ; | |
| right: 8px ; | |
| width: 27px ; | |
| height: 27px ; | |
| border-color: color-mix(in srgb, var(--ink) 16%, transparent) ; | |
| background: | |
| linear-gradient(135deg, color-mix(in srgb, var(--glass) 82%, transparent), color-mix(in srgb, var(--bg-0) 58%, transparent)) ; | |
| box-shadow: | |
| 0 7px 18px rgba(65, 82, 85, 0.08), | |
| inset 0 1px 0 rgba(255, 255, 255, 0.52) ; | |
| } | |
| .book-card.has-book-stack .book-card__ticket-view { | |
| align-items: flex-end ; | |
| padding: 10px 10px 20px ; | |
| perspective: none ; | |
| } | |
| .book-card.has-book-stack .book-ticket { | |
| transform: translateY(var(--ticket-stack-lift, 0)) ; | |
| transition: | |
| margin-left 220ms ease, | |
| transform 220ms cubic-bezier(0.2, 0.9, 0.2, 1), | |
| filter 220ms ease, | |
| opacity 160ms ease ; | |
| } | |
| .book-card.has-book-stack .book-ticket.is-selected { | |
| filter: | |
| drop-shadow(0 22px 38px rgba(31, 47, 48, 0.18)) | |
| drop-shadow(0 4px 10px rgba(243, 128, 108, 0.12)) ; | |
| } | |
| .book-card.has-book-stack .book-ticket:hover, | |
| .book-card.has-book-stack .book-ticket:focus-visible { | |
| transform: translateY(calc(var(--ticket-stack-lift, 0px) - 3px)) ; | |
| } | |
| /* Layer separation pass: use paper gradients instead of heavy shadow for stacked tickets. */ | |
| .book-card.is-ticket, | |
| .book-ticket, | |
| .share-ticket, | |
| .book-card.has-book-stack .book-ticket, | |
| .book-card.has-book-stack .book-ticket:not(.is-selected), | |
| .book-card.has-book-stack .book-ticket.is-selected { | |
| filter: none ; | |
| box-shadow: none ; | |
| } | |
| .book-card.is-ticket { | |
| background: | |
| radial-gradient(ellipse at 52% 50%, rgba(255, 252, 244, 0.2), rgba(255, 252, 244, 0) 68%) ; | |
| } | |
| .book-card.is-ticket .book-card__ticket-view { | |
| isolation: isolate; | |
| } | |
| .book-card.is-ticket .book-card__ticket-view::before { | |
| content: ""; | |
| position: absolute; | |
| inset: -10px -9px -13px; | |
| z-index: -1; | |
| pointer-events: none; | |
| background: | |
| radial-gradient( | |
| ellipse at 50% 52%, | |
| rgba(255, 250, 236, 0.58) 0%, | |
| rgba(255, 250, 236, 0.28) 43%, | |
| rgba(255, 250, 236, 0) 74% | |
| ); | |
| } | |
| .book-ticket, | |
| .share-ticket { | |
| background: | |
| linear-gradient( | |
| 90deg, | |
| rgba(255, 255, 255, 0.48), | |
| rgba(255, 251, 242, 0.12) 38%, | |
| rgba(46, 72, 74, var(--ticket-layer-edge-alpha, 0.1)) | |
| ) ; | |
| } | |
| .book-ticket__cover, | |
| .share-ticket__cover { | |
| background: | |
| linear-gradient( | |
| 90deg, | |
| rgba(255, 255, 255, 0.18), | |
| rgba(255, 255, 255, 0) 34%, | |
| rgba(31, 53, 55, var(--ticket-layer-edge-alpha, 0.08)) | |
| ) ; | |
| } | |
| .book-ticket__cover img, | |
| .share-ticket__cover img { | |
| mix-blend-mode: normal; | |
| } | |
| .book-ticket__body, | |
| .share-ticket__body { | |
| background: | |
| linear-gradient( | |
| 115deg, | |
| color-mix(in srgb, #fffdf6 92%, var(--accent) var(--ticket-layer-warmth, 5%)) 0%, | |
| rgba(255, 250, 239, 0.99) 48%, | |
| color-mix(in srgb, #f5fbf8 92%, #9bb9b2 var(--ticket-layer-coolness, 0%)) 100% | |
| ), | |
| linear-gradient( | |
| 90deg, | |
| rgba(255, 255, 255, 0.62), | |
| rgba(255, 255, 255, 0) 24%, | |
| rgba(57, 82, 82, var(--ticket-layer-edge-alpha, 0.08)) 100% | |
| ), | |
| url("../public/textures/land-paper-tile.png") ; | |
| background-size: auto, auto, 360px 360px ; | |
| } | |
| .book-card.has-book-stack .book-card__ticket-view { | |
| padding: 14px 16px 26px ; | |
| } | |
| .book-card.has-book-stack .book-ticket + .book-ticket { | |
| margin-left: calc(var(--ticket-stack-overlap, -188px) + 4px) ; | |
| } | |
| /* Physical stack motion: keep the cards upright and let them visibly trade places. */ | |
| .book-card.has-book-stack .book-card__ticket-view.is-prepping-stack-motion .book-ticket { | |
| transition: none ; | |
| } | |
| .book-card.has-book-stack .book-ticket { | |
| transform: | |
| translate3d( | |
| var(--ticket-stack-x, 0px), | |
| calc(var(--ticket-stack-motion-y, 0px) + var(--ticket-stack-lift, 0px)), | |
| 0 | |
| ) ; | |
| transition: | |
| margin-left 560ms cubic-bezier(0.2, 0.86, 0.18, 1), | |
| transform 560ms cubic-bezier(0.18, 0.92, 0.2, 1), | |
| filter 420ms ease, | |
| opacity 220ms ease ; | |
| } | |
| .book-card.has-book-stack .book-ticket:hover, | |
| .book-card.has-book-stack .book-ticket:focus-visible { | |
| will-change: transform; | |
| transform: | |
| translate3d( | |
| var(--ticket-stack-x, 0px), | |
| calc(var(--ticket-stack-motion-y, 0px) + var(--ticket-stack-lift, 0px) - 2px), | |
| 0 | |
| ) ; | |
| } | |
| .book-card.has-book-stack .book-ticket.is-moving-stack { | |
| pointer-events: none; | |
| will-change: transform; | |
| } | |
| .book-card.has-book-stack .book-card__ticket-view.is-prepping-stack-motion .book-ticket { | |
| will-change: transform; | |
| } | |
| /* Long meta line: keep short entries on one line, split long entries into author/details lines. */ | |
| .book-ticket .book-card__meta, | |
| .share-ticket .book-card__meta { | |
| overflow: visible ; | |
| text-overflow: clip ; | |
| white-space: nowrap ; | |
| transform: none ; | |
| } | |
| .book-ticket .book-card__meta.is-meta-split, | |
| .share-ticket .book-card__meta.is-meta-split { | |
| display: block ; | |
| overflow: hidden ; | |
| white-space: normal ; | |
| line-height: 1.22 ; | |
| } | |
| .book-card__meta-authors, | |
| .book-card__meta-details { | |
| display: block; | |
| overflow-wrap: anywhere; | |
| word-break: normal; | |
| } | |
| .book-card__meta-authors { | |
| width: max-content; | |
| max-width: none; | |
| overflow: visible ; | |
| overflow-wrap: normal ; | |
| text-overflow: clip ; | |
| word-break: keep-all ; | |
| white-space: nowrap ; | |
| transform: scaleX(var(--book-meta-author-scale, 1)); | |
| transform-origin: left center; | |
| } | |
| .book-card__meta-details { | |
| margin-top: 2px; | |
| } | |
| /* Ticket close control floats above the ticket, matching the detail-card close logic. */ | |
| .book-card.is-ticket .book-card__ticket-view > .book-card__close--float { | |
| position: absolute ; | |
| top: 2px ; | |
| right: 2px ; | |
| z-index: 30 ; | |
| display: grid ; | |
| width: 38px ; | |
| height: 38px ; | |
| padding: 0 ; | |
| place-items: center ; | |
| border: 0 ; | |
| border-radius: 999px ; | |
| color: color-mix(in srgb, var(--ink) 58%, transparent) ; | |
| background: transparent ; | |
| box-shadow: none ; | |
| font-size: 0 ; | |
| opacity: 0 ; | |
| overflow: visible ; | |
| transform: translateY(-3px) ; | |
| transition: opacity 160ms ease, transform 160ms ease, color 160ms ease ; | |
| } | |
| .book-card.is-ticket .book-card__ticket-view > .book-card__close--float:hover, | |
| .book-card.is-ticket .book-card__ticket-view > .book-card__close--float:focus-visible { | |
| opacity: 0.76 ; | |
| transform: translateY(0) ; | |
| } | |
| .book-card.is-ticket .book-card__ticket-view > .book-card__close--float::before, | |
| .book-card.is-ticket .book-card__ticket-view > .book-card__close--float::after { | |
| position: absolute ; | |
| top: 50% ; | |
| left: 50% ; | |
| display: grid ; | |
| width: 22px ; | |
| height: 22px ; | |
| place-items: center ; | |
| box-sizing: border-box ; | |
| border: 1px solid color-mix(in srgb, var(--accent) 30%, transparent) ; | |
| border-radius: 999px ; | |
| background: color-mix(in srgb, #fffaf0 78%, transparent) ; | |
| box-shadow: 0 5px 12px rgba(50, 58, 54, 0.06), inset 0 1px 0 rgba(255, 255, 255, 0.55) ; | |
| color: currentColor ; | |
| font-family: "PingFang SC", "Hiragino Sans GB", system-ui, sans-serif ; | |
| line-height: 1 ; | |
| text-align: center ; | |
| transform: translate(-50%, -50%) ; | |
| transition: opacity 160ms ease ; | |
| } | |
| .book-card.is-ticket .book-card__ticket-view > .book-card__close--float::before { | |
| content: "×" ; | |
| opacity: 1 ; | |
| font-size: 13px ; | |
| font-weight: 360 ; | |
| } | |
| .book-card.is-ticket .book-card__ticket-view > .book-card__close--float::after { | |
| content: "Esc" ; | |
| opacity: 0 ; | |
| font-size: 7px ; | |
| font-weight: 760 ; | |
| letter-spacing: 0.01em ; | |
| transition-delay: 420ms ; | |
| } | |
| .book-card.is-ticket .book-card__ticket-view > .book-card__close--float:hover::before, | |
| .book-card.is-ticket .book-card__ticket-view > .book-card__close--float:focus-visible::before { | |
| opacity: 0 ; | |
| transition-delay: 420ms ; | |
| } | |
| .book-card.is-ticket .book-card__ticket-view > .book-card__close--float:hover::after, | |
| .book-card.is-ticket .book-card__ticket-view > .book-card__close--float:focus-visible::after { | |
| opacity: 1 ; | |
| } | |
| .book-card.is-ticket .book-card__ticket-view > .book-card__close--float:hover, | |
| .book-card.is-ticket .book-card__ticket-view > .book-card__close--float:focus-visible { | |
| color: var(--accent) ; | |
| outline: none ; | |
| } | |
| .book-ticket__body, | |
| .share-ticket__body { | |
| padding-top: 15px ; | |
| } | |
| .book-ticket .book-card__meta, | |
| .share-ticket .book-card__meta { | |
| margin-top: 8px ; | |
| padding-top: 7px ; | |
| } | |
| .book-ticket .book-card__shareline, | |
| .share-ticket .book-card__quote { | |
| margin-top: 9px ; | |
| padding-top: 1px ; | |
| line-height: 1.5 ; | |
| max-height: calc(3 * 1.5em) ; | |
| } | |
| .book-ticket .book-card__ticket-actions, | |
| .share-ticket .book-card__ticket-actions { | |
| margin-top: 11px ; | |
| padding-top: 8px ; | |
| } | |
| /* Floating depth pass: avoid rectangular glow blocks and separate stacked paper layers. */ | |
| .book-card.is-ticket .book-card__ticket-view { | |
| overflow: visible ; | |
| } | |
| .book-card.is-ticket .book-card__ticket-view::before { | |
| inset: -22px -26px -12px ; | |
| opacity: 0.95 ; | |
| background: | |
| radial-gradient( | |
| ellipse at 48% 44%, | |
| rgba(255, 250, 232, 0.74) 0%, | |
| rgba(255, 250, 232, 0.38) 40%, | |
| rgba(255, 250, 232, 0) 76% | |
| ), | |
| radial-gradient( | |
| ellipse at 50% 88%, | |
| rgba(83, 117, 115, 0.18) 0%, | |
| rgba(83, 117, 115, 0.08) 36%, | |
| rgba(83, 117, 115, 0) 68% | |
| ) ; | |
| filter: blur(7px); | |
| -webkit-mask-image: radial-gradient(ellipse at 50% 52%, #000 0 56%, rgba(0, 0, 0, 0.72) 64%, transparent 82%); | |
| mask-image: radial-gradient(ellipse at 50% 52%, #000 0 56%, rgba(0, 0, 0, 0.72) 64%, transparent 82%); | |
| } | |
| .book-ticket, | |
| .share-ticket { | |
| isolation: isolate; | |
| filter: | |
| drop-shadow( | |
| var(--ticket-cast-x, 8px) | |
| var(--ticket-cast-y, 16px) | |
| 20px | |
| rgba(45, 48, 43, var(--ticket-cast-alpha, 0.12)) | |
| ) ; | |
| } | |
| .book-ticket__cover, | |
| .share-ticket__cover, | |
| .book-ticket__body, | |
| .share-ticket__body { | |
| position: relative ; | |
| } | |
| .book-card.has-book-stack .book-ticket:not(.is-selected) .book-ticket__cover::before, | |
| .book-card.has-book-stack .book-ticket:not(.is-selected) .book-ticket__body::before { | |
| content: none ; | |
| display: none ; | |
| } | |
| .book-ticket .book-card__ticket-actions, | |
| .share-ticket .book-card__ticket-actions { | |
| margin-bottom: var(--ticket-action-bottom-gap, 12px) ; | |
| } | |
| /* Remove the extra underlay: the clipped white ticket itself is the only body. */ | |
| .book-card.is-ticket .book-card__ticket-view::before { | |
| content: none ; | |
| display: none ; | |
| background: none ; | |
| filter: none ; | |
| } | |
| .book-card.is-ticket { | |
| background: transparent ; | |
| filter: none ; | |
| } | |
| .book-card.has-book-stack .book-ticket, | |
| .book-ticket, | |
| .share-ticket { | |
| filter: | |
| drop-shadow( | |
| var(--ticket-cast-x, 8px) | |
| var(--ticket-cast-y, 16px) | |
| 20px | |
| rgba(45, 48, 43, var(--ticket-cast-alpha, 0.12)) | |
| ) | |
| drop-shadow( | |
| 2px | |
| 3px | |
| 5px | |
| rgba(45, 48, 43, 0.08) | |
| ) ; | |
| } | |
| .book-card.has-book-stack .book-ticket:not(.is-selected) { | |
| filter: | |
| drop-shadow( | |
| var(--ticket-cast-x, 6px) | |
| var(--ticket-cast-y, 12px) | |
| 16px | |
| rgba(45, 48, 43, var(--ticket-cast-alpha, 0.1)) | |
| ) | |
| drop-shadow( | |
| 1px | |
| 2px | |
| 4px | |
| rgba(45, 48, 43, 0.06) | |
| ) ; | |
| } | |
| .book-card.has-book-stack .book-ticket.is-selected { | |
| filter: | |
| drop-shadow( | |
| var(--ticket-cast-x, 8px) | |
| var(--ticket-cast-y, 16px) | |
| 21px | |
| rgba(45, 48, 43, var(--ticket-cast-alpha, 0.13)) | |
| ) | |
| drop-shadow( | |
| 2px | |
| 3px | |
| 6px | |
| rgba(45, 48, 43, 0.08) | |
| ) ; | |
| } | |
| /* Paper ownership: the clipped ticket shell is the single paper surface. */ | |
| .book-ticket, | |
| .share-ticket, | |
| .book-card.has-book-stack .book-ticket { | |
| background: | |
| linear-gradient( | |
| 180deg, | |
| #fffdf6 0%, | |
| #fffaf0 52%, | |
| #fffaf0 100% | |
| ), | |
| url("../public/textures/land-paper-tile.png") ; | |
| background-size: auto, 360px 360px ; | |
| box-shadow: none ; | |
| } | |
| .book-card.is-detail .book-card__ticket-view, | |
| .book-card.is-detail.has-book-stack .book-card__ticket-view { | |
| display: none ; | |
| } | |
| .book-ticket__body, | |
| .share-ticket__body { | |
| background: transparent ; | |
| background-image: none ; | |
| } | |
| /* Final shared paper actions: ticket and detail use the same quiet icon language. */ | |
| .book-ticket, | |
| .share-ticket, | |
| .book-card.is-detail .book-card__detail-view { | |
| --book-action-rest: color-mix(in srgb, var(--book-paper-ink, var(--ink)) 58%, transparent); | |
| --book-action-hover: color-mix(in srgb, var(--accent) 82%, var(--book-paper-ink, var(--ink)) 18%); | |
| --book-action-divider: color-mix(in srgb, var(--book-paper-ink, var(--ink)) 16%, transparent); | |
| } | |
| .book-card.is-detail .book-card__detail-actions { | |
| display: grid ; | |
| grid-template-columns: 62px 54px ; | |
| justify-content: end ; | |
| align-items: center ; | |
| gap: 0 ; | |
| min-width: 116px ; | |
| margin-left: auto ; | |
| margin-right: -4px ; | |
| padding: 0 ; | |
| border: 0 ; | |
| background: transparent ; | |
| box-shadow: none ; | |
| } | |
| .book-ticket .book-card__action, | |
| .share-ticket .book-card__action, | |
| .book-card.is-detail .book-card__detail-actions .book-card__action { | |
| position: relative ; | |
| display: inline-grid ; | |
| grid-template-rows: 16px auto ; | |
| align-items: center ; | |
| justify-items: center ; | |
| gap: 2px ; | |
| min-width: 0 ; | |
| width: 100% ; | |
| height: 34px ; | |
| padding: 0 ; | |
| border: 0 ; | |
| border-radius: 0 ; | |
| color: var(--book-action-rest) ; | |
| background: transparent ; | |
| box-shadow: none ; | |
| outline: none ; | |
| transform: none ; | |
| transition: color 150ms ease, opacity 150ms ease ; | |
| } | |
| .book-ticket .book-card__action + .book-card__action::before, | |
| .share-ticket .book-card__action + .book-card__action::before, | |
| .book-card.is-detail .book-card__detail-actions .book-card__action + .book-card__action::before { | |
| content: "" ; | |
| position: absolute ; | |
| top: 5px ; | |
| bottom: 5px ; | |
| left: 0 ; | |
| width: 1px ; | |
| background: var(--book-action-divider) ; | |
| } | |
| .book-ticket .book-card__action-icon, | |
| .share-ticket .book-card__action-icon, | |
| .book-card.is-detail .book-card__detail-actions .book-card__action-icon { | |
| display: block ; | |
| width: 16px ; | |
| height: 16px ; | |
| fill: none ; | |
| stroke: currentColor ; | |
| stroke-width: 1.9 ; | |
| stroke-linecap: round ; | |
| stroke-linejoin: round ; | |
| } | |
| .book-ticket .book-card__action-label, | |
| .share-ticket .book-card__action-label, | |
| .book-card.is-detail .book-card__detail-actions .book-card__action-label { | |
| display: block ; | |
| font-size: 10px ; | |
| line-height: 1 ; | |
| white-space: nowrap ; | |
| } | |
| .book-ticket .book-card__action:hover, | |
| .book-ticket .book-card__action:focus-visible, | |
| .share-ticket .book-card__action:hover, | |
| .share-ticket .book-card__action:focus-visible, | |
| .book-card.is-detail .book-card__detail-actions .book-card__action:hover, | |
| .book-card.is-detail .book-card__detail-actions .book-card__action:focus-visible { | |
| color: var(--book-action-hover) ; | |
| background: transparent ; | |
| box-shadow: none ; | |
| } | |
| .book-ticket .book-card__action:active, | |
| .share-ticket .book-card__action:active, | |
| .book-card.is-detail .book-card__detail-actions .book-card__action:active { | |
| color: var(--accent) ; | |
| opacity: 0.72 ; | |
| } | |
| .book-ticket .book-card__save.is-saved, | |
| .share-ticket .book-card__save.is-saved, | |
| .book-card.is-detail .book-card__detail-actions .book-card__save.is-saved { | |
| color: var(--accent) ; | |
| background: transparent ; | |
| box-shadow: none ; | |
| } | |
| .book-ticket .book-card__save.is-saved .book-card__action-icon, | |
| .share-ticket .book-card__save.is-saved .book-card__action-icon, | |
| .book-card.is-detail .book-card__detail-actions .book-card__save.is-saved .book-card__action-icon { | |
| fill: color-mix(in srgb, var(--accent) 20%, transparent) ; | |
| stroke: currentColor ; | |
| } | |
| /* Final close control centering: circle and label are separate centered layers. */ | |
| .book-card.is-ticket .book-ticket > .book-card__close--float::before, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail::before, | |
| .share-preview__close::before { | |
| content: "" ; | |
| opacity: 1 ; | |
| font-size: 0 ; | |
| } | |
| .book-card.is-ticket .book-ticket > .book-card__close--float::after, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail::after, | |
| .share-preview__close::after { | |
| content: "×" ; | |
| display: grid ; | |
| width: 29px ; | |
| height: 29px ; | |
| place-items: center ; | |
| border: 0 ; | |
| background: transparent ; | |
| box-shadow: none ; | |
| opacity: 1 ; | |
| color: currentColor ; | |
| font-family: "Helvetica Neue", Arial, "PingFang SC", system-ui, sans-serif ; | |
| font-size: 17px ; | |
| font-weight: 300 ; | |
| line-height: 1 ; | |
| letter-spacing: 0 ; | |
| text-align: center ; | |
| transform: translate(-50%, -50%) ; | |
| transition: opacity 160ms ease ; | |
| } | |
| .book-card.is-ticket .book-ticket > .book-card__close--float:hover::before, | |
| .book-card.is-ticket .book-ticket > .book-card__close--float:focus-visible::before, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail:hover::before, | |
| .book-card.is-detail .book-card__close--detail:focus-visible::before, | |
| .share-preview__close:hover::before, | |
| .share-preview__close:focus-visible::before { | |
| opacity: 1 ; | |
| } | |
| .book-card.is-ticket .book-ticket > .book-card__close--float:hover::after, | |
| .book-card.is-ticket .book-ticket > .book-card__close--float:focus-visible::after, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail:hover::after, | |
| .book-card.is-detail .book-card__close--detail:focus-visible::after, | |
| .share-preview__close:hover::after, | |
| .share-preview__close:focus-visible::after { | |
| content: "Esc" ; | |
| font-size: 8px ; | |
| font-weight: 760 ; | |
| letter-spacing: 0.01em ; | |
| opacity: 1 ; | |
| } | |
| /* Final ticket reading rhythm: copying text should not reshuffle the paper. */ | |
| .book-ticket, | |
| .share-ticket, | |
| .book-card.is-detail .book-card__detail-view { | |
| -webkit-user-select: text ; | |
| user-select: text ; | |
| } | |
| .book-ticket button, | |
| .share-ticket button, | |
| .book-card.is-detail button, | |
| .book-ticket__cover, | |
| .share-ticket__cover, | |
| .book-card__detail-cover { | |
| -webkit-user-select: none ; | |
| user-select: none ; | |
| } | |
| .book-ticket, | |
| .share-ticket { | |
| --ticket-text-gap: 9px; | |
| } | |
| .book-ticket .book-card__meta, | |
| .share-ticket .book-card__meta { | |
| margin-top: var(--ticket-text-gap) ; | |
| padding-top: 7px ; | |
| } | |
| .book-ticket .book-card__shareline, | |
| .share-ticket .book-card__quote { | |
| margin-top: var(--ticket-text-gap) ; | |
| } | |
| .book-ticket .book-card__ticket-actions, | |
| .share-ticket .book-card__ticket-actions { | |
| margin-top: var(--ticket-text-gap) ; | |
| } | |
| .book-ticket .book-card__ticket-actions, | |
| .share-ticket .book-card__ticket-actions { | |
| margin-bottom: var(--ticket-action-bottom-gap, 6px) ; | |
| } | |
| /* Detail card refinement: library-card / postcard surface. */ | |
| .book-card.is-detail { | |
| width: auto ; | |
| max-width: min(calc(100vw - 44px), var(--tooltip-safe-width, calc(100vw - 44px))) ; | |
| } | |
| .book-card.is-detail .book-card__detail-view { | |
| --detail-cover-height: 420px; | |
| --detail-cover-width: 470px; | |
| --detail-cover-max-ratio: 1.12; | |
| --detail-wide-cover-threshold: 0.94; | |
| --detail-wide-cover-gap: 40px; | |
| --detail-wide-copy-min-width: clamp(286px, 24vw, 330px); | |
| --detail-wide-copy-width: clamp(320px, 27vw, 388px); | |
| --detail-cover-fit: contain; | |
| --detail-copy-min-width: clamp(300px, 26vw, 360px); | |
| --detail-copy-width: clamp(340px, 29vw, 424px); | |
| position: relative ; | |
| display: grid ; | |
| grid-template-columns: minmax(0, var(--detail-cover-width)) minmax(var(--detail-copy-min-width), var(--detail-copy-width)) ; | |
| gap: var(--detail-column-gap, 26px) ; | |
| width: max-content ; | |
| max-width: min(100%, var(--tooltip-safe-width, 100%)) ; | |
| padding: 24px 28px ; | |
| overflow: hidden ; | |
| border: 0 ; | |
| border-radius: 1px ; | |
| background: #fffaf0 ; | |
| background-image: none ; | |
| background-size: auto ; | |
| box-shadow: 0 18px 44px rgba(45, 48, 43, 0.16) ; | |
| backdrop-filter: none ; | |
| -webkit-backdrop-filter: none ; | |
| } | |
| .book-card.is-detail .book-card__detail-view::before { | |
| content: none ; | |
| display: none ; | |
| } | |
| .book-card.is-detail .book-card__detail-view.is-wide-detail-cover { | |
| --detail-column-gap: var(--detail-wide-cover-gap); | |
| --detail-copy-min-width: var(--detail-wide-copy-min-width); | |
| --detail-copy-width: var(--detail-wide-copy-width); | |
| } | |
| .book-card.is-detail .book-card__detail-cover { | |
| display: flex ; | |
| align-self: start ; | |
| justify-self: start ; | |
| width: var(--detail-cover-width) ; | |
| min-width: 0 ; | |
| height: var(--detail-cover-height) ; | |
| overflow: hidden ; | |
| padding: 0 ; | |
| border: 0 ; | |
| border-radius: 0 ; | |
| background: transparent ; | |
| box-shadow: none ; | |
| } | |
| .book-card.is-detail .book-card__detail-cover img { | |
| display: block ; | |
| width: 100% ; | |
| height: var(--detail-cover-height) ; | |
| max-width: none ; | |
| max-height: none ; | |
| object-fit: var(--detail-cover-fit, contain) ; | |
| object-position: center top ; | |
| filter: none ; | |
| } | |
| .book-card.is-detail .book-card__detail-body { | |
| position: relative ; | |
| z-index: 1 ; | |
| display: flex ; | |
| min-width: 0 ; | |
| min-height: 0 ; | |
| flex-direction: column ; | |
| padding-top: 0 ; | |
| } | |
| .book-card.is-detail .book-card__detail-top { | |
| display: block ; | |
| padding-top: 4px ; | |
| padding-right: 40px ; | |
| } | |
| .book-card.is-detail .book-card__location-zh { | |
| max-width: 100% ; | |
| color: var(--accent) ; | |
| font-family: var(--font-ui) ; | |
| font-size: 16px ; | |
| font-weight: 780 ; | |
| line-height: 1.12 ; | |
| letter-spacing: 0.015em ; | |
| } | |
| .book-card.is-detail .book-card__location-en { | |
| display: none ; | |
| } | |
| .book-card.is-detail .book-card__close { | |
| position: absolute ; | |
| top: 15px ; | |
| right: 16px ; | |
| z-index: 2 ; | |
| width: 34px ; | |
| height: 34px ; | |
| border: 1px solid color-mix(in srgb, var(--accent) 22%, transparent) ; | |
| border-radius: 999px ; | |
| color: color-mix(in srgb, var(--ink) 58%, transparent) ; | |
| background: #fffaf0 ; | |
| box-shadow: 0 8px 18px rgba(50, 58, 54, 0.1), inset 0 1px 0 rgba(255, 255, 255, 0.72) ; | |
| font-size: 0 ; | |
| opacity: 0 ; | |
| transform: translateY(-3px) ; | |
| transition: opacity 160ms ease, transform 160ms ease, color 160ms ease, border-color 160ms ease, background 160ms ease ; | |
| } | |
| .book-card.is-detail .book-card__detail-view:hover .book-card__close, | |
| .book-card.is-detail .book-card__close:focus-visible { | |
| opacity: 1 ; | |
| transform: translateY(0) ; | |
| } | |
| .book-card.is-detail .book-card__close::before { | |
| content: "×" ; | |
| opacity: 1 ; | |
| font-size: 17px ; | |
| font-weight: 360 ; | |
| line-height: 1 ; | |
| transition: none ; | |
| } | |
| .book-card.is-detail .book-card__close:hover, | |
| .book-card.is-detail .book-card__close:focus-visible { | |
| border-color: color-mix(in srgb, var(--accent) 45%, transparent) ; | |
| color: var(--accent) ; | |
| background: color-mix(in srgb, var(--accent) 12%, #fffaf0) ; | |
| outline: none ; | |
| } | |
| .book-card.is-detail .book-card__close::after { | |
| content: none ; | |
| display: none ; | |
| } | |
| .book-card.is-detail .book-card__title-zh { | |
| margin-top: 18px ; | |
| color: var(--book-title) ; | |
| font-size: clamp(27px, 2.4vw, 34px) ; | |
| line-height: 1.09 ; | |
| letter-spacing: 0.012em ; | |
| } | |
| .book-card.is-detail .book-card__title-main, | |
| .book-card.is-detail .book-card__title-sub { | |
| display: block ; | |
| } | |
| .book-card.is-detail .book-card__title-sub { | |
| margin-top: 5px ; | |
| } | |
| .book-card.is-detail .book-card__title-zh.is-title-subtitle .book-card__title-sub { | |
| max-width: 100% ; | |
| font-size: 0.62em ; | |
| font-weight: 520 ; | |
| line-height: 1.18 ; | |
| letter-spacing: 0.01em ; | |
| white-space: nowrap ; | |
| transform: scaleX(var(--detail-title-sub-scale, 1)) ; | |
| transform-origin: left center ; | |
| } | |
| .book-card.is-detail .book-card__title-zh.is-title-subtitle.is-title-long-subtitle .book-card__title-sub { | |
| font-size: 0.54em ; | |
| letter-spacing: 0 ; | |
| } | |
| .book-card.is-detail .book-card__title-zh.is-title-equal-split .book-card__title-sub { | |
| font-size: 0.82em ; | |
| line-height: 1.14 ; | |
| } | |
| .book-card.is-detail .book-card__title-original { | |
| margin-top: 8px ; | |
| color: color-mix(in srgb, var(--ink) 66%, transparent) ; | |
| font-family: var(--font-latin) ; | |
| font-size: 14.5px ; | |
| font-style: italic ; | |
| line-height: 1.18 ; | |
| } | |
| .book-card.is-detail .book-card__meta { | |
| margin-top: 18px ; | |
| padding-top: 14px ; | |
| border-top: 0 ; | |
| background-image: repeating-linear-gradient( | |
| to right, | |
| color-mix(in srgb, var(--ink) 20%, transparent) 0 1px, | |
| transparent 1px 4px | |
| ) ; | |
| background-repeat: no-repeat ; | |
| background-position: 1px 0 ; | |
| background-size: calc(100% - 1px) 1px ; | |
| color: color-mix(in srgb, var(--ink) 67%, transparent) ; | |
| font-family: "PingFang SC", "Hiragino Sans GB", "Noto Sans CJK SC", system-ui, sans-serif ; | |
| font-size: 12.5px ; | |
| font-weight: 400 ; | |
| line-height: 1.32 ; | |
| white-space: normal ; | |
| } | |
| .book-card.is-detail .book-card__intro { | |
| display: grid ; | |
| gap: 16px ; | |
| margin-top: 18px ; | |
| margin-bottom: 18px ; | |
| max-width: 100% ; | |
| color: color-mix(in srgb, var(--ink) 76%, transparent) ; | |
| font-family: "PingFang SC", "Hiragino Sans GB", "Noto Sans CJK SC", system-ui, sans-serif ; | |
| font-size: 14px ; | |
| font-weight: 400 ; | |
| line-height: 1.58 ; | |
| letter-spacing: 0 ; | |
| } | |
| .book-card.is-detail .book-card__intro p { | |
| margin: 0 ; | |
| } | |
| .book-card.is-detail .book-card__intro a { | |
| color: color-mix(in srgb, var(--ink) 84%, transparent) ; | |
| text-decoration: underline; | |
| text-decoration-thickness: 1px; | |
| text-underline-offset: 0.18em; | |
| } | |
| .book-card.is-detail .book-card__intro a:hover, | |
| .book-card.is-detail .book-card__intro a:focus-visible { | |
| color: var(--ink) ; | |
| } | |
| .book-card.is-detail .book-card__detail-footer { | |
| position: relative ; | |
| z-index: 1 ; | |
| display: flex ; | |
| align-items: center ; | |
| justify-content: space-between ; | |
| gap: 18px ; | |
| margin-top: 22px ; | |
| padding: 16px 0 0 ; | |
| border-top: 0 ; | |
| background-image: repeating-linear-gradient( | |
| to right, | |
| color-mix(in srgb, var(--ink) 16%, transparent) 0 1px, | |
| transparent 1px 4px | |
| ) ; | |
| background-repeat: no-repeat ; | |
| background-position: 1px 0 ; | |
| background-size: calc(100% - 1px) 1px ; | |
| } | |
| .book-card.is-detail .book-card__pager { | |
| display: flex ; | |
| align-items: center ; | |
| align-self: center ; | |
| gap: 9px ; | |
| height: 34px ; | |
| padding: 0 2px ; | |
| border: 0 ; | |
| border-radius: 0 ; | |
| background: transparent ; | |
| box-shadow: none ; | |
| } | |
| .book-card.is-detail .book-card__pager[hidden] { | |
| display: none ; | |
| } | |
| .book-card.is-detail .book-card__page { | |
| width: 18px ; | |
| height: 30px ; | |
| border: 0 ; | |
| border-radius: 999px ; | |
| color: color-mix(in srgb, var(--ink) 43%, transparent) ; | |
| background: transparent ; | |
| box-shadow: none ; | |
| backdrop-filter: none ; | |
| -webkit-backdrop-filter: none ; | |
| font-size: 15px ; | |
| } | |
| .book-card.is-detail .book-card__counter { | |
| min-width: 38px ; | |
| color: color-mix(in srgb, var(--ink) 43%, transparent) ; | |
| font-family: var(--font-ui) ; | |
| font-size: 11px ; | |
| font-weight: 720 ; | |
| letter-spacing: 0.05em ; | |
| } | |
| .book-card.is-detail .book-card__detail-actions { | |
| display: flex ; | |
| gap: 0 ; | |
| margin-left: auto ; | |
| margin-right: -8px ; | |
| padding: 0 ; | |
| border: 0 ; | |
| border-radius: 0 ; | |
| background: transparent ; | |
| box-shadow: none ; | |
| } | |
| .book-card.is-detail .book-card__detail-actions .book-card__action { | |
| position: relative ; | |
| display: grid ; | |
| grid-template-rows: 15px auto ; | |
| gap: 2px ; | |
| min-width: 56px ; | |
| height: 32px ; | |
| padding: 0 12px ; | |
| border: 0 ; | |
| border-radius: 0 ; | |
| color: color-mix(in srgb, var(--ink) 55%, transparent) ; | |
| background: transparent ; | |
| box-shadow: none ; | |
| backdrop-filter: none ; | |
| -webkit-backdrop-filter: none ; | |
| font-family: "PingFang SC", "Hiragino Sans GB", "Noto Sans CJK SC", system-ui, sans-serif ; | |
| font-size: 10px ; | |
| font-weight: 650 ; | |
| } | |
| .book-card.is-detail .book-card__detail-actions .book-card__action + .book-card__action::before { | |
| content: "" ; | |
| position: absolute ; | |
| top: 6px ; | |
| bottom: 6px ; | |
| left: 0 ; | |
| width: 1px ; | |
| background: color-mix(in srgb, var(--accent) 22%, transparent) ; | |
| } | |
| .book-card.is-detail .book-card__detail-actions .book-card__action-icon { | |
| width: 15px ; | |
| height: 15px ; | |
| justify-self: center ; | |
| fill: none ; | |
| stroke: currentColor ; | |
| stroke-width: 1.9 ; | |
| } | |
| .book-card.is-detail .book-card__detail-actions .book-card__save .book-card__action-icon { | |
| fill: transparent ; | |
| } | |
| .book-card.is-detail .book-card__detail-actions .book-card__action-label { | |
| display: block ; | |
| line-height: 1 ; | |
| } | |
| .book-card.is-detail .book-card__detail-actions .book-card__action:hover, | |
| .book-card.is-detail .book-card__detail-actions .book-card__action:focus-visible, | |
| .book-card.is-detail .book-card__page:hover, | |
| .book-card.is-detail .book-card__page:focus-visible { | |
| color: var(--accent) ; | |
| background: color-mix(in srgb, var(--accent) 10%, transparent) ; | |
| outline: none ; | |
| } | |
| .book-card.is-detail .book-card__detail-actions .book-card__save.is-saved { | |
| color: var(--accent) ; | |
| background: transparent ; | |
| box-shadow: none ; | |
| } | |
| .book-card.is-detail .book-card__detail-actions .book-card__save.is-saved .book-card__action-icon { | |
| fill: color-mix(in srgb, var(--accent) 18%, transparent) ; | |
| } | |
| @media (max-width: 720px) { | |
| .book-card.is-detail { | |
| width: min(430px, calc(100vw - 28px)) ; | |
| } | |
| .book-card.is-detail .book-card__detail-view { | |
| grid-template-columns: 1fr ; | |
| gap: 18px ; | |
| padding: 18px ; | |
| width: 100% ; | |
| --detail-cover-height: min(330px, 52vh); | |
| } | |
| .book-card.is-detail .book-card__detail-cover { | |
| width: min(220px, 72%) ; | |
| justify-self: center ; | |
| height: auto ; | |
| box-shadow: none ; | |
| } | |
| .book-card.is-detail .book-card__detail-cover img { | |
| width: 100% ; | |
| height: auto ; | |
| max-width: 100% ; | |
| } | |
| .book-card.is-detail .book-card__title-zh { | |
| margin-top: 16px ; | |
| font-size: 29px ; | |
| } | |
| .book-card.is-detail .book-card__title-zh.is-title-subtitle .book-card__title-sub { | |
| max-width: 100% ; | |
| font-size: 0.66em ; | |
| } | |
| .book-card.is-detail .book-card__detail-body { | |
| min-height: 0 ; | |
| } | |
| .book-card.is-detail .book-card__detail-footer { | |
| flex-wrap: wrap ; | |
| } | |
| } | |
| /* Kill legacy painted notch circles. The only ticket edge comes from clip-path. */ | |
| .book-ticket::before, | |
| .book-ticket::after, | |
| .share-ticket::before, | |
| .share-ticket::after { | |
| content: none ; | |
| display: none ; | |
| position: static ; | |
| inset: auto ; | |
| width: 0 ; | |
| height: 0 ; | |
| background: none ; | |
| background-image: none ; | |
| border: 0 ; | |
| box-shadow: none ; | |
| filter: none ; | |
| opacity: 0 ; | |
| visibility: hidden ; | |
| } | |
| /* Final share-preview close position: sits in the preview frame corner. */ | |
| .share-preview__close { | |
| position: absolute ; | |
| top: 0 ; | |
| right: 0 ; | |
| display: grid ; | |
| width: 34px ; | |
| height: 34px ; | |
| padding: 0 ; | |
| place-items: center ; | |
| pointer-events: auto ; | |
| border: 1px solid color-mix(in srgb, var(--accent) 28%, transparent) ; | |
| border-radius: 999px ; | |
| color: color-mix(in srgb, var(--ink) 68%, transparent) ; | |
| background: color-mix(in srgb, #fffaf0 72%, transparent) ; | |
| box-shadow: | |
| 0 8px 20px rgba(35, 45, 45, 0.1), | |
| inset 0 1px 0 rgba(255, 255, 255, 0.55) ; | |
| backdrop-filter: blur(14px) saturate(118%) ; | |
| -webkit-backdrop-filter: blur(14px) saturate(118%) ; | |
| } | |
| /* Final ticket typography experiment: original English title, typewritten meta/action/short copy. */ | |
| .book-ticket .book-card__title-original, | |
| .share-ticket .book-card__title-original { | |
| color: color-mix(in srgb, var(--ink) 68%, transparent) ; | |
| font-family: var(--font-latin) ; | |
| font-size: 10.8px ; | |
| font-style: italic ; | |
| font-weight: 400 ; | |
| line-height: 1.14 ; | |
| } | |
| .book-ticket .book-card__meta, | |
| .share-ticket .book-card__meta { | |
| color: color-mix(in srgb, var(--ink) 70%, transparent) ; | |
| font-family: "TicketTypewriterLocal", "LXGW WenKai Mono", "LXGW WenKai", "American Typewriter", "Courier New", "Kaiti SC", monospace ; | |
| font-size: 10.4px ; | |
| font-weight: 360 ; | |
| letter-spacing: 0 ; | |
| line-height: 1.3 ; | |
| } | |
| .book-ticket .book-card__shareline, | |
| .share-ticket .book-card__quote { | |
| color: color-mix(in srgb, var(--ink) 78%, transparent) ; | |
| font-family: "TicketTypewriterLocal", "LXGW WenKai Mono", "LXGW WenKai", "American Typewriter", "Kaiti SC", system-ui, sans-serif ; | |
| font-size: 11px ; | |
| font-weight: 620 ; | |
| letter-spacing: 0 ; | |
| line-height: 1.38 ; | |
| } | |
| .book-ticket .book-card__shareline[hidden], | |
| .share-ticket .book-card__quote[hidden] { | |
| display: none ; | |
| margin: 0 ; | |
| } | |
| .book-ticket .book-card__action, | |
| .share-ticket .book-card__action, | |
| .book-card.is-detail .book-card__detail-actions .book-card__action { | |
| font-family: "TicketTypewriterLocal", "LXGW WenKai Mono", "LXGW WenKai", "American Typewriter", "Kaiti SC", system-ui, sans-serif ; | |
| font-weight: 520 ; | |
| letter-spacing: 0 ; | |
| } | |
| .book-ticket .book-card__location-zh, | |
| .share-ticket .book-card__location-zh { | |
| margin-bottom: 7px ; | |
| line-height: 1.16 ; | |
| } | |
| .book-ticket .book-card__title-zh, | |
| .share-ticket .book-card__title-zh { | |
| clear: both ; | |
| margin-top: 0 ; | |
| line-height: 1.12 ; | |
| } | |
| .book-card.is-detail .book-card__title-original { | |
| color: color-mix(in srgb, var(--ink) 68%, transparent) ; | |
| font-family: var(--font-latin) ; | |
| font-style: italic ; | |
| font-weight: 400 ; | |
| } | |
| .book-card.is-detail .book-card__meta, | |
| .share-ticket__stamp, | |
| .share-ticket__serial, | |
| .share-preview__save { | |
| font-family: "TicketTypewriterLocal", "LXGW WenKai Mono", "LXGW WenKai", "American Typewriter", "Courier New", "Kaiti SC", monospace ; | |
| letter-spacing: 0 ; | |
| } | |
| .book-card.is-detail .book-card__counter, | |
| .book-card.is-detail .book-card__page { | |
| font-family: var(--font-page-control) ; | |
| letter-spacing: 0 ; | |
| } | |
| .book-card.is-detail .book-card__meta { | |
| color: color-mix(in srgb, var(--ink) 70%, transparent) ; | |
| font-size: 12.4px ; | |
| font-weight: 360 ; | |
| line-height: 1.34 ; | |
| } | |
| .book-card.is-detail .book-card__counter, | |
| .book-card.is-detail .book-card__page { | |
| font-weight: 420 ; | |
| } | |
| .share-ticket__stamp { | |
| color: color-mix(in srgb, var(--ink) 58%, transparent) ; | |
| font-size: 10.5px ; | |
| font-weight: 420 ; | |
| } | |
| .share-ticket__serial { | |
| color: var(--accent) ; | |
| font-size: 10.5px ; | |
| font-weight: 620 ; | |
| } | |
| .share-preview__save { | |
| font-weight: 520 ; | |
| } | |
| /* Final close-and-depth pass: align ticket/share/detail paper depth and corner ESC controls. */ | |
| .book-card.has-book-stack .book-ticket, | |
| .book-ticket, | |
| .share-ticket { | |
| filter: drop-shadow(0 18px 44px rgba(45, 48, 43, 0.16)) ; | |
| } | |
| .book-card.has-book-stack .book-ticket:not(.is-selected) { | |
| filter: drop-shadow(0 14px 34px rgba(45, 48, 43, 0.12)) ; | |
| } | |
| .book-card.has-book-stack .book-ticket.is-selected, | |
| .share-preview__canvas .share-ticket { | |
| filter: drop-shadow(0 18px 46px rgba(45, 48, 43, 0.17)) ; | |
| } | |
| .book-card.is-ticket .book-card__ticket-view > .book-card__close--float, | |
| .book-card.is-ticket .book-card__ticket-view > .book-card__close--float, | |
| .book-card.is-ticket .book-ticket > .book-card__close--float, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail, | |
| .share-preview__close { | |
| position: absolute ; | |
| z-index: 60 ; | |
| display: grid ; | |
| width: 36px ; | |
| height: 36px ; | |
| padding: 0 ; | |
| place-items: center ; | |
| overflow: visible ; | |
| border: 0 ; | |
| border-radius: 999px ; | |
| color: color-mix(in srgb, var(--accent) 72%, var(--ink) 28%) ; | |
| background: transparent ; | |
| box-shadow: none ; | |
| font-size: 0 ; | |
| line-height: 1 ; | |
| opacity: 0 ; | |
| transform: translate(3px, -3px) ; | |
| transition: opacity 160ms ease, transform 160ms ease, color 160ms ease ; | |
| } | |
| .book-card.is-ticket .book-ticket > .book-card__close--float { | |
| top: 5px ; | |
| right: 5px ; | |
| } | |
| .book-card.is-detail .book-card__detail-view { | |
| overflow: visible ; | |
| } | |
| .book-card.is-detail .book-card__detail-body { | |
| position: static ; | |
| } | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail { | |
| top: 10px ; | |
| right: 10px ; | |
| } | |
| .share-preview__close { | |
| top: 12px ; | |
| right: 12px ; | |
| } | |
| .book-card.is-ticket .book-card__close--float:focus-visible, | |
| .book-card.is-ticket .book-ticket > .book-card__close--float:hover, | |
| .book-card.is-detail .book-card__close--detail:focus-visible, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail:hover, | |
| .share-preview__close:hover, | |
| .share-preview__close:focus-visible { | |
| opacity: 0.94 ; | |
| transform: translate(0, 0) ; | |
| outline: none ; | |
| } | |
| .book-card.is-ticket .book-ticket > .book-card__close--float::before, | |
| .book-card.is-ticket .book-ticket > .book-card__close--float::after, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail::before, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail::after, | |
| .share-preview__close::before, | |
| .share-preview__close::after { | |
| position: absolute ; | |
| top: 50% ; | |
| left: 50% ; | |
| display: grid ; | |
| width: 29px ; | |
| height: 29px ; | |
| place-items: center ; | |
| box-sizing: border-box ; | |
| border: 1px solid color-mix(in srgb, var(--accent) 38%, transparent) ; | |
| border-radius: 999px ; | |
| background: rgba(255, 250, 240, 0.9) ; | |
| box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.58) ; | |
| color: currentColor ; | |
| font-family: "PingFang SC", "Hiragino Sans GB", system-ui, sans-serif ; | |
| line-height: 1 ; | |
| text-align: center ; | |
| transform: translate(-50%, -50%) ; | |
| transition: opacity 160ms ease ; | |
| } | |
| .book-card.is-ticket .book-ticket > .book-card__close--float::before, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail::before, | |
| .share-preview__close::before { | |
| content: "×" ; | |
| opacity: 1 ; | |
| font-size: 15px ; | |
| font-weight: 360 ; | |
| } | |
| .book-card.is-ticket .book-ticket > .book-card__close--float::after, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail::after, | |
| .share-preview__close::after { | |
| content: "Esc" ; | |
| opacity: 0 ; | |
| font-size: 8px ; | |
| font-weight: 760 ; | |
| letter-spacing: 0.01em ; | |
| transition-delay: 420ms ; | |
| } | |
| .book-card.is-ticket .book-ticket > .book-card__close--float:hover::before, | |
| .book-card.is-ticket .book-ticket > .book-card__close--float:focus-visible::before, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail:hover::before, | |
| .book-card.is-detail .book-card__close--detail:focus-visible::before, | |
| .share-preview__close:hover::before, | |
| .share-preview__close:focus-visible::before { | |
| opacity: 0 ; | |
| transition-delay: 420ms ; | |
| } | |
| .book-card.is-ticket .book-ticket > .book-card__close--float:hover::after, | |
| .book-card.is-ticket .book-ticket > .book-card__close--float:focus-visible::after, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail:hover::after, | |
| .book-card.is-detail .book-card__close--detail:focus-visible::after, | |
| .share-preview__close:hover::after, | |
| .share-preview__close:focus-visible::after { | |
| opacity: 1 ; | |
| } | |
| /* Share background halftone: keep the generated ink colors visible. */ | |
| .share-preview__canvas { | |
| background: | |
| var(--share-halftone-image), | |
| linear-gradient(180deg, rgba(255, 253, 247, 0.34), rgba(235, 248, 244, 0.18)) ; | |
| background-position: center, center ; | |
| background-size: cover, auto ; | |
| } | |
| .share-preview__canvas::before { | |
| background: | |
| var(--share-cover-image) ; | |
| background-position: center ; | |
| background-size: cover ; | |
| filter: blur(18px) saturate(0.92) contrast(0.95) ; | |
| opacity: 0.54 ; | |
| mix-blend-mode: normal ; | |
| transform: scale(1.06) ; | |
| } | |
| .share-preview__canvas::after { | |
| background: | |
| var(--share-halftone-image), | |
| linear-gradient(180deg, rgba(255, 255, 250, 0.08), rgba(231, 247, 242, 0.06)) ; | |
| background-position: center, center ; | |
| background-size: cover, auto ; | |
| filter: saturate(1.08) contrast(1.18) brightness(0.86) ; | |
| opacity: 0 ; | |
| mix-blend-mode: normal ; | |
| } | |
| .share-preview[data-halftone-status="ready"] .share-preview__canvas::after { | |
| opacity: 1 ; | |
| } | |
| /* True ticket bottom is now owned only by the dynamic clip-path from app.js. */ | |
| .book-ticket, | |
| .share-ticket { | |
| -webkit-mask: none ; | |
| mask: none ; | |
| } | |
| .book-ticket__body, | |
| .share-ticket__body { | |
| background: transparent ; | |
| background-image: none ; | |
| } | |
| /* Final override: action and close controls must win over the detail legacy pass. */ | |
| .book-ticket, | |
| .share-ticket, | |
| .book-card.is-detail .book-card__detail-view { | |
| --book-action-rest: color-mix(in srgb, var(--book-paper-ink, var(--ink)) 58%, transparent); | |
| --book-action-hover: color-mix(in srgb, var(--accent) 82%, var(--book-paper-ink, var(--ink)) 18%); | |
| --book-action-divider: color-mix(in srgb, var(--book-paper-ink, var(--ink)) 16%, transparent); | |
| } | |
| .book-card.is-detail .book-card__detail-actions { | |
| display: grid ; | |
| grid-template-columns: 62px 54px ; | |
| justify-content: end ; | |
| align-items: center ; | |
| gap: 0 ; | |
| min-width: 116px ; | |
| margin-left: auto ; | |
| margin-right: -4px ; | |
| padding: 0 ; | |
| border: 0 ; | |
| background: transparent ; | |
| box-shadow: none ; | |
| } | |
| .book-ticket .book-card__action, | |
| .share-ticket .book-card__action, | |
| .book-card.is-detail .book-card__detail-actions .book-card__action { | |
| display: inline-grid ; | |
| grid-template-rows: 16px auto ; | |
| align-items: center ; | |
| justify-items: center ; | |
| gap: 2px ; | |
| width: 100% ; | |
| height: 34px ; | |
| padding: 0 ; | |
| color: var(--book-action-rest) ; | |
| background: transparent ; | |
| box-shadow: none ; | |
| outline: none ; | |
| transform: none ; | |
| transition: color 150ms ease, opacity 150ms ease ; | |
| } | |
| .book-ticket .book-card__action + .book-card__action::before, | |
| .share-ticket .book-card__action + .book-card__action::before, | |
| .book-card.is-detail .book-card__detail-actions .book-card__action + .book-card__action::before { | |
| content: "" ; | |
| position: absolute ; | |
| top: 5px ; | |
| bottom: 5px ; | |
| left: 0 ; | |
| width: 1px ; | |
| background: var(--book-action-divider) ; | |
| } | |
| .book-ticket .book-card__action-icon, | |
| .share-ticket .book-card__action-icon, | |
| .book-card.is-detail .book-card__detail-actions .book-card__action-icon { | |
| width: 16px ; | |
| height: 16px ; | |
| fill: none ; | |
| stroke: currentColor ; | |
| stroke-width: 1.9 ; | |
| } | |
| .book-ticket .book-card__action:hover, | |
| .book-ticket .book-card__action:focus-visible, | |
| .share-ticket .book-card__action:hover, | |
| .share-ticket .book-card__action:focus-visible, | |
| .book-card.is-detail .book-card__detail-actions .book-card__action:hover, | |
| .book-card.is-detail .book-card__detail-actions .book-card__action:focus-visible { | |
| color: var(--book-action-hover) ; | |
| background: transparent ; | |
| box-shadow: none ; | |
| } | |
| .book-ticket .book-card__action:active, | |
| .share-ticket .book-card__action:active, | |
| .book-card.is-detail .book-card__detail-actions .book-card__action:active { | |
| color: var(--accent) ; | |
| opacity: 0.72 ; | |
| } | |
| .book-ticket .book-card__save.is-saved, | |
| .share-ticket .book-card__save.is-saved, | |
| .book-card.is-detail .book-card__detail-actions .book-card__save.is-saved { | |
| color: var(--accent) ; | |
| background: transparent ; | |
| box-shadow: none ; | |
| } | |
| .book-ticket .book-card__save.is-saved .book-card__action-icon, | |
| .share-ticket .book-card__save.is-saved .book-card__action-icon, | |
| .book-card.is-detail .book-card__detail-actions .book-card__save.is-saved .book-card__action-icon { | |
| fill: color-mix(in srgb, var(--accent) 20%, transparent) ; | |
| stroke: currentColor ; | |
| } | |
| .book-card.is-ticket .book-ticket > .book-card__close--float::before, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail::before, | |
| .share-preview__close::before { | |
| content: "" ; | |
| opacity: 1 ; | |
| font-size: 0 ; | |
| } | |
| .book-card.is-ticket .book-ticket > .book-card__close--float::after, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail::after, | |
| .share-preview__close::after { | |
| content: "×" ; | |
| display: grid ; | |
| width: 29px ; | |
| height: 29px ; | |
| place-items: center ; | |
| border: 0 ; | |
| background: transparent ; | |
| box-shadow: none ; | |
| opacity: 1 ; | |
| color: currentColor ; | |
| font-family: "Helvetica Neue", Arial, "PingFang SC", system-ui, sans-serif ; | |
| font-size: 17px ; | |
| font-weight: 300 ; | |
| line-height: 1 ; | |
| letter-spacing: 0 ; | |
| text-align: center ; | |
| transform: translate(-50%, -50%) ; | |
| } | |
| .book-card.is-ticket .book-ticket > .book-card__close--float:hover::before, | |
| .book-card.is-ticket .book-ticket > .book-card__close--float:focus-visible::before, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail:hover::before, | |
| .book-card.is-detail .book-card__close--detail:focus-visible::before, | |
| .share-preview__close:hover::before, | |
| .share-preview__close:focus-visible::before { | |
| opacity: 1 ; | |
| } | |
| .book-card.is-ticket .book-ticket > .book-card__close--float:hover::after, | |
| .book-card.is-ticket .book-ticket > .book-card__close--float:focus-visible::after, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail:hover::after, | |
| .book-card.is-detail .book-card__close--detail:focus-visible::after, | |
| .share-preview__close:hover::after, | |
| .share-preview__close:focus-visible::after { | |
| content: "Esc" ; | |
| font-size: 8px ; | |
| font-weight: 760 ; | |
| letter-spacing: 0.01em ; | |
| opacity: 1 ; | |
| } | |
| /* Final fixed detail geometry: card height is locked; cover fills the inner paper lane. */ | |
| .book-card.is-detail .book-card__detail-view { | |
| --detail-card-height: 500px; | |
| --detail-cover-height: 448px; | |
| --detail-cover-max-ratio: 1.12; | |
| --detail-wide-cover-threshold: 0.94; | |
| --detail-wide-cover-gap: 40px; | |
| --detail-copy-min-width: clamp(300px, 26vw, 360px); | |
| --detail-copy-width: clamp(340px, 29vw, 424px); | |
| --detail-wide-copy-min-width: clamp(286px, 24vw, 330px); | |
| --detail-wide-copy-width: clamp(320px, 27vw, 388px); | |
| --detail-footer-row-height: 48px; | |
| box-sizing: border-box ; | |
| height: var(--detail-card-height) ; | |
| min-height: var(--detail-card-height) ; | |
| max-height: var(--detail-card-height) ; | |
| grid-template-columns: minmax(0, var(--detail-cover-width)) minmax(var(--detail-copy-min-width), var(--detail-copy-width)) ; | |
| grid-template-rows: minmax(0, 1fr) ; | |
| align-items: stretch ; | |
| overflow: hidden ; | |
| } | |
| .book-card.is-detail .book-card__detail-cover, | |
| .book-card.is-detail .book-card__detail-cover img { | |
| height: var(--detail-cover-height) ; | |
| max-height: var(--detail-cover-height) ; | |
| } | |
| .book-card.is-detail .book-card__detail-body { | |
| min-height: 0 ; | |
| height: 100% ; | |
| overflow: hidden ; | |
| display: grid ; | |
| grid-template-rows: auto auto auto auto minmax(0, 1fr) var(--detail-footer-row-height) ; | |
| align-content: stretch ; | |
| } | |
| .book-card.is-detail .book-card__detail-top { | |
| grid-row: 1 ; | |
| } | |
| .book-card.is-detail .book-card__title-zh { | |
| grid-row: 2 ; | |
| } | |
| .book-card.is-detail .book-card__title-original { | |
| grid-row: 3 ; | |
| } | |
| .book-card.is-detail .book-card__meta { | |
| grid-row: 4 ; | |
| } | |
| .book-card.is-detail .book-card__intro { | |
| grid-row: 5 ; | |
| display: grid ; | |
| gap: var(--detail-intro-gap, 16px) ; | |
| margin-top: var(--detail-intro-margin-top, 18px) ; | |
| margin-bottom: var(--detail-intro-margin-bottom, 8px) ; | |
| align-self: stretch ; | |
| min-height: 0 ; | |
| max-height: 100% ; | |
| overflow: hidden ; | |
| font-size: calc(14px * var(--detail-intro-font-scale, 1)) ; | |
| line-height: var(--detail-intro-line-height, 1.58) ; | |
| -webkit-mask-image: none ; | |
| mask-image: none ; | |
| -webkit-box-orient: unset ; | |
| -webkit-line-clamp: unset ; | |
| } | |
| .book-card.is-detail .book-card__intro.is-fit-tight { | |
| text-wrap: pretty ; | |
| } | |
| .book-card.is-detail .book-card__detail-footer { | |
| grid-row: 6 ; | |
| box-sizing: border-box ; | |
| margin-top: 0 ; | |
| min-height: var(--detail-footer-row-height) ; | |
| height: var(--detail-footer-row-height) ; | |
| align-self: end ; | |
| align-items: flex-end ; | |
| padding: 13px 0 0 ; | |
| background-position: 1px 0 ; | |
| } | |
| .book-card.is-detail .book-card__title-original { | |
| max-width: 100% ; | |
| overflow: hidden ; | |
| font-size: calc(14.5px * var(--detail-title-original-scale, 1)) ; | |
| line-height: 1.12 ; | |
| text-overflow: clip ; | |
| white-space: nowrap ; | |
| } | |
| @media (max-width: 720px) { | |
| .book-card.is-detail .book-card__detail-view { | |
| --detail-card-height: auto; | |
| --detail-cover-height: min(330px, 52vh); | |
| height: auto ; | |
| min-height: 0 ; | |
| max-height: none ; | |
| } | |
| } | |
| /* Final share ticket centering: the ticket owns the visual center, controls float around it. */ | |
| .share-preview__canvas { | |
| position: relative ; | |
| display: grid ; | |
| grid-template-areas: "share-stage" ; | |
| grid-template-columns: minmax(0, 1fr) ; | |
| grid-template-rows: minmax(0, 1fr) ; | |
| place-items: center ; | |
| } | |
| .share-preview__canvas .share-ticket { | |
| grid-area: share-stage ; | |
| align-self: center ; | |
| justify-self: center ; | |
| width: min(245px, 72%) ; | |
| margin: 0 ; | |
| } | |
| .share-preview__topbar, | |
| .share-preview__actions { | |
| grid-area: share-stage ; | |
| } | |
| /* Final detail close alignment: center the control on the location row. */ | |
| .book-card.is-detail .book-card__detail-view { | |
| --detail-location-row-center-y: 37px; | |
| --detail-close-hit-size: 36px; | |
| --detail-close-circle-size: 29px; | |
| } | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail { | |
| top: calc(var(--detail-location-row-center-y) - var(--detail-close-hit-size) / 2) ; | |
| right: 16px ; | |
| width: var(--detail-close-hit-size) ; | |
| height: var(--detail-close-hit-size) ; | |
| transform: none ; | |
| } | |
| .book-card.is-detail .book-card__detail-view:hover > .book-card__close--detail, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail:hover, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail:focus-visible { | |
| opacity: 0.94 ; | |
| transform: none ; | |
| } | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail::after { | |
| top: 50% ; | |
| left: 50% ; | |
| display: grid ; | |
| width: var(--detail-close-circle-size) ; | |
| height: var(--detail-close-circle-size) ; | |
| place-items: center ; | |
| line-height: 1 ; | |
| text-align: center ; | |
| transform: translate(-50%, -50%) ; | |
| } | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail:hover::after, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail:focus-visible::after { | |
| content: "Esc" ; | |
| line-height: 1 ; | |
| } | |
| /* Final detail exploration controls: city nav wraps the book pager in one quiet row. */ | |
| .book-card.is-detail .book-card__explore { | |
| display: inline-flex ; | |
| align-items: center ; | |
| justify-content: flex-start ; | |
| align-self: flex-end ; | |
| gap: 5px ; | |
| min-height: 30px ; | |
| padding: 0 ; | |
| border: 0 ; | |
| background: transparent ; | |
| box-shadow: none ; | |
| transform: none ; | |
| } | |
| .book-card.is-detail .book-card__explore[hidden] { | |
| display: none ; | |
| } | |
| .book-card.is-detail .book-card__city-page { | |
| position: relative ; | |
| display: inline-grid ; | |
| place-items: center ; | |
| width: 18px ; | |
| height: 30px ; | |
| padding: 0 ; | |
| border: 0 ; | |
| border-radius: 0 ; | |
| color: color-mix(in srgb, var(--book-paper-ink) 42%, transparent) ; | |
| background: transparent ; | |
| box-shadow: none ; | |
| backdrop-filter: none ; | |
| -webkit-backdrop-filter: none ; | |
| font-family: var(--font-page-control) ; | |
| font-size: 0 ; | |
| font-weight: 560 ; | |
| line-height: 1 ; | |
| letter-spacing: 0 ; | |
| opacity: 0.82 ; | |
| cursor: pointer ; | |
| transition: color 150ms ease, opacity 150ms ease, background 150ms ease ; | |
| } | |
| .book-card.is-detail .book-card__city-page[hidden], | |
| .book-card.is-detail .book-card__explore.is-special-book-explore .book-card__city-page { | |
| display: none ; | |
| } | |
| .book-card.is-detail .book-card__city-page::after { | |
| position: absolute ; | |
| top: 50% ; | |
| left: 50% ; | |
| display: grid ; | |
| width: 18px ; | |
| height: 30px ; | |
| place-items: center ; | |
| color: currentColor ; | |
| font-size: 15px ; | |
| font-weight: 420 ; | |
| line-height: 1 ; | |
| letter-spacing: -0.1em ; | |
| transform: translate(-50%, -50%) scaleY(1.08) ; | |
| transform-origin: center ; | |
| } | |
| .book-card.is-detail .book-card__city-page--prev::after { | |
| content: "‹‹" ; | |
| } | |
| .book-card.is-detail .book-card__city-page--next::after { | |
| content: "››" ; | |
| } | |
| .book-card.is-detail .book-card__city-page:hover, | |
| .book-card.is-detail .book-card__city-page:focus-visible { | |
| color: var(--accent) ; | |
| background: transparent ; | |
| opacity: 0.92 ; | |
| outline: none ; | |
| } | |
| .book-card.is-detail .book-card__city-page:active { | |
| color: var(--accent) ; | |
| opacity: 0.72 ; | |
| } | |
| .book-card.is-detail .book-card__pager { | |
| flex: 0 0 auto ; | |
| gap: 7px ; | |
| height: 30px ; | |
| padding: 0 ; | |
| } | |
| /* Final dark-mode paper surfaces: paper darkens slightly, ink stays fixed. */ | |
| :root { | |
| --book-paper-surface: #fffaf0; | |
| --book-ticket-paper-top: rgba(255, 252, 244, 0.93); | |
| --book-ticket-paper-bottom: rgba(255, 248, 235, 0.84); | |
| } | |
| :root[data-theme="dark"] { | |
| --book-paper-surface: #f1e8d9; | |
| --book-ticket-paper-top: rgba(245, 237, 225, 0.94); | |
| --book-ticket-paper-bottom: rgba(237, 226, 210, 0.88); | |
| } | |
| .book-ticket, | |
| .share-ticket { | |
| background: | |
| linear-gradient(180deg, var(--book-ticket-paper-top), var(--book-ticket-paper-bottom)), | |
| url("../public/textures/land-paper-tile.png") ; | |
| background-size: auto, 360px 360px ; | |
| color: var(--book-paper-ink) ; | |
| } | |
| .book-card.is-detail .book-card__detail-view { | |
| background: var(--book-paper-surface) ; | |
| color: var(--book-paper-ink) ; | |
| } | |
| .book-ticket .book-card__title-zh, | |
| .share-ticket .book-card__title-zh, | |
| .book-card.is-detail .book-card__title-zh, | |
| .book-card.is-detail .book-card__title-main, | |
| .book-card.is-detail .book-card__title-sub { | |
| color: var(--book-title) ; | |
| } | |
| .book-ticket .book-card__title-original, | |
| .share-ticket .book-card__title-original, | |
| .book-card.is-detail .book-card__title-original { | |
| color: color-mix(in srgb, var(--book-paper-ink) 78%, #1d3434 22%) ; | |
| } | |
| .book-ticket .book-card__meta, | |
| .share-ticket .book-card__meta, | |
| .book-card.is-detail .book-card__meta, | |
| .book-ticket .book-card__shareline, | |
| .share-ticket .book-card__quote, | |
| .book-card.is-detail .book-card__intro, | |
| .book-card.is-detail .book-card__intro p, | |
| .book-card.is-detail .book-card__meta-authors, | |
| .book-card.is-detail .book-card__meta-details { | |
| color: color-mix(in srgb, var(--book-paper-ink) 82%, #1d3434 18%) ; | |
| } | |
| /* Final close hover intent: X is the resting affordance; Esc appears only after hover dwell. */ | |
| .book-card.is-ticket .book-ticket > .book-card__close--float, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail { | |
| --close-esc-delay: 820ms; | |
| color: var(--book-action-rest) ; | |
| transition: | |
| color 150ms ease, | |
| opacity 180ms ease, | |
| transform 180ms ease ; | |
| transition-delay: 0ms ; | |
| } | |
| .book-card.is-ticket .book-card__ticket-view:hover .book-card__close--float, | |
| .book-card.is-ticket .book-ticket > .book-card__close--float:focus-visible, | |
| .book-card.is-detail .book-card__detail-view:hover > .book-card__close--detail, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail:focus-visible { | |
| opacity: 0.94 ; | |
| color: var(--book-action-rest) ; | |
| transform: none ; | |
| } | |
| .book-card.is-ticket .book-ticket > .book-card__close--float:hover, | |
| .book-card.is-ticket .book-ticket > .book-card__close--float:focus-visible, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail:hover, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail:focus-visible { | |
| color: var(--book-action-hover) ; | |
| transition-delay: 0ms ; | |
| } | |
| .book-card.is-ticket .book-ticket > .book-card__close--float::after, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail::after { | |
| content: "" ; | |
| display: grid ; | |
| place-items: center ; | |
| width: var(--detail-close-circle-size, 29px) ; | |
| height: var(--detail-close-circle-size, 29px) ; | |
| opacity: 1 ; | |
| border: 1px solid color-mix(in srgb, var(--accent) 38%, transparent) ; | |
| border-radius: 999px ; | |
| background-color: rgba(255, 250, 240, 0.9) ; | |
| background-image: | |
| linear-gradient(45deg, transparent calc(50% - 1px), currentColor calc(50% - 1px) calc(50% + 1px), transparent calc(50% + 1px)), | |
| linear-gradient(-45deg, transparent calc(50% - 1px), currentColor calc(50% - 1px) calc(50% + 1px), transparent calc(50% + 1px)) ; | |
| background-repeat: no-repeat ; | |
| background-position: center ; | |
| background-size: 13px 13px ; | |
| box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.58) ; | |
| font-size: 0 ; | |
| transform: translate(-50%, -50%) ; | |
| transition: opacity 150ms ease ; | |
| transition-delay: 0ms ; | |
| } | |
| .book-card.is-ticket .book-ticket > .book-card__close--float::before, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail::before { | |
| content: "Esc" ; | |
| display: grid ; | |
| place-items: center ; | |
| width: var(--detail-close-circle-size, 29px) ; | |
| height: var(--detail-close-circle-size, 29px) ; | |
| opacity: 0 ; | |
| border: 1px solid color-mix(in srgb, var(--accent) 38%, transparent) ; | |
| border-radius: 999px ; | |
| background: rgba(255, 250, 240, 0.9) ; | |
| box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.58) ; | |
| color: currentColor ; | |
| font-size: 8px ; | |
| font-weight: 760 ; | |
| line-height: 1 ; | |
| letter-spacing: 0.01em ; | |
| transform: translate(-50%, -50%) ; | |
| transition: opacity 150ms ease ; | |
| transition-delay: 0ms ; | |
| } | |
| .book-card.is-ticket .book-ticket > .book-card__close--float:hover::after, | |
| .book-card.is-ticket .book-ticket > .book-card__close--float:focus-visible::after, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail:hover::after, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail:focus-visible::after { | |
| content: "" ; | |
| opacity: 0 ; | |
| font-size: 0 ; | |
| transition-delay: var(--close-esc-delay) ; | |
| } | |
| .book-card.is-ticket .book-ticket > .book-card__close--float:hover::before, | |
| .book-card.is-ticket .book-ticket > .book-card__close--float:focus-visible::before, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail:hover::before, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail:focus-visible::before { | |
| opacity: 1 ; | |
| transition-delay: var(--close-esc-delay) ; | |
| } | |
| /* Final close logo reset: one translucent shell, one small solid gray X, no Esc swap. */ | |
| .book-card.is-ticket .book-ticket > .book-card__close--float, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail, | |
| .share-preview__close { | |
| --close-logo-bg: rgba(252, 248, 239, 0.24); | |
| --close-logo-border: rgba(243, 128, 108, 0.18); | |
| --close-logo-ink: #73827f; | |
| z-index: 70 ; | |
| display: grid ; | |
| width: 32px ; | |
| height: 32px ; | |
| min-width: 32px ; | |
| min-height: 32px ; | |
| padding: 0 ; | |
| place-items: center ; | |
| overflow: hidden ; | |
| border: 1px solid var(--close-logo-border) ; | |
| border-radius: 999px ; | |
| color: var(--close-logo-ink) ; | |
| background: var(--close-logo-bg) ; | |
| box-shadow: | |
| 0 6px 14px rgba(31, 48, 50, 0.045) ; | |
| font-size: 0 ; | |
| line-height: 1 ; | |
| opacity: 1 ; | |
| transform: none ; | |
| transition: | |
| background 150ms ease, | |
| border-color 150ms ease, | |
| color 150ms ease, | |
| opacity 150ms ease ; | |
| transition-delay: 0ms ; | |
| backdrop-filter: blur(8px) saturate(108%) ; | |
| -webkit-backdrop-filter: blur(8px) saturate(108%) ; | |
| } | |
| .book-card.is-ticket .book-ticket > .book-card__close--float { | |
| width: 30px ; | |
| height: 30px ; | |
| min-width: 30px ; | |
| min-height: 30px ; | |
| } | |
| .book-card.is-ticket .book-ticket > .book-card__close--float:hover, | |
| .book-card.is-ticket .book-ticket > .book-card__close--float:focus-visible, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail:hover, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail:focus-visible, | |
| .share-preview__close:hover, | |
| .share-preview__close:focus-visible { | |
| --close-logo-bg: rgba(252, 248, 239, 0.34); | |
| --close-logo-border: rgba(243, 128, 108, 0.26); | |
| --close-logo-ink: #667572; | |
| outline: none ; | |
| opacity: 1 ; | |
| transform: none ; | |
| transition-delay: 0ms ; | |
| } | |
| .book-card.is-ticket .book-ticket > .book-card__close--float::before, | |
| .book-card.is-ticket .book-ticket > .book-card__close--float::after, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail::before, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail::after, | |
| .share-preview__close::before, | |
| .share-preview__close::after { | |
| position: absolute ; | |
| top: 50% ; | |
| left: 50% ; | |
| display: block ; | |
| width: 13px ; | |
| height: 2px ; | |
| min-width: 0 ; | |
| min-height: 0 ; | |
| padding: 0 ; | |
| border: 0 ; | |
| border-radius: 999px ; | |
| background: var(--close-logo-ink) ; | |
| background-image: none ; | |
| box-shadow: none ; | |
| color: transparent ; | |
| content: "" ; | |
| font-size: 0 ; | |
| line-height: 0 ; | |
| letter-spacing: 0 ; | |
| opacity: 1 ; | |
| transition: background 150ms ease ; | |
| transition-delay: 0ms ; | |
| } | |
| .book-card.is-ticket .book-ticket > .book-card__close--float::before, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail::before, | |
| .share-preview__close::before { | |
| transform: translate(-50%, -50%) rotate(45deg) ; | |
| } | |
| .book-card.is-ticket .book-ticket > .book-card__close--float::after, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail::after, | |
| .share-preview__close::after { | |
| transform: translate(-50%, -50%) rotate(-45deg) ; | |
| } | |
| .book-card.is-ticket .book-ticket > .book-card__close--float::before, | |
| .book-card.is-ticket .book-ticket > .book-card__close--float::after { | |
| width: 12px ; | |
| height: 1.8px ; | |
| } | |
| :root[data-theme="dark"] .book-card.is-ticket .book-ticket > .book-card__close--float, | |
| :root[data-theme="dark"] .book-card.is-detail .book-card__detail-view > .book-card__close--detail, | |
| :root[data-theme="dark"] .share-preview__close { | |
| --close-logo-bg: rgba(23, 63, 64, 0.3); | |
| --close-logo-border: rgba(243, 128, 108, 0.2); | |
| --close-logo-ink: #a9b9b5; | |
| } | |
| .share-preview__save { | |
| min-width: 156px ; | |
| height: 40px ; | |
| padding: 0 22px ; | |
| border: 1px solid rgba(243, 128, 108, 0.28) ; | |
| border-radius: 999px ; | |
| color: #6f817d ; | |
| background: rgba(252, 248, 239, 0.3) ; | |
| box-shadow: | |
| 0 8px 18px rgba(31, 48, 50, 0.055) ; | |
| font-weight: 560 ; | |
| letter-spacing: 0.03em ; | |
| backdrop-filter: blur(8px) saturate(108%) ; | |
| -webkit-backdrop-filter: blur(8px) saturate(108%) ; | |
| } | |
| .share-preview__save:hover, | |
| .share-preview__save:focus-visible { | |
| border-color: rgba(243, 128, 108, 0.38) ; | |
| color: #667572 ; | |
| background: rgba(252, 248, 239, 0.4) ; | |
| outline: none ; | |
| } | |
| /* Final share-ticket cutout fix: clip-path owns the holes; no duplicate mask or leaking drop-shadow. */ | |
| .share-preview__canvas .share-ticket { | |
| -webkit-mask: none ; | |
| mask: none ; | |
| filter: none ; | |
| box-shadow: | |
| 0 14px 34px rgba(24, 40, 43, 0.12), | |
| inset 0 1px 0 rgba(255, 255, 255, 0.58) ; | |
| } | |
| /* Final close hover restore: complete X first, Esc only after hover dwell. */ | |
| .book-card.is-ticket .book-ticket > .book-card__close--float, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail, | |
| .share-preview__close { | |
| --close-esc-delay: 820ms; | |
| } | |
| .book-card.is-ticket .book-ticket > .book-card__close--float::after, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail::after, | |
| .share-preview__close::after { | |
| content: "" ; | |
| display: block ; | |
| width: 11px ; | |
| height: 11px ; | |
| border: 0 ; | |
| border-radius: 0 ; | |
| background-color: transparent ; | |
| background-image: | |
| linear-gradient(45deg, transparent calc(50% - 0.85px), var(--close-logo-ink) calc(50% - 0.85px) calc(50% + 0.85px), transparent calc(50% + 0.85px)), | |
| linear-gradient(-45deg, transparent calc(50% - 0.85px), var(--close-logo-ink) calc(50% - 0.85px) calc(50% + 0.85px), transparent calc(50% + 0.85px)) ; | |
| background-repeat: no-repeat ; | |
| background-position: center ; | |
| background-size: 11px 11px ; | |
| box-shadow: none ; | |
| opacity: 1 ; | |
| transform: translate(-50%, -50%) ; | |
| transition: opacity 150ms ease ; | |
| transition-delay: 0ms ; | |
| } | |
| .book-card.is-ticket .book-ticket > .book-card__close--float::before, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail::before, | |
| .share-preview__close::before { | |
| content: "Esc" ; | |
| display: grid ; | |
| width: 100% ; | |
| height: 100% ; | |
| place-items: center ; | |
| border: 0 ; | |
| border-radius: 0 ; | |
| background: transparent ; | |
| box-shadow: none ; | |
| color: var(--close-logo-ink) ; | |
| font-family: "Helvetica Neue", Arial, "PingFang SC", system-ui, sans-serif ; | |
| font-size: 8px ; | |
| font-weight: 720 ; | |
| line-height: 1 ; | |
| letter-spacing: 0.01em ; | |
| opacity: 0 ; | |
| transform: translate(-50%, -50%) ; | |
| transition: opacity 150ms ease ; | |
| transition-delay: 0ms ; | |
| } | |
| .book-card.is-ticket .book-ticket > .book-card__close--float:hover::after, | |
| .book-card.is-ticket .book-ticket > .book-card__close--float:focus-visible::after, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail:hover::after, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail:focus-visible::after, | |
| .share-preview__close:hover::after, | |
| .share-preview__close:focus-visible::after { | |
| content: "" ; | |
| opacity: 0 ; | |
| transition-delay: var(--close-esc-delay) ; | |
| } | |
| .book-card.is-ticket .book-ticket > .book-card__close--float:hover::before, | |
| .book-card.is-ticket .book-ticket > .book-card__close--float:focus-visible::before, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail:hover::before, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail:focus-visible::before, | |
| .share-preview__close:hover::before, | |
| .share-preview__close:focus-visible::before { | |
| opacity: 1 ; | |
| transition-delay: var(--close-esc-delay) ; | |
| } | |
| /* Final detail action alignment: lift the right action group and match the quiet pager tone. */ | |
| .book-card.is-detail .book-card__detail-actions { | |
| align-self: flex-start ; | |
| transform: translateY(-3px) ; | |
| } | |
| .book-card.is-detail .book-card__detail-actions .book-card__action { | |
| grid-template-rows: 17px 11px ; | |
| gap: 3px ; | |
| height: 34px ; | |
| min-width: 54px ; | |
| padding: 0 12px ; | |
| color: color-mix(in srgb, var(--book-paper-ink) 42%, transparent) ; | |
| font-family: "TicketTypewriterLocal", "LXGW WenKai Mono", "LXGW WenKai", "American Typewriter", "PingFang SC", "Hiragino Sans GB", monospace ; | |
| font-size: 10.5px ; | |
| font-weight: 520 ; | |
| line-height: 1 ; | |
| letter-spacing: 0.02em ; | |
| } | |
| .book-card.is-detail .book-card__detail-actions .book-card__action-icon { | |
| width: 17px ; | |
| height: 17px ; | |
| stroke-width: 1.85 ; | |
| transform: translateY(4px) ; | |
| } | |
| .book-card.is-detail .book-card__detail-actions .book-card__action-label { | |
| color: currentColor ; | |
| font: inherit ; | |
| transform: translateY(2px) ; | |
| white-space: nowrap ; | |
| } | |
| .book-card.is-detail .book-card__detail-actions .book-card__action + .book-card__action::before { | |
| top: 1px ; | |
| bottom: 1px ; | |
| transform: translateY(-3px) ; | |
| background: color-mix(in srgb, var(--book-paper-ink) 18%, transparent) ; | |
| } | |
| /* Final immersive close reveal: hide card close controls until the reader dwells on the card. */ | |
| .book-card.is-ticket .book-ticket > .book-card__close--float, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail { | |
| --close-esc-delay: 0ms; | |
| --close-reveal-delay: 520ms; | |
| opacity: 0 ; | |
| pointer-events: none ; | |
| transform: translateY(-2px) ; | |
| transition: | |
| opacity 180ms ease var(--close-reveal-delay), | |
| background 150ms ease, | |
| border-color 150ms ease, | |
| color 150ms ease, | |
| transform 180ms ease var(--close-reveal-delay) ; | |
| } | |
| .book-card.is-ticket .book-card__ticket-view:hover .book-card__close--float, | |
| .book-card.is-ticket .book-card__ticket-view > .book-card__close--float:hover, | |
| .book-card.is-ticket .book-card__ticket-view > .book-card__close--float:focus-visible, | |
| .book-card.is-ticket .book-ticket > .book-card__close--float:hover, | |
| .book-card.is-ticket .book-ticket > .book-card__close--float:focus-visible, | |
| .book-card.is-detail .book-card__detail-view:hover > .book-card__close--detail, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail:hover, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail:focus-visible { | |
| opacity: 1 ; | |
| pointer-events: auto ; | |
| transform: none ; | |
| } | |
| .book-card.is-ticket .book-card__ticket-view > .book-card__close--float:hover, | |
| .book-card.is-ticket .book-card__ticket-view > .book-card__close--float:focus-visible, | |
| .book-card.is-ticket .book-ticket > .book-card__close--float:hover, | |
| .book-card.is-ticket .book-ticket > .book-card__close--float:focus-visible, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail:hover, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail:focus-visible { | |
| transition-delay: 0ms ; | |
| } | |
| /* Search navigation closes the current bookmark before the map moves to the next one. */ | |
| #cityTooltip.is-search-transitioning-out { | |
| opacity: 0 ; | |
| pointer-events: none ; | |
| transform: translate3d(0, 8px, 0) scale(0.985) ; | |
| transition: | |
| opacity 180ms ease, | |
| transform 180ms cubic-bezier(0.2, 0.82, 0.24, 1) ; | |
| } | |
| @media (prefers-reduced-motion: reduce) { | |
| #cityTooltip.is-search-transitioning-out { | |
| transition: none ; | |
| transform: none ; | |
| } | |
| } | |
| .book-card.is-ticket .book-ticket > .book-card__close--float:hover::after, | |
| .book-card.is-ticket .book-ticket > .book-card__close--float:focus-visible::after, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail:hover::after, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail:focus-visible::after { | |
| opacity: 0 ; | |
| transition-delay: 0ms ; | |
| } | |
| .book-card.is-ticket .book-ticket > .book-card__close--float:hover::before, | |
| .book-card.is-ticket .book-ticket > .book-card__close--float:focus-visible::before, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail:hover::before, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail:focus-visible::before { | |
| opacity: 1 ; | |
| transition-delay: 0ms ; | |
| } | |
| /* Final unified close controls: ticket, detail, and share use the same corner reveal. */ | |
| .book-card.is-ticket .book-card__ticket-view > .book-card__close--float, | |
| .book-card.is-ticket .book-ticket > .book-card__close--float, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail, | |
| .share-preview__close { | |
| --close-corner-offset: 8px; | |
| --close-reveal-delay: 520ms; | |
| --close-esc-delay: 820ms; | |
| --close-logo-ink: #74817f; | |
| position: absolute ; | |
| top: var(--close-corner-offset) ; | |
| right: var(--close-corner-offset) ; | |
| z-index: 18 ; | |
| display: grid ; | |
| width: 32px ; | |
| height: 32px ; | |
| min-width: 0 ; | |
| min-height: 0 ; | |
| padding: 0 ; | |
| place-items: center ; | |
| overflow: hidden ; | |
| color: transparent ; | |
| font-size: 0 ; | |
| line-height: 1 ; | |
| text-indent: 0 ; | |
| border: 1px solid rgba(243, 128, 108, 0.34) ; | |
| border-radius: 999px ; | |
| background: rgba(255, 250, 240, 0.44) ; | |
| box-shadow: none ; | |
| opacity: 0 ; | |
| pointer-events: none ; | |
| transform: translateY(-2px) ; | |
| backdrop-filter: blur(8px) saturate(106%) ; | |
| -webkit-backdrop-filter: blur(8px) saturate(106%) ; | |
| transition: | |
| opacity 180ms ease var(--close-reveal-delay), | |
| transform 180ms ease var(--close-reveal-delay), | |
| background 150ms ease, | |
| border-color 150ms ease ; | |
| } | |
| .book-card.is-ticket .book-card__ticket-view:hover .book-card__close--float, | |
| .book-card.is-ticket .book-card__ticket-view > .book-card__close--float:hover, | |
| .book-card.is-ticket .book-card__ticket-view > .book-card__close--float:focus-visible, | |
| .book-card.is-ticket .book-ticket > .book-card__close--float:hover, | |
| .book-card.is-ticket .book-ticket > .book-card__close--float:focus-visible, | |
| .book-card.is-detail .book-card__detail-view:hover > .book-card__close--detail, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail:hover, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail:focus-visible, | |
| .share-preview.has-share-controls .share-preview__close, | |
| .share-preview__close:hover, | |
| .share-preview__close:focus-visible { | |
| opacity: 1 ; | |
| pointer-events: auto ; | |
| transform: none ; | |
| } | |
| .book-card.is-ticket .book-card__ticket-view > .book-card__close--float:hover, | |
| .book-card.is-ticket .book-card__ticket-view > .book-card__close--float:focus-visible, | |
| .book-card.is-ticket .book-ticket > .book-card__close--float:hover, | |
| .book-card.is-ticket .book-ticket > .book-card__close--float:focus-visible, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail:hover, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail:focus-visible, | |
| .share-preview__close:hover, | |
| .share-preview__close:focus-visible { | |
| border-color: rgba(243, 128, 108, 0.5) ; | |
| background: rgba(255, 250, 240, 0.58) ; | |
| outline: none ; | |
| transition-delay: 0ms ; | |
| } | |
| .book-card.is-ticket .book-card__ticket-view > .book-card__close--float::before, | |
| .book-card.is-ticket .book-card__ticket-view > .book-card__close--float::after, | |
| .book-card.is-ticket .book-ticket > .book-card__close--float::before, | |
| .book-card.is-ticket .book-ticket > .book-card__close--float::after, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail::before, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail::after, | |
| .share-preview__close::before, | |
| .share-preview__close::after { | |
| position: absolute ; | |
| top: 50% ; | |
| left: 50% ; | |
| margin: 0 ; | |
| border: 0 ; | |
| border-radius: 0 ; | |
| background-color: transparent ; | |
| box-shadow: none ; | |
| transform: translate(-50%, -50%) ; | |
| } | |
| .book-card.is-ticket .book-card__ticket-view > .book-card__close--float::after, | |
| .book-card.is-ticket .book-ticket > .book-card__close--float::after, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail::after, | |
| .share-preview__close::after { | |
| content: "" ; | |
| display: block ; | |
| width: 11px ; | |
| height: 11px ; | |
| background-image: | |
| linear-gradient(45deg, transparent calc(50% - 0.8px), var(--close-logo-ink) calc(50% - 0.8px) calc(50% + 0.8px), transparent calc(50% + 0.8px)), | |
| linear-gradient(-45deg, transparent calc(50% - 0.8px), var(--close-logo-ink) calc(50% - 0.8px) calc(50% + 0.8px), transparent calc(50% + 0.8px)) ; | |
| background-position: center ; | |
| background-repeat: no-repeat ; | |
| background-size: 11px 11px ; | |
| opacity: 1 ; | |
| transition: opacity 120ms ease ; | |
| transition-delay: 0ms ; | |
| } | |
| .book-card.is-ticket .book-card__ticket-view > .book-card__close--float::before, | |
| .book-card.is-ticket .book-ticket > .book-card__close--float::before, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail::before, | |
| .share-preview__close::before { | |
| content: "Esc" ; | |
| display: grid ; | |
| width: 100% ; | |
| height: 100% ; | |
| place-items: center ; | |
| color: var(--close-logo-ink) ; | |
| font-family: "Helvetica Neue", Arial, "PingFang SC", system-ui, sans-serif ; | |
| font-size: 8px ; | |
| font-weight: 720 ; | |
| letter-spacing: 0 ; | |
| opacity: 0 ; | |
| transition: opacity 120ms ease ; | |
| transition-delay: 0ms ; | |
| } | |
| .book-card.is-ticket .book-card__ticket-view > .book-card__close--float:hover::after, | |
| .book-card.is-ticket .book-card__ticket-view > .book-card__close--float:focus-visible::after, | |
| .book-card.is-ticket .book-ticket > .book-card__close--float:hover::after, | |
| .book-card.is-ticket .book-ticket > .book-card__close--float:focus-visible::after, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail:hover::after, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail:focus-visible::after, | |
| .share-preview__close:hover::after, | |
| .share-preview__close:focus-visible::after { | |
| opacity: 0 ; | |
| transition-delay: var(--close-esc-delay) ; | |
| } | |
| .book-card.is-ticket .book-card__ticket-view > .book-card__close--float:hover::before, | |
| .book-card.is-ticket .book-card__ticket-view > .book-card__close--float:focus-visible::before, | |
| .book-card.is-ticket .book-ticket > .book-card__close--float:hover::before, | |
| .book-card.is-ticket .book-ticket > .book-card__close--float:focus-visible::before, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail:hover::before, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail:focus-visible::before, | |
| .share-preview__close:hover::before, | |
| .share-preview__close:focus-visible::before { | |
| opacity: 1 ; | |
| transition-delay: var(--close-esc-delay) ; | |
| } | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail { | |
| --close-corner-offset: 18px; | |
| } | |
| /* Final share controls placement: save sits in the bottom-center bleed area; close owns the top-right corner. */ | |
| .share-preview__topbar, | |
| .share-preview__actions { | |
| grid-area: share-stage ; | |
| position: absolute ; | |
| inset: 0 ; | |
| width: auto ; | |
| height: auto ; | |
| min-width: 0 ; | |
| min-height: 0 ; | |
| margin: 0 ; | |
| padding: 0 ; | |
| pointer-events: none ; | |
| } | |
| .share-preview__topbar { | |
| z-index: 22 ; | |
| display: block ; | |
| } | |
| .share-preview__eyebrow { | |
| display: none ; | |
| } | |
| .share-preview__actions { | |
| z-index: 21 ; | |
| display: grid ; | |
| align-items: end ; | |
| justify-items: center ; | |
| padding-bottom: 22px ; | |
| } | |
| .share-preview__save { | |
| pointer-events: auto ; | |
| } | |
| .share-preview__close { | |
| --close-corner-offset: 30px; | |
| pointer-events: none ; | |
| } | |
| .share-preview__canvas:hover .share-preview__close, | |
| .share-preview__close:hover, | |
| .share-preview__close:focus-visible { | |
| pointer-events: auto ; | |
| } | |
| /* Final city-special ticket copy: keep the issue label as one unbroken heading. */ | |
| .book-ticket.is-special-book-card .book-card__location-en, | |
| .share-preview.is-special-book-card .share-ticket .book-card__location-en, | |
| .book-card__detail-view.is-special-book-card .book-card__location-en { | |
| display: none ; | |
| } | |
| .book-ticket.is-special-book-card .book-card__location-zh, | |
| .share-preview.is-special-book-card .share-ticket .book-card__location-zh, | |
| .book-card__detail-view.is-special-book-card .book-card__location-zh { | |
| display: block ; | |
| max-width: 100% ; | |
| overflow: visible ; | |
| text-overflow: clip ; | |
| white-space: nowrap ; | |
| } | |
| /* Final unified paper shadow: ticket, share ticket, and detail card share one paper depth without gray underlays. */ | |
| .book-card.is-ticket { | |
| --unified-paper-shadow: 0 18px 44px rgba(45, 48, 43, 0.16); | |
| } | |
| .book-card.is-ticket, | |
| .book-card.is-ticket .book-card__ticket-view { | |
| position: relative ; | |
| isolation: isolate ; | |
| background: transparent ; | |
| filter: none ; | |
| box-shadow: none ; | |
| } | |
| .book-card.is-ticket .book-card__ticket-view::before { | |
| content: "" ; | |
| display: block ; | |
| position: absolute ; | |
| inset: 0 ; | |
| z-index: -1 ; | |
| pointer-events: none ; | |
| background: transparent ; | |
| box-shadow: var(--unified-paper-shadow) ; | |
| filter: none ; | |
| } | |
| .book-card.is-ticket .book-card__ticket-view::after { | |
| content: none ; | |
| display: none ; | |
| background: none ; | |
| box-shadow: none ; | |
| filter: none ; | |
| } | |
| .book-ticket, | |
| .share-ticket, | |
| #cityTooltip.is-ticket .book-ticket, | |
| #cityTooltip.has-book-stack .book-ticket, | |
| #cityTooltip.has-book-stack .book-ticket.is-selected, | |
| .book-card.is-detail .book-card__detail-view { | |
| filter: none ; | |
| box-shadow: | |
| 0 18px 44px rgba(45, 48, 43, 0.16), | |
| inset 0 1px 0 rgba(255, 255, 255, 0.58) ; | |
| } | |
| .book-ticket, | |
| .share-ticket, | |
| #cityTooltip.is-ticket .book-ticket, | |
| #cityTooltip.has-book-stack .book-ticket, | |
| #cityTooltip.has-book-stack .book-ticket.is-selected { | |
| position: relative ; | |
| z-index: 1 ; | |
| overflow: visible ; | |
| box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.58) ; | |
| } | |
| #cityTooltip.has-book-stack .book-ticket:not(.is-selected) { | |
| filter: none ; | |
| box-shadow: | |
| inset 0 1px 0 rgba(255, 255, 255, 0.42), | |
| inset 16px 0 28px rgba(29, 49, 50, 0.1) ; | |
| } | |
| .book-ticket::before, | |
| .share-ticket::before { | |
| content: "" ; | |
| display: block ; | |
| position: absolute ; | |
| inset: 0 ; | |
| z-index: -1 ; | |
| pointer-events: none ; | |
| background: transparent ; | |
| box-shadow: var(--unified-paper-shadow) ; | |
| filter: none ; | |
| } | |
| .book-ticket::after, | |
| .share-ticket::after { | |
| content: none ; | |
| display: none ; | |
| background: none ; | |
| box-shadow: none ; | |
| filter: none ; | |
| } | |
| .share-preview__canvas { | |
| --unified-paper-shadow: 0 18px 44px rgba(45, 48, 43, 0.16); | |
| } | |
| .share-preview__actions { | |
| position: relative ; | |
| } | |
| .share-preview__actions::before { | |
| content: "" ; | |
| display: block ; | |
| position: absolute ; | |
| inset: 0 ; | |
| z-index: -1 ; | |
| pointer-events: none ; | |
| background: transparent ; | |
| box-shadow: var(--unified-paper-shadow) ; | |
| filter: none ; | |
| } | |
| .share-preview__canvas .share-ticket { | |
| position: relative ; | |
| z-index: 1 ; | |
| overflow: visible ; | |
| filter: none ; | |
| box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.58) ; | |
| } | |
| .book-card.is-ticket .book-card__ticket-view::before, | |
| .book-card.is-ticket .book-card__ticket-view::after { | |
| content: none ; | |
| display: none ; | |
| filter: none ; | |
| } | |
| /* Final visible shell shadow: shadow lives outside masked ticket paper, so it cannot be clipped or gray the cover. */ | |
| .book-card.is-ticket { | |
| --unified-paper-shadow: 0 18px 44px rgba(45, 48, 43, 0.24); | |
| } | |
| .book-card.is-ticket .book-card__ticket-view { | |
| overflow: visible ; | |
| } | |
| .book-ticket-shell { | |
| flex: 0 0 auto ; | |
| position: relative ; | |
| z-index: var(--ticket-stack-z, 1) ; | |
| display: block ; | |
| margin-left: var(--ticket-stack-overlap, 0px) ; | |
| transform: | |
| translate3d( | |
| var(--ticket-stack-x, 0px), | |
| calc(var(--ticket-stack-motion-y, 0px) + var(--ticket-stack-lift, 0px)), | |
| 0 | |
| ) | |
| rotate(var(--ticket-stack-rotate, 0deg)) ; | |
| transition: | |
| margin-left 560ms cubic-bezier(0.2, 0.86, 0.18, 1), | |
| transform 560ms cubic-bezier(0.18, 0.92, 0.2, 1) ; | |
| } | |
| .book-ticket-shell > .book-ticket { | |
| position: relative ; | |
| z-index: 1 ; | |
| margin-left: 0 ; | |
| transform: none ; | |
| filter: none ; | |
| box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.58) ; | |
| } | |
| .book-ticket-shell:not(.is-selected) > .book-ticket, | |
| #cityTooltip.has-book-stack .book-ticket-shell:not(.is-selected) > .book-ticket { | |
| filter: none ; | |
| opacity: 1 ; | |
| box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.42) ; | |
| } | |
| .book-ticket-shell.is-selected::before { | |
| box-shadow: 0 20px 48px rgba(45, 48, 43, 0.26) ; | |
| } | |
| .book-ticket-shell:hover { | |
| will-change: transform ; | |
| transform: | |
| translate3d( | |
| var(--ticket-stack-x, 0px), | |
| calc(var(--ticket-stack-motion-y, 0px) + var(--ticket-stack-lift, 0px) - 2px), | |
| 0 | |
| ) | |
| rotate(var(--ticket-stack-rotate, 0deg)) ; | |
| } | |
| .book-ticket-shell.is-moving-stack, | |
| #cityTooltip.is-ticket .book-card__ticket-view.is-prepping-stack-motion .book-ticket-shell { | |
| will-change: transform ; | |
| } | |
| .book-ticket::before, | |
| .share-ticket::before { | |
| content: none ; | |
| display: none ; | |
| box-shadow: none ; | |
| } | |
| .share-ticket-shell { | |
| grid-area: share-stage ; | |
| align-self: center ; | |
| justify-self: center ; | |
| position: relative ; | |
| z-index: 1 ; | |
| display: block ; | |
| width: min(245px, 72%) ; | |
| margin: 0 ; | |
| --unified-paper-shadow: 0 18px 44px rgba(45, 48, 43, 0.24); | |
| } | |
| .share-ticket-shell > .share-ticket { | |
| position: relative ; | |
| z-index: 1 ; | |
| width: 100% ; | |
| margin: 0 ; | |
| transform: none ; | |
| filter: none ; | |
| box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.58) ; | |
| } | |
| .share-preview__actions::before { | |
| content: none ; | |
| display: none ; | |
| box-shadow: none ; | |
| filter: none ; | |
| } | |
| /* Final shaped paper shadow: no rectangular plates; the dynamic clip-path owns the ticket edge. */ | |
| .book-ticket-shell::before, | |
| .share-ticket-shell::before { | |
| content: none ; | |
| display: none ; | |
| background: transparent ; | |
| box-shadow: none ; | |
| filter: none ; | |
| } | |
| .book-ticket-shell, | |
| .share-ticket-shell { | |
| isolation: isolate ; | |
| background: transparent ; | |
| box-shadow: none ; | |
| filter: | |
| drop-shadow(0 0 18px rgba(45, 48, 43, 0.15)) | |
| drop-shadow(0 10px 28px rgba(45, 48, 43, 0.08)) ; | |
| } | |
| .book-ticket-shell > .book-ticket, | |
| .share-ticket-shell > .share-ticket, | |
| #cityTooltip.is-ticket .book-ticket, | |
| #cityTooltip.has-book-stack .book-ticket, | |
| .share-preview__canvas .share-ticket { | |
| overflow: hidden ; | |
| -webkit-mask: none ; | |
| mask: none ; | |
| filter: none ; | |
| box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.58) ; | |
| } | |
| .book-ticket-shell.is-selected, | |
| .share-ticket-shell, | |
| #cityTooltip.has-book-stack .book-ticket-shell.is-selected { | |
| filter: | |
| drop-shadow(0 0 20px rgba(45, 48, 43, 0.16)) | |
| drop-shadow(0 12px 32px rgba(45, 48, 43, 0.09)) ; | |
| } | |
| .book-ticket-shell:not(.is-selected) > .book-ticket, | |
| #cityTooltip.has-book-stack .book-ticket-shell:not(.is-selected) > .book-ticket, | |
| #cityTooltip.has-book-stack .book-ticket:not(.is-selected) { | |
| opacity: 1 ; | |
| filter: none ; | |
| box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.42) ; | |
| } | |
| .book-ticket-shell:not(.is-selected), | |
| #cityTooltip.has-book-stack .book-ticket-shell:not(.is-selected) { | |
| filter: | |
| drop-shadow(0 0 16px rgba(45, 48, 43, 0.12)) | |
| drop-shadow(0 8px 24px rgba(45, 48, 43, 0.06)) ; | |
| } | |
| #cityTooltip.has-book-stack .book-ticket-shell:not(.is-selected) > .book-ticket .book-ticket__cover, | |
| #cityTooltip.has-book-stack .book-ticket-shell:not(.is-selected) > .book-ticket .book-ticket__body, | |
| #cityTooltip.has-book-stack .book-ticket:not(.is-selected) .book-ticket__cover, | |
| #cityTooltip.has-book-stack .book-ticket:not(.is-selected) .book-ticket__body { | |
| opacity: 1 ; | |
| filter: none ; | |
| } | |
| /* Final share action placement: ticket masks must not pull the save button back into the cover. */ | |
| .share-preview__canvas .share-preview__actions { | |
| position: absolute ; | |
| inset: auto 0 -10px 0 ; | |
| z-index: 30 ; | |
| display: flex ; | |
| width: auto ; | |
| height: auto ; | |
| min-width: 0 ; | |
| min-height: 0 ; | |
| margin: 0 ; | |
| padding: 0 ; | |
| justify-content: center ; | |
| place-items: center ; | |
| pointer-events: none ; | |
| } | |
| .share-preview__canvas .share-preview__save { | |
| pointer-events: auto ; | |
| } | |
| /* Final share preview paging controls: quiet outside arrows matching detail exploration. */ | |
| .share-preview__page { | |
| position: absolute ; | |
| z-index: 24 ; | |
| grid-area: share-stage ; | |
| top: 50% ; | |
| display: inline-grid ; | |
| width: 42px ; | |
| height: 72px ; | |
| place-items: center ; | |
| padding: 0 ; | |
| border: 0 ; | |
| border-radius: 0 ; | |
| color: color-mix(in srgb, var(--book-paper-ink) 52%, transparent) ; | |
| background: transparent ; | |
| box-shadow: none ; | |
| backdrop-filter: none ; | |
| -webkit-backdrop-filter: none ; | |
| font-family: var(--font-page-control) ; | |
| font-size: 0 ; | |
| font-weight: 560 ; | |
| line-height: 1 ; | |
| letter-spacing: 0 ; | |
| opacity: 0.76 ; | |
| cursor: pointer ; | |
| transform: translateY(-50%) ; | |
| transition: color 150ms ease, opacity 150ms ease, transform 180ms ease ; | |
| } | |
| .share-preview__page::after { | |
| display: grid ; | |
| width: 42px ; | |
| height: 72px ; | |
| place-items: center ; | |
| color: currentColor ; | |
| font-size: 40px ; | |
| font-weight: 420 ; | |
| line-height: 1 ; | |
| letter-spacing: 0 ; | |
| transform: scaleY(1.08) ; | |
| transform-origin: center ; | |
| } | |
| .share-preview__page--prev { | |
| left: clamp(-120px, -9vw, -84px) ; | |
| } | |
| .share-preview__page--next { | |
| right: clamp(-120px, -9vw, -84px) ; | |
| } | |
| .share-preview__page--prev::after { | |
| content: "‹‹" ; | |
| } | |
| .share-preview__page--next::after { | |
| content: "››" ; | |
| } | |
| .share-preview__page:hover, | |
| .share-preview__page:focus-visible { | |
| color: var(--accent) ; | |
| background: transparent ; | |
| opacity: 0.92 ; | |
| outline: none ; | |
| } | |
| .share-preview__page:active { | |
| color: var(--accent) ; | |
| opacity: 0.72 ; | |
| } | |
| .share-preview__page[hidden] { | |
| display: none ; | |
| } | |
| /* Final ticket tear rules: the perforation line reaches the side cutouts. */ | |
| .book-ticket__body, | |
| .share-ticket__body { | |
| --ticket-rule-bleed: 15px; | |
| } | |
| .book-ticket .book-card__meta, | |
| .share-ticket .book-card__meta { | |
| box-sizing: border-box ; | |
| margin-right: calc(-1 * var(--ticket-rule-bleed)) ; | |
| margin-left: calc(-1 * var(--ticket-rule-bleed)) ; | |
| padding-right: var(--ticket-rule-bleed) ; | |
| padding-left: var(--ticket-rule-bleed) ; | |
| } | |
| .book-ticket[data-book-id="chn-urumqi--douban-36812669"] .book-card__meta-authors, | |
| .share-ticket[data-book-id="chn-urumqi--douban-36812669"] .book-card__meta-authors { | |
| overflow-wrap: normal ; | |
| word-break: keep-all ; | |
| white-space: nowrap ; | |
| font-size: 9.4px ; | |
| } | |
| .book-ticket[data-book-id="chn-urumqi--douban-36812669"] .book-card__meta-details, | |
| .share-ticket[data-book-id="chn-urumqi--douban-36812669"] .book-card__meta-details { | |
| font-size: 9.4px ; | |
| } | |
| /* Final share seal: a light overprint, not extra layout content. */ | |
| .share-ticket__body { | |
| position: relative ; | |
| padding-bottom: 12px ; | |
| } | |
| .share-ticket__stamp { | |
| position: static ; | |
| display: flex ; | |
| min-height: 30px ; | |
| margin-top: 8px ; | |
| padding: 9px 0 2px ; | |
| align-items: flex-end ; | |
| justify-content: flex-start ; | |
| border-top: 1px dashed color-mix(in srgb, var(--book-paper-ink) 20%, transparent) ; | |
| color: color-mix(in srgb, var(--book-paper-ink) 48%, transparent) ; | |
| font-size: 10px ; | |
| line-height: 1 ; | |
| } | |
| .share-ticket__brand { | |
| display: block ; | |
| max-width: 104px ; | |
| overflow: hidden ; | |
| white-space: nowrap ; | |
| font-family: "TicketTypewriterLocal", "LXGW WenKai Mono", "LXGW WenKai", "American Typewriter", "Courier New", monospace ; | |
| transform: translateY(-5px) ; | |
| } | |
| .share-ticket__seal { | |
| position: absolute ; | |
| right: 4px ; | |
| bottom: 6px ; | |
| z-index: 2 ; | |
| display: block ; | |
| width: 82px ; | |
| height: 84px ; | |
| object-fit: contain ; | |
| opacity: 0.42 ; | |
| mix-blend-mode: multiply ; | |
| transform: rotate(0deg) ; | |
| transform-origin: 55% 56% ; | |
| pointer-events: none ; | |
| filter: none ; | |
| } | |
| .share-ticket__serial { | |
| display: none ; | |
| } | |
| /* Final share overlay controls: keep the capsules readable and away from the ticket. */ | |
| .share-preview__canvas .share-preview__actions { | |
| inset: auto 0 -10px 0 ; | |
| } | |
| .share-preview__save { | |
| --share-control-glass: rgba(252, 248, 239, 0.34); | |
| --share-control-glass-focus: rgba(252, 248, 239, 0.42); | |
| color: color-mix(in srgb, var(--book-paper-ink) 74%, #2f4c4a 26%) ; | |
| background: | |
| linear-gradient(135deg, rgba(255, 255, 250, 0.04), rgba(248, 250, 243, 0)), | |
| var(--share-control-glass) ; | |
| background-blend-mode: normal, normal ; | |
| border-color: color-mix(in srgb, var(--accent) 34%, rgba(44, 62, 60, 0.24)) ; | |
| box-shadow: | |
| 0 14px 30px rgba(56, 67, 65, 0.09), | |
| inset 0 1px 0 rgba(255, 255, 255, 0.72), | |
| inset 0 -1px 0 rgba(255, 255, 255, 0.2) ; | |
| backdrop-filter: blur(1.6px) saturate(118%) ; | |
| -webkit-backdrop-filter: blur(1.6px) saturate(118%) ; | |
| } | |
| .share-preview__close { | |
| --share-control-glass: rgba(252, 248, 239, 0.34); | |
| --share-control-glass-focus: rgba(252, 248, 239, 0.42); | |
| --close-corner-offset: 16px; | |
| color: color-mix(in srgb, var(--book-paper-ink) 76%, #2f4c4a 24%) ; | |
| background: | |
| linear-gradient(135deg, rgba(255, 255, 250, 0.04), rgba(248, 250, 243, 0)), | |
| var(--share-control-glass) ; | |
| background-blend-mode: normal, normal ; | |
| border-color: color-mix(in srgb, var(--accent) 28%, rgba(44, 62, 60, 0.24)) ; | |
| box-shadow: | |
| 0 14px 30px rgba(56, 67, 65, 0.09), | |
| inset 0 1px 0 rgba(255, 255, 255, 0.72), | |
| inset 0 -1px 0 rgba(255, 255, 255, 0.2) ; | |
| backdrop-filter: blur(1.6px) saturate(118%) ; | |
| -webkit-backdrop-filter: blur(1.6px) saturate(118%) ; | |
| } | |
| /* Final share original title fit: keep English titles on one line in previews and exports. */ | |
| .share-ticket .book-card__title-original { | |
| box-sizing: border-box ; | |
| display: block ; | |
| max-width: 100% ; | |
| overflow: hidden ; | |
| white-space: nowrap ; | |
| text-overflow: clip ; | |
| font-size: calc(10.8px * var(--share-title-original-scale, 1)) ; | |
| line-height: 1.12 ; | |
| } | |
| /* Final unified action activation: gray controls turn into accent controls without losing their shell. */ | |
| .book-ticket .book-card__action, | |
| .share-ticket .book-card__action, | |
| .book-card.is-detail .book-card__detail-actions .book-card__action { | |
| color: color-mix(in srgb, var(--book-paper-ink) 48%, transparent) ; | |
| transition: | |
| color 150ms ease, | |
| border-color 150ms ease, | |
| background-color 150ms ease ; | |
| } | |
| .book-ticket .book-card__action-icon, | |
| .share-ticket .book-card__action-icon, | |
| .book-card.is-detail .book-card__detail-actions .book-card__action-icon { | |
| color: currentColor ; | |
| stroke: currentColor ; | |
| } | |
| .book-ticket .book-card__action:hover, | |
| .book-ticket .book-card__action:focus-visible, | |
| .share-ticket .book-card__action:hover, | |
| .share-ticket .book-card__action:focus-visible, | |
| .book-card.is-detail .book-card__detail-actions .book-card__action:hover, | |
| .book-card.is-detail .book-card__detail-actions .book-card__action:focus-visible { | |
| color: var(--accent) ; | |
| outline: none ; | |
| } | |
| .book-ticket .book-card__action:hover .book-card__action-icon, | |
| .book-ticket .book-card__action:focus-visible .book-card__action-icon, | |
| .share-ticket .book-card__action:hover .book-card__action-icon, | |
| .share-ticket .book-card__action:focus-visible .book-card__action-icon, | |
| .book-card.is-detail .book-card__detail-actions .book-card__action:hover .book-card__action-icon, | |
| .book-card.is-detail .book-card__detail-actions .book-card__action:focus-visible .book-card__action-icon { | |
| color: var(--accent) ; | |
| stroke: currentColor ; | |
| } | |
| .book-card.is-ticket .book-ticket > .book-card__close--float, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail, | |
| .share-preview__close { | |
| --close-logo-ink: color-mix(in srgb, var(--book-paper-ink) 58%, transparent); | |
| } | |
| .book-card.is-ticket .book-ticket > .book-card__close--float:hover, | |
| .book-card.is-ticket .book-ticket > .book-card__close--float:focus-visible, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail:hover, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail:focus-visible, | |
| .share-preview__close:hover, | |
| .share-preview__close:focus-visible { | |
| --close-logo-ink: var(--accent); | |
| color: var(--accent) ; | |
| border-color: color-mix(in srgb, var(--accent) 46%, rgba(44, 62, 60, 0.2)) ; | |
| background: | |
| linear-gradient(135deg, color-mix(in srgb, var(--accent) 10%, rgba(255, 255, 250, 0.08)), rgba(248, 250, 243, 0.02)), | |
| var(--share-control-glass-focus) ; | |
| outline: none ; | |
| } | |
| .share-preview__save { | |
| color: color-mix(in srgb, var(--book-paper-ink) 60%, transparent) ; | |
| background: | |
| linear-gradient(135deg, rgba(255, 255, 250, 0.04), rgba(248, 250, 243, 0)), | |
| var(--share-control-glass) ; | |
| background-blend-mode: normal, normal ; | |
| border-color: color-mix(in srgb, var(--accent) 34%, rgba(44, 62, 60, 0.22)) ; | |
| } | |
| .share-preview__save:hover, | |
| .share-preview__save:focus-visible { | |
| color: var(--accent) ; | |
| background: | |
| linear-gradient(135deg, color-mix(in srgb, var(--accent) 10%, rgba(255, 255, 250, 0.08)), rgba(248, 250, 243, 0.02)), | |
| var(--share-control-glass-focus) ; | |
| border-color: color-mix(in srgb, var(--accent) 52%, rgba(44, 62, 60, 0.2)) ; | |
| outline: none ; | |
| } | |
| /* Final share preview paging controls: tiny outside arrows, not layout boxes. */ | |
| .share-preview__page { | |
| position: absolute ; | |
| z-index: 24 ; | |
| grid-area: share-stage ; | |
| top: 50% ; | |
| display: inline-grid ; | |
| width: 42px ; | |
| height: 72px ; | |
| place-items: center ; | |
| padding: 0 ; | |
| border: 0 ; | |
| border-radius: 0 ; | |
| color: color-mix(in srgb, var(--book-paper-ink) 52%, transparent) ; | |
| background: transparent ; | |
| box-shadow: none ; | |
| backdrop-filter: none ; | |
| -webkit-backdrop-filter: none ; | |
| font-family: var(--font-page-control) ; | |
| font-size: 0 ; | |
| font-weight: 560 ; | |
| line-height: 1 ; | |
| letter-spacing: 0 ; | |
| opacity: 0.76 ; | |
| cursor: pointer ; | |
| transform: translateY(-50%) ; | |
| transition: color 150ms ease, opacity 150ms ease, transform 180ms ease ; | |
| } | |
| .share-preview__page::after { | |
| display: grid ; | |
| width: 42px ; | |
| height: 72px ; | |
| place-items: center ; | |
| color: currentColor ; | |
| font-size: 40px ; | |
| font-weight: 420 ; | |
| line-height: 1 ; | |
| letter-spacing: 0 ; | |
| transform: scaleY(1.08) ; | |
| transform-origin: center ; | |
| } | |
| .share-preview__page--prev { | |
| left: clamp(-120px, -9vw, -84px) ; | |
| } | |
| .share-preview__page--next { | |
| right: clamp(-120px, -9vw, -84px) ; | |
| } | |
| .share-preview__page--prev::after { | |
| content: "‹‹" ; | |
| } | |
| .share-preview__page--next::after { | |
| content: "››" ; | |
| } | |
| .share-preview__page:hover, | |
| .share-preview__page:focus-visible { | |
| color: var(--accent) ; | |
| opacity: 0.92 ; | |
| outline: none ; | |
| } | |
| .share-preview__page:active { | |
| color: var(--accent) ; | |
| opacity: 0.72 ; | |
| } | |
| .share-preview__page[hidden] { | |
| display: none ; | |
| } | |
| /* Final share screenshot controls: leave the canvas clean unless the reader is inside it. */ | |
| .share-preview__canvas .share-preview__save, | |
| .share-preview__close { | |
| opacity: 0 ; | |
| pointer-events: none ; | |
| } | |
| .share-preview__save { | |
| transform: translateY(4px) ; | |
| transition: | |
| opacity 180ms ease, | |
| transform 180ms ease, | |
| color 150ms ease, | |
| border-color 150ms ease, | |
| background 150ms ease ; | |
| } | |
| .share-preview__close { | |
| transform: translateY(-2px) ; | |
| transition: | |
| opacity 180ms ease, | |
| transform 180ms ease, | |
| background 150ms ease, | |
| border-color 150ms ease ; | |
| } | |
| .share-preview.has-share-controls .share-preview__save, | |
| .share-preview.has-share-controls .share-preview__close, | |
| .share-preview__save:hover, | |
| .share-preview__save:focus-visible, | |
| .share-preview__close:hover, | |
| .share-preview__close:focus-visible { | |
| opacity: 1 ; | |
| pointer-events: auto ; | |
| } | |
| .share-preview.has-share-controls .share-preview__save, | |
| .share-preview__save:hover, | |
| .share-preview__save:focus-visible { | |
| transform: none ; | |
| } | |
| .share-preview.has-share-controls .share-preview__close, | |
| .share-preview__close:hover, | |
| .share-preview__close:focus-visible { | |
| transform: none ; | |
| } | |
| /* A page change keeps the reading surface clean until the pointer enters the ticket again. */ | |
| .share-preview.share-controls-muted .share-preview__save, | |
| .share-preview.share-controls-muted .share-preview__close { | |
| opacity: 0 ; | |
| pointer-events: none ; | |
| } | |
| /* Final search/bookmark close timing parity: ticket and detail share the same glyph handoff. */ | |
| .book-card.is-ticket .book-card__ticket-view > .book-card__close--float, | |
| .book-card.is-ticket .book-ticket > .book-card__close--float, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail { | |
| --close-reveal-delay: 0ms ; | |
| --close-esc-delay: 820ms ; | |
| transition: | |
| opacity 180ms ease, | |
| transform 180ms ease, | |
| background 150ms ease, | |
| border-color 150ms ease, | |
| color 150ms ease ; | |
| transition-delay: 0ms ; | |
| } | |
| .book-card.is-ticket .book-card__ticket-view > .book-card__close--float::after, | |
| .book-card.is-ticket .book-ticket > .book-card__close--float::after, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail::after { | |
| opacity: 1 ; | |
| transition-delay: 0ms ; | |
| } | |
| .book-card.is-ticket .book-card__ticket-view > .book-card__close--float::before, | |
| .book-card.is-ticket .book-ticket > .book-card__close--float::before, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail::before { | |
| opacity: 0 ; | |
| transition-delay: 0ms ; | |
| } | |
| .book-card.is-ticket .book-card__ticket-view > .book-card__close--float:hover::after, | |
| .book-card.is-ticket .book-card__ticket-view > .book-card__close--float:focus-visible::after, | |
| .book-card.is-ticket .book-ticket > .book-card__close--float:hover::after, | |
| .book-card.is-ticket .book-ticket > .book-card__close--float:focus-visible::after, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail:hover::after, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail:focus-visible::after { | |
| opacity: 0 ; | |
| transition-delay: var(--close-esc-delay) ; | |
| } | |
| .book-card.is-ticket .book-card__ticket-view > .book-card__close--float:hover::before, | |
| .book-card.is-ticket .book-card__ticket-view > .book-card__close--float:focus-visible::before, | |
| .book-card.is-ticket .book-ticket > .book-card__close--float:hover::before, | |
| .book-card.is-ticket .book-ticket > .book-card__close--float:focus-visible::before, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail:hover::before, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail:focus-visible::before { | |
| opacity: 1 ; | |
| transition-delay: var(--close-esc-delay) ; | |
| } | |
| .book-card.is-ticket .book-card__ticket-view > .book-card__close--float:hover, | |
| .book-card.is-ticket .book-card__ticket-view > .book-card__close--float:focus-visible, | |
| .book-card.is-ticket .book-ticket > .book-card__close--float:hover, | |
| .book-card.is-ticket .book-ticket > .book-card__close--float:focus-visible, | |
| .book-card.is-detail .book-card__detail-view:hover > .book-card__close--detail, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail:hover, | |
| .book-card.is-detail .book-card__detail-view > .book-card__close--detail:focus-visible { | |
| transition-delay: 0ms ; | |
| } | |
| /* Cover-ready reveal: compact tickets stay whole; cover preloading reduces wait. */ | |
| .book-ticket-shell.is-cover-pending, | |
| .share-ticket-shell.is-cover-pending, | |
| .book-ticket.is-cover-pending, | |
| .share-ticket.is-cover-pending { | |
| opacity: 0 ; | |
| pointer-events: none ; | |
| } | |
| .book-ticket__cover img, | |
| .share-ticket__cover img { | |
| transition: opacity 180ms ease ; | |
| } | |
| .book-ticket-shell.is-entering { | |
| opacity: 0 ; | |
| pointer-events: none ; | |
| transform: | |
| translate3d( | |
| calc(var(--ticket-stack-x, 0px) - 10px), | |
| calc(var(--ticket-stack-motion-y, 0px) + var(--ticket-stack-lift, 0px) - 14px), | |
| 0 | |
| ) | |
| rotate(var(--ticket-stack-rotate, 0deg)) | |
| scale(0.985) ; | |
| } | |
| .book-ticket-shell.is-entering.is-reveal-ready { | |
| pointer-events: auto ; | |
| animation: book-ticket-shell-enter 540ms cubic-bezier(0.18, 0.9, 0.18, 1) both ; | |
| animation-delay: var(--ticket-enter-delay, 0ms) ; | |
| } | |
| .book-ticket-shell, | |
| .share-ticket-shell { | |
| transition: | |
| opacity 190ms ease, | |
| margin-left 560ms cubic-bezier(0.2, 0.86, 0.18, 1), | |
| transform 560ms cubic-bezier(0.18, 0.92, 0.2, 1) ; | |
| } | |
| .book-ticket, | |
| .share-ticket, | |
| .book-card__detail-view { | |
| transition: | |
| opacity 190ms ease, | |
| transform 260ms cubic-bezier(0.2, 0.9, 0.2, 1), | |
| filter 260ms ease ; | |
| } | |
| @media (prefers-reduced-motion: reduce) { | |
| .book-ticket-shell.is-entering, | |
| .book-ticket-shell.is-entering.is-reveal-ready { | |
| opacity: 1 ; | |
| pointer-events: auto ; | |
| animation: none ; | |
| transform: | |
| translate3d( | |
| var(--ticket-stack-x, 0px), | |
| calc(var(--ticket-stack-motion-y, 0px) + var(--ticket-stack-lift, 0px)), | |
| 0 | |
| ) | |
| rotate(var(--ticket-stack-rotate, 0deg)) ; | |
| } | |
| } | |