:root{--bg: #f4f6f9;--card: #fff;--primary: #1677ff;--primary-dark: #0958d9;--text: #1f2329;--muted: #646a73;--border: #e5e6eb;--ok: #00a870;--bad: #e34d59;--warn: #ed7b2f;--radius: 12px;--shadow: 0 2px 12px rgba(31, 35, 41, .08);font-family:PingFang SC,Noto Sans SC,Microsoft YaHei,system-ui,sans-serif}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);line-height:1.55;min-height:100vh}a{color:var(--primary);text-decoration:none}a:hover{text-decoration:underline}.wrap{max-width:720px;margin:0 auto;padding:16px}header.app-header{background:linear-gradient(135deg,#1677ff,#3b9bff);color:#fff;padding:20px 16px 24px}header.app-header h1{margin:0 0 6px;font-size:1.35rem}header.app-header p{margin:0;opacity:.92;font-size:.9rem}.nav-links{margin-top:12px;display:flex;gap:12px;flex-wrap:wrap;font-size:.85rem}.nav-links a{color:#fff;opacity:.95;text-decoration:underline}.card{background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow);padding:16px;margin:14px 0}.card h2{margin:0 0 10px;font-size:1.05rem}.muted{color:var(--muted);font-size:.88rem}.disclaimer{background:#fff7e8;border:1px solid #ffe4b8;border-radius:var(--radius);padding:12px 14px;font-size:.85rem;color:#8a5a00;margin:14px 0}.spec-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px}.spec-btn{border:1.5px solid var(--border);background:#fff;border-radius:10px;padding:12px 10px;text-align:left;cursor:pointer;transition:border-color .15s,box-shadow .15s}.spec-btn:hover,.spec-btn.active{border-color:var(--primary);box-shadow:0 0 0 2px #1677ff26}.spec-btn strong{display:block;font-size:.92rem;margin-bottom:4px}.spec-btn span{font-size:.75rem;color:var(--muted)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;background:var(--primary);color:#fff;border:none;border-radius:10px;padding:10px 16px;font-size:.95rem;cursor:pointer;font-weight:600}.btn:hover{background:var(--primary-dark)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn.secondary{background:#fff;color:var(--primary);border:1.5px solid var(--primary)}.btn.ghost{background:transparent;color:var(--muted);border:1px solid var(--border)}.btn.block{width:100%}.row{display:flex;gap:10px;flex-wrap:wrap;align-items:center}.upload-zone{border:2px dashed var(--border);border-radius:var(--radius);padding:28px 16px;text-align:center;background:#fafbfc;cursor:pointer}.upload-zone:hover{border-color:var(--primary);background:#f0f7ff}#cropCanvas{max-width:100%;display:block;margin:0 auto;touch-action:none;background:#222;border-radius:8px;cursor:crosshair}.preview-box{text-align:center}.preview-box img{max-width:100%;border-radius:8px;box-shadow:var(--shadow);background:#eee}.badge{display:inline-block;padding:2px 8px;border-radius:999px;font-size:.78rem;font-weight:600}.badge.ok{background:#e8f8f0;color:var(--ok)}.badge.bad{background:#fdecee;color:var(--bad)}.badge.warn{background:#fff3e8;color:var(--warn)}.steps{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:12px}.step-pill{font-size:.75rem;padding:4px 10px;border-radius:999px;background:#eee;color:var(--muted)}.step-pill.on{background:#e6f0ff;color:var(--primary);font-weight:600}.step-pill.done{background:#e8f8f0;color:var(--ok)}label.chk{display:flex;align-items:center;gap:6px;font-size:.9rem;cursor:pointer}select,input[type=text],input[type=password],input[type=number]{width:100%;padding:10px 12px;border:1px solid var(--border);border-radius:8px;font-size:.95rem}.table{width:100%;border-collapse:collapse;font-size:.85rem}.table th,.table td{border-bottom:1px solid var(--border);padding:8px 6px;text-align:left}.stat-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}.stat{background:#f7f8fa;border-radius:10px;padding:14px}.stat .n{font-size:1.4rem;font-weight:700;color:var(--primary)}.stat .l{font-size:.8rem;color:var(--muted)}footer{text-align:center;padding:24px 16px 40px;color:var(--muted);font-size:.8rem}.hidden{display:none!important}.code-list{font-family:ui-monospace,monospace;background:#f7f8fa;padding:10px;border-radius:8px;word-break:break-all}@media(min-width:640px){.stat-grid{grid-template-columns:repeat(4,1fr)}}
