/* Zephyy orb docks on the Printmon pages: over the Doshus.NET button on each theme page
   (printmon-dock) and in the gallery hero (gallery-dock). Loads after zephyy-orb-embed.css,
   whose base orb it re-positions; only the Printmon pages link it */

/* Orb-over-button dock (CDP-verified on the live page 2026-07-16): the dock
   wraps the button in flow — so the button stays baseline-aligned with its
   siblings — and the orb floats ABSOLUTELY above it. Absolute overflow above
   a scroller is clipped, never scrolled (the buttons' own tooltips already
   live in that padding zone); only below-the-row boxes grow a scrollbar,
   which is why every under-button attempt failed. */
.zephyy-orb-dock {
    position: relative;
    display: inline-block;
}
.zephyy-orb-sitewide-wrapper.printmon-dock {
    position: relative;
    display: inline-flex;
    vertical-align: middle;
    margin-left: 8px;
    top: auto;
    bottom: auto;
    left: auto;
    right: auto;
    transform: none;
}
/* Strip pages: orb centered above the button. Centering uses a margin, not
   translateX — any transform here becomes the containing block for the
   tip's position:fixed lift and rebreaks it. */
.zephyy-orb-dock .zephyy-orb-sitewide-wrapper.printmon-dock {
    position: absolute;
    bottom: calc(100% + 2px);
    left: 50%;
    margin-left: -12px; /* half the 24px core */
}
.zephyy-orb-sitewide-wrapper.printmon-dock .zephyy-orb-sitewide {
    opacity: 1;
}
/* Hover growth moves to the core: the shared :hover scale on
   .zephyy-orb-sitewide (the tip's parent) made it the tip's fixed-position
   containing block — the "fixed" tip then rendered inside the strip
   scroller: off-screen AND growing a phantom vertical scrollbar. */
.zephyy-orb-sitewide-wrapper.printmon-dock .zephyy-orb-sitewide:hover,
.zephyy-orb-sitewide-wrapper.printmon-dock .zephyy-orb-sitewide:focus-visible {
    transform: none;
}
.zephyy-orb-sitewide-wrapper.printmon-dock .zephyy-orb-sitewide:hover .sitewide-orb-core,
.zephyy-orb-sitewide-wrapper.printmon-dock .zephyy-orb-sitewide:focus-visible .sitewide-orb-core {
    transform: scale(1.12);
}
.zephyy-orb-sitewide-wrapper.printmon-dock .sitewide-orb-core {
    width: 24px;
    height: 24px;
}
.zephyy-orb-sitewide-wrapper.printmon-dock .sitewide-orb-preview {
    /* display-gated: even an invisible absolute box makes the strip's
       overflow-x scroller misbehave. On strip pages swap-img.js lifts the
       tip to position:fixed (fixed boxes never create scroll overflow);
       classics show it absolutely above the orb, un-clipped. */
    display: none;
    position: absolute;
    bottom: calc(100% + 8px);
    left: 50%;
    transform: translateX(-50%);
    /* One line, always: sized to the quip, capped at the viewport, ellipsis
       if a quip ever outgrows a narrow phone */
    white-space: nowrap;
    width: max-content;
    max-width: calc(100vw - 16px);
    overflow: hidden;
    text-overflow: ellipsis;
    text-align: center;
    font-family: "Amazon Ember", sans-serif; /* the internal Printmon site's own font, not hostable here */
}
.zephyy-orb-sitewide-wrapper.printmon-dock .zephyy-orb-sitewide:focus-visible .sitewide-orb-preview {
    display: block;
    opacity: 1;
    visibility: visible;
}
/* Mouse-only: on touch, sticky :hover kept re-showing this absolute
   fallback after the JS lift reset — clipped tip + phantom vertical
   scrollbar. Touch devices get the tip solely via swap-img.js. */
@media (hover: hover) {
    .zephyy-orb-sitewide-wrapper.printmon-dock .zephyy-orb-sitewide:hover .sitewide-orb-preview {
        display: block;
        opacity: 1;
        visibility: visible;
    }
}

/* ── Gallery hero dock (gallery.html only): big in-flow orb beside the
   headline that opens the chat panel. Static — none of the fixed/collapsed
   orbit states apply — with the caption always visible as the invite. ── */
.zephyy-orb-sitewide-wrapper.gallery-dock {
    position: static;
    align-self: center;
    flex: 1 1 140px;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    z-index: 1;
}
/* Chat expands in-flow right under the orb — not the floating overlay.
   display-gated so the closed panel takes no hero space (the base panel
   is position:fixed and hides via opacity/pointer-events alone). */
.zephyy-orb-sitewide-wrapper.gallery-dock .zp-chat-panel {
    display: none;
    position: static;
    width: min(480px, 100%);
    height: 420px;
    max-height: 65vh;
    transform: none;
    margin-top: 0.9rem;
}
.zephyy-orb-sitewide-wrapper.gallery-dock .zp-chat-panel.open {
    display: flex;
    transform: none;
}
.zephyy-orb-sitewide-wrapper.gallery-dock .zephyy-orb-sitewide {
    flex-direction: column;
    gap: 0.7rem;
    opacity: 1;
}
.zephyy-orb-sitewide-wrapper.gallery-dock .sitewide-orb-core {
    width: 96px;
    height: 96px;
    box-shadow: 0 0 26px oklch(38% 0.17 300 / 0.55);
}
.zephyy-orb-sitewide-wrapper.gallery-dock .sitewide-orb-preview {
    opacity: 1;
    visibility: visible;
    transform: none;
}
@media (max-width: 768px) {
    .zephyy-orb-sitewide-wrapper.gallery-dock .sitewide-orb-core {
        width: 72px;
        height: 72px;
    }
}
