:root {
  color-scheme: light dark;

  /* Palette matched to digital.medpark.md (teal / gray) */
  --bg: #f9fafb;
  --panel-bg: #ffffff;
  --border: #e5e7eb;
  --input-border: #d1d5db;
  --text: #111827;
  --text-label: #374151;
  --text-muted: #6b7280;

  --accent: #0d9488;
  --accent-hover: #0f766e;
  --accent-contrast: #ffffff;
  --accent-soft-bg: #f0fdfa;
  --accent-soft-border: #99f6e4;

  --danger: #b91c1c;
  --danger-bg: #fef2f2;
  --danger-border: #fecaca;

  --warn: #b45309;
  --warn-bg: #fffbeb;
  --warn-border: #fde68a;

  --radius-lg: 0.75rem;
  --radius-md: 0.5rem;

  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
}

@media (prefers-color-scheme: dark) {
  :root {
    --bg: #0f1115;
    --panel-bg: #1a1d23;
    --border: #2c3038;
    --input-border: #3a3f49;
    --text: #e7e9ec;
    --text-label: #cbd2db;
    --text-muted: #9aa1ac;
    --accent: #14b8a6;
    --accent-hover: #2dd4bf;
    --accent-contrast: #06201c;
    --accent-soft-bg: #0d2b28;
    --accent-soft-border: #115e56;
    --danger: #f87171;
    --danger-bg: #2a1414;
    --danger-border: #7f1d1d;
    --warn: #fbbf24;
    --warn-bg: #2a2110;
    --warn-border: #78350f;
  }
}

* { box-sizing: border-box; }

body {
  margin: 0;
  background: var(--bg);
  color: var(--text);
}

.topbar {
  background: var(--accent);
  color: #fff;
  padding: 1rem 1.5rem;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
  flex-wrap: wrap;
}
.topbar h1 { margin: 0; font-size: 1.125rem; font-weight: 600; }
.subtitle { margin: 0.25rem 0 0; color: var(--accent-soft-border); font-size: 0.8125rem; }
.lang-picker { display: flex; align-items: center; gap: 0.4rem; font-size: 0.8125rem; color: var(--accent-soft-border); }
.lang-picker select {
  font: inherit; font-size: 0.8125rem;
  padding: 0.3rem 0.5rem; border-radius: var(--radius-md);
  border: 1px solid rgb(255 255 255 / 0.35);
  background: rgb(255 255 255 / 0.12); color: #fff;
}
.lang-picker select option { color: #111827; background: #fff; }

.page {
  max-width: 84rem;
  margin: 0 auto;
  padding: 1.5rem;
  display: flex;
  flex-direction: column;
  gap: 1rem;
}

.panel {
  background: var(--panel-bg);
  border: 1px solid var(--border);
  border-radius: var(--radius-lg);
  box-shadow: 0 1px 2px rgb(0 0 0 / 0.05);
  padding: 1.25rem;
  display: flex;
  flex-direction: column;
  gap: 0.85rem;
}

.panel-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.75rem;
  flex-wrap: wrap;
}
.panel-header h2 { margin: 0; font-size: 1rem; font-weight: 600; }
.hint-inline { font-size: 0.78rem; color: var(--text-muted); }

/* ---------- buttons / inputs ---------- */
.btn {
  font: inherit;
  font-weight: 600;
  font-size: 0.875rem;
  padding: 0.55rem 1rem;
  border-radius: var(--radius-md);
  border: 1px solid transparent;
  cursor: pointer;
  background: var(--accent);
  color: var(--accent-contrast);
}
.btn:hover:not(:disabled) { background: var(--accent-hover); }
.btn:disabled { opacity: 0.5; cursor: not-allowed; }
.btn-ghost { background: var(--panel-bg); color: var(--text-label); border-color: var(--input-border); }
.btn-ghost:hover:not(:disabled) { background: var(--bg); }
.btn-row { display: flex; gap: 0.5rem; flex-wrap: wrap; align-items: center; }

.link-btn {
  background: none; border: none; padding: 0;
  color: var(--accent-hover); font: inherit; font-weight: 600;
  text-decoration: underline; cursor: pointer;
}

