/* CAM workspace: compact operation browser, independent viewport, contextual settings. */
body#cam-workbench.cam-workbench.nc-practice .suite-shell{overflow:hidden}
.cam-commandbar{min-height:56px;height:56px;display:flex;align-items:center;gap:8px;padding:8px 12px;border-bottom:1px solid var(--line);background:var(--surface);overflow-x:auto;overflow-y:hidden;scrollbar-width:thin}
.cam-commandbar button{display:inline-flex;align-items:center;justify-content:center;gap:7px;flex:none}
.cam-command-group{display:flex;gap:4px;border-left:1px solid var(--line);padding-left:8px}
#cam-scene .cam-icon,.cam-icon{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round;flex:none}
#cam-name{min-width:0;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px;color:var(--muted)}
.suite-section-head #cam-generate{display:flex;align-items:center;gap:4px;flex:none;padding:5px 7px;font-size:12px}.suite-section-head #cam-generate .cam-icon{width:15px;height:15px}
.cam-stock-profile{display:flex;align-items:center;gap:18px;margin:8px 0;color:var(--muted);font-size:12px}.cam-stock-profile svg{width:160px;height:84px;fill:none;stroke:var(--muted);stroke-width:1.2}.cam-stock-profile .part{fill:#96a5b444;stroke:#7890a8}.cam-stock-profile .offset{stroke:var(--blue)}.cam-stock-profile strong{display:block;margin-top:6px;color:var(--ink);font:12px Consolas,monospace;white-space:nowrap}
.cam-stock-offsets,.cam-stock-bounds{width:100%;table-layout:fixed;border-collapse:collapse;margin:12px 0;font:12px Consolas,Pretendard,monospace;text-align:right}.cam-stock-offsets caption{text-align:left;margin-bottom:10px;color:var(--muted)}.cam-stock-offsets th,.cam-stock-bounds th{font-weight:500;color:var(--muted)}.cam-stock-offsets td,.cam-stock-offsets th,.cam-stock-bounds td,.cam-stock-bounds th{padding:6px;border-bottom:1px solid var(--line)}#cam-settings table.cam-stock-offsets input[type=number]{width:100%;min-width:0;text-align:right}.cam-stock-offsets td{width:42%}.cam-stock-offsets th:first-child{width:16%}.cam-stock-bounds th:first-child{text-align:left}#cam-stock-calculation{display:inline-block;margin-left:12px;font:12px Consolas,monospace}
body#cam-workbench.cam-workbench.nc-practice .suite-body{display:grid;grid-template-columns:246px minmax(0,1fr);height:calc(100dvh - var(--cam-shell-offset,200px));min-height:340px;position:relative}
body#cam-workbench.cam-workbench.nc-practice .suite-editor{background:var(--surface);color:var(--ink);overflow:auto}
body#cam-workbench.cam-workbench.nc-practice .suite-section-head{height:42px;background:var(--surface);color:var(--ink);padding:6px 12px;border-color:var(--line)}
.cam-job-head{display:grid;gap:4px;padding:12px 14px;border-bottom:1px solid var(--line);font-size:12px;color:var(--muted)}
#cam-stock{font:12px Consolas,monospace;color:var(--ink)}
.cam-operation{display:flex;align-items:center;gap:3px;padding:4px 7px;border-bottom:1px solid var(--line)}
.cam-operation>input{margin:0 3px;width:15px;height:15px;accent-color:var(--blue)}
body#cam-workbench.cam-workbench.nc-practice .cam-operation>button{border:0;background:transparent;display:flex;gap:9px;align-items:flex-start;text-align:left;flex:1;min-width:0;padding:10px 6px;border-radius:3px}
.cam-operation>button[aria-current=true]{background:light-dark(#e5eef9,#2c405a)}
.cam-operation button>span{display:grid;gap:4px;min-width:0}
.cam-operation strong{font-size:12px;font-weight:600}.cam-operation small{font-size:12px;color:var(--muted)}
.cam-operation output{font:12px/1.5 Consolas,monospace;color:var(--muted);white-space:normal}
.cam-operation output:empty{display:none}
body#cam-workbench.cam-workbench.nc-practice .suite-main{display:flex;min-height:0;flex-direction:column}
body#cam-workbench.cam-workbench.nc-practice #cam-scene{height:auto;flex:1;min-height:180px;background:var(--nc-canvas);touch-action:none}
#cam-empty{position:absolute;inset:0;display:grid;place-items:center;color:var(--muted);pointer-events:none}
.cam-axis-label{position:absolute;left:12px;bottom:10px;font:12px Consolas,monospace;color:var(--muted)}
body#cam-workbench.cam-workbench.nc-practice .suite-transport{flex:none;flex-wrap:nowrap;padding:7px 12px;gap:6px;min-height:51px}
body#cam-workbench.cam-workbench.nc-practice .suite-transport button{flex:none}
#cam-play{min-width:88px;background:#315f98;color:white;border-color:#5284c3}
#cam-scrub{min-width:50px}#cam-line{font:12px Consolas,monospace;min-width:50px}
body#cam-workbench.cam-workbench.nc-practice .preview-speed{gap:5px;font-size:12px}body#cam-workbench.cam-workbench.nc-practice .preview-speed input{width:65px!important;min-width:50px!important}
body#cam-workbench.cam-workbench.nc-practice .suite-readout{font:12px/1.5 Consolas,monospace;padding:7px 12px;gap:6px 18px;min-height:31px;flex:none}
.cam-statusbar{display:flex;gap:12px;align-items:center;min-height:32px;border-top:1px solid var(--line);padding:6px 12px;font:12px/1.5 Consolas,Pretendard,monospace;color:var(--muted)}
#cam-status{margin-right:auto;color:var(--ink)}
.cam-help{position:relative}.cam-help summary{cursor:pointer}.cam-help>div{position:absolute;right:0;bottom:26px;z-index:8;width:310px;max-width:calc(100vw - 24px);padding:14px;background:var(--surface);border:1px solid var(--line);border-radius:5px;box-shadow:0 4px 20px #14233c20;font:12px/1.7 Pretendard,sans-serif}
.cam-help a{color:var(--blue)}
body#cam-workbench.cam-workbench.nc-practice dialog{width:min(430px,calc(100vw - 24px));max-height:calc(100dvh - 24px);padding:0;border:1px solid var(--line);border-radius:7px;background:var(--surface);color:var(--ink);box-shadow:0 16px 60px #13233c50;font-size:13px}
body#cam-workbench.cam-workbench.nc-practice dialog::backdrop{background:#111c2e55}
body#cam-workbench.cam-workbench.nc-practice dialog header{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;border-bottom:1px solid var(--line)}
body#cam-workbench.cam-workbench.nc-practice dialog header button{display:flex;border:0;background:transparent;color:var(--muted);padding:4px}
body#cam-workbench.cam-workbench.nc-practice dialog button{min-height:36px;padding:7px 14px;border:1px solid var(--line);border-radius:4px;background:var(--surface);color:var(--ink);font:inherit}
body#cam-workbench.cam-workbench.nc-practice dialog .primary{background:#315f98;border-color:#5284c3;color:white}
#cam-settings-form{display:flex;flex-direction:column;max-height:calc(100dvh - 26px)}
.cam-dialog-content{padding:4px 20px 14px;overflow:auto}
#cam-settings label{display:flex;justify-content:space-between;align-items:center;gap:12px;margin:18px 0}
#cam-settings :is(select,input[type=number]){min-height:36px;width:150px;padding:7px;border:1px solid var(--line);border-radius:3px;background:var(--surface);color:var(--ink);font:inherit}
#cam-settings input[type=color]{width:40px;height:30px;border:0;background:transparent}
#cam-settings footer{display:flex;justify-content:flex-end;gap:6px;padding:12px 16px;border-top:1px solid var(--line)}
.cam-values{margin:14px 0}.cam-values>div{display:flex;justify-content:space-between;gap:12px;align-items:center;padding:9px 0;border-bottom:1px solid var(--line)}.cam-values dt{color:var(--muted);font-size:12px}.cam-values dd{margin:0;font:12px Consolas,Pretendard,monospace}
.cam-process-tabs{display:flex;gap:18px;border-bottom:1px solid var(--line);margin-top:8px}
body#cam-workbench.cam-workbench.nc-practice .cam-process-tabs button{border:0;border-radius:0;background:transparent;padding:9px 3px;border-bottom:2px solid transparent;color:var(--muted)}
body#cam-workbench.cam-workbench.nc-practice .cam-process-tabs button[aria-selected=true]{color:var(--blue);border-bottom-color:var(--blue)}
.cam-cutter-illustration{display:flex;align-items:center;justify-content:center;gap:30px;padding:14px;border-bottom:1px solid var(--line)}
.cam-cutter-illustration svg{height:130px;width:65px}.cam-cutter-illustration strong{font-weight:500}
.cam-cutter-illustration .holder{fill:#526273;stroke:#8797a8}.cam-cutter-illustration .shank{fill:#9cabb9;stroke:#526273}.cam-cutter-illustration .flute{fill:#bca268;stroke:#89754d}.cam-cutter-illustration .cutter-lines{fill:none;stroke:#705e3b;stroke-width:2}
.cam-tool-variants{display:grid;grid-template-columns:1fr 1fr;gap:8px}.cam-tool-variants label{justify-content:flex-start!important;gap:6px!important;padding:9px 6px;border:1px solid var(--line);border-radius:4px;font-size:12px}.cam-tool-variants label:has(:checked){border-color:var(--blue);color:var(--blue)}
.cam-origin-diagram{padding:20px;text-align:center;color:var(--blue);font:15px/1.5 Consolas,monospace}
#cam-settings-error{display:block;color:#bd5648;font-size:12px}
#cam-code-dialog{width:min(720px,calc(100vw - 24px))}#cam-code{display:block;width:100%;height:min(540px,70dvh);resize:none;padding:16px;background:#192330;color:#dce6f4;border:0;outline:0;font:12px/1.7 Consolas,monospace}
#cam-browser-toggle,#cam-browser-close{display:none}
@media(max-width:800px){body#cam-workbench.cam-workbench.nc-practice .suite-body{display:block}body#cam-workbench.cam-workbench.nc-practice .suite-main{height:100%}body#cam-workbench.cam-workbench.nc-practice #cam-browser{display:none;position:absolute;top:0;bottom:0;left:0;width:246px;z-index:7;box-shadow:10px 0 30px #14233c30}body#cam-workbench.cam-workbench.nc-practice #cam-browser.cam-browser-open{display:block}#cam-browser-toggle,#cam-browser-close{display:inline-flex}.cam-commandbar{gap:5px;padding:6px}.cam-commandbar button{padding:7px!important}.cam-command-group{padding-left:5px}body#cam-workbench.cam-workbench.nc-practice .suite-transport{flex-wrap:wrap;padding:6px 8px}body#cam-workbench.cam-workbench.nc-practice .preview-speed{margin-left:auto}body#cam-workbench.cam-workbench.nc-practice .suite-readout{font-size:12px;padding:6px 8px;gap:4px 12px}body#cam-workbench.cam-workbench.nc-practice .suite-readout #cam-count{margin-left:auto}.cam-statusbar{padding:5px 8px}#cam-scrub{flex:1;min-width:90px}body#cam-workbench.cam-workbench.nc-practice .suite-body{min-height:400px}}
@media(max-width:430px){.cam-commandbar button{font-size:12px!important;min-height:40px!important}.cam-commandbar .cam-icon{width:17px}body#cam-workbench.cam-workbench.nc-practice .suite-transport button{min-height:40px}body#cam-workbench.cam-workbench.nc-practice .preview-speed{width:100%;justify-content:flex-end}body#cam-workbench.cam-workbench.nc-practice .preview-speed input{flex:0 1 90px!important;width:90px!important}body#cam-workbench.cam-workbench.nc-practice .suite-body{min-height:360px}}

/* Generate from the commandbar; open the process list only for selection/editing. */
body#cam-workbench.cam-workbench.nc-practice .suite-body{display:block;position:relative;min-height:360px}
body#cam-workbench.cam-workbench.nc-practice .suite-main{height:100%;min-height:0}
body#cam-workbench.cam-workbench.nc-practice #cam-browser{display:none;position:absolute;top:48px;bottom:0;left:0;z-index:40;width:min(320px,calc(100vw - 24px));max-height:calc(100% - 48px);border:1px solid var(--line);box-shadow:10px 8px 28px #0a152b30;background:var(--surface)}
body#cam-workbench.cam-workbench.nc-practice #cam-browser.cam-browser-open{display:block}
#cam-browser-toggle,#cam-browser-close{display:inline-flex;min-height:44px}
.cam-commandbar #cam-generate{min-height:44px}
body#cam-workbench .cam-operation button{min-height:48px}
body#cam-workbench #cam-settings :is(select,input[type=number]){min-height:44px}
body#cam-workbench #cam-settings .cam-values input[type=number]{width:134px;text-align:right}
body#cam-workbench.nc-practice dialog button{min-height:44px}
@media(max-width:800px){body#cam-workbench.cam-workbench.nc-practice #cam-browser{top:46px;max-height:calc(100% - 46px)}}
