/* RV5E Field Check-In — "Cartographic survey" UI
   Palette: paper, contour brown, water blue, signal red (primary action + route only), ink. */

:root {
  --paper: #F1EBD9;
  --paper-2: #E9E1CB;      /* slightly darker paper for hatched/secondary fills */
  --contour: #7A5C36;
  --contour-soft: rgba(122, 92, 54, 0.35);
  --contour-faint: rgba(122, 92, 54, 0.14);
  --water: #2E6B95;
  --route: #C8302A;
  --ink: #1F1A14;
  --ink-soft: #4A4036;
  --cream: #FBF7EC;
  --font-cond: "Roboto Condensed", "Arial Narrow", "Helvetica Neue", Arial, sans-serif;
  --font-mono: ui-monospace, "SF Mono", Menlo, Consolas, monospace;
  --font-body: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
  --tap: 44px;
  --gutter: 16px;
}

* { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; }

body {
  margin: 0;
  min-height: 100vh;
  min-height: 100dvh;
  color: var(--ink);
  font-family: var(--font-body);
  font-size: 16px;
  line-height: 1.45;
  background-color: var(--paper);
  /* Faint contour-line pattern in contour brown, ~7% opacity */
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='320' height='320' viewBox='0 0 320 320'><g fill='none' stroke='%237A5C36' stroke-opacity='0.16' stroke-width='1'><path d='M-20 60 C 40 20, 90 110, 150 70 S 260 40, 340 90'/><path d='M-20 100 C 50 60, 100 150, 160 110 S 270 80, 340 130'/><path d='M-20 140 C 60 100, 110 190, 170 150 S 280 120, 340 170'/><path d='M-20 190 C 70 150, 120 240, 180 200 S 290 170, 340 220'/><path d='M-20 240 C 80 200, 130 290, 190 250 S 300 220, 340 270'/><path d='M-20 290 C 90 250, 140 340, 200 300 S 310 270, 340 320'/><path d='M40 -10 C 20 40, 80 60, 60 120 S 20 190, 70 250 S 40 310, 80 340'/><path d='M230 -10 C 260 40, 200 90, 240 140 S 290 200, 250 260 S 270 320, 240 340'/></g></svg>");
  background-size: 320px 320px;
  display: flex;
  flex-direction: column;
  padding: env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left);
}

/* One faint fold crease across the middle of the sheet */
.fold {
  position: fixed;
  left: 0; right: 0; top: 50%;
  height: 2px;
  pointer-events: none;
  z-index: 0;
  background: linear-gradient(to bottom, rgba(31,26,20,0.05) 0 1px, rgba(255,255,255,0.35) 1px 2px);
}

/* ---------- Top bar ---------- */
.topbar {
  position: relative; z-index: 1;
  display: flex; align-items: center; justify-content: space-between;
  gap: 12px;
  padding: 10px var(--gutter);
  border-bottom: 2px solid var(--contour);
  background: var(--paper);
}
.wordmark {
  display: inline-flex; align-items: center; gap: 8px;
  color: var(--ink); text-decoration: none;
  min-height: var(--tap);
}
.wordmark .ico { color: var(--contour); flex: none; }
.wordmark-text {
  font-family: var(--font-cond); font-weight: 700; font-size: 20px;
  letter-spacing: 0.06em; text-transform: uppercase; white-space: nowrap;
}
.wordmark-sub { font-weight: 400; color: var(--contour); font-size: 13px; margin-left: 4px; }
.topnav { display: flex; gap: 2px; align-items: center; flex: none; }
.topnav a, .topnav button {
  font-family: var(--font-cond); font-size: 13px; letter-spacing: 0.06em; text-transform: uppercase;
  color: var(--ink); text-decoration: none; background: none; border: 0;
  padding: 0 8px; min-height: var(--tap); display: inline-flex; align-items: center; white-space: nowrap;
  border-bottom: 2px solid transparent; cursor: pointer;
}
@media (max-width: 480px) {
  .wordmark-sub { display: none; }
  .topnav a, .topnav button { font-size: 12px; padding: 0 7px; }
}
html, body { overflow-x: hidden; }
.topnav a.active { border-bottom-color: var(--route); }
.topnav a:active, .topnav button:active { background: var(--paper-2); }

