/* =========================== Global overlay scaffolding =========================== */ #xr-overlay-root { position: fixed; inset: 0; z-index: 9999; /* Above site chrome */ pointer-events: none; /* Let underlying elements receive events unless explicitly enabled */ } /* Message toast (bottom center) */ .pc-ar-msg { position: fixed; left: 50%; transform: translateX(-50%); bottom: 16px; z-index: 2; padding: 10px 14px; background: rgba(0, 0, 0, 0.65); color: #fff; border-radius: 12px; font-family: system-ui, -apple-system, Segoe UI, Roboto, sans-serif; font-size: 14px; line-height: 1.3; text-align: center; max-width: min(90vw, 640px); box-shadow: 0 6px 20px rgba(0, 0, 0, 0.25); backdrop-filter: blur(4px); pointer-events: none; /* Non-clickable */ user-select: none; } /* =========================== AR Launch Button =========================== */ #ar-launch-btn { position: fixed; left: 50%; transform: translateX(-50%); bottom: 72px; /* Sits above the message toast */ z-index: 10001; pointer-events: auto; appearance: none; border: none; border-radius: 14px; padding: 12px 18px; font-family: system-ui, -apple-system, Segoe UI, Roboto, sans-serif; font-size: 15px; font-weight: 600; color: #fff; background: rgba(0, 0, 0, 0.85); box-shadow: 0 6px 18px rgba(0,0,0,.25); backdrop-filter: blur(6px); cursor: pointer; touch-action: manipulation; -webkit-tap-highlight-color: transparent; } #ar-launch-btn:active { transform: translateX(-50%) scale(0.98); } #ar-launch-btn:disabled { opacity: 0.5; cursor: not-allowed; } /* Hidden anchor used for iOS Quick Look trigger (kept invisible) */ #ios-quicklook-anchor { position: absolute !important; width: 1px !important; height: 1px !important; overflow: hidden !important; clip-path: inset(50%) !important; pointer-events: none !important; } /* =========================== Vertical Rotation Slider UI =========================== */ /* Panel container */ .ar-ui { position: absolute; /* inside #xr-overlay-root space */ right: 12px; top: 50%; transform: translateY(-50%); z-index: 10000; pointer-events: auto; /* Make this panel interactive */ display: flex; flex-direction: column; align-items: center; gap: 8px; width: 56px; padding: 12px 10px; border-radius: 16px; font-family: system-ui, -apple-system, Segoe UI, Roboto, sans-serif; color: #fff; background: rgba(0, 0, 0, 0.55); box-shadow: 0 6px 18px rgba(0,0,0,.25); backdrop-filter: blur(6px); touch-action: none; /* Prevent page scroll while sliding */ -webkit-tap-highlight-color: transparent; user-select: none; } .ar-ui .label { font-size: 12px; text-align: center; opacity: 0.95; } /* Big touch area for the slider */ .rotY-wrap { position: relative; width: 48px; height: 200px; display: flex; align-items: center; justify-content: center; /* Critical: ensure slider grabs interactions and blocks scene drag beneath */ pointer-events: auto; touch-action: none; overflow: visible; } /* The vertical rail (full height) */ .rotY-rail { position: absolute; left: 50%; transform: translateX(-50%); width: 4px; height: 100%; background: rgba(255, 255, 255, 0.35); border-radius: 2px; pointer-events: none; /* visual only */ } /* The knob — centered on the rail */ .rotY-knob { position: absolute; left: 50%; transform: translate(-50%, -50%); /* perfectly centered */ top: 50%; width: 24px; height: 24px; border-radius: 50%; background: #ffffff; box-shadow: 0 2px 8px rgba(0,0,0,.35); will-change: top; pointer-events: none; /* moved by JS, wrapper handles input */ } /* Input range is hidden (we use it only to store the numeric value) */ .ar-ui input[type="range"].rotY { position: absolute; opacity: 0; pointer-events: none; width: 0; height: 0; } /* Degree label below slider */ .ar-ui .val { font-size: 12px; opacity: 0.95; } /* =========================== Optional: container hints =========================== */ /* If you mount the canvas in a custom container (e.g., #my-ar), you can set a min height */ #ar-mount-fallback { position: relative; width: 100%; min-height: 70vh; /* can be overridden inline on your site */ touch-action: manipulation; -webkit-tap-highlight-color: transparent; } /* Make sure the canvas fills its mount container */ #ar-mount-fallback > #application-canvas, #application-canvas { position: absolute; inset: 0; width: 100%; height: 100%; display: block; }