.consent-screen{min-height:100dvh;height:100dvh;overflow:auto;display:grid;align-items:start;justify-items:center;padding:max(24px,env(safe-area-inset-top)) max(16px,env(safe-area-inset-right)) max(24px,env(safe-area-inset-bottom)) max(16px,env(safe-area-inset-left));background:var(--bg)}.consent-card{width:min(100%,640px);margin:auto 0;padding:clamp(20px,4vw,40px);border:1px solid var(--line);border-radius:12px;background:var(--panel);line-height:1.8;font-size:15px}.consent-card h1{font-size:clamp(22px,5vw,30px);line-height:1.4}.consent-brand{color:var(--ink-soft);font-weight:700}.consent-card ul{padding-left:1.4em}.consent-card li+li{margin-top:12px}.legal-links{display:flex;flex-wrap:wrap;gap:8px 20px}.legal-links a{color:var(--accent-strong);text-decoration:underline;padding:8px 0}.consent-check{display:flex;align-items:flex-start;gap:12px;margin:24px 0;cursor:pointer}.consent-check input{flex:0 0 auto;width:20px;height:20px;margin:4px 0;accent-color:var(--accent-strong)}.consent-start{width:100%;min-height:48px;font-size:15px}.consent-version{color:var(--ink-soft);font-size:12px;margin-bottom:0}.consent-storage-note{position:fixed;bottom:0;left:0;right:0;z-index:10000;background:var(--warn-soft);padding:8px 16px;font-size:12px}:root{--font: Inter, -apple-system, BlinkMacSystemFont, "Hiragino Kaku Gothic ProN", "Yu Gothic", sans-serif;--mono: "SF Mono", ui-monospace, Menlo, Consolas, monospace;--ink: #253748;--ink-strong: #1d2b38;--ink-soft: #5b6b7a;--ink-faint: #8b949c;--bg: #f6f7f9;--panel: #ffffff;--panel-alt: #f9fafb;--line: #dfe4e8;--line-strong: #cdd4db;--hover: #e8edf1;--active: #dbe7f1;--brand: #263b4d;--accent: #3f85b7;--accent-strong: #2f6f9e;--accent-soft: #e6f0f7;--warm: #c7773b;--warm-soft: #fbf1e7;--ok: #2f9e6b;--ok-soft: #e5f4ec;--warn: #b97a16;--warn-soft: #fdf4e0;--danger: #d0453a;--danger-soft: #fbeae8;--radius: 5px;--header-h: 44px;--ribbon-h: 62px;--timeline-h: 58px;--status-h: 24px;--side-w: 264px;font-family:var(--font);font-size:12px;color:var(--ink);background:var(--bg);font-synthesis:none;-webkit-font-smoothing:antialiased}*{box-sizing:border-box}html,body,#root{height:100%;margin:0;overflow:hidden}body{overscroll-behavior:none}button,input,select,textarea{font:inherit;color:inherit}button{border:1px solid transparent;background:transparent;border-radius:var(--radius);cursor:pointer;padding:5px 9px;transition:background .12s,border-color .12s,color .12s;white-space:nowrap}button:hover{background:var(--hover)}button:focus-visible,a:focus-visible,[tabindex]:focus-visible{outline:2px solid var(--accent);outline-offset:1px}button:disabled{opacity:.38;cursor:default;background:transparent}input,select,textarea{background:#fff;border:1px solid var(--line);border-radius:4px;padding:4px 7px;width:100%;outline:none;min-width:0}input:focus,select:focus,textarea:focus{border-color:var(--accent);box-shadow:0 0 0 2px #3f85b724}input[type=checkbox],input[type=radio]{width:13px;height:13px;accent-color:var(--warm);margin:0}input[type=number],.num{font-variant-numeric:tabular-nums}input.invalid{border-color:var(--danger);box-shadow:0 0 0 2px #d0453a1f}select{padding-right:4px}.btn{border-color:var(--line);background:#fff;font-weight:550}.btn:hover{background:var(--hover)}.btn.primary{background:var(--brand);border-color:var(--brand);color:#fff}.btn.primary:hover{background:#32506a}.btn.accent{background:var(--accent);border-color:var(--accent);color:#fff}.btn.accent:hover{background:var(--accent-strong)}.btn.danger{color:var(--danger)}.btn.small{padding:3px 7px;font-size:11px}.icon-btn{width:24px;height:24px;padding:0;display:inline-flex;align-items:center;justify-content:center;color:var(--ink-soft)}.icon-btn:hover{color:var(--ink)}.icon-btn.on{color:var(--accent-strong);background:var(--accent-soft)}.app{display:grid;grid-template-rows:var(--header-h) var(--ribbon-h) minmax(0,1fr) var(--timeline-h) var(--status-h);grid-template-columns:var(--side-w) minmax(0,1fr);grid-template-areas:"header header" "ribbon ribbon" "side   main" "timeline timeline" "status status";height:100%}.app.no-timeline{grid-template-rows:var(--header-h) var(--ribbon-h) minmax(0,1fr) 0 var(--status-h)}.header{grid-area:header;display:flex;align-items:center;gap:14px;padding:0 12px;background:var(--panel);border-bottom:1px solid var(--line)}.brand{display:flex;align-items:center;gap:8px;font-weight:730;font-size:16px;letter-spacing:-.4px;color:var(--ink-strong)}.brand-mark{width:24px;height:24px;border-radius:6px;background:var(--brand);display:grid;place-items:center}.brand-tag{font-size:8.5px;letter-spacing:.9px;font-weight:650;background:#f0f2f4;padding:3px 4px;border-radius:3px;color:var(--ink-faint)}.workspace-tabs{display:flex;background:#eef1f4;border-radius:6px;padding:2px;gap:2px}.workspace-tabs button{font-size:11px;font-weight:680;letter-spacing:.7px;padding:5px 14px;color:var(--ink-soft);border-radius:4px}.workspace-tabs button.on{background:#fff;color:var(--ink-strong);box-shadow:0 1px 2px #1d2b3824}.doc-name{display:flex;align-items:center;gap:6px;min-width:0}.doc-name input{border-color:transparent;background:transparent;font-weight:600;width:190px;padding:4px 6px}.doc-name input:hover{border-color:var(--line)}.doc-name input:focus{background:#fff}.dirty-dot{width:6px;height:6px;border-radius:50%;background:var(--warm);flex:none}.header-spacer{flex:1}.header-actions{display:flex;align-items:center;gap:4px}.header-sep{width:1px;height:20px;background:var(--line);margin:0 4px}.ribbon{grid-area:ribbon;display:flex;align-items:stretch;gap:0;background:var(--panel-alt);border-bottom:1px solid var(--line);padding:0 6px;overflow-x:auto;overflow-y:hidden;scrollbar-width:thin}.ribbon-group{display:flex;flex-direction:column;justify-content:space-between;padding:5px 8px 3px;border-right:1px solid var(--line);flex:none}.ribbon-group:last-child{border-right:0}.ribbon-tools{display:flex;align-items:center;gap:1px}.ribbon-label{font-size:9px;letter-spacing:.9px;font-weight:650;color:var(--ink-faint);text-transform:uppercase;text-align:center;padding-top:2px}.tool{display:inline-flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;min-width:34px;height:36px;padding:2px 5px;color:var(--ink-soft);border-radius:4px;font-size:9.5px;line-height:1}.tool svg{width:20px;height:20px;flex:none}.tool:hover{color:var(--ink-strong)}.tool.on{background:var(--active);color:var(--accent-strong);border-color:#b9d2e5}.tool.wide{flex-direction:row;gap:5px;font-size:11px;font-weight:600;padding:2px 9px}.tool.finish{background:var(--ok);color:#fff;font-weight:650}.tool.finish:hover{background:#278a5c}.ribbon-options{display:flex;align-items:center;gap:8px;padding:0 4px;height:36px}.ribbon-options label{display:flex;align-items:center;gap:5px;color:var(--ink-soft);font-size:11px;white-space:nowrap}.ribbon-options input[type=number],.ribbon-options input[type=text]{width:58px;padding:3px 5px}.menu-wrap{position:relative}.menu{position:absolute;z-index:50;top:calc(100% + 4px);left:0;min-width:190px;padding:4px;background:#fff;border:1px solid var(--line-strong);border-radius:6px;box-shadow:0 8px 24px #1d2b3829}.menu.right{left:auto;right:0}.menu button{display:flex;width:100%;align-items:center;gap:8px;text-align:left;padding:6px 8px}.menu button svg{width:16px;height:16px;color:var(--ink-soft);flex:none}.menu .kbd{margin-left:auto;color:var(--ink-faint);font-size:10.5px}.menu hr{border:0;border-top:1px solid var(--line);margin:4px 0}.menu-title{font-size:9px;letter-spacing:.9px;font-weight:650;color:var(--ink-faint);text-transform:uppercase;padding:5px 8px 3px}.menu.popover{position:fixed;z-index:90;right:auto;bottom:auto;overflow:auto;overscroll-behavior:contain;box-sizing:border-box}.menu.context-menu{min-width:214px}.menu.help-menu{z-index:95;width:264px;padding:8px}.help-menu-title{display:flex;align-items:center;gap:8px;font-weight:680;font-size:12.5px;color:var(--ink-strong);padding:2px 4px 0}.help-menu-text{margin:4px 4px 8px;font-size:11.5px;line-height:1.45;color:var(--ink-soft)}.menu.help-menu button{border-top:1px solid var(--line);border-radius:0 0 4px 4px;color:var(--accent-strong);font-weight:600}.help-en,.help-ja{display:block}.help-ja{color:var(--ink-soft);font-size:.94em;line-height:1.6;margin-top:1px}.help-menu-text.help-ja{margin-top:-4px}.help-section h3 span{letter-spacing:.4px}.help-backdrop{z-index:100}.help-overlay{width:min(560px,calc(100vw - 40px))}.help-shortcut{margin-left:8px;padding:1px 6px;border:1px solid var(--line-strong);border-radius:4px;font-size:10.5px;font-weight:600;color:var(--ink-soft)}.help-body{line-height:1.55;font-size:12.5px}.help-body p{margin:0 0 6px}.help-summary{font-size:13px;color:var(--ink-strong)}.help-section{margin-top:12px}.help-section h3{margin:0 0 4px;font-size:9.5px;letter-spacing:.9px;font-weight:650;color:var(--ink-faint);text-transform:uppercase}.help-section ul{margin:0;padding-left:18px}.help-section li{margin-bottom:3px}.help-section dl{margin:0}.help-section dl>div{display:grid;grid-template-columns:120px minmax(0,1fr);gap:8px;padding:3px 0;border-top:1px solid var(--line)}.help-section dl>div:first-child{border-top:0}.help-section dt{font-weight:600;color:var(--ink-strong)}.help-section dd{margin:0}.tool,.menu button,.touch-btn{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.side{grid-area:side;display:flex;flex-direction:column;min-height:0;background:var(--panel);border-right:1px solid var(--line)}.panel{display:flex;flex-direction:column;min-height:0}.panel.grow{flex:1 1 50%}.panel+.panel{border-top:1px solid var(--line)}.panel-title{display:flex;align-items:center;justify-content:space-between;font-size:9.5px;letter-spacing:1px;font-weight:680;color:var(--ink-faint);text-transform:uppercase;padding:8px 10px 5px;flex:none}.panel-body{overflow:auto;padding:0 6px 8px;min-height:0;flex:1;scrollbar-width:thin}.panel-body.padded{padding:2px 10px 10px}.tree-row{display:flex;align-items:center;gap:4px;height:23px;padding-right:4px;border-radius:4px;cursor:default;user-select:none;white-space:nowrap}.tree-row:hover{background:var(--hover)}.tree-row.selected{background:var(--active)}.tree-row.active{box-shadow:inset 2px 0 0 var(--ok);background:var(--ok-soft)}.tree-row.dim{color:var(--ink-faint)}.tree-row.drop-target{box-shadow:inset 0 0 0 2px var(--accent);background:var(--accent-soft)}.tree-row[draggable=true]{cursor:grab}.tree-row.error .tree-name{color:var(--danger)}.tree-caret{width:14px;height:14px;display:grid;place-items:center;color:var(--ink-faint);flex:none}.tree-caret svg{width:10px;height:10px;transition:transform .12s}.tree-caret.open svg{transform:rotate(90deg)}.tree-icon{width:15px;height:15px;color:var(--ink-soft);flex:none}.tree-name{flex:1;overflow:hidden;text-overflow:ellipsis}.tree-name input{padding:1px 4px;height:19px}.tree-eye{width:20px;height:20px;padding:0;display:grid;place-items:center;color:var(--ink-soft);opacity:0}.tree-eye svg{width:14px;height:14px}.tree-row:hover .tree-eye,.tree-eye.off{opacity:1}.tree-eye.off{color:var(--ink-faint)}.tree-badge{font-size:9.5px;color:var(--ink-faint);padding-right:2px}.tree-badge.tree-active{color:var(--ok);font-weight:600;text-transform:uppercase;letter-spacing:.04em}.field{display:grid;grid-template-columns:84px minmax(0,1fr);align-items:center;gap:6px;min-height:26px}.field>label,.field>span.label{color:var(--ink-soft);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.field-hint{grid-column:2;font-size:10.5px;color:var(--ink-faint);margin-top:-2px}.field-error{grid-column:2;font-size:10.5px;color:var(--danger);margin-top:-2px}.form{display:flex;flex-direction:column;gap:5px}.form-section{font-size:9.5px;letter-spacing:.9px;font-weight:680;color:var(--ink-faint);text-transform:uppercase;margin:8px 0 1px}.form-actions{display:flex;justify-content:flex-end;gap:6px;margin-top:8px}.segmented{display:flex;border:1px solid var(--line);border-radius:4px;overflow:hidden;background:#fff}.segmented button{flex:1;border-radius:0;padding:4px 6px;font-size:11px;color:var(--ink-soft);border-right:1px solid var(--line)}.segmented button:last-child{border-right:0}.segmented button.on{background:var(--active);color:var(--accent-strong);font-weight:600}.pick-box{display:flex;align-items:center;justify-content:space-between;gap:6px;border:1px solid var(--line);border-radius:4px;padding:3px 7px;background:#fff;min-height:25px;cursor:pointer}.pick-box.on{border-color:var(--accent);background:var(--accent-soft);color:var(--accent-strong)}.pick-box .clear{width:16px;height:16px;padding:0;display:grid;place-items:center;color:var(--ink-faint)}.pick-list{list-style:none;margin:4px 0 0;padding:0;display:flex;flex-direction:column;gap:1px}.pick-list li{display:flex;align-items:center;gap:1px;padding-left:7px;border:1px solid var(--line);border-radius:4px;background:var(--panel-alt);min-height:23px}.pick-list-name{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pick-list .icon-btn{width:20px;height:20px;padding:0;display:grid;place-items:center;color:var(--ink-soft)}.pick-list .icon-btn:disabled{opacity:.3}.value-preview{font-family:var(--mono);font-size:10.5px;color:var(--ink-faint)}.empty{color:var(--ink-faint);padding:10px 4px;line-height:1.5}.kv{display:grid;grid-template-columns:92px minmax(0,1fr);gap:3px 6px}.text-dialog textarea{width:100%;min-height:46px;resize:vertical;font:inherit;font-size:13px;line-height:1.35;padding:5px 7px;border:1px solid var(--line-strong);border-radius:5px;background:#fff;color:var(--ink)}.text-dialog textarea:focus{outline:2px solid var(--accent-soft);border-color:var(--accent)}.text-dialog select{width:100%}.text-dialog .segmented{display:flex}.text-dialog .segmented button{flex:1}label.check{display:inline-flex;align-items:center;gap:6px;min-height:26px;cursor:pointer}.measure-group{margin:0 0 8px}.measure-group:last-child{margin-bottom:0}.measure-group h4{margin:0 0 3px;font-size:11px;font-weight:650;color:var(--ink-soft);display:flex;gap:5px;align-items:center}.measure-group h4 .n{width:15px;height:15px;border-radius:50%;background:var(--warm);color:#fff;font-size:9.5px;display:grid;place-items:center}.measure-row{display:grid;grid-template-columns:96px minmax(0,1fr) 22px;align-items:center;gap:4px;min-height:22px}.measure-row .name{color:var(--ink-soft)}.measure-row .value{font-family:var(--mono);font-size:11.5px;font-variant-numeric:tabular-nums;user-select:text}.measure-row.main .value{font-weight:650;color:var(--accent-strong)}.measure-row button{width:22px;height:20px;padding:0;display:grid;place-items:center;color:var(--ink-faint);background:none;border:0;border-radius:4px;cursor:pointer}.measure-row button:hover{background:var(--panel-alt);color:var(--ink)}.kv dt{color:var(--ink-soft)}.kv dd{margin:0;font-variant-numeric:tabular-nums;overflow:hidden;text-overflow:ellipsis}.badge{display:inline-flex;align-items:center;gap:4px;font-size:10px;font-weight:600;padding:1px 6px;border-radius:9px;background:#eef1f4;color:var(--ink-soft)}.badge.ok{background:var(--ok-soft);color:#1f7a50}.badge.warn{background:var(--warn-soft);color:var(--warn)}.badge.danger{background:var(--danger-soft);color:var(--danger)}.badge.info{background:var(--accent-soft);color:var(--accent-strong)}table.grid{width:100%;border-collapse:collapse}table.grid th{text-align:left;font-size:9.5px;letter-spacing:.8px;font-weight:680;color:var(--ink-faint);text-transform:uppercase;padding:5px 6px;border-bottom:1px solid var(--line);position:sticky;top:0;background:var(--panel)}table.grid td{padding:3px 6px;border-bottom:1px solid #eef1f4;vertical-align:middle}table.grid tr:hover td{background:var(--panel-alt)}table.grid tr.selected td{background:var(--active)}table.grid td input{padding:2px 5px}.main{grid-area:main;position:relative;min-width:0;min-height:0;background:#eef1f4;overflow:hidden}.viewport{position:absolute;inset:0}.viewport canvas{position:absolute;inset:0;width:100%;height:100%;display:block;touch-action:none}.viewport canvas.overlay{pointer-events:none}.viewport.tooling canvas.webgl{cursor:crosshair}.view-tools{position:absolute;right:10px;top:10px;z-index:5;display:flex;flex-direction:column;gap:6px;align-items:flex-end}.view-card{background:#ffffffeb;border:1px solid var(--line);border-radius:6px;padding:3px;box-shadow:0 1px 3px #1d2b3814;backdrop-filter:blur(6px)}.view-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:1px}.view-grid button,.view-row button{font-size:10px;padding:3px 6px;color:var(--ink-soft);min-width:38px}.view-grid button:hover,.view-row button:hover{color:var(--ink-strong)}.view-row{display:flex;gap:1px}.view-row button.on{background:var(--active);color:var(--accent-strong)}.floating{position:absolute;z-index:20;left:10px;top:10px;width:304px;background:#fff;border:1px solid var(--line-strong);border-radius:7px;box-shadow:0 10px 30px #1d2b3829}.floating-title{display:flex;align-items:center;justify-content:space-between;font-weight:680;font-size:11px;letter-spacing:.6px;text-transform:uppercase;padding:8px 10px;border-bottom:1px solid var(--line);background:var(--panel-alt);border-radius:7px 7px 0 0}.floating-body{padding:9px 10px 10px}.floating-window{position:fixed;z-index:60;max-height:calc(100dvh - 12px);overflow:auto;box-sizing:border-box}.floating-window .floating-title{cursor:move;touch-action:none;user-select:none;-webkit-user-select:none;gap:6px;position:sticky;top:0;z-index:1}.floating-name{margin-right:auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.floating-grip{flex:none;width:8px;height:12px;background:radial-gradient(circle,var(--ink-faint) 1px,transparent 1.4px) 0 0 / 4px 4px;opacity:.8}.tool-window{width:236px}.floating.transform-window{width:284px}.transform-window .tool-field{grid-template-columns:88px minmax(0,1fr)}.pick-row{display:flex;align-items:center;gap:4px;min-width:0}.pickbox{flex:1;min-width:0;text-align:left;font:inherit;font-size:11.5px;padding:4px 8px;border:1px solid var(--line-strong);border-radius:5px;background:#fff;color:var(--ink-soft);cursor:pointer;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pickbox.set{color:var(--ink)}.pickbox.picking{border-color:var(--accent);background:var(--accent-soft, #e7f0f8);color:var(--accent-strong);box-shadow:0 0 0 2px #3d7fb82e}.pick-clear{border:0;background:none;color:var(--ink-faint);cursor:pointer;font-size:14px;padding:0 4px}.pick-clear:hover{color:var(--ink)}.floating.share-link{width:min(460px,calc(100vw - 16px))}.share-link-text{width:100%;height:76px;resize:vertical;font:11px/1.4 var(--mono);overflow-wrap:anywhere;user-select:text}.share-link-problem{margin:0 0 8px;color:var(--danger, #b3261e)}.share-link-notes{margin:8px 0 0;padding-left:18px;font-size:12px;color:var(--ink-soft);line-height:1.5}.floating.recovery{width:min(400px,calc(100vw - 16px))}.recovery-list{list-style:none;margin:0;padding:0;max-height:50vh;overflow-y:auto}.recovery-list li{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:6px 0;border-bottom:1px solid var(--line);font-size:12px}.floating.history-log{width:min(560px,calc(100vw - 16px))}.history-log-text{margin:0;max-height:min(52vh,460px);overflow:auto;font:11.5px/1.5 var(--mono);white-space:pre-wrap;overflow-wrap:anywhere;background:var(--panel-alt);border:1px solid var(--line);border-radius:5px;padding:8px 10px;user-select:text}.tool-field{grid-template-columns:70px minmax(0,1fr)}.tool-field.check{display:flex;gap:6px;color:var(--ink)}.tool-input{display:flex;align-items:center;gap:4px}.tool-input input{width:100%;min-width:0}.tool-input input[aria-invalid=true]{border-color:var(--danger)}.tool-input .unit{color:var(--ink-faint);font-size:11px}.sketch-banner{position:absolute;z-index:6;left:50%;top:10px;transform:translate(-50%);display:flex;align-items:center;gap:9px;background:#fffffff0;border:1px solid var(--line);border-radius:16px;padding:4px 6px 4px 12px;box-shadow:0 1px 3px #1d2b381a;white-space:nowrap}.render-notice{position:absolute;z-index:5;left:10px;bottom:10px;background:#fffffff0;border:1px solid var(--line);border-radius:12px;padding:3px 10px;font-size:11px;color:var(--ink-soft);cursor:pointer}.inline-editor{position:absolute;z-index:30;transform:translate(-50%,-50%);display:flex;gap:3px;background:#fff;border:1px solid var(--accent);border-radius:5px;padding:3px;box-shadow:0 6px 18px #1d2b3833}.inline-editor input{width:120px;border-color:transparent;font-family:var(--mono);font-size:11.5px}.inline-editor input:focus{box-shadow:none}.overlay-note{position:absolute;inset:0;z-index:8;display:grid;place-items:center;pointer-events:none}.overlay-card{background:#fffffff2;border:1px solid var(--line);border-radius:8px;padding:16px 20px;max-width:380px;text-align:center;line-height:1.55;pointer-events:auto;box-shadow:0 6px 20px #1d2b381a}.overlay-card h3{margin:0 0 4px;font-size:13px}.overlay-card p{margin:0 0 10px;color:var(--ink-soft)}.spinner{width:18px;height:18px;border-radius:50%;border:2px solid var(--line-strong);border-top-color:var(--accent);animation:spin .8s linear infinite;margin:0 auto 8px}@keyframes spin{to{transform:rotate(360deg)}}.spinner.small{width:11px;height:11px;border-width:2px;margin:0;display:inline-block;flex:none}.point-entry{position:absolute;z-index:9;left:50%;bottom:44px;transform:translate(-50%);display:flex;flex-direction:column;align-items:center;gap:3px;background:#fff;border:1px solid var(--line-strong);border-radius:8px;padding:7px 10px;box-shadow:0 6px 20px #1d2b3824}.point-entry label{display:flex;align-items:center;gap:8px;font-size:11px;font-weight:650;color:var(--ink-soft)}.point-entry input{width:220px;font-family:var(--mono);font-size:12.5px}.point-entry input[aria-invalid=true]{border-color:var(--danger)}.point-entry-hint{font-size:10.5px;color:var(--ink-faint)}.point-entry-hint.error{color:var(--danger)}.palette-backdrop{position:fixed;inset:0;z-index:88;background:#1d2b381f}.command-palette{position:fixed;z-index:90;width:460px;display:flex;flex-direction:column;background:#fff;border:1px solid var(--line-strong);border-radius:9px;box-shadow:0 16px 40px #1d2b3838;overflow:hidden;box-sizing:border-box}.palette-input{margin:8px;width:calc(100% - 16px);box-sizing:border-box;font-size:14px;padding:8px 10px}.palette-list{list-style:none;margin:0;padding:0 6px 6px;overflow:auto;min-height:0;flex:1}.palette-list li{display:grid;grid-template-columns:minmax(0,1fr) auto auto;column-gap:8px;align-items:baseline;padding:6px 8px;border-radius:6px;cursor:pointer}.palette-list li.on{background:var(--active)}.palette-name{font-weight:600;color:var(--ink-strong);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.palette-list kbd{font:10.5px var(--mono);color:var(--ink-soft);border:1px solid var(--line);border-radius:4px;padding:0 4px}.palette-group{font-size:10.5px;color:var(--ink-faint);white-space:nowrap}.palette-detail{grid-column:1 / -1;font-size:11px;color:var(--ink-soft);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.palette-empty{color:var(--ink-faint);cursor:default!important}.computing-badge{position:absolute;z-index:7;left:50%;bottom:12px;transform:translate(-50%);display:flex;align-items:center;gap:7px;pointer-events:none;background:#fffffff0;border:1px solid var(--line);border-radius:14px;padding:4px 11px;font-size:11px;color:var(--ink-soft);box-shadow:0 1px 3px #1d2b381a}.timeline{grid-area:timeline;display:flex;align-items:center;gap:8px;background:var(--panel);border-top:1px solid var(--line);padding:0 10px;min-width:0;overflow:hidden}.timeline-controls{display:flex;gap:1px;flex:none}.timeline-track{display:flex;align-items:center;gap:3px;overflow-x:auto;overflow-y:hidden;flex:1;height:100%;scrollbar-width:thin;padding:0 2px}.timeline-item{position:relative;flex:none;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;width:50px;height:44px;padding:2px;border:1px solid var(--line);border-radius:5px;background:#fff;color:var(--ink-soft);font-size:9px;line-height:1.1}.timeline-item svg{width:18px;height:18px}.timeline-item span{max-width:46px;overflow:hidden;text-overflow:ellipsis}.timeline-item:hover{border-color:var(--line-strong);background:var(--panel-alt);color:var(--ink-strong)}.timeline-item.selected{border-color:var(--accent);background:var(--accent-soft);color:var(--accent-strong)}.timeline-item.error{border-color:var(--danger);color:var(--danger);background:var(--danger-soft)}.timeline-item.suppressed,.timeline-item.rolled-back{opacity:.45;border-style:dashed}.timeline-item.other-component{opacity:.55}.timeline-item.dragging{opacity:.4}.timeline-item.drop-before{box-shadow:-3px 0 0 var(--accent)}.timeline-item.drop-after{box-shadow:3px 0 0 var(--accent)}.timeline-item.drop-refused.drop-before{box-shadow:-3px 0 0 var(--danger)}.timeline-item.drop-refused.drop-after{box-shadow:3px 0 0 var(--danger)}.timeline-item.editing{border-color:var(--ok);background:var(--ok-soft);color:#1f7a50}.timeline-marker{flex:none;width:5px;height:46px;border-radius:3px;background:var(--warm);cursor:ew-resize}.timeline-empty{color:var(--ink-faint)}.status{grid-area:status;display:flex;align-items:center;gap:14px;padding:0 10px;font-size:10.5px;color:var(--ink-soft);background:var(--brand);color:#c9d4de}.status strong{color:#fff;font-weight:600}.status .spacer{flex:1}.status .mono{font-family:var(--mono);font-variant-numeric:tabular-nums}.status .state-ok{color:#8ee0b5}.status .state-warn{color:#f3c579}.status .state-danger{color:#ff9d94}.toasts{position:fixed;z-index:100;left:50%;bottom:96px;transform:translate(-50%);display:flex;flex-direction:column;gap:6px;align-items:center;pointer-events:none}.toast{background:var(--ink-strong);color:#fff;padding:7px 13px;border-radius:6px;box-shadow:0 6px 20px #1d2b3840;max-width:520px;line-height:1.4}.toast.warning{background:#8a5a10}.toast.error{background:#a83229}.toast.with-actions{pointer-events:auto}.toast-actions{display:flex;flex-wrap:wrap;gap:6px;margin-top:7px;align-items:center}.toast-action{background:#ffffff29;color:#fff;border:1px solid rgba(255,255,255,.35);border-radius:4px;padding:3px 9px;font:inherit;font-size:12px;cursor:pointer}.toast-action:hover{background:#ffffff47}.toast-close{margin-left:auto;background:none;border:0;color:#fff;opacity:.75;cursor:pointer;padding:3px;display:inline-flex}.toast-close:hover{opacity:1}.timeline-item.flash{animation:timeline-flash .5s ease-in-out 3}@keyframes timeline-flash{50%{box-shadow:0 0 0 3px #e0a020}}.export-model .export-group{border-top:1px solid var(--line);padding:6px 0}.export-model .export-group:first-of-type{border-top:0}.export-model .export-row{display:flex;align-items:center;gap:7px;min-height:26px}.export-model .export-row.body{padding-left:22px}.export-model .export-label{display:flex;align-items:center;gap:7px;flex:1;min-width:0;cursor:pointer}.export-model .export-row.body{cursor:pointer}.export-model .export-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.export-model .export-name.dim{color:var(--ink-faint)}.export-model .export-row.group .export-name{font-weight:600}.export-model .export-refused{display:inline-flex;align-items:center;gap:3px;margin-left:auto;color:var(--danger);font-size:11.5px;white-space:nowrap}.export-model .export-problems{margin-top:8px;padding:8px 10px;border-radius:6px;background:var(--danger-soft);color:var(--danger);font-size:12px;line-height:1.45}.export-model .export-problems p{margin:0 0 4px}.export-model .export-problems .field-hint{color:var(--ink-soft);margin:4px 0 0}.export-model select{font:inherit;font-size:12px;flex:none;width:auto;max-width:55%}.modal-backdrop{position:fixed;inset:0;z-index:80;background:#1d2b3852;display:grid;place-items:center}.modal{background:#fff;border-radius:8px;border:1px solid var(--line-strong);box-shadow:0 20px 60px #1d2b384d;width:min(720px,calc(100vw - 40px));max-height:calc(100vh - 80px);display:flex;flex-direction:column}.modal-title{display:flex;align-items:center;justify-content:space-between;padding:11px 14px;border-bottom:1px solid var(--line);font-weight:680;font-size:13px}.modal-body{padding:12px 14px;overflow:auto}.dxf-layers{width:100%;border-collapse:collapse;font-size:12px}.dxf-layers th{text-align:left;font-weight:600;color:var(--ink-soft);padding:3px 6px;border-bottom:1px solid var(--line)}.dxf-layers td{padding:3px 6px;border-bottom:1px solid var(--line)}.modal-footer{display:flex;justify-content:flex-end;gap:6px;padding:10px 14px;border-top:1px solid var(--line);background:var(--panel-alt);border-radius:0 0 8px 8px}.fab-tabs{position:absolute;z-index:6;left:50%;top:10px;transform:translate(-50%)}.fab-view{position:absolute;inset:0;overflow:auto;background:#eef1f4}.fab-view.padded{padding:56px 18px 18px}.warning-list{display:flex;flex-direction:column;gap:4px}.warning-item{display:flex;gap:6px;align-items:flex-start;padding:5px 7px;border-radius:4px;background:var(--warn-soft);color:#7a4f0c;line-height:1.4;cursor:default}.warning-item.error{background:var(--danger-soft);color:#8f2a22}.warning-item.info{background:var(--accent-soft);color:var(--accent-strong)}.warning-item svg{width:14px;height:14px;flex:none;margin-top:1px}.part-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:10px}.part-card{background:#fff;border:1px solid var(--line);border-radius:6px;overflow:hidden}.part-card.selected{border-color:var(--accent);box-shadow:0 0 0 2px #3f85b72e}.part-card header{display:flex;align-items:center;justify-content:space-between;padding:6px 9px;border-bottom:1px solid var(--line);font-weight:650;background:var(--panel-alt);height:auto;gap:6px}.part-card .thumb{height:150px;display:grid;place-items:center;padding:8px;background:#fff}.part-card .thumb svg{max-width:100%;max-height:100%}.part-card .meta{padding:7px 9px 9px;border-top:1px solid var(--line)}.sheet-wrap{display:flex;flex-direction:column;gap:16px;align-items:center}.sheet-frame{background:#fff;border:1px solid var(--line-strong);box-shadow:0 2px 10px #1d2b3814}.sheet-caption{font-size:10.5px;color:var(--ink-soft);margin-bottom:4px}.legend{display:flex;gap:12px;align-items:center;font-size:10.5px;color:var(--ink-soft)}.legend i{display:inline-block;width:18px;height:0;border-top:2px solid;margin-right:4px;vertical-align:middle}.print-view{position:absolute;inset:0;background:#eef1f4}.print-view canvas{position:absolute;inset:0;width:100%;height:100%;display:block;touch-action:none}.print-legend{position:absolute;left:12px;top:12px;z-index:5;display:flex;flex-direction:column;gap:6px;background:#ffffffeb;border:1px solid var(--line);border-radius:6px;padding:7px 10px}.print-bed-size{font-size:10.5px;color:var(--ink-soft)}.print-ok{position:absolute;left:12px;bottom:12px;z-index:5;padding:3px 9px}.print-body{padding:4px 6px;margin:0 -6px 4px;border-radius:5px;cursor:default}.print-body.selected{background:var(--accent-soft)}.print-component{display:flex;align-items:center;gap:6px;margin:8px 0 4px;font-weight:600}.print-component-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.print-component select{font:inherit;font-weight:400;font-size:12px;width:auto;flex:none}::-webkit-scrollbar{width:9px;height:9px}::-webkit-scrollbar-thumb{background:#cfd6dc;border-radius:5px;border:2px solid transparent;background-clip:padding-box}::-webkit-scrollbar-thumb:hover{background:#b4bec7;background-clip:padding-box;border:2px solid transparent}.unit-field{position:relative}.unit-field.has-unit input{padding-right:34px}.unit-field .unit{position:absolute;right:8px;top:50%;transform:translateY(-50%);font-size:10.5px;color:var(--ink-faint);pointer-events:none}.unit-field.has-keys input{padding-right:78px}.unit-field.has-keys .unit{right:50px}.keys-toggle{position:absolute;right:3px;top:50%;transform:translateY(-50%);height:calc(100% - 6px);min-width:40px;padding:0 6px;font-size:11px;font-weight:650;color:var(--accent-strong);background:var(--accent-soft);border-radius:4px}.inline-editor .keys-toggle{position:static;transform:none;height:auto;align-self:stretch}.inline-editor .unit{align-self:center;padding:0 6px 0 2px;font-size:10.5px;color:var(--ink-faint)}.side-backdrop,.side-grip,.touch-bar,.options-toggle{display:none}.touch-bar{position:absolute;z-index:7;left:8px;right:8px;bottom:8px;gap:6px;flex-wrap:wrap;pointer-events:none}.touch-btn{pointer-events:auto;display:inline-flex;align-items:center;gap:5px;height:38px;padding:0 12px;border-radius:19px;background:#fffffff5;border:1px solid var(--line-strong);box-shadow:0 2px 8px #1d2b3824;font-weight:600;color:var(--ink)}.touch-btn.on{background:var(--active);color:var(--accent-strong)}.touch-btn.primary{background:var(--ok);border-color:var(--ok);color:#fff}.touch-btn.danger{color:var(--danger)}.touch-status{display:none;gap:6px}@media(pointer:coarse){.touch-bar{display:flex}.computing-badge{bottom:auto;top:50px}.tool{min-width:42px;height:42px}.tree-row{height:32px}.tree-eye{opacity:1;width:30px;height:30px}.icon-btn{width:34px;height:34px}.timeline-controls .icon-btn{width:30px}input,select,textarea{font-size:16px}.view-grid button,.view-row button{padding:7px 8px;min-width:44px;font-size:11px}}@media(max-width:860px){:root{--header-h: 46px;--ribbon-h: 64px;--timeline-h: 52px;--status-h: 0px}html,body,#root{height:100dvh}body{touch-action:manipulation;-webkit-text-size-adjust:100%}.app,.app.no-timeline{grid-template-columns:minmax(0,1fr);grid-template-areas:"header" "ribbon" "main" "timeline" "status";padding-bottom:env(safe-area-inset-bottom)}.status{display:none}.touch-bar{display:flex}.touch-status{display:contents}.header{gap:6px;padding:0 8px}.brand{font-size:0;gap:0}.brand-tag,.doc-name,.header-sep,.header>.btn{display:none}.workspace-tabs button{padding:6px 9px;font-size:10px;letter-spacing:.4px}.header .menu-wrap>.btn{padding:6px 8px}.commands-btn span{display:none}.ribbon{padding:0 2px;-webkit-overflow-scrolling:touch}.ribbon-group{padding:5px 5px 3px}.tool.wide span{display:none}.tool.wide.finish span{display:inline}.menu.popover{min-width:200px}.menu button{padding:10px}.help-overlay{width:calc(100vw - 16px)}.help-section dl>div{grid-template-columns:96px minmax(0,1fr)}.side{position:fixed;z-index:70;left:0;right:0;bottom:0;height:min(66dvh,560px);border-right:0;border-top:1px solid var(--line-strong);border-radius:14px 14px 0 0;box-shadow:0 -10px 40px #1d2b3838;transform:translateY(105%);transition:transform .22s ease;padding-bottom:env(safe-area-inset-bottom)}.side.open{transform:none}.side-grip{display:block;flex:none;width:100%;height:22px;padding:0;border-radius:14px 14px 0 0;background:transparent}.side-grip:after{content:"";display:block;width:40px;height:4px;border-radius:2px;background:var(--line-strong);margin:0 auto}.side-backdrop{display:block;position:fixed;inset:0;z-index:65;background:#1d2b3847}.floating{width:min(304px,calc(100vw - 16px));max-height:52dvh;overflow:auto}.floating.tool-window{width:min(236px,calc(100vw - 16px))}.floating:not(.expanded) .field.secondary{display:none}.floating .options-toggle{display:inline-flex;margin-left:auto;margin-right:4px}.floating-title{padding:5px 8px}.floating-body{padding:7px 8px 8px}.floating .form-actions{margin-top:5px}.view-tools{right:6px;top:auto;bottom:54px;gap:4px;flex-direction:row;align-items:center}.view-grid{display:none}.view-card{padding:2px}.view-row{margin-top:0!important}.view-grid button,.view-row button{min-width:0;padding:7px}.header .menu-wrap>.btn.primary{font-size:0;gap:0!important;padding:7px 9px}.touch-bar{right:170px}.sketch-banner{top:6px;left:6px;transform:none;max-width:calc(100% - 12px);padding:3px 5px 3px 9px;gap:6px;overflow:hidden}.sketch-banner .btn{display:none}.fab-tabs{top:6px}.print-legend{left:6px;top:6px;padding:5px 8px}.print-ok{bottom:56px;left:8px}.fab-view.padded{padding:50px 10px 60px}.part-cards{grid-template-columns:minmax(0,1fr)}.toasts{bottom:110px;left:12px;right:12px;transform:none}.modal{width:calc(100vw - 16px);max-height:calc(100dvh - 24px)}.modal-body{padding:10px;overflow-x:auto}table.grid{min-width:560px}.timeline{padding:0 6px;gap:4px}.timeline-controls button:nth-child(2),.timeline-controls button:nth-child(3){display:none}}