/* ---------- Sheet (main) ---------- */
.sheet {
  position: relative; z-index: 1;
  flex: 1;
  width: 100%; max-width: 720px; margin: 0 auto;
  padding: 16px var(--gutter) 24px;
}
.sheet > * + * { margin-top: 16px; }

.sheetmeta {
  position: relative; z-index: 1;
  display: flex; justify-content: space-between; align-items: center; gap: 12px; flex-wrap: wrap;
  padding: 8px var(--gutter) 10px;
  border-top: 1px solid var(--contour-soft);
  font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.08em; text-transform: uppercase;
  color: var(--contour);
}

/* Scale bar: alternating black/cream segments */
.scalebar { display: inline-flex; flex-direction: column; gap: 3px; align-items: flex-end; }
.scalebar-track {
  display: inline-flex; height: 6px; border: 1px solid var(--ink); background: var(--cream);
}
.scalebar-track i { display: block; width: 18px; height: 100%; }
.scalebar-track i:nth-child(odd) { background: var(--ink); }
.scalebar-label { font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.06em; color: var(--contour); }

/* Loading scale bar (progress) */
.loader { display: flex; flex-direction: column; align-items: center; gap: 8px; padding: 20px 0; }
.loader .scalebar-track { height: 10px; overflow: hidden; }
.loader .scalebar-track i { width: 24px; animation: scan 1.1s linear infinite; }
.loader .scalebar-track i:nth-child(odd) { background: var(--ink); }
@keyframes scan { from { transform: translateX(-48px); } to { transform: translateX(0); } }
.loader .scalebar-track { width: 144px; }
.loader-text { font-family: var(--font-cond); letter-spacing: 0.08em; text-transform: uppercase; font-size: 13px; color: var(--contour); }

/* ---------- Typography ---------- */
h1, h2, h3 {
  font-family: var(--font-cond); font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase;
  margin: 0; line-height: 1.15;
}
h1 { font-size: 28px; }
h2 { font-size: 20px; }
h3 { font-size: 16px; }
p { margin: 0 0 8px; }
.muted { color: var(--ink-soft); }
.small { font-size: 14px; }
.mono { font-family: var(--font-mono); }
.readout { font-family: var(--font-mono); font-size: 15px; letter-spacing: 0.02em; white-space: nowrap; }
.readout.water { color: var(--water); }
a { color: var(--water); }

/* Legend-box section header: rule line with title set into it */
.legend {
  display: flex; align-items: center; gap: 10px;
  margin: 20px 0 10px;
  font-family: var(--font-cond); font-size: 13px; letter-spacing: 0.1em; text-transform: uppercase;
  color: var(--contour);
}
.legend::before, .legend::after { content: ""; flex: 1; height: 1px; background: var(--contour-soft); }
.legend::before { flex: 0 0 12px; }

/* Grid-reference labels on fields */
label.gridref {
  display: block;
  font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.12em; text-transform: uppercase;
  color: var(--contour); margin-bottom: 2px;
}

/* ---------- Boxes ---------- */
.box {
  border: 1px solid var(--contour);
  background: var(--cream);
  padding: 14px;
}
.box + .box { margin-top: 12px; }
.box-hatched {
  background-color: var(--paper-2);
  background-image: repeating-linear-gradient(135deg, transparent 0 6px, rgba(122,92,54,0.10) 6px 7px);
}

