@font-face{font-family:PortraitBrand;src:url('assets/brand-regular.woff2') format('woff2');font-weight:400;font-display:swap}@font-face{font-family:PortraitBrand;src:url('assets/brand-bold.woff2') format('woff2');font-weight:700;font-display:swap}
:root{--ink:#183532;--muted:#7c8b87;--green:#174f47;--accent:#cfdf7a;--line:#e5e9e5;--paper:#f6f8f5;--white:#fff}*{box-sizing:border-box}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei",sans-serif;color:var(--ink);background:var(--paper);font-size:14px}button,input,select{font:inherit}button,a,label.upload-zone{ -webkit-tap-highlight-color:transparent}button{cursor:pointer}button:disabled{cursor:not-allowed;opacity:.45}button, input,select{outline-offset:4px}svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.65;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0}.svg-defs{display:none}[hidden]{display:none!important}.app-shell{display:flex;min-height:100vh}.sidebar{width:218px;flex-shrink:0;background:#fcfdfa;border-right:1px solid var(--line);padding:34px 20px 22px;position:fixed;height:100vh;display:flex;flex-direction:column}.brand{display:flex;gap:11px;align-items:center;color:var(--ink);text-decoration:none;font-weight:700;font-size:17px;white-space:nowrap}.brand small{font-size:7.5px;letter-spacing:1.2px;display:block;font-weight:500;margin-top:7px;color:#8e9993}.brand-mark{background:var(--green);color:#e1ecc4;width:37px;height:42px;border-radius:10px;display:grid;place-items:center}.brand-mark svg{width:24px;height:24px}.workspace-label{font-size:10px;letter-spacing:2px;color:#98a29c;margin:53px 12px 16px}.nav-item{display:flex;align-items:center;gap:11px;padding:13px 14px;font-size:13px;border-radius:7px}.nav-item.active{background:#e9efdf;color:#244d40;font-weight:600}.nav-item>span{margin-left:auto;font-size:10px;color:#7a9473;font-weight:400}.sidebar-bottom{margin-top:auto;padding-top:20px;border-top:1px solid var(--line);display:flex;align-items:center;gap:9px;font-size:11px}.sidebar-bottom small{display:block;color:#94a099;font-size:10px;margin-top:5px}.tiny-mark{width:32px;height:32px;border-radius:50%;display:grid;place-items:center;background:#eeefdf;font-family:Georgia,serif;font-size:12px}.private-dot{width:6px;height:6px;border-radius:50%;background:#a6b989;margin-left:auto}.workspace{margin-left:218px;flex:1;min-width:0}.topbar{height:75px;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;padding:0 42px;font-size:11px;color:#76867f;background:#fcfdfa}.topbar>div>span{margin:0 13px;color:#c2c9c2}.top-right{display:flex;gap:22px;align-items:center}.version-tag{background:#edf0e9;padding:6px 9px;font-size:10px;color:#6b7a6c;border-radius:4px}.text-button{border:0;background:none;color:#7a8981;font-size:11px;display:inline-flex;align-items:center;gap:7px;padding:2px}.text-button svg{width:14px;height:14px}main{padding:37px 42px 20px;max-width:1500px;margin:auto}.page-heading{display:flex;justify-content:space-between;align-items:center;margin-bottom:27px}.eyebrow{font-size:9px;letter-spacing:2px;color:#8b9989;margin-bottom:14px;font-weight:600}h1{font-size:29px;line-height:1.3;font-weight:600;letter-spacing:.8px;margin:0}h1>span{color:#8aa959;margin-left:4px}.page-heading p{margin:12px 0 0;color:#7f8b85;font-size:12px;letter-spacing:.2px}.template-status{font-size:10px;color:#7d8b78;display:flex;gap:7px;align-items:center}.template-status i{width:6px;height:6px;border-radius:50%;background:#92af66}.service-note{display:flex;gap:10px;align-items:center;background:#f0f2e9;border:1px solid #e3e7d8;border-radius:7px;padding:12px 16px;margin-bottom:22px;color:#6c795d}.service-note svg{width:17px;height:17px}.service-note strong{font-size:11px;font-weight:600;margin-right:13px}.service-note span{font-size:10px;line-height:1.8}.studio-grid{display:grid;grid-template-columns:minmax(310px,0.88fr) minmax(400px,1.12fr);gap:26px;align-items:start}.input-panel,.preview-panel{background:white;border:1px solid var(--line);border-radius:12px;overflow:hidden;box-shadow:0 3px 8px #223c2b03}.input-panel{padding:27px}.section-title{display:flex;align-items:center;gap:9px;margin-bottom:17px}.step{font-size:9px;color:#94a38c;background:#f0f3ea;padding:5px;border-radius:4px;letter-spacing:.2px}h2{margin:0;font-size:13px;font-weight:600}.section-side{margin-left:auto;font-size:8px;color:#a1aaa4;letter-spacing:.6px}.upload-zone{display:flex;align-items:center;justify-content:center;flex-direction:column;position:relative;min-height:166px;border:1px dashed #cbd7c2;background:#fafbf7;border-radius:8px;cursor:pointer;transition:background .2s,border-color .2s;overflow:hidden;padding:16px}.upload-zone:hover,.upload-zone.drag-over{background:#eff5e7;border-color:#789b69}.upload-zone input{position:absolute;inset:0;opacity:0;cursor:pointer;width:100%;height:100%}.upload-zone:focus-within{outline:2px solid var(--green);outline-offset:3px}.upload-icon{width:35px;height:35px;display:grid;place-items:center;border-radius:9px;background:#ebefdf;margin-bottom:12px;color:#70875d}.upload-icon svg{width:18px;height:18px}.upload-zone strong{font-size:12px;font-weight:500}.upload-zone>span:not(.upload-icon){font-size:9px;color:#a1aa9a;margin-top:9px}.upload-zone.has-photo{min-height:166px;align-items:flex-start;padding-left:118px}.has-photo .upload-icon{display:none}#source-thumbnail{position:absolute;left:18px;top:13px;width:81px;height:134px;object-fit:cover;object-position:top;border-radius:5px;background:#edf0e8}#photo-badge{border:1px solid #dde6ce;padding:4px 6px;border-radius:3px;background:#f2f6e8;color:#7c8d6f!important}.sample-row{display:flex;align-items:center;gap:7px;margin-top:12px;font-size:9px;color:#9ca69e}.sample-chip{font-size:9px;padding:4px 7px 4px 4px;border:1px solid #e5e9e0;background:white;border-radius:30px;color:#6d7d70;display:flex;align-items:center;gap:5px;white-space:nowrap}.sample-chip:hover{border-color:#8aa17a}.sample-avatar{width:21px;height:21px;border-radius:50%;overflow:hidden;background:#f0f3e9}.sample-avatar img{width:100%;height:100%;object-fit:cover;object-position:50% 0}.field-label,.field>label{display:block;font-size:10px;font-weight:500;margin-bottom:9px}.field-label{margin-top:22px}.segmented{display:grid;grid-template-columns:1fr 1fr;border:1px solid #e5e9df;padding:4px;gap:4px;border-radius:7px}.segmented label{position:relative;cursor:pointer}.segmented input{position:absolute;opacity:0}.segmented label>span{padding:10px 8px;display:block;text-align:center;border-radius:4px;font-size:11px;color:#a0a99f}.segmented input:checked+span{background:#edf2e6;color:#47643c;font-weight:600}.segmented input:focus-visible+span{outline:2px solid var(--green)}.segmented small{font-size:8px;display:block;margin-top:5px;font-weight:400;opacity:.7}.section-divider{padding-top:23px;border-top:1px solid #edf0e9;margin-top:25px}.field-row{display:grid;grid-template-columns:1fr 1fr;gap:15px}.field{margin-bottom:17px;min-width:0}.field em{font-style:normal;color:#9da993;font-size:8px;margin-left:3px}.field input,select{border:1px solid #e2e7de;background:#fcfdfb;width:100%;border-radius:6px;padding:11px 12px;color:#42584c;font-size:12px;height:40px}.field input::placeholder{color:#b1b9ad;font-size:11px}.field input:focus,select:focus{outline:1px solid #5b7c52;border-color:#6c8b63}.field-error{font-size:10px;color:#b15843;display:block;margin-top:5px}.field-error:empty{display:none}.field-hint{font-size:10px;color:#9c9b7d;line-height:1.8}.info-tip{font-size:9px;color:#93a184;display:flex;align-items:center;gap:5px}.info-tip svg{width:12px;height:12px}.compact{margin-bottom:14px}.primary-button{display:flex;align-items:center;gap:8px;width:100%;border:0;border-radius:6px;padding:13px 14px;background:var(--green);color:#f7f9f0;font-size:12px;box-shadow:0 3px 4px #174f4715}.primary-button:hover{background:#113f38}.primary-button svg{width:16px;height:16px}.button-arrow{margin-left:auto}.form-footnote{text-align:center;font-size:9px;color:#a5afa0;margin:12px 0 0}.preview-top{display:flex;align-items:center;justify-content:space-between;height:65px;padding:0 23px;border-bottom:1px solid #eef0eb}.preview-top>div:first-child{display:flex;align-items:center;gap:8px}.preview-dot{width:5px;height:5px;background:#6e9468;border-radius:50%}.preview-label{font-size:8px;color:#9ba491;border:1px solid #e5e9df;border-radius:3px;padding:3px 5px}.view-switch{background:#f2f4ee;border-radius:5px;padding:3px;display:flex;gap:3px}.view-switch button{font-size:9px;border:0;padding:5px 9px;background:transparent;color:#99a192;border-radius:3px}.view-switch .selected{background:white;color:#4b6050;box-shadow:0 1px 3px #283e1910}.canvas-stage{padding:34px 30px 20px;background:radial-gradient(ellipse at 50% 42%,#f1f3e9 0%,#f8f9f5 70%);}.canvas-mount{width:100%;max-width:470px;aspect-ratio:1;position:relative;margin:0 auto;box-shadow:0 8px 32px #3a4b2b16;overflow:hidden;background:white;border:6px solid white}.canvas-mount.circle{border-radius:50%}canvas{display:block;width:100%;height:100%}.canvas-loading{position:absolute;inset:0;display:grid;place-items:center;color:#a5b093;background:#f9fbf5;font-size:12px}.stage-caption{display:flex;align-items:center;justify-content:center;gap:10px;color:#a4ad9c;font-size:8px;letter-spacing:.5px;margin-top:24px}.stage-caption>span:empty{height:1px;background:#dce2d3;width:25px}.preview-bottom{display:flex;align-items:center;justify-content:space-between;padding:22px 23px;border-top:1px solid #e8ece1;gap:12px}.preview-bottom strong{display:block;font-size:12px;font-weight:500}.preview-bottom>div>span{font-size:9px;color:#a2ad9d;display:block;margin-top:6px;letter-spacing:.2px}.preview-bottom b{font-weight:400;margin:0 4px;color:#c0c6b9}.download-button{padding:11px 14px;border:1px solid #d6e0bf;border-radius:6px;background:#eaf1d8;display:flex;align-items:center;gap:7px;color:#4e683b;font-size:11px;white-space:nowrap}.download-button:hover{background:#dde9bf}.download-button svg{width:15px;height:15px}.adjustment-panel{padding:0 23px 18px;color:#87927d}.adjustment-panel summary{font-size:10px;cursor:pointer}.adjustment-panel summary>span{font-size:8px;color:#b3bbab;margin-left:5px}.adjust-grid{display:grid;grid-template-columns:1fr 1fr 1fr;gap:15px;padding:17px 0 10px}.adjust-grid label{font-size:9px;display:block}.adjust-grid input{display:block;width:100%;margin:12px 0 0;accent-color:#648651}.adjust-grid output{float:right;color:#a7b199}.quality-row{border-top:1px solid #e9ede2;background:#fafbf7;display:flex;justify-content:space-around;padding:13px 12px;font-size:8px;color:#9da992;gap:6px}.quality-row span{display:flex;gap:4px;align-items:center}.quality-row svg{width:11px;height:11px;color:#83a071}footer{margin-top:30px;display:flex;align-items:center;gap:16px;letter-spacing:1.4px;color:#a9b29f;font-size:7px}footer>span{letter-spacing:.5px;font-size:9px;color:#adb7a5}.privacy-text{margin-left:auto;font-size:8px}.toast{position:fixed;bottom:26px;left:50%;transform:translate(-50%,20px);border:1px solid #dbe3d1;background:#224b3ff5;color:white;border-radius:8px;padding:13px 22px;box-shadow:0 8px 20px #123a2520;font-size:12px;opacity:0;pointer-events:none;transition:.2s;max-width:90vw;text-align:center;z-index:20}.toast.visible{opacity:1;transform:translate(-50%,0)}dialog{border:1px solid #e4e9dc;border-radius:15px;padding:35px;max-width:520px;width:90vw;color:var(--ink);box-shadow:0 20px 80px #192d2430}dialog::backdrop{background:#223d3150;backdrop-filter:blur(3px)}dialog h2{font-size:20px;margin-bottom:24px}dialog ol{padding-left:20px;color:#74836d;font-size:12px;line-height:2.1}.dialog-close{position:absolute;right:14px;top:12px;background:none;border:0;font-size:25px;color:#87947e}.dialog-note{background:#f1f4e9;padding:17px;border-radius:8px;margin-top:24px;font-size:11px;line-height:1.9;color:#8a9276}.dialog-note strong{color:#6e7d5d}.dialog-note p:last-child{font-size:10px;color:#a3a894;margin-bottom:0}
@media(min-width:1500px){main{padding-top:44px}.studio-grid{grid-template-columns:420px minmax(450px,620px)}.canvas-mount{max-width:490px}.canvas-stage{padding-top:37px;padding-bottom:25px}}
@media(max-width:1150px){.sidebar{width:177px;padding-left:16px;padding-right:16px}.brand{font-size:14px;gap:8px}.brand small{font-size:6px}.brand-mark{width:31px;height:36px}.workspace{margin-left:177px}main{padding:30px 24px}.topbar{padding:0 24px}.studio-grid{gap:18px;grid-template-columns:minmax(290px,.95fr) minmax(330px,1.05fr)}.input-panel{padding:22px}.canvas-stage{padding:28px 20px 18px}.template-status{display:none}.service-note span{display:block;margin-top:3px}.service-note strong{font-size:10px}.preview-top{padding:0 18px}.preview-label{font-size:7px}.preview-bottom{padding:20px 18px}.preview-bottom strong{font-size:11px}.download-button{font-size:10px;padding:10px}.quality-row{font-size:7px}}
@media(max-width:900px){.sidebar{display:none}.workspace{margin-left:0}.topbar{height:60px}.studio-grid{grid-template-columns:minmax(290px,.9fr) minmax(320px,1.1fr)}h1{font-size:27px}.page-heading p{font-size:11px}.canvas-stage{padding:25px 16px 15px}.preview-top{padding:0 14px}main{padding:28px 22px}.input-panel{padding:21px}.section-side{font-size:7px}.quality-row{gap:4px;font-size:7px}}
@media(max-width:700px){main{padding:25px 16px 18px}.topbar{padding:0 17px;font-size:10px}.top-right{gap:12px}.page-heading{margin-bottom:23px}.page-heading p{max-width:290px;line-height:1.9}.eyebrow{font-size:8px;letter-spacing:1.5px}h1{font-size:25px}.service-note{align-items:flex-start;padding:11px 13px}.service-note svg{margin-top:2px}.service-note span{font-size:9px;line-height:1.9}.studio-grid{display:flex;flex-direction:column;gap:20px}.input-panel,.preview-panel{width:100%}.input-panel{padding:23px}.upload-zone{min-height:160px}.section-side{font-size:8px}.canvas-stage{padding:28px 23px 19px}.preview-bottom{padding:23px}.preview-top{padding:0 23px}.quality-row{font-size:8px}.privacy-text{display:none}footer{font-size:6px;justify-content:center;gap:10px;margin-top:24px}.adjustment-panel{padding-bottom:22px}.canvas-mount{max-width:450px}.download-button{font-size:12px}.preview-bottom strong{font-size:12px}}

.mobile-save{display:block;margin:0 auto 17px;border:0;background:transparent;font-size:10px;color:#80926f;text-decoration:underline;text-underline-offset:4px}#save-dialog{padding:30px 20px 20px;max-width:600px}#save-dialog h2{font-size:17px;margin-bottom:8px}.save-hint{font-size:11px;color:#8a9a7c;margin-bottom:20px}#save-image{width:100%;display:block;border-radius:4px}

@media(max-width:700px){.field input,select{font-size:16px;height:45px}.field>label,.field-label{font-size:12px}.field input::placeholder{font-size:13px}.section-title h2{font-size:15px}.sample-row,.sample-chip{font-size:11px}.sample-row{gap:7px}.sample-avatar{width:23px;height:23px}.segmented label>span{font-size:14px}.segmented small{font-size:10px}.service-note strong{font-size:12px}.service-note span{font-size:11px}.page-heading p{font-size:12px}.upload-zone strong{font-size:13px}.upload-zone>span:not(.upload-icon){font-size:10px}.primary-button{font-size:14px;min-height:46px}.form-footnote,.info-tip{font-size:10px}.preview-label{font-size:10px}.view-switch button{font-size:11px}.stage-caption{font-size:9px}.preview-bottom>div>span{font-size:10px}.mobile-save{font-size:12px}.field-hint{font-size:11px;line-height:1.9}.save-hint{font-size:12px}}

.sample-inspect{display:flex;align-items:center;justify-content:center;gap:12px;flex-wrap:wrap;padding:16px 18px;border-top:1px solid #e8ece1;background:#fafbf7}.sample-inspect button{border:0;background:transparent;color:#577549;font-size:11px;text-decoration:underline;text-underline-offset:4px}.sample-inspect>span{color:#becab1}.sample-inspect small{display:block;width:100%;text-align:center;font-size:9px;color:#9da88f;margin-top:4px}#inspect-dialog{max-width:620px;padding:28px 20px 20px}#inspect-image{display:block;width:100%;max-height:76vh;object-fit:contain;background:repeating-conic-gradient(#e5e9df 0% 25%,#f9fbf5 0% 50%) 50% / 18px 18px}#inspect-title{margin-bottom:15px;font-size:17px}

.service-note>div{flex:1}.service-note .text-button{white-space:nowrap;flex-shrink:0}.service-note strong{display:block;margin-bottom:3px}.service-guidance{font-size:11px;line-height:1.8;color:#7a866e;margin:12px 0 0}.photo-quality{font-size:11px;line-height:1.8;color:#926b42;background:#fcf7ed;border-radius:6px;padding:10px 12px;margin:14px 0}.upload-zone.is-disabled{cursor:wait;opacity:.65}.pending-card{width:100%;height:100%;min-height:350px;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:40px 32px;background:#f8faf6;border:1px dashed #dce4d4;border-radius:10px}.pending-icon{width:58px;height:58px;background:#edf2e5;color:#8fa47a;border-radius:16px;display:grid;place-items:center;margin-bottom:23px}.pending-icon svg{width:27px;height:27px}.pending-card h3{font-size:18px;font-weight:500;letter-spacing:.3px;margin:0 0 12px}.pending-card p{font-size:12px;line-height:1.9;color:#8c9787;max-width:295px;margin:0}.pending-steps{display:flex;gap:12px;align-items:center;margin-top:32px;font-size:10px;color:#99a68e}.pending-steps i{font-style:normal;color:#c5cebd}.canvas-mount.pending{box-shadow:none!important;background:transparent!important;padding:0!important;overflow:visible}.processing .pending-icon{animation:breathe 1.8s ease-in-out infinite}.failed .pending-icon{color:#aa8864;background:#f5ede1}.failed h3{color:#8d7355}@keyframes breathe{50%{opacity:.35}}@media(prefers-reduced-motion:reduce){.processing .pending-icon{animation:none}}@media(max-width:600px){.pending-card{min-height:300px;padding:25px 20px}.pending-card h3{font-size:17px}.service-note{align-items:flex-start}.service-note .text-button{font-size:10px}.service-note span{line-height:1.8}}
.access-code-field{padding:14px;background:#f7f9f2;border:1px solid #e5eadb;border-radius:7px}.access-code-field .field-hint{margin:8px 0 0;font-size:10px;color:#87937b}.access-code-field input[aria-invalid="true"]{border-color:#b76f53}.access-code-field .field-error{line-height:1.7;margin-top:8px}@media(max-width:700px){.access-code-field .field-hint{font-size:11px}}
.creation-progress{font-size:12px;line-height:1.9;color:#527043;background:#edf4e3;border:1px solid #dce8ca;border-radius:7px;padding:12px 13px;margin:13px 0 0}.pending-steps>span{padding:5px 7px;border-radius:5px;white-space:nowrap}.pending-steps>span.is-current{background:#e4edd5;color:#4a6d3a;font-weight:600}.pending-steps>span.is-finished{color:#6d8d56}.pending-steps{gap:4px}#drop-zone[aria-disabled="true"]{cursor:wait}@media(max-width:700px){.creation-progress{font-size:13px;padding:13px;line-height:1.9}.pending-steps{font-size:10px;gap:2px}.pending-steps>span{padding:5px}.pending-card p{font-size:13px}}

.photo-consent{display:flex;align-items:flex-start;gap:8px;margin:20px 0 12px;font-size:13px;line-height:1.7;color:#52675e}.photo-consent input{flex:0 0 auto;width:18px;height:18px;margin-top:3px;accent-color:#547967}.photo-consent a{color:#315d49;text-decoration:underline}
