/* The editor. Loaded after /site.css, which supplies the color tokens, the shared
   header and footer, Fraunces and .btn; this file only adds what the editor needs
   and keeps form controls compact. */
:root {
  --ok-text: #1f5f4a;
  --error: #a3261b;
  --field: #ffffff;
}
@media (prefers-color-scheme: dark) {
  :root {
    --ok-text: #7fd0ae;
    --error: #ff8b7e;
    --field: #191917;
  }
}

* { box-sizing: border-box; }
[hidden] { display: none !important; }
body.editor { font-size: 15px; line-height: 1.5; }
/* The page scrolls past a tall form; a sticky site header would eat the room. */
.editor .site-head { position: static; }
.sources a { color: var(--muted); }
.photo-privacy { flex-basis: 100%; margin: 0; }

.editor-head {
  border-bottom: 1px solid var(--line);
  background:
    radial-gradient(circle at 1px 1px, color-mix(in srgb, var(--ink) 8%, transparent) 1px, transparent 0) 0 0 / 22px 22px,
    radial-gradient(700px 260px at 90% 0%, var(--accent-soft), transparent 70%);
}
.editor-head .wrap { padding-top: 26px; padding-bottom: 22px; }
.editor-head h1 { font-size: clamp(28px, 3.6vw, 40px); margin: 0 0 6px; }
.editor-head p { margin: 0; color: var(--muted); font-size: 15px; max-width: 70ch; }

.layout {
  display: grid; grid-template-columns: minmax(0, 1fr) 360px; gap: 32px;
  max-width: 1120px; margin: 0 auto; padding: 24px 20px 56px;
}
@media (max-width: 820px) { .layout { grid-template-columns: minmax(0, 1fr); padding: 16px 20px 40px; } }
.col h2 { font-size: 22px; margin: 32px 0 12px; letter-spacing: -0.01em; }
.col h2:first-child { margin-top: 4px; }
/* Step number, same circle as the how-to guide (site.css .step-h .n). */
h2.step { display: flex; align-items: center; gap: 10px; }
h2.step .n {
  flex: none; display: inline-grid; place-items: center; width: 30px; height: 30px; border-radius: 50%;
  background: var(--ink); color: var(--bg); font-size: 16px; letter-spacing: 0;
}
.col > h2.step { padding-top: 22px; border-top: 3px solid var(--ink); }
.col > h2.step:first-of-type { border-top: 0; padding-top: 0; }
/* Sticky and taller than the window, the bottom (downloads) stayed out of reach
   until the page ended, so the column scrolls on its own. */
.output {
  position: sticky; top: 16px; align-self: start; max-height: calc(100vh - 32px); overflow-y: auto;
  background: var(--panel); border: 1px solid var(--line); border-top: 8px solid var(--ink);
  border-radius: var(--radius); padding: 16px 18px; box-shadow: var(--shadow);
}
@media (max-width: 820px) { .output { position: static; max-height: none; overflow: visible; padding: 14px; } }
.output-head { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; }
.output-head h2 { margin-top: 4px; }
.jump { font-size: 14px; font-weight: 650; white-space: nowrap; }
#download { scroll-margin-top: 16px; }

input[type="text"], input[type="search"], input[type="number"], input[type="email"] {
  width: 100%; padding: 8px 11px; border: 1px solid color-mix(in srgb, var(--ink) 22%, var(--line)); border-radius: 10px;
  background: var(--field); color: var(--text); font: inherit;
}
input:focus-visible, select:focus-visible, textarea:focus-visible, button:focus-visible {
  outline: 3px solid color-mix(in srgb, var(--accent) 35%, transparent); outline-offset: 1px; border-color: var(--accent);
}
label { display: block; font-size: 13px; color: var(--muted); }
label input { margin-top: 3px; color: var(--text); }
label.inline { display: inline-flex; gap: 5px; align-items: center; margin-left: 10px; }
label.inline input { margin: 0; }

button {
  font: inherit; font-size: 14px; font-weight: 650; padding: 7px 15px; border-radius: 999px; cursor: pointer;
  border: 1.5px solid var(--accent); background: var(--accent); color: var(--accent-text);
}
button:hover:not(:disabled) { background: var(--accent-strong); border-color: var(--accent-strong); }
button.secondary { background: transparent; color: var(--accent); }
button.secondary:hover:not(:disabled) { background: var(--accent-soft); color: var(--accent); }
button.link:hover { background: none; }
button.link { border: 0; background: none; color: var(--accent); padding: 4px; text-decoration: underline; }

.hint { color: var(--muted); font-size: 13px; margin: 6px 0; }
.search span { display: block; margin-bottom: 2px; }

.results { list-style: none; padding: 0; margin: 0 0 12px; }
.results li {
  display: grid; grid-template-columns: auto minmax(0, 1fr); column-gap: 10px; align-items: center;
  padding: 6px 0; border-bottom: 1px solid var(--line);
}
.results .meta { grid-column: 2; color: var(--muted); font-size: 12px; }
.results .empty { display: block; color: var(--muted); }

