html,body{overflow:hidden}
.cad-wrap{display:grid;grid-template-columns:auto 1fr 270px;grid-template-rows:52px 1fr 32px;height:100vh}

/* ribbon header */
.cad-head{grid-column:1/4;display:flex;align-items:center;gap:14px;padding:0 16px;
  background:linear-gradient(180deg,var(--panel),var(--bg2));border-bottom:1px solid var(--line);z-index:10}
.cad-head .logo{font-size:15px}
.cad-head .dwg{font-size:13px;color:var(--ink2);padding:4px 10px;border:1px solid var(--line);
  border-radius:7px;background:var(--bg2)}
.grp{display:flex;align-items:center;gap:4px;padding:0 10px;border-left:1px solid var(--line);height:30px}
.grp:first-of-type{border-left:0}
.hbtn{display:inline-flex;align-items:center;gap:6px;height:32px;padding:0 11px;border-radius:8px;
  background:transparent;border:1px solid transparent;color:var(--ink2);cursor:pointer;font-size:12.5px;
  font-weight:600;font-family:inherit;transition:.12s}
.hbtn:hover{background:var(--panel3);border-color:var(--line2);color:var(--ink)}
.hbtn.primary{background:linear-gradient(180deg,var(--accent),var(--accent-d));color:#fff;
  box-shadow:0 4px 12px -5px var(--accent-glow)}
.hbtn svg{width:15px;height:15px}

/* tool rail（画面が低いと2〜3列に自動折返し ③）*/
.cad-tools{grid-row:2;grid-column:1;background:linear-gradient(180deg,var(--panel),var(--bg2));
  border-right:1px solid var(--line);display:flex;flex-direction:column;flex-wrap:wrap;align-content:flex-start;
  align-items:center;gap:3px;padding:8px 6px;max-height:calc(100vh - 52px - 32px);overflow:hidden}
.tool{width:44px;height:44px;border-radius:11px;border:1px solid transparent;background:transparent;
  color:var(--ink2);display:flex;align-items:center;justify-content:center;cursor:pointer;
  position:relative;transition:.12s}
.tool svg{width:20px;height:20px}
.tool:hover{background:var(--panel3);color:var(--ink)}
.tool.active{background:linear-gradient(180deg,var(--accent),var(--accent-d));color:#fff;
  box-shadow:0 4px 14px -4px var(--accent-glow),0 1px 0 rgba(255,255,255,.2) inset}
.tool .kbd{position:absolute;bottom:3px;right:4px;font-size:8px;font-family:var(--mono);opacity:.55}
.tool:hover .tip{opacity:1;transform:translateX(0)}
.tool .tip{position:absolute;left:52px;top:50%;transform:translate(-6px,-50%);white-space:nowrap;
  background:var(--panel3);border:1px solid var(--line2);color:var(--ink);padding:5px 10px;border-radius:8px;
  font-size:12px;font-weight:500;pointer-events:none;opacity:0;transition:.14s;z-index:60;box-shadow:var(--shadow-sm)}
.tool .tip b{color:var(--cyan);font-family:var(--mono)}
.t-divider{width:28px;height:1px;background:var(--line);margin:5px 0}

