/* THEME TOKENS */
:root {
  --bg: #f5f6f8;
  --card: #ffffff;
  --text: #111827;
  --muted: #6b7280;
  --accent: #2563eb;
  --border: #e5e7eb;

  --btn-bg: #ffffff;
  --btn-border: #e5e7eb;
  --btn-hover: rgba(37,99,235,.12);

  --pill-bg: #ffffff;
  --pill-border: #e5e7eb;

  --table-row: #f9fafb;
}

[data-theme="dark"] {
  --bg: #0e1116;
  --card: #111827;       /* slate-900-ish */
  --text: #e5e7eb;
  --muted: #9ca3af;
  --accent: #8ab4ff;
  --border: #1f2937;

  --btn-bg: #0f172a;     /* slate-900/blue-900 */
  --btn-border: #334155;
  --btn-hover: rgba(138,180,255,.16);

  --pill-bg: #0f172a;
  --pill-border: #334155;

  --table-row: #0b1220;
}

* { box-sizing: border-box; }
html, body { height: 100%; }
body {
  margin: 0;
  font: 14px/1.4 system-ui, -apple-system, Segoe UI, Roboto, Ubuntu, Cantarell, Noto Sans, Arial, "Apple Color Emoji","Segoe UI Emoji";
  color: var(--text);
  background: var(--bg);
}

