:root{--ink:#071a25;--muted:#667f8a;--paper:#e8f7fb;--card:#f9fdff;--line:#bfd8e1;--green:#1186a9;--green-dark:#07677f;--lime:#36c7f4;--red:#d94a30;--laser:#ff5a36;--shadow:0 18px 50px rgba(7,36,48,.10)}
*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--paper);color:var(--ink);font-family:Inter,"PingFang SC","Microsoft YaHei",sans-serif}.topbar{height:74px;border-bottom:1px solid rgba(23,35,33,.12);display:flex;align-items:center;justify-content:space-between;padding:0 max(24px,calc((100vw - 1200px)/2));background:rgba(243,241,234,.9);position:sticky;top:0;z-index:10;backdrop-filter:blur(12px)}.brand{display:flex;align-items:center;gap:11px;color:var(--ink);text-decoration:none;font-weight:850;letter-spacing:.08em}.brand-mark{display:grid;place-items:center;width:35px;height:35px;border-radius:50%;background:var(--ink);color:var(--lime);font-family:Georgia,serif;font-style:italic;font-size:21px}.brand small{display:block;font-size:9px;letter-spacing:.22em;color:var(--muted);margin-top:1px}.mode{font-size:12px;color:var(--muted);display:flex;align-items:center;gap:8px}.mode span{width:7px;height:7px;border-radius:50%;background:#41b58b;box-shadow:0 0 0 4px rgba(65,181,139,.14)}main{max-width:1200px;margin:auto;padding:0 24px 80px}.hero{min-height:330px;display:flex;align-items:center;justify-content:space-between;gap:40px;border-bottom:1px solid rgba(23,35,33,.12)}.eyebrow{font-size:11px;letter-spacing:.2em;color:var(--green);font-weight:750}.hero h1{font-size:clamp(40px,6vw,72px);line-height:1.04;margin:15px 0 20px;letter-spacing:-.055em;max-width:820px}.hero h1 em{font-family:Georgia,"Songti SC",serif;color:var(--green);font-weight:500}.intro{color:var(--muted);font-size:15px;line-height:1.8;max-width:660px}.spec-card{min-width:210px;padding:25px;background:var(--ink);color:#fff;border-radius:4px;box-shadow:12px 12px 0 var(--lime)}.spec-card span,.spec-card small{display:block;color:#aab8b4;font-size:11px}.spec-card strong{display:block;font-family:Georgia,serif;font-size:29px;margin:12px 0 8px}.workspace{display:grid;grid-template-columns:1fr 1.35fr;gap:20px;margin-top:28px}.panel{background:var(--card);border:1px solid rgba(23,35,33,.12);border-radius:6px;padding:26px;box-shadow:var(--shadow)}.section-heading{display:flex;gap:14px;align-items:flex-start;margin-bottom:24px}.section-heading>span{font-family:Georgia,serif;font-size:12px;color:var(--green);border-top:2px solid var(--green);padding-top:5px}.section-heading h2{font-size:19px;margin:0 0 5px}.section-heading p{font-size:12px;color:var(--muted);margin:0}.field-grid{display:grid;grid-template-columns:1fr 1fr;gap:15px}label{font-size:12px;color:#52615d;font-weight:650}input[type=number]{width:100%;height:42px;margin-top:7px;padding:0 11px;border:1px solid var(--line);border-radius:3px;background:#fafaf7;color:var(--ink);font:600 14px inherit;outline:none}input:focus{border-color:var(--green);box-shadow:0 0 0 3px rgba(12,124,107,.1)}label small{display:block;font-size:9px;color:#8b9693;margin-top:4px;font-weight:500}.switch-row{border-top:1px solid var(--line);margin-top:20px;padding-top:18px;display:flex;justify-content:space-between;align-items:center}.switch-row strong,.switch-row small{display:block}.switch-row input{display:none}.switch-row i{width:44px;height:24px;border-radius:20px;background:#bbc4c1;position:relative;transition:.2s}.switch-row i:after{content:"";position:absolute;width:18px;height:18px;border-radius:50%;left:3px;top:3px;background:#fff;transition:.2s}.switch-row input:checked+i{background:var(--green)}.switch-row input:checked+i:after{transform:translateX(20px)}.drop-zone{height:147px;border:1.5px dashed #aebbb7;background:#f8faf7;display:flex;flex-direction:column;align-items:center;justify-content:center;cursor:pointer;transition:.2s;border-radius:4px}.drop-zone:hover,.drop-zone.dragging{border-color:var(--green);background:#eef8f3}.upload-icon{font-size:26px;color:var(--green);line-height:1}.drop-zone strong{font-size:14px;color:var(--ink);margin:8px 0 4px}.drop-zone small{font-size:10px}.file-list{margin-top:15px;max-height:280px;overflow:auto}.empty-state{text-align:center;color:#9aa4a1;font-size:12px;padding:20px}.file-row{display:grid;grid-template-columns:36px 1fr auto 28px;align-items:center;gap:11px;padding:12px 3px;border-bottom:1px solid #edf0ec}.file-badge{width:34px;height:34px;display:grid;place-items:center;background:#e8f3ef;color:var(--green);font-size:9px;font-weight:800}.file-meta strong{display:block;font-size:12px;white-space:nowrap;max-width:260px;overflow:hidden;text-overflow:ellipsis}.file-meta small{font-size:10px;color:var(--muted)}.file-meta .warning{color:#9b6921}.file-meta .error{color:var(--red)}.qty{display:flex;align-items:center;gap:5px;font-size:10px;color:var(--muted)}.qty input{width:50px;height:30px;margin:0}.remove{border:0;background:transparent;color:#899592;cursor:pointer;font-size:18px}.primary{width:100%;height:49px;margin-top:18px;border:0;border-radius:3px;background:var(--green);color:#fff;display:flex;align-items:center;justify-content:space-between;padding:0 18px;font-weight:750;cursor:pointer}.primary:hover{background:var(--green-dark)}.primary:disabled{opacity:.45;cursor:not-allowed}.primary b{font-size:20px}.alert{background:#fff0f0;border-left:4px solid var(--red);padding:14px 17px;margin-top:22px;color:#8e2f35;font-size:13px}.hidden{display:none!important}.results{margin-top:50px}.results-header{display:flex;justify-content:space-between;align-items:flex-start}.secondary{border:1px solid var(--line);background:#fff;padding:10px 16px;border-radius:3px;cursor:pointer}.summary-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}.metric{background:#fff;border:1px solid var(--line);padding:20px}.metric small{display:block;color:var(--muted);font-size:10px;margin-bottom:9px}.metric strong{font-family:Georgia,serif;font-size:25px}.metric strong.green{color:var(--green)}.metric span{font-size:10px;color:var(--muted);margin-left:3px}.sheets{display:grid;gap:18px;margin-top:18px}.sheet-card{background:#fff;border:1px solid var(--line);padding:22px}.sheet-head{display:flex;justify-content:space-between;align-items:end;margin-bottom:18px}.sheet-head h3{margin:0;font-size:16px}.sheet-head p{margin:5px 0 0;color:var(--muted);font-size:11px}.sheet-stats{text-align:right;font-size:11px;color:var(--muted)}.preview-wrap{background:#e7e9e4;padding:18px;overflow:auto}.sheet-svg{display:block;width:100%;min-width:500px;background:#fdfdfa}.sheet-outline{fill:#fcfcf8;stroke:#172321;stroke-width:1}.safe-outline{fill:none;stroke:#8b9894;stroke-width:.7;stroke-dasharray:4 3}.used-outline{fill:none;stroke:#0c7c6b;stroke-width:.7;stroke-dasharray:2 2}.part rect{stroke:#fff;stroke-width:1.2}.part text{fill:#fff;font-size:8px;font-weight:700;paint-order:stroke;stroke:rgba(0,0,0,.2);stroke-width:.5px;pointer-events:none}.placement-table{width:100%;border-collapse:collapse;margin-top:15px;font-size:11px}.placement-table th,.placement-table td{text-align:left;padding:9px;border-bottom:1px solid #edf0ec}.placement-table th{color:var(--muted);font-weight:600}.quote-detail{margin-top:18px;background:var(--ink);color:#fff;padding:28px;display:grid;grid-template-columns:1.5fr 1fr;gap:30px}.quote-detail h3{margin:0 0 15px}.calc-line{display:flex;justify-content:space-between;padding:8px 0;border-bottom:1px solid rgba(255,255,255,.12);font-size:12px;color:#bcc8c5}.calc-line b{color:#fff}.total-price{display:flex;align-items:end;justify-content:flex-end;gap:8px}.total-price strong{font:500 48px Georgia,serif;color:var(--lime)}.total-price span{padding-bottom:7px;color:#aebcb8}footer{text-align:center;padding:26px;color:#899592;font-size:10px;border-top:1px solid var(--line)}@media(max-width:850px){.hero{display:block;padding:65px 0}.spec-card{margin-top:32px;max-width:240px}.workspace{grid-template-columns:1fr}.summary-grid{grid-template-columns:1fr 1fr}.quote-detail{grid-template-columns:1fr}.total-price{justify-content:flex-start}}@media(max-width:520px){main{padding:0 14px 55px}.topbar{padding:0 16px}.mode{display:none}.hero h1{font-size:40px}.field-grid{grid-template-columns:1fr}.summary-grid{grid-template-columns:1fr}.panel{padding:19px}.file-row{grid-template-columns:34px 1fr 25px}.qty{grid-column:2}.quote-detail{padding:20px}.total-price strong{font-size:38px}}
