:root{color-scheme:dark;--snap-yellow: #fffc00}*{box-sizing:border-box}html,body,#root{margin:0;height:100%;background:#000;font-family:system-ui,-apple-system,sans-serif;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none;overscroll-behavior:none}.app{position:relative;width:100%;height:100%;overflow:hidden}.canvas-container,.canvas-container canvas{width:100%;height:100%}.canvas-container canvas{object-fit:cover;display:block}.loading{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;height:100%;padding:24px;color:#fff;font-size:1.05rem;text-align:center}.loading p{margin:0}.loading__detail{max-width:34ch;color:#ffffff8c;font-size:.85rem;line-height:1.45}.loading__spinner{width:34px;height:34px;border-radius:50%;border:3px solid rgba(255,255,255,.2);border-top-color:var(--snap-yellow);animation:spin .9s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.camera-error{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);max-width:80%;padding:18px 22px;border-radius:14px;background:#000000bf;color:#fff;text-align:center}.camera-error p{margin:0 0 6px}.camera-error__detail{color:#fff9;font-size:.82rem}.controls{position:absolute;left:0;right:0;bottom:0;padding:16px 12px calc(16px + env(safe-area-inset-bottom));display:flex;flex-direction:column;align-items:center;gap:14px;background:linear-gradient(to top,rgba(0,0,0,.55),transparent)}.controls__row{display:flex;align-items:center;justify-content:center;gap:28px;width:100%;max-width:420px}.controls__slot{flex:0 0 56px;display:grid;place-items:center}.controls__hint{margin:0;color:#ffffffa6;font-size:.78rem;letter-spacing:.02em}.home-button{position:absolute;top:calc(14px + env(safe-area-inset-top));left:calc(14px + env(safe-area-inset-left));z-index:3;width:40px;height:40px;display:grid;place-items:center;border-radius:999px;background:#00000073;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);color:#fff;-webkit-tap-highlight-color:transparent}.home-button svg{width:22px;height:22px}.home-button:active{background:#000000a6}.lens-title{margin:0;min-height:56px;display:flex;align-items:center;color:#fff;font-size:1rem;font-weight:600;letter-spacing:.04em;text-shadow:0 1px 6px rgba(0,0,0,.5)}.controls.is-recording .lens-picker,.controls.is-recording .lens-title,.controls.is-recording .controls__hint{opacity:0;pointer-events:none;transition:opacity .2s ease}.lens-picker{display:flex;gap:10px;max-width:100%;overflow-x:auto;padding:4px 2px;scrollbar-width:none}.lens-picker::-webkit-scrollbar{display:none}.lens-chip{flex:0 0 auto;width:56px;height:56px;border-radius:50%;border:2px solid rgba(255,255,255,.5);padding:0;overflow:hidden;background:#ffffff1a;cursor:pointer;transition:transform .12s ease,border-color .12s ease}.lens-chip:hover{transform:scale(1.06)}.lens-chip.is-active{border-color:var(--snap-yellow);transform:scale(1.08)}.lens-chip img{width:100%;height:100%;object-fit:cover;display:block}.lens-chip__fallback{display:grid;place-items:center;width:100%;height:100%;color:#fff;font-size:1.1rem;font-weight:600}.lens-chip--none .lens-chip__fallback{font-size:1.4rem}.icon-btn{width:48px;height:48px;border-radius:50%;border:none;display:grid;place-items:center;background:#ffffff29;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);color:#fff;cursor:pointer;transition:transform .15s ease,background .15s ease,opacity .15s ease}.icon-btn svg{width:26px;height:26px}.icon-btn:active{transform:scale(.92)}.icon-btn:disabled{opacity:.35;cursor:default}.icon-btn--flip:not(:disabled):active svg{transform:rotate(180deg);transition:transform .3s ease}.shutter{position:relative;width:88px;height:88px;border-radius:50%;border:none;background:transparent;padding:0;cursor:pointer;touch-action:none;display:grid;place-items:center}.shutter__inner{display:block;width:66px;height:66px;border-radius:50%;background:#fff;box-shadow:0 0 0 4px #ffffff59;transition:width .18s ease,height .18s ease,border-radius .18s ease,background .18s ease}.shutter:active .shutter__inner{transform:scale(.94)}.shutter.is-recording .shutter__inner{width:32px;height:32px;border-radius:8px;background:#ff3b30}.shutter:disabled{opacity:.4;cursor:default}.shutter__ring{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;transform:rotate(-90deg);pointer-events:none}.shutter__ring-track{fill:none;stroke:#ffffff4d;stroke-width:4}.shutter__ring-progress{fill:none;stroke:var(--snap-yellow);stroke-width:4;stroke-linecap:round;transition:stroke-dashoffset .06s linear}.lens-warning{position:absolute;top:calc(14px + env(safe-area-inset-top));left:50%;transform:translate(-50%);padding:6px 14px;border-radius:999px;background:#0000008c;color:#fffc;font-size:.78rem}.rec-badge{position:absolute;top:calc(14px + env(safe-area-inset-top));left:50%;transform:translate(-50%);display:flex;align-items:center;gap:8px;padding:6px 14px;border-radius:999px;background:#0000008c;color:#fff;font-size:.85rem;font-variant-numeric:tabular-nums;font-weight:600}.rec-badge__dot{width:9px;height:9px;border-radius:50%;background:#ff3b30;animation:pulse 1s ease-in-out infinite}@keyframes pulse{50%{opacity:.25}}.flash{position:absolute;top:0;right:0;bottom:0;left:0;background:#fff;animation:flash .18s ease-out;pointer-events:none}@keyframes flash{0%{opacity:.9}to{opacity:0}}.preview{position:absolute;top:0;right:0;bottom:0;left:0;background:#000;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:18px;padding:calc(16px + env(safe-area-inset-top)) 12px calc(16px + env(safe-area-inset-bottom));z-index:10}.preview__media{max-width:100%;max-height:72%;object-fit:contain;border-radius:10px;background:#000}.preview__actions{display:flex;flex-wrap:wrap;justify-content:center;gap:10px}.preview__hint{margin:0;color:#fff9;font-size:.8rem;text-align:center}.btn{padding:12px 22px;border-radius:999px;border:1px solid rgba(255,255,255,.4);background:#ffffff14;color:#fff;font-size:.95rem;font-weight:600;text-decoration:none;cursor:pointer}.btn--primary{background:var(--snap-yellow);border-color:var(--snap-yellow);color:#000}.btn:disabled{opacity:.5;cursor:default}
