/* Stonewall Print Markup — app.css (dark, dlcmap-family) */
* { box-sizing: border-box; }
:root {
  --bg:#0e1117; --panel:#151b23; --panel2:#1b2330; --line:#2a3444;
  --txt:#dfe6ee; --dim:#93a1b3; --acc:#4f8cff; --ok:#3ecf6e; --warn:#f0a22e; --bad:#e5484d;
  --red:#e11e3d; --font: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
}
html,body { margin:0; height:100%; background:var(--bg); color:var(--txt); font-family:var(--font); font-size:14px; }
#app { display:flex; flex-direction:column; height:100vh; }

/* ---------- top bar ---------- */
.topbar { display:flex; align-items:center; gap:8px; padding:8px 14px; background:var(--panel);
  border-bottom:1px solid var(--line); flex-wrap:wrap; }
.topbar .brand { font-weight:700; color:var(--acc); }
.topbar .sep { color:var(--dim); margin:0 2px; }
.tbtn { background:var(--panel2); color:var(--txt); border:1px solid var(--line); border-radius:7px;
  padding:5px 10px; font-size:12.5px; cursor:pointer; }
.tbtn:hover { border-color:var(--acc); }
.tbtn.on { background:var(--acc); color:#fff; border-color:var(--acc); }
.tbtn.danger { color:var(--bad); border-color:var(--bad); }
.tbtn.primary { background:var(--acc); color:#fff; }
select.tbtn, input.tbtn { background:var(--panel2); color:var(--txt); border:1px solid var(--line); border-radius:7px; padding:5px 8px; }
input[type=text], input[type=password], input[type=number], input[type=search] {
  background:#0d1218; color:var(--txt); border:1px solid var(--line); border-radius:7px; padding:7px 9px; font-size:13.5px; }
input:focus, select:focus { outline:none; border-color:var(--acc); }
#status { font-size:12px; color:var(--dim); }
#status.err { color:var(--bad); }
#status.ok { color:var(--ok); }

/* ---------- login ---------- */
.login-wrap { display:flex; flex-direction:column; align-items:center; justify-content:center; min-height:100vh;
  background:linear-gradient(180deg,#10151d,#0a0d12); padding:40px 0; }
.login-card { background:var(--panel); border:1px solid var(--line); border-radius:14px; padding:26px 30px; width:min(400px,92vw); }
.login-card h1 { margin:0 0 4px; font-size:19px; color:var(--txt); }
.login-card p { margin:0 0 18px; color:var(--dim); font-size:12.5px; }
.login-card label { display:block; font-size:12px; color:var(--dim); margin:8px 0 4px; }
.login-card input { width:100%; }
.login-card .lerr { color:var(--bad); font-size:12.5px; margin:8px 0 0; display:none; }
.login-card .tbtn.primary { width:100%; padding:9px 0; margin-top:14px; font-size:14px; }

/* ---------- project list ---------- */
.prow { background:var(--panel2); border:1px solid var(--line); border-radius:10px; padding:10px 14px; cursor:pointer; }
.prow:hover { border-color:var(--acc); }
.prow .nm { font-size:14.5px; font-weight:600; color:var(--txt); }
.prow .mt { font-size:12px; color:var(--dim); margin-top:3px; }
.prow .badges { display:inline-flex; gap:6px; margin-top:6px; }
.badge { background:var(--panel2); color:var(--dim); border:1px solid var(--line); border-radius:20px; padding:1px 9px; font-size:11px; }
.badge.ok { color:var(--ok); border-color:var(--ok); }

/* ---------- viewer ---------- */
.viewer { flex:1; display:flex; flex-direction:row; }
.sidebar { width:170px; background:var(--panel); border-right:1px solid var(--line); overflow:auto; padding:8px; }
.sidebar .sp { font-size:11.5px; color:var(--dim); text-transform:uppercase; letter-spacing:.4px; margin:6px 0 8px; }
.strip { display:grid; gap:6px; }
.thumb { border:1px solid var(--line); border-radius:6px; padding:2px; cursor:pointer; position:relative; }
.thumb.on { border-color:var(--acc); box-shadow:0 0 0 1px var(--acc); }
.thumb img { display:block; width:100%; height:auto; border-radius:4px; }
.thumb .pn { position:absolute; top:1px; left:3px; font-size:10px; color:#fff; background:rgba(0,0,0,.55); border-radius:4px; padding:0 4px; }
.stage { flex:1; background:#141a22; position:relative; overflow:hidden; }
.stage .page-canvas { position:absolute; inset:0; }
.stage .page-canvas > svg.page-svg { position:absolute; }

/* drawing layer */
.page-svg { overflow:visible; }
.shape-pen { stroke-width:2; fill:none; stroke-linecap:round; stroke-linejoin:round; vector-effect:non-scaling-stroke; }
.shape-line { stroke-width:2; fill:none; vector-effect:non-scaling-stroke; }
.shape-arrow { stroke-width:2; fill:none; vector-effect:non-scaling-stroke; }
.shape-rect { stroke-width:2; fill:none; vector-effect:non-scaling-stroke; }
.shape-ellipse { stroke-width:2; fill:none; vector-effect:non-scaling-stroke; }
.shape-text { font-size:12px; fill:var(--red); }
.pin { cursor:pointer; }
.pin-outer { fill:none; stroke:var(--red); stroke-width:2; }
.pin-inner { fill:#fff; stroke:var(--red); stroke-width:1; }
.pin-label { font-size:9.5px; fill:var(--red); pointer-events:none; }

/* selection handles */
.sel { stroke:#4fb3ff; stroke-width:1; stroke-dasharray:4 3; fill:none; pointer-events:none; }
.handle { fill:#4fb3ff; stroke:#fff; }
.selbox { stroke:#4fb3ff; stroke-width:1; stroke-dasharray:6 4; fill:rgba(79,179,255,.08); pointer-events:none; }

/* bottom status bar */
.sbar { display:flex; align-items:center; gap:10px; padding:5px 14px; background:var(--panel);
  border-top:1px solid var(--line); font-size:12.5px; color:var(--dim); }
.sbar b { color:var(--txt); }
.sbar .save-state { color:var(--ok); }

/* ---------- property card ---------- */
.dcard { position:absolute; right:0; top:0; width:290px; max-height:100%; overflow:auto; background:var(--panel);
  border:1px solid var(--line); border-radius:10px; padding:14px; box-shadow:0 6px 22px rgba(0,0,0,.5); }
.dcard h3 { margin:0 0 6px; font-size:14px; color:var(--txt); }
.dcard .sub { font-size:11.5px; color:var(--dim); margin:0 0 10px; }
.dcard .row { display:flex; align-items:center; gap:8px; margin:4px 0; }
.dcard .row label { font-size:11.5px; color:var(--dim); width:92px; }
.dcard .row input, .dcard .row select { flex:1; min-width:0; font-size:12.5px; }
.dcard .row textarea { flex:1; min-width:0; background:#0d1218; color:var(--txt); border:1px solid var(--line);
  border-radius:7px; padding:6px; font-size:12.5px; font-family:inherit; }
.dcard .statuses { display:flex; gap:6px; flex-wrap:wrap; margin:6px 0 10px; }
.st-btn { border:1px solid var(--line); border-radius:20px; padding:4px 11px; font-size:11.5px; background:var(--panel2); color:var(--txt); cursor:pointer; }
.st-btn.on { background:var(--acc); color:#fff; border-color:var(--acc); }
.dcard .foot { display:flex; gap:8px; margin-top:10px; }
.dcard .del { color:var(--bad); border-color:var(--bad); }
.dcard .close-x { float:right; cursor:pointer; color:var(--dim); font-size:16px; line-height:1; }
.dcard .tot { text-align:right; font-size:12px; color:var(--dim); font-variant-numeric:tabular-nums; }

/* ---------- users/admin modal ---------- */
.overlay { position:fixed; inset:0; background:rgba(0,0,0,.55); display:flex; align-items:center; justify-content:center; z-index:50; }
.modal { width:min(560px,94vw); max-height:86vh; overflow:auto; background:var(--panel); border:1px solid var(--line); border-radius:14px; padding:18px 22px; }
.modal h2 { margin:0 0 12px; font-size:16px; }
.modal .mrow { display:flex; align-items:center; gap:8px; padding:8px 10px; border:1px solid var(--line); border-radius:8px; margin-bottom:8px; background:var(--panel2); }
.modal .mrow .nm { font-weight:600; }
.modal .mrow .rl { color:var(--dim); font-size:11.5px; }