/* NFC hand-off: translate or inspect the same card, with a full-bleed App screen. */
.nfc-card-controls{gap:24px;justify-content:center;flex-wrap:wrap}
.nfc-gesture-modes{display:flex;gap:24px;align-items:center}
.nfc-gesture-modes button{position:relative;padding:8px 0;border-bottom:1px solid transparent}
.nfc-gesture-modes button[aria-pressed="true"]{color:var(--cyan);border-bottom-color:currentColor}
.nfc-card-controls button:focus-visible{outline:2px solid var(--cyan);outline-offset:4px}
.nfc-gesture-modes span{margin-left:4px}
.nfc-handoff-status{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}
.nfc-card-mover[data-card-gesture="move"]{touch-action:none;cursor:grab}
.nfc-card-mover[data-card-gesture="move"] #nfc-card-model canvas{touch-action:none!important;cursor:grab!important}
.nfc-card-mover.is-dragging,.nfc-card-mover.is-dragging #nfc-card-model canvas{cursor:grabbing!important;will-change:transform}
.nfc-card-mover.is-dragging{pointer-events:auto;user-select:none}
.nfc-phone.is-drop-target .device-island{border-color:var(--cyan);transition:border-color .2s,box-shadow .2s}
.nfc-phone.is-card-near .device-island{box-shadow:0 0 0 3px rgba(24,191,208,.16)}
.nfc-phone-screen{aspect-ratio:1/2}
.nfc-phone .nfc-media{inset:0}
.nfc-phone .nfc-media video,.nfc-phone .nfc-media-poster{width:100%;height:100%;object-fit:contain}
.nfc-phone:is([data-state="opening"],[data-state="playing"],[data-state="paused"],[data-state="buffering"],[data-state="ended"],[data-state="error"]) .device-island{opacity:0;pointer-events:none}
@media(max-width:699px){.nfc-card-controls{gap:16px;font-size:12px}.nfc-gesture-modes{gap:16px}.nfc-card-controls button{min-height:44px}.nfc-phone-column{width:min(100%,300px,calc((100svh - var(--nav) - 180px)*.48))}}
@media(prefers-reduced-motion:reduce){.nfc-phone.is-drop-target .device-island{transition:none}}

/* The detected card invites one explicit tap; opening the record removes the cue. */
.nfc-notification{isolation:isolate}
.nfc-notification::before{content:"";position:absolute;inset:-1px;border:1.5px solid var(--cyan);border-radius:inherit;box-shadow:0 0 6px rgba(24,191,208,.95),0 0 22px rgba(24,191,208,.68),0 0 36px rgba(24,191,208,.32),inset 0 0 16px rgba(24,191,208,.2);opacity:0;pointer-events:none}
.nfc-tap-guide{position:absolute;right:24px;top:calc(100% - 8px);width:36px;height:48px;pointer-events:none;opacity:0;transform:translateY(6px) rotate(-14deg);transform-origin:40% 8%}
.nfc-tap-guide svg{width:100%;height:100%;overflow:visible}
.nfc-tap-hand{fill:var(--paper);stroke:var(--ink);stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round}
.nfc-tap-target{stroke:var(--cyan);stroke-width:1.5;fill:none}
.nfc-phone[data-state="notified"] .nfc-notification::before{animation:nfc-notice-breathe 2.6s ease-in-out .4s infinite both}
.nfc-phone[data-state="notified"] .nfc-tap-guide{animation:nfc-finger-breathe 2.6s ease-in-out .4s infinite both}
@keyframes nfc-notice-breathe{0%,100%{opacity:.45}50%{opacity:1}}
@keyframes nfc-finger-breathe{0%,100%{opacity:.45;transform:translateY(6px) rotate(-14deg)}50%{opacity:1;transform:translateY(0) rotate(-14deg)}}
@media(prefers-reduced-motion:reduce){.nfc-phone[data-state="notified"] .nfc-notification::before{animation:none;opacity:.65}.nfc-phone[data-state="notified"] .nfc-tap-guide{animation:none;opacity:1;transform:rotate(-14deg)}}

/* One click presents the entire NFC-to-passport sequence; free dragging stays manual. */
.nfc-detect-button{background:var(--cyan);color:var(--ink);font-weight:500;border-color:var(--cyan);box-shadow:0 0 20px rgba(24,191,208,.18);transition:background .2s,box-shadow .2s,opacity .2s}
.nfc-detect-button:hover:not(:disabled){background:var(--cyan);color:var(--ink);box-shadow:0 0 28px rgba(24,191,208,.4)}
.nfc-detect-button:focus-visible{outline:2px solid var(--paper);outline-offset:5px}
.nfc-detect-button:disabled{opacity:.62;box-shadow:none}
