:root{--bg:#f2f5f0;--card:#fff;--ink:#253732;--ink2:#6b7f78;--line:#e3e9e2;--green:#2f9e5f;--green-dk:#237a49;--green-bg:#e7f5ec;--warn:#e8930c;--warn-bg:#fdf3e0;--danger:#e5484d;--danger-bg:#fdebec;--info:#3b82f6;--info-bg:#e8f0fe;--off:#9aa8a2;--off-bg:#eef1ef;--radius:14px;--shadow:0 1px 3px rgba(30,60,45,.08),0 4px 14px rgba(30,60,45,.06)}*{box-sizing:border-box}html,body{margin:0;padding:0}body{background:var(--bg);color:var(--ink);font:14px/1.6 -apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Microsoft YaHei,sans-serif}button{font:inherit;cursor:pointer}input,select,textarea{font:inherit;color:inherit}header{display:flex;align-items:center;gap:16px;flex-wrap:wrap;padding:14px 22px;background:var(--card);border-bottom:1px solid var(--line);position:sticky;top:0;z-index:5}.brand{font-size:19px;font-weight:700;display:flex;align-items:center;gap:8px}.brand .sub{font-size:12px;font-weight:400;color:var(--ink2)}.head-stats{display:flex;gap:8px;flex-wrap:wrap;margin-left:auto}.chip{background:var(--green-bg);color:var(--green-dk);border-radius:99px;padding:3px 12px;font-size:12.5px;white-space:nowrap}.chip.gray{background:var(--off-bg);color:var(--ink2)}.btn{border:1px solid var(--line);background:var(--card);color:var(--ink);border-radius:10px;padding:7px 16px;font-weight:500;transition:.15s}.btn:hover{border-color:var(--green);color:var(--green-dk)}.btn.primary{background:var(--green);border-color:var(--green);color:#fff;box-shadow:0 2px 10px #2f9e5f4d}.btn.primary:hover{background:var(--green-dk);border-color:var(--green-dk);color:#fff}.btn:active{transform:translateY(1px)}.btn.danger{color:var(--danger);border-color:#f3c8ca}.btn.danger:hover{background:var(--danger-bg);border-color:var(--danger)}.btn.subtle{border-color:transparent;color:var(--ink2)}.btn.subtle:hover{color:var(--danger);background:var(--danger-bg)}.btn:disabled{opacity:.45;cursor:not-allowed;pointer-events:none}.btn.sm{padding:4px 10px;font-size:13px;border-radius:8px}main{max-width:1240px;margin:22px auto;padding:0 22px}.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(310px,1fr));gap:16px}.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:16px 18px;box-shadow:var(--shadow);display:flex;flex-direction:column;gap:10px}.card .row1{display:flex;align-items:center;gap:10px}.card .name{font-size:16.5px;font-weight:700}.card .plat{font-size:11px;color:var(--ink2);border:1px solid var(--line);border-radius:5px;padding:0 5px}.badge{margin-left:auto;display:inline-flex;align-items:center;gap:6px;font-size:12.5px;border-radius:99px;padding:2px 11px;white-space:nowrap}.badge .dot{width:7px;height:7px;border-radius:50%;background:currentColor}.badge.ok{background:var(--green-bg);color:var(--green-dk)}.badge.ok .dot{animation:pulse 1.6s infinite}.badge.warn{background:var(--warn-bg);color:var(--warn)}.badge.warn .dot{animation:pulse 1.1s infinite}.badge.info{background:var(--info-bg);color:var(--info)}.badge.off{background:var(--off-bg);color:var(--off)}@keyframes pulse{0%,to{opacity:1}50%{opacity:.25}}.userinfo{color:var(--ink2);font-size:13px;display:flex;gap:14px;flex-wrap:wrap}.card .stats{font-size:12.5px;color:var(--ink2);background:#f7faf6;border-radius:9px;padding:7px 11px;display:flex;gap:12px;flex-wrap:wrap}.card .stats b{color:var(--green-dk);font-weight:600}.nextline{font-size:12.5px;color:var(--ink2)}.nextline.warn{color:var(--warn)}.errline{font-size:12.5px;color:var(--danger);word-break:break-all}.card .ops{display:flex;gap:8px;flex-wrap:wrap;margin-top:2px}.empty{max-width:560px;margin:80px auto;text-align:center;color:var(--ink2);background:var(--card);border:1px dashed var(--line);border-radius:18px;padding:56px 30px}.empty .big{font-size:44px;margin-bottom:10px}dialog{border:none;border-radius:18px;padding:0;box-shadow:0 24px 70px #14322347;width:min(600px,calc(100vw - 32px));color:var(--ink);overscroll-behavior:contain}dialog::backdrop{background:#12261c73;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px)}dialog[open]{animation:dlgIn .22s cubic-bezier(.2,.8,.3,1.1)}@keyframes dlgIn{0%{transform:translateY(12px) scale(.97);opacity:0}to{transform:none;opacity:1}}dialog .dlg-head{display:flex;align-items:center;gap:12px;padding:15px 20px;border-bottom:1px solid var(--line);font-size:16px;font-weight:700}dialog .dlg-head .x{margin-left:auto;flex:none;border:none;background:none;font-size:17px;color:var(--ink2);padding:5px 9px;border-radius:9px;transition:.15s}dialog .dlg-head .x:hover{background:var(--off-bg);color:var(--ink)}dialog .dlg-body{padding:18px 20px;max-height:min(68vh,640px);overflow:auto}dialog .dlg-foot{padding:13px 20px;border-top:1px solid var(--line);display:flex;gap:10px;align-items:center;flex-wrap:wrap}dialog .hint{font-size:12px;color:var(--ink2)}.dlg-foot .hint{margin-right:auto;min-width:0}.dlg-foot .btn{flex:none;white-space:nowrap}@media(max-width:540px){.dlg-foot .hint{flex:1 1 100%;margin-right:0}.dlg-foot{justify-content:flex-end}}.field{display:flex;align-items:center;gap:12px;padding:10px 0}.field .lab{flex:1;min-width:0}.field .lab b{font-weight:600}.field .lab small{display:block;color:var(--ink2);font-size:12px;line-height:1.55;margin-top:1px}.field input[type=number],.field input[type=text]{width:110px;border:1px solid var(--line);border-radius:9px;padding:7px 10px;text-align:center;background:#fff;transition:border-color .15s,box-shadow .15s}.field input[type=text].wide{width:100%;text-align:left;padding:9px 12px;border-radius:10px}.field select{border:1px solid var(--line);border-radius:9px;padding:7px 10px;max-width:280px;background:#fff;transition:border-color .15s,box-shadow .15s}.field input:focus,.field select:focus{outline:none;border-color:var(--green);box-shadow:0 0 0 3px #2f9e5f24}.field input:disabled,.field select:disabled{background:var(--off-bg);cursor:not-allowed}textarea.bl{width:100%;min-height:96px;border:1px solid var(--line);border-radius:10px;padding:9px 11px;font-size:13px;resize:vertical;background:#fff;transition:border-color .15s,box-shadow .15s}textarea.bl:focus{outline:none;border-color:var(--green);box-shadow:0 0 0 3px #2f9e5f24}textarea.bl::placeholder,.field input::placeholder{color:#aab9b1}.blbox{width:100%}.bl-toggle{display:flex;align-items:center;justify-content:space-between;width:100%;padding:9px 13px;border:1px solid var(--line);border-radius:10px;background:#fff;font-size:13px;transition:border-color .15s}.bl-toggle:hover{border-color:var(--green)}.bl-toggle .caret{color:var(--ink2);transition:transform .15s}.bl-toggle .caret.up{transform:rotate(180deg)}.bl-panel{margin-top:8px;border:1px solid var(--line);border-radius:10px;background:#fff;overflow:hidden}.bl-search{width:100%;padding:8px 12px;border:none;border-bottom:1px solid var(--line);outline:none;font-size:13px}.bl-list{max-height:220px;overflow:auto}.bl-row{display:flex;align-items:center;gap:8px;padding:7px 12px;font-size:13px;cursor:pointer;border-bottom:1px dashed var(--off-bg)}.bl-row:last-child{border-bottom:none}.bl-row:hover{background:var(--off-bg)}.bl-row.sel .bl-name{color:var(--green-dk);font-weight:600}.bl-row input[type=checkbox]{accent-color:var(--green)}.bl-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bl-tag{flex:none;font-size:11px;color:var(--ink2);background:var(--off-bg);padding:1px 7px;border-radius:8px}.bl-tag.off{color:var(--warn);background:var(--warn-bg)}.bl-empty{padding:14px 12px;color:var(--ink2);font-size:12px}.bl-add{display:flex;gap:8px;padding:8px;border-top:1px solid var(--line)}.bl-add input{flex:1;min-width:0;padding:7px 10px;border:1px solid var(--line);border-radius:8px;outline:none;font-size:13px}.bl-add input:focus{border-color:var(--green)}.bl-add-btn{padding:6px 14px;border:none;border-radius:8px;background:var(--green);color:#fff;font-size:13px}.bl-add-btn:hover{background:var(--green-dk)}.divider{border:none;border-top:1px dashed var(--line);margin:14px 0}.sec-title{font-weight:700;font-size:13px;color:var(--green-dk);margin:4px 0 2px}.switch{position:relative;width:44px;height:24px;flex:none}.switch input{opacity:0;width:0;height:0}.switch .slider{position:absolute;inset:0;background:#ccd6d0;border-radius:99px;transition:.18s;cursor:pointer;box-shadow:inset 0 1px 2px #00000014}.switch .slider:before{content:"";position:absolute;width:18px;height:18px;border-radius:50%;background:#fff;top:3px;left:3px;transition:.18s;box-shadow:0 1px 3px #00000040}.switch input:checked+.slider{background:var(--green)}.switch input:checked+.slider:before{transform:translate(20px)}.switch input:focus-visible+.slider{box-shadow:0 0 0 3px #2f9e5f38}.field.off .lab,.field.off input,.field.off select{opacity:.5}.settings .dlg-body{display:flex;flex-direction:column;gap:12px}.settings .dlg-ico{width:38px;height:38px;flex:none;display:grid;place-items:center;font-size:19px;background:var(--green-bg);border-radius:11px}.settings .dlg-titles{display:flex;flex-direction:column;gap:1px;line-height:1.35}.settings .dlg-titles b{font-size:15.5px}.settings .dlg-titles small{font-size:12px;font-weight:400;color:var(--ink2)}.sec{background:#f7faf6;border:1px solid var(--line);border-radius:14px;padding:2px 14px 8px}.sec .sec-title{margin:11px 2px 2px;display:flex;align-items:center;gap:6px;letter-spacing:.3px}.sec .field+.field{border-top:1px solid #e6ede4}.field.block{display:block}.field.block .lab{margin-bottom:7px}.field.ctrl input[type=number],.field.ctrl select{flex:none;margin-left:auto}.field.ctrl select{max-width:min(300px,60%)}@media(max-width:540px){.field.ctrl.stack{flex-wrap:wrap}.field.ctrl.stack .lab{flex:1 1 100%}.field.ctrl.stack select{flex:1 1 100%;margin-left:0;max-width:none;width:100%}}.field .seed-row{display:flex;align-items:center;gap:8px;width:100%}.field.ctrl.stack .seed-row select{flex:none;margin-left:0;max-width:none;width:auto}.field.ctrl.stack .seed-row .seed-main{flex:1 1 auto;min-width:0}.field.ctrl.stack .seed-row .seed-sort{flex:none;width:112px}.farm-actions{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:12px}.legend{font-size:12px;color:var(--ink2);margin-bottom:10px;display:flex;gap:12px;flex-wrap:wrap}.lands{display:grid;grid-template-columns:repeat(auto-fill,minmax(122px,1fr));gap:10px}.land{border:1.5px solid var(--line);border-radius:11px;padding:9px 10px;min-height:74px;background:linear-gradient(180deg,#fbfdf9,#f1f6ef);position:relative;font-size:12.5px}.land.locked{opacity:.45;background:repeating-linear-gradient(45deg,#f2f4f2,#f2f4f2 6px,#ecefee 6px 12px)}.land .lid{color:var(--ink2);font-size:11px}.land .crop{font-weight:700;font-size:13.5px;margin:2px 0}.land .phase{color:var(--ink2)}.land .flags{display:flex;gap:4px;flex-wrap:wrap;margin-top:4px}.land .flags span{font-size:11px;border-radius:5px;padding:0 6px}.land .empty-tag{color:var(--off);font-size:12px;margin-top:8px}.f-mature{background:var(--warn-bg);color:#b26d00}.f-dry{background:var(--info-bg);color:var(--info)}.f-weed{background:#e9f7e0;color:#4c8c1f}.f-bug{background:#fdeaea;color:#c0392b}.f-dead{background:#eee;color:#777}.land.mature{border-color:#f0b429}table.fr{width:100%;border-collapse:collapse;font-size:13px}table.fr th,table.fr td{padding:7px 8px;text-align:left;border-bottom:1px solid var(--line)}table.fr th{color:var(--ink2);font-weight:600;font-size:12px}table.fr .num{text-align:center}.tag-bl{font-size:11px;color:var(--danger);background:var(--danger-bg);border-radius:5px;padding:0 6px}.logbox{background:#101815;border-radius:11px;padding:12px 14px;height:min(52vh,460px);overflow:auto;font:12px/1.7 Consolas,Menlo,monospace;color:#cfe0d4}.logbox .t{color:#5f7568;margin-right:8px}.logbox .err{color:#ff8f8f}.logbox .warn{color:#f5c56b}.logbox .good{color:#7fd8a2}.log-tools{display:flex;gap:10px;align-items:center;margin-bottom:10px;flex-wrap:wrap}.log-tools select{border:1px solid var(--line);border-radius:8px;padding:5px 9px}label.ck{display:inline-flex;align-items:center;gap:5px;font-size:12.5px;color:var(--ink2);cursor:pointer}.qr-wrap{text-align:center;padding:6px 0}.qr-wrap img{width:230px;height:230px;border:1px solid var(--line);border-radius:12px;background:#fff}.qr-state{margin-top:12px;font-size:14px}.qr-state.ok{color:var(--green-dk);font-weight:700}.qr-state.warn{color:var(--warn)}.qr-state.bad{color:var(--danger)}.spin{display:inline-block;width:14px;height:14px;border:2px solid var(--green);border-top-color:transparent;border-radius:50%;animation:rot .8s linear infinite;vertical-align:-2px;margin-right:6px}@keyframes rot{to{transform:rotate(360deg)}}#toasts{position:fixed;right:18px;bottom:18px;display:flex;flex-direction:column;gap:9px;z-index:99}.toast{background:#253732;color:#fff;border-radius:10px;padding:10px 16px;font-size:13.5px;box-shadow:0 6px 22px #00000040;max-width:340px;animation:up .25s}.toast.bad{background:var(--danger)}.toast.good{background:var(--green-dk)}@keyframes up{0%{transform:translateY(10px);opacity:0}to{transform:none;opacity:1}}
