:root{--bg:#0b0f19;--bg-elevated:#121829;--surface:#ffffff0b;--surface-strong:#ffffff14;--border:#ffffff17;--border-strong:#ffffff29;--text:#f1f5f9;--text-muted:#93a1b8;--text-faint:#64748b;--accent:#6366f1;--accent-soft:#6366f129;--accent-text:#a5b4fc;--success:#34d399;--success-soft:#34d39924;--danger:#f87171;--danger-soft:#f8717124;--warning:#fbbf24;--warning-soft:#fbbf2424;--radius-sm:10px;--radius:16px;--radius-lg:22px;--header-height:56px;--nav-height:64px;--safe-top:env(safe-area-inset-top,0px);--safe-bottom:env(safe-area-inset-bottom,0px);--safe-left:env(safe-area-inset-left,0px);--safe-right:env(safe-area-inset-right,0px);--font:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif;--font-mono:ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}.accent-0{--card-a:#6366f1;--card-b:#8b5cf6}.accent-1{--card-a:#0ea5e9;--card-b:#22d3ee}.accent-2{--card-a:#10b981;--card-b:#34d399}.accent-3{--card-a:#f59e0b;--card-b:#f97316}.accent-4{--card-a:#ec4899;--card-b:#f43f5e}.accent-5{--card-a:#14b8a6;--card-b:#06b6d4}*,:before,:after{box-sizing:border-box}*{margin:0;padding:0}html,body,#root{height:100%}body{font-family:var(--font);background:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;overscroll-behavior-y:none;-webkit-tap-highlight-color:transparent;font-size:16px;line-height:1.5}body:before{content:"";pointer-events:none;z-index:0;background:radial-gradient(70% 45% at 50% -8%,#6366f138,#0000 70%),radial-gradient(50% 35% at 100% 0,#0ea5e91f,#0000 70%);position:fixed;inset:0}button,input,select,textarea{font:inherit;color:inherit}button{cursor:pointer;background:0 0;border:none}a{color:var(--accent-text);text-decoration:none}ul,ol{list-style:none}:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:6px}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.001ms!important;animation-duration:.001ms!important;animation-iteration-count:1!important}}.app-shell{z-index:1;flex-direction:column;max-width:520px;min-height:100dvh;margin-inline:auto;display:flex;position:relative}.app-header{z-index:20;padding-top:var(--safe-top);background:color-mix(in srgb, var(--bg) 82%, transparent);-webkit-backdrop-filter:blur(14px);border-bottom:1px solid var(--border);position:sticky;top:0}.app-header__row{height:var(--header-height);padding-inline:calc(16px + var(--safe-left)) calc(16px + var(--safe-right));align-items:center;gap:8px;display:flex}.app-header__title{letter-spacing:-.01em;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:17px;font-weight:650;overflow:hidden}.app-header__title--centered{text-align:center}.icon-button{width:40px;height:40px;color:var(--text);border-radius:12px;flex:0 0 40px;place-items:center;transition:background .15s;display:grid}.icon-button:hover,.icon-button:active{background:var(--surface-strong)}.icon-button svg{width:21px;height:21px}.icon-button:disabled{opacity:.5}.app-main{padding:20px calc(16px + var(--safe-left)) 24px calc(16px + var(--safe-right));flex-direction:column;flex:1;gap:18px;display:flex}.app-main--with-nav{padding-bottom:calc(var(--nav-height) + var(--safe-bottom) + 24px)}.app-main--flush{padding:0}.bottom-nav{z-index:30;padding-bottom:var(--safe-bottom);background:color-mix(in srgb, var(--bg) 88%, transparent);-webkit-backdrop-filter:blur(16px);border-top:1px solid var(--border);position:fixed;bottom:0;left:0;right:0}.bottom-nav__inner{max-width:520px;height:var(--nav-height);padding-inline:calc(8px + var(--safe-left)) calc(8px + var(--safe-right));grid-template-columns:repeat(4,1fr);margin-inline:auto;display:grid}.bottom-nav__item{color:var(--text-faint);flex-direction:column;justify-content:center;align-items:center;gap:4px;font-size:11px;font-weight:550;transition:color .15s;display:flex}.bottom-nav__item[aria-current=page]{color:var(--accent-text)}.bottom-nav__item svg{width:22px;height:22px}.page-title{letter-spacing:-.02em;font-size:26px;font-weight:700}.page-subtitle{color:var(--text-muted);font-size:14px}.section-label{letter-spacing:.06em;text-transform:uppercase;color:var(--text-faint);font-size:12px;font-weight:650}.stack{flex-direction:column;gap:12px;display:flex}.stack--tight{gap:8px}.stack--loose{gap:20px}.row{align-items:center;gap:10px;display:flex}.row--between{justify-content:space-between}.spacer{flex:1}.mono{font-family:var(--font-mono);word-break:break-all;font-size:12.5px}.text-muted{color:var(--text-muted)}.text-small{font-size:13px}.panel{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:16px}.panel--flush{padding:0;overflow:hidden}.data-list{flex-direction:column;display:flex}.data-row{border-bottom:1px solid var(--border);flex-direction:column;gap:3px;padding:12px 16px;display:flex}.data-row:last-child{border-bottom:none}.data-row__label{letter-spacing:.03em;text-transform:uppercase;color:var(--text-faint);font-size:12px;font-weight:600}.data-row__value{word-break:break-word;font-size:15px}.credential-card{text-align:left;border-radius:var(--radius-lg);color:#fff;background:linear-gradient(135deg, var(--card-a,#6366f1), var(--card-b,#8b5cf6));border:1px solid #ffffff24;width:100%;padding:18px;transition:transform .16s,box-shadow .16s;display:block;position:relative;overflow:hidden;box-shadow:0 12px 28px -14px #000000d9}.credential-card:active{transform:scale(.985)}.credential-card:after{content:"";pointer-events:none;background:linear-gradient(115deg,#ffffff2e,#0000 42%);position:absolute;inset:0}.credential-card__body{z-index:1;flex-direction:column;gap:14px;min-height:96px;display:flex;position:relative}.credential-card__hint{opacity:.85;align-items:center;gap:4px;font-size:12px;font-weight:600;display:inline-flex}.credential-card__hint svg{width:14px;height:14px}.credential-card__type{letter-spacing:-.01em;font-size:18px;font-weight:700;line-height:1.25}.credential-card__issuer{opacity:.85;font-size:12px;font-family:var(--font-mono);word-break:break-all}.credential-card__footer{justify-content:space-between;align-items:flex-end;gap:10px;margin-top:auto;display:flex}.credential-card__footer .stack{align-items:flex-start}.credential-card__meta{text-transform:uppercase;letter-spacing:.07em;opacity:.8;font-size:11px}.credential-card--selectable{cursor:pointer}.credential-card--selected{outline-offset:2px;outline:2px solid #fff}.credential-card__check{background:#ffffff38;border:1.5px solid #ffffffb3;border-radius:50%;flex:none;place-items:center;width:26px;height:26px;display:grid}.credential-card__check svg{opacity:0;width:15px;height:15px;transition:opacity .12s}.credential-card--selected .credential-card__check{color:#111827;background:#fff}.credential-card--selected .credential-card__check svg{opacity:1}.badge{letter-spacing:.02em;background:var(--surface-strong);border:1px solid var(--border);color:var(--text-muted);white-space:nowrap;border-radius:999px;align-items:center;gap:5px;padding:3px 9px;font-size:11.5px;font-weight:600;display:inline-flex}.badge--valid{background:var(--success-soft);color:var(--success);border-color:#34d3994d}.badge--expired{background:var(--danger-soft);color:var(--danger);border-color:#f871714d}.badge--not-yet-valid,.badge--pending{background:var(--warning-soft);color:var(--warning);border-color:#fbbf244d}.badge--on-card{color:#fff;background:#00000047;border-color:#ffffff47}.button{letter-spacing:-.01em;border:1px solid #0000;border-radius:14px;justify-content:center;align-items:center;gap:8px;width:100%;min-height:50px;padding:0 20px;font-size:15.5px;font-weight:620;transition:transform .12s,opacity .12s,background .15s;display:inline-flex}.button:active:not(:disabled){transform:scale(.985)}.button:disabled{opacity:.5;cursor:not-allowed}.button--primary{background:var(--accent);color:#fff;box-shadow:0 10px 24px -14px var(--accent)}.button--primary:hover:not(:disabled){background:#5457e5}.button--secondary{background:var(--surface-strong);border-color:var(--border-strong);color:var(--text)}.button--secondary:hover:not(:disabled){background:#ffffff1f}.button--ghost{color:var(--text-muted);background:0 0;min-height:44px}.button--ghost:hover:not(:disabled){color:var(--text)}.button--danger{background:var(--danger-soft);color:var(--danger);border-color:#f8717152}.button--auto{width:auto}.button--small{border-radius:11px;min-height:38px;padding:0 14px;font-size:13.5px}.button svg{flex:none;width:19px;height:19px}.field{flex-direction:column;gap:7px;display:flex}.field__label{color:var(--text-muted);font-size:13.5px;font-weight:600}.field__hint{color:var(--text-faint);font-size:12.5px;line-height:1.45}.input{background:var(--surface);border:1px solid var(--border);width:100%;min-height:50px;color:var(--text);border-radius:13px;padding:12px 14px;font-size:16px;transition:border-color .15s,background .15s}.input::placeholder{color:var(--text-faint)}.input:focus{border-color:var(--accent);background:var(--bg-elevated);outline:none}.input:disabled{opacity:.6}textarea.input{resize:vertical;min-height:108px;font-family:var(--font-mono);font-size:14px;line-height:1.55}.input--mono{font-family:var(--font-mono);font-size:14px}.input-with-action{align-items:stretch;gap:8px;display:flex}.input-with-action .input{flex:1;min-width:0}.alert{border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--surface);align-items:flex-start;gap:10px;padding:12px 14px;font-size:14px;line-height:1.45;display:flex}.alert svg{flex:none;width:18px;height:18px;margin-top:1px}.alert--error{background:var(--danger-soft);color:#fecaca;border-color:#f871714d}.alert--warning{background:var(--warning-soft);color:#fde68a;border-color:#fbbf244d}.alert--info{background:var(--accent-soft);color:#c7d2fe;border-color:#6366f14d}.alert--success{background:var(--success-soft);color:#a7f3d0;border-color:#34d3994d}.empty-state{text-align:center;flex-direction:column;align-items:center;gap:12px;padding:48px 20px;display:flex}.empty-state__icon{background:var(--surface);border:1px solid var(--border);width:62px;height:62px;color:var(--text-faint);border-radius:20px;place-items:center;display:grid}.empty-state__icon svg{width:28px;height:28px}.empty-state__title{font-size:17px;font-weight:650}.empty-state__text{color:var(--text-muted);max-width:34ch;font-size:14px}.spinner{border:2px solid;border-top-color:#0000;border-radius:50%;flex:none;width:18px;height:18px;animation:.7s linear infinite spin}.spinner--large{border-width:2.5px;width:30px;height:30px}@keyframes spin{to{transform:rotate(360deg)}}.loading-block{color:var(--text-muted);flex-direction:column;align-items:center;gap:12px;padding:44px 0;font-size:14px;display:flex}.skeleton{border-radius:var(--radius-lg);background:linear-gradient(100deg,#ffffff0d 30%,#ffffff1c 50%,#ffffff0d 70%) 0 0/220% 100%;height:148px;animation:1.4s ease-in-out infinite shimmer}@keyframes shimmer{to{background-position:-220% 0}}.login{z-index:1;max-width:420px;min-height:100dvh;padding:calc(32px + var(--safe-top)) calc(22px + var(--safe-left)) calc(32px + var(--safe-bottom)) calc(22px + var(--safe-right));flex-direction:column;justify-content:center;gap:28px;margin-inline:auto;display:flex;position:relative}.login__brand{text-align:center;flex-direction:column;align-items:center;gap:14px;display:flex}.login__logo{color:#fff;background:linear-gradient(140deg,#6366f1,#8b5cf6);border-radius:22px;place-items:center;width:74px;height:74px;display:grid;box-shadow:0 18px 40px -18px #6366f1e6}.login__logo svg{width:38px;height:38px}.login__footer{text-align:center;color:var(--text-faint);font-size:12px;line-height:1.6}.login__footer .mono{word-break:normal;overflow-wrap:anywhere;font-size:11.5px}.scanner{aspect-ratio:1;border-radius:var(--radius-lg);border:1px solid var(--border);background:#000;width:100%;position:relative;overflow:hidden}.scanner__video{object-fit:cover;width:100%;height:100%;display:block}.scanner__overlay{pointer-events:none;place-items:center;display:grid;position:absolute;inset:0}.scanner__frame{aspect-ratio:1;border-radius:18px;width:62%;position:relative;box-shadow:0 0 0 100vmax #0000007a}.scanner__corner{border:3px solid #fff;width:28px;height:28px;position:absolute}.scanner__corner--tl{border-bottom:none;border-right:none;border-radius:14px 0 0;top:-1px;left:-1px}.scanner__corner--tr{border-bottom:none;border-left:none;border-radius:0 14px 0 0;top:-1px;right:-1px}.scanner__corner--bl{border-top:none;border-right:none;border-radius:0 0 0 14px;bottom:-1px;left:-1px}.scanner__corner--br{border-top:none;border-left:none;border-radius:0 0 14px;bottom:-1px;right:-1px}.scanner__placeholder{text-align:center;color:var(--text-muted);background:#0d1220;flex-direction:column;justify-content:center;align-items:center;gap:12px;padding:26px;font-size:14px;display:flex;position:absolute;inset:0}.scanner__placeholder svg{width:34px;height:34px;color:var(--text-faint)}.result{text-align:center;flex-direction:column;align-items:center;gap:16px;padding:36px 8px 12px;display:flex}.result__icon{border-radius:50%;place-items:center;width:84px;height:84px;animation:.32s cubic-bezier(.34,1.56,.64,1) pop;display:grid}.result__icon svg{width:42px;height:42px}.result__icon--success{background:var(--success-soft);color:var(--success);border:2px solid #34d39959}.result__icon--error{background:var(--danger-soft);color:var(--danger);border:2px solid #f8717159}.result__title{letter-spacing:-.02em;font-size:21px;font-weight:700}.result__text{color:var(--text-muted);max-width:36ch;font-size:14.5px}@keyframes pop{0%{opacity:0;transform:scale(.5)}to{opacity:1;transform:scale(1)}}.raw-json{border:1px solid var(--border);border-radius:var(--radius-sm);font-family:var(--font-mono);color:#cbd5e1;white-space:pre;background:#080c15;max-height:340px;margin:0;padding:14px;font-size:12px;line-height:1.6;overflow:auto}.disclosure{border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);overflow:hidden}.disclosure>summary{cursor:pointer;justify-content:space-between;align-items:center;gap:8px;padding:14px 16px;font-size:14.5px;font-weight:600;list-style:none;display:flex}.disclosure>summary::-webkit-details-marker{display:none}.disclosure>summary:after{content:"";border-right:2px solid var(--text-faint);border-bottom:2px solid var(--text-faint);flex:none;width:8px;height:8px;transition:transform .18s;transform:rotate(45deg)}.disclosure[open]>summary:after{transform:rotate(-135deg)}.disclosure__content{padding:0 16px 16px}.install-banner{border-radius:var(--radius);background:var(--accent-soft);border:1px solid #6366f14d;align-items:center;gap:12px;padding:12px 14px;display:flex}.install-banner__text{color:#c7d2fe;flex:1;min-width:0;font-size:13.5px;line-height:1.45}.install-banner__title{color:#e0e7ff;font-weight:650}
