@font-face{font-family:Manrope;src:url(../fonts/manrope-latin.woff2) format("woff2");font-style:normal;font-weight:200 800;font-display:swap}@font-face{font-family:Bricolage;src:url(../fonts/bricolage-grotesque-latin.woff2) format("woff2");font-style:normal;font-weight:200 800;font-display:swap}:root{color-scheme:light;--bg: #E6E8E4;--panel: #FCFCFA;--panel-2: #F2F4F3;--border: #BAC5C7;--control-border: #7E8D91;--text: #172226;--muted: #4A5A5F;--accent: #294751;--accent-strong: #1C343C;--accent-soft: #DFE8EB;--accent-2: #5F7C85;--ok: #35613D;--bad: #A13834;--warn: #80591D;--canvas-bg: #D9E1E3;--sheet-bg: #FCFCFA;--focus: #294751}*{box-sizing:border-box}html,body{margin:0;height:100%;background:var(--bg);color:var(--text);font:14px/1.5 Manrope,sans-serif;-webkit-font-smoothing:antialiased}#app{height:100%;display:flex;flex-direction:column}.hidden{display:none!important}.muted{color:var(--muted)}.small{font-size:12px}.warn{color:var(--warn)}.row{display:flex;align-items:center}.gap{gap:8px}.grow{flex:1 1 auto;min-height:0}.scroll{overflow-y:auto}.wide{width:100%}.topbar{display:flex;align-items:center;gap:24px;padding:14px 22px;border-bottom:1px solid #A9B6B9;background:var(--panel);flex-wrap:wrap}.brand{display:flex;align-items:center;gap:10px;flex:0 0 auto}.brand-icon{display:block;width:38px;height:38px;flex:none}.brand-copy{display:flex;flex-direction:column;gap:3px}.brand-name{font-family:Bricolage,sans-serif;font-size:23px;font-weight:650;line-height:1;letter-spacing:-.7px}.brand-maker{display:inline-flex;align-items:center;align-self:flex-start;gap:5px;color:var(--muted);font-size:10px;line-height:14px;text-decoration:none}.brand-maker img{display:block;width:70px;height:14px}.brand-maker:hover{opacity:.75}.brand-maker:visited{color:var(--accent-strong)}.top-actions{margin-left:auto;display:flex;gap:7px;align-items:center;flex-wrap:wrap}.top-actions .btn{padding-inline:11px;font-size:12px}.top-actions .save-project{border-color:var(--control-border);background:var(--accent-soft);color:var(--accent-strong);font-weight:650}.project-name{width:150px}.layout{flex:1;display:grid;grid-template-columns:300px minmax(0,1fr) 318px;gap:18px;padding:18px;min-height:0}.col{display:flex;flex-direction:column;gap:10px;min-height:0;min-width:0}.center{min-width:0;gap:14px}.left,.right{background:var(--panel);border:1px solid var(--border);border-radius:10px;gap:0;overflow:hidden}.right{overflow-y:auto}.left>.card,.right>.card{border:0;border-radius:0;padding:16px;box-shadow:none;flex-shrink:0}.left>.card+.card,.right>.card+.card{border-top:1px solid var(--border)}.left>.grow{flex-shrink:1}.right>.grow{flex:1 0 180px}.card{background:var(--panel);border:1px solid var(--border);border-radius:8px;padding:16px}.card h2{margin:0 0 12px;font-family:Bricolage,sans-serif;font-size:18px;font-weight:650;line-height:1.3;letter-spacing:-.25px;color:var(--text)}.card h3{margin:14px 0 6px;font-size:13px;font-weight:600;color:var(--text)}.btn{background:var(--panel-2);color:var(--text);border:1px solid var(--control-border);border-radius:5px;padding:7px 12px;transition:background-color .12s,border-color .12s;cursor:pointer;font:inherit}.btn:hover:not(:disabled){border-color:var(--accent);background:var(--accent-soft)}.btn:disabled{opacity:.48;cursor:not-allowed}.btn.primary{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:650}.btn.primary:hover:not(:disabled){background:var(--accent-strong);border-color:var(--accent-strong)}.btn.big{padding:11px 19px;font-size:14px}.btn.danger,.btn.danger:hover:not(:disabled){background:var(--bad);border-color:var(--bad);color:#fff}.btn.subtle{background:transparent}.btn.ghost{background:transparent;border-color:transparent;color:var(--muted);font-weight:550}.btn.ghost:hover:not(:disabled){color:var(--text)}.btn.buy{text-align:center;text-decoration:none;display:block}.badge-btn.ok{border-color:var(--ok);color:var(--ok)}.icon-btn{background:transparent;border:none;color:var(--muted);font-size:16px;cursor:pointer;padding:2px 8px;border-radius:6px}.icon-btn:hover{color:var(--text);background:var(--accent-soft)}.icon-btn.danger:hover{color:var(--bad)}input.text,textarea.text,select.rot,input.num{background:#fff;border:1px solid var(--control-border);color:var(--text);border-radius:5px;padding:7px 9px;font:inherit}input.num{width:76px;font-variant-numeric:tabular-nums}input.num.qty{width:58px}input.num.deg{width:62px}select.rot.lang{width:64px}input[type=checkbox],input[type=radio]{accent-color:var(--accent)}input.text,input.num,select.rot{min-height:36px}.key-input{width:100%;font-family:ui-monospace,monospace;font-size:12px}.field{font-weight:550;display:flex;flex-direction:column;gap:5px;font-size:12px;color:#3f4e53}.field-col{font-weight:550;display:flex;flex-direction:column;gap:4px;margin:10px 0;font-size:12px;color:#3f4e53}.chk{display:inline-flex;align-items:center;gap:4px;font-size:12px;color:#3f4e53}.chk.small{margin-top:8px;display:flex}.dropzone{border:1px dashed var(--control-border);border-radius:10px;padding:22px 14px;background:#f0f4f4;line-height:1.65;text-align:center;color:var(--muted);margin-bottom:8px;transition:border-color .15s,background .15s}.dropzone.active{border-color:var(--accent);background:var(--accent-soft);color:var(--text)}.warnings{margin-top:8px;font-size:12px;color:var(--warn)}.warnings ul{margin:4px 0 0;padding-left:18px}.part-list{display:flex;flex-direction:column;gap:10px;margin-top:12px}.part-row{display:flex;gap:8px;align-items:flex-start;background:var(--panel-2);border:1px solid var(--border);border-radius:8px;padding:8px}.part-thumb{width:64px;height:46px;flex:0 0 auto;background:#e4ebec;border-radius:6px}.part-main{flex:1;min-width:0}.part-name{font-weight:650;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.part-controls{display:flex;flex-wrap:wrap;gap:7px;margin-top:9px;align-items:center}.grain-fields{display:inline-flex;gap:4px;margin-left:4px}.total{margin:10px 0 0}.sheet-list{display:flex;flex-direction:column;gap:8px;margin-bottom:10px}.sheet-row{display:flex;gap:6px;align-items:flex-start;background:var(--panel-2);border:1px solid var(--border);border-radius:8px;padding:10px}.sheet-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;flex:1;min-width:0}.sheet-grid input.num,.sheet-grid select.rot{width:100%;min-width:0}.card>.field{margin-top:12px}.config-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px 8px}.canvas-toolbar{display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap}.sheet-tabs{display:flex;gap:6px;flex-wrap:wrap}.tab{background:var(--panel);border:1px solid var(--border);color:var(--muted);border-radius:6px;padding:5px 12px;cursor:pointer;font:inherit;font-size:12px;font-weight:600;font-variant-numeric:tabular-nums}.tab:hover{border-color:var(--accent);color:var(--text)}.tab.active{background:var(--accent-soft);color:var(--accent-strong);border-color:var(--accent)}.canvas-host{position:relative;flex:1;min-height:320px;border:1px solid #9DABAF;border-radius:8px;overflow:hidden;background:var(--canvas-bg)}.nest-canvas{width:100%;height:100%;display:block;cursor:grab;touch-action:none}.nest-canvas:active{cursor:grabbing}.chip{display:inline-block;padding:2px 8px;border-radius:999px;font-size:11px;font-weight:700;letter-spacing:.04em}.chip.warn{background:#f6eedf;color:var(--warn);border:1px solid var(--warn)}.chip.bad{background:#fbeeec;color:var(--bad);border:1px solid var(--bad)}.chip.floating{position:absolute;top:10px;right:10px;z-index:2}.progress{display:grid;gap:10px;flex:0 0 auto;padding:16px 18px;border:1px solid var(--border);border-radius:8px;background:var(--panel);color:var(--accent-strong);font-variant-numeric:tabular-nums}.progress-heading{display:flex;align-items:baseline;justify-content:space-between;gap:16px}.progress-title{font:650 19px/1.3 Bricolage,sans-serif;letter-spacing:-.2px}.progress-time{flex:none;font-size:12px;font-weight:600}.progress-text{font-size:12px;color:var(--muted);overflow-wrap:anywhere}.progress-hint{margin:0;font-size:12px;line-height:1.55;color:var(--muted);max-width:70ch}.progress-track{height:3px;overflow:hidden;border-radius:2px;background:var(--accent-soft)}.progress-sweep{display:block;width:32%;height:100%;border-radius:inherit;background:var(--accent);animation:nest-activity 2.4s ease-in-out infinite}@keyframes nest-activity{0%{transform:translate(-110%)}to{transform:translate(325%)}}@media(prefers-reduced-motion:reduce){.progress-sweep{animation:none}}.canvas-toolbar>.row{flex-wrap:wrap}@media(max-width:600px){.progress{padding:14px}.progress-title{font-size:18px}}.util-row{display:flex;align-items:center;gap:8px;margin:6px 0 2px}.util-label{width:74px;color:var(--muted);font-size:12px;flex:0 0 auto}.util-bar{flex:1;min-width:60px;height:8px;background:var(--accent-soft);border-radius:999px;overflow:hidden}.util-fill{height:100%;background:var(--accent)}.util-pct{width:52px;text-align:right;font-size:12px;font-weight:650;font-variant-numeric:tabular-nums}.util-area{margin:0 0 8px 2px}.badge-row{display:flex;flex-wrap:wrap;gap:6px}.badge{padding:3px 9px;border-radius:999px;font-size:11px;font-weight:600;border:1px solid}.badge.ok{color:var(--ok);border-color:#b9cdb5;background:#eef3e9}.badge.bad{color:var(--bad);border-color:var(--bad);background:#fbeeec}.witness-list ul{margin:4px 0;padding-left:18px;font-size:12px;color:var(--bad)}.unplaced p{color:var(--warn);font-size:12px}.nest-error{color:var(--bad)}.diagnostics{margin-top:12px;padding-top:10px;border-top:1px solid var(--accent-soft)}.diagnostics .hint{margin:6px 0 0;font-size:11px;line-height:1.4;color:var(--muted)}.modal-overlay{position:fixed;inset:0;background:#141e2266;display:grid;place-items:center;z-index:50}.modal{position:relative;width:min(440px,calc(100vw - 32px));background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:20px;box-shadow:0 24px 80px #1422262e}.modal h2{margin-top:0;padding-right:32px;font-family:Bricolage,sans-serif;font-size:24px;font-weight:600;line-height:1.25;letter-spacing:-.5px}.modal-close{position:absolute;top:10px;right:10px}.modal-actions{display:flex;gap:8px;margin-top:14px}.modal-actions.col{flex-direction:column}.license-status.ok{color:var(--ok)}.license-status.bad{color:var(--bad)}.toast-host{position:fixed;bottom:14px;left:50%;transform:translate(-50%);display:flex;flex-direction:column;gap:6px;z-index:60;align-items:center;pointer-events:none}.toast{background:var(--panel);border:1px solid var(--border);border-radius:8px;padding:8px 14px;box-shadow:0 5px 24px #1422261f;font-size:13px;max-width:min(560px,calc(100vw - 32px))}.toast.ok{border-color:var(--ok)}.toast.error{border-color:var(--bad);color:var(--bad)}button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,[role=tab]:focus-visible,canvas:focus-visible{outline:2px solid var(--focus);outline-offset:2px;border-radius:6px}.btn{min-height:36px}.icon-btn{min-width:32px;min-height:32px}.tab{min-height:32px}@media(pointer:coarse){.btn,.tab,select.rot,input.num,input.text{min-height:44px}.icon-btn{min-width:44px;min-height:44px}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important;scroll-behavior:auto!important}}.row.space-between{justify-content:space-between;width:100%;gap:8px}.row.space-between h2{margin:0}.row.space-between .btn{font-size:12px;padding-inline:10px}.card>.row.gap>.btn{flex:1;font-size:12px;padding-inline:8px}.card>.btn.wide+.btn.wide{margin-top:6px}.scroll,.right{scrollbar-width:thin;scrollbar-color:#9BA9AD transparent}@media(max-width:1280px)and (min-width:1101px){.layout{grid-template-columns:278px minmax(0,1fr) 292px;gap:12px;padding:12px}.left>.card,.right>.card{padding:13px}.canvas-toolbar>.row{width:100%;justify-content:flex-end}}@media(max-width:1100px){.layout{grid-template-columns:1fr;grid-auto-rows:auto;overflow-y:auto;gap:14px;padding:14px}.canvas-host{min-height:45vh}.col{min-height:unset}.left,.right{overflow:visible}.left>.grow,.right>.grow{flex:auto}.center{min-height:56vh}.topbar{gap:14px}}@media(max-width:600px){.topbar{padding:10px 12px;gap:8px}.top-actions{width:100%;gap:5px;margin:0}.top-actions .project-name{width:100%;flex:1 0 100%}.top-actions .btn{min-height:40px;padding-inline:8px}.brand-name{font-size:24px}.layout{padding:12px;gap:16px}.canvas-toolbar>.row{width:100%;justify-content:flex-end}}@media(max-width:520px){.part-thumb{width:44px;height:40px}.sheet-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}.export-hint{margin:0 0 10px;line-height:1.45;color:var(--muted)}.export-hint.over{color:var(--warn)}
