:root{--blush: #f9dce6;--blush-deep: #f4c3d4;--blush-soft: #fbe9ef;--plum: #4a1832;--plum-dark: #2e0c1e;--plum-muted: #6b3a52;--rose: #a23e6b;--petal: #ffd1df;--white: #ffffff;--sans: "Bricolage Grotesque", system-ui, sans-serif;--hand: "Caveat", cursive;--top: max(16px, env(safe-area-inset-top));--bottom: max(24px, env(safe-area-inset-bottom))}*{box-sizing:border-box}[hidden]{display:none!important}html,body{margin:0;height:100%;background:var(--blush);color:var(--plum);font-family:var(--sans);-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:transparent;overscroll-behavior:none}button{font:inherit;color:inherit;cursor:pointer}button:focus-visible{outline:3px solid var(--rose);outline-offset:3px}#app{position:relative;width:100%;height:100dvh;overflow:hidden}.opening,.camera,.blocked{position:absolute;inset:0;display:none}#app[data-screen=open] .opening,#app[data-screen=starting] .opening{display:flex}#app[data-screen=camera] .camera{display:block}#app[data-screen=blocked] .blocked{display:flex}.source-video{position:fixed;width:1px;height:1px;left:0;top:0;opacity:0;pointer-events:none}.blob{position:absolute;border-radius:50%;pointer-events:none}.blob--a{left:-60px;top:-80px;width:260px;height:260px;background:var(--blush-deep)}.blob--b{right:-90px;top:36%;width:220px;height:220px;background:var(--blush-soft)}.btn{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:10px;min-height:54px;padding:0 24px;border:0;border-radius:18px;font-size:17px;font-weight:500;transition:transform .08s ease,box-shadow .08s ease,background-color .2s ease}.btn:active{transform:translateY(3px)}.btn--primary{background:var(--plum);color:#fde8ef;box-shadow:0 6px 0 var(--plum-dark)}.btn--primary:active{box-shadow:0 3px 0 var(--plum-dark)}.btn--link{min-height:44px;background:transparent;color:var(--plum);font-size:15px;text-decoration:underline;text-underline-offset:3px}.spinner{display:none;width:18px;height:18px;border-radius:50%;border:2.5px solid rgba(253,232,239,.35);border-top-color:#fde8ef;animation:spin .9s linear infinite}.opening{flex-direction:column;align-items:center;justify-content:center;padding:var(--top) 24px var(--bottom);text-align:center}.polaroid{position:relative;margin:0;width:min(248px,62vw);padding:12px 12px 54px;background:var(--white);box-shadow:0 16px 34px #4a183233;transform-origin:50% 0;animation:sway 5s ease-in-out infinite}.polaroid img{display:block;width:100%;height:auto;aspect-ratio:224 / 262;object-fit:cover;object-position:50% 20%}.polaroid figcaption{position:absolute;left:0;right:0;bottom:12px;font-family:var(--hand);font-size:26px;color:var(--rose)}.tape{position:absolute;left:50%;top:-14px;width:92px;height:28px;margin-left:-46px;background:#fff0c8bf;transform:rotate(3deg)}.opening h1{position:relative;margin:clamp(28px,6vh,44px) 0 0;font-size:clamp(30px,8.7vw,36px);font-weight:700;line-height:1.08;letter-spacing:-.5px}.lede{position:relative;max-width:300px;margin:14px 0 0;font-size:15px;line-height:1.5;color:var(--plum-muted)}#open-camera{margin-top:30px;width:min(300px,100%);height:58px}.note{position:relative;margin:18px 0 0;font-size:13px;color:var(--plum-muted)}#app[data-screen=starting] #open-camera{background:var(--plum-muted);cursor:default}#app[data-screen=starting] #open-camera .spinner{display:block}#app[data-screen=starting] #open-camera .btn__icon{display:none}.camera{background:#2a1a20}.ar{position:absolute;inset:0;overflow:hidden;isolation:isolate}.ar video,.ar canvas{pointer-events:none}.frame{position:absolute;left:50%;top:50%;width:min(72vw,300px);aspect-ratio:1 / 2;max-height:64vh;transform:translate(-50%,-54%);border-radius:28px;border:3px dashed var(--petal);pointer-events:none;opacity:0;transition:opacity .3s ease}#app[data-cam=scanning] .frame{opacity:1;animation:breathe 2.4s ease-in-out infinite}.topbar{position:absolute;left:16px;right:16px;top:var(--top);display:flex;justify-content:space-between;z-index:2}.icon-btn{display:flex;align-items:center;justify-content:center;width:48px;height:48px;border:0;border-radius:16px;background:var(--white);color:var(--plum);box-shadow:0 4px #4a183259;transition:transform .08s ease,box-shadow .08s ease}.icon-btn:active{transform:translateY(3px);box-shadow:0 1px #4a183259}#sound .icon-off{display:none}#sound[aria-pressed=true]{background:var(--blush);color:var(--rose)}#sound[aria-pressed=true] .icon-on{display:none}#sound[aria-pressed=true] .icon-off{display:block}.center{position:absolute;left:50%;top:44%;transform:translate(-50%,-50%);z-index:2}.tap{display:none}#app[data-cam=tap] .tap{display:flex;flex-direction:column;align-items:center;gap:12px;animation:pop .35s ease-out}.tap{position:relative}.tap__ring,.tap__btn{width:84px;height:84px;border-radius:26px}.tap__ring{position:absolute;top:0;border:3px solid var(--white);animation:ring 1.8s ease-out infinite}.tap__btn{position:relative;display:flex;align-items:center;justify-content:center;border:0;background:var(--white);color:var(--rose);box-shadow:0 6px #0000004d;transition:transform .08s ease}.tap__btn:active{transform:translateY(3px)}.tap__label,.hint{font-family:var(--hand);color:var(--white);text-shadow:0 2px 8px rgba(0,0,0,.55)}.tap__label{font-size:28px}.bottom{position:absolute;left:16px;right:16px;bottom:var(--bottom);display:flex;flex-direction:column;align-items:center;gap:10px;z-index:2;pointer-events:none}.pill{min-width:230px;max-width:100%;padding:13px 20px;border-radius:18px;background:var(--white);box-shadow:0 4px #4a183259;font-size:15px;font-weight:500;transition:background-color .2s ease}#app[data-cam=paused] .pill{background:var(--blush)}#app[data-cam=error] .pill{visibility:hidden}.pill__row{display:flex;align-items:center;justify-content:center;gap:12px}.pill__icon{display:inline-flex;align-items:center}.hint{margin:0;font-size:22px;display:none}#app[data-cam=scanning] .hint{display:block}.dots{display:flex;gap:4px}.dots i{width:7px;height:7px;border-radius:4px;background:var(--rose);animation:dot 1.2s ease-in-out infinite}.dots i:nth-child(2){animation-delay:.15s}.dots i:nth-child(3){animation-delay:.3s}.live{width:9px;height:9px;border-radius:5px;background:var(--rose);animation:pulse 1.6s ease-in-out infinite}.mini-spin{width:16px;height:16px;border-radius:50%;border:2.5px solid rgba(162,62,107,.25);border-top-color:var(--rose);animation:spin .9s linear infinite}.scrim,.sheet{display:none}#app[data-cam=error] .scrim{display:block;position:absolute;inset:0;background:#2a1a208c;z-index:3}#app[data-cam=error] .sheet{display:flex;position:absolute;left:16px;right:16px;bottom:var(--bottom);z-index:4;animation:sheet .3s ease-out}.sheet,.card{flex-direction:column;gap:12px;padding:26px 24px 16px;border-radius:28px;background:var(--white);box-shadow:0 8px #00000040}.sheet h2,.card h2{margin:0;font-size:22px;line-height:1.15;outline:none}.sheet p,.card>p{margin:0;font-size:15px;line-height:1.45;color:var(--plum-muted)}.sheet__icon{display:flex;align-items:center;justify-content:center;width:56px;height:56px;border-radius:18px;background:var(--blush);color:var(--rose)}.blocked{align-items:center;padding:var(--top) 20px var(--bottom)}.card{position:relative;display:flex;width:100%;max-width:420px;margin:0 auto;animation:sheet .3s ease-out}.steps{display:flex;flex-direction:column;gap:10px;padding:14px 16px;border-radius:16px;background:#fbeef3;font-size:14px;line-height:1.4}.steps p{margin:0}.steps[hidden]{display:none}@keyframes sway{0%,to{transform:rotate(-4deg)}50%{transform:rotate(-2.5deg)}}@keyframes spin{to{transform:rotate(360deg)}}@keyframes dot{0%,80%,to{transform:translateY(0)}40%{transform:translateY(-4px)}}@keyframes pulse{0%,to{opacity:1}50%{opacity:.35}}@keyframes breathe{0%,to{transform:translate(-50%,-54%) scale(1);opacity:.9}50%{transform:translate(-50%,-54%) scale(1.025);opacity:.5}}@keyframes ring{0%{transform:scale(1);opacity:.7}to{transform:scale(1.6);opacity:0}}@keyframes pop{0%{opacity:0;transform:scale(.6)}70%{transform:scale(1.06)}to{opacity:1;transform:scale(1)}}@keyframes sheet{0%{opacity:0;transform:translateY(40px)}to{opacity:1;transform:translateY(0)}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition:none!important}}.playback-source{position:fixed;top:-10px;left:-10px;width:1px;height:1px;opacity:0;pointer-events:none}
