:root {
  --ink: #141210;
  --paper: #F6F2E8;
  --paper-3: #FCF9F1;
  --aged: #EAE4D2;
  --deep: #2A1F12;
  --soil: #4A3020;
  --soil-2: #6B4A33;
  --leaf: #1E4D10;
  --leaf-l: #3A7820;
  --leaf-bg: #E8F1DB;
  --water: #1A5070;
  --water-l: #2E7EA0;
  --water-bg: #E0EEF5;
  --straw: #9A7410;
  --straw-bg: #F5EDD0;
  --rust: #7A2810;
  --rust-bg: #FAEAE0;
  --good: #1A5E28;
  --caution: #7A5000;
  --alert: #8A1A00;
  --hedge: #4A6E10;
  --hedge-bg: #D8ECC0;
  --border: #C8BC98;
  --border-2: #E0D6B7;
  --dotted: #BFB28D;
  --muted: #6A6050;
  --muted-2: #8E866F;
  --gold: #B8960A;
  --surface: white;
  --surface-hover: #F0EBE0;
  /* Semantic state → palette mapping (Veganien Feldjournal redesign) */
  --state-prio:       #B33A00;
  --state-prio-bg:    var(--rust-bg);
  --state-due:        var(--water);
  --state-due-bg:     var(--water-bg);
  --state-ok:         var(--leaf-l);
  --state-ok-bg:      var(--leaf-bg);
  --state-unknown:    var(--straw);
  --state-unknown-bg: var(--straw-bg);
  --state-paused:     var(--water-l);
  --state-paused-bg:  #EAF1F5;
  --state-idle:       var(--muted);
  --state-idle-bg:    var(--aged);
  /* Type scale */
  --fs-page:    28px;
  --fs-section: 22px;
  --fs-h3:      17px;
  --fs-num-xl:  56px;
  --fs-num-l:   34px;
  --fs-num-m:   22px;
  --fs-eyebrow: 10px;
  --ls-eyebrow: 0.16em;
  /* Radii + elevation */
  --r-xs:   2px;
  --r-sm:   3px;
  --r-md:   5px;
  --r-lg:   8px;
  --r-pill: 99px;
  --elev-card:    0 1px 4px rgba(42, 31, 18, 0.06);
  --elev-card-2:  0 2px 8px rgba(42, 31, 18, 0.09);
  --elev-popover: 0 6px 22px rgba(42, 31, 18, 0.16);
}
* { margin: 0; padding: 0; box-sizing: border-box; }
/* Prevent horizontal overflow from breaking sticky headers on mobile.
   `overflow-x: clip` (instead of `hidden`) avoids creating a new
   containing block, so `position: sticky` keeps working in descendants. */
html { overflow-x: clip; }
body {
  background: var(--paper);
  color: var(--ink);
  font-family: 'Overpass', sans-serif;
  font-size: 13px;
  line-height: 1.7;
  max-width: 1080px;
  margin: 0 auto;
  padding: 36px 30px;
  overflow-x: clip;
  overflow-wrap: anywhere;
}

/* COVER */
.cover { border-top: 5px solid var(--soil); border-bottom: 3px double var(--border); padding: 24px 0 20px; margin-bottom: 36px; display: grid; grid-template-columns: 1fr auto; gap: 20px; align-items: end; }
.cover-eyebrow { font-family: 'Overpass Mono', monospace; font-size: 0.6rem; letter-spacing: 0.2em; text-transform: uppercase; color: var(--muted); margin-bottom: 6px; }
.cover h1 { font-family: 'Fraunces', serif; font-size: 2.5rem; font-weight: 900; color: var(--soil); line-height: 0.95; }
.cover h1 span { display: block; font-size: 0.9rem; font-weight: 300; font-style: italic; color: var(--muted); margin-top: 8px; }
.cover-meta { text-align: right; font-family: 'Overpass Mono', monospace; font-size: 0.62rem; color: var(--muted); line-height: 2.1; }
.version-badge { display: inline-block; border: 1.5px solid var(--gold); color: var(--gold); font-family: 'Overpass Mono', monospace; font-size: 0.6rem; letter-spacing: 0.12em; text-transform: uppercase; padding: 3px 10px; margin-bottom: 6px; }

.toc { background: var(--aged); border-left: 4px solid var(--soil); padding: 14px 18px; margin-bottom: 32px; display: grid; grid-template-columns: 1fr 1fr; gap: 4px 24px; }
.toc-title { font-family: 'Overpass Mono', monospace; font-size: 0.62rem; letter-spacing: 0.14em; text-transform: uppercase; color: var(--muted); grid-column: 1/-1; margin-bottom: 8px; }
.toc-item { font-size: 0.75rem; color: var(--soil); padding: 2px 0; border-bottom: 1px dotted var(--border); }
.toc-item a { color: inherit; text-decoration: none; display: block; }
.toc-item a:hover { color: var(--water); }

.chapter { font-family: 'Fraunces', serif; font-size: 1.5rem; font-weight: 700; color: var(--soil); border-bottom: 2px solid var(--border); padding-bottom: 8px; margin-bottom: 16px; margin-top: 40px; }
.chapter[id] { scroll-margin-top: calc(var(--gt-bar-h, 38px) + 56px); }
.chapter small { display: block; font-size: 0.72rem; font-weight: 300; font-style: italic; color: var(--muted); margin-top: 2px; }
.field-plan-frame { background: var(--surface); border: 1px solid var(--border); padding: 16px; overflow-x: auto; overflow-y: hidden; box-shadow: 0 1px 4px rgba(42, 31, 18, 0.04); scrollbar-color: var(--border) white; -webkit-overflow-scrolling: touch; }
.field-plan-frame svg { display: block; width: 100%; min-width: 920px; height: auto; }
.sec { font-family: 'Overpass Mono', monospace; font-size: 0.6rem; letter-spacing: 0.15em; text-transform: uppercase; color: var(--muted); border-bottom: 1px solid var(--border); padding-bottom: 5px; margin-bottom: 12px; margin-top: 24px; }