/* ---------- Buttons ---------- */
.btn {
  appearance: none;
  display: inline-flex; align-items: center; justify-content: center; gap: 8px;
  min-height: var(--tap); padding: 0 18px;
  border: 2px solid var(--contour); border-radius: 0;
  background: var(--cream); color: var(--ink);
  font-family: var(--font-cond); font-size: 16px; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase;
  text-decoration: none; cursor: pointer;
}
.btn:active { background: var(--paper-2); }
.btn:disabled { opacity: 0.5; cursor: default; }
.btn-primary { background: var(--route); border-color: var(--route); color: var(--cream); }
.btn-primary:active { background: #A9251F; }
.btn-water { border-color: var(--water); color: var(--water); }
.btn-block { display: flex; width: 100%; }
.btn-big { min-height: 72px; font-size: 22px; }
.btn-small { min-height: 36px; padding: 0 10px; font-size: 13px; }
.btn .ico { width: 18px; height: 18px; }
.btn-row { display: flex; gap: 10px; flex-wrap: wrap; }
.btn-row .btn { flex: 1; }

/* ---------- Forms ---------- */
.field { margin-bottom: 14px; }
input[type="text"], input[type="password"], input[type="number"], input[type="date"], select {
  width: 100%;
  min-height: var(--tap);
  border: 0; border-bottom: 2px solid var(--contour); border-radius: 0;
  background: transparent; color: var(--ink);
  font-size: 18px; padding: 6px 2px;
  outline: none;
}
input[type="number"], input.mono, input[type="password"], input[type="date"] { font-family: var(--font-mono); }
input:focus, select:focus { border-bottom-color: var(--water); }
input.code { font-size: 24px; letter-spacing: 0.18em; text-transform: uppercase; text-align: center; }
.row2 { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
.help { font-size: 13px; color: var(--ink-soft); margin-top: 4px; }

/* Tabs */
.tabs { display: flex; border-bottom: 2px solid var(--contour); margin-bottom: 18px; }
.tabs button {
  flex: 1; min-height: var(--tap); background: none; border: 0; cursor: pointer;
  font-family: var(--font-cond); font-size: 15px; letter-spacing: 0.08em; text-transform: uppercase;
  color: var(--ink-soft); border-bottom: 3px solid transparent; margin-bottom: -2px;
}
.tabs button.active { color: var(--ink); border-bottom-color: var(--route); }

/* ---------- Stamps (status) ---------- */
.stamp {
  display: inline-block;
  transform: rotate(-2deg);
  border: 2px solid currentColor; padding: 4px 10px;
  font-family: var(--font-cond); font-weight: 700; font-size: 14px; letter-spacing: 0.14em; text-transform: uppercase;
  background: transparent;
}
.stamp-error { color: var(--route); }
.stamp-ok { color: var(--water); }
.stamp-wrap { margin: 12px 0; }
.stamp-note { display: block; margin-top: 8px; font-size: 14px; color: var(--ink-soft); }

/* ---------- Route strip (hero device) ---------- */
.route {
  position: relative;
  display: grid; grid-template-columns: auto 1fr auto; align-items: center; gap: 10px;
  padding: 14px 4px 6px;
}
.wp {
  display: flex; flex-direction: column; align-items: center; gap: 4px;
  font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.14em; text-transform: uppercase;
}
.wp-disc {
  width: 22px; height: 22px; border-radius: 50%; border: 3px solid var(--contour); background: var(--cream);
  position: relative;
}
.wp-disc::after { content: ""; position: absolute; inset: 5px; border-radius: 50%; background: var(--contour); }
.wp-base { color: var(--contour); }
.wp-you { color: var(--water); }
.wp-you .wp-disc { border-color: var(--water); }
.wp-you .wp-disc::after { background: var(--water); }
.route-line {
  position: relative; height: 34px; margin-bottom: 16px;
}
.route-line::before {
  content: ""; position: absolute; left: 0; right: 0; top: 50%;
  border-top: 3px dashed var(--route);
}
.route-line::after {
  /* small direction tick toward BASE (distance is measured you -> base) */
  content: ""; position: absolute; left: -2px; top: 50%; width: 0; height: 0;
  transform: translateY(-50%);
  border-top: 6px solid transparent; border-bottom: 6px solid transparent; border-right: 9px solid var(--route);
}
.route-km {
  position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%);
  padding: 2px 8px; background: var(--cream); border: 1px solid var(--route);
  font-family: var(--font-mono); font-size: 15px; font-weight: 700; color: var(--route); white-space: nowrap;
}
.route-km.pending { color: var(--contour); border-color: var(--contour); border-style: dashed; font-weight: 400; }
.route-amount {
  grid-column: 1 / -1; text-align: center;
  font-family: var(--font-mono); font-size: 26px; font-weight: 700; color: var(--route); line-height: 1.1;
}
.route-amount small { display: block; font-size: 11px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--contour); font-weight: 400; margin-top: 2px; }
.route-compact { padding: 6px 0 0; }
.route-compact .route-line { height: 26px; margin-bottom: 0; }
.route-compact .route-amount { font-size: 18px; text-align: right; grid-column: auto; }