/* header */
.bar {
  display: flex; align-items: center; gap: 12px;
  padding: 12px 16px; background: #111216; color: #f5f6f8;
}
[data-theme="dark"] .bar { background: #0b0d11; color: #e5e7eb; }
.bar h1 { font-size: 18px; margin: 0; }
.bar .spacer { flex: 1; }
.bar .link { color: #9ec1ff; text-decoration: none; }

/* theme button visuals */
.themebtn { background: var(--btn-bg); border: 1px solid var(--btn-border); }
.themebtn:hover { box-shadow: 0 0 0 2px var(--btn-hover) inset; }
#themeToggle .moon { display: none; }
[data-theme="dark"] #themeToggle .sun { display: none; }
[data-theme="dark"] #themeToggle .moon { display: inline-block; }

/* layout:
   Top row spans full width for upload+export;
   Below that, editor (sidebar) + viewer (equal height).
*/
.layout-areas {
  display: grid;
  grid-template-columns: 320px 1fr; /* editor sidebar width */
  grid-template-rows: auto minmax(600px, 65vh);
  grid-template-areas:
    "top top"
    "editor viewer";
  gap: 12px;
  padding: 12px;
}

.top-row {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 12px;
}

.card {
  background: var(--card);
  border: 1px solid var(--border);
  border-radius: 10px;
  padding: 12px;
  box-shadow: 0 1px 2px rgba(0,0,0,.04);
}

/* rows / controls */
.row { display: flex; align-items: center; gap: 8px; margin: 8px 0; }
.wrap { flex-wrap: wrap; }

/* viewer/editor equal heights */
.viewer, .editor {
  position: relative;
  height: 100%;
  min-height: 600px;
}
.viewer canvas { width: 100%; height: 100%; display: block; }
.viewer .overlay {
  position: absolute; right: 12px; top: 12px;
  display: flex; gap: 8px;
}
.viewer .overlay button { padding: 6px 10px; }

/* editor panel */
.side-group + .side-group { margin-top: 12px; border-top: 1px dashed var(--border); padding-top: 12px; }
.side-title { font-weight: 600; color: var(--text); margin-bottom: 8px; }
.tool-row { display: flex; align-items: center; gap: 8px; margin: 8px 0; flex-wrap: wrap; }
.side-label { color: var(--muted); min-width: 44px; }

/* buttons */
.iconbtn {
  border: 1px solid var(--btn-border);
  background: var(--btn-bg);
  height: 34px; min-width: 34px;
  display: inline-flex; align-items: center; justify-content: center;
  padding: 0 8px;
  border-radius: 8px;
  cursor: pointer;
  color: var(--text);
}
.iconbtn svg { display: block; fill: currentColor; }
.iconbtn.active, .iconbtn[aria-pressed="true"], .iconbtn:hover {
  border-color: var(--accent);
  box-shadow: 0 0 0 2px var(--btn-hover) inset;
}

/* Pencil toggle */
.iconbtn.pencil.active,
.iconbtn.pencil[aria-pressed="true"] {
  background: var(--btn-hover);
  border-color: var(--accent);
}
.pencil-label { margin-left: 6px; font-weight: 600; }

/* misc buttons */
.mini { padding: 4px 8px; border: 1px solid var(--btn-border); background: var(--btn-bg); border-radius: 6px; cursor: pointer; color: var(--text); }
.toggle { display: inline-flex; align-items: center; gap: 6px; color: var(--text); }
.toggle.small { font-size: 12px; color: var(--muted); }
.mono { font-variant-numeric: tabular-nums; padding: 2px 6px; border: 1px solid var(--border); border-radius: 6px; }

/* palette list */
#paletteList {
  max-height: 360px;
  overflow: auto;
  border: 1px solid var(--border);
  border-radius: 8px;
  padding: 6px;
  background: var(--card);
}
.block-pill {
  display: inline-flex; align-items: center; gap: 8px;
  border: 1px solid var(--pill-border); border-radius: 999px;
  padding: 3px 8px; margin: 4px; background: var(--pill-bg);
}
.block-pill .swatch {
  width: 14px; height: 14px; border-radius: 4px; border: 1px solid var(--border);
}

/* table */
.table { width: 100%; table-layout: fixed; border-collapse: collapse; color: var(--text); }
.table th, .table td { padding: 6px 8px; border-bottom: 1px solid var(--border); }
.table tbody tr:nth-child(odd) { background: var(--table-row); }
.kbd { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; background: rgba(0,0,0,.06); padding: 2px 6px; border-radius: 6px; color: var(--text); }
[data-theme="dark"] .kbd { background: rgba(255,255,255,.08); }

/* inputs */
.hint { color: var(--muted); font-size: 12px; }
input[type="color"] { width: 36px; height: 28px; padding: 0; border: 1px solid var(--border); border-radius: 6px; background: var(--card); }
input, select, button { font: inherit; color: var(--text); background: var(--card); border-color: var(--border); }

/* a11y helper */
.visually-hidden {
  position: absolute !important;
  height: 1px; width: 1px;
  overflow: hidden; clip: rect(1px, 1px, 1px, 1px);
  white-space: nowrap; border: 0; padding: 0; margin: 0;
}

/* responsive */
@media (max-width: 1100px) {
  .layout-areas {
    grid-template-columns: 1fr;
    grid-template-rows: auto auto minmax(520px,55vh) minmax(520px,55vh);
    grid-template-areas:
      "top"
      "top"
      "editor"
      "viewer";
  }
  .top-row { grid-template-columns: 1fr; }
  #paletteList { max-height: 260px; }
}
/* --- Progress --- */
.progress-wrap {
  margin-top: 10px;
  width: 100%;
  height: 10px;
  border: 1px solid var(--btn-border);
  background: linear-gradient(0deg, rgba(0,0,0,.05), rgba(255,255,255,.05));
  border-radius: 999px;
  overflow: hidden;
}
[data-theme="dark"] .progress-wrap {
  background: linear-gradient(0deg, rgba(255,255,255,.06), rgba(255,255,255,.02));
}
.progress-bar {
  height: 100%;
  width: 0%;
  background: var(--accent);
  transition: width .08s linear;
}
.progress-text {
  margin-top: 6px;
  font-size: 12px;
  color: var(--muted);
}
/* Materials box: scroll instead of expanding */
#materials {
  max-height: 320px;          /* adjust as you like */
  overflow: auto;
  padding: 6px;
  border: 1px solid var(--border);
  border-radius: 12px;
  background: var(--card);
}

/* Keep the materials table header visible while scrolling */
#materials .table thead th {
  position: sticky;
  top: 0;
  z-index: 1;
  background: var(--card);
  /* if you use a different table header bg in dark mode, mirror it here */
}