.ing { background: var(--panel); border: 1px solid var(--line); border-radius: 12px; padding: 12px 14px; margin: 10px 0; box-shadow: 0 1px 2px rgba(40, 32, 12, .05); }
.ing-row { display: flex; gap: 10px; align-items: flex-end; }
.ing-row .grow { flex: 1; min-width: 0; }
.ing-row .grams { width: 110px; }
.ing-meta { color: var(--muted); font-size: 12px; margin: 6px 0; }
.chips { display: flex; flex-wrap: wrap; gap: 5px; }
.chip { background: transparent; color: var(--muted); border: 1px solid var(--line); padding: 3px 8px; font-size: 12px; border-radius: 999px; }
.chip.on { background: var(--accent); color: var(--accent-text); border-color: var(--accent); }
.chip:hover:not(.on) { background: var(--accent-soft); color: var(--accent); }
.chip.hint-chip { border-style: dashed; border-color: var(--accent); color: var(--accent); }

.serving { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
.warn-inline { color: var(--warn-text); background: var(--warn-bg); padding: 0 3px; border-radius: 3px; }
@media (max-width: 520px) { .serving { grid-template-columns: minmax(0, 1fr); } }

.warn { background: var(--warn-bg); color: var(--warn-text); padding: 9px 12px; border-radius: 10px; font-size: 13px; border-left: 4px solid var(--butter); }
.ok { color: var(--ok-text); font-size: 13px; }
.gaps { list-style: none; padding: 0; margin: 8px 0; }
.gaps li {
  display: grid; grid-template-columns: minmax(0, 1fr) 140px auto auto; gap: 8px; align-items: center;
  padding: 6px 0; border-bottom: 1px solid var(--line);
}
@media (max-width: 520px) { .gaps li { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); } .gap-name { grid-column: 1 / -1; } }
.gap-groups { list-style: none; padding: 0; margin: 8px 0 4px; }
.gap-groups li {
  display: flex; gap: 10px; align-items: center; justify-content: space-between; flex-wrap: wrap;
  padding: 6px 0; border-bottom: 1px solid var(--line); font-size: 13px;
}
.decided { margin-top: 10px; font-size: 13px; }
.decided ul { padding-left: 18px; }

.placeholder {
  border: 1.5px dashed color-mix(in srgb, var(--ink) 20%, var(--line)); border-radius: 12px; background: var(--bg); padding: 32px 16px; text-align: center; color: var(--muted);
}
.placeholder ul { text-align: left; margin: 8px 0 0; padding-left: 20px; }
.placeholder p { margin: 0; }
.placeholder.error { color: var(--error); }

/* Low-resolution preview bitmap (see showPreview in app.mjs). */
.label-preview { display: block; max-width: 100%; height: auto; margin: 0 auto; background: #fff; border-radius: 6px; }

.statement { font-size: 13px; margin: 12px 0 4px; max-width: 300px; overflow-wrap: anywhere; }

/* Recipe bar */
.recipe-bar { display: flex; gap: 10px; align-items: flex-end; flex-wrap: wrap; }
.recipe-bar .grow { flex: 1 1 220px; min-width: 0; }
.recipe-bar .open { flex: 0 1 220px; min-width: 0; }
.hint-inline { font-size: 12px; }
select {
  font: inherit; font-size: 14px; padding: 7px 9px; border: 1px solid color-mix(in srgb, var(--ink) 22%, var(--line)); border-radius: 10px;
  background: var(--field); color: var(--text); max-width: 100%;
}
label select { margin-top: 3px; width: 100%; }
.recipe-actions { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; margin: 8px 0 4px; }
.confirm { display: inline-flex; gap: 6px; align-items: center; flex-wrap: wrap; font-size: 13px; color: var(--error); }

/* Tabs */
/* Segmented control */
.tabs { display: inline-flex; flex-wrap: wrap; gap: 4px; padding: 4px; margin-bottom: 12px; background: var(--panel); border: 1px solid var(--line); border-radius: 999px; }
.tabs button {
  background: none; color: var(--muted); border: 0; border-radius: 999px; padding: 6px 14px; font-size: 14px; font-weight: 600;
}
.tabs button:hover:not(:disabled) { background: var(--accent-soft); color: var(--accent); }
.tabs button[aria-selected="true"], .tabs button[aria-selected="true"]:hover { background: var(--ink); color: var(--bg); }

/* Weight with unit */
.qty { display: flex; gap: 4px; margin-top: 3px; }
.qty input { margin-top: 0; min-width: 0; }
.qty select { margin-top: 0; width: auto; flex: none; }
.ing-row .amount { width: 170px; flex: none; }
input.needs { border-color: var(--warn-text); background: var(--warn-bg); }
.grams-note { margin-left: 6px; }
.tag { margin-left: 10px; }
.ing-meta .link { font-size: 12px; }

.sub { margin-top: 8px; font-size: 13px; }
.sub summary { cursor: pointer; color: var(--muted); }
textarea {
  width: 100%; padding: 8px 11px; border: 1px solid color-mix(in srgb, var(--ink) 22%, var(--line)); border-radius: 10px; margin-top: 4px;
  background: var(--field); color: var(--text); font: inherit; font-size: 13px; resize: vertical;
}
#ing-total { margin-top: 4px; }

/* Supplier label form */
.supplier { background: var(--panel); border: 1px solid var(--line); border-radius: var(--radius); padding: 16px; margin-bottom: 14px; box-shadow: var(--shadow); }
.supplier h3 { font-size: 17px; margin: 0 0 10px; }
.supplier .ok { margin: -4px 0 10px; }
.basis { border: 0; padding: 0; margin: 12px 0 6px; }
.basis legend { font-size: 13px; color: var(--muted); padding: 0; margin-bottom: 4px; }
.basis label.inline { margin: 0 14px 4px 0; color: var(--text); }
.serving-g { max-width: 320px; margin-bottom: 10px; }
/* Fill down, then across, so fields read in label order (15 fields: 8 + 7). */
.nf-grid {
  display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); grid-template-rows: repeat(8, auto);
  grid-auto-flow: column; gap: 4px 18px; margin-top: 8px;
}
.nf { display: grid; grid-template-columns: minmax(0, 1fr) 84px 64px; gap: 6px; align-items: center; color: var(--text); }
.nf.indent span:first-child { padding-left: 12px; }
.nf input { margin: 0; padding: 4px 6px; }
.nf select { margin: 0; padding: 4px; font-size: 13px; width: 100%; }
.nf .unit { color: var(--muted); font-size: 13px; }
.actions { display: flex; gap: 8px; margin-top: 10px; }