input[type="text"], input[type="number"], input[type="search"], select {
  font: inherit;
  padding: 0.4rem 0.55rem;
  border-radius: var(--radius-md);
  border: 1px solid var(--input-border);
  background: var(--panel-bg);
  color: var(--text);
}
input:focus, select:focus {
  outline: none;
  border-color: var(--accent);
  box-shadow: 0 0 0 3px rgb(13 148 136 / 0.2);
}
.search-input { min-width: 14rem; }

.inline-field { display: flex; align-items: center; gap: 0.4rem; font-size: 0.8125rem; color: var(--text-label); font-weight: 600; }
.checkbox-field, .radio-field { display: flex; align-items: center; gap: 0.45rem; font-size: 0.85rem; font-weight: 400; }
.checkbox-field input, .radio-field input { accent-color: var(--accent); }

/* ---------- dropzone ---------- */
.dropzone {
  border: 2px dashed var(--input-border);
  border-radius: var(--radius-lg);
  padding: 2rem 1rem;
  text-align: center;
  background: var(--bg);
  transition: border-color .15s, background .15s;
}
.dropzone.dragover { border-color: var(--accent); background: var(--accent-soft-bg); }
.dropzone-main { margin: 0 0 0.35rem; font-size: 0.95rem; }
.dropzone-sub { margin: 0; font-size: 0.8rem; color: var(--text-muted); }

/* ---------- messages ---------- */
.messages { display: flex; flex-direction: column; gap: 0.35rem; }
.msg {
  font-size: 0.8125rem; font-weight: 600;
  padding: 0.5rem 0.75rem; border-radius: var(--radius-md);
  border: 1px solid var(--border); background: var(--bg); color: var(--text-label);
}
.msg-info { background: var(--accent-soft-bg); border-color: var(--accent-soft-border); color: var(--accent-hover); }
.msg-warn { background: var(--warn-bg); border-color: var(--warn-border); color: var(--warn); }
.msg-error { background: var(--danger-bg); border-color: var(--danger-border); color: var(--danger); }

/* ---------- filters ---------- */
.filter-chooser { display: flex; align-items: center; gap: 0.75rem; flex-wrap: wrap; }
.chooser-label { font-size: 0.72rem; font-weight: 700; color: var(--text-muted); text-transform: uppercase; letter-spacing: .02em; }
.chooser-item { display: flex; align-items: center; gap: 0.3rem; font-size: 0.78rem; }
.chooser-item input { accent-color: var(--accent); }

.filters { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 0.6rem; }
.filter {
  border: 1px solid var(--border); border-radius: var(--radius-md);
  padding: 0.5rem 0.6rem; background: var(--bg);
}
.filter > .filter-name { font-size: 0.72rem; font-weight: 700; color: var(--text-muted); text-transform: uppercase; letter-spacing: .02em; display: block; margin-bottom: 0.35rem; }
.filter input[type="search"] { width: 100%; }
.filter-options { max-height: 9rem; overflow-y: auto; display: flex; flex-direction: column; gap: 0.15rem; }
.filter-options label { display: flex; align-items: center; gap: 0.4rem; font-size: 0.8rem; font-weight: 400; }
.filter-options .count { margin-left: auto; color: var(--text-muted); font-size: 0.72rem; }
/* option that would match nothing given the other active filters */
.filter-options label.facet-zero { opacity: 0.4; }

.table-meta { display: flex; align-items: center; justify-content: space-between; gap: 0.75rem; flex-wrap: wrap; font-size: 0.8125rem; color: var(--text-muted); }

/* ---------- table ---------- */
.table-wrap { overflow: auto; max-height: 28rem; border: 1px solid var(--border); border-radius: var(--radius-md); }
table.patients { border-collapse: collapse; width: 100%; font-size: 0.82rem; }
table.patients th, table.patients td { padding: 0.4rem 0.55rem; text-align: left; border-bottom: 1px solid var(--border); white-space: nowrap; }
table.patients thead th {
  position: sticky; top: 0; z-index: 1;
  background: var(--panel-bg); font-size: 0.72rem; text-transform: uppercase;
  letter-spacing: .02em; color: var(--text-muted); cursor: pointer; user-select: none;
}
table.patients thead th.no-sort { cursor: default; }
table.patients tbody tr:hover { background: var(--accent-soft-bg); }
table.patients tbody tr.selected { background: var(--accent-soft-bg); }
table.patients input[type="number"] { width: 4em; padding: 0.15rem 0.3rem; }
.sort-arrow { font-size: 0.65rem; opacity: 0.7; }

