:root{--bg:#f5f6f8;--surface:#fff;--ink:#1a1a1a;--ink-soft:#555;--primary:#1677ff;--primary-ink:#fff;--danger:#d4380d;--warning:#ad6800;--warning-bg:#fffbe6;--warning-border:#ffe58f;--line:#e5e7eb;--shadow:0 1px 3px rgba(0,0,0,.08),0 1px 2px rgba(0,0,0,.04);--radius:14px;--fs-base:18px;--fs-lg:22px;--fs-xl:28px;--fs-xxl:44px;--fs-display:64px}*{box-sizing:border-box}html{font-size:16px;text-size-adjust:100%}body,html{margin:0;padding:0;background:var(--bg);color:var(--ink);font-family:-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:var(--fs-base);line-height:1.5;-webkit-tap-highlight-color:transparent;-webkit-font-smoothing:antialiased}body{min-height:100dvh}a{color:var(--primary);text-decoration:none}button{font-family:inherit}.app-shell{max-width:640px;margin:0 auto;min-height:100dvh;background:var(--surface);display:flex;flex-direction:column}.app-main{flex:1 1;padding:12px 8px 110px}.records-layout{display:flex;flex-direction:column;height:calc(100dvh - 56px);overflow:hidden}.records-chart-fixed{flex-shrink:0;padding:4px 8px 8px;border-bottom:1px solid var(--line);background:var(--surface)}.records-table-scroll{flex:1 1;overflow-y:auto;-webkit-overflow-scrolling:touch;padding:0 8px 110px}.fab{position:fixed;left:50%;bottom:24px;transform:translateX(-50%);z-index:50;display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:16px 32px;min-height:60px;border:none;border-radius:999px;background:var(--primary);color:var(--primary-ink);font-family:inherit;font-size:var(--fs-lg);font-weight:600;cursor:pointer;box-shadow:0 6px 16px rgba(22,119,255,.4),0 2px 6px rgba(0,0,0,.15);white-space:nowrap;line-height:1.2}.fab:active{transform:translateX(-50%) translateY(1px);filter:brightness(.95)}.fab[disabled]{opacity:.85;cursor:progress}.fab-icon{font-size:24px;line-height:1}.fab-spinner{width:22px;height:22px;border:3px solid hsla(0,0%,100%,.4);border-top-color:#fff;border-radius:50%;display:inline-block;animation:spin .8s linear infinite}.fab-toast{position:fixed;left:50%;transform:translateX(-50%);bottom:96px;z-index:51;max-width:calc(100% - 32px);background:var(--warning-bg);border:1px solid var(--warning-border);color:var(--warning);padding:12px 16px;border-radius:12px;font-size:var(--fs-base);text-align:center;word-break:break-word;box-shadow:var(--shadow)}.app-footer[hidden]{display:none}.logout-btn{font-family:inherit;font-size:13px;color:var(--ink-soft);background:none;border:none;padding:6px 12px;cursor:pointer;opacity:.6;line-height:1}.logout-btn:active{opacity:1}.app-header{padding:16px;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;gap:12px}.app-header h1{margin:0;font-size:var(--fs-lg);font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.app-header .ghost,.app-header a{font-size:var(--fs-lg);color:var(--primary);background:none;border:none;padding:8px;cursor:pointer;white-space:nowrap;flex-shrink:0}.account-select{font-family:inherit;font-size:var(--fs-base);color:var(--ink);background:var(--surface);border:2px solid var(--line);border-radius:10px;padding:8px 10px;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;min-width:90px;flex-shrink:0}.account-select:focus{outline:none;border-color:var(--primary)}.btn{display:flex;align-items:center;justify-content:center;gap:8px;border:none;border-radius:var(--radius);padding:18px 24px;font-size:var(--fs-lg);font-weight:600;cursor:pointer;width:100%;min-height:64px;transition:transform .05s ease,filter .1s ease;white-space:nowrap;line-height:1.2}.btn:active{transform:translateY(1px)}.btn-primary{background:var(--primary);color:var(--primary-ink)}.btn-primary:active{filter:brightness(.95)}.btn-secondary{background:var(--surface);color:var(--ink);border:2px solid var(--line)}.btn-danger{background:var(--danger);color:#fff}.btn[disabled]{opacity:.5;cursor:not-allowed}.btn-camera{width:100%;min-height:200px;border-radius:28px;font-size:clamp(20px,6vw,var(--fs-xl));background:var(--primary);color:var(--primary-ink);border:none;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;cursor:pointer;box-shadow:var(--shadow);padding:24px;line-height:1.2}.btn-camera:active{filter:brightness(.95)}.btn-camera .camera-icon{font-size:clamp(48px,15vw,64px);line-height:1}.card{background:var(--surface);border-radius:var(--radius);padding:20px}.bp-card{background:transparent;padding:8px 0}.bp-thumb-wrap{display:flex;justify-content:center;margin-bottom:4px}.bp-thumb{max-height:160px;max-width:100%;width:auto;border-radius:10px;object-fit:contain;box-shadow:var(--shadow)}.saved-banner{background:#f6ffed;color:#389e0d;border:1px solid #b7eb8f;border-radius:10px;padding:10px 12px;text-align:center;font-size:var(--fs-lg);font-weight:600}.saved-banner.saving{background:var(--surface);color:var(--ink-soft);border-color:var(--line);font-weight:400}.confirm-actions{position:-webkit-sticky;position:sticky;bottom:8px;display:grid;grid-gap:10px;gap:10px;padding:10px 8px;margin:0 -8px;background:var(--surface);border-radius:12px;box-shadow:0 -4px 16px rgba(0,0,0,.06)}.app-main-confirm{padding-bottom:20px}.records-stack{display:flex;flex-direction:column;gap:8px}.records-chart-block{border-bottom:1px solid var(--line);padding:4px 0 8px}.bp-display{text-align:center;padding:24px 0 16px}.bp-recognizing-screen{position:relative;width:100%;min-height:min(70vh,520px);border-radius:var(--radius);overflow:hidden;background:#000}.bp-bg-photo{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;opacity:.45;filter:grayscale(20%)}.bp-recognizing-overlay{position:relative;z-index:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;min-height:min(70vh,520px);padding:24px}.bp-recognizing-overlay .bp-spinner{border-color:#fff hsla(0,0%,100%,.3) hsla(0,0%,100%,.3)}.bp-recognizing-overlay .bp-recognizing-text{color:#fff;text-shadow:0 1px 4px rgba(0,0,0,.6)}.bp-retake-mini{background:hsla(0,0%,100%,.95);color:var(--ink);border:none;min-height:48px;width:auto;padding:12px 24px;font-size:var(--fs-base)}.bp-recognizing{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;min-height:120px}.bp-spinner{width:clamp(56px,16vw,72px);height:clamp(56px,16vw,72px);border:5px solid var(--line);border-top-color:var(--primary);border-radius:50%;animation:spin .8s linear infinite}.bp-recognizing-text{font-size:var(--fs-lg);color:var(--ink-soft)}.bp-numbers{display:flex;align-items:baseline;justify-content:space-around;gap:4px;line-height:1}.bp-num-item{flex:1 1;display:flex;justify-content:center}.bp-numbers .sep{color:var(--ink-soft);font-weight:400}.bp-editable{background:var(--surface);border:2px solid var(--line);border-radius:12px;width:90%;max-width:140px;font-size:36px;font-weight:700;text-align:center;padding:4px;color:var(--ink);-webkit-appearance:none;-moz-appearance:none;appearance:none;line-height:1.1;transition:font-size .05s}.bp-editable-pulse{max-width:120px}.bp-editable:focus{outline:none;border-color:var(--primary)}.bp-labels{display:flex;justify-content:space-around;gap:4px;margin-top:10px;color:var(--ink-soft);font-size:var(--fs-base);white-space:nowrap}.bp-labels-3>span{flex:1 1;text-align:center}.notice{background:var(--warning-bg);border:1px solid var(--warning-border);color:var(--warning);padding:16px;border-radius:12px;font-size:var(--fs-base);text-align:center;margin-top:16px;word-break:break-word;line-height:1.4}.badge-mock{display:inline-block;background:#f0f0f0;border-radius:999px;padding:2px 10px;font-size:14px;margin-left:6px;vertical-align:middle}.badge-mock,.loading{color:var(--ink-soft)}.loading{text-align:center;padding:48px 16px}.spinner{width:36px;height:36px;border:4px solid var(--line);border-top-color:var(--primary);border-radius:50%;margin:0 auto 12px;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(1turn)}}.records-table{width:100%;border-collapse:collapse;font-size:var(--fs-base);table-layout:fixed}.records-table .col-time{width:40%}.records-table .col-num{width:20%}.records-table td,.records-table th{padding:10px 2px;text-align:center;border-bottom:1px solid var(--line)}.records-table th{color:var(--ink-soft);font-weight:600;font-size:14px}.records-table td.num{font-size:var(--fs-lg);font-weight:600;white-space:nowrap}.records-table td.time{font-size:13px;color:var(--ink-soft);white-space:normal;word-break:keep-all;line-height:1.2}.empty-state{text-align:center;padding:40px 16px;color:var(--ink-soft)}.stack>*+*{margin-top:16px}.muted{color:var(--ink-soft);word-break:break-word}.center{text-align:center}.field{display:flex;flex-direction:column;gap:6px}.field>span{font-size:var(--fs-base);color:var(--ink-soft)}.field input{font-family:inherit;font-size:var(--fs-lg);padding:14px 12px;border:2px solid var(--line);border-radius:12px;background:var(--surface);color:var(--ink);-webkit-appearance:none;-moz-appearance:none;appearance:none;width:100%}.field input:focus{outline:none;border-color:var(--primary)}