/* ROI */
.roi-intro { background: var(--water-bg); border-left: 4px solid var(--water); padding: 14px 18px; margin-bottom: 20px; font-size: 0.82rem; line-height: 1.8; }
.roi-intro strong { color: var(--water); }
.roi-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; margin-bottom: 16px; }
.roi-box { background: var(--surface); border: 1px solid var(--border); padding: 12px 14px; }
.roi-box.p1 { border-top: 4px solid var(--good); }
.roi-box.p2 { border-top: 4px solid var(--water); }
.roi-box.p3 { border-top: 4px solid var(--hedge); }
.roi-box.p4 { border-top: 4px solid var(--straw); }
.roi-box.p5 { border-top: 4px solid var(--muted); }
.roi-rank { font-family: 'Overpass Mono', monospace; font-size: 0.58rem; letter-spacing: 0.1em; text-transform: uppercase; color: var(--muted); margin-bottom: 4px; }
.roi-title { font-family: 'Fraunces', serif; font-size: 1rem; font-weight: 700; color: var(--soil); line-height: 1.1; margin-bottom: 4px; }
.roi-amount { font-family: 'Overpass Mono', monospace; font-size: 1.1rem; font-weight: 600; color: var(--good); margin: 6px 0; }
.roi-why { font-size: 0.72rem; color: var(--muted); line-height: 1.5; }
.roi-return { display: inline-block; background: #E8F4E0; color: var(--good); border: 1px solid #80C060; font-family: 'Overpass Mono', monospace; font-size: 0.6rem; padding: 2px 7px; margin-top: 6px; border-radius: 2px; }

/* HEDGE */
.hedge-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; margin-bottom: 14px; }
.hedge-card { background: var(--surface); border: 1px solid var(--border); border-left: 3px solid var(--hedge); padding: 10px 12px; }
.hedge-name { font-weight: 600; color: var(--hedge); font-size: 0.82rem; }
.hedge-latin { font-size: 0.68rem; color: var(--muted); font-style: italic; }
.hedge-desc { font-size: 0.72rem; color: var(--muted); margin-top: 4px; line-height: 1.45; }
.hedge-tag { display: inline-block; font-family: 'Overpass Mono', monospace; font-size: 0.55rem; padding: 1px 5px; border-radius: 2px; margin-top: 4px; }
.free { background: #E8F4E0; color: var(--good); border: 1px solid #80C060; }
.cheap { background: #F5EDD0; color: #633806; border: 1px solid #C8A030; }
.buy { background: #E0EEF8; color: #1A4D7A; border: 1px solid #5090C0; }

/* TABLES */
table.bt, table.bdt { width: 100%; border-collapse: collapse; font-size: 0.78rem; margin-bottom: 16px; }
table.bt th, table.bdt th { background: var(--soil); color: white; padding: 7px 10px; font-family: 'Overpass Mono', monospace; font-size: 0.6rem; letter-spacing: 0.07em; text-align: left; }
table.bt td, table.bdt td { padding: 6px 10px; border-bottom: 1px solid var(--aged); vertical-align: top; }
table.bt tr:hover td, table.bdt tr:hover td { background: var(--surface-hover); }
table.bt .gr td, table.bdt .gr td { background: var(--aged); font-family: 'Overpass Mono', monospace; font-size: 0.59rem; letter-spacing: 0.09em; text-transform: uppercase; color: var(--muted); padding: 4px 10px; }
table.bt .sub td { background: var(--surface-hover); font-weight: 600; }
table.bt .tot td { background: var(--soil); color: white; font-weight: 600; font-family: 'Overpass Mono', monospace; }
table.bdt td:first-child { font-family: 'Overpass Mono', monospace; white-space: nowrap; color: var(--soil); }
table.bdt td:nth-child(2) { white-space: nowrap; color: var(--muted); font-family: 'Overpass Mono', monospace; font-size: 0.68rem; }
.pc { font-family: 'Overpass Mono', monospace; font-weight: 600; color: var(--soil); white-space: nowrap; }
.ph { color: var(--good); font-weight: 600; }
.pm { color: var(--caution); font-weight: 600; }
.pl { color: var(--muted); }
.lk a { color: var(--water); text-decoration: none; font-size: 0.7rem; word-break: break-all; }
.lk a:hover { text-decoration: underline; }
.skip { color: var(--muted); font-style: italic; }

table.ct { width: 100%; border-collapse: collapse; font-size: 0.73rem; }
table.ct th { background: var(--soil); color: white; padding: 6px 9px; font-family: 'Overpass Mono', monospace; font-size: 0.57rem; letter-spacing: 0.07em; text-align: left; }
table.ct td { padding: 5px 9px; border-bottom: 1px solid var(--aged); vertical-align: top; }
table.ct tr:hover td { background: var(--surface-hover); }
table.ct .gr td { background: var(--aged); font-family: 'Overpass Mono', monospace; font-size: 0.57rem; letter-spacing: 0.09em; text-transform: uppercase; color: var(--muted); padding: 4px 9px; }
.b { display: inline-block; padding: 1px 5px; border-radius: 2px; font-family: 'Overpass Mono', monospace; font-size: 0.55rem; font-weight: 600; white-space: nowrap; }
.b-d { background: #F5EDD0; color: #633806; border: 1px solid #C8A030; }
.b-diy { background: #E0EEF8; color: #1A4D7A; border: 1px solid #5090C0; }
.b-f { background: #D6EDCC; color: #1E4D10; border: 1px solid #4A8A2E; }
.b-t { background: #D6EAF3; color: #0C447C; border: 1px solid #185FA5; }
.b-z { background: #C5E8DA; color: #085041; border: 1px solid #0F6E56; }
.b-n { background: #FDEBD0; color: #7A2800; border: 1px solid #C4581A; margin-left: 2px; }
.ok { color: var(--good); font-weight: 500; }
.qty { font-family: 'Overpass Mono', monospace; font-weight: 600; color: var(--soil); }
/* Kulturtabelle "Menge" cells derived from Section 7.1 by syncKulturtabelleFromBeetplan(). */
.gt-ct-menge { font-family: 'Overpass Mono', monospace; }
.gt-ct-bed-count { font-size: 0.74rem; font-weight: 700; color: var(--soil); display: inline-block; }
.gt-ct-bed-list { display: inline-block; margin-top: 2px; font-size: 0.66rem; color: var(--muted); cursor: help; }
.gt-ct-unassigned { font-family: 'Overpass Mono', monospace; font-size: 0.66rem; color: var(--muted); font-style: italic; cursor: help; }
table.ct tr.gt-ct-unassigned-row td { background: rgba(196, 88, 26, 0.04); }
table.ct tr.gt-ct-unassigned-row:hover td { background: rgba(196, 88, 26, 0.09); }
.tn { color: var(--leaf); font-weight: 600; }
.ts { color: var(--straw); font-weight: 600; }

/* SOIL */
.soil-row { display: grid; grid-template-columns: repeat(4, 1fr); gap: 10px; margin-bottom: 12px; }
.sc { background: var(--surface); border: 1px solid var(--border); padding: 10px 12px; }
.sl { font-family: 'Overpass Mono', monospace; font-size: 0.56rem; letter-spacing: 0.1em; text-transform: uppercase; color: var(--muted); margin-bottom: 3px; }
.sv { font-family: 'Fraunces', serif; font-size: 1.5rem; font-weight: 700; line-height: 1; }
.sv.good { color: var(--good); }
.sv.caut { color: var(--caution); }
.sd { font-size: 0.7rem; color: var(--muted); margin-top: 3px; line-height: 1.4; }

/* WATER */
.ws { background: #0A3550; border-radius: 4px; padding: 16px; font-family: 'Overpass Mono', monospace; font-size: 0.74rem; color: #A0D8F0; margin: 12px 0; line-height: 2.1; overflow-x: auto; white-space: pre; }
.wsc { color: #5AACCC; }

/* NOTES */
.note { background: var(--straw-bg); border-left: 3px solid var(--straw); padding: 10px 14px; font-size: 0.76rem; color: #4A3800; line-height: 1.7; margin-bottom: 10px; }
.note strong { color: var(--soil); }
.wnote { background: var(--water-bg); border-left: 3px solid var(--water); padding: 10px 14px; font-size: 0.76rem; color: #0A3550; line-height: 1.7; margin-bottom: 10px; }
.hnote { background: var(--hedge-bg); border-left: 3px solid var(--hedge); padding: 10px 14px; font-size: 0.76rem; color: #243A08; line-height: 1.7; margin-bottom: 10px; }
.verdict { background: var(--soil); color: white; padding: 18px 22px; margin: 16px 0; display: grid; grid-template-columns: 1fr 1fr; gap: 20px; }
.verdict h4 { font-family: 'Fraunces', serif; font-size: 0.85rem; font-weight: 300; font-style: italic; opacity: 0.6; margin-bottom: 4px; }
.verdict p { font-size: 0.76rem; line-height: 1.7; opacity: 0.9; }
.compliance { background: #EAF4E4; border: 1px solid #90C878; padding: 12px 16px; display: grid; grid-template-columns: 1fr 1fr; gap: 5px; font-size: 0.72rem; }
.ci { display: flex; gap: 5px; align-items: flex-start; }
.ck { color: var(--leaf); font-weight: 700; flex-shrink: 0; }
footer { margin-top: 32px; padding-top: 10px; border-top: 1px solid var(--border); font-family: 'Overpass Mono', monospace; font-size: 0.6rem; color: var(--muted); display: flex; justify-content: space-between; gap: 12px; flex-wrap: wrap; }

/* ── Live tracker ─────────────────────────────── */
.gt-bar { position: -webkit-sticky; position: sticky; top: 0; z-index: 50; background: var(--soil); color: white; padding: 8px 14px; font-family: 'Overpass Mono', monospace; font-size: 0.62rem; letter-spacing: 0.1em; text-transform: uppercase; display: flex; justify-content: space-between; align-items: center; gap: 8px; border-radius: 0 0 4px 4px; margin-bottom: 24px; flex-wrap: wrap; min-width: 0; }
.gt-bar.gt-warn { background: var(--caution); }
.gt-bar.gt-err { background: var(--alert); }
.gt-dot { display: inline-block; width: 8px; height: 8px; border-radius: 50%; background: #80E090; margin-right: 8px; vertical-align: middle; }
.gt-dot.off { background: #FFB0A0; }
.gt-bar button { background: var(--surface); color: var(--soil); border: 1px solid white; font-family: 'Overpass Mono', monospace; font-size: 0.6rem; letter-spacing: 0.1em; text-transform: uppercase; padding: 3px 9px; cursor: pointer; border-radius: 2px; }
.gt-bar button:hover { background: var(--aged); }
.gt-site-footer { text-align: center; padding: 18px 0 24px; display: flex; align-items: center; justify-content: center; gap: 0.5rem; flex-wrap: wrap; }
.gt-site-footer__legal { font-family: 'Overpass Mono', monospace; font-size: 0.75rem; letter-spacing: 0.08em; color: var(--muted); text-decoration: none; opacity: 0.6; transition: opacity 0.18s; }
.gt-site-footer__legal:hover { opacity: 1; }
.gt-site-footer__sep { font-family: 'Overpass Mono', monospace; font-size: 0.75rem; color: var(--muted); opacity: 0.4; }
.gt-site-footer__credit { display: inline-flex; align-items: center; gap: 0.4rem; font-family: 'Overpass Mono', monospace; font-size: 0.75rem; letter-spacing: 0.08em; color: var(--muted); text-decoration: none; opacity: 0.6; transition: opacity 0.18s; }
.gt-site-footer__credit:hover { opacity: 1; }
.gt-site-footer__logo { width: 1.1rem; height: 1.1rem; display: block; border-radius: 4px; object-fit: cover; }
@media print { .gt-site-footer { display: none; } }
.gt-week { font-family: 'Overpass Mono', monospace; font-size: 0.66rem; letter-spacing: 0.08em; text-transform: uppercase; padding: 3px 9px; background: rgba(255, 255, 255, 0.16); border: 1px solid rgba(255, 255, 255, 0.3); border-radius: 2px; color: white; }

.gt-nav { position: -webkit-sticky; position: sticky; top: var(--gt-bar-h, 38px); z-index: 45; display: flex; gap: 6px; align-items: center; overflow-x: auto; padding: 8px 0 10px; margin: -12px 0 18px; background: linear-gradient(180deg, var(--paper) 0%, rgba(246, 242, 232, 0.94) 80%, rgba(246, 242, 232, 0)); -webkit-overflow-scrolling: touch; min-width: 0; }
.gt-nav a { flex: 0 0 auto; color: var(--soil); border: 1px solid var(--border); background: rgba(255, 255, 255, 0.72); border-radius: 999px; padding: 5px 10px; font-family: 'Overpass Mono', monospace; font-size: 0.58rem; letter-spacing: 0.08em; text-transform: uppercase; text-decoration: none; }
.gt-nav a:hover { border-color: var(--soil); background: var(--surface); }
.gt-tabs a { padding: 7px 14px; font-size: 0.62rem; letter-spacing: 0.1em; }
.gt-tabs a.is-active { background: var(--soil); color: white; border-color: var(--soil); }
.gt-tabs a.is-active:hover { background: var(--soil); color: white; }

/* ── View visibility (tabbed shell) ─────────── */
/* Screen only: when a non-Plan view is active, hide any [data-views] node
   that does not list that view. Print is intentionally excluded — the
   printable masterplan must render every section regardless of active view. */
@media screen {
  body[data-view="heute"] [data-views]:not([data-views~="heute"]) { display: none; }
  body[data-view="beete"] [data-views]:not([data-views~="beete"]) { display: none; }
  body[data-view="kulturen"] [data-views]:not([data-views~="kulturen"]) { display: none; }
  body[data-view="einkaeufe"] [data-views]:not([data-views~="einkaeufe"]) { display: none; }
  /* Plan view = no hiding; full document scrolls as before. */
}

/* ── Reference chapter collapse (screen + Plan view only) ─────────────
   Chapters 1–5 are set-once reference material. In Plan view they collapse
   to a single toggle bar to keep the plan scannable. The specialized views
   (Einkäufe shows ch.4, Beete shows ch.5) and the printable masterplan
   always render the full content. */
@media screen {
  .gt-ref-toggle { display: none; }
  body[data-view="plan"] .gt-ref-toggle {
    display: flex; align-items: baseline; gap: 10px; width: 100%;
    margin: 18px 0 0; padding: 10px 14px; cursor: pointer; text-align: left;
    background: #F2ECDD; border: 1px solid var(--border); border-left: 4px solid var(--soil);
    font-family: 'Fraunces', serif; color: var(--soil);
  }
  body[data-view="plan"] .gt-ref-toggle:hover { background: #ECE4D0; }
  body[data-view="plan"] .gt-ref-toggle-title { font-size: 0.98rem; font-weight: 700; }
  body[data-view="plan"] .gt-ref-toggle-hint {
    margin-left: auto; font-family: 'Overpass Mono', monospace; font-style: normal;
    font-size: 0.58rem; letter-spacing: 0.1em; text-transform: uppercase; color: var(--muted);
  }
  body[data-view="plan"] .gt-ref-group.gt-ref-collapsed > :not(.gt-ref-toggle) { display: none; }
}
@media print {
  .gt-ref-toggle { display: none !important; }
  .gt-ref-group > :not(.gt-ref-toggle) { display: revert !important; }
}

.gt-workspace { display: flex; flex-direction: column; gap: 14px; margin: 12px 0 22px; }
.gt-view-shell { background: linear-gradient(180deg, #FCFAF4 0%, #F7F1E5 100%); border: 1px solid var(--border); border-top: 4px solid var(--soil); padding: 10px 14px; }
/* Slim one-line header: eyebrow chip + title side by side (the long
   descriptive paragraph was dropped as onboarding clutter). */
.gt-view-shell-head { display: flex; align-items: baseline; gap: 10px; margin-bottom: 8px; }
.gt-view-shell-eyebrow { font-family: 'Overpass Mono', monospace; font-size: 0.56rem; letter-spacing: 0.12em; text-transform: uppercase; color: var(--muted); flex: 0 0 auto; }
.gt-view-shell-title { font-family: 'Fraunces', serif; font-size: 1rem; color: var(--soil); line-height: 1.1; }
.gt-view-shell-links { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 8px; margin-bottom: 12px; }
.gt-view-link { display: block; text-decoration: none; background: var(--surface); border: 1px solid var(--border); padding: 9px 10px; color: var(--ink); min-height: 72px; }
.gt-view-link strong { display: block; font-family: 'Overpass Mono', monospace; font-size: 0.62rem; letter-spacing: 0.08em; text-transform: uppercase; color: var(--soil); margin-bottom: 5px; }
.gt-view-link span { display: block; font-size: 0.72rem; line-height: 1.45; color: var(--muted); }
.gt-view-link:hover { border-color: var(--soil); box-shadow: 0 2px 8px rgba(42, 31, 18, 0.08); transform: translateY(-1px); }
.gt-view-shell-body { display: flex; flex-direction: column; gap: 14px; }
.gt-view-shell-body > * { margin: 0; }
.gt-collapse-head { display: flex; align-items: center; justify-content: space-between; gap: 10px; }
.gt-collapse-toggle { flex: 0 0 auto; font-family: 'Overpass Mono', monospace; font-size: 0.56rem; letter-spacing: 0.08em; text-transform: uppercase; padding: 4px 9px; cursor: pointer; border-radius: 2px; border: 1px solid var(--border); background: var(--surface); color: var(--soil); }
.gt-collapse-toggle:hover { border-color: var(--soil); background: var(--aged); }
.gt-collapse-body[hidden] { display: none; }
.gt-dashboard { display: grid; grid-template-columns: repeat(5, 1fr); gap: 10px; margin: 0; }
.gt-card { display: block; color: var(--ink); text-decoration: none; background: var(--surface); border: 1px solid var(--border); border-top: 4px solid var(--leaf); padding: 11px 12px 10px; min-height: 92px; }
.gt-card:nth-child(2) { border-top-color: var(--gold); }
.gt-card:nth-child(3) { border-top-color: var(--water); }
.gt-card:nth-child(4) { border-top-color: var(--hedge); }
.gt-card:nth-child(5) { border-top-color: var(--soil); }
.gt-card span { display: block; font-family: 'Overpass Mono', monospace; font-size: 0.56rem; letter-spacing: 0.1em; text-transform: uppercase; color: var(--muted); margin-bottom: 5px; }
.gt-card strong { display: block; font-family: 'Fraunces', serif; font-size: 1.45rem; line-height: 1; color: var(--soil); margin-bottom: 5px; }
.gt-card em { display: block; font-size: 0.68rem; color: var(--muted); font-style: normal; line-height: 1.35; }
.gt-card:hover { transform: translateY(-1px); box-shadow: 0 3px 10px rgba(42, 31, 18, 0.08); }

.gt-task { display: block; padding: 10px 0 10px 30px; position: relative; border-bottom: 1px dotted var(--border); }
.gt-task:last-child { border-bottom: none; }
.gt-task.done { opacity: 0.55; }
.gt-task.done strong { text-decoration: line-through; }
/* Per-task admin controls (DB-backed tasks): edit + delete, top-right. */
.gt-task-ctl { position: absolute; top: 8px; right: 0; display: inline-flex; gap: 4px; }
.gt-task-ctl button { font-family: 'Overpass Mono', monospace; font-size: 0.8rem; line-height: 1; width: 24px; height: 24px; display: inline-flex; align-items: center; justify-content: center; border: 1px solid var(--border); background: var(--surface); color: var(--muted); border-radius: var(--r-xs); cursor: pointer; }
.gt-task-ctl .gt-task-edit:hover { border-color: var(--water); color: var(--water); background: var(--water-bg); }
.gt-task-ctl .gt-task-del:hover { border-color: var(--rust); color: var(--rust); background: var(--rust-bg); }
.gt-task-add { margin-top: 10px; font-family: 'Overpass Mono', monospace; font-size: 0.66rem; letter-spacing: 0.06em; text-transform: uppercase; padding: 6px 12px; border: 1px dashed var(--leaf); background: var(--surface); color: var(--leaf); border-radius: var(--r-xs); cursor: pointer; }
.gt-task-add:hover { background: #f0f8ec; border-style: solid; }
.gt-check { position: absolute; left: 0; top: 12px; width: 18px; height: 18px; cursor: pointer; }

.gt-status { font-family: 'Overpass Mono', monospace; font-size: 0.62rem; padding: 3px 6px; border: 1px solid var(--border); background: var(--surface); color: var(--soil); cursor: pointer; border-radius: 2px; }
.gt-status[data-v="sown"], .gt-status[data-v="ordered"] { background: #F5EDD0; color: #633806; border-color: #C8A030; }
.gt-status[data-v="planted"] { background: #ECE2C2; color: #4A3800; border-color: #B9882C; }
.gt-status[data-v="germinating"], .gt-status[data-v="delivered"] { background: #E0EEF5; color: #1A4D7A; border-color: #5090C0; }
.gt-status[data-v="ready"] { background: #FFF1D0; color: #7A4500; border-color: #E0A030; }
.gt-status[data-v="harvesting"] { background: #FAEEDA; color: #7A4500; border-color: #BA7517; }
.gt-status[data-v="done"], .gt-status[data-v="installed"] { background: #E8F4E0; color: var(--good); border-color: #80C060; }
.gt-status[data-v="blocked"], .gt-status[data-v="cancelled"] { background: #FAEAE0; color: var(--alert); border-color: #C46060; }
.gt-status[data-v="leer"] { background: var(--surface); color: var(--muted); border-color: var(--border); }
.gt-status[data-v="vorbereitet"] { background: #F5EDD0; color: #633806; border-color: #C8A030; }
.gt-status[data-v="teilbepflanzt"] { background: #FAEEDA; color: #7A4500; border-color: #BA7517; }
.gt-status[data-v="bepflanzt"] { background: #E8F4E0; color: var(--good); border-color: #80C060; }
.gt-status[data-v="abzuraeumen"] { background: #F6E3D8; color: #8a3d1e; border-color: #C96A3E; }
.gt-status[data-v="abgeerntet"] { background: #E0EEF5; color: #1A4D7A; border-color: #5090C0; }
.gt-status[data-v="entfaellt"] { background: #ECEDEF; color: #4E545C; border-color: #8C929B; }
.gt-date { font-family: 'Overpass Mono', monospace; font-size: 0.62rem; border: 1px solid var(--border); padding: 3px 4px; background: var(--surface); }
/* TT.MM.JJJJ caption next to <input type="date"> so the date stays
   unambiguous even when the OS locale renders the picker as mm/dd/yyyy. */
.gt-date-de { display: inline-block; font-family: 'Overpass Mono', monospace; font-size: 0.62rem; color: var(--soil); background: var(--paper); border: 1px dashed var(--border); padding: 2px 5px; margin-left: 4px; border-radius: 2px; }
.gt-date-de[hidden] { display: none; }
@media print { .gt-date-de { display: none; } }
.gt-price { font-family: 'Overpass Mono', monospace; font-size: 0.7rem; border: 1px solid var(--border); padding: 3px 4px; width: 78px; background: var(--surface); text-align: right; }
.gt-price-plan { font-family: 'Overpass Mono', monospace; font-size: 0.55rem; letter-spacing: 0.04em; padding: 2px 6px; cursor: pointer; border-radius: 2px; border: 1px solid var(--border); background: var(--surface); color: var(--muted); }
.gt-price-plan:hover { color: var(--soil); border-color: var(--soil); background: var(--aged); }
.gt-price-plan:disabled { opacity: 0.4; cursor: not-allowed; }
.gt-meta { display: inline-flex; gap: 5px; align-items: center; flex-wrap: wrap; margin-top: 6px; }
.gt-status:disabled, .gt-date:disabled, .gt-price:disabled, .gt-check:disabled, .gt-price-plan:disabled { opacity: 0.6; cursor: not-allowed; }

/* Pending row (save in flight) */
.gt-pending { outline: 2px dashed var(--gold); outline-offset: -2px; transition: outline-color 0.2s; }
.gt-task.gt-pending { outline-offset: 0; }

/* Notes per crop/purchase row */
.gt-notes { display: block; margin-top: 5px; }
.gt-notes-details { font-family: 'Overpass Mono', monospace; font-size: 0.62rem; }
.gt-notes-summary { cursor: pointer; color: var(--muted); padding: 2px 0; list-style: none; user-select: none; }
.gt-notes-summary::-webkit-details-marker { display: none; }
.gt-notes-summary:hover { color: var(--soil); }
.gt-notes-summary.gt-notes-has { color: var(--soil); }
.gt-notes-input { display: block; width: 100%; min-width: 180px; max-width: 360px; margin-top: 4px; padding: 5px 7px; font-family: 'Overpass', sans-serif; font-size: 0.78rem; line-height: 1.45; border: 1px solid var(--border); background: var(--surface); color: var(--ink); resize: vertical; }
.gt-notes-input:focus { outline: none; border-color: var(--soil); }

/* Field observations (Feldnotiz) */
.gt-observations { background: var(--surface); border: 1px solid var(--border); border-left: 4px solid var(--water); padding: 12px 14px; margin: -6px 0 14px; }
.gt-obs-head { display: flex; justify-content: space-between; align-items: center; gap: 8px; }
.gt-obs-head > span { font-family: 'Overpass Mono', monospace; font-size: 0.6rem; letter-spacing: 0.14em; text-transform: uppercase; color: var(--muted); }
.gt-obs-collapse { display: inline-flex; align-items: center; gap: 6px; font-family: 'Overpass Mono', monospace; font-size: 0.6rem; letter-spacing: 0.14em; text-transform: uppercase; color: var(--muted); background: transparent; border: 0; padding: 2px 0; cursor: pointer; }
.gt-obs-collapse:hover { color: var(--soil); }
.gt-obs-collapse-icon { display: inline-block; width: 0.8em; text-align: center; color: var(--soil); }
.gt-obs-body[hidden] { display: none; }
.gt-observations.gt-obs-is-collapsed { padding-bottom: 8px; margin-bottom: 8px; }
.gt-obs-toggle { font-family: 'Overpass Mono', monospace; font-size: 0.6rem; letter-spacing: 0.07em; text-transform: uppercase; padding: 4px 9px; cursor: pointer; border-radius: 2px; border: 1px solid var(--border); background: var(--surface); color: var(--soil); }
.gt-observations.gt-obs-is-collapsed .gt-obs-toggle { display: none; }
.gt-obs-toggle:hover { border-color: var(--soil); background: var(--aged); }
.gt-obs-form { margin-top: 10px; padding: 10px; background: var(--paper); border: 1px dotted var(--border); display: flex; flex-direction: column; gap: 6px; }
.gt-obs-form[hidden] { display: none; }
.gt-obs-presets { display: flex; flex-direction: column; gap: 6px; padding-bottom: 4px; border-bottom: 1px dotted var(--border); margin-bottom: 2px; }
.gt-obs-presets > span { font-family: 'Overpass Mono', monospace; font-size: 0.56rem; letter-spacing: 0.12em; text-transform: uppercase; color: var(--muted); }
.gt-obs-preset-list { display: flex; flex-wrap: wrap; gap: 6px; }
.gt-obs-preset { font-family: 'Overpass Mono', monospace; font-size: 0.58rem; letter-spacing: 0.06em; padding: 5px 8px; cursor: pointer; border-radius: 2px; border: 1px solid var(--border); background: var(--surface); color: var(--soil); }
.gt-obs-preset:hover { border-color: var(--water); background: var(--water-bg); }
.gt-obs-row { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; }
.gt-obs-row label { font-family: 'Overpass Mono', monospace; font-size: 0.58rem; letter-spacing: 0.1em; text-transform: uppercase; color: var(--muted); display: flex; flex-direction: column; gap: 3px; }
.gt-obs-row input, .gt-obs-row select, .gt-obs-form textarea { font-family: 'Overpass', sans-serif; font-size: 0.85rem; padding: 6px 8px; border: 1px solid var(--border); background: var(--surface); color: var(--ink); text-transform: none; letter-spacing: normal; }
.gt-obs-form textarea { resize: vertical; }
.gt-obs-checkbox { flex-direction: row !important; align-items: center; gap: 6px !important; padding-top: 14px; text-transform: none !important; letter-spacing: normal !important; font-size: 0.7rem !important; }
.gt-obs-checkbox input { padding: 0; width: auto; }
.gt-obs-notes { grid-template-columns: 1fr; }
.gt-obs-actions { display: flex; gap: 8px; justify-content: flex-end; margin-top: 4px; }
.gt-obs-actions button { font-family: 'Overpass Mono', monospace; font-size: 0.62rem; letter-spacing: 0.08em; text-transform: uppercase; padding: 6px 12px; cursor: pointer; border-radius: 2px; border: 1px solid var(--border); background: var(--surface); color: var(--soil); }
.gt-obs-actions button.gt-primary { background: var(--soil); color: white; border-color: var(--soil); }
.gt-obs-actions button:hover { opacity: 0.85; }
.gt-obs-list { list-style: none; padding: 0; margin: 10px 0 0; }
.gt-obs-item { padding: 6px 0; border-top: 1px dotted var(--border); font-size: 0.78rem; }
.gt-obs-item:first-child { border-top: none; }
.gt-obs-item-head { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; }
.gt-obs-item time { font-family: 'Overpass Mono', monospace; font-size: 0.7rem; color: var(--muted); flex-shrink: 0; }
.gt-obs-item-meta { color: var(--soil); }
.gt-obs-dev { background: var(--rust-bg); color: var(--rust); border: 1px solid var(--rust); border-radius: 2px; padding: 1px 6px; font-family: 'Overpass Mono', monospace; font-size: 0.55rem; letter-spacing: 0.08em; text-transform: uppercase; }
.gt-obs-item-actions { margin-left: auto; display: flex; gap: 4px; }
.gt-obs-item-actions button { font-family: 'Overpass Mono', monospace; font-size: 0.55rem; padding: 2px 6px; border: 1px solid var(--border); background: var(--surface); color: var(--muted); cursor: pointer; border-radius: 2px; }
.gt-obs-item-actions button:hover { color: var(--soil); border-color: var(--soil); }
.gt-obs-item-note { color: var(--ink); margin-top: 3px; line-height: 1.5; overflow-wrap: anywhere; word-break: break-word; }
.gt-obs-item-meta { overflow-wrap: anywhere; word-break: break-word; }
.gt-obs-item-head { flex-wrap: wrap; min-width: 0; }
.gt-observations { max-width: 100%; min-width: 0; overflow-wrap: anywhere; }
.gt-obs-list { min-width: 0; }
.gt-obs-item { min-width: 0; overflow-wrap: anywhere; }
.gt-obs-item-dev { background: linear-gradient(180deg, transparent 60%, var(--rust-bg) 100%); }
.gt-obs-more { display: block; margin: 8px auto 0; font-family: 'Overpass Mono', monospace; font-size: 0.6rem; letter-spacing: 0.08em; text-transform: uppercase; padding: 5px 11px; cursor: pointer; border-radius: 2px; border: 1px solid var(--border); background: var(--surface); color: var(--muted); }
.gt-obs-more:hover { color: var(--soil); border-color: var(--soil); }

/* Heute-Ansicht */
.gt-heute-konkret { background: var(--surface); border: 1px solid var(--border); border-left: 4px solid var(--straw); padding: 12px 14px; margin: -6px 0 14px; }
.gt-heute-konkret-head { display: flex; justify-content: space-between; align-items: flex-start; gap: 10px; margin-bottom: 10px; }
.gt-heute-konkret-head span { display: block; font-family: 'Overpass Mono', monospace; font-size: 0.6rem; letter-spacing: 0.14em; text-transform: uppercase; color: var(--muted); margin-bottom: 2px; }
.gt-heute-konkret-head strong { display: block; font-family: 'Fraunces', serif; font-size: 1rem; line-height: 1.1; color: var(--soil); }
.gt-heute-konkret-head a { flex: 0 0 auto; font-family: 'Overpass Mono', monospace; font-size: 0.56rem; letter-spacing: 0.08em; text-transform: uppercase; color: var(--water); text-decoration: none; border: 1px solid var(--border); padding: 4px 8px; border-radius: 2px; background: var(--surface); }
.gt-heute-konkret-head a:hover { border-color: var(--water); background: var(--water-bg); }
.gt-heute-konkret-list { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; }
.gt-heute-step { display: grid; grid-template-columns: 28px 1fr; gap: 8px; padding: 8px; border: 1px dotted var(--border); background: var(--paper); }
.gt-heute-step-n { width: 24px; height: 24px; border-radius: 50%; background: var(--soil); color: white; display: flex; align-items: center; justify-content: center; font-family: 'Overpass Mono', monospace; font-size: 0.68rem; font-weight: 700; }
.gt-heute-step h4 { font-family: 'Fraunces', serif; font-size: 0.86rem; line-height: 1.1; color: var(--soil); margin-bottom: 3px; }
.gt-heute-step p { font-size: 0.76rem; line-height: 1.45; color: var(--ink); margin-bottom: 4px; }
.gt-heute-step em { display: block; font-size: 0.68rem; line-height: 1.4; color: var(--muted); font-style: normal; }
.gt-heute { background: var(--surface); border: 1px solid var(--border); border-left: 4px solid var(--leaf); padding: 12px 14px; margin: -6px 0 18px; }
.gt-heute[hidden] { display: none; }
.gt-heute-head { font-family: 'Overpass Mono', monospace; font-size: 0.6rem; letter-spacing: 0.14em; text-transform: uppercase; color: var(--muted); margin-bottom: 8px; }
.gt-heute-rule { margin: -2px 0 8px; font-size: 0.72rem; line-height: 1.45; color: var(--muted); }
.gt-heute-rule strong { color: var(--soil); font-weight: 600; }
.gt-heute-group { padding: 6px 0; border-top: 1px dotted var(--border); }
.gt-heute-group:first-child { border-top: none; padding-top: 0; }
.gt-heute-title { font-family: 'Fraunces', serif; font-size: 0.82rem; font-weight: 700; color: var(--soil); margin-bottom: 4px; }
.gt-heute-items { font-size: 0.78rem; line-height: 1.7; color: var(--soil); }
.gt-heute-items a { color: var(--water); text-decoration: none; }
.gt-heute-items a:hover { text-decoration: underline; }
.gt-heute-sep { color: var(--border); margin: 0 6px; }
.gt-heute-more { color: var(--muted); font-style: italic; margin-left: 6px; }

/* Tagesbriefing — auto-generated daily message, top of the Heute view. */
.gt-brief { background: var(--paper-3); border: 1px solid var(--border); border-left: 4px solid var(--water); padding: 13px 15px; margin: -6px 0 16px; }
.gt-brief[hidden] { display: none; }
.gt-brief-head { display: flex; justify-content: space-between; align-items: flex-start; gap: 12px; margin-bottom: 10px; }
.gt-brief-eyebrow { display: block; font-family: 'Overpass Mono', monospace; font-size: 0.58rem; letter-spacing: 0.14em; text-transform: uppercase; color: var(--muted); margin-bottom: 3px; }
.gt-brief-headline { display: block; font-family: 'Fraunces', serif; font-size: 1.04rem; line-height: 1.2; color: var(--soil); }
#gt-brief-actions { display: flex; flex-wrap: wrap; gap: 6px; justify-content: flex-end; flex: 0 0 auto; }
.gt-brief-adopt { display: inline-block; flex: 0 0 auto; font-family: 'Overpass Mono', monospace; font-size: 0.58rem; letter-spacing: 0.06em; text-transform: uppercase; color: var(--water); background: var(--surface); border: 1px solid var(--border); padding: 5px 9px; border-radius: 2px; cursor: pointer; text-decoration: none; white-space: nowrap; }
.gt-brief-adopt:hover { border-color: var(--water); background: var(--water-bg); }
.gt-brief-body { display: flex; flex-direction: column; gap: 7px; }
.gt-brief-row { display: grid; grid-template-columns: 22px 1fr; gap: 9px; align-items: start; padding: 7px 9px; border: 1px dotted var(--border); background: var(--surface); }
.gt-brief-row.is-warn { background: var(--rust-bg); border-color: var(--rust); border-style: solid; }
.gt-brief-row.is-water { border-left: 3px solid var(--water); }
.gt-brief-row.is-harvest { border-left: 3px solid var(--leaf); }
.gt-brief-row.is-done { opacity: 0.85; }
.gt-brief-lead { font-size: 1rem; line-height: 1.3; text-align: center; }
.gt-brief-text { min-width: 0; }
.gt-brief-text > span { display: block; font-size: 0.84rem; line-height: 1.4; color: var(--soil); font-weight: 600; overflow-wrap: anywhere; }
.gt-brief-text > em { display: block; font-style: normal; font-size: 0.74rem; line-height: 1.45; color: var(--muted); margin-top: 2px; overflow-wrap: anywhere; }
.gt-brief-row.is-warn .gt-brief-text > span { color: var(--rust); }
@media print { .gt-brief { display: none; } }

/* Bewässerung — daily watering card, mounted in Heute & Beete views.
   Veganien Feldjournal redesign Phase 1: tokens + page-header chrome.
   Bed-card layout below (.gt-bw-list, .gt-bw-item) is unchanged and will
   be replaced in Phase 3. */
.gt-bewaesserung {
  background: var(--paper);
  border: 1px solid var(--border);
  border-radius: var(--r-md);
  padding: 0;
  margin: -6px 0 18px;
  overflow: hidden;
  font-family: 'Overpass', sans-serif;
}
.gt-bewaesserung[hidden] { display: none; }
.gt-bw-head {
  padding: 12px 18px 14px;
  border-bottom: 1px dotted var(--dotted);
}
.gt-bw-eyebrow {
  font-family: 'Overpass Mono', monospace;
  font-size: var(--fs-eyebrow);
  font-weight: 500;
  letter-spacing: var(--ls-eyebrow);
  text-transform: uppercase;
  color: var(--muted);
  margin-bottom: 10px;
}
.gt-bw-sum {
  display: grid;
  grid-template-columns: auto 1fr auto;
  column-gap: 16px;
  align-items: baseline;
}
.gt-bw-sum-stat {
  display: flex;
  align-items: baseline;
  gap: 12px;
  min-width: 0;
}
.gt-bw-sum-stat { display: flex; flex-direction: column; gap: 4px; }
.gt-bw-sum-num {
  font-family: 'Fraunces', serif;
  font-weight: 900;
  font-variation-settings: "opsz" 144;
  font-size: 44px;
  line-height: 1;
  color: var(--water);
  letter-spacing: -0.02em;
  font-feature-settings: "tnum" 1;
  flex: 0 0 auto;
}
.gt-bw-sum-num.is-done { color: var(--leaf); }
.gt-bw-sum-meta {
  font-family: 'Fraunces', serif;
  font-style: italic;
  font-weight: 400;
  font-size: 13px;
  color: var(--soil);
  line-height: 1.3;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
}
.gt-bw-sum-aside {
  text-align: right;
  font-family: 'Overpass Mono', monospace;
  font-size: 11px;
  font-weight: 500;
  letter-spacing: 0.02em;
  color: var(--muted);
  line-height: 1.5;
  align-self: end;
}
.gt-bw-body {
  padding: 12px 14px;
  display: flex;
  flex-direction: column;
  gap: 10px;
}

/* ── Zone block (Veganien Feldjournal Phase 2) ─────────────────
   Wraps the existing cleanup-queue / field-walk lists in a
   collapsible card so the page stops being one long scroll. The
   bed-card markup inside (.gt-bw-list, .gt-bw-item) is unchanged
   in Phase 2; that comes in Phase 3. */
.gt-bw-zone {
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--r-md);
  box-shadow: var(--elev-card);
  overflow: hidden;
  container-type: inline-size;
}
.gt-bw-zone[data-tone="prio"]      { border-left: 4px solid var(--state-prio); }
.gt-bw-zone[data-tone="due"]       { border-left: 4px solid var(--state-due); }
.gt-bw-zone[data-tone="ok"]        { border-left: 4px solid var(--state-ok); }
.gt-bw-zone[data-tone="unknown"]   { border-left: 4px solid var(--state-unknown); }
.gt-bw-zone[data-tone="paused"]    { border-left: 4px solid var(--state-paused); }
.gt-bw-zone[data-tone="cleanup"]   { border-left: 4px solid var(--state-prio); background: #FFF8F2; }
.gt-bw-zone[data-tone="cleanup"][data-open="false"] { background: var(--surface); }

.gt-bw-zone-head {
  all: unset;
  cursor: pointer;
  padding: 10px 14px 10px 14px;
  display: grid;
  grid-template-columns: auto 1fr auto;
  align-items: center;
  gap: 12px;
  width: 100%;
  box-sizing: border-box;
  font-family: 'Overpass', sans-serif;
}
.gt-bw-zone-head:focus-visible { outline: 2px solid var(--leaf-l); outline-offset: -2px; }
.gt-bw-zone-chev {
  width: 14px; height: 14px;
  color: var(--muted);
  transition: transform 0.15s;
  flex: 0 0 14px;
}
.gt-bw-zone[data-open="true"] .gt-bw-zone-chev { transform: rotate(90deg); }
.gt-bw-zone-titlewrap { min-width: 0; }
.gt-bw-zone-title {
  font-family: 'Fraunces', serif;
  font-weight: 700;
  font-size: 17px;
  color: var(--soil);
  line-height: 1.15;
  overflow: hidden;
  text-overflow: ellipsis;
}
.gt-bw-zone-sub {
  font-family: 'Overpass Mono', monospace;
  font-size: 10px;
  letter-spacing: 0.04em;
  color: var(--muted);
  margin-top: 2px;
  text-transform: uppercase;
}
.gt-bw-zone-stat { text-align: right; }
.gt-bw-zone-stat-num {
  font-family: 'Fraunces', serif;
  font-weight: 700;
  font-variation-settings: "opsz" 60;
  font-size: 22px;
  color: var(--water);
  line-height: 1;
  font-feature-settings: "tnum" 1;
}
.gt-bw-zone[data-tone="prio"]    .gt-bw-zone-stat-num { color: var(--state-prio); }
.gt-bw-zone[data-tone="ok"]      .gt-bw-zone-stat-num { color: var(--leaf); }
.gt-bw-zone[data-tone="unknown"] .gt-bw-zone-stat-num { color: var(--straw); }
.gt-bw-zone[data-tone="paused"]  .gt-bw-zone-stat-num { color: var(--water-l); }
.gt-bw-zone[data-tone="cleanup"] .gt-bw-zone-stat-num { color: var(--state-prio); }
.gt-bw-zone-stat-meta {
  font-family: 'Overpass Mono', monospace;
  font-size: 10px;
  letter-spacing: 0.04em;
  color: var(--muted);
  margin-top: 2px;
  text-transform: uppercase;
}

.gt-bw-zone-body {
  padding: 4px 12px 12px;
}
.gt-bw-zone[data-open="false"] .gt-bw-zone-body { display: none; }
.gt-bw-zone-note {
  font-size: 11px;
  line-height: 1.5;
  color: var(--muted);
  margin: 0 0 8px;
  padding: 6px 8px;
  background: var(--paper-3);
  border: 1px dotted var(--border-2);
  border-radius: var(--r-xs);
}
.gt-bw-zone-bulk { margin-bottom: 8px; }
.gt-bw-zone .gt-bw-list { gap: 6px; }

@media (max-width: 520px) {
  .gt-bw-zone-head { padding: 9px 12px; gap: 10px; }
  .gt-bw-zone-title { font-size: 16px; }
  .gt-bw-zone-stat-num { font-size: 20px; }
}
@media (max-width: 640px) {
  .gt-bw-head { padding: 10px 14px 12px; }
  .gt-bw-sum { grid-template-columns: 1fr; row-gap: 6px; }
  .gt-bw-sum-stat { flex-wrap: wrap; }
  .gt-bw-sum-aside { text-align: left; }
}
.gt-bw-note { font-size: 0.7rem; line-height: 1.45; color: var(--muted); margin: 0 0 10px; padding: 6px 8px; background: var(--water-bg); border: 1px dotted var(--border); }
.gt-bw-note code { font-family: 'Overpass Mono', monospace; font-size: 0.66rem; color: var(--ink); background: var(--surface); padding: 1px 4px; border: 1px dotted var(--border); }
.gt-bw-empty { font-size: 0.78rem; color: var(--muted); font-style: italic; padding: 8px 0; }
.gt-bw-list { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 6px; }
.gt-bw-item { padding: 8px 10px; border: 1px dotted var(--border); background: var(--paper); border-left: 3px solid var(--border); }
.gt-bw-item[data-bw-state="prio"] { border-left-color: #B33A00; background: #FBEBE0; }
.gt-bw-item[data-bw-state="due"]  { border-left-color: var(--water); background: var(--water-bg); }
.gt-bw-item[data-bw-state="unknown"] { border-left-color: #C2862C; background: #FBF3E1; }
.gt-bw-item[data-bw-state="ok"]   { border-left-color: var(--leaf); background: var(--surface); }
.gt-bw-item[data-bw-state="rain_paused"] { border-left-color: var(--water-l); background: #F0F6FA; opacity: 0.85; }
.gt-bw-row { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.gt-bw-id { font-family: 'Overpass Mono', monospace; font-size: 0.78rem; font-weight: 700; color: var(--soil); min-width: 70px; }
.gt-bw-state { font-family: 'Overpass Mono', monospace; font-size: 0.6rem; letter-spacing: 0.08em; text-transform: uppercase; padding: 2px 6px; border-radius: 2px; background: var(--surface); border: 1px solid var(--border); color: var(--muted); }
.gt-bw-item[data-bw-state="prio"] .gt-bw-state { color: #B33A00; border-color: #B33A00; }
.gt-bw-item[data-bw-state="due"]  .gt-bw-state { color: var(--water); border-color: var(--water); }
.gt-bw-item[data-bw-state="unknown"] .gt-bw-state { color: #7A5800; border-color: #C2862C; }
.gt-bw-item[data-bw-state="ok"]   .gt-bw-state { color: var(--leaf); border-color: var(--leaf); }
.gt-bw-item[data-bw-state="rain_paused"] .gt-bw-state { color: var(--water-l); border-color: var(--water-l); }
.gt-bw-item[data-bw-state="rain_paused"] .gt-bw-btn { color: var(--muted); border-color: var(--border); cursor: not-allowed; pointer-events: none; opacity: 0.6; }
.gt-bw-unknown { margin-top: 8px; }
.gt-bw-unknown summary { cursor: pointer; font-size: 0.72rem; color: #7A5800; padding: 4px 0; }
.gt-bw-history-note { font-size: 0.68rem; color: var(--muted); margin: 0 0 8px; line-height: 1.45; }
.gt-bw-paused { margin-top: 8px; }
.gt-bw-paused summary { cursor: pointer; font-size: 0.72rem; color: var(--water); padding: 4px 0; }
.gt-bw-liters { font-size: 0.76rem; color: var(--ink); flex: 1 1 auto; }
.gt-bw-btn { font-family: 'Overpass Mono', monospace; font-size: 0.62rem; letter-spacing: 0.06em; text-transform: uppercase; color: var(--water); background: var(--surface); border: 1px solid var(--water); padding: 5px 10px; border-radius: 2px; cursor: pointer; }
.gt-bw-btn:hover:not([disabled]) { background: var(--water); color: white; }
.gt-bw-btn[disabled] { color: var(--muted); border-color: var(--border); cursor: not-allowed; }
.gt-bw-crop { font-size: 0.76rem; color: var(--soil); margin-top: 4px; }
.gt-bw-meta { font-size: 0.68rem; color: var(--muted); margin-top: 2px; line-height: 1.4; }
.gt-bw-quick-actions { display: flex; gap: 6px; flex-wrap: wrap; margin-top: 8px; }
.gt-bw-quick { font-family: 'Overpass Mono', monospace; font-size: 0.58rem; letter-spacing: 0.05em; text-transform: uppercase; color: #7A5800; background: var(--surface); border: 1px solid #C2862C; padding: 4px 8px; border-radius: 2px; cursor: pointer; }
.gt-bw-quick:hover { background: #C2862C; color: white; }
.gt-bw-quick-reset { color: var(--alert); border-color: #C46060; }
.gt-bw-quick-reset:hover { background: #C46060; color: white; }
.gt-bw-vol-picker { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.gt-bw-vol-label { font-family: 'Overpass Mono', monospace; font-size: 0.58rem; letter-spacing: 0.05em; text-transform: uppercase; color: var(--muted); white-space: nowrap; }
.gt-bw-vol-chip { font-family: 'Overpass Mono', monospace; font-size: 0.62rem; letter-spacing: 0.04em; color: var(--water); background: var(--surface); border: 1px solid var(--water); padding: 4px 9px; border-radius: 2px; cursor: pointer; white-space: nowrap; }
.gt-bw-vol-chip:hover { background: var(--water); color: white; }
.gt-bw-vol-cancel { font-size: 0.7rem; background: none; border: none; color: var(--muted); cursor: pointer; padding: 2px 4px; line-height: 1; }
.gt-bw-ok { margin-top: 8px; }
.gt-bw-ok summary { cursor: pointer; font-size: 0.72rem; color: var(--muted); padding: 4px 0; }

/* ── Dedicated valve panel — one toggle button per field block ── */
.gt-bw-valve-panel {
  padding: 10px 16px 12px;
  border-bottom: 1px solid var(--border);
  background: #F4FAF6;
}
.gt-bw-valve-panel-title {
  font-family: 'Overpass Mono', monospace;
  font-size: 0.62rem;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: #1A7A4A;
  margin-bottom: 8px;
  font-weight: 700;
  display: flex;
  align-items: center;
  gap: 6px;
}
/* ESP32 online status dot in panel title */
.gt-bw-online-dot {
  display: inline-block;
  width: 8px; height: 8px;
  border-radius: 50%;
  background: #aaa;
  flex-shrink: 0;
}
.gt-bw-online-dot[data-online="true"]    { background: #2A7E48; }
.gt-bw-online-dot[data-online="false"]   { background: #C46060; }
.gt-bw-online-dot[data-online="unknown"] { background: #aaa; }

.gt-bw-valve-panel-btns {
  display: flex;
  align-items: stretch;
  flex-wrap: wrap;
  gap: 8px;
}
.gt-bw-valve-zone-btn {
  font-family: 'Overpass Mono', monospace;
  font-size: 0.68rem;
  letter-spacing: 0.03em;
  color: var(--ink);
  background: var(--surface);
  border: 1.5px solid var(--border);
  padding: 8px 14px;
  border-radius: 4px;
  cursor: pointer;
  display: flex;
  align-items: center;
  gap: 7px;
  white-space: nowrap;
  transition: border-color 0.12s, background 0.12s;
}
.gt-bw-valve-zone-btn:hover:not([disabled]) { border-color: #1A7A4A; background: #F4FAF6; }
.gt-bw-valve-zone-btn[disabled] { opacity: 0.5; cursor: wait; }

/* State: ON */
.gt-bw-valve-zone-btn[data-ha-state="on"] {
  background: #1A7A4A;
  border-color: #1A7A4A;
  color: white;
}
.gt-bw-valve-zone-btn[data-ha-state="on"]:hover:not([disabled]) {
  background: #C46060;
  border-color: #C46060;
}

/* Per-valve state dot */
.gt-bw-vzb-dot {
  width: 8px; height: 8px;
  border-radius: 50%;
  flex-shrink: 0;
}
.gt-bw-vzb-dot--on      { background: #fff; }
.gt-bw-vzb-dot--off     { background: #ccc; }
.gt-bw-vzb-dot--unknown { background: transparent; border: 1.5px solid #ccc; }

.gt-bw-vzb-state {
  font-size: 0.6rem;
  opacity: 0.75;
  margin-left: 2px;
}

.gt-bw-valve-cfg-btn {
  font-size: 0.9rem;
  background: none;
  border: 1px solid var(--border);
  color: var(--muted);
  padding: 6px 9px;
  border-radius: 4px;
  cursor: pointer;
  line-height: 1;
  align-self: center;
}
.gt-bw-valve-cfg-btn:hover { background: var(--paper); color: var(--ink); }
.gt-bw-valve-hint { font-family: 'Overpass Mono', monospace; font-size: 0.62rem; color: var(--muted); font-style: italic; align-self: center; }

@media (max-width: 600px) {
  .gt-bw-valve-zone-btn { padding: 7px 10px; font-size: 0.63rem; }
}

/* ── HA settings modal overlay ── */
.ha-cfg-overlay {
  position: fixed; inset: 0; background: rgba(0,0,0,.45);
  display: flex; align-items: center; justify-content: center;
  z-index: 9000; padding: 16px; box-sizing: border-box;
}
.ha-cfg-dialog {
  background: var(--surface); border-radius: 4px; width: 100%; max-width: 480px;
  box-shadow: 0 8px 32px rgba(0,0,0,.18); display: flex; flex-direction: column;
  max-height: 90vh; overflow: hidden;
}
.ha-cfg-title {
  font-family: 'Overpass Mono', monospace; font-size: 0.82rem; font-weight: 700;
  letter-spacing: 0.06em; text-transform: uppercase;
  padding: 14px 18px; border-bottom: 1px solid var(--border);
  color: #1A7A4A;
}
.ha-cfg-body { padding: 16px 18px; overflow-y: auto; display: flex; flex-direction: column; gap: 12px; }
.ha-cfg-label { display: flex; flex-direction: column; gap: 4px; font-size: 0.72rem; color: var(--muted); font-family: 'Overpass Mono', monospace; letter-spacing: 0.04em; text-transform: uppercase; }
.ha-cfg-input { font-family: 'Overpass Mono', monospace; font-size: 0.78rem; border: 1px solid var(--border); border-radius: 2px; padding: 6px 8px; color: var(--ink); width: 100%; box-sizing: border-box; }
.ha-cfg-input:focus { outline: 2px solid #1A7A4A; outline-offset: -1px; }
.ha-cfg-input-sm { width: 90px; }
.ha-cfg-textarea { resize: vertical; min-height: 120px; }
.ha-cfg-hint { font-size: 0.66rem; color: var(--muted); text-transform: none; letter-spacing: 0; margin-top: 2px; }
.ha-cfg-actions { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-top: 4px; }
.ha-cfg-test-result { font-size: 0.72rem; font-family: 'Overpass Mono', monospace; }
.ha-cfg-footer { display: flex; justify-content: flex-end; gap: 8px; padding: 12px 18px; border-top: 1px solid var(--border); }
.ha-cfg-btn { font-family: 'Overpass Mono', monospace; font-size: 0.62rem; letter-spacing: 0.06em; text-transform: uppercase; padding: 7px 14px; border-radius: 2px; cursor: pointer; border: 1px solid var(--border); background: var(--surface); color: var(--ink); }
.ha-cfg-btn:hover { background: var(--paper); }
.ha-cfg-btn:disabled { opacity: .5; cursor: not-allowed; }
.ha-cfg-save { color: #1A7A4A; border-color: #1A7A4A; }
.ha-cfg-save:hover { background: #1A7A4A; color: white; }
.ha-cfg-test { color: var(--water); border-color: var(--water); }
.ha-cfg-test:hover { background: var(--water); color: white; }
.ha-cfg-cancel { color: var(--muted); }

/* Inline Bewässerungs-Knopf in der Beetplan-Zeile (Section 7.1). */
.gt-bed-water { display: inline-flex; align-items: center; gap: 6px; margin-left: 4px; }
.gt-bed-water-btn { font-family: 'Overpass Mono', monospace; font-size: 0.6rem; letter-spacing: 0.04em; text-transform: uppercase; padding: 3px 8px; border-radius: 2px; cursor: pointer; background: var(--surface); border: 1px solid var(--water); color: var(--water); }
.gt-bed-water-btn:hover:not([disabled]) { background: var(--water); color: white; }
.gt-bed-water-btn[disabled] { color: var(--muted); border-color: var(--border); cursor: not-allowed; }
.gt-bed-water-caption { font-family: 'Overpass Mono', monospace; font-size: 0.6rem; color: var(--muted); }
[data-bed][data-water-state="prio"] .gt-bed-water-caption { color: #B33A00; font-weight: 700; }
[data-bed][data-water-state="due"]  .gt-bed-water-caption { color: var(--water); font-weight: 700; }
[data-bed][data-water-state="unknown"] .gt-bed-water-caption { color: #7A5800; font-weight: 700; }
[data-bed][data-water-state="prio"] .gt-bed-water-btn { background: #FBEBE0; border-color: #B33A00; color: #B33A00; }
[data-bed][data-water-state="prio"] .gt-bed-water-btn:hover:not([disabled]) { background: #B33A00; color: white; }
[data-bed][data-water-state="unknown"] .gt-bed-water-btn { background: #FBF3E1; border-color: #C2862C; color: #7A5800; }
[data-bed][data-water-state="unknown"] .gt-bed-water-btn:hover:not([disabled]) { background: #C2862C; color: white; }

/* Print: hide all Bewässerungs-Chrome (the printed Beetplan stays clean). */
@media print {
  .gt-bewaesserung,
  .gt-bed-water { display: none !important; }
}

/* Tagesplan */
.gt-tagesplan { background: var(--surface); border: 1px solid var(--border); border-left: 4px solid var(--straw); padding: 12px 14px; margin: -6px 0 14px; }
.gt-tagesplan[hidden] { display: none; }
.gt-tagesplan-head { display: flex; justify-content: space-between; align-items: flex-start; gap: 10px; margin-bottom: 8px; }
.gt-tagesplan-label { display: block; font-family: 'Overpass Mono', monospace; font-size: 0.6rem; letter-spacing: 0.14em; text-transform: uppercase; color: var(--muted); margin-bottom: 2px; }
.gt-tagesplan-head strong { display: block; font-family: 'Fraunces', serif; font-size: 1rem; line-height: 1.2; color: var(--soil); }
.gt-tagesplan-pre { font-family: 'Overpass Mono', monospace; font-size: 0.76rem; line-height: 1.6; white-space: pre-wrap; background: var(--paper); border: 1px solid var(--border); padding: 8px 12px; margin: 0 0 8px; color: var(--ink); }
.gt-tagesplan-edit-btn { font-family: 'Overpass Mono', monospace; font-size: 0.56rem; letter-spacing: 0.08em; text-transform: uppercase; color: var(--water); background: var(--surface); border: 1px solid var(--border); padding: 4px 8px; border-radius: 2px; cursor: pointer; }
.gt-tagesplan-edit-btn:hover { border-color: var(--water); background: var(--water-bg); }
.gt-tagesplan-nlm-btn { border-color: var(--leaf); color: var(--leaf); }
.gt-tagesplan-nlm-btn:hover { border-color: var(--leaf); background: #f0f8ec; }
.gt-tagesplan-nlm { margin: 0 0 10px; padding: 10px 12px; border: 1px solid var(--leaf); border-left: 4px solid var(--leaf); background: #f3f9ee; }
.gt-tagesplan-nlm[hidden] { display: none; }
.gt-tagesplan-nlm-step { font-size: 0.78rem; line-height: 1.5; color: var(--ink); margin-bottom: 6px; }
.gt-tagesplan-nlm-step a { color: var(--water); font-weight: 600; }
#gt-tagesplan-nlm-answer { width: 100%; box-sizing: border-box; font-family: 'Overpass Mono', monospace; font-size: 0.76rem; line-height: 1.5; padding: 8px 10px; border: 1px solid var(--border); background: var(--surface); color: var(--ink); resize: vertical; }
.gt-tagesplan-nlm-prompt { margin: -2px 0 8px; }
.gt-tagesplan-nlm-prompt > summary { font-family: 'Overpass Mono', monospace; font-size: 0.62rem; letter-spacing: 0.06em; text-transform: uppercase; color: var(--water); cursor: pointer; }
.gt-tagesplan-nlm-prompt pre { white-space: pre-wrap; font-family: 'Overpass Mono', monospace; font-size: 0.72rem; line-height: 1.5; background: var(--surface); border: 1px solid var(--border); padding: 8px 10px; margin: 6px 0 0; color: var(--ink); }
#gt-tagesplan-editbox { margin-bottom: 8px; }
#gt-tagesplan-titleinput { width: 100%; box-sizing: border-box; font-family: 'Fraunces', serif; font-size: 0.88rem; padding: 5px 8px; border: 1px solid var(--border); margin-bottom: 6px; background: var(--paper); color: var(--soil); }
#gt-tagesplan-textarea { width: 100%; box-sizing: border-box; font-family: 'Overpass Mono', monospace; font-size: 0.76rem; line-height: 1.55; padding: 8px 10px; border: 1px solid var(--border); background: var(--paper); color: var(--ink); resize: vertical; }
.gt-tagesplan-edit-btns { display: flex; gap: 8px; margin-top: 6px; }
.gt-tagesplan-edit-btns button { font-family: 'Overpass Mono', monospace; font-size: 0.6rem; letter-spacing: 0.08em; text-transform: uppercase; padding: 5px 12px; border: 1px solid var(--border); border-radius: 2px; cursor: pointer; background: var(--soil); color: white; }
.gt-tagesplan-cancel { background: var(--surface) !important; color: var(--muted) !important; }
.gt-tagesplan-archive { margin-top: 6px; border-top: 1px dotted var(--border); padding-top: 6px; }
.gt-tagesplan-archive > summary { font-family: 'Overpass Mono', monospace; font-size: 0.6rem; letter-spacing: 0.1em; text-transform: uppercase; color: var(--muted); cursor: pointer; }
.gt-tagesplan-arc-item { margin-top: 6px; }
.gt-tagesplan-arc-item > summary { font-size: 0.76rem; font-family: 'Fraunces', serif; color: var(--soil); cursor: pointer; padding: 3px 0; }
.gt-tagesplan-arc-item .gt-tagesplan-pre { margin-top: 4px; font-size: 0.72rem; }
@media print { .gt-tagesplan { display: none; } }

/* Wetter */
.gt-wetter { background: var(--surface); border: 1px solid var(--border); border-left: 4px solid var(--water); padding: 12px 14px; margin: -6px 0 14px; }
.gt-wetter[hidden] { display: none; }
.gt-wetter-head { display: flex; justify-content: space-between; align-items: center; margin-bottom: 10px; }
.gt-wetter-label { font-family: 'Overpass Mono', monospace; font-size: 0.6rem; letter-spacing: 0.14em; text-transform: uppercase; color: var(--muted); }
.gt-wetter-meta { font-family: 'Overpass Mono', monospace; font-size: 0.56rem; color: var(--muted); }
.gt-wetter-days { display: flex; gap: 10px; margin-bottom: 6px; }
.gt-wetter-day { flex: 1; min-width: 0; background: var(--paper); border: 1px dotted var(--border); padding: 8px 6px; text-align: center; }
.gt-wetter-date { font-family: 'Overpass Mono', monospace; font-size: 0.58rem; letter-spacing: 0.08em; text-transform: uppercase; color: var(--muted); margin-bottom: 4px; }
.gt-wetter-icon { font-size: 1.4rem; line-height: 1; margin-bottom: 5px; }
.gt-wetter-temp { font-size: 0.8rem; color: var(--soil); margin-bottom: 3px; }
.gt-wetter-temp strong { font-size: 0.92rem; }
.gt-wetter-temp span { color: var(--muted); }
.gt-wetter-rain { font-size: 0.7rem; color: var(--ink); margin-bottom: 2px; }
.gt-wetter-wind { font-size: 0.7rem; color: var(--ink); }
.gt-wetter-et0  { font-size: 0.68rem; color: var(--muted); margin-top: 5px; padding-top: 4px; border-top: 1px dotted var(--dotted, #cdb993); font-feature-settings: 'tnum'; }
.gt-wetter-alerts { display: flex; flex-direction: column; gap: 4px; }
.gt-wetter-alert { font-size: 0.74rem; color: #92400e; background: #fef3c7; border: 1px solid #fde68a; padding: 4px 8px; border-radius: 2px; }
@media (max-width: 480px) { .gt-wetter-days { gap: 6px; } .gt-wetter-icon { font-size: 1.2rem; } }
@media print { .gt-wetter { display: none !important; } }

/* Export CSV */
.gt-export { display: flex; gap: 6px; align-items: center; flex-wrap: wrap; margin: -22px 0 22px; }
.gt-export-label { font-family: 'Overpass Mono', monospace; font-size: 0.58rem; letter-spacing: 0.1em; text-transform: uppercase; color: var(--muted); }
.gt-export button, .gt-export a[data-export] { font-family: 'Overpass Mono', monospace; font-size: 0.6rem; letter-spacing: 0.07em; text-transform: uppercase; padding: 4px 9px; cursor: pointer; border-radius: 2px; border: 1px solid var(--border); background: var(--surface); color: var(--soil); text-decoration: none; display: inline-block; }
.gt-export button:hover, .gt-export a[data-export]:hover { border-color: var(--soil); background: var(--aged); }
.gt-export a[data-export="briefing-public"] { border-color: var(--water); color: var(--water); }
.gt-export a[data-export="briefing-public"]:hover { background: var(--water-bg); }
.gt-export-sep { width: 1px; height: 16px; background: var(--border); margin: 0 2px; }
.gt-export #gt-backup-btn { border-color: var(--leaf); color: var(--leaf); }
.gt-export #gt-backup-btn:hover { background: #f0f8ec; }

/* Admin panel (?admin=1) */
.gt-admin { margin: 30px 0 12px; padding: 12px 16px; background: #FFF8E0; border: 1px dashed var(--gold); }
.gt-admin summary { cursor: pointer; font-family: 'Overpass Mono', monospace; font-size: 0.66rem; letter-spacing: 0.08em; text-transform: uppercase; color: var(--soil); }
.gt-admin-body { margin-top: 10px; font-size: 0.78rem; }
.gt-admin-section { margin-bottom: 10px; }
.gt-admin-section h4 { font-family: 'Fraunces', serif; font-size: 0.85rem; color: var(--soil); margin-bottom: 4px; }
.gt-admin-section ul { list-style: none; padding-left: 0; }
.gt-admin-section li { padding: 3px 0; border-bottom: 1px dotted var(--border); display: flex; flex-wrap: wrap; gap: 6px; align-items: center; }
.gt-admin-section code { font-family: 'Overpass Mono', monospace; font-size: 0.72rem; color: var(--soil); }
.gt-admin-section em { font-style: italic; color: var(--muted); font-size: 0.7rem; }
.gt-admin-section button { font-family: 'Overpass Mono', monospace; font-size: 0.58rem; padding: 2px 7px; border: 1px solid var(--alert); background: var(--surface); color: var(--alert); cursor: pointer; border-radius: 2px; }
.gt-admin-section button:hover { background: var(--alert); color: white; }
.gt-admin-clean { color: var(--good); font-size: 0.74rem; margin: 4px 0; }

/* Toasts */
.gt-toasts { position: fixed; bottom: 16px; right: 16px; z-index: 300; display: flex; flex-direction: column; gap: 8px; max-width: min(380px, calc(100vw - 32px)); pointer-events: none; }
.gt-toast { background: var(--soil); color: white; font-family: 'Overpass', sans-serif; font-size: 0.78rem; line-height: 1.45; padding: 10px 32px 10px 14px; border-radius: 3px; box-shadow: 0 4px 14px rgba(0,0,0,0.25); position: relative; pointer-events: auto; transition: opacity 0.4s, transform 0.4s; }
.gt-toast.gt-toast-warn { background: var(--caution); }
.gt-toast.gt-toast-err { background: var(--alert); }
.gt-toast.gt-toast-fade { opacity: 0; transform: translateY(8px); }
.gt-toast-close { position: absolute; top: 4px; right: 4px; background: transparent; color: white; border: none; font-size: 1rem; line-height: 1; padding: 4px 8px; cursor: pointer; opacity: 0.7; }
.gt-toast-close:hover { opacity: 1; }
/* Optional action link inside a toast (e.g. Rückgängig). Sits between text and ×. */
.gt-toast-action { background: transparent; color: white; border: 1px solid rgba(255,255,255,0.55); font-family: 'Overpass Mono', monospace; font-size: 0.62rem; letter-spacing: 0.06em; text-transform: uppercase; padding: 3px 8px; margin-left: 10px; border-radius: 2px; cursor: pointer; }
.gt-toast-action:hover { background: rgba(255,255,255,0.15); border-color: white; }

/* Interactive field plan: every bed rect is permanently painted in its
   current status colour (see applyFieldMapColors); clicking opens the
   per-bed layout modal. The legend below the map is a static colour key. */
.field-plan-frame svg .gt-field-bed { cursor: pointer; transition: fill 0.18s, fill-opacity 0.18s; }
.field-plan-frame svg .gt-field-bed:hover { fill-opacity: 0.8 !important; }
.field-plan-frame svg .gt-field-bed:focus { outline: 2px solid var(--soil); outline-offset: 0; fill-opacity: 0.8 !important; }
.field-plan-frame svg .gt-field-segment-overlay { pointer-events: none; }
.field-plan-frame svg .gt-field-segment { stroke-linejoin: round; }
.field-plan-frame svg .gt-field-segment-free { stroke-dasharray: 1.2 0.9; }
.field-plan-frame svg .gt-field-segment-label { paint-order: stroke fill; stroke: white; stroke-width: 1.2px; stroke-opacity: 0.82; font-weight: 700; }
/* Mischkultur marker: one coloured dot per crop sharing the strip. */
.field-plan-frame svg .gt-field-segment-dot { paint-order: stroke fill; }

/* White halo around field-plan text so labels stay readable on top of the
   newly-coloured bed strips. paint-order draws the stroke first, then the
   fill on top, so the underlying text colour is preserved. Stroke width kept
   modest so the tiny bed-number labels (font-size 5.5) don't get drowned. */
.field-plan-frame svg text {
  paint-order: stroke fill;
  stroke: white;
  stroke-width: 1.6px;
  stroke-opacity: 0.78;
  stroke-linejoin: round;
  stroke-linecap: round;
}

/* Legend under the field plan — swatch colours must match FIELD_BED_COLOURS in tracker.js.
   Each item is a toggle filter: clicking it adds/removes its status from the
   field-map overlay. aria-pressed reflects the active state. */
/* Static, always-on legend below the field map — informational only.
   The field map paints every bed in its status colour permanently; this
   legend is the colour key. No toggle, no hover affordance, no clicks. */
.gt-field-legend { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; margin: 8px 0 18px; padding: 8px 12px; background: var(--aged); border: 1px solid var(--border); font-family: 'Overpass Mono', monospace; font-size: 0.7rem; color: var(--soil); }
.gt-field-legend-title { font-weight: 600; letter-spacing: 0.04em; text-transform: uppercase; color: var(--muted); }
.gt-field-legend-item { display: inline-flex; align-items: center; gap: 5px; padding: 3px 8px; }
.gt-field-legend-swatch { display: inline-block; width: 14px; height: 14px; border: 1px solid var(--border); }
.gt-field-legend-item[data-status="leer"] .gt-field-legend-swatch { background: #F0E8D0; border-color: #7A6E50; }
.gt-field-legend-item[data-status="vorbereitet"] .gt-field-legend-swatch { background: #E8C840; border-color: #7A5A10; }
.gt-field-legend-item[data-status="teilbepflanzt"] .gt-field-legend-swatch { background: #E8851A; border-color: #7A3A00; }
.gt-field-legend-item[data-status="bepflanzt"] .gt-field-legend-swatch { background: #3FA02E; border-color: #1F5018; }
.gt-field-legend-item[data-status="abzuraeumen"] .gt-field-legend-swatch { background: #C96A3E; border-color: #7A3418; }
.gt-field-legend-item[data-status="abgeerntet"] .gt-field-legend-swatch { background: #3B7FB0; border-color: #143E60; }
.gt-field-legend-item[data-status="entfaellt"] .gt-field-legend-swatch { background: #A9ADB3; border-color: #5C626B; }
.gt-field-live-crops { display: flex; flex-wrap: wrap; gap: 3px; }
.gt-field-live-crop { font-size: 7px; color: #255012; background: #EEF6E4; border: 1px solid #D7E9C7; padding: 1px 4px; }
.gt-field-live-empty { font-size: 7px; color: var(--muted); font-style: italic; }
.gt-block-popover { position: absolute; z-index: 300; width: 280px; background: var(--paper); border: 1px solid var(--border); border-left: 3px solid var(--soil); box-shadow: 0 4px 16px rgba(0,0,0,0.14); font-family: 'Overpass Mono', monospace; font-size: 0.72rem; }
.gt-block-popover-header { display: flex; align-items: baseline; gap: 8px; padding: 8px 10px 6px; border-bottom: 1px solid var(--border-2); }
.gt-block-popover-header strong { font-size: 0.7rem; letter-spacing: 0.06em; text-transform: uppercase; color: var(--soil); flex: 1; }
.gt-block-popover-header span { font-size: 0.62rem; color: var(--muted); white-space: nowrap; }
.gt-block-popover-close { background: none; border: none; color: var(--muted); cursor: pointer; font-size: 0.8rem; padding: 0; line-height: 1; }
.gt-block-popover-close:hover { color: var(--alert); }
.gt-block-popover-chips { padding: 6px 10px; border-bottom: 1px solid var(--border-2); gap: 4px; }
.gt-block-popover-list { padding: 6px 10px; display: flex; flex-direction: column; gap: 5px; max-height: 200px; overflow-y: auto; }
.gt-block-popover-bed { display: grid; grid-template-columns: auto auto 1fr; gap: 5px; align-items: baseline; }
.gt-block-popover-bed button { font-family: 'Overpass Mono', monospace; font-size: 0.68rem; font-weight: 700; color: var(--water); background: none; border: 0; padding: 0; cursor: pointer; text-align: left; }
.gt-block-popover-bed button:hover { text-decoration: underline; }
.gt-block-popover-text { font-size: 0.65rem; color: var(--ink); overflow-wrap: anywhere; }
@media print { .gt-block-popover { display: none !important; } }
@media print { .gt-field-legend { display: none; } }

/* Bed-detail modal (opens from field plan). Two-step: info → editor. */
.gt-bed-modal { position: fixed; inset: 0; background: rgba(20, 18, 16, 0.6); display: flex; align-items: center; justify-content: center; z-index: 250; padding: 20px; }
.gt-bed-modal[hidden] { display: none; }
.gt-bed-modal-box { background: var(--paper); border-top: 5px solid var(--leaf); padding: 22px 24px 18px; max-width: 720px; width: 100%; max-height: 86vh; overflow-y: auto; box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3); position: relative; -webkit-overflow-scrolling: touch; }
.gt-bed-modal-body > .gt-bed-editor { margin-top: 4px; }
.gt-bed-modal-close { position: absolute; top: 4px; right: 6px; background: transparent; border: none; font-size: 1.6rem; line-height: 1; padding: 8px 12px; cursor: pointer; color: var(--soil); min-width: 44px; min-height: 44px; }
.gt-bed-modal-close:hover { color: var(--alert); }
.gt-bed-modal-body h3 { font-family: 'Fraunces', serif; font-size: 1.1rem; color: var(--soil); margin: 0 0 10px; padding-bottom: 6px; border-bottom: 1px solid var(--border); }
.gt-bed-modal-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 10px; padding-bottom: 6px; border-bottom: 1px solid var(--border); }
.gt-bed-modal-head h3 { border-bottom: none; padding-bottom: 0; margin-bottom: 0; }
.gt-bed-modal-back { font-family: 'Overpass Mono', monospace; font-size: 0.66rem; letter-spacing: 0.06em; padding: 6px 12px; border: 1px solid var(--border); background: var(--surface); color: var(--soil); cursor: pointer; border-radius: 3px; min-height: 36px; }
.gt-bed-modal-back:hover { border-color: var(--leaf); color: var(--leaf); }
.gt-bed-modal-desc { font-size: 0.85rem; line-height: 1.6; color: var(--ink); }
.gt-bed-modal-desc em { color: var(--muted); }
.gt-bed-modal-desc .gt-bed-layout { margin-top: 10px; }
.gt-bed-modal-status { margin-top: 10px; padding-top: 8px; border-top: 1px dotted var(--border); display: flex; align-items: center; flex-wrap: wrap; gap: 8px; }
.gt-bed-modal-status-label { font-family: 'Overpass Mono', monospace; font-size: 0.7rem; color: var(--muted); white-space: nowrap; }
.gt-bed-modal-status-dates { font-family: 'Overpass Mono', monospace; font-size: 0.7rem; color: var(--muted); }
.gt-bed-modal-actions { display: flex; justify-content: flex-end; gap: 8px; margin-top: 14px; padding-top: 12px; border-top: 1px solid var(--border); }
.gt-bed-modal-edit { font-family: 'Overpass Mono', monospace; font-size: 0.78rem; letter-spacing: 0.06em; text-transform: uppercase; padding: 10px 18px; border: 1px solid var(--leaf); background: var(--leaf); color: white; cursor: pointer; border-radius: 3px; min-height: 44px; font-weight: 600; }
.gt-bed-modal-edit:hover { background: var(--soil); border-color: var(--soil); }

@media (max-width: 720px) {
  .gt-bed-modal { padding: 0; align-items: stretch; }
  .gt-bed-modal-box { max-width: none; max-height: 100vh; height: 100vh; padding: 16px 14px 18px; border-top-width: 4px; border-radius: 0; box-shadow: none; }
  .gt-bed-modal-body h3 { font-size: 1rem; }
  .gt-bed-modal-head { flex-direction: column-reverse; align-items: stretch; gap: 8px; }
  .gt-bed-modal-back { align-self: flex-start; }
  .gt-bed-modal-actions { justify-content: stretch; flex-direction: column; }
  .gt-bed-modal-edit { width: 100%; }
}

/* Bed layout visual (per Beetplan row).
   The SVG renders at its intrinsic 220×26 inline size. The wrapper is a
   block element so the meta line drops below the strip cleanly when the
   cell is narrow. */
.gt-bed-layout { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 10px; margin-top: 4px; }
.gt-bed-svg { flex: 0 0 auto; display: block; width: 220px; height: auto; max-width: 100%; aspect-ratio: 220 / 26; }
.gt-bed-layout-meta { font-family: 'Overpass Mono', monospace; font-size: 0.62rem; letter-spacing: 0.04em; color: var(--muted); }

/* Compact Beetplan rows on screen — keep print expanded.
   `table-layout: fixed` is the key: without it the description column
   grows to fit the longest unbroken line and pushes the table past the
   viewport. With fixed columns the description wraps inside its assigned
   width and the table stays at 100 % of the wrap. */
@media screen {
  table.bdt { table-layout: fixed; width: 100%; }
  table.bdt col.gt-col-bed   { width: 72px; }
  table.bdt col.gt-col-dim   { width: 78px; }
  table.bdt col.gt-col-info  { width: auto; }
  table.bdt col.gt-col-stat  { width: 152px; }
  table.bdt td { padding: 5px 8px 6px; line-height: 1.45; word-wrap: break-word; overflow-wrap: break-word; }
  table.bdt td:first-child { padding-right: 6px; }
  table.bdt td:nth-child(2) { white-space: normal; }
  table.bdt tbody tr[data-bed] td:nth-child(3) { font-size: 0.78rem; }
  /* Keep the Status-column controls compact and stacked. */
  table.bdt td:last-child .gt-meta { display: flex; flex-direction: column; align-items: flex-start; gap: 4px; margin-top: 0; }
  table.bdt td:last-child select.gt-status,
  table.bdt td:last-child input.gt-date { width: 100%; box-sizing: border-box; min-width: 0; }
}
@media (max-width: 720px) {
  table.bdt col.gt-col-bed   { width: 64px; }
  table.bdt col.gt-col-dim   { width: 64px; }
  table.bdt col.gt-col-stat  { width: 120px; }
}

/* Status pill below the bed-ID on each tracked row.
   `display: block` forces a new line inside the nowrap first cell so the pill
   sits under the bed label like a metadata caption. Colours mirror the
   gt-status select so the pill reads at a glance. */
.gt-bed-pill { display: block; width: max-content; margin-top: 4px; padding: 1px 7px; border-radius: 999px;
  font-family: 'Overpass Mono', monospace; font-size: 0.52rem; letter-spacing: 0.06em;
  text-transform: uppercase; line-height: 1.6; border: 1px solid var(--border); background: var(--surface); color: var(--muted); }
.gt-bed-pill[data-status="leer"]          { color: var(--muted); border-color: var(--border); background: #FAF5EA; }
.gt-bed-pill[data-status="vorbereitet"]   { color: #633806; border-color: #C8A030; background: #F5EDD0; }
.gt-bed-pill[data-status="teilbepflanzt"] { color: #7A4500; border-color: #BA7517; background: #FAEEDA; }
.gt-bed-pill[data-status="bepflanzt"]     { color: var(--good); border-color: #80C060; background: #E8F4E0; }
.gt-bed-pill[data-status="abzuraeumen"]   { color: #8a3d1e; border-color: #C96A3E; background: #F6E3D8; }
.gt-bed-pill[data-status="abgeerntet"]    { color: #1A4D7A; border-color: #5090C0; background: #E0EEF5; }
.gt-bed-pill[data-status="entfaellt"]     { color: #4E545C; border-color: #8C929B; background: #ECEDEF; }
@media print { .gt-bed-pill { display: none; } }

/* Subtle row-background tint by bed status so the table scans like the field map. */
table.bdt tbody tr[data-bed-status="vorbereitet"]   { background: #FBF3DC44; }
table.bdt tbody tr[data-bed-status="teilbepflanzt"] { background: #FBE6CD55; }
table.bdt tbody tr[data-bed-status="bepflanzt"]     { background: #ECF6E15A; }
table.bdt tbody tr[data-bed-status="abgeerntet"]    { background: #E6F0F855; }
table.bdt tbody tr[data-bed-status="entfaellt"]     { background: #ECEDEF88; }
@media print {
  table.bdt tbody tr[data-bed-status] { background: transparent !important; }
}

/* Dropped crops (Kulturtabelle rows that won't be planted this season) */
.gt-dropped { opacity: 0.55; }
.gt-dropped td { font-style: italic; }
.gt-dropped strong { font-weight: 500; text-decoration: line-through; }
/* When the toggle is collapsed the dropped rows are hidden on screen.
   Print always shows them for the season-archive record. */
@media screen {
  table.ct.gt-ct-hide-dropped tr.gt-dropped { display: none; }
}
.gt-ct-dropped-toggle { display: inline-block; margin: 0 0 8px; padding: 4px 10px; border: 1px solid var(--border); background: var(--surface); color: var(--muted); font-family: 'Overpass Mono', monospace; font-size: 0.6rem; letter-spacing: 0.08em; text-transform: uppercase; cursor: pointer; border-radius: 2px; }
.gt-ct-dropped-toggle:hover { color: var(--soil); border-color: var(--soil); }
@media print { .gt-ct-dropped-toggle { display: none; } }

/* Per-crop profile drill-down (inside Kulturtabelle) */
.gt-crop-profile-toggle { font-family: 'Overpass Mono', monospace; font-size: 0.55rem; letter-spacing: 0.06em; padding: 2px 7px; border: 1px solid var(--border); background: var(--surface); color: var(--soil); cursor: pointer; border-radius: 2px; }
.gt-crop-profile-toggle:hover { border-color: var(--soil); background: var(--aged); }
.gt-crop-profile-toggle[aria-expanded="true"] { background: var(--soil); color: white; border-color: var(--soil); }
.gt-crop-detail > td { background: #FAF6EB; border-left: 3px solid var(--leaf); padding: 12px 14px; }
.gt-crop-detail[hidden] { display: none; }

/* Beetplan editor (Section 7.1, per-bed structured override) */
.gt-bed-editor-toggle { display: inline-block; font-family: 'Overpass Mono', monospace; font-size: 0.65rem; letter-spacing: 0.06em; padding: 5px 12px; border: 1px solid var(--leaf); background: var(--surface); color: var(--leaf); cursor: pointer; border-radius: 3px; margin-top: 6px; white-space: nowrap; }
.gt-bed-editor-toggle:hover { background: var(--leaf); color: white; }
.gt-bed-editor-toggle[aria-expanded="true"] { background: var(--leaf); color: white; }
.gt-bed-editor-row > td { background: #FAF6EB; border-left: 3px solid var(--leaf); padding: 12px 18px; }
.gt-bed-editor-row[hidden] { display: none; }
.gt-bed-editor { display: flex; flex-direction: column; gap: 10px; }
.gt-bed-editor-modebar { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; padding-bottom: 8px; border-bottom: 1px solid #E8DFCA; margin-bottom: 8px; }
.gt-bed-editor-mode-picker { display: flex; flex-direction: column; gap: 6px; padding: 10px 12px; border: 1px solid var(--leaf); background: #F4F9E8; border-radius: 4px; font-family: 'Overpass Mono', monospace; font-size: 0.65rem; color: var(--ink); }
.gt-bed-editor-mode-picker[hidden] { display: none; }
.gt-bed-editor-mode-picker strong { font-size: 0.7rem; }
.gt-bed-editor-mode-picker-actions { display: flex; gap: 6px; flex-wrap: wrap; }
.gt-bed-editor-mode-picker button { font-family: inherit; font-size: 0.62rem; padding: 6px 10px; border: 1px solid var(--leaf); background: var(--surface); color: var(--ink); border-radius: 3px; cursor: pointer; min-height: 32px; }
.gt-bed-editor-mode-picker button:hover { background: var(--leaf); color: white; }
.gt-bed-editor-count { display: inline-flex; flex-direction: row; align-items: center; gap: 6px; font-family: 'Overpass Mono', monospace; font-size: 0.65rem; color: var(--soil); }
.gt-bed-editor-count > span { white-space: nowrap; }
.gt-bed-editor-count select { font-family: inherit; font-size: inherit; padding: 5px 7px; border: 1px solid var(--border); background: var(--surface); border-radius: 2px; min-height: 30px; color: var(--ink); }
.gt-bed-editor-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(130px, 1fr)); gap: 8px 12px; }
.gt-bed-editor-grid-seg { margin-top: 4px; }
.gt-bed-editor-field { display: flex; flex-direction: column; gap: 3px; font-family: 'Overpass Mono', monospace; font-size: 0.63rem; }
.gt-bed-editor-field > span { color: var(--muted); letter-spacing: 0.05em; text-transform: uppercase; font-size: 0.58rem; }
.gt-bed-editor-field input[type="text"],
.gt-bed-editor-field input[type="number"],
.gt-bed-editor-field input[type="date"],
.gt-bed-editor-field select,
.gt-bed-editor-field textarea { font-family: inherit; font-size: 0.78rem; padding: 5px 7px; border: 1px solid var(--border); background: var(--surface); color: var(--ink); min-width: 0; box-sizing: border-box; }
.gt-bed-editor-field input[type="text"],
.gt-bed-editor-field input[type="number"],
.gt-bed-editor-field input[type="date"],
.gt-bed-editor-field select { min-height: 30px; }
.gt-bed-editor-field textarea { resize: vertical; min-height: 68px; line-height: 1.45; }
.gt-bed-editor-check { flex-direction: row; align-items: center; gap: 6px; }
.gt-bed-editor-check input[type="checkbox"] { width: 15px; height: 15px; accent-color: var(--leaf); margin: 0; cursor: pointer; flex-shrink: 0; }
.gt-bed-editor-prose { width: 100%; }
.gt-bed-editor-actions { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; padding-top: 6px; border-top: 1px solid #E8DFCA; margin-top: 2px; }
.gt-bed-editor-reset { font-family: 'Overpass Mono', monospace; font-size: 0.58rem; letter-spacing: 0.06em; padding: 4px 10px; border: 1px solid var(--border); background: var(--surface); color: var(--muted); cursor: pointer; border-radius: 3px; }
.gt-bed-editor-reset:hover { border-color: var(--soil); color: var(--soil); }
.gt-bed-editor-hint { font-family: 'Overpass Mono', monospace; font-size: 0.58rem; color: var(--muted); flex: 1; transition: color 0.3s; }
.gt-bed-editor-hint.gt-saved { color: var(--leaf); }
.gt-bed-editor-succession { border-top: 2px dashed #D8D0BB; margin-top: 6px; padding-top: 10px; display: flex; flex-direction: column; gap: 8px; }
.gt-bed-editor-succession-head { font-family: 'Overpass Mono', monospace; font-size: 0.63rem; color: var(--muted); letter-spacing: 0.06em; text-transform: uppercase; }
.gt-bed-modal-succession { font-family: 'Overpass Mono', monospace; font-size: 0.75rem; color: var(--soil); padding: 8px 0; border-top: 1px dashed #D8D0BB; display: flex; flex-direction: column; gap: 3px; }
.gt-bed-modal-succession-label { font-size: 0.6rem; color: var(--muted); letter-spacing: 0.05em; text-transform: uppercase; }
.gt-bed-modal-succession-notes { color: var(--ink); font-size: 0.7rem; white-space: pre-wrap; }
.gt-bed-modal-seeds-badge { font-size: 0.65rem; padding: 1px 5px; border-radius: 3px; font-family: 'Overpass Mono', monospace; }
.gt-bed-modal-seeds-ok { background: #DFF0DA; color: #2d6a27; }
.gt-bed-modal-seeds-order { background: #FFF0D6; color: #8a5a00; }
.gt-bed-modal-seeds-ref { font-size: 0.65rem; color: var(--muted); font-family: 'Overpass Mono', monospace; }
.gt-bed-modal-fruchtfolge { font-family: 'Overpass Mono', monospace; font-size: 0.75rem; color: var(--soil); padding: 8px 0; border-top: 1px dashed #D8D0BB; display: flex; flex-direction: column; gap: 3px; }
.gt-bed-editor-fruchtfolge { border-top: 1px dashed #D8D0BB; margin-top: 4px; padding-top: 8px; display: flex; flex-direction: column; gap: 6px; }
.gt-bed-editor-variety { transition: background-color 0.5s; }
.gt-bed-editor-variety:not([hidden]) { animation: gt-variety-appear 0.6s; }
@keyframes gt-variety-appear { from { background-color: #DFF0DA; } to { background-color: transparent; } }
.gt-bed-editor-variety > span::after { content: ' ●'; color: var(--leaf); }
.gt-bed-editor-autofill { font-family: 'Overpass Mono', monospace; font-size: 0.63rem; letter-spacing: 0.06em; padding: 4px 10px; border: 1px solid var(--leaf); background: var(--surface); color: var(--leaf); cursor: pointer; border-radius: 3px; }
.gt-bed-editor-autofill:hover:not(:disabled) { background: var(--leaf); color: white; }
.gt-bed-editor-autofill:disabled { opacity: 0.4; cursor: not-allowed; }
.gt-bed-editor-reset:disabled { opacity: 0.5; cursor: not-allowed; }
.gt-bed-editor-segments { display: flex; flex-direction: column; gap: 12px; }
.gt-bed-editor-segments[hidden] { display: none; }
.gt-bed-seg-editor { background: var(--surface); border: 1px solid #DDD1B2; border-left: 3px solid #B8C9A8; padding: 10px 12px; border-radius: 2px; }
.gt-bed-seg-editor[hidden] { display: none; }
.gt-bed-seg-head { display: flex; justify-content: space-between; align-items: center; gap: 8px; font-family: 'Overpass Mono', monospace; font-size: 0.62rem; letter-spacing: 0.08em; color: var(--soil); text-transform: uppercase; padding-bottom: 6px; margin-bottom: 4px; border-bottom: 1px solid #EADED0; }
.gt-bed-seg-move { display: inline-flex; gap: 3px; }
.gt-bed-seg-move button { font-family: 'Overpass Mono', monospace; font-size: 0.62rem; line-height: 1; padding: 2px 6px; border: 1px solid #C8BC98; background: #F9F4E8; color: var(--soil); cursor: pointer; border-radius: 2px; }
.gt-bed-seg-move button:hover { border-color: var(--leaf); color: var(--leaf); background: var(--surface); }
.gt-bed-segment + .gt-bed-segment { margin-top: 10px; padding-top: 8px; border-top: 1px dashed #D8CEB2; }
.gt-bed-segment-text { white-space: pre-wrap; }
.gt-bed-segment-rest { margin-top: 8px; font-family: 'Overpass Mono', monospace; font-size: 0.62rem; color: var(--muted); }
/* ── Field-assistant FAB (mobile only) ── */
#fa-fab { display: none; position: fixed; bottom: 24px; right: 20px; z-index: 1500;
  width: 52px; height: 52px; border-radius: 50%;
  background: var(--soil, #3b2a1a); color: white; border: none; cursor: pointer;
  font-size: 1.5rem; line-height: 1; box-shadow: 0 4px 18px rgba(0,0,0,.35);
  align-items: center; justify-content: center; }
#fa-fab:hover { background: #5a3e28; }
@media (max-width: 720px) {
  #fa-bar-btn { display: none; }
  #fa-fab { display: flex; }
}
@media print { #fa-fab { display: none !important; } }

/* ── Field-assistant: AI edit-proposal review card ── */
.fa-actions {
  align-self: stretch; border: 1px solid var(--border, #d0c8b0);
  border-left: 3px solid var(--soil, #3b2a1a); background: #FBF8F0; border-radius: 3px;
  padding: 8px 10px; font-family: 'Overpass Mono', monospace; font-size: 0.72rem;
}
.fa-actions-head { font-weight: 700; color: var(--soil, #3b2a1a); margin-bottom: 6px; font-size: 0.7rem; letter-spacing: 0.04em; }
.fa-action-row { display: flex; gap: 8px; align-items: flex-start; padding: 6px 0; border-top: 1px solid #ECE4D0; }
.fa-action-row:first-of-type { border-top: none; }
.fa-action-row.is-invalid { opacity: 0.7; }
.fa-action-row input[type=checkbox] { margin-top: 2px; flex-shrink: 0; }
.fa-action-main { flex: 1; min-width: 0; }
.fa-action-title { font-weight: 700; color: var(--ink, #2a2118); }
.fa-action-tool { font-weight: 400; color: var(--muted, #888); font-size: 0.6rem; }
.fa-action-line { color: #4a4034; line-height: 1.5; word-break: break-word; }
.fa-action-err { color: #9a3412; }
.fa-action-result { font-size: 0.66rem; margin-top: 2px; }
.fa-action-result.is-ok { color: var(--good, #4a7a30); }
.fa-action-result.is-fail { color: #b91c1c; }
.fa-actions-foot { display: flex; gap: 6px; margin-top: 8px; }
.fa-apply, .fa-discard {
  font-family: 'Overpass Mono', monospace; font-size: 0.64rem; letter-spacing: 0.06em;
  text-transform: uppercase; padding: 6px 12px; border-radius: 2px; cursor: pointer;
  border: 1px solid var(--border, #d0c8b0);
}
.fa-apply { background: var(--soil, #3b2a1a); color: white; border-color: var(--soil, #3b2a1a); }
.fa-apply:disabled { opacity: 0.6; cursor: default; }
.fa-discard { background: var(--surface); color: var(--ink, #2a2118); }
@media print { #fa-drawer { display: none !important; } }

.gt-bed-mischkultur-block { margin-top: 6px; }
.gt-bed-mischkultur-badge { display: inline-block; font-family: 'Overpass Mono', monospace; font-size: 0.58rem; letter-spacing: 0.08em; text-transform: uppercase; color: #5A6A30; background: #EAF0DA; border: 1px solid #C4D098; border-radius: 2px; padding: 1px 6px; margin-bottom: 6px; }
.gt-bw-group-badge { font-family: 'Overpass Mono', monospace; font-size: 0.58rem; letter-spacing: 0.06em; color: #5A6A30; background: #EAF0DA; border: 1px solid #C4D098; border-radius: 2px; padding: 1px 5px; vertical-align: middle; }
.gt-bw-item-group .gt-bw-id { display: inline-flex; align-items: center; gap: 5px; }
.gt-bed-mischkultur-crop { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; margin-top: 4px; }
.gt-bed-mischkultur-dot { display: inline-block; width: 8px; height: 8px; border-radius: 50%; flex-shrink: 0; background: var(--mc-color, #27500A); }
.gt-bed-mischkultur-name { font-size: 0.75rem; font-weight: 600; color: var(--soil); min-width: 60px; }
@media (max-width: 720px) {
  .gt-bed-editor-toggle { padding: 6px 14px; font-size: 0.68rem; }
  .gt-bed-editor-row > td { padding: 10px 10px; }
  .gt-bed-editor-grid { grid-template-columns: repeat(2, 1fr); gap: 8px; }
  .gt-bed-editor-field { font-size: 0.68rem; }
  .gt-bed-editor-field > span { font-size: 0.62rem; }
  .gt-bed-editor-field input[type="text"],
  .gt-bed-editor-field input[type="number"],
  .gt-bed-editor-field input[type="date"],
  .gt-bed-editor-field select { min-height: 38px; font-size: 0.88rem; padding: 6px 8px; }
  .gt-bed-editor-modecheck { font-size: 0.68rem; padding: 6px 12px; }
  .gt-bed-editor-check input[type="checkbox"] { width: 18px; height: 18px; }
  .gt-bed-editor-autofill, .gt-bed-editor-reset { font-size: 0.65rem; padding: 5px 12px; }
}
@media print {
  .gt-bed-editor-toggle, .gt-bed-editor-row { display: none !important; }
}

/* "live" badge on bed rows whose Bepflanzung column is overridden from Supabase */
table.bdt tbody tr[data-bed-overridden="1"] td:nth-child(3)::before {
  content: 'live';
  display: inline-block;
  font-family: 'Overpass Mono', monospace;
  font-size: 0.5rem;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  padding: 1px 5px;
  margin-right: 6px;
  border: 1px solid var(--leaf);
  color: var(--leaf);
  background: var(--surface);
  border-radius: 2px;
  vertical-align: 1px;
}
@media print {
  table.bdt tbody tr[data-bed-overridden="1"] td:nth-child(3)::before { content: none; }
}
.gt-cp-head { font-family: 'Fraunces', serif; font-size: 0.92rem; color: var(--soil); margin-bottom: 8px; }
.gt-cp-head strong { color: var(--soil); font-weight: 700; }
.gt-cp-since { font-family: 'Overpass Mono', monospace; font-size: 0.7rem; color: var(--muted); }
.gt-crop-derived { margin-top: 6px; font-family: 'Overpass Mono', monospace; font-size: 0.6rem; color: var(--muted); }
.gt-crop-phase { font-family: 'Overpass Mono', monospace; font-size: 0.62rem; min-height: 30px; }
.gt-cp-section { margin-top: 8px; }
.gt-cp-section + .gt-cp-section { border-top: 1px dotted var(--border); padding-top: 8px; }
.gt-cp-label { display: block; font-family: 'Overpass Mono', monospace; font-size: 0.58rem; letter-spacing: 0.12em; text-transform: uppercase; color: var(--muted); margin-bottom: 4px; }
.gt-cp-empty { font-style: italic; color: var(--muted); font-size: 0.74rem; }
.gt-cp-hint { font-size: 0.76rem; line-height: 1.5; color: var(--ink); }
.gt-cp-derived { font-family: 'Overpass Mono', monospace; font-size: 0.66rem; color: var(--muted); }
.gt-cp-beds { list-style: none; padding: 0; margin: 0; display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 8px; }
.gt-cp-beds > li { background: var(--surface); border: 1px solid var(--border); padding: 8px 10px; border-radius: 2px; }
.gt-cp-bed-row { display: flex; justify-content: space-between; align-items: baseline; gap: 8px; margin-bottom: 4px; }
.gt-cp-bed-row strong { font-family: 'Overpass Mono', monospace; font-size: 0.72rem; color: var(--soil); }
.gt-cp-bed-dim { font-family: 'Overpass Mono', monospace; font-size: 0.62rem; color: var(--muted); }
.gt-cp-bed-segs { display: flex; flex-direction: column; gap: 8px; }
.gt-cp-bed-seg { border-top: 1px dashed var(--border); padding-top: 7px; }
.gt-cp-bed-seg:first-child { border-top: none; padding-top: 0; }
.gt-cp-bed-seg-head { font-family: 'Overpass Mono', monospace; font-size: 0.58rem; letter-spacing: 0.08em; text-transform: uppercase; color: var(--soil); margin-bottom: 4px; }
.gt-cp-bed-text { font-size: 0.74rem; line-height: 1.45; color: var(--ink); white-space: pre-wrap; }
.gt-cp-bed-svg { margin: 4px 0; }
.gt-cp-bed-svg .gt-bed-svg { width: 100%; height: auto; }
.gt-cp-bed-meta { font-family: 'Overpass Mono', monospace; font-size: 0.6rem; color: var(--muted); }
.gt-cp-bed-rest { margin-top: 4px; font-family: 'Overpass Mono', monospace; font-size: 0.6rem; color: var(--muted); }
.gt-cp-notes { list-style: none; padding: 0; margin: 0; font-size: 0.76rem; line-height: 1.5; }
.gt-cp-notes li { padding: 3px 0; border-top: 1px dotted var(--border); }
.gt-cp-notes li:first-child { border-top: none; }
.gt-cp-notes time { font-family: 'Overpass Mono', monospace; font-size: 0.7rem; color: var(--muted); }

/* Table scroll wrapper for mobile.
   Each tracked table also has a content-driven `min-width` so the wrapper
   actually overflows on narrow viewports instead of squishing columns into
   one-character-per-line. The first column is sticky so the row identifier
   (Kultur / Beet / Artikel) stays visible while you scroll right. The card
   override below 720 px replaces this with a stacked layout. */
.table-wrap { width: 100%; max-width: 100%; overflow-x: auto; -webkit-overflow-scrolling: touch; margin-bottom: 16px; position: relative; }
.table-wrap table { margin-bottom: 0; }
.table-wrap table.ct { min-width: 760px; }
.table-wrap table.bdt { min-width: 560px; }
.table-wrap table.bt { min-width: 620px; }
.table-wrap table.ct th:first-child,
.table-wrap table.ct td:first-child,
.table-wrap table.bdt th:first-child,
.table-wrap table.bdt td:first-child {
  position: sticky; left: 0; z-index: 2;
  background: var(--paper);
  box-shadow: 1px 0 0 var(--border);
}
.table-wrap table.ct th:first-child,
.table-wrap table.bdt th:first-child { background: var(--soil); color: white; z-index: 3; }
.table-wrap table.ct .gr td:first-child,
.table-wrap table.bdt .gr td:first-child { background: var(--aged); }
.table-wrap table.bdt tr:hover td:first-child,
.table-wrap table.ct tr:hover td:first-child { background: var(--surface-hover); }

/* Login modal */
.gt-login { position: fixed; inset: 0; background: rgba(20, 18, 16, 0.7); display: flex; align-items: center; justify-content: center; z-index: 200; padding: 20px; }
.gt-login[hidden] { display: none; }
.gt-login-box { background: var(--paper); border-top: 5px solid var(--soil); padding: 28px 26px; max-width: 380px; width: 100%; box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3); }
.gt-login-box h2 { font-family: 'Fraunces', serif; font-size: 1.3rem; color: var(--soil); margin-bottom: 4px; }
.gt-login-box p { font-size: 0.72rem; color: var(--muted); margin-bottom: 18px; }
.gt-login-box label { display: block; font-family: 'Overpass Mono', monospace; font-size: 0.58rem; letter-spacing: 0.12em; text-transform: uppercase; color: var(--muted); margin: 10px 0 4px; }
.gt-login-box input { width: 100%; padding: 8px 10px; border: 1px solid var(--border); background: var(--surface); font-family: 'Overpass', sans-serif; font-size: 0.85rem; color: var(--ink); }
.gt-login-box input:focus { outline: none; border-color: var(--soil); }
.gt-login-actions { display: flex; gap: 8px; justify-content: flex-end; margin-top: 18px; }
.gt-login-actions button { font-family: 'Overpass Mono', monospace; font-size: 0.65rem; letter-spacing: 0.1em; text-transform: uppercase; padding: 8px 14px; cursor: pointer; border-radius: 2px; border: 1px solid var(--border); }
.gt-login-actions button[type="submit"], .gt-login-actions .gt-primary { background: var(--soil); color: white; border-color: var(--soil); }
.gt-login-actions button:hover { opacity: 0.85; }
.gt-login-err { color: var(--alert); font-size: 0.72rem; margin-top: 10px; min-height: 18px; }

/* ── Mobile (≤720px) ─────────────────────────── */
@media (max-width: 720px) {
  body { padding: 14px 10px; font-size: 14px; }
  .gt-view-shell { padding: 12px 12px; }
  .gt-view-shell-title { font-size: 0.96rem; }
  .gt-view-shell-links { grid-template-columns: 1fr; }
  .cover { grid-template-columns: 1fr; gap: 14px; padding: 14px 0 16px; margin-bottom: 24px; }
  .cover h1 { font-size: 1.7rem; }
  .cover-meta { text-align: left; }
  .toc { grid-template-columns: 1fr; padding: 12px 14px; }
  .chapter { font-size: 1.2rem; margin-top: 28px; }
  .chapter[id] { scroll-margin-top: 112px; }
  .field-plan-frame { margin-left: -10px; margin-right: -10px; padding: 10px; border-left: 0; border-right: 0; }
  .roi-grid { grid-template-columns: 1fr; }
  .hedge-grid { grid-template-columns: 1fr; }
  .soil-row { grid-template-columns: repeat(2, 1fr); }
  .verdict { grid-template-columns: 1fr; padding: 14px 16px; }
  .compliance { grid-template-columns: 1fr; }
  table.bt, table.ct, table.bdt { font-size: 0.7rem; }
  table.bt td, table.ct td, table.bdt td { padding: 6px 7px; }
  .gt-bar { font-size: 0.55rem; padding: 6px 10px; }
  .gt-nav { margin-top: -8px; }
  .gt-dashboard { grid-template-columns: 1fr 1fr; gap: 8px; margin-bottom: 24px; }
  .gt-card { min-height: 82px; padding: 9px 10px; }
  .gt-card strong { font-size: 1.25rem; }
  .gt-task { padding-left: 28px; }
  .ws { font-size: 0.65rem; padding: 12px; }
  footer { flex-direction: column; gap: 6px; }
  .gt-heute-konkret { padding: 10px 12px; }
  .gt-heute-konkret-list { grid-template-columns: 1fr; }
  .gt-heute-step { grid-template-columns: 24px 1fr; padding: 8px 7px; }
  .gt-heute { padding: 10px 12px; }
  .gt-export { margin: -16px 0 18px; }
  .gt-toasts { left: 12px; right: 12px; max-width: none; bottom: 12px; }
  .gt-notes-input { max-width: none; }
  .gt-observations { padding: 10px 12px; }
  .gt-obs-row { grid-template-columns: 1fr; }
  .gt-obs-checkbox { padding-top: 0; }

  /* ── Tap-target pass: inline tracker controls were sized for desktop
     pointer-hover. Bump them so each is at least ~38–44 px tall, the
     standard mobile touch minimum. Also force font-size ≥ 16 px on text
     inputs so iOS Safari doesn't auto-zoom on focus. */
  .gt-status, .gt-date, .gt-price { font-size: 0.78rem; padding: 7px 9px; min-height: 38px; }
  .gt-price { font-size: 1rem; width: 96px; }
  .gt-price-plan { font-size: 0.68rem; padding: 7px 10px; min-height: 36px; }
  .gt-meta { gap: 8px; }
  .gt-notes-input { font-size: 16px; padding: 8px 10px; }
  .gt-notes-summary { padding: 8px 0; min-height: 32px; display: inline-flex; align-items: center; }
  .gt-task { padding-top: 14px; padding-bottom: 14px; min-height: 44px; }
  .gt-check { top: 16px; width: 22px; height: 22px; }
  .gt-bed-water-btn { font-size: 0.7rem; padding: 8px 12px; min-height: 38px; }
  .gt-bed-water-caption { font-size: 0.66rem; }
  .gt-bw-quick { font-size: 0.66rem; padding: 7px 11px; min-height: 36px; }
  .gt-export button { font-size: 0.68rem; padding: 7px 12px; min-height: 36px; }
  .gt-collapse-toggle { font-size: 0.64rem; padding: 7px 12px; min-height: 36px; }
  .gt-obs-preset { font-size: 0.68rem; padding: 8px 11px; min-height: 36px; }
  .gt-obs-toggle { font-size: 0.66rem; padding: 7px 12px; min-height: 36px; }
  .gt-obs-actions button { font-size: 0.7rem; padding: 9px 14px; min-height: 40px; }
  .gt-obs-row input, .gt-obs-row select, .gt-obs-form textarea { font-size: 16px; padding: 8px 10px; }
  .gt-tagesplan-edit-btn { font-size: 0.66rem; padding: 7px 12px; min-height: 36px; }
  .gt-tagesplan-edit-btns button { font-size: 0.68rem; padding: 9px 14px; min-height: 40px; }
  #gt-tagesplan-titleinput, #gt-tagesplan-textarea { font-size: 16px; }
  .gt-login-box input { font-size: 16px; padding: 10px 12px; }
  .gt-login-actions button { font-size: 0.72rem; padding: 10px 16px; min-height: 44px; }
  .gt-nav a { font-size: 0.66rem; padding: 8px 12px; min-height: 32px; display: inline-flex; align-items: center; }
  .gt-tabs a { padding: 9px 14px; font-size: 0.7rem; min-height: 38px; }
  .gt-bar button { font-size: 0.66rem; padding: 7px 12px; min-height: 34px; }

  /* ── Card layout for tracked tables (Kulturtabelle, Beetplan, shopping).
     Below 720 px the wrapper stops scrolling sideways, the table becomes a
     stack of self-contained cards, the <thead> is hidden, and each <td>'s
     value is preceded by the `data-col` label set in `labelTrackedTableCells`.
     The original print/desktop HTML stays untouched so PDF export and the
     wider tabbed views are unaffected. */
  .table-wrap { overflow-x: visible; }
  .table-wrap table.ct,
  .table-wrap table.bdt,
  .table-wrap table.bt {
    min-width: 0;
    display: block;
    width: 100%;
    border-collapse: separate;
    border-spacing: 0;
    font-size: inherit;
  }
  table.ct thead, table.bdt thead, table.bt thead { display: none; }
  table.ct colgroup, table.bdt colgroup, table.bt colgroup { display: none; }
  table.ct tbody, table.bdt tbody, table.bt tbody { display: block; }

  table.ct tbody tr,
  table.bdt tbody tr,
  table.bt tbody tr {
    display: block;
    background: var(--surface);
    border: 1px solid var(--border);
    border-left: 3px solid var(--leaf);
    border-radius: 3px;
    padding: 10px 12px 12px;
    margin: 0 0 10px;
    box-shadow: 0 1px 2px rgba(42, 31, 18, 0.04);
  }
  table.ct tbody tr.gr,
  table.bdt tbody tr.gr,
  table.bt tbody tr.gr {
    background: var(--soil);
    color: white;
    border: 0;
    border-radius: 3px;
    padding: 0;
    margin: 18px 0 8px;
    box-shadow: none;
  }
  table.ct tbody tr.gr td,
  table.bdt tbody tr.gr td,
  table.bt tbody tr.gr td {
    display: block;
    background: transparent;
    color: inherit;
    font-family: 'Overpass Mono', monospace;
    font-size: 0.62rem;
    letter-spacing: 0.09em;
    text-transform: uppercase;
    padding: 8px 12px;
    border: 0;
  }
  table.bt tbody tr.sub,
  table.bt tbody tr.tot {
    background: var(--aged);
    border-left: 3px solid var(--soil);
  }

  table.ct tbody tr:not(.gr) td,
  table.bdt tbody tr:not(.gr) td,
  table.bt tbody tr:not(.gr):not(.sub):not(.tot) td {
    display: block;
    padding: 6px 0;
    border-bottom: 1px dotted var(--border);
    background: transparent;
    white-space: normal;
    font-size: 0.86rem;
    line-height: 1.5;
    color: var(--ink);
  }
  table.ct tbody tr:not(.gr) td:last-child,
  table.bdt tbody tr:not(.gr) td:last-child,
  table.bt tbody tr:not(.gr) td:last-child { border-bottom: 0; padding-bottom: 0; }

  /* The data-col label rendered as a small uppercase tag above each value. */
  table.ct tbody td[data-col]::before,
  table.bdt tbody td[data-col]::before,
  table.bt tbody td[data-col]::before {
    content: attr(data-col);
    display: block;
    font-family: 'Overpass Mono', monospace;
    font-size: 0.56rem;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: var(--muted);
    margin-bottom: 3px;
  }

  /* First cell = card title. Lose the label prefix, beef up the typography,
     and pin a divider below so the rest of the fields read as a body. */
  table.ct tbody tr:not(.gr) td:first-child,
  table.bdt tbody tr:not(.gr) td:first-child {
    font-family: 'Fraunces', serif;
    font-size: 1.05rem;
    font-weight: 700;
    color: var(--soil);
    border-bottom: 1px solid var(--border);
    padding: 2px 0 8px;
    margin-bottom: 4px;
    line-height: 1.2;
    white-space: normal;
  }
  table.ct tbody tr:not(.gr) td:first-child::before,
  table.bdt tbody tr:not(.gr) td:first-child::before { content: none; }
  table.ct tbody tr:not(.gr) td:first-child strong,
  table.bdt tbody tr:not(.gr) td:first-child strong { font-weight: inherit; }
  /* The bedplan's second column (Maße) is a discrete subtitle on the card. */
  table.bdt tbody tr:not(.gr) td:nth-child(2) {
    font-family: 'Overpass Mono', monospace;
    font-size: 0.66rem;
    letter-spacing: 0.05em;
    color: var(--muted);
    margin-top: -6px;
    padding-top: 0;
    border-bottom: 1px dashed var(--border);
  }
  table.bdt tbody tr:not(.gr) td:nth-child(2)::before { content: none; }

  /* Last cell = controls footer. The tracker decorators stuff the status
     pill, date input, water button, profile button, and notes in here, so
     give them breathing room and a clear top divider. */
  table.ct tbody tr:not(.gr) td:last-child,
  table.bdt tbody tr:not(.gr) td:last-child {
    margin-top: 6px;
    padding-top: 8px;
    border-top: 1px solid var(--border);
  }
  table.ct tbody tr:not(.gr) td:last-child .gt-meta,
  table.bdt tbody tr:not(.gr) td:last-child .gt-meta {
    margin-top: 6px;
    gap: 8px;
    flex-wrap: wrap;
  }

  /* Sticky first column belongs to the table layout — disable it here. */
  .table-wrap table.ct th:first-child,
  .table-wrap table.ct td:first-child,
  .table-wrap table.bdt th:first-child,
  .table-wrap table.bdt td:first-child {
    position: static;
    box-shadow: none;
    background: transparent;
  }

  /* Bedplan editor row: still a separate <tr>, but in card mode it sits
     directly under the bed card. Give it a softer surface so it visibly
     belongs to the bed above. */
  tr.gt-bed-editor-row { display: block; }
  tr.gt-bed-editor-row > td {
    display: block;
    padding: 10px 12px;
    background: #FAF6EB;
    border: 1px solid var(--border);
    border-left: 3px solid var(--leaf);
    border-top: 0;
    border-radius: 0 0 3px 3px;
    margin: -10px 0 10px;
  }

  /* Shopping rows: same card vibe, but the last cell is the price/Link
     bundle, not tracker controls — skip the divider. */
  table.bt tbody tr:not(.gr):not(.sub):not(.tot) td:first-child {
    font-family: 'Fraunces', serif;
    font-size: 1rem;
    font-weight: 700;
    color: var(--soil);
    border-bottom: 1px solid var(--border);
    padding: 2px 0 8px;
    margin-bottom: 4px;
  }
  table.bt tbody tr:not(.gr):not(.sub):not(.tot) td:first-child::before { content: none; }
}

/* ── Auth gating ───────────────────────────── */
/* Default: show landing, hide everything else */
.gated { display: none; }
.gt-bar { display: none; }
body.is-authed .gt-bar { display: flex; }
body.is-authed .gated { display: block; }
body.is-authed .landing { display: none; }

/* ── Public access: Beete + Kulturen tabs without login ── */
body.is-public .gated { display: block; }
body.is-public .gt-bar { display: flex; }
body.is-public .landing { display: none; }
/* Hide private nav tabs — only Beete and Kulturen are public */
body.is-public #gt-nav a[data-view="heute"],
body.is-public #gt-nav a[data-view="einkaeufe"],
body.is-public #gt-nav a[data-view="plan"] { display: none; }
/* Hide heute-tagged sections even in beete view (Bewässerung widget lives there) */
body.is-public [data-views~="heute"] { display: none !important; }
/* Tracker controls: read-only for public */
body.is-public .gt-meta { display: none !important; }
body.is-public .gt-bed-modal-status-sel { display: none !important; }
body.is-public .gt-bed-modal-edit { display: none !important; }
body.is-public .gt-bed-editor-toggle { display: none !important; }
body.is-public .gt-bed-editor-row { display: none !important; }
body.is-public .gt-notes-toggle { display: none !important; }
/* Field assistant stays visible for public — uses free tier only */
body.is-public #fa-bar-btn { display: inline-flex !important; }
body.is-public #fa-fab { display: flex !important; }
body.is-public .gt-crop-detail { display: none !important; }
/* Plan-2026 status chips need Supabase — hide for public */
body.is-public #gt-catalog-status-chips { display: none !important; }
/* API link in catalog: auth-only */
body.is-public .gt-catalog-api-link { display: none !important; }

/* Landing page */
.landing { min-height: 100vh; display: flex; align-items: center; justify-content: center; padding: 24px 12px; background: var(--paper); }
.landing-inner { max-width: 920px; width: 100%; text-align: center; }
.landing-eyebrow { font-family: 'Overpass Mono', monospace; font-size: 0.65rem; letter-spacing: 0.22em; text-transform: uppercase; color: var(--muted); margin-bottom: 14px; }
.landing-title { font-family: 'Fraunces', serif; font-size: 3.6rem; font-weight: 900; color: var(--soil); line-height: 0.95; margin-bottom: 8px; }
.landing-sub { font-family: 'Fraunces', serif; font-size: 1rem; font-weight: 300; font-style: italic; color: var(--muted); margin-bottom: 28px; }
.landing-map { background: var(--surface); border: 1px solid var(--border); padding: 14px; margin-bottom: 28px; box-shadow: 0 1px 6px rgba(0, 0, 0, 0.04); }
.landing-map svg { display: block; width: 100%; height: auto; max-height: 70vh; }
.landing-cta { border-top: 1px solid var(--border); padding-top: 22px; }
.landing-cta p { font-family: 'Overpass Mono', monospace; font-size: 0.65rem; letter-spacing: 0.18em; text-transform: uppercase; color: var(--muted); margin-bottom: 14px; }
.landing-actions { display: flex; gap: 10px; justify-content: center; align-items: center; flex-wrap: wrap; }
.gt-primary-btn { background: var(--soil); color: white; border: 2px solid var(--soil); font-family: 'Overpass Mono', monospace; font-size: 0.78rem; letter-spacing: 0.18em; text-transform: uppercase; padding: 12px 36px; cursor: pointer; border-radius: 2px; transition: opacity 0.15s; }
.gt-primary-btn:hover { opacity: 0.85; }
.gt-secondary-btn { display: inline-flex; align-items: center; justify-content: center; background: var(--surface); color: var(--soil); border: 2px solid var(--border); font-family: 'Overpass Mono', monospace; font-size: 0.78rem; letter-spacing: 0.18em; text-transform: uppercase; padding: 12px 24px; text-decoration: none; border-radius: 2px; transition: background 0.15s, border-color 0.15s; }
.gt-secondary-btn:hover { background: var(--aged); border-color: var(--soil); }

/* ── Pflanzen-Katalog (Section 8.2) ─────────────────────────────────── */
.gt-catalog { margin: 0 0 16px; }
.gt-catalog-toolbar { background: var(--surface); border: 1px solid var(--border); border-left: 4px solid var(--leaf); padding: 10px 12px; display: flex; flex-wrap: wrap; gap: 8px 12px; align-items: center; margin-bottom: 12px; }
.gt-catalog-search { display: inline-flex; flex: 1 1 240px; align-items: center; gap: 6px; padding: 4px 8px; border: 1px solid var(--border); background: var(--paper); }
.gt-catalog-search > span { font-size: 0.95rem; color: var(--muted); line-height: 1; }
.gt-catalog-search input { flex: 1; border: 0; outline: none; background: transparent; font-family: 'Overpass', sans-serif; font-size: 0.82rem; color: var(--ink); padding: 4px 0; min-width: 0; }
.gt-catalog-chips { display: inline-flex; flex-wrap: wrap; gap: 5px; align-items: center; }
.gt-catalog-chip-label { font-family: 'Overpass Mono', monospace; font-size: 0.55rem; letter-spacing: 0.05em; text-transform: uppercase; color: var(--muted); margin-right: 2px; }
.gt-catalog-chip { font-family: 'Overpass Mono', monospace; font-size: 0.6rem; letter-spacing: 0.04em; padding: 4px 9px; border: 1px solid var(--border); background: var(--surface); color: var(--soil); cursor: pointer; border-radius: 999px; user-select: none; }
.gt-catalog-chip:hover { border-color: var(--soil); }
.gt-catalog-chip[aria-pressed="true"] { background: var(--soil); color: white; border-color: var(--soil); }
.gt-catalog-clear { font-family: 'Overpass Mono', monospace; font-size: 0.56rem; letter-spacing: 0.08em; text-transform: uppercase; padding: 4px 9px; border: 1px solid var(--border); background: var(--surface); color: var(--soil); cursor: pointer; border-radius: 2px; }
.gt-catalog-clear:hover { border-color: var(--soil); background: var(--aged); }

.gt-catalog-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 10px; }
.gt-catalog-card { background: var(--surface); border: 1px solid var(--border); border-radius: 3px; padding: 10px 12px; display: flex; flex-direction: column; gap: 6px; }
.gt-catalog-card.gt-catalog-hidden { display: none; }
.gt-catalog-card-head { display: flex; flex-direction: column; gap: 4px; }
.gt-catalog-card-title strong { display: block; font-family: 'Fraunces', serif; font-size: 1rem; color: var(--soil); }
.gt-catalog-card-title em { display: block; font-family: 'Fraunces', serif; font-size: 0.75rem; font-style: italic; color: var(--muted); }
.gt-catalog-badges { display: flex; flex-wrap: wrap; gap: 4px; }
.gt-catalog-badge { font-family: 'Overpass Mono', monospace; font-size: 0.55rem; letter-spacing: 0.04em; padding: 2px 7px; border-radius: 999px; background: var(--aged); color: var(--soil); white-space: nowrap; }
.gt-catalog-badge.gt-badge-method { background: #E0EEF5; color: #1A4D7A; }
.gt-catalog-badge.gt-badge-net { background: #FAEAE0; color: var(--alert); }
.gt-catalog-badge.gt-badge-frost { background: #DEE9F4; color: #185FA5; }
.gt-catalog-badge.gt-badge-succ { background: #FFF1D0; color: #7A4500; }
.gt-catalog-badge.gt-badge-water[data-w="niedrig"] { background: #F5EDD0; color: #633806; }
.gt-catalog-badge.gt-badge-water[data-w="mittel"]  { background: #E0EEF5; color: #1A4D7A; }
.gt-catalog-badge.gt-badge-water[data-w="hoch"]    { background: #D6EAF3; color: #0C447C; }

/* Plan-Status badges (Tier 1A) */
.gt-catalog-badge.gt-badge-status { font-weight: 600; padding: 2px 8px; }
.gt-catalog-badge.gt-badge-status[data-s="aktiv"]      { background: var(--hedge-bg); color: var(--good); }
.gt-catalog-badge.gt-badge-status[data-s="nicht-2026"] { background: var(--aged); color: var(--muted); }
.gt-catalog-badge.gt-badge-status[data-s="kein-eintrag"] { background: var(--paper); color: var(--muted); border: 1px dashed var(--border); }
[data-plant-card][data-status="nicht-2026"] { opacity: 0.78; }
[data-plant-card][data-status="nicht-2026"] .gt-catalog-card-title strong { color: var(--muted); }

/* Dominant 2026 variety highlight (Tier 2E) */
.gt-catalog-badge.gt-badge-dominant { background: var(--straw-bg); color: #7A4500; border: 1px solid var(--gold); }
.gt-cat-variety[data-dominant="1"] { background: var(--straw-bg); border-left: 3px solid var(--gold); padding-left: 8px; }
.gt-cat-variety-dom-tag { font-family: 'Overpass Mono', monospace; font-size: 0.5rem; letter-spacing: 0.08em; text-transform: uppercase; color: #7A4500; background: var(--surface); padding: 1px 5px; border-radius: 999px; border: 1px solid var(--gold); }

/* Bed assignments line on catalog cards (Tier 1B) */
.gt-cat-beds { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 6px; font-family: 'Overpass Mono', monospace; font-size: 0.6rem; color: var(--soil); padding: 4px 0 0; }
.gt-cat-beds-label { color: var(--muted); flex: 0 0 auto; }
.gt-cat-bed-pill { display: inline-block; padding: 1px 6px; background: var(--hedge-bg); color: var(--good); border-radius: 999px; cursor: pointer; font-weight: 600; }
.gt-cat-bed-pill:hover { background: var(--good); color: white; }
.gt-cat-beds-summary { color: var(--muted); font-style: italic; }
.gt-cat-beds-none { color: var(--muted); font-style: italic; }

/* Beetplan crop names → catalog link (Tier 2D) */
.gt-bed-plant-link { color: var(--leaf); cursor: pointer; border-bottom: 1px dotted var(--leaf-l); text-decoration: none; }
.gt-bed-plant-link:hover { color: var(--good); border-bottom-color: var(--good); }

/* Card scroll-flash highlight when arriving from Beetplan */
@keyframes gtCardFlash {
  0%   { box-shadow: 0 0 0 0 rgba(122, 178, 122, 0); background: var(--surface); }
  20%  { box-shadow: 0 0 0 4px var(--leaf-l); background: var(--hedge-bg); }
  100% { box-shadow: 0 0 0 0 rgba(122, 178, 122, 0); background: var(--surface); }
}
.gt-catalog-card.gt-card-flash { animation: gtCardFlash 1.8s ease-out; }

.gt-catalog-summary { font-family: 'Overpass Mono', monospace; font-size: 0.65rem; line-height: 1.55; color: var(--muted); min-height: 1em; }

.gt-catalog-toggle { align-self: flex-start; font-family: 'Overpass Mono', monospace; font-size: 0.56rem; letter-spacing: 0.08em; text-transform: uppercase; padding: 4px 9px; border: 1px solid var(--border); background: var(--surface); color: var(--soil); cursor: pointer; border-radius: 2px; }
.gt-catalog-toggle:hover { border-color: var(--soil); background: var(--aged); }
.gt-catalog-body { display: grid; grid-template-columns: 1fr 1fr; gap: 6px 10px; padding-top: 8px; margin-top: 4px; border-top: 1px dotted var(--border); }
.gt-catalog-body[hidden] { display: none; }
.gt-catalog-field { display: flex; flex-direction: column; gap: 2px; font-family: 'Overpass Mono', monospace; font-size: 0.6rem; }
.gt-catalog-field-label { color: var(--muted); letter-spacing: 0.04em; }
.gt-catalog-field-value { font-family: 'Overpass', sans-serif; font-size: 0.72rem; color: var(--ink); padding: 3px 5px; min-height: 1.4em; word-break: break-word; }
/* Empty fields don't contribute information — hide the row so the body stays tidy */
.gt-catalog-field[data-empty="1"] { display: none; }
/* Textareas span the full card width when there's enough room. */
.gt-catalog-field[data-field="companions_good"],
.gt-catalog-field[data-field="companions_bad"],
.gt-catalog-field[data-field="crop_rotation"],
.gt-catalog-field[data-field="pests_risks"],
.gt-catalog-field[data-field="storage"],
.gt-catalog-field[data-field="market_tips"],
.gt-catalog-field[data-field="bzvr_notes"] { grid-column: 1 / -1; }

.gt-catalog-profile-section { grid-column: 1 / -1; display: flex; flex-direction: column; gap: 7px; padding-bottom: 10px; margin-bottom: 4px; border-bottom: 1px dotted var(--border); }
.gt-catalog-profile-section:empty { display: none; }
.gt-catalog-info-row { display: grid; grid-template-columns: 7em 1fr; gap: 0 6px; font-family: 'Overpass Mono', monospace; font-size: 0.6rem; line-height: 1.5; }
.gt-catalog-info-label { color: var(--muted); letter-spacing: 0.04em; text-transform: uppercase; font-size: 0.55rem; padding-top: 1px; white-space: nowrap; }
.gt-catalog-info-value { color: var(--ink); word-break: break-word; }

/* ── KW-Timeline (Aussaat + Ernte über das Jahr) ── */
.gt-cat-tl { display: flex; flex-direction: column; gap: 3px; padding: 6px 0 4px; }
.gt-cat-tl-axis { position: relative; height: 12px; margin-left: 3.2em; }
.gt-cat-tl-axis span { position: absolute; top: 0; transform: translateX(-50%); font-family: 'Overpass Mono', monospace; font-size: 0.5rem; color: var(--muted); letter-spacing: 0.04em; }
.gt-cat-tl-axis span::after { content: ''; position: absolute; left: 50%; bottom: -3px; width: 1px; height: 3px; background: var(--border); }
.gt-cat-tl-row { display: grid; grid-template-columns: 3em 1fr; gap: 0 6px; align-items: center; }
.gt-cat-tl-label { font-family: 'Overpass Mono', monospace; font-size: 0.55rem; letter-spacing: 0.05em; text-transform: uppercase; color: var(--muted); }
.gt-cat-tl-track { position: relative; height: 9px; background: var(--paper); border: 1px solid var(--border); border-radius: 2px; }
.gt-cat-tl-bar { position: absolute; top: 0; bottom: 0; border-radius: 1px; }
.gt-cat-tl-sow { background: var(--leaf-l); }
.gt-cat-tl-harvest { background: var(--straw); }

/* ── Cu-Warnbanner ── */
.gt-cat-risk-banner { display: flex; gap: 6px; align-items: flex-start; background: var(--rust-bg); border-left: 3px solid var(--alert); padding: 6px 8px; font-family: 'Overpass Mono', monospace; font-size: 0.62rem; line-height: 1.45; color: var(--rust); }
.gt-cat-risk-icon { font-size: 0.9rem; line-height: 1; flex: 0 0 auto; }
.gt-cat-risk-text { font-weight: 600; }

/* ── Abstandsdiagramm (visualisiert Reihen × Pflanzabstand) ── */
.gt-cat-spacing { display: flex; flex-direction: column; gap: 4px; padding: 4px 0; }
.gt-cat-spacing-cap { font-family: 'Overpass Mono', monospace; font-size: 0.55rem; letter-spacing: 0.05em; text-transform: uppercase; color: var(--muted); }
.gt-cat-spacing-grid { display: flex; flex-direction: column; padding: 4px 0; }
.gt-cat-spacing-row { display: flex; align-items: center; }
.gt-cat-spacing-dot { width: 5px; height: 5px; border-radius: 50%; background: var(--leaf-l); flex: 0 0 5px; }

/* ── Companion-Pills (gut grün / schlecht rot) ── */
.gt-cat-companions { display: flex; flex-direction: column; gap: 4px; }
.gt-cat-comp-row { display: flex; flex-wrap: wrap; align-items: center; gap: 4px; }
.gt-cat-comp-label { font-family: 'Overpass Mono', monospace; font-size: 0.55rem; letter-spacing: 0.05em; text-transform: uppercase; color: var(--muted); margin-right: 4px; flex: 0 0 auto; }
.gt-cat-pill { font-family: 'Overpass Mono', monospace; font-size: 0.58rem; padding: 2px 7px; border-radius: 999px; white-space: nowrap; }
.gt-cat-pill-good { background: var(--hedge-bg); color: var(--good); border: 1px solid color-mix(in srgb, var(--good) 30%, transparent); }
.gt-cat-pill-bad  { background: var(--rust-bg);  color: var(--rust); border: 1px solid color-mix(in srgb, var(--rust) 30%, transparent); }

/* ── Sorten-Block ── */
.gt-cat-varieties { display: flex; flex-direction: column; gap: 4px; padding-top: 4px; border-top: 1px dotted var(--border); }
.gt-cat-varieties-heading { font-family: 'Overpass Mono', monospace; font-size: 0.55rem; letter-spacing: 0.07em; text-transform: uppercase; color: var(--muted); }
.gt-cat-variety { background: var(--aged); padding: 4px 7px; border-radius: 2px; display: flex; flex-direction: column; gap: 2px; }
.gt-cat-variety-head { display: flex; flex-wrap: wrap; align-items: baseline; gap: 6px; }
.gt-cat-variety-name { font-family: 'Fraunces', serif; font-size: 0.78rem; font-weight: 600; color: var(--soil); }
.gt-cat-variety-supplier { font-family: 'Overpass Mono', monospace; font-size: 0.52rem; letter-spacing: 0.06em; text-transform: uppercase; color: var(--muted); padding: 1px 5px; background: var(--surface); border-radius: 999px; }
.gt-cat-variety-note { font-family: 'Overpass', sans-serif; font-style: italic; font-size: 0.65rem; line-height: 1.4; color: var(--muted); }

/* ── Marktgarten-Tipp ── */
.gt-cat-tip { display: flex; gap: 6px; align-items: flex-start; background: var(--straw-bg); border-left: 3px solid var(--gold); padding: 5px 8px; font-family: 'Overpass', sans-serif; font-style: italic; font-size: 0.66rem; line-height: 1.45; color: var(--soil); }
.gt-cat-tip-icon { flex: 0 0 auto; font-style: normal; }

@media print { .gt-catalog, .gt-catalog-toolbar { display: none; } }

/* Harvest row inside the Feldnotiz form */
.gt-obs-harvest { background: #FFF8E8; border-left: 3px solid #C8A030; padding: 6px 8px; }

/* "Bisher geerntet" line in the per-crop profile */
.gt-cp-harvest { background: #FFF8E8; border-left: 3px solid var(--good); padding: 6px 10px; }
.gt-cp-harvest strong { color: var(--soil); font-family: 'Overpass Mono', monospace; }

@media (max-width: 720px) {
  .landing-title { font-size: 2.4rem; }
  .landing-sub { font-size: 0.88rem; }
  .landing-map { padding: 8px; }
}

/* ── Beetplan 7.1 toolbar + per-block colour stripe ─────────────────── */
.gt-bdt-toolbar { background: var(--surface); border: 1px solid var(--border); border-left: 4px solid var(--leaf); padding: 10px 12px; margin: 0 0 14px; display: flex; flex-direction: column; gap: 8px; }
.gt-bdt-row { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; }
.gt-bdt-chip-row { gap: 5px; }
.gt-bdt-chip-label { font-family: 'Overpass Mono', monospace; font-size: 0.55rem; letter-spacing: 0.12em; text-transform: uppercase; color: var(--muted); margin-right: 4px; }
/* Block + status chips are read-only badges. Each chip is permanently tinted
   in its block/status colour so the toolbar reads at a glance — no toggle
   state, no clicks. */
.gt-bdt-chip { font-family: 'Overpass Mono', monospace; font-size: 0.6rem; letter-spacing: 0.04em; padding: 4px 9px; border: 1px solid transparent; border-radius: 999px; display: inline-flex; align-items: center; gap: 6px; user-select: none; color: white; }
.gt-bdt-chip-count { font-size: 0.6rem; font-weight: 700; padding: 1px 6px; border-radius: 999px; background: rgba(255, 255, 255, 0.22); color: inherit; min-width: 18px; text-align: center; }
.gt-bdt-chip[data-block="GH"] { background: #185FA5; }
.gt-bdt-chip[data-block="AW"] { background: #6E8E3A; }
.gt-bdt-chip[data-block="AO"] { background: #B9882C; }
.gt-bdt-chip[data-block="B"]  { background: #4A6E10; }
.gt-bdt-chip[data-block="C"]  { background: #BA7517; }
.gt-bdt-chip[data-status="leer"]          { background: #FAF5EA; color: var(--muted); border-color: var(--border); }
.gt-bdt-chip[data-status="leer"] .gt-bdt-chip-count { background: rgba(122, 110, 80, 0.18); color: var(--muted); }
.gt-bdt-chip[data-status="vorbereitet"]   { background: #F5EDD0; color: #633806; border-color: #C8A030; }
.gt-bdt-chip[data-status="vorbereitet"] .gt-bdt-chip-count { background: rgba(99, 56, 6, 0.16); color: #633806; }
.gt-bdt-chip[data-status="teilbepflanzt"] { background: #FAEEDA; color: #7A4500; border-color: #BA7517; }
.gt-bdt-chip[data-status="teilbepflanzt"] .gt-bdt-chip-count { background: rgba(122, 69, 0, 0.16); color: #7A4500; }
.gt-bdt-chip[data-status="bepflanzt"]     { background: #E8F4E0; color: var(--good); border-color: #80C060; }
.gt-bdt-chip[data-status="bepflanzt"] .gt-bdt-chip-count { background: rgba(46, 110, 24, 0.18); color: var(--good); }
.gt-bdt-chip[data-status="abgeerntet"]    { background: #E0EEF5; color: #1A4D7A; border-color: #5090C0; }
.gt-bdt-chip[data-status="abgeerntet"] .gt-bdt-chip-count { background: rgba(26, 77, 122, 0.16); color: #1A4D7A; }
.gt-bdt-chip[data-status="entfaellt"]     { background: #ECEDEF; color: #4E545C; border-color: #8C929B; }
.gt-bdt-chip[data-status="entfaellt"] .gt-bdt-chip-count { background: rgba(78, 84, 92, 0.16); color: #4E545C; }
.gt-bdt-progress { display: flex; flex-wrap: wrap; gap: 10px; padding-top: 4px; border-top: 1px dotted var(--border); }
.gt-bdt-progress-item { flex: 1 1 130px; min-width: 110px; display: flex; flex-direction: column; gap: 3px; }
.gt-bdt-progress-head { display: flex; justify-content: space-between; align-items: baseline; font-family: 'Overpass Mono', monospace; font-size: 0.6rem; letter-spacing: 0.05em; color: var(--muted); }
.gt-bdt-progress-head strong { color: var(--soil); font-weight: 600; }
.gt-bdt-progress-bar { position: relative; height: 6px; background: var(--aged); border-radius: 3px; overflow: hidden; }
.gt-bdt-progress-fill { position: absolute; top: 0; left: 0; bottom: 0; background: var(--leaf); border-radius: 3px; transition: width 0.25s ease; }
.gt-bdt-progress-item[data-block="GH"] .gt-bdt-progress-fill { background: #185FA5; }
.gt-bdt-progress-item[data-block="AW"] .gt-bdt-progress-fill { background: #6E8E3A; }
.gt-bdt-progress-item[data-block="AO"] .gt-bdt-progress-fill { background: #B9882C; }
.gt-bdt-progress-item[data-block="B"]  .gt-bdt-progress-fill { background: #4A6E10; }
.gt-bdt-progress-item[data-block="C"]  .gt-bdt-progress-fill { background: #BA7517; }

/* Per-block colour stripe on bed rows (subtle, prints as a thin line). */
table.bdt tbody tr[data-bed-block="GH"] td:first-child { box-shadow: inset 3px 0 0 #185FA5; }
table.bdt tbody tr[data-bed-block="AW"] td:first-child { box-shadow: inset 3px 0 0 #6E8E3A; }
table.bdt tbody tr[data-bed-block="AO"] td:first-child { box-shadow: inset 3px 0 0 #B9882C; }
table.bdt tbody tr[data-bed-block="B"]  td:first-child { box-shadow: inset 3px 0 0 #4A6E10; }
table.bdt tbody tr[data-bed-block="C"]  td:first-child { box-shadow: inset 3px 0 0 #BA7517; }

/* Sticky bed-ID column on horizontal scroll (mobile + the wrapped table). */
.table-wrap { position: relative; }
.table-wrap table.bdt td:first-child,
.table-wrap table.bdt th:first-child { position: -webkit-sticky; position: sticky; left: 0; background: var(--surface); z-index: 2; }
.table-wrap table.bdt th:first-child { background: var(--soil); }
.table-wrap table.bdt tr:hover td:first-child { background: var(--surface-hover); }
.table-wrap table.bdt .gr td:first-child { background: var(--aged); }

/* ── Pflanzen-Steckbriefe live notes (Section 8.1) ───────────────────── */
.gt-plant-row .gt-notes { margin-top: 6px; }
.gt-plant-row .gt-notes-summary { color: var(--leaf); }
.gt-plant-row .gt-notes-summary.gt-notes-has { color: var(--soil); font-weight: 600; }
@media print { .gt-plant-row .gt-notes { display: none; } }

/* ── Tagesplan review / lessons-learned surface ─────────────────────── */
.gt-tagesplan-review { margin-top: 10px; padding-top: 10px; border-top: 1px dotted var(--border); }
.gt-tagesplan-review-label { display: block; font-family: 'Overpass Mono', monospace; font-size: 0.58rem; letter-spacing: 0.14em; text-transform: uppercase; color: var(--alert); margin-bottom: 4px; }
.gt-tagesplan-review-body { font-family: 'Overpass Mono', monospace; font-size: 0.74rem; line-height: 1.6; white-space: pre-wrap; background: #FBF3E8; border: 1px solid #E8C880; border-left: 3px solid var(--caution); padding: 8px 12px; color: #4A3800; }
.gt-tagesplan-review-empty { font-family: 'Overpass Mono', monospace; font-size: 0.68rem; color: var(--muted); font-style: italic; padding: 4px 0; }
.gt-tagesplan-yesterday { margin-bottom: 10px; }
.gt-tagesplan-yesterday > summary { font-family: 'Overpass Mono', monospace; font-size: 0.6rem; letter-spacing: 0.12em; text-transform: uppercase; color: var(--alert); cursor: pointer; padding: 4px 0; }
.gt-tagesplan-yesterday[open] > summary { color: var(--soil); }
.gt-tagesplan-yesterday .gt-tagesplan-review-body { margin-top: 4px; }
#gt-tagesplan-review-textarea { width: 100%; box-sizing: border-box; font-family: 'Overpass Mono', monospace; font-size: 0.74rem; line-height: 1.55; padding: 8px 10px; border: 1px solid var(--border); background: var(--paper); color: #4A3800; resize: vertical; margin-top: 6px; }

@media print {
  .gt-bdt-toolbar { display: none !important; }
  .gt-bar, .gt-check, .gt-login, .landing, .gt-nav, .gt-workspace, .gt-dashboard,
  .gt-collapse-toggle,
  .gt-status, .gt-date, .gt-price, .gt-price-plan,
  .gt-heute, .gt-heute-konkret, .gt-export, .gt-admin, .gt-toasts, .gt-notes,
  .gt-observations { display: none !important; }
  .gt-collapse-body[hidden] { display: block !important; }
  .gated { display: block !important; }
  body { max-width: 100%; padding: 12px; }
  .field-plan-frame { overflow: visible; padding: 8px; box-shadow: none; }
  .field-plan-frame svg { min-width: 0; width: 100%; }
}


/* ════════════════════════════════════════════════════════════════════════════
   DARK MODE — only [data-theme="dark"] on <html>
   JS sets this attribute on load (respects system preference + localStorage).
   No @media needed here — JS handles the detection.
   ════════════════════════════════════════════════════════════════════════════ */

[data-theme="dark"] {
  color-scheme: dark;

  /* ── Base palette ─────────────────────────────────────────────── */
  --ink:       #DDD5BE;
  --paper:     #1B1810;
  --paper-3:   #211E14;
  --aged:      #2A261A;
  --deep:      #ECD8B0;
  --soil:      #C4A46C;
  --soil-2:    #A88850;
  --leaf:      #4EA82A;
  --leaf-l:    #6AC040;
  --leaf-bg:   #0C2008;
  --water:     #3C96BE;
  --water-l:   #54AECE;
  --water-bg:  #081C2C;
  --straw:     #C0A018;
  --straw-bg:  #221A06;
  --rust:      #C84C28;
  --rust-bg:   #260C06;
  --good:      #40B050;
  --caution:   #B89018;
  --alert:     #CC3010;
  --hedge:     #78B020;
  --hedge-bg:  #141E06;
  --border:    #3C3828;
  --border-2:  #302C1E;
  --dotted:    #4A4636;
  --muted:     #887E6A;
  --muted-2:   #6A6255;
  --gold:      #C89A0C;

  /* ── Surfaces ─────────────────────────────────────────────────── */
  --surface:       #272318;
  --surface-hover: #302C20;

  /* ── Semantic states ──────────────────────────────────────────── */
  --state-prio:       #E05020;
  --state-prio-bg:    #260C06;
  --state-due:        #3C96BE;
  --state-due-bg:     #081C2C;
  --state-ok:         #6AC040;
  --state-ok-bg:      #0C2008;
  --state-unknown:    #C0A018;
  --state-unknown-bg: #221A06;
  --state-paused:     #54AECE;
  --state-paused-bg:  #081828;
  --state-idle:       #887E6A;
  --state-idle-bg:    #2A261A;

  /* ── Elevation ────────────────────────────────────────────────── */
  --elev-card:    0 1px 4px rgba(0,0,0,0.4);
  --elev-card-2:  0 2px 8px rgba(0,0,0,0.5);
  --elev-popover: 0 6px 22px rgba(0,0,0,0.65);
}

/* ── Elements that don't use variables ──────────────────────────────────── */

/* nav gradient — hardcoded rgba paper colour */
[data-theme="dark"] .gt-nav {
  background: linear-gradient(180deg, var(--paper) 0%, rgba(27,24,16,0.94) 80%, rgba(27,24,16,0));
}

/* tables: row hover */
[data-theme="dark"] table.bt tr:hover td,
[data-theme="dark"] table.bdt tr:hover td,
[data-theme="dark"] table.ct tr:hover td { background: var(--surface-hover); }

/* nav pills */
[data-theme="dark"] .gt-tabs a.is-active { background: var(--soil); color: var(--paper); border-color: var(--soil); }
[data-theme="dark"] .gt-tabs a.is-active:hover { background: var(--soil); color: var(--paper); }
[data-theme="dark"] .gt-nav a { background: rgba(42,38,26,0.85); color: var(--soil); }
[data-theme="dark"] .gt-nav a:hover { background: var(--aged); border-color: var(--soil); }

/* badge tags with hardcoded light bg */
[data-theme="dark"] .free   { background: #102808; color: #6AC040; border-color: #2A5A14; }
[data-theme="dark"] .cheap  { background: #241A06; color: #C0A018; border-color: #5A4A10; }
[data-theme="dark"] .buy    { background: #081828; color: #3C96BE; border-color: #1A4060; }
[data-theme="dark"] .b-d    { background: #221A06; color: #C0A018; border-color: #5A4810; }
[data-theme="dark"] .b-diy  { background: #081828; color: #3C96BE; border-color: #184060; }
[data-theme="dark"] .b-f    { background: #0C2008; color: #6AC040; border-color: #2A5A14; }
[data-theme="dark"] .b-t    { background: #081828; color: #4A9ECC; border-color: #1A4870; }
[data-theme="dark"] .b-z    { background: #082018; color: #30B090; border-color: #0E5040; }
[data-theme="dark"] .b-n    { background: #200808; color: #E06040; border-color: #6A2810; }
[data-theme="dark"] .roi-return { background: #0C2008; color: #40B050; border-color: #2A5A14; }

/* Bewässerung valve panel */
[data-theme="dark"] .gt-bw-valve-panel { background: #141E0C; }

/* settings dialog */
[data-theme="dark"] .ha-cfg-dialog { background: #1F1C12; }

/* inputs / textareas */
[data-theme="dark"] input,
[data-theme="dark"] textarea,
[data-theme="dark"] select {
  background: #2A261A;
  color: var(--ink);
  border-color: var(--border);
  color-scheme: dark;
}

/* ── Dark mode toggle button ─────────────────────────────────────────────── */
.gt-dark-toggle {
  background: none !important;
  border: 1px solid rgba(255,255,255,0.25) !important;
  color: white !important;
  font-size: 0.85rem !important;
  padding: 2px 7px !important;
  cursor: pointer;
  border-radius: 3px;
  line-height: 1.3;
  letter-spacing: 0 !important;
  text-transform: none !important;
}
.gt-dark-toggle:hover { background: rgba(255,255,255,0.12) !important; }

/* ════════════════════════════════════════════════════════════════════════
   UI REFRESH — 25/06/2026. Appended last so equal-specificity rules win by
   source order. Uses design tokens only, so dark mode adapts automatically.
   Stages: (1) buttons & readability · (2) spacing & cards · (3) state polish.
   ════════════════════════════════════════════════════════════════════════ */

/* ─── Stage 1 · Buttons & readability ──────────────────────────────────── */

/* Legible floor for the small mono "chip" buttons scattered across the app —
   they were 0.55–0.6rem (hard to read on phones). Bump to 0.68rem and relax
   the tracking so the uppercase labels stay clear. */
.gt-nav a,
.gt-collapse-toggle,
.gt-price-plan,
.gt-obs-preset,
.gt-obs-item-actions button,
.gt-obs-more,
.gt-obs-collapse,
.gt-brief-adopt,
.gt-bw-quick,
.gt-tagesplan-edit-btn,
.gt-admin-section button,
.gt-crop-profile-toggle,
.gt-bed-editor-reset,
.gt-catalog-clear,
.gt-catalog-toggle,
.gt-ct-dropped-toggle,
.gt-export button,
.gt-export a[data-export] {
  font-size: 0.68rem;
  letter-spacing: 0.05em;
}

/* Lift low-contrast grey button labels onto readable ink. */
.gt-price-plan,
.gt-obs-item-actions button,
.gt-admin-section button { color: var(--soil); }

/* Consistent control height + centred label/icon, comfortable to tap. */
.gt-collapse-toggle,
.gt-obs-preset,
.gt-brief-adopt,
.gt-bw-quick,
.gt-tagesplan-edit-btn,
.gt-price-plan,
.gt-crop-profile-toggle,
.gt-bed-editor-reset,
.gt-catalog-clear,
.gt-catalog-toggle,
.gt-ct-dropped-toggle,
.gt-export button,
.gt-export a[data-export] {
  min-height: 30px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 5px;
}

/* Bigger tap targets on phones (44px is the platform guideline). */
@media (max-width: 720px) {
  .gt-nav a,
  .gt-collapse-toggle,
  .gt-obs-preset,
  .gt-brief-adopt,
  .gt-bw-quick,
  .gt-bw-btn,
  .gt-bed-water-btn,
  .gt-tagesplan-edit-btn,
  .gt-export button,
  .gt-export a[data-export] {
    min-height: 42px;
  }
}

/* Accessible focus ring on every interactive element (keyboard navigation). */
a:focus-visible,
button:focus-visible,
select:focus-visible,
input:focus-visible,
textarea:focus-visible,
summary:focus-visible,
[tabindex]:focus-visible {
  outline: 2px solid var(--water);
  outline-offset: 2px;
  border-radius: var(--r-xs);
}

/* ─── Stage 2 · Spacing & cards ────────────────────────────────────────── */

/* Put the stacked operational cards on one elevation + radius rhythm so the
   Heute column reads as a coherent set rather than mismatched panels. */
.gt-tagesplan,
.gt-brief,
.gt-heute,
.gt-heute-konkret,
.gt-bewaesserung,
.gt-observations {
  border-radius: var(--r-sm);
  box-shadow: var(--elev-card);
}

/* Resting elevation + smooth lift on the dashboard metric cards (they already
   define the hover transform; we only add the calm state + transition). */
.gt-card {
  border-radius: var(--r-sm);
  box-shadow: var(--elev-card);
  transition: box-shadow 0.16s ease, transform 0.16s ease;
}

/* ─── Stage 3 · State & interaction polish ─────────────────────────────── */

/* One gentle, consistent hover for the chip buttons. */
.gt-collapse-toggle:hover,
.gt-obs-preset:hover,
.gt-crop-profile-toggle:hover,
.gt-catalog-toggle:hover,
.gt-catalog-clear:hover,
.gt-ct-dropped-toggle:hover,
.gt-bed-editor-reset:hover {
  border-color: var(--soil);
  background: var(--surface-hover);
}

/* Smooth colour/border transitions on interactive controls. */
button,
.gt-nav a,
.gt-export a[data-export],
summary {
  transition: background-color 0.14s ease, border-color 0.14s ease, color 0.14s ease;
}