/* 右上クイックバー（戻る/やり直し/ズーム/レイヤ）② */
.qbar{position:absolute;top:10px;left:12px;display:flex;align-items:center;gap:4px;z-index:30;
  background:#0d121aee;border:1px solid var(--line2);border-radius:10px;padding:4px 6px;box-shadow:var(--shadow-sm)}
.qbar button{width:30px;height:30px;border-radius:7px;border:0;background:transparent;color:var(--ink2);cursor:pointer;display:grid;place-items:center}
.qbar button:hover{background:var(--panel3);color:var(--ink)}
.qbar svg{width:16px;height:16px}
.qsep{width:1px;height:20px;background:var(--line2);margin:0 3px}
.qlayer{display:flex;align-items:center;gap:5px}
.qlayer .sw{width:14px;height:14px;border-radius:3px;border:1px solid rgba(255,255,255,.3);flex-shrink:0}
.qlayer select{height:28px;border-radius:7px;padding:0 6px;font-size:12px;min-width:120px;background:var(--bg2);color:var(--ink);border:1px solid var(--line2)}
body.light .qbar{background:#ffffffee}

/* canvas */
.canvas-area{grid-row:2;position:relative;background:
  radial-gradient(1000px 500px at 50% 40%, #0c1219, #080b10)}
#cad{width:100%;height:100%;display:block;touch-action:none;cursor:crosshair}

/* command bar */
.cmdbar{position:absolute;left:14px;bottom:14px;right:14px;display:flex;gap:10px;align-items:center;
  background:#0d121aee;border:1px solid var(--line2);border-radius:12px;padding:7px 12px;
  box-shadow:var(--shadow-sm)}
.cmdbar .pfx{color:var(--cyan);font-weight:700;font-family:var(--mono);font-size:13px}
.cmdbar input{border:0;background:transparent;padding:4px 0;font-family:var(--mono);font-size:13px}
.cmdbar input:focus{outline:none;box-shadow:none}
.float-hint{position:absolute;top:14px;left:50%;transform:translateX(-50%);
  background:#0d121aee;border:1px solid var(--line2);padding:6px 14px;border-radius:999px;
  font-size:12.5px;color:var(--ink2);box-shadow:var(--shadow-sm)}
.viewcube{position:absolute;top:14px;right:14px;display:flex;gap:4px;background:#0d121aee;
  border:1px solid var(--line2);border-radius:10px;padding:4px}
.viewcube button{width:30px;height:30px;border-radius:7px;border:0;background:transparent;color:var(--ink2);
  cursor:pointer;display:grid;place-items:center}
.viewcube button:hover{background:var(--panel3);color:var(--ink)}
.viewcube svg{width:16px;height:16px}

/* side panel */
.cad-side{grid-row:2;background:linear-gradient(180deg,var(--panel),var(--bg2));
  border-left:1px solid var(--line);overflow:auto;padding:0}
.pane{padding:14px 14px 4px}
.pane+.pane{border-top:1px solid var(--line)}
.pane h4{margin:0 0 10px;font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.7px;
  display:flex;align-items:center;gap:7px;font-weight:700}
.pane h4 svg{width:14px;height:14px;color:var(--faint)}
.layer{display:flex;align-items:center;gap:9px;padding:7px 9px;border-radius:9px;cursor:pointer;
  border:1px solid transparent;transition:.1s;margin-bottom:2px}
.layer:hover{background:var(--panel3)}
.layer.active{background:var(--panel3);border-color:var(--accent)}
.layer .swatch{width:14px;height:14px;border-radius:4px;border:1px solid rgba(255,255,255,.25);flex-shrink:0}
.layer .nm{font-size:13px;flex:1}
.layer.active .nm{font-weight:600}
.layer .vis{cursor:pointer;color:var(--muted);display:grid;place-items:center}
.layer .vis svg{width:15px;height:15px}
.layer.off .nm{color:var(--faint)}
.tpl-item{display:flex;align-items:center;gap:10px;padding:9px 11px;border:1px solid var(--line);
  border-radius:10px;margin-bottom:7px;cursor:pointer;font-size:13px;background:var(--bg2);transition:.12s}
.tpl-item:hover{background:var(--panel3);border-color:var(--accent);transform:translateX(2px)}
.tpl-item svg{width:18px;height:18px;color:var(--cyan);flex-shrink:0}
.lyr-tools{display:flex;gap:2px}
.lyr-tools button{width:24px;height:24px;border-radius:6px;border:1px solid transparent;background:transparent;color:var(--muted);cursor:pointer;display:grid;place-items:center}
.lyr-tools button:hover{background:var(--panel3);color:var(--ink);border-color:var(--line2)}
.lyr-tools svg{width:14px;height:14px}
.part-grid{display:grid;grid-template-columns:1fr 1fr;gap:6px}
.part-btn{display:flex;flex-direction:column;align-items:center;gap:5px;padding:9px 6px;border:1px solid var(--line);
  border-radius:9px;background:var(--bg2);cursor:pointer;font-size:11px;text-align:center;color:var(--ink2);transition:.12s;line-height:1.3}
.part-btn:hover{background:var(--panel3);border-color:var(--accent);color:var(--ink);transform:translateY(-1px)}
.part-btn svg{width:22px;height:22px;color:var(--cyan)}
.part-btn.mine{position:relative}
.part-btn.mine svg{color:var(--warn)}
.part-btn .del{position:absolute;top:2px;right:5px;font-style:normal;font-size:14px;color:var(--muted);line-height:1;padding:2px}
.part-btn .del:hover{color:var(--danger)}
.layer .ed{margin-left:auto;display:flex;gap:3px}

/* 出力メニュー */
.menu-wrap{position:relative}
.menu{position:absolute;top:38px;right:0;background:var(--panel3);border:1px solid var(--line2);border-radius:10px;
  box-shadow:var(--shadow);padding:6px;z-index:80;min-width:190px;display:flex;flex-direction:column;gap:2px}
.menu button{display:block;width:100%;text-align:left;background:transparent;border:0;color:var(--ink);
  padding:8px 11px;border-radius:7px;cursor:pointer;font-size:13px;font-family:inherit}
.menu button:hover{background:var(--accent);color:#fff}

/* AIリンク（控えめ） */
.ai-link{display:inline-flex;align-items:center;gap:5px;margin-top:8px;font-size:12px;color:var(--muted);text-decoration:none}
.ai-link:hover{color:var(--accent)}
.ai-link svg{width:13px;height:13px}
.dwg{cursor:pointer}
.dwg:hover{border-color:var(--accent);color:var(--accent)}

/* プロパティ行 */
.prow{display:flex;align-items:center;gap:6px;margin-top:6px}
.prow input{flex:1;min-width:0}
.plab{font-size:11px;color:var(--muted);min-width:30px}

/* ライトテーマ */
body.light{
  --bg:#eef1f5;--bg2:#ffffff;--panel:#ffffff;--panel2:#f1f4f8;--panel3:#e7ecf3;
  --line:#d6dde6;--line2:#c3cdd9;--ink:#1a2230;--ink2:#3c4a5e;--muted:#5d6b80;--faint:#9aa7b8;
  --shadow:0 8px 30px rgba(40,60,90,.16),0 2px 6px rgba(40,60,90,.10);--shadow-sm:0 2px 8px rgba(40,60,90,.12);
}
body.light{background:radial-gradient(1200px 600px at 80% -10%,rgba(61,139,253,.10),transparent 60%),var(--bg)}
body.light .canvas-area{background:radial-gradient(1000px 500px at 50% 40%,#fbfdff,#eef2f7)}
body.light .cmdbar,body.light .float-hint,body.light .viewcube{background:#ffffffee}
.prop label{margin:9px 0 4px}
.chk{display:flex;align-items:center;gap:9px;padding:6px 0;font-size:13px;color:var(--ink2);cursor:pointer}
.chk input{width:auto;accent-color:var(--accent)}

/* status bar */
.cad-status{grid-column:1/4;display:flex;align-items:center;gap:0;padding:0;
  background:linear-gradient(180deg,var(--panel),var(--bg2));border-top:1px solid var(--line);
  font-size:12px;color:var(--ink2);font-family:var(--mono)}
.cad-status .seg{padding:0 16px;height:32px;display:flex;align-items:center;gap:7px;border-right:1px solid var(--line)}
.cad-status .seg .dot{width:6px;height:6px;border-radius:50%;background:var(--cyan)}
.cad-status .spacer{flex:1;border:0}
.cad-status .save.dirty{color:var(--warn)}.cad-status .save.ok{color:var(--ok)}
