.field-workflow{width:min(1040px,100%);margin:0 auto;padding:6px 0 112px;display:grid;gap:18px;color:var(--text)}
.field-page-head{display:grid;grid-template-columns:60px minmax(0,1fr) 46px;align-items:center;gap:14px;padding:8px 0 4px}.field-page-head h1{margin:0;font-size:clamp(25px,4vw,38px);letter-spacing:-.025em;line-height:1.06}.field-page-head p{margin:5px 0 0;color:var(--muted);line-height:1.45}.field-page-head .settings-back-btn{width:60px;height:40px;margin:0}
.field-sync-shortcut{width:46px;height:46px;border:1px solid var(--line);border-radius:14px;background:var(--surface);color:var(--text);display:grid;place-items:center;position:relative}.field-sync-shortcut svg{width:22px;height:22px}.field-sync-shortcut>span{position:absolute;right:-5px;top:-5px;min-width:20px;height:20px;padding:0 5px;border-radius:999px;background:var(--danger);color:#fff;font-size:11px;font-weight:800;display:grid;place-items:center}
.field-start-panel{min-height:440px;border:1px solid var(--line);border-radius:16px;background:var(--surface);padding:clamp(26px,7vw,64px);display:flex;flex-direction:column;align-items:flex-start;justify-content:center;gap:14px;box-shadow:0 18px 40px rgba(0,0,0,.11)}.field-start-mark{width:64px;height:64px;border-radius:16px;background:color-mix(in srgb,var(--accent) 18%,var(--surface));color:var(--accent);display:grid;place-items:center}.field-start-mark svg{width:30px;height:30px}.field-start-panel h2{font-size:clamp(29px,5vw,46px);line-height:1.05;letter-spacing:-.03em;margin:6px 0 0}.field-start-panel>p{max-width:62ch;color:var(--muted);font-size:17px;line-height:1.55;margin:0}
.field-start-panel dl,.field-review-detail dl{width:100%;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1px;background:var(--line);border:1px solid var(--line);border-radius:14px;overflow:hidden;margin:12px 0}.field-start-panel dl>div,.field-review-detail dl>div{background:var(--surface-2,var(--surface));padding:14px}.field-start-panel dt,.field-review-detail dt{font-size:12px;color:var(--muted);margin-bottom:4px}.field-start-panel dd,.field-review-detail dd{margin:0;font-weight:750;overflow-wrap:anywhere}
.field-session-strip,.sync-summary{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1px;background:var(--line);border:1px solid var(--line);border-radius:16px;overflow:hidden}.field-session-strip>div,.sync-summary>div{background:var(--surface);padding:18px;display:grid;gap:3px}.field-session-strip strong,.sync-summary strong{font-size:28px;letter-spacing:-.025em}.field-session-strip span,.sync-summary span{color:var(--muted);font-size:13px}.field-command-row{display:grid;grid-template-columns:2fr 1fr 1fr;gap:10px}.field-primary{background:var(--accent)!important;color:var(--accent-contrast,#07131d)!important;border-color:transparent!important}.field-urgent{background:transparent!important;color:var(--danger)!important;border-color:color-mix(in srgb,var(--danger) 55%,transparent)!important}
.field-log,.field-submit-panel,.field-update-form>section,.field-review-detail,.template-list,.sync-center-list,.field-issues-list{border:1px solid var(--line);border-radius:16px;background:var(--surface);overflow:hidden}.field-log>header,.field-submit-panel,.field-review-detail>header{padding:18px 20px;display:flex;justify-content:space-between;align-items:center;gap:16px}.field-log h2,.field-submit-panel h2,.field-review-detail h2{font-size:20px;margin:0}.field-log header p,.field-submit-panel p,.field-review-detail header p{color:var(--muted);margin:4px 0 0;line-height:1.4}
.field-sync-state{display:inline-flex;align-items:center;gap:6px;font-size:11px;font-weight:800;white-space:nowrap;color:var(--muted)}.field-sync-state i{width:8px;height:8px;border-radius:50%;background:currentColor}.field-sync-state.green{color:var(--success)}.field-sync-state.amber{color:var(--warning)}.field-sync-state.red{color:var(--danger)}.field-sync-state.blue{color:var(--accent)}
.field-update-row{width:100%;border:0;border-top:1px solid var(--line);background:transparent;color:var(--text);padding:14px 18px;display:grid;grid-template-columns:42px minmax(0,1fr) auto;gap:12px;text-align:left;align-items:center}.field-update-row:hover{background:color-mix(in srgb,var(--accent) 7%,transparent)}.field-update-row:focus-visible{outline:2px solid var(--accent);outline-offset:-3px}.field-update-row>span:nth-child(2){display:grid;gap:3px}.field-update-row small{color:var(--muted)}.field-update-row em{color:var(--danger);font-size:12px;font-style:normal}.field-asset-glyph{width:42px;height:42px;border-radius:13px;background:var(--surface-2,var(--bg));color:var(--accent);display:grid;place-items:center}.field-asset-glyph svg{width:21px;height:21px}.field-submit-panel{padding:20px}.field-submit-panel>div{min-width:0}.field-submit-panel .btn{min-width:190px}
.field-update-form{display:grid;gap:16px}.field-update-form>section{padding:20px;display:grid;gap:16px}.field-update-form>section>header{display:flex;align-items:flex-start;gap:12px}.field-update-form>section>header>span{width:30px;height:30px;border-radius:10px;background:var(--accent);color:var(--accent-contrast,#07131d);font-weight:850;display:grid;place-items:center;flex:0 0 auto}.field-update-form h2{margin:0;font-size:20px}.field-update-form header p{margin:3px 0 0;color:var(--muted);line-height:1.4}.field-update-form label{display:grid;gap:7px}.field-update-form label>span{font-size:13px;font-weight:700;color:var(--muted)}.field-two{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.field-unit-control{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center}.field-unit-control .control{border-radius:12px 0 0 12px}.field-unit-control b{align-self:stretch;min-width:54px;border:1px solid var(--line);border-left:0;border-radius:0 12px 12px 0;background:var(--surface-2,var(--bg));display:grid;place-items:center;color:var(--muted)}
.field-inline-actions{display:flex;gap:8px;flex-wrap:wrap}.field-file-button{display:inline-flex!important;align-items:center;justify-content:center;cursor:pointer}.field-file-button input{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none}.field-photo-preview{display:grid;grid-template-columns:minmax(140px,260px) minmax(0,1fr);gap:14px;align-items:center;padding:12px;border-radius:14px;background:var(--surface-2,var(--bg))}.field-photo-preview img{width:100%;height:150px;object-fit:cover;border-radius:12px}.field-gps-readout{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}.field-gps-readout span{background:var(--surface-2,var(--bg));padding:10px;border-radius:12px;display:grid;gap:3px;color:var(--muted);font-size:11px}.field-gps-readout b{color:var(--text);font-size:13px;overflow-wrap:anywhere}
.field-checklist{display:grid;gap:8px}.field-check{display:flex!important;grid-template-columns:none!important;align-items:center;gap:10px!important;padding:10px 12px;border:1px solid var(--line);border-radius:12px}.field-check input{width:20px;height:20px;accent-color:var(--accent)}.field-check span{color:var(--text)!important;font-weight:650!important}.field-update-form>footer,.field-review-detail>footer{display:flex;justify-content:flex-end;gap:10px}.field-update-form>footer .btn{min-width:150px}
.sync-summary{grid-template-columns:1fr 1fr auto}.sync-summary>.btn{margin:12px}.sync-center-row{display:grid;grid-template-columns:70px minmax(0,1fr) auto auto;gap:12px;align-items:center;padding:14px 18px;border-top:1px solid var(--line)}.sync-center-row:first-child{border-top:0}.sync-center-row>span:first-child{font-size:11px;font-weight:800;text-transform:uppercase;color:var(--muted)}.sync-center-row>div{display:grid;gap:3px}.sync-center-row small{color:var(--muted);overflow-wrap:anywhere}
.field-filter-tabs{display:grid;grid-template-columns:repeat(auto-fit,minmax(126px,1fr));gap:8px}.field-filter-tabs button{border:1px solid var(--line);border-radius:14px;background:var(--surface);color:var(--text);padding:14px;display:flex;justify-content:space-between;gap:8px}.field-filter-tabs button.active{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 10%,var(--surface))}.field-filter-tabs b{min-width:24px;height:24px;border-radius:8px;background:var(--surface-2,var(--bg));display:grid;place-items:center}
.field-issue-row{padding:16px 18px;border-top:1px solid var(--line);display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:14px;align-items:start}.field-issue-row:first-child{border-top:0}.field-issue-row p{margin:5px 0;color:var(--text);line-height:1.45}.field-issue-row small{color:var(--muted)}.field-severity{font-size:10px;font-weight:850;text-transform:uppercase;padding:7px 9px;border-radius:8px;background:var(--surface-2,var(--bg))}.field-severity.critical,.field-severity.high{color:var(--danger)}.field-severity.medium{color:var(--warning)}.field-manager-links{display:flex;gap:10px;flex-wrap:wrap}
.field-review-detail{padding:20px;display:grid;gap:18px}.field-review-detail>header{padding:0}.field-review-detail dl{margin:0}.field-review-detail>p{margin:0;line-height:1.55}.field-review-photos{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:10px}.field-review-photos img{width:100%;height:190px;object-fit:cover;border-radius:14px}.field-review-photos>div{min-height:100px;border:1px dashed var(--line);border-radius:14px;padding:14px;display:grid;align-content:center;gap:5px}.field-review-photos small{color:var(--muted);overflow-wrap:anywhere}.template-form{grid-template-columns:minmax(0,1fr)}.template-list{display:grid}.template-row{display:grid;grid-template-columns:minmax(0,1fr) auto auto;align-items:center;gap:12px;padding:14px 18px;border-top:1px solid var(--line)}.template-row:first-child{border-top:0}.template-row>div{display:grid;gap:3px}.template-row small{color:var(--muted)}.se-focus-card .field-primary{align-self:flex-start}
@media(max-width:720px){.field-workflow{padding-top:0;gap:14px}.field-page-head{grid-template-columns:60px minmax(0,1fr) 42px;gap:10px}.field-page-head h1{font-size:25px}.field-page-head p{font-size:13px}.field-sync-shortcut{width:42px;height:42px}.field-start-panel{min-height:0;padding:28px 20px}.field-start-panel dl,.field-review-detail dl{grid-template-columns:1fr}.field-command-row{grid-template-columns:1fr 1fr}.field-command-row .field-primary{grid-column:1/-1}.field-session-strip{grid-template-columns:repeat(3,1fr)}.field-session-strip>div{padding:13px}.field-session-strip strong{font-size:23px}.field-submit-panel{align-items:stretch;flex-direction:column}.field-submit-panel .btn{width:100%;min-width:0}.field-two{grid-template-columns:1fr}.field-photo-preview{grid-template-columns:1fr}.field-gps-readout{grid-template-columns:1fr}.field-update-form>footer{position:sticky;bottom:82px;z-index:3;background:var(--bg);padding:10px 0}.field-update-form>footer .btn{min-width:0;flex:1}.sync-summary{grid-template-columns:1fr 1fr}.sync-summary>.btn{grid-column:1/-1}.sync-center-row{grid-template-columns:58px minmax(0,1fr);align-items:start}.sync-center-row>.field-sync-state,.sync-center-row>.btn{grid-column:2}.field-filter-tabs{grid-template-columns:1fr 1fr}.field-issue-row{grid-template-columns:1fr}.field-issue-row .field-inline-actions{grid-column:1}.field-review-detail>footer{flex-direction:column}.template-row{grid-template-columns:minmax(0,1fr) auto}.template-row>.btn{grid-column:1/-1}.field-update-row{grid-template-columns:38px minmax(0,1fr)}.field-update-row>.field-sync-state,.field-update-row>.pill{grid-column:2}.field-asset-glyph{width:38px;height:38px}}
@media(prefers-reduced-motion:reduce){.field-workflow *{scroll-behavior:auto!important}}

/* Field routes use the document as their only vertical scroll owner. core.css
   intentionally clips horizontal overflow on .main/.content; per the CSS
   overflow axis rules that otherwise computes overflow-y:auto and creates a
   second, non-scrolling touch container above the page. That dead container
   swallowed wheel and swipe gestures on mobile web and some desktop browsers. */
.app:is(.route-field,.route-field-update,.route-field-issue,.route-sync-center,.route-field-operations,.route-field-templates,.route-field-update-review):not(.map-mode) .main{
  height:auto;
  min-height:100vh;
  min-height:100dvh;
  overflow-x:clip!important;
  overflow-y:visible;
  touch-action:pan-y;
}
.app:is(.route-field,.route-field-update,.route-field-issue,.route-sync-center,.route-field-operations,.route-field-templates,.route-field-update-review):not(.map-mode) .content{
  height:auto!important;
  min-height:calc(100dvh - 56px);
  overflow-x:clip!important;
  overflow-y:visible!important;
  overscroll-behavior-y:auto;
  touch-action:pan-y;
  -webkit-overflow-scrolling:touch;
}
@media(max-width:980px){
  body:has(.app:is(.route-field,.route-field-update,.route-field-issue,.route-sync-center,.route-field-operations,.route-field-templates,.route-field-update-review)) #root{
    overflow-x:clip;
    overflow-y:visible;
    touch-action:pan-y;
  }
}

/* Duty attached to a quick update. Tokens only -- this surface renders in both
   themes (light, and the body.dark palettes in core.css), so no literal
   colours: the border/label/text all derive from the same token set as the
   card behind them. */
.field-duty-link{
  display:flex;
  align-items:center;
  gap:12px;
  flex-wrap:wrap;
  padding:14px 16px;
  border:1px solid var(--line);
  border-left:3px solid var(--accent);
  border-radius:14px;
  background:var(--surface);
  color:var(--text);
}
.field-duty-link.is-general{ border-left-color:var(--line); }
.field-duty-label{
  font-size:11px;
  font-weight:800;
  letter-spacing:.12em;
  text-transform:uppercase;
  color:var(--muted);
}
.field-duty-name{ display:grid; gap:2px; min-width:0; flex:1 1 auto; }
.field-duty-name strong{ color:var(--text); overflow-wrap:anywhere; }
.field-duty-name small{ color:var(--muted); line-height:1.4; overflow-wrap:anywhere; }
@media(max-width:720px){
  .field-duty-link{ padding:12px 14px; gap:8px; }
}

/* The generic dark-mode button override in core.css
   (`body.dark .btn:not(.danger):not(.warn):not(.secondary)`, specificity 0,5,1)
   repaints EVERY .btn with one light-blue gradient and dark navy text. That is
   fine for a plain button, but it also swallowed the two field buttons: the
   primary lost its accent fill and the urgent button stopped looking urgent -
   a "Problem" button rendered identically to "Start work". These two rules
   carry three :not()s purely to out-specify that override (0,6,1 > 0,5,1).
   Light mode is included so the urgent button clears 4.5:1: plain
   var(--danger) text on the panel measured 4.09:1, so it gets a tinted plate
   and a deepened label instead. */
.btn.field-urgent:not(.secondary):not(.danger):not(.warn) {
  background: color-mix(in srgb, var(--danger) 12%, var(--surface)) !important;
  /* Deepened against --ink rather than a literal black: this file's own
     token rule (tests/site-map-field.test.js) forbids hex here, and --ink is
     the per-theme "darkest legible" already. Plain var(--danger) on the panel
     measured 4.09:1, just under AA. */
  color: color-mix(in srgb, var(--danger) 74%, var(--ink)) !important;
  border-color: color-mix(in srgb, var(--danger) 55%, transparent) !important;
}
body.dark .btn.field-primary:not(.secondary):not(.danger):not(.warn) {
  background: var(--accent) !important;
  color: var(--accent-contrast) !important;
  border-color: transparent !important;
}
body.dark .btn.field-urgent:not(.secondary):not(.danger):not(.warn) {
  background: color-mix(in srgb, var(--danger) 20%, transparent) !important;
  color: var(--danger) !important;
  border-color: color-mix(in srgb, var(--danger) 55%, transparent) !important;
}


/* The console gained a fifth view (Approved). The tab row was a fixed four
   columns, so the fifth dropped to a row of its own and sat half-width against
   the edge; auto-fit lets the row decide how many fit, and on the two-column
   phone layout an odd last tab takes the whole row instead of leaving a hole. */
.field-filter-tabs button:last-child:nth-child(odd) { grid-column: 1 / -1; }
@media (min-width: 721px) {
  .field-filter-tabs button:last-child:nth-child(odd) { grid-column: auto; }
}
