:root{
  --bg:#f5f7fb; --panel:#ffffff; --ink:#0f172a; --muted:#6b7280;
  --line:#e5e7eb; --accent:#2563eb; --danger:#ef4444;
}
#gpsp-root{font-family:Inter,ui-sans-serif,system-ui,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans; color:var(--ink);}
.brand{position:absolute;top:10px;left:14px;display:flex;gap:10px;align-items:center;z-index:5}
.brand img{height:22px}
.signature{position:absolute;right:18px;bottom:10px;color:#64748b;font-size:12px}
.gpsp{position:relative;display:grid;grid-template-columns:1fr 360px;gap:14px;padding:16px;background:var(--bg);min-height:calc(100vh - 32px);max-width:1400px;margin:0 auto;}
.canvasWrap{position:relative;background:var(--panel);border:1px solid var(--line);border-radius:16px;padding:16px;display:flex;align-items:center;justify-content:center;box-shadow:0 8px 24px rgba(15,23,42,.06)}
.workarea{position:relative;background:#f3f6fb;border-radius:12px;border:1px dashed #cbd5e1;overflow:auto;display:flex;align-items:center;justify-content:center;width:100%;height:calc(100vh - 220px);min-height:560px}
.centerBox{position:relative;display:flex;align-items:center;justify-content:center;width:100%;height:100%}
#zoomWrap{transform-origin:0 0;position:absolute;left:50%;top:50%;}
.sidebar{background:var(--panel);border:1px solid var(--line);border-radius:16px;display:flex;flex-direction:column;box-shadow:0 8px 24px rgba(15,23,42,.06)}
.tabs{display:flex;gap:8px;padding:10px;border-bottom:1px solid var(--line);flex-wrap:wrap}
.tab{background:#f1f5f9;border:1px solid var(--line);color:var(--ink);border-radius:999px;padding:7px 12px;font-size:12px;cursor:pointer}
.tab.active{border-color:var(--accent); box-shadow:0 0 0 2px rgba(37,99,235,.15) inset}
.panel{padding:14px;overflow:auto;max-height:calc(100vh - 180px)}
.listRow{display:grid;grid-template-columns:1fr auto auto auto;gap:8px;align-items:center;padding:8px 0;border-bottom:1px dashed #e5e7eb}
.input,.select,textarea{width:100%;background:#f9fafb;border:1px solid var(--line);color:var(--ink);border-radius:10px;padding:10px}
.button{background:#f9fafb;border:1px solid var(--line);color:var(--ink);border-radius:10px;padding:8px 12px;font-size:12px;cursor:pointer}
.button.primary{border-color:var(--accent); background:#eef2ff}
.button.danger{border-color:var(--danger);color:#b91c1c;background:#fff5f5}
.badge{background:#f1f5f9;border:1px solid var(--line);border-radius:999px;padding:5px 10px;font-size:11px;color:#64748b}
.selbox{position:absolute;border:1px dashed var(--accent);pointer-events:none}
.handle{position:absolute;width:14px;height:14px;border:2px solid var(--accent);background:#fff;border-radius:50%;pointer-events:auto;box-shadow:0 1px 4px rgba(0,0,0,.12)}
.handle.rot{cursor:grab;top:-28px}
.gridThumbs{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}
.thumb{background:#f1f5f9;border:1px solid var(--line);border-radius:10px;aspect-ratio:1/1;display:flex;align-items:center;justify-content:center;font-size:11px;color:#64748b;cursor:pointer;overflow:hidden}
.thumb img{width:100%;height:100%;object-fit:cover}
.range{width:100%}

.netBanner{position:absolute;right:14px;top:10px;background:#fee2e2;color:#7f1d1d;border:1px solid #fecaca;border-radius:10px;padding:6px 10px;font-size:12px;display:none;z-index:6}

/* ---- v0.7.3 additions ---- */
.centerBox{position:relative;width:100%;height:100%;display:flex;align-items:center;justify-content:center}
#zoomWrap{position:absolute;will-change:transform;left:50%;top:50%}
.workarea{position:relative;overflow:auto}
.selbox,.handle{position:absolute;z-index:10}
.handle{width:16px;height:16px}
.handle.rot{top:-32px}

/* --- v0.7.3.1 centering harden --- */
.workarea{position:relative;overflow:auto;display:block;min-height:60vh}
#zoomWrap{position:absolute;left:50%;top:50%;transform-origin:50% 50%;will-change:transform,left,top}
.selbox,.handle{position:absolute;z-index:10}
