:root{--ink:#20302a;--muted:#77847d;--line:#e3e9e4;--green:#2e7d55;--lime:#b8dc68;--paper:#f5f7f4;--white:#fff;--orange:#d88945}*{box-sizing:border-box}body{margin:0;background:var(--paper);color:var(--ink);font-family:'DM Sans',sans-serif;font-size:14px}.brand,.mobile-brand,h1,h2,h3,h4{font-family:'Space Grotesk',sans-serif}.brand{color:#f7faf6;font-size:24px;font-weight:700;letter-spacing:-1px;padding:26px 24px 20px}.brand span,.mobile-brand span{color:var(--lime)}.brand small{display:block;color:#94aa9b;font:600 9px 'DM Sans',sans-serif;letter-spacing:1.5px;margin-top:5px}.sidebar{position:fixed;width:246px;height:100vh;background:#1d2c26;color:#d4e0d8;display:flex;flex-direction:column;z-index:1030}.sidebar-scroll{overflow:auto;padding:6px 14px;flex:1}.nav-label{color:#71867a;font-size:10px;font-weight:700;letter-spacing:1.2px;text-transform:uppercase;padding:18px 10px 8px}.side-link{align-items:center;border-radius:8px;color:#adc0b5;display:flex;gap:12px;padding:10px;text-decoration:none;transition:.18s}.side-link i{font-size:16px;width:20px;text-align:center}.side-link:hover,.side-link.active{background:#30453a;color:#fff}.side-link.active{box-shadow:inset 3px 0 var(--lime)}.sidebar-bottom{padding:10px 14px 18px}.season-card{background:#2b4035;border:1px solid #3b5548;border-radius:8px;padding:12px;margin-top:12px}.season-card small{color:#8da99a;display:block;font-size:9px;font-weight:700;letter-spacing:1px}.season-card strong{display:block;font-size:12px;margin:5px 0 8px}.season-card span{color:#b9dc76;font-size:11px}.season-card span i{font-size:7px;margin-right:5px}.topbar{height:72px;background:var(--white);border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;padding:0 30px;margin-left:246px}.farm-context{align-items:center;display:flex;gap:9px;font-weight:600}.farm-context i:first-child{color:var(--green)}.topbar-actions{display:flex;align-items:center;gap:16px}.search-box{align-items:center;background:#f5f7f4;border-radius:7px;color:#8a9790;display:flex;gap:8px;padding:8px 12px;width:240px}.search-box input{background:transparent;border:0;outline:0;width:100%;font:inherit}.icon-btn{border:0;color:#64736b;padding:6px 8px}.notification-dot{background:#e27755;border:2px solid white;border-radius:50%;height:8px;position:absolute;right:4px;top:4px;width:8px}.user-chip{align-items:center;color:var(--ink);display:flex;gap:8px;text-decoration:none}.avatar{align-items:center;background:#dcebc5;border-radius:50%;color:var(--green);display:inline-flex;font-weight:700;height:32px;justify-content:center;width:32px}.main-content{margin-left:246px;min-height:calc(100vh - 112px);padding:32px}.app-footer{align-items:center;color:#8a968f;display:flex;font-size:12px;margin-left:246px;padding:18px 30px}.app-footer span{margin-left:10px}.page-heading{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:28px}.eyebrow{color:var(--green);font-size:10px;font-weight:700;letter-spacing:1.4px;margin-bottom:8px}.page-heading h1{font-size:30px;letter-spacing:-1px;margin:0 0 5px}.text-muted{color:var(--muted)!important}.btn-primary{background:var(--green);border-color:var(--green)}.btn-primary:hover{background:#246443;border-color:#246443}.card{border:1px solid var(--line);border-radius:10px;box-shadow:0 2px 10px rgba(34,56,43,.03)}.stat-card{padding:18px 20px;background:#fff}.stat-icon{align-items:center;background:#e9f2df;border-radius:8px;color:var(--green);display:flex;font-size:20px;height:42px;justify-content:center;width:42px}.stat-value{font:700 25px 'Space Grotesk';margin-top:14px}.stat-label{color:var(--muted);font-size:12px}.trend{color:var(--green);font-size:11px}.table>:not(caption)>*>*{padding:13px 14px}.table thead th{color:#829087;font-size:10px;letter-spacing:.8px;text-transform:uppercase}.badge-soft{background:#eaf3df;color:#39714e}.badge-orange{background:#fff0df;color:#a65d28}.empty-state{text-align:center;padding:100px 20px}.empty-state i{color:var(--green);font-size:48px}.login-page{display:flex;min-height:100vh}.login-art{background:linear-gradient(135deg,rgba(25,53,37,.95),rgba(37,99,66,.82)),url('https://images.unsplash.com/photo-1500382017468-9049fed747ef?auto=format&fit=crop&w=1400&q=85') center/cover;color:#fff;display:flex;flex:1;flex-direction:column;padding:30px 7vw}.login-quote{font:600 clamp(38px,5vw,72px)/1.05 'Space Grotesk';margin:auto 0}.login-quote em{color:var(--lime);font-style:normal}.login-art-footer{font-size:13px;color:#c8d9ce}.login-form-wrap{align-items:center;background:#f8faf7;display:flex;justify-content:center;width:43%}.login-form{max-width:380px;width:100%;padding:30px}.login-form h1{font-size:36px}.form-control,.form-select{border-color:#dce5de;border-radius:7px;padding:11px 13px}.mobile-brand{font-size:20px;font-weight:700}.mobile-brand span{color:var(--green)}@media(max-width:991px){.sidebar{width:246px}.topbar{margin-left:0;padding:0 18px}.main-content{margin-left:0;padding:24px 18px}.app-footer{margin-left:0;padding:18px}.login-art{display:none}.login-form-wrap{width:100%}.page-heading{gap:16px}.page-heading .btn{white-space:nowrap}}@media(max-width:575px){.page-heading{display:block}.page-heading .btn{margin-top:16px}.app-footer span:last-child{display:none}}
/* Sidebar: Bootstrap's .offcanvas-lg forces a transparent background at >=992px
   and sits at z-index 1045 (above its 1040 backdrop) below it; keep both. */
.sidebar{background-color:#1d2c26!important;z-index:1045}
/* Sidebar scrolling: a flex item won't shrink below its content without
   min-height:0, so the nav would overflow off-screen instead of scrolling.
   dvh keeps the bottom reachable under mobile browser toolbars. */
.sidebar{height:100vh;height:100dvh;overflow:hidden}
.sidebar-scroll{min-height:0;overflow-y:auto;overflow-x:hidden;overscroll-behavior:contain;scrollbar-width:thin;scrollbar-color:#3b5548 transparent}
.sidebar-scroll::-webkit-scrollbar{width:6px}
.sidebar-scroll::-webkit-scrollbar-thumb{background:#3b5548;border-radius:3px}
.sidebar-bottom{flex-shrink:0}
.sidebar-close{position:absolute;top:22px;right:16px}
.farm-context span{max-width:220px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
@media(max-width:575px){.topbar{padding:0 12px}.topbar>.d-flex{gap:.5rem!important;min-width:0}.topbar-actions{gap:8px}.mobile-brand{display:none!important}.farm-context{padding-left:4px;padding-right:4px}.farm-context span{max-width:130px}.main-content{padding:20px 14px}}
.table td.text-end{white-space:nowrap}
.cell-user{align-items:center;display:flex;gap:.5rem}
.line-items-table{min-width:640px}
.lifecycle-track{overflow-x:auto}
.lifecycle-track>.d-flex{min-width:560px}
.calendar-wrap{overflow-x:auto}
.calendar-wrap>.calendar-inner{min-width:560px}
.calendar-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:6px}
.weather-card{background:linear-gradient(135deg,#1d2c26,#2e7d55);border-radius:10px;color:#fff;padding:20px}
.weather-card .temp{font:700 40px 'Space Grotesk'}
.weather-card small{color:#bfe0cb}
.map-empty{align-items:center;color:var(--muted);display:flex;flex-direction:column;justify-content:center;text-align:center;padding:20px}
.map-empty i{color:var(--green);font-size:32px;margin-bottom:8px}
/* FarmXO wordmark (assets/images/logo*.svg) */
a.brand,a.mobile-brand{display:block;text-decoration:none}
.brand img{display:block;height:32px;width:auto}
.login-art .brand img{height:40px}
.mobile-brand img{display:block;height:24px;width:auto}
