:root{color:#1e2420;font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;background:#f7f8f5;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}*{box-sizing:border-box}body{min-width:320px;min-height:100svh;margin:0}button,input{font:inherit}button{cursor:pointer}button:disabled{cursor:not-allowed;opacity:.55}.app-shell{width:100%;max-width:480px;min-height:100svh;padding:14px;padding-bottom:max(18px, env(safe-area-inset-bottom));margin:0 auto}.topbar{justify-content:space-between;align-items:center;gap:16px;padding:10px 0 20px;display:flex}.brand,.text-button{color:#1e2420;background:0 0;border:0}.brand{align-items:center;gap:10px;min-height:40px;padding:0;font-weight:700;display:inline-flex}.text-button{min-height:38px;padding:0 6px}.notice{color:#465048;background:#fff;border:1px solid #d8ded5;border-radius:8px;margin-bottom:18px;padding:10px 12px}.notice.error{color:#8b2d1d;background:#fff6f2;border-color:#e8b4a7}.notice.success{color:#23613a;background:#f1fbf4;border-color:#b7d7c4}.content-grid,.result-layout{grid-template-columns:minmax(0,1fr);align-items:start;gap:14px;display:grid}.workspace,.upload-panel,.side-panel,.edit-view,.download-view,.plain-view{background:#fff;border:1px solid #dfe4db;border-radius:8px}.workspace,.edit-view,.download-view,.plain-view{padding:22px}.upload-panel,.side-panel{padding:16px}.section-heading{margin-bottom:20px}.section-heading h1{letter-spacing:0;margin:0 0 6px;font-size:26px;line-height:1.15}.section-heading p{color:#657067;margin:0}.spec-grid{grid-template-columns:1fr;gap:10px;margin-bottom:22px;display:grid}.spec-option{color:#1f2922;text-align:left;background:#fbfcfa;border:1px solid #d6ddd4;border-radius:8px;justify-content:space-between;align-items:center;gap:12px;min-height:72px;padding:14px;display:flex}.spec-option.active{background:#eef8f1;border-color:#327d5c;box-shadow:inset 0 0 0 1px #327d5c}.spec-option span{font-weight:700}.spec-option small,.dropzone small,.download-row small{color:#66716b}.shooting-guide{margin-top:12px}.guide-heading{color:#455149;margin-bottom:8px;font-size:13px;font-weight:700}.guide-list{grid-template-columns:repeat(4,minmax(0,1fr));gap:6px;display:grid}.guide-item{text-align:center;background:#f8faf6;border:1px solid #dfe8dd;border-radius:8px;place-items:center;gap:5px;min-height:64px;padding:8px 4px;display:grid}.guide-icon{color:#1f6f51;background:#eef8f1;border-radius:999px;place-items:center;width:28px;height:28px;display:grid}.guide-item strong{color:#1f2922;font-size:12px;line-height:1.18;display:block}.field-group{gap:10px;display:grid}.field-label{font-weight:700}.swatches{gap:10px;display:flex}.swatch{border:1px solid #aeb9af;border-radius:999px;width:42px;height:42px}.swatch.active{outline-offset:2px;outline:3px solid #327d5c}.dropzone{text-align:center;background:#f8faf6;border:1px dashed #9aa99d;border-radius:8px;flex-direction:column;justify-content:center;align-items:center;gap:12px;min-height:180px;display:flex}.dropzone input,.hidden-file-input{clip:rect(0, 0, 0, 0);width:1px;height:1px;position:absolute;overflow:hidden}.primary-action,.secondary-action,.danger-action{border:1px solid #0000;border-radius:8px;justify-content:center;align-items:center;gap:8px;min-height:52px;padding:0 16px;text-decoration:none;display:inline-flex}.primary-action{color:#fff;background:#1f6f51;width:100%;margin-top:14px}.secondary-action{color:#203127;background:#fff;border-color:#cfd8ce}.danger-action{color:#9a311d;background:#fff7f3;border-color:#efc1b3}.primary-action.compact,.secondary-action.compact{min-height:42px;margin-top:0;padding:0 14px}.capture-view{gap:16px;display:grid}.camera-stage{background:#1d211f;border-radius:8px;min-height:68svh;position:relative;overflow:hidden;container-type:size}.camera-stage video{object-fit:cover;width:100%;height:100%;min-height:68svh}.guide-mask{background:#0000002e;position:absolute;inset:0}.camera-permission-panel{color:#fff;text-align:center;background:#0a0f0cc7;place-content:center;gap:12px;padding:28px;display:grid;position:absolute;inset:0}.camera-permission-panel strong{font-size:18px;line-height:1.3}.camera-permission-panel span{color:#ffffffd1;max-width:330px;line-height:1.5}.permission-actions{grid-template-columns:1fr 1fr;gap:10px;width:min(100%,300px);margin:4px auto 0;display:grid}.composition-guide{aspect-ratio:295/413;width:min(90%,420px);display:block;position:absolute;top:4%;left:50%;transform:translate(-50%)}@supports (width:1cqw){.composition-guide{width:min(90cqw,65cqh,420px)}}.photo-frame{border:2px solid #ffffffe0;border-radius:10px;position:absolute;inset:0;box-shadow:0 0 0 999px #0000002e}.head-top-line,.chin-line{border-top:1px dashed #ffffffb8;height:1px;position:absolute;left:24%;right:24%}.head-top-line{top:9%}.chin-line{top:74%}.head-oval{border:2px solid #f4fff8;border-radius:49% 49% 44% 44%;width:76%;height:65%;position:absolute;top:9%;left:50%;transform:translate(-50%)}.ear-marker{opacity:.96;border:2px solid #f4fff8eb;width:7%;min-width:18px;height:12%;min-height:54px;position:absolute;top:35.5%}.ear-marker.left{border-right:0;border-radius:22px 0 0 22px;left:7.5%}.ear-marker.right{border-left:0;border-radius:0 22px 22px 0;right:7.5%}.eye-line,.center-line,.shoulder-guide{position:absolute}.eye-line{background:#ffffffdb;height:1px;top:38%;left:12%;right:12%}.eye-line:after{color:#ffffffe6;content:"眼睛线";white-space:nowrap;background:#0000006b;border-radius:999px;padding:2px 7px;font-size:11px;line-height:1.4;position:absolute;top:-22px;right:0}.center-line{background:#fff9;width:1px;top:0;bottom:0;left:50%}.shoulder-guide{border-top:2px solid #ffffffb8;border-radius:50% 50% 0 0;height:15%;bottom:9%;left:8%;right:8%}.capture-hint-strip{grid-template-columns:repeat(4,68px);gap:6px;width:fit-content;max-width:100%;margin-top:-4px;display:grid;overflow:hidden}.capture-hint-strip span{color:#314139;white-space:nowrap;background:#fff;border:1px solid #d7e0d5;border-radius:999px;justify-content:center;align-items:center;width:100%;min-width:0;min-height:32px;padding:0 4px;font-size:11px;line-height:1;display:inline-flex}.capture-controls{grid-template-columns:1fr 1fr;gap:10px;display:grid}.capture-controls .primary-action{width:100%;margin-top:0}.inline-error{color:#9a311d;margin:0}.preview-area{background-color:#fff;background-image:linear-gradient(45deg,#edf0ed 25%,#0000 25%),linear-gradient(-45deg,#edf0ed 25%,#0000 25%),linear-gradient(45deg,#0000 75%,#edf0ed 75%),linear-gradient(-45deg,#0000 75%,#edf0ed 75%);background-position:0 0,0 12px,12px -12px,-12px 0;background-repeat:repeat,repeat,repeat,repeat;background-size:24px 24px;background-attachment:scroll,scroll,scroll,scroll;background-origin:padding-box,padding-box,padding-box,padding-box;background-clip:border-box,border-box,border-box,border-box;border:1px solid #dfe4db;border-radius:8px;place-items:center;min-height:470px;display:grid;overflow:hidden}.preview-area img{object-fit:contain;border:1px solid #cfd8ce;max-width:min(82%,330px);max-height:420px;box-shadow:0 16px 34px #1f292224}.side-panel{gap:16px;display:grid}.status-badge{color:#37433a;background:#eef2ed;border-radius:999px;align-items:center;gap:8px;width:fit-content;padding:8px 12px;display:inline-flex}.status-badge.done{color:#1f6f51;background:#e8f6ed}.status-badge.failed{color:#9a311d;background:#fff0ea}.metrics{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;display:grid}.metrics span{text-align:center;background:#f5f7f3;border-radius:8px;padding:10px}.action-stack{gap:10px;display:grid}.action-stack .primary-action{margin-top:0}.empty-state{color:#5c6861;place-items:center;gap:10px;display:grid}.slider-grid{gap:16px;margin-bottom:20px;display:grid}.number-field{gap:8px;display:grid}.number-field span{justify-content:space-between;gap:14px;display:flex}.number-field input{accent-color:#1f6f51;width:100%}.download-list{gap:10px;margin-bottom:18px;display:grid}.download-row{color:#1e2420;border:1px solid #dfe4db;border-radius:8px;grid-template-columns:24px minmax(0,1fr) auto;align-items:center;gap:10px;min-height:54px;padding:0 14px;text-decoration:none;display:grid}.spin{animation:.9s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}@media (width>=900px){.app-shell{max-width:1080px;padding:18px}.content-grid,.result-layout{grid-template-columns:minmax(0,1fr) 340px}.spec-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.shooting-guide{margin-top:14px}.spec-option{flex-direction:column;justify-content:center;align-items:flex-start;min-height:86px}.preview-area{min-height:620px}.preview-area img{max-width:min(78%,360px);max-height:560px}.dropzone{min-height:240px}}@media (width<=420px){.download-row{grid-template-columns:24px minmax(0,1fr)}.download-row small{grid-column:2}}
