:root{
  --bg:#0a0c10; --bg-grad:radial-gradient(1200px 600px at 80% -10%,#13202a 0%,#0a0c10 55%);
  --panel:#14181e; --panel-hi:#1a1f27; --raise:#1d232c;
  --line:#262d37; --line-soft:rgba(255,255,255,.055);
  --txt:#d8dfe6; --txt-strong:#f0f4f8; --dim:#7c8893; --faint:#525d68;
  --accent:#39c0d4; --accent-soft:rgba(57,192,212,.14); --accent-line:rgba(57,192,212,.45);
  --amber:#e0a458; --danger:#e0605f;
  --r:14px; --r-sm:8px;
  --shadow:0 10px 30px -12px rgba(0,0,0,.65), 0 2px 6px -2px rgba(0,0,0,.5);
  --disp:'Space Grotesk',system-ui,sans-serif; --ui:'Inter',system-ui,sans-serif;
}
*{box-sizing:border-box;margin:0;padding:0}
body{background:var(--bg);background-image:var(--bg-grad);background-attachment:fixed;color:var(--txt);font-family:var(--ui);padding:22px 26px 60px;-webkit-font-smoothing:antialiased}

/* ---------- top bar ---------- */
.topbar{display:flex;align-items:center;gap:16px;flex-wrap:wrap;margin-bottom:8px}
.brand{display:flex;align-items:center;gap:9px;padding-right:16px;border-right:1px solid var(--line)}
.brand svg{width:26px;height:26px}
.brand b{font-family:var(--disp);font-weight:700;font-size:16px;letter-spacing:.5px;color:var(--txt-strong)}
.brand span{font-size:11px;color:var(--dim);letter-spacing:1.5px;text-transform:uppercase}
#title{font-family:var(--disp);font-size:24px;font-weight:600;background:transparent;border:none;color:var(--txt-strong);padding:6px 4px;min-width:220px;border-bottom:2px solid transparent;transition:border-color .2s}
#title:hover{border-bottom-color:var(--line)}
#title:focus{outline:none;border-bottom-color:var(--accent)}
.spacer{flex:1}

