@import url('https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700&family=Manrope:wght@400;500;600;700;800&display=swap');
:root{--bg:#f5f4f0;--panel:#fff;--ink:#242d29;--muted:#7a8079;--line:#e2e5dc;--green:#355b44;--soft:#eaf0e6;--accent:#ce6b42;font-family:'DM Sans',sans-serif;color:var(--ink);background:var(--bg);font-size:13px}*{box-sizing:border-box}body{margin:0}button,input,select{font:inherit}button{border:1px solid var(--line);background:white;color:var(--ink);padding:9px 13px;border-radius:7px;cursor:pointer;transition:background .15s}button:hover{background:var(--soft)}button:disabled{opacity:.4;cursor:not-allowed}button.primary{background:var(--green);border-color:var(--green);color:white}.active{background:var(--soft)!important;color:var(--green)!important}input,select{width:100%;padding:9px;border:1px solid var(--line);border-radius:6px;color:var(--ink);background:#fff}input:focus,select:focus,button:focus-visible{outline:2px solid #8ca585;outline-offset:2px}header{height:82px;border-bottom:1px solid var(--line);display:flex;align-items:center;padding:0 28px;gap:30px;background:#fff}.brand{font:800 23px Manrope,sans-serif;letter-spacing:-1px;color:var(--ink);text-decoration:none;display:flex;gap:10px;align-items:center;white-space:nowrap}.brandmark{font:40px Georgia;color:var(--green)}.studio{font-size:9px;letter-spacing:2px;margin-left:5px;color:var(--muted)}.projecttitle{border-left:1px solid var(--line);padding-left:25px;flex:1}.projecttitle input{border:0;padding:0;font-weight:600;max-width:300px}.projecttitle span{display:block;font-size:10px;color:var(--muted);margin-top:5px}.headtools{display:flex;gap:7px}main{display:grid;grid-template-columns:228px minmax(320px,1fr) 338px;min-height:calc(100vh - 82px)}aside{background:#fff;padding:24px 20px}.assembly{border-right:1px solid var(--line)}.editor{border-left:1px solid var(--line)}h1,h2,h3,p{margin:0}h2{font-size:13px;font-weight:700}h3{font:700 18px Manrope,sans-serif}.sectionhead{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px}.muted,.small{color:var(--muted);font-size:12px;line-height:1.6}.small{font-size:10px}.assembly>.muted{font-size:11px;margin-bottom:23px}.part{width:100%;text-align:left;display:flex;gap:10px;align-items:center;padding:12px 10px;margin-bottom:7px}.part.selected{border-color:#91a88b;background:#f0f4ed}.part .num{font:11px monospace;color:var(--muted);border:1px solid var(--line);padding:6px;border-radius:5px}.part b{display:block;font-size:12px;overflow:hidden;text-overflow:ellipsis;max-width:126px;white-space:nowrap}.part small{display:block;color:var(--muted);font-size:10px;margin-top:3px}.wide{width:100%}.dashed{border-style:dashed;color:var(--muted);margin:8px 0}.assemblyactions{display:grid;grid-template-columns:1fr 1fr;gap:5px}.assemblyactions button{font-size:10px;padding:7px}.presets{border-top:1px solid var(--line);margin-top:26px;padding-top:22px}.presets h2{margin-bottom:12px}#presetList{display:grid;grid-template-columns:1fr 1fr;gap:7px;margin-bottom:10px}.preset{text-align:left;font-size:10px;padding:9px;background:#f8f8f5}.preset svg{display:block;margin:auto auto 7px;width:45px;height:50px}.referenceNote{margin-top:28px;border-radius:8px;background:#f4f3ec;padding:15px}.eyebrow{font-size:9px;font-weight:700;letter-spacing:1.8px;color:var(--muted)}.referenceNote b{display:block;margin-top:8px}.referenceNote p{font-size:10px;line-height:1.7;margin:8px 0;color:#697166}.referenceNote small{font-size:9px;line-height:1.5;display:block;color:var(--muted)}.workspace{padding:22px;min-width:0}.viewport{height:calc(100vh - 290px);min-height:440px;max-height:800px;position:relative;background:radial-gradient(ellipse at 45% 35%,#f3f0e7,#e6e8df);border:1px solid #dce0d4;border-radius:13px;overflow:hidden}canvas{width:100%;height:100%;display:block;touch-action:none;cursor:grab}.viewtop{position:absolute;left:22px;right:22px;top:21px;display:flex;align-items:flex-start;justify-content:space-between;pointer-events:none}h1{font:600 22px Manrope,sans-serif;letter-spacing:-.8px;margin-top:7px}.badge{font-size:10px;background:#ffffffbf;border:1px solid #d4ddcb;border-radius:20px;padding:7px 10px;color:var(--green)}.viewbottom{position:absolute;left:18px;right:18px;bottom:33px;display:flex;justify-content:space-between;gap:7px}.viewbuttons{display:flex;background:#ffffffca;border:1px solid #d8ddd1;border-radius:8px;padding:3px;gap:2px}.viewbuttons button{border:0;background:transparent;padding:7px 9px;font-size:10px}.axislabel{position:absolute;bottom:12px;left:0;right:0;text-align:center;font-size:9px;color:#7e877a;pointer-events:none}.metrics{display:grid;grid-template-columns:1.5fr 1fr 1fr 1fr;border-bottom:1px solid var(--line);padding:21px 0;gap:10px}.metrics span{display:block;font-size:10px;color:var(--muted);margin-bottom:6px}.metrics strong{font-size:13px;font-weight:500;font-variant-numeric:tabular-nums}.checks{padding-top:20px}.checks .sectionhead span{font-size:10px;color:var(--muted)}#checkList{display:flex;flex-wrap:wrap;gap:7px;margin-bottom:12px}.check{padding:6px 9px;font-size:10px;border-radius:5px;background:#e8eee3;color:#45603f}.check.warn{background:#f5ead7;color:#8c6429}.check.bad{background:#f6e1d9;color:#9f4931}.field{display:block;font-size:11px;font-weight:500;margin:18px 0}.field input,.field select{display:block;margin-top:7px}.unit{font-size:10px;color:var(--muted)}.tabs{display:flex;border-bottom:1px solid var(--line);gap:1px;margin:22px -2px 0;padding-bottom:5px}.tabs button{border:0;background:transparent;font-size:11px;padding:9px 13px}.controlintro{padding:22px 0 9px}.controlintro p{font-size:11px;color:var(--muted);line-height:1.7;margin-top:8px}.control{margin:20px 0}.controlhead{display:flex;justify-content:space-between;align-items:center;font-size:11px;margin-bottom:10px}.controlhead input{width:78px;padding:5px;text-align:right;font-size:11px}.controlhead label{font-weight:500}input[type=range]{accent-color:var(--green);padding:0;border:0;height:15px;width:100%;cursor:pointer}.profileheading{display:flex;align-items:center;justify-content:space-between;margin-top:22px;font-size:11px}.profileheading button{font-size:10px;padding:5px 8px}#profile{width:100%;margin:12px 0 4px;background:#f7f8f4;border:1px solid var(--line);border-radius:8px;touch-action:none}#profile circle{cursor:move}.pointhead,.pointrow{display:grid;grid-template-columns:1fr 1fr 25px;gap:7px;margin-top:6px}.pointhead{font-size:9px;color:var(--muted);margin-top:18px}.pointrow input{font-size:11px;padding:6px}.pointrow button{font-size:12px;padding:2px}.note{background:#f5f6f1;color:#78816f;line-height:1.65;font-size:10px;padding:12px;border-radius:7px;margin-top:20px}.threefields{display:grid;grid-template-columns:1fr 1fr 1fr;gap:6px;font-size:10px}.threefields input{margin-top:7px}input[type=color]{height:42px;padding:5px}dialog{border:1px solid var(--line);border-radius:14px;width:min(550px,94vw);padding:26px;color:var(--ink);box-shadow:0 20px 100px #20302430}dialog::backdrop{background:#17231d55;backdrop-filter:blur(4px)}.dialoghead{display:flex;align-items:center;justify-content:space-between;margin-bottom:15px}.dialoghead h2{font:700 21px Manrope,sans-serif}.dialoghead button{border:0;font-size:20px;padding:2px 10px}.dialogactions{display:flex;gap:8px;flex-wrap:wrap;margin-top:22px}.exportoption{display:block;width:100%;text-align:left;padding:18px;margin-top:12px}.exportoption span{display:block;font-size:10px;color:var(--muted);margin-top:6px}dialog .small{margin-top:16px}#exportInfo{font-size:12px;color:var(--muted);line-height:1.6}.savedrow{display:flex;align-items:center;gap:7px;border-bottom:1px solid var(--line);padding:12px 0}.savedrow b{flex:1;font-size:12px}.savedrow button{font-size:11px}.viewerror{position:absolute;left:10%;right:10%;top:43%;padding:20px;background:#fff4e8;border:1px solid #e4bd94;border-radius:10px;font-size:13px;line-height:1.6}#toast{position:fixed;bottom:24px;left:50%;transform:translateX(-50%);max-width:90%;padding:13px 23px;background:#253e2c;color:white;border-radius:9px;z-index:100;box-shadow:0 4px 20px #0002;font-size:12px}[hidden]{display:none!important}@media(min-width:1550px){main{grid-template-columns:250px minmax(320px,1fr) 370px}.editor{padding:24px 28px}}@media(max-width:1100px){main{grid-template-columns:185px minmax(280px,1fr) 300px}aside{padding:20px 14px}.workspace{padding:15px}.studio{display:none}header{padding:0 18px;gap:20px}.tabs button{padding:8px 10px}.viewbottom{left:9px;right:9px}.viewbuttons button{padding:7px 6px}}@media(max-width:900px){main{grid-template-columns:minmax(0,1fr) 310px}.assembly{grid-column:1/-1;display:flex;align-items:center;gap:12px;padding:12px;overflow-x:auto;border-bottom:1px solid var(--line)}.assembly>.sectionhead,.assembly>.muted,.assemblyactions,.referenceNote,.presets{display:none}#partList{display:flex;gap:6px}.part{width:170px;margin:0}.assembly>#addPart{width:140px;flex-shrink:0}.viewport{height:520px}.metrics{grid-template-columns:1fr 1fr;gap:15px}.projecttitle{display:none}.headtools{margin-left:auto}header{height:70px}.viewtop{left:14px;right:14px}.viewtop .eyebrow{font-size:8px}h1{font-size:17px}.badge{font-size:9px}}@media(max-width:650px){main{display:flex;flex-direction:column}.assembly{order:0}.workspace{order:1}.editor{order:2;border-top:1px solid var(--line);padding:25px}.viewport{height:460px;min-height:380px}.headtools button{padding:8px;font-size:11px}.brand{font-size:18px}.brandmark{font-size:29px}header{gap:10px;padding:0 12px}#undo,#redo{display:none}.metrics{grid-template-columns:1fr 1fr 1fr 1fr}.metrics strong{font-size:11px}.metrics span{font-size:8px}.tabs{justify-content:space-around}.profileheading{margin-top:15px}#profile{max-height:300px}.checks .small{font-size:9px}}

@media(max-width:900px){.assembly .assemblyactions{display:grid;min-width:175px}}

#patternGallery{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin:12px 0}.familycard{padding:8px;text-align:left;min-width:0}.familycard svg{width:100%;height:85px;background:#f3f5ef;border-radius:5px}.familycard b{display:block;font-size:11px}.familycard small{display:block;color:#8b6e40;font-size:10px;margin-top:4px}.referencecard{grid-column:1/-1;background:#eaf0e6}details{margin-top:18px}summary{cursor:pointer;font-weight:600}#patternSource{display:block;color:#355b44;margin:10px 0;font-size:12px}#matchBelow{margin-top:12px}#matchAll{margin:10px 0;font-size:11px}.editor{max-height:calc(100vh - 82px);overflow:auto}@media(max-width:650px){.editor{max-height:none}}
#vesselPanel .controlintro{margin-top:8px}#crossEditor{width:100%;height:220px;background:#f5f7f1;border:1px solid #dde3d6;border-radius:10px;margin:12px 0;touch-action:none}#crossEditor circle[data-index]{cursor:grab}.radialvalue{display:inline-flex;width:50%;gap:6px;padding:4px;align-items:center;font-size:11px}.radialvalue input{width:75px}.inlineCheck{display:flex;gap:8px;align-items:center;margin:14px 0}.inlineCheck input{width:auto}.profileToolbar{display:flex;gap:4px;flex-wrap:wrap;margin-top:8px}.profileToolbar button{padding:7px;font-size:11px}#profile{background-position:center;background-size:contain;background-repeat:no-repeat;touch-action:none}#profile.tracing polygon{fill-opacity:.22}#bodyTools .note{margin:8px 0}#addVase{margin-bottom:8px}#vesselPanel>select{margin-bottom:12px}

.pointrow.reverse-point,.pointhead.reverse-point{grid-template-columns:minmax(0,1fr) minmax(0,1fr) 48px 34px}.creaseflip{padding:8px 3px;font-size:11px}.creaseflip[aria-pressed="true"]{background:#355b44;color:#fff;border-color:#355b44}.pointhead.reverse-point span:nth-child(3){text-align:center;font-size:10px}

.gridtoggle{display:flex;align-items:center;gap:6px;font-size:11px}.gridtoggle input{width:auto;margin:0}.profileheading .gridtoggle{margin-left:auto}.basecard{background:#f6f7f1;border:1px solid var(--line);border-radius:10px;padding:14px;margin-bottom:20px}.basecard h4{margin:0 0 12px}.basecard .small{line-height:1.6}

.basefit{border-top:1px solid var(--line);margin-top:12px;padding-top:4px}.basefit .field{margin:12px 0}#fitBase{margin:2px 0 8px}

.jointcard{border:1px solid var(--line);border-radius:8px;padding:11px;margin:4px 0 10px;background:#fafbf8}.jointcard .small{margin:6px 0 8px}
.jointfields{display:grid;grid-template-columns:1fr 1fr 1fr;gap:5px;font-size:9px;color:var(--muted)}.jointfields input{padding:5px;font-size:11px;margin-top:3px}
@media(max-width:900px){.assembly .jointcard{flex-shrink:0;width:215px;margin:0;padding:8px 10px}.assembly .jointcard .small{display:none}.assembly #matchAll{flex-shrink:0;width:auto;margin:0}}
@media(max-width:650px){header #undo,header #redo{display:inline-block;padding:8px 9px}}
.check.pending{background:#eef0ea;color:var(--muted)}
