.dpmh2{--line:#111827;--soft:#d8e0ea;--ink:#0f172a;--muted:#64748b;--dpmh2-canvas-pct:72%;--dpmh2-inv-h:124px;--dpmh2-fixed-top:46px;--dpmh2-head-h:82px;width:100%!important;max-width:none!important;margin:0!important;padding:0 16px 12px;box-sizing:border-box;color:var(--ink);font-family:system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;background:#fff;height:calc(100dvh - var(--dpmh2-fixed-top));min-height:520px;overflow:hidden;display:flex;flex-direction:column}.dpmh2 *{box-sizing:border-box}.dpmh2-head{position:sticky;top:var(--dpmh2-fixed-top);z-index:2000;display:flex;justify-content:space-between;gap:16px;align-items:flex-start;margin:0 -16px 12px;padding:12px 16px;background:#fff;border-bottom:1px solid #e5eaf1;box-shadow:0 8px 22px rgba(15,23,42,.06);flex:0 0 auto}.dpmh2-kicker{font-size:12px;letter-spacing:.08em;font-weight:900;color:#334155}.dpmh2 h1,.dpmh2 h2{margin:0;font-weight:900;letter-spacing:.02em}.dpmh2 h1{font-size:28px}.dpmh2-tools{display:flex;gap:8px;align-items:center;flex-wrap:wrap;position:relative;z-index:100000}.dpmh2 button,.dpmh2-pill{border:1px solid #d4dde8;background:#fff;border-radius:16px;padding:8px 14px;font-weight:800;color:#0f172a;cursor:pointer}.dpmh2 button.is-on,.dpmh2-save{background:#111827!important;color:#fff!important}.dpmh2-main{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:12px;width:100%;height:calc(var(--dpmh2-canvas-pct) - 8px);padding-top:8px;min-height:0;flex:1 1 auto}.dpmh2-work,.dpmh2-side,.dpmh2-inv{border:1px solid #d8e0ea;border-radius:18px;background:#fff;overflow:hidden;min-height:0}.dpmh2-board-head{height:42px;padding:0 16px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid #d8e0ea}.dpmh2-board-head span{font-size:13px;color:#64748b}.dpmh2-canvas::-webkit-scrollbar,.dpmh2-side::-webkit-scrollbar{width:8px;height:8px}.dpmh2-canvas::-webkit-scrollbar-thumb,.dpmh2-side::-webkit-scrollbar-thumb{background:#cbd5e1;border-radius:999px}.dpmh2-canvas::-webkit-scrollbar-track,.dpmh2-side::-webkit-scrollbar-track{background:#f8fafc}.dpmh2-canvas{position:relative;height:calc(100% - 42px);min-height:0;overflow:auto;background:#fff;touch-action:none;cursor:grab;scrollbar-width:thin}.dpmh2-bg-dom,.dpmh2-floor-layer,.dpmh2-svg,.dpmh2-layer{position:absolute;left:0;top:0;transform-origin:0 0;transition:transform .08s linear}.dpmh2-bg-dom{z-index:0;pointer-events:none;background:transparent}.dpmh2-floor-layer{z-index:1;pointer-events:none}.dpmh2-svg{z-index:2;pointer-events:none}.dpmh2-layer{z-index:3;pointer-events:none}.grid.hide,.walls.hide{opacity:0}.floor{fill:transparent;stroke:#111827;stroke-width:1;vector-effect:non-scaling-stroke}.floor.outside{stroke-dasharray:5 4;opacity:.45}.floor.inside{opacity:.9}.wallcell{fill:transparent;stroke:#111827;stroke-width:1;vector-effect:non-scaling-stroke}.dpmh2-obj{position:absolute;z-index:5;touch-action:none;-webkit-user-drag:none;width:74px;height:74px;margin-left:-37px;margin-top:-62px;display:flex;align-items:center;justify-content:center;flex-direction:column;pointer-events:auto;cursor:grab;user-select:none}.dpmh2-obj.sel{outline:0!important}.dpmh2-obj .sprite{width:58px;height:46px;display:flex;align-items:center;justify-content:center;font-size:34px;color:#111827;transform-origin:center bottom}.dpmh2-obj .sprite.flip{transform:scaleX(-1)}.dpmh2-obj em{font-style:normal;font-size:11px;font-weight:800;color:#0f172a;background:#fff8;padding:1px 4px}.dpmh2-actions{position:absolute;right:-10px;top:-12px;display:none;gap:4px;z-index:8}.dpmh2-obj:hover .dpmh2-actions,.dpmh2-obj.sel .dpmh2-actions{display:flex}.dpmh2-actions button{width:24px;height:24px;padding:3px!important;border-radius:999px!important;background:#fff!important;border:1px solid #94a3b8!important;display:flex;align-items:center;justify-content:center}.dpmh2-actions svg{width:15px;height:15px;fill:#111827}.dpmh2-remove svg{fill:#dc2626}.dpmh2-hud{position:absolute;left:50%;bottom:14px;z-index:4;transform:translateX(-50%);font-size:13px;color:#64748b;background:#ffffffe8;border:1px solid #e5eaf1;border-radius:999px;padding:7px 14px}.dpmh2-side{padding:26px 18px 18px;overflow:auto;position:relative;z-index:1}.dpmh2-profile{display:flex;gap:14px;align-items:center}.dpmh2-profile img{width:58px;height:58px;flex:0 0 58px;object-fit:cover;object-position:center;border-radius:50%;border:2px solid #d8e0ea}.dpmh2-profile b{display:block;font-size:19px}.dpmh2-profile span,.dpmh2-stat span,.dpmh2-side p{color:#64748b;font-size:13px}.dpmh2-line{border-top:1px solid #d8e0ea;margin:18px 0}.dpmh2-score{display:flex;justify-content:space-between;align-items:center;border:1px solid #d8e0ea;border-radius:12px;padding:11px 13px;margin-bottom:10px}.dpmh2-score b{font-size:28px}.dpmh2-floorbox{border:1px solid #d8e0ea;border-radius:12px;padding:11px 13px;margin-bottom:10px}.dpmh2-floorbox>div:first-child{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}.dpmh2-floorbox span{color:#64748b;font-size:13px}.dpmh2-floors{display:flex;gap:6px;flex-wrap:wrap}.dpmh2-floors button{padding:5px 9px;border-radius:10px}.dpmh2-floors button:disabled{opacity:.45;cursor:not-allowed;background:#f1f5f9;color:#64748b}.dpmh2-stat{display:flex;justify-content:space-between;border:1px solid #d8e0ea;border-radius:12px;padding:11px 13px;margin-bottom:10px}.dpmh2-save,.dpmh2-clear{width:100%;margin-top:4px}.dpmh2-clear{background:#edf1f5!important}.dpmh2-inv{margin-top:10px;flex:0 0 var(--dpmh2-inv-h);height:var(--dpmh2-inv-h);min-height:var(--dpmh2-inv-h)}.dpmh2-inv-head{display:flex;justify-content:space-between;align-items:center;padding:9px 14px;border-bottom:1px solid #d8e0ea;height:52px}.dpmh2-items{display:flex;gap:10px;overflow-x:auto;overflow-y:hidden;padding:10px 14px;height:calc(var(--dpmh2-inv-h) - 52px)}.dpmh2-card{min-width:138px;touch-action:none;user-select:none;-webkit-user-drag:none;height:58px;border-radius:12px!important;display:grid;grid-template-columns:38px 1fr;grid-template-rows:1fr 1fr;text-align:left;align-items:center}.dpmh2-card span{grid-row:1/3;font-size:30px;text-align:center}.dpmh2-card small{color:#64748b;font-weight:700}.dpmh2-drag-ghost{position:fixed;z-index:999999;pointer-events:none;background:#fff;border:2px solid #2563eb;border-radius:12px;padding:8px 10px;display:flex;gap:8px;align-items:center;font-weight:900;color:#111827;box-shadow:none;transform:translate(-50%,-50%);min-width:72px;justify-content:center}.dpmh2-drag-ghost span{font-size:26px}.dpmh2-cell-preview{pointer-events:none}.dpmh2-cell-preview polygon{stroke-width:2;vector-effect:non-scaling-stroke}.dpmh2-cell-preview.ok polygon{fill:rgba(34,197,94,.22);stroke:#16a34a}.dpmh2-cell-preview.bad polygon{fill:rgba(239,68,68,.22);stroke:#dc2626}.dpmh2-obj.is-drag-source{opacity:.35}.dpmh2-dragging{cursor:grabbing!important;user-select:none!important}.dpmh2.preview .dpmh2-hud,.dpmh2.preview .dpmh2-actions{display:none}@media(max-width:980px){.dpmh2{padding:8px;height:auto;min-height:100vh;overflow:visible}.dpmh2-main{grid-template-columns:1fr;height:65vh}.dpmh2-side{order:2}.dpmh2-canvas{height:calc(100% - 42px)}.dpmh2-head{display:block}.dpmh2-tools{margin-top:10px}.dpmh2-inv{height:var(--dpmh2-inv-h)}}
@media print{body *{visibility:hidden}.dpmh2,.dpmh2 *{visibility:visible}.dpmh2-side,.dpmh2-inv,.dpmh2-head{display:none}.dpmh2{position:absolute;inset:0}.dpmh2-work{border:0}.dpmh2-canvas{height:100vh}}

#dp-root .dpmh2,#dp-main .dpmh2,.dp-main .dpmh2,.dp-content .dpmh2,.entry-content .dpmh2{width:100%!important;max-width:none!important;}
@media(min-width:981px){body:has(.dpmh2){overflow-y:hidden;}}

/* v2.1.0 UI clean stable: remove editor header strip and all editor scrollbars */
.dpmh2{height:calc(100dvh - var(--dpmh2-fixed-top));overflow:hidden;}
.dpmh2-head{margin-bottom:8px;}
.dpmh2-main{flex:1 1 auto;height:auto!important;min-height:0;padding-top:0;}
.dpmh2-work{display:flex;flex-direction:column;min-height:0;}
.dpmh2-board-head{display:none!important;height:0!important;min-height:0!important;padding:0!important;margin:0!important;border:0!important;overflow:hidden!important;}
.dpmh2-canvas{height:100%!important;min-height:0!important;overflow:hidden!important;scrollbar-width:none!important;}
.dpmh2-canvas::-webkit-scrollbar{width:0!important;height:0!important;display:none!important;}
.dpmh2-side{overflow:hidden!important;}
.dpmh2-side::-webkit-scrollbar{width:0!important;height:0!important;display:none!important;}
.dpmh2-inv{margin-top:8px;}
@media(max-width:980px){.dpmh2{height:auto;overflow:visible}.dpmh2-main{height:calc(100vh - var(--dpmh2-inv-h) - 150px)!important;min-height:420px}.dpmh2-canvas{overflow:hidden!important}}


/* v2.1.1 mobile scroll + toolbar layer fix */
.dpmh2-head{z-index:2000!important;}
@media(max-width:980px){
  body:has(.dpmh2){overflow-y:auto!important;}
  .dp-shell,.dp-main,#dp-main,.dp-content,.entry-content,.dp-router-output{overflow-y:auto!important;-webkit-overflow-scrolling:touch!important;}
  .dpmh2{height:auto!important;min-height:100vh!important;overflow:visible!important;}
  .dpmh2-head{position:sticky!important;top:0!important;z-index:2000!important;}
  .dpmh2-tools{display:flex!important;flex-wrap:nowrap!important;overflow-x:auto!important;overflow-y:hidden!important;white-space:nowrap!important;-webkit-overflow-scrolling:touch!important;padding-bottom:4px;}
  .dpmh2-tools::-webkit-scrollbar{display:none!important;}
  .dpmh2-main{height:auto!important;min-height:0!important;display:block!important;}
  .dpmh2-work{height:62vh!important;min-height:360px!important;margin-bottom:10px;}
  .dpmh2-side{height:auto!important;overflow:visible!important;}
  .dpmh2-canvas{touch-action:pan-y!important;}
}


/* v2.1.3 mobile spacing polish */
@media(max-width:980px){
  .dpmh2{padding:6px 8px 8px!important;gap:0!important;}
  .dpmh2-head{margin:0 -8px 6px!important;padding:8px 8px 7px!important;}
  .dpmh2-head h1{font-size:24px!important;line-height:1.1!important;}
  .dpmh2-kicker{font-size:11px!important;}
  .dpmh2-tools{margin-top:8px!important;gap:6px!important;}
  .dpmh2-tools button,.dpmh2-pill{padding:7px 10px!important;border-radius:14px!important;flex:0 0 auto!important;}

  /* 手機改成：畫布 → 裝潢物品 → 會員資訊，不讓右側資訊卡卡在中間 */
  .dpmh2-main{display:contents!important;height:auto!important;min-height:0!important;padding:0!important;}
  .dpmh2-work{order:1!important;height:46vh!important;min-height:300px!important;margin:0 0 6px!important;border-radius:14px!important;}
  .dpmh2-inv{order:2!important;margin:0 0 8px!important;flex:0 0 112px!important;height:112px!important;min-height:112px!important;border-radius:14px!important;}
  .dpmh2-side{order:3!important;margin:0!important;border-radius:14px!important;padding:16px 14px!important;}

  .dpmh2-canvas{height:100%!important;min-height:0!important;overflow:hidden!important;}
  .dpmh2-hud{position:absolute!important;left:50%!important;bottom:8px!important;transform:translateX(-50%)!important;margin:0!important;padding:6px 12px!important;font-size:12px!important;white-space:nowrap!important;}

  .dpmh2-inv-head{height:42px!important;padding:6px 12px!important;}
  .dpmh2-inv-head h2{font-size:22px!important;line-height:1.05!important;}
  .dpmh2-inv-head .dpmh2-kicker{display:none!important;}
  .dpmh2-items{height:70px!important;padding:8px 12px!important;gap:8px!important;overflow-x:auto!important;overflow-y:hidden!important;-webkit-overflow-scrolling:touch!important;}
  .dpmh2-items::-webkit-scrollbar{display:none!important;}
  .dpmh2-card{min-width:132px!important;height:54px!important;grid-template-columns:34px 1fr!important;padding:6px 8px!important;}
  .dpmh2-card span{font-size:26px!important;}
  .dpmh2-card b{font-size:13px!important;}
  .dpmh2-card small{font-size:11px!important;}
}
@media(max-width:520px){
  .dpmh2-work{height:42vh!important;min-height:280px!important;}
  .dpmh2-inv{height:108px!important;min-height:108px!important;flex-basis:108px!important;}
  .dpmh2-items{height:66px!important;}
}

/* v2.1.5 access bridge + mobile inventory swipe */
@media(max-width:980px){
  .dpmh2-inv{overflow:hidden!important;}
  .dpmh2-inv-head{position:relative!important;z-index:2!important;overflow:visible!important;}
  .dpmh2-inv-head>div:last-child{display:flex!important;gap:6px!important;flex:0 0 auto!important;white-space:nowrap!important;}
  .dpmh2-inv-head button{padding:7px 11px!important;border-radius:14px!important;flex:0 0 auto!important;}
  .dpmh2-items{
    display:flex!important;
    flex-wrap:nowrap!important;
    overflow-x:auto!important;
    overflow-y:hidden!important;
    gap:8px!important;
    padding:8px 12px 10px!important;
    height:70px!important;
    max-width:100%!important;
    scroll-snap-type:x proximity!important;
    scroll-padding-left:12px!important;
    -webkit-overflow-scrolling:touch!important;
    overscroll-behavior-x:contain!important;
    touch-action:pan-x!important;
    cursor:grab!important;
  }
  .dpmh2-items::-webkit-scrollbar{display:none!important;width:0!important;height:0!important;}
  .dpmh2-items{scrollbar-width:none!important;}
  .dpmh2-card{
    flex:0 0 132px!important;
    min-width:132px!important;
    max-width:132px!important;
    scroll-snap-align:start!important;
    touch-action:pan-x!important;
    -webkit-user-drag:none!important;
  }
  .dpmh2-inv:after{
    content:'左右滑動查看更多';
    position:absolute;
    right:14px;
    bottom:4px;
    font-size:10px;
    line-height:1;
    color:#94a3b8;
    pointer-events:none;
    opacity:.85;
  }
}
@media(max-width:520px){
  .dpmh2-items{height:66px!important;padding-right:42px!important;}
  .dpmh2-card{flex-basis:128px!important;min-width:128px!important;max-width:128px!important;}
}


/* v2.1.5 mobile swipe + drag coexist */
.dpmh2-card.is-pending-drag{outline:1px solid #cbd5e1;outline-offset:2px;}
@media(max-width:980px){
  .dpmh2-items{overflow-x:auto!important;overflow-y:hidden!important;touch-action:pan-x!important;}
  .dpmh2-card{touch-action:pan-x!important;}
  .dpmh2-dragging .dpmh2-items,.dpmh2-dragging .dpmh2-card{touch-action:none!important;}
}

.dpmh2-card.is-locked{opacity:.45;filter:grayscale(1);cursor:not-allowed}
.dpmh2-card.is-locked small{color:#991b1b}
.dpmh2-card-img{display:flex!important;align-items:center;justify-content:center;overflow:hidden}
.dpmh2-card-img img{max-width:100%;max-height:48px;display:block;object-fit:contain}
.dpmh2-obj .sprite.png{background:transparent;border:0;box-shadow:none}
.dpmh2-obj .sprite.png img{max-width:96px;max-height:96px;display:block;object-fit:contain;transform:translate(-50%,-84%);position:absolute;left:50%;top:50%}
.dpmh2-obj .sprite.png.flip img{transform:translate(-50%,-84%) scaleX(-1)}


/* v2.1.6 iso grid anchor alignment
   物件的定位點統一為「物件底部中心」，並對齊 SVG 等角格子的格心。
   label / 操作鈕不再參與定位計算，避免看起來偏離格子。 */
.dpmh2-obj{
  width:112px!important;
  height:132px!important;
  margin-left:0!important;
  margin-top:0!important;
  transform:translate(-50%,-96px)!important;
  display:block!important;
  overflow:visible!important;
  outline-offset:0!important;
}
.dpmh2-obj .sprite{
  position:absolute!important;
  left:50%!important;
  bottom:36px!important;
  width:96px!important;
  height:96px!important;
  transform:translateX(-50%)!important;
  display:flex!important;
  align-items:flex-end!important;
  justify-content:center!important;
  pointer-events:none!important;
}
.dpmh2-obj .sprite.flip{transform:translateX(-50%) scaleX(-1)!important;}
.dpmh2-obj .sprite.png img{
  position:absolute!important;
  left:50%!important;
  bottom:0!important;
  top:auto!important;
  max-width:112px!important;
  max-height:112px!important;
  width:auto!important;
  height:auto!important;
  object-fit:contain!important;
  transform:translateX(-50%)!important;
}
.dpmh2-obj .sprite.png.flip img{transform:translateX(-50%) scaleX(-1)!important;}
.dpmh2-obj em{
  position:absolute!important;
  left:50%!important;
  top:100px!important;
  transform:translateX(-50%)!important;
  white-space:nowrap!important;
  z-index:7!important;
}
.dpmh2-obj .dpmh2-actions{
  right:0!important;
  top:24px!important;
}
.dpmh2-obj.sel{
  outline:none!important;
}
.dpmh2-obj.sel::after{
  content:"";
  position:absolute;
  left:50%;
  top:94px;
  width:72px;
  height:36px;
  transform:translate(-50%,-50%) skewY(-26.565deg) scaleY(.55) rotate(45deg);
  border:2px solid #2563eb;
  pointer-events:none;
  z-index:1;
}

/* v2.1.7 selection footprint alignment
   藍框改由 SVG 依照物件實際 x/y/w/h 畫在格子上，不再用 HTML 外框估算。 */
.dpmh2-selection{pointer-events:none;}
.dpmh2-selection-poly{fill:rgba(34,197,94,.13);stroke:#22c55e;stroke-width:1.6;vector-effect:non-scaling-stroke;}
.dpmh2-obj.sel::after{display:none!important;}

/* v2.1.8 object position system
   物件圖片視覺位置改由後台 render_w/render_h/offset_x/offset_y/anchor_x/anchor_y 控制。
   藍框仍只吃 size_w/size_h，占格與圖片尺寸互不干擾。 */
.dpmh2-obj{
  margin-left:0!important;
  margin-top:0!important;
  transform:none!important;
  display:block!important;
  overflow:visible!important;
  outline:none!important;
  pointer-events:auto!important;
}
.dpmh2-obj .sprite{
  position:absolute!important;
  inset:0!important;
  width:100%!important;
  height:100%!important;
  transform:none!important;
  display:flex!important;
  align-items:center!important;
  justify-content:center!important;
  pointer-events:none!important;
}
.dpmh2-obj .sprite.flip{transform:scaleX(-1)!important;}
.dpmh2-obj .sprite.png img{
  position:absolute!important;
  left:0!important;
  top:0!important;
  bottom:auto!important;
  width:100%!important;
  height:100%!important;
  max-width:none!important;
  max-height:none!important;
  object-fit:contain!important;
  transform:none!important;
}
.dpmh2-obj .sprite.png.flip img{transform:scaleX(-1)!important;}
.dpmh2-obj em{
  position:absolute!important;
  left:50%!important;
  top:100%!important;
  transform:translateX(-50%)!important;
  white-space:nowrap!important;
  z-index:7!important;
  margin-top:2px!important;
}
.dpmh2-obj .dpmh2-actions{
  right:-10px!important;
  top:0!important;
}
.dpmh2-card-placeholder{color:#94a3b8!important;font-size:22px!important;line-height:1!important;}


/* v2.1.10 delete object fix: action buttons must always receive click/touch above PNG. */
.dpmh2-obj .dpmh2-actions{pointer-events:auto!important;z-index:9999!important;}
.dpmh2-obj .dpmh2-actions button{pointer-events:auto!important;position:relative!important;z-index:10000!important;}
.dpmh2-obj .sprite,.dpmh2-obj .sprite img,.dpmh2-obj em{pointer-events:none!important;}
.dpmh2-remove{border-color:#fecaca!important;background:#fff!important;}


/* v2.1.11 transparent drag object
   拖曳時只顯示半透明物件本體，不再顯示圓角卡片/名稱框，避免遮住格線視線。 */
.dpmh2-drag-ghost{
  background:transparent!important;
  border:0!important;
  border-radius:0!important;
  padding:0!important;
  min-width:0!important;
  box-shadow:none!important;
  opacity:.58!important;
  filter:none!important;
  display:block!important;
  transform:var(--ghost-transform, translate(-50%,-100%))!important;
}
.dpmh2-drag-ghost img{
  width:100%!important;
  height:100%!important;
  object-fit:contain!important;
  display:block!important;
  pointer-events:none!important;
  user-select:none!important;
  -webkit-user-drag:none!important;
}
.dpmh2-drag-ghost.has-icon{
  width:72px!important;
  height:72px!important;
  display:flex!important;
  align-items:center!important;
  justify-content:center!important;
  color:#0f172a!important;
  font-size:44px!important;
}
.dpmh2-drag-ghost b{display:none!important;}

/* v2.1.12 cell center anchor fix
   放置後的物件接地點改對齊占格中心，不再落到格子的右下角。
   目的：拖曳時看到的綠色格 = 放開後物件所在格。 */


/* v2.1.14 hard position sync
   修正舊版 CSS 的 width/height/margin !important 把 JS 物件錨點吃掉，
   導致綠色預覽格與放開後物件位置差很大。
   現在物件實際尺寸與錨點全部由 JS 設定 CSS variables 控制。 */
.dpmh2-obj{
  width:var(--obj-w,96px)!important;
  height:var(--obj-h,96px)!important;
  margin-left:var(--obj-ml,-48px)!important;
  margin-top:var(--obj-mt,-96px)!important;
  transform:none!important;
}


/* v2.1.15 visual ground Y fix
   放開格子座標不改，只把 PNG 視覺接地點往下補償，解決物件與拖曳半透明圖偏高。 */
.dpmh2-drag-ghost{
  transform:var(--ghost-transform, translate(-50%,-100%))!important;
}

/* v2.2.0 anchor-exact ghost：拖曳半透明圖改用物件自己的 Anchor/Offset，與後台紅點一致。 */
.dpmh2-drag-ghost{transform:var(--ghost-transform, translate(-50%,-100%))!important;}

/* v2.3.0 red anchor position engine
   JS 統一使用物件接地紅點作為 render / drag / drop 基準；CSS 保持只負責顯示，不再補定位。 */


/* v2.3.5 stable view/edit/photo/inventory fix */
.dpmh2{--dpmh2-inv-h:210px!important;}
.dpmh2-tools [data-act="edit"]{
  display:inline-flex!important;
  align-items:center!important;
  justify-content:center!important;
  background:#2563eb!important;
  border-color:#2563eb!important;
  color:#fff!important;
  box-shadow:0 8px 18px rgba(37,99,235,.22)!important;
}
.dpmh2-tools [data-act="edit"].is-on{
  background:#1d4ed8!important;
  border-color:#1d4ed8!important;
}
.dpmh2.is-viewing .dpmh2-obj{pointer-events:none!important;cursor:default!important;}
.dpmh2.is-viewing .dpmh2-obj em,
.dpmh2.is-viewing .dpmh2-actions,
.dpmh2.is-viewing .dpmh2-selection{display:none!important;}
.dpmh2.is-viewing .dpmh2-obj.sel{outline:none!important;}
.dpmh2.is-editing .dpmh2-obj{pointer-events:auto!important;cursor:grab!important;}
.dpmh2.is-editing .dpmh2-obj em{display:block!important;}
.dpmh2.is-editing .dpmh2-obj:hover .dpmh2-actions,
.dpmh2.is-editing .dpmh2-obj.sel .dpmh2-actions{display:flex!important;}
.dpmh2-inv{flex:0 0 var(--dpmh2-inv-h)!important;height:var(--dpmh2-inv-h)!important;min-height:var(--dpmh2-inv-h)!important;overflow:hidden!important;}
.dpmh2-inv-head{height:62px!important;padding:12px 14px!important;}
.dpmh2-items{height:calc(var(--dpmh2-inv-h) - 62px)!important;padding:14px 14px 26px!important;align-items:stretch!important;overflow-x:auto!important;overflow-y:hidden!important;}
.dpmh2-card{height:104px!important;min-width:174px!important;grid-template-columns:60px 1fr!important;padding:10px 12px!important;}
.dpmh2-card-img img{max-height:84px!important;}
.dpmh2-card b{font-size:14px!important;line-height:1.2!important;}
.dpmh2-card small{font-size:12px!important;line-height:1.25!important;}
@media(max-width:980px){
  .dpmh2{--dpmh2-inv-h:196px!important;}
  .dpmh2-main{height:calc(100vh - var(--dpmh2-inv-h) - 150px)!important;min-height:400px!important;}
  .dpmh2-inv-head{height:56px!important;}
  .dpmh2-items{height:calc(var(--dpmh2-inv-h) - 56px)!important;padding-bottom:24px!important;}
  .dpmh2-card{height:96px!important;flex-basis:166px!important;min-width:166px!important;max-width:166px!important;}
}
@media(max-width:560px){
  .dpmh2{--dpmh2-inv-h:186px!important;}
  .dpmh2-card{height:92px!important;flex-basis:158px!important;min-width:158px!important;max-width:158px!important;}
}


/* v2.3.11 background object category sync */
.dpmh2-bg-layer{pointer-events:none;opacity:1;}
.dpmh2-card.is-background{border-style:solid;}
.dpmh2-card.is-background small{color:#2563eb;font-weight:700;}
.dpmh2-card.is-active{border-color:#2563eb!important;box-shadow:0 0 0 2px rgba(37,99,235,.16) inset!important;background:#eff6ff!important;}

/* v2.3.15 selection UI rebuild: no debug bounding box, only sprite glow + ground hint */
.dpmh2.is-editing .dpmh2-obj:hover,
.dpmh2.is-editing .dpmh2-obj.is-active-target,
.dpmh2.is-editing .dpmh2-obj.sel{
  outline:0!important;
  filter:none!important;
}
.dpmh2.is-editing .dpmh2-obj:hover .sprite,
.dpmh2.is-editing .dpmh2-obj.is-active-target .sprite,
.dpmh2.is-editing .dpmh2-obj.sel .sprite{
  background:transparent!important;
  border-radius:0!important;
}
.dpmh2.is-editing .dpmh2-obj:hover .sprite img,
.dpmh2.is-editing .dpmh2-obj.is-active-target .sprite img,
.dpmh2.is-editing .dpmh2-obj.sel .sprite img{
  filter:brightness(1.16) saturate(1.12) drop-shadow(0 0 7px rgba(34,197,94,.62)) drop-shadow(0 3px 5px rgba(15,23,42,.18))!important;
}
.dpmh2.is-editing .dpmh2-obj:hover .sprite:not(.png),
.dpmh2.is-editing .dpmh2-obj.is-active-target .sprite:not(.png),
.dpmh2.is-editing .dpmh2-obj.sel .sprite:not(.png){
  filter:brightness(1.16) drop-shadow(0 0 7px rgba(34,197,94,.62))!important;
}
.dpmh2.is-editing .dpmh2-obj.sel .dpmh2-actions,
.dpmh2.is-editing .dpmh2-obj:hover .dpmh2-actions{
  display:flex;
}
.dpmh2-selection{pointer-events:none;}
.dpmh2-selection-poly{fill:rgba(34,197,94,.13)!important;stroke:#22c55e!important;stroke-width:1.6!important;vector-effect:non-scaling-stroke;filter:drop-shadow(0 0 5px rgba(34,197,94,.35));}
.dpmh2-obj.layer-background{pointer-events:none!important;}
.dpmh2-obj.layer-floor .sprite{opacity:.96;}
.dpmh2-obj.layer-decoration .sprite{filter:drop-shadow(0 2px 5px rgba(15,23,42,.18));}

/* v2.3.16 mobile category swipe fix */
.dpmh2 [data-role="categoryTabs"]{
  display:flex!important;
  flex-wrap:nowrap!important;
  gap:8px!important;
  max-width:100%!important;
  overflow-x:auto!important;
  overflow-y:hidden!important;
  -webkit-overflow-scrolling:touch!important;
  overscroll-behavior-x:contain!important;
  touch-action:pan-x!important;
  scrollbar-width:none!important;
  cursor:grab!important;
  padding:2px 2px 4px!important;
}
.dpmh2 [data-role="categoryTabs"]::-webkit-scrollbar{display:none!important;width:0!important;height:0!important;}
.dpmh2 [data-role="categoryTabs"].is-swiping{cursor:grabbing!important;user-select:none!important;}
.dpmh2 [data-role="categoryTabs"] button{
  flex:0 0 auto!important;
  white-space:nowrap!important;
  touch-action:pan-x!important;
  user-select:none!important;
  -webkit-user-drag:none!important;
}
@media(max-width:980px){
  .dpmh2-inv-head{
    display:flex!important;
    align-items:center!important;
    gap:10px!important;
    height:70px!important;
    padding:8px 10px!important;
    overflow:hidden!important;
  }
  .dpmh2-inv-head>div:first-child{
    flex:0 0 86px!important;
    min-width:86px!important;
    max-width:86px!important;
    overflow:visible!important;
  }
  .dpmh2-inv-head>div:first-child .dpmh2-kicker{font-size:11px!important;line-height:1.1!important;}
  .dpmh2-inv-head>div:first-child h2{
    font-size:20px!important;
    line-height:1.05!important;
    writing-mode:horizontal-tb!important;
    white-space:normal!important;
    word-break:keep-all!important;
  }
  .dpmh2-inv-head [data-role="categoryTabs"]{
    flex:1 1 auto!important;
    min-width:0!important;
    width:auto!important;
  }
  .dpmh2-inv-head [data-role="categoryTabs"] button{font-size:15px!important;padding:8px 13px!important;border-radius:15px!important;}
}
@media(max-width:520px){
  .dpmh2-inv-head>div:first-child{flex-basis:72px!important;min-width:72px!important;max-width:72px!important;}
  .dpmh2-inv-head>div:first-child h2{font-size:18px!important;}
  .dpmh2-inv-head [data-role="categoryTabs"] button{font-size:14px!important;padding:8px 12px!important;}
}

/* v2.3.17 floor layer under objects */
.dpmh2-obj.layer-floor .sprite{opacity:.92!important;filter:none!important;}
.dpmh2-obj.layer-floor em{opacity:.72!important;font-size:10px!important;}
.dpmh2-obj.layer-floor.is-active-target .sprite,
.dpmh2-obj.layer-floor:hover .sprite{filter:brightness(1.04) drop-shadow(0 0 4px rgba(34,197,94,.28))!important;}


/* v2.3.21 floor layer split
   地板層獨立放在 SVG 網格下方：背景 < 地板 < 網格/牆面 < 家具/擺飾。
   一般編輯時地板不吃點擊，避免地板蓋住家具不好選；切到「地板材質」分類時才可選地板。 */
.dpmh2-bg-dom,.dpmh2-floor-layer,.dpmh2-svg,.dpmh2-layer{position:absolute!important;left:0!important;top:0!important;transform-origin:0 0!important;}
.dpmh2-bg-dom{z-index:0!important;pointer-events:none!important;}
.dpmh2-floor-layer{z-index:1!important;pointer-events:none!important;}
.dpmh2-svg{z-index:2!important;pointer-events:none!important;}
.dpmh2-layer{z-index:3!important;pointer-events:none!important;}
.dpmh2.is-editing.is-floor-editing .dpmh2-floor-layer{pointer-events:auto!important;}
.dpmh2.is-editing:not(.is-floor-editing) .dpmh2-floor-layer .dpmh2-obj{pointer-events:none!important;}
.dpmh2.is-editing.is-floor-editing .dpmh2-floor-layer .dpmh2-obj{pointer-events:auto!important;cursor:grab!important;}
.dpmh2-obj.layer-floor{opacity:.96!important;}
.dpmh2.is-editing:not(.is-floor-editing) .dpmh2-obj.layer-floor .dpmh2-actions{display:none!important;}
.dpmh2.is-editing.is-floor-editing .dpmh2-layer{pointer-events:none!important;}
.dpmh2.is-editing.is-floor-editing .dpmh2-obj.layer-floor:hover .sprite img,
.dpmh2.is-editing.is-floor-editing .dpmh2-obj.layer-floor.sel .sprite img{filter:brightness(1.12) saturate(1.08) drop-shadow(0 0 7px rgba(34,197,94,.55))!important;}


/* v2.3.22 floor edit isolation + clean deselect
   地板材質模式只讓地板層可點；非地板模式地板不吃點擊。
   點擊畫布空白處會由 JS 清空 selected 狀態。 */
.dpmh2.is-editing.is-floor-editing .dpmh2-layer,
.dpmh2.is-editing.is-floor-editing .dpmh2-layer .dpmh2-obj{pointer-events:none!important;}
.dpmh2.is-editing.is-floor-editing .dpmh2-floor-layer{pointer-events:auto!important;}
.dpmh2.is-editing.is-floor-editing .dpmh2-floor-layer .dpmh2-obj.layer-floor{pointer-events:auto!important;cursor:grab!important;}
.dpmh2.is-editing:not(.is-floor-editing) .dpmh2-floor-layer,
.dpmh2.is-editing:not(.is-floor-editing) .dpmh2-floor-layer .dpmh2-obj{pointer-events:none!important;}
.dpmh2.is-editing.is-floor-editing .dpmh2-obj.layer-floor .dpmh2-actions{display:none!important;}
.dpmh2.is-editing.is-floor-editing .dpmh2-obj.layer-floor.sel .dpmh2-actions,
.dpmh2.is-editing.is-floor-editing .dpmh2-obj.layer-floor:hover .dpmh2-actions{display:flex!important;}


/* v2.3.25 edit mode background mask */
.dpmh2-bg-dom::after{
  content:"";
  position:absolute;
  inset:0;
  background:rgba(15,23,42,.30);
  opacity:0;
  pointer-events:none;
  transition:opacity .18s ease;
  z-index:1;
}
.dpmh2.is-editing .dpmh2-bg-dom::after{opacity:1;}
.dpmh2.is-editing .grid.show{opacity:1;}
.dpmh2.is-editing .walls.show{opacity:1;}
.dpmh2.is-editing .dpmh2-obj:hover .sprite,
.dpmh2.is-editing .dpmh2-obj.sel .sprite,
.dpmh2.is-editing .dpmh2-obj.is-active-target .sprite{
  filter:brightness(1.13) drop-shadow(0 0 8px rgba(34,197,94,.62));
}

/* v2.3.28 wall base stack mode
   牆面分類使用側邊平面座標，與地板/一般物件分開管理。 */
.dpmh2.is-editing.is-wall-editing .dpmh2-floor-layer,
.dpmh2.is-editing.is-wall-editing .dpmh2-floor-layer .dpmh2-obj{pointer-events:none!important;}
.dpmh2.is-editing.is-wall-editing .dpmh2-layer{pointer-events:auto!important;}
.dpmh2.is-editing.is-wall-editing .dpmh2-layer .dpmh2-obj{pointer-events:none!important;}
.dpmh2.is-editing.is-wall-editing .dpmh2-layer .dpmh2-obj.is-wall-object{pointer-events:auto!important;cursor:grab!important;}
.dpmh2.is-editing.is-wall-editing .grid{opacity:.22!important;}
.dpmh2.is-editing.is-wall-editing .walls{opacity:1!important;}
.dpmh2.is-editing.is-wall-editing .wallcell{stroke:#2563eb!important;stroke-width:1.4!important;opacity:.9!important;}
.dpmh2-obj.layer-wall_base .sprite img,
.dpmh2-obj.layer-wall_decor .sprite img{filter:drop-shadow(0 2px 5px rgba(15,23,42,.18));}
.dpmh2.is-editing.is-wall-editing .dpmh2-obj.is-wall-object:hover .sprite img,
.dpmh2.is-editing.is-wall-editing .dpmh2-obj.is-wall-object.sel .sprite img{filter:brightness(1.13) saturate(1.08) drop-shadow(0 0 7px rgba(37,99,235,.55)) drop-shadow(0 3px 5px rgba(15,23,42,.18))!important;}
.dpmh2-cell-preview.wall polygon,
.dpmh2-selection-poly.wall{stroke:#2563eb!important;fill:rgba(37,99,235,.18)!important;}

/* v2.3.28 wall base stack: wall-base tiles stay on wall plane and use wall grid preview. */
.dpmh2-obj.is-wall-base-stack .sprite{pointer-events:none;}
.dpmh2-cell-preview.wall polygon{stroke-width:2;stroke-dasharray:4 3;}
/* v2.3.29 full wall renderer */
.dpmh2-obj.is-wall-full{display:block!important;align-items:stretch!important;justify-content:stretch!important;overflow:hidden;pointer-events:auto!important;cursor:pointer!important;margin:0!important;opacity:1!important;}
.dpmh2-obj.is-wall-full .sprite{position:absolute!important;inset:0!important;width:100%!important;height:100%!important;display:block!important;transform:none!important;}
.dpmh2-obj.is-wall-full .sprite img{position:absolute!important;inset:0!important;left:0!important;top:0!important;width:100%!important;height:100%!important;max-width:none!important;max-height:none!important;object-fit:cover!important;object-position:center center!important;transform:none!important;}
.dpmh2-obj.is-wall-full em{display:none!important;}
.dpmh2-obj.is-wall-full .dpmh2-actions{top:8px!important;right:8px!important;}
.dpmh2-card.is-wall-full-card small{color:#2563eb!important;}


/* v2.3.30 material card UI: icon/name/value pill */
.dpmh2{--dpmh2-inv-h:232px!important;}
.dpmh2-items{
  height:calc(var(--dpmh2-inv-h) - 62px)!important;
  padding:12px 14px 28px!important;
  align-items:stretch!important;
  gap:10px!important;
}
.dpmh2-card{
  width:152px!important;
  min-width:152px!important;
  max-width:152px!important;
  height:146px!important;
  padding:10px 10px 12px!important;
  display:flex!important;
  flex-direction:column!important;
  align-items:center!important;
  justify-content:flex-start!important;
  gap:4px!important;
  border:1px solid #d7e2ef!important;
  border-radius:16px!important;
  background:#fff!important;
  text-align:center!important;
  box-shadow:none!important;
}
.dpmh2-card:hover,
.dpmh2-card.is-active{
  border-color:#2563eb!important;
  box-shadow:0 0 0 2px rgba(37,99,235,.12) inset!important;
}
.dpmh2-card .dpmh2-card-img,
.dpmh2-card .dpmh2-card-placeholder{
  width:76px!important;
  height:50px!important;
  min-height:50px!important;
  display:flex!important;
  align-items:center!important;
  justify-content:center!important;
  margin:0 auto 2px!important;
  grid-row:auto!important;
}
.dpmh2-card .dpmh2-card-img img{
  max-width:76px!important;
  max-height:50px!important;
  object-fit:contain!important;
  display:block!important;
}
.dpmh2-card .dpmh2-card-placeholder{
  font-size:24px!important;
  color:#94a3b8!important;
}
.dpmh2-card b{
  display:block!important;
  width:100%!important;
  min-height:32px!important;
  color:#020617!important;
  font-size:18px!important;
  line-height:1.05!important;
  font-weight:900!important;
  letter-spacing:.01em!important;
  white-space:normal!important;
  word-break:keep-all!important;
  overflow:hidden!important;
}
.dpmh2-card small{
  display:inline-flex!important;
  align-items:center!important;
  justify-content:center!important;
  min-height:34px!important;
  margin-top:auto!important;
  padding:7px 14px!important;
  border-radius:999px!important;
  background:#5a311c!important;
  color:#fff!important;
  font-size:14px!important;
  line-height:1!important;
  font-weight:900!important;
  letter-spacing:.03em!important;
  white-space:nowrap!important;
}
.dpmh2-card.is-background small,
.dpmh2-card.is-wall-full-card small{
  background:#2563eb!important;
  color:#fff!important;
}
.dpmh2-card.is-locked{
  opacity:.52!important;
  filter:grayscale(1)!important;
}
.dpmh2-card.is-locked small{
  background:#e5e7eb!important;
  color:#64748b!important;
}
@media(max-width:980px){
  .dpmh2{--dpmh2-inv-h:220px!important;}
  .dpmh2-items{height:calc(var(--dpmh2-inv-h) - 70px)!important;padding:10px 12px 24px!important;}
  .dpmh2-card{width:142px!important;min-width:142px!important;max-width:142px!important;height:136px!important;padding:9px!important;}
  .dpmh2-card b{font-size:17px!important;min-height:30px!important;}
  .dpmh2-card small{font-size:13px!important;min-height:32px!important;padding:7px 12px!important;}
}
@media(max-width:560px){
  .dpmh2{--dpmh2-inv-h:214px!important;}
  .dpmh2-card{width:132px!important;min-width:132px!important;max-width:132px!important;height:130px!important;}
  .dpmh2-card .dpmh2-card-img,.dpmh2-card .dpmh2-card-placeholder{width:68px!important;height:46px!important;min-height:46px!important;}
  .dpmh2-card .dpmh2-card-img img{max-width:68px!important;max-height:46px!important;}
  .dpmh2-card b{font-size:16px!important;}
}
