:root{
  --color-primary:#2D7D46; --color-primary-dark:#1a5c30; --color-primary-light:#e8f5ed;
  --color-accent:#F4A300; --color-danger:#D94F4F;
  --color-neutral-dark:#1E2A1F; --color-neutral-mid:#5A6B5C; --color-neutral-light:#F0F4F0; --color-white:#fff;
  --farm-wusha:#2D7D46; --farm-almaimoon:#3B82C4; --farm-wusha-charity:#9B59B6;
  --farm-wadi-sfai:#E67E22; --farm-almudinah:#E74C3C; --farm-alzubair:#16A085;
  --plot-crop:#2D7D46; --plot-animal:#8B5E3C; --plot-admin:#7A8A7C; --plot-resting:#F4A300; --plot-mixed:#6B8E4E; --plot-greenhouse:#2FA6A0;
  --radius:10px; --radius-sm:6px; --shadow:0 2px 8px rgba(0,0,0,.08);
  --font:'Segoe UI',system-ui,sans-serif;
}
*{box-sizing:border-box}
html,body{margin:0;height:100%}
body{font-family:var(--font);background:var(--color-neutral-light);color:var(--color-neutral-dark);-webkit-text-size-adjust:100%}
.hidden{display:none !important}
.muted{color:var(--color-neutral-mid);font-size:.85rem}
.error{color:var(--color-danger);font-size:.85rem}
a{color:inherit;text-decoration:none}
code{font-family:ui-monospace,Menlo,monospace}