/* Photo reading */
.photo-bar { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; margin: 12px 0 4px; }
.file-btn {
  position: relative; display: inline-block; font-size: 14px; font-weight: 650; padding: 7px 15px; border-radius: 999px; cursor: pointer;
  border: 1.5px solid var(--accent); color: var(--accent); background: transparent;
}
.file-btn input { position: absolute; inset: 0; opacity: 0; cursor: pointer; width: 100%; }
.file-btn:focus-within { outline: 2px solid var(--accent); outline-offset: 2px; }
.photo-status { font-size: 13px; color: var(--muted); }
.photo-status.error { color: var(--error); }
.with-photo .nf-body { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.3fr); gap: 14px; align-items: start; }
.photo-col { margin: 8px 0 0; position: sticky; top: 8px; }
.photo-col img { display: block; width: 100%; max-height: 80vh; object-fit: contain; border: 1px solid var(--line); border-radius: 6px; background: #fff; }
.with-photo .nf-grid { grid-template-columns: minmax(0, 1fr); grid-template-rows: none; grid-auto-flow: row; }
input.from-photo { border-color: var(--accent); }
.photo-notes ul { margin: 8px 0; padding: 8px 10px 8px 26px; }
.photo-confirm { display: flex; margin: 10px 0 0; color: var(--text); font-size: 14px; }
@media (max-width: 600px) {
  .with-photo .nf-body { grid-template-columns: minmax(0, 1fr); }
  .photo-col { position: static; }
}
.form-warn .warn { margin: 8px 0 0; }
@media (max-width: 600px) {
  .nf-grid { grid-template-columns: minmax(0, 1fr); grid-template-rows: none; grid-auto-flow: row; }
  .ing-row { flex-wrap: wrap; }
  .ing-row .grow { flex-basis: 100%; }
}
.sources { color: var(--muted); font-size: 12px; margin-top: 16px; }

/* paid downloads (purchase.mjs) */
.download { margin-top: 18px; border-top: 3px solid var(--ink); padding-top: 6px; font-size: 14px; }
.download p { margin: 8px 0; }
.download ul { margin: 4px 0; padding-left: 20px; }
.download .warn ul { font-size: 13px; }
.buy, .formats { display: flex; flex-wrap: wrap; gap: 8px; margin: 10px 0; }
button:disabled { opacity: 0.5; cursor: not-allowed; }
.inline-form { display: flex; flex-wrap: wrap; gap: 8px; align-items: flex-end; margin: 8px 0; }
.inline-form .grow, .inline-form > input { flex: 1; min-width: 12rem; }
.have-key, .key-recipes { margin: 10px 0; font-size: 13px; }
.have-key summary, .key-recipes summary { cursor: pointer; color: var(--accent); }
.confirm-box, .key-box { border: 1.5px solid var(--accent); border-radius: 12px; padding: 12px 14px; margin: 10px 0; background: var(--accent-soft); }
.key-box code { font-size: 15px; letter-spacing: 0.04em; user-select: all; overflow-wrap: anywhere; }
.error-box { color: var(--error); font-size: 13px; margin: 8px 0; }
.download .ok { margin: 8px 0; }
.download .warn { margin: 8px 0; }
.busy { font-style: italic; }
