:root{--bg: #fafafa;--surface: #ffffff;--surface-hover: #f4f4f5;--border: #e4e4e7;--border-strong: #d4d4d8;--text: #18181b;--muted: #52525b;--danger: #dc2626;--danger-strong: #b91c1c;--ok: #15803d;--led: #4f46e5;--led-contrast: #ffffff;--radius-sm: 8px;--radius: 12px;--radius-lg: 18px;--shadow-sm: 0 1px 2px rgba(24, 24, 27, .05);--shadow: 0 4px 12px rgba(24, 24, 27, .08)}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--bg);color:var(--text);font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;-webkit-font-smoothing:antialiased;overscroll-behavior:none}button{font:inherit;color:inherit;background:none;border:none;cursor:pointer;-webkit-tap-highlight-color:transparent}a:focus-visible,button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible{outline:2px solid var(--led);outline-offset:2px}.join{min-height:100%;display:flex;flex-direction:column;justify-content:center;padding:32px 24px;max-width:420px;margin:0 auto}.join-badge{display:flex;align-items:baseline;gap:6px;font-size:22px;font-weight:700;letter-spacing:-.01em;color:var(--led);margin-bottom:16px}.join-badge-sub{font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:12px;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:var(--muted)}.join-logo{max-height:56px;max-width:160px;object-fit:contain;margin-bottom:16px}.join-title{font-size:30px;font-weight:700;margin:0 0 10px;line-height:1.15;letter-spacing:-.01em}.join-sub{color:var(--muted);line-height:1.55;margin:0 0 32px}.join-label{display:block;font-size:13px;font-weight:500;color:var(--muted);margin-bottom:8px}.join-input{width:100%;padding:14px 16px;font-size:17px;color:var(--text);caret-color:var(--text);background:var(--surface);border:1.5px solid var(--border);border-radius:var(--radius);outline:none;margin-bottom:16px;transition:border-color .12s ease}.join-input::placeholder{color:var(--muted)}.join-input:hover{border-color:var(--border-strong)}.join-input:focus-visible{border-color:var(--led)}.join-error{color:var(--danger-strong);font-size:14px;margin:0 0 12px}.btn-primary{width:100%;padding:16px;font-size:17px;font-weight:600;color:var(--led-contrast);background:var(--led);border-radius:var(--radius);box-shadow:var(--shadow-sm);transition:filter .12s ease,transform .05s ease}.btn-primary:hover:not(:disabled){filter:brightness(.94)}.btn-primary:active:not(:disabled){transform:scale(.99)}.btn-primary:disabled{opacity:.4;cursor:not-allowed}.cam{--bg: #0b0b0e;--surface: #1c1c22;--border: #303038;--text: #f5f5f6;--muted: #a1a1aa;--danger: #f87171;--ok: #4ade80;height:100%;background:var(--bg);color:var(--text);display:flex;flex-direction:column;padding:env(safe-area-inset-top) 0 env(safe-area-inset-bottom)}.cam-top{display:flex;align-items:center;justify-content:space-between;padding:14px 18px}.counter{display:flex;align-items:baseline;gap:8px;font-family:ui-monospace,SF Mono,Menlo,monospace}.cam-logo{height:28px;width:28px;object-fit:contain;border-radius:6px;background:var(--surface)}.counter-num{font-size:30px;font-weight:700;color:var(--led);font-variant-numeric:tabular-nums;text-shadow:0 0 18px color-mix(in srgb,var(--led) 55%,transparent)}.counter-label{font-size:12px;letter-spacing:.14em;text-transform:uppercase;color:var(--muted)}.cam-status{display:flex;gap:8px}.pill{font-size:12px;font-weight:500;padding:5px 10px;border-radius:999px;border:1px solid var(--border);color:var(--muted)}.pill-offline{color:var(--danger);border-color:color-mix(in srgb,var(--danger) 40%,transparent)}.pill-sync{color:var(--led);border-color:color-mix(in srgb,var(--led) 40%,transparent)}.pill-button{transition:background .12s ease,border-color .12s ease}.pill-button:hover,.pill-button:active{background:color-mix(in srgb,var(--led) 12%,transparent);border-color:var(--led)}.viewfinder{position:relative;flex:1;margin:0 12px;border-radius:var(--radius-lg);overflow:hidden;background:#000;border:1px solid var(--border);display:flex;align-items:center;justify-content:center}.viewfinder video{width:100%;height:100%;object-fit:cover}.vf-msg{color:var(--muted);padding:0 32px;text-align:center;line-height:1.5}.flash{position:absolute;top:0;right:0;bottom:0;left:0;background:#fff;opacity:.85}@media (prefers-reduced-motion: no-preference){.flash{animation:flashfade .18s ease-out forwards}@keyframes flashfade{0%{opacity:.85}to{opacity:0}}}.vf-toast{position:absolute;left:50%;bottom:16px;transform:translate(-50%);max-width:calc(100% - 32px);background:#0b0b0ee6;border:1px solid color-mix(in srgb,var(--danger) 45%,transparent);color:var(--danger);font-size:13px;font-weight:500;padding:8px 14px;border-radius:999px;text-align:center}.vf-overlay{position:absolute;top:0;right:0;bottom:0;left:0;background:#0b0b0edb;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;font-size:20px;font-weight:600}.vf-overlay-sub{font-size:14px;font-weight:400;color:var(--muted);margin:0}.cam-bottom{display:flex;align-items:center;justify-content:space-between;padding:20px 28px 26px}.shutter{position:relative;width:76px;height:76px;border-radius:50%;background:var(--text);border:5px solid var(--bg);box-shadow:0 0 0 3px var(--text);transition:transform .08s}.shutter:active{transform:scale(.92)}.shutter:disabled{opacity:.35}.shutter-pulse{position:absolute;top:-3px;right:-3px;bottom:-3px;left:-3px;border-radius:50%;border:2px solid var(--led);opacity:0;pointer-events:none}@media (prefers-reduced-motion: no-preference){.shutter-fire{animation:shutter-press .14s ease-out}.shutter-fire .shutter-pulse{animation:shutter-pulse .5s ease-out forwards}}@keyframes shutter-press{0%{transform:scale(1)}40%{transform:scale(.9)}to{transform:scale(1)}}@keyframes shutter-pulse{0%{transform:scale(1);opacity:.9}to{transform:scale(1.9);opacity:0}}.btn-ghost{min-width:84px;padding:10px 6px;font-size:15px;color:var(--muted);border-radius:var(--radius-sm);transition:color .12s ease}.btn-ghost:hover,.btn-ghost:active{color:var(--text)}.btn-spacer{min-width:84px}.photos{min-height:100%;display:flex;flex-direction:column;padding:env(safe-area-inset-top) 0 env(safe-area-inset-bottom)}.photos-top{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;border-bottom:1px solid var(--border);background:var(--surface)}.photos-title{font-weight:600;display:flex;align-items:center;gap:8px}.photos-logo{height:22px;width:22px;object-fit:contain;border-radius:4px}.photos-empty{color:var(--muted);text-align:center;margin-top:48px;padding:0 32px;line-height:1.5}.photos-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:4px;padding:4px 12px}.photo{margin:0;position:relative;aspect-ratio:1;border-radius:var(--radius-sm);overflow:hidden;background:var(--surface-hover);border:1px solid var(--border)}.photo img{width:100%;height:100%;object-fit:cover}.photo figcaption{position:absolute;left:0;right:0;bottom:0;font-size:11px;font-weight:500;padding:3px 6px;background:#0b0b0eb8;color:#e4e4e7}.photo-done figcaption{color:#4ade80}.photo-uploading figcaption,.photo-queued figcaption{color:#fbbf24}.photo-failed figcaption{color:#f87171}.photo-error{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:400;opacity:.85}.photos-note{color:var(--muted);font-size:13px;line-height:1.55;padding:16px 20px;margin-top:auto}.center-msg{height:100%;display:flex;align-items:center;justify-content:center;color:var(--muted);padding:0 32px;text-align:center}.promo-list{display:flex;flex-direction:column;gap:12px;margin-top:24px;width:100%}.promo-card{display:block;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);overflow:hidden;text-decoration:none;color:var(--text);box-shadow:var(--shadow-sm);opacity:0;transform:translateY(10px);animation:promo-card-in .48s cubic-bezier(.2,.8,.2,1) forwards;transition:box-shadow .15s ease,transform .1s ease}.promo-card:hover{box-shadow:var(--shadow)}.promo-card:active{transform:translateY(0) scale(.99)}@keyframes promo-card-in{to{opacity:1;transform:translateY(0)}}.promo-banner{display:block;width:100%;height:96px;object-fit:cover}.promo-card-plain{display:flex;align-items:center;gap:12px;padding:12px 14px}.promo-icon{width:40px;height:40px;border-radius:var(--radius-sm);flex-shrink:0;display:flex;align-items:center;justify-content:center;background:color-mix(in srgb,var(--led) 12%,var(--surface));color:var(--led)}.promo-icon svg{width:20px;height:20px}.promo-body{display:flex;flex-direction:column;gap:2px;min-width:0;padding:12px 14px 14px}.promo-card-plain .promo-body{padding:0}.promo-title{font-weight:600;font-size:14px}.promo-desc{color:var(--muted);font-size:12px;line-height:1.4}@media (prefers-reduced-motion: reduce){.promo-card{animation:none;opacity:1;transform:none}}.reveal-iris{position:fixed;top:0;right:0;bottom:0;left:0;z-index:50;background:#0b0b0e;display:flex;align-items:center;justify-content:center;clip-path:circle(150% at 50% 50%)}.reveal-iris-play{animation:reveal-wipe .9s cubic-bezier(.65,0,.35,1) 1.9s forwards}@keyframes reveal-wipe{0%{clip-path:circle(150% at 50% 50%)}to{clip-path:circle(0% at 50% 50%)}}.reveal-iris-content{display:flex;flex-direction:column;align-items:center;gap:14px;padding:0 32px;text-align:center;opacity:0}.reveal-iris-play .reveal-iris-content{animation:reveal-content-in .5s ease-out .15s forwards,reveal-content-out .3s ease-in 1.65s forwards}@keyframes reveal-content-in{0%{opacity:0;transform:translateY(6px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes reveal-content-out{to{opacity:0}}.reveal-ring{width:84px;height:84px;border-radius:50%;border:3px solid color-mix(in srgb,var(--led) 70%,transparent);position:relative}.reveal-ring:before,.reveal-ring:after{content:"";position:absolute;top:-3px;right:-3px;bottom:-3px;left:-3px;border-radius:50%;border:3px solid var(--led);opacity:0}.reveal-iris-play .reveal-ring:before{animation:reveal-pulse-ring 1.6s ease-out .35s infinite}.reveal-iris-play .reveal-ring:after{animation:reveal-pulse-ring 1.6s ease-out 1.15s infinite}@keyframes reveal-pulse-ring{0%{transform:scale(1);opacity:.9}to{transform:scale(2.1);opacity:0}}.reveal-ring-dot{position:absolute;top:0;right:0;bottom:0;left:0;margin:auto;width:14px;height:14px;border-radius:50%;background:var(--led);box-shadow:0 0 24px 4px color-mix(in srgb,var(--led) 60%,transparent)}.reveal-eyebrow{margin:0;font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:11px;font-weight:600;letter-spacing:.18em;text-transform:uppercase;color:#a1a1aa}.reveal-title{margin:0;font-size:26px;font-weight:700;letter-spacing:-.01em;color:#f5f5f6}.reveal-sub{margin:0;font-size:14px;line-height:1.5;color:#a1a1aa;max-width:260px}.reveal-iris-static .reveal-iris-content-static{opacity:1}