/* ---------- Check-in card / history rows ---------- */
.card { border: 1px solid var(--contour); background: var(--cream); }
.card-head {
  display: flex; justify-content: space-between; align-items: baseline; gap: 8px;
  padding: 8px 12px; border-bottom: 1px solid var(--contour-soft);
  font-family: var(--font-mono); font-size: 12px; letter-spacing: 0.08em; text-transform: uppercase; color: var(--contour);
}
.card-body { display: grid; grid-template-columns: 84px 1fr; gap: 12px; padding: 12px; }
.card-body.wide { grid-template-columns: 1fr; }
.thumb {
  width: 84px; height: 84px; object-fit: cover; display: block;
  border: 1px solid var(--contour); background: var(--paper-2); cursor: zoom-in;
}
.thumb-lg { width: 100%; max-height: 320px; object-fit: contain; background: var(--ink); border: 1px solid var(--contour); }
.kv { display: grid; grid-template-columns: auto 1fr; gap: 2px 10px; font-size: 14px; align-items: baseline; }
.kv dt { font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--contour); margin: 0; }
.kv dd { margin: 0; font-family: var(--font-mono); font-size: 14px; }
.card-foot { padding: 8px 12px 12px; border-top: 1px solid var(--contour-soft); }
.list > * + * { margin-top: 12px; }
.empty { text-align: center; padding: 30px 10px; color: var(--ink-soft); }

/* ---------- Camera ---------- */
.viewfinder {
  position: relative; width: 100%; aspect-ratio: 3 / 4; max-height: 70vh;
  background: var(--ink); overflow: hidden; border: 1px solid var(--contour);
}
.viewfinder video, .viewfinder img, .viewfinder canvas { width: 100%; height: 100%; object-fit: cover; display: block; }
.viewfinder video.mirror { transform: scaleX(-1); }
.cropmark { position: absolute; width: 22px; height: 22px; border-color: var(--cream); border-style: solid; border-width: 0; opacity: 0.9; }
.cropmark.tl { top: 10px; left: 10px; border-top-width: 1px; border-left-width: 1px; }
.cropmark.tr { top: 10px; right: 10px; border-top-width: 1px; border-right-width: 1px; }
.cropmark.bl { bottom: 10px; left: 10px; border-bottom-width: 1px; border-left-width: 1px; }
.cropmark.br { bottom: 10px; right: 10px; border-bottom-width: 1px; border-right-width: 1px; }
.vf-label {
  position: absolute; top: 12px; left: 50%; transform: translateX(-50%);
  font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.14em; color: var(--cream); text-transform: uppercase;
  background: rgba(31,26,20,0.55); padding: 2px 8px;
}
.cam-controls { display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; gap: 10px; margin-top: 14px; }
.flip {
  justify-self: start;
  display: inline-flex; align-items: center; gap: 6px;
  min-height: var(--tap); padding: 0 12px; border: 2px solid var(--contour); border-radius: 999px;
  background: var(--cream); color: var(--ink); cursor: pointer;
  font-family: var(--font-mono); font-size: 12px; letter-spacing: 0.12em; text-transform: uppercase;
}
.shutter {
  width: 72px; height: 72px; border-radius: 50%;
  background: var(--route); border: 4px solid var(--cream); box-shadow: 0 0 0 3px var(--contour);
  cursor: pointer; justify-self: center;
}
.shutter:active { background: #A9251F; }
.shutter:disabled { opacity: 0.4; }

/* ---------- Tables (admin) ---------- */
.table-wrap { overflow-x: auto; -webkit-overflow-scrolling: touch; border: 1px solid var(--contour); background: var(--cream); }
table { border-collapse: collapse; width: 100%; font-size: 14px; }
th, td { padding: 8px 10px; border-bottom: 1px solid var(--contour-faint); text-align: left; vertical-align: middle; white-space: nowrap; }
th { font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--contour); border-bottom: 1px solid var(--contour); }
td.num, th.num { text-align: right; font-family: var(--font-mono); }
td .thumb { width: 48px; height: 48px; }
tr:last-child td { border-bottom: 0; }
.status-ok { color: var(--water); }
.status-pending { color: var(--contour); }
.inactive td { opacity: 0.55; }

