@view-transition{navigation:auto}:root{color-scheme:light;--color-bg: #f2f3f7;--color-surface: #ffffff;--color-text: #16181d;--color-muted: #6b7280;--color-border: #e6e7ec;--color-ink: #23262e;--color-danger: #dc2626;--color-success: #16a34a;--color-warning: #d97706;--color-info: #328ad9;--radius-sm: 10px;--radius: 16px;--radius-lg: 22px;--shadow-sm: 0 1px 2px rgba(16, 18, 27, .06), 0 1px 1px rgba(16, 18, 27, .04);--shadow-md: 0 8px 24px rgba(16, 18, 27, .08), 0 2px 6px rgba(16, 18, 27, .05);--shadow-lg: 0 16px 40px rgba(16, 18, 27, .14);--safe-top: env(safe-area-inset-top, 0px);--safe-bottom: env(safe-area-inset-bottom, 0px);--content-width: clamp(280px, 94vw, 760px);--space-page-x: clamp(1rem, 1.4vw + .7rem, 1.75rem);--space-page-y: clamp(1.1rem, 1.6vw + .7rem, 1.9rem)}*{box-sizing:border-box}[hidden]{display:none!important}html,body{margin:0;padding:0;background:var(--color-bg);color:var(--color-text);font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,sans-serif;-webkit-tap-highlight-color:transparent;-webkit-font-smoothing:antialiased}body{min-height:100dvh;padding-top:var(--safe-top);padding-bottom:var(--safe-bottom);background-image:radial-gradient(circle at top right,color-mix(in srgb,var(--color-primary) 6%,transparent),transparent 55%),radial-gradient(circle at 10% 0%,rgba(35,38,46,.04),transparent 40%);background-attachment:fixed}img,video,canvas{max-width:100%;display:block}a{color:inherit}button{font-family:inherit;cursor:pointer}.app-shell{display:flex;flex-direction:column;min-height:100dvh}.app-header{position:sticky;top:0;z-index:10;display:flex;align-items:center;gap:.75rem;padding:clamp(.75rem,1.1vw + .55rem,1.05rem) var(--space-page-x);background:linear-gradient(135deg,var(--color-primary),var(--color-primary-dark));color:#fff;box-shadow:0 4px 18px #0000002e}.app-header .icon-btn{border-color:#fff6;background:#ffffff24;color:#fff}.app-header .icon-btn:hover{background:#ffffff42}.app-header .install-header-btn{border-color:#ffffff8c;background:#ffffff24;color:#fff}.app-header .install-header-btn:hover{background:#fff;color:var(--color-primary-dark)}.app-header .brand{display:flex;align-items:center;gap:.6rem;min-width:0;flex:1}.install-header-btn{display:inline-flex;align-items:center;gap:.4rem;flex-shrink:0;border:1px solid var(--color-primary);border-radius:999px;padding:.45rem .85rem .45rem .7rem;background:var(--color-primary-soft);color:var(--color-primary-text);font-size:.8rem;font-weight:700;white-space:nowrap;transition:background .15s ease,transform .05s ease}.install-header-btn:hover{background:var(--color-primary);color:#fff}.install-header-btn:active{transform:scale(.96)}.app-header .brand img{height:30px;width:auto;flex-shrink:0}.app-header .brand-text{display:flex;flex-direction:column;line-height:1.1;min-width:0}.app-header h1{font-size:clamp(.92rem,.4vw + .8rem,1.05rem);margin:0;font-weight:700;letter-spacing:-.01em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#fff}.app-header .eyebrow{font-size:.68rem;font-weight:700;letter-spacing:.06em;color:#fffc;text-transform:uppercase}.app-main{flex:1;padding:var(--space-page-y) var(--space-page-x) clamp(2rem,3vw,3rem);width:100%;max-width:var(--content-width);margin:0 auto;animation:pageEnter .45s cubic-bezier(.22,1,.36,1) both}@keyframes pageEnter{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@media(prefers-reduced-motion:reduce){.app-main{animation:none}}.btn{display:inline-flex;align-items:center;justify-content:center;gap:.5rem;border:none;border-radius:var(--radius-sm);padding:.85rem 1.1rem;font-size:.98rem;font-weight:600;min-height:48px;width:100%;transition:transform .05s ease,box-shadow .15s ease,opacity .15s ease,background .15s ease;text-decoration:none}.btn:active{transform:scale(.98)}.btn:disabled{opacity:.5;pointer-events:none}.btn-primary{background:linear-gradient(135deg,var(--color-primary),var(--color-primary-dark));color:#fff;box-shadow:0 6px 16px color-mix(in srgb,var(--color-primary) 28%,transparent)}.btn-primary:hover{box-shadow:0 8px 22px color-mix(in srgb,var(--color-primary) 36%,transparent)}.btn-secondary{background:var(--color-surface);color:var(--color-text);border:1px solid var(--color-border)}.btn-secondary:hover{border-color:#d3d5dc;background:#fafafb}.btn-danger{background:#fef2f2;color:var(--color-danger);border:1px solid #fecaca}.btn-danger-solid{background:linear-gradient(135deg,var(--color-danger),#b91c1c);color:#fff;box-shadow:0 6px 16px #dc262647}.btn-info-solid{background:linear-gradient(135deg,var(--color-info),#2568a8);color:#fff;box-shadow:0 6px 16px #328ad952}.btn-icon{width:auto;padding:.6rem .75rem}.icon-btn{display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:999px;border:1px solid var(--color-border);background:var(--color-surface);color:var(--color-ink);flex-shrink:0}.icon-btn:hover{background:#fafafb}.icon-btn svg{width:19px;height:19px}#app-back-link svg{transform:translate(-1px)}.stack{display:flex;flex-direction:column;gap:.85rem}.row{display:flex;gap:.6rem}.row-between{justify-content:space-between;align-items:center}.qr-card{padding:.8rem 1.1rem}.qr-code-value{font-weight:700;word-break:break-all;letter-spacing:-.01em}.qr-date{margin-top:.4rem}.card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius);padding:1.1rem;box-shadow:var(--shadow-sm)}.muted{color:var(--color-muted);font-size:.875rem}.badge{display:inline-block;padding:.2rem .6rem;border-radius:999px;background:var(--color-primary-soft);color:var(--color-primary-text);font-size:.72rem;font-weight:700;white-space:nowrap}.badge-pending{background:#eef0f3;color:var(--color-muted)}.empty-state{text-align:center;padding:3.5rem 1.25rem;color:var(--color-muted);background:var(--color-surface);border:1px dashed var(--color-border);border-radius:var(--radius-lg)}.empty-state .empty-icon{width:46px;height:46px;margin:0 auto .75rem;color:var(--color-primary);opacity:.85}.session-item{display:flex;align-items:center;justify-content:space-between;gap:.75rem;text-decoration:none;color:inherit;transition:transform .15s ease,box-shadow .15s ease,border-color .15s ease;animation:cardEnter .35s cubic-bezier(.22,1,.36,1) both}@keyframes cardEnter{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@media(prefers-reduced-motion:reduce){.session-item{animation:none}}.session-item:hover,.session-item:focus-visible{transform:translateY(-2px);box-shadow:var(--shadow-md);border-color:var(--color-primary);background:var(--color-primary-soft)}.session-item:active{transform:translateY(0) scale(.99)}.session-item .qr-value{font-weight:700;word-break:break-all;letter-spacing:-.01em}.skeleton-card{height:76px;border-radius:var(--radius);border:1px solid var(--color-border);overflow:hidden}.skeleton{width:100%;height:100%;background:linear-gradient(90deg,#eef0f3 25%,#f7f8fa 37%,#eef0f3 63%);background-size:400% 100%;animation:skeletonWave 1.6s ease-in-out infinite}@keyframes skeletonWave{0%{background-position:100% 50%}to{background-position:0% 50%}}@media(prefers-reduced-motion:reduce){.skeleton{animation:none}}.camera-frame{position:relative;width:100%;aspect-ratio:3 / 4;max-height:58vh;border-radius:var(--radius-lg);overflow:hidden;background:#0b0c10;box-shadow:var(--shadow-lg)}.camera-frame video{width:100%;height:100%;object-fit:cover}.scan-guide{position:absolute;inset:12% 15%;border:3px solid rgba(255,255,255,.9);border-radius:18px;box-shadow:0 0 0 999px #0006;pointer-events:none}.doc-guide{--doc-aspect: 210 / 297;position:absolute;top:.9rem;bottom:4.75rem;left:50%;transform:translate(-50%);aspect-ratio:var(--doc-aspect);border:2px solid rgba(255,255,255,.92);border-radius:14px;box-shadow:0 0 0 999px #00000073;pointer-events:none;z-index:1}.doc-guide:before,.doc-guide:after{content:"";position:absolute;width:26px;height:26px;border:3px solid var(--color-primary, #fff)}.doc-guide:before{top:-3px;left:-3px;border-right:none;border-bottom:none;border-radius:14px 0 0}.doc-guide:after{right:-3px;bottom:-3px;border-left:none;border-top:none;border-radius:0 0 14px}.camera-overlay{position:absolute;inset:0;display:flex;align-items:flex-end;justify-content:center;padding:1.25rem;pointer-events:none}.camera-overlay>*{pointer-events:auto}.overlay-text{color:#fff;text-align:center;margin:0;font-size:.9rem;font-weight:600;text-shadow:0 1px 3px rgba(0,0,0,.6)}.camera-loading{position:absolute;inset:0;z-index:2;display:flex;align-items:center;justify-content:center;gap:.5rem;color:#fff;font-size:.85rem;font-weight:600;background:#0b0c108c}.spinner-light{border-color:#ffffff59;border-top-color:#fff}.center{text-align:center}.is-locked{pointer-events:none;opacity:.45}.shutter-btn{width:74px;height:74px;border-radius:50%;background:#fff;border:4px solid rgba(255,255,255,.55);box-shadow:0 4px 18px #0006;position:relative}.shutter-btn:after{content:"";position:absolute;inset:5px;border-radius:50%;border:2px solid color-mix(in srgb,var(--color-primary) 15%,transparent)}.shutter-btn:active{transform:scale(.92)}.shutter-btn:disabled{opacity:.5;pointer-events:none}.photo-preview{position:relative;width:100%;border-radius:var(--radius-lg);overflow:hidden;box-shadow:var(--shadow-md);border:1px solid var(--color-border);cursor:zoom-in;transition:transform .15s ease,box-shadow .15s ease,border-color .15s ease}.photo-preview:hover,.photo-preview:focus-visible{transform:translateY(-2px);box-shadow:var(--shadow-lg);border-color:var(--color-primary)}.photo-preview:active{transform:scale(.98)}.photo-preview img{width:100%;max-height:55vh;object-fit:contain;background:#111}.photo-preview-hint{position:absolute;right:.7rem;bottom:.7rem;display:flex;align-items:center;gap:.35rem;padding:.35rem .65rem;border-radius:999px;background:#0f1014b8;color:#fff;font-size:.74rem;font-weight:600;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);pointer-events:none}.photo-preview-hint svg{flex-shrink:0}.enhance-preview{--preview-w: 3;--preview-h: 4;position:relative;width:100%;max-width:calc(52vh * var(--preview-w) / var(--preview-h));margin-inline:auto;border-radius:var(--radius-lg);overflow:hidden;box-shadow:var(--shadow-md);border:1px solid var(--color-border);aspect-ratio:var(--preview-w) / var(--preview-h);background:#111}.enhance-layer{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;background:#111}.enhance-layer.enhance-after{opacity:0;transition:opacity .5s ease}.enhance-layer.enhance-after.is-visible{opacity:1}.enhance-badge{position:absolute;left:.85rem;bottom:.85rem;display:flex;align-items:center;gap:.45rem;padding:.4rem .75rem;border-radius:999px;background:#0f1014b8;color:#fff;font-size:.8rem;font-weight:600;backdrop-filter:blur(4px)}.enhance-badge.is-done{background:#16a34ae0}.enhance-badge svg{flex-shrink:0}.scan-sweep{position:absolute;left:4%;right:4%;height:3px;border-radius:999px;background:linear-gradient(90deg,transparent,#fff,var(--color-primary),#fff,transparent);box-shadow:0 0 16px 3px color-mix(in srgb,var(--color-primary) 75%,transparent);animation:scanSweep 1.3s ease-in-out infinite}.scan-sweep:after{content:"";position:absolute;left:0;right:0;bottom:0;height:46px;transform:translateY(3px);background:linear-gradient(to top,rgba(34,197,94,.16),transparent)}@keyframes scanSweep{0%{top:2%;opacity:0}12%{opacity:1}88%{opacity:1}to{top:96%;opacity:0}}.ttl-chip{display:flex;align-items:center;justify-content:center;gap:.4rem;margin:0 auto;padding:.45rem .9rem;border-radius:999px;background:var(--color-surface);border:1px solid var(--color-border);box-shadow:var(--shadow-sm);color:var(--color-muted);font-size:.82rem;font-weight:600;font-variant-numeric:tabular-nums;transition:background .2s ease,border-color .2s ease,color .2s ease}.ttl-chip strong{color:var(--color-text);font-weight:700}.ttl-chip svg{flex-shrink:0}.ttl-chip.is-warning{background:#fffbeb;border-color:#fde68a;color:#92400e}.ttl-chip.is-warning strong{color:#92400e}.ttl-chip.is-expired{background:#fef2f2;border-color:#fecaca;color:#991b1b}.alert{background:#fef2f2;border:1px solid #fecaca;color:#991b1b;border-radius:var(--radius);padding:.85rem 1rem;font-size:.9rem}.spinner{width:16px;height:16px;border-radius:50%;border:2px solid var(--color-border);border-top-color:var(--color-primary);animation:spin .7s linear infinite;flex-shrink:0}@keyframes spin{to{transform:rotate(360deg)}}.lightbox{position:fixed;inset:0;background:#0a0a0ceb;z-index:50;display:flex;align-items:center;justify-content:center;padding:1rem}.lightbox-img{width:100%;height:100%;object-fit:contain;border-radius:10px;box-shadow:var(--shadow-lg);touch-action:none;cursor:zoom-in}.lightbox-img.zoom-transition{transition:transform .2s ease}.lightbox-close{position:absolute;top:1rem;right:1rem;width:42px;height:42px;display:flex;align-items:center;justify-content:center;border-radius:50%;border:none;background:#ffffff24;color:#fff;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);transition:background .15s ease,transform .15s ease}.lightbox-close:hover{background:#ffffff42}.lightbox-close:active{transform:scale(.94)}.page-intro h2{margin:0 0 .3rem;font-size:clamp(1.2rem,.9vw + 1rem,1.55rem);letter-spacing:-.015em;color:var(--color-ink)}.page-intro p{margin:0;font-size:clamp(.88rem,.3vw + .8rem,1rem)}.section-title{font-size:.78rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--color-muted);margin:0}.section-header{margin:.2rem 0 -.35rem}.btn-link{border:none;background:none;color:var(--color-primary-text);font-size:.78rem;font-weight:700;padding:.2rem 0}.btn-link:hover{text-decoration:underline}.btn-link:disabled{opacity:.5;pointer-events:none}.toast-container{position:fixed;top:calc(var(--safe-top) + .75rem);left:.75rem;right:.75rem;z-index:200;display:flex;flex-direction:column;align-items:center;gap:.6rem;pointer-events:none}.toast{--toast-color: var(--color-success);pointer-events:auto;position:relative;display:flex;align-items:center;gap:.7rem;width:100%;max-width:380px;padding:.85rem 2.3rem .85rem 1rem;border-radius:var(--radius);background:var(--toast-color);color:#fff;box-shadow:0 10px 24px -6px color-mix(in srgb,var(--toast-color) 55%,transparent),0 4px 10px -3px color-mix(in srgb,var(--toast-color) 45%,transparent),0 0 0 1px #ffffff1f inset;overflow:hidden;animation:toastIn .4s cubic-bezier(.34,1.56,.64,1) both}.toast:before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;background:color-mix(in srgb,var(--toast-color) 70%,black)}.toast.is-leaving{animation:toastOut .2s ease forwards}.toast-success{--toast-color: var(--color-success)}.toast-error{--toast-color: var(--color-danger)}.toast-warning{--toast-color: var(--color-warning)}.toast-info{--toast-color: var(--color-info)}.toast-icon{flex-shrink:0;width:32px;height:32px;border-radius:50%;display:flex;align-items:center;justify-content:center;color:#fff;background:#ffffff38;border:1px solid rgba(255,255,255,.35);animation:toastIconPop .45s cubic-bezier(.34,1.56,.64,1) .08s both}.toast-body{flex:1;min-width:0}.toast-title{font-weight:700;font-size:.88rem;color:#fff;letter-spacing:-.005em}.toast-message{font-size:.78rem;color:#ffffffd9;margin-top:.15rem;line-height:1.4}.toast-close{position:absolute;top:.55rem;right:.55rem;width:22px;height:22px;border-radius:50%;border:1px solid rgba(255,255,255,.3);background:#ffffff2e;color:#ffffffe6;display:flex;align-items:center;justify-content:center}.toast-close:hover{background:#ffffff52;color:#fff}.toast-loader{position:absolute;left:4px;bottom:0;height:3px;width:calc(100% - 4px);background:#ffffff8c;transform-origin:left;animation-name:toastDrain;animation-timing-function:linear;animation-fill-mode:forwards}@keyframes toastIn{0%{transform:translateY(-16px) scale(.94);opacity:0}60%{transform:translateY(2px) scale(1.01);opacity:1}to{transform:translateY(0) scale(1);opacity:1}}@keyframes toastOut{to{transform:translateY(-10px) scale(.96);opacity:0}}@keyframes toastIconPop{0%{transform:scale(.4);opacity:0}to{transform:scale(1);opacity:1}}@keyframes toastDrain{0%{transform:scaleX(1)}to{transform:scaleX(0)}}.confirm-backdrop{position:fixed;inset:0;z-index:300;background:#0f10148c;backdrop-filter:blur(3px);-webkit-backdrop-filter:blur(3px);display:flex;align-items:center;justify-content:center;padding:1.25rem;animation:backdropIn .2s ease both}.confirm-backdrop.is-leaving{animation:backdropOut .18s ease forwards}.confirm-card{width:100%;max-width:340px;background:var(--color-surface);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);padding:1.75rem 1.5rem 1.5rem;text-align:center;animation:confirmPop .35s cubic-bezier(.34,1.56,.64,1) both}.confirm-icon-wrap{display:flex;justify-content:center;margin-bottom:1rem}.confirm-icon-circle{width:64px;height:64px;border-radius:50%;display:flex;align-items:center;justify-content:center;color:#fff;background:linear-gradient(135deg,#fbbf24,#d97706);box-shadow:0 8px 20px #d9770659;animation:confirmPulse 2.4s ease-in-out .4s infinite}.confirm-title{margin:0 0 .4rem;font-size:1.05rem;font-weight:700;letter-spacing:-.01em}.confirm-message{margin:0 0 1.4rem;font-size:.88rem;color:var(--color-muted);line-height:1.5}.confirm-actions{display:flex;justify-content:center;flex-wrap:wrap;gap:.6rem}.confirm-actions .btn{flex:0 0 auto;width:auto;min-width:110px}@keyframes confirmPop{0%{transform:scale(.85);opacity:0}60%{transform:scale(1.03);opacity:1}to{transform:scale(1)}}@keyframes confirmPulse{0%,to{box-shadow:0 8px 20px #d9770659}50%{box-shadow:0 8px 28px #d977068c,0 0 0 8px #d9770614}}@keyframes backdropIn{0%{opacity:0}to{opacity:1}}@keyframes backdropOut{to{opacity:0}}.camera-frame,.photo-preview{max-width:460px;margin-left:auto;margin-right:auto}.enhance-preview{max-width:min(460px,calc(52vh * var(--preview-w) / var(--preview-h)))}@media(min-width:720px){.toast-container{left:auto;right:clamp(1rem,2vw,1.75rem);align-items:flex-end}.toast{width:clamp(320px,30vw,400px)}}@media(prefers-color-scheme:dark){:root{color-scheme:dark;--color-bg: #121316;--color-surface: #1c1e23;--color-text: #eef0f3;--color-muted: #9aa1ac;--color-border: #2d3038;--color-ink: #f2f3f5;--shadow-sm: 0 1px 2px rgba(0, 0, 0, .35), 0 1px 1px rgba(0, 0, 0, .25);--shadow-md: 0 8px 24px rgba(0, 0, 0, .45), 0 2px 6px rgba(0, 0, 0, .3);--shadow-lg: 0 20px 48px rgba(0, 0, 0, .55)}body{background-image:radial-gradient(circle at top right,color-mix(in srgb,var(--color-primary) 10%,transparent),transparent 55%),radial-gradient(circle at 10% 0%,rgba(255,255,255,.03),transparent 40%)}.btn-secondary:hover{background:#23252b}.btn-secondary:hover{border-color:#3a3d46}.badge-pending{background:#262931}.btn-danger{background:#dc262624;border-color:#dc262659}.alert{background:#dc262624;border-color:#dc262659;color:#ff9c9c}.skeleton{background:linear-gradient(90deg,#1c1e23 25%,#262931 37%,#1c1e23 63%);background-size:400% 100%}}
