:root{font-family:Inter,SF Pro Display,PingFang SC,Microsoft YaHei,sans-serif;color:#13253a;background:#f3f6f9;font-synthesis:none;text-rendering:optimizeLegibility}*{box-sizing:border-box}body{margin:0;min-width:320px;min-height:100vh;min-height:100svh;background:radial-gradient(circle at 90% 5%,rgba(65,146,220,.14),transparent 28%),#f3f6f9}button,input{font:inherit}button{-webkit-tap-highlight-color:transparent}svg{fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.8}#app{width:min(100%,520px);min-height:100vh;min-height:100svh;margin:0 auto;background:#f7f9fb;box-shadow:0 0 48px #0d264114}.topbar{min-height:86px;padding:calc(15px + env(safe-area-inset-top)) 22px 15px;display:flex;align-items:center;gap:12px;color:#fff;background:linear-gradient(135deg,#0b2949,#164d7c)}.brand-mark{width:42px;height:42px;display:grid;place-items:center;border:1px solid rgba(255,255,255,.22);border-radius:13px;background:#ffffff1a}.brand-mark svg{width:23px}.eyebrow{margin:0 0 3px;color:#7f9fbe;font-size:11px;font-weight:700;letter-spacing:.13em}.topbar .eyebrow{color:#9cc6e9}.topbar h1{margin:0;font-size:20px;font-weight:650;letter-spacing:.03em}.device-badge{margin-left:auto;padding:6px 10px;border:1px solid rgba(255,255,255,.22);border-radius:999px;color:#d7eafa;font-size:12px;font-weight:650}main{padding:28px 18px calc(24px + env(safe-area-inset-bottom))}.hero{display:flex;align-items:center;gap:16px;padding:0 5px 22px}.hero-icon{flex:0 0 auto;width:64px;height:64px;display:grid;place-items:center;color:#1674bd;border-radius:20px;background:linear-gradient(145deg,#e8f4ff,#dceeff);box-shadow:inset 0 0 0 1px #2578bc14}.hero-icon svg{width:32px}.hero h2{margin:0;color:#112a43;font-size:21px;line-height:1.3}.hero>div>p:last-child{margin:6px 0 0;color:#718296;font-size:13px}.action-card{padding:18px;border:1px solid #e4eaf0;border-radius:22px;background:#fff;box-shadow:0 16px 36px #18375614}.scan-button{width:100%;min-height:82px;padding:15px;display:flex;align-items:center;gap:13px;color:#163653;text-align:left;border:1px solid #cfe3f5;border-radius:17px;background:#f2f8fd;cursor:pointer}.scan-button:active{transform:scale(.99)}.scan-icon{width:45px;height:45px;display:grid;place-items:center;color:#1475bd;border-radius:14px;background:#fff;box-shadow:0 5px 14px #17619a1a}.scan-icon svg{width:24px}.scan-button strong,.scan-button small{display:block}.scan-button strong{margin-bottom:4px;font-size:16px}.scan-button small{color:#6c8297;font-size:12px}.chevron{margin-left:auto;color:#7b9ab5;font-size:27px;font-weight:300}.divider{display:flex;align-items:center;gap:12px;margin:22px 0;color:#91a0af;font-size:12px}.divider:before,.divider:after{height:1px;flex:1;background:#e7ecf1;content:""}.field-label{display:block;margin-bottom:9px;color:#405469;font-size:13px;font-weight:650}.input-wrap{position:relative;display:flex;align-items:center}.input-wrap>svg{position:absolute;left:14px;width:21px;color:#6b8298;pointer-events:none}.input-wrap input{width:100%;height:54px;padding:0 46px 0 45px;color:#172b3f;border:1px solid #d7e0e8;border-radius:14px;outline:none;background:#fbfcfd;font-size:16px;font-weight:550;letter-spacing:.04em;transition:border-color .16s,box-shadow .16s}.input-wrap input:focus{border-color:#2484ce;box-shadow:0 0 0 4px #2484ce1c}.input-wrap input[aria-invalid=true]{border-color:#db756f}.input-wrap input::placeholder{color:#9ba8b4;font-weight:400;letter-spacing:0}.clear-button{position:absolute;right:11px;width:31px;height:31px;padding:0;color:#728397;border:0;border-radius:50%;background:#e9eef3;cursor:pointer}.field-hint{margin:8px 2px 0;color:#8997a5;font-size:12px}.unlock-button{width:100%;height:58px;margin-top:23px;display:flex;align-items:center;justify-content:center;gap:9px;color:#fff;border:0;border-radius:15px;background:linear-gradient(135deg,#1478c1,#0b5b99);box-shadow:0 12px 22px #0f65a33b;font-size:17px;font-weight:700;cursor:pointer;transition:opacity .16s,transform .16s,box-shadow .16s}.unlock-button svg{width:22px}.unlock-button:not(:disabled):active{transform:translateY(1px);box-shadow:0 7px 14px #0f65a333}.unlock-button:disabled{color:#98a7b5;background:#e3e9ee;box-shadow:none;cursor:not-allowed}.unlock-button.is-loading svg{animation:pulse 1s ease-in-out infinite}.result{margin-top:16px;padding:14px;display:flex;align-items:flex-start;gap:11px;border-radius:13px}.result-icon{flex:0 0 auto;width:10px;height:10px;margin-top:5px;border-radius:50%;background:currentColor;box-shadow:0 0 0 4px #ffffffb3}.result strong{display:block;font-size:14px}.result p{margin:4px 0 0;font-size:12px;line-height:1.55}.result--success{color:#23704b;background:#e8f6ee}.result--error{color:#a9433e;background:#fbedeb}.result--info{color:#24648e;background:#eaf4fb}.security-note{margin:18px 10px 0;display:flex;justify-content:center;align-items:center;gap:7px;color:#7a8998;font-size:12px;text-align:center}.history-card{margin-top:16px;padding:18px;border:1px solid #e4eaf0;border-radius:22px;background:#fff;box-shadow:0 10px 28px #1837560e}.history-header{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:14px}.history-header h2{margin:0;color:#17314b;font-size:18px}.local-badge{padding:5px 9px;color:#65798d;border-radius:999px;background:#edf2f6;font-size:11px;white-space:nowrap}.history-empty{padding:22px 12px;color:#8795a3;border:1px dashed #dce4eb;border-radius:15px;text-align:center;background:#fafbfd}.history-empty[hidden]{display:none}.history-empty svg{width:27px;color:#8da9c1}.history-empty p{margin:7px 0 3px;color:#556b7f;font-size:14px;font-weight:650}.history-empty small{font-size:12px}.history-list{margin:0;padding:0;list-style:none}.history-item{padding:13px 0;display:flex;align-items:center;gap:12px;border-top:1px solid #edf1f4}.history-item:first-child{padding-top:2px;border-top:0}.history-item:last-child{padding-bottom:2px}.history-details{min-width:0;flex:1}.history-details strong,.history-details small{display:block}.history-details strong{overflow:hidden;color:#24394d;font-size:14px;letter-spacing:.025em;text-overflow:ellipsis;white-space:nowrap}.history-details small{margin-top:4px;color:#8a98a6;font-size:11px}.history-actions{flex:0 0 auto;display:flex;align-items:center;gap:7px}.history-actions button{height:34px;padding:0 11px;border-radius:10px;font-size:12px;font-weight:650;cursor:pointer}.history-unlock{color:#126caf;border:1px solid #bcdaf0;background:#edf7fe}.history-unlock:disabled{opacity:.5;cursor:not-allowed}.history-delete{color:#8f4e4a;border:1px solid #ead5d2;background:#fff7f6}.security-note svg{flex:0 0 auto;width:17px;color:#6e8ca6}.scanner-dialog{width:min(calc(100% - 24px),480px);padding:18px;color:#13253a;border:0;border-radius:22px;background:#fff;box-shadow:0 24px 80px #04192e57}.scanner-dialog::backdrop{background:#06192bb8;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.scanner-header{display:flex;align-items:flex-start;margin-bottom:15px}.scanner-header h2{margin:0;font-size:19px}.icon-button{width:36px;height:36px;margin-left:auto;color:#63778b;border:0;border-radius:50%;background:#edf1f5;font-size:24px;line-height:1;cursor:pointer}.reader{position:relative;overflow:hidden;min-height:280px;border-radius:16px;background:#0a1825}.reader--unavailable{display:grid;place-items:center;min-height:210px;background:linear-gradient(145deg,#0b2134,#102f49)}.reader--unavailable:before{max-width:190px;color:#b8ccdc;font-size:13px;line-height:1.6;text-align:center;content:"实时摄像头暂不可用\a请使用下方图片识别";white-space:pre}.reader video{object-fit:cover}.scanner-message{margin:13px 0 2px;color:#718296;font-size:13px;text-align:center}.scanner-fallback{margin-top:14px;padding-top:14px;display:flex;align-items:center;justify-content:center;gap:8px;color:#7b8b9a;border-top:1px solid #e8edf1;font-size:12px}.file-scan-button{padding:8px 11px;color:#126caf;border:1px solid #bcdaf0;border-radius:10px;background:#edf7fe;font-weight:650;cursor:pointer}@keyframes pulse{50%{opacity:.45}}@media(min-width:540px){body{padding:24px 0}#app{min-height:calc(100vh - 48px);border-radius:28px;overflow:hidden}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{scroll-behavior:auto!important;animation-duration:.01ms!important;transition-duration:.01ms!important}}
