@import "https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap";:root{--bg:#f4f6f8;--surface:#fff;--surface-2:#f0f3f6;--border:#d9e0e7;--text:#16202c;--text-muted:#5b6877;--primary:#1f6feb;--primary-dark:#155bc4;--primary-tint:#e6f0ff;--success:#1a8a4a;--success-tint:#e3f6ea;--warning:#b06a00;--warning-tint:#fdeecf;--danger:#d1242f;--danger-tint:#fde3e4;--info:#1f6feb;--info-tint:#e6f0ff;--neutral:#5b6877;--neutral-tint:#eaeef2;--radius:14px;--radius-sm:10px;--radius-lg:20px;--shadow:0 1px 2px #10202c0f, 0 6px 20px #10202c0f;--shadow-lg:0 12px 40px #10202c29;--font:"Inter", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--fs-base:17px;--tap:48px;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}*{box-sizing:border-box}html,body,#root{height:100%}body{font-family:var(--font);font-size:var(--fs-base);color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased;margin:0;line-height:1.5}h1,h2,h3,h4{margin:0;font-weight:700;line-height:1.2}p{margin:0}button{font-family:inherit}a{color:var(--primary)}img{max-width:100%;display:block}.eyebrow{text-transform:uppercase;letter-spacing:.04em;color:var(--text-muted);margin:0 0 .2rem;font-size:.72rem;font-weight:700}.subtle{color:var(--text-muted)}.screen-center{text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:.85rem;min-height:100dvh;padding:2rem 1.25rem;display:flex}.screen-center h2{font-size:1.4rem}.screen-center .subtle{max-width:22rem}.screen-actions{flex-wrap:wrap;justify-content:center;gap:.75rem;margin-top:.5rem;display:flex}.status-icon{background:var(--primary-tint);width:64px;height:64px;color:var(--primary);border-radius:50%;place-items:center;display:grid}.status-icon-danger{background:var(--danger-tint);color:var(--danger)}.spinner{border:4px solid var(--border);border-top-color:var(--primary);border-radius:50%;width:42px;height:42px;animation:.8s linear infinite spin}.spin{animation:.8s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.btn{min-height:var(--tap);border-radius:var(--radius-sm);cursor:pointer;white-space:nowrap;border:1px solid #0000;justify-content:center;align-items:center;gap:.5rem;padding:0 1.15rem;font-size:1rem;font-weight:700;transition:background .15s,border-color .15s,opacity .15s;display:inline-flex}.btn:disabled{opacity:.55;cursor:not-allowed}.btn-primary{background:var(--primary);color:#fff}.btn-primary:hover:not(:disabled){background:var(--primary-dark)}.btn-secondary{background:var(--surface);color:var(--text);border-color:var(--border)}.btn-secondary:hover:not(:disabled){background:var(--surface-2)}.btn-ghost{color:var(--text);background:0 0}.btn-ghost:hover:not(:disabled){background:var(--surface-2)}.btn-danger{background:var(--danger);color:#fff}.btn-danger:hover:not(:disabled){filter:brightness(.95)}.btn-block{width:100%}.btn-lg{min-height:56px;font-size:1.1rem}.icon-button{width:var(--tap);height:var(--tap);border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--surface);color:var(--text);cursor:pointer;place-items:center;display:grid}.icon-button:hover{background:var(--surface-2)}.icon-button.danger-button{color:var(--danger);border-color:var(--danger-tint)}.badge{border:1px solid #0000;border-radius:999px;align-items:center;gap:.35rem;padding:.3rem .7rem;font-size:.85rem;font-weight:700;line-height:1;display:inline-flex}.badge svg{flex-shrink:0}.badge-success{background:var(--success-tint);color:var(--success)}.badge-warning{background:var(--warning-tint);color:var(--warning)}.badge-danger{background:var(--danger-tint);color:var(--danger)}.badge-info{background:var(--info-tint);color:var(--info)}.badge-neutral{background:var(--neutral-tint);color:var(--neutral)}.surface,.panel{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow)}.panel{padding:1.1rem}.page-stack{flex-direction:column;gap:1.1rem;display:flex}.section-title{justify-content:space-between;align-items:center;gap:.75rem;margin-bottom:.9rem;display:flex}.section-title h4{font-size:1.1rem}.page-header{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:1rem;display:flex}.page-header h3{font-size:1.35rem}.page-header-actions,.page-actions{flex-wrap:wrap;gap:.6rem;display:flex}.stats-grid{grid-template-columns:repeat(2,1fr);gap:.85rem;display:grid}.stat-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);flex-direction:column;gap:.5rem;padding:1rem;display:flex}.stat-card-header{justify-content:space-between;align-items:center;display:flex}.stat-card-icon{border-radius:var(--radius-sm);background:var(--surface-2);width:40px;height:40px;color:var(--text-muted);place-items:center;display:grid}.stat-card strong{font-size:2rem;line-height:1}.stat-card p{color:var(--text-muted);font-size:.92rem}.field{flex-direction:column;gap:.35rem;display:flex}.field>span{font-size:.95rem;font-weight:700}.field-input,.field-select,.field-textarea{width:100%;min-height:var(--tap);border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--surface);color:var(--text);padding:.7rem .85rem;font-size:1rem}.field-textarea{resize:vertical;min-height:96px}.field-input:focus,.field-select:focus,.field-textarea:focus,.btn:focus-visible,.icon-button:focus-visible,.nav-link:focus-visible,.mobile-nav-link:focus-visible{outline:3px solid var(--primary);outline-offset:2px}.input-wrap{align-items:center;display:flex;position:relative}.input-wrap>svg{color:var(--text-muted);pointer-events:none;position:absolute;left:.8rem}.input-wrap .field-input{padding-left:2.6rem}.input-wrap .password-toggle{width:40px;height:40px;color:var(--text-muted);cursor:pointer;background:0 0;border:none;place-items:center;display:grid;position:absolute;right:.4rem}.error-banner{background:var(--danger-tint);color:var(--danger);border-radius:var(--radius-sm);padding:.7rem .9rem;font-size:.95rem;font-weight:600}.toggle-field{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface-2);justify-content:space-between;align-items:center;gap:1rem;padding:.85rem;display:flex}.toggle-copy strong{display:block}.switch{background:var(--border);cursor:pointer;border:none;border-radius:999px;flex-shrink:0;width:56px;height:32px;transition:background .15s;position:relative}.switch-on{background:var(--success)}.switch-dot{background:#fff;border-radius:50%;width:26px;height:26px;transition:transform .15s;position:absolute;top:3px;left:3px;box-shadow:0 1px 3px #0000004d}.switch-on .switch-dot{transform:translate(24px)}.modal-backdrop{z-index:50;background:#10202c73;justify-content:center;align-items:flex-end;display:flex;position:fixed;inset:0}.modal-panel{background:var(--surface);border-radius:var(--radius-lg) var(--radius-lg) 0 0;width:100%;max-width:520px;box-shadow:var(--shadow-lg);max-height:92dvh;overflow:auto}.modal-header{justify-content:space-between;align-items:center;gap:1rem;padding:1.1rem 1.1rem .5rem;display:flex}.modal-header h3{font-size:1.2rem}.modal-body{padding:.5rem 1.1rem 1.2rem}.modal-form{flex-direction:column;gap:.9rem;display:flex}.modal-actions{flex-wrap:wrap;justify-content:flex-end;gap:.6rem;margin-top:.4rem;display:flex}@media (width>=720px){.modal-backdrop{align-items:center;padding:1.5rem}.modal-panel{border-radius:var(--radius-lg);max-height:88dvh}}.app-shell{flex-direction:column;min-height:100dvh;display:flex}.sidebar{display:none}.shell-main{flex-direction:column;flex:1;min-width:0;display:flex}.topbar{z-index:20;background:var(--surface);border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;gap:.75rem;padding:.8rem 1rem;display:flex;position:sticky;top:0}.topbar h2{font-size:1.2rem}.topbar-brand{align-items:center;gap:.6rem;display:flex}.brand-mark{background:var(--primary);color:#fff;border-radius:12px;flex-shrink:0;place-items:center;width:42px;height:42px;display:grid}.brand-mark-img{object-fit:contain;flex-shrink:0;width:40px;height:40px}.brand-logo{width:auto;height:36px}.auth-logo{width:auto;height:52px;margin:0 auto}.topbar-actions{align-items:center;gap:.5rem;display:flex}.page-content{flex:1;width:100%;max-width:1100px;margin:0 auto;padding:1rem 1rem calc(72px + 1rem)}.mobile-nav{z-index:30;background:var(--surface);border-top:1px solid var(--border);padding:.3rem .2rem calc(.3rem + env(safe-area-inset-bottom));justify-content:space-around;display:flex;position:fixed;bottom:0;left:0;right:0}.mobile-nav-link{border-radius:var(--radius-sm);min-height:56px;color:var(--text-muted);flex-direction:column;flex:1;justify-content:center;align-items:center;gap:.15rem;padding:.4rem .2rem;font-size:.72rem;font-weight:600;text-decoration:none;display:flex}.mobile-nav-link-active{color:var(--primary);background:var(--primary-tint)}.dashboard-grid{gap:1rem;display:grid}.capture-list,.trap-list,.unit-list,.planta-list{flex-direction:column;gap:.6rem;display:flex}.capture-item{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);align-items:center;gap:.75rem;padding:.75rem;display:flex}.capture-item .capture-icon{background:var(--danger-tint);width:44px;height:44px;color:var(--danger);border-radius:50%;flex-shrink:0;place-items:center;display:grid}.capture-item .capture-copy{flex:1;min-width:0}.capture-item strong{display:block}.capture-item small{color:var(--text-muted)}.trap-card{border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);text-align:left;cursor:pointer;flex-direction:column;gap:.55rem;width:100%;padding:.85rem;display:flex}.trap-card-active{border-color:var(--primary);box-shadow:0 0 0 2px var(--primary-tint)}.trap-card-head{justify-content:space-between;align-items:center;gap:.6rem;display:flex}.trap-card-head strong{font-size:1.05rem}.trap-meta{color:var(--text-muted);flex-wrap:wrap;gap:.5rem 1rem;font-size:.92rem;display:flex}.trap-meta span{align-items:center;gap:.3rem;display:inline-flex}.hist-list{flex-direction:column;gap:.5rem;display:flex}.hist-item{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:.6rem 1rem;padding:.7rem .85rem;display:flex}.event-item{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);flex-direction:column;gap:.6rem;padding:.85rem;display:flex}.event-head{align-items:center;gap:.7rem;display:flex}.event-head strong{display:block}.event-head .subtle{align-items:center;gap:.3rem;display:inline-flex}.event-icon{border-radius:50%;flex-shrink:0;place-items:center;width:40px;height:40px;display:grid}.event-icon-danger{background:var(--danger-tint);color:var(--danger)}.event-icon-info{background:var(--info-tint);color:var(--info)}.event-icon-neutral{background:var(--neutral-tint);color:var(--neutral)}.event-action{background:var(--warning-tint);color:var(--warning);border-radius:var(--radius-sm);align-items:center;gap:.5rem;padding:.6rem .8rem;font-size:.92rem;font-weight:600;display:flex}.pager{justify-content:space-between;align-items:center;gap:.75rem;margin-top:.9rem;display:flex}.pager span{color:var(--text-muted);text-align:center;font-size:.9rem;font-weight:600}.metric-stat{align-items:center;gap:.3rem;font-weight:600;display:inline-flex}.metric-success{color:var(--success)}.metric-warning{color:var(--warning)}.metric-danger{color:var(--danger)}.version-chip{color:var(--text-muted);background:var(--surface-2);border-radius:999px;align-items:center;gap:.3rem;padding:.18rem .6rem;font-size:.78rem;font-weight:600;display:inline-flex}.chip-row{flex-wrap:wrap;gap:.5rem;display:flex}.chip{border:1.5px solid var(--border);background:var(--surface);min-height:40px;color:var(--text);cursor:pointer;border-radius:999px;padding:0 .95rem;font-size:.9rem;font-weight:700}.chip:hover{background:var(--surface-2)}.chip-active{color:#fff;border-color:#0000}.chip-active.chip-all{background:var(--primary)}.chip-active.chip-captured,.chip-active.chip-offline,.chip-active.chip-low_battery{background:var(--danger)}.chip-active.chip-ok{background:var(--success)}.filter-row{flex-wrap:wrap;gap:.75rem;margin-bottom:.8rem;display:flex}.filter-row .field{flex:1;min-width:170px}.trap-grid{grid-template-columns:1fr;gap:.85rem;display:grid}.trap-card-static{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);flex-direction:column;gap:.75rem;min-width:0;padding:1rem 1.1rem;display:flex}.trap-card-static .trap-card-head strong{overflow-wrap:anywhere;flex:1;min-width:0;font-size:1.1rem}.trap-card-head{min-width:0}.trap-card-head .badge{white-space:nowrap;flex-shrink:0}.trap-card-actions{align-items:center;gap:.5rem;display:flex}.trap-card-actions>.btn{flex:1}.kebab{flex-shrink:0;position:relative}.kebab-menu{z-index:40;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-sm);min-width:170px;box-shadow:var(--shadow-lg);flex-direction:column;gap:.15rem;padding:.3rem;display:flex;position:absolute;top:calc(100% + 6px);right:0}.kebab-item{width:100%;min-height:46px;color:var(--text);cursor:pointer;text-align:left;background:0 0;border:none;border-radius:8px;align-items:center;gap:.55rem;padding:0 .7rem;font-size:1rem;font-weight:600;display:flex}.kebab-item:hover{background:var(--surface-2)}.kebab-item-danger{color:var(--danger)}.stat-card-action{color:var(--primary);align-items:center;gap:.3rem;margin-top:auto;padding-top:.3rem;font-size:.92rem;font-weight:700;text-decoration:none;display:inline-flex}.stat-card-action:hover{text-decoration:underline}.page-header-text{min-width:0}.map-toolbar{flex-wrap:wrap;align-items:flex-end;gap:.75rem;padding:.9rem;display:flex}.map-toolbar .field{flex:1;min-width:180px}.planta-stage{background:var(--surface-2);border:1px solid var(--border);border-radius:var(--radius);touch-action:manipulation;width:100%;position:relative;overflow:hidden}.planta-stage.is-placing{cursor:crosshair;outline:3px dashed var(--primary);outline-offset:-3px}.planta-image{-webkit-user-select:none;user-select:none;-webkit-user-drag:none;width:100%;height:auto;display:block}.planta-empty{min-height:260px;color:var(--text-muted);text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:.6rem;padding:1.5rem;display:flex}.trap-pin{color:#fff;cursor:pointer;border:3px solid #fff;border-radius:999px;justify-content:center;align-items:center;gap:.2rem;min-width:38px;height:38px;padding:0 .35rem;font-size:.85rem;font-weight:800;display:inline-flex;position:absolute;transform:translate(-50%,-50%);box-shadow:0 2px 8px #00000059}.trap-pin-captured{background:var(--danger);--pulse:#d1242f80;animation:1.4s ease-out infinite pin-pulse}.trap-pin-ok{background:var(--success);--pulse:#1a8a4a80;animation:1.7s ease-out infinite pin-pulse}.trap-pin-low_battery,.trap-pin-offline{background:var(--danger)}.trap-pin-unknown{background:var(--neutral)}.trap-pin-selected{outline:3px solid var(--primary);outline-offset:2px}.planta-stage.is-placing .trap-pin{pointer-events:none}.pin-alert{width:18px;height:18px;color:var(--warning);background:#fff;border-radius:50%;place-items:center;display:grid;position:absolute;top:-7px;right:-7px;box-shadow:0 1px 3px #00000059}.nav-dot{background:var(--danger);border:2px solid var(--surface);border-radius:50%;width:10px;height:10px;position:absolute;top:-4px;right:-8px}@keyframes pin-pulse{0%{box-shadow:0 2px 8px #00000059, 0 0 0 0 var(--pulse,transparent)}70%{box-shadow:0 2px 8px #00000059,0 0 0 14px #0000}to{box-shadow:0 2px 8px #00000059,0 0 #0000}}.legend{flex-wrap:wrap;gap:.5rem 1rem;padding:.75rem .9rem;display:flex}.legend-item{color:var(--text-muted);align-items:center;gap:.4rem;font-size:.9rem;display:inline-flex}.legend-dot{border-radius:50%;width:14px;height:14px}.legend-dot.is-pulse{animation:1.4s ease-in-out infinite blink}@keyframes blink{0%,to{opacity:1}50%{opacity:.3}}.map-filter{padding:.7rem .9rem}.detail-grid{grid-template-columns:repeat(2,1fr);gap:.6rem;display:grid}.detail-box{background:var(--surface-2);border-radius:var(--radius-sm);padding:.7rem}.detail-box span{color:var(--text-muted);font-size:.85rem;display:block}.detail-box strong{font-size:1.15rem}.planta-grid{grid-template-columns:1fr;gap:1rem;display:grid}.planta-card{flex-direction:column;padding:0;display:flex;overflow:hidden}.planta-thumb{aspect-ratio:16/10;background:var(--surface-2);color:var(--text-muted);place-items:center;display:grid;overflow:hidden}.planta-thumb img{object-fit:cover;width:100%;height:100%}.planta-card-body{flex-direction:column;gap:.5rem;padding:.9rem;display:flex}.list-row{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);justify-content:space-between;align-items:center;gap:.75rem;padding:.85rem;display:flex}.list-row-main{align-items:center;gap:.7rem;min-width:0;display:flex}.list-row-icon{border-radius:var(--radius-sm);background:var(--primary-tint);width:44px;height:44px;color:var(--primary);flex-shrink:0;place-items:center;display:grid}.row-actions{gap:.4rem;display:flex}.table-wrap{display:none}.data-table{border-collapse:collapse;width:100%}.data-table th,.data-table td{text-align:left;border-bottom:1px solid var(--border);padding:.7rem .6rem}.data-table th{color:var(--text-muted);text-transform:uppercase;letter-spacing:.03em;font-size:.85rem}.responsive-cards{flex-direction:column;gap:.6rem;display:flex}.segmented-control{background:var(--surface-2);border-radius:var(--radius-sm);gap:.2rem;padding:.2rem;display:inline-flex}.segmented-control button{min-height:40px;color:var(--text-muted);cursor:pointer;background:0 0;border:none;border-radius:8px;align-items:center;gap:.35rem;padding:0 .85rem;font-weight:700;display:inline-flex}.segmented-control button.is-active{background:var(--surface);color:var(--primary);box-shadow:var(--shadow)}.empty-state{text-align:center;color:var(--text-muted);flex-direction:column;align-items:center;gap:.6rem;padding:2.2rem 1.25rem;display:flex}.empty-state .status-icon{margin-bottom:.3rem}.hint-banner{background:var(--info-tint);color:var(--info);border-radius:var(--radius-sm);align-items:center;gap:.6rem;padding:.7rem .9rem;font-size:.95rem;font-weight:600;display:flex}.auth-layout{background:linear-gradient(160deg, var(--primary-tint), var(--bg));justify-content:center;align-items:center;min-height:100dvh;padding:1.25rem;display:flex}.auth-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);width:100%;max-width:420px;padding:1.6rem 1.4rem}.auth-brand{text-align:center;flex-direction:column;align-items:center;gap:.6rem;margin-bottom:1.4rem;display:flex}.auth-brand .brand-mark{border-radius:16px;width:56px;height:56px}.auth-brand h1{font-size:1.5rem}.auth-form{flex-direction:column;gap:1rem;display:flex}@media (width>=720px){.stats-grid{grid-template-columns:repeat(4,1fr)}.dashboard-grid{grid-template-columns:1fr 1fr}.planta-grid{grid-template-columns:repeat(2,1fr)}.table-wrap{display:block;overflow-x:auto}.responsive-cards{display:none}.monitor-grid{grid-template-columns:2fr 1fr;align-items:start;gap:1rem;display:grid}}@media (width>=900px){.app-shell{flex-direction:row}.sidebar{background:var(--surface);border-right:1px solid var(--border);flex-direction:column;flex-shrink:0;gap:1rem;width:270px;height:100dvh;padding:1.1rem;display:flex;position:sticky;top:0}.sidebar-brand{align-items:center;gap:.7rem;display:flex}.sidebar-brand h1{font-size:1.15rem}.sidebar-org{background:var(--surface-2);border-radius:var(--radius-sm);align-items:center;gap:.6rem;padding:.7rem;display:flex}.sidebar-org .avatar{background:var(--primary);color:#fff;border-radius:50%;flex-shrink:0;place-items:center;width:40px;height:40px;font-weight:700;display:grid}.sidebar-org strong{display:block}.sidebar-org p{color:var(--text-muted);font-size:.85rem}.sidebar-nav{flex-direction:column;flex:1;gap:.3rem;display:flex}.nav-link{min-height:var(--tap);border-radius:var(--radius-sm);color:var(--text);align-items:center;gap:.7rem;padding:0 .85rem;font-weight:600;text-decoration:none;display:flex}.nav-link:hover{background:var(--surface-2)}.nav-link-active{background:var(--primary-tint);color:var(--primary)}.sidebar-footer{flex-direction:column;gap:.6rem;display:flex}.mobile-nav,.topbar{display:none}.trap-grid{grid-template-columns:repeat(2,1fr)}.page-content{padding:1.5rem}}@media (prefers-reduced-motion:reduce){*{animation:none!important}}
