:root{--ink:#152324;--dark:#182b2b;--paper:#f3f0e7;--paper2:#eae5d8;--line:#c8c6b9;--muted:#6b7772;--lime:#c8ef74;--mint:#a8d2bc;--orange:#f4a86d}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--paper);color:var(--ink);font-family:"Noto Sans CJK SC","Microsoft YaHei UI",sans-serif;letter-spacing:.01em}.app-shell{max-width:1640px;margin:auto;min-height:100vh}.topbar{height:82px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line);padding:0 clamp(24px,4vw,68px)}.brand{display:flex;align-items:center;gap:14px;font-weight:800;font-size:18px;letter-spacing:.03em}.brand small{display:block;font-size:9px;font-weight:700;letter-spacing:.22em;color:var(--muted);margin-top:1px}.brand-mark{display:grid;grid-template-columns:repeat(2,12px);gap:4px;transform:rotate(-13deg)}.brand-mark i{display:block;width:12px;height:12px;border-radius:50%;background:var(--ink)}.brand-mark i:nth-child(2){background:#799684}.brand-mark i:nth-child(3){background:#b6cda0}.brand-mark i:nth-child(4){background:#d3aa7b}.top-status{font-size:12px;font-weight:650;color:#415950}.status-light{display:inline-block;width:8px;height:8px;border-radius:50%;background:#67a973;margin-right:8px;box-shadow:0 0 0 4px #d9e7cf}.status-separator{color:#a4afa7;padding:0 8px}.intro{padding:55px clamp(24px,4vw,68px) 44px;position:relative;overflow:hidden}.intro:after{content:"3MF";position:absolute;right:4%;top:-53px;font:900 clamp(130px,18vw,260px)/1 Georgia,serif;color:#e8e7d9;z-index:-1;letter-spacing:-.1em}.eyebrow{font-size:11px;letter-spacing:.15em;font-weight:800;color:#678071;display:flex;align-items:center;gap:10px;text-transform:uppercase}.eyebrow span{background:var(--ink);color:var(--lime);padding:5px 8px;letter-spacing:0}.intro h1{font-family:Georgia,"Noto Serif CJK SC","SimSun",serif;font-size:clamp(39px,4.6vw,76px);line-height:1.2;margin:18px 0;letter-spacing:-.05em;font-weight:700}.intro h1 em{font-style:normal;color:#6b9579}.intro p{max-width:680px;line-height:1.8;color:#62716a;font-size:14px;margin:0}.workspace{display:grid;grid-template-columns:minmax(390px,540px) minmax(0,1fr);gap:18px;padding:0 clamp(24px,4vw,68px) 60px;align-items:start}.panel{border:1px solid var(--line);background:#fcfbf6;box-shadow:0 10px 28px #263b2910}.panel-head{height:46px;background:var(--dark);color:#fff;display:flex;align-items:center;justify-content:space-between;padding:0 20px;font-size:13px;font-weight:800;letter-spacing:.05em}.panel-index{font-size:10px;color:#9db3a5;letter-spacing:.16em;font-weight:700}.controls{padding-bottom:18px}.control-section{padding:22px 22px 2px;border-bottom:1px solid #dcded2}.section-title{display:flex;align-items:center;gap:10px;margin-bottom:17px}.step{width:28px;height:28px;display:grid;place-items:center;border:1px solid #9eae9f;color:#536d5d;font:700 10px Georgia,serif}.section-title h2{font-size:15px;margin:0;letter-spacing:.01em}.dropzone{min-height:117px;border:1px dashed #96b09b;background:#f0f5ea;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:3px;cursor:pointer;text-align:center;transition:.2s}.dropzone:hover,.dropzone.dragging{background:#e4f0dc;border-color:#4d8d63}.dropzone input{display:none}.drop-icon{font-size:25px;font-weight:300;color:#648972;height:28px}.dropzone strong{font-size:13px}.dropzone>span:last-child{font-size:11px;color:#788a7c}.text-button{border:0;background:none;color:#597d63;text-decoration:underline;cursor:pointer;font-size:11px;padding:10px 0 14px}.input-grid{display:grid;grid-template-columns:1fr 1fr;column-gap:13px;row-gap:12px}.input-grid label{font-size:11px;color:#52605a;font-weight:700;position:relative;display:block}.input-grid label>span{float:right;color:#a3aaa0;font-weight:600}.input-grid input{display:block;width:100%;height:40px;border:1px solid #ced3c9;background:#fff;padding:0 11px;margin-top:6px;font:700 16px Georgia,serif;color:var(--ink);border-radius:0;outline:none}.input-grid input:focus{border-color:#6b9e77;box-shadow:0 0 0 2px #b5d9ad77}.derived{margin:17px 0 20px;padding:14px 16px;background:#eef2e6;display:grid;grid-template-columns:1fr 1fr;gap:14px;border-left:3px solid #9bbc78}.derived div{display:flex;justify-content:space-between;align-items:baseline}.derived small{font-size:11px;color:#67776a}.derived strong{font:700 21px Georgia,serif}.derived strong span{font:600 10px sans-serif;color:#77907b}.advanced{margin:18px 0 20px;border-top:1px solid #e1e3d8}.advanced summary{padding:13px 0;cursor:pointer;font-size:11px;font-weight:750;color:#536c58;list-style:none}.advanced summary::-webkit-details-marker{display:none}.advanced summary span{float:right;font-size:17px;line-height:10px}.advanced[open] .input-grid{padding:2px 0 12px}.generate-button{margin:20px 22px 0;border:0;background:var(--lime);color:#1f3024;width:calc(100% - 44px);height:58px;padding:0 22px;display:flex;align-items:center;justify-content:space-between;cursor:pointer;font-size:15px;font-weight:850;transition:.18s}.generate-button span:last-child{font-size:25px;font-weight:400}.generate-button:hover{background:#d9fa91;transform:translateY(-1px)}.generate-button:disabled{opacity:.6;cursor:wait;transform:none}.form-note{margin:12px 22px 0;font-size:11px;line-height:1.6;color:#859086}.preview-column{display:grid;gap:18px}.view-tabs{height:53px;display:flex;align-items:center;padding:0 18px;gap:8px;border-bottom:1px solid #e0e2d7}.view-tabs button{border:1px solid transparent;background:none;padding:8px 12px;cursor:pointer;color:#7c8a7f;font-size:11px;font-weight:750}.view-tabs button.active{border-color:#a9baa7;background:#ecf2e7;color:#26462e}.view-tabs span{margin-left:auto;color:#9aa59c;font-size:10px}.canvas-wrap{position:relative;aspect-ratio:1.18;background-color:#233938;background-image:linear-gradient(#59716c33 1px,transparent 1px),linear-gradient(90deg,#59716c33 1px,transparent 1px);background-size:24px 24px;overflow:hidden}.canvas-wrap:after{content:"MODEL / TOP";position:absolute;top:18px;left:21px;font:700 10px Georgia,serif;letter-spacing:.16em;color:#9ab3a9}.canvas-wrap canvas{display:block;width:100%;height:100%}.axis{position:absolute;color:#79958d;font:700 10px Georgia,serif}.axis-x{bottom:16px;right:18px}.axis-y{bottom:18px;left:17px;writing-mode:vertical-rl;transform:rotate(180deg)}.preview-foot{display:flex;gap:18px;padding:14px 20px;color:#7b8b80;font-size:10px;border-top:1px solid #e1e2d9}.preview-foot span{display:flex;align-items:center;gap:7px}.preview-foot span:last-child{margin-left:auto}.legend{width:11px;height:11px;display:inline-block}.legend.rail{background:#a5c990}.legend.contour{border:2px solid #f4bc7f}.output-panel{min-height:230px}.empty-state{text-align:center;color:#8c9b8f;padding:35px 18px 25px}.empty-icon{font-size:34px;color:#bbd0bb}.empty-state strong{display:block;color:#516556;font-size:13px;margin:7px 0 3px}.empty-state p{font-size:11px;line-height:1.5;margin:0}.result-state{padding:17px 19px}.result-badge{background:#e7f3dc;color:#456942;border-left:3px solid #7faf69;padding:10px 12px;font-size:12px;font-weight:800}.result-badge span{float:right;color:#6b8567}.download-list{margin:11px 0}.download-list a{display:flex;justify-content:space-between;padding:12px 1px;border-bottom:1px solid #e1e5d8;text-decoration:none;color:#273c31;font-size:12px;font-weight:750}.download-list a span{color:#5d8b61}.bundle-button{display:block;background:#263d38;color:#e8f6db;text-decoration:none;text-align:center;padding:12px;font-size:12px;font-weight:800}.bundle-button:hover{background:#37594b}.error-state{margin:18px;padding:14px;background:#fce7de;color:#9b3e24;font-size:12px;line-height:1.6}footer{border-top:1px solid var(--line);margin:0 clamp(24px,4vw,68px);padding:20px 0 32px;display:flex;justify-content:space-between;color:#8d9a90;font-size:10px}@media(max-width:980px){.workspace{grid-template-columns:1fr}.preview-column{grid-template-columns:1fr 1fr}.canvas-wrap{aspect-ratio:1}.output-panel{align-self:start}}@media(max-width:680px){.topbar{height:70px}.top-status{font-size:0}.status-light{margin:0}.intro{padding-top:36px}.workspace{padding-left:14px;padding-right:14px;gap:14px}.preview-column{grid-template-columns:1fr}.control-section{padding-left:16px;padding-right:16px}.generate-button{margin-left:16px;width:calc(100% - 32px)}.form-note{margin-left:16px}.view-tabs span{display:none}footer{display:block;line-height:2}}
.section-hint{font-size:11px;line-height:1.65;color:#77877b;margin:0 0 14px}.control-section>.section-hint:last-child{margin:13px 0 18px}.input-grid select{display:block;width:100%;height:40px;border:1px solid #ced3c9;background:#fff;padding:0 11px;margin-top:6px;font:700 14px "Microsoft YaHei UI",sans-serif;color:var(--ink);border-radius:0;outline:none}.input-grid select:focus{border-color:#6b9e77}.toggle-row{display:flex;gap:10px;margin-bottom:16px}.toggle-row label{flex:1;display:flex;align-items:center;gap:8px;padding:11px 12px;background:#eef2e6;color:#385243;font-size:12px;font-weight:750;cursor:pointer}.toggle-row input{width:16px;height:16px;accent-color:#608f64}.canvas-wrap canvas{cursor:grab;touch-action:none}.canvas-wrap canvas:active{cursor:grabbing}.model-tabs{height:48px;display:flex;align-items:center;gap:6px;padding:0 16px;border-bottom:1px solid #e0e2d7}.model-tabs button{border:0;background:none;padding:8px 11px;color:#7c8a7f;font-size:11px;font-weight:750;cursor:pointer}.model-tabs button.active{background:#e5eee1;color:#26462e}.model-tabs span{margin-left:auto;color:#9aa59c;font-size:10px}.model-stage{height:370px;position:relative;background:radial-gradient(circle at 50% 35%,#455b50,#253832 72%);overflow:hidden}.model-stage canvas{width:100%;height:100%;display:block}.model-stage #model-placeholder{position:absolute;inset:0;display:grid;place-items:center;color:#b4c9b8;font-size:12px;pointer-events:none}.model-stage #model-placeholder[hidden]{display:none}@media(max-width:980px){.preview-column{grid-template-columns:1fr 1fr}.model-panel{align-self:start}.output-panel{grid-column:1/-1}}@media(max-width:680px){.preview-column{grid-template-columns:1fr}.model-tabs span{display:none}}
.artwork-palette{display:flex;flex-wrap:wrap;gap:8px;margin:15px 0 20px}.artwork-palette span{display:flex;align-items:center;gap:6px;border:1px solid #d5dbd0;padding:5px 8px;font:700 10px Georgia,serif;color:#596c5e}.artwork-palette i{display:block;width:14px;height:14px;border:1px solid #3447}
.region-canvas-wrap{background:#e3e7dd;background-image:linear-gradient(45deg,#cbd2c8 25%,transparent 25%),linear-gradient(-45deg,#cbd2c8 25%,transparent 25%),linear-gradient(45deg,transparent 75%,#cbd2c8 75%),linear-gradient(-45deg,transparent 75%,#cbd2c8 75%);background-size:20px 20px;background-position:0 0,0 10px,10px -10px,-10px 0;display:grid;place-items:center;max-height:340px;overflow:hidden}.region-canvas-wrap canvas{display:block;max-width:100%;max-height:340px;cursor:crosshair;image-rendering:auto}.region-tools{display:grid;grid-template-columns:1fr 1fr;gap:9px;margin:9px 0 20px}.region-tools>label:first-child{grid-column:1/-1;font-size:11px;font-weight:750;color:#52605a;display:flex;align-items:center;gap:12px}.region-tools input[type=range]{flex:1;accent-color:#608f64}.region-tools button{min-height:36px;border:1px solid #9fb7a0;background:#ecf3e8;color:#355842;font-size:11px;font-weight:800;cursor:pointer}.region-tools button:disabled{opacity:.45;cursor:not-allowed}.region-tools .region-color-label{display:flex;align-items:center;justify-content:space-between;gap:7px;font-size:11px;color:#52605a;font-weight:750}.region-color-label input{width:48px;height:34px;border:1px solid #9fb7a0;background:#fff;padding:2px}.region-tools #region-undo{grid-column:1/-1}

#region-tolerance-wrap[hidden]{display:none!important}

#region-eyedropper.active{background:#d9eee5;border-color:#39866b;color:#19583d}.region-canvas-wrap canvas.eyedropper-active{cursor:crosshair}
.region-fragments{display:flex;gap:6px;overflow-x:auto;margin:7px 0 9px;padding-bottom:4px}.region-fragments[hidden]{display:none}.region-fragments button{flex:none;border:1px solid #aabbaa;background:#eff4e9;color:#355842;padding:5px 8px;font-size:11px;font-weight:700;cursor:pointer}

.region-zoom-tools{display:flex;align-items:center;gap:7px;margin:0 0 8px}.region-zoom-tools button{border:1px solid #aabbaa;background:#eff4e9;color:#355842;min-height:28px;padding:3px 9px;font-size:12px;font-weight:700;cursor:pointer}.region-zoom-tools output{min-width:44px;text-align:center;font-size:11px;font-weight:800;color:#355842}.region-zoom-tools span{margin-left:auto;color:#89978b;font-size:10px}.region-canvas-wrap{display:block;max-height:420px;overflow:auto;text-align:center}.region-canvas-wrap canvas{max-width:none;max-height:none;margin:0 auto}

.region-stage{position:relative;display:block;margin:0 auto}.region-stage img,.region-stage svg,.region-stage canvas{position:absolute;inset:0;display:block;width:100%;height:100%}.region-stage img{object-fit:fill;pointer-events:none}.region-stage svg{pointer-events:none}.region-stage canvas{max-width:none;max-height:none;margin:0;cursor:crosshair}
#lineart-options[hidden],#color-options[hidden],#region-editor[hidden]{display:none!important}
#download-engraving-svg[hidden]{display:none!important}
#lineart-preview-section[hidden]{display:none!important}.lineart-preview-toolbar{display:flex;align-items:center;gap:8px;margin:0 0 10px}.lineart-preview-toolbar button{border:1px solid #aabbaa;background:#eff4e9;color:#355842;padding:6px 10px;font-size:12px;font-weight:700;cursor:pointer}.lineart-preview-toolbar output{min-width:45px;text-align:center;font-size:11px;font-weight:800;color:#355842}.lineart-preview-frame{height:360px;overflow:auto;background-color:#e3e7dd;background-image:linear-gradient(45deg,#cbd2c8 25%,transparent 25%),linear-gradient(-45deg,#cbd2c8 25%,transparent 25%),linear-gradient(45deg,transparent 75%,#cbd2c8 75%),linear-gradient(-45deg,transparent 75%,#cbd2c8 75%);background-size:20px 20px;background-position:0 0,0 10px,10px -10px,-10px 0}.lineart-preview-frame img{display:block;width:100%;height:auto;max-width:none}
.model-progress{position:absolute;inset:0;z-index:3;display:grid;place-items:center;background:#172723ed;backdrop-filter:blur(3px)}.model-progress[hidden]{display:none}.model-progress-card{width:min(85%,500px);color:#e9f0e6}.model-progress-heading{display:flex;align-items:center;justify-content:space-between;gap:16px}.model-progress-card strong{font-size:18px;line-height:1.5}.model-progress-heading>span{font-size:22px;font-weight:800;color:#c8ef74;font-variant-numeric:tabular-nums}.model-progress-track{height:10px;margin:18px 0 14px;background:#ffffff1a;border-radius:8px;overflow:hidden}.model-progress-track span{display:block;width:0;height:100%;background:#c8ef74;border-radius:8px;transition:width .65s ease}.model-progress-detail{font-size:13px;line-height:1.7;min-height:24px;color:#d1dfd2}.model-progress-steps{display:grid;grid-template-columns:repeat(3,1fr);gap:10px 12px;list-style:none;padding:18px 0;margin:16px 0;border-top:1px solid #ffffff1a;border-bottom:1px solid #ffffff1a;counter-reset:step}.model-progress-steps li{font-size:12px;color:#91a79b;counter-increment:step;white-space:nowrap}.model-progress-steps li:before{content:counter(step,decimal-leading-zero);display:inline-block;margin-right:8px;font-size:10px;opacity:.65}.model-progress-steps .complete{color:#d1dfd2}.model-progress-steps .complete:before{content:'✓';opacity:1}.model-progress-steps .current{font-weight:700;color:#c8ef74}.model-progress-steps .current:before{opacity:1}.model-progress-meta{display:flex;justify-content:space-between;flex-wrap:wrap;gap:8px 16px;font-size:12px;line-height:1.6;color:#d1dfd2}.model-progress-card p{font-size:12px;line-height:1.7;color:#a8bfb0;margin:14px 0 0}@media(prefers-reduced-motion:reduce){.model-progress-track span{transition:none}}
.selected-fragment{background:#ffe6f0!important;border-color:#ed237a!important;color:#9e1550!important;box-shadow:inset 0 0 0 1px #ed237a}

#lid-stand-controls button{border:1px solid #aabbaa;background:#eff4e9;color:#355842;padding:12px 8px;font:inherit;font-size:13px;font-weight:700;cursor:pointer}#lid-stand-controls button:hover{background:#dce8d5}#lid-stand-controls button:disabled{opacity:.45;cursor:default}

.preview-tools{display:flex;align-items:center;gap:7px;flex-wrap:wrap;padding:10px 16px;background:#f6f7ef;border-bottom:1px solid #dce2d4}.preview-tools button{border:1px solid #aabbaa;background:#eff4e9;color:#355842;padding:7px 10px;font-size:12px;font-weight:700;cursor:pointer}.preview-tools button:disabled{opacity:.45;cursor:default}.preview-tools button[hidden]{display:none}.preview-tools output{min-width:44px;text-align:center;font-size:12px;font-weight:700;color:#355842}.preview-tools>span{color:#7b8b80;font-size:10px}.canvas-wrap:after,.canvas-wrap .axis{pointer-events:none}

.input-grid input[readonly]{background:#edf3e7;color:#315a3b;border-color:#aebfa3}#height-adjustment-status{margin-top:12px}

.preview-follow-bar{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 15px;background:#edf3e7;border:1px solid #b8c7b0;color:#355842;font-size:12px}.preview-follow-bar label{display:flex;align-items:center;gap:8px;font-weight:750;cursor:pointer;white-space:nowrap}.preview-follow-bar input{width:16px;height:16px;accent-color:#608f64}.preview-follow-bar span{font-size:10px;color:#77877b}.preview-column.follow-scroll{position:sticky;top:12px;align-self:start;max-height:calc(100vh - 24px);max-height:calc(100dvh - 24px);overflow:auto;grid-auto-rows:max-content;scrollbar-gutter:stable;scroll-padding-top:58px}.follow-scroll .preview-follow-bar{position:sticky;top:0;z-index:4;box-shadow:0 2px 8px #263b2915}@media(max-width:980px){.preview-follow-bar{grid-column:1/-1}.preview-column.follow-scroll{position:static;max-height:none;overflow:visible;scrollbar-gutter:auto}.follow-scroll .preview-follow-bar{position:static}}@media(max-width:680px){.preview-follow-bar{flex-wrap:wrap}}
.preview-column.follow-scroll{grid-template-columns:minmax(0,1fr);overflow-x:hidden}.preview-column.follow-scroll>.panel{min-width:0}
.font-tools{display:flex;gap:8px;flex-wrap:wrap;margin:14px 0 8px}.font-tools button{border:1px solid #aabbaa;background:#eff4e9;color:#355842;padding:9px 12px;font:inherit;font-size:12px;font-weight:700;cursor:pointer}.font-tools button:disabled{opacity:.5;cursor:wait}.font-tools span{font-size:10px;color:#7b8b80;flex-basis:100%}#font-preview{display:block;max-width:100%;max-height:110px;object-fit:contain;object-position:left;margin:10px 0 16px}#font-preview[hidden]{display:none}

/* Lid artwork uses the same quiet controls as the outline editor. */
#lid-decoration-tools label{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin:12px 0;color:#607454;font-size:14px}
#lid-decoration-tools input[type=file]{max-width:100%;font:inherit;color:inherit}
#lid-decoration-tools input[type=number]{width:100px;padding:10px 12px;border:1px solid #dbe2cf;border-radius:12px;background:#f7f8f0;color:#41533a;font:inherit}
#lid-decoration-tools input[type=color]{width:52px;height:38px;padding:4px;border:1px solid #dbe2cf;border-radius:10px;background:#f7f8f0}
#lid-decoration-tools button{padding:10px 14px;margin:3px 5px 3px 0;border:1px solid #d6dfc8;border-radius:12px;background:#f4f7ea;color:#607454;font:inherit;cursor:pointer}
#lid-decoration-tools button:hover{background:#e8efdc}#lid-decoration-tools button:focus-visible{outline:2px solid #8ea479;outline-offset:2px}
#lid-cell-status{font-size:13px;color:#778667;line-height:1.6}