.chip{display:inline-flex;align-items:center;gap:7px;background:var(--panel);border:1px solid var(--line);border-radius:999px;padding:7px 14px;font-size:12.5px;font-weight:500;color:var(--dim)}
.chip b{font-family:var(--disp);font-variant-numeric:tabular-nums;color:var(--amber);font-size:14px}
.save-dot{width:7px;height:7px;border-radius:50%;background:#3ad17f;box-shadow:0 0 0 3px rgba(58,209,127,.18);transition:opacity .3s}
.chip.saving .save-dot{background:var(--amber);box-shadow:0 0 0 3px rgba(224,164,88,.18)}
.chip.warn{color:var(--danger);border-color:rgba(224,96,95,.4)}
.chip.warn .save-dot{background:var(--danger);box-shadow:0 0 0 3px rgba(224,96,95,.2)}

.btn{font-family:var(--ui);background:var(--panel);color:var(--txt);border:1px solid var(--line);border-radius:var(--r-sm);padding:8px 13px;cursor:pointer;font-size:13px;font-weight:500;display:inline-flex;align-items:center;gap:7px;transition:.16s}
.btn svg{width:15px;height:15px;opacity:.8}
.btn:hover{background:var(--panel-hi);border-color:var(--accent-line);color:var(--txt-strong);transform:translateY(-1px)}
.btn.primary{background:var(--accent-soft);border-color:var(--accent-line);color:var(--accent)}
.btn.ghost{background:transparent;border-color:transparent;color:var(--dim)}
.btn.ghost:hover{color:var(--danger);background:rgba(224,96,95,.08)}
.toolgroup{display:flex;gap:8px;flex-wrap:wrap}
.grid-ctl{display:flex;align-items:center;gap:7px;font-size:12px;color:var(--dim)}
.grid-ctl select{background:var(--panel);color:var(--txt);border:1px solid var(--line);border-radius:var(--r-sm);padding:7px 9px;font-size:13px;cursor:pointer;font-family:var(--ui)}

.hint{color:var(--faint);font-size:12px;margin:16px 0 22px;max-width:760px;line-height:1.5}

/* ---------- board ---------- */
.board{display:grid;grid-template-columns:repeat(var(--cols,4),1fr);gap:20px}
@media(max-width:1280px){.board{grid-template-columns:repeat(min(var(--cols,4),3),1fr)}}
@media(max-width:980px){.board{grid-template-columns:repeat(min(var(--cols,4),2),1fr)}}
@media(max-width:640px){.board{grid-template-columns:1fr}}

.card{position:relative;background:linear-gradient(180deg,var(--panel-hi),var(--panel));border:1px solid var(--line);border-radius:var(--r);padding:13px;box-shadow:var(--shadow);transition:border-color .18s,transform .18s,box-shadow .18s}
.card::before{content:"";position:absolute;inset:0;border-radius:var(--r);pointer-events:none;box-shadow:inset 0 1px 0 var(--line-soft)}
.card:hover{border-color:#33404d;transform:translateY(-2px);box-shadow:0 16px 40px -14px rgba(0,0,0,.7)}
.card.dragging{opacity:.45;transform:scale(.98)}
.card.dragover{border-color:var(--accent-line);box-shadow:0 0 0 2px var(--accent-soft)}

.chead{display:flex;align-items:center;gap:9px;margin-bottom:11px}
.badge{font-family:var(--disp);font-weight:700;font-size:13px;font-variant-numeric:tabular-nums;color:var(--accent);background:var(--accent-soft);border:1px solid var(--accent-line);border-radius:7px;min-width:30px;height:26px;display:flex;align-items:center;justify-content:center;cursor:grab}
.badge:active{cursor:grabbing}
.clabel{font-family:var(--disp);font-size:11.5px;font-weight:600;letter-spacing:1.2px;text-transform:uppercase;color:var(--dim)}
.ops{margin-left:auto;display:flex;gap:2px;opacity:0;transition:opacity .16s}
.card:hover .ops{opacity:1}
.ops button{background:transparent;border:none;color:var(--faint);border-radius:6px;width:27px;height:27px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:.14s}
.ops button svg{width:15px;height:15px}
.ops button:hover{background:var(--raise);color:var(--txt-strong)}
.ops button.del:hover{color:var(--danger);background:rgba(224,96,95,.1)}

/* ---------- canvas frame ---------- */
.frame{position:relative;border-radius:var(--r-sm);overflow:hidden;border:1px solid var(--line);background:#070a0d}
canvas{display:block;width:100%;aspect-ratio:16/9;cursor:crosshair;touch-action:none;position:relative;z-index:2}
.frame.erase canvas{cursor:url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='26' height='26' viewBox='0 0 24 24'><path d='M5 14l6-6 7 7-4 4H9z' fill='%23fff' stroke='%23111' stroke-width='1.4' stroke-linejoin='round'/><path d='M9 19h10' stroke='%23111' stroke-width='1.4' stroke-linecap='round'/></svg>") 6 18, cell}

/* reference photo layer: behind the ink canvas by default, optionally over it */
.frame .photo{position:absolute;left:0;top:0;width:100%;height:auto;z-index:1;pointer-events:none;user-select:none;-webkit-user-drag:none}
.frame.photofront .photo{z-index:4}
.frame.editphoto canvas{pointer-events:none}
.frame.editphoto .photo{pointer-events:auto;outline:2px dashed var(--accent);outline-offset:-1px;cursor:move;z-index:5}
.phandle{position:absolute;width:15px;height:15px;margin:-8px 0 0 -8px;border:2px solid var(--accent);background:var(--bg);border-radius:3px;z-index:6;cursor:nwse-resize;pointer-events:auto}

.overlay{position:absolute;inset:0;pointer-events:none;z-index:3}
.overlay .ln{position:absolute;background:rgba(255,255,255,.06)}
.overlay .v1{left:33.33%;top:0;bottom:0;width:1px}.overlay .v2{left:66.66%;top:0;bottom:0;width:1px}
.overlay .h1{top:33.33%;left:0;right:0;height:1px}.overlay .h2{top:66.66%;left:0;right:0;height:1px}
.overlay .safe{position:absolute;inset:7% 6%;border:1px dashed rgba(255,255,255,.07);border-radius:3px}
.placeholder{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;gap:8px;color:var(--faint);font-size:12.5px;letter-spacing:.3px;transition:opacity .2s;pointer-events:none;z-index:3}
.placeholder svg{width:16px;height:16px}
.frame.inked .placeholder,.frame.hasphoto .placeholder{opacity:0}

/* reference-photo control bar (shown only when a panel has a photo) */
.photobar{display:flex;align-items:center;gap:8px;margin-top:10px;flex-wrap:wrap}
.pbtn{background:var(--panel);border:1px solid var(--line);color:var(--dim);border-radius:7px;padding:5px 10px;font-size:11.5px;font-family:var(--ui);font-weight:500;cursor:pointer;display:inline-flex;align-items:center;gap:6px;transition:.14s}
.pbtn svg{width:13px;height:13px}
.pbtn:hover{border-color:var(--accent-line);color:var(--txt-strong)}
.pbtn.on{background:var(--accent-soft);border-color:var(--accent-line);color:var(--accent)}
.pbtn.del{margin-left:auto;padding:5px 8px}
.pbtn.del:hover{color:var(--danger);border-color:rgba(224,96,95,.4);background:rgba(224,96,95,.08)}
.popacity{display:flex;align-items:center;gap:7px;font-size:11px;color:var(--faint)}
.popacity input[type=range]{width:64px}

/* ---------- draw toolbar ---------- */
.tools{display:flex;align-items:center;gap:10px;margin:11px 0 12px;flex-wrap:wrap}
.seg{display:flex;background:var(--panel);border:1px solid var(--line);border-radius:8px;padding:2px}
.seg button{background:transparent;border:none;color:var(--dim);font-size:12px;font-weight:500;padding:5px 11px;border-radius:6px;cursor:pointer;display:flex;align-items:center;gap:6px;transition:.14s;font-family:var(--ui)}
.seg button svg{width:14px;height:14px}
.seg button.active{background:var(--accent-soft);color:var(--accent)}
.swatches{display:flex;gap:5px}
.swatch{width:18px;height:18px;border-radius:50%;border:2px solid transparent;cursor:pointer;transition:transform .12s}
.swatch:hover{transform:scale(1.15)}
.swatch.active{border-color:var(--txt-strong);box-shadow:0 0 0 2px var(--bg)}
.brush{display:flex;align-items:center;gap:8px;margin-left:auto;color:var(--faint);font-size:11px}
.brush .dot{border-radius:50%;background:var(--txt);flex:none}
input[type=range]{-webkit-appearance:none;appearance:none;width:74px;height:4px;border-radius:3px;background:var(--line);cursor:pointer}
input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:13px;height:13px;border-radius:50%;background:var(--accent);border:2px solid var(--bg);cursor:pointer}
input[type=range]::-moz-range-thumb{width:13px;height:13px;border-radius:50%;background:var(--accent);border:2px solid var(--bg);cursor:pointer}

/* ---------- meta fields ---------- */
.meta{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.field{background:var(--panel);border:1px solid var(--line);border-radius:8px;padding:6px 9px;display:flex;align-items:center;gap:8px;transition:border-color .15s}
.field:focus-within{border-color:var(--accent-line)}
.field svg{width:14px;height:14px;color:var(--faint);flex:none}
.field .col{display:flex;flex-direction:column;min-width:0;flex:1}
.field label{font-size:9px;font-weight:600;letter-spacing:.8px;text-transform:uppercase;color:var(--faint)}
.field input,.field select{background:transparent;border:none;color:var(--txt-strong);font-size:13px;font-family:var(--ui);font-weight:500;padding:1px 0;width:100%}
.field input:focus,.field select:focus{outline:none}
.field select{cursor:pointer}
.field option{background:var(--panel)}

textarea{width:100%;background:var(--panel);border:1px solid var(--line);border-radius:8px;color:var(--txt);padding:8px 10px;font-size:12.5px;font-family:var(--ui);line-height:1.45;margin-top:8px;resize:vertical;min-height:46px;transition:border-color .15s}
textarea:focus{outline:none;border-color:var(--accent-line)}
textarea::placeholder{color:var(--faint)}

footer{margin-top:32px;color:var(--faint);font-size:11px;text-align:center;letter-spacing:.5px}

/* ---------- themed dialog (custom confirm / alert) ---------- */
.modal{position:fixed;inset:0;z-index:1000;display:none;align-items:center;justify-content:center;padding:20px;background:rgba(6,8,11,.66);-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px)}
.modal.open{display:flex;animation:mfade .15s ease}
@keyframes mfade{from{opacity:0}to{opacity:1}}
.modal-card{width:min(430px,100%);background:linear-gradient(180deg,var(--panel-hi),var(--panel));border:1px solid var(--line);border-radius:var(--r);padding:22px 22px 18px;box-shadow:0 24px 60px -20px rgba(0,0,0,.8),inset 0 1px 0 var(--line-soft);animation:mpop .17s cubic-bezier(.2,.8,.3,1)}
@keyframes mpop{from{transform:translateY(8px) scale(.98);opacity:0}to{transform:none;opacity:1}}
.modal-card h2{font-family:var(--disp);font-size:17px;font-weight:600;color:var(--txt-strong);margin-bottom:9px}
.modal-card p{font-size:13.5px;line-height:1.55;color:var(--dim);margin-bottom:20px;white-space:pre-line}
.modal-actions{display:flex;justify-content:flex-end;gap:10px}
.modal-actions .btn{padding:8px 16px}
.modal-actions .btn:hover{transform:none}
.btn.danger{background:rgba(224,96,95,.14);border-color:rgba(224,96,95,.5);color:var(--danger)}
.btn.danger:hover{background:rgba(224,96,95,.24);border-color:var(--danger);color:#fff}
.modal.alert .modal-actions .btn#modalCancel{display:none}

/* ---------- print masthead ---------- */
.print-masthead{display:none;justify-content:space-between;align-items:flex-end;border-bottom:2px solid #000;padding:0 0 8px;margin:0 0 14px}
.print-masthead h1{font-family:var(--disp);font-size:26px}
.print-masthead .pm-r{text-align:right;font-size:12px;color:#444;line-height:1.5}

@media print{
  body{background:#fff;color:#000;padding:0;-webkit-print-color-adjust:exact;print-color-adjust:exact}
  .topbar,.tools,.ops,.hint,.placeholder,.overlay,.grid-ctl,.brush,.swatches,.seg,.photobar,.phandle,.modal,footer{display:none!important}
  .frame .photo{outline:none!important}
  .board{grid-template-columns:1fr 1fr;gap:12px}
  .card{border:1px solid #bbb;background:#fff;box-shadow:none;page-break-inside:avoid;transform:none}
  .card::before{display:none}
  .badge{color:#000;background:#eee;border-color:#ccc}
  .clabel{color:#444}
  /* keep the frame's dark background in print (forced via color-adjust) so the
     light/colored strokes render in their true colors, exactly as on screen. */
  .frame{border:1px solid #555;background:#070a0d;-webkit-print-color-adjust:exact;print-color-adjust:exact}
  canvas{filter:none}
  .field{border:1px solid #ddd;background:#fafafa}
  .field label{color:#777}.field input,.field select{color:#000}
  textarea{border:1px solid #ddd;color:#000;background:#fff}
  .print-masthead{display:flex!important}
}
