:root{--bg:#f4f6f5;--card:#fff;--text:#1f2a24;--muted:#6b7a72;--border:#e5ebe7;--brand:#15803d;--brand-soft:#e8f5ec}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased;font-family:Pretendard Variable,Pretendard,-apple-system,BlinkMacSystemFont,Segoe UI,Malgun Gothic,sans-serif}.muted{color:var(--muted)}.small{font-size:12px}.num{font-variant-numeric:tabular-nums}.logo{color:#fff;align-items:center;gap:10px;display:flex}.logo img{flex:none;width:32px;height:32px}.logo b{letter-spacing:-.3px;font-size:18px;font-weight:800;line-height:1.15;display:block}.logo small{opacity:.7;white-space:nowrap;margin-top:1px;font-size:11px;line-height:1.3;display:block}.app-header{z-index:10;color:#fff;position:sticky;top:0;background:#0f2a1d!important;padding:0!important}.app-header-inner{align-items:center;gap:16px;height:100%;padding:0 20px;display:flex}.app-header .logo{flex:none;margin-right:16px;line-height:normal}.app-header h1{color:#fff;margin:0;font-size:17px;font-weight:700}.app-topmenu{font-size:15px;background:0 0!important}.app-topmenu>.ant-menu-item,.app-topmenu>.ant-menu-overflow-item{border-radius:0!important}.app-header-tools{flex:none;margin-left:auto}.app-header .ant-badge .ant-badge-status-text{font-size:13px;color:#ffffffe0!important}.app-header .app-header-btn.ant-btn{color:#ffffffe0}.app-header .app-header-btn.ant-btn:hover{color:#fff;background:#ffffff1a}.app-header .ant-segmented{color:#ffffffbf;background:#ffffff1f}.app-header .ant-segmented-item:hover:not(.ant-segmented-item-selected){color:#fff}.app-header .ant-segmented-item-selected,.app-header .ant-segmented-thumb{color:#0f2a1d;background:#fff}.app-content{width:100%;min-width:0;padding:20px}@media (width<=640px){.app-content{padding:12px}.app-header-inner{padding:0 12px}}@media (width<=1439px){.app-header .logo small{display:none}.app-header .logo{margin-right:4px}.app-topmenu>.ant-menu-item{padding-inline:9px!important}.app-topmenu .ant-menu-item .ant-menu-title-content{margin-inline-start:6px!important}.app-header-inner{gap:12px}}@media (width<=1199px){.app-topmenu .ant-menu-item-icon,.app-topmenu .ant-menu-item>svg{display:none!important}.app-topmenu .ant-menu-title-content{margin-inline-start:0!important}.app-topmenu{font-size:14px}.app-topmenu>.ant-menu-item{padding-inline:9px!important}.app-header-inner{gap:10px}.app-header .ant-badge-status-text,.app-header .app-header-btn>span:not(.ant-btn-icon){display:none}}.app-drawer .logo{border-bottom:1px solid #ffffff14;margin-bottom:8px;padding:18px 18px 16px}.app-drawer .logo small{white-space:normal;word-break:keep-all}.app-drawer .ant-menu-item,.app-drawer .ant-menu-item-selected{border-radius:0!important;width:100%!important;margin-inline:0!important}.page-title{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;margin-bottom:16px;display:flex}.page-bar{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px 16px;margin-bottom:16px;display:flex}.crop-card{flex-direction:column;height:100%;display:flex}.crop-card .ant-card-body{flex-direction:column;flex:1;gap:12px;display:flex}.crop-head{align-items:center;gap:12px;display:flex}.crop-name{font-size:16px;font-weight:700}.crop-facts{flex-direction:column;flex:1;gap:5px;font-size:13px;display:flex}.crop-facts svg{vertical-align:-2px;color:var(--muted)}.crop-day{color:var(--brand)}.crop-actions{border-top:1px solid var(--border);flex-wrap:wrap;align-items:center;gap:6px;padding-top:10px;display:flex}.crop-tags{flex-wrap:wrap;align-items:center;gap:4px 0;min-height:32px;display:flex}.crop-cover{aspect-ratio:16/9;cursor:pointer;background:#eef2ef;border:0;width:100%;padding:0;display:block;position:relative;overflow:hidden}.crop-cover img{object-fit:cover;width:100%;height:100%;transition:transform .25s;display:block}.crop-cover:hover img{transform:scale(1.03)}.crop-cover-empty{height:100%;color:var(--muted);flex-direction:column;justify-content:center;align-items:center;gap:6px;font-size:12px;display:flex}.crop-cover-count{color:#fff;background:#0000008c;border-radius:999px;align-items:center;gap:4px;padding:2px 8px;font-size:12px;display:inline-flex;position:absolute;bottom:8px;right:8px}.app-content .crop-card .ant-card-cover{margin:0}.app-content .crop-card .ant-card-cover>*{border-radius:0}.photo-bar{flex-wrap:wrap;align-items:center;gap:12px;margin-bottom:14px;display:flex}.photo-grid{grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:12px;display:grid}.photo-item{flex-direction:column;gap:4px;display:flex}.photo-item .ant-image{aspect-ratio:4/3;background:#eef2ef;width:100%;overflow:hidden}.photo-item .ant-image-img{object-fit:cover;width:100%;height:100%}.photo-meta{justify-content:space-between;align-items:center;display:flex}.photo-meta .ant-picker{width:130px;padding-inline:0}@media (width<=640px){.photo-grid{grid-template-columns:1fr 1fr;gap:8px}}.app-content .dash-devices{margin-top:16px}.dash-growth{flex-direction:column;flex:1;display:flex}.dash-growth .ant-card-body{flex-direction:column;flex:1;gap:10px;display:flex}.dash-stage{margin:2px 0}.dash-stage .ant-steps-item-title{white-space:nowrap;font-size:12px!important}.growth-tiles{grid-template-columns:repeat(3,minmax(0,1fr));gap:6px;display:grid}.growth-tile{background:var(--bg);flex-direction:column;gap:1px;min-width:0;padding:6px 10px;display:flex}.growth-tile b{font-size:16px;line-height:1.25}.growth-tile b small{color:var(--muted);font-size:11px;font-weight:500}.grow-up{color:#15803d}.grow-down{color:#d97706}.growth-status{flex-wrap:wrap;align-items:center;gap:4px 8px;display:flex}.dash-growth-chart{flex-direction:column;flex:1;min-height:170px;display:flex}.dash-crops .ant-card-body{padding:4px 12px!important}.dash-crop{border-bottom:1px solid var(--border);cursor:pointer;align-items:center;gap:12px;padding:10px 2px;display:flex}.dash-crop:last-child{border-bottom:0}.dash-crop:hover{background:var(--bg)}.dash-crop:focus-visible{outline:2px solid var(--brand);outline-offset:-2px}.dash-crop-photo{color:#15803d;background:#15803d14;flex:none;place-items:center;width:52px;height:52px;display:grid;overflow:hidden}.dash-crop-photo img{object-fit:cover;width:100%;height:100%}.dash-crop-body{flex-direction:column;flex:1;gap:3px;min-width:0;display:flex}.dash-crop-line{flex-wrap:wrap;align-items:center;gap:4px 6px;display:flex}.dash-crop-line .ant-tag{margin:0}.diary-list .ant-card-body{padding:4px 20px}.diary-entry{border-bottom:1px solid var(--border);gap:14px;padding:14px 0;display:flex}.diary-entry:last-child{border-bottom:0}.diary-entry.planned .diary-body{opacity:.78}.diary-entry.planned .diary-date{outline-offset:-1px;background:0 0;outline:1px dashed #d4a72c}.diary-date{background:var(--brand-soft);color:#0f5132;flex-direction:column;flex:none;justify-content:center;align-items:center;width:52px;height:52px;display:flex}.diary-date b{font-size:17px;line-height:1.1}.diary-date span{font-size:11px}.diary-body{flex-direction:column;flex:1;gap:5px;min-width:0;display:flex}.diary-line{flex-wrap:wrap;align-items:center;gap:4px 8px;display:flex}.diary-line .ant-tag{margin:0}.diary-weather{margin-left:auto;font-size:12px}.diary-weather svg{vertical-align:-2px}.diary-detail{white-space:pre-wrap;word-break:keep-all}.diary-mats{flex-wrap:wrap;gap:4px 0;display:flex}.diary-growth{color:#166534;font-size:13px}.diary-growth svg{vertical-align:-2px}.diary-actions{flex-direction:column;flex:none;gap:2px;display:flex}@media (width<=640px){.diary-list .ant-card-body{padding:4px 12px}.diary-weather{width:100%;margin-left:0}.diary-date{width:44px;height:46px}}.form-section{border-bottom:1px solid var(--border);align-items:center;gap:8px;margin:18px 0 10px;padding-bottom:6px;display:flex}.form-section:first-child{margin-top:4px}.form-section .ant-tag{margin:0}.sensor-day{background:var(--bg);flex-direction:column;justify-content:center;gap:4px;min-height:54px;margin-top:2px;padding:6px 12px;display:flex}.sensor-day svg{vertical-align:-2px}.mat-list{flex-direction:column;gap:8px;display:flex}.mat-row{grid-template-columns:52px 130px minmax(0,1fr) 110px 110px 32px;align-items:start;gap:8px;display:grid}.mat-row .ant-form-item{margin:0}.mat-kind{text-align:center;margin:5px 0 0}@media (width<=640px){.mat-row{border-bottom:1px dashed var(--border);grid-template-columns:48px minmax(0,1fr) minmax(0,1fr) 32px;padding-bottom:8px}.mat-row .mat-kind{grid-area:1/1}.mat-row .mat-type{grid-area:1/2/auto/4}.mat-row>.ant-btn{grid-area:1/4}.mat-row .mat-product{grid-area:2/2/auto/5}.mat-row .mat-amount{grid-row:3}.mat-row .mat-amount:nth-of-type(4){grid-column:2}.mat-row .mat-amount:nth-of-type(5){grid-column:3/5}}.chart-note{margin-top:8px}.price-item b{margin-right:2px}.price-item .price-rank{margin:0;padding:0 5px;font-size:11px;line-height:18px}.growth-stats{margin-bottom:16px}.stage-steps.clickable .ant-steps-item:not(.ant-steps-item-active):hover .ant-steps-item-title{color:var(--brand)}.stage-change{margin:4px 0 14px;font-size:16px}.stage-change b{color:var(--brand)}.growth-stats .detail-stat{background:var(--card)}.growth-entry{border-bottom:1px solid var(--border);flex-wrap:wrap;align-items:center;gap:4px 10px;padding:8px 0;display:flex}.growth-entry:last-child{border-bottom:0}.growth-entry .ant-tag{margin:0}.growth-entry-text{flex:1;min-width:200px}.fc-stats{margin-bottom:8px}.advice-day{border-top:1px solid var(--border);padding:10px 0}.advice-day:first-of-type{border-top:0;padding-top:0}.advice-day-head{align-items:center;gap:8px;margin-bottom:6px;display:flex}.advice-day-head svg{vertical-align:-3px}.advice-pop{color:#0284c7;margin-left:auto}.advice-pop svg{vertical-align:-2px}.advice-item{align-items:flex-start;gap:8px;padding:3px 0;line-height:1.45;display:flex}.advice-icon{border-radius:6px;flex:none;place-items:center;width:24px;height:24px;margin-top:1px;display:grid}.price-now{font-weight:700}.num.up{color:#dc2626}.num.down{color:#2563eb}.link-card{border:1px solid var(--border);color:var(--text);align-items:flex-start;gap:12px;height:100%;padding:14px;transition:border-color .15s,box-shadow .15s;display:flex}.link-card:hover{color:var(--text);border-color:#9ccfb0;box-shadow:0 4px 14px #0f2a1d14}.link-card-body{flex-direction:column;gap:3px;min-width:0;display:flex}.link-host{color:var(--brand)}.link-host svg{vertical-align:-1px}.ai-banner{border-radius:10px;margin-bottom:14px}.ai-tiles{grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;display:grid}.ai-tile{border:1px solid var(--border);background:#f6f8f7;border-radius:10px;flex-direction:column;gap:3px;min-width:0;padding:12px 14px;display:flex}.ai-tile>b{font-size:17px;line-height:1.3}.ai-tile .muted{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.ai-tile-label{color:#4b5563;flex-wrap:wrap;align-items:center;gap:5px;font-size:12.5px;display:flex}.ai-tile-label .ant-tag{margin-inline-end:0;padding:0 5px;font-size:11px;line-height:17px}.ai-tile.water{background:#ecfeff;border-color:#a5f3fc}.ai-tile.water .ai-tile-label svg{color:#0e7490}.ai-tile.spray{background:#fff7ed;border-color:#fed7aa}.ai-tile.spray .ai-tile-label svg{color:#c2410c}.ai-tile.fert{background:#f0fdf4;border-color:#bbf7d0}.ai-tile.fert .ai-tile-label svg{color:#15803d}.ai-tile.growth{flex-direction:row;align-items:center;gap:10px}.ai-tile.growth>div{flex-direction:column;gap:2px;min-width:0;display:flex}.ai-summary{margin:14px 0 0;padding-left:18px;line-height:1.75}.ai-summary li::marker{color:#15803d}.ai-list{flex-direction:column;display:flex}.ai-row{border-bottom:1px dashed var(--border);align-items:flex-start;gap:10px;padding:9px 0;display:flex}.ai-row:last-child{border-bottom:0}.ai-row>svg{flex:none;margin-top:3px}.ai-when{color:#374151;flex:none;width:92px;padding-top:2px;font-size:12.5px}.ai-kind{margin-inline-end:6px}.ai-kind svg{vertical-align:-2px;margin-right:3px}.ai-step{flex-wrap:wrap;align-items:center;gap:6px;font-size:12.5px;display:inline-flex}.ai-step .ant-tag{margin-inline-end:0;padding:0 5px;font-size:11px;line-height:17px}.ai-switch{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;padding:8px 0;display:flex}.ai-switch span{align-items:center;gap:6px;display:inline-flex}.ai-sub{margin:14px 0 4px;font-size:13px;font-weight:600}.ai-history{flex-direction:column;gap:4px;max-height:320px;display:flex;overflow-y:auto}.ai-history button{text-align:left;cursor:pointer;font:inherit;background:0 0;border:1px solid #0000;border-radius:8px;flex-wrap:wrap;align-items:center;gap:8px;padding:7px 9px;display:flex}.ai-history button:hover{background:#f3f4f6}.ai-history button.active{background:#ecfdf3;border-color:#86efac}.ai-inputs .ant-descriptions-item-label{width:42%}.ai-doc h2{text-align:center;margin:0 0 12px}.ai-doc h3{color:#166534;margin:18px 0 6px;font-size:15px}.ai-doc ul{margin:4px 0;padding-left:20px;line-height:1.7}.ai-doc-meta,.ai-doc-table{border-collapse:collapse;width:100%;font-size:13px}.ai-doc-meta th,.ai-doc-meta td,.ai-doc-table td{vertical-align:top;border:1px solid #d1d5db;padding:5px 8px}.ai-doc-meta th{white-space:nowrap;background:#f3f4f6;width:14%;font-weight:600}.ai-doc-table td:first-child{white-space:nowrap;width:120px}.ai-doc-table td:nth-child(2){white-space:nowrap;width:56px}.ai-doc-dec{margin:6px 0 10px}.ai-doc-note{background:#fffbeb;border:1px solid #fde68a;border-radius:8px;margin-top:18px;padding:8px 10px;font-size:12.5px}@media (width<=1199px){.ai-tiles{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (width<=575px){.ai-tiles{gap:8px}.ai-tile{padding:10px}.ai-tile>b{font-size:15px}.ai-when{width:78px}}.print-root{display:none}@media print{@page{size:A4;margin:12mm}body{background:#fff!important}body>:not(.print-root){display:none!important}.print-root{color:#000;font-family:Malgun Gothic,Pretendard,sans-serif;font-size:10pt;display:block!important}.print-cover{margin-bottom:8mm}.print-cover h1{text-align:center;letter-spacing:6px;margin:0 0 5mm;font-size:22pt}.print-cover h1 small{letter-spacing:1px;color:#15803d;font-size:13pt}.print-src{color:#555;text-align:right;margin:2mm 0 0;font-size:8pt}.print-table{border-collapse:collapse;width:100%}.print-table th,.print-table td{vertical-align:middle;border:1px solid #333;padding:4px 6px}.print-table>tbody>tr>th{text-align:center;background:#fdebd3;width:17%;font-weight:600}.print-meta th{background:#f3f4f6!important;width:14%!important}.print-entry{break-inside:avoid;page-break-inside:avoid;margin-bottom:7mm}.print-entry td.nested{padding:0}.print-inline{border-collapse:collapse;width:100%}.print-inline td,.print-inline th{border:0;padding:4px 6px}.print-inline td:first-child{width:42%}.print-inline th{background:#fdebd3;border-left:1px solid #333;border-right:1px solid #333;width:14%;font-weight:600}.print-entry td.tall{white-space:pre-wrap;vertical-align:top;height:22mm}.print-mats{border-collapse:collapse;table-layout:fixed;width:100%}.print-mats th,.print-mats td{text-align:center;border:1px solid #999;height:6mm;padding:3px 5px;font-size:9pt}.print-mats thead th{background:#f8f1e7;font-weight:600}.print-mats tr>:first-child{border-left:0}.print-mats tr>:last-child{border-right:0}.print-mats thead tr:first-child>*{border-top:0}.print-mats tbody tr:last-child>*{border-bottom:0}}.page-title h2{margin:0;font-size:20px}.login-wrap{background:var(--card);grid-template-columns:minmax(0,1.25fr) minmax(420px,1fr);min-height:100dvh;display:grid}.login-hero{color:#fff;background:radial-gradient(1200px 600px at 85% 10%,#fde68a33,#0000 60%),linear-gradient(155deg,#0b3d26 0%,#0f5132 35%,#15803d 75%,#3f8f34 100%);flex-direction:column;justify-content:space-between;gap:40px;padding:48px 64px;display:flex;position:relative;overflow:hidden}.login-pattern{pointer-events:none;width:100%;height:100%;position:absolute;inset:0}.login-hero>:not(.login-pattern){position:relative}.login-brand{align-items:center;gap:14px;display:flex}.login-logo{color:#fff;background:#ffffff29;border:1px solid #ffffff40;border-radius:14px;flex:none;place-items:center;width:48px;height:48px;display:grid}.login-logo.small{background:var(--brand);border:0;border-radius:10px;width:34px;height:34px}.login-brand-name{letter-spacing:-.5px;font-size:26px;font-weight:800;line-height:1.1}.login-brand-slogan{opacity:.85;margin-top:4px;font-size:14px}.login-copy h1{letter-spacing:-1px;margin:0 0 14px;font-size:clamp(30px,3.2vw,48px);font-weight:800;line-height:1.25}.login-copy p{opacity:.85;margin:0;font-size:17px}.login-features{grid-template-columns:repeat(2,minmax(0,260px));gap:14px 24px;margin:36px 0 0;padding:0;list-style:none;display:grid}.login-features li{align-items:center;gap:12px;font-size:15px;display:flex}.login-features li span{background:#ffffff21;border-radius:12px;flex:none;place-items:center;width:42px;height:42px;display:grid}.login-footer{opacity:.75;letter-spacing:.3px;font-size:13px}.login-panel{background:#fff;flex-direction:column;justify-content:center;align-items:center;padding:72px 32px 48px;display:flex;position:relative}.login-lang{position:absolute;top:24px;right:28px}.login-card{width:100%;max-width:400px}.login-card h2{letter-spacing:-.5px;margin:18px 0 6px;font-size:30px}.login-card>p{margin:0 0 28px}.login-card-brand{align-items:center;gap:10px;font-size:18px;display:none}.login-panel-footer{text-align:center;padding:0 16px;position:absolute;bottom:20px;left:0;right:0}@media (width<=960px){.login-wrap{grid-template-columns:1fr}.login-hero{gap:20px;padding:28px 24px}.login-copy h1{font-size:26px}.login-copy p,.login-features{display:none}.login-panel{justify-content:flex-start;padding:64px 20px}}.stat-card .ant-card-body{align-items:center;gap:14px;display:flex}.stat-icon{border-radius:12px;flex:none;place-items:center;width:46px;height:46px;display:grid}.stat-value{font-size:22px;font-weight:700;line-height:1.2}.stat-label{color:var(--muted);font-size:13px}.sensor-grid{grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:16px;display:grid}@media (width<=480px){.sensor-grid{grid-template-columns:1fr 1fr;gap:10px}.sensor-value{font-size:22px}}.sensor-card{height:100%}.sensor-card .ant-card-body{padding:16px}.sensor-head{justify-content:space-between;align-items:center;gap:8px;display:flex}.sensor-value{margin-top:8px;font-size:28px;font-weight:700;line-height:1.1}.sensor-value .unit{color:var(--muted);margin-left:4px;font-size:14px;font-weight:500}.sensor-foot{justify-content:space-between;align-items:center;gap:8px;margin-top:6px;display:flex}.state-chart{margin-top:10px}.state-strip{grid-template-columns:repeat(24,1fr);gap:2px;height:24px;display:grid}.state-strip span{background:#e5ebe7;border-radius:2px}.state-strip span.empty{background:repeating-linear-gradient(45deg,#eef2ef 0 3px,#dfe6e2 3px 6px)}.state-axis{justify-content:space-between;margin-top:3px;font-size:10px;display:flex}.state-legend{color:var(--muted);flex-wrap:wrap;gap:2px 10px;margin-top:4px;font-size:11px;display:flex}.state-legend i{border-radius:2px;width:8px;height:8px;margin-right:4px;display:inline-block}.sensor-card.clickable{cursor:pointer;transition:box-shadow .15s}.sensor-card.clickable:hover{box-shadow:0 4px 16px #0f2a1d1f}.sensor-card.clickable:focus-visible{outline:2px solid var(--brand);outline-offset:2px}.open-hint{color:var(--brand);opacity:0;flex:none;align-items:center;gap:3px;font-size:11px;transition:opacity .15s;display:inline-flex}.sensor-card.clickable:hover .open-hint,.sensor-card.clickable:focus-visible .open-hint{opacity:1}@media (hover:none){.open-hint{opacity:.8}}.detail-bar{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px 16px;margin-bottom:12px;display:flex}.detail-stats{grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:8px;margin-bottom:12px;display:grid}.detail-stat{background:var(--bg);flex-direction:column;gap:2px;padding:8px 12px;display:flex}.detail-stat b{font-size:18px;line-height:1.3}.detail-chart{height:360px}@media (hover:none){.zoom-hint{display:none}}@media (width<=640px){.detail-chart{height:260px}.detail-stats{grid-template-columns:1fr 1fr}.detail-stat b{font-size:16px}}.device-item{border-bottom:1px solid var(--border);align-items:center;gap:12px;padding:10px 0;display:flex}.device-item:last-child{border-bottom:0}.map-box{isolation:isolate;border-radius:10px;height:420px;overflow:hidden}@media (width<=640px){.map-box{height:300px}}.map-marker{color:#fff;border:3px solid #fff;border-radius:50%;place-items:center;width:38px;height:38px;display:grid;position:relative;box-shadow:0 2px 8px #00000059}.map-marker.camera{cursor:pointer;background:#111827;width:44px;height:44px}.map-marker.offline{filter:grayscale();opacity:.75}.map-marker .pulse{border:2px solid #22c55e;border-radius:50%;animation:1.8s infinite pulse;position:absolute;inset:-6px}@keyframes pulse{0%{opacity:1;transform:scale(.8)}to{opacity:0;transform:scale(1.4)}}.leaflet-div-icon{background:0 0;border:0}.app-content .ant-card,.app-content .ant-card .ant-card-head,.app-content .ant-card .ant-card-body,.app-content .farm-bar,.app-content .map-box,.app-content .farm-map,.app-content .sensor-card,.app-content .weather-days>div,.app-content .stat-icon,.app-content .demo-ribbon,.app-content .farm-item,.app-content .zone-card,.app-content .ctl-zone,.app-content .ctl-text,.app-content .geo-found,.app-content .ant-table,.app-content .ant-table-container,.app-content .ant-table-content,.app-content .ant-table-thead>tr>th,.app-content .ant-transfer-list,.app-content .ant-result,.app-content .ant-empty,.app-content .ant-alert,.app-content .ant-table-container table>thead>tr:first-child>:first-child,.app-content .ant-table-container table>thead>tr:first-child>:last-child{border-radius:0!important}.dash-side{flex-direction:column;gap:16px;height:100%;display:flex}.dash-running,.dash-devices{flex:1}.dash-devices .device-item{gap:10px;padding:8px 0}.dash-map{flex-direction:column;height:100%;display:flex}.dash-map>.ant-card-body{flex-direction:column;flex:1;display:flex}.dash-map .map-box{flex:1;height:auto;min-height:420px}.dash-section-title.ant-typography{margin:0 0 10px;line-height:22px}.dash .sensor-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.dash .sensor-group:last-child{margin-bottom:0}@media (width<=640px){.dash .map-box{min-height:300px}.dash-map-hint{display:none}}.app-content .ant-table-cell{word-break:keep-all}.app-content .ant-table-thead>tr>th{white-space:nowrap}.cell-ellipsis{text-overflow:ellipsis;white-space:nowrap;max-width:320px;overflow:hidden}@media (width<=640px){.crud-table .ant-table-cell{white-space:nowrap}.cell-ellipsis{max-width:200px}.ant-transfer{flex-direction:column;align-items:stretch!important}.ant-transfer .ant-transfer-section{flex:none!important;width:100%!important}.ant-transfer .ant-transfer-actions{flex-direction:row;justify-content:center;gap:8px;width:auto;margin:8px 0}.ant-transfer .ant-transfer-actions .ant-btn{transform:rotate(90deg)}}@media (width<=480px){.sensor-card .ant-card-body{padding:12px}.sensor-head{align-items:flex-start}.sensor-head>div:first-child{min-width:0;gap:8px!important}.sensor-head .stat-icon{width:30px!important;height:30px!important}.sensor-head .stat-icon svg{width:16px;height:16px}.sensor-head .muted.small{display:none}.sensor-head div[style*=font-weight]{word-break:keep-all;font-size:13px;line-height:1.3}.sensor-head .ant-tag{margin:0;padding:0 5px;font-size:11px;line-height:18px}}.weather-compact .ant-card-body{padding:8px 14px 10px!important}.weather-compact .weather-now{gap:10px}.weather-compact .weather-now svg{width:32px;height:32px}.weather-compact .weather-now .temp{font-size:26px}.weather-compact .weather-now .muted{font-size:12px}.weather-compact .small{font-size:11px}.weather-compact div[style*="margin-top: 14"]{gap:10px!important;margin-top:6px!important}.weather-compact .weather-days{gap:4px;margin-top:6px}.weather-compact .weather-days>div{padding:3px 2px;font-size:11px;line-height:1.3}.weather-compact .weather-days svg{width:17px;height:17px}.weather-compact .weather-day-temp{gap:5px;margin-top:2px}.weather-compact .weather-days+.muted{font-size:10px;margin-top:4px!important}.dash-running .ant-card-body{padding-top:4px!important}.dash-running .ant-tabs-nav{margin-bottom:8px}.ctl-compact{flex-direction:column;gap:8px;display:flex}.ctl-zone{border:1px solid var(--border);padding:8px 10px}.ctl-zone.running{background:#f0f9ff;border-color:#0ea5e9}.ctl-zone-head{justify-content:space-between;align-items:center;margin-bottom:6px;display:flex}.ctl-text{background:#f4f6f5;min-height:60px;padding:10px 12px}.ctl-text.compact{min-height:0;padding:6px 10px;font-size:12px}.ctl-slider-row{align-items:center;gap:12px;display:flex}.ctl-slider-row .ant-slider{flex:1;min-width:80px;margin:6px}.ctl-slider-row .ant-slider-with-marks{margin-bottom:24px}.ctl-slider-row:has(.ant-slider-with-marks){align-items:flex-start}.ctl-slider-row:has(.ant-slider-with-marks) .ctl-label{margin-top:3px}.ctl-label{width:58px;color:var(--muted);flex:none;align-items:center;gap:5px;font-size:12px;display:inline-flex}.ctl-value{text-align:center;border-radius:999px;flex:none;min-width:52px;padding:0 10px;font-size:15px;font-weight:700;line-height:24px}.ctl-value small{opacity:.75;margin-left:2px;font-size:11px;font-weight:600}.ctl-value.water{color:#0369a1;background:#e0f2fe}.ctl-value.sound{color:#7e22ce;background:#f3e8ff}.ctl-foot{justify-content:space-between;align-items:center;gap:10px;display:flex}.ctl-actions{grid-template-columns:1fr 1fr;gap:8px;display:grid}.ctl-btn.ant-btn{border-radius:999px;padding-inline:16px;font-weight:600;transition:background .2s,box-shadow .2s,transform .1s}.ctl-btn.ant-btn-sm{height:28px;padding-inline:12px}.ctl-btn.ant-btn:not(:disabled):active{transform:translateY(1px)}.ctl-btn.btn-water:not(:disabled),.ctl-btn.btn-sound:not(:disabled){color:#fff!important;border-color:#0000!important}.ctl-btn.btn-water:not(:disabled){box-shadow:0 2px 8px #0284c747;background:linear-gradient(135deg,#38bdf8,#0284c7)!important}.ctl-btn.btn-water:not(:disabled):hover{box-shadow:0 4px 12px #0284c759;background:linear-gradient(135deg,#0ea5e9,#0369a1)!important}.ctl-btn.btn-sound:not(:disabled){box-shadow:0 2px 8px #9333ea47;background:linear-gradient(135deg,#c084fc,#9333ea)!important}.ctl-btn.btn-sound:not(:disabled):hover{box-shadow:0 4px 12px #9333ea59;background:linear-gradient(135deg,#a855f7,#7e22ce)!important}.ctl-btn.btn-ghost:not(:disabled){background:#fff!important}.ctl-btn.btn-ghost:not(:disabled):hover{color:#7e22ce!important;border-color:#c084fc!important}.ctl-btn.btn-stop:not(:disabled){color:#dc2626!important;background:#fef2f2!important;border-color:#fecaca!important}.ctl-btn.btn-stop:not(:disabled):hover{background:#fee2e2!important;border-color:#fca5a5!important}.ctl-compact .ctl-zone-head{margin-bottom:2px}.map-editing .map-box{outline-offset:-2px;outline:2px dashed #f59e0b}.map-marker.editable{cursor:grab;box-shadow:0 0 0 3px #f59e0b,0 2px 8px #00000059}.k-label{color:#1f2a24;white-space:nowrap;background:#ffffffeb;border-radius:6px;padding:2px 8px;font-size:12px;font-weight:600;box-shadow:0 1px 4px #0003}.k-label.muted{color:#6b7a72;font-weight:500}.k-cam{flex-direction:column;align-items:center;gap:4px;display:flex}.k-vertex{cursor:pointer;border:2px solid #fff;border-radius:50%;width:12px;height:12px;box-shadow:0 1px 3px #0006}.geo-found{color:#15803d;margin:4px 0 2px}.geo-current{background:var(--brand-soft);color:#0f5132;flex-wrap:wrap;align-items:center;gap:2px 6px;margin-bottom:6px;padding:5px 10px;display:flex}.geo-current svg{flex:none}.geo-found.approx{color:#b45309}.farm-chips{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.farm-chip{border:1px solid var(--border);height:32px;color:var(--text);font:inherit;cursor:pointer;background:#fff;border-radius:999px;align-items:center;gap:6px;padding:0 12px;font-size:14px;transition:all .15s;display:inline-flex}.farm-chip .farm-dot{background:var(--c,#16a34a);border-radius:50%;width:10px;height:10px;margin:0}.farm-chip:hover{border-color:#9ccfb0}.farm-chip:focus-visible{outline:2px solid var(--brand);outline-offset:2px}.farm-chip.on{background:var(--brand-soft);border-color:var(--brand);color:#0f5132;font-weight:600}.sensor-group{margin-bottom:18px}.sensor-group-head{align-items:center;gap:8px;margin:2px 0 10px;display:flex}.sensor-group-head .farm-dot{width:12px;height:12px;margin:0}.farm-bar{background:var(--card);border-radius:12px;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px 16px;margin-bottom:16px;padding:10px 16px;display:flex}.farm-map{cursor:crosshair;isolation:isolate;border-radius:10px;height:460px;overflow:hidden}.area-bar{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;margin-bottom:8px;display:flex}.area-chip .area-chip-sub{opacity:.75;margin-left:4px;font-size:11px}.area-no{color:#334155;background:#fff;border:0;border-radius:50%;place-items:center;width:22px;height:22px;padding:0;font-size:12px;font-weight:700;display:grid;box-shadow:0 1px 4px #0000004d}.area-no.on{background:var(--brand);color:#fff}.leaflet-tooltip.area-no{text-align:center;line-height:22px}.leaflet-tooltip.area-no:before{display:none}@media (width<=640px){.farm-map{height:340px}}.farm-pin{width:30px;height:40px;position:relative}.farm-pin:before{content:"";background:var(--c);border:3px solid #fff;border-radius:50% 50% 50% 0;width:24px;height:24px;position:absolute;top:0;left:3px;transform:rotate(-45deg);box-shadow:0 2px 6px #00000059}.farm-pin span{background:#fff;border-radius:50%;width:6px;height:6px;position:absolute;top:9px;left:12px}.farm-label{box-shadow:none;background:#ffffffd9;border:0;padding:1px 6px;font-size:11px}.farm-item{cursor:pointer;border:1px solid var(--border);border-radius:10px;outline:none;margin-bottom:6px;padding:12px 14px}.farm-item:hover,.farm-item:focus-visible{background:var(--bg)}.farm-item.active{background:var(--brand-soft);border-color:#bbe5c8}.farm-dot{border-radius:4px;flex:none;width:12px;height:12px;margin-top:5px}.swatch{width:22px;height:22px;box-shadow:0 0 0 1px var(--border);cursor:pointer;border:2px solid #fff;border-radius:6px;padding:0}.swatch.on{box-shadow:0 0 0 2px var(--text)}.mapping-title{align-items:center;gap:6px;margin-bottom:8px;font-weight:600;display:flex}.ant-transfer{width:100%}.video-box{aspect-ratio:16/9;background:#000;border-radius:10px;position:relative;overflow:hidden}.video-box video{object-fit:contain;transform-origin:50%;will-change:transform;width:100%;height:100%;transition:transform 80ms linear;display:block}.video-box.zoomed{cursor:grab}.video-box.zoomed:active{cursor:grabbing}.video-box{touch-action:none;-webkit-user-select:none;user-select:none}.video-zoom{color:#fff;background:#00000073;border-radius:8px;flex-direction:column;align-items:center;gap:4px;padding:6px 4px;font-size:11px;display:flex;position:absolute;top:50%;right:10px;transform:translateY(-50%)}.video-zoom .ant-btn{background:#ffffffeb}.video-hint{color:#0e7490;background:#ecfeff;align-items:center;gap:6px;margin-top:8px;padding:5px 10px;display:flex}.video-overlay{color:#fff;text-align:left;flex-direction:column;justify-content:center;align-items:center;gap:12px;padding:16px;display:flex;position:absolute;inset:0}.video-badges{position:absolute;top:10px;left:10px}.weather-now{align-items:center;gap:16px;display:flex}.weather-now .temp{font-size:40px;font-weight:700;line-height:1}.weather-days{text-align:center;grid-template-columns:repeat(5,1fr);gap:6px;margin-top:16px;display:grid}.weather-days>div{background:var(--bg);border-radius:10px;padding:8px 4px;font-size:12px}.weather-day-temp{white-space:nowrap;justify-content:center;align-items:center;gap:6px;margin-top:4px;display:flex}.weather-day-temp svg{flex:none}.zone-card.running{border-color:#0ea5e9;box-shadow:0 0 0 2px #0ea5e926}.water-anim{animation:1.2s ease-in-out infinite drip}@keyframes drip{0%,to{transform:translateY(0)}50%{transform:translateY(3px)}}.demo-ribbon{color:#ad6800;background:#fff7e6;border:1px solid #ffd591;border-radius:8px;margin-bottom:16px;padding:8px 12px;font-size:13px}
