:root{--paper:#f0eee6;--paper-sunk:#e7e4d8;--ink:#23221e;--ink-soft:#6b6559;--rule:#d6d1c2;--in:#1f6e4c;--out:#a66a2c;--slate:#4c5568;--alert:#9e3b2e;--viewfinder:#17181a}*{box-sizing:border-box}html,body,#root{height:100%}body{background:var(--paper);color:var(--ink);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;margin:0;font-family:Hanken Grotesk,ui-sans-serif,system-ui,-apple-system,Segoe UI,sans-serif}button{font:inherit}.fc-page{min-height:100%;padding:calc(30px + env(safe-area-inset-top)) 20px calc(34px + env(safe-area-inset-bottom));text-align:center;background-image:repeating-linear-gradient(#0000 0 33px,#e8e3d2 33px 34px);flex-direction:column;justify-content:center;align-items:center;gap:clamp(16px,3.5vw,24px);display:flex}.fc-title{letter-spacing:-.015em;margin:0;font-size:clamp(1.55rem,5vw,2rem);font-weight:800}.fc-title:after{content:"";background:var(--in);border-radius:2px;width:34px;height:3px;margin:10px auto 0;display:block}.fc-hint{color:var(--ink-soft);max-width:32ch;margin:0;font-size:clamp(.95rem,2.6vw,1.08rem);line-height:1.5}.fc-error{color:var(--alert);max-width:34ch;margin:0;font-size:clamp(.95rem,2.6vw,1.05rem);line-height:1.5}.fc-idle{flex-direction:column;align-items:center;gap:clamp(18px,4.5vw,26px);width:100%;max-width:400px;display:flex}.fc-mark{color:#fff;background:var(--in);cursor:pointer;border:none;border-radius:14px;width:100%;padding:clamp(18px,4.5vw,22px) 28px;font-size:clamp(1.05rem,3.4vw,1.2rem);font-weight:600;transition:transform .1s,background .1s;box-shadow:0 2px 6px -1px #1f6e4c59}.fc-mark:active{background:#1a5c40;transform:translateY(1px)}.fc-mark:disabled{background:var(--ink-soft);box-shadow:none;cursor:default}.fc-frame{aspect-ratio:3/4;background:var(--viewfinder);border-radius:18px;width:min(92vw,440px);max-height:58vh;position:relative;overflow:hidden;box-shadow:inset 0 0 0 1px #ffffff14,0 20px 44px -22px #00000073}.fc-frame video{object-fit:cover;width:100%;height:100%;display:block}.fc-frame canvas{width:100%;height:100%;position:absolute;inset:0}.fc-scanhint{color:var(--ink-soft);align-items:center;gap:9px;margin:0;font-size:clamp(.95rem,2.6vw,1.08rem);display:flex}.fc-scanhint:before{content:"";background:var(--in);border-radius:50%;width:9px;height:9px;animation:1.4s ease-in-out infinite fc-pulse}@keyframes fc-pulse{0%,to{opacity:.3}50%{opacity:1}}@media (prefers-reduced-motion:reduce){.fc-scanhint:before{opacity:.85;animation:none}}.fc-stamp{--accent:var(--in);border:1px solid var(--rule);border-top:4px solid var(--accent);background:#fdfcf7;border-radius:3px;flex-direction:column;align-items:center;gap:12px;width:min(92vw,400px);padding:clamp(26px,6vw,34px) clamp(22px,5vw,30px);display:flex;box-shadow:0 14px 34px -20px #0000004d}.fc-stamp[data-kind=out]{--accent:var(--out)}.fc-stamp[data-kind=already]{--accent:var(--slate)}.fc-stamp[data-kind=unrecognised],.fc-stamp[data-kind=error]{--accent:var(--alert)}@media (prefers-reduced-motion:no-preference){.fc-stamp{animation:.22s cubic-bezier(.2,.8,.3,1) both fc-stamp-in}@keyframes fc-stamp-in{0%{opacity:0;transform:scale(1.04)}to{opacity:1;transform:scale(1)}}}.fc-face{object-fit:cover;border:2px solid var(--accent);border-radius:50%;width:66px;height:66px}.fc-stamp-word{letter-spacing:-.02em;color:var(--accent);margin:0;font-size:clamp(2rem,8.5vw,3.1rem);font-weight:800;line-height:1.02}.fc-stamp-word.is-pending{color:var(--ink);font-size:clamp(1.5rem,6vw,2rem)}.fc-stamp-name{color:var(--ink);font-size:clamp(1.05rem,3.6vw,1.35rem);font-weight:500}.fc-stamp-time{font-variant-numeric:tabular-nums;letter-spacing:.05em;color:var(--ink);font-size:clamp(1rem,3vw,1.15rem);font-weight:600}.fc-stamp-note{color:var(--ink-soft);max-width:28ch;font-size:.95rem;line-height:1.45}.fc-countdown{background:var(--paper-sunk);border-radius:2px;width:min(92vw,400px);height:3px;overflow:hidden}.fc-countdown span{background:var(--bar,var(--ink-soft));transform-origin:0;width:100%;height:100%;animation:fc-deplete var(--fc-countdown,4s) linear forwards;display:block}@keyframes fc-deplete{to{transform:scaleX(0)}}@media (prefers-reduced-motion:reduce){.fc-countdown span{animation-duration:0s;animation-fill-mode:forwards}}.fc-actions{flex-wrap:wrap;justify-content:center;gap:10px;display:flex}.fc-btn{background:var(--ink);color:var(--paper);cursor:pointer;border:1px solid #0000;border-radius:12px;padding:12px 22px;font-size:1rem;font-weight:600;transition:opacity .1s}.fc-btn:active{opacity:.85}.fc-btn:disabled{opacity:.5;cursor:default}.fc-btn-secondary,.fc-btn-ghost{color:var(--ink);border-color:var(--rule);background:0 0}.fc-input{border:1px solid var(--rule);width:min(90vw,360px);color:var(--ink);background:#fdfcf7;border-radius:10px;padding:13px 15px;font-size:1rem}.fc-input:focus-visible{outline:2px solid var(--in);outline-offset:1px}.fc-form{flex-direction:column;align-items:center;gap:12px;display:flex}.fc-dots{gap:10px;display:flex}.fc-dot{background:var(--paper-sunk);border:1px solid var(--rule);border-radius:50%;width:11px;height:11px}.fc-dot.is-filled{background:var(--in);border-color:var(--in)}.fc-camera-select{border:1px solid var(--rule);color:var(--ink);background:#fdfcf7;border-radius:8px;max-width:320px;padding:9px 11px;font-size:.9rem}.fc-enroll-photo{object-fit:cover;border:2px solid var(--rule);border-radius:50%;width:clamp(96px,26vw,120px);height:clamp(96px,26vw,120px)}button:focus-visible,a:focus-visible{outline:2px solid var(--ink);outline-offset:2px}