/* Totals strip */
.totals { display: grid; grid-template-columns: 1fr; gap: 0; border: 1px solid var(--contour); background: var(--cream); }
.total { display: flex; justify-content: space-between; align-items: baseline; gap: 10px; padding: 10px 12px; border-bottom: 1px solid var(--contour-faint); }
.total:last-child { border-bottom: 0; }
.total b { font-family: var(--font-mono); font-size: 20px; order: 2; white-space: nowrap; }
.total span { font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--contour); }
.total.route b { color: var(--route); }
@media (min-width: 560px) {
  .totals { grid-template-columns: repeat(3, 1fr); background: transparent; border: 0; gap: 10px; }
  .total { flex-direction: column; align-items: flex-start; border: 1px solid var(--contour); background: var(--cream); }
  .total b { order: 0; }
}

/* Filters */
.filters { display: grid; grid-template-columns: 1fr; gap: 10px; }
@media (min-width: 560px) { .filters { grid-template-columns: 1fr 1fr 1fr auto; align-items: end; } }

/* ---------- Overlay (photo viewer / dialogs) ---------- */
.overlay {
  position: fixed; inset: 0; z-index: 50;
  background: rgba(31,26,20,0.85);
  display: flex; align-items: center; justify-content: center; padding: 16px;
}
.overlay[hidden] { display: none; }
.overlay img { max-width: 100%; max-height: 90vh; border: 2px solid var(--cream); }
.dialog { background: var(--paper); border: 2px solid var(--contour); padding: 18px; width: 100%; max-width: 420px; }
.dialog h3 { margin-bottom: 12px; }
.codebox {
  font-family: var(--font-mono); font-size: 26px; letter-spacing: 0.16em; text-align: center;
  border: 2px dashed var(--contour); padding: 14px; margin: 12px 0; background: var(--cream); user-select: all;
}

/* Sr-only */
.sr { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); }

/* Admin nav row */
.subnav { display: flex; gap: 0; border: 1px solid var(--contour); background: var(--cream); }
.subnav a {
  flex: 1; text-align: center; min-height: var(--tap); display: flex; align-items: center; justify-content: center;
  font-family: var(--font-cond); font-size: 14px; letter-spacing: 0.08em; text-transform: uppercase;
  color: var(--ink); text-decoration: none; border-right: 1px solid var(--contour-soft);
}
.subnav a:last-child { border-right: 0; }
.subnav a.active { background: var(--ink); color: var(--cream); }

/* Home hero */
.hero { text-align: center; padding: 24px 0 8px; }
.hero .who { font-family: var(--font-mono); font-size: 12px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--contour); margin-bottom: 6px; }
.hero h1 { font-size: 30px; }
.hero .btn-big { margin-top: 24px; }