/* ---------- settings ---------- */
.mode-row { display: flex; gap: 1.25rem; flex-wrap: wrap; }

/* Left column: geometry + design for the ACTIVE mode. Right column: previews.
   Only the selected mode's controls are rendered, which frees enough width for
   the designer rows to show full field names. */
.print-layout {
  display: grid;
  grid-template-columns: minmax(0, 1.05fr) minmax(0, 1fr);
  gap: 1rem;
  align-items: start;
}
@media (max-width: 1000px) {
  .print-layout { grid-template-columns: 1fr; }
}
.print-col { display: flex; flex-direction: column; gap: 0.75rem; min-width: 0; }
.preview-block { display: flex; flex-direction: column; gap: 0.35rem; }

/* geometry fields laid out two-up so the panel stays short */
.geo-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); gap: 0.4rem 0.9rem; }
.design-toolbar { display: flex; gap: 1rem; flex-wrap: wrap; align-items: center; }

/* compact horizontal settings bar */
.saved-bar { flex-direction: row; align-items: center; gap: 0.75rem; flex-wrap: wrap; padding: 0.75rem 1.25rem; }
.saved-legend { font-size: 0.75rem; font-weight: 700; color: var(--text-muted); text-transform: uppercase; letter-spacing: .02em; }
.saved-status { font-size: 0.78rem; color: var(--text-muted); flex: 1; min-width: 12rem; }
.settings-group {
  border: 1px solid var(--border); border-radius: var(--radius-md);
  padding: 0.75rem; margin: 0;
  display: flex; flex-direction: column; gap: 0.45rem;
}
.settings-group legend { font-size: 0.75rem; font-weight: 700; color: var(--text-muted); text-transform: uppercase; letter-spacing: .02em; padding: 0 0.3rem; }
.settings-group .inline-field { justify-content: space-between; }
.settings-group input[type="number"] { width: 5.5em; }
.group-hint { margin: 0; font-size: 0.75rem; color: var(--text-muted); }
/* ---------- per-mode label designer ---------- */
.design-group { min-width: 20rem; }
.designer { display: flex; flex-direction: column; gap: 0.25rem; max-height: 16rem; overflow-y: auto; }
.design-row {
  display: flex; align-items: center; gap: 0.3rem;
  padding: 0.2rem 0.3rem;
  border: 1px solid var(--border); border-radius: var(--radius-md);
  background: var(--bg);
}
.design-row.disabled { opacity: 0.45; }
.design-name {
  /* the field name is the thing you navigate by, so give it a real minimum
     before any of the controls are allowed to squeeze it */
  flex: 1 1 7rem; min-width: 5.5rem;
  font-size: 0.76rem; font-weight: 600;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.design-scale { width: 4em; padding: 0.15rem 0.3rem; font-size: 0.75rem; }
.design-pos { width: 3.6em; padding: 0.15rem 0.3rem; font-size: 0.75rem; }
.design-align { padding: 0.15rem 0.2rem; font-size: 0.75rem; }
.design-toggle, .design-move {
  font: inherit; font-size: 0.72rem; line-height: 1;
  min-width: 1.7rem; padding: 0.25rem 0.3rem;
  border: 1px solid var(--input-border); border-radius: 4px;
  background: var(--panel-bg); color: var(--text-label); cursor: pointer;
}
.design-toggle.on { background: var(--accent); color: var(--accent-contrast); border-color: var(--accent); }
.design-toggle:hover:not(.on), .design-move:hover:not(:disabled) { background: var(--bg); }
.design-move:disabled { opacity: 0.3; cursor: not-allowed; }
.fit-note { margin: 0.2rem 0 0; font-size: 0.75rem; }
.fit-ok { color: var(--accent-hover); }
.fit-bad { color: var(--danger); font-weight: 600; }

/* ---------- preview ---------- */
.preview-row { display: flex; gap: 1rem; flex-wrap: wrap; align-items: flex-start; justify-content: space-between; }
.preview-title { margin: 0 0 0.4rem; font-size: 0.8125rem; font-weight: 700; color: var(--text-muted); text-transform: uppercase; letter-spacing: .02em; }
.preview-scale { font-weight: 400; text-transform: none; letter-spacing: 0; }
.label-preview-box {
  background:
    linear-gradient(45deg, #00000008 25%, transparent 25%),
    linear-gradient(-45deg, #00000008 25%, transparent 25%),
    linear-gradient(45deg, transparent 75%, #00000008 75%),
    linear-gradient(-45deg, transparent 75%, #00000008 75%);
  background-size: 16px 16px;
  background-position: 0 0, 0 8px, 8px -8px, -8px 0px;
  border: 1px solid var(--border); border-radius: var(--radius-md);
  padding: 1rem; display: inline-block;
}
/* scaled whole-sheet preview */
.sheet-preview-box {
  border: 1px solid var(--border);
  border-radius: var(--radius-md);
  padding: 0.5rem;
  background: #e5e7eb;
  display: inline-block;
}
.sheet-preview-wrap { overflow: hidden; }
.sheet-preview-wrap .sheet { background: #fff; box-shadow: 0 1px 3px rgb(0 0 0 / 0.2); }
/* unfilled grid slots, so the full sheet layout stays visible in the preview */
.label-empty-slot { outline: 1px dashed #9ca3af80; background: transparent; }

.print-actions { display: flex; flex-direction: column; gap: 0.5rem; align-items: flex-end; }
.hint { font-size: 0.8125rem; color: var(--text-muted); margin: 0; }

.tip-steps { margin: 0.4rem 0 0; padding-left: 1.2rem; display: flex; flex-direction: column; gap: 0.2rem; }
.callout {
  font-size: 0.8125rem; line-height: 1.55;
  background: var(--warn-bg); border: 1px solid var(--warn-border); color: var(--warn);
  border-radius: var(--radius-md); padding: 0.6rem 0.8rem;
}

.footer { max-width: 84rem; margin: 0 auto; padding: 0 1.5rem 2rem; color: var(--text-muted); font-size: 0.8125rem; }

/* ================= LABELS (shared by preview + print) ================= */
/* Geometry is injected at runtime as CSS variables in millimetres. */
.label {
  box-sizing: border-box;
  overflow: hidden;
  display: flex;
  flex-direction: column;
  justify-content: center;
  gap: 0.2mm;
  background: #fff;
  color: #000;
  font-family: "Helvetica Neue", Arial, sans-serif;
  line-height: 1.12;
}
/* A row on the label. Several cells can share one row (the "inline" option),
   splitting the width between them. */
.label .l-line {
  display: flex;
  gap: 1mm;
  align-items: baseline;
  min-width: 0;
}
.label .l-cell {
  flex: 1 1 0;
  min-width: 0;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
/* A wrapped cell may run onto a second line instead of being clipped — that was
   the case for the diet, which never fit on one line. */
.label .l-wrap {
  white-space: normal;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
.label .l-empty { min-height: 1em; }
/* Fixed layout: fields are placed at absolute mm coordinates, so a missing
   value leaves its slot empty instead of pulling the rest of the label up. */
.label.label-fixed { position: relative; display: block; }
.label.label-fixed .l-cell { position: absolute; }
.label .l-name { font-weight: 700; }
.label .l-barcode { margin-top: 0.3mm; }
.label .l-barcode img { display: block; width: 100%; height: auto; }

/* preview only: show the label edge so the user sees the true boundary */
#labelPreview .label { outline: 1px dashed #0d948880; }

/* ================= PRINT ================= */
#printRoot { display: none; }

@media print {
  .no-print { display: none !important; }
  body { background: #fff; margin: 0; padding: 0; }
  #printRoot { display: block; }

  /* A4 sheet: a grid of labels, one .sheet per physical page */
  .sheet { display: grid; }
  .sheet + .sheet { page-break-before: always; break-before: page; }

  /* Label printer: one label per physical page */
  .label-page { page-break-after: always; break-after: page; }
  .label-page:last-child { page-break-after: auto; break-after: auto; }

  .label { outline: none !important; }
}