/* Buttons */
.btn{border:0;border-radius:var(--radius-sm);padding:.6rem 1rem;font-size:.95rem;font-weight:600;cursor:pointer}
.btn-primary{background:var(--color-primary);color:#fff}
.btn-primary:active{background:var(--color-primary-dark)}
.btn-accent{background:var(--color-accent);color:#1E2A1F}
.btn-ghost{background:transparent;color:var(--color-primary);border:1px solid var(--color-primary)}
.btn-danger{background:var(--color-danger);color:#fff}
.btn-block{display:block;width:100%}
.icon-btn{background:transparent;border:0;color:#fff;font-size:1.3rem;cursor:pointer;padding:.2rem .5rem}

/* Login */
.login{min-height:100vh;display:flex;align-items:center;justify-content:center;background:linear-gradient(160deg,var(--color-primary-dark),var(--color-primary))}
.login-card{background:#fff;border-radius:var(--radius);padding:2rem;width:min(92vw,360px);box-shadow:var(--shadow);display:flex;flex-direction:column;gap:.75rem}
.login-card h1{margin:0;color:var(--color-primary);text-align:center}
.login-card>p{margin:0;text-align:center}
.login-card label{display:flex;flex-direction:column;font-size:.8rem;color:var(--color-neutral-mid);gap:.25rem}
.login-card input{padding:.6rem;border:1px solid #cdd6cf;border-radius:var(--radius-sm);font-size:1rem}

/* App shell */
.app{min-height:100vh;display:flex;flex-direction:column}
.topbar{position:sticky;top:0;z-index:1000;background:var(--color-primary);color:#fff;display:flex;align-items:center;gap:.5rem;padding:.7rem 1rem;font-weight:600;box-shadow:var(--shadow)}
#topbar-title{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.topbar-right{display:flex;align-items:center;gap:.5rem}
.who{font-size:.75rem;font-weight:400;opacity:.9}
.view{flex:1;padding:1rem;padding-bottom:5rem;max-width:1100px;margin:0 auto;width:100%}

/* Bottom tab bar */
.tabbar{position:fixed;bottom:0;left:0;right:0;height:4rem;background:#fff;border-top:1px solid #dfe6e0;display:flex;z-index:1000}
.tabbar a{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;font-size:1.3rem;color:var(--color-neutral-mid);gap:.1rem}
.tabbar a span{font-size:.65rem}
.tabbar a.active{color:var(--color-primary)}

/* Cards & grid */
.grid{display:grid;gap:.85rem;grid-template-columns:1fr}
@media(min-width:680px){.grid{grid-template-columns:repeat(2,1fr)}}
@media(min-width:980px){.grid.g3{grid-template-columns:repeat(3,1fr)}}
.card{background:#fff;border-radius:var(--radius);box-shadow:var(--shadow);padding:1rem;border-left:5px solid var(--color-primary)}
.card h3{margin:.1rem 0 .4rem}
.card .row{display:flex;justify-content:space-between;font-size:.85rem;color:var(--color-neutral-mid);padding:.1rem 0}
.section-title{margin:1.2rem 0 .5rem;font-size:1rem}
.stat-row{display:flex;gap:.6rem;flex-wrap:wrap;margin:.5rem 0}
.stat{background:#fff;border-radius:var(--radius);box-shadow:var(--shadow);padding:.7rem .9rem;flex:1;min-width:90px;text-align:center}
.stat b{display:block;font-size:1.4rem;color:var(--color-primary)}
.stat small{color:var(--color-neutral-mid);font-size:.7rem}

/* Chips */
.chip{display:inline-block;padding:.15rem .55rem;border-radius:999px;font-size:.72rem;font-weight:600}
.chip-open{background:#e7eae8;color:#5A6B5C}
.chip-in_progress{background:#fdebc7;color:#8a6100}
.chip-done{background:#d8f0e0;color:#1a5c30}
.chip-critical,.chip-rejected{background:#fbe0e0;color:#9e2b2b}
.chip-submitted{background:#e7eae8;color:#5A6B5C}
.chip-approved{background:#d8f0e0;color:#1a5c30}
.chip-mono{font-family:ui-monospace,Menlo,monospace;background:var(--color-primary-light);color:var(--color-primary-dark);padding:.15rem .5rem;border-radius:var(--radius-sm)}
.use-crop{border-left-color:var(--plot-crop)}
.use-animal{border-left-color:var(--plot-animal)}
.use-admin{border-left-color:var(--plot-admin)}
.use-resting{border-left-color:var(--plot-resting)}
.use-mixed{border-left-color:var(--plot-mixed)}
.use-greenhouse{border-left-color:var(--plot-greenhouse)}

/* Map */
#farm-map{height:calc(100vh - 9rem);width:100%;border-radius:var(--radius);overflow:hidden}
.map-toolbar{display:flex;gap:.5rem;align-items:center;margin-bottom:.6rem;flex-wrap:wrap}
.legend{display:flex;gap:.6rem;flex-wrap:wrap;font-size:.72rem;color:var(--color-neutral-mid);margin:.4rem 0}
.legend span{display:inline-flex;align-items:center;gap:.25rem}
.legend i{width:.8rem;height:.8rem;border-radius:3px;display:inline-block}
.sensor-badge{background:#fff;border-radius:6px;padding:1px 5px;font-size:.65rem;font-weight:700;box-shadow:0 1px 4px rgba(0,0,0,.3);border:1px solid #ccc}
.sensor-badge.warn{background:#fff4d6;border-color:var(--color-accent);color:#8a6100}

/* Tables (desktop) */
table{width:100%;border-collapse:collapse;background:#fff;border-radius:var(--radius);overflow:hidden;box-shadow:var(--shadow)}
th,td{text-align:left;padding:.55rem .7rem;font-size:.85rem;border-bottom:1px solid #eef2ef}
th{background:var(--color-primary-light);color:var(--color-primary-dark)}

/* Forms / sheets */
.toolbar{display:flex;justify-content:space-between;align-items:center;margin-bottom:.8rem;gap:.5rem;flex-wrap:wrap}
.sheet-overlay{position:fixed;inset:0;background:rgba(0,0,0,.35);z-index:2000;display:flex;align-items:flex-end;justify-content:center}
.sheet{background:#fff;width:min(100vw,560px);max-height:88vh;overflow:auto;border-radius:18px 18px 0 0;padding:1.2rem;animation:slideup .2s ease}
@media(min-width:680px){.sheet-overlay{align-items:center}.sheet{border-radius:18px}}
@keyframes slideup{from{transform:translateY(100%)}to{transform:translateY(0)}}
.sheet h2{margin:.2rem 0 1rem}

/* Landscape farm picker: fields on the left, map filling the right (stacks on mobile). */
.fs-row{display:flex;gap:1rem}
.fs-form{flex:0 0 260px;min-width:0}
.fs-map{flex:1 1 auto;min-width:0}
.fs-map #farm-pick-map{width:100%;height:clamp(360px,64vh,560px);border-radius:8px;overflow:hidden}
@media(min-width:680px){.sheet-wide{width:min(96vw,940px)}}
@media(max-width:679px){
  .fs-row{flex-direction:column}
  .fs-form{flex:1 1 auto}
  .fs-map #farm-pick-map{height:clamp(280px,50vh,420px)}
}
.field{display:flex;flex-direction:column;gap:.25rem;margin-bottom:.8rem;font-size:.8rem;color:var(--color-neutral-mid)}
.field input,.field select,.field textarea{padding:.6rem;border:1px solid #cdd6cf;border-radius:var(--radius-sm);font-size:1rem;font-family:inherit}
.sheet-actions{display:flex;gap:.6rem;margin-top:.5rem}
.farm-multi{display:flex;flex-direction:column;gap:.25rem;margin:.3rem 0 .2rem}
.farm-check{font-size:.9rem;display:flex;align-items:center;gap:.4rem}
.photo-picker{display:flex;gap:.4rem;align-items:center;flex-wrap:wrap}
.photo-picker .picker-name{font-size:.8rem;color:var(--color-neutral-mid)}

/* Toast */
.toast{position:fixed;bottom:5rem;left:50%;transform:translateX(-50%);background:var(--color-neutral-dark);color:#fff;padding:.6rem 1rem;border-radius:999px;font-size:.85rem;z-index:3000;box-shadow:var(--shadow)}

.empty{text-align:center;color:var(--color-neutral-mid);padding:2rem 1rem}
.empty .btn{margin-top:.8rem}
.weatherbar{display:flex;gap:1rem;background:#fff;border-radius:var(--radius);box-shadow:var(--shadow);padding:.6rem 1rem;margin-bottom:1rem;font-size:.85rem;align-items:center;flex-wrap:wrap}
.weatherbar b{color:var(--color-primary)}
.list-toggle{display:flex;gap:.3rem}
.list-toggle button{padding:.35rem .7rem;border:1px solid var(--color-primary);background:#fff;color:var(--color-primary);font-size:.8rem;cursor:pointer}
.list-toggle button.active{background:var(--color-primary);color:#fff}
.list-toggle button:first-child{border-radius:var(--radius-sm) 0 0 var(--radius-sm)}
.list-toggle button:last-child{border-radius:0 var(--radius-sm) var(--radius-sm) 0}

/* Charts (pure CSS bars, no library) */
.chart{display:flex;align-items:flex-end;gap:10px;height:160px;padding:14px 10px 8px;background:#fff;border-radius:var(--radius);box-shadow:var(--shadow);overflow-x:auto}
.bar-col{flex:1;min-width:34px;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;height:100%;gap:3px}
.bar-stack{display:flex;align-items:flex-end;gap:3px;height:100%;width:100%;justify-content:center}
.bar{width:46%;border-radius:4px 4px 0 0;min-height:2px;transition:height .3s}
.bar-grouped{width:30%}
.bar-label{font-size:.6rem;color:var(--color-neutral-mid);text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
.bar-val{font-size:.58rem;font-weight:700;color:var(--color-neutral-dark)}
.chart-legend{display:flex;gap:1rem;font-size:.7rem;color:var(--color-neutral-mid);margin:.4rem 0}
.chart-legend i{width:.7rem;height:.7rem;border-radius:2px;display:inline-block;margin-right:.25rem;vertical-align:middle}

/* Settings */
.settings-grid{display:grid;gap:.85rem;grid-template-columns:1fr}
@media(min-width:680px){.settings-grid{grid-template-columns:repeat(2,1fr)}}
.settings-card{background:#fff;border-radius:var(--radius);box-shadow:var(--shadow);padding:1.1rem;cursor:pointer;display:flex;gap:.8rem;align-items:center;border-left:5px solid var(--color-neutral-mid)}
.settings-card .ico{font-size:1.6rem}
.settings-card h3{margin:0}
.settings-card p{margin:.15rem 0 0;font-size:.78rem;color:var(--color-neutral-mid)}
#settings-btn{font-size:1.15rem}

/* Calendar agenda */
.agenda-day{position:sticky;top:3.1rem;background:var(--color-neutral-light);font-weight:700;font-size:.8rem;color:var(--color-neutral-mid);padding:.5rem .2rem .25rem;border-bottom:2px solid #dfe6e0;z-index:5}
.agenda-day.agenda-today{color:var(--color-primary)}
.agenda-event{display:flex;align-items:center;gap:.5rem;background:#fff;border-radius:var(--radius-sm);box-shadow:var(--shadow);padding:.6rem .8rem;margin:.45rem 0}
.agenda-main{flex:1;min-width:0}
.agenda-main>div{overflow:hidden;text-overflow:ellipsis}
.agenda-actions{display:flex;gap:.35rem;flex-shrink:0}
.btn-sm{padding:.3rem .6rem;font-size:.75rem}

/* Lifecycle editor rows */
.lifecycle-activity-row{display:grid;grid-template-columns:1fr 1fr;gap:.4rem;background:var(--color-neutral-light);border-radius:var(--radius-sm);padding:.55rem;margin-bottom:.5rem;position:relative}
.lifecycle-activity-row .field{margin-bottom:0;font-size:.7rem}
.lifecycle-activity-row .row-del{position:absolute;top:.3rem;right:.4rem;cursor:pointer;color:var(--color-danger);font-weight:700}

/* Crop guide cards */
.crop-top{display:flex;gap:.7rem;align-items:flex-start}
.crop-thumb{width:72px;height:72px;border-radius:var(--radius-sm);object-fit:cover;flex-shrink:0;background:var(--color-neutral-light)}

/* History timeline */
.history-entry{border-left:3px solid var(--color-primary-light);padding:.4rem .7rem;margin:.3rem 0}
.history-entry b{font-size:.8rem}
.history-entry .diff{font-size:.72rem;color:var(--color-neutral-mid);font-family:ui-monospace,Menlo,monospace}

/* ---- Mobile polish (phone-first, ≤480px) ---- */
@media(max-width:480px){
  /* Wide tables scroll WITHIN their own box instead of breaking the page width */
  table{display:block;overflow-x:auto;-webkit-overflow-scrolling:touch}
  th,td{white-space:nowrap}
  /* Toolbars stack so buttons & the farm picker are full-width and easy to tap */
  .toolbar{flex-direction:column;align-items:stretch}
  .toolbar>.btn,.toolbar>select,.toolbar>.list-toggle{width:100%}
  .toolbar>.list-toggle{display:flex}
  .toolbar>.list-toggle button{flex:1}
  /* Comfortable tap targets (≥44px) */
  .btn{min-height:44px}
  .tabbar a{min-height:44px}
  /* Reclaim cramped sheet width */
  .sheet{padding:.85rem}
  .sheet-actions .btn{flex:1}
  /* Schedule editor: one field per line on a narrow screen */
  .lifecycle-activity-row{grid-template-columns:1fr}
  /* Slimmer chart bars so more fit before scrolling */
  .bar-col{min-width:24px}
}

/* Month calendar grid */
.cal-nav{display:flex;align-items:center;justify-content:center;gap:1rem;margin:.4rem 0}
.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:3px;background:#dfe6e0;border-radius:var(--radius);overflow:hidden;padding:3px}
.cal-dow{background:var(--color-primary-light);color:var(--color-primary-dark);text-align:center;font-size:.62rem;font-weight:700;padding:.25rem 0}
.cal-cell{background:#fff;min-height:64px;padding:2px 3px;display:flex;flex-direction:column;gap:2px;overflow:hidden}
.cal-cell[onclick],.cal-cell{cursor:default}
.cal-cell:has(.cal-chip){cursor:pointer}
.cal-other{background:#f6f8f6;color:#9bb0a0}
.cal-today{outline:2px solid var(--color-accent);outline-offset:-2px}
.cal-daynum{font-size:.62rem;font-weight:700;color:var(--color-neutral-mid);text-align:right}
.cal-other .cal-daynum{color:#b8c6ba}
.cal-chip{font-size:.56rem;line-height:1.25;color:#fff;border-radius:3px;padding:1px 3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cal-more{font-size:.55rem;color:var(--color-neutral-mid)}
@media(max-width:520px){.cal-cell{min-height:52px}.cal-chip{font-size:.5rem}}

/* AI prompt preview */
.ai-prompt{background:var(--color-neutral-light);border:1px solid #dfe6e0;border-radius:var(--radius-sm);padding:.5rem .6rem;font-size:.72rem;white-space:pre-wrap;word-break:break-word;font-family:ui-monospace,Menlo,monospace;margin:.2rem 0 .6rem}
.soon-badge{display:inline-block;background:var(--color-accent);color:#1E2A1F;font-size:.6rem;font-weight:700;border-radius:999px;padding:.05rem .45rem;margin-left:.4rem;vertical-align:middle}

/* ============================================================================
   Interaction & polish layer — refinements on top of the locked visual system.
   Uses only the existing design tokens; no colours/spacing invented.
   ============================================================================ */

/* Motion (respecting reduced-motion preference) */
.card,.settings-card,.stat,.btn,.tabbar a,.agenda-event{transition:box-shadow .18s ease,transform .12s ease,filter .12s ease,color .15s ease}
@media(prefers-reduced-motion:reduce){*{animation-duration:.001ms !important;transition-duration:.001ms !important}}

/* Tactile feedback for tappable surfaces (pointer devices only) */
@media(hover:hover){
  .card:hover{box-shadow:0 6px 18px rgba(0,0,0,.12)}
  .settings-card:hover{box-shadow:0 6px 18px rgba(0,0,0,.12);transform:translateY(-2px)}
  .stat:hover{box-shadow:0 4px 12px rgba(0,0,0,.1)}
  .btn-primary:hover{filter:brightness(1.06)}
  .btn-accent:hover{filter:brightness(1.04)}
  .btn-ghost:hover{background:var(--color-primary-light)}
}
.btn:active{transform:translateY(1px)}
.card:active{box-shadow:var(--shadow)}

/* Keyboard accessibility — visible focus ring (was missing) */
a:focus-visible,button:focus-visible,.btn:focus-visible,.icon-btn:focus-visible,
.card:focus-visible,.settings-card:focus-visible,summary:focus-visible{
  outline:2px solid var(--color-accent);outline-offset:2px;border-radius:var(--radius-sm)
}
input:focus,select:focus,textarea:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 3px var(--color-primary-light)}

/* Active tab gets an accent indicator, not just a colour shift */
.tabbar a{position:relative}
.tabbar a.active::before{content:'';position:absolute;top:0;left:22%;right:22%;height:3px;border-radius:0 0 4px 4px;background:var(--color-primary)}

/* Loading spinner — replaces the bare "Loading…" text */
.spinner{display:inline-block;width:1.15rem;height:1.15rem;border:2.5px solid var(--color-primary-light);border-top-color:var(--color-primary);border-radius:50%;animation:spin .7s linear infinite;vertical-align:-.25rem}
@keyframes spin{to{transform:rotate(360deg)}}
.loading-row{display:flex;align-items:center;gap:.6rem;color:var(--color-neutral-mid);padding:1.6rem .2rem;font-size:.9rem}

/* Toast entrance */
.toast{animation:toastin .2s ease}
@keyframes toastin{from{opacity:0;transform:translate(-50%,10px)}to{opacity:1;transform:translate(-50%,0)}}

/* Sheet overlay fade so the slide-up doesn't pop against a hard backdrop */
.sheet-overlay{animation:fadein .15s ease}
@keyframes fadein{from{opacity:0}to{opacity:1}}

/* Slightly stronger weather/summary bar so KPIs read as a unit */
.weatherbar{border:1px solid #e4ebe5}

/* Daily Sheet (BD-101/BD-102) — the design's tab strip, flat totals cards, the grid */
.dly-tabs{display:flex;align-items:center;gap:.15rem;background:var(--color-neutral-dark);margin:-1rem -1rem .8rem;padding:0 .8rem}
.dly-tabs button{border:none;cursor:pointer;padding:.7rem 1.1rem;font-size:.9rem;font-weight:600;background:transparent;color:#b9c2ba}
.dly-tabs button.active{background:var(--color-neutral-light);color:var(--color-neutral-dark)}
.dly-tabs-who{margin-left:auto;font-size:.75rem;color:#b9c2ba}
.daily-totals{display:flex;gap:.6rem;flex-wrap:wrap;position:sticky;top:3.2rem;z-index:50;background:var(--color-neutral-light);padding:.35rem 0;margin-bottom:.6rem}
.dly-tot{flex:1;min-width:9rem;background:#fff;border:1px solid #dfe6e0;border-radius:var(--radius-sm);padding:.55rem .8rem}
.dly-tot-label{font-size:.66rem;text-transform:uppercase;letter-spacing:.06em;color:var(--color-neutral-mid)}
.dly-tot-val{font-size:1.15rem;font-weight:700;margin-top:.1rem}
.dly-table th{text-transform:uppercase;font-size:.68rem;letter-spacing:.05em}
.dly-table th,.dly-table td{padding:.42rem .5rem;font-size:.82rem}
.dly-table td:nth-child(9){max-width:12rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.dly-entry select,.dly-entry input{width:100%;border:1px solid #dfe7df;border-radius:var(--radius-sm);padding:.32rem .4rem;font-size:.82rem;background:#fff}
.dly-entry td{padding:.3rem .35rem}
.dly-hint{display:block;font-size:.7rem;margin-top:.15rem}
@media(max-width:679px){.dly-tabs{margin:-1rem -1rem .8rem}.dly-tot{min-width:7.5rem}.dly-tot-val{font-size:.98rem}}

/* Launcher tiles + Money bands (U4). Visual weight DESCENDS down the Money domain: the eye should
   land on "Daily Sheet" first and on "Opening balances" last. */
.tile{text-align:center;cursor:pointer}
.tile-icon{font-size:1.6rem}
.tile-hint{color:var(--color-neutral-mid);font-size:.72rem}
.tile-soon{opacity:.7}
.band-label{font-size:.68rem;text-transform:uppercase;letter-spacing:.08em;color:var(--color-neutral-mid);margin:.7rem 0 .35rem;padding-bottom:.2rem;border-bottom:1px solid #dfe6e0}
.tiles-big .tile{background:var(--color-primary-light)}
.tiles-big .tile-icon{font-size:2rem}
.tiles-quiet .tile{box-shadow:none;border:1px solid #dfe6e0;border-left-width:5px;padding:.6rem;font-size:.85rem;color:var(--color-neutral-mid)}
.tiles-quiet .tile-icon{font-size:1.1rem}
@media(min-width:980px){.grid.g3.tiles-quiet{grid-template-columns:repeat(5,1fr)}}

/* Buy trees / livestock (U3) — the one form where money and quantity legitimately meet, so the
   two outcomes sit side by side rather than being blended into one summary line. */
.buy-outcome{display:flex;gap:0;flex-wrap:wrap;background:var(--color-neutral-light);border-radius:var(--radius-sm);margin:.7rem 0;overflow:hidden}
.buy-half{flex:1;min-width:11rem;padding:.6rem .8rem}
.buy-half+.buy-half{border-left:1px solid #dfe6e0}
.buy-half-head{font-size:.68rem;text-transform:uppercase;letter-spacing:.08em;color:var(--color-neutral-mid);margin-bottom:.2rem}
.buy-big{font-size:1.05rem;font-weight:700;font-family:ui-monospace,Menlo,monospace}
.buy-half .muted{font-size:.76rem;display:block}
@media(max-width:520px){.buy-half+.buy-half{border-left:0;border-top:1px solid #dfe6e0}}

/* The books (U2) — trial balance / account ledger / payables. The trial balance is the one screen
   where a table beats cards even on a phone, because the columns ARE the meaning; it scrolls inside
   its own container so the page never scrolls sideways. */
.tb-table th,.tb-table td{padding:.42rem .55rem;font-size:.82rem;white-space:nowrap}
.tb-num{text-align:right;font-family:ui-monospace,Menlo,monospace}
.tb-group td{background:var(--color-neutral-light);font-weight:700;font-size:.72rem;text-transform:uppercase;letter-spacing:.06em;color:var(--color-neutral-mid)}
.tb-row{cursor:pointer}
.tb-row:hover{background:var(--color-primary-light)}
.tb-row-bad td:first-child{box-shadow:inset 3px 0 0 var(--color-danger)}
.tb-foot td{background:var(--color-primary-light);font-weight:700;border-top:2px solid var(--color-primary)}
.tb-foot-bad td{background:#fdeaea;color:var(--color-danger);border-top-color:var(--color-danger)}
.bk-warn{border-left-color:var(--color-accent);margin-bottom:1rem}

/* Print — clean report output (Phase 1V). Hide the app chrome so only #view content lands on
   paper; the browser's print dialog also does print-to-PDF (covers the deferred PDF export). Mark
   screen-only controls .no-print; mark paper-only content .print-only. */
.print-only{display:none}
@media print{
  .topbar,.tabbar,#sheet-overlay,#toast,.no-print{display:none !important}
  #view{padding:0 !important;overflow:visible !important}
  .print-only{display:block !important}
  table{width:100%;display:table !important;border-collapse:collapse;font-size:11pt}
  th,td{border:1px solid #999;padding:4px 8px;text-align:left}
  h3.section-title{margin-top:14px;page-break-after:avoid}
  tr{page-break-inside:avoid}
  a[href]::after{content:''}
}
